@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
package/dist/documents/index.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { createPage, idempotencyKey as mintIdempotencyKey, pageFromVendureList, readOffsetCursor, ValidationError, } from '@sixtyninecommerce/core';
|
|
2
|
+
import { storeCreditAware } from '../payments/store-credit-fields.js';
|
|
3
|
+
import { createArDocumentsModule } from './ar.js';
|
|
4
|
+
import { createDocumentEmailsModule } from './emails.js';
|
|
5
|
+
import { decodePdf } from './pdf.js';
|
|
6
|
+
// Also what `documents.ar.pdf` decodes with (headless W10-30).
|
|
7
|
+
export { decodePdf };
|
|
2
8
|
const API_DOCUMENT_TYPE = {
|
|
3
9
|
invoice: 'INVOICE',
|
|
4
10
|
'credit-note': 'CREDIT_NOTE',
|
|
5
11
|
'packing-slip': 'PACKING_SLIP',
|
|
12
|
+
'purchase-order': 'PURCHASE_ORDER',
|
|
6
13
|
};
|
|
7
14
|
/**
|
|
8
15
|
* Most blocks one document may carry. A longer list refuses the whole document
|
|
@@ -10,6 +17,12 @@ const API_DOCUMENT_TYPE = {
|
|
|
10
17
|
* dropped the overflow — a document is a page, not a feed.
|
|
11
18
|
*/
|
|
12
19
|
export const MAX_DOCUMENT_EXTENSIONS = 10;
|
|
20
|
+
/** Every {@link DocumentEmailEvent}, in the order the server's enum declares them. */
|
|
21
|
+
export const DOCUMENT_EMAIL_EVENTS = [
|
|
22
|
+
'invoice_generated',
|
|
23
|
+
'credit_note_issued',
|
|
24
|
+
'proforma',
|
|
25
|
+
];
|
|
13
26
|
const DOCUMENT_LINE_FIELDS = /* GraphQL */ `
|
|
14
27
|
description
|
|
15
28
|
sku
|
|
@@ -40,6 +53,8 @@ const INVOICE_FIELDS = /* GraphQL */ `
|
|
|
40
53
|
supplementsInvoiceId
|
|
41
54
|
lines { ${DOCUMENT_LINE_FIELDS} }
|
|
42
55
|
numberingProvider
|
|
56
|
+
amountPaid
|
|
57
|
+
amountDue
|
|
43
58
|
createdAt
|
|
44
59
|
`;
|
|
45
60
|
const CREDIT_NOTE_FIELDS = /* GraphQL */ `
|
|
@@ -172,8 +187,8 @@ export const ORDER_CREDIT_NOTE_EMAIL_SENDS_QUERY = /* GraphQL */ `
|
|
|
172
187
|
}
|
|
173
188
|
`;
|
|
174
189
|
export const ISSUE_PARTIAL_CREDIT_NOTE_MUTATION = /* GraphQL */ `
|
|
175
|
-
mutation IssuePartialCreditNote($input: IssuePartialCreditNoteInput
|
|
176
|
-
issuePartialCreditNote(input: $input) { ${CREDIT_NOTE_FIELDS} }
|
|
190
|
+
mutation IssuePartialCreditNote($input: IssuePartialCreditNoteInput!, $idempotencyKey: String) {
|
|
191
|
+
issuePartialCreditNote(input: $input, idempotencyKey: $idempotencyKey) { ${CREDIT_NOTE_FIELDS} }
|
|
177
192
|
}
|
|
178
193
|
`;
|
|
179
194
|
export const ISSUE_SUPPLEMENTARY_INVOICE_MUTATION = /* GraphQL */ `
|
|
@@ -232,9 +247,43 @@ const INVOICE_CORRECTION_PLAN_FIELDS = /* GraphQL */ `
|
|
|
232
247
|
options { paymentId method amount refundable }
|
|
233
248
|
recommendedPaymentId
|
|
234
249
|
}
|
|
235
|
-
accountCredit { available unavailableCode message }
|
|
250
|
+
accountCredit { available unavailableCode message book }
|
|
236
251
|
settlement
|
|
237
252
|
blockers { code message path }
|
|
253
|
+
returnedGoods {
|
|
254
|
+
lines {
|
|
255
|
+
orderLineId
|
|
256
|
+
description
|
|
257
|
+
quantity
|
|
258
|
+
returnedQuantity
|
|
259
|
+
creditedQuantity
|
|
260
|
+
creditableQuantity
|
|
261
|
+
creditableAmount
|
|
262
|
+
returnCodes
|
|
263
|
+
}
|
|
264
|
+
shipping { charged refunded credited creditable returnCodes }
|
|
265
|
+
}
|
|
266
|
+
givenBack {
|
|
267
|
+
lines {
|
|
268
|
+
orderLineId
|
|
269
|
+
description
|
|
270
|
+
quantity
|
|
271
|
+
returnedQuantity
|
|
272
|
+
creditedQuantity
|
|
273
|
+
priceCredited
|
|
274
|
+
creditableQuantity
|
|
275
|
+
creditableAmount
|
|
276
|
+
returnCodes
|
|
277
|
+
creditNoteNumbers
|
|
278
|
+
}
|
|
279
|
+
shipping { charged refunded credited creditable returnCodes creditNoteNumbers }
|
|
280
|
+
}
|
|
281
|
+
paymentTerms {
|
|
282
|
+
invoiced { summary paymentDays conditionCode dueOn }
|
|
283
|
+
replacement { summary paymentDays conditionCode dueOn }
|
|
284
|
+
accepts
|
|
285
|
+
unavailableMessage
|
|
286
|
+
}
|
|
238
287
|
`;
|
|
239
288
|
export const PLAN_INVOICE_CORRECTION_QUERY = /* GraphQL */ `
|
|
240
289
|
query PlanInvoiceCorrection($input: InvoiceCorrectionInput!) {
|
|
@@ -269,7 +318,7 @@ export const COMMIT_INVOICE_CORRECTION_MUTATION = /* GraphQL */ `
|
|
|
269
318
|
numberingProvider
|
|
270
319
|
}
|
|
271
320
|
refund { id state total paymentId }
|
|
272
|
-
accountCredit { amount currencyCode unappliedCashIds }
|
|
321
|
+
accountCredit { amount currencyCode unappliedCashIds book storeCreditEntryIds }
|
|
273
322
|
}
|
|
274
323
|
}
|
|
275
324
|
`;
|
|
@@ -288,6 +337,231 @@ export const DELETE_DOCUMENT_EXTENSION_MUTATION = /* GraphQL */ `
|
|
|
288
337
|
deleteDocumentExtension(key: $key)
|
|
289
338
|
}
|
|
290
339
|
`;
|
|
340
|
+
/**
|
|
341
|
+
* The invoice config every engine answers. `columnUnitPriceAfterDiscount` arrived after the rest
|
|
342
|
+
* (2026-10-09), and an engine without it refuses the whole document, so each document has a
|
|
343
|
+
* `_LEGACY` twin selecting only these, sent once the engine refused the current one.
|
|
344
|
+
*/
|
|
345
|
+
const INVOICE_CONFIG_FIELDS_LEGACY = /* GraphQL */ `
|
|
346
|
+
id
|
|
347
|
+
enabled
|
|
348
|
+
prefix
|
|
349
|
+
suffix
|
|
350
|
+
nextNumber
|
|
351
|
+
digits
|
|
352
|
+
yearFormat
|
|
353
|
+
yearReset
|
|
354
|
+
creditNoteNextNumber
|
|
355
|
+
creditNotePrefix
|
|
356
|
+
creditNoteSuffix
|
|
357
|
+
creditNoteDigits
|
|
358
|
+
creditNoteYearFormat
|
|
359
|
+
creditNoteYearReset
|
|
360
|
+
columnProduct
|
|
361
|
+
columnSku
|
|
362
|
+
columnQuantity
|
|
363
|
+
columnUnitPriceExcl
|
|
364
|
+
columnUnitPriceDiscount
|
|
365
|
+
columnUnitPriceIncl
|
|
366
|
+
columnLineTotal
|
|
367
|
+
columnLineDiscount
|
|
368
|
+
columnTaxRate
|
|
369
|
+
columnTaxAmount
|
|
370
|
+
columnTotal
|
|
371
|
+
showLogo
|
|
372
|
+
legalIdentityBlock
|
|
373
|
+
footerText
|
|
374
|
+
defaultLanguage
|
|
375
|
+
externalNumberOrderField
|
|
376
|
+
invoicingProvider
|
|
377
|
+
`;
|
|
378
|
+
const INVOICE_CONFIG_FIELDS = /* GraphQL */ `
|
|
379
|
+
${INVOICE_CONFIG_FIELDS_LEGACY}
|
|
380
|
+
columnUnitPriceAfterDiscount
|
|
381
|
+
`;
|
|
382
|
+
export const INVOICE_CONFIG_QUERY = /* GraphQL */ `
|
|
383
|
+
query InvoiceConfig {
|
|
384
|
+
invoiceConfig { ${INVOICE_CONFIG_FIELDS} }
|
|
385
|
+
}
|
|
386
|
+
`;
|
|
387
|
+
export const UPDATE_INVOICE_CONFIG_MUTATION = /* GraphQL */ `
|
|
388
|
+
mutation UpdateInvoiceConfig($input: UpdateInvoiceConfigInput!) {
|
|
389
|
+
updateInvoiceConfig(input: $input) { ${INVOICE_CONFIG_FIELDS} }
|
|
390
|
+
}
|
|
391
|
+
`;
|
|
392
|
+
/** {@link INVOICE_CONFIG_QUERY} for an engine without `columnUnitPriceAfterDiscount`. */
|
|
393
|
+
export const INVOICE_CONFIG_QUERY_LEGACY = /* GraphQL */ `
|
|
394
|
+
query InvoiceConfig {
|
|
395
|
+
invoiceConfig { ${INVOICE_CONFIG_FIELDS_LEGACY} }
|
|
396
|
+
}
|
|
397
|
+
`;
|
|
398
|
+
/** {@link UPDATE_INVOICE_CONFIG_MUTATION} for an engine without `columnUnitPriceAfterDiscount`. */
|
|
399
|
+
export const UPDATE_INVOICE_CONFIG_MUTATION_LEGACY = /* GraphQL */ `
|
|
400
|
+
mutation UpdateInvoiceConfig($input: UpdateInvoiceConfigInput!) {
|
|
401
|
+
updateInvoiceConfig(input: $input) { ${INVOICE_CONFIG_FIELDS_LEGACY} }
|
|
402
|
+
}
|
|
403
|
+
`;
|
|
404
|
+
/** {@link SET_INVOICING_PROVIDER_MUTATION} for an engine without `columnUnitPriceAfterDiscount`. */
|
|
405
|
+
export const SET_INVOICING_PROVIDER_MUTATION_LEGACY = /* GraphQL */ `
|
|
406
|
+
mutation SetInvoicingProvider($code: String!) {
|
|
407
|
+
setInvoicingProvider(code: $code) { ${INVOICE_CONFIG_FIELDS_LEGACY} }
|
|
408
|
+
}
|
|
409
|
+
`;
|
|
410
|
+
export const INVOICING_PROVIDERS_QUERY = /* GraphQL */ `
|
|
411
|
+
query InvoicingProviders {
|
|
412
|
+
invoicingProviders {
|
|
413
|
+
code
|
|
414
|
+
label
|
|
415
|
+
external
|
|
416
|
+
documents
|
|
417
|
+
ready
|
|
418
|
+
notReadyReason
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
`;
|
|
422
|
+
export const SET_INVOICING_PROVIDER_MUTATION = /* GraphQL */ `
|
|
423
|
+
mutation SetInvoicingProvider($code: String!) {
|
|
424
|
+
setInvoicingProvider(code: $code) { ${INVOICE_CONFIG_FIELDS} }
|
|
425
|
+
}
|
|
426
|
+
`;
|
|
427
|
+
const FINANCIAL_DOCUMENT_ISSUE_FIELDS = /* GraphQL */ `
|
|
428
|
+
id
|
|
429
|
+
provider
|
|
430
|
+
operationKey
|
|
431
|
+
documentType
|
|
432
|
+
ledger
|
|
433
|
+
orderId
|
|
434
|
+
status
|
|
435
|
+
externalRef
|
|
436
|
+
externalNumber
|
|
437
|
+
documentDate
|
|
438
|
+
attempts
|
|
439
|
+
lastError
|
|
440
|
+
reservedAt
|
|
441
|
+
bookedAt
|
|
442
|
+
recordedAt
|
|
443
|
+
abandonReason
|
|
444
|
+
`;
|
|
445
|
+
export const FINANCIAL_DOCUMENT_ISSUES_QUERY = /* GraphQL */ `
|
|
446
|
+
query FinancialDocumentIssues($unresolvedOnly: Boolean, $take: Int, $skip: Int) {
|
|
447
|
+
financialDocumentIssues(unresolvedOnly: $unresolvedOnly, take: $take, skip: $skip) {
|
|
448
|
+
totalItems
|
|
449
|
+
items { ${FINANCIAL_DOCUMENT_ISSUE_FIELDS} }
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
`;
|
|
453
|
+
export const ABANDON_FINANCIAL_DOCUMENT_ISSUE_MUTATION = /* GraphQL */ `
|
|
454
|
+
mutation AbandonFinancialDocumentIssue($id: ID!, $reason: String!) {
|
|
455
|
+
abandonFinancialDocumentIssue(id: $id, reason: $reason) { ${FINANCIAL_DOCUMENT_ISSUE_FIELDS} }
|
|
456
|
+
}
|
|
457
|
+
`;
|
|
458
|
+
export const RESOLVE_FINANCIAL_DOCUMENT_ISSUE_MUTATION = /* GraphQL */ `
|
|
459
|
+
mutation ResolveFinancialDocumentIssue($id: ID!, $reason: String!) {
|
|
460
|
+
resolveFinancialDocumentIssue(id: $id, reason: $reason) { ${FINANCIAL_DOCUMENT_ISSUE_FIELDS} }
|
|
461
|
+
}
|
|
462
|
+
`;
|
|
463
|
+
export const SEND_PROFORMA_INVOICE_MUTATION = /* GraphQL */ `
|
|
464
|
+
mutation SendProformaInvoice($input: SendProformaInvoiceInput!) {
|
|
465
|
+
sendProformaInvoice(input: $input)
|
|
466
|
+
}
|
|
467
|
+
`;
|
|
468
|
+
export const ORDER_PROFORMA_SENDS_QUERY = /* GraphQL */ `
|
|
469
|
+
query OrderProformaSends($orderId: ID!) {
|
|
470
|
+
orderProformaSends(orderId: $orderId) {
|
|
471
|
+
id
|
|
472
|
+
orderId
|
|
473
|
+
recipients
|
|
474
|
+
message
|
|
475
|
+
invoicedOn
|
|
476
|
+
createdAt
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
`;
|
|
480
|
+
export const ORDER_INVOICE_EMAIL_SENDS_QUERY = /* GraphQL */ `
|
|
481
|
+
query OrderInvoiceEmailSends($orderId: ID!) {
|
|
482
|
+
orderInvoiceEmailSends(orderId: $orderId) {
|
|
483
|
+
id
|
|
484
|
+
orderId
|
|
485
|
+
recipientsTo
|
|
486
|
+
recipientsCc
|
|
487
|
+
createdAt
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
`;
|
|
491
|
+
/** Its own document: `documentEmailRecipients` is new, so on an older engine this call alone fails. */
|
|
492
|
+
export const DOCUMENT_EMAIL_RECIPIENTS_QUERY = /* GraphQL */ `
|
|
493
|
+
query DocumentEmailRecipients($orderId: ID!, $event: DocumentEmailEvent!) {
|
|
494
|
+
documentEmailRecipients(orderId: $orderId, event: $event) {
|
|
495
|
+
to
|
|
496
|
+
cc
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
`;
|
|
500
|
+
export const REGENERATE_PACKING_SLIP_MUTATION = /* GraphQL */ `
|
|
501
|
+
mutation RegeneratePackingSlip($fulfillmentId: ID!, $languageCode: String) {
|
|
502
|
+
regeneratePackingSlip(fulfillmentId: $fulfillmentId, languageCode: $languageCode) {
|
|
503
|
+
${PACKING_SLIP_FIELDS}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
`;
|
|
507
|
+
export const PACKING_SLIP_FIELDS_QUERY = /* GraphQL */ `
|
|
508
|
+
query PackingSlipFulfillmentFields {
|
|
509
|
+
packingSlipFulfillmentFields {
|
|
510
|
+
handlerCode
|
|
511
|
+
handlerName
|
|
512
|
+
fields {
|
|
513
|
+
key
|
|
514
|
+
label
|
|
515
|
+
type
|
|
516
|
+
defaultVisible
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
`;
|
|
521
|
+
const PACKING_SLIP_CONFIG_FIELDS = /* GraphQL */ `
|
|
522
|
+
id
|
|
523
|
+
enabled
|
|
524
|
+
prefix
|
|
525
|
+
suffix
|
|
526
|
+
nextNumber
|
|
527
|
+
digits
|
|
528
|
+
yearFormat
|
|
529
|
+
yearReset
|
|
530
|
+
columnRowNumber
|
|
531
|
+
columnProduct
|
|
532
|
+
columnSku
|
|
533
|
+
columnQuantity
|
|
534
|
+
showLogo
|
|
535
|
+
showInvoiceNumber
|
|
536
|
+
fulfillmentFieldVisibility
|
|
537
|
+
footerText
|
|
538
|
+
defaultLanguage
|
|
539
|
+
`;
|
|
540
|
+
export const PACKING_SLIP_CONFIG_QUERY = /* GraphQL */ `
|
|
541
|
+
query PackingSlipConfig {
|
|
542
|
+
packingSlipConfig { ${PACKING_SLIP_CONFIG_FIELDS} }
|
|
543
|
+
}
|
|
544
|
+
`;
|
|
545
|
+
export const UPDATE_PACKING_SLIP_CONFIG_MUTATION = /* GraphQL */ `
|
|
546
|
+
mutation UpdatePackingSlipConfig($input: UpdatePackingSlipConfigInput!) {
|
|
547
|
+
updatePackingSlipConfig(input: $input) { ${PACKING_SLIP_CONFIG_FIELDS} }
|
|
548
|
+
}
|
|
549
|
+
`;
|
|
550
|
+
/**
|
|
551
|
+
* Whether a failure is "this engine does not know that field yet": the document refused before it
|
|
552
|
+
* ran (graphql-js answers a validation failure with HTTP 400 → `BAD_REQUEST`, or coded
|
|
553
|
+
* `GRAPHQL_VALIDATION_FAILED`), never an execution-time refusal or a transient failure. The
|
|
554
|
+
* returns module reads the same signs.
|
|
555
|
+
*/
|
|
556
|
+
function isUnknownFieldRejection(error) {
|
|
557
|
+
if (!(error instanceof ValidationError) || error.service !== 'vendure')
|
|
558
|
+
return false;
|
|
559
|
+
return (error.code === 'BAD_REQUEST' ||
|
|
560
|
+
error.code === 'GRAPHQL_VALIDATION_FAILED' ||
|
|
561
|
+
/Cannot query field/i.test(error.message));
|
|
562
|
+
}
|
|
563
|
+
/** The server's default page of booking attempts; the SDK states it so the cursor arithmetic knows the size. */
|
|
564
|
+
const ISSUES_PAGE_SIZE = 50;
|
|
291
565
|
/** A complete array behind the SDK's page shape (spec §9.2). */
|
|
292
566
|
function wholeList(items, what) {
|
|
293
567
|
return createPage(items, { nextCursor: null, hasNext: false, total: items.length }, () => {
|
|
@@ -322,19 +596,18 @@ function fromApiTypes(values) {
|
|
|
322
596
|
function toSchema(raw) {
|
|
323
597
|
return { ...raw, documentTypes: fromApiTypes(raw.documentTypes) };
|
|
324
598
|
}
|
|
325
|
-
/** Decode the base64 a PDF-returning mutation answers with. */
|
|
326
|
-
function decodePdf(base64) {
|
|
327
|
-
// Node and every modern runtime have `atob`; Buffer would tie this package
|
|
328
|
-
// to Node, and it ships to browsers as the dashboard's client.
|
|
329
|
-
const binary = atob(base64);
|
|
330
|
-
const bytes = new Uint8Array(binary.length);
|
|
331
|
-
for (let index = 0; index < binary.length; index += 1) {
|
|
332
|
-
bytes[index] = binary.charCodeAt(index);
|
|
333
|
-
}
|
|
334
|
-
return bytes;
|
|
335
|
-
}
|
|
336
599
|
/** The server's default page; the SDK states it so the cursor arithmetic knows the size. */
|
|
337
600
|
const CUSTOMER_DOCUMENTS_PAGE_SIZE = 25;
|
|
601
|
+
/**
|
|
602
|
+
* The key a caller retries an attempt under, put on the error the attempt threw (when nothing below
|
|
603
|
+
* put one there already). Returns the same error.
|
|
604
|
+
*/
|
|
605
|
+
function withAttemptKey(error, key) {
|
|
606
|
+
if (error !== null && typeof error === 'object' && !('idempotencyKey' in error)) {
|
|
607
|
+
Object.defineProperty(error, 'idempotencyKey', { value: key, enumerable: true });
|
|
608
|
+
}
|
|
609
|
+
return error;
|
|
610
|
+
}
|
|
338
611
|
export function createDocumentsModule(transport) {
|
|
339
612
|
const customerDocumentsPage = async (customerId, skip, take, options) => {
|
|
340
613
|
const data = await transport.graphql({
|
|
@@ -346,6 +619,31 @@ export function createDocumentsModule(transport) {
|
|
|
346
619
|
const items = list.items.map((item) => ({ ...item, type: fromApiType(item.type) }));
|
|
347
620
|
return pageFromVendureList({ items, totalItems: list.totalItems }, skip, take, (cursor) => customerDocumentsPage(customerId, readOffsetCursor(cursor), take, options));
|
|
348
621
|
};
|
|
622
|
+
/** Latched once the engine proved it predates `columnUnitPriceAfterDiscount` (one refused request per client). */
|
|
623
|
+
let afterDiscountUnsupported = false;
|
|
624
|
+
/** Sends the current invoice-config document, or its legacy twin once the engine refused the column. */
|
|
625
|
+
async function withInvoiceConfigFallback(query, legacy, variables, options) {
|
|
626
|
+
if (!afterDiscountUnsupported) {
|
|
627
|
+
try {
|
|
628
|
+
return await transport.graphql({ api: 'admin', query, variables }, options);
|
|
629
|
+
}
|
|
630
|
+
catch (error) {
|
|
631
|
+
if (!isUnknownFieldRejection(error))
|
|
632
|
+
throw error;
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
const data = await transport.graphql({ api: 'admin', query: legacy, variables }, options);
|
|
636
|
+
afterDiscountUnsupported = true;
|
|
637
|
+
return data;
|
|
638
|
+
}
|
|
639
|
+
const issuesPage = async (skip, take, options) => {
|
|
640
|
+
const data = await transport.graphql({
|
|
641
|
+
api: 'admin',
|
|
642
|
+
query: FINANCIAL_DOCUMENT_ISSUES_QUERY,
|
|
643
|
+
variables: { unresolvedOnly: options?.unresolvedOnly ?? false, take, skip },
|
|
644
|
+
}, options);
|
|
645
|
+
return pageFromVendureList(data.financialDocumentIssues, skip, take, (cursor) => issuesPage(readOffsetCursor(cursor), take, options));
|
|
646
|
+
};
|
|
349
647
|
return {
|
|
350
648
|
// One implementation behind the two overloads the interface declares; the
|
|
351
649
|
// cast is the standard TypeScript shape for that, since an implementation
|
|
@@ -460,17 +758,31 @@ export function createDocumentsModule(transport) {
|
|
|
460
758
|
return wholeList(data.orderCreditNoteEmailSends, 'orderCreditNoteEmailSends');
|
|
461
759
|
},
|
|
462
760
|
async issuePartialCreditNote(input, options) {
|
|
463
|
-
const
|
|
464
|
-
|
|
761
|
+
const key = options?.idempotencyKey ?? mintIdempotencyKey();
|
|
762
|
+
try {
|
|
763
|
+
const data = await transport.graphql({
|
|
764
|
+
api: 'admin',
|
|
765
|
+
query: ISSUE_PARTIAL_CREDIT_NOTE_MUTATION,
|
|
766
|
+
// A retry of this attempt sends the same input under the same key.
|
|
767
|
+
variables: { input, idempotencyKey: key },
|
|
768
|
+
}, { ...options, idempotencyKey: key });
|
|
769
|
+
return { ...data.issuePartialCreditNote, idempotencyKey: key };
|
|
770
|
+
}
|
|
771
|
+
catch (error) {
|
|
772
|
+
throw withAttemptKey(error, key);
|
|
773
|
+
}
|
|
465
774
|
},
|
|
466
775
|
async planCorrection(input, options) {
|
|
467
|
-
|
|
776
|
+
// `book` (incentives sprint 8 PR 4): dropped once for an engine before it.
|
|
777
|
+
const data = await storeCreditAware(transport).graphql({ api: 'admin', query: PLAN_INVOICE_CORRECTION_QUERY, variables: { input } }, options);
|
|
468
778
|
return data.planInvoiceCorrection;
|
|
469
779
|
},
|
|
470
780
|
async commitCorrection(input, options) {
|
|
471
781
|
const key = options.idempotencyKey ?? mintIdempotencyKey();
|
|
472
782
|
try {
|
|
473
|
-
|
|
783
|
+
// `book` and `storeCreditEntryIds` (sprint 8 PR 4): an engine before them refuses the
|
|
784
|
+
// document before it runs, and it is sent once more without them under the same key.
|
|
785
|
+
const data = await storeCreditAware(transport).graphql({
|
|
474
786
|
api: 'admin',
|
|
475
787
|
query: COMMIT_INVOICE_CORRECTION_MUTATION,
|
|
476
788
|
// The input goes out as given, never normalised: it must be the request the plan was
|
|
@@ -480,17 +792,119 @@ export function createDocumentsModule(transport) {
|
|
|
480
792
|
return { ...data.commitInvoiceCorrection, idempotencyKey: key };
|
|
481
793
|
}
|
|
482
794
|
catch (error) {
|
|
483
|
-
|
|
484
|
-
if (error !== null && typeof error === 'object' && !('idempotencyKey' in error)) {
|
|
485
|
-
Object.defineProperty(error, 'idempotencyKey', { value: key, enumerable: true });
|
|
486
|
-
}
|
|
487
|
-
throw error;
|
|
795
|
+
throw withAttemptKey(error, key);
|
|
488
796
|
}
|
|
489
797
|
},
|
|
490
798
|
async issueSupplementaryInvoice(input, options) {
|
|
491
799
|
const data = await transport.graphql({ api: 'admin', query: ISSUE_SUPPLEMENTARY_INVOICE_MUTATION, variables: { input } }, options);
|
|
492
800
|
return data.issueSupplementaryInvoice;
|
|
493
801
|
},
|
|
802
|
+
async sendProforma(orderId, input, options) {
|
|
803
|
+
const data = await transport.graphql({
|
|
804
|
+
api: 'admin',
|
|
805
|
+
query: SEND_PROFORMA_INVOICE_MUTATION,
|
|
806
|
+
variables: {
|
|
807
|
+
input: {
|
|
808
|
+
orderId,
|
|
809
|
+
invoicedOn: input.invoicedOn,
|
|
810
|
+
recipients: input.recipients,
|
|
811
|
+
message: input.message ?? null,
|
|
812
|
+
languageCode: input.languageCode ?? null,
|
|
813
|
+
},
|
|
814
|
+
},
|
|
815
|
+
}, options);
|
|
816
|
+
return data.sendProformaInvoice;
|
|
817
|
+
},
|
|
818
|
+
async proformaSends(orderId, options) {
|
|
819
|
+
const data = await transport.graphql({ api: 'admin', query: ORDER_PROFORMA_SENDS_QUERY, variables: { orderId } }, options);
|
|
820
|
+
return wholeList(data.orderProformaSends, 'orderProformaSends');
|
|
821
|
+
},
|
|
822
|
+
async invoiceEmailSends(orderId, options) {
|
|
823
|
+
const data = await transport.graphql({ api: 'admin', query: ORDER_INVOICE_EMAIL_SENDS_QUERY, variables: { orderId } }, options);
|
|
824
|
+
return wholeList(data.orderInvoiceEmailSends, 'orderInvoiceEmailSends');
|
|
825
|
+
},
|
|
826
|
+
async emailRecipients(orderId, event, options) {
|
|
827
|
+
if (!DOCUMENT_EMAIL_EVENTS.includes(event)) {
|
|
828
|
+
throw new ValidationError({
|
|
829
|
+
code: 'INVALID_DOCUMENT_EMAIL_EVENT',
|
|
830
|
+
message: `"${String(event)}" is not a document email. Expected one of ${DOCUMENT_EMAIL_EVENTS.join(', ')}.`,
|
|
831
|
+
status: 400,
|
|
832
|
+
service: 'vendure',
|
|
833
|
+
});
|
|
834
|
+
}
|
|
835
|
+
const data = await transport.graphql({ api: 'admin', query: DOCUMENT_EMAIL_RECIPIENTS_QUERY, variables: { orderId, event } }, options);
|
|
836
|
+
return data.documentEmailRecipients;
|
|
837
|
+
},
|
|
838
|
+
async regeneratePackingSlip(fulfillmentId, options) {
|
|
839
|
+
const data = await transport.graphql({
|
|
840
|
+
api: 'admin',
|
|
841
|
+
query: REGENERATE_PACKING_SLIP_MUTATION,
|
|
842
|
+
variables: { fulfillmentId, languageCode: options?.languageCode ?? null },
|
|
843
|
+
}, options);
|
|
844
|
+
return data.regeneratePackingSlip;
|
|
845
|
+
},
|
|
846
|
+
async packingSlipFields(options) {
|
|
847
|
+
const data = await transport.graphql({ api: 'admin', query: PACKING_SLIP_FIELDS_QUERY }, options);
|
|
848
|
+
return wholeList(data.packingSlipFulfillmentFields, 'packingSlipFulfillmentFields');
|
|
849
|
+
},
|
|
850
|
+
invoiceConfig: {
|
|
851
|
+
async get(options) {
|
|
852
|
+
const data = await withInvoiceConfigFallback(INVOICE_CONFIG_QUERY, INVOICE_CONFIG_QUERY_LEGACY, {}, options);
|
|
853
|
+
return data.invoiceConfig;
|
|
854
|
+
},
|
|
855
|
+
async update(input, options) {
|
|
856
|
+
// Validation refuses the document before anything runs, so the legacy send is the first
|
|
857
|
+
// attempt, never a repeat.
|
|
858
|
+
const data = await withInvoiceConfigFallback(UPDATE_INVOICE_CONFIG_MUTATION, UPDATE_INVOICE_CONFIG_MUTATION_LEGACY, { input }, options);
|
|
859
|
+
return data.updateInvoiceConfig;
|
|
860
|
+
},
|
|
861
|
+
},
|
|
862
|
+
invoicingProviders: {
|
|
863
|
+
async list(options) {
|
|
864
|
+
const data = await transport.graphql({ api: 'admin', query: INVOICING_PROVIDERS_QUERY }, options);
|
|
865
|
+
return wholeList(data.invoicingProviders, 'invoicingProviders');
|
|
866
|
+
},
|
|
867
|
+
async set(provider, options) {
|
|
868
|
+
const data = await withInvoiceConfigFallback(SET_INVOICING_PROVIDER_MUTATION, SET_INVOICING_PROVIDER_MUTATION_LEGACY, { code: provider }, options);
|
|
869
|
+
return data.setInvoicingProvider;
|
|
870
|
+
},
|
|
871
|
+
},
|
|
872
|
+
issues: {
|
|
873
|
+
list(options) {
|
|
874
|
+
// The Admin API is offset-paged; the offset hides inside the cursor (spec §9.3).
|
|
875
|
+
const take = options?.limit ?? ISSUES_PAGE_SIZE;
|
|
876
|
+
const skip = options?.after === undefined ? 0 : readOffsetCursor(options.after);
|
|
877
|
+
return issuesPage(skip, take, options);
|
|
878
|
+
},
|
|
879
|
+
async abandon(id, reason, options) {
|
|
880
|
+
const data = await transport.graphql({
|
|
881
|
+
api: 'admin',
|
|
882
|
+
query: ABANDON_FINANCIAL_DOCUMENT_ISSUE_MUTATION,
|
|
883
|
+
variables: { id, reason },
|
|
884
|
+
}, options);
|
|
885
|
+
return data.abandonFinancialDocumentIssue;
|
|
886
|
+
},
|
|
887
|
+
async resolve(id, reason, options) {
|
|
888
|
+
const data = await transport.graphql({
|
|
889
|
+
api: 'admin',
|
|
890
|
+
query: RESOLVE_FINANCIAL_DOCUMENT_ISSUE_MUTATION,
|
|
891
|
+
variables: { id, reason },
|
|
892
|
+
}, options);
|
|
893
|
+
return data.resolveFinancialDocumentIssue;
|
|
894
|
+
},
|
|
895
|
+
},
|
|
896
|
+
packingSlipConfig: {
|
|
897
|
+
async get(options) {
|
|
898
|
+
const data = await transport.graphql({ api: 'admin', query: PACKING_SLIP_CONFIG_QUERY }, options);
|
|
899
|
+
return data.packingSlipConfig;
|
|
900
|
+
},
|
|
901
|
+
async update(input, options) {
|
|
902
|
+
const data = await transport.graphql({ api: 'admin', query: UPDATE_PACKING_SLIP_CONFIG_MUTATION, variables: { input } }, options);
|
|
903
|
+
return data.updatePackingSlipConfig;
|
|
904
|
+
},
|
|
905
|
+
},
|
|
906
|
+
ar: createArDocumentsModule(transport),
|
|
907
|
+
emails: createDocumentEmailsModule(transport),
|
|
494
908
|
extensions: {
|
|
495
909
|
async list(options) {
|
|
496
910
|
const data = await transport.graphql({ api: 'admin', query: DOCUMENT_EXTENSIONS_QUERY }, options);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Decode the base64 a PDF-returning call answers with (`documents.previewInvoice`, `documents.ar.pdf`). */
|
|
2
|
+
export function decodePdf(base64) {
|
|
3
|
+
// Node and every modern runtime have `atob`; Buffer would tie this package
|
|
4
|
+
// to Node, and it ships to browsers as the dashboard's client.
|
|
5
|
+
const binary = atob(base64);
|
|
6
|
+
const bytes = new Uint8Array(binary.length);
|
|
7
|
+
for (let index = 0; index < binary.length; index += 1) {
|
|
8
|
+
bytes[index] = binary.charCodeAt(index);
|
|
9
|
+
}
|
|
10
|
+
return bytes;
|
|
11
|
+
}
|