@oneblink/apps-react 9.0.0-beta.2 → 9.0.0-beta.4
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 -10
- package/dist/OneBlinkForm.js +0 -4
- package/dist/OneBlinkForm.js.map +1 -1
- package/dist/OneBlinkFormBase.d.ts +1 -1
- package/dist/OneBlinkFormBase.js +2 -1
- package/dist/OneBlinkFormBase.js.map +1 -1
- package/dist/OneBlinkReadOnlyForm.d.ts +1 -1
- package/dist/OneBlinkReadOnlyForm.js +1 -1
- package/dist/OneBlinkReadOnlyForm.js.map +1 -1
- package/dist/PaymentReceipt.d.ts +1 -1
- package/dist/PaymentReceipt.js +1 -1
- package/dist/PaymentReceipt.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/ArcGISWebMap.js +1 -1
- package/dist/components/ArcGISWebMap.js.map +1 -1
- package/dist/components/CustomAccordion.d.ts +3 -3
- package/dist/components/Lists.d.ts +4 -1
- package/dist/components/calendar-bookings/CalendarBookingsCancelForm.js +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsCancelForm.js.map +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsForm.d.ts +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsForm.js +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsForm.js.map +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsReschedulingForm.js +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsReschedulingForm.js.map +1 -1
- package/dist/components/calendar-bookings/ErrorModal.d.ts +1 -1
- package/dist/components/calendar-bookings/ErrorModal.js +1 -1
- package/dist/components/calendar-bookings/ErrorModal.js.map +1 -1
- package/dist/components/downloadable-files/index.d.ts +1 -1
- package/dist/components/downloadable-files/index.js +1 -1
- package/dist/components/downloadable-files/index.js.map +1 -1
- package/dist/components/downloadable-files/resource-components.d.ts +1 -1
- package/dist/components/downloadable-files/resource-components.js +1 -1
- package/dist/components/downloadable-files/resource-components.js.map +1 -1
- package/dist/components/formStore/FormStoreTableProvider.js +1 -1
- package/dist/components/formStore/FormStoreTableProvider.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js +1 -1
- package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreProvider.js +1 -1
- package/dist/components/formStore/OneBlinkFormStoreProvider.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreTable.js.map +1 -1
- package/dist/components/formStore/display/ElementDisplay.js +2 -2
- package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
- package/dist/components/formStore/table/ColumnFilters.js +1 -1
- package/dist/components/formStore/table/ColumnFilters.js.map +1 -1
- package/dist/components/formStore/table/FormElementTableCell.js +1 -1
- package/dist/components/formStore/table/FormElementTableCell.js.map +1 -1
- package/dist/components/formStore/table/Pickers.js +1 -1
- package/dist/components/formStore/table/Pickers.js.map +1 -1
- package/dist/components/formStore/table/generateColumns.d.ts +1 -1
- package/dist/components/formStore/table/generateColumns.js.map +1 -1
- package/dist/components/formStore/table/useFormStoreTable.d.ts +1 -1
- package/dist/components/formStore/table/useFormStoreTable.js +1 -1
- package/dist/components/formStore/table/useFormStoreTable.js.map +1 -1
- package/dist/components/formStore/useFormStoreTableContext.d.ts +2 -2
- package/dist/components/mfa/MfaDialog.d.ts +1 -1
- package/dist/components/mfa/MfaDialog.js +1 -1
- package/dist/components/mfa/MfaDialog.js.map +1 -1
- package/dist/components/mfa/MultiFactorAuthentication.d.ts +1 -1
- package/dist/components/payments/PaymentForm.js +1 -1
- package/dist/components/payments/PaymentForm.js.map +1 -1
- package/dist/components/payments/WestpacQuickStreamPaymentForm.d.ts +1 -1
- package/dist/components/payments/WestpacQuickStreamPaymentForm.js +1 -1
- package/dist/components/payments/WestpacQuickStreamPaymentForm.js.map +1 -1
- package/dist/components/renderer/AutocompleteDropdown.js +1 -1
- package/dist/components/renderer/AutocompleteDropdown.js.map +1 -1
- package/dist/components/renderer/LookupNotification.js +2 -2
- package/dist/components/renderer/LookupNotification.js.map +1 -1
- package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js +1 -1
- package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js.map +1 -1
- package/dist/components/renderer/OneBlinkFormElements.js.map +1 -1
- package/dist/components/renderer/ReverseGeocode.js +1 -1
- package/dist/components/renderer/ReverseGeocode.js.map +1 -1
- package/dist/form-elements/FormElementAPINSWLiquorLicence.js +1 -1
- package/dist/form-elements/FormElementAPINSWLiquorLicence.js.map +1 -1
- package/dist/form-elements/FormElementArcGISWebMap.js.map +1 -1
- package/dist/form-elements/FormElementAutocomplete.js +1 -1
- package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
- package/dist/form-elements/FormElementBSB.js +1 -1
- package/dist/form-elements/FormElementBSB.js.map +1 -1
- package/dist/form-elements/FormElementCalculation.js +2 -2
- package/dist/form-elements/FormElementCalculation.js.map +1 -1
- package/dist/form-elements/FormElementCivicaNameRecord.js +1 -1
- package/dist/form-elements/FormElementCivicaNameRecord.js.map +1 -1
- package/dist/form-elements/FormElementCivicaStreetName.js +1 -1
- package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
- package/dist/form-elements/FormElementCompliance.d.ts +1 -1
- package/dist/form-elements/FormElementCompliance.js.map +1 -1
- package/dist/form-elements/FormElementDate.js +1 -1
- package/dist/form-elements/FormElementDate.js.map +1 -1
- package/dist/form-elements/FormElementDateTime.js +1 -1
- package/dist/form-elements/FormElementDateTime.js.map +1 -1
- package/dist/form-elements/FormElementFile.d.ts +1 -1
- package/dist/form-elements/FormElementFile.js.map +1 -1
- package/dist/form-elements/FormElementFiles.d.ts +1 -1
- package/dist/form-elements/FormElementFiles.js.map +1 -1
- package/dist/form-elements/FormElementGeoscapeAddress.js +1 -1
- package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
- package/dist/form-elements/FormElementGoogleAddress.js +1 -1
- package/dist/form-elements/FormElementGoogleAddress.js.map +1 -1
- package/dist/form-elements/FormElementLocation.js +1 -1
- package/dist/form-elements/FormElementLocation.js.map +1 -1
- package/dist/form-elements/FormElementNumber.js +1 -1
- package/dist/form-elements/FormElementNumber.js.map +1 -1
- package/dist/form-elements/FormElementPointAddress.js +1 -1
- package/dist/form-elements/FormElementPointAddress.js.map +1 -1
- package/dist/form-elements/FormElementPointAddressV3.js +1 -1
- package/dist/form-elements/FormElementPointAddressV3.js.map +1 -1
- package/dist/form-elements/FormElementPointCadastralParcel.js +1 -1
- package/dist/form-elements/FormElementPointCadastralParcel.js.map +1 -1
- package/dist/form-elements/FormElementSummary.js +1 -1
- package/dist/form-elements/FormElementSummary.js.map +1 -1
- package/dist/form-elements/FormElementTime.js +1 -1
- package/dist/form-elements/FormElementTime.js.map +1 -1
- package/dist/hooks/attachments/useAttachment.d.ts +1 -1
- package/dist/hooks/attachments/useAttachment.js +1 -1
- package/dist/hooks/attachments/useAttachment.js.map +1 -1
- package/dist/hooks/attachments/useAttachments.d.ts +1 -1
- package/dist/hooks/attachments/useAttachments.js.map +1 -1
- package/dist/hooks/useAuth.js +1 -1
- package/dist/hooks/useAuth.js.map +1 -1
- package/dist/hooks/useConditionalLogic.js +1 -1
- package/dist/hooks/useConditionalLogic.js.map +1 -1
- package/dist/hooks/useDrafts.d.ts +1 -1
- package/dist/hooks/useDrafts.js +1 -1
- package/dist/hooks/useDrafts.js.map +1 -1
- package/dist/hooks/useDynamicOptionsLoaderState.d.ts +1 -1
- package/dist/hooks/useDynamicOptionsLoaderState.js +1 -1
- package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
- package/dist/hooks/useFormElementLookups.d.ts +1 -1
- package/dist/hooks/useFormElementLookups.js +1 -1
- package/dist/hooks/useFormElementLookups.js.map +1 -1
- package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +1 -1
- package/dist/hooks/useFormSubmissionAutoSaveState.js +1 -1
- package/dist/hooks/useFormSubmissionAutoSaveState.js.map +1 -1
- package/dist/hooks/useIsOffline.js +1 -1
- package/dist/hooks/useIsOffline.js.map +1 -1
- package/dist/hooks/useLogin.js +1 -1
- package/dist/hooks/useLogin.js.map +1 -1
- package/dist/hooks/useMfa.d.ts +1 -1
- package/dist/hooks/useMfa.js +1 -1
- package/dist/hooks/useMfa.js.map +1 -1
- package/dist/hooks/useOnUploadAttachment.d.ts +1 -1
- package/dist/hooks/useOnUploadAttachment.js +1 -1
- package/dist/hooks/useOnUploadAttachment.js.map +1 -1
- package/dist/hooks/usePendingSubmissions.d.ts +1 -1
- package/dist/hooks/usePendingSubmissions.js +1 -1
- package/dist/hooks/usePendingSubmissions.js.map +1 -1
- package/dist/hooks/useReplaceableText.js +1 -1
- package/dist/hooks/useReplaceableText.js.map +1 -1
- package/dist/hooks/useSignUp.js +1 -1
- package/dist/hooks/useSignUp.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/attachments.d.ts +1 -1
- package/dist/services/attachments.js +1 -1
- package/dist/services/attachments.js.map +1 -1
- package/dist/services/blob-utils.js +1 -1
- package/dist/services/blob-utils.js.map +1 -1
- package/dist/services/checkIfAttachmentsExist.d.ts +1 -1
- package/dist/services/checkIfAttachmentsExist.js.map +1 -1
- package/dist/services/defaultCoordinates.js +1 -1
- package/dist/services/defaultCoordinates.js.map +1 -1
- package/dist/services/download-file.d.ts +1 -1
- package/dist/services/download-file.js +2 -2
- package/dist/services/download-file.js.map +1 -1
- package/dist/services/drawTimestampOnCanvas.js +1 -1
- package/dist/services/drawTimestampOnCanvas.js.map +1 -1
- package/dist/services/form-validation/validateSubmission.js +1 -1
- package/dist/services/form-validation/validateSubmission.js.map +1 -1
- package/dist/services/form-validation/validators.d.ts +1 -1
- package/dist/services/form-validation/validators.js.map +1 -1
- package/dist/services/generate-default-data.js +1 -1
- package/dist/services/generate-default-data.js.map +1 -1
- package/dist/services/injectableOptions.js +1 -1
- package/dist/services/injectableOptions.js.map +1 -1
- package/dist/styles.css +208 -204
- package/dist/types/attachments.d.ts +1 -1
- package/dist/types/attachments.js.map +1 -1
- package/dist/utils/sendGoogleAnalyticsEvent.js +1 -1
- package/dist/utils/sendGoogleAnalyticsEvent.js.map +1 -1
- package/package.json +42 -34
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { generateSchedulingConfiguration } from './api/scheduling';
|
|
2
|
+
import utilsService from './utils';
|
|
3
|
+
import { schedulingService } from '@oneblink/sdk-core';
|
|
4
|
+
const SCHEDULING_SUBMISSION_RESULT_KEY = 'SCHEDULING_SUBMISSION_RESULT';
|
|
5
|
+
export async function getSchedulingSubmissionResult() {
|
|
6
|
+
return await utilsService.getLocalForageItem(SCHEDULING_SUBMISSION_RESULT_KEY);
|
|
7
|
+
}
|
|
8
|
+
export async function removeSchedulingSubmissionResult() {
|
|
9
|
+
await utilsService.removeLocalForageItem(SCHEDULING_SUBMISSION_RESULT_KEY);
|
|
10
|
+
}
|
|
11
|
+
async function setSchedulingSubmissionResult(schedulingSubmissionResult) {
|
|
12
|
+
await utilsService.setLocalForageItem(SCHEDULING_SUBMISSION_RESULT_KEY, schedulingSubmissionResult);
|
|
13
|
+
}
|
|
14
|
+
const SCHEDULING_BOOKING_KEY = 'SCHEDULING_BOOKING';
|
|
15
|
+
async function getSchedulingBookingMap() {
|
|
16
|
+
return await utilsService.getLocalForageItem(SCHEDULING_BOOKING_KEY);
|
|
17
|
+
}
|
|
18
|
+
async function setSchedulingBookingMap(schedulingBookingMap) {
|
|
19
|
+
await utilsService.setLocalForageItem(SCHEDULING_BOOKING_KEY, schedulingBookingMap);
|
|
20
|
+
}
|
|
21
|
+
export async function getSchedulingBooking(submissionId) {
|
|
22
|
+
if (!submissionId) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const schedulingBookingMap = await getSchedulingBookingMap();
|
|
26
|
+
return schedulingBookingMap === null || schedulingBookingMap === void 0 ? void 0 : schedulingBookingMap[submissionId];
|
|
27
|
+
}
|
|
28
|
+
export async function removeSchedulingBooking(submissionId) {
|
|
29
|
+
const schedulingBookingMap = await getSchedulingBookingMap();
|
|
30
|
+
if (schedulingBookingMap === null || schedulingBookingMap === void 0 ? void 0 : schedulingBookingMap[submissionId]) {
|
|
31
|
+
delete schedulingBookingMap[submissionId];
|
|
32
|
+
await setSchedulingBookingMap(schedulingBookingMap);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export async function setSchedulingBooking(schedulingBooking) {
|
|
36
|
+
const schedulingBookingMap = (await getSchedulingBookingMap()) || {};
|
|
37
|
+
schedulingBookingMap[schedulingBooking.submissionId] = schedulingBooking;
|
|
38
|
+
await setSchedulingBookingMap(schedulingBookingMap);
|
|
39
|
+
}
|
|
40
|
+
function checkForSchedulingSubmissionEvent(baseFormSubmission) {
|
|
41
|
+
const schedulingSubmissionEvent = schedulingService.checkForSchedulingEvent(baseFormSubmission.definition, baseFormSubmission.submission);
|
|
42
|
+
if (schedulingSubmissionEvent) {
|
|
43
|
+
console.log('Form has a scheduling submission event', schedulingSubmissionEvent);
|
|
44
|
+
}
|
|
45
|
+
return schedulingSubmissionEvent;
|
|
46
|
+
}
|
|
47
|
+
async function handleSchedulingSubmissionEvent({ formSubmissionResult, schedulingSubmissionEvent, schedulingUrlConfiguration, paymentReceiptUrl, paymentFormUrl, preventPayment, }) {
|
|
48
|
+
console.log('Attempting to handle submission with scheduling submission event');
|
|
49
|
+
if (!formSubmissionResult.submissionId) {
|
|
50
|
+
throw Error('Cannot generate calendar booking configuration. Form Submission is missing "submissionId"');
|
|
51
|
+
}
|
|
52
|
+
await generateSchedulingConfiguration({
|
|
53
|
+
formSubmissionResult,
|
|
54
|
+
schedulingSubmissionEvent,
|
|
55
|
+
schedulingUrlConfiguration,
|
|
56
|
+
});
|
|
57
|
+
const bookingUrl = new URL(schedulingUrlConfiguration.schedulingBookingUrl);
|
|
58
|
+
bookingUrl.searchParams.set('submissionId', formSubmissionResult.submissionId);
|
|
59
|
+
const scheduling = {
|
|
60
|
+
submissionEvent: schedulingSubmissionEvent,
|
|
61
|
+
bookingUrl: bookingUrl.toString(),
|
|
62
|
+
};
|
|
63
|
+
console.log('Created scheduling configuration to start booking', scheduling);
|
|
64
|
+
await setSchedulingSubmissionResult({
|
|
65
|
+
formSubmissionResult: {
|
|
66
|
+
...formSubmissionResult,
|
|
67
|
+
scheduling,
|
|
68
|
+
},
|
|
69
|
+
paymentReceiptUrl,
|
|
70
|
+
paymentFormUrl,
|
|
71
|
+
preventPayment,
|
|
72
|
+
});
|
|
73
|
+
return scheduling;
|
|
74
|
+
}
|
|
75
|
+
export { checkForSchedulingSubmissionEvent, handleSchedulingSubmissionEvent, };
|
|
76
|
+
//# sourceMappingURL=schedulingHandlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedulingHandlers.js","sourceRoot":"","sources":["../../../src/apps/services/schedulingHandlers.ts"],"names":[],"mappings":"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","sourcesContent":["import { generateSchedulingConfiguration } from './api/scheduling'\nimport utilsService from './utils'\nimport { SubmissionEventTypes } from '@oneblink/types'\nimport { schedulingService } from '@oneblink/sdk-core'\nimport {\n FormSubmissionResult,\n BaseNewFormSubmission,\n} from '../types/submissions'\nimport { SchedulingUrlConfiguration } from '../types/scheduling'\n\nconst SCHEDULING_SUBMISSION_RESULT_KEY = 'SCHEDULING_SUBMISSION_RESULT'\ntype SchedulingSubmissionResult = {\n formSubmissionResult: FormSubmissionResult\n paymentReceiptUrl: string | undefined\n paymentFormUrl: string | undefined\n preventPayment: boolean\n}\nexport async function getSchedulingSubmissionResult(): Promise<SchedulingSubmissionResult | null> {\n return await utilsService.getLocalForageItem(SCHEDULING_SUBMISSION_RESULT_KEY)\n}\nexport async function removeSchedulingSubmissionResult() {\n await utilsService.removeLocalForageItem(SCHEDULING_SUBMISSION_RESULT_KEY)\n}\nasync function setSchedulingSubmissionResult(\n schedulingSubmissionResult: SchedulingSubmissionResult,\n) {\n await utilsService.setLocalForageItem(\n SCHEDULING_SUBMISSION_RESULT_KEY,\n schedulingSubmissionResult,\n )\n}\n\nconst SCHEDULING_BOOKING_KEY = 'SCHEDULING_BOOKING'\ntype SchedulingBooking = {\n /** The unique identifier for the submission associated with the booking */\n submissionId: string\n /** Date and time the booking starts */\n startTime: Date\n /** Date and time the booking ends */\n endTime: Date\n /** Location of booking */\n location: string | undefined\n /** `true` if the booking has been rescheduled, otherwise `false` */\n isReschedule: boolean\n}\n\nasync function getSchedulingBookingMap() {\n return await utilsService.getLocalForageItem<\n Record<string, SchedulingBooking>\n >(SCHEDULING_BOOKING_KEY)\n}\n\nasync function setSchedulingBookingMap(\n schedulingBookingMap: Record<string, SchedulingBooking>,\n) {\n await utilsService.setLocalForageItem(\n SCHEDULING_BOOKING_KEY,\n schedulingBookingMap,\n )\n}\n\nexport async function getSchedulingBooking(\n submissionId: string | null,\n): Promise<SchedulingBooking | undefined> {\n if (!submissionId) {\n return\n }\n const schedulingBookingMap = await getSchedulingBookingMap()\n return schedulingBookingMap?.[submissionId]\n}\n\nexport async function removeSchedulingBooking(submissionId: string) {\n const schedulingBookingMap = await getSchedulingBookingMap()\n if (schedulingBookingMap?.[submissionId]) {\n delete schedulingBookingMap[submissionId]\n await setSchedulingBookingMap(schedulingBookingMap)\n }\n}\n\nexport async function setSchedulingBooking(\n schedulingBooking: SchedulingBooking,\n) {\n const schedulingBookingMap = (await getSchedulingBookingMap()) || {}\n schedulingBookingMap[schedulingBooking.submissionId] = schedulingBooking\n await setSchedulingBookingMap(schedulingBookingMap)\n}\n\nfunction checkForSchedulingSubmissionEvent(\n baseFormSubmission: BaseNewFormSubmission,\n): SubmissionEventTypes.FormSchedulingEvent | undefined {\n const schedulingSubmissionEvent = schedulingService.checkForSchedulingEvent(\n baseFormSubmission.definition,\n baseFormSubmission.submission,\n )\n if (schedulingSubmissionEvent) {\n console.log(\n 'Form has a scheduling submission event',\n schedulingSubmissionEvent,\n )\n }\n return schedulingSubmissionEvent\n}\n\nasync function handleSchedulingSubmissionEvent({\n formSubmissionResult,\n schedulingSubmissionEvent,\n schedulingUrlConfiguration,\n paymentReceiptUrl,\n paymentFormUrl,\n preventPayment,\n}: {\n formSubmissionResult: FormSubmissionResult\n schedulingSubmissionEvent: SubmissionEventTypes.FormSchedulingEvent\n schedulingUrlConfiguration: SchedulingUrlConfiguration\n paymentReceiptUrl: string | undefined\n paymentFormUrl: string | undefined\n preventPayment: boolean\n}): Promise<NonNullable<FormSubmissionResult['scheduling']>> {\n console.log(\n 'Attempting to handle submission with scheduling submission event',\n )\n if (!formSubmissionResult.submissionId) {\n throw Error(\n 'Cannot generate calendar booking configuration. Form Submission is missing \"submissionId\"',\n )\n }\n\n await generateSchedulingConfiguration({\n formSubmissionResult,\n schedulingSubmissionEvent,\n schedulingUrlConfiguration,\n })\n\n const bookingUrl = new URL(schedulingUrlConfiguration.schedulingBookingUrl)\n bookingUrl.searchParams.set('submissionId', formSubmissionResult.submissionId)\n\n const scheduling = {\n submissionEvent: schedulingSubmissionEvent,\n bookingUrl: bookingUrl.toString(),\n }\n console.log('Created scheduling configuration to start booking', scheduling)\n await setSchedulingSubmissionResult({\n formSubmissionResult: {\n ...formSubmissionResult,\n scheduling,\n },\n paymentReceiptUrl,\n paymentFormUrl,\n preventPayment,\n })\n\n return scheduling\n}\n\nexport {\n SchedulingBooking,\n checkForSchedulingSubmissionEvent,\n handleSchedulingSubmissionEvent,\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import serverRequest from './serverRequest';
|
|
2
|
+
import Sentry from '../Sentry';
|
|
3
|
+
import OneBlinkAppsError from './errors/oneBlinkAppsError';
|
|
4
|
+
export default async function serverValidateForm(formSubmission) {
|
|
5
|
+
const result = await serverRequest(formSubmission.definition.serverValidation, {
|
|
6
|
+
...formSubmission,
|
|
7
|
+
captchaTokens: undefined,
|
|
8
|
+
definition: undefined,
|
|
9
|
+
formId: formSubmission.definition.id,
|
|
10
|
+
});
|
|
11
|
+
if (!result)
|
|
12
|
+
return;
|
|
13
|
+
const { url, response } = result;
|
|
14
|
+
const data = await response.text();
|
|
15
|
+
console.log('Response from form validation endpoint:', url, response.status, data);
|
|
16
|
+
if (!response.ok) {
|
|
17
|
+
Sentry.captureException(new Error(`Received ${response.status} status code from form validation endpoint`));
|
|
18
|
+
let json;
|
|
19
|
+
try {
|
|
20
|
+
json = JSON.parse(data);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Nothing
|
|
24
|
+
}
|
|
25
|
+
if (response.status === 400 && json && json.message) {
|
|
26
|
+
throw new OneBlinkAppsError(json.message, {
|
|
27
|
+
httpStatusCode: response.status,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
throw new OneBlinkAppsError('Form validation failed. We received an invalid response from the validation url', {
|
|
31
|
+
originalError: new Error(data),
|
|
32
|
+
httpStatusCode: response.status,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=server-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-validation.js","sourceRoot":"","sources":["../../../src/apps/services/server-validation.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAE3C,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,iBAAiB,MAAM,4BAA4B,CAAA;AAE1D,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,kBAAkB,CAC9C,cAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,cAAc,CAAC,UAAU,CAAC,gBAAgB,EAC1C;QACE,GAAG,cAAc;QACjB,aAAa,EAAE,SAAS;QACxB,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE;KACrC,CACF,CAAA;IACD,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAEhC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAClC,OAAO,CAAC,GAAG,CACT,yCAAyC,EACzC,GAAG,EACH,QAAQ,CAAC,MAAM,EACf,IAAI,CACL,CAAA;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,CAAC,gBAAgB,CACrB,IAAI,KAAK,CACP,YAAY,QAAQ,CAAC,MAAM,4CAA4C,CACxE,CACF,CAAA;QACD,IAAI,IAAmC,CAAA;QACvC,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,UAAU;QACZ,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpD,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE;gBACxC,cAAc,EAAE,QAAQ,CAAC,MAAM;aAChC,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,IAAI,iBAAiB,CACzB,iFAAiF,EACjF;YACE,aAAa,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC;YAC9B,cAAc,EAAE,QAAQ,CAAC,MAAM;SAChC,CACF,CAAA;IACH,CAAC;AACH,CAAC","sourcesContent":["import serverRequest from './serverRequest'\nimport { FormSubmission } from '../submission-service'\nimport Sentry from '../Sentry'\nimport OneBlinkAppsError from './errors/oneBlinkAppsError'\n\nexport default async function serverValidateForm(\n formSubmission: FormSubmission,\n) {\n const result = await serverRequest(\n formSubmission.definition.serverValidation,\n {\n ...formSubmission,\n captchaTokens: undefined,\n definition: undefined,\n formId: formSubmission.definition.id,\n },\n )\n if (!result) return\n const { url, response } = result\n\n const data = await response.text()\n console.log(\n 'Response from form validation endpoint:',\n url,\n response.status,\n data,\n )\n\n if (!response.ok) {\n Sentry.captureException(\n new Error(\n `Received ${response.status} status code from form validation endpoint`,\n ),\n )\n let json: ReturnType<typeof JSON.parse>\n try {\n json = JSON.parse(data)\n } catch {\n // Nothing\n }\n if (response.status === 400 && json && json.message) {\n throw new OneBlinkAppsError(json.message, {\n httpStatusCode: response.status,\n })\n }\n throw new OneBlinkAppsError(\n 'Form validation failed. We received an invalid response from the validation url',\n {\n originalError: new Error(data),\n httpStatusCode: response.status,\n },\n )\n }\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { fetchWithError, generateHeaders } from './fetch';
|
|
2
|
+
function getOBApi(apiId, apiEnv) {
|
|
3
|
+
if (apiEnv.toLowerCase() === 'prod') {
|
|
4
|
+
return apiId;
|
|
5
|
+
}
|
|
6
|
+
const arr = apiId.split('.');
|
|
7
|
+
arr[0] += `-${apiEnv}`;
|
|
8
|
+
return arr.join('.');
|
|
9
|
+
}
|
|
10
|
+
export default async function serverRequest(endpoint, payload) {
|
|
11
|
+
if (!endpoint)
|
|
12
|
+
return;
|
|
13
|
+
const url = endpoint.type === 'CALLBACK'
|
|
14
|
+
? endpoint.configuration.url
|
|
15
|
+
: `https://${getOBApi(endpoint.configuration.apiId, endpoint.configuration.apiEnvironment)}${endpoint.configuration.apiEnvironmentRoute}`;
|
|
16
|
+
const headers = await generateHeaders();
|
|
17
|
+
const response = await fetchWithError(url, {
|
|
18
|
+
method: 'POST',
|
|
19
|
+
headers,
|
|
20
|
+
body: JSON.stringify(payload),
|
|
21
|
+
});
|
|
22
|
+
return { response, url };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=serverRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverRequest.js","sourceRoot":"","sources":["../../../src/apps/services/serverRequest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEzD,SAAS,QAAQ,CAAC,KAAa,EAAE,MAAc;IAC7C,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QACpC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,EAAE,CAAA;IACtB,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,aAAa,CACzC,QAAqD,EACrD,OAAgC;IAEhC,IAAI,CAAC,QAAQ;QAAE,OAAM;IAErB,MAAM,GAAG,GACP,QAAQ,CAAC,IAAI,KAAK,UAAU;QAC1B,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG;QAC5B,CAAC,CAAC,WAAW,QAAQ,CACjB,QAAQ,CAAC,aAAa,CAAC,KAAK,EAC5B,QAAQ,CAAC,aAAa,CAAC,cAAc,CACtC,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAA;IAEtD,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAA;IACvC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE;QACzC,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAA;IAEF,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAA;AAC1B,CAAC","sourcesContent":["import { MiscTypes } from '@oneblink/types'\nimport { fetchWithError, generateHeaders } from './fetch'\n\nfunction getOBApi(apiId: string, apiEnv: string): string {\n if (apiEnv.toLowerCase() === 'prod') {\n return apiId\n }\n const arr = apiId.split('.')\n arr[0] += `-${apiEnv}`\n return arr.join('.')\n}\n\nexport default async function serverRequest(\n endpoint: MiscTypes.EndpointConfiguration | undefined,\n payload: Record<string, unknown>,\n): Promise<{ response: Response; url: string } | void> {\n if (!endpoint) return\n\n const url =\n endpoint.type === 'CALLBACK'\n ? endpoint.configuration.url\n : `https://${getOBApi(\n endpoint.configuration.apiId,\n endpoint.configuration.apiEnvironment,\n )}${endpoint.configuration.apiEnvironmentRoute}`\n\n const headers = await generateHeaders()\n const response = await fetchWithError(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n })\n\n return { response, url }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FormSubmission, FormSubmissionResult, ProgressListener, ProgressListenerEvent } from '../types/submissions';
|
|
2
|
+
import { SchedulingUrlConfiguration } from '../types/scheduling';
|
|
3
|
+
type SubmissionParams = {
|
|
4
|
+
formSubmission: FormSubmission;
|
|
5
|
+
isPendingQueueEnabled: boolean;
|
|
6
|
+
shouldRunServerValidation: boolean;
|
|
7
|
+
shouldRunExternalIdGeneration: boolean;
|
|
8
|
+
paymentReceiptUrl: string | undefined;
|
|
9
|
+
paymentFormUrl: string | undefined;
|
|
10
|
+
schedulingUrlConfiguration?: SchedulingUrlConfiguration;
|
|
11
|
+
pendingTimestamp?: string;
|
|
12
|
+
alwaysSubmitViaPendingQueue?: boolean;
|
|
13
|
+
onProgress?: ProgressListener;
|
|
14
|
+
abortSignal?: AbortSignal;
|
|
15
|
+
};
|
|
16
|
+
export { SubmissionParams, ProgressListener, ProgressListenerEvent };
|
|
17
|
+
export default function submit({ formSubmission, isPendingQueueEnabled, paymentReceiptUrl, paymentFormUrl, schedulingUrlConfiguration, onProgress, shouldRunServerValidation, shouldRunExternalIdGeneration, abortSignal, pendingTimestamp, alwaysSubmitViaPendingQueue, completionTimestamp, }: SubmissionParams & {
|
|
18
|
+
completionTimestamp: string;
|
|
19
|
+
}): Promise<FormSubmissionResult>;
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { isOffline } from '../offline-service';
|
|
2
|
+
import { addFormSubmissionToPendingQueue, deletePendingQueueSubmission, } from './pending-queue';
|
|
3
|
+
import { checkForPaymentSubmissionEvent, handlePaymentSubmissionEvent, } from '../payment-service';
|
|
4
|
+
import { removeLocalDraftSubmission } from './draft-data-store';
|
|
5
|
+
import { removePrefillFormData } from '../prefill-service';
|
|
6
|
+
import { handleSchedulingSubmissionEvent, checkForSchedulingSubmissionEvent, } from './schedulingHandlers';
|
|
7
|
+
import { checkIfAttachmentsAreUploading } from '../attachments-service';
|
|
8
|
+
import tenants from '../tenants';
|
|
9
|
+
import externalIdGeneration from './external-id-generation';
|
|
10
|
+
import serverValidateForm from './server-validation';
|
|
11
|
+
import OneBlinkAppsError from './errors/oneBlinkAppsError';
|
|
12
|
+
import { uploadFormSubmission } from './api/submissions';
|
|
13
|
+
import { syncDrafts } from '../draft-service';
|
|
14
|
+
export default async function submit({ formSubmission, isPendingQueueEnabled, paymentReceiptUrl, paymentFormUrl, schedulingUrlConfiguration, onProgress, shouldRunServerValidation, shouldRunExternalIdGeneration, abortSignal, pendingTimestamp, alwaysSubmitViaPendingQueue, completionTimestamp, }) {
|
|
15
|
+
const paymentSubmissionEventConfiguration = checkForPaymentSubmissionEvent(formSubmission);
|
|
16
|
+
const schedulingSubmissionEvent = checkForSchedulingSubmissionEvent(formSubmission);
|
|
17
|
+
try {
|
|
18
|
+
if (pendingTimestamp) {
|
|
19
|
+
await deletePendingQueueSubmission(pendingTimestamp);
|
|
20
|
+
}
|
|
21
|
+
if (isOffline() || alwaysSubmitViaPendingQueue) {
|
|
22
|
+
if (paymentSubmissionEventConfiguration || schedulingSubmissionEvent) {
|
|
23
|
+
console.log('Offline or always submitting via pending queue - form has a payment/scheduling submission event that has not been processed yet, return offline', { paymentSubmissionEventConfiguration, schedulingSubmissionEvent });
|
|
24
|
+
return Object.assign({}, formSubmission, {
|
|
25
|
+
isOffline: true,
|
|
26
|
+
isInPendingQueue: false,
|
|
27
|
+
submissionTimestamp: null,
|
|
28
|
+
submissionId: null,
|
|
29
|
+
payment: null,
|
|
30
|
+
scheduling: null,
|
|
31
|
+
isUploadingAttachments: false,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
if (!alwaysSubmitViaPendingQueue && !isPendingQueueEnabled) {
|
|
35
|
+
console.log('Offline - app does not support pending queue, return offline');
|
|
36
|
+
return Object.assign({}, formSubmission, {
|
|
37
|
+
isOffline: true,
|
|
38
|
+
isInPendingQueue: false,
|
|
39
|
+
submissionTimestamp: null,
|
|
40
|
+
submissionId: null,
|
|
41
|
+
payment: null,
|
|
42
|
+
scheduling: null,
|
|
43
|
+
isUploadingAttachments: false,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
console.log('Offline or always submitting via pending queue - saving submission to pending queue..');
|
|
47
|
+
await addFormSubmissionToPendingQueue(formSubmission);
|
|
48
|
+
return Object.assign({}, formSubmission, {
|
|
49
|
+
isOffline: isOffline(),
|
|
50
|
+
isInPendingQueue: true,
|
|
51
|
+
submissionTimestamp: null,
|
|
52
|
+
submissionId: null,
|
|
53
|
+
payment: null,
|
|
54
|
+
preventPayment: false,
|
|
55
|
+
scheduling: null,
|
|
56
|
+
isUploadingAttachments: false,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const attachmentsStillUploading = checkIfAttachmentsAreUploading(formSubmission.definition, formSubmission.submission);
|
|
60
|
+
if (attachmentsStillUploading) {
|
|
61
|
+
if (paymentSubmissionEventConfiguration || schedulingSubmissionEvent) {
|
|
62
|
+
console.log('Attachments still uploading - form has a payment/scheduling submission event that has not been processed yet, return isUploading', { paymentSubmissionEventConfiguration, schedulingSubmissionEvent });
|
|
63
|
+
return Object.assign({}, formSubmission, {
|
|
64
|
+
isOffline: false,
|
|
65
|
+
isInPendingQueue: false,
|
|
66
|
+
submissionTimestamp: null,
|
|
67
|
+
submissionId: null,
|
|
68
|
+
payment: null,
|
|
69
|
+
preventPayment: false,
|
|
70
|
+
scheduling: null,
|
|
71
|
+
isUploadingAttachments: true,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
console.log('Attachments still uploading - saving submission to pending queue..');
|
|
75
|
+
await addFormSubmissionToPendingQueue(formSubmission);
|
|
76
|
+
return Object.assign({}, formSubmission, {
|
|
77
|
+
isOffline: false,
|
|
78
|
+
isInPendingQueue: true,
|
|
79
|
+
submissionTimestamp: null,
|
|
80
|
+
submissionId: null,
|
|
81
|
+
payment: null,
|
|
82
|
+
preventPayment: false,
|
|
83
|
+
scheduling: null,
|
|
84
|
+
isUploadingAttachments: true,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
if (shouldRunServerValidation) {
|
|
88
|
+
await serverValidateForm(formSubmission);
|
|
89
|
+
}
|
|
90
|
+
if (shouldRunExternalIdGeneration) {
|
|
91
|
+
const externalIdResult = await externalIdGeneration(formSubmission);
|
|
92
|
+
if (externalIdResult.externalId) {
|
|
93
|
+
formSubmission.externalId = externalIdResult.externalId;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const data = await uploadFormSubmission(formSubmission, completionTimestamp, onProgress, abortSignal);
|
|
97
|
+
const getDownloadSubmissionPdfUrls = () => {
|
|
98
|
+
var _a;
|
|
99
|
+
const allowPDFDownload = (_a = formSubmission.definition.postSubmissionReceipt) === null || _a === void 0 ? void 0 : _a.allowPDFDownload;
|
|
100
|
+
if (!data.pdfAccessToken || !allowPDFDownload) {
|
|
101
|
+
return {
|
|
102
|
+
downloadSubmissionPdfUrl: undefined,
|
|
103
|
+
downloadSubmissionPdfs: undefined,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (allowPDFDownload && !Array.isArray(allowPDFDownload)) {
|
|
107
|
+
// Cater for legacy config
|
|
108
|
+
const url = `${tenants.current.apiOrigin}/forms/${formSubmission.definition.id}/submissions/${data.submissionId}/pdf-document?accessToken=${data.pdfAccessToken}`;
|
|
109
|
+
return {
|
|
110
|
+
downloadSubmissionPdfUrl: url,
|
|
111
|
+
downloadSubmissionPdfs: [
|
|
112
|
+
{
|
|
113
|
+
id: 'default',
|
|
114
|
+
configuration: allowPDFDownload,
|
|
115
|
+
url,
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
downloadSubmissionPdfUrl: undefined,
|
|
122
|
+
downloadSubmissionPdfs: allowPDFDownload.map((pdfConfiguration) => {
|
|
123
|
+
const url = `${tenants.current.apiOrigin}/forms/${formSubmission.definition.id}/submissions/${data.submissionId}/pdf-document?accessToken=${data.pdfAccessToken}&configurationId=${pdfConfiguration.id}`;
|
|
124
|
+
return {
|
|
125
|
+
...pdfConfiguration,
|
|
126
|
+
url,
|
|
127
|
+
};
|
|
128
|
+
}),
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
const { downloadSubmissionPdfUrl, downloadSubmissionPdfs } = getDownloadSubmissionPdfUrls();
|
|
132
|
+
const formSubmissionResult = {
|
|
133
|
+
...formSubmission,
|
|
134
|
+
payment: null,
|
|
135
|
+
scheduling: null,
|
|
136
|
+
isOffline: false,
|
|
137
|
+
isInPendingQueue: false,
|
|
138
|
+
submissionTimestamp: data.submissionTimestamp,
|
|
139
|
+
submissionId: data.submissionId,
|
|
140
|
+
isUploadingAttachments: false,
|
|
141
|
+
downloadSubmissionPdfUrl,
|
|
142
|
+
downloadSubmissionPdfs,
|
|
143
|
+
attachmentsAccessToken: data.attachmentsAccessToken,
|
|
144
|
+
};
|
|
145
|
+
if (schedulingSubmissionEvent && schedulingUrlConfiguration) {
|
|
146
|
+
formSubmissionResult.scheduling = await handleSchedulingSubmissionEvent({
|
|
147
|
+
formSubmissionResult,
|
|
148
|
+
schedulingSubmissionEvent,
|
|
149
|
+
schedulingUrlConfiguration,
|
|
150
|
+
paymentReceiptUrl,
|
|
151
|
+
paymentFormUrl,
|
|
152
|
+
preventPayment: data.preventPayment,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
else if (paymentSubmissionEventConfiguration &&
|
|
156
|
+
paymentReceiptUrl &&
|
|
157
|
+
!data.preventPayment) {
|
|
158
|
+
formSubmissionResult.payment = await handlePaymentSubmissionEvent({
|
|
159
|
+
...paymentSubmissionEventConfiguration,
|
|
160
|
+
formSubmissionResult,
|
|
161
|
+
paymentReceiptUrl,
|
|
162
|
+
paymentFormUrl,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
//currently cannot have drafts without a forms app
|
|
166
|
+
if (formSubmission.formSubmissionDraftId && formSubmission.formsAppId) {
|
|
167
|
+
await removeLocalDraftSubmission(formSubmission.formSubmissionDraftId);
|
|
168
|
+
syncDrafts({
|
|
169
|
+
formsAppId: formSubmission.formsAppId,
|
|
170
|
+
throwError: false,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
if (formSubmission.preFillFormDataId) {
|
|
174
|
+
await removePrefillFormData(formSubmission.preFillFormDataId);
|
|
175
|
+
}
|
|
176
|
+
return formSubmissionResult;
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
if (error instanceof OneBlinkAppsError) {
|
|
180
|
+
if (error.isOffline) {
|
|
181
|
+
if (!isPendingQueueEnabled ||
|
|
182
|
+
schedulingSubmissionEvent ||
|
|
183
|
+
paymentSubmissionEventConfiguration) {
|
|
184
|
+
console.warn('Offline error thrown - app or form does not support pending queue, return offline', error);
|
|
185
|
+
return Object.assign({}, formSubmission, {
|
|
186
|
+
isOffline: true,
|
|
187
|
+
isInPendingQueue: false,
|
|
188
|
+
submissionTimestamp: null,
|
|
189
|
+
submissionId: null,
|
|
190
|
+
payment: null,
|
|
191
|
+
scheduling: null,
|
|
192
|
+
isUploadingAttachments: false,
|
|
193
|
+
preventPayment: false,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
console.warn('Offline error thrown - saving submission to pending queue..', error);
|
|
197
|
+
await addFormSubmissionToPendingQueue(formSubmission);
|
|
198
|
+
return Object.assign({}, formSubmission, {
|
|
199
|
+
isOffline: true,
|
|
200
|
+
isInPendingQueue: true,
|
|
201
|
+
submissionTimestamp: null,
|
|
202
|
+
submissionId: null,
|
|
203
|
+
payment: null,
|
|
204
|
+
scheduling: null,
|
|
205
|
+
isUploadingAttachments: false,
|
|
206
|
+
preventPayment: false,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
// If the error has already been handled as a
|
|
210
|
+
// OneBlinkAppsError, we can throw it as is.
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
213
|
+
throw new OneBlinkAppsError('An error has occurred with your submission, please contact Support if this problem persists.', {
|
|
214
|
+
title: 'Unexpected Error',
|
|
215
|
+
originalError: error,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=submit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../src/apps/services/submit.ts"],"names":[],"mappings":"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","sourcesContent":["import { isOffline } from '../offline-service'\nimport {\n addFormSubmissionToPendingQueue,\n deletePendingQueueSubmission,\n} from './pending-queue'\nimport {\n checkForPaymentSubmissionEvent,\n handlePaymentSubmissionEvent,\n} from '../payment-service'\nimport { removeLocalDraftSubmission } from './draft-data-store'\nimport { removePrefillFormData } from '../prefill-service'\nimport {\n handleSchedulingSubmissionEvent,\n checkForSchedulingSubmissionEvent,\n} from './schedulingHandlers'\nimport {\n FormSubmission,\n FormSubmissionResult,\n ProgressListener,\n ProgressListenerEvent,\n} from '../types/submissions'\nimport { SchedulingUrlConfiguration } from '../types/scheduling'\nimport { checkIfAttachmentsAreUploading } from '../attachments-service'\nimport tenants from '../tenants'\nimport externalIdGeneration from './external-id-generation'\nimport serverValidateForm from './server-validation'\nimport OneBlinkAppsError from './errors/oneBlinkAppsError'\nimport { uploadFormSubmission } from './api/submissions'\nimport { syncDrafts } from '../draft-service'\n\ntype SubmissionParams = {\n formSubmission: FormSubmission\n isPendingQueueEnabled: boolean\n shouldRunServerValidation: boolean\n shouldRunExternalIdGeneration: boolean\n paymentReceiptUrl: string | undefined\n paymentFormUrl: string | undefined\n schedulingUrlConfiguration?: SchedulingUrlConfiguration\n pendingTimestamp?: string\n alwaysSubmitViaPendingQueue?: boolean\n onProgress?: ProgressListener\n abortSignal?: AbortSignal\n}\n\nexport { SubmissionParams, ProgressListener, ProgressListenerEvent }\n\nexport default async function submit({\n formSubmission,\n isPendingQueueEnabled,\n paymentReceiptUrl,\n paymentFormUrl,\n schedulingUrlConfiguration,\n onProgress,\n shouldRunServerValidation,\n shouldRunExternalIdGeneration,\n abortSignal,\n pendingTimestamp,\n alwaysSubmitViaPendingQueue,\n completionTimestamp,\n}: SubmissionParams & {\n completionTimestamp: string\n}): Promise<FormSubmissionResult> {\n const paymentSubmissionEventConfiguration =\n checkForPaymentSubmissionEvent(formSubmission)\n\n const schedulingSubmissionEvent =\n checkForSchedulingSubmissionEvent(formSubmission)\n\n try {\n if (pendingTimestamp) {\n await deletePendingQueueSubmission(pendingTimestamp)\n }\n if (isOffline() || alwaysSubmitViaPendingQueue) {\n if (paymentSubmissionEventConfiguration || schedulingSubmissionEvent) {\n console.log(\n 'Offline or always submitting via pending queue - form has a payment/scheduling submission event that has not been processed yet, return offline',\n { paymentSubmissionEventConfiguration, schedulingSubmissionEvent },\n )\n return Object.assign({}, formSubmission, {\n isOffline: true,\n isInPendingQueue: false,\n submissionTimestamp: null,\n submissionId: null,\n payment: null,\n scheduling: null,\n isUploadingAttachments: false,\n })\n }\n\n if (!alwaysSubmitViaPendingQueue && !isPendingQueueEnabled) {\n console.log(\n 'Offline - app does not support pending queue, return offline',\n )\n return Object.assign({}, formSubmission, {\n isOffline: true,\n isInPendingQueue: false,\n submissionTimestamp: null,\n submissionId: null,\n payment: null,\n scheduling: null,\n isUploadingAttachments: false,\n })\n }\n\n console.log(\n 'Offline or always submitting via pending queue - saving submission to pending queue..',\n )\n await addFormSubmissionToPendingQueue(formSubmission)\n return Object.assign({}, formSubmission, {\n isOffline: isOffline(),\n isInPendingQueue: true,\n submissionTimestamp: null,\n submissionId: null,\n payment: null,\n preventPayment: false,\n scheduling: null,\n isUploadingAttachments: false,\n })\n }\n\n const attachmentsStillUploading = checkIfAttachmentsAreUploading(\n formSubmission.definition,\n formSubmission.submission,\n )\n\n if (attachmentsStillUploading) {\n if (paymentSubmissionEventConfiguration || schedulingSubmissionEvent) {\n console.log(\n 'Attachments still uploading - form has a payment/scheduling submission event that has not been processed yet, return isUploading',\n { paymentSubmissionEventConfiguration, schedulingSubmissionEvent },\n )\n return Object.assign({}, formSubmission, {\n isOffline: false,\n isInPendingQueue: false,\n submissionTimestamp: null,\n submissionId: null,\n payment: null,\n preventPayment: false,\n scheduling: null,\n isUploadingAttachments: true,\n })\n }\n console.log(\n 'Attachments still uploading - saving submission to pending queue..',\n )\n await addFormSubmissionToPendingQueue(formSubmission)\n return Object.assign({}, formSubmission, {\n isOffline: false,\n isInPendingQueue: true,\n submissionTimestamp: null,\n submissionId: null,\n payment: null,\n preventPayment: false,\n scheduling: null,\n isUploadingAttachments: true,\n })\n }\n\n if (shouldRunServerValidation) {\n await serverValidateForm(formSubmission)\n }\n if (shouldRunExternalIdGeneration) {\n const externalIdResult = await externalIdGeneration(formSubmission)\n if (externalIdResult.externalId) {\n formSubmission.externalId = externalIdResult.externalId\n }\n }\n\n const data = await uploadFormSubmission(\n formSubmission,\n completionTimestamp,\n onProgress,\n abortSignal,\n )\n\n const getDownloadSubmissionPdfUrls = () => {\n const allowPDFDownload =\n formSubmission.definition.postSubmissionReceipt?.allowPDFDownload\n if (!data.pdfAccessToken || !allowPDFDownload) {\n return {\n downloadSubmissionPdfUrl: undefined,\n downloadSubmissionPdfs: undefined,\n }\n }\n if (allowPDFDownload && !Array.isArray(allowPDFDownload)) {\n // Cater for legacy config\n const url = `${tenants.current.apiOrigin}/forms/${formSubmission.definition.id}/submissions/${data.submissionId}/pdf-document?accessToken=${data.pdfAccessToken}`\n return {\n downloadSubmissionPdfUrl: url,\n downloadSubmissionPdfs: [\n {\n id: 'default',\n configuration: allowPDFDownload,\n url,\n },\n ],\n }\n }\n\n return {\n downloadSubmissionPdfUrl: undefined,\n downloadSubmissionPdfs: allowPDFDownload.map((pdfConfiguration) => {\n const url = `${tenants.current.apiOrigin}/forms/${formSubmission.definition.id}/submissions/${data.submissionId}/pdf-document?accessToken=${data.pdfAccessToken}&configurationId=${pdfConfiguration.id}`\n return {\n ...pdfConfiguration,\n url,\n }\n }),\n }\n }\n\n const { downloadSubmissionPdfUrl, downloadSubmissionPdfs } =\n getDownloadSubmissionPdfUrls()\n\n const formSubmissionResult: FormSubmissionResult = {\n ...formSubmission,\n payment: null,\n scheduling: null,\n isOffline: false,\n isInPendingQueue: false,\n submissionTimestamp: data.submissionTimestamp,\n submissionId: data.submissionId,\n isUploadingAttachments: false,\n downloadSubmissionPdfUrl,\n downloadSubmissionPdfs,\n attachmentsAccessToken: data.attachmentsAccessToken,\n }\n\n if (schedulingSubmissionEvent && schedulingUrlConfiguration) {\n formSubmissionResult.scheduling = await handleSchedulingSubmissionEvent({\n formSubmissionResult,\n schedulingSubmissionEvent,\n schedulingUrlConfiguration,\n paymentReceiptUrl,\n paymentFormUrl,\n preventPayment: data.preventPayment,\n })\n } else if (\n paymentSubmissionEventConfiguration &&\n paymentReceiptUrl &&\n !data.preventPayment\n ) {\n formSubmissionResult.payment = await handlePaymentSubmissionEvent({\n ...paymentSubmissionEventConfiguration,\n formSubmissionResult,\n paymentReceiptUrl,\n paymentFormUrl,\n })\n }\n\n //currently cannot have drafts without a forms app\n if (formSubmission.formSubmissionDraftId && formSubmission.formsAppId) {\n await removeLocalDraftSubmission(formSubmission.formSubmissionDraftId)\n syncDrafts({\n formsAppId: formSubmission.formsAppId,\n throwError: false,\n })\n }\n if (formSubmission.preFillFormDataId) {\n await removePrefillFormData(formSubmission.preFillFormDataId)\n }\n\n return formSubmissionResult\n } catch (error: OneBlinkAppsError | unknown) {\n if (error instanceof OneBlinkAppsError) {\n if (error.isOffline) {\n if (\n !isPendingQueueEnabled ||\n schedulingSubmissionEvent ||\n paymentSubmissionEventConfiguration\n ) {\n console.warn(\n 'Offline error thrown - app or form does not support pending queue, return offline',\n error,\n )\n return Object.assign({}, formSubmission, {\n isOffline: true,\n isInPendingQueue: false,\n submissionTimestamp: null,\n submissionId: null,\n payment: null,\n scheduling: null,\n isUploadingAttachments: false,\n preventPayment: false,\n })\n }\n\n console.warn(\n 'Offline error thrown - saving submission to pending queue..',\n error,\n )\n await addFormSubmissionToPendingQueue(formSubmission)\n return Object.assign({}, formSubmission, {\n isOffline: true,\n isInPendingQueue: true,\n submissionTimestamp: null,\n submissionId: null,\n payment: null,\n scheduling: null,\n isUploadingAttachments: false,\n preventPayment: false,\n })\n }\n\n // If the error has already been handled as a\n // OneBlinkAppsError, we can throw it as is.\n throw error\n }\n\n throw new OneBlinkAppsError(\n 'An error has occurred with your submission, please contact Support if this problem persists.',\n {\n title: 'Unexpected Error',\n originalError: error as Error,\n },\n )\n }\n}\n"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { SubmissionTypes } from '@oneblink/types';
|
|
2
|
+
import { ProgressListener } from '../types/submissions';
|
|
3
|
+
export type UploadAttachmentConfiguration = {
|
|
4
|
+
fileName: string;
|
|
5
|
+
contentType?: string;
|
|
6
|
+
isPrivate: boolean;
|
|
7
|
+
data: Blob;
|
|
8
|
+
formId: number;
|
|
9
|
+
onProgress?: ProgressListener;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Upload a submission attachment. Attachment can be passed as a `Blob`,
|
|
13
|
+
* `Uint8Array` or `string` (base64). Will return data required form accessing
|
|
14
|
+
* the attachment.
|
|
15
|
+
*
|
|
16
|
+
* ### Example
|
|
17
|
+
*
|
|
18
|
+
* ```js
|
|
19
|
+
* const blob = new Blob(['a string of data'], {
|
|
20
|
+
* type: 'text/plain',
|
|
21
|
+
* })
|
|
22
|
+
* const file = {
|
|
23
|
+
* formId: 1,
|
|
24
|
+
* data: blob,
|
|
25
|
+
* fileName: 'file.jpg',
|
|
26
|
+
* contentType: 'image/jpeg',
|
|
27
|
+
* isPrivate: true, // Whether the attachment will be able to be downloaded by other users
|
|
28
|
+
* }
|
|
29
|
+
* const abortController = new AbortController()
|
|
30
|
+
* const {
|
|
31
|
+
* s3: {
|
|
32
|
+
* key, // string
|
|
33
|
+
* bucket, // string
|
|
34
|
+
* region, // string
|
|
35
|
+
* },
|
|
36
|
+
* url, // string
|
|
37
|
+
* contentType, // string
|
|
38
|
+
* fileName, // string
|
|
39
|
+
* id, //string
|
|
40
|
+
* isPrivate, // boolean
|
|
41
|
+
* uploadedAt, // string
|
|
42
|
+
* } = await submissionService.uploadAttachment(
|
|
43
|
+
* file,
|
|
44
|
+
* abortController.signal,
|
|
45
|
+
* )
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @param options
|
|
49
|
+
* @param abortSignal
|
|
50
|
+
* @returns
|
|
51
|
+
*/
|
|
52
|
+
export default function uploadAttachment({ formId, fileName, contentType, isPrivate, data, onProgress, }: UploadAttachmentConfiguration, abortSignal?: AbortSignal): Promise<SubmissionTypes.FormSubmissionAttachment>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import generateOneBlinkUploader from './generateOneBlinkUploader';
|
|
2
|
+
import fileTypeChecker from 'file-type-checker';
|
|
3
|
+
/**
|
|
4
|
+
* Upload a submission attachment. Attachment can be passed as a `Blob`,
|
|
5
|
+
* `Uint8Array` or `string` (base64). Will return data required form accessing
|
|
6
|
+
* the attachment.
|
|
7
|
+
*
|
|
8
|
+
* ### Example
|
|
9
|
+
*
|
|
10
|
+
* ```js
|
|
11
|
+
* const blob = new Blob(['a string of data'], {
|
|
12
|
+
* type: 'text/plain',
|
|
13
|
+
* })
|
|
14
|
+
* const file = {
|
|
15
|
+
* formId: 1,
|
|
16
|
+
* data: blob,
|
|
17
|
+
* fileName: 'file.jpg',
|
|
18
|
+
* contentType: 'image/jpeg',
|
|
19
|
+
* isPrivate: true, // Whether the attachment will be able to be downloaded by other users
|
|
20
|
+
* }
|
|
21
|
+
* const abortController = new AbortController()
|
|
22
|
+
* const {
|
|
23
|
+
* s3: {
|
|
24
|
+
* key, // string
|
|
25
|
+
* bucket, // string
|
|
26
|
+
* region, // string
|
|
27
|
+
* },
|
|
28
|
+
* url, // string
|
|
29
|
+
* contentType, // string
|
|
30
|
+
* fileName, // string
|
|
31
|
+
* id, //string
|
|
32
|
+
* isPrivate, // boolean
|
|
33
|
+
* uploadedAt, // string
|
|
34
|
+
* } = await submissionService.uploadAttachment(
|
|
35
|
+
* file,
|
|
36
|
+
* abortController.signal,
|
|
37
|
+
* )
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @param options
|
|
41
|
+
* @param abortSignal
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
export default async function uploadAttachment({ formId, fileName, contentType, isPrivate, data, onProgress, }, abortSignal) {
|
|
45
|
+
const oneblinkUploader = generateOneBlinkUploader();
|
|
46
|
+
let _contentType = contentType || 'application/octet-stream'; // S3 default for unknown content type
|
|
47
|
+
if (!contentType) {
|
|
48
|
+
const buffer = await data.arrayBuffer();
|
|
49
|
+
const detectedType = fileTypeChecker.detectFile(buffer);
|
|
50
|
+
if (detectedType) {
|
|
51
|
+
_contentType = detectedType.mimeType;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const result = await oneblinkUploader.uploadAttachment({
|
|
55
|
+
formId,
|
|
56
|
+
fileName,
|
|
57
|
+
contentType: _contentType,
|
|
58
|
+
isPrivate,
|
|
59
|
+
data,
|
|
60
|
+
abortSignal,
|
|
61
|
+
onProgress,
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
s3: result.s3,
|
|
65
|
+
url: result.url,
|
|
66
|
+
contentType: _contentType,
|
|
67
|
+
fileName,
|
|
68
|
+
id: result.attachmentDataId,
|
|
69
|
+
isPrivate,
|
|
70
|
+
uploadedAt: result.uploadedAt,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=uploadAttachment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploadAttachment.js","sourceRoot":"","sources":["../../../src/apps/services/uploadAttachment.ts"],"names":[],"mappings":"AAEA,OAAO,wBAAwB,MAAM,4BAA4B,CAAA;AACjE,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAW/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,gBAAgB,CAC5C,EACE,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,EACT,IAAI,EACJ,UAAU,GACoB,EAChC,WAAyB;IAEzB,MAAM,gBAAgB,GAAG,wBAAwB,EAAE,CAAA;IAEnD,IAAI,YAAY,GAAG,WAAW,IAAI,0BAA0B,CAAA,CAAC,sCAAsC;IACnG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QACvC,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QACvD,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAA;QACtC,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,CAAC;QACrD,MAAM;QACN,QAAQ;QACR,WAAW,EAAE,YAAY;QACzB,SAAS;QACT,IAAI;QACJ,WAAW;QACX,UAAU;KACX,CAAC,CAAA;IACF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,WAAW,EAAE,YAAY;QACzB,QAAQ;QACR,EAAE,EAAE,MAAM,CAAC,gBAAgB;QAC3B,SAAS;QACT,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAA;AACH,CAAC","sourcesContent":["import { SubmissionTypes } from '@oneblink/types'\nimport { ProgressListener } from '../types/submissions'\nimport generateOneBlinkUploader from './generateOneBlinkUploader'\nimport fileTypeChecker from 'file-type-checker'\n\nexport type UploadAttachmentConfiguration = {\n fileName: string\n contentType?: string\n isPrivate: boolean\n data: Blob\n formId: number\n onProgress?: ProgressListener\n}\n\n/**\n * Upload a submission attachment. Attachment can be passed as a `Blob`,\n * `Uint8Array` or `string` (base64). Will return data required form accessing\n * the attachment.\n *\n * ### Example\n *\n * ```js\n * const blob = new Blob(['a string of data'], {\n * type: 'text/plain',\n * })\n * const file = {\n * formId: 1,\n * data: blob,\n * fileName: 'file.jpg',\n * contentType: 'image/jpeg',\n * isPrivate: true, // Whether the attachment will be able to be downloaded by other users\n * }\n * const abortController = new AbortController()\n * const {\n * s3: {\n * key, // string\n * bucket, // string\n * region, // string\n * },\n * url, // string\n * contentType, // string\n * fileName, // string\n * id, //string\n * isPrivate, // boolean\n * uploadedAt, // string\n * } = await submissionService.uploadAttachment(\n * file,\n * abortController.signal,\n * )\n * ```\n *\n * @param options\n * @param abortSignal\n * @returns\n */\nexport default async function uploadAttachment(\n {\n formId,\n fileName,\n contentType,\n isPrivate,\n data,\n onProgress,\n }: UploadAttachmentConfiguration,\n abortSignal?: AbortSignal,\n): Promise<SubmissionTypes.FormSubmissionAttachment> {\n const oneblinkUploader = generateOneBlinkUploader()\n\n let _contentType = contentType || 'application/octet-stream' // S3 default for unknown content type\n if (!contentType) {\n const buffer = await data.arrayBuffer()\n const detectedType = fileTypeChecker.detectFile(buffer)\n if (detectedType) {\n _contentType = detectedType.mimeType\n }\n }\n const result = await oneblinkUploader.uploadAttachment({\n formId,\n fileName,\n contentType: _contentType,\n isPrivate,\n data,\n abortSignal,\n onProgress,\n })\n return {\n s3: result.s3,\n url: result.url,\n contentType: _contentType,\n fileName,\n id: result.attachmentDataId,\n isPrivate,\n uploadedAt: result.uploadedAt,\n }\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set the User token being included in requests to the OneBlink API on behalf
|
|
3
|
+
* of the user.
|
|
4
|
+
*
|
|
5
|
+
* #### Example
|
|
6
|
+
*
|
|
7
|
+
* ```js
|
|
8
|
+
* authService.setUserToken('a value')
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export declare function setUserToken(token: string | undefined | null): void;
|
|
12
|
+
/**
|
|
13
|
+
* Can be used to retrieve the `userToken` passed to `setUserToken()`. Will be
|
|
14
|
+
* `undefined` if the token has not been set yet.
|
|
15
|
+
*
|
|
16
|
+
* #### Example
|
|
17
|
+
*
|
|
18
|
+
* ```js
|
|
19
|
+
* const userToken = authService.getUserToken()
|
|
20
|
+
* if (userToken) {
|
|
21
|
+
* // Use token here...
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @returns
|
|
26
|
+
*/
|
|
27
|
+
export declare function getUserToken(): string | null | undefined;
|