@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.
Files changed (208) hide show
  1. package/dist/OneBlinkForm.d.ts +6 -6
  2. package/dist/OneBlinkFormBase.js +1 -0
  3. package/dist/OneBlinkFormBase.js.map +1 -1
  4. package/dist/apps/Sentry.d.ts +7 -0
  5. package/dist/apps/Sentry.js +16 -0
  6. package/dist/apps/Sentry.js.map +1 -0
  7. package/dist/apps/approvals-service.d.ts +390 -0
  8. package/dist/apps/approvals-service.js +987 -0
  9. package/dist/apps/approvals-service.js.map +1 -0
  10. package/dist/apps/attachments-service.d.ts +49 -0
  11. package/dist/apps/attachments-service.js +134 -0
  12. package/dist/apps/attachments-service.js.map +1 -0
  13. package/dist/apps/auth-service.d.ts +114 -0
  14. package/dist/apps/auth-service.js +194 -0
  15. package/dist/apps/auth-service.js.map +1 -0
  16. package/dist/apps/auto-save-service.d.ts +82 -0
  17. package/dist/apps/auto-save-service.js +105 -0
  18. package/dist/apps/auto-save-service.js.map +1 -0
  19. package/dist/apps/draft-service.d.ts +148 -0
  20. package/dist/apps/draft-service.js +583 -0
  21. package/dist/apps/draft-service.js.map +1 -0
  22. package/dist/apps/form-service.d.ts +204 -0
  23. package/dist/apps/form-service.js +718 -0
  24. package/dist/apps/form-service.js.map +1 -0
  25. package/dist/apps/form-store-service.d.ts +141 -0
  26. package/dist/apps/form-store-service.js +114 -0
  27. package/dist/apps/form-store-service.js.map +1 -0
  28. package/dist/apps/forms-app-environment-service.d.ts +19 -0
  29. package/dist/apps/forms-app-environment-service.js +55 -0
  30. package/dist/apps/forms-app-environment-service.js.map +1 -0
  31. package/dist/apps/forms-app-service.d.ts +18 -0
  32. package/dist/apps/forms-app-service.js +53 -0
  33. package/dist/apps/forms-app-service.js.map +1 -0
  34. package/dist/apps/index.d.ts +252 -0
  35. package/dist/apps/index.js +254 -0
  36. package/dist/apps/index.js.map +1 -0
  37. package/dist/apps/job-service.d.ts +20 -0
  38. package/dist/apps/job-service.js +95 -0
  39. package/dist/apps/job-service.js.map +1 -0
  40. package/dist/apps/localisation-service.d.ts +207 -0
  41. package/dist/apps/localisation-service.js +321 -0
  42. package/dist/apps/localisation-service.js.map +1 -0
  43. package/dist/apps/notification-service.d.ts +83 -0
  44. package/dist/apps/notification-service.js +315 -0
  45. package/dist/apps/notification-service.js.map +1 -0
  46. package/dist/apps/offline-service.d.ts +18 -0
  47. package/dist/apps/offline-service.js +25 -0
  48. package/dist/apps/offline-service.js.map +1 -0
  49. package/dist/apps/payment-service.d.ts +110 -0
  50. package/dist/apps/payment-service.js +182 -0
  51. package/dist/apps/payment-service.js.map +1 -0
  52. package/dist/apps/prefill-service.d.ts +14 -0
  53. package/dist/apps/prefill-service.js +19 -0
  54. package/dist/apps/prefill-service.js.map +1 -0
  55. package/dist/apps/scheduled-tasks-service.d.ts +127 -0
  56. package/dist/apps/scheduled-tasks-service.js +240 -0
  57. package/dist/apps/scheduled-tasks-service.js.map +1 -0
  58. package/dist/apps/scheduling-service.d.ts +101 -0
  59. package/dist/apps/scheduling-service.js +171 -0
  60. package/dist/apps/scheduling-service.js.map +1 -0
  61. package/dist/apps/services/AWSCognitoClient.d.ts +55 -0
  62. package/dist/apps/services/AWSCognitoClient.js +436 -0
  63. package/dist/apps/services/AWSCognitoClient.js.map +1 -0
  64. package/dist/apps/services/api/drafts.d.ts +7 -0
  65. package/dist/apps/services/api/drafts.js +236 -0
  66. package/dist/apps/services/api/drafts.js.map +1 -0
  67. package/dist/apps/services/api/notifications.d.ts +3 -0
  68. package/dist/apps/services/api/notifications.js +60 -0
  69. package/dist/apps/services/api/notifications.js.map +1 -0
  70. package/dist/apps/services/api/payment.d.ts +23 -0
  71. package/dist/apps/services/api/payment.js +235 -0
  72. package/dist/apps/services/api/payment.js.map +1 -0
  73. package/dist/apps/services/api/post-submission-attachment-urls.d.ts +7 -0
  74. package/dist/apps/services/api/post-submission-attachment-urls.js +19 -0
  75. package/dist/apps/services/api/post-submission-attachment-urls.js.map +1 -0
  76. package/dist/apps/services/api/prefill.d.ts +1 -0
  77. package/dist/apps/services/api/prefill.js +70 -0
  78. package/dist/apps/services/api/prefill.js.map +1 -0
  79. package/dist/apps/services/api/receipt-id.d.ts +2 -0
  80. package/dist/apps/services/api/receipt-id.js +54 -0
  81. package/dist/apps/services/api/receipt-id.js.map +1 -0
  82. package/dist/apps/services/api/scheduling.d.ts +38 -0
  83. package/dist/apps/services/api/scheduling.js +142 -0
  84. package/dist/apps/services/api/scheduling.js.map +1 -0
  85. package/dist/apps/services/api/submissions.d.ts +18 -0
  86. package/dist/apps/services/api/submissions.js +166 -0
  87. package/dist/apps/services/api/submissions.js.map +1 -0
  88. package/dist/apps/services/cognito.d.ts +302 -0
  89. package/dist/apps/services/cognito.js +441 -0
  90. package/dist/apps/services/cognito.js.map +1 -0
  91. package/dist/apps/services/draft-data-store.d.ts +16 -0
  92. package/dist/apps/services/draft-data-store.js +115 -0
  93. package/dist/apps/services/draft-data-store.js.map +1 -0
  94. package/dist/apps/services/errors/oneBlinkAppsError.d.ts +35 -0
  95. package/dist/apps/services/errors/oneBlinkAppsError.js +32 -0
  96. package/dist/apps/services/errors/oneBlinkAppsError.js.map +1 -0
  97. package/dist/apps/services/external-id-generation.d.ts +4 -0
  98. package/dist/apps/services/external-id-generation.js +59 -0
  99. package/dist/apps/services/external-id-generation.js.map +1 -0
  100. package/dist/apps/services/fetch.d.ts +12 -0
  101. package/dist/apps/services/fetch.js +95 -0
  102. package/dist/apps/services/fetch.js.map +1 -0
  103. package/dist/apps/services/forms-key.d.ts +51 -0
  104. package/dist/apps/services/forms-key.js +83 -0
  105. package/dist/apps/services/forms-key.js.map +1 -0
  106. package/dist/apps/services/generate-generic-error.d.ts +3 -0
  107. package/dist/apps/services/generate-generic-error.js +52 -0
  108. package/dist/apps/services/generate-generic-error.js.map +1 -0
  109. package/dist/apps/services/generateOneBlinkDownloader.d.ts +2 -0
  110. package/dist/apps/services/generateOneBlinkDownloader.js +11 -0
  111. package/dist/apps/services/generateOneBlinkDownloader.js.map +1 -0
  112. package/dist/apps/services/generateOneBlinkUploader.d.ts +2 -0
  113. package/dist/apps/services/generateOneBlinkUploader.js +11 -0
  114. package/dist/apps/services/generateOneBlinkUploader.js.map +1 -0
  115. package/dist/apps/services/getDeviceInformation.d.ts +17 -0
  116. package/dist/apps/services/getDeviceInformation.js +38 -0
  117. package/dist/apps/services/getDeviceInformation.js.map +1 -0
  118. package/dist/apps/services/integration-elements.d.ts +383 -0
  119. package/dist/apps/services/integration-elements.js +761 -0
  120. package/dist/apps/services/integration-elements.js.map +1 -0
  121. package/dist/apps/services/job-prefill.d.ts +40 -0
  122. package/dist/apps/services/job-prefill.js +78 -0
  123. package/dist/apps/services/job-prefill.js.map +1 -0
  124. package/dist/apps/services/payment-providers/BPOINTPaymentProvider.d.ts +29 -0
  125. package/dist/apps/services/payment-providers/BPOINTPaymentProvider.js +59 -0
  126. package/dist/apps/services/payment-providers/BPOINTPaymentProvider.js.map +1 -0
  127. package/dist/apps/services/payment-providers/CPPayPaymentProvider.d.ts +27 -0
  128. package/dist/apps/services/payment-providers/CPPayPaymentProvider.js +63 -0
  129. package/dist/apps/services/payment-providers/CPPayPaymentProvider.js.map +1 -0
  130. package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.d.ts +30 -0
  131. package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.js +116 -0
  132. package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.js.map +1 -0
  133. package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.d.ts +49 -0
  134. package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.js +116 -0
  135. package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.js.map +1 -0
  136. package/dist/apps/services/payment-providers/receipt-items.d.ts +8 -0
  137. package/dist/apps/services/payment-providers/receipt-items.js +58 -0
  138. package/dist/apps/services/payment-providers/receipt-items.js.map +1 -0
  139. package/dist/apps/services/pending-queue.d.ts +150 -0
  140. package/dist/apps/services/pending-queue.js +316 -0
  141. package/dist/apps/services/pending-queue.js.map +1 -0
  142. package/dist/apps/services/prepareSubmissionData.d.ts +2 -0
  143. package/dist/apps/services/prepareSubmissionData.js +113 -0
  144. package/dist/apps/services/prepareSubmissionData.js.map +1 -0
  145. package/dist/apps/services/query-string.d.ts +1 -0
  146. package/dist/apps/services/query-string.js +16 -0
  147. package/dist/apps/services/query-string.js.map +1 -0
  148. package/dist/apps/services/replaceInjectablesWithSubmissionValues.d.ts +3 -0
  149. package/dist/apps/services/replaceInjectablesWithSubmissionValues.js +18 -0
  150. package/dist/apps/services/replaceInjectablesWithSubmissionValues.js.map +1 -0
  151. package/dist/apps/services/schedulingHandlers.d.ts +36 -0
  152. package/dist/apps/services/schedulingHandlers.js +76 -0
  153. package/dist/apps/services/schedulingHandlers.js.map +1 -0
  154. package/dist/apps/services/server-validation.d.ts +2 -0
  155. package/dist/apps/services/server-validation.js +36 -0
  156. package/dist/apps/services/server-validation.js.map +1 -0
  157. package/dist/apps/services/serverRequest.d.ts +5 -0
  158. package/dist/apps/services/serverRequest.js +24 -0
  159. package/dist/apps/services/serverRequest.js.map +1 -0
  160. package/dist/apps/services/submit.d.ts +19 -0
  161. package/dist/apps/services/submit.js +219 -0
  162. package/dist/apps/services/submit.js.map +1 -0
  163. package/dist/apps/services/uploadAttachment.d.ts +52 -0
  164. package/dist/apps/services/uploadAttachment.js +73 -0
  165. package/dist/apps/services/uploadAttachment.js.map +1 -0
  166. package/dist/apps/services/user-token.d.ts +27 -0
  167. package/dist/apps/services/user-token.js +33 -0
  168. package/dist/apps/services/user-token.js.map +1 -0
  169. package/dist/apps/services/utils.d.ts +12 -0
  170. package/dist/apps/services/utils.js +100 -0
  171. package/dist/apps/services/utils.js.map +1 -0
  172. package/dist/apps/submission-service.d.ts +226 -0
  173. package/dist/apps/submission-service.js +425 -0
  174. package/dist/apps/submission-service.js.map +1 -0
  175. package/dist/apps/tenants.d.ts +29 -0
  176. package/dist/apps/tenants.js +127 -0
  177. package/dist/apps/tenants.js.map +1 -0
  178. package/dist/apps/types/form.d.ts +4 -0
  179. package/dist/apps/types/form.js +2 -0
  180. package/dist/apps/types/form.js.map +1 -0
  181. package/dist/apps/types/payments.d.ts +45 -0
  182. package/dist/apps/types/payments.js +2 -0
  183. package/dist/apps/types/payments.js.map +1 -0
  184. package/dist/apps/types/scheduling.d.ts +5 -0
  185. package/dist/apps/types/scheduling.js +2 -0
  186. package/dist/apps/types/scheduling.js.map +1 -0
  187. package/dist/apps/types/submissions.d.ts +175 -0
  188. package/dist/apps/types/submissions.js +2 -0
  189. package/dist/apps/types/submissions.js.map +1 -0
  190. package/dist/components/CustomAccordion.d.ts +3 -3
  191. package/dist/components/Lists.d.ts +4 -1
  192. package/dist/components/formStore/display/ElementDisplay.js +2 -2
  193. package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
  194. package/dist/components/formStore/useFormStoreTableContext.d.ts +2 -2
  195. package/dist/components/mfa/MultiFactorAuthentication.d.ts +1 -1
  196. package/dist/components/renderer/LookupNotification.js +1 -1
  197. package/dist/components/renderer/LookupNotification.js.map +1 -1
  198. package/dist/form-elements/FormElementAutocomplete.js +1 -1
  199. package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
  200. package/dist/hooks/attachments/useAttachment.js +1 -1
  201. package/dist/hooks/attachments/useAttachment.js.map +1 -1
  202. package/dist/index.d.ts +1 -0
  203. package/dist/index.js +2 -0
  204. package/dist/index.js.map +1 -1
  205. package/dist/services/download-file.js +1 -1
  206. package/dist/services/download-file.js.map +1 -1
  207. package/dist/styles.css +208 -204
  208. package/package.json +43 -35
@@ -0,0 +1,182 @@
1
+ import { paymentService } from '@oneblink/sdk-core';
2
+ import OneBlinkAppsError from './services/errors/oneBlinkAppsError';
3
+ import { generatePaymentConfiguration } from './services/api/payment';
4
+ import utilsService from './services/utils';
5
+ import BPOINTPaymentProvider from './services/payment-providers/BPOINTPaymentProvider';
6
+ import CPPayPaymentProvider from './services/payment-providers/CPPayPaymentProvider';
7
+ import NSWGovPayPaymentProvider from './services/payment-providers/NSWGovPayPaymentProvider';
8
+ import WestpacQuickStreamPaymentProvider, * as westpacQuickStream from './services/payment-providers/WestpacQuickStreamPaymentProvider';
9
+ import { replaceSubmissionFormatters } from './localisation-service';
10
+ import { getSchedulingBooking, removeSchedulingBooking, } from './services/schedulingHandlers';
11
+ const KEY = 'PAYMENT_SUBMISSION_RESULT';
12
+ export { westpacQuickStream };
13
+ function getPaymentProvider(formSubmissionResult, paymentSubmissionEvent) {
14
+ switch (paymentSubmissionEvent.type) {
15
+ case 'BPOINT': {
16
+ return new BPOINTPaymentProvider(paymentSubmissionEvent, formSubmissionResult);
17
+ }
18
+ case 'CP_PAY': {
19
+ return new CPPayPaymentProvider(paymentSubmissionEvent, formSubmissionResult);
20
+ }
21
+ case 'NSW_GOV_PAY': {
22
+ return new NSWGovPayPaymentProvider(paymentSubmissionEvent, formSubmissionResult);
23
+ }
24
+ case 'WESTPAC_QUICK_STREAM': {
25
+ return new WestpacQuickStreamPaymentProvider(paymentSubmissionEvent, formSubmissionResult);
26
+ }
27
+ }
28
+ }
29
+ /**
30
+ * Pass in query string parameters after a redirect back to your app after a
31
+ * payment is processed. This function will handle all payment submission events
32
+ * supported by OneBlink. Will return a Transaction and the submission result
33
+ * that was returned from `handlePaymentSubmissionEvent()` before redirecting to
34
+ * `payment.hostedFormUrl`.
35
+ *
36
+ * #### Example
37
+ *
38
+ * ```js
39
+ * import queryString from 'query-string'
40
+ *
41
+ * const query = queryString.parse(window.location.search)
42
+ * const { transaction, submissionResult } =
43
+ * await paymentService.handlePaymentQuerystring(query)
44
+ * ```
45
+ *
46
+ * @param query
47
+ * @returns
48
+ */
49
+ export async function handlePaymentQuerystring(query) {
50
+ const submissionResult = await utilsService.getLocalForageItem(KEY);
51
+ // If the current transaction does not match the submission
52
+ // we will display message to user indicating
53
+ // they are looking for the wrong transaction receipt.
54
+ if (!submissionResult) {
55
+ throw new OneBlinkAppsError('It looks like you are attempting to view a receipt for an unknown payment.');
56
+ }
57
+ if (!submissionResult.payment || !submissionResult.payment.submissionEvent) {
58
+ throw new OneBlinkAppsError('It looks like you are attempting to view a receipt for a misconfigured payment.');
59
+ }
60
+ const paymentProvider = getPaymentProvider(submissionResult, submissionResult.payment.submissionEvent);
61
+ if (!paymentProvider) {
62
+ throw new OneBlinkAppsError('It looks like you are attempting to view a receipt for an unsupported payment.');
63
+ }
64
+ const verifiedPaymentTransaction = await paymentProvider.verifyPaymentTransaction(query);
65
+ const schedulingBooking = await getSchedulingBooking(verifiedPaymentTransaction.submissionResult.submissionId);
66
+ if (schedulingBooking && verifiedPaymentTransaction.transaction.isSuccess) {
67
+ await removeSchedulingBooking(schedulingBooking.submissionId);
68
+ }
69
+ return {
70
+ ...verifiedPaymentTransaction,
71
+ schedulingBooking,
72
+ };
73
+ }
74
+ export function checkForPaymentSubmissionEvent(formSubmission) {
75
+ const result = paymentService.checkForPaymentEvent(formSubmission.definition, formSubmission.submission);
76
+ if (result) {
77
+ console.log('Form has a payment submission event with amount', result);
78
+ }
79
+ return result;
80
+ }
81
+ /**
82
+ * Handle a submission result with a payment submission event. Will throw an
83
+ * error if a transaction has already been made using this submission result.
84
+ * Will return `undefined` if the submission does not have an amount. Will
85
+ * return the submission result passed in with a `payment` property if the
86
+ * submission requires processing.
87
+ *
88
+ * #### Example
89
+ *
90
+ * ```js
91
+ * const formSubmissionResult = {
92
+ * submissionId: '89c6e98e-f56f-45fc-84fe-c4fc62331d34',
93
+ * submissionTimestamp: '2020-07-29T01:03:26.573Z'
94
+ * formsAppId: 1,
95
+ * submission: {
96
+ * form: 'data',
97
+ * goes: 'here',
98
+ * amount: 1.50,
99
+ * }
100
+ * definition: OneBlinkForm,
101
+ * payment: null,
102
+ * }
103
+ * const paymentSubmissionEvent = {
104
+ * type: 'CP_PAY',
105
+ * configuration: {
106
+ * elementId: '12663efc-4c6a-4e72-8505-559edfe3e92e',
107
+ * gatewayId: '6658c5c4-e0db-483b-8af7-6a6464fe772c',
108
+ * },
109
+ * }
110
+ * const paymentReceiptUrl = `${window.location.origin}/payment-receipt`
111
+ * const paymentSubmissionResult = await paymentService.handlePaymentSubmissionEvent({
112
+ * formSubmissionResult,
113
+ * paymentSubmissionEvent,
114
+ * paymentReceiptUrl,
115
+ * })
116
+ * if (paymentSubmissionResult) {
117
+ * window.location.href = paymentSubmissionResult.payment.hostedFormUrl
118
+ * }
119
+ * ```
120
+ *
121
+ * @param options
122
+ * @returns
123
+ */
124
+ export async function handlePaymentSubmissionEvent({ amount, formSubmissionResult, paymentSubmissionEvent, paymentReceiptUrl, paymentFormUrl, }) {
125
+ const paymentProvider = getPaymentProvider(formSubmissionResult, paymentSubmissionEvent);
126
+ if (!paymentProvider) {
127
+ throw new OneBlinkAppsError('It looks like you are attempting to make a payment using an unsupported payment method.');
128
+ }
129
+ const paymentConfiguration = await generatePaymentConfiguration(paymentProvider, {
130
+ amount,
131
+ redirectUrl: paymentReceiptUrl,
132
+ submissionId: formSubmissionResult.submissionId,
133
+ paymentFormUrl,
134
+ });
135
+ const payment = {
136
+ submissionEvent: paymentSubmissionEvent,
137
+ paymentReceiptUrl,
138
+ hostedFormUrl: paymentConfiguration.hostedFormUrl,
139
+ paymentFormUrl,
140
+ amount,
141
+ };
142
+ console.log('Created Payment configuration to start transaction', payment);
143
+ await utilsService.setLocalForageItem(KEY, {
144
+ ...formSubmissionResult,
145
+ scheduling: null,
146
+ payment,
147
+ });
148
+ return payment;
149
+ }
150
+ export async function getFormSubmissionResultPayment() {
151
+ var _a, _b;
152
+ const formSubmissionResult = await utilsService.getLocalForageItem(KEY);
153
+ if (!formSubmissionResult) {
154
+ throw new OneBlinkAppsError('It looks like you are attempting to complete a transaction for an unknown payment.');
155
+ }
156
+ if (!((_a = formSubmissionResult.payment) === null || _a === void 0 ? void 0 : _a.submissionEvent)) {
157
+ throw new OneBlinkAppsError('It looks like you are attempting to complete a transaction for a misconfigured payment.');
158
+ }
159
+ return {
160
+ formSubmissionResult,
161
+ paymentSubmissionEvent: (_b = formSubmissionResult.payment) === null || _b === void 0 ? void 0 : _b.submissionEvent,
162
+ };
163
+ }
164
+ /**
165
+ * Retrieve an array of detail items from a form submission payment.
166
+ *
167
+ * #### Example
168
+ *
169
+ * ```js
170
+ * const detailItems =
171
+ * paymentService.getDisplayDetailsFromFormSubmissionPayment(
172
+ * formSubmissionPayment,
173
+ * )
174
+ * ```
175
+ *
176
+ * @param formSubmissionPayment
177
+ * @returns
178
+ */
179
+ export function getDisplayDetailsFromFormSubmissionPayment(formSubmissionPayment) {
180
+ return paymentService.getDisplayDetailsFromFormSubmissionPayment(formSubmissionPayment, replaceSubmissionFormatters);
181
+ }
182
+ //# sourceMappingURL=payment-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-service.js","sourceRoot":"","sources":["../../src/apps/payment-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { paymentService } from '@oneblink/sdk-core'\nimport OneBlinkAppsError from './services/errors/oneBlinkAppsError'\nimport { generatePaymentConfiguration } from './services/api/payment'\nimport utilsService from './services/utils'\nimport { SubmissionEventTypes, SubmissionTypes } from '@oneblink/types'\nimport { FormSubmission, FormSubmissionResult } from './types/submissions'\nimport {\n HandlePaymentResult,\n PaymentProvider,\n PaymentReceiptItem,\n} from './types/payments'\nimport BPOINTPaymentProvider from './services/payment-providers/BPOINTPaymentProvider'\nimport CPPayPaymentProvider from './services/payment-providers/CPPayPaymentProvider'\nimport NSWGovPayPaymentProvider from './services/payment-providers/NSWGovPayPaymentProvider'\nimport WestpacQuickStreamPaymentProvider, * as westpacQuickStream from './services/payment-providers/WestpacQuickStreamPaymentProvider'\nimport { replaceSubmissionFormatters } from './localisation-service'\nimport {\n getSchedulingBooking,\n removeSchedulingBooking,\n} from './services/schedulingHandlers'\n\nconst KEY = 'PAYMENT_SUBMISSION_RESULT'\n\nexport { HandlePaymentResult, PaymentReceiptItem, westpacQuickStream }\n\nfunction getPaymentProvider(\n formSubmissionResult: FormSubmissionResult,\n paymentSubmissionEvent: SubmissionEventTypes.FormPaymentEvent,\n): PaymentProvider<SubmissionEventTypes.FormPaymentEvent> {\n switch (paymentSubmissionEvent.type) {\n case 'BPOINT': {\n return new BPOINTPaymentProvider(\n paymentSubmissionEvent,\n formSubmissionResult,\n )\n }\n case 'CP_PAY': {\n return new CPPayPaymentProvider(\n paymentSubmissionEvent,\n formSubmissionResult,\n )\n }\n case 'NSW_GOV_PAY': {\n return new NSWGovPayPaymentProvider(\n paymentSubmissionEvent,\n formSubmissionResult,\n )\n }\n case 'WESTPAC_QUICK_STREAM': {\n return new WestpacQuickStreamPaymentProvider(\n paymentSubmissionEvent,\n formSubmissionResult,\n )\n }\n }\n}\n\n/**\n * Pass in query string parameters after a redirect back to your app after a\n * payment is processed. This function will handle all payment submission events\n * supported by OneBlink. Will return a Transaction and the submission result\n * that was returned from `handlePaymentSubmissionEvent()` before redirecting to\n * `payment.hostedFormUrl`.\n *\n * #### Example\n *\n * ```js\n * import queryString from 'query-string'\n *\n * const query = queryString.parse(window.location.search)\n * const { transaction, submissionResult } =\n * await paymentService.handlePaymentQuerystring(query)\n * ```\n *\n * @param query\n * @returns\n */\nexport async function handlePaymentQuerystring(\n query: Record<string, unknown>,\n): Promise<HandlePaymentResult> {\n const submissionResult =\n await utilsService.getLocalForageItem<FormSubmissionResult | null>(KEY)\n // If the current transaction does not match the submission\n // we will display message to user indicating\n // they are looking for the wrong transaction receipt.\n if (!submissionResult) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to view a receipt for an unknown payment.',\n )\n }\n if (!submissionResult.payment || !submissionResult.payment.submissionEvent) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to view a receipt for a misconfigured payment.',\n )\n }\n const paymentProvider = getPaymentProvider(\n submissionResult,\n submissionResult.payment.submissionEvent,\n )\n if (!paymentProvider) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to view a receipt for an unsupported payment.',\n )\n }\n\n const verifiedPaymentTransaction =\n await paymentProvider.verifyPaymentTransaction(query)\n\n const schedulingBooking = await getSchedulingBooking(\n verifiedPaymentTransaction.submissionResult.submissionId,\n )\n if (schedulingBooking && verifiedPaymentTransaction.transaction.isSuccess) {\n await removeSchedulingBooking(schedulingBooking.submissionId)\n }\n\n return {\n ...verifiedPaymentTransaction,\n schedulingBooking,\n }\n}\n\nexport function checkForPaymentSubmissionEvent(formSubmission: FormSubmission):\n | {\n paymentSubmissionEvent: SubmissionEventTypes.FormPaymentEvent\n amount: number\n }\n | undefined {\n const result = paymentService.checkForPaymentEvent(\n formSubmission.definition,\n formSubmission.submission,\n )\n if (result) {\n console.log('Form has a payment submission event with amount', result)\n }\n return result\n}\n\n/**\n * Handle a submission result with a payment submission event. Will throw an\n * error if a transaction has already been made using this submission result.\n * Will return `undefined` if the submission does not have an amount. Will\n * return the submission result passed in with a `payment` property if the\n * submission requires processing.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionResult = {\n * submissionId: '89c6e98e-f56f-45fc-84fe-c4fc62331d34',\n * submissionTimestamp: '2020-07-29T01:03:26.573Z'\n * formsAppId: 1,\n * submission: {\n * form: 'data',\n * goes: 'here',\n * amount: 1.50,\n * }\n * definition: OneBlinkForm,\n * payment: null,\n * }\n * const paymentSubmissionEvent = {\n * type: 'CP_PAY',\n * configuration: {\n * elementId: '12663efc-4c6a-4e72-8505-559edfe3e92e',\n * gatewayId: '6658c5c4-e0db-483b-8af7-6a6464fe772c',\n * },\n * }\n * const paymentReceiptUrl = `${window.location.origin}/payment-receipt`\n * const paymentSubmissionResult = await paymentService.handlePaymentSubmissionEvent({\n * formSubmissionResult,\n * paymentSubmissionEvent,\n * paymentReceiptUrl,\n * })\n * if (paymentSubmissionResult) {\n * window.location.href = paymentSubmissionResult.payment.hostedFormUrl\n * }\n * ```\n *\n * @param options\n * @returns\n */\nexport async function handlePaymentSubmissionEvent({\n amount,\n formSubmissionResult,\n paymentSubmissionEvent,\n paymentReceiptUrl,\n paymentFormUrl,\n}: {\n amount: number\n formSubmissionResult: FormSubmissionResult\n paymentSubmissionEvent: SubmissionEventTypes.FormPaymentEvent\n paymentReceiptUrl: string\n paymentFormUrl: string | undefined\n}): Promise<FormSubmissionResult['payment']> {\n const paymentProvider = getPaymentProvider(\n formSubmissionResult,\n paymentSubmissionEvent,\n )\n if (!paymentProvider) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to make a payment using an unsupported payment method.',\n )\n }\n\n const paymentConfiguration = await generatePaymentConfiguration(\n paymentProvider,\n {\n amount,\n redirectUrl: paymentReceiptUrl,\n submissionId: formSubmissionResult.submissionId,\n paymentFormUrl,\n },\n )\n\n const payment = {\n submissionEvent: paymentSubmissionEvent,\n paymentReceiptUrl,\n hostedFormUrl: paymentConfiguration.hostedFormUrl,\n paymentFormUrl,\n amount,\n }\n console.log('Created Payment configuration to start transaction', payment)\n\n await utilsService.setLocalForageItem(KEY, {\n ...formSubmissionResult,\n scheduling: null,\n payment,\n })\n\n return payment\n}\n\nexport async function getFormSubmissionResultPayment(): Promise<{\n formSubmissionResult: FormSubmissionResult\n paymentSubmissionEvent: SubmissionEventTypes.FormPaymentEvent\n}> {\n const formSubmissionResult =\n await utilsService.getLocalForageItem<FormSubmissionResult | null>(KEY)\n\n if (!formSubmissionResult) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to complete a transaction for an unknown payment.',\n )\n }\n if (!formSubmissionResult.payment?.submissionEvent) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to complete a transaction for a misconfigured payment.',\n )\n }\n\n return {\n formSubmissionResult,\n paymentSubmissionEvent: formSubmissionResult.payment?.submissionEvent,\n }\n}\n\n/**\n * Retrieve an array of detail items from a form submission payment.\n *\n * #### Example\n *\n * ```js\n * const detailItems =\n * paymentService.getDisplayDetailsFromFormSubmissionPayment(\n * formSubmissionPayment,\n * )\n * ```\n *\n * @param formSubmissionPayment\n * @returns\n */\nexport function getDisplayDetailsFromFormSubmissionPayment(\n formSubmissionPayment: SubmissionTypes.FormSubmissionPayment,\n) {\n return paymentService.getDisplayDetailsFromFormSubmissionPayment(\n formSubmissionPayment,\n replaceSubmissionFormatters,\n )\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { getPrefillFormData } from './services/job-prefill';
2
+ /**
3
+ * Remove prefill data form the local store.
4
+ *
5
+ * ```js
6
+ * const prefillFormDataId = '24faee0a-dca1-4c88-9100-9da2aae8e0ac'
7
+ * await prefillService.removePrefillFormData(prefillFormDataId)
8
+ * ```
9
+ *
10
+ * @param prefillFormDataId
11
+ * @returns
12
+ */
13
+ export declare function removePrefillFormData(prefillFormDataId: string): Promise<void>;
14
+ export { getPrefillFormData };
@@ -0,0 +1,19 @@
1
+ import utilsService from './services/utils';
2
+ import { getPrefillKey, getPrefillFormData } from './services/job-prefill';
3
+ /**
4
+ * Remove prefill data form the local store.
5
+ *
6
+ * ```js
7
+ * const prefillFormDataId = '24faee0a-dca1-4c88-9100-9da2aae8e0ac'
8
+ * await prefillService.removePrefillFormData(prefillFormDataId)
9
+ * ```
10
+ *
11
+ * @param prefillFormDataId
12
+ * @returns
13
+ */
14
+ export async function removePrefillFormData(prefillFormDataId) {
15
+ const key = getPrefillKey(prefillFormDataId);
16
+ return utilsService.removeLocalForageItem(key);
17
+ }
18
+ export { getPrefillFormData };
19
+ //# sourceMappingURL=prefill-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefill-service.js","sourceRoot":"","sources":["../../src/apps/prefill-service.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE1E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,iBAAyB;IAEzB,MAAM,GAAG,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAA;IAC5C,OAAO,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;AAChD,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAA","sourcesContent":["import utilsService from './services/utils'\nimport { getPrefillKey, getPrefillFormData } from './services/job-prefill'\n\n/**\n * Remove prefill data form the local store.\n *\n * ```js\n * const prefillFormDataId = '24faee0a-dca1-4c88-9100-9da2aae8e0ac'\n * await prefillService.removePrefillFormData(prefillFormDataId)\n * ```\n *\n * @param prefillFormDataId\n * @returns\n */\nexport async function removePrefillFormData(\n prefillFormDataId: string,\n): Promise<void> {\n const key = getPrefillKey(prefillFormDataId)\n return utilsService.removeLocalForageItem(key)\n}\n\nexport { getPrefillFormData }\n"]}
@@ -0,0 +1,127 @@
1
+ import { ScheduledTasksTypes } from '@oneblink/types';
2
+ export interface TaskAvailability {
3
+ task: ScheduledTasksTypes.Task;
4
+ completedTask?: ScheduledTasksTypes.CompletedTask;
5
+ daysAvailable: number;
6
+ }
7
+ export interface TaskResponse extends TaskAvailability {
8
+ actions: ScheduledTasksTypes.TaskAction[];
9
+ }
10
+ /**
11
+ * Obtain all of the related Tasks for a specific Forms App
12
+ *
13
+ * #### Example
14
+ *
15
+ * ```js
16
+ * const formsAppId = 1
17
+ * const date = '2023-12-01'
18
+ * const tasks = await getTasksForFormsApp({ formsAppId, date })
19
+ * ```
20
+ *
21
+ * @param formsAppId
22
+ * @param abortSignal
23
+ * @returns
24
+ */
25
+ export declare function getTasksForFormsApp({ formsAppId, date, abortSignal, }: {
26
+ formsAppId: number;
27
+ date: string;
28
+ abortSignal?: AbortSignal;
29
+ }): Promise<{
30
+ taskResponses: TaskResponse[];
31
+ }>;
32
+ /**
33
+ * Obtain all of the tasks related to a Task Group Instances in a specific Forms
34
+ * App
35
+ *
36
+ * #### Example
37
+ *
38
+ * ```js
39
+ * const formsAppId = 1
40
+ * const taskGroupInstanceId = 'abc123'
41
+ * const date = '2023-12-01'
42
+ * const tasks = await getTaskGroupInstanceTasks({
43
+ * formsAppId,
44
+ * taskGroupInstanceId,
45
+ * date,
46
+ * })
47
+ * ```
48
+ *
49
+ * @param formsAppId
50
+ * @param taskGroupInstanceId
51
+ * @param abortSignal
52
+ * @returns
53
+ */
54
+ export declare function getTaskGroupInstanceTasks({ taskGroupInstanceId, date, formsAppId, abortSignal, }: {
55
+ taskGroupInstanceId: string;
56
+ date: string;
57
+ formsAppId: number;
58
+ abortSignal?: AbortSignal;
59
+ }): Promise<{
60
+ taskResponses: TaskResponse[];
61
+ taskGroup: ScheduledTasksTypes.TaskGroup;
62
+ taskGroupInstance: ScheduledTasksTypes.TaskGroupInstance;
63
+ }>;
64
+ /**
65
+ * Obtain all of the Task Group instances for a specific Forms App
66
+ *
67
+ * #### Example
68
+ *
69
+ * ```js
70
+ * const formsAppId = 1
71
+ * const taskGroupInstances = await getTaskGroupInstances(formsAppId)
72
+ * ```
73
+ *
74
+ * @param formsAppId
75
+ * @param abortSignal
76
+ * @returns
77
+ */
78
+ export declare function getTaskGroupInstances(formsAppId: number, abortSignal?: AbortSignal): Promise<{
79
+ taskGroupInstances: Array<ScheduledTasksTypes.TaskGroupInstance & {
80
+ taskAvailabilities: TaskAvailability[];
81
+ taskGroup: ScheduledTasksTypes.TaskGroup;
82
+ }>;
83
+ }>;
84
+ /**
85
+ * Complete the related Task for a specific Forms App
86
+ *
87
+ * #### Example
88
+ *
89
+ * ```js
90
+ * const formsAppId = 1
91
+ * const taskId = 2
92
+ * const completedTask = await scheduledTasksService.completeTask({
93
+ * formsAppId,
94
+ * taskId,
95
+ * })
96
+ * ```
97
+ *
98
+ * @param options
99
+ * @returns
100
+ */
101
+ export declare function completeTask({ formsAppId, taskId, taskActionId, taskGroupInstanceId, abortSignal, }: {
102
+ formsAppId: number;
103
+ taskId: string;
104
+ taskActionId: string;
105
+ taskGroupInstanceId: string | undefined;
106
+ abortSignal?: AbortSignal;
107
+ }): Promise<ScheduledTasksTypes.CompletedTask>;
108
+ /**
109
+ * Delete the completed task record related to a Task for a specific Forms App
110
+ *
111
+ * #### Example
112
+ *
113
+ * ```js
114
+ * const formsAppId = 1
115
+ * const taskId = 2
116
+ * const completedTask = await scheduledTasksService.completeTask({
117
+ * formsAppId,
118
+ * taskId,
119
+ * })
120
+ * await deleteCompletedTask(completedTask.id)
121
+ * ```
122
+ *
123
+ * @param id
124
+ * @param abortSignal
125
+ * @returns
126
+ */
127
+ export declare function deleteCompletedTask(id: string, abortSignal?: AbortSignal): Promise<void>;
@@ -0,0 +1,240 @@
1
+ import tenants from './tenants';
2
+ import Sentry from './Sentry';
3
+ import { deleteRequest, getRequest, postRequest, } from './services/fetch';
4
+ import { isOffline } from './offline-service';
5
+ import OneBlinkAppsError from './services/errors/oneBlinkAppsError';
6
+ async function getTasks(url, abortSignal) {
7
+ try {
8
+ return await getRequest(url, abortSignal);
9
+ }
10
+ catch (err) {
11
+ Sentry.captureException(err);
12
+ const error = err;
13
+ if (isOffline()) {
14
+ throw new OneBlinkAppsError('You are currently offline and do not have a local version of these scheduled tasks, please connect to the internet and try again', {
15
+ originalError: error,
16
+ isOffline: true,
17
+ });
18
+ }
19
+ switch (error.status) {
20
+ case 400:
21
+ case 404: {
22
+ throw new OneBlinkAppsError('We could not find the forms app you are looking for. Please contact support if the problem persists.', {
23
+ originalError: error,
24
+ title: 'Unknown Forms App',
25
+ httpStatusCode: error.status,
26
+ });
27
+ }
28
+ default: {
29
+ throw new OneBlinkAppsError('An unknown error has occurred. Please contact support if the problem persists.', {
30
+ originalError: error,
31
+ httpStatusCode: error.status,
32
+ });
33
+ }
34
+ }
35
+ }
36
+ }
37
+ /**
38
+ * Obtain all of the related Tasks for a specific Forms App
39
+ *
40
+ * #### Example
41
+ *
42
+ * ```js
43
+ * const formsAppId = 1
44
+ * const date = '2023-12-01'
45
+ * const tasks = await getTasksForFormsApp({ formsAppId, date })
46
+ * ```
47
+ *
48
+ * @param formsAppId
49
+ * @param abortSignal
50
+ * @returns
51
+ */
52
+ export async function getTasksForFormsApp({ formsAppId, date, abortSignal, }) {
53
+ const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/scheduled-tasks?date=${date}`;
54
+ return await getTasks(url, abortSignal);
55
+ }
56
+ /**
57
+ * Obtain all of the tasks related to a Task Group Instances in a specific Forms
58
+ * App
59
+ *
60
+ * #### Example
61
+ *
62
+ * ```js
63
+ * const formsAppId = 1
64
+ * const taskGroupInstanceId = 'abc123'
65
+ * const date = '2023-12-01'
66
+ * const tasks = await getTaskGroupInstanceTasks({
67
+ * formsAppId,
68
+ * taskGroupInstanceId,
69
+ * date,
70
+ * })
71
+ * ```
72
+ *
73
+ * @param formsAppId
74
+ * @param taskGroupInstanceId
75
+ * @param abortSignal
76
+ * @returns
77
+ */
78
+ export async function getTaskGroupInstanceTasks({ taskGroupInstanceId, date, formsAppId, abortSignal, }) {
79
+ const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/scheduled-task-group-instances/${taskGroupInstanceId}?date=${date}`;
80
+ return await getTasks(url, abortSignal);
81
+ }
82
+ /**
83
+ * Obtain all of the Task Group instances for a specific Forms App
84
+ *
85
+ * #### Example
86
+ *
87
+ * ```js
88
+ * const formsAppId = 1
89
+ * const taskGroupInstances = await getTaskGroupInstances(formsAppId)
90
+ * ```
91
+ *
92
+ * @param formsAppId
93
+ * @param abortSignal
94
+ * @returns
95
+ */
96
+ export async function getTaskGroupInstances(formsAppId, abortSignal) {
97
+ const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/scheduled-task-group-instances`;
98
+ try {
99
+ return await getRequest(url, abortSignal);
100
+ }
101
+ catch (err) {
102
+ Sentry.captureException(err);
103
+ const error = err;
104
+ if (isOffline()) {
105
+ throw new OneBlinkAppsError('You are currently offline and do not have a local version of these scheduled task groups, please connect to the internet and try again', {
106
+ originalError: error,
107
+ isOffline: true,
108
+ });
109
+ }
110
+ switch (error.status) {
111
+ case 400:
112
+ case 404: {
113
+ throw new OneBlinkAppsError('We could not find the forms app you are looking for. Please contact support if the problem persists.', {
114
+ originalError: error,
115
+ title: 'Unknown Forms App',
116
+ httpStatusCode: error.status,
117
+ });
118
+ }
119
+ default: {
120
+ throw new OneBlinkAppsError('An unknown error has occurred. Please contact support if the problem persists.', {
121
+ originalError: error,
122
+ httpStatusCode: error.status,
123
+ });
124
+ }
125
+ }
126
+ }
127
+ }
128
+ /**
129
+ * Complete the related Task for a specific Forms App
130
+ *
131
+ * #### Example
132
+ *
133
+ * ```js
134
+ * const formsAppId = 1
135
+ * const taskId = 2
136
+ * const completedTask = await scheduledTasksService.completeTask({
137
+ * formsAppId,
138
+ * taskId,
139
+ * })
140
+ * ```
141
+ *
142
+ * @param options
143
+ * @returns
144
+ */
145
+ export async function completeTask({ formsAppId, taskId, taskActionId, taskGroupInstanceId, abortSignal, }) {
146
+ const url = `${tenants.current.apiOrigin}/completed-tasks`;
147
+ try {
148
+ return await postRequest(url, { formsAppId, taskId, taskActionId, taskGroupInstanceId }, abortSignal);
149
+ }
150
+ catch (err) {
151
+ Sentry.captureException(err);
152
+ const error = err;
153
+ if (isOffline()) {
154
+ throw new OneBlinkAppsError('You are currently offline, please connect to the internet and try again', {
155
+ originalError: error,
156
+ isOffline: true,
157
+ });
158
+ }
159
+ switch (error.status) {
160
+ case 403: {
161
+ throw new OneBlinkAppsError('You do not have access to complete this task. Please contact your administrator to gain the correct level of access.', {
162
+ originalError: error,
163
+ requiresAccessRequest: true,
164
+ httpStatusCode: error.status,
165
+ });
166
+ }
167
+ case 400:
168
+ case 404: {
169
+ throw new OneBlinkAppsError(error.message, {
170
+ title: 'Invalid Request',
171
+ httpStatusCode: error.status,
172
+ });
173
+ }
174
+ default: {
175
+ throw new OneBlinkAppsError('An unknown error has occurred. Please contact support if the problem persists.', {
176
+ originalError: error,
177
+ httpStatusCode: error.status,
178
+ });
179
+ }
180
+ }
181
+ }
182
+ }
183
+ /**
184
+ * Delete the completed task record related to a Task for a specific Forms App
185
+ *
186
+ * #### Example
187
+ *
188
+ * ```js
189
+ * const formsAppId = 1
190
+ * const taskId = 2
191
+ * const completedTask = await scheduledTasksService.completeTask({
192
+ * formsAppId,
193
+ * taskId,
194
+ * })
195
+ * await deleteCompletedTask(completedTask.id)
196
+ * ```
197
+ *
198
+ * @param id
199
+ * @param abortSignal
200
+ * @returns
201
+ */
202
+ export async function deleteCompletedTask(id, abortSignal) {
203
+ const url = `${tenants.current.apiOrigin}/completed-tasks/${id}`;
204
+ try {
205
+ await deleteRequest(url, abortSignal);
206
+ }
207
+ catch (err) {
208
+ Sentry.captureException(err);
209
+ const error = err;
210
+ if (isOffline()) {
211
+ throw new OneBlinkAppsError('You are currently offline, please connect to the internet and try again', {
212
+ originalError: error,
213
+ isOffline: true,
214
+ });
215
+ }
216
+ switch (error.status) {
217
+ case 403: {
218
+ throw new OneBlinkAppsError('You do not have access to delete completed tasks. Please contact your administrator to gain the correct level of access.', {
219
+ originalError: error,
220
+ requiresAccessRequest: true,
221
+ httpStatusCode: error.status,
222
+ });
223
+ }
224
+ case 400:
225
+ case 404: {
226
+ throw new OneBlinkAppsError(error.message, {
227
+ title: 'Invalid Request',
228
+ httpStatusCode: error.status,
229
+ });
230
+ }
231
+ default: {
232
+ throw new OneBlinkAppsError('An unknown error has occurred. Please contact support if the problem persists.', {
233
+ originalError: error,
234
+ httpStatusCode: error.status,
235
+ });
236
+ }
237
+ }
238
+ }
239
+ }
240
+ //# sourceMappingURL=scheduled-tasks-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled-tasks-service.js","sourceRoot":"","sources":["../../src/apps/scheduled-tasks-service.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,EAEL,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,iBAAiB,MAAM,qCAAqC,CAAA;AAYnE,KAAK,UAAU,QAAQ,CAIrB,GAAW,EAAE,WAAyB;IACtC,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CAAI,GAAG,EAAE,WAAW,CAAC,CAAA;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAE5B,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,kIAAkI,EAClI;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,sGAAsG,EACtG;oBACE,aAAa,EAAE,KAAK;oBACpB,KAAK,EAAE,mBAAmB;oBAC1B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EACxC,UAAU,EACV,IAAI,EACJ,WAAW,GAKZ;IAGC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,eAAe,UAAU,yBAAyB,IAAI,EAAE,CAAA;IAChG,OAAO,MAAM,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAC9C,mBAAmB,EACnB,IAAI,EACJ,UAAU,EACV,WAAW,GAMZ;IACC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,eAAe,UAAU,mCAAmC,mBAAmB,SAAS,IAAI,EAAE,CAAA;IACtI,OAAO,MAAM,QAAQ,CAIlB,GAAG,EAAE,WAAW,CAAC,CAAA;AACtB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAkB,EAClB,WAAyB;IAEzB,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,eAAe,UAAU,iCAAiC,CAAA;IAClG,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CAOpB,GAAG,EAAE,WAAW,CAAC,CAAA;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAE5B,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,wIAAwI,EACxI;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,sGAAsG,EACtG;oBACE,aAAa,EAAE,KAAK;oBACpB,KAAK,EAAE,mBAAmB;oBAC1B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,UAAU,EACV,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,WAAW,GAOZ;IACC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,kBAAkB,CAAA;IAC1D,IAAI,CAAC;QACH,OAAO,MAAM,WAAW,CACtB,GAAG,EACH,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,EACzD,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAE5B,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,yEAAyE,EACzE;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,sHAAsH,EACtH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAU,EACV,WAAyB;IAEzB,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,oBAAoB,EAAE,EAAE,CAAA;IAChE,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAE5B,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,yEAAyE,EACzE;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,0HAA0H,EAC1H;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { ScheduledTasksTypes } from '@oneblink/types'\nimport tenants from './tenants'\nimport Sentry from './Sentry'\nimport {\n HTTPError,\n deleteRequest,\n getRequest,\n postRequest,\n} from './services/fetch'\nimport { isOffline } from './offline-service'\nimport OneBlinkAppsError from './services/errors/oneBlinkAppsError'\n\nexport interface TaskAvailability {\n task: ScheduledTasksTypes.Task\n completedTask?: ScheduledTasksTypes.CompletedTask\n daysAvailable: number\n}\n\nexport interface TaskResponse extends TaskAvailability {\n actions: ScheduledTasksTypes.TaskAction[]\n}\n\nasync function getTasks<\n T extends {\n taskResponses: TaskResponse[]\n },\n>(url: string, abortSignal?: AbortSignal) {\n try {\n return await getRequest<T>(url, abortSignal)\n } catch (err) {\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local version of these scheduled tasks, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 400:\n case 404: {\n throw new OneBlinkAppsError(\n 'We could not find the forms app you are looking for. Please contact support if the problem persists.',\n {\n originalError: error,\n title: 'Unknown Forms App',\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 * Obtain all of the related Tasks for a specific Forms App\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const date = '2023-12-01'\n * const tasks = await getTasksForFormsApp({ formsAppId, date })\n * ```\n *\n * @param formsAppId\n * @param abortSignal\n * @returns\n */\nexport async function getTasksForFormsApp({\n formsAppId,\n date,\n abortSignal,\n}: {\n formsAppId: number\n date: string\n abortSignal?: AbortSignal\n}): Promise<{\n taskResponses: TaskResponse[]\n}> {\n const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/scheduled-tasks?date=${date}`\n return await getTasks(url, abortSignal)\n}\n\n/**\n * Obtain all of the tasks related to a Task Group Instances in a specific Forms\n * App\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const taskGroupInstanceId = 'abc123'\n * const date = '2023-12-01'\n * const tasks = await getTaskGroupInstanceTasks({\n * formsAppId,\n * taskGroupInstanceId,\n * date,\n * })\n * ```\n *\n * @param formsAppId\n * @param taskGroupInstanceId\n * @param abortSignal\n * @returns\n */\nexport async function getTaskGroupInstanceTasks({\n taskGroupInstanceId,\n date,\n formsAppId,\n abortSignal,\n}: {\n taskGroupInstanceId: string\n date: string\n formsAppId: number\n abortSignal?: AbortSignal\n}) {\n const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/scheduled-task-group-instances/${taskGroupInstanceId}?date=${date}`\n return await getTasks<{\n taskResponses: TaskResponse[]\n taskGroup: ScheduledTasksTypes.TaskGroup\n taskGroupInstance: ScheduledTasksTypes.TaskGroupInstance\n }>(url, abortSignal)\n}\n\n/**\n * Obtain all of the Task Group instances for a specific Forms App\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const taskGroupInstances = await getTaskGroupInstances(formsAppId)\n * ```\n *\n * @param formsAppId\n * @param abortSignal\n * @returns\n */\nexport async function getTaskGroupInstances(\n formsAppId: number,\n abortSignal?: AbortSignal,\n) {\n const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/scheduled-task-group-instances`\n try {\n return await getRequest<{\n taskGroupInstances: Array<\n ScheduledTasksTypes.TaskGroupInstance & {\n taskAvailabilities: TaskAvailability[]\n taskGroup: ScheduledTasksTypes.TaskGroup\n }\n >\n }>(url, abortSignal)\n } catch (err) {\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local version of these scheduled task groups, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 400:\n case 404: {\n throw new OneBlinkAppsError(\n 'We could not find the forms app you are looking for. Please contact support if the problem persists.',\n {\n originalError: error,\n title: 'Unknown Forms App',\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 * Complete the related Task for a specific Forms App\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const taskId = 2\n * const completedTask = await scheduledTasksService.completeTask({\n * formsAppId,\n * taskId,\n * })\n * ```\n *\n * @param options\n * @returns\n */\n\nexport async function completeTask({\n formsAppId,\n taskId,\n taskActionId,\n taskGroupInstanceId,\n abortSignal,\n}: {\n formsAppId: number\n taskId: string\n taskActionId: string\n taskGroupInstanceId: string | undefined\n abortSignal?: AbortSignal\n}): Promise<ScheduledTasksTypes.CompletedTask> {\n const url = `${tenants.current.apiOrigin}/completed-tasks`\n try {\n return await postRequest<ScheduledTasksTypes.CompletedTask>(\n url,\n { formsAppId, taskId, taskActionId, taskGroupInstanceId },\n abortSignal,\n )\n } catch (err) {\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 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to complete this task. 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(error.message, {\n title: 'Invalid Request',\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 the completed task record related to a Task for a specific Forms App\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const taskId = 2\n * const completedTask = await scheduledTasksService.completeTask({\n * formsAppId,\n * taskId,\n * })\n * await deleteCompletedTask(completedTask.id)\n * ```\n *\n * @param id\n * @param abortSignal\n * @returns\n */\n\nexport async function deleteCompletedTask(\n id: string,\n abortSignal?: AbortSignal,\n): Promise<void> {\n const url = `${tenants.current.apiOrigin}/completed-tasks/${id}`\n try {\n await deleteRequest(url, abortSignal)\n } catch (err) {\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 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to delete completed tasks. 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(error.message, {\n title: 'Invalid Request',\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"]}