@oneblink/apps-react 9.0.0-beta.1 → 9.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/OneBlinkForm.d.ts +6 -6
- package/dist/OneBlinkFormBase.js +1 -0
- package/dist/OneBlinkFormBase.js.map +1 -1
- package/dist/apps/Sentry.d.ts +7 -0
- package/dist/apps/Sentry.js +16 -0
- package/dist/apps/Sentry.js.map +1 -0
- package/dist/apps/approvals-service.d.ts +390 -0
- package/dist/apps/approvals-service.js +987 -0
- package/dist/apps/approvals-service.js.map +1 -0
- package/dist/apps/attachments-service.d.ts +49 -0
- package/dist/apps/attachments-service.js +134 -0
- package/dist/apps/attachments-service.js.map +1 -0
- package/dist/apps/auth-service.d.ts +114 -0
- package/dist/apps/auth-service.js +194 -0
- package/dist/apps/auth-service.js.map +1 -0
- package/dist/apps/auto-save-service.d.ts +82 -0
- package/dist/apps/auto-save-service.js +105 -0
- package/dist/apps/auto-save-service.js.map +1 -0
- package/dist/apps/draft-service.d.ts +148 -0
- package/dist/apps/draft-service.js +583 -0
- package/dist/apps/draft-service.js.map +1 -0
- package/dist/apps/form-service.d.ts +204 -0
- package/dist/apps/form-service.js +718 -0
- package/dist/apps/form-service.js.map +1 -0
- package/dist/apps/form-store-service.d.ts +141 -0
- package/dist/apps/form-store-service.js +114 -0
- package/dist/apps/form-store-service.js.map +1 -0
- package/dist/apps/forms-app-environment-service.d.ts +19 -0
- package/dist/apps/forms-app-environment-service.js +55 -0
- package/dist/apps/forms-app-environment-service.js.map +1 -0
- package/dist/apps/forms-app-service.d.ts +18 -0
- package/dist/apps/forms-app-service.js +53 -0
- package/dist/apps/forms-app-service.js.map +1 -0
- package/dist/apps/index.d.ts +252 -0
- package/dist/apps/index.js +254 -0
- package/dist/apps/index.js.map +1 -0
- package/dist/apps/job-service.d.ts +20 -0
- package/dist/apps/job-service.js +95 -0
- package/dist/apps/job-service.js.map +1 -0
- package/dist/apps/localisation-service.d.ts +207 -0
- package/dist/apps/localisation-service.js +321 -0
- package/dist/apps/localisation-service.js.map +1 -0
- package/dist/apps/notification-service.d.ts +83 -0
- package/dist/apps/notification-service.js +315 -0
- package/dist/apps/notification-service.js.map +1 -0
- package/dist/apps/offline-service.d.ts +18 -0
- package/dist/apps/offline-service.js +25 -0
- package/dist/apps/offline-service.js.map +1 -0
- package/dist/apps/payment-service.d.ts +110 -0
- package/dist/apps/payment-service.js +182 -0
- package/dist/apps/payment-service.js.map +1 -0
- package/dist/apps/prefill-service.d.ts +14 -0
- package/dist/apps/prefill-service.js +19 -0
- package/dist/apps/prefill-service.js.map +1 -0
- package/dist/apps/scheduled-tasks-service.d.ts +127 -0
- package/dist/apps/scheduled-tasks-service.js +240 -0
- package/dist/apps/scheduled-tasks-service.js.map +1 -0
- package/dist/apps/scheduling-service.d.ts +101 -0
- package/dist/apps/scheduling-service.js +171 -0
- package/dist/apps/scheduling-service.js.map +1 -0
- package/dist/apps/services/AWSCognitoClient.d.ts +55 -0
- package/dist/apps/services/AWSCognitoClient.js +436 -0
- package/dist/apps/services/AWSCognitoClient.js.map +1 -0
- package/dist/apps/services/api/drafts.d.ts +7 -0
- package/dist/apps/services/api/drafts.js +236 -0
- package/dist/apps/services/api/drafts.js.map +1 -0
- package/dist/apps/services/api/notifications.d.ts +3 -0
- package/dist/apps/services/api/notifications.js +60 -0
- package/dist/apps/services/api/notifications.js.map +1 -0
- package/dist/apps/services/api/payment.d.ts +23 -0
- package/dist/apps/services/api/payment.js +235 -0
- package/dist/apps/services/api/payment.js.map +1 -0
- package/dist/apps/services/api/post-submission-attachment-urls.d.ts +7 -0
- package/dist/apps/services/api/post-submission-attachment-urls.js +19 -0
- package/dist/apps/services/api/post-submission-attachment-urls.js.map +1 -0
- package/dist/apps/services/api/prefill.d.ts +1 -0
- package/dist/apps/services/api/prefill.js +70 -0
- package/dist/apps/services/api/prefill.js.map +1 -0
- package/dist/apps/services/api/receipt-id.d.ts +2 -0
- package/dist/apps/services/api/receipt-id.js +54 -0
- package/dist/apps/services/api/receipt-id.js.map +1 -0
- package/dist/apps/services/api/scheduling.d.ts +38 -0
- package/dist/apps/services/api/scheduling.js +142 -0
- package/dist/apps/services/api/scheduling.js.map +1 -0
- package/dist/apps/services/api/submissions.d.ts +18 -0
- package/dist/apps/services/api/submissions.js +166 -0
- package/dist/apps/services/api/submissions.js.map +1 -0
- package/dist/apps/services/cognito.d.ts +302 -0
- package/dist/apps/services/cognito.js +441 -0
- package/dist/apps/services/cognito.js.map +1 -0
- package/dist/apps/services/draft-data-store.d.ts +16 -0
- package/dist/apps/services/draft-data-store.js +115 -0
- package/dist/apps/services/draft-data-store.js.map +1 -0
- package/dist/apps/services/errors/oneBlinkAppsError.d.ts +35 -0
- package/dist/apps/services/errors/oneBlinkAppsError.js +32 -0
- package/dist/apps/services/errors/oneBlinkAppsError.js.map +1 -0
- package/dist/apps/services/external-id-generation.d.ts +4 -0
- package/dist/apps/services/external-id-generation.js +59 -0
- package/dist/apps/services/external-id-generation.js.map +1 -0
- package/dist/apps/services/fetch.d.ts +12 -0
- package/dist/apps/services/fetch.js +95 -0
- package/dist/apps/services/fetch.js.map +1 -0
- package/dist/apps/services/forms-key.d.ts +51 -0
- package/dist/apps/services/forms-key.js +83 -0
- package/dist/apps/services/forms-key.js.map +1 -0
- package/dist/apps/services/generate-generic-error.d.ts +3 -0
- package/dist/apps/services/generate-generic-error.js +52 -0
- package/dist/apps/services/generate-generic-error.js.map +1 -0
- package/dist/apps/services/generateOneBlinkDownloader.d.ts +2 -0
- package/dist/apps/services/generateOneBlinkDownloader.js +11 -0
- package/dist/apps/services/generateOneBlinkDownloader.js.map +1 -0
- package/dist/apps/services/generateOneBlinkUploader.d.ts +2 -0
- package/dist/apps/services/generateOneBlinkUploader.js +11 -0
- package/dist/apps/services/generateOneBlinkUploader.js.map +1 -0
- package/dist/apps/services/getDeviceInformation.d.ts +17 -0
- package/dist/apps/services/getDeviceInformation.js +38 -0
- package/dist/apps/services/getDeviceInformation.js.map +1 -0
- package/dist/apps/services/integration-elements.d.ts +383 -0
- package/dist/apps/services/integration-elements.js +761 -0
- package/dist/apps/services/integration-elements.js.map +1 -0
- package/dist/apps/services/job-prefill.d.ts +40 -0
- package/dist/apps/services/job-prefill.js +78 -0
- package/dist/apps/services/job-prefill.js.map +1 -0
- package/dist/apps/services/payment-providers/BPOINTPaymentProvider.d.ts +29 -0
- package/dist/apps/services/payment-providers/BPOINTPaymentProvider.js +59 -0
- package/dist/apps/services/payment-providers/BPOINTPaymentProvider.js.map +1 -0
- package/dist/apps/services/payment-providers/CPPayPaymentProvider.d.ts +27 -0
- package/dist/apps/services/payment-providers/CPPayPaymentProvider.js +63 -0
- package/dist/apps/services/payment-providers/CPPayPaymentProvider.js.map +1 -0
- package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.d.ts +30 -0
- package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.js +116 -0
- package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.js.map +1 -0
- package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.d.ts +49 -0
- package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.js +116 -0
- package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.js.map +1 -0
- package/dist/apps/services/payment-providers/receipt-items.d.ts +8 -0
- package/dist/apps/services/payment-providers/receipt-items.js +58 -0
- package/dist/apps/services/payment-providers/receipt-items.js.map +1 -0
- package/dist/apps/services/pending-queue.d.ts +150 -0
- package/dist/apps/services/pending-queue.js +316 -0
- package/dist/apps/services/pending-queue.js.map +1 -0
- package/dist/apps/services/prepareSubmissionData.d.ts +2 -0
- package/dist/apps/services/prepareSubmissionData.js +113 -0
- package/dist/apps/services/prepareSubmissionData.js.map +1 -0
- package/dist/apps/services/query-string.d.ts +1 -0
- package/dist/apps/services/query-string.js +16 -0
- package/dist/apps/services/query-string.js.map +1 -0
- package/dist/apps/services/replaceInjectablesWithSubmissionValues.d.ts +3 -0
- package/dist/apps/services/replaceInjectablesWithSubmissionValues.js +18 -0
- package/dist/apps/services/replaceInjectablesWithSubmissionValues.js.map +1 -0
- package/dist/apps/services/schedulingHandlers.d.ts +36 -0
- package/dist/apps/services/schedulingHandlers.js +76 -0
- package/dist/apps/services/schedulingHandlers.js.map +1 -0
- package/dist/apps/services/server-validation.d.ts +2 -0
- package/dist/apps/services/server-validation.js +36 -0
- package/dist/apps/services/server-validation.js.map +1 -0
- package/dist/apps/services/serverRequest.d.ts +5 -0
- package/dist/apps/services/serverRequest.js +24 -0
- package/dist/apps/services/serverRequest.js.map +1 -0
- package/dist/apps/services/submit.d.ts +19 -0
- package/dist/apps/services/submit.js +219 -0
- package/dist/apps/services/submit.js.map +1 -0
- package/dist/apps/services/uploadAttachment.d.ts +52 -0
- package/dist/apps/services/uploadAttachment.js +73 -0
- package/dist/apps/services/uploadAttachment.js.map +1 -0
- package/dist/apps/services/user-token.d.ts +27 -0
- package/dist/apps/services/user-token.js +33 -0
- package/dist/apps/services/user-token.js.map +1 -0
- package/dist/apps/services/utils.d.ts +12 -0
- package/dist/apps/services/utils.js +100 -0
- package/dist/apps/services/utils.js.map +1 -0
- package/dist/apps/submission-service.d.ts +226 -0
- package/dist/apps/submission-service.js +425 -0
- package/dist/apps/submission-service.js.map +1 -0
- package/dist/apps/tenants.d.ts +29 -0
- package/dist/apps/tenants.js +127 -0
- package/dist/apps/tenants.js.map +1 -0
- package/dist/apps/types/form.d.ts +4 -0
- package/dist/apps/types/form.js +2 -0
- package/dist/apps/types/form.js.map +1 -0
- package/dist/apps/types/payments.d.ts +45 -0
- package/dist/apps/types/payments.js +2 -0
- package/dist/apps/types/payments.js.map +1 -0
- package/dist/apps/types/scheduling.d.ts +5 -0
- package/dist/apps/types/scheduling.js +2 -0
- package/dist/apps/types/scheduling.js.map +1 -0
- package/dist/apps/types/submissions.d.ts +175 -0
- package/dist/apps/types/submissions.js +2 -0
- package/dist/apps/types/submissions.js.map +1 -0
- package/dist/components/CustomAccordion.d.ts +3 -3
- package/dist/components/Lists.d.ts +4 -1
- package/dist/components/formStore/display/ElementDisplay.js +2 -2
- package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
- package/dist/components/formStore/useFormStoreTableContext.d.ts +2 -2
- package/dist/components/mfa/MultiFactorAuthentication.d.ts +1 -1
- package/dist/components/renderer/LookupNotification.js +1 -1
- package/dist/components/renderer/LookupNotification.js.map +1 -1
- package/dist/form-elements/FormElementAutocomplete.js +1 -1
- package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
- package/dist/hooks/attachments/useAttachment.js +1 -1
- package/dist/hooks/attachments/useAttachment.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/services/download-file.js +1 -1
- package/dist/services/download-file.js.map +1 -1
- package/dist/styles.css +208 -204
- package/package.json +43 -35
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-elements.js","sourceRoot":"","sources":["../../../src/apps/services/integration-elements.ts"],"names":[],"mappings":"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","sourcesContent":["import { add } from 'date-fns'\nimport {\n GeoscapeTypes,\n PointTypes,\n CivicaTypes,\n FormTypes,\n MiscTypes,\n APINSWTypes,\n SubmissionTypes,\n CPHCMSTypes,\n} from '@oneblink/types'\n\nimport OneBlinkAppsError from '../services/errors/oneBlinkAppsError'\nimport { isOffline } from '../offline-service'\nimport {\n deleteRequest,\n fetchJSON,\n getRequest,\n HTTPError,\n postRequest,\n searchRequest,\n putRequest,\n} from '../services/fetch'\nimport tenants from '../tenants'\nimport Sentry from '../Sentry'\nimport generateGenericError from './generate-generic-error'\n\n/**\n * Search for geoscape addresses based on a partial address.\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const result = await formService.searchGeoscapeAddresses(formId, {\n * query: '123 N',\n * maxNumberOfResults: 10\n * stateTerritory: 'NSW'\n * })\n * ```\n *\n * @param formId\n * @param queryParams\n * @param abortSignal\n * @returns\n */\nexport async function searchGeoscapeAddresses(\n formId: number,\n queryParams: {\n query: string\n maxNumberOfResults?: number\n stateTerritory?: string\n dataset?: string\n addressType?: 'physical' | 'mailing' | 'all'\n excludeAliases?: boolean\n },\n abortSignal?: AbortSignal,\n): Promise<GeoscapeTypes.GeoscapeAddressesSearchResult> {\n try {\n return await searchRequest(\n `${tenants.current.apiOrigin}/forms/${formId}/geoscape/addresses`,\n queryParams,\n abortSignal,\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\n/**\n * Get the details for a single geoscape address based on the Id of a geoscape\n * address resource.\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const addressId = 'ABC123'\n * const result = await formService.getGeoscapeAddress(formId, addressId)\n * ```\n *\n * @param formId\n * @param addressId\n * @param abortSignal\n * @returns\n */\nexport async function getGeoscapeAddress(\n formId: number,\n addressId: string,\n abortSignal?: AbortSignal,\n): Promise<GeoscapeTypes.GeoscapeAddress> {\n try {\n return await getRequest(\n `${tenants.current.apiOrigin}/forms/${formId}/geoscape/addresses/${addressId}`,\n abortSignal,\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\n/**\n * Get a geoscape address from a latitude and longitude\n *\n * #### Example\n *\n * ```js\n * const lat = 41.9475427\n * const lng = -87.6562292\n * const formId = 1\n * const result = await formService.getGeoscapeReverseGeocoding({\n * lat,\n * lng,\n * formId,\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport async function getGeoscapeReverseGeocoding({\n formId,\n lat,\n lng,\n abortSignal,\n}: {\n formId: number\n lat: number\n lng: number\n abortSignal?: AbortSignal\n}): Promise<{ reverseGeocodeResult: GeoscapeTypes.GeoscapeAddress }> {\n try {\n const urlParams = new URLSearchParams({\n lat: lat.toString(),\n lng: lng.toString(),\n })\n return await getRequest(\n `${\n tenants.current.apiOrigin\n }/forms/${formId}/geoscape/reverse-geocode?${urlParams.toString()}`,\n abortSignal,\n )\n } catch (err) {\n if (!abortSignal?.aborted) {\n Sentry.captureException(err)\n }\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError('Please login and try again.', {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n })\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(\n `Could not find address from ${lat},${lng}.`,\n {\n originalError: error,\n title: 'Address not found',\n httpStatusCode: error.status,\n },\n )\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Search for Point addresses based on a partial address.\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const result = await formService.searchPointAddresses(formId, {\n * address: '123 N',\n * maxNumberOfResults: 10\n * stateTerritory: 'NSW'\n * })\n * ```\n *\n * @param formId\n * @param queryParams\n * @param abortSignal\n * @returns\n */\nexport async function searchPointAddresses(\n formId: number,\n queryParams: {\n address: string\n maxNumberOfResults?: number\n stateTerritory?: string\n dataset?: string\n addressType?: 'physical' | 'mailing' | 'all'\n },\n abortSignal?: AbortSignal,\n): Promise<PointTypes.PointAddressesSearchResult> {\n try {\n return await searchRequest(\n `${tenants.current.apiOrigin}/forms/${formId}/point/addresses`,\n queryParams,\n abortSignal,\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\n/**\n * Get the details for a single Point address based on the Id of a Point address\n * resource.\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const addressId = 'ABC123'\n * const result = await formService.getPointAddress(formId, addressId)\n * ```\n *\n * @param formId\n * @param addressId\n * @param abortSignal\n * @returns\n */\nexport async function getPointAddress(\n formId: number,\n addressId: string,\n abortSignal?: AbortSignal,\n): Promise<PointTypes.PointAddress> {\n try {\n return await getRequest(\n `${tenants.current.apiOrigin}/forms/${formId}/point/addresses/${addressId}`,\n abortSignal,\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\n/**\n * Get the details for a single NSW Point Cadastral Parcel record.\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const parcelId = '1/234567'\n * const result = await formService.getPointCadastralParcel(\n * formId,\n * addressId,\n * )\n * ```\n *\n * @param formId\n * @param parcelId\n * @param abortSignal\n * @returns\n */\nexport async function getPointCadastralParcel(\n formId: number,\n parcelId: string,\n abortSignal?: AbortSignal,\n): Promise<PointTypes.PointCadastralParcelResponse> {\n try {\n const urlSearchParams = new URLSearchParams([['parcelId', parcelId]])\n return await getRequest(\n `${\n tenants.current.apiOrigin\n }/forms/${formId}/point/cadastral-parcels?${urlSearchParams.toString()}`,\n abortSignal,\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\n/**\n * Search for Point addresses v3 based on a partial address.\n *\n * #### Example\n *\n * -\n *\n * Const formId = 1 const result = await\n * formService.searchPointV3Addresses(formId, { address: '123 N', maxResults: 10\n * stateFilter: 'NSW' })\n *\n * @param formId\n * @param queryParams\n * @param abortSignal\n * @returns\n */\nexport async function searchPointV3Addresses(\n formId: number,\n queryParams: {\n address: string\n maxResults?: number\n stateFilter?: string\n dataset?: string\n addressType?: 'physical' | 'mailing' | 'all'\n excludeAliases?: boolean\n },\n abortSignal?: AbortSignal,\n): Promise<PointTypes.PointAddressV3SearchResponse> {\n try {\n return await searchRequest(\n `${tenants.current.apiOrigin}/forms/${formId}/point/v3/addresses`,\n queryParams,\n abortSignal,\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\n/**\n * Get the details for a single Point address based on the Id of a Point address\n * resource.\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const result = await formService.getPointV3Address(formId, {\n * addressId: 'ABC123',\n * 'Accept-Crs': '<https://www.opengis.net/def/crs/EPSG/0/7844>',\n * })\n * ```\n *\n * @param formId\n * @param queryParams\n * @param abortSignal\n * @returns\n */\nexport async function getPointV3Address(\n formId: number,\n queryParams: {\n addressId: string\n 'Accept-Crs'?: string\n },\n abortSignal?: AbortSignal,\n): Promise<PointTypes.PointAddressV3GetAddressDetailsResponse> {\n try {\n return await searchRequest(\n `${tenants.current.apiOrigin}/forms/${formId}/point/v3/address`,\n queryParams,\n abortSignal,\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\n/**\n * Search for street names in Civica\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const queryParams = {\n * search: '1 Station ',\n * top: 10,\n * }\n * const result = await formService.searchCivicaStreetNames(\n * formId,\n * queryParams,\n * )\n * ```\n *\n * @param formId\n * @param queryParams\n * @param abortSignal\n * @returns\n */\nexport async function searchCivicaStreetNames(\n formId: number,\n queryParams: {\n search?: string\n top?: number\n },\n abortSignal?: AbortSignal,\n): Promise<CivicaTypes.CivicaStreetName[]> {\n try {\n return await searchRequest(\n `${tenants.current.apiOrigin}/forms/${formId}/civica/streetregister/streetnames`,\n queryParams,\n abortSignal,\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\n/**\n * Get titles codes from Civica name register\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const results = await formService.getCivicaTitleCodes(formId)\n * ```\n *\n * @param formId\n * @param abortSignal\n * @returns\n */\nexport async function getCivicaTitleCodes(\n formId: number,\n abortSignal?: AbortSignal,\n): Promise<FormTypes.ChoiceElementOption[]> {\n try {\n return await getRequest(\n `${tenants.current.apiOrigin}/forms/${formId}/civica/nameregister/titlecodes`,\n abortSignal,\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\n/**\n * Get BSB record based on a BSB number codes from Civica name register\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const bsb = '123-321'\n * const results = await formService.getBSBRecord(formId, bsb)\n * ```\n *\n * @param formId\n * @param bsb\n * @param abortSignal\n * @returns\n */\nexport async function getBSBRecord(\n formId: number,\n bsb: string,\n abortSignal?: AbortSignal,\n): Promise<MiscTypes.BSBRecord> {\n try {\n return await getRequest(\n `${tenants.current.apiOrigin}/forms/${formId}/bsb-records/${bsb}`,\n abortSignal,\n )\n } catch (err) {\n if (!abortSignal?.aborted) {\n Sentry.captureException(err)\n }\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError('Please login and try again.', {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n })\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(\n 'The BSB number you have entered does not exist.',\n {\n originalError: error,\n title: 'Unknown BSB Number',\n httpStatusCode: error.status,\n },\n )\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\nconst API_NSW_LIQUOR_LICENCE_TOKEN_KEY = 'API_NSW_LIQUOR_LICENCE_TOKEN'\nfunction getAPINSWLiquorLicenceTokenFromStorage() {\n const localStorageValue = localStorage.getItem(\n API_NSW_LIQUOR_LICENCE_TOKEN_KEY,\n )\n if (localStorageValue) {\n try {\n return JSON.parse(\n localStorageValue,\n ) as APINSWTypes.LiquorLicenceAccessTokenResponse\n } catch {\n // ignore JSON parse error\n }\n }\n}\n\nasync function getAPINSWLiquorLicenceToken(\n formId: number,\n abortSignal?: AbortSignal,\n) {\n const liquorLicenceAccessTokenResponse =\n getAPINSWLiquorLicenceTokenFromStorage()\n if (liquorLicenceAccessTokenResponse) {\n const now = new Date()\n const issuedAt = new Date(\n parseInt(liquorLicenceAccessTokenResponse.issued_at),\n )\n const expiresAt = add(issuedAt, {\n seconds: parseInt(liquorLicenceAccessTokenResponse.expires_in),\n })\n if (expiresAt > now) {\n return liquorLicenceAccessTokenResponse\n }\n }\n\n const result =\n await postRequest<APINSWTypes.LiquorLicenceAccessTokenResponse>(\n `${tenants.current.apiOrigin}/forms/${formId}/api-nsw/liquor/access-token`,\n abortSignal,\n )\n localStorage.setItem(API_NSW_LIQUOR_LICENCE_TOKEN_KEY, JSON.stringify(result))\n return result\n}\n\n/**\n * Search for API.NSW Liquor licences based on a partial text search.\n *\n * #### Example\n *\n * ```js\n * const result = await formService.searchAPINSWLiquorLicences({\n * formId: 1,\n * search: 'SMITH',\n * })\n * ```\n *\n * @param options\n * @param abortSignal\n * @returns\n */\nexport async function searchAPINSWLiquorLicences(\n {\n formId,\n searchText,\n }: {\n formId: number\n searchText: string\n },\n abortSignal?: AbortSignal,\n): Promise<APINSWTypes.LiquorLicenceBrowseResults> {\n try {\n const apiNSWLiquorLicenceToken = await getAPINSWLiquorLicenceToken(\n formId,\n abortSignal,\n )\n return await fetchJSON<APINSWTypes.LiquorLicenceBrowseResults>(\n `https://api.onegov.nsw.gov.au/liquorregister/v1/browse?searchText=${searchText}`,\n {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n apikey: apiNSWLiquorLicenceToken.client_id,\n Authorization: `Bearer ${apiNSWLiquorLicenceToken.access_token}`,\n },\n signal: abortSignal,\n },\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\n/**\n * Get the details for a single API.NSW Liquor licence based on the licenceID.\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const licenceId = '1-RL22KV'\n * const result = await formService.getAPINSWLiquorLicence(\n * formId,\n * licenceId,\n * )\n * ```\n *\n * @param formId\n * @param licenceId\n * @param abortSignal\n * @returns\n */\nexport async function getAPINSWLiquorLicence(\n formId: number,\n licenceId: string,\n abortSignal?: AbortSignal,\n): Promise<APINSWTypes.LiquorLicenceDetails> {\n try {\n const apiNSWLiquorLicenceToken = await getAPINSWLiquorLicenceToken(\n formId,\n abortSignal,\n )\n return await fetchJSON<APINSWTypes.LiquorLicenceDetails>(\n `https://api.onegov.nsw.gov.au/liquorregister/v1/details?licenceid=${licenceId}`,\n {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n apikey: apiNSWLiquorLicenceToken.client_id,\n Authorization: `Bearer ${apiNSWLiquorLicenceToken.access_token}`,\n },\n signal: abortSignal,\n },\n )\n } catch (err) {\n throw generateGenericError(err, abortSignal)\n }\n}\n\nfunction generateCPHCMSStorageKey(formId: number) {\n return `CP_HCMS_TOKEN_FORM_${formId}`\n}\n\nfunction getCPHCMSTokenFromStorage(formId: number) {\n const itemKey = generateCPHCMSStorageKey(formId)\n const localStorageValue = localStorage.getItem(itemKey)\n if (localStorageValue) {\n try {\n return JSON.parse(\n localStorageValue,\n ) as CPHCMSTypes.CPHCSMAccessTokenResponse\n } catch {\n // ignore JSON parse error\n }\n }\n}\n\nasync function getCPHCMSToken(\n { formsAppId, formId }: { formsAppId: number; formId: number },\n abortSignal?: AbortSignal,\n) {\n const CPHCMSTokenResponse = getCPHCMSTokenFromStorage(formId)\n if (CPHCMSTokenResponse) {\n const now = new Date()\n const expiresAt = new Date(CPHCMSTokenResponse.auth.expires_at)\n if (expiresAt > now) {\n return CPHCMSTokenResponse\n }\n }\n\n const result = await postRequest<CPHCMSTypes.CPHCSMAccessTokenResponse>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/forms/${formId}/cp-hcms-authentication`,\n abortSignal,\n )\n const itemKey = generateCPHCMSStorageKey(formId)\n localStorage.setItem(itemKey, JSON.stringify(result))\n return result\n}\n\n/**\n * Change the status of a CivicPlus HCMS content item to published.\n *\n * @param options\n * @returns\n */\nexport async function publishHCMSContentItem({\n formsAppId,\n formId,\n contentId,\n abortSignal,\n}: {\n formsAppId: number\n formId: number\n contentId: string\n abortSignal?: AbortSignal\n}) {\n try {\n const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/forms/${formId}/cp-hcms-content/${contentId}/publish`\n return await putRequest(url, undefined, abortSignal)\n } catch (err) {\n if (!abortSignal?.aborted) {\n Sentry.captureException(err)\n }\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError('Please login and try again.', {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n })\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400: {\n throw new OneBlinkAppsError(error.message, {\n originalError: error,\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n originalError: error,\n title: 'Unknown Application',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Change the status of a CivicPlus HCMS content item to draft.\n *\n * @param options\n * @returns\n */\nexport async function draftHCMSContentItem({\n formsAppId,\n formId,\n contentId,\n abortSignal,\n}: {\n formsAppId: number\n formId: number\n contentId: string\n abortSignal?: AbortSignal\n}) {\n try {\n const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/forms/${formId}/cp-hcms-content/${contentId}/draft`\n return await putRequest(url, undefined, abortSignal)\n } catch (err) {\n if (!abortSignal?.aborted) {\n Sentry.captureException(err)\n }\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError('Please login and try again.', {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n })\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400: {\n throw new OneBlinkAppsError(error.message, {\n originalError: error,\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n originalError: error,\n title: 'Unknown Application',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\nexport type CivicPlusHCMSContentItemStatus = 'Draft' | 'Published'\n\nexport type CivicPlusHCMSContentItem = {\n id: string\n createdBy: string\n lastModifiedBy: string\n data: {\n 'submission-json-v1'?: SubmissionTypes.S3SubmissionData & {\n originalExternalId?: string\n }\n }\n /** ISO datetime string */\n created: string\n /** ISO datetime string */\n lastModified: string\n status: CivicPlusHCMSContentItemStatus\n /** HEX colour */\n statusColor: string\n contentTypeName: string\n contentTypeDisplayName: string\n version: number\n contentTypeId: string\n}\nexport type CivicPlusHCMSContentItemsResult = {\n /**\n * Represents the total number of items based on the search. Can be used to\n * achieve paging or infinite scrolling to load more.\n */\n total: number\n /** The HCMS Content Type's items */\n items: CivicPlusHCMSContentItem[]\n}\n\n/**\n * Search CivicPlus HCMS content items.\n *\n * @param options\n * @returns\n */\nexport async function searchCivicPlusHCMSContentItems({\n formsAppId,\n formId,\n $top,\n $skip,\n $search,\n $filter,\n $orderby,\n abortSignal,\n}: {\n /** The identifier for the Forms App to determine the HCMS Content Type. */\n formsAppId: number\n /** The identifier for the Form to determine the HCMS Content Type. */\n formId: number\n /**\n * How many items to return in the result. Can be used to achieve paging or\n * infinite scrolling to load more.\n */\n $top?: number\n /**\n * How many items to skip in the result. Can be used to achieve paging or\n * infinite scrolling to load more.\n */\n $skip?: number\n /** Optional OData full text search. */\n $search?: string\n /** Optional OData filter definition. */\n $filter?: string\n /** Optional OData order definition. */\n $orderby?: string\n /** Allows request to be aborted */\n abortSignal?: AbortSignal\n}): Promise<CivicPlusHCMSContentItemsResult> {\n try {\n const {\n auth: { access_token },\n appName,\n baseUrl,\n contentTypeName,\n } = await getCPHCMSToken({ formsAppId, formId }, abortSignal)\n\n const url = new URL(`/api/content/${appName}/${contentTypeName}`, baseUrl)\n\n if (typeof $top === 'number')\n url.searchParams.append('$top', $top.toString())\n if (typeof $skip === 'number')\n url.searchParams.append('$skip', $skip.toString())\n if ($search) url.searchParams.append('$search', $search)\n if ($filter) url.searchParams.append('$filter', $filter)\n if ($orderby) url.searchParams.append('$orderby', $orderby)\n return await fetchJSON(url.href, {\n signal: abortSignal,\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${access_token}`,\n 'X-Flatten': 'true',\n 'X-Unpublished': 'true',\n },\n })\n } catch (err) {\n if (!abortSignal?.aborted) {\n Sentry.captureException(err)\n }\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError('Please login and try again.', {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n })\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400: {\n throw new OneBlinkAppsError(error.message, {\n originalError: error,\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n originalError: error,\n title: 'Unknown Application',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Delete CivicPlus HCMS content item.\n *\n * @param options\n * @returns\n */\nexport async function deleteCivicPlusHCMSContentItem({\n formsAppId,\n formId,\n contentId,\n abortSignal,\n}: {\n /** The identifier for the Forms App to determine the HCMS Content Type. */\n formsAppId: number\n /** The identifier for the Form to determine the HCMS Content Type. */\n formId: number\n /** The identifier for the HCMS Content to be deleted */\n contentId: string\n /** Allows request to be aborted */\n abortSignal?: AbortSignal\n}): Promise<void> {\n try {\n const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/forms/${formId}/cp-hcms-content/${contentId}`\n\n return await deleteRequest(url, abortSignal)\n } catch (err) {\n if (!abortSignal?.aborted) {\n Sentry.captureException(err)\n }\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError('Please login and try again.', {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n })\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400: {\n throw new OneBlinkAppsError(error.message, {\n originalError: error,\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n originalError: error,\n title: 'Unknown Application',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { SubmissionTypes } from '@oneblink/types';
|
|
2
|
+
export declare function getPrefillKey(prefillFormDataId: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Get prefill data for a form. Checks if the data is stored locally first, and
|
|
5
|
+
* then downloads from remote if required. After a successful download from the
|
|
6
|
+
* remote store, it will store is locally to ensure the next request will
|
|
7
|
+
* retrieve the data from the local store.
|
|
8
|
+
*
|
|
9
|
+
* ```js
|
|
10
|
+
* const formId = 1
|
|
11
|
+
* const prefillFormDataId = '24faee0a-dca1-4c88-9100-9da2aae8e0ac'
|
|
12
|
+
* const prefillData = await prefillService.getPrefillFormData(
|
|
13
|
+
* formId,
|
|
14
|
+
* prefillFormDataId,
|
|
15
|
+
* )
|
|
16
|
+
* if (prefillData) {
|
|
17
|
+
* // prefill form with data
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @param formId
|
|
22
|
+
* @param prefillFormDataId
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
25
|
+
export declare function getPrefillFormData<T extends Record<string, unknown>>(formId: number, prefillFormDataId: string | undefined | null): Promise<T | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Helper to store Job prefill data locally if it is not currently in the local
|
|
28
|
+
* store. Pass in an array of Jobs.
|
|
29
|
+
*
|
|
30
|
+
* #### Example
|
|
31
|
+
*
|
|
32
|
+
* ```js
|
|
33
|
+
* const jobs = [...]
|
|
34
|
+
* await jobService.ensurePrefillFormDataExists(jobs)
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @param jobs
|
|
38
|
+
* @returns
|
|
39
|
+
*/
|
|
40
|
+
export declare function ensurePrefillFormDataExists(jobs: SubmissionTypes.FormsAppJob[]): Promise<void>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import utilsService from './utils';
|
|
2
|
+
import { downloadPreFillFormData } from './api/prefill';
|
|
3
|
+
export function getPrefillKey(prefillFormDataId) {
|
|
4
|
+
return `V2_PREFILL_${prefillFormDataId}`;
|
|
5
|
+
}
|
|
6
|
+
function get(prefillFormDataId) {
|
|
7
|
+
const key = getPrefillKey(prefillFormDataId);
|
|
8
|
+
return utilsService.getLocalForageItem(key);
|
|
9
|
+
}
|
|
10
|
+
function set(prefillFormDataId, model) {
|
|
11
|
+
const key = getPrefillKey(prefillFormDataId);
|
|
12
|
+
return utilsService.setLocalForageItem(key, model);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get prefill data for a form. Checks if the data is stored locally first, and
|
|
16
|
+
* then downloads from remote if required. After a successful download from the
|
|
17
|
+
* remote store, it will store is locally to ensure the next request will
|
|
18
|
+
* retrieve the data from the local store.
|
|
19
|
+
*
|
|
20
|
+
* ```js
|
|
21
|
+
* const formId = 1
|
|
22
|
+
* const prefillFormDataId = '24faee0a-dca1-4c88-9100-9da2aae8e0ac'
|
|
23
|
+
* const prefillData = await prefillService.getPrefillFormData(
|
|
24
|
+
* formId,
|
|
25
|
+
* prefillFormDataId,
|
|
26
|
+
* )
|
|
27
|
+
* if (prefillData) {
|
|
28
|
+
* // prefill form with data
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @param formId
|
|
33
|
+
* @param prefillFormDataId
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
export async function getPrefillFormData(formId, prefillFormDataId) {
|
|
37
|
+
if (!prefillFormDataId) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return get(prefillFormDataId).then((prefillData) => {
|
|
41
|
+
if (prefillData)
|
|
42
|
+
return prefillData;
|
|
43
|
+
return downloadPreFillFormData(formId, prefillFormDataId).then((downloadedPrefillData) => set(prefillFormDataId, downloadedPrefillData));
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Helper to store Job prefill data locally if it is not currently in the local
|
|
48
|
+
* store. Pass in an array of Jobs.
|
|
49
|
+
*
|
|
50
|
+
* #### Example
|
|
51
|
+
*
|
|
52
|
+
* ```js
|
|
53
|
+
* const jobs = [...]
|
|
54
|
+
* await jobService.ensurePrefillFormDataExists(jobs)
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @param jobs
|
|
58
|
+
* @returns
|
|
59
|
+
*/
|
|
60
|
+
export async function ensurePrefillFormDataExists(jobs) {
|
|
61
|
+
if (!jobs.length) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const keys = await utilsService.localForage.keys();
|
|
65
|
+
for (const { formId, preFillFormDataId } of jobs) {
|
|
66
|
+
if (!preFillFormDataId ||
|
|
67
|
+
keys.some((key) => key === getPrefillKey(preFillFormDataId))) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
await getPrefillFormData(formId, preFillFormDataId);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.warn('Suppressing error retrieving prefill data for jobs', error);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=job-prefill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-prefill.js","sourceRoot":"","sources":["../../../src/apps/services/job-prefill.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAGvD,MAAM,UAAU,aAAa,CAAC,iBAAyB;IACrD,OAAO,cAAc,iBAAiB,EAAE,CAAA;AAC1C,CAAC;AAED,SAAS,GAAG,CAAI,iBAAyB;IACvC,MAAM,GAAG,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAA;IAC5C,OAAO,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,GAAG,CACV,iBAAyB,EACzB,KAAQ;IAER,MAAM,GAAG,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAA;IAC5C,OAAO,YAAY,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAc,EACd,iBAA4C;IAE5C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,GAAG,CAAI,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;QACpD,IAAI,WAAW;YAAE,OAAO,WAAW,CAAA;QAEnC,OAAO,uBAAuB,CAAI,MAAM,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAC/D,CAAC,qBAAqB,EAAE,EAAE,CACxB,GAAG,CAAI,iBAAiB,EAAE,qBAAqB,CAAC,CACnD,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAmC;IAEnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAM;IACR,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;IAClD,KAAK,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,IAAI,EAAE,CAAC;QACjD,IACE,CAAC,iBAAiB;YAClB,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,aAAa,CAAC,iBAAiB,CAAC,CAAC,EAC5D,CAAC;YACD,SAAQ;QACV,CAAC;QACD,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,oDAAoD,EAAE,KAAK,CAAC,CAAA;QAC3E,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import utilsService from './utils'\nimport { downloadPreFillFormData } from './api/prefill'\nimport { SubmissionTypes } from '@oneblink/types'\n\nexport function getPrefillKey(prefillFormDataId: string) {\n return `V2_PREFILL_${prefillFormDataId}`\n}\n\nfunction get<T>(prefillFormDataId: string): Promise<T | null> {\n const key = getPrefillKey(prefillFormDataId)\n return utilsService.getLocalForageItem(key)\n}\n\nfunction set<T extends Record<string, unknown>>(\n prefillFormDataId: string,\n model: T,\n): Promise<T> {\n const key = getPrefillKey(prefillFormDataId)\n return utilsService.setLocalForageItem(key, model)\n}\n\n/**\n * Get prefill data for a form. Checks if the data is stored locally first, and\n * then downloads from remote if required. After a successful download from the\n * remote store, it will store is locally to ensure the next request will\n * retrieve the data from the local store.\n *\n * ```js\n * const formId = 1\n * const prefillFormDataId = '24faee0a-dca1-4c88-9100-9da2aae8e0ac'\n * const prefillData = await prefillService.getPrefillFormData(\n * formId,\n * prefillFormDataId,\n * )\n * if (prefillData) {\n * // prefill form with data\n * }\n * ```\n *\n * @param formId\n * @param prefillFormDataId\n * @returns\n */\nexport async function getPrefillFormData<T extends Record<string, unknown>>(\n formId: number,\n prefillFormDataId: string | undefined | null,\n): Promise<T | null> {\n if (!prefillFormDataId) {\n return null\n }\n\n return get<T>(prefillFormDataId).then((prefillData) => {\n if (prefillData) return prefillData\n\n return downloadPreFillFormData<T>(formId, prefillFormDataId).then(\n (downloadedPrefillData) =>\n set<T>(prefillFormDataId, downloadedPrefillData),\n )\n })\n}\n\n/**\n * Helper to store Job prefill data locally if it is not currently in the local\n * store. Pass in an array of Jobs.\n *\n * #### Example\n *\n * ```js\n * const jobs = [...]\n * await jobService.ensurePrefillFormDataExists(jobs)\n * ```\n *\n * @param jobs\n * @returns\n */\nexport async function ensurePrefillFormDataExists(\n jobs: SubmissionTypes.FormsAppJob[],\n): Promise<void> {\n if (!jobs.length) {\n return\n }\n\n const keys = await utilsService.localForage.keys()\n for (const { formId, preFillFormDataId } of jobs) {\n if (\n !preFillFormDataId ||\n keys.some((key) => key === getPrefillKey(preFillFormDataId))\n ) {\n continue\n }\n try {\n await getPrefillFormData(formId, preFillFormDataId)\n } catch (error) {\n console.warn('Suppressing error retrieving prefill data for jobs', error)\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SubmissionEventTypes } from '@oneblink/types';
|
|
2
|
+
import { BasePaymentConfigurationPayload, PaymentProvider } from '../../types/payments';
|
|
3
|
+
import { FormSubmissionResult } from '../../types/submissions';
|
|
4
|
+
declare class BPOINTPaymentProvider implements PaymentProvider<SubmissionEventTypes.BPOINTSubmissionEvent> {
|
|
5
|
+
constructor(paymentSubmissionEvent: SubmissionEventTypes.BPOINTSubmissionEvent, formSubmissionResult: FormSubmissionResult);
|
|
6
|
+
paymentSubmissionEvent: SubmissionEventTypes.BPOINTSubmissionEvent;
|
|
7
|
+
formSubmissionResult: FormSubmissionResult;
|
|
8
|
+
preparePaymentConfiguration(basePayload: BasePaymentConfigurationPayload): {
|
|
9
|
+
path: string;
|
|
10
|
+
payload: {
|
|
11
|
+
integrationEnvironmentId: string;
|
|
12
|
+
crn2: string | undefined;
|
|
13
|
+
crn3: string | undefined;
|
|
14
|
+
amount: number;
|
|
15
|
+
redirectUrl: string;
|
|
16
|
+
submissionId: string | null;
|
|
17
|
+
paymentFormUrl?: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
verifyPaymentTransaction(query: Record<string, unknown>): Promise<{
|
|
21
|
+
receiptItems: import("../../types/payments").PaymentReceiptItem[];
|
|
22
|
+
transaction: {
|
|
23
|
+
isSuccess: boolean;
|
|
24
|
+
errorMessage: string;
|
|
25
|
+
};
|
|
26
|
+
submissionResult: FormSubmissionResult;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
export default BPOINTPaymentProvider;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import replaceInjectablesWithSubmissionValues from '../replaceInjectablesWithSubmissionValues';
|
|
2
|
+
import OneBlinkAppsError from '../errors/oneBlinkAppsError';
|
|
3
|
+
import { verifyPaymentTransaction } from '../api/payment';
|
|
4
|
+
import { generateAmountReceiptItem, generateCreditCardMaskReceiptItem, generateSubmissionIdReceiptItem, prepareReceiptItems, } from './receipt-items';
|
|
5
|
+
class BPOINTPaymentProvider {
|
|
6
|
+
constructor(paymentSubmissionEvent, formSubmissionResult) {
|
|
7
|
+
this.paymentSubmissionEvent = paymentSubmissionEvent;
|
|
8
|
+
this.formSubmissionResult = formSubmissionResult;
|
|
9
|
+
}
|
|
10
|
+
preparePaymentConfiguration(basePayload) {
|
|
11
|
+
return {
|
|
12
|
+
path: `/forms/${this.formSubmissionResult.definition.id}/bpoint-payment`,
|
|
13
|
+
payload: {
|
|
14
|
+
...basePayload,
|
|
15
|
+
integrationEnvironmentId: this.paymentSubmissionEvent.configuration.environmentId,
|
|
16
|
+
crn2: this.paymentSubmissionEvent.configuration.crn2 &&
|
|
17
|
+
replaceInjectablesWithSubmissionValues(this.paymentSubmissionEvent.configuration.crn2, this.formSubmissionResult).text,
|
|
18
|
+
crn3: this.paymentSubmissionEvent.configuration.crn3 &&
|
|
19
|
+
replaceInjectablesWithSubmissionValues(this.paymentSubmissionEvent.configuration.crn3, this.formSubmissionResult).text,
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
async verifyPaymentTransaction(query) {
|
|
24
|
+
var _a;
|
|
25
|
+
const { ResultKey: transactionToken } = query;
|
|
26
|
+
if (!transactionToken) {
|
|
27
|
+
throw new OneBlinkAppsError('Transactions can not be verified unless navigating here directly after a payment.');
|
|
28
|
+
}
|
|
29
|
+
const transaction = await verifyPaymentTransaction(`/forms/${this.formSubmissionResult.definition.id}/bpoint-verification`, {
|
|
30
|
+
transactionToken,
|
|
31
|
+
integrationEnvironmentId: this.paymentSubmissionEvent.configuration.environmentId,
|
|
32
|
+
});
|
|
33
|
+
if (this.formSubmissionResult.submissionId !== transaction.Crn1) {
|
|
34
|
+
throw new OneBlinkAppsError('It looks like you are attempting to view a receipt for the incorrect payment.');
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
receiptItems: prepareReceiptItems([
|
|
38
|
+
generateSubmissionIdReceiptItem(this.formSubmissionResult.submissionId),
|
|
39
|
+
{
|
|
40
|
+
className: 'ob-payment-receipt__transaction-id',
|
|
41
|
+
valueClassName: 'cypress-payment-receipt-transaction-id',
|
|
42
|
+
icon: 'shopping_cart',
|
|
43
|
+
label: 'Receipt Number',
|
|
44
|
+
value: transaction.ReceiptNumber,
|
|
45
|
+
allowCopyToClipboard: true,
|
|
46
|
+
},
|
|
47
|
+
generateCreditCardMaskReceiptItem((_a = transaction.CardDetails) === null || _a === void 0 ? void 0 : _a.MaskedCardNumber),
|
|
48
|
+
generateAmountReceiptItem(transaction.Amount / 100),
|
|
49
|
+
]),
|
|
50
|
+
transaction: {
|
|
51
|
+
isSuccess: transaction.ResponseCode === '0',
|
|
52
|
+
errorMessage: transaction.ResponseText,
|
|
53
|
+
},
|
|
54
|
+
submissionResult: this.formSubmissionResult,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export default BPOINTPaymentProvider;
|
|
59
|
+
//# sourceMappingURL=BPOINTPaymentProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BPOINTPaymentProvider.js","sourceRoot":"","sources":["../../../../src/apps/services/payment-providers/BPOINTPaymentProvider.ts"],"names":[],"mappings":"AAMA,OAAO,sCAAsC,MAAM,2CAA2C,CAAA;AAC9F,OAAO,iBAAiB,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EACL,yBAAyB,EACzB,iCAAiC,EACjC,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAExB,MAAM,qBAAqB;IAGzB,YACE,sBAAkE,EAClE,oBAA0C;QAE1C,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAA;QACpD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAA;IAClD,CAAC;IAKD,2BAA2B,CAAC,WAA4C;QACtE,OAAO;YACL,IAAI,EAAE,UAAU,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,iBAAiB;YACxE,OAAO,EAAE;gBACP,GAAG,WAAW;gBACd,wBAAwB,EACtB,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,aAAa;gBACzD,IAAI,EACF,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI;oBAC9C,sCAAsC,CACpC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI,EAC9C,IAAI,CAAC,oBAAoB,CAC1B,CAAC,IAAI;gBACR,IAAI,EACF,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI;oBAC9C,sCAAsC,CACpC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI,EAC9C,IAAI,CAAC,oBAAoB,CAC1B,CAAC,IAAI;aACT;SACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,KAA8B;;QAC3D,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAA;QAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,iBAAiB,CACzB,mFAAmF,CACpF,CAAA;QACH,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAUhD,UAAU,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,sBAAsB,EACvE;YACE,gBAAgB;YAChB,wBAAwB,EACtB,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,aAAa;SAC1D,CACF,CAAA;QACD,IAAI,IAAI,CAAC,oBAAoB,CAAC,YAAY,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;YAChE,MAAM,IAAI,iBAAiB,CACzB,+EAA+E,CAChF,CAAA;QACH,CAAC;QACD,OAAO;YACL,YAAY,EAAE,mBAAmB,CAAC;gBAChC,+BAA+B,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;gBACvE;oBACE,SAAS,EAAE,oCAAoC;oBAC/C,cAAc,EAAE,wCAAwC;oBACxD,IAAI,EAAE,eAAe;oBACrB,KAAK,EAAE,gBAAgB;oBACvB,KAAK,EAAE,WAAW,CAAC,aAAa;oBAChC,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,iCAAiC,CAC/B,MAAA,WAAW,CAAC,WAAW,0CAAE,gBAAgB,CAC1C;gBACD,yBAAyB,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC;aACpD,CAAC;YACF,WAAW,EAAE;gBACX,SAAS,EAAE,WAAW,CAAC,YAAY,KAAK,GAAG;gBAC3C,YAAY,EAAE,WAAW,CAAC,YAAY;aACvC;YACD,gBAAgB,EAAE,IAAI,CAAC,oBAAoB;SAC5C,CAAA;IACH,CAAC;CACF;AAED,eAAe,qBAAqB,CAAA","sourcesContent":["import { SubmissionEventTypes } from '@oneblink/types'\nimport {\n BasePaymentConfigurationPayload,\n PaymentProvider,\n} from '../../types/payments'\nimport { FormSubmissionResult } from '../../types/submissions'\nimport replaceInjectablesWithSubmissionValues from '../replaceInjectablesWithSubmissionValues'\nimport OneBlinkAppsError from '../errors/oneBlinkAppsError'\nimport { verifyPaymentTransaction } from '../api/payment'\nimport {\n generateAmountReceiptItem,\n generateCreditCardMaskReceiptItem,\n generateSubmissionIdReceiptItem,\n prepareReceiptItems,\n} from './receipt-items'\n\nclass BPOINTPaymentProvider\n implements PaymentProvider<SubmissionEventTypes.BPOINTSubmissionEvent>\n{\n constructor(\n paymentSubmissionEvent: SubmissionEventTypes.BPOINTSubmissionEvent,\n formSubmissionResult: FormSubmissionResult,\n ) {\n this.paymentSubmissionEvent = paymentSubmissionEvent\n this.formSubmissionResult = formSubmissionResult\n }\n\n paymentSubmissionEvent: SubmissionEventTypes.BPOINTSubmissionEvent\n formSubmissionResult: FormSubmissionResult\n\n preparePaymentConfiguration(basePayload: BasePaymentConfigurationPayload) {\n return {\n path: `/forms/${this.formSubmissionResult.definition.id}/bpoint-payment`,\n payload: {\n ...basePayload,\n integrationEnvironmentId:\n this.paymentSubmissionEvent.configuration.environmentId,\n crn2:\n this.paymentSubmissionEvent.configuration.crn2 &&\n replaceInjectablesWithSubmissionValues(\n this.paymentSubmissionEvent.configuration.crn2,\n this.formSubmissionResult,\n ).text,\n crn3:\n this.paymentSubmissionEvent.configuration.crn3 &&\n replaceInjectablesWithSubmissionValues(\n this.paymentSubmissionEvent.configuration.crn3,\n this.formSubmissionResult,\n ).text,\n },\n }\n }\n\n async verifyPaymentTransaction(query: Record<string, unknown>) {\n const { ResultKey: transactionToken } = query\n if (!transactionToken) {\n throw new OneBlinkAppsError(\n 'Transactions can not be verified unless navigating here directly after a payment.',\n )\n }\n const transaction = await verifyPaymentTransaction<{\n ResponseCode: string\n ResponseText: string\n ReceiptNumber: string\n CardDetails?: {\n MaskedCardNumber?: string\n }\n Amount: number\n Crn1: string | null\n }>(\n `/forms/${this.formSubmissionResult.definition.id}/bpoint-verification`,\n {\n transactionToken,\n integrationEnvironmentId:\n this.paymentSubmissionEvent.configuration.environmentId,\n },\n )\n if (this.formSubmissionResult.submissionId !== transaction.Crn1) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to view a receipt for the incorrect payment.',\n )\n }\n return {\n receiptItems: prepareReceiptItems([\n generateSubmissionIdReceiptItem(this.formSubmissionResult.submissionId),\n {\n className: 'ob-payment-receipt__transaction-id',\n valueClassName: 'cypress-payment-receipt-transaction-id',\n icon: 'shopping_cart',\n label: 'Receipt Number',\n value: transaction.ReceiptNumber,\n allowCopyToClipboard: true,\n },\n generateCreditCardMaskReceiptItem(\n transaction.CardDetails?.MaskedCardNumber,\n ),\n generateAmountReceiptItem(transaction.Amount / 100),\n ]),\n transaction: {\n isSuccess: transaction.ResponseCode === '0',\n errorMessage: transaction.ResponseText,\n },\n submissionResult: this.formSubmissionResult,\n }\n }\n}\n\nexport default BPOINTPaymentProvider\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { SubmissionEventTypes } from '@oneblink/types';
|
|
2
|
+
import { BasePaymentConfigurationPayload, PaymentProvider } from '../../types/payments';
|
|
3
|
+
import { FormSubmissionResult } from '../../types/submissions';
|
|
4
|
+
declare class CPPayPaymentProvider implements PaymentProvider<SubmissionEventTypes.CPPaySubmissionEvent> {
|
|
5
|
+
constructor(paymentSubmissionEvent: SubmissionEventTypes.CPPaySubmissionEvent, formSubmissionResult: FormSubmissionResult);
|
|
6
|
+
paymentSubmissionEvent: SubmissionEventTypes.CPPaySubmissionEvent;
|
|
7
|
+
formSubmissionResult: FormSubmissionResult;
|
|
8
|
+
preparePaymentConfiguration(basePayload: BasePaymentConfigurationPayload): {
|
|
9
|
+
path: string;
|
|
10
|
+
payload: {
|
|
11
|
+
integrationGatewayId: string;
|
|
12
|
+
amount: number;
|
|
13
|
+
redirectUrl: string;
|
|
14
|
+
submissionId: string | null;
|
|
15
|
+
paymentFormUrl?: string;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
verifyPaymentTransaction(query: Record<string, unknown>): Promise<{
|
|
19
|
+
receiptItems: import("../../types/payments").PaymentReceiptItem[];
|
|
20
|
+
transaction: {
|
|
21
|
+
isSuccess: boolean;
|
|
22
|
+
errorMessage: "NoError" | "BadRequest" | "Unauthorized" | "NotFound" | "Unavailable" | "InvalidApiCredentials" | "CardTypeNotEnabled" | "MissingRequestFields" | "InvalidConfiguration" | "BlockedIpAddress" | "OperationNotSupported" | "UnknownInternalError" | "TransactionCanceled" | "SecurityTokenMismatch" | "ExpiredSession" | "OutstandingTransactionsExist" | "MissingFormFields" | "UnknownOrInvalidTokenData" | "CardNumberInvalid" | "CardLimitExceeded" | "CardExpired" | "CardExpirationInvalid" | "CardCvvInvalid" | "CardAvsFailed" | "CardDeclined" | "CardDeclinedFraud" | "CardDeclinedCallForApproval" | "CardDeclinedCallIssuer" | "CardDeclinedPossibleLost" | "CardDeclinedPossibleStolen" | "CardDeclinedLostOrStolen" | "CardDeclinedPickUpCard" | "CardDeclinedInsufficientFunds" | "CardDeclinedNoAccount" | "CardDeclinedContactIssuingBank" | "CardDeclinedByDevice" | "CardPartialApproval" | "CardNotFound" | "CardDeclinedLost" | "CardDeclinedStolen" | "CardDeclinedWrongPin" | "CardDeclinedInvalid" | "CardDeclinedWithdrawLimit" | "CardDeclinedPossibleFraud" | "CardDeclinedWrongPinLimit" | "CardOk" | "CardDeclinedCantVerifyPin" | "SignatureDeclined" | "CardDeclinedPartialAuth" | "CardDeclinedSwipeOnly" | "CardDeclinedTrackInvalid" | "CardDeclinedSwipeError" | "CardDeclinedChipError" | "CardMismatch" | "PaymentMethodNotSupported" | "AmountInvalid" | "AmountLimitExceeded" | "InvalidCurrency" | "DuplicateTransaction" | "InvalidTransaction" | "TransactionNotAllowedCallIssuer" | "TransactionAbandoned" | "TransactionReenter" | "TransactionReversalDataDoesNotMatchIssuer" | "TransactionTimeOut" | "TransactionStopSingleRecurringPayment" | "TransactionStopRecurringPayment" | "TransactionStopAllRecurringPaymentsForThisCard" | "TransactionTerminalIdError" | "TransactionAborted" | "TransactionUnsupported" | "TransactionAlreadyVoided" | "TransactionInvalidTaxExceedAmount" | "TransactionNotFound" | "TransactionDataMismatch" | "TransactionResponseDataMissing" | "TransactionAlreadyRefunded" | "TransactionAlreadyCaptured" | "TransactionRejected" | "TransactionDisputed" | "TransactionAlreadyInProgress" | "TransactionCaptureFailed" | "TransactionVoidFailed" | "TransactionAuthorizationFailed" | "TransactionSavePaymentFailed" | "TransactionListRetrievalFailed" | "TemporaryErrorPleaseTryAgain" | "TemporaryErrorDoNotTryAgain" | "UnknownMerchantError" | "UnsupportedDataFormatError" | "InvalidRequestToGateway" | "GatewayOperationError" | "CustomerDataCouldNotBeFound" | "MerchantClosed" | "SecViolation" | "DateError" | "CheckDigitError" | "CIDFormatError" | "MerchantTransactionLimitExceeded" | "InvalidGatewayConfigurationCredentials" | "TerminalRemoveCardFirst" | "TerminalUnsupportedEDC" | "TerminalBatchFailed" | "TerminalConnectionError" | "TerminalReceiveMessageError" | "TerminalCommunicationError" | "TerminalVariableError" | "TerminalPINPadError" | "TerminalUnknownError" | "TerminalNoHostApp" | "TerminalSettlementRequested" | "TerminalPartialBatchClosed" | "TerminalPrinterNotSupported" | "TerminalPrinterDisabled" | "TerminalPrinterOutOfPaper" | "TerminalInternalError" | "TerminalSendMessageError" | "TerminalUnsupportedCommand" | "TerminalTypeInvalid" | "TerminalInvalid" | "TerminalUpdatePending" | "AccountError" | "AccountOnHold" | "AccountRoutingError" | "AccountNumberInvalid" | undefined;
|
|
23
|
+
};
|
|
24
|
+
submissionResult: FormSubmissionResult;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export default CPPayPaymentProvider;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import OneBlinkAppsError from '../errors/oneBlinkAppsError';
|
|
2
|
+
import { acknowledgeCPPayTransaction, verifyPaymentTransaction, } from '../api/payment';
|
|
3
|
+
import { generateAmountReceiptItem, generateCreditCardMaskReceiptItem, generateSubmissionIdReceiptItem, prepareReceiptItems, } from './receipt-items';
|
|
4
|
+
class CPPayPaymentProvider {
|
|
5
|
+
constructor(paymentSubmissionEvent, formSubmissionResult) {
|
|
6
|
+
this.paymentSubmissionEvent = paymentSubmissionEvent;
|
|
7
|
+
this.formSubmissionResult = formSubmissionResult;
|
|
8
|
+
}
|
|
9
|
+
preparePaymentConfiguration(basePayload) {
|
|
10
|
+
return {
|
|
11
|
+
path: `/forms/${this.formSubmissionResult.definition.id}/cp-pay-payment`,
|
|
12
|
+
payload: {
|
|
13
|
+
...basePayload,
|
|
14
|
+
integrationGatewayId: this.paymentSubmissionEvent.configuration.gatewayId,
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
async verifyPaymentTransaction(query) {
|
|
19
|
+
var _a, _b, _c, _d;
|
|
20
|
+
const { transactionId, externalReferenceId: submissionId } = query;
|
|
21
|
+
if (typeof transactionId !== 'string' || !submissionId) {
|
|
22
|
+
throw new OneBlinkAppsError('Transactions can not be verified unless navigating here directly after a payment.');
|
|
23
|
+
}
|
|
24
|
+
if (this.formSubmissionResult.submissionId !== submissionId) {
|
|
25
|
+
throw new OneBlinkAppsError('It looks like you are attempting to view a receipt for the incorrect payment.');
|
|
26
|
+
}
|
|
27
|
+
const transaction = await verifyPaymentTransaction(`/forms/${this.formSubmissionResult.definition.id}/cp-pay-verification`, {
|
|
28
|
+
transactionId,
|
|
29
|
+
integrationGatewayId: this.paymentSubmissionEvent.configuration.gatewayId,
|
|
30
|
+
});
|
|
31
|
+
// Asynchronously acknowledge receipt
|
|
32
|
+
acknowledgeCPPayTransaction(this.formSubmissionResult.definition.id, {
|
|
33
|
+
transactionId,
|
|
34
|
+
integrationGatewayId: this.paymentSubmissionEvent.configuration.gatewayId,
|
|
35
|
+
}).catch((error) => {
|
|
36
|
+
console.warn('Error while attempting to acknowledge CP Pay transaction', error);
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
receiptItems: prepareReceiptItems([
|
|
40
|
+
generateSubmissionIdReceiptItem(this.formSubmissionResult.submissionId),
|
|
41
|
+
{
|
|
42
|
+
className: 'ob-payment-receipt__transaction-id',
|
|
43
|
+
valueClassName: 'cypress-payment-receipt-transaction-id',
|
|
44
|
+
icon: 'shopping_cart',
|
|
45
|
+
label: 'Transaction Id',
|
|
46
|
+
value: transactionId,
|
|
47
|
+
allowCopyToClipboard: true,
|
|
48
|
+
},
|
|
49
|
+
generateCreditCardMaskReceiptItem(((_a = transaction.result) === null || _a === void 0 ? void 0 : _a.lastFour)
|
|
50
|
+
? `xxxx xxxx xxxx ${transaction.result.lastFour}`
|
|
51
|
+
: null),
|
|
52
|
+
generateAmountReceiptItem((_b = transaction.result) === null || _b === void 0 ? void 0 : _b.amount),
|
|
53
|
+
]),
|
|
54
|
+
transaction: {
|
|
55
|
+
isSuccess: ((_c = transaction.result) === null || _c === void 0 ? void 0 : _c.responseType) === 'Success',
|
|
56
|
+
errorMessage: (_d = transaction.result) === null || _d === void 0 ? void 0 : _d.errorCode,
|
|
57
|
+
},
|
|
58
|
+
submissionResult: this.formSubmissionResult,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export default CPPayPaymentProvider;
|
|
63
|
+
//# sourceMappingURL=CPPayPaymentProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CPPayPaymentProvider.js","sourceRoot":"","sources":["../../../../src/apps/services/payment-providers/CPPayPaymentProvider.ts"],"names":[],"mappings":"AAMA,OAAO,iBAAiB,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,yBAAyB,EACzB,iCAAiC,EACjC,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAExB,MAAM,oBAAoB;IAGxB,YACE,sBAAiE,EACjE,oBAA0C;QAE1C,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAA;QACpD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAA;IAClD,CAAC;IAKD,2BAA2B,CAAC,WAA4C;QACtE,OAAO;YACL,IAAI,EAAE,UAAU,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,iBAAiB;YACxE,OAAO,EAAE;gBACP,GAAG,WAAW;gBACd,oBAAoB,EAClB,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,SAAS;aACtD;SACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,KAA8B;;QAC3D,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,GAAG,KAAK,CAAA;QAClE,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;YACvD,MAAM,IAAI,iBAAiB,CACzB,mFAAmF,CACpF,CAAA;QACH,CAAC;QACD,IAAI,IAAI,CAAC,oBAAoB,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;YAC5D,MAAM,IAAI,iBAAiB,CACzB,+EAA+E,CAChF,CAAA;QACH,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAEhD,UAAU,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,sBAAsB,EAAE;YACzE,aAAa;YACb,oBAAoB,EAAE,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,SAAS;SAC1E,CAAC,CAAA;QACF,qCAAqC;QACrC,2BAA2B,CAAC,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,EAAE;YACnE,aAAa;YACb,oBAAoB,EAAE,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,SAAS;SAC1E,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,OAAO,CAAC,IAAI,CACV,0DAA0D,EAC1D,KAAK,CACN,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,OAAO;YACL,YAAY,EAAE,mBAAmB,CAAC;gBAChC,+BAA+B,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;gBACvE;oBACE,SAAS,EAAE,oCAAoC;oBAC/C,cAAc,EAAE,wCAAwC;oBACxD,IAAI,EAAE,eAAe;oBACrB,KAAK,EAAE,gBAAgB;oBACvB,KAAK,EAAE,aAAa;oBACpB,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,iCAAiC,CAC/B,CAAA,MAAA,WAAW,CAAC,MAAM,0CAAE,QAAQ;oBAC1B,CAAC,CAAC,kBAAkB,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE;oBACjD,CAAC,CAAC,IAAI,CACT;gBACD,yBAAyB,CAAC,MAAA,WAAW,CAAC,MAAM,0CAAE,MAAM,CAAC;aACtD,CAAC;YACF,WAAW,EAAE;gBACX,SAAS,EAAE,CAAA,MAAA,WAAW,CAAC,MAAM,0CAAE,YAAY,MAAK,SAAS;gBACzD,YAAY,EAAE,MAAA,WAAW,CAAC,MAAM,0CAAE,SAAS;aAC5C;YACD,gBAAgB,EAAE,IAAI,CAAC,oBAAoB;SAC5C,CAAA;IACH,CAAC;CACF;AAED,eAAe,oBAAoB,CAAA","sourcesContent":["import { SubmissionEventTypes } from '@oneblink/types'\nimport {\n BasePaymentConfigurationPayload,\n PaymentProvider,\n} from '../../types/payments'\nimport { FormSubmissionResult } from '../../types/submissions'\nimport OneBlinkAppsError from '../errors/oneBlinkAppsError'\nimport {\n acknowledgeCPPayTransaction,\n verifyPaymentTransaction,\n} from '../api/payment'\nimport { components } from '@oneblink/types/typescript/cp-pay/swagger.v2'\nimport {\n generateAmountReceiptItem,\n generateCreditCardMaskReceiptItem,\n generateSubmissionIdReceiptItem,\n prepareReceiptItems,\n} from './receipt-items'\n\nclass CPPayPaymentProvider\n implements PaymentProvider<SubmissionEventTypes.CPPaySubmissionEvent>\n{\n constructor(\n paymentSubmissionEvent: SubmissionEventTypes.CPPaySubmissionEvent,\n formSubmissionResult: FormSubmissionResult,\n ) {\n this.paymentSubmissionEvent = paymentSubmissionEvent\n this.formSubmissionResult = formSubmissionResult\n }\n\n paymentSubmissionEvent: SubmissionEventTypes.CPPaySubmissionEvent\n formSubmissionResult: FormSubmissionResult\n\n preparePaymentConfiguration(basePayload: BasePaymentConfigurationPayload) {\n return {\n path: `/forms/${this.formSubmissionResult.definition.id}/cp-pay-payment`,\n payload: {\n ...basePayload,\n integrationGatewayId:\n this.paymentSubmissionEvent.configuration.gatewayId,\n },\n }\n }\n\n async verifyPaymentTransaction(query: Record<string, unknown>) {\n const { transactionId, externalReferenceId: submissionId } = query\n if (typeof transactionId !== 'string' || !submissionId) {\n throw new OneBlinkAppsError(\n 'Transactions can not be verified unless navigating here directly after a payment.',\n )\n }\n if (this.formSubmissionResult.submissionId !== submissionId) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to view a receipt for the incorrect payment.',\n )\n }\n\n const transaction = await verifyPaymentTransaction<\n components['schemas']['TransactionDetailsViewModelResponseEnvelope']\n >(`/forms/${this.formSubmissionResult.definition.id}/cp-pay-verification`, {\n transactionId,\n integrationGatewayId: this.paymentSubmissionEvent.configuration.gatewayId,\n })\n // Asynchronously acknowledge receipt\n acknowledgeCPPayTransaction(this.formSubmissionResult.definition.id, {\n transactionId,\n integrationGatewayId: this.paymentSubmissionEvent.configuration.gatewayId,\n }).catch((error) => {\n console.warn(\n 'Error while attempting to acknowledge CP Pay transaction',\n error,\n )\n })\n\n return {\n receiptItems: prepareReceiptItems([\n generateSubmissionIdReceiptItem(this.formSubmissionResult.submissionId),\n {\n className: 'ob-payment-receipt__transaction-id',\n valueClassName: 'cypress-payment-receipt-transaction-id',\n icon: 'shopping_cart',\n label: 'Transaction Id',\n value: transactionId,\n allowCopyToClipboard: true,\n },\n generateCreditCardMaskReceiptItem(\n transaction.result?.lastFour\n ? `xxxx xxxx xxxx ${transaction.result.lastFour}`\n : null,\n ),\n generateAmountReceiptItem(transaction.result?.amount),\n ]),\n transaction: {\n isSuccess: transaction.result?.responseType === 'Success',\n errorMessage: transaction.result?.errorCode,\n },\n submissionResult: this.formSubmissionResult,\n }\n }\n}\n\nexport default CPPayPaymentProvider\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SubmissionEventTypes } from '@oneblink/types';
|
|
2
|
+
import { BasePaymentConfigurationPayload, PaymentProvider } from '../../types/payments';
|
|
3
|
+
import { FormSubmissionResult } from '../../types/submissions';
|
|
4
|
+
declare class NSWGovPayPaymentProvider implements PaymentProvider<SubmissionEventTypes.NSWGovPaySubmissionEvent> {
|
|
5
|
+
constructor(paymentSubmissionEvent: SubmissionEventTypes.NSWGovPaySubmissionEvent, formSubmissionResult: FormSubmissionResult);
|
|
6
|
+
paymentSubmissionEvent: SubmissionEventTypes.NSWGovPaySubmissionEvent;
|
|
7
|
+
formSubmissionResult: FormSubmissionResult;
|
|
8
|
+
preparePaymentConfiguration(basePayload: BasePaymentConfigurationPayload): {
|
|
9
|
+
path: string;
|
|
10
|
+
payload: {
|
|
11
|
+
integrationPrimaryAgencyId: string;
|
|
12
|
+
productDescription: string;
|
|
13
|
+
customerReference: string | undefined;
|
|
14
|
+
subAgencyCode: string | undefined;
|
|
15
|
+
amount: number;
|
|
16
|
+
redirectUrl: string;
|
|
17
|
+
submissionId: string | null;
|
|
18
|
+
paymentFormUrl?: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
verifyPaymentTransaction(query: Record<string, unknown>): Promise<{
|
|
22
|
+
receiptItems: import("../../types/payments").PaymentReceiptItem[];
|
|
23
|
+
transaction: {
|
|
24
|
+
isSuccess: boolean;
|
|
25
|
+
errorMessage: string | undefined;
|
|
26
|
+
};
|
|
27
|
+
submissionResult: FormSubmissionResult;
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
export default NSWGovPayPaymentProvider;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import replaceInjectablesWithSubmissionValues from '../replaceInjectablesWithSubmissionValues';
|
|
2
|
+
import OneBlinkAppsError from '../errors/oneBlinkAppsError';
|
|
3
|
+
import { generateAmountReceiptItem, generateCreditCardMaskReceiptItem, generateReceiptItem, generateSubmissionIdReceiptItem, prepareReceiptItems, } from './receipt-items';
|
|
4
|
+
import { localisationService } from '../..';
|
|
5
|
+
class NSWGovPayPaymentProvider {
|
|
6
|
+
constructor(paymentSubmissionEvent, formSubmissionResult) {
|
|
7
|
+
this.paymentSubmissionEvent = paymentSubmissionEvent;
|
|
8
|
+
this.formSubmissionResult = formSubmissionResult;
|
|
9
|
+
}
|
|
10
|
+
preparePaymentConfiguration(basePayload) {
|
|
11
|
+
return {
|
|
12
|
+
path: `/forms/${this.formSubmissionResult.definition.id}/nsw-gov-pay-payment`,
|
|
13
|
+
payload: {
|
|
14
|
+
...basePayload,
|
|
15
|
+
integrationPrimaryAgencyId: this.paymentSubmissionEvent.configuration.primaryAgencyId,
|
|
16
|
+
productDescription: replaceInjectablesWithSubmissionValues(this.paymentSubmissionEvent.configuration.productDescription, this.formSubmissionResult).text,
|
|
17
|
+
customerReference: this.paymentSubmissionEvent.configuration.customerReference &&
|
|
18
|
+
replaceInjectablesWithSubmissionValues(this.paymentSubmissionEvent.configuration.customerReference, this.formSubmissionResult).text,
|
|
19
|
+
subAgencyCode: this.paymentSubmissionEvent.configuration.subAgencyCode &&
|
|
20
|
+
replaceInjectablesWithSubmissionValues(this.paymentSubmissionEvent.configuration.subAgencyCode, this.formSubmissionResult).text,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async verifyPaymentTransaction(query) {
|
|
25
|
+
const { submissionId, isSuccess, errorMessage, paymentReference, completionReference, bankReference, paymentMethod, cardLast4Digits, amount, surcharge, surchargeGst, } = query;
|
|
26
|
+
if (!submissionId || !isSuccess || !paymentReference) {
|
|
27
|
+
throw new OneBlinkAppsError('Transactions can not be verified unless navigating here directly after a payment.');
|
|
28
|
+
}
|
|
29
|
+
if (this.formSubmissionResult.submissionId !== submissionId) {
|
|
30
|
+
throw new OneBlinkAppsError('It looks like you are attempting to view a receipt for the incorrect payment.');
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
receiptItems: prepareReceiptItems([
|
|
34
|
+
generateSubmissionIdReceiptItem(this.formSubmissionResult.submissionId),
|
|
35
|
+
generateReceiptItem({
|
|
36
|
+
className: 'ob-payment-receipt__completion-reference',
|
|
37
|
+
valueClassName: 'cypress-payment-receipt-completion-reference',
|
|
38
|
+
icon: 'check_circle',
|
|
39
|
+
label: 'Completion Reference',
|
|
40
|
+
value: completionReference,
|
|
41
|
+
allowCopyToClipboard: true,
|
|
42
|
+
}),
|
|
43
|
+
{
|
|
44
|
+
className: 'ob-payment-receipt__payment-reference',
|
|
45
|
+
valueClassName: 'cypress-payment-receipt-payment-reference',
|
|
46
|
+
icon: 'shopping_cart',
|
|
47
|
+
label: 'Payment Reference',
|
|
48
|
+
value: paymentReference,
|
|
49
|
+
allowCopyToClipboard: true,
|
|
50
|
+
},
|
|
51
|
+
generateReceiptItem({
|
|
52
|
+
className: 'ob-payment-receipt__bank-reference',
|
|
53
|
+
valueClassName: 'cypress-payment-receipt-bank-reference',
|
|
54
|
+
icon: 'account_balance',
|
|
55
|
+
label: 'Bank Reference',
|
|
56
|
+
value: bankReference,
|
|
57
|
+
allowCopyToClipboard: true,
|
|
58
|
+
}),
|
|
59
|
+
generateReceiptItem({
|
|
60
|
+
className: 'ob-payment-payment-method',
|
|
61
|
+
valueClassName: 'cypress-payment-receipt-payment-method',
|
|
62
|
+
icon: 'account_balance_wallet',
|
|
63
|
+
label: 'Payment Method',
|
|
64
|
+
value: getPaymentMethodLabel(paymentMethod),
|
|
65
|
+
allowCopyToClipboard: false,
|
|
66
|
+
}),
|
|
67
|
+
generateCreditCardMaskReceiptItem(cardLast4Digits ? `xxxx xxxx xxxx ${cardLast4Digits}` : null),
|
|
68
|
+
generateAmountReceiptItem(typeof amount === 'string' ? parseFloat(amount) : undefined),
|
|
69
|
+
generateReceiptItem({
|
|
70
|
+
className: 'ob-payment-receipt__surcharge',
|
|
71
|
+
valueClassName: 'cypress-payment-receipt-surcharge',
|
|
72
|
+
icon: 'price_check',
|
|
73
|
+
label: 'Surcharge Amount',
|
|
74
|
+
value: typeof surcharge === 'string'
|
|
75
|
+
? localisationService.formatCurrency(parseFloat(surcharge))
|
|
76
|
+
: undefined,
|
|
77
|
+
allowCopyToClipboard: false,
|
|
78
|
+
}),
|
|
79
|
+
generateReceiptItem({
|
|
80
|
+
className: 'ob-payment-receipt__surcharge-gst',
|
|
81
|
+
valueClassName: 'cypress-payment-receipt-surcharge-gst',
|
|
82
|
+
icon: 'price_check',
|
|
83
|
+
label: 'Surcharge GST',
|
|
84
|
+
value: typeof surchargeGst === 'string'
|
|
85
|
+
? localisationService.formatCurrency(parseFloat(surchargeGst))
|
|
86
|
+
: undefined,
|
|
87
|
+
allowCopyToClipboard: false,
|
|
88
|
+
}),
|
|
89
|
+
]),
|
|
90
|
+
transaction: {
|
|
91
|
+
isSuccess: isSuccess === 'true',
|
|
92
|
+
errorMessage,
|
|
93
|
+
},
|
|
94
|
+
submissionResult: this.formSubmissionResult,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function getPaymentMethodLabel(paymentMethod) {
|
|
99
|
+
switch (paymentMethod) {
|
|
100
|
+
case 'PAYID': {
|
|
101
|
+
return 'PayID';
|
|
102
|
+
}
|
|
103
|
+
case 'CARD': {
|
|
104
|
+
return 'Credit Card';
|
|
105
|
+
}
|
|
106
|
+
case 'PAYPAL': {
|
|
107
|
+
return 'PayPal';
|
|
108
|
+
}
|
|
109
|
+
case 'BPAY':
|
|
110
|
+
default: {
|
|
111
|
+
return paymentMethod;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export default NSWGovPayPaymentProvider;
|
|
116
|
+
//# sourceMappingURL=NSWGovPayPaymentProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSWGovPayPaymentProvider.js","sourceRoot":"","sources":["../../../../src/apps/services/payment-providers/NSWGovPayPaymentProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { SubmissionEventTypes, SubmissionTypes } from '@oneblink/types'\nimport {\n BasePaymentConfigurationPayload,\n PaymentProvider,\n} from '../../types/payments'\nimport { FormSubmissionResult } from '../../types/submissions'\nimport replaceInjectablesWithSubmissionValues from '../replaceInjectablesWithSubmissionValues'\nimport OneBlinkAppsError from '../errors/oneBlinkAppsError'\nimport {\n generateAmountReceiptItem,\n generateCreditCardMaskReceiptItem,\n generateReceiptItem,\n generateSubmissionIdReceiptItem,\n prepareReceiptItems,\n} from './receipt-items'\nimport { localisationService } from '../..'\n\nclass NSWGovPayPaymentProvider\n implements PaymentProvider<SubmissionEventTypes.NSWGovPaySubmissionEvent>\n{\n constructor(\n paymentSubmissionEvent: SubmissionEventTypes.NSWGovPaySubmissionEvent,\n formSubmissionResult: FormSubmissionResult,\n ) {\n this.paymentSubmissionEvent = paymentSubmissionEvent\n this.formSubmissionResult = formSubmissionResult\n }\n\n paymentSubmissionEvent: SubmissionEventTypes.NSWGovPaySubmissionEvent\n formSubmissionResult: FormSubmissionResult\n\n preparePaymentConfiguration(basePayload: BasePaymentConfigurationPayload) {\n return {\n path: `/forms/${this.formSubmissionResult.definition.id}/nsw-gov-pay-payment`,\n payload: {\n ...basePayload,\n integrationPrimaryAgencyId:\n this.paymentSubmissionEvent.configuration.primaryAgencyId,\n productDescription: replaceInjectablesWithSubmissionValues(\n this.paymentSubmissionEvent.configuration.productDescription,\n this.formSubmissionResult,\n ).text,\n customerReference:\n this.paymentSubmissionEvent.configuration.customerReference &&\n replaceInjectablesWithSubmissionValues(\n this.paymentSubmissionEvent.configuration.customerReference,\n this.formSubmissionResult,\n ).text,\n subAgencyCode:\n this.paymentSubmissionEvent.configuration.subAgencyCode &&\n replaceInjectablesWithSubmissionValues(\n this.paymentSubmissionEvent.configuration.subAgencyCode,\n this.formSubmissionResult,\n ).text,\n },\n }\n }\n\n async verifyPaymentTransaction(query: Record<string, unknown>) {\n const {\n submissionId,\n isSuccess,\n errorMessage,\n paymentReference,\n completionReference,\n bankReference,\n paymentMethod,\n cardLast4Digits,\n amount,\n surcharge,\n surchargeGst,\n } = query as {\n submissionId?: string\n isSuccess?: string\n errorMessage?: string\n paymentReference?: string\n completionReference?: string\n bankReference?: string\n paymentMethod?: string\n cardLast4Digits?: string\n amount?: string\n surcharge?: string\n surchargeGst?: string\n }\n\n if (!submissionId || !isSuccess || !paymentReference) {\n throw new OneBlinkAppsError(\n 'Transactions can not be verified unless navigating here directly after a payment.',\n )\n }\n\n if (this.formSubmissionResult.submissionId !== submissionId) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to view a receipt for the incorrect payment.',\n )\n }\n\n return {\n receiptItems: prepareReceiptItems([\n generateSubmissionIdReceiptItem(this.formSubmissionResult.submissionId),\n generateReceiptItem({\n className: 'ob-payment-receipt__completion-reference',\n valueClassName: 'cypress-payment-receipt-completion-reference',\n icon: 'check_circle',\n label: 'Completion Reference',\n value: completionReference,\n allowCopyToClipboard: true,\n }),\n {\n className: 'ob-payment-receipt__payment-reference',\n valueClassName: 'cypress-payment-receipt-payment-reference',\n icon: 'shopping_cart',\n label: 'Payment Reference',\n value: paymentReference,\n allowCopyToClipboard: true,\n },\n generateReceiptItem({\n className: 'ob-payment-receipt__bank-reference',\n valueClassName: 'cypress-payment-receipt-bank-reference',\n icon: 'account_balance',\n label: 'Bank Reference',\n value: bankReference,\n allowCopyToClipboard: true,\n }),\n generateReceiptItem({\n className: 'ob-payment-payment-method',\n valueClassName: 'cypress-payment-receipt-payment-method',\n icon: 'account_balance_wallet',\n label: 'Payment Method',\n value: getPaymentMethodLabel(paymentMethod),\n allowCopyToClipboard: false,\n }),\n generateCreditCardMaskReceiptItem(\n cardLast4Digits ? `xxxx xxxx xxxx ${cardLast4Digits}` : null,\n ),\n generateAmountReceiptItem(\n typeof amount === 'string' ? parseFloat(amount) : undefined,\n ),\n generateReceiptItem({\n className: 'ob-payment-receipt__surcharge',\n valueClassName: 'cypress-payment-receipt-surcharge',\n icon: 'price_check',\n label: 'Surcharge Amount',\n value:\n typeof surcharge === 'string'\n ? localisationService.formatCurrency(parseFloat(surcharge))\n : undefined,\n allowCopyToClipboard: false,\n }),\n generateReceiptItem({\n className: 'ob-payment-receipt__surcharge-gst',\n valueClassName: 'cypress-payment-receipt-surcharge-gst',\n icon: 'price_check',\n label: 'Surcharge GST',\n value:\n typeof surchargeGst === 'string'\n ? localisationService.formatCurrency(parseFloat(surchargeGst))\n : undefined,\n allowCopyToClipboard: false,\n }),\n ]),\n transaction: {\n isSuccess: isSuccess === 'true',\n errorMessage,\n },\n submissionResult: this.formSubmissionResult,\n }\n }\n}\n\nfunction getPaymentMethodLabel(paymentMethod: string | undefined) {\n switch (\n paymentMethod as NonNullable<\n NonNullable<\n SubmissionTypes.NSWGovPayPayment['paymentTransaction']\n >['agencyCompletionPayment']\n >['paymentMethod']\n ) {\n case 'PAYID': {\n return 'PayID'\n }\n case 'CARD': {\n return 'Credit Card'\n }\n case 'PAYPAL': {\n return 'PayPal'\n }\n case 'BPAY':\n default: {\n return paymentMethod\n }\n }\n}\n\nexport default NSWGovPayPaymentProvider\n"]}
|