carpal

0.3.86 • Public • Published

JavaScript-SDK

The JavaScript SDK for developers(including third party developers/vendors) to create custom modules by using Carpal Fleet core services.

Alt text

The SDK is under active development, we will release the latest version to npm as soon as we have new services ready.

Use npm tag for publishing.

Example. npm publish --tag dev OR alpha

Install SDK Alpha Version

npm i --save carpal@alpha

Install SDK Dev Version

npm i --save carpal@dev

If you were using webpack and had encountered the regeneratorRuntime is not defined error, you may need to include babel-polyfill to your project(npm install --save babel-polyfill). For more info, you can find it from here https://stackoverflow.com/questions/33527653/babel-6-regeneratorruntime-is-not-defined

We only tested it with ES6, theoretically it should work with ES5. Use it at your own risk for ES5.

Algo

Module Method Description
carpal/dist/algo/Routing getRouteSettingAsync({identityId, productTypeId, transactionGroupId}, token) This returns a Promise object (reject/resolve).
Example. identityId (mandatory)(int) = 1
**productTypeId (mandatory)(integer) = 3

**transactionGroupId (mandatory)(integer) = 1**
carpal/dist/algo/Routing getRouteSettingsAsync(token) This returns a Promise object (reject/resolve).
Example. date (mandatory)(string) = '2018-02-28'
**routeSettingId (mandatory)(integer) = 124**
**routingScope (mandatory)(string) = 'all'**

Account

Module Method Description
carpal/dist/data/account/Auth getTokenAsync(email, password, clientId, secret) This returns a Promise object with both access token and refresh token.
carpal/dist/data/account/Auth refreshTokenAsync(refreshToken, clientId, secret) This returns a Promise object with both new access token and refresh token by using existing refresh token.
carpal/dist/data/account/Account resetPasswordRequestAsync(email) This will call the email service to send out a link and return a Promise object with true/false
carpal/dist/data/account/Account resetPasswordAsync(token, email, password, confirmPassword) This will actually update a user's password and return a Promise object with true/false
carpal/dist/data/account/Account validateResetPasswordTokenAsync(token) This returns a Promise object, if return true the token is valid, otherwise an error occurs.

Customer

Module Method Description
carpal/dist/data/customer/Customer createNewCustomerAsync(customerObj) This returns a Promise object with true/false for registration result. The customerObj payload example {email:'xxx@example.com', password: '123456', firstName:'John', lastName:'Lennon', phone:'+6512345678', birthday:'d-m-y', identityId:1, coName:'ABC Pte ltd', coPhone:'+6512345678', coVatNo:'xxxxxx'}
carpal/dist/data/customer/Setting getCustomerPreferenceSettingsAsync(domain, token) This returns a Promise object with Logo and Background Image URL for Customer
carpal/dist/data/customer/Setting getSettingAsync(settingId, {identityId, productTypeId, transactionGroupId}, token) This returns a Promise object (reject/resolve).
Example. identityId (mandatory)(int) = 1
**productTypeId (mandatory)(integer) = 3

**transactionGroupId (mandatory)(integer) = 1**
carpal/dist/data/customer/Setting getSettingsAsync(token) This returns a Promise object (reject/resolve).
**
carpal/dist/data/customer/Job getJobDetailAsync(orderId, token) This returns a Promise object with Job Detail with given orderId
carpal/dist/data/customer/Job getJobSummaryAsync(orderId, token) This returns a Promise Summary with Job Summary with given orderId
carpal/dist/data/customer/Order createDeliveryWindow(deliveryWindowObj, token) This returns a Promise object with delivery window Detail.

The deliveryWindowObj payload example {customerId: 1, identityId: 1, productTypeId: 1, transactionGroupId: 'optional', displayName: 'xxx', startTime: '12:00', endTime: '16:00'}
carpal/dist/data/customer/Order getOrdersWithFiltersAsync(filterObject, customerId, token, validateSchema) To use getOrdersWithFiltersAsync, validateSchema has to be set to true, else by default it is set to false. Currently, validateSchema is not handled yet. This returns a Promise object with all customer's orders.

The filterObject payload example {pickupDate: '2017-11-06', orderStatusIds: [1, 2, 3]}

To utilize the function, customerId and token must be provided.
carpal/dist/data/customer/Order getOrderCountsAsync(filterObject, customerId, token) This returns a Promise object with all customer's order counts.

To utilize the function, filterObject(pickupDate: '2017-12-31'), customerId and token must be provided.**
carpal/dist/data/customer/Order getUpdatedJobLiveData(originalJobDatum, pubSubPayload, filterObject) This returns update Jobs with both activeStatusCounts and totalStatusCounts counts. Can add orderStatusId and pickupDate fields inside of filterObject. This function will response new data for the today pickupDate, otherwise it will response the existing data.

carpal/dist/data/customer/Order getOrdersBasedOnSearchResult(customerId, filterObject, searchResult, token) This returns specific orders based on the search result.

Example of filterObject = {statusIds, pickupDate, limit = 20, offset = 1} **

**StatusIds = 1/2/3/4. 1 for 'pending', 2 for 'validated', 3 for 'grouped', 4 for 'failed'** pickupDate format should be 'yyyy-mm-dd'**
carpal/dist/data/customer/Driver getDriverDetailAsync(customerId, identityId, driverId, token) This returns a Promise object with customer's driver detail.

carpal/dist/data/customer/Driver getDriversBasedOnSearchResult(customerId, filterObject, searchResult, token) This returns specific orders based on the search result.

Example of filterObject = {limit = 20, offset = 1} **

carpal/dist/data/customer/Driver getDriversAsync(fileterObject, token) This returns a Promise object with customer's driver list. (V2 Endpoint)

carpal/dist/data/customer/Driver getDriversAsync(fileterObject, token) This returns a Promise object with customer's driver list. (V3 Endpoint)

fileterObject = { limit: 20, page: 1}
carpal/dist/data/customer/Driver exportDriverListFileAsync(fileType, token) This returns a Promise object with download link url. Example of fileType param - csv or pdf or excel

carpal/dist/data/customer/Driver deleteDriversAsync(driverIds, token) Example of driverIds param- [123, 456, 672]

carpal/dist/data/customer/Driver createDriverAsync(driverInfo, customerId, token) This returns a Promise object with new driver detail.

The driverInfo payload example {identityId: 1, productTypeId: 3, transactionGroupId: [180], firstName: 'String', lastName: 'String', email: 'String', password: 'String', birthday: 'yyyy-mm-dd', phone: '+65xxxxxxxx', existingUserEmail=false, sendConfirmationSms=false, isNewUser=true, vehicleTypeId: 1, vehicleBrand: 'String', vehicleModel: 'String', vehicleLicenseNumber: 'String', vehicleModelYear: 2018, vehicleColor: 'String'}
carpal/dist/data/customer/Driver getDriversWithFiltersAsync(filterObj, customerId, token, validateSchema) To use getDriversWithFiltersAsync, validateSchema has to be set to true, else by default it is set to false. Currently, validateSchema is not handled yet. This is an example of filterObj to be passed to getCustomerDriversAsync: const filterObj = {driverStatusIds: [2], orderRouteTypeIds: [1,2], driverTypeIds: [1,2,3]}
carpal/dist/data/customer/Order getUpdatedDriverLiveData(originalDriverDatum, pubSubPayload, filterObject) This returns update Drivers with both activeStatusCounts and totalStatusCounts counts. Can add driverStatusIds and driverTypeIds fields inside of filterObject.

carpal/dist/data/customer/Order getUploadedOrderProgressionAsync(customerId, token) This returns a Promise object with batch order progress.

carpal/dist/data/customer/Order getOrderAsync(groupingLocationId, token) This returns a Promise object with all locations grouped by pickupGroupID.

carpal/dist/data/customer/Order getOrdersGrouppedByPickUpAddressAsync({statusIds, groupingLocationIds, pickupDate, limit, offset}, customerId, token) This returns a Promise object with all locations grouped by pickupGroupID.

** StatusIds = 1/2/3/4. 1 for 'pending', 2 for 'validated', 3 for 'grouped', 4 for 'failed'** pickupDate format should be 'yyyy-mm-dd'** Example of groupingLocationIds (optional) (string) = "27638,27644"
carpal/dist/data/customer/Order createOrderAsync(locationObject, token) Example of locationObject = {"pickupLocationAddress":"22 Gim moh road","deliveryAddress":"Holland Close"}
carpal/dist/data/customer/Order editOrderAsync(groupingLocationId, locationObject, token) pass updated fields into the locationData Object. Example of locationObject = {"pickupLocationAddress":"22 Gim moh road","deliveryAddress":"Holland Close"}
carpal/dist/data/customer/Order editOrdersAsync(locations, token) locations params must be array. Can pass multiple edited locations with groupingLocationId into this array.

Example. [groupingLocationId: 1, locationData: {pickupLocationAddress: 'xxxx'}]
carpal/dist/data/customer/Order updateAndTruncateOrderErrorsAsync(errorIds = [], locationDataList = [], token) locationDataList param must be array. Can pass multiple edited locations with groupingLocationId into this array.

Example. [groupingLocationId: 1, locationData: {pickupLocationAddress: 'xxxx'}]. It is the same as edit grouping location function. errorIds param must be array .
carpal/dist/data/customer/Order removeErrorOrderRecordsAsync(groupingLocationId, token) This function will delete one order record with errors from Dynamodb

carpal/dist/data/customer/Order removeOrderErrorRecordsAsync(errorIds = [], token) This function will delete the list of order records with errors from Dynamodb

carpal/dist/data/customer/Order deleteOrderAsync(groupingLocationId, token) This function will delete specific groupingLocationId from params.

carpal/dist/data/customer/Order deleteOrdersAsync(groupingLocationIds = [], token) This function will delete the list of groupingLocationIds

| carpal/dist/data/customer/Order | getUniquePickupAddressesAsync(filterObject, token) | This returns a Promise object with all unique pickupLocationAddresses. **Example of fileterObject:: pickupDate = "YYYY-MM-DD", with_order=0 **

| | carpal/dist/data/customer/Order | cancelBatchFileProcessAsync(groupingBatchId, token) | This returns a Promise object with data true if the batch file is actually deleted.** | | carpal/dist/data/customer/Order | getOrdersWithErrorAsync(pickupDate, customerId, token) | This returns a Promise object with error and its message from Dynamodb.

pickupDate format should be 'yyyy-mm-dd'** | | carpal/dist/data/customer/Order | getDriverCountsAsync(filterObject, customerId, token) | This returns a Promise object with all customer's driver counts.

To utilize the function, filterObject(driverTypeIds: [1,2]), customerId and token must be provided.** | | carpal/dist/data/customer/Search | searchAsync(keywords, scope, fuzzy=true, fuzziness=1, token) | The available options for scope:drivers, orders

This returns a Promise object with search results. (for scope argument, please leave it as empty string for now) | | carpal/dist/data/customer/Search | generalSearch({customerId, fuzzy, fuzziness, keywords, scopes}, token) | The available options for scope:drivers, orders

This returns a Promise object with search results. (for scope argument, please leave it as empty string for now) |

Driver

Module Method Description
carpal/dist/data/driver/LiveRoute sendLiveRouteDataAsync(liveRouteObj, token) This returns a Promise object with sns message. The liveRouteObj consists of {orderId, addressId, driverId, latitude, longitude, orderRouteTypeId}
carpal/dist/data/driver/Vehicles getVehicleTypesAsync(token) This returns a Promise object with all vehicles types

Routing

Module Method Description
carpal/dist/ui/routing/Routing getRoutesAsync(filters, token) This returns a Promise object with sns message. The liveRouteObj consists of {orderId, addressId, driverId, latitude, longitude, orderRouteTypeId}

Messaging

Module Method Description
carpal/dist/data/messaging/PubSub Initializing connection: pubsub('APP*PUBSUB_KEY', 'CHANNEL_ID', realtime?) **_By default, realtime is set to true to establish a socket connection. For transactional mode, you should set it to false***

subscribe(eventName, callback)

publish(eventName, messageObj)

unsubscribe(eventName, listener) **listener** is the callback listener function that was previously subscribed.

Example:

const ps = pubsub(API_KEY, CHANNEL_ID);

pubSub.subscribe(eventName, callback);

pubSub.unsubscribe(eventName, listener)

pubSub.publish(eventName, listener)

Notification

Module Method Description
carpal/dist/data/notification/Notification getNotificationsAsync(all = true/false, userId, token) This returns a Promise object with notifications. Param all=true/false to indicate if show only unread or all notification messages
carpal/dist/data/notification/Notification deleteNotificationAsync(notificationId, userId, token) This returns true if requested notificationId is deleted.

Export

Module Method Description
carpal/dist/data/notification/Export exportFileAsync(type, {recipientEmail, pickupDate}, token) This returns a Promise object. There will be two value for type param. 1. 'driver-list', 2. 'routing'. if the type is 'driver-list', no need to pass pickupDate param.

Data validation

This is a special set of functions to verify the inbound data from Pub/Sub against the schemas predefined by CarPal. You can choose not to use these functions at your own risk

Module Method Description
carpal/dist/data/validation/Schema getSchemaAsync(service, schemaName) This returns a Promise object with the a schema. This function should be called before calling the validate function
carpal/dist/data/validation/Schema validate = (schema, payload) This returns true if all fields in schema are covered by payload object, otherwise it returns false. This function checks both field names and data types

Public

Module Method Description
carpal/dist/data/public/Country getCountriesAsync() This returns a Promise object with a list of countries available for carpal services
carpal/dist/data/public/Identity getIdentitiesAsync() This returns a Promise object with a list of identities(cities) available for carpal services
carpal/dist/data/public/Language getLanguagesAsync() This returns a Promise object with a list of languages supported by carpal system
carpal/dist/data/public/Setting getCustomerPublicProfileSettingsAsync(domain) This returns a Promise object with Logo and Background Image URL

Utility

Module Method Description
carpal/dist/data/utility/FileUpload fileUploadForOrderAsync({fileObject}, token) This returns a Promise object with groupingBatchId

Tutorials

This is a simple tutorial to show you how to use CarPal JavaScript SDK to quickly build a web based fleet management application.

First, you need to request for your client ID and secret.

Then you can start with Customer registration(we use ReactJS here):

import React ...
import { getTokenAsync } from 'carpal/dist/data/account/Auth ';
import { createNewCustomerAsync } from 'carpal/dist/data/customer/Customer';
 
export default Class Registration extends Component{
 
  register = async (formData)=>{
    try{
      const result = await createNewCustomerAsync(formData); //This function will return a promise with result true if registration successful
 
      //user login immediately after registration success
      if(result){
        const authResult = await getTokenAsync('xxx@example.com', 'xxxxxx', 1, 'secret string...');
 
        //Store the tokens in localstorage
        localStorage.setItem('auth', {accessToken: authResult.accessToken,
                                      refreshToken: authResult.refreshToken,
                                      customerId: authResult.customerId});
 
        //Navigate to other page...
      }
    }catch(e){
      //Handle error here
    }
  }
  render(){
    return (
      ...
      <Button onPress={()=>this.register(formData)}>
        <Text>Register</Text>
      </Button>
      ...
    )
  }
}

Utilizing Realtime dashboard

We implemented Pub/Sub messaging architecture in the SDK so that your application can take the advantage of Realtime dashboard features.

You need to use Pub/Sub module in carpal/dist/data/messaging/PubSub

Let's take ReactJS as example here:

import React ...;
import { pubsub } from 'carpal/dist/data/messaging/PubSub';
 
 
export default class Dashboard extends Component{
  constructor(props){
    super(pros);
    ...
 
    //You will get an APP_KEY after registered with Carpal
    const ps = pubsub('APP_PUBSUB_KEY', 'CHANNEL_ID');
 
    //subscribe to a channel here.
    //handle your logics in callback function and pass it as an argument.
    ps.subscribe('event_name', function (message) {
      //process the message object
    });
  }
}

License: MIT https://opensource.org/licenses/MIT

Readme

Keywords

none

Package Sidebar

Install

npm i carpal

Weekly Downloads

6

Version

0.3.86

License

MIT

Unpacked Size

509 kB

Total Files

91

Last publish

Collaborators

  • maartenhemmes
  • messhias
  • vinay21feb