@aglyn/plugins-commerce 1.0.0-beta.232 → 1.0.0-beta.233
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 +13 -13
- package/src/lib/components/cart-extras.d.ts +6 -0
- package/src/lib/components/cart-extras.js +4 -1
- package/src/lib/components/cart-extras.js.map +1 -1
- package/src/lib/components/cart-fulfillment.d.ts +117 -0
- package/src/lib/components/cart-fulfillment.js +367 -0
- package/src/lib/components/cart-fulfillment.js.map +1 -0
- package/src/lib/components/cart.js +52 -10
- package/src/lib/components/cart.js.map +1 -1
- package/src/lib/components/commerce-console-page.js +42 -1
- package/src/lib/components/commerce-console-page.js.map +1 -1
- package/src/lib/components/console/host-orders-card.component.js +38 -10
- package/src/lib/components/console/host-orders-card.component.js.map +1 -1
- package/src/lib/components/console/local-delivery-settings-card.component.d.ts +37 -0
- package/src/lib/components/console/local-delivery-settings-card.component.js +542 -0
- package/src/lib/components/console/local-delivery-settings-card.component.js.map +1 -0
- package/src/lib/components/console/locations-card.component.js +177 -3
- package/src/lib/components/console/locations-card.component.js.map +1 -1
- package/src/lib/components/console/order-detail-dialog.component.js +10 -0
- package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
- package/src/lib/components/console/order-local-fulfillment-panel.component.d.ts +44 -0
- package/src/lib/components/console/order-local-fulfillment-panel.component.js +265 -0
- package/src/lib/components/console/order-local-fulfillment-panel.component.js.map +1 -0
- package/src/lib/components/console/order-offline-notice.component.d.ts +12 -0
- package/src/lib/components/console/order-offline-notice.component.js +53 -0
- package/src/lib/components/console/order-offline-notice.component.js.map +1 -0
- package/src/lib/components/console/pickup-delivery-queue-card.component.d.ts +35 -0
- package/src/lib/components/console/pickup-delivery-queue-card.component.js +222 -0
- package/src/lib/components/console/pickup-delivery-queue-card.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-api.d.ts +24 -1
- package/src/lib/components/console/pos/pos-api.js +13 -0
- package/src/lib/components/console/pos/pos-api.js.map +1 -1
- package/src/lib/components/console/pos/pos-item-dialog.component.d.ts +12 -0
- package/src/lib/components/console/pos/pos-item-dialog.component.js +10 -8
- package/src/lib/components/console/pos/pos-item-dialog.component.js.map +1 -1
- package/src/lib/components/console/pos/pos-kiosk-queue.component.d.ts +22 -0
- package/src/lib/components/console/pos/pos-kiosk-queue.component.js +168 -0
- package/src/lib/components/console/pos/pos-kiosk-queue.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-tender-dialogs.component.d.ts +18 -0
- package/src/lib/components/console/pos/pos-tender-dialogs.component.js +116 -1
- package/src/lib/components/console/pos/pos-tender-dialogs.component.js.map +1 -1
- package/src/lib/components/console/pos/pos-tender-panel.component.d.ts +8 -0
- package/src/lib/components/console/pos/pos-tender-panel.component.js +77 -18
- package/src/lib/components/console/pos/pos-tender-panel.component.js.map +1 -1
- package/src/lib/components/console/pos/use-pos-display.d.ts +5 -2
- package/src/lib/components/console/pos/use-pos-display.js +3 -2
- package/src/lib/components/console/pos/use-pos-display.js.map +1 -1
- package/src/lib/components/console/pos-devices-card.component.js +2 -2
- package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
- package/src/lib/components/console/pos-display/pairing-screen.d.ts +5 -2
- package/src/lib/components/console/pos-display/pairing-screen.js +7 -5
- package/src/lib/components/console/pos-display/pairing-screen.js.map +1 -1
- package/src/lib/components/console/pos-display/pos-display-api.d.ts +7 -1
- package/src/lib/components/console/pos-display/pos-display-api.js +7 -2
- package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -1
- package/src/lib/components/console/pos-kiosk/kiosk-checkout.d.ts +41 -0
- package/src/lib/components/console/pos-kiosk/kiosk-checkout.js +275 -0
- package/src/lib/components/console/pos-kiosk/kiosk-checkout.js.map +1 -0
- package/src/lib/components/console/pos-kiosk/kiosk-menu.d.ts +32 -0
- package/src/lib/components/console/pos-kiosk/kiosk-menu.js +344 -0
- package/src/lib/components/console/pos-kiosk/kiosk-menu.js.map +1 -0
- package/src/lib/components/console/pos-kiosk/kiosk-staff.d.ts +12 -0
- package/src/lib/components/console/pos-kiosk/kiosk-staff.js +257 -0
- package/src/lib/components/console/pos-kiosk/kiosk-staff.js.map +1 -0
- package/src/lib/components/console/pos-kiosk/pos-kiosk-api.d.ts +114 -0
- package/src/lib/components/console/pos-kiosk/pos-kiosk-api.js +189 -0
- package/src/lib/components/console/pos-kiosk/pos-kiosk-api.js.map +1 -0
- package/src/lib/components/console/pos-kiosk/use-kiosk-idle.d.ts +16 -0
- package/src/lib/components/console/pos-kiosk/use-kiosk-idle.js +80 -0
- package/src/lib/components/console/pos-kiosk/use-kiosk-idle.js.map +1 -0
- package/src/lib/components/console/pos-kiosk-page.component.d.ts +28 -0
- package/src/lib/components/console/pos-kiosk-page.component.js +791 -0
- package/src/lib/components/console/pos-kiosk-page.component.js.map +1 -0
- package/src/lib/components/console/pos-offline/pos-offline-api.d.ts +44 -0
- package/src/lib/components/console/pos-offline/pos-offline-api.js +69 -0
- package/src/lib/components/console/pos-offline/pos-offline-api.js.map +1 -0
- package/src/lib/components/console/pos-offline/pos-offline-banner.component.d.ts +7 -0
- package/src/lib/components/console/pos-offline/pos-offline-banner.component.js +135 -0
- package/src/lib/components/console/pos-offline/pos-offline-banner.component.js.map +1 -0
- package/src/lib/components/console/pos-offline/pos-offline-checkout.component.d.ts +32 -0
- package/src/lib/components/console/pos-offline/pos-offline-checkout.component.js +287 -0
- package/src/lib/components/console/pos-offline/pos-offline-checkout.component.js.map +1 -0
- package/src/lib/components/console/pos-offline/pos-offline-store.d.ts +63 -0
- package/src/lib/components/console/pos-offline/pos-offline-store.js +145 -0
- package/src/lib/components/console/pos-offline/pos-offline-store.js.map +1 -0
- package/src/lib/components/console/pos-offline/register-offline.d.ts +24 -0
- package/src/lib/components/console/pos-offline/register-offline.js +24 -0
- package/src/lib/components/console/pos-offline/register-offline.js.map +1 -0
- package/src/lib/components/console/pos-offline/use-pos-offline.d.ts +85 -0
- package/src/lib/components/console/pos-offline/use-pos-offline.js +542 -0
- package/src/lib/components/console/pos-offline/use-pos-offline.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js +72 -17
- package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js.map +1 -1
- package/src/lib/components/console/pos-page.component.js +174 -27
- package/src/lib/components/console/pos-page.component.js.map +1 -1
- package/src/lib/components/console/products-hub-card.component.js +35 -10
- package/src/lib/components/console/products-hub-card.component.js.map +1 -1
- package/src/lib/components/console/shipping-settings-card.component.js +1 -1
- package/src/lib/components/console/shipping-settings-card.component.js.map +1 -1
- package/src/lib/components/console/stock-movements-card.component.js +48 -16
- package/src/lib/components/console/stock-movements-card.component.js.map +1 -1
- package/src/lib/components/console/store-zones.d.ts +8 -1
- package/src/lib/components/console/store-zones.js +11 -1
- package/src/lib/components/console/store-zones.js.map +1 -1
- package/src/lib/components/order-status.js +66 -0
- package/src/lib/components/order-status.js.map +1 -1
- package/src/lib/components/product-detail.js +42 -15
- package/src/lib/components/product-detail.js.map +1 -1
- package/src/lib/constants/local-fulfillment-list-query.d.ts +48 -0
- package/src/lib/constants/local-fulfillment-list-query.js +84 -0
- package/src/lib/constants/local-fulfillment-list-query.js.map +1 -0
- package/src/lib/constants/orders-list-query.d.ts +7 -2
- package/src/lib/constants/orders-list-query.js +89 -8
- package/src/lib/constants/orders-list-query.js.map +1 -1
- package/src/lib/constants/pos-shift-list-query.d.ts +22 -0
- package/src/lib/constants/pos-shift-list-query.js +115 -0
- package/src/lib/constants/pos-shift-list-query.js.map +1 -0
- package/src/lib/constants/product-list-query.d.ts +6 -1
- package/src/lib/constants/product-list-query.js +77 -8
- package/src/lib/constants/product-list-query.js.map +1 -1
- package/src/lib/constants/stock-movement-query.d.ts +3 -2
- package/src/lib/constants/stock-movement-query.js +52 -8
- package/src/lib/constants/stock-movement-query.js.map +1 -1
- package/src/lib/model/buyer-notifications.d.ts +5 -3
- package/src/lib/model/buyer-notifications.js +25 -4
- package/src/lib/model/buyer-notifications.js.map +1 -1
- package/src/lib/model/commerce-orders.d.ts +59 -0
- package/src/lib/model/commerce-orders.js.map +1 -1
- package/src/lib/model/commerce-pos-kiosk.d.ts +175 -0
- package/src/lib/model/commerce-pos-kiosk.js +147 -0
- package/src/lib/model/commerce-pos-kiosk.js.map +1 -0
- package/src/lib/model/commerce-pos-offline.d.ts +234 -0
- package/src/lib/model/commerce-pos-offline.js +301 -0
- package/src/lib/model/commerce-pos-offline.js.map +1 -0
- package/src/lib/model/commerce-pos-ops.d.ts +16 -6
- package/src/lib/model/commerce-pos-ops.js +12 -4
- package/src/lib/model/commerce-pos-ops.js.map +1 -1
- package/src/lib/model/commerce-pos.d.ts +13 -1
- package/src/lib/model/commerce-pos.js +5 -4
- package/src/lib/model/commerce-pos.js.map +1 -1
- package/src/lib/model/commerce-stock-holds.d.ts +24 -3
- package/src/lib/model/commerce-stock-holds.js +26 -8
- package/src/lib/model/commerce-stock-holds.js.map +1 -1
- package/src/lib/model/commerce.d.ts +3 -0
- package/src/lib/model/commerce.js.map +1 -1
- package/src/lib/model/index.d.ts +4 -0
- package/src/lib/model/index.js +4 -0
- package/src/lib/model/index.js.map +1 -1
- package/src/lib/model/local-fulfillment-settings.d.ts +178 -0
- package/src/lib/model/local-fulfillment-settings.js +361 -0
- package/src/lib/model/local-fulfillment-settings.js.map +1 -0
- package/src/lib/model/order-list-fields.d.ts +10 -1
- package/src/lib/model/order-list-fields.js +1 -0
- package/src/lib/model/order-list-fields.js.map +1 -1
- package/src/lib/model/order-local-fulfillment.d.ts +131 -0
- package/src/lib/model/order-local-fulfillment.js +125 -0
- package/src/lib/model/order-local-fulfillment.js.map +1 -0
- package/src/lib/model/order-shipping-export.js +4 -0
- package/src/lib/model/order-shipping-export.js.map +1 -1
- package/src/lib/model/order-status-view.d.ts +20 -1
- package/src/lib/model/order-status-view.js +60 -6
- package/src/lib/model/order-status-view.js.map +1 -1
- package/src/lib/plugin-config.js +6 -2
- package/src/lib/plugin-config.js.map +1 -1
- package/src/lib/plugin.js +8 -0
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/pos-kiosk-config.d.ts +26 -0
- package/src/lib/pos-kiosk-config.js +59 -0
- package/src/lib/pos-kiosk-config.js.map +1 -0
- package/src/lib/server/api-v1/openapi.js +8 -0
- package/src/lib/server/api-v1/openapi.js.map +1 -1
- package/src/lib/server/api-v1/order-view.d.ts +19 -0
- package/src/lib/server/api-v1/order-view.js +35 -0
- package/src/lib/server/api-v1/order-view.js.map +1 -1
- package/src/lib/server/billing-webhook.js +238 -87
- package/src/lib/server/billing-webhook.js.map +1 -1
- package/src/lib/server/cart-checkout.d.ts +2 -0
- package/src/lib/server/cart-checkout.js +173 -13
- package/src/lib/server/cart-checkout.js.map +1 -1
- package/src/lib/server/checkout-extras.js +18 -4
- package/src/lib/server/checkout-extras.js.map +1 -1
- package/src/lib/server/checkout.js +71 -14
- package/src/lib/server/checkout.js.map +1 -1
- package/src/lib/server/local-fulfillment-status.d.ts +86 -0
- package/src/lib/server/local-fulfillment-status.js +379 -0
- package/src/lib/server/local-fulfillment-status.js.map +1 -0
- package/src/lib/server/local-fulfillment.d.ts +190 -0
- package/src/lib/server/local-fulfillment.js +580 -0
- package/src/lib/server/local-fulfillment.js.map +1 -0
- package/src/lib/server/membership-register.js +3 -1
- package/src/lib/server/membership-register.js.map +1 -1
- package/src/lib/server/order-notifications.js +61 -0
- package/src/lib/server/order-notifications.js.map +1 -1
- package/src/lib/server/pos-display.d.ts +27 -1
- package/src/lib/server/pos-display.js +50 -9
- package/src/lib/server/pos-display.js.map +1 -1
- package/src/lib/server/pos-kiosk-principal.d.ts +29 -0
- package/src/lib/server/pos-kiosk-principal.js +42 -0
- package/src/lib/server/pos-kiosk-principal.js.map +1 -0
- package/src/lib/server/pos-kiosk.d.ts +54 -0
- package/src/lib/server/pos-kiosk.js +972 -0
- package/src/lib/server/pos-kiosk.js.map +1 -0
- package/src/lib/server/pos-offline-sync.d.ts +85 -0
- package/src/lib/server/pos-offline-sync.js +765 -0
- package/src/lib/server/pos-offline-sync.js.map +1 -0
- package/src/lib/server/pos-order.js +22 -4
- package/src/lib/server/pos-order.js.map +1 -1
- package/src/lib/server/pos-payment.d.ts +6 -0
- package/src/lib/server/pos-payment.js +225 -6
- package/src/lib/server/pos-payment.js.map +1 -1
- package/src/lib/server/pos-print.js +5 -0
- package/src/lib/server/pos-print.js.map +1 -1
- package/src/lib/server/pos-return.js +27 -0
- package/src/lib/server/pos-return.js.map +1 -1
- package/src/lib/server/pos-sale.d.ts +6 -0
- package/src/lib/server/pos-sale.js +2 -0
- package/src/lib/server/pos-sale.js.map +1 -1
- package/src/lib/server/pos-shift.js +8 -1
- package/src/lib/server/pos-shift.js.map +1 -1
- package/src/lib/server/refund.js +3 -0
- package/src/lib/server/refund.js.map +1 -1
- package/src/lib/server/stock-hold.d.ts +9 -1
- package/src/lib/server/stock-hold.js +15 -7
- package/src/lib/server/stock-hold.js.map +1 -1
- package/src/lib/server.js +16 -0
- package/src/lib/server.js.map +1 -1
- package/src/lib/tenant-emails.js +161 -0
- package/src/lib/tenant-emails.js.map +1 -1
|
@@ -64,6 +64,11 @@ import { orderTaxEngineView } from "../../model/commerce-tax-engine.js";
|
|
|
64
64
|
quoteRef: typeof entry.quoteRef === 'string' ? entry.quoteRef : null
|
|
65
65
|
};
|
|
66
66
|
}),
|
|
67
|
+
// Store credit another plugin kept that paid part of the sale (AGL-3640):
|
|
68
|
+
// a rewards redemption online comes off the goods (`discount`), one at
|
|
69
|
+
// the register is one of its payments (`tender`). The provider reads its
|
|
70
|
+
// own `reference` back off `order.paid` and `order.refunded`.
|
|
71
|
+
credits: orderCreditsView(data),
|
|
67
72
|
// Money already handed back, for any reason. A chargeback lands here too,
|
|
68
73
|
// so `refundedCents > 0` does not by itself mean the merchant chose it.
|
|
69
74
|
refundedCents: Number((_data_refundedCents = data.refundedCents) != null ? _data_refundedCents : 0),
|
|
@@ -116,5 +121,35 @@ import { orderTaxEngineView } from "../../model/commerce-tax-engine.js";
|
|
|
116
121
|
created: (_serialize1 = serialize(data.createdAt)) != null ? _serialize1 : null
|
|
117
122
|
};
|
|
118
123
|
}
|
|
124
|
+
/** The plugin credits an order carries, online and at the register (AGL-3640). */ export function orderCreditsView(data) {
|
|
125
|
+
const online = (Array.isArray(data.credits) ? data.credits : []).filter((entry)=>entry && typeof entry.providerId === 'string').map((entry)=>{
|
|
126
|
+
var _entry_pluginId, _entry_reference, _entry_label, _entry_last4;
|
|
127
|
+
return {
|
|
128
|
+
providerId: String(entry.providerId),
|
|
129
|
+
pluginId: String((_entry_pluginId = entry.pluginId) != null ? _entry_pluginId : String(entry.providerId).split('.')[0]),
|
|
130
|
+
reference: String((_entry_reference = entry.reference) != null ? _entry_reference : ''),
|
|
131
|
+
label: String((_entry_label = entry.label) != null ? _entry_label : ''),
|
|
132
|
+
last4: String((_entry_last4 = entry.last4) != null ? _entry_last4 : ''),
|
|
133
|
+
amountCents: Math.max(0, Math.trunc(Number(entry.amountCents) || 0)),
|
|
134
|
+
appliedAs: entry.appliedAs === 'tender' ? 'tender' : 'discount'
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
const register = (Array.isArray(data.payments) ? data.payments : []).filter((payment)=>payment && payment.method === 'credit' && payment.status === 'succeeded' && typeof payment.creditProviderId === 'string').map((payment)=>{
|
|
138
|
+
var _payment_creditReference, _payment_creditLabel, _payment_last4;
|
|
139
|
+
return {
|
|
140
|
+
providerId: String(payment.creditProviderId),
|
|
141
|
+
pluginId: String(payment.creditProviderId).split('.')[0],
|
|
142
|
+
reference: String((_payment_creditReference = payment.creditReference) != null ? _payment_creditReference : ''),
|
|
143
|
+
label: String((_payment_creditLabel = payment.creditLabel) != null ? _payment_creditLabel : ''),
|
|
144
|
+
last4: String((_payment_last4 = payment.last4) != null ? _payment_last4 : ''),
|
|
145
|
+
amountCents: Math.max(0, Math.trunc(Number(payment.amountCents) || 0)),
|
|
146
|
+
appliedAs: 'tender'
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
return [
|
|
150
|
+
...online,
|
|
151
|
+
...register
|
|
152
|
+
].filter((credit)=>credit.reference && credit.amountCents > 0);
|
|
153
|
+
}
|
|
119
154
|
|
|
120
155
|
//# sourceMappingURL=order-view.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../libs/plugins/commerce/src/lib/server/api-v1/order-view.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { serialize } from '@aglyn/tenant-data-admin/server/api-v1-kit'\nimport { fulfillmentLineQuantities } from '../../model/order-fulfillment'\nimport { fulfillmentTrackingUrl } from '../../model/tracking-url'\nimport { orderTaxEngineView } from '../../model/commerce-tax-engine'\n\n/**\n * The public order shape from an order's data (AGL-3611): the same object the\n * API returns, so an order event and an outbound webhook carry exactly what\n * `GET /v1/sites/{id}/orders/{id}` would.\n */\nexport function orderViewFromData(id: string, data: Record<string, any>) {\n const totals = (data.totals ?? {}) as Record<string, unknown>\n const legacyTotal = Number(data.amountCents ?? NaN)\n const totalCents = Number.isFinite(Number(totals.totalCents))\n ? Number(totals.totalCents)\n : Number.isFinite(legacyTotal)\n ? legacyTotal\n : null\n const legacyFee = Number(data.feeCents ?? NaN)\n return {\n id,\n object: 'order',\n number: typeof data.number === 'number' ? data.number : null,\n status: (data.status as string) ?? null,\n channel: (data.channel as string) ?? 'online',\n currency: 'usd',\n customerEmail: data.customerEmail ?? null,\n customerName: data.customerName ?? null,\n lineItems: serialize(data.lineItems ?? []),\n totals: {\n itemsCents: Number(totals.itemsCents ?? 0),\n shippingCents: Number(totals.shippingCents ?? 0),\n taxCents: Number(totals.taxCents ?? 0),\n discountCents: Number(totals.discountCents ?? 0),\n totalCents,\n // The Connect application fee. NOT subtracted from `totalCents` — it is\n // Aglyn's cut of a total the shopper already paid in full, so a client\n // that nets it out of revenue would understate what it collected.\n feeCents: Number.isFinite(Number(totals.feeCents))\n ? Number(totals.feeCents)\n : Number.isFinite(legacyFee)\n ? legacyFee\n : 0,\n // Optional lines the buyer added at checkout (AGL-3635), inside\n // `totalCents` and outside `itemsCents`.\n extrasCents: Number(totals.extrasCents ?? 0) || 0,\n },\n // What those lines were and whose offer each was: the fact a plugin that\n // insures a parcel reads off `order.paid` to know it was bought.\n extras: (Array.isArray(data.extras) ? data.extras : [])\n .filter((entry: Record<string, unknown>) => entry && typeof entry.id === 'string')\n .map((entry: Record<string, unknown>) => ({\n id: String(entry.id),\n pluginId: String(entry.pluginId ?? ''),\n key: String(entry.key ?? ''),\n label: String(entry.label ?? ''),\n amountCents: Number(entry.amountCents ?? 0) || 0,\n quoteRef: typeof entry.quoteRef === 'string' ? entry.quoteRef : null,\n })),\n // Money already handed back, for any reason. A chargeback lands here too,\n // so `refundedCents > 0` does not by itself mean the merchant chose it.\n refundedCents: Number(data.refundedCents ?? 0),\n // Who the tax was charged under (AGL-3614): `stripe-automatic` tax is\n // Aglyn's to remit as marketplace facilitator and never reaches the\n // merchant's account, which a ledger posting the sale has to know. An\n // order from before the regime was recorded says `null`, never a guess.\n taxMode: typeof data.taxMode === 'string' && data.taxMode ? data.taxMode : null,\n // The merchant's own tax service (AGL-3631): which one priced the sale, or\n // that it was asked and the store's own rates were charged instead\n // (`status: 'fallback'`). `null` when no service was asked. The regime is\n // still `taxMode` — a service the merchant connected answers for tax the\n // merchant remits.\n taxEngine: orderTaxEngineView(data.taxEngine),\n disputed: Boolean(data.dispute),\n shippingAddress: serialize(data.shippingAddress) ?? null,\n couponCode: data.couponCode ?? null,\n // Shipment records — the half of fulfilment an integration can use\n // without a write (AGL-2460). `status` says an order is `fulfilled`; it\n // does not say which carrier took it or under what tracking number, so a\n // 3PL or accounting reconcile could see THAT an order shipped and never\n // WHICH shipment it was. The console's order dialog shows both, and an\n // order that has been shipped twice (a split shipment) is indistinguish-\n // able from one shipped once when only the status is published.\n //\n // `atMs` is a number of milliseconds, not a Firestore Timestamp, so\n // `serialize` passes it through untouched. It is republished as `at` in\n // ISO 8601 to match `created` and every other time this API emits: one\n // object publishing two time formats is a bug an integrator finds late,\n // in their own timezone conversion, and blames on their own code.\n fulfillments: (Array.isArray(data.fulfillments) ? data.fulfillments : []).map(\n (entry: Record<string, unknown>) => {\n const atMs = Number((entry ?? {}).atMs)\n return {\n id: (entry ?? {}).id ?? null,\n lineItemIds: Array.isArray((entry ?? {}).lineItemIds)\n ? (entry as { lineItemIds: unknown[] }).lineItemIds\n : [],\n // Units per line (AGL-3611); a fulfillment recorded before\n // quantities shipped every unit of the lines it names.\n lines: fulfillmentLineQuantities(\n { lineItems: Array.isArray(data.lineItems) ? data.lineItems : [] },\n (entry ?? {}) as never,\n ),\n status: (entry ?? {}).status === 'cancelled' ? 'cancelled' : 'active',\n carrier: (entry ?? {}).carrier ?? null,\n trackingNumber: (entry ?? {}).trackingNumber ?? null,\n trackingUrl: fulfillmentTrackingUrl((entry ?? {}) as never),\n labelUrl: (entry ?? {}).labelUrl ?? null,\n at: Number.isFinite(atMs) ? new Date(atMs).toISOString() : null,\n }\n },\n ),\n created: serialize(data.createdAt) ?? null,\n }\n}\n\n"],"names":["serialize","fulfillmentLineQuantities","fulfillmentTrackingUrl","orderTaxEngineView","orderViewFromData","id","data","totals","legacyTotal","Number","amountCents","NaN","totalCents","isFinite","legacyFee","feeCents","object","number","status","channel","currency","customerEmail","customerName","lineItems","itemsCents","shippingCents","taxCents","discountCents","extrasCents","extras","Array","isArray","filter","entry","map","String","pluginId","key","label","quoteRef","refundedCents","taxMode","taxEngine","disputed","Boolean","dispute","shippingAddress","couponCode","fulfillments","atMs","lineItemIds","lines","carrier","trackingNumber","trackingUrl","labelUrl","at","Date","toISOString","created","createdAt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/plugins/commerce/src/lib/server/api-v1/order-view.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { serialize } from '@aglyn/tenant-data-admin/server/api-v1-kit'\nimport { fulfillmentLineQuantities } from '../../model/order-fulfillment'\nimport { fulfillmentTrackingUrl } from '../../model/tracking-url'\nimport { orderTaxEngineView } from '../../model/commerce-tax-engine'\n\n/**\n * The public order shape from an order's data (AGL-3611): the same object the\n * API returns, so an order event and an outbound webhook carry exactly what\n * `GET /v1/sites/{id}/orders/{id}` would.\n */\nexport function orderViewFromData(id: string, data: Record<string, any>) {\n const totals = (data.totals ?? {}) as Record<string, unknown>\n const legacyTotal = Number(data.amountCents ?? NaN)\n const totalCents = Number.isFinite(Number(totals.totalCents))\n ? Number(totals.totalCents)\n : Number.isFinite(legacyTotal)\n ? legacyTotal\n : null\n const legacyFee = Number(data.feeCents ?? NaN)\n return {\n id,\n object: 'order',\n number: typeof data.number === 'number' ? data.number : null,\n status: (data.status as string) ?? null,\n channel: (data.channel as string) ?? 'online',\n currency: 'usd',\n customerEmail: data.customerEmail ?? null,\n customerName: data.customerName ?? null,\n lineItems: serialize(data.lineItems ?? []),\n totals: {\n itemsCents: Number(totals.itemsCents ?? 0),\n shippingCents: Number(totals.shippingCents ?? 0),\n taxCents: Number(totals.taxCents ?? 0),\n discountCents: Number(totals.discountCents ?? 0),\n totalCents,\n // The Connect application fee. NOT subtracted from `totalCents` — it is\n // Aglyn's cut of a total the shopper already paid in full, so a client\n // that nets it out of revenue would understate what it collected.\n feeCents: Number.isFinite(Number(totals.feeCents))\n ? Number(totals.feeCents)\n : Number.isFinite(legacyFee)\n ? legacyFee\n : 0,\n // Optional lines the buyer added at checkout (AGL-3635), inside\n // `totalCents` and outside `itemsCents`.\n extrasCents: Number(totals.extrasCents ?? 0) || 0,\n },\n // What those lines were and whose offer each was: the fact a plugin that\n // insures a parcel reads off `order.paid` to know it was bought.\n extras: (Array.isArray(data.extras) ? data.extras : [])\n .filter((entry: Record<string, unknown>) => entry && typeof entry.id === 'string')\n .map((entry: Record<string, unknown>) => ({\n id: String(entry.id),\n pluginId: String(entry.pluginId ?? ''),\n key: String(entry.key ?? ''),\n label: String(entry.label ?? ''),\n amountCents: Number(entry.amountCents ?? 0) || 0,\n quoteRef: typeof entry.quoteRef === 'string' ? entry.quoteRef : null,\n })),\n // Store credit another plugin kept that paid part of the sale (AGL-3640):\n // a rewards redemption online comes off the goods (`discount`), one at\n // the register is one of its payments (`tender`). The provider reads its\n // own `reference` back off `order.paid` and `order.refunded`.\n credits: orderCreditsView(data),\n // Money already handed back, for any reason. A chargeback lands here too,\n // so `refundedCents > 0` does not by itself mean the merchant chose it.\n refundedCents: Number(data.refundedCents ?? 0),\n // Who the tax was charged under (AGL-3614): `stripe-automatic` tax is\n // Aglyn's to remit as marketplace facilitator and never reaches the\n // merchant's account, which a ledger posting the sale has to know. An\n // order from before the regime was recorded says `null`, never a guess.\n taxMode: typeof data.taxMode === 'string' && data.taxMode ? data.taxMode : null,\n // The merchant's own tax service (AGL-3631): which one priced the sale, or\n // that it was asked and the store's own rates were charged instead\n // (`status: 'fallback'`). `null` when no service was asked. The regime is\n // still `taxMode` — a service the merchant connected answers for tax the\n // merchant remits.\n taxEngine: orderTaxEngineView(data.taxEngine),\n disputed: Boolean(data.dispute),\n shippingAddress: serialize(data.shippingAddress) ?? null,\n couponCode: data.couponCode ?? null,\n // Shipment records — the half of fulfilment an integration can use\n // without a write (AGL-2460). `status` says an order is `fulfilled`; it\n // does not say which carrier took it or under what tracking number, so a\n // 3PL or accounting reconcile could see THAT an order shipped and never\n // WHICH shipment it was. The console's order dialog shows both, and an\n // order that has been shipped twice (a split shipment) is indistinguish-\n // able from one shipped once when only the status is published.\n //\n // `atMs` is a number of milliseconds, not a Firestore Timestamp, so\n // `serialize` passes it through untouched. It is republished as `at` in\n // ISO 8601 to match `created` and every other time this API emits: one\n // object publishing two time formats is a bug an integrator finds late,\n // in their own timezone conversion, and blames on their own code.\n fulfillments: (Array.isArray(data.fulfillments) ? data.fulfillments : []).map(\n (entry: Record<string, unknown>) => {\n const atMs = Number((entry ?? {}).atMs)\n return {\n id: (entry ?? {}).id ?? null,\n lineItemIds: Array.isArray((entry ?? {}).lineItemIds)\n ? (entry as { lineItemIds: unknown[] }).lineItemIds\n : [],\n // Units per line (AGL-3611); a fulfillment recorded before\n // quantities shipped every unit of the lines it names.\n lines: fulfillmentLineQuantities(\n { lineItems: Array.isArray(data.lineItems) ? data.lineItems : [] },\n (entry ?? {}) as never,\n ),\n status: (entry ?? {}).status === 'cancelled' ? 'cancelled' : 'active',\n carrier: (entry ?? {}).carrier ?? null,\n trackingNumber: (entry ?? {}).trackingNumber ?? null,\n trackingUrl: fulfillmentTrackingUrl((entry ?? {}) as never),\n labelUrl: (entry ?? {}).labelUrl ?? null,\n at: Number.isFinite(atMs) ? new Date(atMs).toISOString() : null,\n }\n },\n ),\n created: serialize(data.createdAt) ?? null,\n }\n}\n\n/** The plugin credits an order carries, online and at the register (AGL-3640). */\nexport function orderCreditsView(data: Record<string, any>): Array<{\n providerId: string\n pluginId: string\n reference: string\n label: string\n last4: string\n amountCents: number\n appliedAs: 'discount' | 'tender'\n}> {\n const online = (Array.isArray(data.credits) ? data.credits : [])\n .filter((entry: Record<string, unknown>) => entry && typeof entry.providerId === 'string')\n .map((entry: Record<string, unknown>) => ({\n providerId: String(entry.providerId),\n pluginId: String(entry.pluginId ?? String(entry.providerId).split('.')[0]),\n reference: String(entry.reference ?? ''),\n label: String(entry.label ?? ''),\n last4: String(entry.last4 ?? ''),\n amountCents: Math.max(0, Math.trunc(Number(entry.amountCents) || 0)),\n appliedAs: entry.appliedAs === 'tender' ? ('tender' as const) : ('discount' as const),\n }))\n const register = (Array.isArray(data.payments) ? data.payments : [])\n .filter(\n (payment: Record<string, unknown>) =>\n payment &&\n payment.method === 'credit' &&\n payment.status === 'succeeded' &&\n typeof payment.creditProviderId === 'string',\n )\n .map((payment: Record<string, unknown>) => ({\n providerId: String(payment.creditProviderId),\n pluginId: String(payment.creditProviderId).split('.')[0],\n reference: String(payment.creditReference ?? ''),\n label: String(payment.creditLabel ?? ''),\n last4: String(payment.last4 ?? ''),\n amountCents: Math.max(0, Math.trunc(Number(payment.amountCents) || 0)),\n appliedAs: 'tender' as const,\n }))\n return [...online, ...register].filter((credit) => credit.reference && credit.amountCents > 0)\n}\n"],"names":["serialize","fulfillmentLineQuantities","fulfillmentTrackingUrl","orderTaxEngineView","orderViewFromData","id","data","totals","legacyTotal","Number","amountCents","NaN","totalCents","isFinite","legacyFee","feeCents","object","number","status","channel","currency","customerEmail","customerName","lineItems","itemsCents","shippingCents","taxCents","discountCents","extrasCents","extras","Array","isArray","filter","entry","map","String","pluginId","key","label","quoteRef","credits","orderCreditsView","refundedCents","taxMode","taxEngine","disputed","Boolean","dispute","shippingAddress","couponCode","fulfillments","atMs","lineItemIds","lines","carrier","trackingNumber","trackingUrl","labelUrl","at","Date","toISOString","created","createdAt","online","providerId","split","reference","last4","Math","max","trunc","appliedAs","register","payments","payment","method","creditProviderId","creditReference","creditLabel","credit"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,SAAS,QAAQ,6CAA4C;AACtE,SAASC,yBAAyB,QAAQ,mCAA+B;AACzE,SAASC,sBAAsB,QAAQ,8BAA0B;AACjE,SAASC,kBAAkB,QAAQ,qCAAiC;AAEpE;;;;CAIC,GACD,OAAO,SAASC,kBAAkBC,EAAU,EAAEC,IAAyB;QACrDA,cACWA,mBAMFA,gBAKdA,cACCA,eAEKA,qBACDA,oBACOA,iBAEAC,oBACGA,uBACLA,kBACKA,uBAYFA,qBAqBAD,qBAaLN,YACLM,kBAqCHN;IA1GX,MAAMO,UAAUD,eAAAA,KAAKC,MAAM,YAAXD,eAAe,CAAC;IAChC,MAAME,cAAcC,QAAOH,oBAAAA,KAAKI,WAAW,YAAhBJ,oBAAoBK;IAC/C,MAAMC,aAAaH,OAAOI,QAAQ,CAACJ,OAAOF,OAAOK,UAAU,KACvDH,OAAOF,OAAOK,UAAU,IACxBH,OAAOI,QAAQ,CAACL,eACdA,cACA;IACN,MAAMM,YAAYL,QAAOH,iBAAAA,KAAKS,QAAQ,YAAbT,iBAAiBK;IAC1C,OAAO;QACLN;QACAW,QAAQ;QACRC,QAAQ,OAAOX,KAAKW,MAAM,KAAK,WAAWX,KAAKW,MAAM,GAAG;QACxDC,MAAM,GAAGZ,eAAAA,KAAKY,MAAM,YAAXZ,eAA0B;QACnCa,OAAO,GAAGb,gBAAAA,KAAKa,OAAO,YAAZb,gBAA2B;QACrCc,UAAU;QACVC,aAAa,GAAEf,sBAAAA,KAAKe,aAAa,YAAlBf,sBAAsB;QACrCgB,YAAY,GAAEhB,qBAAAA,KAAKgB,YAAY,YAAjBhB,qBAAqB;QACnCiB,WAAWvB,WAAUM,kBAAAA,KAAKiB,SAAS,YAAdjB,kBAAkB,EAAE;QACzCC,QAAQ;YACNiB,YAAYf,QAAOF,qBAAAA,OAAOiB,UAAU,YAAjBjB,qBAAqB;YACxCkB,eAAehB,QAAOF,wBAAAA,OAAOkB,aAAa,YAApBlB,wBAAwB;YAC9CmB,UAAUjB,QAAOF,mBAAAA,OAAOmB,QAAQ,YAAfnB,mBAAmB;YACpCoB,eAAelB,QAAOF,wBAAAA,OAAOoB,aAAa,YAApBpB,wBAAwB;YAC9CK;YACA,wEAAwE;YACxE,uEAAuE;YACvE,kEAAkE;YAClEG,UAAUN,OAAOI,QAAQ,CAACJ,OAAOF,OAAOQ,QAAQ,KAC5CN,OAAOF,OAAOQ,QAAQ,IACtBN,OAAOI,QAAQ,CAACC,aACdA,YACA;YACN,gEAAgE;YAChE,yCAAyC;YACzCc,aAAanB,QAAOF,sBAAAA,OAAOqB,WAAW,YAAlBrB,sBAAsB,MAAM;QAClD;QACA,yEAAyE;QACzE,iEAAiE;QACjEsB,QAAQ,AAACC,CAAAA,MAAMC,OAAO,CAACzB,KAAKuB,MAAM,IAAIvB,KAAKuB,MAAM,GAAG,EAAE,AAAD,EAClDG,MAAM,CAAC,CAACC,QAAmCA,SAAS,OAAOA,MAAM5B,EAAE,KAAK,UACxE6B,GAAG,CAAC,CAACD;gBAEaA,iBACLA,YACEA,cACMA;mBALoB;gBACxC5B,IAAI8B,OAAOF,MAAM5B,EAAE;gBACnB+B,UAAUD,QAAOF,kBAAAA,MAAMG,QAAQ,YAAdH,kBAAkB;gBACnCI,KAAKF,QAAOF,aAAAA,MAAMI,GAAG,YAATJ,aAAa;gBACzBK,OAAOH,QAAOF,eAAAA,MAAMK,KAAK,YAAXL,eAAe;gBAC7BvB,aAAaD,QAAOwB,qBAAAA,MAAMvB,WAAW,YAAjBuB,qBAAqB,MAAM;gBAC/CM,UAAU,OAAON,MAAMM,QAAQ,KAAK,WAAWN,MAAMM,QAAQ,GAAG;YAClE;;QACF,0EAA0E;QAC1E,uEAAuE;QACvE,yEAAyE;QACzE,8DAA8D;QAC9DC,SAASC,iBAAiBnC;QAC1B,0EAA0E;QAC1E,wEAAwE;QACxEoC,eAAejC,QAAOH,sBAAAA,KAAKoC,aAAa,YAAlBpC,sBAAsB;QAC5C,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,wEAAwE;QACxEqC,SAAS,OAAOrC,KAAKqC,OAAO,KAAK,YAAYrC,KAAKqC,OAAO,GAAGrC,KAAKqC,OAAO,GAAG;QAC3E,2EAA2E;QAC3E,mEAAmE;QACnE,0EAA0E;QAC1E,yEAAyE;QACzE,mBAAmB;QACnBC,WAAWzC,mBAAmBG,KAAKsC,SAAS;QAC5CC,UAAUC,QAAQxC,KAAKyC,OAAO;QAC9BC,eAAe,GAAEhD,aAAAA,UAAUM,KAAK0C,eAAe,aAA9BhD,aAAmC;QACpDiD,UAAU,GAAE3C,mBAAAA,KAAK2C,UAAU,YAAf3C,mBAAmB;QAC/B,mEAAmE;QACnE,wEAAwE;QACxE,yEAAyE;QACzE,wEAAwE;QACxE,uEAAuE;QACvE,yEAAyE;QACzE,gEAAgE;QAChE,EAAE;QACF,oEAAoE;QACpE,wEAAwE;QACxE,uEAAuE;QACvE,wEAAwE;QACxE,kEAAkE;QAClE4C,cAAc,AAACpB,CAAAA,MAAMC,OAAO,CAACzB,KAAK4C,YAAY,IAAI5C,KAAK4C,YAAY,GAAG,EAAE,AAAD,EAAGhB,GAAG,CAC3E,CAACD;gBAGO,KAWK,UACO,iBAEN;YAhBZ,MAAMkB,OAAO1C,OAAO,CAACwB,gBAAAA,QAAS,CAAC,GAAGkB,IAAI;YACtC,OAAO;gBACL9C,EAAE,GAAE,MAAA,CAAC4B,gBAAAA,QAAS,CAAC,GAAG5B,EAAE,YAAhB,MAAoB;gBACxB+C,aAAatB,MAAMC,OAAO,CAAC,CAACE,gBAAAA,QAAS,CAAC,GAAGmB,WAAW,IAChD,AAACnB,MAAqCmB,WAAW,GACjD,EAAE;gBACN,2DAA2D;gBAC3D,uDAAuD;gBACvDC,OAAOpD,0BACL;oBAAEsB,WAAWO,MAAMC,OAAO,CAACzB,KAAKiB,SAAS,IAAIjB,KAAKiB,SAAS,GAAG,EAAE;gBAAC,GAChEU,gBAAAA,QAAS,CAAC;gBAEbf,QAAQ,CAACe,gBAAAA,QAAS,CAAC,GAAGf,MAAM,KAAK,cAAc,cAAc;gBAC7DoC,OAAO,GAAE,WAAA,CAACrB,gBAAAA,QAAS,CAAC,GAAGqB,OAAO,YAArB,WAAyB;gBAClCC,cAAc,GAAE,kBAAA,CAACtB,gBAAAA,QAAS,CAAC,GAAGsB,cAAc,YAA5B,kBAAgC;gBAChDC,aAAatD,uBAAwB+B,gBAAAA,QAAS,CAAC;gBAC/CwB,QAAQ,GAAE,YAAA,CAACxB,gBAAAA,QAAS,CAAC,GAAGwB,QAAQ,YAAtB,YAA0B;gBACpCC,IAAIjD,OAAOI,QAAQ,CAACsC,QAAQ,IAAIQ,KAAKR,MAAMS,WAAW,KAAK;YAC7D;QACF;QAEFC,OAAO,GAAE7D,cAAAA,UAAUM,KAAKwD,SAAS,aAAxB9D,cAA6B;IACxC;AACF;AAEA,gFAAgF,GAChF,OAAO,SAASyC,iBAAiBnC,IAAyB;IASxD,MAAMyD,SAAS,AAACjC,CAAAA,MAAMC,OAAO,CAACzB,KAAKkC,OAAO,IAAIlC,KAAKkC,OAAO,GAAG,EAAE,AAAD,EAC3DR,MAAM,CAAC,CAACC,QAAmCA,SAAS,OAAOA,MAAM+B,UAAU,KAAK,UAChF9B,GAAG,CAAC,CAACD;YAEaA,iBACCA,kBACJA,cACAA;eAL0B;YACxC+B,YAAY7B,OAAOF,MAAM+B,UAAU;YACnC5B,UAAUD,QAAOF,kBAAAA,MAAMG,QAAQ,YAAdH,kBAAkBE,OAAOF,MAAM+B,UAAU,EAAEC,KAAK,CAAC,IAAI,CAAC,EAAE;YACzEC,WAAW/B,QAAOF,mBAAAA,MAAMiC,SAAS,YAAfjC,mBAAmB;YACrCK,OAAOH,QAAOF,eAAAA,MAAMK,KAAK,YAAXL,eAAe;YAC7BkC,OAAOhC,QAAOF,eAAAA,MAAMkC,KAAK,YAAXlC,eAAe;YAC7BvB,aAAa0D,KAAKC,GAAG,CAAC,GAAGD,KAAKE,KAAK,CAAC7D,OAAOwB,MAAMvB,WAAW,KAAK;YACjE6D,WAAWtC,MAAMsC,SAAS,KAAK,WAAY,WAAsB;QACnE;;IACF,MAAMC,WAAW,AAAC1C,CAAAA,MAAMC,OAAO,CAACzB,KAAKmE,QAAQ,IAAInE,KAAKmE,QAAQ,GAAG,EAAE,AAAD,EAC/DzC,MAAM,CACL,CAAC0C,UACCA,WACAA,QAAQC,MAAM,KAAK,YACnBD,QAAQxD,MAAM,KAAK,eACnB,OAAOwD,QAAQE,gBAAgB,KAAK,UAEvC1C,GAAG,CAAC,CAACwC;YAGcA,0BACJA,sBACAA;eAL4B;YAC1CV,YAAY7B,OAAOuC,QAAQE,gBAAgB;YAC3CxC,UAAUD,OAAOuC,QAAQE,gBAAgB,EAAEX,KAAK,CAAC,IAAI,CAAC,EAAE;YACxDC,WAAW/B,QAAOuC,2BAAAA,QAAQG,eAAe,YAAvBH,2BAA2B;YAC7CpC,OAAOH,QAAOuC,uBAAAA,QAAQI,WAAW,YAAnBJ,uBAAuB;YACrCP,OAAOhC,QAAOuC,iBAAAA,QAAQP,KAAK,YAAbO,iBAAiB;YAC/BhE,aAAa0D,KAAKC,GAAG,CAAC,GAAGD,KAAKE,KAAK,CAAC7D,OAAOiE,QAAQhE,WAAW,KAAK;YACnE6D,WAAW;QACb;;IACF,OAAO;WAAIR;WAAWS;KAAS,CAACxC,MAAM,CAAC,CAAC+C,SAAWA,OAAOb,SAAS,IAAIa,OAAOrE,WAAW,GAAG;AAC9F"}
|