@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,167 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Storefront actions a LinkedIn conversion can be bound to.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately a closed set: one entry per emitter that already exists in
|
|
6
|
+
* `storefront/lib/analytics/ecommerce.ts`, no more. An operator cannot map an
|
|
7
|
+
* action the storefront never emits — a mapping that could never fire would be
|
|
8
|
+
* indistinguishable from a broken one, and it is that guarantee which makes
|
|
9
|
+
* "no mapping" a normal state rather than a silent misconfiguration (FR-012).
|
|
10
|
+
*/
|
|
11
|
+
export declare const linkedInTriggerActionSchema: z.ZodEnum<{
|
|
12
|
+
contact_form_submitted: "contact_form_submitted";
|
|
13
|
+
place_order_clicked: "place_order_clicked";
|
|
14
|
+
add_to_cart: "add_to_cart";
|
|
15
|
+
add_to_quote_request: "add_to_quote_request";
|
|
16
|
+
add_to_shopping_list: "add_to_shopping_list";
|
|
17
|
+
begin_checkout: "begin_checkout";
|
|
18
|
+
purchase: "purchase";
|
|
19
|
+
product_viewed: "product_viewed";
|
|
20
|
+
}>;
|
|
21
|
+
export type LinkedInTriggerAction = z.infer<typeof linkedInTriggerActionSchema>;
|
|
22
|
+
export declare const LINKEDIN_TRIGGER_ACTIONS: readonly LinkedInTriggerAction[];
|
|
23
|
+
/**
|
|
24
|
+
* Campaign Manager shows a conversion as a numeric id. Stored as text because
|
|
25
|
+
* it is an identifier — it is never used in arithmetic and leading zeros, if
|
|
26
|
+
* LinkedIn ever emits them, must survive a round trip.
|
|
27
|
+
*/
|
|
28
|
+
export declare const linkedInConversionIdSchema: z.ZodString;
|
|
29
|
+
/**
|
|
30
|
+
* The Conversions API addresses a conversion rule by URN rather than by the
|
|
31
|
+
* bare numeric id shown in the UI. Derived from the id when the operator does
|
|
32
|
+
* not override it (see `conversionRuleUrnFor`).
|
|
33
|
+
*/
|
|
34
|
+
export declare const linkedInConversionRuleUrnSchema: z.ZodString;
|
|
35
|
+
/** Insight Tag Partner ID as shown in Campaign Manager. */
|
|
36
|
+
export declare const linkedInPartnerIdSchema: z.ZodString;
|
|
37
|
+
/** Build the Conversions API URN for a numeric conversion id. */
|
|
38
|
+
export declare function conversionRuleUrnFor(conversionId: string): string;
|
|
39
|
+
export declare const linkedInConversionMappingSchema: z.ZodObject<{
|
|
40
|
+
id: z.ZodString;
|
|
41
|
+
salesChannelId: z.ZodNullable<z.ZodString>;
|
|
42
|
+
triggerAction: z.ZodEnum<{
|
|
43
|
+
contact_form_submitted: "contact_form_submitted";
|
|
44
|
+
place_order_clicked: "place_order_clicked";
|
|
45
|
+
add_to_cart: "add_to_cart";
|
|
46
|
+
add_to_quote_request: "add_to_quote_request";
|
|
47
|
+
add_to_shopping_list: "add_to_shopping_list";
|
|
48
|
+
begin_checkout: "begin_checkout";
|
|
49
|
+
purchase: "purchase";
|
|
50
|
+
product_viewed: "product_viewed";
|
|
51
|
+
}>;
|
|
52
|
+
conversionId: z.ZodString;
|
|
53
|
+
conversionRuleUrn: z.ZodNullable<z.ZodString>;
|
|
54
|
+
enabled: z.ZodBoolean;
|
|
55
|
+
version: z.ZodNumber;
|
|
56
|
+
createdAt: z.ZodString;
|
|
57
|
+
updatedAt: z.ZodString;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
export type LinkedInConversionMapping = z.infer<typeof linkedInConversionMappingSchema>;
|
|
60
|
+
export declare const createLinkedInConversionMappingSchema: z.ZodObject<{
|
|
61
|
+
salesChannelId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
62
|
+
triggerAction: z.ZodEnum<{
|
|
63
|
+
contact_form_submitted: "contact_form_submitted";
|
|
64
|
+
place_order_clicked: "place_order_clicked";
|
|
65
|
+
add_to_cart: "add_to_cart";
|
|
66
|
+
add_to_quote_request: "add_to_quote_request";
|
|
67
|
+
add_to_shopping_list: "add_to_shopping_list";
|
|
68
|
+
begin_checkout: "begin_checkout";
|
|
69
|
+
purchase: "purchase";
|
|
70
|
+
product_viewed: "product_viewed";
|
|
71
|
+
}>;
|
|
72
|
+
conversionId: z.ZodString;
|
|
73
|
+
conversionRuleUrn: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
74
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
75
|
+
}, z.core.$strip>;
|
|
76
|
+
export type CreateLinkedInConversionMapping = z.infer<typeof createLinkedInConversionMappingSchema>;
|
|
77
|
+
export declare const updateLinkedInConversionMappingSchema: z.ZodObject<{
|
|
78
|
+
salesChannelId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
79
|
+
triggerAction: z.ZodOptional<z.ZodEnum<{
|
|
80
|
+
contact_form_submitted: "contact_form_submitted";
|
|
81
|
+
place_order_clicked: "place_order_clicked";
|
|
82
|
+
add_to_cart: "add_to_cart";
|
|
83
|
+
add_to_quote_request: "add_to_quote_request";
|
|
84
|
+
add_to_shopping_list: "add_to_shopping_list";
|
|
85
|
+
begin_checkout: "begin_checkout";
|
|
86
|
+
purchase: "purchase";
|
|
87
|
+
product_viewed: "product_viewed";
|
|
88
|
+
}>>;
|
|
89
|
+
conversionId: z.ZodOptional<z.ZodString>;
|
|
90
|
+
conversionRuleUrn: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
91
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
92
|
+
version: z.ZodNumber;
|
|
93
|
+
}, z.core.$strip>;
|
|
94
|
+
export type UpdateLinkedInConversionMapping = z.infer<typeof updateLinkedInConversionMappingSchema>;
|
|
95
|
+
/** One mapping as the storefront needs it — no ids, no audit columns. */
|
|
96
|
+
export declare const linkedInStorefrontMappingSchema: z.ZodObject<{
|
|
97
|
+
triggerAction: z.ZodEnum<{
|
|
98
|
+
contact_form_submitted: "contact_form_submitted";
|
|
99
|
+
place_order_clicked: "place_order_clicked";
|
|
100
|
+
add_to_cart: "add_to_cart";
|
|
101
|
+
add_to_quote_request: "add_to_quote_request";
|
|
102
|
+
add_to_shopping_list: "add_to_shopping_list";
|
|
103
|
+
begin_checkout: "begin_checkout";
|
|
104
|
+
purchase: "purchase";
|
|
105
|
+
product_viewed: "product_viewed";
|
|
106
|
+
}>;
|
|
107
|
+
conversionId: z.ZodString;
|
|
108
|
+
}, z.core.$strip>;
|
|
109
|
+
export type LinkedInStorefrontMapping = z.infer<typeof linkedInStorefrontMappingSchema>;
|
|
110
|
+
export declare const linkedInStorefrontConfigSchema: z.ZodObject<{
|
|
111
|
+
enabled: z.ZodBoolean;
|
|
112
|
+
partnerId: z.ZodNullable<z.ZodString>;
|
|
113
|
+
requireConsent: z.ZodBoolean;
|
|
114
|
+
serverSide: z.ZodBoolean;
|
|
115
|
+
conversionMappings: z.ZodArray<z.ZodObject<{
|
|
116
|
+
triggerAction: z.ZodEnum<{
|
|
117
|
+
contact_form_submitted: "contact_form_submitted";
|
|
118
|
+
place_order_clicked: "place_order_clicked";
|
|
119
|
+
add_to_cart: "add_to_cart";
|
|
120
|
+
add_to_quote_request: "add_to_quote_request";
|
|
121
|
+
add_to_shopping_list: "add_to_shopping_list";
|
|
122
|
+
begin_checkout: "begin_checkout";
|
|
123
|
+
purchase: "purchase";
|
|
124
|
+
product_viewed: "product_viewed";
|
|
125
|
+
}>;
|
|
126
|
+
conversionId: z.ZodString;
|
|
127
|
+
}, z.core.$strip>>;
|
|
128
|
+
}, z.core.$strip>;
|
|
129
|
+
export type LinkedInStorefrontConfig = z.infer<typeof linkedInStorefrontConfigSchema>;
|
|
130
|
+
/** Fully-off config — the shape every failure path degrades to. */
|
|
131
|
+
export declare const LINKEDIN_DISABLED_CONFIG: LinkedInStorefrontConfig;
|
|
132
|
+
export declare const linkedInConversionAmountSchema: z.ZodObject<{
|
|
133
|
+
currencyCode: z.ZodString;
|
|
134
|
+
amount: z.ZodString;
|
|
135
|
+
}, z.core.$strip>;
|
|
136
|
+
export declare const linkedInConversionIngestSchema: z.ZodObject<{
|
|
137
|
+
triggerAction: z.ZodEnum<{
|
|
138
|
+
contact_form_submitted: "contact_form_submitted";
|
|
139
|
+
place_order_clicked: "place_order_clicked";
|
|
140
|
+
add_to_cart: "add_to_cart";
|
|
141
|
+
add_to_quote_request: "add_to_quote_request";
|
|
142
|
+
add_to_shopping_list: "add_to_shopping_list";
|
|
143
|
+
begin_checkout: "begin_checkout";
|
|
144
|
+
purchase: "purchase";
|
|
145
|
+
product_viewed: "product_viewed";
|
|
146
|
+
}>;
|
|
147
|
+
liFatId: z.ZodOptional<z.ZodString>;
|
|
148
|
+
email: z.ZodOptional<z.ZodString>;
|
|
149
|
+
amount: z.ZodOptional<z.ZodObject<{
|
|
150
|
+
currencyCode: z.ZodString;
|
|
151
|
+
amount: z.ZodString;
|
|
152
|
+
}, z.core.$strip>>;
|
|
153
|
+
eventId: z.ZodString;
|
|
154
|
+
conversionHappenedAt: z.ZodOptional<z.ZodNumber>;
|
|
155
|
+
}, z.core.$strip>;
|
|
156
|
+
export type LinkedInConversionIngest = z.infer<typeof linkedInConversionIngestSchema>;
|
|
157
|
+
export declare const linkedInConversionIngestResponseSchema: z.ZodObject<{
|
|
158
|
+
accepted: z.ZodNumber;
|
|
159
|
+
}, z.core.$strip>;
|
|
160
|
+
export declare const LINKEDIN_ADS_SETTING_CODES: {
|
|
161
|
+
readonly ENABLED: "linkedin_ads.enabled";
|
|
162
|
+
readonly PARTNER_ID: "linkedin_ads.partner_id";
|
|
163
|
+
readonly REQUIRE_CONSENT: "linkedin_ads.require_consent";
|
|
164
|
+
readonly SERVER_SIDE_ENABLED: "linkedin_ads.server_side_enabled";
|
|
165
|
+
readonly ACCESS_TOKEN: "linkedin_ads.access_token";
|
|
166
|
+
};
|
|
167
|
+
//# sourceMappingURL=linkedin-ads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin-ads.d.ts","sourceRoot":"","sources":["../src/linkedin-ads.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;EAStC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,wBAAwB,EAAE,SAAS,qBAAqB,EAChC,CAAC;AAMtC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,aAEuB,CAAC;AAE/D;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,aAKzC,CAAC;AAEJ,2DAA2D;AAC3D,eAAO,MAAM,uBAAuB,aAEuB,CAAC;AAE5D,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEjE;AAMD,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;iBAY1C,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;iBAMhD,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CACnD,OAAO,qCAAqC,CAC7C,CAAC;AAEF,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;iBAQhD,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CACnD,OAAO,qCAAqC,CAC7C,CAAC;AAMF,yEAAyE;AACzE,eAAO,MAAM,+BAA+B;;;;;;;;;;;;iBAG1C,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;iBAYzC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,EAAE,wBAMtC,CAAC;AAMF,eAAO,MAAM,8BAA8B;;;iBAGzC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;iBAczC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,eAAO,MAAM,sCAAsC;;iBAEjD,CAAC;AAMH,eAAO,MAAM,0BAA0B;;;;;;CAM7B,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// LinkedIn Ads module — feature 063 contract surface.
|
|
2
|
+
//
|
|
3
|
+
// Holds the Zod request/response schemas for the admin conversion-mapping CRUD,
|
|
4
|
+
// the storefront per-channel config read, the server-side conversion ingest, the
|
|
5
|
+
// trigger-action enum shared by the admin picker and the storefront dispatcher,
|
|
6
|
+
// and the `LINKEDIN_ADS_SETTING_CODES` const shared between the settings
|
|
7
|
+
// manifest and the module's services.
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { isoDateTimeSchema, uuidSchema } from './common.js';
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// (1) Enumerations
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
/**
|
|
14
|
+
* Storefront actions a LinkedIn conversion can be bound to.
|
|
15
|
+
*
|
|
16
|
+
* Deliberately a closed set: one entry per emitter that already exists in
|
|
17
|
+
* `storefront/lib/analytics/ecommerce.ts`, no more. An operator cannot map an
|
|
18
|
+
* action the storefront never emits — a mapping that could never fire would be
|
|
19
|
+
* indistinguishable from a broken one, and it is that guarantee which makes
|
|
20
|
+
* "no mapping" a normal state rather than a silent misconfiguration (FR-012).
|
|
21
|
+
*/
|
|
22
|
+
export const linkedInTriggerActionSchema = z.enum([
|
|
23
|
+
'product_viewed',
|
|
24
|
+
'add_to_cart',
|
|
25
|
+
'add_to_quote_request',
|
|
26
|
+
'add_to_shopping_list',
|
|
27
|
+
'begin_checkout',
|
|
28
|
+
'place_order_clicked',
|
|
29
|
+
'purchase',
|
|
30
|
+
'contact_form_submitted',
|
|
31
|
+
]);
|
|
32
|
+
export const LINKEDIN_TRIGGER_ACTIONS = linkedInTriggerActionSchema.options;
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// (2) Field-level patterns
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
/**
|
|
37
|
+
* Campaign Manager shows a conversion as a numeric id. Stored as text because
|
|
38
|
+
* it is an identifier — it is never used in arithmetic and leading zeros, if
|
|
39
|
+
* LinkedIn ever emits them, must survive a round trip.
|
|
40
|
+
*/
|
|
41
|
+
export const linkedInConversionIdSchema = z
|
|
42
|
+
.string()
|
|
43
|
+
.regex(/^[0-9]{1,32}$/, 'Conversion ID must be 1-32 digits');
|
|
44
|
+
/**
|
|
45
|
+
* The Conversions API addresses a conversion rule by URN rather than by the
|
|
46
|
+
* bare numeric id shown in the UI. Derived from the id when the operator does
|
|
47
|
+
* not override it (see `conversionRuleUrnFor`).
|
|
48
|
+
*/
|
|
49
|
+
export const linkedInConversionRuleUrnSchema = z
|
|
50
|
+
.string()
|
|
51
|
+
.regex(/^urn:lla:llaPartnerConversion:[0-9]{1,32}$/, 'Conversion rule URN must look like urn:lla:llaPartnerConversion:<digits>');
|
|
52
|
+
/** Insight Tag Partner ID as shown in Campaign Manager. */
|
|
53
|
+
export const linkedInPartnerIdSchema = z
|
|
54
|
+
.string()
|
|
55
|
+
.regex(/^[0-9]{1,20}$/, 'Partner ID must be 1-20 digits');
|
|
56
|
+
/** Build the Conversions API URN for a numeric conversion id. */
|
|
57
|
+
export function conversionRuleUrnFor(conversionId) {
|
|
58
|
+
return `urn:lla:llaPartnerConversion:${conversionId}`;
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// (3) Admin DTOs — conversion mappings
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
export const linkedInConversionMappingSchema = z.object({
|
|
64
|
+
id: uuidSchema,
|
|
65
|
+
/** `null` = the mapping applies to every sales channel. */
|
|
66
|
+
salesChannelId: uuidSchema.nullable(),
|
|
67
|
+
triggerAction: linkedInTriggerActionSchema,
|
|
68
|
+
conversionId: linkedInConversionIdSchema,
|
|
69
|
+
/** `null` = derive from `conversionId` at delivery time. */
|
|
70
|
+
conversionRuleUrn: linkedInConversionRuleUrnSchema.nullable(),
|
|
71
|
+
enabled: z.boolean(),
|
|
72
|
+
version: z.number().int().positive(),
|
|
73
|
+
createdAt: isoDateTimeSchema,
|
|
74
|
+
updatedAt: isoDateTimeSchema,
|
|
75
|
+
});
|
|
76
|
+
export const createLinkedInConversionMappingSchema = z.object({
|
|
77
|
+
salesChannelId: uuidSchema.nullable().optional(),
|
|
78
|
+
triggerAction: linkedInTriggerActionSchema,
|
|
79
|
+
conversionId: linkedInConversionIdSchema,
|
|
80
|
+
conversionRuleUrn: linkedInConversionRuleUrnSchema.nullable().optional(),
|
|
81
|
+
enabled: z.boolean().optional(),
|
|
82
|
+
});
|
|
83
|
+
export const updateLinkedInConversionMappingSchema = z.object({
|
|
84
|
+
salesChannelId: uuidSchema.nullable().optional(),
|
|
85
|
+
triggerAction: linkedInTriggerActionSchema.optional(),
|
|
86
|
+
conversionId: linkedInConversionIdSchema.optional(),
|
|
87
|
+
conversionRuleUrn: linkedInConversionRuleUrnSchema.nullable().optional(),
|
|
88
|
+
enabled: z.boolean().optional(),
|
|
89
|
+
/** Current version held by the client — a mismatch is a 409. */
|
|
90
|
+
version: z.number().int().positive(),
|
|
91
|
+
});
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// (4) Storefront config
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
/** One mapping as the storefront needs it — no ids, no audit columns. */
|
|
96
|
+
export const linkedInStorefrontMappingSchema = z.object({
|
|
97
|
+
triggerAction: linkedInTriggerActionSchema,
|
|
98
|
+
conversionId: linkedInConversionIdSchema,
|
|
99
|
+
});
|
|
100
|
+
export const linkedInStorefrontConfigSchema = z.object({
|
|
101
|
+
enabled: z.boolean(),
|
|
102
|
+
/** `null` when unset — a blank Partner ID means "not configured" (FR-004). */
|
|
103
|
+
partnerId: z.string().nullable(),
|
|
104
|
+
requireConsent: z.boolean(),
|
|
105
|
+
/**
|
|
106
|
+
* When true the browser still loads the Insight Tag (audiences, page-level
|
|
107
|
+
* rules) but must NOT fire mapped conversions — the backend reports them, so
|
|
108
|
+
* each conversion has exactly one transport.
|
|
109
|
+
*/
|
|
110
|
+
serverSide: z.boolean(),
|
|
111
|
+
conversionMappings: z.array(linkedInStorefrontMappingSchema),
|
|
112
|
+
});
|
|
113
|
+
/** Fully-off config — the shape every failure path degrades to. */
|
|
114
|
+
export const LINKEDIN_DISABLED_CONFIG = {
|
|
115
|
+
enabled: false,
|
|
116
|
+
partnerId: null,
|
|
117
|
+
requireConsent: true,
|
|
118
|
+
serverSide: false,
|
|
119
|
+
conversionMappings: [],
|
|
120
|
+
};
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
// (5) Server-side conversion ingest
|
|
123
|
+
// ---------------------------------------------------------------------------
|
|
124
|
+
export const linkedInConversionAmountSchema = z.object({
|
|
125
|
+
currencyCode: z.string().length(3),
|
|
126
|
+
amount: z.string().regex(/^[0-9]+(\.[0-9]+)?$/, 'Amount must be a decimal string'),
|
|
127
|
+
});
|
|
128
|
+
export const linkedInConversionIngestSchema = z.object({
|
|
129
|
+
triggerAction: linkedInTriggerActionSchema,
|
|
130
|
+
/** LinkedIn click identifier captured from the landing URL. */
|
|
131
|
+
liFatId: z.string().max(256).optional(),
|
|
132
|
+
/**
|
|
133
|
+
* Hashed server-side and immediately discarded — the raw address is never
|
|
134
|
+
* persisted and never placed on the queue (FR-017).
|
|
135
|
+
*/
|
|
136
|
+
email: z.string().email().optional(),
|
|
137
|
+
amount: linkedInConversionAmountSchema.optional(),
|
|
138
|
+
/** Idempotency handle so a retry cannot double-report. */
|
|
139
|
+
eventId: z.string().min(1).max(128),
|
|
140
|
+
/** Epoch milliseconds; defaults to receipt time when absent. */
|
|
141
|
+
conversionHappenedAt: z.number().int().positive().optional(),
|
|
142
|
+
});
|
|
143
|
+
export const linkedInConversionIngestResponseSchema = z.object({
|
|
144
|
+
accepted: z.number().int().nonnegative(),
|
|
145
|
+
});
|
|
146
|
+
// ---------------------------------------------------------------------------
|
|
147
|
+
// (6) Setting codes
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
export const LINKEDIN_ADS_SETTING_CODES = {
|
|
150
|
+
ENABLED: 'linkedin_ads.enabled',
|
|
151
|
+
PARTNER_ID: 'linkedin_ads.partner_id',
|
|
152
|
+
REQUIRE_CONSENT: 'linkedin_ads.require_consent',
|
|
153
|
+
SERVER_SIDE_ENABLED: 'linkedin_ads.server_side_enabled',
|
|
154
|
+
ACCESS_TOKEN: 'linkedin_ads.access_token',
|
|
155
|
+
};
|
|
156
|
+
//# sourceMappingURL=linkedin-ads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin-ads.js","sourceRoot":"","sources":["../src/linkedin-ads.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAChF,yEAAyE;AACzE,sCAAsC;AAEtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC;IAChD,gBAAgB;IAChB,aAAa;IACb,sBAAsB;IACtB,sBAAsB;IACtB,gBAAgB;IAChB,qBAAqB;IACrB,UAAU;IACV,wBAAwB;CACzB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,wBAAwB,GACnC,2BAA2B,CAAC,OAAO,CAAC;AAEtC,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,EAAE;KACR,KAAK,CAAC,eAAe,EAAE,mCAAmC,CAAC,CAAC;AAE/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC;KAC7C,MAAM,EAAE;KACR,KAAK,CACJ,4CAA4C,EAC5C,0EAA0E,CAC3E,CAAC;AAEJ,2DAA2D;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,EAAE;KACR,KAAK,CAAC,eAAe,EAAE,gCAAgC,CAAC,CAAC;AAE5D,iEAAiE;AACjE,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACvD,OAAO,gCAAgC,YAAY,EAAE,CAAC;AACxD,CAAC;AAED,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,EAAE,EAAE,UAAU;IACd,2DAA2D;IAC3D,cAAc,EAAE,UAAU,CAAC,QAAQ,EAAE;IACrC,aAAa,EAAE,2BAA2B;IAC1C,YAAY,EAAE,0BAA0B;IACxC,4DAA4D;IAC5D,iBAAiB,EAAE,+BAA+B,CAAC,QAAQ,EAAE;IAC7D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,SAAS,EAAE,iBAAiB;IAC5B,SAAS,EAAE,iBAAiB;CAC7B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5D,cAAc,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,aAAa,EAAE,2BAA2B;IAC1C,YAAY,EAAE,0BAA0B;IACxC,iBAAiB,EAAE,+BAA+B,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5D,cAAc,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,aAAa,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IACrD,YAAY,EAAE,0BAA0B,CAAC,QAAQ,EAAE;IACnD,iBAAiB,EAAE,+BAA+B,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,gEAAgE;IAChE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAKH,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,yEAAyE;AACzE,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,aAAa,EAAE,2BAA2B;IAC1C,YAAY,EAAE,0BAA0B;CACzC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,8EAA8E;IAC9E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE;IAC3B;;;;OAIG;IACH,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;IACvB,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC;CAC7D,CAAC,CAAC;AAGH,mEAAmE;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAA6B;IAChE,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,IAAI;IACpB,UAAU,EAAE,KAAK;IACjB,kBAAkB,EAAE,EAAE;CACvB,CAAC;AAEF,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;CACnF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,aAAa,EAAE,2BAA2B;IAC1C,+DAA+D;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACvC;;;OAGG;IACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,8BAA8B,CAAC,QAAQ,EAAE;IACjD,0DAA0D;IAC1D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,gEAAgE;IAChE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC7D,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;CACzC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,OAAO,EAAE,sBAAsB;IAC/B,UAAU,EAAE,yBAAyB;IACrC,eAAe,EAAE,8BAA8B;IAC/C,mBAAmB,EAAE,kCAAkC;IACvD,YAAY,EAAE,2BAA2B;CACjC,CAAC"}
|