@aglyn/plugins-commerce 1.0.0-beta.278 → 1.0.0-beta.283

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 (212) hide show
  1. package/package.json +17 -14
  2. package/src/lib/components/commerce-console-page.js +33 -1
  3. package/src/lib/components/commerce-console-page.js.map +1 -1
  4. package/src/lib/components/console/payments-settings-card.component.js +1 -1
  5. package/src/lib/components/console/payments-settings-card.component.js.map +1 -1
  6. package/src/lib/components/console/pos/pos-hardware-api.d.ts +122 -0
  7. package/src/lib/components/console/pos/pos-hardware-api.js +90 -0
  8. package/src/lib/components/console/pos/pos-hardware-api.js.map +1 -0
  9. package/src/lib/components/console/pos/pos-reader-splash-api.d.ts +58 -0
  10. package/src/lib/components/console/pos/pos-reader-splash-api.js +101 -0
  11. package/src/lib/components/console/pos/pos-reader-splash-api.js.map +1 -0
  12. package/src/lib/components/console/pos-devices-card.component.js +5 -0
  13. package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
  14. package/src/lib/components/console/pos-hardware-card.component.d.ts +26 -0
  15. package/src/lib/components/console/pos-hardware-card.component.js +456 -0
  16. package/src/lib/components/console/pos-hardware-card.component.js.map +1 -0
  17. package/src/lib/components/console/pos-hardware-orders-staff-page.component.d.ts +14 -0
  18. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js +519 -0
  19. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js.map +1 -0
  20. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.d.ts +27 -0
  21. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js +444 -0
  22. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js.map +1 -0
  23. package/src/lib/components/console/pos-ops/pos-check-in-zone.component.d.ts +9 -0
  24. package/src/lib/components/console/pos-ops/pos-check-in-zone.component.js +37 -0
  25. package/src/lib/components/console/pos-ops/pos-check-in-zone.component.js.map +1 -0
  26. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.d.ts +24 -0
  27. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js +346 -0
  28. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js.map +1 -0
  29. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.d.ts +5 -1
  30. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js +83 -4
  31. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js.map +1 -1
  32. package/src/lib/components/console/pos-ops/pos-day-totals-card.component.d.ts +35 -0
  33. package/src/lib/components/console/pos-ops/pos-day-totals-card.component.js +546 -0
  34. package/src/lib/components/console/pos-ops/pos-day-totals-card.component.js.map +1 -0
  35. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +2 -1
  36. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +20 -1
  37. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -1
  38. package/src/lib/components/console/pos-ops/pos-ops-api.d.ts +1 -1
  39. package/src/lib/components/console/pos-ops/pos-ops-api.js.map +1 -1
  40. package/src/lib/components/console/pos-page.component.js +6 -3
  41. package/src/lib/components/console/pos-page.component.js.map +1 -1
  42. package/src/lib/components/console/pos-reader-splash-setting.component.d.ts +22 -0
  43. package/src/lib/components/console/pos-reader-splash-setting.component.js +275 -0
  44. package/src/lib/components/console/pos-reader-splash-setting.component.js.map +1 -0
  45. package/src/lib/components/console/pos-reader-splash-staff-page.component.d.ts +14 -0
  46. package/src/lib/components/console/pos-reader-splash-staff-page.component.js +301 -0
  47. package/src/lib/components/console/pos-reader-splash-staff-page.component.js.map +1 -0
  48. package/src/lib/components/console/pos-zones.d.ts +37 -3
  49. package/src/lib/components/console/pos-zones.js +11 -1
  50. package/src/lib/components/console/pos-zones.js.map +1 -1
  51. package/src/lib/components/console/product-check-in-fields.component.d.ts +20 -0
  52. package/src/lib/components/console/product-check-in-fields.component.js +172 -0
  53. package/src/lib/components/console/product-check-in-fields.component.js.map +1 -0
  54. package/src/lib/components/console/product-editor-dialog.component.js +48 -9
  55. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  56. package/src/lib/components/console/product-register-fields.component.d.ts +12 -0
  57. package/src/lib/components/console/product-register-fields.component.js +39 -1
  58. package/src/lib/components/console/product-register-fields.component.js.map +1 -1
  59. package/src/lib/components/console/products-hub-card.component.js +21 -6
  60. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  61. package/src/lib/components/console/reservations-card.component.js +239 -70
  62. package/src/lib/components/console/reservations-card.component.js.map +1 -1
  63. package/src/lib/components/reservation-widget.js +16 -0
  64. package/src/lib/components/reservation-widget.js.map +1 -1
  65. package/src/lib/constants/operator-alerts.d.ts +6 -0
  66. package/src/lib/constants/operator-alerts.js +20 -1
  67. package/src/lib/constants/operator-alerts.js.map +1 -1
  68. package/src/lib/declarations.console-server.js +7 -0
  69. package/src/lib/declarations.console-server.js.map +1 -1
  70. package/src/lib/declarations.d.ts +26 -0
  71. package/src/lib/declarations.js +34 -0
  72. package/src/lib/declarations.js.map +1 -0
  73. package/src/lib/model/commerce-check-in-product.d.ts +37 -0
  74. package/src/lib/model/commerce-check-in-product.js +49 -0
  75. package/src/lib/model/commerce-check-in-product.js.map +1 -0
  76. package/src/lib/model/commerce-check-in.d.ts +187 -0
  77. package/src/lib/model/commerce-check-in.js +468 -0
  78. package/src/lib/model/commerce-check-in.js.map +1 -0
  79. package/src/lib/model/commerce-pos-day-report.d.ts +209 -0
  80. package/src/lib/model/commerce-pos-day-report.js +572 -0
  81. package/src/lib/model/commerce-pos-day-report.js.map +1 -0
  82. package/src/lib/model/commerce-pos-offline.d.ts +65 -3
  83. package/src/lib/model/commerce-pos-offline.js +104 -7
  84. package/src/lib/model/commerce-pos-offline.js.map +1 -1
  85. package/src/lib/model/commerce-pos-ops.d.ts +3 -0
  86. package/src/lib/model/commerce-pos-ops.js +1 -0
  87. package/src/lib/model/commerce-pos-ops.js.map +1 -1
  88. package/src/lib/model/commerce-pos.d.ts +43 -3
  89. package/src/lib/model/commerce-pos.js +73 -5
  90. package/src/lib/model/commerce-pos.js.map +1 -1
  91. package/src/lib/model/commerce-reservations.d.ts +73 -7
  92. package/src/lib/model/commerce-reservations.js +90 -10
  93. package/src/lib/model/commerce-reservations.js.map +1 -1
  94. package/src/lib/model/commerce.d.ts +40 -0
  95. package/src/lib/model/commerce.js +22 -4
  96. package/src/lib/model/commerce.js.map +1 -1
  97. package/src/lib/model/index.d.ts +1 -0
  98. package/src/lib/model/index.js +1 -0
  99. package/src/lib/model/index.js.map +1 -1
  100. package/src/lib/model/plugin-permissions.d.ts +1 -1
  101. package/src/lib/model/plugin-permissions.js +2 -1
  102. package/src/lib/model/plugin-permissions.js.map +1 -1
  103. package/src/lib/model/pos-hardware.d.ts +288 -0
  104. package/src/lib/model/pos-hardware.js +499 -0
  105. package/src/lib/model/pos-hardware.js.map +1 -0
  106. package/src/lib/model/pos-offline-card-limits.d.ts +20 -0
  107. package/src/lib/model/pos-offline-card-limits.js +28 -0
  108. package/src/lib/model/pos-offline-card-limits.js.map +1 -0
  109. package/src/lib/model/pos-reader-splash.d.ts +114 -0
  110. package/src/lib/model/pos-reader-splash.js +141 -0
  111. package/src/lib/model/pos-reader-splash.js.map +1 -0
  112. package/src/lib/model/product-write.d.ts +6 -0
  113. package/src/lib/plugin-config.d.ts +10 -0
  114. package/src/lib/plugin-config.js +40 -0
  115. package/src/lib/plugin-config.js.map +1 -1
  116. package/src/lib/plugin.js +28 -0
  117. package/src/lib/plugin.js.map +1 -1
  118. package/src/lib/server/cart-checkout.js +3 -1
  119. package/src/lib/server/cart-checkout.js.map +1 -1
  120. package/src/lib/server/cart.js +12 -1
  121. package/src/lib/server/cart.js.map +1 -1
  122. package/src/lib/server/catalog.js +49 -12
  123. package/src/lib/server/catalog.js.map +1 -1
  124. package/src/lib/server/checkout-extras.js +1 -1
  125. package/src/lib/server/checkout-extras.js.map +1 -1
  126. package/src/lib/server/checkout.js +7 -0
  127. package/src/lib/server/checkout.js.map +1 -1
  128. package/src/lib/server/person-eraser.d.ts +8 -1
  129. package/src/lib/server/person-eraser.js +23 -1
  130. package/src/lib/server/person-eraser.js.map +1 -1
  131. package/src/lib/server/pos-check-in.d.ts +49 -0
  132. package/src/lib/server/pos-check-in.js +652 -0
  133. package/src/lib/server/pos-check-in.js.map +1 -0
  134. package/src/lib/server/pos-day-report.d.ts +46 -0
  135. package/src/lib/server/pos-day-report.js +299 -0
  136. package/src/lib/server/pos-day-report.js.map +1 -0
  137. package/src/lib/server/pos-hardware-admin.d.ts +50 -0
  138. package/src/lib/server/pos-hardware-admin.js +366 -0
  139. package/src/lib/server/pos-hardware-admin.js.map +1 -0
  140. package/src/lib/server/pos-hardware-notify.d.ts +27 -0
  141. package/src/lib/server/pos-hardware-notify.js +142 -0
  142. package/src/lib/server/pos-hardware-notify.js.map +1 -0
  143. package/src/lib/server/pos-hardware-user-eraser.d.ts +26 -0
  144. package/src/lib/server/pos-hardware-user-eraser.js +67 -0
  145. package/src/lib/server/pos-hardware-user-eraser.js.map +1 -0
  146. package/src/lib/server/pos-hardware-webhook.d.ts +31 -0
  147. package/src/lib/server/pos-hardware-webhook.js +176 -0
  148. package/src/lib/server/pos-hardware-webhook.js.map +1 -0
  149. package/src/lib/server/pos-hardware.d.ts +58 -0
  150. package/src/lib/server/pos-hardware.js +234 -0
  151. package/src/lib/server/pos-hardware.js.map +1 -0
  152. package/src/lib/server/pos-offline-card-reconcile.d.ts +38 -0
  153. package/src/lib/server/pos-offline-card-reconcile.js +58 -0
  154. package/src/lib/server/pos-offline-card-reconcile.js.map +1 -0
  155. package/src/lib/server/pos-offline-sync.d.ts +32 -0
  156. package/src/lib/server/pos-offline-sync.js +191 -15
  157. package/src/lib/server/pos-offline-sync.js.map +1 -1
  158. package/src/lib/server/pos-ops-routes.d.ts +4 -2
  159. package/src/lib/server/pos-ops-routes.js +14 -2
  160. package/src/lib/server/pos-ops-routes.js.map +1 -1
  161. package/src/lib/server/pos-order.js +39 -51
  162. package/src/lib/server/pos-order.js.map +1 -1
  163. package/src/lib/server/pos-payment.js +8 -4
  164. package/src/lib/server/pos-payment.js.map +1 -1
  165. package/src/lib/server/pos-reader-splash-admin.d.ts +36 -0
  166. package/src/lib/server/pos-reader-splash-admin.js +295 -0
  167. package/src/lib/server/pos-reader-splash-admin.js.map +1 -0
  168. package/src/lib/server/pos-reader-splash-render.d.ts +40 -0
  169. package/src/lib/server/pos-reader-splash-render.js +138 -0
  170. package/src/lib/server/pos-reader-splash-render.js.map +1 -0
  171. package/src/lib/server/pos-reader-splash-server.d.ts +32 -0
  172. package/src/lib/server/pos-reader-splash-server.js +32 -0
  173. package/src/lib/server/pos-reader-splash-server.js.map +1 -0
  174. package/src/lib/server/pos-reader-splash.d.ts +105 -0
  175. package/src/lib/server/pos-reader-splash.js +548 -0
  176. package/src/lib/server/pos-reader-splash.js.map +1 -0
  177. package/src/lib/server/pos-sale.d.ts +2 -1
  178. package/src/lib/server/pos-sale.js +3 -1
  179. package/src/lib/server/pos-sale.js.map +1 -1
  180. package/src/lib/server/pos-terminal.d.ts +67 -4
  181. package/src/lib/server/pos-terminal.js +239 -32
  182. package/src/lib/server/pos-terminal.js.map +1 -1
  183. package/src/lib/server/process-restock.js +4 -0
  184. package/src/lib/server/process-restock.js.map +1 -1
  185. package/src/lib/server/product-card.js +2 -2
  186. package/src/lib/server/product-card.js.map +1 -1
  187. package/src/lib/server/product-catalog.d.ts +2 -0
  188. package/src/lib/server/product-catalog.js +11 -4
  189. package/src/lib/server/product-catalog.js.map +1 -1
  190. package/src/lib/server/product.js +3 -1
  191. package/src/lib/server/product.js.map +1 -1
  192. package/src/lib/server/related.js +8 -1
  193. package/src/lib/server/related.js.map +1 -1
  194. package/src/lib/server/reservation-availability-query.d.ts +35 -0
  195. package/src/lib/server/reservation-availability-query.js +34 -0
  196. package/src/lib/server/reservation-availability-query.js.map +1 -0
  197. package/src/lib/server/reservation-availability.d.ts +21 -0
  198. package/src/lib/server/reservation-availability.js +64 -10
  199. package/src/lib/server/reservation-availability.js.map +1 -1
  200. package/src/lib/server/reservation-walk-in.d.ts +28 -0
  201. package/src/lib/server/reservation-walk-in.js +166 -0
  202. package/src/lib/server/reservation-walk-in.js.map +1 -0
  203. package/src/lib/server/reserve.js +13 -10
  204. package/src/lib/server/reserve.js.map +1 -1
  205. package/src/lib/server/reviews.js +3 -1
  206. package/src/lib/server/reviews.js.map +1 -1
  207. package/src/lib/server/site-page-resolver.js +5 -2
  208. package/src/lib/server/site-page-resolver.js.map +1 -1
  209. package/src/lib/server.js +26 -0
  210. package/src/lib/server.js.map +1 -1
  211. package/src/lib/testing/fake-firestore.js +72 -0
  212. package/src/lib/testing/fake-firestore.js.map +1 -1
@@ -173,6 +173,9 @@ export function posTerminalAddressProblem(address) {
173
173
  }, {
174
174
  merge: true
175
175
  });
176
+ // A new Location starts with the store's reader start-up screen (AGL-4048).
177
+ // Never fatal, and loaded only here: it draws images.
178
+ await import("./pos-reader-splash.js").then((splash)=>splash.applyPosReaderSplash(options.hostId)).catch((error)=>console.error('[pos-terminal] start-up screen not applied', options.hostId, error));
176
179
  return {
177
180
  ok: true,
178
181
  locationId: String(created.body.id)
@@ -182,49 +185,147 @@ export function posTerminalAddressProblem(address) {
182
185
  return settings.tippingEnabled ? settings.tipPercentages.slice(0, 3).join(',') : 'off';
183
186
  }
184
187
  /**
185
- * Keeps the site's reader tipping in step with the merchant's settings: one
186
- * Terminal Configuration per site, assigned to its Location, rewritten only
187
- * when the presets changed. Never fatal: a reader that keeps the previous
188
- * presets still takes the payment.
189
- */ export async function syncPosReaderTipping(hostId, settings) {
188
+ * Writes `params` onto the site's ONE Terminal Configuration, creating it and
189
+ * assigning it to the site's Location on first use. Reader tipping and the
190
+ * start-up screen (AGL-4048) both live on it, because a Location takes one
191
+ * configuration override: a second configuration assigned for the screen
192
+ * would silently drop the tipping presets, and the other way round. Stripe
193
+ * leaves every parameter an update does not name as it was, so each caller
194
+ * sends only its own.
195
+ *
196
+ * The first write is the only race. Tipping's runs as a payment starts, the
197
+ * screen's when the POS devices card saves, and two at once would each make a
198
+ * configuration. So the new id is CLAIMED in a transaction: the loser writes
199
+ * its parameters onto the winner's configuration and deletes its own.
200
+ *
201
+ * `createKey` keys only the create (`pos-configuration:{hostId}:{createKey}`),
202
+ * so a retried first write makes one configuration. An update is not keyed:
203
+ * it sets values, and repeating it changes nothing.
204
+ */ export async function savePosReaderConfiguration(hostId, params, createKey) {
190
205
  var _config_get, _config_get1;
191
- var _saved_body;
192
- if (!settings.tippingEnabled) return;
206
+ var _created_body;
193
207
  const ref = terminalConfigRef(hostId);
194
208
  const config = await ref.get();
195
209
  const locationId = String((_config_get = config.get('stripeLocationId')) != null ? _config_get : '');
196
- if (!locationId) return;
210
+ if (!locationId) return {
211
+ ok: false,
212
+ error: 'no-location'
213
+ };
214
+ const known = String((_config_get1 = config.get('stripeConfigurationId')) != null ? _config_get1 : '');
215
+ if (known) {
216
+ var _ref;
217
+ var _updated_body_error, _updated_body;
218
+ const updated = await posStripe('POST', `terminal/configurations/${known}`, {
219
+ params
220
+ });
221
+ if (!updated.ok) return {
222
+ ok: false,
223
+ error: String((_ref = (_updated_body = updated.body) == null ? void 0 : (_updated_body_error = _updated_body.error) == null ? void 0 : _updated_body_error.code) != null ? _ref : updated.status)
224
+ };
225
+ // A configuration recorded before AGL-4048 was only ever recorded once
226
+ // it was assigned, so only an explicit `false` still owes the assignment.
227
+ if (config.get('stripeConfigurationAssigned') === false) {
228
+ const assigned = await assignPosReaderConfiguration(hostId, locationId, known);
229
+ if (!assigned) return {
230
+ ok: false,
231
+ error: 'assignment'
232
+ };
233
+ }
234
+ return {
235
+ ok: true,
236
+ configurationId: known
237
+ };
238
+ }
239
+ const created = await posStripe('POST', 'terminal/configurations', {
240
+ params,
241
+ idempotencyKey: `pos-configuration:${hostId}:${createKey}`
242
+ });
243
+ if (!created.ok || !((_created_body = created.body) == null ? void 0 : _created_body.id)) {
244
+ var _ref1;
245
+ var _created_body_error, _created_body1;
246
+ return {
247
+ ok: false,
248
+ error: String((_ref1 = (_created_body1 = created.body) == null ? void 0 : (_created_body_error = _created_body1.error) == null ? void 0 : _created_body_error.code) != null ? _ref1 : created.status)
249
+ };
250
+ }
251
+ const createdId = String(created.body.id);
252
+ const winner = await firebaseAdmin.app().firestore().runTransaction(async (transaction)=>{
253
+ var _fresh_get;
254
+ const fresh = await transaction.get(ref);
255
+ const existing = String((_fresh_get = fresh.get('stripeConfigurationId')) != null ? _fresh_get : '');
256
+ if (existing) return existing;
257
+ transaction.set(ref, {
258
+ stripeConfigurationId: createdId,
259
+ stripeConfigurationAssigned: false
260
+ }, {
261
+ merge: true
262
+ });
263
+ return createdId;
264
+ });
265
+ if (winner !== createdId) {
266
+ var _ref2;
267
+ var _updated_body_error1, _updated_body1;
268
+ const updated = await posStripe('POST', `terminal/configurations/${winner}`, {
269
+ params
270
+ });
271
+ await posStripe('DELETE', `terminal/configurations/${createdId}`).catch(()=>undefined);
272
+ if (!updated.ok) return {
273
+ ok: false,
274
+ error: String((_ref2 = (_updated_body1 = updated.body) == null ? void 0 : (_updated_body_error1 = _updated_body1.error) == null ? void 0 : _updated_body_error1.code) != null ? _ref2 : updated.status)
275
+ };
276
+ return {
277
+ ok: true,
278
+ configurationId: winner
279
+ };
280
+ }
281
+ const assigned = await assignPosReaderConfiguration(hostId, locationId, createdId);
282
+ return assigned ? {
283
+ ok: true,
284
+ configurationId: createdId
285
+ } : {
286
+ ok: false,
287
+ error: 'assignment'
288
+ };
289
+ }
290
+ async function assignPosReaderConfiguration(hostId, locationId, configurationId) {
291
+ const assigned = await posStripe('POST', `terminal/locations/${locationId}`, {
292
+ params: {
293
+ configuration_overrides: configurationId
294
+ }
295
+ });
296
+ if (!assigned.ok) {
297
+ var _assigned_body;
298
+ console.error('[pos-terminal] configuration assignment failed', hostId, (_assigned_body = assigned.body) == null ? void 0 : _assigned_body.error);
299
+ return false;
300
+ }
301
+ await terminalConfigRef(hostId).set({
302
+ stripeConfigurationAssigned: true
303
+ }, {
304
+ merge: true
305
+ });
306
+ return true;
307
+ }
308
+ /**
309
+ * Keeps the site's reader tipping in step with the merchant's settings, on
310
+ * the site's one Terminal Configuration ({@link savePosReaderConfiguration}),
311
+ * rewritten only when the presets changed. Never fatal: a reader that keeps
312
+ * the previous presets still takes the payment.
313
+ */ export async function syncPosReaderTipping(hostId, settings) {
314
+ if (!settings.tippingEnabled) return;
315
+ const ref = terminalConfigRef(hostId);
316
+ const config = await ref.get();
317
+ if (!config.get('stripeLocationId')) return;
197
318
  const key = posReaderTippingKey(settings);
198
319
  if (config.get('tippingKey') === key) return;
199
320
  const percentages = settings.tipPercentages.slice(0, 3);
200
- const configurationId = String((_config_get1 = config.get('stripeConfigurationId')) != null ? _config_get1 : '');
201
- const params = {
321
+ const saved = await savePosReaderConfiguration(hostId, {
202
322
  [`tipping[${POS_CURRENCY}][percentages]`]: percentages.map(String)
203
- };
204
- const saved = await posStripe('POST', configurationId ? `terminal/configurations/${configurationId}` : 'terminal/configurations', _extends({
205
- params
206
- }, configurationId ? {} : {
207
- idempotencyKey: `pos-configuration:${hostId}:${key}`
208
- }));
209
- if (!saved.ok || !((_saved_body = saved.body) == null ? void 0 : _saved_body.id)) {
210
- var _saved_body1;
211
- console.error('[pos-terminal] tipping configuration failed', hostId, (_saved_body1 = saved.body) == null ? void 0 : _saved_body1.error);
323
+ }, key);
324
+ if ('error' in saved) {
325
+ console.error('[pos-terminal] tipping configuration failed', hostId, saved.error);
212
326
  return;
213
327
  }
214
- if (!configurationId) {
215
- const assigned = await posStripe('POST', `terminal/locations/${locationId}`, {
216
- params: {
217
- configuration_overrides: String(saved.body.id)
218
- }
219
- });
220
- if (!assigned.ok) {
221
- var _assigned_body;
222
- console.error('[pos-terminal] configuration assignment failed', hostId, (_assigned_body = assigned.body) == null ? void 0 : _assigned_body.error);
223
- return;
224
- }
225
- }
226
328
  await ref.set({
227
- stripeConfigurationId: String(saved.body.id),
228
329
  tippingKey: key
229
330
  }, {
230
331
  merge: true
@@ -1089,5 +1190,111 @@ async function sendToReader(input) {
1089
1190
  hostId: ref.hostId
1090
1191
  };
1091
1192
  }
1193
+ function offlineCardIntent(body) {
1194
+ var _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _error_message;
1195
+ var _charge_payment_method_details, _body_transfer_data;
1196
+ const charge = (body == null ? void 0 : body.latest_charge) && typeof body.latest_charge === 'object' ? body.latest_charge : null;
1197
+ const present = (_ref = charge == null ? void 0 : (_charge_payment_method_details = charge.payment_method_details) == null ? void 0 : _charge_payment_method_details.card_present) != null ? _ref : {};
1198
+ const error = (_ref1 = body == null ? void 0 : body.last_payment_error) != null ? _ref1 : null;
1199
+ return _extends({
1200
+ id: String((_ref2 = body == null ? void 0 : body.id) != null ? _ref2 : ''),
1201
+ status: String((_ref3 = body == null ? void 0 : body.status) != null ? _ref3 : ''),
1202
+ amount: Number((_ref4 = body == null ? void 0 : body.amount) != null ? _ref4 : 0),
1203
+ currency: String((_ref5 = body == null ? void 0 : body.currency) != null ? _ref5 : ''),
1204
+ metadata: (_ref6 = body == null ? void 0 : body.metadata) != null ? _ref6 : {},
1205
+ destination: String((_ref7 = body == null ? void 0 : (_body_transfer_data = body.transfer_data) == null ? void 0 : _body_transfer_data.destination) != null ? _ref7 : ''),
1206
+ applicationFeeCents: Number((_ref8 = body == null ? void 0 : body.application_fee_amount) != null ? _ref8 : 0),
1207
+ livemode: Boolean(body == null ? void 0 : body.livemode)
1208
+ }, present.brand ? {
1209
+ brand: String(present.brand)
1210
+ } : {}, present.last4 ? {
1211
+ last4: String(present.last4)
1212
+ } : {}, error ? {
1213
+ failureMessage: String((_ref9 = (_error_message = error.message) != null ? _error_message : error.decline_code) != null ? _ref9 : 'The card was declined.')
1214
+ } : {});
1215
+ }
1216
+ /** Reads one offline card's PaymentIntent, with its charge's card details. */ export async function retrievePosOfflineCardIntent(paymentIntentId) {
1217
+ const fetched = await posStripe('GET', `payment_intents/${encodeURIComponent(paymentIntentId)}`, {
1218
+ params: {
1219
+ 'expand[]': [
1220
+ 'latest_charge'
1221
+ ]
1222
+ }
1223
+ });
1224
+ if (!fetched.ok) return {
1225
+ ok: false,
1226
+ error: posStripeErrorMessage(fetched.body, 'The card payment could not be read.')
1227
+ };
1228
+ return {
1229
+ ok: true,
1230
+ intent: offlineCardIntent(fetched.body)
1231
+ };
1232
+ }
1233
+ /** Captures one authorized offline card with the platform's fee; a repeat finds the first capture. */ export async function capturePosOfflineCardIntent(paymentIntentId, applicationFeeCents, idempotencyKey) {
1234
+ const captured = await posStripe('POST', `payment_intents/${encodeURIComponent(paymentIntentId)}/capture`, {
1235
+ idempotencyKey,
1236
+ params: _extends({}, applicationFeeCents > 0 ? {
1237
+ application_fee_amount: applicationFeeCents
1238
+ } : {}, {
1239
+ 'expand[]': [
1240
+ 'latest_charge'
1241
+ ]
1242
+ })
1243
+ });
1244
+ if (!captured.ok) return {
1245
+ ok: false,
1246
+ error: posStripeErrorMessage(captured.body, 'The card payment could not be captured.')
1247
+ };
1248
+ return {
1249
+ ok: true,
1250
+ intent: offlineCardIntent(captured.body)
1251
+ };
1252
+ }
1253
+ /**
1254
+ * Turns Stripe's offline mode on for the site's readers: the same per-site
1255
+ * Terminal Configuration the reader tipping uses, with `offline[enabled]`,
1256
+ * assigned to the site's Location. Done once; a reader picks it up the next
1257
+ * time it connects online. False when Stripe refused it.
1258
+ */ export async function ensurePosOfflineCardConfiguration(hostId) {
1259
+ var _config_get, _config_get1;
1260
+ var _saved_body;
1261
+ const ref = terminalConfigRef(hostId);
1262
+ const config = await ref.get();
1263
+ if (config.get('offlineEnabled') === true) return true;
1264
+ const locationId = String((_config_get = config.get('stripeLocationId')) != null ? _config_get : '');
1265
+ if (!locationId) return false;
1266
+ const configurationId = String((_config_get1 = config.get('stripeConfigurationId')) != null ? _config_get1 : '');
1267
+ const saved = await posStripe('POST', configurationId ? `terminal/configurations/${configurationId}` : 'terminal/configurations', _extends({
1268
+ params: {
1269
+ 'offline[enabled]': true
1270
+ }
1271
+ }, configurationId ? {} : {
1272
+ idempotencyKey: `pos-configuration:${hostId}:offline`
1273
+ }));
1274
+ if (!saved.ok || !((_saved_body = saved.body) == null ? void 0 : _saved_body.id)) {
1275
+ var _saved_body1;
1276
+ console.error('[pos-terminal] offline configuration failed', hostId, (_saved_body1 = saved.body) == null ? void 0 : _saved_body1.error);
1277
+ return false;
1278
+ }
1279
+ if (!configurationId) {
1280
+ const assigned = await posStripe('POST', `terminal/locations/${locationId}`, {
1281
+ params: {
1282
+ configuration_overrides: String(saved.body.id)
1283
+ }
1284
+ });
1285
+ if (!assigned.ok) {
1286
+ var _assigned_body;
1287
+ console.error('[pos-terminal] offline configuration assignment failed', hostId, (_assigned_body = assigned.body) == null ? void 0 : _assigned_body.error);
1288
+ return false;
1289
+ }
1290
+ }
1291
+ await ref.set({
1292
+ stripeConfigurationId: String(saved.body.id),
1293
+ offlineEnabled: true
1294
+ }, {
1295
+ merge: true
1296
+ });
1297
+ return true;
1298
+ }
1092
1299
 
1093
1300
  //# sourceMappingURL=pos-terminal.js.map