@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.
- package/README.md +5772 -118
- package/dist/auth/index.d.ts +7 -1
- package/dist/auth/index.js +8 -1
- package/dist/catalog/assets.d.ts +120 -8
- package/dist/catalog/assets.js +98 -12
- package/dist/catalog/collections.d.ts +279 -14
- package/dist/catalog/collections.js +246 -15
- package/dist/catalog/documents.d.ts +142 -0
- package/dist/catalog/documents.js +114 -0
- package/dist/catalog/index.d.ts +54 -6
- package/dist/catalog/index.js +10 -1
- package/dist/catalog/metadata.d.ts +244 -0
- package/dist/catalog/metadata.js +220 -0
- package/dist/catalog/products.d.ts +159 -19
- package/dist/catalog/products.js +88 -13
- package/dist/catalog/properties.d.ts +140 -14
- package/dist/catalog/properties.js +65 -1
- package/dist/catalog/recommendations.d.ts +288 -0
- package/dist/catalog/recommendations.js +237 -0
- package/dist/catalog/reviews.d.ts +381 -0
- package/dist/catalog/reviews.js +325 -0
- package/dist/catalog/types.d.ts +17 -1
- package/dist/catalog/types.js +10 -0
- package/dist/catalog/variant-find.d.ts +136 -0
- package/dist/catalog/variant-find.js +239 -0
- package/dist/catalog/variants.d.ts +293 -26
- package/dist/catalog/variants.js +164 -7
- package/dist/catalog/visibility.d.ts +38 -7
- package/dist/catalog/visibility.js +19 -1
- package/dist/client.d.ts +121 -9
- package/dist/client.js +53 -14
- package/dist/content/assets.d.ts +285 -0
- package/dist/content/assets.js +181 -0
- package/dist/content/forms.d.ts +332 -1
- package/dist/content/forms.js +140 -4
- package/dist/content/items.d.ts +292 -0
- package/dist/content/items.js +170 -0
- package/dist/content/menus.d.ts +254 -0
- package/dist/content/menus.js +70 -0
- package/dist/content/strings.d.ts +137 -0
- package/dist/content/strings.js +82 -0
- package/dist/content/types.d.ts +282 -0
- package/dist/content/types.js +100 -0
- package/dist/customers/age-verification.d.ts +66 -0
- package/dist/customers/age-verification.js +79 -0
- package/dist/customers/credit.d.ts +263 -0
- package/dist/customers/credit.js +244 -0
- package/dist/customers/delivery-preferences.d.ts +120 -0
- package/dist/customers/delivery-preferences.js +97 -0
- package/dist/customers/delivery-terms.d.ts +44 -0
- package/dist/customers/delivery-terms.js +32 -0
- package/dist/customers/groups.d.ts +207 -0
- package/dist/customers/groups.js +438 -0
- package/dist/customers/index.d.ts +462 -37
- package/dist/customers/index.js +317 -40
- package/dist/customers/invitation-status.d.ts +57 -0
- package/dist/customers/invitation-status.js +21 -0
- package/dist/customers/notes.d.ts +67 -0
- package/dist/customers/notes.js +51 -0
- package/dist/customers/notification-recipients.d.ts +97 -0
- package/dist/customers/notification-recipients.js +84 -0
- package/dist/customers/saved-lists.d.ts +42 -0
- package/dist/customers/saved-lists.js +61 -0
- package/dist/customers/vat.d.ts +83 -0
- package/dist/customers/vat.js +46 -0
- package/dist/customers/wire.d.ts +20 -0
- package/dist/customers/wire.js +35 -0
- package/dist/documents/ar.d.ts +307 -0
- package/dist/documents/ar.js +254 -0
- package/dist/documents/emails.d.ts +150 -0
- package/dist/documents/emails.js +220 -0
- package/dist/documents/index.d.ts +744 -21
- package/dist/documents/index.js +438 -24
- package/dist/documents/pdf.d.ts +2 -0
- package/dist/documents/pdf.js +11 -0
- package/dist/fulfillments/create.d.ts +167 -0
- package/dist/fulfillments/create.js +216 -0
- package/dist/fulfillments/index.d.ts +163 -11
- package/dist/fulfillments/index.js +135 -6
- package/dist/fulfillments/payment-policy.d.ts +64 -0
- package/dist/fulfillments/payment-policy.js +140 -0
- package/dist/fulfillments/warehouse.d.ts +724 -0
- package/dist/fulfillments/warehouse.js +914 -0
- package/dist/geo/index.d.ts +119 -0
- package/dist/geo/index.js +107 -0
- package/dist/index.d.ts +147 -39
- package/dist/index.js +51 -12
- package/dist/integrations/afas-actions.d.ts +234 -0
- package/dist/integrations/afas-actions.js +310 -0
- package/dist/integrations/afas-types.d.ts +483 -0
- package/dist/integrations/afas-types.js +5 -0
- package/dist/integrations/afas.d.ts +234 -0
- package/dist/integrations/afas.js +290 -0
- package/dist/integrations/connections.d.ts +103 -0
- package/dist/integrations/connections.js +55 -0
- package/dist/integrations/esp.d.ts +313 -0
- package/dist/integrations/esp.js +169 -0
- package/dist/integrations/exact-online-types.d.ts +965 -0
- package/dist/integrations/exact-online-types.js +6 -0
- package/dist/integrations/exact-online.d.ts +784 -0
- package/dist/integrations/exact-online.js +1089 -0
- package/dist/integrations/index.d.ts +44 -3
- package/dist/integrations/index.js +23 -3
- package/dist/integrations/pipeline-discoveries.d.ts +65 -0
- package/dist/integrations/pipeline-discoveries.js +65 -0
- package/dist/integrations/pipeline-keys.d.ts +13 -0
- package/dist/integrations/pipeline-keys.js +22 -0
- package/dist/integrations/pipeline-runs.d.ts +119 -0
- package/dist/integrations/pipeline-runs.js +87 -0
- package/dist/integrations/pipelines.d.ts +87 -15
- package/dist/integrations/pipelines.js +41 -22
- package/dist/integrations/price-import.d.ts +223 -0
- package/dist/integrations/price-import.js +124 -0
- package/dist/integrations/types.d.ts +367 -3
- package/dist/integrations/types.js +4 -3
- package/dist/locations/index.d.ts +66 -0
- package/dist/locations/index.js +31 -0
- package/dist/meta/index.d.ts +172 -0
- package/dist/metafields/index.d.ts +8 -1
- package/dist/metafields/index.js +10 -0
- package/dist/orders/cancel-with-money.d.ts +237 -0
- package/dist/orders/cancel-with-money.js +155 -0
- package/dist/orders/commit-edit.d.ts +23 -1
- package/dist/orders/commit-edit.js +19 -2
- package/dist/orders/deposit-policy.d.ts +3 -1
- package/dist/orders/drafts.d.ts +800 -0
- package/dist/orders/drafts.js +771 -0
- package/dist/orders/fields.d.ts +245 -0
- package/dist/orders/fields.js +188 -0
- package/dist/orders/get.d.ts +29 -19
- package/dist/orders/get.js +17 -8
- package/dist/orders/index.d.ts +66 -15
- package/dist/orders/index.js +25 -2
- package/dist/orders/lifecycle.d.ts +128 -0
- package/dist/orders/lifecycle.js +158 -0
- package/dist/orders/line-price-preview.d.ts +7 -2
- package/dist/orders/list.d.ts +243 -0
- package/dist/orders/list.js +487 -0
- package/dist/orders/manual-discounts.d.ts +13 -5
- package/dist/orders/manual-pricing.d.ts +5 -0
- package/dist/orders/money-view.d.ts +149 -0
- package/dist/orders/money-view.js +99 -0
- package/dist/orders/order-entry.d.ts +20 -7
- package/dist/orders/plan-edit.d.ts +34 -2
- package/dist/orders/plan-edit.js +112 -11
- package/dist/orders/settings.d.ts +201 -0
- package/dist/orders/settings.js +325 -0
- package/dist/orders/status.d.ts +159 -13
- package/dist/orders/status.js +21 -0
- package/dist/orders/surcharges.d.ts +20 -1
- package/dist/orders/surcharges.js +37 -11
- package/dist/payments/account-credit.d.ts +46 -0
- package/dist/payments/account-credit.js +42 -0
- package/dist/payments/ar.d.ts +292 -0
- package/dist/payments/ar.js +223 -0
- package/dist/payments/connected-account.d.ts +47 -0
- package/dist/payments/connected-account.js +61 -0
- package/dist/payments/credit-noted-fields.d.ts +19 -0
- package/dist/payments/credit-noted-fields.js +69 -0
- package/dist/payments/customer-consent.d.ts +30 -0
- package/dist/payments/customer-consent.js +49 -0
- package/dist/payments/index.d.ts +340 -19
- package/dist/payments/index.js +151 -1
- package/dist/payments/methods.d.ts +303 -8
- package/dist/payments/methods.js +337 -7
- package/dist/payments/mollie-methods.d.ts +159 -0
- package/dist/payments/mollie-methods.js +141 -0
- package/dist/payments/payment-links.d.ts +180 -0
- package/dist/payments/payment-links.js +97 -0
- package/dist/payments/provider-keys.d.ts +150 -0
- package/dist/payments/provider-keys.js +118 -0
- package/dist/payments/providers.d.ts +86 -11
- package/dist/payments/providers.js +29 -0
- package/dist/payments/requests.d.ts +147 -0
- package/dist/payments/requests.js +93 -0
- package/dist/payments/store-credit-fields.d.ts +15 -0
- package/dist/payments/store-credit-fields.js +51 -0
- package/dist/pickups/index.d.ts +106 -0
- package/dist/pickups/index.js +108 -0
- package/dist/platform/channels.d.ts +132 -0
- package/dist/platform/channels.js +128 -0
- package/dist/platform/email-gateways.d.ts +165 -0
- package/dist/platform/email-gateways.js +78 -0
- package/dist/platform/geo.d.ts +123 -0
- package/dist/platform/geo.js +144 -0
- package/dist/platform/tax.d.ts +162 -0
- package/dist/platform/tax.js +169 -0
- package/dist/pos/anomalies.d.ts +158 -0
- package/dist/pos/anomalies.js +64 -0
- package/dist/pos/assisted-selling.d.ts +79 -0
- package/dist/pos/assisted-selling.js +38 -0
- package/dist/pos/exchanges.d.ts +108 -0
- package/dist/pos/exchanges.js +22 -0
- package/dist/pos/gift-cards.d.ts +135 -0
- package/dist/pos/gift-cards.js +47 -0
- package/dist/pos/index.d.ts +2370 -58
- package/dist/pos/index.js +854 -7
- package/dist/pos/no-receipt.d.ts +94 -0
- package/dist/pos/no-receipt.js +25 -0
- package/dist/pos/offline-sales.d.ts +228 -0
- package/dist/pos/offline-sales.js +170 -0
- package/dist/pos/pay-by-link.d.ts +143 -0
- package/dist/pos/pay-by-link.js +57 -0
- package/dist/pos/quick-keys.d.ts +103 -0
- package/dist/pos/quick-keys.js +45 -0
- package/dist/pos/reports.d.ts +360 -0
- package/dist/pos/reports.js +62 -0
- package/dist/pos/returns.d.ts +244 -0
- package/dist/pos/returns.js +83 -0
- package/dist/pricing/bulk-coupons.d.ts +139 -0
- package/dist/pricing/bulk-coupons.js +112 -0
- package/dist/pricing/index.d.ts +174 -4
- package/dist/pricing/index.js +174 -1
- package/dist/pricing/price-lists.d.ts +606 -0
- package/dist/pricing/price-lists.js +600 -0
- package/dist/purchasing/alerts.d.ts +104 -0
- package/dist/purchasing/alerts.js +88 -0
- package/dist/purchasing/backorders.d.ts +61 -0
- package/dist/purchasing/backorders.js +92 -0
- package/dist/purchasing/cost.d.ts +110 -0
- package/dist/purchasing/cost.js +86 -0
- package/dist/purchasing/index.d.ts +54 -0
- package/dist/purchasing/index.js +24 -0
- package/dist/purchasing/links.d.ts +263 -0
- package/dist/purchasing/links.js +192 -0
- package/dist/purchasing/purchase-orders.d.ts +551 -0
- package/dist/purchasing/purchase-orders.js +491 -0
- package/dist/purchasing/receipts.d.ts +396 -0
- package/dist/purchasing/receipts.js +287 -0
- package/dist/purchasing/replenishment.d.ts +281 -0
- package/dist/purchasing/replenishment.js +240 -0
- package/dist/purchasing/returns.d.ts +273 -0
- package/dist/purchasing/returns.js +229 -0
- package/dist/purchasing/settings.d.ts +152 -0
- package/dist/purchasing/settings.js +181 -0
- package/dist/purchasing/suppliers.d.ts +476 -0
- package/dist/purchasing/suppliers.js +438 -0
- package/dist/quotes/index.d.ts +518 -0
- package/dist/quotes/index.js +439 -0
- package/dist/reports/index.d.ts +71 -8
- package/dist/reports/index.js +74 -11
- package/dist/returns/index.d.ts +675 -21
- package/dist/returns/index.js +756 -11
- package/dist/search/index.d.ts +76 -1
- package/dist/search/index.js +63 -0
- package/dist/seo/config.d.ts +128 -0
- package/dist/seo/config.js +95 -0
- package/dist/seo/redirects.d.ts +125 -0
- package/dist/seo/redirects.js +60 -1
- package/dist/seo/settings.d.ts +147 -0
- package/dist/seo/settings.js +209 -0
- package/dist/shipping/definitions.d.ts +29 -0
- package/dist/shipping/definitions.js +47 -0
- package/dist/shipping/fulfillment-profiles.d.ts +174 -0
- package/dist/shipping/fulfillment-profiles.js +104 -0
- package/dist/shipping/hendriks.d.ts +97 -0
- package/dist/shipping/hendriks.js +50 -0
- package/dist/shipping/index.d.ts +54 -0
- package/dist/shipping/index.js +27 -0
- package/dist/shipping/methods.d.ts +205 -0
- package/dist/shipping/methods.js +240 -0
- package/dist/shipping/myparcel.d.ts +668 -0
- package/dist/shipping/myparcel.js +466 -0
- package/dist/shipping/parcel-count-suggestion.d.ts +2 -0
- package/dist/shipping/parcel-rule.d.ts +6 -5
- package/dist/shipping/parcel-rule.js +21 -23
- package/dist/shipping/rate-tables.d.ts +324 -0
- package/dist/shipping/rate-tables.js +390 -0
- package/dist/shipping/ship-to-countries.d.ts +75 -0
- package/dist/shipping/ship-to-countries.js +47 -0
- package/dist/stock/by-location.d.ts +86 -0
- package/dist/stock/by-location.js +94 -0
- package/dist/stock/index.d.ts +18 -4
- package/dist/stock/index.js +7 -0
- package/dist/stock/locations.d.ts +144 -0
- package/dist/stock/locations.js +168 -0
- package/dist/stock/settings.d.ts +106 -0
- package/dist/stock/settings.js +103 -0
- package/dist/stock/transfers.d.ts +386 -52
- package/dist/stock/transfers.js +222 -17
- package/dist/stored-value/index.d.ts +312 -11
- package/dist/stored-value/index.js +223 -4
- package/dist/subscriptions/index.d.ts +682 -0
- package/dist/subscriptions/index.js +815 -0
- package/dist/tax/display-policy.d.ts +105 -0
- package/dist/tax/display-policy.js +84 -0
- package/dist/tax/index.d.ts +79 -1
- package/dist/tax/index.js +52 -0
- package/dist/tenant/email-style.d.ts +102 -0
- package/dist/tenant/email-style.js +72 -0
- package/dist/tenant/email-templates.d.ts +287 -0
- package/dist/tenant/email-templates.js +271 -0
- package/dist/tenant/notifications.d.ts +23 -17
- package/dist/tenant/settings-sources.d.ts +1 -1
- package/dist/tenant/time-zone.d.ts +17 -0
- package/dist/tenant/time-zone.js +11 -0
- package/dist/types.d.ts +50 -3
- package/dist/users/index.d.ts +3 -0
- package/dist/users/index.js +2 -0
- package/dist/users/warehouses.d.ts +50 -0
- package/dist/users/warehouses.js +51 -0
- package/package.json +2 -2
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { ValidationError } from '@sixtyninecommerce/core';
|
|
2
|
+
import { assertDeleted, fieldOf, vendureListPage, } from '../catalog/types.js';
|
|
3
|
+
/** A store has a handful; one page holds them. */
|
|
4
|
+
const DEFAULT_PAGE_SIZE = 100;
|
|
5
|
+
/**
|
|
6
|
+
* Vendure's list queries add no ORDER BY of their own, and `skip/take` over an unordered query
|
|
7
|
+
* can repeat or skip rows between two requests: id is the one unique key a sort can name.
|
|
8
|
+
*/
|
|
9
|
+
const BY_ID = { id: 'ASC' };
|
|
10
|
+
const OPERATION_FIELDS = /* GraphQL */ `
|
|
11
|
+
code
|
|
12
|
+
args {
|
|
13
|
+
name
|
|
14
|
+
value
|
|
15
|
+
}
|
|
16
|
+
`;
|
|
17
|
+
const SUMMARY_FIELDS = /* GraphQL */ `
|
|
18
|
+
id
|
|
19
|
+
createdAt
|
|
20
|
+
updatedAt
|
|
21
|
+
code
|
|
22
|
+
name
|
|
23
|
+
fulfillmentHandlerCode
|
|
24
|
+
calculator { ${OPERATION_FIELDS} }
|
|
25
|
+
customFields {
|
|
26
|
+
enabled
|
|
27
|
+
enabledInStorefront
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
/** One selection for the single read and both writes, so all three answer the same method. */
|
|
31
|
+
const METHOD_FIELDS = /* GraphQL */ `
|
|
32
|
+
id
|
|
33
|
+
createdAt
|
|
34
|
+
updatedAt
|
|
35
|
+
code
|
|
36
|
+
name
|
|
37
|
+
description
|
|
38
|
+
fulfillmentHandlerCode
|
|
39
|
+
calculator { ${OPERATION_FIELDS} }
|
|
40
|
+
checker { ${OPERATION_FIELDS} }
|
|
41
|
+
translations {
|
|
42
|
+
id
|
|
43
|
+
languageCode
|
|
44
|
+
name
|
|
45
|
+
description
|
|
46
|
+
}
|
|
47
|
+
customFields {
|
|
48
|
+
enabled
|
|
49
|
+
enabledInStorefront
|
|
50
|
+
exactManaged
|
|
51
|
+
extraParcelPrice
|
|
52
|
+
}
|
|
53
|
+
`;
|
|
54
|
+
export const SHIPPING_METHODS_QUERY = /* GraphQL */ `
|
|
55
|
+
query StoreShippingMethods($options: ShippingMethodListOptions) {
|
|
56
|
+
shippingMethods(options: $options) {
|
|
57
|
+
items { ${SUMMARY_FIELDS} }
|
|
58
|
+
totalItems
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
`;
|
|
62
|
+
export const SHIPPING_METHOD_QUERY = /* GraphQL */ `
|
|
63
|
+
query StoreShippingMethod($id: ID!) {
|
|
64
|
+
shippingMethod(id: $id) { ${METHOD_FIELDS} }
|
|
65
|
+
}
|
|
66
|
+
`;
|
|
67
|
+
export const CREATE_SHIPPING_METHOD_MUTATION = /* GraphQL */ `
|
|
68
|
+
mutation CreateStoreShippingMethod($input: CreateShippingMethodInput!) {
|
|
69
|
+
createShippingMethod(input: $input) { ${METHOD_FIELDS} }
|
|
70
|
+
}
|
|
71
|
+
`;
|
|
72
|
+
export const UPDATE_SHIPPING_METHOD_MUTATION = /* GraphQL */ `
|
|
73
|
+
mutation UpdateStoreShippingMethod($input: UpdateShippingMethodInput!) {
|
|
74
|
+
updateShippingMethod(input: $input) { ${METHOD_FIELDS} }
|
|
75
|
+
}
|
|
76
|
+
`;
|
|
77
|
+
export const DELETE_SHIPPING_METHOD_MUTATION = /* GraphQL */ `
|
|
78
|
+
mutation DeleteStoreShippingMethod($id: ID!) {
|
|
79
|
+
deleteShippingMethod(id: $id) {
|
|
80
|
+
result
|
|
81
|
+
message
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
`;
|
|
85
|
+
const invalidInput = (message) => new ValidationError({
|
|
86
|
+
code: 'INVALID_SHIPPING_METHOD_INPUT',
|
|
87
|
+
message,
|
|
88
|
+
status: 400,
|
|
89
|
+
service: 'vendure',
|
|
90
|
+
});
|
|
91
|
+
const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
92
|
+
/** A handler-like operation as the engine takes it, checked here so a wrong shape never leaves. */
|
|
93
|
+
function operationInput(value, what) {
|
|
94
|
+
if (!isObject(value) || typeof value.code !== 'string' || value.code === '') {
|
|
95
|
+
throw invalidInput(`${what} needs a code.`);
|
|
96
|
+
}
|
|
97
|
+
const args = value.arguments;
|
|
98
|
+
if (!Array.isArray(args) ||
|
|
99
|
+
!args.every((arg) => isObject(arg) && typeof arg.name === 'string' && typeof arg.value === 'string')) {
|
|
100
|
+
throw invalidInput(`${what}.arguments must be a list of { name, value } strings (a list or a boolean JSON-encoded).`);
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
code: value.code,
|
|
104
|
+
arguments: args.map((arg) => ({ name: String(arg.name), value: String(arg.value) })),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function translationsInput(value) {
|
|
108
|
+
if (!Array.isArray(value) ||
|
|
109
|
+
!value.every((row) => isObject(row) &&
|
|
110
|
+
typeof row.languageCode === 'string' &&
|
|
111
|
+
row.languageCode !== '' &&
|
|
112
|
+
typeof row.name === 'string' &&
|
|
113
|
+
(row.description === undefined || typeof row.description === 'string'))) {
|
|
114
|
+
throw invalidInput('translations must be a list of { languageCode, name, description? } with strings.');
|
|
115
|
+
}
|
|
116
|
+
return value.map((row) => ({
|
|
117
|
+
languageCode: String(row.languageCode),
|
|
118
|
+
name: String(row.name),
|
|
119
|
+
description: typeof row.description === 'string' ? row.description : '',
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* The fields both writes share, in the engine's shape: the three store switches under
|
|
124
|
+
* `customFields`. The range of `extraParcelPrice` is the engine's to judge.
|
|
125
|
+
*/
|
|
126
|
+
function sharedInput(input) {
|
|
127
|
+
const out = {};
|
|
128
|
+
if (input.code !== undefined) {
|
|
129
|
+
if (typeof input.code !== 'string' || input.code === '') {
|
|
130
|
+
throw invalidInput('code must be a non-empty string.');
|
|
131
|
+
}
|
|
132
|
+
out.code = input.code;
|
|
133
|
+
}
|
|
134
|
+
if (input.fulfillmentHandler !== undefined) {
|
|
135
|
+
if (typeof input.fulfillmentHandler !== 'string' || input.fulfillmentHandler === '') {
|
|
136
|
+
throw invalidInput('fulfillmentHandler must be a fulfillment handler code.');
|
|
137
|
+
}
|
|
138
|
+
out.fulfillmentHandler = input.fulfillmentHandler;
|
|
139
|
+
}
|
|
140
|
+
if (input.checker === null) {
|
|
141
|
+
throw invalidInput('Every shipping method has a checker: send default-shipping-eligibility-checker for "everyone".');
|
|
142
|
+
}
|
|
143
|
+
if (input.checker !== undefined)
|
|
144
|
+
out.checker = operationInput(input.checker, 'checker');
|
|
145
|
+
if (input.calculator !== undefined) {
|
|
146
|
+
out.calculator = operationInput(input.calculator, 'calculator');
|
|
147
|
+
}
|
|
148
|
+
if (input.translations !== undefined)
|
|
149
|
+
out.translations = translationsInput(input.translations);
|
|
150
|
+
const customFields = {};
|
|
151
|
+
for (const flag of ['enabled', 'enabledInStorefront']) {
|
|
152
|
+
const value = input[flag];
|
|
153
|
+
if (value === undefined)
|
|
154
|
+
continue;
|
|
155
|
+
if (typeof value !== 'boolean')
|
|
156
|
+
throw invalidInput(`${flag} must be true or false.`);
|
|
157
|
+
customFields[flag] = value;
|
|
158
|
+
}
|
|
159
|
+
const extra = input.extraParcelPrice;
|
|
160
|
+
if (extra !== undefined) {
|
|
161
|
+
if (extra !== null && (typeof extra !== 'number' || !Number.isSafeInteger(extra))) {
|
|
162
|
+
throw invalidInput('extraParcelPrice must be a whole number of minor units, or null.');
|
|
163
|
+
}
|
|
164
|
+
customFields.extraParcelPrice = extra;
|
|
165
|
+
}
|
|
166
|
+
if (Object.keys(customFields).length > 0)
|
|
167
|
+
out.customFields = customFields;
|
|
168
|
+
return out;
|
|
169
|
+
}
|
|
170
|
+
const toSummary = (method) => ({
|
|
171
|
+
id: method.id,
|
|
172
|
+
code: method.code,
|
|
173
|
+
name: method.name,
|
|
174
|
+
fulfillmentHandlerCode: method.fulfillmentHandlerCode,
|
|
175
|
+
calculator: method.calculator,
|
|
176
|
+
// A switch the engine did not answer (a method stored before it existed) reads as ON: the
|
|
177
|
+
// checkout's own rule (`shipping-method-enabled.ts` in the shipping-calculator plugin) is the same fail-open one.
|
|
178
|
+
enabled: method.customFields?.enabled !== false,
|
|
179
|
+
enabledInStorefront: method.customFields?.enabledInStorefront !== false,
|
|
180
|
+
createdAt: method.createdAt,
|
|
181
|
+
updatedAt: method.updatedAt,
|
|
182
|
+
});
|
|
183
|
+
const toMethod = (method) => {
|
|
184
|
+
const extra = method.customFields?.extraParcelPrice;
|
|
185
|
+
return {
|
|
186
|
+
...toSummary(method),
|
|
187
|
+
description: method.description,
|
|
188
|
+
checker: method.checker,
|
|
189
|
+
translations: method.translations,
|
|
190
|
+
exactManaged: method.customFields?.exactManaged === true,
|
|
191
|
+
extraParcelPrice: typeof extra === 'number' ? extra : null,
|
|
192
|
+
};
|
|
193
|
+
};
|
|
194
|
+
const requireId = (id) => {
|
|
195
|
+
if (typeof id !== 'string' || id === '')
|
|
196
|
+
throw invalidInput('id must be a shipping method id.');
|
|
197
|
+
return id;
|
|
198
|
+
};
|
|
199
|
+
export function createShippingMethodsModule(transport) {
|
|
200
|
+
return {
|
|
201
|
+
list(options) {
|
|
202
|
+
return vendureListPage(transport, SHIPPING_METHODS_QUERY, 'shippingMethods', (skip, take) => ({ options: { skip, take, sort: BY_ID } }), { ...options, limit: options?.limit ?? DEFAULT_PAGE_SIZE }, toSummary);
|
|
203
|
+
},
|
|
204
|
+
async get(id, options) {
|
|
205
|
+
const method = await fieldOf(transport, SHIPPING_METHOD_QUERY, 'shippingMethod', { id: requireId(id) }, options);
|
|
206
|
+
return method ? toMethod(method) : null;
|
|
207
|
+
},
|
|
208
|
+
async create(input, options) {
|
|
209
|
+
if (!isObject(input))
|
|
210
|
+
throw invalidInput('A new shipping method must be an object.');
|
|
211
|
+
if (input.code === undefined)
|
|
212
|
+
throw invalidInput('A shipping method needs a code.');
|
|
213
|
+
if (input.fulfillmentHandler === undefined) {
|
|
214
|
+
throw invalidInput('A shipping method needs a fulfillment handler.');
|
|
215
|
+
}
|
|
216
|
+
if (input.checker === undefined)
|
|
217
|
+
throw invalidInput('A shipping method needs a checker.');
|
|
218
|
+
if (input.calculator === undefined) {
|
|
219
|
+
throw invalidInput('A shipping method needs a calculator.');
|
|
220
|
+
}
|
|
221
|
+
if (input.translations === undefined) {
|
|
222
|
+
throw invalidInput('A shipping method needs its name in at least one language.');
|
|
223
|
+
}
|
|
224
|
+
return toMethod(await fieldOf(transport, CREATE_SHIPPING_METHOD_MUTATION, 'createShippingMethod', { input: sharedInput(input) }, options));
|
|
225
|
+
},
|
|
226
|
+
async update(id, patch, options) {
|
|
227
|
+
const methodId = requireId(id);
|
|
228
|
+
if (!isObject(patch))
|
|
229
|
+
throw invalidInput('The change to a shipping method must be an object.');
|
|
230
|
+
const input = sharedInput(patch);
|
|
231
|
+
// The engine's input REQUIRES a translations list; an empty one changes no name.
|
|
232
|
+
return toMethod(await fieldOf(transport, UPDATE_SHIPPING_METHOD_MUTATION, 'updateShippingMethod', { input: { id: methodId, translations: [], ...input } }, options));
|
|
233
|
+
},
|
|
234
|
+
async delete(id, options) {
|
|
235
|
+
assertDeleted('SHIPPING_METHOD_NOT_DELETED', [
|
|
236
|
+
await fieldOf(transport, DELETE_SHIPPING_METHOD_MUTATION, 'deleteShippingMethod', { id: requireId(id) }, options),
|
|
237
|
+
]);
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|