UNPKG

@intocode-io/fireliff-cli

Version:

Command line interface for building LIFF app on Firebase

341 lines (313 loc) 9.86 kB
import { EOL } from 'os'; import './colors-set-theme'; import { FunctionsConfig } from './functions-config'; import { ThingsCreateTrialRequest } from './things-create-trial-request'; import { ThingsError } from './things-error'; import { ThingsGetDeviceByDeviceUserRequest } from './things-get-device-by-device-user-request'; import { ThingsGetDevicesByProductUserRequest } from './things-get-devices-by-product-user-request'; import { ThingsGetProductRequest } from './things-get-product-request'; import { ThingsGetTrialProductsRequest } from './things-get-trial-products-request'; import { ThingsDeleteTrialProductRequest } from './things-delete-trial-product-request'; export const FailedCertification = `Certification failed.`.warn; export const FailedNotFound = `Either not found or you do not have access rights.` .warn; export const InvalidValue = `The request contains an invalid value.`.warn; export const FailedToCreateTrial = `Failed to create trial product`.error; export const FailedToCreateTrial400 = `Failed to create trial product`.error + EOL + InvalidValue; export const FailedToCreateTrial401 = `Failed to create trial product`.error + EOL + FailedCertification; export const FailedToCreateTrial403 = `Failed to create trial product`.error + EOL + `We have already reached the maximum number of trial products (maximum of 10). Delete unnecessary trial products.` .warn; export const FailedToDeleteTrialProduct = `Failed to delete trial product` .error; export const FailedToDeleteTrialProduct401 = FailedToDeleteTrialProduct + EOL + FailedCertification; export const FailedToDeleteTrialProduct404 = FailedToDeleteTrialProduct + EOL + FailedNotFound; export const FailedToGetDeviceByDeviceUser = `Failed to get device information by device user` .error; export const FailedToGetDeviceByDeviceUser401 = FailedToGetDeviceByDeviceUser + EOL + FailedCertification; export const FailedToGetDeviceByDeviceUser404 = FailedToGetDeviceByDeviceUser + EOL + FailedNotFound; export const FailedToGetDevicesByProductUser = `Failed to get devices information by product user` .error; export const FailedToGetDevicesByProductUser401 = FailedToGetDevicesByProductUser + EOL + FailedCertification; export const FailedToGetDevicesByProductUser404 = FailedToGetDevicesByProductUser + EOL + FailedNotFound; export const FailedToGetProduct = `Failed to get product`.error; export const FailedToGetProduct401 = FailedToGetProduct + EOL + FailedCertification; export const FailedToGetProduct404 = FailedToGetProduct + EOL + FailedNotFound; export const FailedToGetTrialProducts = `Failed to get trial information`.error; export const FailedToGetTrialProducts401 = FailedToGetTrialProducts + EOL + FailedCertification; export const FailedToGetTrialProducts404 = FailedToGetTrialProducts + EOL + FailedNotFound; export class Things { static get ErrorMessages() { return { FailedToCreateTrial, FailedToCreateTrial400, FailedToCreateTrial401, FailedToCreateTrial403, FailedToDeleteTrialProduct, FailedToDeleteTrialProduct401, FailedToDeleteTrialProduct404, FailedToGetProduct, FailedToGetProduct401, FailedToGetProduct404, FailedToGetDeviceByDeviceUser, FailedToGetDeviceByDeviceUser401, FailedToGetDeviceByDeviceUser404, FailedToGetDevicesByProductUser, FailedToGetDevicesByProductUser401, FailedToGetDevicesByProductUser404, FailedToGetTrialProducts, FailedToGetTrialProducts401, FailedToGetTrialProducts404, }; } constructor() {} /** * * @param {string} liff LIFF ID * @param {string} name Product name */ async createTrialProduct(liff, name) { const req = new ThingsCreateTrialRequest({ accessToken: FunctionsConfig.AccessToken, }); let res; try { res = await req.send(liff, name); } catch (error) { if (error.response && error.response.data && error.response.data.detail) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToCreateTrial + EOL + error.response.data.detail.warn ) ); } else if (error.response.status === 400) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToCreateTrial400, error.response ) ); } else if (error.response.status === 401) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToCreateTrial401, error.response ) ); } else if (error.response.status === 403) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToCreateTrial403, error.response ) ); } else { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToCreateTrial, error.response ) ); } } return res.data; } /** * * @param {string} productId Product ID */ async deleteTrialProduct(productId) { const req = new ThingsDeleteTrialProductRequest({ accessToken: FunctionsConfig.AccessToken, }); let res; try { res = await req.send(productId); } catch (error) { if (error.response.status === 401) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToDeleteTrialProduct401, error.response ) ); } else if (error.response.status === 404) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToDeleteTrialProduct404, error.response ) ); } else { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToDeleteTrialProduct, error.response ) ); } } return res.data; } /** * * @param {string} deviceId Device ID * @param {string} userId User ID */ async getDeviceByDeviceUser(deviceId, userId) { const req = new ThingsGetDeviceByDeviceUserRequest({ accessToken: FunctionsConfig.AccessToken, }); let res; try { res = await req.send(deviceId, userId); } catch (error) { if (error.response.status === 401) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetDeviceByDeviceUser401, error.response ) ); } else if (error.response.status === 404) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetDeviceByDeviceUser404, error.response ) ); } else { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetDeviceByDeviceUser, error.response ) ); } } return res.data; } /** * * @param {string} productId Product ID * @param {string} userId User ID */ async getDevicesByProductUser(productId, userId) { const req = new ThingsGetDevicesByProductUserRequest({ accessToken: FunctionsConfig.AccessToken, }); let res; try { res = await req.send(productId, userId); } catch (error) { if (error.response.status === 401) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetDevicesByProductUser401, error.response ) ); } else if (error.response.status === 404) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetDevicesByProductUser404, error.response ) ); } else { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetDevicesByProductUser, error.response ) ); } } return res.data; } /** * * @param {string} deviceId Device ID */ async getProduct(deviceId) { const req = new ThingsGetProductRequest({ accessToken: FunctionsConfig.AccessToken, }); let res; try { res = await req.send(deviceId); } catch (error) { if (error.response.status === 401) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetProduct401, error.response ) ); } else if (error.response.status === 404) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetProduct404, error.response ) ); } else { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetProduct, error.response ) ); } } return res.data; } async getTrialProducts() { const req = new ThingsGetTrialProductsRequest({ accessToken: FunctionsConfig.AccessToken, }); let res; try { res = await req.send(); } catch (error) { if (error.response.status === 401) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetTrialProducts401, error.response ) ); } else if (error.response.status === 404) { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetTrialProducts404, error.response ) ); } else { return Promise.reject( new ThingsError( Things.ErrorMessages.FailedToGetTrialProducts, error.response ) ); } } return res.data; } }