@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,105 @@
|
|
|
1
|
+
import { type Transport } from '@sixtyninecommerce/core';
|
|
2
|
+
import type { Call } from '../types.js';
|
|
3
|
+
/** `channel` follows the store's "prices include tax"; `gross` = incl. tax; `net` = excl. tax. */
|
|
4
|
+
export type TaxDisplayDefault = 'channel' | 'gross' | 'net';
|
|
5
|
+
/** `inherit` leaves B2B and trade customers on the default. */
|
|
6
|
+
export type TaxDisplayB2b = 'inherit' | 'gross' | 'net';
|
|
7
|
+
/** What a shopper is shown: `GROSS` = incl. tax, `NET` = excl. tax (the Shop API's casing). */
|
|
8
|
+
export type TaxDisplayMode = 'GROSS' | 'NET';
|
|
9
|
+
/** The shoppers a policy is answered for, in the order a settings screen lists them. */
|
|
10
|
+
export type TaxDisplayAudience = 'VISITOR' | 'RETAIL_CUSTOMER' | 'B2B_CUSTOMER' | 'LISTED_COUNTRY_CUSTOMER';
|
|
11
|
+
/**
|
|
12
|
+
* A store's price-display policy: who sees prices with or without tax. Three Channel custom fields
|
|
13
|
+
* (`taxDisplayDefault`, `taxDisplayB2b`, `taxExclusiveCountries`), in the organization settings
|
|
14
|
+
* group `settings.tax_display`.
|
|
15
|
+
*/
|
|
16
|
+
export interface TaxDisplayPolicy {
|
|
17
|
+
default: TaxDisplayDefault;
|
|
18
|
+
b2b: TaxDisplayB2b;
|
|
19
|
+
/**
|
|
20
|
+
* Upper-case ISO-3166 alpha-2 codes; empty turns the rule off. A customer shipping to a listed
|
|
21
|
+
* country always sees prices excl. tax, whatever the other two say, AND is taxed by that
|
|
22
|
+
* country's tax zone instead of the store's: this list changes what customers are charged, not
|
|
23
|
+
* only what they are shown.
|
|
24
|
+
*/
|
|
25
|
+
countries: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface TaxDisplayAudienceAnswer {
|
|
28
|
+
audience: TaxDisplayAudience;
|
|
29
|
+
/** The listed country the answer is judged for (`LISTED_COUNTRY_CUSTOMER` only); else null. */
|
|
30
|
+
countryCode: string | null;
|
|
31
|
+
/** What this shopper is shown, by the rule the storefront applies. Null when `dependsOnStore`. */
|
|
32
|
+
mode: TaxDisplayMode | null;
|
|
33
|
+
/**
|
|
34
|
+
* True only in an organization's workspace, for an answer that falls back to "prices include
|
|
35
|
+
* tax": each member store keeps its own, so there is no one answer.
|
|
36
|
+
*/
|
|
37
|
+
dependsOnStore: boolean;
|
|
38
|
+
}
|
|
39
|
+
/** A policy and who it shows which tax figure, as the engine answers it. */
|
|
40
|
+
export interface TaxDisplayPolicyView extends TaxDisplayPolicy {
|
|
41
|
+
/** The store's own storage mode, the policy's last fallback. */
|
|
42
|
+
pricesIncludeTax: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Visitor, retail customer, B2B or trade customer, then a customer in the FIRST listed country
|
|
45
|
+
* (absent while none is listed). The same rule decides the storefront's prices and the prices an
|
|
46
|
+
* order's emails, receipts and invoices show its customer.
|
|
47
|
+
*/
|
|
48
|
+
audiences: TaxDisplayAudienceAnswer[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The ACTIVE store's price-display policy (`admin.tax.displayPolicy`). Reading needs any
|
|
52
|
+
* administrator permission on the store; writing needs `UpdateChannel` (the policy is stored on
|
|
53
|
+
* the channel and written through core `updateChannel`).
|
|
54
|
+
*
|
|
55
|
+
* The engine owns the rule: who sees what is never worked out in the client. Ask {@link preview}
|
|
56
|
+
* for a policy the merchant has not saved.
|
|
57
|
+
*/
|
|
58
|
+
export interface TaxDisplayPolicyModule {
|
|
59
|
+
/**
|
|
60
|
+
* The policy the storefront applies and who it shows which figure. For a store that inherits
|
|
61
|
+
* `settings.tax_display` from its organization this is the organization's policy. An unreadable
|
|
62
|
+
* stored value reads as its default (`channel` / `inherit` / no countries); a stored choice is
|
|
63
|
+
* read trimmed and lower-cased, as the storefront reads it.
|
|
64
|
+
*
|
|
65
|
+
* @effect read
|
|
66
|
+
*/
|
|
67
|
+
get(options?: Call): Promise<TaxDisplayPolicyView>;
|
|
68
|
+
/**
|
|
69
|
+
* Who `policy` WOULD show which figure on this store, without saving anything.
|
|
70
|
+
*
|
|
71
|
+
* Refused `CHANNEL_SETTINGS_INVALID` (`ValidationError`, one `details[]` entry per field named
|
|
72
|
+
* `customFields.<field>`) for a policy the save would refuse: a choice that is not exactly one of
|
|
73
|
+
* the values above, a country code that is not two letters, a country listed twice, or more than
|
|
74
|
+
* 300 countries.
|
|
75
|
+
*
|
|
76
|
+
* @effect read
|
|
77
|
+
*/
|
|
78
|
+
preview(policy: TaxDisplayPolicy, options?: Call): Promise<TaxDisplayPolicyView>;
|
|
79
|
+
/**
|
|
80
|
+
* Replace the whole policy, and answer it as the engine now applies it.
|
|
81
|
+
*
|
|
82
|
+
* Pass all three fields: read with {@link get}, change what you mean to, send it back. An empty
|
|
83
|
+
* country list clears the stored list.
|
|
84
|
+
*
|
|
85
|
+
* Refused, before anything is written, `CHANNEL_SETTINGS_INVALID` (`ValidationError`) for a policy
|
|
86
|
+
* {@link preview} refuses. Refused by the save itself:
|
|
87
|
+
* - `ORGANIZATION_SETTINGS_INHERITED` (`BusinessRuleError`, 422) while the store uses its
|
|
88
|
+
* organization's policy: override it first (`tenant.settingsSources`), or change it in the
|
|
89
|
+
* organization's workspace;
|
|
90
|
+
* - `MANAGED_BY_ORGANIZATION` (`BusinessRuleError`, 422) if the organization manages the group;
|
|
91
|
+
* - `FORBIDDEN` without `UpdateChannel`.
|
|
92
|
+
*
|
|
93
|
+
* @effect write
|
|
94
|
+
*/
|
|
95
|
+
set(policy: TaxDisplayPolicy, options?: Call): Promise<TaxDisplayPolicyView>;
|
|
96
|
+
}
|
|
97
|
+
export declare const TAX_DISPLAY_POLICY_QUERY = "\n query TaxDisplayPolicy {\n taxDisplayPolicy { \n default\n b2b\n countries\n pricesIncludeTax\n audiences {\n audience\n countryCode\n mode\n dependsOnStore\n }\n }\n }\n";
|
|
98
|
+
export declare const PREVIEW_TAX_DISPLAY_POLICY_QUERY = "\n query PreviewTaxDisplayPolicy($input: TaxDisplayPolicyInput!) {\n previewTaxDisplayPolicy(input: $input) { \n default\n b2b\n countries\n pricesIncludeTax\n audiences {\n audience\n countryCode\n mode\n dependsOnStore\n }\n }\n }\n";
|
|
99
|
+
/**
|
|
100
|
+
* The save's first step: the engine judges the policy (the preview's refusal is the save's) and
|
|
101
|
+
* names the channel `updateChannel` must be given, in one request with the save's call options.
|
|
102
|
+
*/
|
|
103
|
+
export declare const CHECK_TAX_DISPLAY_POLICY_QUERY = "\n query CheckTaxDisplayPolicy($input: TaxDisplayPolicyInput!) {\n activeChannel { id }\n previewTaxDisplayPolicy(input: $input) { default }\n }\n";
|
|
104
|
+
export declare const SET_TAX_DISPLAY_POLICY_MUTATION = "\n mutation SetTaxDisplayPolicy($input: UpdateChannelInput!) {\n updateChannel(input: $input) {\n ... on Channel { id }\n ... on ErrorResult { errorCode message }\n }\n }\n";
|
|
105
|
+
export declare function createTaxDisplayPolicyModule(transport: Transport): TaxDisplayPolicyModule;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { errorFromErrorResult, isErrorResult, } from '@sixtyninecommerce/core';
|
|
2
|
+
const VIEW_FIELDS = /* GraphQL */ `
|
|
3
|
+
default
|
|
4
|
+
b2b
|
|
5
|
+
countries
|
|
6
|
+
pricesIncludeTax
|
|
7
|
+
audiences {
|
|
8
|
+
audience
|
|
9
|
+
countryCode
|
|
10
|
+
mode
|
|
11
|
+
dependsOnStore
|
|
12
|
+
}
|
|
13
|
+
`;
|
|
14
|
+
export const TAX_DISPLAY_POLICY_QUERY = /* GraphQL */ `
|
|
15
|
+
query TaxDisplayPolicy {
|
|
16
|
+
taxDisplayPolicy { ${VIEW_FIELDS} }
|
|
17
|
+
}
|
|
18
|
+
`;
|
|
19
|
+
export const PREVIEW_TAX_DISPLAY_POLICY_QUERY = /* GraphQL */ `
|
|
20
|
+
query PreviewTaxDisplayPolicy($input: TaxDisplayPolicyInput!) {
|
|
21
|
+
previewTaxDisplayPolicy(input: $input) { ${VIEW_FIELDS} }
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
/**
|
|
25
|
+
* The save's first step: the engine judges the policy (the preview's refusal is the save's) and
|
|
26
|
+
* names the channel `updateChannel` must be given, in one request with the save's call options.
|
|
27
|
+
*/
|
|
28
|
+
export const CHECK_TAX_DISPLAY_POLICY_QUERY = /* GraphQL */ `
|
|
29
|
+
query CheckTaxDisplayPolicy($input: TaxDisplayPolicyInput!) {
|
|
30
|
+
activeChannel { id }
|
|
31
|
+
previewTaxDisplayPolicy(input: $input) { default }
|
|
32
|
+
}
|
|
33
|
+
`;
|
|
34
|
+
export const SET_TAX_DISPLAY_POLICY_MUTATION = /* GraphQL */ `
|
|
35
|
+
mutation SetTaxDisplayPolicy($input: UpdateChannelInput!) {
|
|
36
|
+
updateChannel(input: $input) {
|
|
37
|
+
... on Channel { id }
|
|
38
|
+
... on ErrorResult { errorCode message }
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
`;
|
|
42
|
+
/** Exactly the input the engine takes: no extra keys travel. */
|
|
43
|
+
function inputOf(policy) {
|
|
44
|
+
return { default: policy.default, b2b: policy.b2b, countries: [...policy.countries] };
|
|
45
|
+
}
|
|
46
|
+
export function createTaxDisplayPolicyModule(transport) {
|
|
47
|
+
const get = async (options) => {
|
|
48
|
+
const data = await transport.graphql({ api: 'admin', query: TAX_DISPLAY_POLICY_QUERY }, options);
|
|
49
|
+
return data.taxDisplayPolicy;
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
get,
|
|
53
|
+
async preview(policy, options) {
|
|
54
|
+
const data = await transport.graphql({
|
|
55
|
+
api: 'admin',
|
|
56
|
+
query: PREVIEW_TAX_DISPLAY_POLICY_QUERY,
|
|
57
|
+
variables: { input: inputOf(policy) },
|
|
58
|
+
}, options);
|
|
59
|
+
return data.previewTaxDisplayPolicy;
|
|
60
|
+
},
|
|
61
|
+
async set(policy, options) {
|
|
62
|
+
const input = inputOf(policy);
|
|
63
|
+
const checked = await transport.graphql({ api: 'admin', query: CHECK_TAX_DISPLAY_POLICY_QUERY, variables: { input } }, options);
|
|
64
|
+
const data = await transport.graphql({
|
|
65
|
+
api: 'admin',
|
|
66
|
+
query: SET_TAX_DISPLAY_POLICY_MUTATION,
|
|
67
|
+
variables: {
|
|
68
|
+
input: {
|
|
69
|
+
id: checked.activeChannel.id,
|
|
70
|
+
customFields: {
|
|
71
|
+
taxDisplayDefault: input.default,
|
|
72
|
+
taxDisplayB2b: input.b2b,
|
|
73
|
+
// `null` is the column's "off", and the only value that clears a stored list.
|
|
74
|
+
taxExclusiveCountries: input.countries.length === 0 ? null : JSON.stringify(input.countries),
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
}, options);
|
|
79
|
+
if (isErrorResult(data.updateChannel))
|
|
80
|
+
throw errorFromErrorResult(data.updateChannel);
|
|
81
|
+
return get(options);
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
package/dist/tax/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Page, type Transport } from '@sixtyninecommerce/core';
|
|
2
|
-
import type { Call } from '../types.js';
|
|
2
|
+
import type { Call, ListOptions } from '../types.js';
|
|
3
|
+
import { type TaxDisplayPolicyModule } from './display-policy.js';
|
|
3
4
|
/**
|
|
4
5
|
* The mapping used when no mapping names the country the money is taxed in.
|
|
5
6
|
*
|
|
@@ -115,10 +116,87 @@ export interface TaxMappingsModule {
|
|
|
115
116
|
/** Drop one country's mapping. Silent when there was none. */
|
|
116
117
|
remove(key: string, countryCode: string, options?: Call): Promise<TaxClass>;
|
|
117
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* A platform-wide tax category (`Standard`, `Reduced`, `Zero`): what a tax class maps a country
|
|
121
|
+
* onto, and what a tax rate prices in a zone. Shared by every store.
|
|
122
|
+
*/
|
|
123
|
+
export interface TaxCategory {
|
|
124
|
+
id: string;
|
|
125
|
+
name: string;
|
|
126
|
+
/** The category the platform's own tax setup treats as the default. */
|
|
127
|
+
isDefault: boolean;
|
|
128
|
+
createdAt: string;
|
|
129
|
+
updatedAt: string;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* A platform-wide tax rate: the percentage a category is taxed at in a zone, optionally only for
|
|
133
|
+
* one customer group.
|
|
134
|
+
*/
|
|
135
|
+
export interface TaxRate {
|
|
136
|
+
id: string;
|
|
137
|
+
name: string;
|
|
138
|
+
/** A percentage: `21` is 21 %. Not money. */
|
|
139
|
+
value: number;
|
|
140
|
+
/** A disabled rate is never applied. */
|
|
141
|
+
enabled: boolean;
|
|
142
|
+
category: {
|
|
143
|
+
id: string;
|
|
144
|
+
name: string;
|
|
145
|
+
};
|
|
146
|
+
zone: {
|
|
147
|
+
id: string;
|
|
148
|
+
name: string;
|
|
149
|
+
};
|
|
150
|
+
/** Null for a rate that applies to every customer. */
|
|
151
|
+
customerGroup: {
|
|
152
|
+
id: string;
|
|
153
|
+
name: string;
|
|
154
|
+
} | null;
|
|
155
|
+
createdAt: string;
|
|
156
|
+
updatedAt: string;
|
|
157
|
+
}
|
|
158
|
+
/** The platform's tax categories (read-only here; a SuperAdmin writes them through `platform.tax.categories`). */
|
|
159
|
+
export interface TaxCategoriesModule {
|
|
160
|
+
/**
|
|
161
|
+
* Every tax category, in id order. Reading needs `ReadTaxCategory`, which every store role holds.
|
|
162
|
+
*
|
|
163
|
+
* A `Page`: walk it (`for await`, or `.next()` until null) for the COMPLETE list. Nothing is cut
|
|
164
|
+
* at a fixed size; every following page keeps the same order and per-call options.
|
|
165
|
+
*
|
|
166
|
+
* @effect read
|
|
167
|
+
*/
|
|
168
|
+
list(options?: ListOptions): Promise<Page<TaxCategory>>;
|
|
169
|
+
}
|
|
170
|
+
/** The platform's tax rates (read-only here; a SuperAdmin writes them through `platform.tax.rates`). */
|
|
171
|
+
export interface TaxRatesModule {
|
|
172
|
+
/**
|
|
173
|
+
* Every tax rate, in id order, with its category, zone and customer group. Reading needs
|
|
174
|
+
* `ReadTaxRate`, which every store role holds.
|
|
175
|
+
*
|
|
176
|
+
* A `Page`: walk it (`for await`, or `.next()` until null) for the COMPLETE list. Nothing is cut
|
|
177
|
+
* at a fixed size (the dashboard used to stop at 100); every following page keeps the same
|
|
178
|
+
* order and per-call options.
|
|
179
|
+
*
|
|
180
|
+
* @effect read
|
|
181
|
+
*/
|
|
182
|
+
list(options?: ListOptions): Promise<Page<TaxRate>>;
|
|
183
|
+
}
|
|
118
184
|
export interface TaxModule {
|
|
119
185
|
classes: TaxClassesModule;
|
|
120
186
|
mappings: TaxMappingsModule;
|
|
187
|
+
/** The platform-wide tax categories every store shares. */
|
|
188
|
+
categories: TaxCategoriesModule;
|
|
189
|
+
/** The platform-wide tax rates every store shares. */
|
|
190
|
+
rates: TaxRatesModule;
|
|
191
|
+
/** Who the store shows prices with or without tax, saved or previewed. */
|
|
192
|
+
displayPolicy: TaxDisplayPolicyModule;
|
|
121
193
|
}
|
|
194
|
+
/** A {@link TaxCategory} as every read and write answers it (`platform.tax` reuses it). */
|
|
195
|
+
export declare const TAX_CATEGORY_FIELDS = "\n id\n name\n isDefault\n createdAt\n updatedAt\n";
|
|
196
|
+
/** A {@link TaxRate} as every read and write answers it (`platform.tax` reuses it). */
|
|
197
|
+
export declare const TAX_RATE_FIELDS = "\n id\n name\n value\n enabled\n category { id name }\n zone { id name }\n customerGroup { id name }\n createdAt\n updatedAt\n";
|
|
198
|
+
export declare const TAX_CATEGORIES_QUERY = "\n query TaxCategories($options: TaxCategoryListOptions) {\n taxCategories(options: $options) {\n items { \n id\n name\n isDefault\n createdAt\n updatedAt\n }\n totalItems\n }\n }\n";
|
|
199
|
+
export declare const TAX_RATES_QUERY = "\n query TaxRates($options: TaxRateListOptions) {\n taxRates(options: $options) {\n items { \n id\n name\n value\n enabled\n category { id name }\n zone { id name }\n customerGroup { id name }\n createdAt\n updatedAt\n }\n totalItems\n }\n }\n";
|
|
122
200
|
export declare const TAX_CLASSES_QUERY = "\n query TaxClasses {\n taxClasses { \n id\n key\n label\n mappings {\n countryCode\n taxCategoryId\n taxCategory {\n id\n name\n isDefault\n }\n }\n }\n }\n";
|
|
123
201
|
export declare const TAX_CLASS_QUERY = "\n query TaxClass($key: String!) {\n taxClass(key: $key) { \n id\n key\n label\n mappings {\n countryCode\n taxCategoryId\n taxCategory {\n id\n name\n isDefault\n }\n }\n }\n }\n";
|
|
124
202
|
export declare const UPSERT_TAX_CLASS_MUTATION = "\n mutation UpsertTaxClass($input: UpsertTaxClassInput!) {\n upsertTaxClass(input: $input) { \n id\n key\n label\n mappings {\n countryCode\n taxCategoryId\n taxCategory {\n id\n name\n isDefault\n }\n }\n }\n }\n";
|
package/dist/tax/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { createPage } from '@sixtyninecommerce/core';
|
|
2
|
+
import { vendureListPage } from '../catalog/types.js';
|
|
3
|
+
import { createTaxDisplayPolicyModule } from './display-policy.js';
|
|
2
4
|
/**
|
|
3
5
|
* The mapping used when no mapping names the country the money is taxed in.
|
|
4
6
|
*
|
|
@@ -8,6 +10,49 @@ import { createPage } from '@sixtyninecommerce/core';
|
|
|
8
10
|
* the same one read two ways.
|
|
9
11
|
*/
|
|
10
12
|
export const TAX_CLASS_FALLBACK_COUNTRY = '*';
|
|
13
|
+
/** A {@link TaxCategory} as every read and write answers it (`platform.tax` reuses it). */
|
|
14
|
+
export const TAX_CATEGORY_FIELDS = /* GraphQL */ `
|
|
15
|
+
id
|
|
16
|
+
name
|
|
17
|
+
isDefault
|
|
18
|
+
createdAt
|
|
19
|
+
updatedAt
|
|
20
|
+
`;
|
|
21
|
+
/** A {@link TaxRate} as every read and write answers it (`platform.tax` reuses it). */
|
|
22
|
+
export const TAX_RATE_FIELDS = /* GraphQL */ `
|
|
23
|
+
id
|
|
24
|
+
name
|
|
25
|
+
value
|
|
26
|
+
enabled
|
|
27
|
+
category { id name }
|
|
28
|
+
zone { id name }
|
|
29
|
+
customerGroup { id name }
|
|
30
|
+
createdAt
|
|
31
|
+
updatedAt
|
|
32
|
+
`;
|
|
33
|
+
export const TAX_CATEGORIES_QUERY = /* GraphQL */ `
|
|
34
|
+
query TaxCategories($options: TaxCategoryListOptions) {
|
|
35
|
+
taxCategories(options: $options) {
|
|
36
|
+
items { ${TAX_CATEGORY_FIELDS} }
|
|
37
|
+
totalItems
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
41
|
+
export const TAX_RATES_QUERY = /* GraphQL */ `
|
|
42
|
+
query TaxRates($options: TaxRateListOptions) {
|
|
43
|
+
taxRates(options: $options) {
|
|
44
|
+
items { ${TAX_RATE_FIELDS} }
|
|
45
|
+
totalItems
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
`;
|
|
49
|
+
/**
|
|
50
|
+
* Vendure's list queries add no ORDER BY of their own, and `skip/take` over an unordered query
|
|
51
|
+
* can repeat or skip rows between two requests. Every list here is ordered by id, the one unique
|
|
52
|
+
* key a sort can name (a GraphQL sort input applies its fields in the SCHEMA's order, where `id`
|
|
53
|
+
* comes first, so `{ name, id }` is id order too), so a walk answers each row exactly once.
|
|
54
|
+
*/
|
|
55
|
+
const BY_ID = { id: 'ASC' };
|
|
11
56
|
const TAX_CLASS_FIELDS = /* GraphQL */ `
|
|
12
57
|
id
|
|
13
58
|
key
|
|
@@ -56,6 +101,7 @@ export const REMOVE_TAX_CLASS_MAPPING_MUTATION = /* GraphQL */ `
|
|
|
56
101
|
`;
|
|
57
102
|
export function createTaxModule(transport) {
|
|
58
103
|
return {
|
|
104
|
+
displayPolicy: createTaxDisplayPolicyModule(transport),
|
|
59
105
|
classes: {
|
|
60
106
|
async list(options) {
|
|
61
107
|
const data = await transport.graphql({ api: 'admin', query: TAX_CLASSES_QUERY }, options);
|
|
@@ -79,6 +125,12 @@ export function createTaxModule(transport) {
|
|
|
79
125
|
return data.deleteTaxClass;
|
|
80
126
|
},
|
|
81
127
|
},
|
|
128
|
+
categories: {
|
|
129
|
+
list: (options) => vendureListPage(transport, TAX_CATEGORIES_QUERY, 'taxCategories', (skip, take) => ({ options: { skip, take, sort: BY_ID } }), options),
|
|
130
|
+
},
|
|
131
|
+
rates: {
|
|
132
|
+
list: (options) => vendureListPage(transport, TAX_RATES_QUERY, 'taxRates', (skip, take) => ({ options: { skip, take, sort: BY_ID } }), options),
|
|
133
|
+
},
|
|
82
134
|
mappings: {
|
|
83
135
|
async set(key, countryCode, taxCategoryId, options) {
|
|
84
136
|
const data = await transport.graphql({
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { Transport } from '@sixtyninecommerce/core';
|
|
2
|
+
import type { Call } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The look of every email (and the PDF colours) the active store sends, as the engine applies it.
|
|
5
|
+
*
|
|
6
|
+
* The four choice fields name a member of a fixed set, which the engine checks on `set`:
|
|
7
|
+
* `fontFamily` `system` | `georgia` | `arial` | `verdana`; `logoPosition` `center` | `left`;
|
|
8
|
+
* `logoVariant` `light` | `dark` | `none` (which Business profile logo heads the email);
|
|
9
|
+
* `buttonStyle` `filled` | `outline`. They are typed `string` because a store can hold a value
|
|
10
|
+
* from before that check, which `get` answers as stored and `set` accepts back unchanged.
|
|
11
|
+
*/
|
|
12
|
+
export interface EmailStyle {
|
|
13
|
+
/** The active store. The style read is always the active store's, also while it inherits. */
|
|
14
|
+
channelId: string;
|
|
15
|
+
/**
|
|
16
|
+
* Buttons and links. Each colour is a hex (`#1a2b3c`, 3 to 8 digits), `rgb(r, g, b)`, a colour
|
|
17
|
+
* name or `transparent`.
|
|
18
|
+
*/
|
|
19
|
+
accentColor: string;
|
|
20
|
+
/** The outer background; `transparent` lets a mail client's dark mode show through. */
|
|
21
|
+
backgroundColor: string;
|
|
22
|
+
/** The content area's background. */
|
|
23
|
+
contentBgColor: string;
|
|
24
|
+
textColor: string;
|
|
25
|
+
mutedTextColor: string;
|
|
26
|
+
fontFamily: string;
|
|
27
|
+
/** Pixels. */
|
|
28
|
+
headingFontSize: number;
|
|
29
|
+
/** Pixels. */
|
|
30
|
+
bodyFontSize: number;
|
|
31
|
+
logoPosition: string;
|
|
32
|
+
/** Pixels. */
|
|
33
|
+
logoMaxWidth: number;
|
|
34
|
+
logoVariant: string;
|
|
35
|
+
/** A button's corner radius, in pixels. */
|
|
36
|
+
borderRadius: number;
|
|
37
|
+
/** The content column's width, in pixels. */
|
|
38
|
+
contentWidth: number;
|
|
39
|
+
buttonStyle: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The style fields a `set` changes; an omitted field keeps its value. The sizes are whole pixels
|
|
43
|
+
* (GraphQL `Int`). `channelId` is not an input: `set` leaves it out, so `set({ ...style, … })`
|
|
44
|
+
* with a style `get` answered works.
|
|
45
|
+
*/
|
|
46
|
+
export type EmailStylePatch = Partial<Omit<EmailStyle, 'channelId'>>;
|
|
47
|
+
/**
|
|
48
|
+
* `admin.tenant.emailStyle` — the active store's email style (part of the `settings.email` group).
|
|
49
|
+
* Always the ACTIVE channel; no channel argument.
|
|
50
|
+
*
|
|
51
|
+
* **A store that takes `settings.email` from its organization** (`admin.tenant.settingsSources`:
|
|
52
|
+
* locked, or inheritable and not overridden) sends its organization's style, and `get` answers
|
|
53
|
+
* that one. `set` then refuses any change; sending back what `get` answered is accepted and
|
|
54
|
+
* changes nothing. `admin.tenant.settingsSources.override('settings.email')` first to keep a style
|
|
55
|
+
* of the store's own.
|
|
56
|
+
*/
|
|
57
|
+
export interface EmailStyleModule {
|
|
58
|
+
/**
|
|
59
|
+
* The style the store's emails use: its own, its organization's while it inherits, or the
|
|
60
|
+
* platform's defaults while it has saved none. Needs `ReadSettings`.
|
|
61
|
+
*
|
|
62
|
+
* @effect read
|
|
63
|
+
* @permission ReadSettings
|
|
64
|
+
*/
|
|
65
|
+
get(options?: Call): Promise<EmailStyle>;
|
|
66
|
+
/**
|
|
67
|
+
* Change the fields `patch` names, and answer the whole style as the engine now stores it. The
|
|
68
|
+
* next email the store sends uses it; emails already sent keep theirs.
|
|
69
|
+
*
|
|
70
|
+
* **Coded refusals:**
|
|
71
|
+
* - `EMAIL_STYLE_COLOR_INVALID` → `ValidationError` (400): a colour that is not a hex, `rgb(…)`,
|
|
72
|
+
* colour name or `transparent`. The message names the field.
|
|
73
|
+
* - `EMAIL_STYLE_FONT_FAMILY_INVALID`, `EMAIL_STYLE_LOGO_POSITION_INVALID`,
|
|
74
|
+
* `EMAIL_STYLE_BUTTON_STYLE_INVALID`, `EMAIL_LOGO_VARIANT_INVALID` → `ValidationError` (400):
|
|
75
|
+
* a choice outside its set (see {@link EmailStyle}). Sending back the value the store holds
|
|
76
|
+
* passes, even one from before the check.
|
|
77
|
+
* - `BAD_USER_INPUT` → `ValidationError` (400): a key that is not a style field, or a value of
|
|
78
|
+
* the wrong type (a size that is not a whole number). The message names it.
|
|
79
|
+
* - `MANAGED_BY_ORGANIZATION` → `BusinessRuleError` (422): a changed field while the
|
|
80
|
+
* organization locks `settings.email`.
|
|
81
|
+
* - `ORGANIZATION_SETTINGS_INHERITED` → `BusinessRuleError` (422): a changed field while the
|
|
82
|
+
* store inherits `settings.email`; `tenant.settingsSources.override` it first.
|
|
83
|
+
* - `FORBIDDEN` → `PermissionDeniedError` (403): the credential lacks `UpdateSettings`.
|
|
84
|
+
*
|
|
85
|
+
* The sizes have no engine bounds yet; a UI should keep its own.
|
|
86
|
+
*
|
|
87
|
+
* @effect write
|
|
88
|
+
* @permission UpdateSettings
|
|
89
|
+
*/
|
|
90
|
+
set(patch: EmailStylePatch, options?: Call): Promise<EmailStyle>;
|
|
91
|
+
}
|
|
92
|
+
/** The style fields, in the order the engine's input lists them. */
|
|
93
|
+
export declare const EMAIL_STYLE_FIELDS = "\n channelId\n accentColor\n backgroundColor\n contentBgColor\n textColor\n mutedTextColor\n fontFamily\n headingFontSize\n bodyFontSize\n logoPosition\n logoMaxWidth\n logoVariant\n borderRadius\n contentWidth\n buttonStyle\n";
|
|
94
|
+
export declare const EMAIL_STYLE_QUERY = "\n query EmailStyle {\n emailStyleConfig { \n channelId\n accentColor\n backgroundColor\n contentBgColor\n textColor\n mutedTextColor\n fontFamily\n headingFontSize\n bodyFontSize\n logoPosition\n logoMaxWidth\n logoVariant\n borderRadius\n contentWidth\n buttonStyle\n }\n }\n";
|
|
95
|
+
export declare const SET_EMAIL_STYLE_MUTATION = "\n mutation SetEmailStyle($input: UpdateEmailStyleConfigInput!) {\n updateEmailStyleConfig(input: $input) { \n channelId\n accentColor\n backgroundColor\n contentBgColor\n textColor\n mutedTextColor\n fontFamily\n headingFontSize\n bodyFontSize\n logoPosition\n logoMaxWidth\n logoVariant\n borderRadius\n contentWidth\n buttonStyle\n }\n }\n";
|
|
96
|
+
/**
|
|
97
|
+
* The patch as the engine's `UpdateEmailStyleConfigInput` takes it. Every other key goes through
|
|
98
|
+
* as given, so the engine refuses a misspelt or unknown one (`BAD_USER_INPUT`) instead of the SDK
|
|
99
|
+
* dropping it and answering success; `channelId` alone is left out (see {@link EmailStylePatch}).
|
|
100
|
+
*/
|
|
101
|
+
export declare function emailStyleInputOf(patch: EmailStylePatch): Record<string, unknown>;
|
|
102
|
+
export declare function createEmailStyleModule(transport: Transport): EmailStyleModule;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** The style fields, in the order the engine's input lists them. */
|
|
2
|
+
export const EMAIL_STYLE_FIELDS = /* GraphQL */ `
|
|
3
|
+
channelId
|
|
4
|
+
accentColor
|
|
5
|
+
backgroundColor
|
|
6
|
+
contentBgColor
|
|
7
|
+
textColor
|
|
8
|
+
mutedTextColor
|
|
9
|
+
fontFamily
|
|
10
|
+
headingFontSize
|
|
11
|
+
bodyFontSize
|
|
12
|
+
logoPosition
|
|
13
|
+
logoMaxWidth
|
|
14
|
+
logoVariant
|
|
15
|
+
borderRadius
|
|
16
|
+
contentWidth
|
|
17
|
+
buttonStyle
|
|
18
|
+
`;
|
|
19
|
+
export const EMAIL_STYLE_QUERY = /* GraphQL */ `
|
|
20
|
+
query EmailStyle {
|
|
21
|
+
emailStyleConfig { ${EMAIL_STYLE_FIELDS} }
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
export const SET_EMAIL_STYLE_MUTATION = /* GraphQL */ `
|
|
25
|
+
mutation SetEmailStyle($input: UpdateEmailStyleConfigInput!) {
|
|
26
|
+
updateEmailStyleConfig(input: $input) { ${EMAIL_STYLE_FIELDS} }
|
|
27
|
+
}
|
|
28
|
+
`;
|
|
29
|
+
function fromWire(wire) {
|
|
30
|
+
return {
|
|
31
|
+
channelId: String(wire.channelId),
|
|
32
|
+
accentColor: wire.accentColor,
|
|
33
|
+
backgroundColor: wire.backgroundColor,
|
|
34
|
+
contentBgColor: wire.contentBgColor,
|
|
35
|
+
textColor: wire.textColor,
|
|
36
|
+
mutedTextColor: wire.mutedTextColor,
|
|
37
|
+
fontFamily: wire.fontFamily,
|
|
38
|
+
headingFontSize: wire.headingFontSize,
|
|
39
|
+
bodyFontSize: wire.bodyFontSize,
|
|
40
|
+
logoPosition: wire.logoPosition,
|
|
41
|
+
logoMaxWidth: wire.logoMaxWidth,
|
|
42
|
+
logoVariant: wire.logoVariant,
|
|
43
|
+
borderRadius: wire.borderRadius,
|
|
44
|
+
contentWidth: wire.contentWidth,
|
|
45
|
+
buttonStyle: wire.buttonStyle,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The patch as the engine's `UpdateEmailStyleConfigInput` takes it. Every other key goes through
|
|
50
|
+
* as given, so the engine refuses a misspelt or unknown one (`BAD_USER_INPUT`) instead of the SDK
|
|
51
|
+
* dropping it and answering success; `channelId` alone is left out (see {@link EmailStylePatch}).
|
|
52
|
+
*/
|
|
53
|
+
export function emailStyleInputOf(patch) {
|
|
54
|
+
const { channelId: _readOnly, ...input } = patch;
|
|
55
|
+
return input;
|
|
56
|
+
}
|
|
57
|
+
export function createEmailStyleModule(transport) {
|
|
58
|
+
return {
|
|
59
|
+
async get(options) {
|
|
60
|
+
const data = await transport.graphql({ api: 'admin', query: EMAIL_STYLE_QUERY }, options);
|
|
61
|
+
return fromWire(data.emailStyleConfig);
|
|
62
|
+
},
|
|
63
|
+
async set(patch, options) {
|
|
64
|
+
const data = await transport.graphql({
|
|
65
|
+
api: 'admin',
|
|
66
|
+
query: SET_EMAIL_STYLE_MUTATION,
|
|
67
|
+
variables: { input: emailStyleInputOf(patch) },
|
|
68
|
+
}, options);
|
|
69
|
+
return fromWire(data.updateEmailStyleConfig);
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|