@aglyn/plugins-commerce 1.0.0-beta.278 → 1.0.0-beta.282
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +17 -14
- package/src/lib/components/commerce-console-page.js +33 -1
- package/src/lib/components/commerce-console-page.js.map +1 -1
- package/src/lib/components/console/payments-settings-card.component.js +1 -1
- package/src/lib/components/console/payments-settings-card.component.js.map +1 -1
- package/src/lib/components/console/pos/pos-hardware-api.d.ts +122 -0
- package/src/lib/components/console/pos/pos-hardware-api.js +90 -0
- package/src/lib/components/console/pos/pos-hardware-api.js.map +1 -0
- package/src/lib/components/console/pos/pos-reader-splash-api.d.ts +58 -0
- package/src/lib/components/console/pos/pos-reader-splash-api.js +101 -0
- package/src/lib/components/console/pos/pos-reader-splash-api.js.map +1 -0
- package/src/lib/components/console/pos-devices-card.component.js +5 -0
- package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
- package/src/lib/components/console/pos-hardware-card.component.d.ts +26 -0
- package/src/lib/components/console/pos-hardware-card.component.js +456 -0
- package/src/lib/components/console/pos-hardware-card.component.js.map +1 -0
- package/src/lib/components/console/pos-hardware-orders-staff-page.component.d.ts +14 -0
- package/src/lib/components/console/pos-hardware-orders-staff-page.component.js +519 -0
- package/src/lib/components/console/pos-hardware-orders-staff-page.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.d.ts +27 -0
- package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js +444 -0
- package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-check-in-zone.component.d.ts +9 -0
- package/src/lib/components/console/pos-ops/pos-check-in-zone.component.js +37 -0
- package/src/lib/components/console/pos-ops/pos-check-in-zone.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-check-ins-card.component.d.ts +24 -0
- package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js +346 -0
- package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-customer-lookup.component.d.ts +5 -1
- package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js +83 -4
- package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js.map +1 -1
- package/src/lib/components/console/pos-ops/pos-day-totals-card.component.d.ts +35 -0
- package/src/lib/components/console/pos-ops/pos-day-totals-card.component.js +546 -0
- package/src/lib/components/console/pos-ops/pos-day-totals-card.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +2 -1
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +20 -1
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -1
- package/src/lib/components/console/pos-ops/pos-ops-api.d.ts +1 -1
- package/src/lib/components/console/pos-ops/pos-ops-api.js.map +1 -1
- package/src/lib/components/console/pos-page.component.js +6 -3
- package/src/lib/components/console/pos-page.component.js.map +1 -1
- package/src/lib/components/console/pos-reader-splash-setting.component.d.ts +22 -0
- package/src/lib/components/console/pos-reader-splash-setting.component.js +275 -0
- package/src/lib/components/console/pos-reader-splash-setting.component.js.map +1 -0
- package/src/lib/components/console/pos-reader-splash-staff-page.component.d.ts +14 -0
- package/src/lib/components/console/pos-reader-splash-staff-page.component.js +301 -0
- package/src/lib/components/console/pos-reader-splash-staff-page.component.js.map +1 -0
- package/src/lib/components/console/pos-zones.d.ts +37 -3
- package/src/lib/components/console/pos-zones.js +11 -1
- package/src/lib/components/console/pos-zones.js.map +1 -1
- package/src/lib/components/console/product-check-in-fields.component.d.ts +20 -0
- package/src/lib/components/console/product-check-in-fields.component.js +172 -0
- package/src/lib/components/console/product-check-in-fields.component.js.map +1 -0
- package/src/lib/components/console/product-editor-dialog.component.js +48 -9
- package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
- package/src/lib/components/console/product-register-fields.component.d.ts +12 -0
- package/src/lib/components/console/product-register-fields.component.js +39 -1
- package/src/lib/components/console/product-register-fields.component.js.map +1 -1
- package/src/lib/components/console/products-hub-card.component.js +21 -6
- package/src/lib/components/console/products-hub-card.component.js.map +1 -1
- package/src/lib/components/console/reservations-card.component.js +239 -70
- package/src/lib/components/console/reservations-card.component.js.map +1 -1
- package/src/lib/components/reservation-widget.js +16 -0
- package/src/lib/components/reservation-widget.js.map +1 -1
- package/src/lib/constants/operator-alerts.d.ts +6 -0
- package/src/lib/constants/operator-alerts.js +20 -1
- package/src/lib/constants/operator-alerts.js.map +1 -1
- package/src/lib/declarations.console-server.js +7 -0
- package/src/lib/declarations.console-server.js.map +1 -1
- package/src/lib/declarations.d.ts +26 -0
- package/src/lib/declarations.js +34 -0
- package/src/lib/declarations.js.map +1 -0
- package/src/lib/model/commerce-check-in-product.d.ts +37 -0
- package/src/lib/model/commerce-check-in-product.js +49 -0
- package/src/lib/model/commerce-check-in-product.js.map +1 -0
- package/src/lib/model/commerce-check-in.d.ts +187 -0
- package/src/lib/model/commerce-check-in.js +468 -0
- package/src/lib/model/commerce-check-in.js.map +1 -0
- package/src/lib/model/commerce-pos-day-report.d.ts +209 -0
- package/src/lib/model/commerce-pos-day-report.js +572 -0
- package/src/lib/model/commerce-pos-day-report.js.map +1 -0
- package/src/lib/model/commerce-pos-offline.d.ts +65 -3
- package/src/lib/model/commerce-pos-offline.js +104 -7
- package/src/lib/model/commerce-pos-offline.js.map +1 -1
- package/src/lib/model/commerce-pos-ops.d.ts +3 -0
- package/src/lib/model/commerce-pos-ops.js +1 -0
- package/src/lib/model/commerce-pos-ops.js.map +1 -1
- package/src/lib/model/commerce-pos.d.ts +43 -3
- package/src/lib/model/commerce-pos.js +73 -5
- package/src/lib/model/commerce-pos.js.map +1 -1
- package/src/lib/model/commerce-reservations.d.ts +73 -7
- package/src/lib/model/commerce-reservations.js +90 -10
- package/src/lib/model/commerce-reservations.js.map +1 -1
- package/src/lib/model/commerce.d.ts +40 -0
- package/src/lib/model/commerce.js +22 -4
- package/src/lib/model/commerce.js.map +1 -1
- package/src/lib/model/index.d.ts +1 -0
- package/src/lib/model/index.js +1 -0
- package/src/lib/model/index.js.map +1 -1
- package/src/lib/model/plugin-permissions.d.ts +1 -1
- package/src/lib/model/plugin-permissions.js +2 -1
- package/src/lib/model/plugin-permissions.js.map +1 -1
- package/src/lib/model/pos-hardware.d.ts +288 -0
- package/src/lib/model/pos-hardware.js +499 -0
- package/src/lib/model/pos-hardware.js.map +1 -0
- package/src/lib/model/pos-offline-card-limits.d.ts +20 -0
- package/src/lib/model/pos-offline-card-limits.js +28 -0
- package/src/lib/model/pos-offline-card-limits.js.map +1 -0
- package/src/lib/model/pos-reader-splash.d.ts +114 -0
- package/src/lib/model/pos-reader-splash.js +141 -0
- package/src/lib/model/pos-reader-splash.js.map +1 -0
- package/src/lib/model/product-write.d.ts +6 -0
- package/src/lib/plugin-config.d.ts +10 -0
- package/src/lib/plugin-config.js +40 -0
- package/src/lib/plugin-config.js.map +1 -1
- package/src/lib/plugin.js +28 -0
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/server/cart-checkout.js +3 -1
- package/src/lib/server/cart-checkout.js.map +1 -1
- package/src/lib/server/cart.js +12 -1
- package/src/lib/server/cart.js.map +1 -1
- package/src/lib/server/catalog.js +49 -12
- package/src/lib/server/catalog.js.map +1 -1
- package/src/lib/server/checkout-extras.js +1 -1
- package/src/lib/server/checkout-extras.js.map +1 -1
- package/src/lib/server/checkout.js +7 -0
- package/src/lib/server/checkout.js.map +1 -1
- package/src/lib/server/person-eraser.d.ts +8 -1
- package/src/lib/server/person-eraser.js +23 -1
- package/src/lib/server/person-eraser.js.map +1 -1
- package/src/lib/server/pos-check-in.d.ts +49 -0
- package/src/lib/server/pos-check-in.js +652 -0
- package/src/lib/server/pos-check-in.js.map +1 -0
- package/src/lib/server/pos-day-report.d.ts +46 -0
- package/src/lib/server/pos-day-report.js +299 -0
- package/src/lib/server/pos-day-report.js.map +1 -0
- package/src/lib/server/pos-hardware-admin.d.ts +50 -0
- package/src/lib/server/pos-hardware-admin.js +366 -0
- package/src/lib/server/pos-hardware-admin.js.map +1 -0
- package/src/lib/server/pos-hardware-notify.d.ts +27 -0
- package/src/lib/server/pos-hardware-notify.js +142 -0
- package/src/lib/server/pos-hardware-notify.js.map +1 -0
- package/src/lib/server/pos-hardware-user-eraser.d.ts +26 -0
- package/src/lib/server/pos-hardware-user-eraser.js +67 -0
- package/src/lib/server/pos-hardware-user-eraser.js.map +1 -0
- package/src/lib/server/pos-hardware-webhook.d.ts +31 -0
- package/src/lib/server/pos-hardware-webhook.js +176 -0
- package/src/lib/server/pos-hardware-webhook.js.map +1 -0
- package/src/lib/server/pos-hardware.d.ts +58 -0
- package/src/lib/server/pos-hardware.js +234 -0
- package/src/lib/server/pos-hardware.js.map +1 -0
- package/src/lib/server/pos-offline-card-reconcile.d.ts +38 -0
- package/src/lib/server/pos-offline-card-reconcile.js +58 -0
- package/src/lib/server/pos-offline-card-reconcile.js.map +1 -0
- package/src/lib/server/pos-offline-sync.d.ts +32 -0
- package/src/lib/server/pos-offline-sync.js +191 -15
- package/src/lib/server/pos-offline-sync.js.map +1 -1
- package/src/lib/server/pos-ops-routes.d.ts +4 -2
- package/src/lib/server/pos-ops-routes.js +14 -2
- package/src/lib/server/pos-ops-routes.js.map +1 -1
- package/src/lib/server/pos-order.js +39 -51
- package/src/lib/server/pos-order.js.map +1 -1
- package/src/lib/server/pos-payment.js +8 -4
- package/src/lib/server/pos-payment.js.map +1 -1
- package/src/lib/server/pos-reader-splash-admin.d.ts +36 -0
- package/src/lib/server/pos-reader-splash-admin.js +295 -0
- package/src/lib/server/pos-reader-splash-admin.js.map +1 -0
- package/src/lib/server/pos-reader-splash-render.d.ts +40 -0
- package/src/lib/server/pos-reader-splash-render.js +138 -0
- package/src/lib/server/pos-reader-splash-render.js.map +1 -0
- package/src/lib/server/pos-reader-splash-server.d.ts +32 -0
- package/src/lib/server/pos-reader-splash-server.js +32 -0
- package/src/lib/server/pos-reader-splash-server.js.map +1 -0
- package/src/lib/server/pos-reader-splash.d.ts +105 -0
- package/src/lib/server/pos-reader-splash.js +548 -0
- package/src/lib/server/pos-reader-splash.js.map +1 -0
- package/src/lib/server/pos-sale.d.ts +2 -1
- package/src/lib/server/pos-sale.js +3 -1
- package/src/lib/server/pos-sale.js.map +1 -1
- package/src/lib/server/pos-terminal.d.ts +67 -4
- package/src/lib/server/pos-terminal.js +239 -32
- package/src/lib/server/pos-terminal.js.map +1 -1
- package/src/lib/server/process-restock.js +4 -0
- package/src/lib/server/process-restock.js.map +1 -1
- package/src/lib/server/product-card.js +2 -2
- package/src/lib/server/product-card.js.map +1 -1
- package/src/lib/server/product-catalog.d.ts +2 -0
- package/src/lib/server/product-catalog.js +11 -4
- package/src/lib/server/product-catalog.js.map +1 -1
- package/src/lib/server/product.js +3 -1
- package/src/lib/server/product.js.map +1 -1
- package/src/lib/server/related.js +8 -1
- package/src/lib/server/related.js.map +1 -1
- package/src/lib/server/reservation-availability-query.d.ts +35 -0
- package/src/lib/server/reservation-availability-query.js +34 -0
- package/src/lib/server/reservation-availability-query.js.map +1 -0
- package/src/lib/server/reservation-availability.d.ts +21 -0
- package/src/lib/server/reservation-availability.js +64 -10
- package/src/lib/server/reservation-availability.js.map +1 -1
- package/src/lib/server/reservation-walk-in.d.ts +28 -0
- package/src/lib/server/reservation-walk-in.js +166 -0
- package/src/lib/server/reservation-walk-in.js.map +1 -0
- package/src/lib/server/reserve.js +13 -10
- package/src/lib/server/reserve.js.map +1 -1
- package/src/lib/server/reviews.js +3 -1
- package/src/lib/server/reviews.js.map +1 -1
- package/src/lib/server/site-page-resolver.js +5 -2
- package/src/lib/server/site-page-resolver.js.map +1 -1
- package/src/lib/server.js +26 -0
- package/src/lib/server.js.map +1 -1
- package/src/lib/testing/fake-firestore.js +72 -0
- 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
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
|
|
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
|
|
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
|
|
201
|
-
const params = {
|
|
321
|
+
const saved = await savePosReaderConfiguration(hostId, {
|
|
202
322
|
[`tipping[${POS_CURRENCY}][percentages]`]: percentages.map(String)
|
|
203
|
-
};
|
|
204
|
-
|
|
205
|
-
|
|
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
|