@oneblink/apps-react 9.0.0-beta.2 → 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 +42 -34
@@ -0,0 +1,101 @@
1
+ import { createNylasExistingBookingSession } from './services/api/scheduling';
2
+ import { FormSubmissionResult } from './types/submissions';
3
+ import { SchedulingBooking } from './services/schedulingHandlers';
4
+ declare function getSchedulingFormSubmissionResult(submissionId: string, schedulingBooking: SchedulingBooking): Promise<FormSubmissionResult>;
5
+ /**
6
+ * Pass in query string parameters after a redirect back to your app after a
7
+ * booking is processed. Will return a SchedulingBooking and the submission
8
+ * result from the original submission before redirecting to
9
+ * `scheduling.bookingUrl`. If the booking has been rescheduled, the submission
10
+ * result will not be returned.
11
+ *
12
+ * #### Example
13
+ *
14
+ * ```js
15
+ * import queryString from 'query-string'
16
+ *
17
+ * const query = queryString.parse(window.location.search)
18
+ *
19
+ * const { booking, formSubmissionResult } =
20
+ * await schedulingService.handleSchedulingQuerystring(query)
21
+ * ```
22
+ *
23
+ * @param options
24
+ * @returns
25
+ */
26
+ declare function handleSchedulingQuerystring({ start_time, end_time, location, submissionId, isReschedule, }: Record<string, unknown>): Promise<{
27
+ booking: SchedulingBooking;
28
+ formSubmissionResult?: FormSubmissionResult;
29
+ }>;
30
+ /**
31
+ * Pass in query string parameters after navigation to your app via a valid
32
+ * cancellation link.
33
+ *
34
+ * #### Example
35
+ *
36
+ * ```js
37
+ * import queryString from 'query-string'
38
+ *
39
+ * const query = queryString.parse(window.location.search)
40
+ *
41
+ * const bookingToCancel =
42
+ * await schedulingService.handleCancelSchedulingBookingQuerystring(query)
43
+ * ```
44
+ *
45
+ * @param options
46
+ * @returns
47
+ */
48
+ declare function handleCancelSchedulingBookingQuerystring({ nylasEditHash, submissionId, startTime, endTime, eventName, location, timezone, cancellationPolicy, }: Record<string, unknown>): {
49
+ /** The nylas edit hash associated with the booking */
50
+ nylasEditHash: string;
51
+ /** The unique identifier for the submission associated with the booking */
52
+ submissionId: string;
53
+ /** The start time of the booking */
54
+ startTime: Date;
55
+ /** The end time of the booking */
56
+ endTime: Date;
57
+ /** The event name */
58
+ eventName: string;
59
+ /** The location of the event */
60
+ location: string;
61
+ /** The timezone the booking was booked in */
62
+ timezone: string;
63
+ /**
64
+ * The policy to display to users when asked why they are cancelling the
65
+ * booking
66
+ */
67
+ cancellationPolicy?: string;
68
+ };
69
+ /**
70
+ * Create a Nylas Session
71
+ *
72
+ * #### Example
73
+ *
74
+ * ```js
75
+ * const {
76
+ * sessionId,
77
+ * configurationId,
78
+ * bookingRef,
79
+ * name,
80
+ * email,
81
+ * formSubmissionResult,
82
+ * } = await schedulingService.createNylasNewBookingSession(
83
+ * '89c6e98e-f56f-45fc-84fe-c4fc62331d34',
84
+ * )
85
+ * // use sessionId and configurationId/bookingRef to create or modify nylas bookings
86
+ * // use formSubmissionResult to execute post submission action for form
87
+ * ```
88
+ *
89
+ * @param submissionId
90
+ * @param abortSignal
91
+ * @returns
92
+ */
93
+ declare function createNylasNewBookingSession(submissionId: string, abortSignal: AbortSignal): Promise<Awaited<ReturnType<typeof createNylasExistingBookingSession>> & {
94
+ /**
95
+ * A callback function run after the booking has been confirmed to prevent
96
+ * the user from making another booking against this form submission and
97
+ * execute post submission action.
98
+ */
99
+ onBookingConfirmed: (schedulingBooking: SchedulingBooking) => Promise<FormSubmissionResult>;
100
+ }>;
101
+ export { SchedulingBooking, handleSchedulingQuerystring, handleCancelSchedulingBookingQuerystring, createNylasExistingBookingSession, createNylasNewBookingSession, getSchedulingFormSubmissionResult, };
@@ -0,0 +1,171 @@
1
+ import OneBlinkAppsError from './services/errors/oneBlinkAppsError';
2
+ import { createNylasExistingBookingSession } from './services/api/scheduling';
3
+ import { checkForPaymentSubmissionEvent, handlePaymentSubmissionEvent, } from './payment-service';
4
+ import { getSchedulingSubmissionResult, removeSchedulingSubmissionResult, setSchedulingBooking, } from './services/schedulingHandlers';
5
+ async function getPaymentConfiguration({ paymentReceiptUrl, paymentFormUrl, preventPayment, formSubmissionResult, schedulingBooking, }) {
6
+ if (preventPayment || !paymentReceiptUrl) {
7
+ return null;
8
+ }
9
+ await setSchedulingBooking(schedulingBooking);
10
+ const paymentSubmissionEventConfiguration = checkForPaymentSubmissionEvent(formSubmissionResult);
11
+ if (paymentSubmissionEventConfiguration) {
12
+ return await handlePaymentSubmissionEvent({
13
+ ...paymentSubmissionEventConfiguration,
14
+ formSubmissionResult,
15
+ paymentReceiptUrl,
16
+ paymentFormUrl,
17
+ });
18
+ }
19
+ return null;
20
+ }
21
+ async function getSchedulingFormSubmissionResult(submissionId, schedulingBooking) {
22
+ const schedulingSubmissionResultConfiguration = await getSchedulingSubmissionResult();
23
+ // If the current transaction does not match the submission
24
+ // we will display message to user indicating
25
+ // they are looking for the wrong transaction receipt.
26
+ if (!schedulingSubmissionResultConfiguration) {
27
+ throw new OneBlinkAppsError('It looks like you are attempting to view a scheduling receipt for an unknown booking.');
28
+ }
29
+ const { formSubmissionResult, paymentReceiptUrl, paymentFormUrl, preventPayment, } = schedulingSubmissionResultConfiguration;
30
+ if (!formSubmissionResult ||
31
+ !formSubmissionResult.scheduling ||
32
+ !formSubmissionResult.scheduling.submissionEvent) {
33
+ throw new OneBlinkAppsError('It looks like you are attempting to view a scheduling receipt for a misconfigured booking.');
34
+ }
35
+ if (formSubmissionResult.submissionId !== submissionId) {
36
+ throw new OneBlinkAppsError('It looks like you are attempting to view a scheduling receipt for the incorrect booking.');
37
+ }
38
+ formSubmissionResult.payment = await getPaymentConfiguration({
39
+ paymentFormUrl,
40
+ paymentReceiptUrl,
41
+ preventPayment,
42
+ formSubmissionResult,
43
+ schedulingBooking,
44
+ });
45
+ await removeSchedulingSubmissionResult();
46
+ return formSubmissionResult;
47
+ }
48
+ /**
49
+ * Pass in query string parameters after a redirect back to your app after a
50
+ * booking is processed. Will return a SchedulingBooking and the submission
51
+ * result from the original submission before redirecting to
52
+ * `scheduling.bookingUrl`. If the booking has been rescheduled, the submission
53
+ * result will not be returned.
54
+ *
55
+ * #### Example
56
+ *
57
+ * ```js
58
+ * import queryString from 'query-string'
59
+ *
60
+ * const query = queryString.parse(window.location.search)
61
+ *
62
+ * const { booking, formSubmissionResult } =
63
+ * await schedulingService.handleSchedulingQuerystring(query)
64
+ * ```
65
+ *
66
+ * @param options
67
+ * @returns
68
+ */
69
+ async function handleSchedulingQuerystring({ start_time, end_time, location, submissionId, isReschedule, }) {
70
+ if (typeof submissionId !== 'string' ||
71
+ typeof start_time !== 'string' ||
72
+ typeof end_time !== 'string' ||
73
+ typeof location !== 'string') {
74
+ throw new OneBlinkAppsError('Scheduling receipts cannot be displayed unless navigating here directly after a booking.');
75
+ }
76
+ const booking = {
77
+ submissionId,
78
+ startTime: new Date(parseInt(start_time) * 1000),
79
+ endTime: new Date(parseInt(end_time) * 1000),
80
+ location,
81
+ isReschedule: isReschedule === 'true',
82
+ };
83
+ console.log('Parsed booking result', booking);
84
+ if (isReschedule) {
85
+ return {
86
+ booking,
87
+ };
88
+ }
89
+ const formSubmissionResult = await getSchedulingFormSubmissionResult(submissionId, booking);
90
+ return {
91
+ formSubmissionResult,
92
+ booking,
93
+ };
94
+ }
95
+ /**
96
+ * Pass in query string parameters after navigation to your app via a valid
97
+ * cancellation link.
98
+ *
99
+ * #### Example
100
+ *
101
+ * ```js
102
+ * import queryString from 'query-string'
103
+ *
104
+ * const query = queryString.parse(window.location.search)
105
+ *
106
+ * const bookingToCancel =
107
+ * await schedulingService.handleCancelSchedulingBookingQuerystring(query)
108
+ * ```
109
+ *
110
+ * @param options
111
+ * @returns
112
+ */
113
+ function handleCancelSchedulingBookingQuerystring({ nylasEditHash, submissionId, startTime, endTime, eventName, location, timezone, cancellationPolicy, }) {
114
+ if (typeof submissionId !== 'string' ||
115
+ typeof nylasEditHash !== 'string' ||
116
+ typeof startTime !== 'string' ||
117
+ typeof endTime !== 'string' ||
118
+ typeof eventName !== 'string' ||
119
+ typeof location !== 'string' ||
120
+ typeof timezone !== 'string' ||
121
+ (typeof cancellationPolicy !== 'string' && cancellationPolicy !== undefined)) {
122
+ throw new OneBlinkAppsError('Scheduling bookings cannot be cancelled unless navigating here from the correct link.');
123
+ }
124
+ const booking = {
125
+ nylasEditHash,
126
+ submissionId,
127
+ startTime: new Date(parseInt(startTime) * 1000),
128
+ endTime: new Date(parseInt(endTime) * 1000),
129
+ eventName,
130
+ location,
131
+ timezone,
132
+ cancellationPolicy,
133
+ };
134
+ console.log('Parsed scheduling booking cancel data', booking);
135
+ return booking;
136
+ }
137
+ /**
138
+ * Create a Nylas Session
139
+ *
140
+ * #### Example
141
+ *
142
+ * ```js
143
+ * const {
144
+ * sessionId,
145
+ * configurationId,
146
+ * bookingRef,
147
+ * name,
148
+ * email,
149
+ * formSubmissionResult,
150
+ * } = await schedulingService.createNylasNewBookingSession(
151
+ * '89c6e98e-f56f-45fc-84fe-c4fc62331d34',
152
+ * )
153
+ * // use sessionId and configurationId/bookingRef to create or modify nylas bookings
154
+ * // use formSubmissionResult to execute post submission action for form
155
+ * ```
156
+ *
157
+ * @param submissionId
158
+ * @param abortSignal
159
+ * @returns
160
+ */
161
+ async function createNylasNewBookingSession(submissionId, abortSignal) {
162
+ const session = await createNylasExistingBookingSession(submissionId, abortSignal);
163
+ return {
164
+ ...session,
165
+ async onBookingConfirmed(schedulingBooking) {
166
+ return await getSchedulingFormSubmissionResult(submissionId, schedulingBooking);
167
+ },
168
+ };
169
+ }
170
+ export { handleSchedulingQuerystring, handleCancelSchedulingBookingQuerystring, createNylasExistingBookingSession, createNylasNewBookingSession, getSchedulingFormSubmissionResult, };
171
+ //# sourceMappingURL=scheduling-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling-service.js","sourceRoot":"","sources":["../../src/apps/scheduling-service.ts"],"names":[],"mappings":"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","sourcesContent":["import OneBlinkAppsError from './services/errors/oneBlinkAppsError'\nimport { createNylasExistingBookingSession } from './services/api/scheduling'\nimport {\n checkForPaymentSubmissionEvent,\n handlePaymentSubmissionEvent,\n} from './payment-service'\nimport { FormSubmissionResult } from './types/submissions'\nimport {\n SchedulingBooking,\n getSchedulingSubmissionResult,\n removeSchedulingSubmissionResult,\n setSchedulingBooking,\n} from './services/schedulingHandlers'\n\nasync function getPaymentConfiguration({\n paymentReceiptUrl,\n paymentFormUrl,\n preventPayment,\n formSubmissionResult,\n schedulingBooking,\n}: {\n paymentReceiptUrl: string | undefined\n paymentFormUrl: string | undefined\n preventPayment: boolean\n formSubmissionResult: FormSubmissionResult\n schedulingBooking: SchedulingBooking\n}) {\n if (preventPayment || !paymentReceiptUrl) {\n return null\n }\n\n await setSchedulingBooking(schedulingBooking)\n const paymentSubmissionEventConfiguration =\n checkForPaymentSubmissionEvent(formSubmissionResult)\n if (paymentSubmissionEventConfiguration) {\n return await handlePaymentSubmissionEvent({\n ...paymentSubmissionEventConfiguration,\n formSubmissionResult,\n paymentReceiptUrl,\n paymentFormUrl,\n })\n }\n\n return null\n}\n\nasync function getSchedulingFormSubmissionResult(\n submissionId: string,\n schedulingBooking: SchedulingBooking,\n) {\n const schedulingSubmissionResultConfiguration =\n await getSchedulingSubmissionResult()\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 (!schedulingSubmissionResultConfiguration) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to view a scheduling receipt for an unknown booking.',\n )\n }\n\n const {\n formSubmissionResult,\n paymentReceiptUrl,\n paymentFormUrl,\n preventPayment,\n } = schedulingSubmissionResultConfiguration\n if (\n !formSubmissionResult ||\n !formSubmissionResult.scheduling ||\n !formSubmissionResult.scheduling.submissionEvent\n ) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to view a scheduling receipt for a misconfigured booking.',\n )\n }\n\n if (formSubmissionResult.submissionId !== submissionId) {\n throw new OneBlinkAppsError(\n 'It looks like you are attempting to view a scheduling receipt for the incorrect booking.',\n )\n }\n\n formSubmissionResult.payment = await getPaymentConfiguration({\n paymentFormUrl,\n paymentReceiptUrl,\n preventPayment,\n formSubmissionResult,\n schedulingBooking,\n })\n\n await removeSchedulingSubmissionResult()\n\n return formSubmissionResult\n}\n\n/**\n * Pass in query string parameters after a redirect back to your app after a\n * booking is processed. Will return a SchedulingBooking and the submission\n * result from the original submission before redirecting to\n * `scheduling.bookingUrl`. If the booking has been rescheduled, the submission\n * result will not be returned.\n *\n * #### Example\n *\n * ```js\n * import queryString from 'query-string'\n *\n * const query = queryString.parse(window.location.search)\n *\n * const { booking, formSubmissionResult } =\n * await schedulingService.handleSchedulingQuerystring(query)\n * ```\n *\n * @param options\n * @returns\n */\nasync function handleSchedulingQuerystring({\n start_time,\n end_time,\n location,\n submissionId,\n isReschedule,\n}: Record<string, unknown>): Promise<{\n booking: SchedulingBooking\n formSubmissionResult?: FormSubmissionResult\n}> {\n if (\n typeof submissionId !== 'string' ||\n typeof start_time !== 'string' ||\n typeof end_time !== 'string' ||\n typeof location !== 'string'\n ) {\n throw new OneBlinkAppsError(\n 'Scheduling receipts cannot be displayed unless navigating here directly after a booking.',\n )\n }\n const booking: SchedulingBooking = {\n submissionId,\n startTime: new Date(parseInt(start_time) * 1000),\n endTime: new Date(parseInt(end_time) * 1000),\n location,\n isReschedule: isReschedule === 'true',\n }\n console.log('Parsed booking result', booking)\n\n if (isReschedule) {\n return {\n booking,\n }\n }\n\n const formSubmissionResult = await getSchedulingFormSubmissionResult(\n submissionId,\n booking,\n )\n\n return {\n formSubmissionResult,\n booking,\n }\n}\n\n/**\n * Pass in query string parameters after navigation to your app via a valid\n * cancellation link.\n *\n * #### Example\n *\n * ```js\n * import queryString from 'query-string'\n *\n * const query = queryString.parse(window.location.search)\n *\n * const bookingToCancel =\n * await schedulingService.handleCancelSchedulingBookingQuerystring(query)\n * ```\n *\n * @param options\n * @returns\n */\nfunction handleCancelSchedulingBookingQuerystring({\n nylasEditHash,\n submissionId,\n startTime,\n endTime,\n eventName,\n location,\n timezone,\n cancellationPolicy,\n}: Record<string, unknown>): {\n /** The nylas edit hash associated with the booking */\n nylasEditHash: string\n /** The unique identifier for the submission associated with the booking */\n submissionId: string\n /** The start time of the booking */\n startTime: Date\n /** The end time of the booking */\n endTime: Date\n /** The event name */\n eventName: string\n /** The location of the event */\n location: string\n /** The timezone the booking was booked in */\n timezone: string\n /**\n * The policy to display to users when asked why they are cancelling the\n * booking\n */\n cancellationPolicy?: string\n} {\n if (\n typeof submissionId !== 'string' ||\n typeof nylasEditHash !== 'string' ||\n typeof startTime !== 'string' ||\n typeof endTime !== 'string' ||\n typeof eventName !== 'string' ||\n typeof location !== 'string' ||\n typeof timezone !== 'string' ||\n (typeof cancellationPolicy !== 'string' && cancellationPolicy !== undefined)\n ) {\n throw new OneBlinkAppsError(\n 'Scheduling bookings cannot be cancelled unless navigating here from the correct link.',\n )\n }\n\n const booking = {\n nylasEditHash,\n submissionId,\n startTime: new Date(parseInt(startTime) * 1000),\n endTime: new Date(parseInt(endTime) * 1000),\n eventName,\n location,\n timezone,\n cancellationPolicy,\n }\n console.log('Parsed scheduling booking cancel data', booking)\n\n return booking\n}\n\n/**\n * Create a Nylas Session\n *\n * #### Example\n *\n * ```js\n * const {\n * sessionId,\n * configurationId,\n * bookingRef,\n * name,\n * email,\n * formSubmissionResult,\n * } = await schedulingService.createNylasNewBookingSession(\n * '89c6e98e-f56f-45fc-84fe-c4fc62331d34',\n * )\n * // use sessionId and configurationId/bookingRef to create or modify nylas bookings\n * // use formSubmissionResult to execute post submission action for form\n * ```\n *\n * @param submissionId\n * @param abortSignal\n * @returns\n */\nasync function createNylasNewBookingSession(\n submissionId: string,\n abortSignal: AbortSignal,\n): Promise<\n Awaited<ReturnType<typeof createNylasExistingBookingSession>> & {\n /**\n * A callback function run after the booking has been confirmed to prevent\n * the user from making another booking against this form submission and\n * execute post submission action.\n */\n onBookingConfirmed: (\n schedulingBooking: SchedulingBooking,\n ) => Promise<FormSubmissionResult>\n }\n> {\n const session = await createNylasExistingBookingSession(\n submissionId,\n abortSignal,\n )\n\n return {\n ...session,\n async onBookingConfirmed(schedulingBooking: SchedulingBooking) {\n return await getSchedulingFormSubmissionResult(\n submissionId,\n schedulingBooking,\n )\n },\n }\n}\n\nexport {\n SchedulingBooking,\n handleSchedulingQuerystring,\n handleCancelSchedulingBookingQuerystring,\n createNylasExistingBookingSession,\n createNylasNewBookingSession,\n getSchedulingFormSubmissionResult,\n}\n"]}
@@ -0,0 +1,55 @@
1
+ import { AuthenticationResultType, CognitoIdentityProviderClient, InitiateAuthResponse } from '@aws-sdk/client-cognito-identity-provider';
2
+ export type LoginAttemptResponse = {
3
+ resetPasswordCallback?: (newPassword: string) => Promise<LoginAttemptResponse>;
4
+ mfaCodeCallback?: (code: string) => Promise<LoginAttemptResponse>;
5
+ };
6
+ export default class AWSCognitoClient {
7
+ clientId: string;
8
+ cognitoIdentityProviderClient: CognitoIdentityProviderClient;
9
+ loginDomain: string | void;
10
+ redirectUri: string | void;
11
+ logoutUri: string | void;
12
+ listeners: Array<() => unknown>;
13
+ constructor({ clientId, region, loginDomain, redirectUri, logoutUri, }: {
14
+ clientId: string;
15
+ region: string;
16
+ redirectUri?: string;
17
+ logoutUri?: string;
18
+ loginDomain?: string;
19
+ });
20
+ get EXPIRES_AT(): string;
21
+ get ACCESS_TOKEN(): string;
22
+ get ID_TOKEN(): string;
23
+ get REFRESH_TOKEN(): string;
24
+ get STATE(): string;
25
+ get PKCE_CODE_VERIFIER(): string;
26
+ _executeListeners(): void;
27
+ _storeAuthenticationResult(authenticationResult: AuthenticationResultType): void;
28
+ _removeAuthenticationResult(): void;
29
+ _getAccessToken(): string | undefined;
30
+ _getIdToken(): string | undefined;
31
+ _getRefreshToken(): string | undefined;
32
+ _isSessionValid(): boolean;
33
+ _refreshSession(): Promise<void>;
34
+ registerListener(listener: () => unknown): () => void;
35
+ responseToAuthChallenge(username: string, initiateAuthResponse: InitiateAuthResponse): Promise<LoginAttemptResponse>;
36
+ loginUsernamePassword(username: string, password: string): Promise<LoginAttemptResponse>;
37
+ loginHostedUI(identityProviderName?: string): Promise<void>;
38
+ handleAuthentication(): Promise<void>;
39
+ changePassword(existingPassword: string, newPassword: string): Promise<void>;
40
+ confirmForgotPassword({ username, code, password, }: {
41
+ username: string;
42
+ code: string;
43
+ password: string;
44
+ }): Promise<void>;
45
+ logoutHostedUI(): void;
46
+ logout(): Promise<void>;
47
+ getIdToken(): Promise<string | undefined>;
48
+ getAccessToken(): Promise<string | undefined>;
49
+ checkIsMfaEnabled(): Promise<boolean>;
50
+ disableMfa(): Promise<void>;
51
+ setupMfa(): Promise<{
52
+ secretCode: string | undefined;
53
+ mfaCodeCallback: (code: string) => Promise<void>;
54
+ } | undefined>;
55
+ }