@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
@@ -0,0 +1,288 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /** The register's currency, and so the shop's: US dollars. */
18
+ export declare const POS_HARDWARE_CURRENCY = "usd";
19
+ /**
20
+ * Where the shop ships. Stripe's Terminal hardware shop ships to many
21
+ * countries, but the register sells in US dollars only and the readers a
22
+ * merchant buys here are registered to a US Location, so the shop is US-only
23
+ * (Stripe itself excludes the US Virgin Islands, military addresses and
24
+ * P.O. boxes).
25
+ */
26
+ export declare const POS_HARDWARE_SHIP_COUNTRIES: readonly string[];
27
+ /** The most of one item, and the most units, a single order may hold. */
28
+ export declare const POS_HARDWARE_MAX_PER_LINE = 10;
29
+ export declare const POS_HARDWARE_MAX_UNITS = 20;
30
+ /** The env names the shop reads, named once for the reader and the docs. */
31
+ export declare const POS_HARDWARE_ENV: {
32
+ /** `true` releases the shop. Absent or anything else keeps it hidden. */
33
+ readonly enabled: "POS_HARDWARE_SHOP_ENABLED";
34
+ /** JSON `{ "<sku>": <Stripe's price in cents> }`. */
35
+ readonly prices: "POS_HARDWARE_PRICES";
36
+ /**
37
+ * The markup on Stripe's price, an integer in basis points (100 = 1%).
38
+ * Absent, {@link POS_HARDWARE_DEFAULT_MARKUP_BPS} applies.
39
+ */
40
+ readonly markupBps: "POS_HARDWARE_MARKUP_BPS";
41
+ /** JSON `{ "standard" | "express" | "priority": <cents> }`. */
42
+ readonly shipping: "POS_HARDWARE_SHIPPING";
43
+ /** `true` turns Stripe automatic tax on for hardware checkouts. */
44
+ readonly automaticTax: "POS_HARDWARE_AUTOMATIC_TAX";
45
+ };
46
+ /**
47
+ * The markup when the deployment sets none: 3000 basis points on Stripe's
48
+ * price. The business sets it; this is the one place the default lives, and
49
+ * `POS_HARDWARE_MARKUP_BPS` overrides it.
50
+ */
51
+ export declare const POS_HARDWARE_DEFAULT_MARKUP_BPS = 3000;
52
+ export type PosHardwareSkuId = 'stripe-reader-s710' | 'stripe-reader-s700' | 'stripe-reader-m2' | 'bbpos-wisepos-e' | 'stripe-reader-s700-dock' | 'bbpos-wisepos-e-dock' | 'stripe-reader-m2-mount';
53
+ export interface PosHardwareSku {
54
+ id: PosHardwareSkuId;
55
+ kind: 'reader' | 'accessory';
56
+ /** What Stripe's hardware shop calls it, for the staff member ordering it. */
57
+ stripeProductName: string;
58
+ /** What the merchant sees. */
59
+ displayName: string;
60
+ /** One line on what it is for. */
61
+ use: string;
62
+ }
63
+ /**
64
+ * Every item the shop can sell. An item is offered only once its Stripe
65
+ * price is configured, so one Stripe stops selling disappears by deleting its
66
+ * price, not by a release.
67
+ */
68
+ export declare const POS_HARDWARE_SKUS: readonly PosHardwareSku[];
69
+ export declare function posHardwareSku(id: string): PosHardwareSku | null;
70
+ export type PosHardwareShippingMethod = 'standard' | 'express' | 'priority';
71
+ export declare const POS_HARDWARE_SHIPPING_LABELS: Record<PosHardwareShippingMethod, string>;
72
+ export declare function isPosHardwareShippingMethod(value: unknown): value is PosHardwareShippingMethod;
73
+ /** The shop's configuration, once every figure it needs is present and sane. */
74
+ export interface PosHardwareConfig {
75
+ /** Stripe's price for each configured item, in cents. */
76
+ costs: Partial<Record<PosHardwareSkuId, number>>;
77
+ markupBps: number;
78
+ shipping: Array<{
79
+ method: PosHardwareShippingMethod;
80
+ cents: number;
81
+ }>;
82
+ automaticTax: boolean;
83
+ }
84
+ /**
85
+ * The shop's configuration from the environment, or `null` while the shop is
86
+ * hidden: not released, no reader priced, a malformed markup, or no shipping
87
+ * figure. An ABSENT markup is the default
88
+ * ({@link POS_HARDWARE_DEFAULT_MARKUP_BPS}), so a deployment can never sell
89
+ * at cost by forgetting a variable; `0` is a valid, explicit choice to sell
90
+ * at Stripe's price. A markup that is set but unreadable hides the shop
91
+ * rather than guessing.
92
+ *
93
+ * Unknown item ids and malformed figures are dropped one by one rather than
94
+ * failing the whole shop, so a typo in one price hides that one item.
95
+ */
96
+ export declare function parsePosHardwareConfig(env: Record<string, string | undefined>): PosHardwareConfig | null;
97
+ /**
98
+ * What the merchant pays for one item: Stripe's price plus the markup,
99
+ * rounded half up to the cent, in integer math throughout.
100
+ *
101
+ * `cost + round(cost × bps / 10 000)`. The markup is basis points ON COST, so
102
+ * a 50% markup is `5000` and a price at which half of it is profit (a 50%
103
+ * margin) is `10000`. Whichever the business means, it is this one number.
104
+ */
105
+ export declare function posHardwareUnitCents(costCents: number, markupBps: number): number;
106
+ /** An item as the shop offers it: the merchant's price, never Stripe's. */
107
+ export interface PosHardwareOffer {
108
+ sku: PosHardwareSkuId;
109
+ kind: PosHardwareSku['kind'];
110
+ name: string;
111
+ use: string;
112
+ unitCents: number;
113
+ }
114
+ /** The items on offer, readers first, in catalog order. */
115
+ export declare function posHardwareOffers(config: PosHardwareConfig): PosHardwareOffer[];
116
+ export interface PosHardwareLine {
117
+ sku: PosHardwareSkuId;
118
+ name: string;
119
+ quantity: number;
120
+ unitCents: number;
121
+ lineCents: number;
122
+ }
123
+ export type PosHardwareCartResult = {
124
+ ok: true;
125
+ lines: PosHardwareLine[];
126
+ subtotalCents: number;
127
+ } | {
128
+ ok: false;
129
+ error: string;
130
+ };
131
+ /**
132
+ * A merchant's basket priced on the SERVER: every item must be on offer, each
133
+ * quantity a whole number from 1 to {@link POS_HARDWARE_MAX_PER_LINE}, and
134
+ * the order at most {@link POS_HARDWARE_MAX_UNITS} units. A repeated item is
135
+ * folded into one line. Prices come from the config, never the request.
136
+ */
137
+ export declare function pricePosHardwareCart(config: PosHardwareConfig, requested: unknown): PosHardwareCartResult;
138
+ export declare const POS_HARDWARE_METADATA_TYPE = "pos-hardware-order";
139
+ export declare function encodePosHardwareLines(lines: readonly PosHardwareLine[]): string;
140
+ export declare function decodePosHardwareLines(encoded: unknown): PosHardwareLine[] | null;
141
+ export type PosHardwareOrderStatus = 'paid' | 'ordered' | 'shipped' | 'delivered' | 'registered' | 'canceled' | 'refunded';
142
+ export declare const POS_HARDWARE_ORDER_STATUSES: readonly PosHardwareOrderStatus[];
143
+ export declare function isPosHardwareOrderStatus(value: unknown): value is PosHardwareOrderStatus;
144
+ /** What the merchant reads on the Hardware card. */
145
+ export declare const POS_HARDWARE_STATUS_LABELS: Record<PosHardwareOrderStatus, string>;
146
+ /** What staff read on the orders page: where the order is in fulfillment. */
147
+ export declare const POS_HARDWARE_STAFF_STATUS_LABELS: Record<PosHardwareOrderStatus, string>;
148
+ export declare function nextPosHardwareStatus(status: PosHardwareOrderStatus): PosHardwareOrderStatus | null;
149
+ /**
150
+ * Whether the order may still be canceled or refunded in full: only before it
151
+ * ships. Once a parcel is on its way the money comes back through a return of
152
+ * the hardware, which is a separate process this phase does not automate.
153
+ */
154
+ export declare function posHardwareRefundable(status: PosHardwareOrderStatus): boolean;
155
+ export interface PosHardwareAddress {
156
+ line1: string;
157
+ line2?: string;
158
+ city: string;
159
+ state?: string;
160
+ postalCode: string;
161
+ country: string;
162
+ }
163
+ /**
164
+ * What sales tax is sourced by: where the order shipped, without the street
165
+ * or the person. An erasure keeps this much of the address (see
166
+ * {@link posHardwareBuyerErasedPatch}) and the retained sale record holds
167
+ * nothing finer ({@link PosHardwareSaleRecord}).
168
+ */
169
+ export interface PosHardwareTaxRegion {
170
+ country: string;
171
+ state: string | null;
172
+ postalCode: string | null;
173
+ }
174
+ export interface PosHardwareTracking {
175
+ carrier: string;
176
+ number: string;
177
+ url: string | null;
178
+ }
179
+ /** `orgs/{orgId}/hardwareOrders/{orderId}`, written only by the server. */
180
+ export interface PosHardwareOrder {
181
+ orgId: string;
182
+ /** The site whose POS settings the order was placed from. */
183
+ hostId: string;
184
+ /** The member who started the checkout; `null` once their account is erased. */
185
+ createdBy: string | null;
186
+ /** Where the order emails go: the address entered at checkout. */
187
+ contactEmail: string | null;
188
+ lines: PosHardwareLine[];
189
+ subtotalCents: number;
190
+ shipping: {
191
+ method: PosHardwareShippingMethod;
192
+ label: string;
193
+ cents: number;
194
+ name: string | null;
195
+ phone: string | null;
196
+ address: PosHardwareAddress | null;
197
+ /**
198
+ * Set when the buyer's account is erased, in place of `address`: the part
199
+ * of it sales tax is sourced by.
200
+ */
201
+ taxRegion?: PosHardwareTaxRegion | null;
202
+ };
203
+ taxCents: number;
204
+ totalCents: number;
205
+ currency: string;
206
+ stripeCheckoutSessionId: string;
207
+ stripePaymentIntentId: string | null;
208
+ /** Stripe's hardware order id, recorded by staff (phase 2 sets it itself). */
209
+ stripeHardwareOrderId: string | null;
210
+ tracking: PosHardwareTracking | null;
211
+ status: PosHardwareOrderStatus;
212
+ livemode: boolean;
213
+ createdAtMs: number;
214
+ updatedAtMs: number;
215
+ paidAtMs: number;
216
+ orderedAtMs?: number;
217
+ shippedAtMs?: number;
218
+ deliveredAtMs?: number;
219
+ registeredAtMs?: number;
220
+ canceledAtMs?: number;
221
+ refundedAtMs?: number;
222
+ refundId?: string | null;
223
+ /** The cents Stripe reported refunding. */
224
+ refundedCents?: number;
225
+ /** When the buyer's account was erased and their details taken off the order. */
226
+ buyerErasedAtMs?: number;
227
+ }
228
+ /** The timestamp field each status stamps when it is reached. */
229
+ export declare const POS_HARDWARE_STATUS_STAMP: Record<PosHardwareOrderStatus, keyof PosHardwareOrder>;
230
+ /** The Hardware card's anchor: Checkout returns to it and the emails link at it. */
231
+ export declare const POS_HARDWARE_ANCHOR = "pos-hardware";
232
+ /** The collection under `orgs/{orgId}`, named once. */
233
+ export declare const POS_HARDWARE_ORDERS_COLLECTION = "hardwareOrders";
234
+ /** The top-level collection of retained hardware sale records. */
235
+ export declare const POS_HARDWARE_SALES_COLLECTION = "posHardwareSales";
236
+ /** `posHardwareSales/{orderId}`: an order with every personal detail left out. */
237
+ export interface PosHardwareSaleRecord {
238
+ orderId: string;
239
+ /** The workspace that bought it, by id; the record outlives the workspace. */
240
+ orgId: string;
241
+ lines: Array<Pick<PosHardwareLine, 'sku' | 'name' | 'quantity' | 'unitCents' | 'lineCents'>>;
242
+ subtotalCents: number;
243
+ shippingMethod: PosHardwareShippingMethod;
244
+ shippingCents: number;
245
+ taxCents: number;
246
+ totalCents: number;
247
+ currency: string;
248
+ /** The sales tax sourcing input: country, state and postal code, never the street. */
249
+ shipTo: PosHardwareTaxRegion | null;
250
+ stripeCheckoutSessionId: string | null;
251
+ stripePaymentIntentId: string | null;
252
+ stripeHardwareOrderId: string | null;
253
+ refundId: string | null;
254
+ refundedCents: number | null;
255
+ status: PosHardwareOrderStatus;
256
+ livemode: boolean;
257
+ createdAtMs: number;
258
+ updatedAtMs: number;
259
+ paidAtMs: number | null;
260
+ orderedAtMs: number | null;
261
+ shippedAtMs: number | null;
262
+ deliveredAtMs: number | null;
263
+ registeredAtMs: number | null;
264
+ canceledAtMs: number | null;
265
+ refundedAtMs: number | null;
266
+ }
267
+ /** The tax region of an order: its address cut down, or what an erasure left. */
268
+ export declare function posHardwareTaxRegion(order: Pick<PosHardwareOrder, 'shipping'>): PosHardwareTaxRegion | null;
269
+ /**
270
+ * The retained sale record of an order, as it stands. Every field is picked
271
+ * by name, so a field added to the order later reaches the record only when
272
+ * someone decides it should.
273
+ */
274
+ export declare function posHardwareSaleRecord(orderId: string, order: PosHardwareOrder): PosHardwareSaleRecord;
275
+ /**
276
+ * What an account erasure does to an order the person placed (AGL-4038): the
277
+ * workspace keeps the order and every amount on it; the buyer comes off it —
278
+ * who started it, the email, the name, the phone, the street and the
279
+ * tracking, which names the parcel to a carrier who would say where it went.
280
+ * The country, state and postal code stay, because sales tax is sourced by
281
+ * them. Deterministic but for the stamp, and an order already erased no
282
+ * longer answers to the person's uid, so a second run finds nothing.
283
+ */
284
+ export declare function posHardwareBuyerErasedPatch(order: Pick<PosHardwareOrder, 'shipping'>, now: number): Record<string, unknown>;
285
+ /** An order id: `hw_` and twenty hex characters. */
286
+ export declare const POS_HARDWARE_ORDER_ID: RegExp;
287
+ /** Dollars and cents for the card and the emails. */
288
+ export declare function formatPosHardwareCents(cents: number): string;