Giter Club home page Giter Club logo

karrio's People

Contributors

codeartisanry avatar danh91 avatar danieloaks avatar darkswoop avatar delalisk avatar dependabot[bot] avatar gitter-badger avatar iyzairi avatar jacobshilitz avatar nahall avatar rcknr avatar turbobot-temp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

karrio's Issues

Integrate autocomplete + address validation powered by OpenCage

Is your feature request related to a problem? Please describe.
As a privacy-first business, the Google Geocoding API may cause privacy concerns to my customers.

Describe the solution you'd like
I propose the integration possibility to use alternative solutions that are more privacy-friendly

Describe alternatives you've considered
OpenCage is mature and very accurate to handle address validations. Could be an ideal alternative to the Google Geocoding API usage

Additional context

OpenCage website https://opencagedata.com/
Pricing compared to Google Geocoding https://opencagedata.com/reducing-your-google-geocoding-costs

Shipping document upload API (Electronic Trade document)

Hello,
I apologize if this is answered elsewhere, I did made a search but I may have overlooked it. I am new to purplship and also still trying to understand the concepts behind shipping API's.

Is your feature request related to a problem? Please describe.
I wonder if the upload of trade documents is supported by the purplship package. I could find no reference in the documentation.

Describe the solution you'd like
I am looking for a implementation of what it is described here:
https://developertest.fedex.com/api/en-nl/catalog/upload-documents/v1/docs.html

Thank you for all the efforts put in this package!!! I do know how much time it takes...

Bug where package.weight.map(MeasurementOptions).KG would round down to 0 when making a conversion to kg failing canadapost rate request

Describe the bug
Bug where package.weight.map(MeasurementOptions).KG would round down to 0 when making a conversion to kg failing Canada post rate request

To Reproduce
Steps to reproduce the behavior:

Make a Canada post rate request with a smaller weight than 0.1 kg.

fix

Change providers.canadapost.units:

MeasurementOptions = MeasurementOptionsType(quant=0.01, min_kg=0.01)

I have a fix on a branch but I'm not allowed to make de pull request.

[insiders] Add GraphQL mutations for organization user management and user invitation

Is your feature request related to a problem? Please describe.
There are know convenient ways of adding or inviting a user to join an organization

Describe the solution you'd like
A set of GraphQL queries and mutations to retrieve users and invitations from an organization, send and cancel invitations.
This will allow the integration of user management from the dashboard.

Describe alternatives you've considered
Currently, the only way to add users to an organization is by adding them manually from the admin console.

[carrier-integration | interoperability] Stamps carrier integration

Is your feature request related to a problem? Please describe.
karrio currently doesn't support Stamps services. Some users uses Stamps to purchase USPS label because of negotiated rates with stamps.

Describe the solution you'd like
Integrate karrio with Stamps API

Additional context
Stamps API Documentation
Obtain API Keys

Upvote & Fund

  • We're using Polar.sh so you can upvote and help fund this issue.
  • We receive the funding once the issue is completed & confirmed by you.
  • Thank you in advance for helping prioritize & fund our backlog.
Fund with Polar

[carrier-integration] Aramex - Get Rates and Buy labels

Is your feature request related to a problem? Please describe.

It is currently possible to track shipment serviced by Aramex. I did like to be able to the purplship SDK
fetch live rates for shipments and buy labels.

Upvote & Fund

  • We're using Polar.sh so you can upvote and help fund this issue.
  • We receive the funding once the issue is completed & confirmed by you.
  • Thank you in advance for helping prioritize & fund our backlog.
Fund with Polar

[carrier-integration] Deutsche Post International

Is your feature request related to a problem? Please describe.

It is currently possible to track shipments serviced by Deutsche Post using the DHL Universal integration. I did like to be able to the purplship SDK fetch live rates for shipments within Germany and internationally and buy labels.

Upvote & Fund

  • We're using Polar.sh so you can upvote and help fund this issue.
  • We receive the funding once the issue is completed & confirmed by you.
  • Thank you in advance for helping prioritize & fund our backlog.
Fund with Polar

Standardize Hold at location option for supported carriers

Is your feature request related to a problem? Please describe.
Though Karrio offers the possibility to forward any options offered by shipping carrier APIs,
some common options are nice to interact with when they are added to the standardized common Karrio shipping options.
Currently, "hold at location" is not standardized

Describe the solution you'd like
Add support for "hold at location" to the unified Karrio shipping option.

Webhook signature / authentication

Is your feature request related to a problem? Please describe.
Currently, the webhook sends a request that can be impersonated without any distinctive authentication or signature.
That is not a good practice.

Describe the solution you'd like
We should have a header that ensures the authenticity of the event origin similar to Stripe secret header

Describe alternatives you've considered
It is currently possible to use a query string to do something like that is not the most secure.

Additional context
https://stripe.com/docs/webhooks/signatures

Purplship Carrier Integration Preparation Guidelines

Introduction

Purplship is a multi-carrier API integration SDK that brings carrier API under a unified interface.
To achieve that goal, Purplship relies on a set of components assembled to simplify the integration process.

Steps

  • Retrieve Shipping Carrier API Docs
  • Collect API Endpoints Data Schemas
  • Generate a Python Data Types Library
  • Setup a Purplship Extension (Plugin) package

1. Retrieve Carriers API References

Find any docs provided by the shipping carrier that outlines the APIs specifications.

Note that some carrier may require that you subscribe to a dev platform

2. Collect API Endpoints Data Schemas

The goal of this step is to come up with a set of schemas that describes what the carrier expects in terms of input and output.

The shipping carriers APIs come in these variant formats:

XML based API

SOAP with .wsdl schemas

When you are dealing with WSDL files, extract the all <xs:schema>...<xs:schema> blocks located under the <wsdl:types>...</wsdl:types> block into .xsd files.

Note that you will need to copy the namespaces definitions from <wsdl:definitions ...> header to <xs:schema ...>

We will also help you validate your schemas when you submit a PR below

Example:

campar-wsdl sample

  • The red line outline the namespaces that need to be copied over
  • The blue lines outline the schemas that need to be copied into their dedicated files

The resulting .xsd schema file looks like this:

Screen Shot 2021-02-06 at 5 24 14 PM

SOAP with .xsd schemas

If the carrier provides .xsd files, you have literally nothing to do. That's good news, download them and move to the next step.

XML samples without schemas

Collect all XML samples for each request and response you want to integrate and use a platform like the freeformatter xsd-generator to generate .xsd schema files from the various samples.

Generating schemas from XML sample

Screen Shot 2021-02-06 at 5 28 24 PM

JSON based API

REST with .json samples

REST with .json OpenAPI schemas

JSON samples without schemas

3. Generate a Python Data Types Library

Once you have the set of APIs schemas you want to support, it's time to transform them into Python classes.

  • For JSON based API, quicktype is a simple tool that will transform your .json schema files into Python classes

Generating Python code with quicktype.io

Screen Shot 2021-02-06 at 5 06 14 PM

  • For XML based API, generateDS is a simple tool that will transform your .xsd schema files input Python classes

Generating Python code with generateDs

Then

4. Setup a Purplship Extension (Plugin) package

After those things are ready, the integration process is fairly straight forward expressing service request
in Python code.

Configurable currency preference support

Is your feature request related to a problem? Please describe.
International carriers return monetary values in the currency of the shipment origin or default to USD and that can lead to inconsistencies

Describe the solution you'd like
It would be great to have a way of configuring preferred currency per system or per organization. So that returned monetary values are consistent for a user.

[security] Add support for 2FA

Is your feature request related to a problem? Please describe.
Two factor authentication is best practice and a must these days.

Describe the solution you'd like
Add 2FA support for the current user login

[carrier-integration] UPS Ground services

Is your feature request related to a problem? Please describe.
Missing UPS ground services for shipment

Describe the solution you'd like
Add a purplship-sdk extension for UPS Ground or augment the current purplship.ups integration to support UPS Ground services

Widely used carriers list to prioritize carrier integration

  • AmazonMws
  • APC
  • Aramex (still to check if this supports tracking for global tracking numbers or just a certain region)
  • Asendia
  • Asendia USA
  • Australia Post (tracking implemented)
  • AxlehireV3
  • Better Trucks
  • Bond
  • Bluedart
  • Cainiao
  • Canada Post
  • Canpar
  • CDL Last Mile Solutions
  • Chronopost
  • CloudSort
  • Courier Express
  • CouriersPlease
  • Dai Post
  • Deutsche Post
  • Deutsche Post UK
  • DHL eCommerce Asia
  • DHL eCommerce Solutions
  • DHL Express
  • DHL Poland (pickup not implemented)
  • DHL Universal (tracking implemented)
  • Dicom (tracking implemented)
  • DPD
  • DPD UK
  • Delhivery
  • ePost Global
  • EMS Post China
  • Estafeta
  • Fastway
  • FedEx
  • FedEx Cross Border
  • FedEx Mailview
  • FedEx Sameday City
  • FedEx SmartPost
  • FirstMile
  • Globegistics
  • GSO
  • Hermes
  • ICS Courier (pickup not implemented)
  • Interlink Express
  • JP Post
  • Kuroneko Yamato
  • La Poste
  • LaserShip
  • Loomis Express
  • LSO
  • Newgistics
  • OnTrac
  • Osm Worldwide
  • Parcelforce
  • Passport
  • PCF Final Mile
  • PostNL
  • Purolator
  • Royal Mail (tracking implemented)
  • SEKO OmniParcel
  • Sendle
  • SF Express
  • Spee-Dee
  • StarTrack
  • TForce
  • TNT
  • UDS
  • UPS
  • UPS Ground
  • UPS i-Parcel
  • UPS Mail Innovations
  • USPS
  • USPS International
  • Veho
  • XpressBees
  • Yanwen

Update by @danh91: You can now get your carrier integrations prioritized and added by sponsoring (you or your company) the development and maintenance of the extensions.

  • Check out the specific carrier integration issues here
  • Open a dedicated issue for your carrier if it is missing and we will add a bounty to it
  • Also consider sponsoring Karrio here

Learn more about Karrio's moving to sponsorware here

Inconsistent requirements/validations between the API serializers and model serializers

Describe the bug
Some requirements such as Charfield max size or formating are not validated upfront on the API.
The consequence is that one might pass the validation to create a shipment with let's say an organization name of more than 50 characters get rates and only fail to persist the data due to a failed model validation.
This can put the server in an invalid state

Expected behaviour
Get API serializer requirement validations that reflect the related model's requirements.

API healthcheck endpoint

Is your feature request related to a problem? Please describe.

There is currently no endpoint available to collect the health status of the Purplship API.
That can be a limitation for deployment on certain cloud platforms that require a health check endpoint to ensure the successful deployment of a purplship server instance.

Describe the solution you'd like

An API endpoint displaying the server status:

  • Database connection
  • Static files availability
  • Response to a ping...
  • Any other relevant details

Describe alternatives you've considered

As a workaround, /login/ page could be used for health check until then

[abstraction] Introduce an "options" field for package level insurance

Is your feature request related to a problem? Please describe.
I am currently unable to specify an insurance coverage value for a single specific package when I use Multi-piece shipment.
The current insurance value is applied at the shipment level instead of package. That works for single package shipments only.

Describe the solution you'd like
In fact, it seems that insurance should be completely moved from the shipment to the package instead.

CSV orders imports

Is your feature request related to a problem? Please describe.

Integrate a way to import multiple orders at once into purplship-server for fulfillment.
This will allow batch processing (meaning a large volume of shipment processed at once)

Describe the solution you'd like

I did like to be able to export orders from my platform (ERP, marketplace, eCommerce...) in a CSV file and import them in purplship for fulfilment.

Purolator tracking scan times are incorrectly parsed

The times reported in a TrackingEvent from Purolator seem to be incorrectly parsed as seconds instead of the HHMMSS format Purolator weirdly uses.

This is the debug output to console for the tracking number I am testing with (note the <ScanTime>100625</ScanTime>):

       <Scan i:type="DeliveryScan">
            <ScanType>Delivery</ScanType>
            <PIN>
                <Value>607460066279</Value>
            </PIN>
            <Depot>
                <Name>130 IBER RD, STITTSVILLE, ON, K2S1E9</Name>
            </Depot>
            <ScanDate>2021-01-25</ScanDate>
            <ScanTime>100625</ScanTime>
            <Description>Shipment delivered</Description>
            <Comment/>
            <SummaryScanIndicator>false</SummaryScanIndicator>
            <ScanDetails>
                <DeliverySignature>LYY</DeliverySignature>
                <SignatureImage/>
                <SignatureImageSize>0</SignatureImageSize>
                <SignatureImageFormat>GIF</SignatureImageFormat>
                <DeliveryAddress>STITTSVILLE, ON</DeliveryAddress>
                <DeliveryCompanyName/>
                <PremiumServiceText>Not known or specified</PremiumServiceText>
                <ProductTypeText>Regular</ProductTypeText>
                <SpecialHandlingText/>
                <PaymentTypeText>Sender</PaymentTypeText>
            </ScanDetails>
        </Scan>

And here is the TrackingEvent object that is returned (note the time='03:57':

TrackingEvent(date='2021-01-25', description='Shipment delivered', location='130 IBER RD, STITTSVILLE, ON, K2S1E9', code='Delivery', time='03:57')

And here is what the Purolator website shows:
image

I poked around in the code, and it seems like it may be treating 100625 as seconds instead of HHMMSS?

Unified tracking status

Is your feature request related to a problem? Please describe.
purplship currently returns a list for tracking events from carriers with different event codes and different meanings.

Describe the solution you'd like
Define a unified tracking status across carriers that will sum up the meaning of the latest tracking event code.

Describe alternatives you've considered
Currently need to check the meaning of the tracking event code per carrier to determine when there is an issue.

Additional context
e.g. of status

  • delivered
  • in-transit
  • blocked
  • out-for-delivery
  • ...

Multi-piece shipment support for carriers that don't support it by default

Is your feature request related to a problem? Please describe.
Currently, some carriers such as FedEx support multi-piece shipment whereas others (Canada post...) do not.

Describe the solution you'd like
Integrate Multi-piece support for all carriers and define a unified abstraction for future carrier integrations

Describe alternatives you've considered
Currently, I can get rates and buy labels for multi-piece shipments carriers that have built-in support and manually create multiple single parcel shipments for the rest.

One-Call Buy shipment label request

Is your feature request related to a problem? Please describe.
Sometimes, I know exactly the carrier service I am interested in and since we know the costs in advance,
we want to be able to buy labels with a single API request

Describe the solution you'd like
It would be nice and simple to make a call to POST /v1/shipments with a carrier service_code to buy a label
in a single request.

Describe alternatives you've considered
Currently, I need to make a request to create an empty shipment then send a second call to buy it.

[carrier-integration] Amazon MWS beta carrier integration

Is your feature request related to a problem? Please describe.
karrio currently doesn't support AmazonMws services

Describe the solution you'd like
Integrate karrio with the AmazonMws API

Additional context
AmazonMws API documentation links:

[bug] Order created in test mode prevent order_id reuse in live mode

Describe the bug
Creating order in test mode prevents the use of the same order_id in live

To Reproduce
Steps to reproduce the behavior:

  1. Create an order setting test_mode to True
  2. Try to create the same order with test_mode to False
  3. You get an error saying that an order from the same source and order_id already exists

Expected behavior
I would expect the validation to apply on a specific mode only.
Meaning one should be allowed to create an order in test_mode and reuse the same order_number in live mode.

[feature] Shipping Manifest

Is your feature request related to a problem? Please describe.
I believe the ability to generate shipping manifests for large volume processing is very important

Describe the solution you'd like
Add support for shipping manifest generation for supported carriers and a multi-carrier option from Karrio would be very valuable.

Could not import 'karrio.server.core.authentication.TokenBasicAuthentication'

Describe the bug
I followed the installation steps from here: https://docs.karrio.io/installation, but the server throws the following exception ImportError: Could not import 'karrio.server.core.authentication.TokenBasicAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ModuleNotFoundError: No module named 'yaml'.

To Reproduce
Steps to reproduce the behavior:

  1. Create .env file with these values
DEBUG_MODE=True
ALLOWED_HOSTS=*
DATABASE_HOST=db
DATABASE_PORT=5432
DATABASE_NAME=db
DATABASE_USERNAME=postgres
DATABASE_PASSWORD=postgres
DETACHED_WORKER=False
  1. Create docker-compose.yml file
version: '3'

services:
  karrio:
    container_name: karrio
    image: karrio/server:2022.6
    restart: unless-stopped
    ports:
      - "5002:5002"
    env_file: .env
    depends_on:
      - db
    networks:
      - db_network
      - web_network
    volumes:
      - karriostatics:/karrio/static

  dashboard:
    container_name: dashboard
    image: karrio/dashboard:2022.6
    ports:
      - "3000:3000"
    environment:
      - 'NEXT_PUBLIC_KARRIO_API_URL=http://host.docker.internal:5002'
      - 'NEXTAUTH_URL=http://host.docker.internal:3000'
      - JWT_SECRET="n*s-ex6@ex_r1i%bk=3jd)p+lsick5bi*90!mbk7rc3iy_op1r"
    networks:
      - web_network

  db:
    container_name: db
    image: postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: "db"
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: "postgres"
      PGDATA: /var/lib/postgresql/data/sandbox
    networks:
      - db_network

volumes:
  karriostatics:
  karrio-db:

networks:
  db_network:
  web_network:
  1. Run docker-compose up

Entire log

karrio     | Traceback (most recent call last):
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/rest_framework/settings.py", line 177, in import_from_string
karrio     |     return import_string(val)
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/django/utils/module_loading.py", line 17, in import_string
karrio     |     module = import_module(module_path)
karrio     |   File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
karrio     |     return _bootstrap._gcd_import(name[level:], package, level)
karrio     |   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
karrio     |   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
karrio     |   File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
karrio     |   File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
karrio     |   File "<frozen importlib._bootstrap_external>", line 843, in exec_module
karrio     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/karrio/server/core/authentication.py", line 1, in <module>
karrio     |     import yaml
karrio     | ModuleNotFoundError: No module named 'yaml'
karrio     |
karrio     | During handling of the above exception, another exception occurred:
karrio     |
karrio     | Traceback (most recent call last):
karrio     |   File "/karrio/venv/bin/karrio", line 8, in <module>
karrio     |     sys.exit(main())
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/karrio/server/__main__.py", line 17, in main
karrio     |     execute_from_command_line(sys.argv)
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
karrio     |     utility.execute()
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
karrio     |     django.setup()
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/django/__init__.py", line 24, in setup
karrio     |     apps.populate(settings.INSTALLED_APPS)
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/django/apps/registry.py", line 114, in populate
karrio     |     app_config.import_models()
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/django/apps/config.py", line 301, in import_models
karrio     |     self.models_module = import_module(models_module_name)
karrio     |   File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
karrio     |     return _bootstrap._gcd_import(name[level:], package, level)
karrio     |   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
karrio     |   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
karrio     |   File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
karrio     |   File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
karrio     |   File "<frozen importlib._bootstrap_external>", line 843, in exec_module
karrio     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/karrio/server/graph/models.py", line 5, in <module>
karrio     |     from karrio.server.manager.models import Customs, Parcel, Address
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/karrio/server/manager/models.py", line 8, in <module>
karrio     |     from karrio.server.core.utils import identity
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/karrio/server/core/utils.py", line 14, in <module>
karrio     |     from karrio.server.core import datatypes, serializers
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/karrio/server/core/serializers.py", line 2, in <module>
karrio     |     from drf_yasg import openapi
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/drf_yasg/openapi.py", line 11, in <module>
karrio     |     from .utils import dict_has_ordered_keys, filter_none, force_real_str
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/drf_yasg/utils.py", line 17, in <module>
karrio     |     from rest_framework.views import APIView
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/rest_framework/views.py", line 17, in <module>
karrio     |     from rest_framework.schemas import DefaultSchema
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/rest_framework/schemas/__init__.py", line 33, in <module>
karrio     |     authentication_classes=api_settings.DEFAULT_AUTHENTICATION_CLASSES,
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/rest_framework/settings.py", line 225, in __getattr__
karrio     |     val = perform_import(val, attr)
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/rest_framework/settings.py", line 168, in perform_import
karrio     |     return [import_from_string(item, setting_name) for item in val]
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/rest_framework/settings.py", line 168, in <listcomp>
karrio     |     return [import_from_string(item, setting_name) for item in val]
karrio     |   File "/karrio/venv/lib/python3.8/site-packages/rest_framework/settings.py", line 180, in import_from_string
karrio     |     raise ImportError(msg)
karrio     | ImportError: Could not import 'karrio.server.core.authentication.TokenBasicAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ModuleNotFoundError: No module named 'yaml'.
karrio exited with code 1

Update Tracking event response to have a separate object for location.

Currently, the tracking event contains a single key for the location information on each event.

{
      ... tracking details
      "events": [
        {
          "date": "string",
          "description": "string",
          "location": "string",
          "code": "string",
          "time": "string"
        }
      ],
      ... deliver details
    }
  ]
}

This will need to be a separate object to have more information about the location of the event.

{
      ... tracking details
      "events": [
        {
          "date": "string",
          "description": "string",
          "location": {
                "city": "string",
                "state": "string",
                "zipcode": "string",
                "country": "string",
                "geocoding": {
                      "latitude": "string",
                      "longitude": "string",
                }
           },
          "code": "string",
          "time": "string"
        }
      ],
      ... deliver details
    }
  ]
}

The geocoding object can be done through either open-source integrations with geonames.org or through proprietary integrations like Google Geocoding or Maxmind databases. Based on how it is hosted.

[feature] User preference

Is your feature request related to a problem? Please describe.
There are no ways to personalize Karrio with preferences such as default dimension units and such.

Describe the solution you'd like
Allow the user to configure preferences and improve their experience,

[carrier-integration] Sendle - Get Rates and Buy Label

Is your feature request related to a problem? Please describe.

It is currently possible to track shipment serviced by Sendle. I did like to be able to the purplship SDK
fetch live rates for shipments within Australia and buy labels.

[devX] Switch from flag to API Key for karrio test mode

Is your feature request related to a problem? Please describe.
It is confusing as a dev getting started with the karrio API to understand how to send API requests in test mode and play with carrier sandbox/test servers.

Describe the solution you'd like
Instead of using test flags in requests query strings to make calls in test mode, use test API keys like Stripe.
It is more explicit and more familiar.

Bill Third-Party for FedEx and UPS

Is your feature request related to a problem? Please describe.
Right now, there is no option to bill third-party accounts for UPS or FedEx. (Note: When billing third-party accounts, the rates of shipping cannot be pulled from carrier API so if this is implemented, the buying of shipping labels might have to be rethought.)

Describe the solution you'd like
Add feature to allow third-party billing.

Additional context
Third-party billing implementation on a similar app.
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.