@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,104 @@
1
+ import { assertDeleted } from '../catalog/types.js';
2
+ const PROFILE_FIELDS = /* GraphQL */ `
3
+ id
4
+ code
5
+ name
6
+ enabled
7
+ stockLocationId
8
+ defaultHandlerCode
9
+ shippingMethodId
10
+ minOrder
11
+ isDefault
12
+ createdAt
13
+ updatedAt
14
+ `;
15
+ const NOTIFICATION_FIELDS = /* GraphQL */ `
16
+ id
17
+ handlerCode
18
+ enabled
19
+ emails
20
+ createdAt
21
+ updatedAt
22
+ `;
23
+ export const FULFILLMENT_PROFILES_QUERY = /* GraphQL */ `
24
+ query FulfillmentProfiles {
25
+ fulfillmentProfiles { ${PROFILE_FIELDS} }
26
+ }
27
+ `;
28
+ export const FULFILLMENT_PROFILE_QUERY = /* GraphQL */ `
29
+ query FulfillmentProfile($id: ID!) {
30
+ fulfillmentProfile(id: $id) { ${PROFILE_FIELDS} }
31
+ }
32
+ `;
33
+ export const CREATE_FULFILLMENT_PROFILE_MUTATION = /* GraphQL */ `
34
+ mutation CreateFulfillmentProfile($input: CreateFulfillmentProfileInput!) {
35
+ createFulfillmentProfile(input: $input) { ${PROFILE_FIELDS} }
36
+ }
37
+ `;
38
+ export const UPDATE_FULFILLMENT_PROFILE_MUTATION = /* GraphQL */ `
39
+ mutation UpdateFulfillmentProfile($input: UpdateFulfillmentProfileInput!) {
40
+ updateFulfillmentProfile(input: $input) { ${PROFILE_FIELDS} }
41
+ }
42
+ `;
43
+ export const DELETE_FULFILLMENT_PROFILE_MUTATION = /* GraphQL */ `
44
+ mutation DeleteFulfillmentProfile($id: ID!) {
45
+ deleteFulfillmentProfile(id: $id) { result message }
46
+ }
47
+ `;
48
+ export const SET_DEFAULT_FULFILLMENT_PROFILE_MUTATION = /* GraphQL */ `
49
+ mutation SetDefaultFulfillmentProfile($id: ID!) {
50
+ setDefaultFulfillmentProfile(id: $id) { ${PROFILE_FIELDS} }
51
+ }
52
+ `;
53
+ export const FULFILLMENT_HANDLER_NOTIFICATIONS_QUERY = /* GraphQL */ `
54
+ query FulfillmentHandlerNotifications {
55
+ fulfillmentHandlerNotifications { ${NOTIFICATION_FIELDS} }
56
+ }
57
+ `;
58
+ export const SET_FULFILLMENT_HANDLER_NOTIFICATION_MUTATION = /* GraphQL */ `
59
+ mutation SetFulfillmentHandlerNotification($input: SetFulfillmentHandlerNotificationInput!) {
60
+ setFulfillmentHandlerNotification(input: $input) { ${NOTIFICATION_FIELDS} }
61
+ }
62
+ `;
63
+ export function createFulfillmentProfilesModule(transport) {
64
+ const call = async (query, variables, options) => transport.graphql({ api: 'admin', query, variables }, options);
65
+ return {
66
+ async list(options) {
67
+ const data = await call(FULFILLMENT_PROFILES_QUERY, undefined, options);
68
+ return data.fulfillmentProfiles;
69
+ },
70
+ async get(id, options) {
71
+ const data = await call(FULFILLMENT_PROFILE_QUERY, { id }, options);
72
+ return data.fulfillmentProfile ?? null;
73
+ },
74
+ async create(input, options) {
75
+ const data = await call(CREATE_FULFILLMENT_PROFILE_MUTATION, { input }, options);
76
+ return data.createFulfillmentProfile;
77
+ },
78
+ async update(id, input, options) {
79
+ const data = await call(UPDATE_FULFILLMENT_PROFILE_MUTATION,
80
+ // The id goes last: an `id` key smuggled into the patch cannot redirect the write.
81
+ { input: { ...input, id } }, options);
82
+ return data.updateFulfillmentProfile;
83
+ },
84
+ async delete(id, options) {
85
+ const data = await call(DELETE_FULFILLMENT_PROFILE_MUTATION, { id }, options);
86
+ // The engine refuses by throwing today; a NOT_DELETED answer must still never pass as done.
87
+ assertDeleted('FULFILLMENT_PROFILE_NOT_DELETED', [data.deleteFulfillmentProfile]);
88
+ },
89
+ async setDefault(id, options) {
90
+ const data = await call(SET_DEFAULT_FULFILLMENT_PROFILE_MUTATION, { id }, options);
91
+ return data.setDefaultFulfillmentProfile;
92
+ },
93
+ handlerNotifications: {
94
+ async list(options) {
95
+ const data = await call(FULFILLMENT_HANDLER_NOTIFICATIONS_QUERY, undefined, options);
96
+ return data.fulfillmentHandlerNotifications;
97
+ },
98
+ async set(input, options) {
99
+ const data = await call(SET_FULFILLMENT_HANDLER_NOTIFICATION_MUTATION, { input }, options);
100
+ return data.setFulfillmentHandlerNotification;
101
+ },
102
+ },
103
+ };
104
+ }
@@ -0,0 +1,97 @@
1
+ import type { Transport } from '@sixtyninecommerce/core';
2
+ import type { Call } from '../types.js';
3
+ /** How the order reference sent to C.J. Hendriks is prefixed. */
4
+ export type HendriksWirePrefixMode = 'year' | 'custom';
5
+ /** A store's C.J. Hendriks 3PL settings: one record per store. */
6
+ export interface HendriksConfig {
7
+ id: string;
8
+ channelId: string;
9
+ /** Gates every Hendriks export of the store. */
10
+ enabled: boolean;
11
+ /** The plugins-service export pipeline that sends the orders; `null` is not linked. */
12
+ pipelineId: string | null;
13
+ /** `year` prefixes the current UTC year; `custom` prefixes {@link wirePrefixDigits}. */
14
+ wirePrefixMode: HendriksWirePrefixMode;
15
+ /** 1 to 4 digits without a leading zero. Only read in `custom` mode; `null` in `year` mode. */
16
+ wirePrefixDigits: string | null;
17
+ /**
18
+ * Refuse to export an order the source platform already sent to its own fulfillment
19
+ * provider. On by default: while a migrated shop is still live both systems feed the same
20
+ * warehouse, and neither can spot the other's reference, so the goods would ship twice.
21
+ */
22
+ blockSourceFulfilledOrders: boolean;
23
+ /** ISO-8601, UTC. */
24
+ createdAt: string;
25
+ /** ISO-8601, UTC. */
26
+ updatedAt: string;
27
+ }
28
+ /**
29
+ * A PATCH: a key left out keeps the stored value. The custom-prefix rule is judged on the
30
+ * RESULTING settings, so switching to `custom` needs `wirePrefixDigits` in the same call unless
31
+ * valid digits are already stored.
32
+ */
33
+ export interface UpdateHendriksConfigInput {
34
+ enabled?: boolean;
35
+ /** `null` unlinks the pipeline. */
36
+ pipelineId?: string | null;
37
+ wirePrefixMode?: HendriksWirePrefixMode;
38
+ /** Cleared by the engine whenever the resulting mode is `year`. */
39
+ wirePrefixDigits?: string | null;
40
+ blockSourceFulfilledOrders?: boolean;
41
+ }
42
+ /**
43
+ * The C.J. Hendriks 3PL settings of the store the client is scoped to
44
+ * (`admin.shipping.hendriks.config`). There is no channel argument: a SuperAdmin head configures
45
+ * ANOTHER store with `admin.withTenant({ scope: { kind: 'channel', code } })`, or a per-call
46
+ * `tenant`.
47
+ */
48
+ export interface HendriksConfigModule {
49
+ /**
50
+ * The store's settings, or `null` when it never saved any. Needs `ReadSettings`, and is
51
+ * answered for a store without the Hendriks plugin too (a head reads it to decide whether to
52
+ * show the integration).
53
+ *
54
+ * @effect read
55
+ * @permission ReadSettings
56
+ */
57
+ get(options?: Call): Promise<HendriksConfig | null>;
58
+ /**
59
+ * Save the settings; the first call creates the record (`enabled` off, `year` prefix,
60
+ * `blockSourceFulfilledOrders` on, unless given). Needs `UpdateSettings`.
61
+ *
62
+ * Refused, with nothing saved:
63
+ * - `HENDRIKS_CONFIG_INVALID` (`ValidationError`, 400): `custom` mode without 1 to 4 digits not
64
+ * starting with 0. `details[]` names each field (`wirePrefixDigits`, `wirePrefixMode`), so a
65
+ * form can put the reason on it;
66
+ * - `PLUGIN_ACCESS_DENIED` (`PermissionDeniedError`, 403): the store does not hold the
67
+ * Hendriks plugin. An ordinary caller only: the engine never refuses a SuperAdmin on this
68
+ * ground, so a SuperAdmin head that must know reads `tenant.entitlements()` on that store;
69
+ * - `ORGANIZATION_WORKSPACE_NOT_A_STORE` (`BusinessRuleError`, 422): switching the export on,
70
+ * or linking a pipeline, in an organization's workspace.
71
+ *
72
+ * `pipelineId` is not checked against the store's pipelines; an export through a pipeline
73
+ * that does not exist fails when it runs.
74
+ *
75
+ * @effect write
76
+ * @permission UpdateSettings
77
+ */
78
+ update(input: UpdateHendriksConfigInput, options?: Call): Promise<HendriksConfig>;
79
+ /**
80
+ * Delete the store's settings record. Every Hendriks export of the store is refused until
81
+ * settings are saved again, and the prefix and pipeline link are gone with it. `true` when a
82
+ * record was deleted, `false` when the store had none. Needs `UpdateSettings`; allowed for a
83
+ * store that no longer holds the plugin, so it can always remove its connection.
84
+ *
85
+ * @effect destructive
86
+ * @permission UpdateSettings
87
+ */
88
+ delete(options?: Call): Promise<boolean>;
89
+ }
90
+ /** `admin.shipping.hendriks`: the C.J. Hendriks 3PL integration of the store. */
91
+ export interface HendriksModule {
92
+ config: HendriksConfigModule;
93
+ }
94
+ export declare const HENDRIKS_CONFIG_QUERY = "\n query HendriksConfig {\n hendriksConfig { \n id\n channelId\n enabled\n pipelineId\n wirePrefixMode\n wirePrefixDigits\n blockSourceFulfilledOrders\n createdAt\n updatedAt\n }\n }\n";
95
+ export declare const UPDATE_HENDRIKS_CONFIG_MUTATION = "\n mutation UpdateHendriksConfig($input: UpdateHendriksConfigInput!) {\n updateHendriksConfig(input: $input) { \n id\n channelId\n enabled\n pipelineId\n wirePrefixMode\n wirePrefixDigits\n blockSourceFulfilledOrders\n createdAt\n updatedAt\n }\n }\n";
96
+ export declare const DELETE_HENDRIKS_CONFIG_MUTATION = "\n mutation DeleteHendriksConfig {\n deleteHendriksConfig\n }\n";
97
+ export declare function createHendriksModule(transport: Transport): HendriksModule;
@@ -0,0 +1,50 @@
1
+ const CONFIG_FIELDS = /* GraphQL */ `
2
+ id
3
+ channelId
4
+ enabled
5
+ pipelineId
6
+ wirePrefixMode
7
+ wirePrefixDigits
8
+ blockSourceFulfilledOrders
9
+ createdAt
10
+ updatedAt
11
+ `;
12
+ export const HENDRIKS_CONFIG_QUERY = /* GraphQL */ `
13
+ query HendriksConfig {
14
+ hendriksConfig { ${CONFIG_FIELDS} }
15
+ }
16
+ `;
17
+ export const UPDATE_HENDRIKS_CONFIG_MUTATION = /* GraphQL */ `
18
+ mutation UpdateHendriksConfig($input: UpdateHendriksConfigInput!) {
19
+ updateHendriksConfig(input: $input) { ${CONFIG_FIELDS} }
20
+ }
21
+ `;
22
+ export const DELETE_HENDRIKS_CONFIG_MUTATION = /* GraphQL */ `
23
+ mutation DeleteHendriksConfig {
24
+ deleteHendriksConfig
25
+ }
26
+ `;
27
+ export function createHendriksModule(transport) {
28
+ return {
29
+ config: {
30
+ async get(options) {
31
+ const data = await transport.graphql({ api: 'admin', query: HENDRIKS_CONFIG_QUERY }, options);
32
+ return data.hendriksConfig ?? null;
33
+ },
34
+ async update(input, options) {
35
+ const data = await transport.graphql({
36
+ api: 'admin',
37
+ query: UPDATE_HENDRIKS_CONFIG_MUTATION,
38
+ // Sent as given: a key left out stays off the wire (the engine reads an absent
39
+ // key as "keep"), and the engine names anything it refuses.
40
+ variables: { input },
41
+ }, options);
42
+ return data.updateHendriksConfig;
43
+ },
44
+ async delete(options) {
45
+ const data = await transport.graphql({ api: 'admin', query: DELETE_HENDRIKS_CONFIG_MUTATION }, options);
46
+ return data.deleteHendriksConfig === true;
47
+ },
48
+ },
49
+ };
50
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Shipping (headless spec §9.2 `shipping`): everything about getting a store's orders to its
3
+ * customers. Each member lives in a file of its own and is only assembled here, so a branch
4
+ * that adds one (shipping methods, rate tables, a carrier) adds a file and one line.
5
+ */
6
+ import type { Transport } from '@sixtyninecommerce/core';
7
+ import { type ShippingDefinitionsModule } from './definitions.js';
8
+ import { type FulfillmentProfilesModule } from './fulfillment-profiles.js';
9
+ import { type HendriksModule } from './hendriks.js';
10
+ import { type ShippingMethodsModule } from './methods.js';
11
+ import { type MyparcelModule } from './myparcel.js';
12
+ import { type ParcelCountSuggestionMethod } from './parcel-count-suggestion.js';
13
+ import { type ParcelRuleModule } from './parcel-rule.js';
14
+ import { type RateTablesModule } from './rate-tables.js';
15
+ import { type ShipToCountriesModule } from './ship-to-countries.js';
16
+ /** `admin.shipping` (spec §9.2 `shipping`). Always the store the client is scoped to. */
17
+ export interface ShippingModule {
18
+ /** The store's shipping methods: what checkout offers and what each charges. */
19
+ methods: ShippingMethodsModule;
20
+ /** What a shipping method's calculator, checker and fulfillment handler may be. */
21
+ definitions: ShippingDefinitionsModule;
22
+ /**
23
+ * The weight-zone rate tables a `weight-zone-calculator` method prices with: per table its
24
+ * zones (postal-code ranges or countries) and per zone its weight tiers' prices.
25
+ */
26
+ rateTables: RateTablesModule;
27
+ /** How the store counts parcels for extra-parcel shipping charges. */
28
+ parcelRule: ParcelRuleModule;
29
+ /**
30
+ * How many parcels the store's rule gives a set of variant + quantity items.
31
+ *
32
+ * @effect read
33
+ */
34
+ parcelCountSuggestion: ParcelCountSuggestionMethod;
35
+ /** The C.J. Hendriks 3PL integration: its settings (`config`). */
36
+ hendriks: HendriksModule;
37
+ /**
38
+ * The MyParcel integration: its set-up (`config`: the API key, label format, on/off and webhook
39
+ * secret, both secrets read back masked), the carriers MyParcel offers, and the store's stock
40
+ * locations as parcel senders (`senders`).
41
+ */
42
+ myparcel: MyparcelModule;
43
+ /**
44
+ * The store's fulfillment profiles (warehouse + handler + shipping method + minimum), its
45
+ * default profile, and who is emailed per handler when a fulfilment is created.
46
+ */
47
+ fulfillmentProfiles: FulfillmentProfilesModule;
48
+ /**
49
+ * The countries the store ships to, as checkout applies them: which ones its storefront offers,
50
+ * which selected ones no shopper can choose, saved or previewed.
51
+ */
52
+ shipToCountries: ShipToCountriesModule;
53
+ }
54
+ export declare function createShippingModule(transport: Transport): ShippingModule;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Shipping (headless spec §9.2 `shipping`): everything about getting a store's orders to its
3
+ * customers. Each member lives in a file of its own and is only assembled here, so a branch
4
+ * that adds one (shipping methods, rate tables, a carrier) adds a file and one line.
5
+ */
6
+ import { createShippingDefinitionsModule } from './definitions.js';
7
+ import { createFulfillmentProfilesModule, } from './fulfillment-profiles.js';
8
+ import { createHendriksModule } from './hendriks.js';
9
+ import { createShippingMethodsModule } from './methods.js';
10
+ import { createMyparcelModule } from './myparcel.js';
11
+ import { createParcelCountSuggestion, } from './parcel-count-suggestion.js';
12
+ import { createParcelRuleModule } from './parcel-rule.js';
13
+ import { createRateTablesModule } from './rate-tables.js';
14
+ import { createShipToCountriesModule } from './ship-to-countries.js';
15
+ export function createShippingModule(transport) {
16
+ return {
17
+ methods: createShippingMethodsModule(transport),
18
+ definitions: createShippingDefinitionsModule(transport),
19
+ rateTables: createRateTablesModule(transport),
20
+ parcelRule: createParcelRuleModule(transport),
21
+ parcelCountSuggestion: createParcelCountSuggestion(transport),
22
+ hendriks: createHendriksModule(transport),
23
+ myparcel: createMyparcelModule(transport),
24
+ fulfillmentProfiles: createFulfillmentProfilesModule(transport),
25
+ shipToCountries: createShipToCountriesModule(transport),
26
+ };
27
+ }
@@ -0,0 +1,205 @@
1
+ import { type Page, type Transport } from '@sixtyninecommerce/core';
2
+ import { type ConfigurableOperation, type ConfigurableOperationInput, type LanguageCode } from '../catalog/types.js';
3
+ import type { Call, ListOptions } from '../types.js';
4
+ /** A shipping method's name and description in one language. */
5
+ export interface ShippingMethodTranslation {
6
+ id: string;
7
+ /** As the engine spells it: `en`, `nl`, `pt_BR`. */
8
+ languageCode: string;
9
+ name: string;
10
+ description: string;
11
+ }
12
+ /** One shipping method of the store, as its list reads it. */
13
+ export interface ShippingMethodSummary {
14
+ id: string;
15
+ /** What checkout and a fulfillment profile name the method by. */
16
+ code: string;
17
+ /** In the language the client is set to (`tenant.language`), else the store's default. */
18
+ name: string;
19
+ /**
20
+ * The fulfillment handler of an order fulfilled WITHOUT a fulfillment profile (the profiles
21
+ * route every other one). `manual-fulfillment` unless a carrier's was picked.
22
+ */
23
+ fulfillmentHandlerCode: string;
24
+ /** What the method charges, with its stored arguments (every value a string). */
25
+ calculator: ConfigurableOperation;
26
+ /**
27
+ * The master switch: a disabled method is offered nowhere (webshop, staff, till) and a cart on
28
+ * it re-quotes. On unless it was switched off (a method stored before the switch existed).
29
+ */
30
+ enabled: boolean;
31
+ /**
32
+ * Offered at webshop checkout; staff orders and the till do not read it. On unless it was
33
+ * switched off. Only meaningful while {@link enabled}.
34
+ */
35
+ enabledInStorefront: boolean;
36
+ /** ISO-8601, UTC. */
37
+ createdAt: string;
38
+ /** ISO-8601, UTC. */
39
+ updatedAt: string;
40
+ }
41
+ /** One shipping method of the store, as its settings read it. */
42
+ export interface ShippingMethod extends ShippingMethodSummary {
43
+ /** In the same language as {@link name}; empty when the method has none. */
44
+ description: string;
45
+ /** Which orders the method is offered for, with its stored arguments. Every method has one. */
46
+ checker: ConfigurableOperation;
47
+ /** Every language the method is named in. */
48
+ translations: ShippingMethodTranslation[];
49
+ /**
50
+ * The Exact Online integration created the method from one of its own shipping definitions:
51
+ * Exact's sync owns its code and calculator (the name is the store's). Written by that sync
52
+ * only; neither write here takes it.
53
+ */
54
+ exactManaged: boolean;
55
+ /**
56
+ * Added once per parcel after the first, in minor units and the calculator's own tax basis;
57
+ * null charges nothing, 0 is a price. Only the two flat-rate calculators
58
+ * (`default-shipping-calculator`, `flat-threshold-calculator`) charge it, and the store's
59
+ * parcel rule decides how many parcels an order is; on any other calculator a stored value is
60
+ * kept but charges nothing.
61
+ */
62
+ extraParcelPrice: number | null;
63
+ }
64
+ /**
65
+ * A method's name and description in one language, as a create or an update writes them. The
66
+ * engine keeps one row per language: writing a language the method has replaces that row's
67
+ * name and description, and any other language is added beside the ones it has.
68
+ */
69
+ export interface ShippingMethodTranslationInput {
70
+ /** As the engine spells it: `en`, `nl`, `pt_BR`. */
71
+ languageCode: LanguageCode;
72
+ name: string;
73
+ /** Empty when left out. */
74
+ description?: string;
75
+ }
76
+ /** A new shipping method, as {@link ShippingMethodsModule.create} takes it. */
77
+ export interface CreateShippingMethodInput {
78
+ code: string;
79
+ /**
80
+ * One of `shipping.definitions.get()`'s `fulfillmentHandlers`. The engine requires one; a
81
+ * store that routes by fulfillment profiles names `manual-fulfillment`.
82
+ */
83
+ fulfillmentHandler: string;
84
+ /**
85
+ * One of `eligibilityCheckers`, with every argument it needs (a value is always a string; lists
86
+ * and booleans JSON-encoded). The engine requires one; "everyone" is
87
+ * `default-shipping-eligibility-checker` with `orderMinimum: '0'`.
88
+ */
89
+ checker: ConfigurableOperationInput;
90
+ /** One of `calculators`, with its arguments. */
91
+ calculator: ConfigurableOperationInput;
92
+ /** At least the store's default language: it is the name shoppers and staff are shown. */
93
+ translations: ShippingMethodTranslationInput[];
94
+ /** On when left out. See {@link ShippingMethodSummary.enabled}. */
95
+ enabled?: boolean;
96
+ /** On when left out. */
97
+ enabledInStorefront?: boolean;
98
+ /** Minor units, or null for no charge (left out: none). See {@link ShippingMethod.extraParcelPrice}. */
99
+ extraParcelPrice?: number | null;
100
+ }
101
+ /**
102
+ * A change to a shipping method, as {@link ShippingMethodsModule.update} takes it. A field left
103
+ * out keeps what the method has. The checker can be replaced, never taken away: every method has
104
+ * one.
105
+ */
106
+ export interface UpdateShippingMethodInput {
107
+ code?: string;
108
+ fulfillmentHandler?: string;
109
+ checker?: ConfigurableOperationInput;
110
+ calculator?: ConfigurableOperationInput;
111
+ translations?: ShippingMethodTranslationInput[];
112
+ enabled?: boolean;
113
+ enabledInStorefront?: boolean;
114
+ /** `null` clears it (no charge); left out, the stored price stays. */
115
+ extraParcelPrice?: number | null;
116
+ }
117
+ /**
118
+ * The store's shipping methods (`admin.shipping.methods`): what checkout offers, what a
119
+ * fulfillment profile and the till's delivery setting name, and what the store's shipping
120
+ * settings show.
121
+ *
122
+ * Every read needs `ReadSettings` or `ReadShippingMethod` (either one, so no `@permission` tag:
123
+ * the tag can only say "all of these"). Scoped to the channel the client is on: another store's
124
+ * methods are not listed, and not answered by id.
125
+ */
126
+ export interface ShippingMethodsModule {
127
+ /**
128
+ * Every method of the store, enabled or not, in id order. Paged (`options.limit`, default 100,
129
+ * at most 1,000 or `INVALID_PAGE_SIZE`; and `options.after` from a previous page);
130
+ * `for await (const method of page)` walks them all.
131
+ *
132
+ * @effect read
133
+ */
134
+ list(options?: ListOptions): Promise<Page<ShippingMethodSummary>>;
135
+ /**
136
+ * One method by id, or `null` when the store the client is on has no such method: an id that
137
+ * does not exist, a deleted method and the id of a method only ANOTHER store holds read the
138
+ * same.
139
+ *
140
+ * @effect read
141
+ */
142
+ get(id: string, options?: Call): Promise<ShippingMethod | null>;
143
+ /**
144
+ * Add a shipping method to the store the client is on, and answer it as {@link get} reads it.
145
+ * Needs `CreateSettings` or `CreateShippingMethod` (either one). Nothing is saved when it is
146
+ * refused:
147
+ *
148
+ * - `INVALID_SHIPPING_METHOD_INPUT` (`ValidationError`, 400): the input's shape, checked here
149
+ * before anything is sent.
150
+ * - `ORGANIZATION_WORKSPACE_NOT_A_STORE` (`BusinessRuleError`, 422): an organization's
151
+ * workspace ships nothing; create the method in one of its stores.
152
+ * - `PLUGIN_ACCESS_DENIED` (`PermissionDeniedError`, 403): the fulfillment handler, checker or
153
+ * calculator belongs to a plugin the store does not hold (a carrier, Exact Online).
154
+ * - The engine's own input refusal (`ValidationError`, 400): a handler, checker or calculator
155
+ * code it has not registered, a missing argument, or an `extraParcelPrice` outside
156
+ * 0–10,000,000.
157
+ * - `SHIPPING_ZONE_CONFIG_NOT_FOUND` (`NotFoundError`, 404): the `weight-zone-shipping-calculator`
158
+ * names no rate table of the store (`admin.shipping.rateTables`): its `shippingZoneConfigId` is
159
+ * empty or left out (detail code `required`), or is not one of the store's table ids (`enum`;
160
+ * another store's, a deleted one and a malformed one read alike). Such a method would quote no
161
+ * price. `details[0].field` points at the argument (`/input/calculator/arguments/<i>/value`).
162
+ *
163
+ * @effect write
164
+ */
165
+ create(input: CreateShippingMethodInput, options?: Call): Promise<ShippingMethod>;
166
+ /**
167
+ * Change a shipping method of the store the client is on, and answer it as {@link get} reads
168
+ * it. A field left out keeps what the method has. Needs `UpdateSettings` or
169
+ * `UpdateShippingMethod` (either one).
170
+ *
171
+ * One method may be held by several stores, and a change reaches every one of them. Refused,
172
+ * with nothing saved, as {@link create} is (`PLUGIN_ACCESS_DENIED` only for a handler, checker
173
+ * or calculator the patch CHANGES: one the method already has is no new pick;
174
+ * `SHIPPING_ZONE_CONFIG_NOT_FOUND` whenever the patch sends a weight-zone calculator, judged in
175
+ * the store the client is on, and never when it sends none), and:
176
+ *
177
+ * - `ENTITY_NOT_FOUND` (`NotFoundError`, 404): the store has no such method (another store's
178
+ * reads the same).
179
+ * - `SHARED_SHIPPING_METHOD_NOT_ALLOWED` (`PermissionDeniedError`, 403): the method is shared
180
+ * with another store where the caller lacks `UpdateSettings` or `UpdateShippingMethod`.
181
+ *
182
+ * @effect write
183
+ */
184
+ update(id: string, patch: UpdateShippingMethodInput, options?: Call): Promise<ShippingMethod>;
185
+ /**
186
+ * Delete a shipping method. The method is withdrawn from checkout in EVERY store that holds
187
+ * it, not only the one the client is on; orders already shipped with it keep their shipping
188
+ * line. Needs `DeleteSettings` or `DeleteShippingMethod` (either one), and the same in every
189
+ * other store holding the method, else `SHARED_SHIPPING_METHOD_NOT_ALLOWED`
190
+ * (`PermissionDeniedError`, 403) and nothing is deleted.
191
+ *
192
+ * `ENTITY_NOT_FOUND` (`NotFoundError`, 404): the store has no such method, or it is already
193
+ * deleted. A refusal the engine answers as a result rather than an error is
194
+ * `SHIPPING_METHOD_NOT_DELETED` (`ConflictError`, 409) with the engine's reason.
195
+ *
196
+ * @effect destructive
197
+ */
198
+ delete(id: string, options?: Call): Promise<void>;
199
+ }
200
+ export declare const SHIPPING_METHODS_QUERY = "\n query StoreShippingMethods($options: ShippingMethodListOptions) {\n shippingMethods(options: $options) {\n items { \n id\n createdAt\n updatedAt\n code\n name\n fulfillmentHandlerCode\n calculator { \n code\n args {\n name\n value\n }\n }\n customFields {\n enabled\n enabledInStorefront\n }\n }\n totalItems\n }\n }\n";
201
+ export declare const SHIPPING_METHOD_QUERY = "\n query StoreShippingMethod($id: ID!) {\n shippingMethod(id: $id) { \n id\n createdAt\n updatedAt\n code\n name\n description\n fulfillmentHandlerCode\n calculator { \n code\n args {\n name\n value\n }\n }\n checker { \n code\n args {\n name\n value\n }\n }\n translations {\n id\n languageCode\n name\n description\n }\n customFields {\n enabled\n enabledInStorefront\n exactManaged\n extraParcelPrice\n }\n }\n }\n";
202
+ export declare const CREATE_SHIPPING_METHOD_MUTATION = "\n mutation CreateStoreShippingMethod($input: CreateShippingMethodInput!) {\n createShippingMethod(input: $input) { \n id\n createdAt\n updatedAt\n code\n name\n description\n fulfillmentHandlerCode\n calculator { \n code\n args {\n name\n value\n }\n }\n checker { \n code\n args {\n name\n value\n }\n }\n translations {\n id\n languageCode\n name\n description\n }\n customFields {\n enabled\n enabledInStorefront\n exactManaged\n extraParcelPrice\n }\n }\n }\n";
203
+ export declare const UPDATE_SHIPPING_METHOD_MUTATION = "\n mutation UpdateStoreShippingMethod($input: UpdateShippingMethodInput!) {\n updateShippingMethod(input: $input) { \n id\n createdAt\n updatedAt\n code\n name\n description\n fulfillmentHandlerCode\n calculator { \n code\n args {\n name\n value\n }\n }\n checker { \n code\n args {\n name\n value\n }\n }\n translations {\n id\n languageCode\n name\n description\n }\n customFields {\n enabled\n enabledInStorefront\n exactManaged\n extraParcelPrice\n }\n }\n }\n";
204
+ export declare const DELETE_SHIPPING_METHOD_MUTATION = "\n mutation DeleteStoreShippingMethod($id: ID!) {\n deleteShippingMethod(id: $id) {\n result\n message\n }\n }\n";
205
+ export declare function createShippingMethodsModule(transport: Transport): ShippingMethodsModule;