@sixtyninecommerce/admin 0.7.0 → 0.9.0

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 (161) hide show
  1. package/README.md +2445 -17
  2. package/dist/api-tokens/index.d.ts +15 -5
  3. package/dist/api-tokens/index.js +1 -0
  4. package/dist/apps/event-subscription.d.ts +59 -0
  5. package/dist/apps/event-subscription.js +32 -0
  6. package/dist/apps/hook-secret.d.ts +22 -0
  7. package/dist/apps/hook-secret.js +36 -0
  8. package/dist/apps/index.d.ts +54 -3
  9. package/dist/apps/index.js +17 -0
  10. package/dist/audit/index.d.ts +7 -0
  11. package/dist/auth/queries.d.ts +5 -1
  12. package/dist/auth/queries.js +6 -0
  13. package/dist/bulk/index.d.ts +323 -0
  14. package/dist/bulk/index.js +162 -0
  15. package/dist/catalog/assets.d.ts +147 -0
  16. package/dist/catalog/assets.js +164 -0
  17. package/dist/catalog/collections.d.ts +109 -0
  18. package/dist/catalog/collections.js +91 -0
  19. package/dist/catalog/facets.d.ts +103 -0
  20. package/dist/catalog/facets.js +100 -0
  21. package/dist/catalog/index.d.ts +115 -0
  22. package/dist/catalog/index.js +21 -0
  23. package/dist/catalog/options.d.ts +89 -0
  24. package/dist/catalog/options.js +88 -0
  25. package/dist/catalog/products-bulk.d.ts +21 -0
  26. package/dist/catalog/products-bulk.js +58 -0
  27. package/dist/catalog/products.d.ts +489 -0
  28. package/dist/catalog/products.js +365 -0
  29. package/dist/catalog/properties.d.ts +234 -0
  30. package/dist/catalog/properties.js +158 -0
  31. package/dist/catalog/types.d.ts +174 -0
  32. package/dist/catalog/types.js +141 -0
  33. package/dist/catalog/variants.d.ts +274 -0
  34. package/dist/catalog/variants.js +258 -0
  35. package/dist/catalog/visibility.d.ts +57 -0
  36. package/dist/catalog/visibility.js +59 -0
  37. package/dist/client.d.ts +171 -3
  38. package/dist/client.js +81 -12
  39. package/dist/compliance/index.d.ts +88 -0
  40. package/dist/compliance/index.js +88 -0
  41. package/dist/customer-data-redaction.d.ts +14 -0
  42. package/dist/customer-data-redaction.js +22 -0
  43. package/dist/customers/index.d.ts +428 -17
  44. package/dist/customers/index.js +322 -15
  45. package/dist/documents/index.d.ts +513 -16
  46. package/dist/documents/index.js +229 -3
  47. package/dist/events/index.d.ts +259 -0
  48. package/dist/events/index.js +147 -0
  49. package/dist/feeds/ai.d.ts +46 -0
  50. package/dist/feeds/ai.js +43 -0
  51. package/dist/feeds/categories.d.ts +50 -0
  52. package/dist/feeds/categories.js +56 -0
  53. package/dist/feeds/configs.d.ts +54 -0
  54. package/dist/feeds/configs.js +85 -0
  55. package/dist/feeds/identifier-fields.d.ts +25 -0
  56. package/dist/feeds/identifier-fields.js +29 -0
  57. package/dist/feeds/index.d.ts +54 -0
  58. package/dist/feeds/index.js +46 -0
  59. package/dist/feeds/preserve.d.ts +38 -0
  60. package/dist/feeds/preserve.js +74 -0
  61. package/dist/feeds/rules.d.ts +42 -0
  62. package/dist/feeds/rules.js +56 -0
  63. package/dist/feeds/types.d.ts +654 -0
  64. package/dist/feeds/types.js +135 -0
  65. package/dist/fulfillments/index.d.ts +360 -0
  66. package/dist/fulfillments/index.js +425 -0
  67. package/dist/heads/index.d.ts +60 -0
  68. package/dist/heads/index.js +45 -0
  69. package/dist/hooks/assignments.d.ts +90 -0
  70. package/dist/hooks/assignments.js +53 -0
  71. package/dist/hooks/index.d.ts +97 -0
  72. package/dist/hooks/index.js +76 -0
  73. package/dist/index.d.ts +84 -9
  74. package/dist/index.js +16 -1
  75. package/dist/jobs/bulk-action-run.d.ts +65 -0
  76. package/dist/jobs/bulk-action-run.js +70 -0
  77. package/dist/locations/index.d.ts +6 -2
  78. package/dist/meta/index.d.ts +32 -0
  79. package/dist/orders/commit-edit.d.ts +123 -0
  80. package/dist/orders/commit-edit.js +142 -0
  81. package/dist/orders/get.d.ts +722 -0
  82. package/dist/orders/get.js +530 -0
  83. package/dist/orders/index.d.ts +105 -20
  84. package/dist/orders/index.js +44 -0
  85. package/dist/orders/line-price-preview.d.ts +297 -0
  86. package/dist/orders/line-price-preview.js +50 -0
  87. package/dist/orders/manual-discounts.d.ts +132 -0
  88. package/dist/orders/manual-discounts.js +95 -0
  89. package/dist/orders/manual-pricing.d.ts +192 -0
  90. package/dist/orders/manual-pricing.js +72 -0
  91. package/dist/orders/order-entry.d.ts +566 -0
  92. package/dist/orders/order-entry.js +129 -0
  93. package/dist/orders/parcel-charge.d.ts +45 -0
  94. package/dist/orders/parcel-charge.js +55 -0
  95. package/dist/orders/plan-edit.d.ts +489 -0
  96. package/dist/orders/plan-edit.js +93 -0
  97. package/dist/orders/status.d.ts +235 -0
  98. package/dist/orders/status.js +96 -0
  99. package/dist/orders/surcharges.d.ts +75 -2
  100. package/dist/orders/surcharges.js +110 -4
  101. package/dist/payments/account-credit.d.ts +171 -0
  102. package/dist/payments/account-credit.js +107 -0
  103. package/dist/payments/index.d.ts +368 -2
  104. package/dist/payments/index.js +138 -0
  105. package/dist/platform/catalog.d.ts +148 -0
  106. package/dist/platform/catalog.js +74 -0
  107. package/dist/platform/entitlements.d.ts +111 -0
  108. package/dist/platform/entitlements.js +86 -0
  109. package/dist/platform/legal-entities.d.ts +139 -0
  110. package/dist/platform/legal-entities.js +126 -0
  111. package/dist/platform/legal-entity-numbering.d.ts +103 -0
  112. package/dist/platform/legal-entity-numbering.js +101 -0
  113. package/dist/platform/organization-membership.d.ts +80 -0
  114. package/dist/platform/organization-membership.js +71 -0
  115. package/dist/platform/organization-settings.d.ts +33 -0
  116. package/dist/platform/organization-settings.js +42 -0
  117. package/dist/platform/organization-sharing.d.ts +172 -0
  118. package/dist/platform/organization-sharing.js +120 -0
  119. package/dist/platform/organizations.d.ts +205 -0
  120. package/dist/platform/organizations.js +180 -0
  121. package/dist/platform/provision-store.d.ts +88 -8
  122. package/dist/platform/provision-store.js +12 -0
  123. package/dist/platform/reports.d.ts +46 -0
  124. package/dist/platform/reports.js +31 -0
  125. package/dist/platform/server-metrics.d.ts +58 -0
  126. package/dist/platform/server-metrics.js +11 -0
  127. package/dist/pos/index.d.ts +567 -0
  128. package/dist/pos/index.js +205 -0
  129. package/dist/pricing/index.d.ts +405 -0
  130. package/dist/pricing/index.js +351 -0
  131. package/dist/provenance/index.d.ts +93 -0
  132. package/dist/provenance/index.js +53 -0
  133. package/dist/reports/index.d.ts +199 -0
  134. package/dist/reports/index.js +154 -0
  135. package/dist/shipping/parcel-count-suggestion.d.ts +52 -0
  136. package/dist/shipping/parcel-count-suggestion.js +73 -0
  137. package/dist/shipping/parcel-rule.d.ts +48 -0
  138. package/dist/shipping/parcel-rule.js +91 -0
  139. package/dist/stock/index.d.ts +166 -0
  140. package/dist/stock/index.js +115 -0
  141. package/dist/stock/transfers.d.ts +520 -0
  142. package/dist/stock/transfers.js +437 -0
  143. package/dist/stored-value/index.d.ts +154 -0
  144. package/dist/stored-value/index.js +130 -0
  145. package/dist/tenant/capabilities.d.ts +10 -0
  146. package/dist/tenant/entitlements.d.ts +35 -0
  147. package/dist/tenant/entitlements.js +15 -0
  148. package/dist/tenant/field-groups.d.ts +64 -0
  149. package/dist/tenant/field-groups.js +34 -0
  150. package/dist/tenant/legal-entity.d.ts +32 -0
  151. package/dist/tenant/legal-entity.js +41 -0
  152. package/dist/tenant/notifications.d.ts +148 -0
  153. package/dist/tenant/notifications.js +79 -0
  154. package/dist/tenant/retention.d.ts +10 -4
  155. package/dist/tenant/settings-sources.d.ts +103 -0
  156. package/dist/tenant/settings-sources.js +92 -0
  157. package/dist/types.d.ts +86 -11
  158. package/dist/uploads/index.d.ts +11 -7
  159. package/dist/users/index.d.ts +104 -0
  160. package/dist/users/index.js +80 -0
  161. package/package.json +3 -2
@@ -0,0 +1,123 @@
1
+ import { type Transport } from '@sixtyninecommerce/core';
2
+ import type { Call } from '../types.js';
3
+ import type { OrderEditDiff, OrderEditPlan } from './plan-edit.js';
4
+ import type { OrderOverpaymentChoice } from './surcharges.js';
5
+ /** The order as a committed edit left it: what a head refreshes its view from. */
6
+ export interface OrderEditCommittedOrder {
7
+ id: string;
8
+ code: string;
9
+ /** The order's state: for an edit that raised a paid order's total online, `ArrangingAdditionalPayment`. */
10
+ state: string;
11
+ currencyCode: string;
12
+ /** Minor units. */
13
+ totalWithTax: number;
14
+ }
15
+ /** The refund an edit ended with. */
16
+ export interface OrderEditCommittedRefund {
17
+ id: string;
18
+ /**
19
+ * The payment provider's answer: `Pending` until a gateway confirms it, `Settled` for money
20
+ * returned by hand (an offline method). `Failed` is never answered here: a refusal throws.
21
+ */
22
+ state: string;
23
+ /** Minor units, as the refund row records it. */
24
+ total: number;
25
+ paymentId: string;
26
+ }
27
+ /** How the edit settled its plan's `overpayment`. */
28
+ export interface OrderEditOverpaymentSettlement {
29
+ choice: OrderOverpaymentChoice;
30
+ /** Minor units the choice settled: the plan's `overpayment.amount`. */
31
+ amount: number;
32
+ currencyCode: string;
33
+ /** For `ACCOUNT_CREDIT`: the receipts on the customer's account, one per payment it came from. */
34
+ unappliedCashIds: string[];
35
+ }
36
+ export interface OrderEditCommit {
37
+ order: OrderEditCommittedOrder;
38
+ /**
39
+ * The plan that was carried out, as `planEdit` answered it. A repeat under the same
40
+ * `idempotencyKey` answers the plan as it was, and the order and refund as they are now.
41
+ */
42
+ plan: OrderEditPlan;
43
+ /**
44
+ * The ONE refund the edit ended with, made last, or `null`: the plan's `refund`, or with
45
+ * `overpaymentChoice: 'REFUND'` its `overpayment.refundWhenChosen`.
46
+ */
47
+ refund: OrderEditCommittedRefund | null;
48
+ /** How the plan's `overpayment` was settled; `null` when it had none. */
49
+ overpayment: OrderEditOverpaymentSettlement | null;
50
+ }
51
+ export interface CommitOrderEditCall extends Call {
52
+ /** The `planHash` of the plan the merchant saw (`planEdit`). Required. */
53
+ expectedPlanHash: string;
54
+ /**
55
+ * One key per attempt to save, re-sent unchanged on a retry of THAT attempt. Pass your own:
56
+ * left out, one is made up (a UUIDv7) and returned as `idempotencyKey` on the result, but on a
57
+ * thrown error only as an untyped own property of the error. Never reuse a key for a
58
+ * different edit or a fresh attempt.
59
+ */
60
+ idempotencyKey?: string;
61
+ /**
62
+ * How the merchant settles the plan's `overpayment` (a surcharge lowered or removed on a paid
63
+ * order): `REFUND` returns it to the customer's payment in the same one refund as the plan's
64
+ * `refund`; `ACCOUNT_CREDIT` credits it to the customer's account first, and the plan's
65
+ * `refund` follows. Required when the plan has an `overpayment`; ignored when it has none.
66
+ * Part of the request: a retry under the same key re-sends the same choice.
67
+ */
68
+ overpaymentChoice?: OrderOverpaymentChoice;
69
+ }
70
+ /**
71
+ * Its own document on purpose: `commitOrderEdit` exists only on an engine with the order-edit
72
+ * commit, so on an older one this call alone fails validation and no other order call does.
73
+ */
74
+ export declare const COMMIT_ORDER_EDIT_MUTATION = "\n mutation CommitOrderEdit(\n $orderId: ID!\n $diff: OrderEditDiffInput!\n $expectedPlanHash: String!\n $idempotencyKey: String!\n $overpaymentChoice: OrderOverpaymentChoice\n ) {\n commitOrderEdit(\n orderId: $orderId\n diff: $diff\n expectedPlanHash: $expectedPlanHash\n idempotencyKey: $idempotencyKey\n overpaymentChoice: $overpaymentChoice\n ) {\n order {\n id\n code\n state\n currencyCode\n totalWithTax\n }\n plan {\n orderId\n planHash\n orderVersion\n steps {\n kind\n input\n moneyEffect\n }\n refund {\n paymentId\n amount\n }\n overpayment {\n amount\n currencyCode\n surchargeIds\n refund {\n available\n code\n message\n }\n accountCredit {\n available\n code\n message\n }\n refundWhenChosen {\n paymentId\n amount\n }\n }\n returnState\n blockers {\n code\n message\n details\n }\n notices {\n code\n message\n details\n }\n payment {\n collected\n reason\n method\n }\n preview {\n currencyCode\n subTotal\n subTotalWithTax\n shipping\n shippingWithTax\n surcharges\n surchargesWithTax\n total\n totalWithTax\n taxSummary {\n description\n taxRate\n taxBase\n taxTotal\n }\n totalWithTaxBefore\n }\n }\n refund {\n id\n state\n total\n paymentId\n }\n overpayment {\n choice\n amount\n currencyCode\n unappliedCashIds\n }\n }\n }\n";
75
+ export interface OrderCommitEditModule {
76
+ /**
77
+ * Carry out an edit of a placed order as its plan (`planEdit`) states it, once. Needs
78
+ * `UpdateOrder`, and an engine that serves `commitOrderEdit`.
79
+ *
80
+ * Hand it the SAME `diff` you planned and the plan's `planHash` as `expectedPlanHash`. The
81
+ * engine runs the plan again inside one transaction and keeps that run only when its hash is
82
+ * yours and it has no blockers; otherwise nothing of the edit is saved. The plan's refund, if
83
+ * it has one, is made LAST, after every other step, through the platform's refund guard.
84
+ *
85
+ * When the plan has an `overpayment` (a surcharge lowered or removed on a paid order), pass the
86
+ * merchant's `overpaymentChoice`: `REFUND` makes the plan's `overpayment.refundWhenChosen`
87
+ * (one refund of both parts); `ACCOUNT_CREDIT` credits the share to the customer's account,
88
+ * then makes the plan's `refund`.
89
+ *
90
+ * `idempotencyKey`: one per attempt to save. A retry of that attempt (a timeout, a dropped
91
+ * connection) re-sends it and gets the first answer back, with nothing done twice. Left out,
92
+ * one is made up and returned as `idempotencyKey` on the result and on a thrown error.
93
+ *
94
+ * Refusals, with nothing saved:
95
+ * - `ORDER_EDIT_PLAN_CONFLICT` (`ConflictError`, 409): the order changed since the plan (another
96
+ * change landed, a price or tax answer moved). Plan again, show the merchant the new totals,
97
+ * and save under a NEW key.
98
+ * - `ORDER_EDIT_BLOCKED` (`BusinessRuleError`, 422): the plan has blockers; `error.details`
99
+ * lists them, `code` = the blocker's code.
100
+ * - `ORDER_BUSY` (`ConflictError`, 409): another change of the order was being applied. Retry
101
+ * under the same key.
102
+ * - `ORDER_EDIT_OVERPAYMENT_CHOICE_REQUIRED` (`BusinessRuleError`, 422): the plan has an
103
+ * `overpayment` and no `overpaymentChoice` was given. Ask the merchant, then save under a
104
+ * NEW key (the choice is part of the request).
105
+ * - A closed option chosen anyway: its own refusal (`REFUND_EXCEEDS_PAYMENT`,
106
+ * `REFUND_METHOD_UNAVAILABLE`, `AR_ACCOUNT_IN_ERP`, `AR_LEDGER_NOT_ENABLED`, …), as the
107
+ * plan's option names it.
108
+ * - `IDEMPOTENCY_CONFLICT` (409): the key was used for another request.
109
+ * - `planEdit`'s refusals of the call, and the refund guard's `REFUND_*` when the refund was
110
+ * refused before money moved.
111
+ *
112
+ * `IDEMPOTENCY_OUTCOME_UNKNOWN` (`error.outcomeUnknown`): the refund reached the payment
113
+ * provider and its answer never came. The edit is NOT saved; the refund attempt is recorded
114
+ * and reserved on the order, and this key answers the same until the provider's answer is
115
+ * recorded (`admin.payments.reconcileRefund`), which frees it. Until then an edit that gives
116
+ * money back is blocked (`ORDER_OVERPAYMENT_REFUND_UNRECONCILED`). Then plan and save again:
117
+ * a refund recorded as made is not made a second time.
118
+ */
119
+ commitEdit(orderId: string, diff: OrderEditDiff, options: CommitOrderEditCall): Promise<OrderEditCommit & {
120
+ idempotencyKey: string;
121
+ }>;
122
+ }
123
+ export declare function createOrderCommitEditModule(transport: Transport): OrderCommitEditModule;
@@ -0,0 +1,142 @@
1
+ import { idempotencyKey as mintIdempotencyKey } from '@sixtyninecommerce/core';
2
+ /**
3
+ * Its own document on purpose: `commitOrderEdit` exists only on an engine with the order-edit
4
+ * commit, so on an older one this call alone fails validation and no other order call does.
5
+ */
6
+ export const COMMIT_ORDER_EDIT_MUTATION = /* GraphQL */ `
7
+ mutation CommitOrderEdit(
8
+ $orderId: ID!
9
+ $diff: OrderEditDiffInput!
10
+ $expectedPlanHash: String!
11
+ $idempotencyKey: String!
12
+ $overpaymentChoice: OrderOverpaymentChoice
13
+ ) {
14
+ commitOrderEdit(
15
+ orderId: $orderId
16
+ diff: $diff
17
+ expectedPlanHash: $expectedPlanHash
18
+ idempotencyKey: $idempotencyKey
19
+ overpaymentChoice: $overpaymentChoice
20
+ ) {
21
+ order {
22
+ id
23
+ code
24
+ state
25
+ currencyCode
26
+ totalWithTax
27
+ }
28
+ plan {
29
+ orderId
30
+ planHash
31
+ orderVersion
32
+ steps {
33
+ kind
34
+ input
35
+ moneyEffect
36
+ }
37
+ refund {
38
+ paymentId
39
+ amount
40
+ }
41
+ overpayment {
42
+ amount
43
+ currencyCode
44
+ surchargeIds
45
+ refund {
46
+ available
47
+ code
48
+ message
49
+ }
50
+ accountCredit {
51
+ available
52
+ code
53
+ message
54
+ }
55
+ refundWhenChosen {
56
+ paymentId
57
+ amount
58
+ }
59
+ }
60
+ returnState
61
+ blockers {
62
+ code
63
+ message
64
+ details
65
+ }
66
+ notices {
67
+ code
68
+ message
69
+ details
70
+ }
71
+ payment {
72
+ collected
73
+ reason
74
+ method
75
+ }
76
+ preview {
77
+ currencyCode
78
+ subTotal
79
+ subTotalWithTax
80
+ shipping
81
+ shippingWithTax
82
+ surcharges
83
+ surchargesWithTax
84
+ total
85
+ totalWithTax
86
+ taxSummary {
87
+ description
88
+ taxRate
89
+ taxBase
90
+ taxTotal
91
+ }
92
+ totalWithTaxBefore
93
+ }
94
+ }
95
+ refund {
96
+ id
97
+ state
98
+ total
99
+ paymentId
100
+ }
101
+ overpayment {
102
+ choice
103
+ amount
104
+ currencyCode
105
+ unappliedCashIds
106
+ }
107
+ }
108
+ }
109
+ `;
110
+ export function createOrderCommitEditModule(transport) {
111
+ return {
112
+ async commitEdit(orderId, diff, options) {
113
+ const key = options.idempotencyKey ?? mintIdempotencyKey();
114
+ try {
115
+ const data = await transport.graphql({
116
+ api: 'admin',
117
+ query: COMMIT_ORDER_EDIT_MUTATION,
118
+ // The diff goes out as given, never normalised (see `planEdit`): left out, `null` and
119
+ // a value are three different requests.
120
+ variables: {
121
+ orderId,
122
+ diff,
123
+ expectedPlanHash: options.expectedPlanHash,
124
+ idempotencyKey: key,
125
+ // Sent only when given: left out, the engine reads no choice.
126
+ ...(options.overpaymentChoice !== undefined
127
+ ? { overpaymentChoice: options.overpaymentChoice }
128
+ : {}),
129
+ },
130
+ }, { ...options, idempotencyKey: key });
131
+ return { ...data.commitOrderEdit, idempotencyKey: key };
132
+ }
133
+ catch (error) {
134
+ // The key the caller retries under, when it did not choose one.
135
+ if (error !== null && typeof error === 'object' && !('idempotencyKey' in error)) {
136
+ Object.defineProperty(error, 'idempotencyKey', { value: key, enumerable: true });
137
+ }
138
+ throw error;
139
+ }
140
+ },
141
+ };
142
+ }