@endora-commerce/contracts 0.100.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/LICENSE +21 -0
- package/README.md +34 -0
- package/dist/actor.d.ts +79 -0
- package/dist/actor.d.ts.map +1 -0
- package/dist/actor.js +41 -0
- package/dist/actor.js.map +1 -0
- package/dist/addresses.d.ts +134 -0
- package/dist/addresses.d.ts.map +1 -0
- package/dist/addresses.js +16 -0
- package/dist/addresses.js.map +1 -0
- package/dist/admin-actions.d.ts +367 -0
- package/dist/admin-actions.d.ts.map +1 -0
- package/dist/admin-actions.js +287 -0
- package/dist/admin-actions.js.map +1 -0
- package/dist/admin-contributions.d.ts +518 -0
- package/dist/admin-contributions.d.ts.map +1 -0
- package/dist/admin-contributions.js +495 -0
- package/dist/admin-contributions.js.map +1 -0
- package/dist/admin-i18n.d.ts +135 -0
- package/dist/admin-i18n.d.ts.map +1 -0
- package/dist/admin-i18n.js +72 -0
- package/dist/admin-i18n.js.map +1 -0
- package/dist/admin-notifications.d.ts +55 -0
- package/dist/admin-notifications.d.ts.map +1 -0
- package/dist/admin-notifications.js +16 -0
- package/dist/admin-notifications.js.map +1 -0
- package/dist/admin-roles.d.ts +125 -0
- package/dist/admin-roles.d.ts.map +1 -0
- package/dist/admin-roles.js +2 -0
- package/dist/admin-roles.js.map +1 -0
- package/dist/admin-users.d.ts +178 -0
- package/dist/admin-users.d.ts.map +1 -0
- package/dist/admin-users.js +14 -0
- package/dist/admin-users.js.map +1 -0
- package/dist/admin.d.ts +243 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +246 -0
- package/dist/admin.js.map +1 -0
- package/dist/analytics.d.ts +123 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +68 -0
- package/dist/analytics.js.map +1 -0
- package/dist/api-keys.d.ts +97 -0
- package/dist/api-keys.d.ts.map +1 -0
- package/dist/api-keys.js +64 -0
- package/dist/api-keys.js.map +1 -0
- package/dist/assets-library.d.ts +684 -0
- package/dist/assets-library.d.ts.map +1 -0
- package/dist/assets-library.js +181 -0
- package/dist/assets-library.js.map +1 -0
- package/dist/audit-logs.d.ts +141 -0
- package/dist/audit-logs.d.ts.map +1 -0
- package/dist/audit-logs.js +31 -0
- package/dist/audit-logs.js.map +1 -0
- package/dist/auth.d.ts +174 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +27 -0
- package/dist/auth.js.map +1 -0
- package/dist/blog.d.ts +669 -0
- package/dist/blog.d.ts.map +1 -0
- package/dist/blog.js +360 -0
- package/dist/blog.js.map +1 -0
- package/dist/capabilities.d.ts +40 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +38 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/carts.d.ts +1367 -0
- package/dist/carts.d.ts.map +1 -0
- package/dist/carts.js +405 -0
- package/dist/carts.js.map +1 -0
- package/dist/catalog.d.ts +2855 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +1543 -0
- package/dist/catalog.js.map +1 -0
- package/dist/cms.d.ts +872 -0
- package/dist/cms.d.ts.map +1 -0
- package/dist/cms.js +468 -0
- package/dist/cms.js.map +1 -0
- package/dist/common.d.ts +82 -0
- package/dist/common.d.ts.map +1 -0
- package/dist/common.js +72 -0
- package/dist/common.js.map +1 -0
- package/dist/comparisons.d.ts +487 -0
- package/dist/comparisons.d.ts.map +1 -0
- package/dist/comparisons.js +221 -0
- package/dist/comparisons.js.map +1 -0
- package/dist/credentials.d.ts +292 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +142 -0
- package/dist/credentials.js.map +1 -0
- package/dist/credit-limits.d.ts +111 -0
- package/dist/credit-limits.d.ts.map +1 -0
- package/dist/credit-limits.js +35 -0
- package/dist/credit-limits.js.map +1 -0
- package/dist/currencies.d.ts +127 -0
- package/dist/currencies.d.ts.map +1 -0
- package/dist/currencies.js +20 -0
- package/dist/currencies.js.map +1 -0
- package/dist/custom-fields.d.ts +345 -0
- package/dist/custom-fields.d.ts.map +1 -0
- package/dist/custom-fields.js +185 -0
- package/dist/custom-fields.js.map +1 -0
- package/dist/customer-accounts.d.ts +690 -0
- package/dist/customer-accounts.d.ts.map +1 -0
- package/dist/customer-accounts.js +41 -0
- package/dist/customer-accounts.js.map +1 -0
- package/dist/customers.d.ts +305 -0
- package/dist/customers.d.ts.map +1 -0
- package/dist/customers.js +158 -0
- package/dist/customers.js.map +1 -0
- package/dist/dictionary.d.ts +580 -0
- package/dist/dictionary.d.ts.map +1 -0
- package/dist/dictionary.js +297 -0
- package/dist/dictionary.js.map +1 -0
- package/dist/email-address.d.ts +62 -0
- package/dist/email-address.d.ts.map +1 -0
- package/dist/email-address.js +64 -0
- package/dist/email-address.js.map +1 -0
- package/dist/email.d.ts +175 -0
- package/dist/email.d.ts.map +1 -0
- package/dist/email.js +45 -0
- package/dist/email.js.map +1 -0
- package/dist/envelopes.d.ts +15 -0
- package/dist/envelopes.d.ts.map +1 -0
- package/dist/envelopes.js +16 -0
- package/dist/envelopes.js.map +1 -0
- package/dist/environment-inputs.d.ts +306 -0
- package/dist/environment-inputs.d.ts.map +1 -0
- package/dist/environment-inputs.js +277 -0
- package/dist/environment-inputs.js.map +1 -0
- package/dist/erp-connector.d.ts +52 -0
- package/dist/erp-connector.d.ts.map +1 -0
- package/dist/erp-connector.js +34 -0
- package/dist/erp-connector.js.map +1 -0
- package/dist/errors.d.ts +455 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +532 -0
- package/dist/errors.js.map +1 -0
- package/dist/google-analytics.d.ts +181 -0
- package/dist/google-analytics.d.ts.map +1 -0
- package/dist/google-analytics.js +176 -0
- package/dist/google-analytics.js.map +1 -0
- package/dist/google-tag-manager.d.ts +111 -0
- package/dist/google-tag-manager.d.ts.map +1 -0
- package/dist/google-tag-manager.js +129 -0
- package/dist/google-tag-manager.js.map +1 -0
- package/dist/i18n.d.ts +69 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +59 -0
- package/dist/i18n.js.map +1 -0
- package/dist/import-export.d.ts +63 -0
- package/dist/import-export.d.ts.map +1 -0
- package/dist/import-export.js +37 -0
- package/dist/import-export.js.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +126 -0
- package/dist/index.js.map +1 -0
- package/dist/inventory.d.ts +673 -0
- package/dist/inventory.d.ts.map +1 -0
- package/dist/inventory.js +412 -0
- package/dist/inventory.js.map +1 -0
- package/dist/invoice-ledger.d.ts +366 -0
- package/dist/invoice-ledger.d.ts.map +1 -0
- package/dist/invoice-ledger.js +114 -0
- package/dist/invoice-ledger.js.map +1 -0
- package/dist/invoices.d.ts +845 -0
- package/dist/invoices.d.ts.map +1 -0
- package/dist/invoices.js +314 -0
- package/dist/invoices.js.map +1 -0
- package/dist/kernel.d.ts +49 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +19 -0
- package/dist/kernel.js.map +1 -0
- package/dist/languages.d.ts +122 -0
- package/dist/languages.d.ts.map +1 -0
- package/dist/languages.js +24 -0
- package/dist/languages.js.map +1 -0
- package/dist/linkedin-ads.d.ts +167 -0
- package/dist/linkedin-ads.d.ts.map +1 -0
- package/dist/linkedin-ads.js +156 -0
- package/dist/linkedin-ads.js.map +1 -0
- package/dist/megamenu.d.ts +556 -0
- package/dist/megamenu.d.ts.map +1 -0
- package/dist/megamenu.js +186 -0
- package/dist/megamenu.js.map +1 -0
- package/dist/meta-ads.d.ts +126 -0
- package/dist/meta-ads.d.ts.map +1 -0
- package/dist/meta-ads.js +112 -0
- package/dist/meta-ads.js.map +1 -0
- package/dist/mfa.d.ts +274 -0
- package/dist/mfa.d.ts.map +1 -0
- package/dist/mfa.js +187 -0
- package/dist/mfa.js.map +1 -0
- package/dist/modules.d.ts +1706 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +1390 -0
- package/dist/modules.js.map +1 -0
- package/dist/newsletter.d.ts +611 -0
- package/dist/newsletter.d.ts.map +1 -0
- package/dist/newsletter.js +345 -0
- package/dist/newsletter.js.map +1 -0
- package/dist/orders.d.ts +1175 -0
- package/dist/orders.d.ts.map +1 -0
- package/dist/orders.js +630 -0
- package/dist/orders.js.map +1 -0
- package/dist/organizations.d.ts +938 -0
- package/dist/organizations.d.ts.map +1 -0
- package/dist/organizations.js +418 -0
- package/dist/organizations.js.map +1 -0
- package/dist/pagination.d.ts +21 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +22 -0
- package/dist/pagination.js.map +1 -0
- package/dist/payment-methods.d.ts +472 -0
- package/dist/payment-methods.d.ts.map +1 -0
- package/dist/payment-methods.js +175 -0
- package/dist/payment-methods.js.map +1 -0
- package/dist/payment-return-url.d.ts +53 -0
- package/dist/payment-return-url.d.ts.map +1 -0
- package/dist/payment-return-url.js +35 -0
- package/dist/payment-return-url.js.map +1 -0
- package/dist/payments.d.ts +386 -0
- package/dist/payments.d.ts.map +1 -0
- package/dist/payments.js +84 -0
- package/dist/payments.js.map +1 -0
- package/dist/pim-connector.d.ts +60 -0
- package/dist/pim-connector.d.ts.map +1 -0
- package/dist/pim-connector.js +43 -0
- package/dist/pim-connector.js.map +1 -0
- package/dist/pim-field-path.d.ts +6 -0
- package/dist/pim-field-path.d.ts.map +1 -0
- package/dist/pim-field-path.js +101 -0
- package/dist/pim-field-path.js.map +1 -0
- package/dist/platform-language.d.ts +20 -0
- package/dist/platform-language.d.ts.map +1 -0
- package/dist/platform-language.js +22 -0
- package/dist/platform-language.js.map +1 -0
- package/dist/price-lists.d.ts +685 -0
- package/dist/price-lists.d.ts.map +1 -0
- package/dist/price-lists.js +330 -0
- package/dist/price-lists.js.map +1 -0
- package/dist/product-feeds.d.ts +2837 -0
- package/dist/product-feeds.d.ts.map +1 -0
- package/dist/product-feeds.js +1504 -0
- package/dist/product-feeds.js.map +1 -0
- package/dist/product-scope-overrides.d.ts +134 -0
- package/dist/product-scope-overrides.d.ts.map +1 -0
- package/dist/product-scope-overrides.js +82 -0
- package/dist/product-scope-overrides.js.map +1 -0
- package/dist/product-value-resolver.d.ts +88 -0
- package/dist/product-value-resolver.d.ts.map +1 -0
- package/dist/product-value-resolver.js +128 -0
- package/dist/product-value-resolver.js.map +1 -0
- package/dist/promotions.d.ts +678 -0
- package/dist/promotions.d.ts.map +1 -0
- package/dist/promotions.js +479 -0
- package/dist/promotions.js.map +1 -0
- package/dist/prompt-actions.d.ts +582 -0
- package/dist/prompt-actions.d.ts.map +1 -0
- package/dist/prompt-actions.js +221 -0
- package/dist/prompt-actions.js.map +1 -0
- package/dist/pwa.d.ts +293 -0
- package/dist/pwa.d.ts.map +1 -0
- package/dist/pwa.js +204 -0
- package/dist/pwa.js.map +1 -0
- package/dist/quick-order.d.ts +340 -0
- package/dist/quick-order.d.ts.map +1 -0
- package/dist/quick-order.js +177 -0
- package/dist/quick-order.js.map +1 -0
- package/dist/quote-requests.d.ts +538 -0
- package/dist/quote-requests.d.ts.map +1 -0
- package/dist/quote-requests.js +308 -0
- package/dist/quote-requests.js.map +1 -0
- package/dist/returns.d.ts +774 -0
- package/dist/returns.d.ts.map +1 -0
- package/dist/returns.js +389 -0
- package/dist/returns.js.map +1 -0
- package/dist/sales-channels.d.ts +392 -0
- package/dist/sales-channels.d.ts.map +1 -0
- package/dist/sales-channels.js +285 -0
- package/dist/sales-channels.js.map +1 -0
- package/dist/scope-notice.d.ts +60 -0
- package/dist/scope-notice.d.ts.map +1 -0
- package/dist/scope-notice.js +56 -0
- package/dist/scope-notice.js.map +1 -0
- package/dist/search.d.ts +321 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +160 -0
- package/dist/search.js.map +1 -0
- package/dist/seo.d.ts +113 -0
- package/dist/seo.d.ts.map +1 -0
- package/dist/seo.js +63 -0
- package/dist/seo.js.map +1 -0
- package/dist/settings.d.ts +453 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +337 -0
- package/dist/settings.js.map +1 -0
- package/dist/shipments.d.ts +140 -0
- package/dist/shipments.d.ts.map +1 -0
- package/dist/shipments.js +14 -0
- package/dist/shipments.js.map +1 -0
- package/dist/shipping-methods.d.ts +350 -0
- package/dist/shipping-methods.d.ts.map +1 -0
- package/dist/shipping-methods.js +99 -0
- package/dist/shipping-methods.js.map +1 -0
- package/dist/shopping-lists.d.ts +122 -0
- package/dist/shopping-lists.d.ts.map +1 -0
- package/dist/shopping-lists.js +92 -0
- package/dist/shopping-lists.js.map +1 -0
- package/dist/taxes.d.ts +106 -0
- package/dist/taxes.d.ts.map +1 -0
- package/dist/taxes.js +80 -0
- package/dist/taxes.js.map +1 -0
- package/dist/text-normalization.d.ts +199 -0
- package/dist/text-normalization.d.ts.map +1 -0
- package/dist/text-normalization.js +205 -0
- package/dist/text-normalization.js.map +1 -0
- package/dist/transactional-emails.d.ts +459 -0
- package/dist/transactional-emails.d.ts.map +1 -0
- package/dist/transactional-emails.js +212 -0
- package/dist/transactional-emails.js.map +1 -0
- package/dist/webhooks.d.ts +69 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +53 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { isoDateTimeSchema, uuidSchema } from './common.js';
|
|
3
|
+
/**
|
|
4
|
+
* Analytics event contracts (US10 / FR-110, FR-111).
|
|
5
|
+
*
|
|
6
|
+
* Storefront and admin emit a small, fixed set of event types into the
|
|
7
|
+
* platform; backend persists them and exposes aggregated read paths for the
|
|
8
|
+
* admin dashboard. Forwarding to an external analytics tool (e.g. GA4) is
|
|
9
|
+
* a separate config-flagged path that consumes the same events.
|
|
10
|
+
*/
|
|
11
|
+
export const analyticsEventTypeSchema = z.enum([
|
|
12
|
+
'product.viewed',
|
|
13
|
+
'product.added_to_cart',
|
|
14
|
+
'cart.abandoned',
|
|
15
|
+
'order.placed',
|
|
16
|
+
'search.performed',
|
|
17
|
+
'filter.clicked',
|
|
18
|
+
'category.viewed',
|
|
19
|
+
]);
|
|
20
|
+
/**
|
|
21
|
+
* A single inbound analytics event. The shape is intentionally permissive
|
|
22
|
+
* inside `properties` — the storefront chooses what to send per event type.
|
|
23
|
+
*/
|
|
24
|
+
export const ingestAnalyticsEventSchema = z.object({
|
|
25
|
+
type: analyticsEventTypeSchema,
|
|
26
|
+
occurredAt: isoDateTimeSchema.optional(),
|
|
27
|
+
salesChannelId: uuidSchema.optional(),
|
|
28
|
+
customerAccountId: uuidSchema.optional(),
|
|
29
|
+
organizationId: uuidSchema.optional(),
|
|
30
|
+
sessionId: z.string().min(1).max(64).optional(),
|
|
31
|
+
properties: z.record(z.string(), z.unknown()).optional(),
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* Storefront sends events in batches to amortise HTTP overhead.
|
|
35
|
+
*/
|
|
36
|
+
export const ingestAnalyticsBatchRequestSchema = z.object({
|
|
37
|
+
events: z.array(ingestAnalyticsEventSchema).min(1).max(100),
|
|
38
|
+
});
|
|
39
|
+
export const ingestAnalyticsBatchResponseSchema = z.object({
|
|
40
|
+
accepted: z.number().int().nonnegative(),
|
|
41
|
+
rejected: z
|
|
42
|
+
.array(z.object({
|
|
43
|
+
index: z.number().int().nonnegative(),
|
|
44
|
+
reason: z.string(),
|
|
45
|
+
}))
|
|
46
|
+
.default([]),
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Admin aggregation read paths.
|
|
50
|
+
*/
|
|
51
|
+
export const analyticsSummaryQuerySchema = z.object({
|
|
52
|
+
from: isoDateTimeSchema,
|
|
53
|
+
to: isoDateTimeSchema,
|
|
54
|
+
salesChannelId: uuidSchema.optional(),
|
|
55
|
+
});
|
|
56
|
+
export const analyticsDailyPointSchema = z.object({
|
|
57
|
+
day: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, 'YYYY-MM-DD'),
|
|
58
|
+
type: analyticsEventTypeSchema,
|
|
59
|
+
count: z.number().int().nonnegative(),
|
|
60
|
+
});
|
|
61
|
+
export const analyticsSummaryResponseSchema = z.object({
|
|
62
|
+
totalsByType: z.array(z.object({
|
|
63
|
+
type: analyticsEventTypeSchema,
|
|
64
|
+
count: z.number().int().nonnegative(),
|
|
65
|
+
})),
|
|
66
|
+
daily: z.array(analyticsDailyPointSchema),
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC7C,gBAAgB;IAChB,uBAAuB;IACvB,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,gBAAgB;IAChB,iBAAiB;CAClB,CAAC,CAAC;AAGH;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,wBAAwB;IAC9B,UAAU,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACxC,cAAc,EAAE,UAAU,CAAC,QAAQ,EAAE;IACrC,iBAAiB,EAAE,UAAU,CAAC,QAAQ,EAAE;IACxC,cAAc,EAAE,UAAU,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzD,CAAC,CAAC;AAGH;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CAC5D,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACxC,QAAQ,EAAE,CAAC;SACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC,CACH;SACA,OAAO,CAAC,EAAE,CAAC;CACf,CAAC,CAAC;AAGH;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,iBAAiB;IACvB,EAAE,EAAE,iBAAiB;IACrB,cAAc,EAAE,UAAU,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,YAAY,CAAC;IAC1D,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,YAAY,EAAE,CAAC,CAAC,KAAK,CACnB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC,CACH;IACD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC;CAC1C,CAAC,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* API key contracts (US7 / FR-120, extended by feature 062 Distributor API).
|
|
4
|
+
* The plaintext bearer token is shown once at creation; only its sha256 hash
|
|
5
|
+
* is stored.
|
|
6
|
+
*/
|
|
7
|
+
export declare const apiKeyStatusSchema: z.ZodEnum<{
|
|
8
|
+
active: "active";
|
|
9
|
+
revoked: "revoked";
|
|
10
|
+
}>;
|
|
11
|
+
export type ApiKeyStatus = z.infer<typeof apiKeyStatusSchema>;
|
|
12
|
+
/**
|
|
13
|
+
* Typed scope catalog (feature 062, research §R3). Enforcement stays
|
|
14
|
+
* membership-based, so stored legacy free-text scopes remain readable and
|
|
15
|
+
* enforceable — only *creation* validates against this enum.
|
|
16
|
+
*
|
|
17
|
+
* - `catalog:read` — PIM reads (unbound) AND distributor catalog surface (bound)
|
|
18
|
+
* - `catalog:write` — PIM by-SKU upsert — UNBOUND KEYS ONLY
|
|
19
|
+
* - `orders:read` — distributor order reads — BOUND KEYS ONLY
|
|
20
|
+
* - `orders:write` — distributor order intake — BOUND KEYS ONLY
|
|
21
|
+
*/
|
|
22
|
+
export declare const apiKeyScopeSchema: z.ZodEnum<{
|
|
23
|
+
"catalog:read": "catalog:read";
|
|
24
|
+
"catalog:write": "catalog:write";
|
|
25
|
+
"orders:read": "orders:read";
|
|
26
|
+
"orders:write": "orders:write";
|
|
27
|
+
}>;
|
|
28
|
+
export type ApiKeyScope = z.infer<typeof apiKeyScopeSchema>;
|
|
29
|
+
/**
|
|
30
|
+
* Distributor binding (feature 062, contracts/api-key-binding.md §2).
|
|
31
|
+
* All-or-none: a key is either fully bound (org + channel + designated
|
|
32
|
+
* service customer account) or fully unbound. Immutable post-create.
|
|
33
|
+
*/
|
|
34
|
+
export declare const apiKeyBindingSchema: z.ZodObject<{
|
|
35
|
+
organizationId: z.ZodString;
|
|
36
|
+
salesChannelId: z.ZodString;
|
|
37
|
+
customerAccountId: z.ZodString;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
export type ApiKeyBinding = z.infer<typeof apiKeyBindingSchema>;
|
|
40
|
+
export declare const apiKeySchema: z.ZodObject<{
|
|
41
|
+
id: z.ZodString;
|
|
42
|
+
name: z.ZodString;
|
|
43
|
+
lastFour: z.ZodString;
|
|
44
|
+
scopes: z.ZodArray<z.ZodString>;
|
|
45
|
+
status: z.ZodEnum<{
|
|
46
|
+
active: "active";
|
|
47
|
+
revoked: "revoked";
|
|
48
|
+
}>;
|
|
49
|
+
lastUsedAt: z.ZodNullable<z.ZodString>;
|
|
50
|
+
revokedAt: z.ZodNullable<z.ZodString>;
|
|
51
|
+
createdAt: z.ZodString;
|
|
52
|
+
updatedAt: z.ZodString;
|
|
53
|
+
organizationId: z.ZodNullable<z.ZodString>;
|
|
54
|
+
salesChannelId: z.ZodNullable<z.ZodString>;
|
|
55
|
+
customerAccountId: z.ZodNullable<z.ZodString>;
|
|
56
|
+
expiresAt: z.ZodNullable<z.ZodString>;
|
|
57
|
+
}, z.core.$strip>;
|
|
58
|
+
export type ApiKey = z.infer<typeof apiKeySchema>;
|
|
59
|
+
export declare const createApiKeyRequestSchema: z.ZodObject<{
|
|
60
|
+
name: z.ZodString;
|
|
61
|
+
scopes: z.ZodArray<z.ZodEnum<{
|
|
62
|
+
"catalog:read": "catalog:read";
|
|
63
|
+
"catalog:write": "catalog:write";
|
|
64
|
+
"orders:read": "orders:read";
|
|
65
|
+
"orders:write": "orders:write";
|
|
66
|
+
}>>;
|
|
67
|
+
binding: z.ZodOptional<z.ZodObject<{
|
|
68
|
+
organizationId: z.ZodString;
|
|
69
|
+
salesChannelId: z.ZodString;
|
|
70
|
+
customerAccountId: z.ZodString;
|
|
71
|
+
}, z.core.$strip>>;
|
|
72
|
+
expiresAt: z.ZodOptional<z.ZodString>;
|
|
73
|
+
}, z.core.$strip>;
|
|
74
|
+
export type CreateApiKeyRequest = z.infer<typeof createApiKeyRequestSchema>;
|
|
75
|
+
export declare const createApiKeyResponseSchema: z.ZodObject<{
|
|
76
|
+
apiKey: z.ZodObject<{
|
|
77
|
+
id: z.ZodString;
|
|
78
|
+
name: z.ZodString;
|
|
79
|
+
lastFour: z.ZodString;
|
|
80
|
+
scopes: z.ZodArray<z.ZodString>;
|
|
81
|
+
status: z.ZodEnum<{
|
|
82
|
+
active: "active";
|
|
83
|
+
revoked: "revoked";
|
|
84
|
+
}>;
|
|
85
|
+
lastUsedAt: z.ZodNullable<z.ZodString>;
|
|
86
|
+
revokedAt: z.ZodNullable<z.ZodString>;
|
|
87
|
+
createdAt: z.ZodString;
|
|
88
|
+
updatedAt: z.ZodString;
|
|
89
|
+
organizationId: z.ZodNullable<z.ZodString>;
|
|
90
|
+
salesChannelId: z.ZodNullable<z.ZodString>;
|
|
91
|
+
customerAccountId: z.ZodNullable<z.ZodString>;
|
|
92
|
+
expiresAt: z.ZodNullable<z.ZodString>;
|
|
93
|
+
}, z.core.$strip>;
|
|
94
|
+
bearerToken: z.ZodString;
|
|
95
|
+
}, z.core.$strip>;
|
|
96
|
+
export type CreateApiKeyResponse = z.infer<typeof createApiKeyResponseSchema>;
|
|
97
|
+
//# sourceMappingURL=api-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../src/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AAEH,eAAO,MAAM,kBAAkB;;;EAAgC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;iBAK9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;iBAgBvB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;iBAKpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;iBAIrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
|
package/dist/api-keys.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { isoDateTimeSchema, uuidSchema } from './common.js';
|
|
3
|
+
/**
|
|
4
|
+
* API key contracts (US7 / FR-120, extended by feature 062 Distributor API).
|
|
5
|
+
* The plaintext bearer token is shown once at creation; only its sha256 hash
|
|
6
|
+
* is stored.
|
|
7
|
+
*/
|
|
8
|
+
export const apiKeyStatusSchema = z.enum(['active', 'revoked']);
|
|
9
|
+
/**
|
|
10
|
+
* Typed scope catalog (feature 062, research §R3). Enforcement stays
|
|
11
|
+
* membership-based, so stored legacy free-text scopes remain readable and
|
|
12
|
+
* enforceable — only *creation* validates against this enum.
|
|
13
|
+
*
|
|
14
|
+
* - `catalog:read` — PIM reads (unbound) AND distributor catalog surface (bound)
|
|
15
|
+
* - `catalog:write` — PIM by-SKU upsert — UNBOUND KEYS ONLY
|
|
16
|
+
* - `orders:read` — distributor order reads — BOUND KEYS ONLY
|
|
17
|
+
* - `orders:write` — distributor order intake — BOUND KEYS ONLY
|
|
18
|
+
*/
|
|
19
|
+
export const apiKeyScopeSchema = z.enum([
|
|
20
|
+
'catalog:read',
|
|
21
|
+
'catalog:write',
|
|
22
|
+
'orders:read',
|
|
23
|
+
'orders:write',
|
|
24
|
+
]);
|
|
25
|
+
/**
|
|
26
|
+
* Distributor binding (feature 062, contracts/api-key-binding.md §2).
|
|
27
|
+
* All-or-none: a key is either fully bound (org + channel + designated
|
|
28
|
+
* service customer account) or fully unbound. Immutable post-create.
|
|
29
|
+
*/
|
|
30
|
+
export const apiKeyBindingSchema = z.object({
|
|
31
|
+
organizationId: uuidSchema,
|
|
32
|
+
salesChannelId: uuidSchema,
|
|
33
|
+
/** Must reference an active customer account belonging to `organizationId`. */
|
|
34
|
+
customerAccountId: uuidSchema,
|
|
35
|
+
});
|
|
36
|
+
export const apiKeySchema = z.object({
|
|
37
|
+
id: uuidSchema,
|
|
38
|
+
name: z.string(),
|
|
39
|
+
lastFour: z.string(),
|
|
40
|
+
scopes: z.array(z.string()),
|
|
41
|
+
status: apiKeyStatusSchema,
|
|
42
|
+
lastUsedAt: isoDateTimeSchema.nullable(),
|
|
43
|
+
revokedAt: isoDateTimeSchema.nullable(),
|
|
44
|
+
createdAt: isoDateTimeSchema,
|
|
45
|
+
updatedAt: isoDateTimeSchema,
|
|
46
|
+
// Feature 062 — additive binding/expiry fields; always present, null for
|
|
47
|
+
// unbound / non-expiring keys.
|
|
48
|
+
organizationId: uuidSchema.nullable(),
|
|
49
|
+
salesChannelId: uuidSchema.nullable(),
|
|
50
|
+
customerAccountId: uuidSchema.nullable(),
|
|
51
|
+
expiresAt: isoDateTimeSchema.nullable(),
|
|
52
|
+
});
|
|
53
|
+
export const createApiKeyRequestSchema = z.object({
|
|
54
|
+
name: z.string().min(1).max(160),
|
|
55
|
+
scopes: z.array(apiKeyScopeSchema).min(1),
|
|
56
|
+
binding: apiKeyBindingSchema.optional(),
|
|
57
|
+
expiresAt: isoDateTimeSchema.optional(),
|
|
58
|
+
});
|
|
59
|
+
export const createApiKeyResponseSchema = z.object({
|
|
60
|
+
apiKey: apiKeySchema,
|
|
61
|
+
/** The raw bearer token, only returned once at creation. */
|
|
62
|
+
bearerToken: z.string(),
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=api-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../src/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;GAIG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAGhE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,cAAc;IACd,eAAe;IACf,aAAa;IACb,cAAc;CACf,CAAC,CAAC;AAGH;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,cAAc,EAAE,UAAU;IAC1B,cAAc,EAAE,UAAU;IAC1B,+EAA+E;IAC/E,iBAAiB,EAAE,UAAU;CAC9B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,kBAAkB;IAC1B,UAAU,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACxC,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACvC,SAAS,EAAE,iBAAiB;IAC5B,SAAS,EAAE,iBAAiB;IAC5B,yEAAyE;IACzE,+BAA+B;IAC/B,cAAc,EAAE,UAAU,CAAC,QAAQ,EAAE;IACrC,cAAc,EAAE,UAAU,CAAC,QAAQ,EAAE;IACrC,iBAAiB,EAAE,UAAU,CAAC,QAAQ,EAAE;IACxC,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACvC,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,YAAY;IACpB,4DAA4D;IAC5D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC"}
|