@sixtyninecommerce/admin 0.10.0 → 0.12.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 (302) hide show
  1. package/README.md +5772 -118
  2. package/dist/auth/index.d.ts +7 -1
  3. package/dist/auth/index.js +8 -1
  4. package/dist/catalog/assets.d.ts +120 -8
  5. package/dist/catalog/assets.js +98 -12
  6. package/dist/catalog/collections.d.ts +279 -14
  7. package/dist/catalog/collections.js +246 -15
  8. package/dist/catalog/documents.d.ts +142 -0
  9. package/dist/catalog/documents.js +114 -0
  10. package/dist/catalog/index.d.ts +54 -6
  11. package/dist/catalog/index.js +10 -1
  12. package/dist/catalog/metadata.d.ts +244 -0
  13. package/dist/catalog/metadata.js +220 -0
  14. package/dist/catalog/products.d.ts +159 -19
  15. package/dist/catalog/products.js +88 -13
  16. package/dist/catalog/properties.d.ts +140 -14
  17. package/dist/catalog/properties.js +65 -1
  18. package/dist/catalog/recommendations.d.ts +288 -0
  19. package/dist/catalog/recommendations.js +237 -0
  20. package/dist/catalog/reviews.d.ts +381 -0
  21. package/dist/catalog/reviews.js +325 -0
  22. package/dist/catalog/types.d.ts +17 -1
  23. package/dist/catalog/types.js +10 -0
  24. package/dist/catalog/variant-find.d.ts +136 -0
  25. package/dist/catalog/variant-find.js +239 -0
  26. package/dist/catalog/variants.d.ts +293 -26
  27. package/dist/catalog/variants.js +164 -7
  28. package/dist/catalog/visibility.d.ts +38 -7
  29. package/dist/catalog/visibility.js +19 -1
  30. package/dist/client.d.ts +121 -9
  31. package/dist/client.js +53 -14
  32. package/dist/content/assets.d.ts +285 -0
  33. package/dist/content/assets.js +181 -0
  34. package/dist/content/forms.d.ts +332 -1
  35. package/dist/content/forms.js +140 -4
  36. package/dist/content/items.d.ts +292 -0
  37. package/dist/content/items.js +170 -0
  38. package/dist/content/menus.d.ts +254 -0
  39. package/dist/content/menus.js +70 -0
  40. package/dist/content/strings.d.ts +137 -0
  41. package/dist/content/strings.js +82 -0
  42. package/dist/content/types.d.ts +282 -0
  43. package/dist/content/types.js +100 -0
  44. package/dist/customers/age-verification.d.ts +66 -0
  45. package/dist/customers/age-verification.js +79 -0
  46. package/dist/customers/credit.d.ts +263 -0
  47. package/dist/customers/credit.js +244 -0
  48. package/dist/customers/delivery-preferences.d.ts +120 -0
  49. package/dist/customers/delivery-preferences.js +97 -0
  50. package/dist/customers/delivery-terms.d.ts +44 -0
  51. package/dist/customers/delivery-terms.js +32 -0
  52. package/dist/customers/groups.d.ts +207 -0
  53. package/dist/customers/groups.js +438 -0
  54. package/dist/customers/index.d.ts +462 -37
  55. package/dist/customers/index.js +317 -40
  56. package/dist/customers/invitation-status.d.ts +57 -0
  57. package/dist/customers/invitation-status.js +21 -0
  58. package/dist/customers/notes.d.ts +67 -0
  59. package/dist/customers/notes.js +51 -0
  60. package/dist/customers/notification-recipients.d.ts +97 -0
  61. package/dist/customers/notification-recipients.js +84 -0
  62. package/dist/customers/saved-lists.d.ts +42 -0
  63. package/dist/customers/saved-lists.js +61 -0
  64. package/dist/customers/vat.d.ts +83 -0
  65. package/dist/customers/vat.js +46 -0
  66. package/dist/customers/wire.d.ts +20 -0
  67. package/dist/customers/wire.js +35 -0
  68. package/dist/documents/ar.d.ts +307 -0
  69. package/dist/documents/ar.js +254 -0
  70. package/dist/documents/emails.d.ts +150 -0
  71. package/dist/documents/emails.js +220 -0
  72. package/dist/documents/index.d.ts +744 -21
  73. package/dist/documents/index.js +438 -24
  74. package/dist/documents/pdf.d.ts +2 -0
  75. package/dist/documents/pdf.js +11 -0
  76. package/dist/fulfillments/create.d.ts +167 -0
  77. package/dist/fulfillments/create.js +216 -0
  78. package/dist/fulfillments/index.d.ts +163 -11
  79. package/dist/fulfillments/index.js +135 -6
  80. package/dist/fulfillments/payment-policy.d.ts +64 -0
  81. package/dist/fulfillments/payment-policy.js +140 -0
  82. package/dist/fulfillments/warehouse.d.ts +724 -0
  83. package/dist/fulfillments/warehouse.js +914 -0
  84. package/dist/geo/index.d.ts +119 -0
  85. package/dist/geo/index.js +107 -0
  86. package/dist/index.d.ts +147 -39
  87. package/dist/index.js +51 -12
  88. package/dist/integrations/afas-actions.d.ts +234 -0
  89. package/dist/integrations/afas-actions.js +310 -0
  90. package/dist/integrations/afas-types.d.ts +483 -0
  91. package/dist/integrations/afas-types.js +5 -0
  92. package/dist/integrations/afas.d.ts +234 -0
  93. package/dist/integrations/afas.js +290 -0
  94. package/dist/integrations/connections.d.ts +103 -0
  95. package/dist/integrations/connections.js +55 -0
  96. package/dist/integrations/esp.d.ts +313 -0
  97. package/dist/integrations/esp.js +169 -0
  98. package/dist/integrations/exact-online-types.d.ts +965 -0
  99. package/dist/integrations/exact-online-types.js +6 -0
  100. package/dist/integrations/exact-online.d.ts +784 -0
  101. package/dist/integrations/exact-online.js +1089 -0
  102. package/dist/integrations/index.d.ts +44 -3
  103. package/dist/integrations/index.js +23 -3
  104. package/dist/integrations/pipeline-discoveries.d.ts +65 -0
  105. package/dist/integrations/pipeline-discoveries.js +65 -0
  106. package/dist/integrations/pipeline-keys.d.ts +13 -0
  107. package/dist/integrations/pipeline-keys.js +22 -0
  108. package/dist/integrations/pipeline-runs.d.ts +119 -0
  109. package/dist/integrations/pipeline-runs.js +87 -0
  110. package/dist/integrations/pipelines.d.ts +87 -15
  111. package/dist/integrations/pipelines.js +41 -22
  112. package/dist/integrations/price-import.d.ts +223 -0
  113. package/dist/integrations/price-import.js +124 -0
  114. package/dist/integrations/types.d.ts +367 -3
  115. package/dist/integrations/types.js +4 -3
  116. package/dist/locations/index.d.ts +66 -0
  117. package/dist/locations/index.js +31 -0
  118. package/dist/meta/index.d.ts +172 -0
  119. package/dist/metafields/index.d.ts +8 -1
  120. package/dist/metafields/index.js +10 -0
  121. package/dist/orders/cancel-with-money.d.ts +237 -0
  122. package/dist/orders/cancel-with-money.js +155 -0
  123. package/dist/orders/commit-edit.d.ts +23 -1
  124. package/dist/orders/commit-edit.js +19 -2
  125. package/dist/orders/deposit-policy.d.ts +3 -1
  126. package/dist/orders/drafts.d.ts +800 -0
  127. package/dist/orders/drafts.js +771 -0
  128. package/dist/orders/fields.d.ts +245 -0
  129. package/dist/orders/fields.js +188 -0
  130. package/dist/orders/get.d.ts +29 -19
  131. package/dist/orders/get.js +17 -8
  132. package/dist/orders/index.d.ts +66 -15
  133. package/dist/orders/index.js +25 -2
  134. package/dist/orders/lifecycle.d.ts +128 -0
  135. package/dist/orders/lifecycle.js +158 -0
  136. package/dist/orders/line-price-preview.d.ts +7 -2
  137. package/dist/orders/list.d.ts +243 -0
  138. package/dist/orders/list.js +487 -0
  139. package/dist/orders/manual-discounts.d.ts +13 -5
  140. package/dist/orders/manual-pricing.d.ts +5 -0
  141. package/dist/orders/money-view.d.ts +149 -0
  142. package/dist/orders/money-view.js +99 -0
  143. package/dist/orders/order-entry.d.ts +20 -7
  144. package/dist/orders/plan-edit.d.ts +34 -2
  145. package/dist/orders/plan-edit.js +112 -11
  146. package/dist/orders/settings.d.ts +201 -0
  147. package/dist/orders/settings.js +325 -0
  148. package/dist/orders/status.d.ts +159 -13
  149. package/dist/orders/status.js +21 -0
  150. package/dist/orders/surcharges.d.ts +20 -1
  151. package/dist/orders/surcharges.js +37 -11
  152. package/dist/payments/account-credit.d.ts +46 -0
  153. package/dist/payments/account-credit.js +42 -0
  154. package/dist/payments/ar.d.ts +292 -0
  155. package/dist/payments/ar.js +223 -0
  156. package/dist/payments/connected-account.d.ts +47 -0
  157. package/dist/payments/connected-account.js +61 -0
  158. package/dist/payments/credit-noted-fields.d.ts +19 -0
  159. package/dist/payments/credit-noted-fields.js +69 -0
  160. package/dist/payments/customer-consent.d.ts +30 -0
  161. package/dist/payments/customer-consent.js +49 -0
  162. package/dist/payments/index.d.ts +340 -19
  163. package/dist/payments/index.js +151 -1
  164. package/dist/payments/methods.d.ts +303 -8
  165. package/dist/payments/methods.js +337 -7
  166. package/dist/payments/mollie-methods.d.ts +159 -0
  167. package/dist/payments/mollie-methods.js +141 -0
  168. package/dist/payments/payment-links.d.ts +180 -0
  169. package/dist/payments/payment-links.js +97 -0
  170. package/dist/payments/provider-keys.d.ts +150 -0
  171. package/dist/payments/provider-keys.js +118 -0
  172. package/dist/payments/providers.d.ts +86 -11
  173. package/dist/payments/providers.js +29 -0
  174. package/dist/payments/requests.d.ts +147 -0
  175. package/dist/payments/requests.js +93 -0
  176. package/dist/payments/store-credit-fields.d.ts +15 -0
  177. package/dist/payments/store-credit-fields.js +51 -0
  178. package/dist/pickups/index.d.ts +106 -0
  179. package/dist/pickups/index.js +108 -0
  180. package/dist/platform/channels.d.ts +132 -0
  181. package/dist/platform/channels.js +128 -0
  182. package/dist/platform/email-gateways.d.ts +165 -0
  183. package/dist/platform/email-gateways.js +78 -0
  184. package/dist/platform/geo.d.ts +123 -0
  185. package/dist/platform/geo.js +144 -0
  186. package/dist/platform/tax.d.ts +162 -0
  187. package/dist/platform/tax.js +169 -0
  188. package/dist/pos/anomalies.d.ts +158 -0
  189. package/dist/pos/anomalies.js +64 -0
  190. package/dist/pos/assisted-selling.d.ts +79 -0
  191. package/dist/pos/assisted-selling.js +38 -0
  192. package/dist/pos/exchanges.d.ts +108 -0
  193. package/dist/pos/exchanges.js +22 -0
  194. package/dist/pos/gift-cards.d.ts +135 -0
  195. package/dist/pos/gift-cards.js +47 -0
  196. package/dist/pos/index.d.ts +2370 -58
  197. package/dist/pos/index.js +854 -7
  198. package/dist/pos/no-receipt.d.ts +94 -0
  199. package/dist/pos/no-receipt.js +25 -0
  200. package/dist/pos/offline-sales.d.ts +228 -0
  201. package/dist/pos/offline-sales.js +170 -0
  202. package/dist/pos/pay-by-link.d.ts +143 -0
  203. package/dist/pos/pay-by-link.js +57 -0
  204. package/dist/pos/quick-keys.d.ts +103 -0
  205. package/dist/pos/quick-keys.js +45 -0
  206. package/dist/pos/reports.d.ts +360 -0
  207. package/dist/pos/reports.js +62 -0
  208. package/dist/pos/returns.d.ts +244 -0
  209. package/dist/pos/returns.js +83 -0
  210. package/dist/pricing/bulk-coupons.d.ts +139 -0
  211. package/dist/pricing/bulk-coupons.js +112 -0
  212. package/dist/pricing/index.d.ts +174 -4
  213. package/dist/pricing/index.js +174 -1
  214. package/dist/pricing/price-lists.d.ts +606 -0
  215. package/dist/pricing/price-lists.js +600 -0
  216. package/dist/purchasing/alerts.d.ts +104 -0
  217. package/dist/purchasing/alerts.js +88 -0
  218. package/dist/purchasing/backorders.d.ts +61 -0
  219. package/dist/purchasing/backorders.js +92 -0
  220. package/dist/purchasing/cost.d.ts +110 -0
  221. package/dist/purchasing/cost.js +86 -0
  222. package/dist/purchasing/index.d.ts +54 -0
  223. package/dist/purchasing/index.js +24 -0
  224. package/dist/purchasing/links.d.ts +263 -0
  225. package/dist/purchasing/links.js +192 -0
  226. package/dist/purchasing/purchase-orders.d.ts +551 -0
  227. package/dist/purchasing/purchase-orders.js +491 -0
  228. package/dist/purchasing/receipts.d.ts +396 -0
  229. package/dist/purchasing/receipts.js +287 -0
  230. package/dist/purchasing/replenishment.d.ts +281 -0
  231. package/dist/purchasing/replenishment.js +240 -0
  232. package/dist/purchasing/returns.d.ts +273 -0
  233. package/dist/purchasing/returns.js +229 -0
  234. package/dist/purchasing/settings.d.ts +152 -0
  235. package/dist/purchasing/settings.js +181 -0
  236. package/dist/purchasing/suppliers.d.ts +476 -0
  237. package/dist/purchasing/suppliers.js +438 -0
  238. package/dist/quotes/index.d.ts +518 -0
  239. package/dist/quotes/index.js +439 -0
  240. package/dist/reports/index.d.ts +71 -8
  241. package/dist/reports/index.js +74 -11
  242. package/dist/returns/index.d.ts +675 -21
  243. package/dist/returns/index.js +756 -11
  244. package/dist/search/index.d.ts +76 -1
  245. package/dist/search/index.js +63 -0
  246. package/dist/seo/config.d.ts +128 -0
  247. package/dist/seo/config.js +95 -0
  248. package/dist/seo/redirects.d.ts +125 -0
  249. package/dist/seo/redirects.js +60 -1
  250. package/dist/seo/settings.d.ts +147 -0
  251. package/dist/seo/settings.js +209 -0
  252. package/dist/shipping/definitions.d.ts +29 -0
  253. package/dist/shipping/definitions.js +47 -0
  254. package/dist/shipping/fulfillment-profiles.d.ts +174 -0
  255. package/dist/shipping/fulfillment-profiles.js +104 -0
  256. package/dist/shipping/hendriks.d.ts +97 -0
  257. package/dist/shipping/hendriks.js +50 -0
  258. package/dist/shipping/index.d.ts +54 -0
  259. package/dist/shipping/index.js +27 -0
  260. package/dist/shipping/methods.d.ts +205 -0
  261. package/dist/shipping/methods.js +240 -0
  262. package/dist/shipping/myparcel.d.ts +668 -0
  263. package/dist/shipping/myparcel.js +466 -0
  264. package/dist/shipping/parcel-count-suggestion.d.ts +2 -0
  265. package/dist/shipping/parcel-rule.d.ts +6 -5
  266. package/dist/shipping/parcel-rule.js +21 -23
  267. package/dist/shipping/rate-tables.d.ts +324 -0
  268. package/dist/shipping/rate-tables.js +390 -0
  269. package/dist/shipping/ship-to-countries.d.ts +75 -0
  270. package/dist/shipping/ship-to-countries.js +47 -0
  271. package/dist/stock/by-location.d.ts +86 -0
  272. package/dist/stock/by-location.js +94 -0
  273. package/dist/stock/index.d.ts +18 -4
  274. package/dist/stock/index.js +7 -0
  275. package/dist/stock/locations.d.ts +144 -0
  276. package/dist/stock/locations.js +168 -0
  277. package/dist/stock/settings.d.ts +106 -0
  278. package/dist/stock/settings.js +103 -0
  279. package/dist/stock/transfers.d.ts +386 -52
  280. package/dist/stock/transfers.js +222 -17
  281. package/dist/stored-value/index.d.ts +312 -11
  282. package/dist/stored-value/index.js +223 -4
  283. package/dist/subscriptions/index.d.ts +682 -0
  284. package/dist/subscriptions/index.js +815 -0
  285. package/dist/tax/display-policy.d.ts +105 -0
  286. package/dist/tax/display-policy.js +84 -0
  287. package/dist/tax/index.d.ts +79 -1
  288. package/dist/tax/index.js +52 -0
  289. package/dist/tenant/email-style.d.ts +102 -0
  290. package/dist/tenant/email-style.js +72 -0
  291. package/dist/tenant/email-templates.d.ts +287 -0
  292. package/dist/tenant/email-templates.js +271 -0
  293. package/dist/tenant/notifications.d.ts +23 -17
  294. package/dist/tenant/settings-sources.d.ts +1 -1
  295. package/dist/tenant/time-zone.d.ts +17 -0
  296. package/dist/tenant/time-zone.js +11 -0
  297. package/dist/types.d.ts +50 -3
  298. package/dist/users/index.d.ts +3 -0
  299. package/dist/users/index.js +2 -0
  300. package/dist/users/warehouses.d.ts +50 -0
  301. package/dist/users/warehouses.js +51 -0
  302. package/package.json +2 -2
@@ -0,0 +1,11 @@
1
+ export const STORE_TIME_ZONE_QUERY = /* GraphQL */ `
2
+ query StoreTimeZone {
3
+ storeTimeZone
4
+ }
5
+ `;
6
+ export function createTenantTimeZoneReader(transport) {
7
+ return async (call) => {
8
+ const data = await transport.graphql({ api: 'admin', query: STORE_TIME_ZONE_QUERY }, call);
9
+ return data.storeTimeZone;
10
+ };
11
+ }
package/dist/types.d.ts CHANGED
@@ -5,15 +5,22 @@ export interface Call {
5
5
  * Sent as `Idempotency-Key` on a REST write. On a GraphQL one it is sent as
6
6
  * an ARGUMENT — the Admin API has no header for it — and only the mutations
7
7
  * that declare one act on it. Today those are the money mutations
8
- * `payments.record`, `orders.park`, `orders.settle` and all three
8
+ * `payments.record`, `orders.park`, `orders.settle`, `orders.cancelWithMoney` and all three
9
9
  * `orders.surcharges.*`, plus `payments.providers.completeOnboarding`,
10
10
  * `payments.providers.terminals.provision`, `stock.adjust`,
11
11
  * `hooks.assignments.assign`, `customers.upsertByExternalRef`,
12
12
  * `customers.groups.replaceMembers`, `pricing.coupons.apply` / `remove`,
13
- * `orders.setLinePrices` / `setOneTimeDiscounts`,
13
+ * `orders.setLinePrices` / `setOneTimeDiscounts`, `orders.correctFulfillmentQuantities`,
14
14
  * `pos.sale.applyCouponCode` / `removeCouponCode`, `storedValue.issue` / `adjust` /
15
15
  * `redeem`, `apps.releaseFieldGroup`, `catalog.products.bulk` and `orders.bulk` (both mint
16
- * one when omitted), and `catalog.products.save`. Repeating one under the same key
16
+ * one when omitted), `catalog.products.save`, `orders.drafts.saveAddresses`,
17
+ * `orders.drafts.place` and `orders.drafts.cloneFrom` (both mint one when omitted),
18
+ * `fulfillments.create` and `fulfillments.warehouse.append` (both mint one when omitted),
19
+ * `quotes.convertToOrder` (mints one when omitted), `documents.issuePartialCreditNote` (mints
20
+ * one when omitted), and the
21
+ * accounts-receivable money doors `payments.ar.recordPayment` / `recordPrepaidDrawdown` /
22
+ * `directDebit.collectNow` and `documents.ar.issueCreditNote` / `generateInvoice` /
23
+ * `generateStatement`, and `returns.settle`. Repeating one under the same key
17
24
  * returns the first call's result instead of moving the money again; a
18
25
  * DIFFERENT request under the same key is refused with a `ConflictError`
19
26
  * (409) coded `IDEMPOTENCY_CONFLICT`, and a repeat that arrives while the
@@ -54,6 +61,46 @@ export interface ListOptions extends Call {
54
61
  after?: string;
55
62
  limit?: number;
56
63
  }
64
+ /**
65
+ * One argument a configurable operation takes, as the engine publishes its definition: a
66
+ * payment handler's `apiKey`, an eligibility checker's `customerGroupIds`.
67
+ */
68
+ export interface ConfigArgDefinition {
69
+ name: string;
70
+ /** The value's type as the engine names it: `string`, `int`, `float`, `boolean`, `datetime`, `ID`. */
71
+ type: string;
72
+ /** A list is sent as one JSON-encoded string, like every argument value. */
73
+ list: boolean;
74
+ /**
75
+ * NOT the enforced rule, in either direction. The engine publishes `true` for every argument
76
+ * whose declaration merely omits the flag, including ones nothing enforces, and can publish
77
+ * `false` for one a write then refuses. Never gate a form or a request on it: send what you
78
+ * have and read the engine's refusal.
79
+ */
80
+ required: boolean;
81
+ /** The declared default as JSON, or `null` when the argument has none. */
82
+ defaultValue: unknown;
83
+ /** In the language of the request; `null` when the declaration gives none. */
84
+ label: string | null;
85
+ /** In the language of the request; `null` when the declaration gives none. */
86
+ description: string | null;
87
+ /**
88
+ * How a form should render the argument, as declared: `{ component: 'password-form-input' }`
89
+ * marks a credential, `options` a fixed choice. `null` when nothing is declared.
90
+ */
91
+ ui: Record<string, unknown> | null;
92
+ }
93
+ /**
94
+ * A configurable operation the engine has registered (a payment handler, an eligibility
95
+ * checker, a shipping calculator, a promotion action): the `code` a stored operation names, and
96
+ * the arguments it takes.
97
+ */
98
+ export interface ConfigurableOperationDefinition {
99
+ code: string;
100
+ /** What the operation does, in the language of the request. */
101
+ description: string;
102
+ args: ConfigArgDefinition[];
103
+ }
57
104
  /** One channel the signed-in principal holds a role on. */
58
105
  export interface MeChannel {
59
106
  id: string;
@@ -1,5 +1,6 @@
1
1
  import type { Transport } from '@sixtyninecommerce/core';
2
2
  import type { Call } from '../types.js';
3
+ import { type UserWarehousesModule } from './warehouses.js';
3
4
  /**
4
5
  * What `users.ensure` did. A newer engine may name an outcome this SDK does not know yet; it is
5
6
  * passed through, lower-cased, rather than dropped.
@@ -98,6 +99,8 @@ export interface UsersModule {
98
99
  * Someone outside the active store answers `ENTITY_NOT_FOUND`.
99
100
  */
100
101
  update(input: UpdateUserInput, call?: Call): Promise<StaffUser>;
102
+ /** Which of the store's warehouses a staff member works in. See {@link UserWarehousesModule}. */
103
+ warehouses: UserWarehousesModule;
101
104
  }
102
105
  export declare const ENSURE_ADMINISTRATOR_MUTATION = "\n mutation EnsureAdministrator($input: EnsureAdministratorInput!) {\n ensureAdministrator(input: $input) {\n outcome\n invitationSent\n administrator { \n id\n firstName\n lastName\n emailAddress\n user {\n roles {\n id\n code\n }\n }\n }\n }\n }\n";
103
106
  export declare const UPDATE_ADMINISTRATOR_MUTATION = "\n mutation UpdateStaffUser($input: UpdateAdministratorInput!) {\n updateAdministrator(input: $input) { \n id\n firstName\n lastName\n emailAddress\n user {\n roles {\n id\n code\n }\n }\n }\n }\n";
@@ -1,3 +1,4 @@
1
+ import { createUserWarehousesModule } from './warehouses.js';
1
2
  const STAFF_USER_FIELDS = /* GraphQL */ `
2
3
  id
3
4
  firstName
@@ -76,5 +77,6 @@ export function createUsersModule(transport) {
76
77
  }, call);
77
78
  return staffUserOf(data.updateAdministrator);
78
79
  },
80
+ warehouses: createUserWarehousesModule(transport),
79
81
  };
80
82
  }
@@ -0,0 +1,50 @@
1
+ import { type Transport } from '@sixtyninecommerce/core';
2
+ import type { Call } from '../types.js';
3
+ /** A warehouse (stock location) a staff member is assigned to, by name. */
4
+ export interface AssignedWarehouse {
5
+ id: string;
6
+ name: string;
7
+ }
8
+ /**
9
+ * `admin.users.warehouses`: which of the store's warehouses a staff member works in (spec §12.3,
10
+ * Settings → Team → a user → Warehouses). A user on the Warehouse role sees and ships only from
11
+ * the warehouses assigned here, and from none without any; a user who manages orders sees every
12
+ * warehouse whatever is assigned.
13
+ *
14
+ * Needs the store's `warehouse` entitlement: without it every method is refused
15
+ * `WAREHOUSE_NOT_ENABLED` (`BusinessRuleError`). Needs `ManageWarehouseAssignments` or
16
+ * `UpdateAdministrator` (either one, so no `@permission` tag: the tag can only say "all of
17
+ * these").
18
+ *
19
+ * Per store: the assignments of the store the client is on, never another store's. A staff member
20
+ * who holds no role in this store, a deleted one and a malformed id are refused alike, as a
21
+ * `ValidationError` naming the user.
22
+ *
23
+ * A credential restricted with `locationIds` (an API token or app) manages only those
24
+ * locations: `get` lists only the assigned warehouses among them, and `set` keeps the person's
25
+ * assignments at the store's other warehouses as they are.
26
+ */
27
+ export interface UserWarehousesModule {
28
+ /**
29
+ * The warehouses the staff member is assigned to in this store, by name.
30
+ *
31
+ * @effect read
32
+ */
33
+ get(administratorId: string, options?: Call): Promise<AssignedWarehouse[]>;
34
+ /**
35
+ * Assign exactly these warehouses (an empty list: none), replacing the person's assignments in
36
+ * this store, and answer them. Repeating the call changes nothing.
37
+ *
38
+ * Refused before anything is written:
39
+ * - a warehouse that is not one of this store's (deleted, another store's, a malformed id) as a
40
+ * `ValidationError` naming it; for a credential restricted with `locationIds`, any id outside
41
+ * its locations is `LOCATION_OUT_OF_SCOPE` (`BusinessRuleError`) instead;
42
+ * - more than 200 warehouses (`ValidationError`).
43
+ *
44
+ * @effect write
45
+ */
46
+ set(administratorId: string, stockLocationIds: readonly string[], options?: Call): Promise<AssignedWarehouse[]>;
47
+ }
48
+ export declare const ADMINISTRATOR_WAREHOUSES_QUERY = "\n query AdministratorWarehouses($administratorId: ID!) {\n administratorWarehouses(administratorId: $administratorId) {\n id\n name\n }\n }\n";
49
+ export declare const SET_ADMINISTRATOR_WAREHOUSES_MUTATION = "\n mutation SetAdministratorWarehouses($administratorId: ID!, $stockLocationIds: [ID!]!) {\n setAdministratorWarehouses(administratorId: $administratorId, stockLocationIds: $stockLocationIds) {\n id\n name\n }\n }\n";
50
+ export declare function createUserWarehousesModule(transport: Transport): UserWarehousesModule;
@@ -0,0 +1,51 @@
1
+ import { ValidationError } from '@sixtyninecommerce/core';
2
+ import { fieldOf } from '../catalog/types.js';
3
+ export const ADMINISTRATOR_WAREHOUSES_QUERY = /* GraphQL */ `
4
+ query AdministratorWarehouses($administratorId: ID!) {
5
+ administratorWarehouses(administratorId: $administratorId) {
6
+ id
7
+ name
8
+ }
9
+ }
10
+ `;
11
+ export const SET_ADMINISTRATOR_WAREHOUSES_MUTATION = /* GraphQL */ `
12
+ mutation SetAdministratorWarehouses($administratorId: ID!, $stockLocationIds: [ID!]!) {
13
+ setAdministratorWarehouses(administratorId: $administratorId, stockLocationIds: $stockLocationIds) {
14
+ id
15
+ name
16
+ }
17
+ }
18
+ `;
19
+ const invalidInput = (message) => new ValidationError({
20
+ code: 'USER_WAREHOUSES_INPUT_INVALID',
21
+ message,
22
+ status: 400,
23
+ service: 'vendure',
24
+ });
25
+ function assertAdministratorId(administratorId) {
26
+ if (typeof administratorId !== 'string' || administratorId.trim() === '') {
27
+ throw invalidInput('administratorId must be a staff member id.');
28
+ }
29
+ }
30
+ const toWarehouse = (wire) => ({
31
+ id: wire.id,
32
+ name: wire.name,
33
+ });
34
+ export function createUserWarehousesModule(transport) {
35
+ return {
36
+ async get(administratorId, options) {
37
+ assertAdministratorId(administratorId);
38
+ const rows = await fieldOf(transport, ADMINISTRATOR_WAREHOUSES_QUERY, 'administratorWarehouses', { administratorId }, options);
39
+ return rows.map(toWarehouse);
40
+ },
41
+ async set(administratorId, stockLocationIds, options) {
42
+ assertAdministratorId(administratorId);
43
+ if (!Array.isArray(stockLocationIds) ||
44
+ !stockLocationIds.every((id) => typeof id === 'string' && id.trim() !== '')) {
45
+ throw invalidInput('stockLocationIds must be a list of stock location ids.');
46
+ }
47
+ const rows = await fieldOf(transport, SET_ADMINISTRATOR_WAREHOUSES_MUTATION, 'setAdministratorWarehouses', { administratorId, stockLocationIds: [...stockLocationIds] }, options);
48
+ return rows.map(toWarehouse);
49
+ },
50
+ };
51
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sixtyninecommerce/admin",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "Back-office SDK for sixtynine-commerce: every capability of the platform as a method",
5
5
  "homepage": "https://github.com/SIXTYNINE-digital/sixtynine-commerce-engine/tree/main/packages/admin-client#readme",
6
6
  "repository": {
@@ -33,7 +33,7 @@
33
33
  "access": "public"
34
34
  },
35
35
  "dependencies": {
36
- "@sixtyninecommerce/core": "^0.5.0"
36
+ "@sixtyninecommerce/core": "^0.7.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "22.19.7",