@tagadapay/headless-sdk 1.0.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.
Files changed (79) hide show
  1. package/README.md +110 -0
  2. package/dist/core/client.d.ts +48 -0
  3. package/dist/core/client.d.ts.map +1 -0
  4. package/dist/core/client.js +61 -0
  5. package/dist/core/client.js.map +1 -0
  6. package/dist/core/errors.d.ts +46 -0
  7. package/dist/core/errors.d.ts.map +1 -0
  8. package/dist/core/errors.js +57 -0
  9. package/dist/core/errors.js.map +1 -0
  10. package/dist/core/http.d.ts +27 -0
  11. package/dist/core/http.d.ts.map +1 -0
  12. package/dist/core/http.js +116 -0
  13. package/dist/core/http.js.map +1 -0
  14. package/dist/core/index.d.ts +10 -0
  15. package/dist/core/index.d.ts.map +1 -0
  16. package/dist/core/index.js +9 -0
  17. package/dist/core/index.js.map +1 -0
  18. package/dist/core/modules/analytics.d.ts +79 -0
  19. package/dist/core/modules/analytics.d.ts.map +1 -0
  20. package/dist/core/modules/analytics.js +265 -0
  21. package/dist/core/modules/analytics.js.map +1 -0
  22. package/dist/core/modules/checkout.d.ts +67 -0
  23. package/dist/core/modules/checkout.d.ts.map +1 -0
  24. package/dist/core/modules/checkout.js +164 -0
  25. package/dist/core/modules/checkout.js.map +1 -0
  26. package/dist/core/modules/customer.d.ts +33 -0
  27. package/dist/core/modules/customer.d.ts.map +1 -0
  28. package/dist/core/modules/customer.js +53 -0
  29. package/dist/core/modules/customer.js.map +1 -0
  30. package/dist/core/modules/offers.d.ts +43 -0
  31. package/dist/core/modules/offers.d.ts.map +1 -0
  32. package/dist/core/modules/offers.js +56 -0
  33. package/dist/core/modules/offers.js.map +1 -0
  34. package/dist/core/modules/payment.d.ts +123 -0
  35. package/dist/core/modules/payment.d.ts.map +1 -0
  36. package/dist/core/modules/payment.js +279 -0
  37. package/dist/core/modules/payment.js.map +1 -0
  38. package/dist/core/types.d.ts +276 -0
  39. package/dist/core/types.d.ts.map +1 -0
  40. package/dist/core/types.js +5 -0
  41. package/dist/core/types.js.map +1 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +2 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/react/hooks/useAnalytics.d.ts +59 -0
  47. package/dist/react/hooks/useAnalytics.d.ts.map +1 -0
  48. package/dist/react/hooks/useAnalytics.js +49 -0
  49. package/dist/react/hooks/useAnalytics.js.map +1 -0
  50. package/dist/react/hooks/useCheckout.d.ts +45 -0
  51. package/dist/react/hooks/useCheckout.d.ts.map +1 -0
  52. package/dist/react/hooks/useCheckout.js +113 -0
  53. package/dist/react/hooks/useCheckout.js.map +1 -0
  54. package/dist/react/hooks/useCustomer.d.ts +28 -0
  55. package/dist/react/hooks/useCustomer.d.ts.map +1 -0
  56. package/dist/react/hooks/useCustomer.js +77 -0
  57. package/dist/react/hooks/useCustomer.js.map +1 -0
  58. package/dist/react/hooks/useOffers.d.ts +45 -0
  59. package/dist/react/hooks/useOffers.d.ts.map +1 -0
  60. package/dist/react/hooks/useOffers.js +88 -0
  61. package/dist/react/hooks/useOffers.js.map +1 -0
  62. package/dist/react/hooks/usePayment.d.ts +63 -0
  63. package/dist/react/hooks/usePayment.d.ts.map +1 -0
  64. package/dist/react/hooks/usePayment.js +114 -0
  65. package/dist/react/hooks/usePayment.js.map +1 -0
  66. package/dist/react/index.d.ts +14 -0
  67. package/dist/react/index.d.ts.map +1 -0
  68. package/dist/react/index.js +7 -0
  69. package/dist/react/index.js.map +1 -0
  70. package/dist/react/provider.d.ts +31 -0
  71. package/dist/react/provider.d.ts.map +1 -0
  72. package/dist/react/provider.js +32 -0
  73. package/dist/react/provider.js.map +1 -0
  74. package/dist/tagada-headless-react.min.js +8 -0
  75. package/dist/tagada-headless-react.min.js.map +7 -0
  76. package/dist/tagada-headless.js +1093 -0
  77. package/dist/tagada-headless.min.js +8 -0
  78. package/dist/tagada-headless.min.js.map +7 -0
  79. package/package.json +72 -0
package/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # @tagadapay/headless-sdk
2
+
3
+ Use TagadaPay as a **headless checkout, analytics, and CRM backend** from any website — React, Vue, vanilla JS, or plain HTML. Zero runtime dependencies in core.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @tagadapay/headless-sdk
9
+ # Optional: for card tokenization
10
+ npm install @tagadapay/core-js
11
+ ```
12
+
13
+ ## Quick Start (Vanilla JS)
14
+
15
+ ```typescript
16
+ import { createHeadlessClient } from '@tagadapay/headless-sdk';
17
+
18
+ const tagada = createHeadlessClient({
19
+ storeId: 'store_abc123',
20
+ environment: 'production',
21
+ });
22
+
23
+ // Load checkout session
24
+ const session = await tagada.checkout.loadSession(checkoutToken);
25
+
26
+ // Tokenize card + pay
27
+ const { tagadaToken } = await tagada.payment.tokenizeCard({
28
+ cardNumber: '4242424242424242',
29
+ expiryDate: '12/28',
30
+ cvc: '123',
31
+ });
32
+
33
+ const result = await tagada.payment.pay({
34
+ checkoutSessionId: session.id,
35
+ tagadaToken,
36
+ });
37
+
38
+ if (result.payment.status === 'succeeded') {
39
+ tagada.analytics.trackPurchase({
40
+ orderId: result.payment.id,
41
+ amount: result.payment.amount,
42
+ currency: result.payment.currency,
43
+ });
44
+ }
45
+ ```
46
+
47
+ ## Quick Start (React)
48
+
49
+ ```tsx
50
+ import { TagadaHeadlessProvider, useCheckout, usePayment } from '@tagadapay/headless-sdk/react';
51
+
52
+ function App() {
53
+ return (
54
+ <TagadaHeadlessProvider storeId="store_abc123" environment="production">
55
+ <CheckoutPage />
56
+ </TagadaHeadlessProvider>
57
+ );
58
+ }
59
+
60
+ function CheckoutPage() {
61
+ const { session, isLoading } = useCheckout(checkoutToken);
62
+ const { pay, isProcessing, tokenizeCard } = usePayment();
63
+
64
+ const handlePay = async () => {
65
+ const { tagadaToken } = await tokenizeCard({ cardNumber, expiryDate, cvc });
66
+ const result = await pay({ checkoutSessionId: session.id, tagadaToken });
67
+ if (result.payment.status === 'succeeded') router.push('/thank-you');
68
+ };
69
+
70
+ return <button onClick={handlePay} disabled={isProcessing}>Pay Now</button>;
71
+ }
72
+ ```
73
+
74
+ ## Modules
75
+
76
+ | Module | What it does |
77
+ |--------|-------------|
78
+ | `tagada.checkout` | Session management — load, update cart, promo codes, shipping |
79
+ | `tagada.payment` | Full payment lifecycle — APMs, tokenize, 3DS, pay, poll, express checkout |
80
+ | `tagada.analytics` | Pixel tracking — auto-loads Meta/TikTok/Snap/GTM from store config |
81
+ | `tagada.offers` | Post-purchase — load, accept, decline upsells and order bumps |
82
+ | `tagada.customer` | CRM data — profile, orders, subscriptions |
83
+
84
+ ## CDN Usage
85
+
86
+ ```html
87
+ <script src="https://cdn.jsdelivr.net/npm/@tagadapay/headless-sdk/dist/tagada-headless.min.js"></script>
88
+ <script>
89
+ const tagada = TagadaHeadless.create({ storeId: 'store_abc123' });
90
+ </script>
91
+ ```
92
+
93
+ ## Architecture
94
+
95
+ - **Zero dependencies** in core — native `fetch`, no axios
96
+ - **Tree-shakeable ESM** — unused modules are eliminated by bundlers
97
+ - **Framework-agnostic core** + thin React hooks layer
98
+ - **TypeScript first** — full type coverage, JSDoc on every method
99
+ - **Optional `@tagadapay/core-js`** peer — only needed for client-side card tokenization
100
+
101
+ ## Package Exports
102
+
103
+ | Import path | What you get |
104
+ |------------|--------------|
105
+ | `@tagadapay/headless-sdk` | Core client + all modules |
106
+ | `@tagadapay/headless-sdk/react` | React hooks + provider |
107
+
108
+ ## License
109
+
110
+ MIT
@@ -0,0 +1,48 @@
1
+ import { CheckoutModule } from './modules/checkout.js';
2
+ import { PaymentModule } from './modules/payment.js';
3
+ import { AnalyticsModule } from './modules/analytics.js';
4
+ import { OffersModule } from './modules/offers.js';
5
+ import { CustomerModule } from './modules/customer.js';
6
+ import type { HeadlessConfig } from './types.js';
7
+ /**
8
+ * Main entry point for the TagadaPay Headless SDK.
9
+ *
10
+ * Composes all domain modules (checkout, payment, analytics, offers, customer)
11
+ * over a single lightweight HTTP client built on native fetch.
12
+ */
13
+ export declare class HeadlessClient {
14
+ readonly config: Required<Pick<HeadlessConfig, 'storeId' | 'environment'>> & HeadlessConfig;
15
+ private readonly http;
16
+ /** Shared session token used by all modules for authenticated API calls. */
17
+ private _sessionToken;
18
+ /** Checkout session management -- load, update cart, apply promos, shipping. */
19
+ readonly checkout: CheckoutModule;
20
+ /** Payment processing -- setup config, APMs, tokenize, pay, 3DS, poll. */
21
+ readonly payment: PaymentModule;
22
+ /** Analytics and pixel tracking -- page views, checkout steps, conversions. */
23
+ readonly analytics: AnalyticsModule;
24
+ /** Post-purchase offers -- load, accept, decline upsells and order bumps. */
25
+ readonly offers: OffersModule;
26
+ /** Customer data -- profile, orders, subscriptions. */
27
+ readonly customer: CustomerModule;
28
+ constructor(config: HeadlessConfig);
29
+ /** Manually set the session token (e.g. from URL params on page load). */
30
+ setSessionToken(token: string): void;
31
+ }
32
+ /**
33
+ * Create a new HeadlessClient instance.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * import { createHeadlessClient } from '@tagadapay/headless-sdk';
38
+ *
39
+ * const tagada = createHeadlessClient({
40
+ * storeId: 'store_abc123',
41
+ * environment: 'production',
42
+ * });
43
+ *
44
+ * const session = await tagada.checkout.loadSession(checkoutToken);
45
+ * ```
46
+ */
47
+ export declare function createHeadlessClient(config: HeadlessConfig): HeadlessClient;
48
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,YAAY,CAAC;AAE9D;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,aAAa,CAAC,CAAC,GAAG,cAAc,CAAC;IAE5F,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAElC,4EAA4E;IAC5E,OAAO,CAAC,aAAa,CAAqB;IAE1C,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAElC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IAEpC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAE9B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;gBAEtB,MAAM,EAAE,cAAc;IA6BlC,0EAA0E;IAC1E,eAAe,CAAC,KAAK,EAAE,MAAM;CAG9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAE3E"}
@@ -0,0 +1,61 @@
1
+ import { HttpClient } from './http.js';
2
+ import { CheckoutModule } from './modules/checkout.js';
3
+ import { PaymentModule } from './modules/payment.js';
4
+ import { AnalyticsModule } from './modules/analytics.js';
5
+ import { OffersModule } from './modules/offers.js';
6
+ import { CustomerModule } from './modules/customer.js';
7
+ /**
8
+ * Main entry point for the TagadaPay Headless SDK.
9
+ *
10
+ * Composes all domain modules (checkout, payment, analytics, offers, customer)
11
+ * over a single lightweight HTTP client built on native fetch.
12
+ */
13
+ export class HeadlessClient {
14
+ constructor(config) {
15
+ const environment = config.environment ?? 'production';
16
+ const baseUrl = HttpClient.resolveBaseUrl(environment, config.baseUrl);
17
+ this.config = {
18
+ ...config,
19
+ environment,
20
+ baseUrl,
21
+ timeout: config.timeout ?? 30000,
22
+ };
23
+ this.http = new HttpClient({
24
+ baseUrl,
25
+ timeout: this.config.timeout,
26
+ apiKey: config.apiKey,
27
+ getToken: () => this._sessionToken,
28
+ });
29
+ const setToken = (token) => {
30
+ this._sessionToken = token;
31
+ };
32
+ this.checkout = new CheckoutModule(this.http, this.config.storeId, setToken);
33
+ this.payment = new PaymentModule(this.http, this.config.storeId, environment);
34
+ this.analytics = new AnalyticsModule(this.http, this.config.storeId);
35
+ this.offers = new OffersModule(this.http, this.config.storeId);
36
+ this.customer = new CustomerModule(this.http, this.config.storeId);
37
+ }
38
+ /** Manually set the session token (e.g. from URL params on page load). */
39
+ setSessionToken(token) {
40
+ this._sessionToken = token;
41
+ }
42
+ }
43
+ /**
44
+ * Create a new HeadlessClient instance.
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * import { createHeadlessClient } from '@tagadapay/headless-sdk';
49
+ *
50
+ * const tagada = createHeadlessClient({
51
+ * storeId: 'store_abc123',
52
+ * environment: 'production',
53
+ * });
54
+ *
55
+ * const session = await tagada.checkout.loadSession(checkoutToken);
56
+ * ```
57
+ */
58
+ export function createHeadlessClient(config) {
59
+ return new HeadlessClient(config);
60
+ }
61
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IAuBzB,YAAY,MAAsB;QAChC,MAAM,WAAW,GAAgB,MAAM,CAAC,WAAW,IAAI,YAAY,CAAC;QACpE,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAEvE,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,MAAM;YACT,WAAW;YACX,OAAO;YACP,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAM;SAClC,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC;YACzB,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAQ;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa;SACnC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;YACjC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC9E,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,0EAA0E;IAC1E,eAAe,CAAC,KAAa;QAC3B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,46 @@
1
+ /** Base error for all TagadaPay headless SDK errors. */
2
+ export declare class TagadaError extends Error {
3
+ readonly code: string;
4
+ readonly statusCode?: number;
5
+ readonly details?: Record<string, unknown>;
6
+ constructor(message: string, code: string, statusCode?: number, details?: Record<string, unknown>);
7
+ }
8
+ /** Thrown when the API returns 401/403. */
9
+ export declare class TagadaAuthError extends TagadaError {
10
+ constructor(message?: string);
11
+ }
12
+ /** Thrown when the API returns 422 with validation errors. */
13
+ export declare class TagadaValidationError extends TagadaError {
14
+ readonly errors: Array<{
15
+ field: string;
16
+ message: string;
17
+ }>;
18
+ constructor(message: string, errors?: Array<{
19
+ field: string;
20
+ message: string;
21
+ }>);
22
+ }
23
+ /** Thrown when a resource is not found (404). */
24
+ export declare class TagadaNotFoundError extends TagadaError {
25
+ constructor(resource: string, id: string);
26
+ }
27
+ /** Thrown when the API returns 429. */
28
+ export declare class TagadaRateLimitError extends TagadaError {
29
+ readonly retryAfterMs: number;
30
+ constructor(retryAfterMs?: number);
31
+ }
32
+ /** Thrown when a payment fails or requires action. */
33
+ export declare class TagadaPaymentError extends TagadaError {
34
+ readonly paymentId?: string;
35
+ readonly requireAction?: string;
36
+ constructor(message: string, opts?: {
37
+ paymentId?: string;
38
+ requireAction?: string;
39
+ details?: Record<string, unknown>;
40
+ });
41
+ }
42
+ /** Thrown on network / fetch failures. */
43
+ export declare class TagadaNetworkError extends TagadaError {
44
+ constructor(message?: string);
45
+ }
46
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpC,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAGhD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQpC;AAED,2CAA2C;AAC3C,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,SAAiE;CAIrF;AAED,8DAA8D;AAC9D,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,SAAgB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;gBAGhE,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAM;CAMzD;AAED,iDAAiD;AACjD,qBAAa,mBAAoB,SAAQ,WAAW;gBACtC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;CAIzC;AAED,uCAAuC;AACvC,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,SAAgB,YAAY,EAAE,MAAM,CAAC;gBAEzB,YAAY,SAAO;CAKhC;AAED,sDAAsD;AACtD,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnC,SAAgB,aAAa,CAAC,EAAE,MAAM,CAAC;gBAGrC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CAO3F;AAED,0CAA0C;AAC1C,qBAAa,kBAAmB,SAAQ,WAAW;gBACrC,OAAO,SAAmD;CAIvE"}
@@ -0,0 +1,57 @@
1
+ /** Base error for all TagadaPay headless SDK errors. */
2
+ export class TagadaError extends Error {
3
+ constructor(message, code, statusCode, details) {
4
+ super(message);
5
+ this.name = 'TagadaError';
6
+ this.code = code;
7
+ this.statusCode = statusCode;
8
+ this.details = details;
9
+ }
10
+ }
11
+ /** Thrown when the API returns 401/403. */
12
+ export class TagadaAuthError extends TagadaError {
13
+ constructor(message = 'Authentication failed. Check your API key or checkout token.') {
14
+ super(message, 'auth_error', 401);
15
+ this.name = 'TagadaAuthError';
16
+ }
17
+ }
18
+ /** Thrown when the API returns 422 with validation errors. */
19
+ export class TagadaValidationError extends TagadaError {
20
+ constructor(message, errors = []) {
21
+ super(message, 'validation_error', 422, { errors });
22
+ this.name = 'TagadaValidationError';
23
+ this.errors = errors;
24
+ }
25
+ }
26
+ /** Thrown when a resource is not found (404). */
27
+ export class TagadaNotFoundError extends TagadaError {
28
+ constructor(resource, id) {
29
+ super(`${resource} "${id}" not found.`, 'not_found', 404);
30
+ this.name = 'TagadaNotFoundError';
31
+ }
32
+ }
33
+ /** Thrown when the API returns 429. */
34
+ export class TagadaRateLimitError extends TagadaError {
35
+ constructor(retryAfterMs = 1000) {
36
+ super(`Rate limited. Retry after ${retryAfterMs}ms.`, 'rate_limit', 429);
37
+ this.name = 'TagadaRateLimitError';
38
+ this.retryAfterMs = retryAfterMs;
39
+ }
40
+ }
41
+ /** Thrown when a payment fails or requires action. */
42
+ export class TagadaPaymentError extends TagadaError {
43
+ constructor(message, opts) {
44
+ super(message, 'payment_error', undefined, opts?.details);
45
+ this.name = 'TagadaPaymentError';
46
+ this.paymentId = opts?.paymentId;
47
+ this.requireAction = opts?.requireAction;
48
+ }
49
+ }
50
+ /** Thrown on network / fetch failures. */
51
+ export class TagadaNetworkError extends TagadaError {
52
+ constructor(message = 'Network request failed. Check your connection.') {
53
+ super(message, 'network_error');
54
+ this.name = 'TagadaNetworkError';
55
+ }
56
+ }
57
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,OAAO,WAAY,SAAQ,KAAK;IAKpC,YACE,OAAe,EACf,IAAY,EACZ,UAAmB,EACnB,OAAiC;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,2CAA2C;AAC3C,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C,YAAY,OAAO,GAAG,8DAA8D;QAClF,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,8DAA8D;AAC9D,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IAGpD,YACE,OAAe,EACf,SAAoD,EAAE;QAEtD,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,iDAAiD;AACjD,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,YAAY,QAAgB,EAAE,EAAU;QACtC,KAAK,CAAC,GAAG,QAAQ,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,uCAAuC;AACvC,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IAGnD,YAAY,YAAY,GAAG,IAAI;QAC7B,KAAK,CAAC,6BAA6B,YAAY,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAED,sDAAsD;AACtD,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAIjD,YACE,OAAe,EACf,IAAwF;QAExF,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,EAAE,aAAa,CAAC;IAC3C,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACjD,YAAY,OAAO,GAAG,gDAAgD;QACpE,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import type { Environment, HttpRequestOptions } from './types.js';
2
+ export interface HttpClientConfig {
3
+ baseUrl: string;
4
+ timeout: number;
5
+ apiKey?: string;
6
+ getToken?: () => string | undefined;
7
+ }
8
+ /**
9
+ * Lightweight HTTP client built on native fetch.
10
+ * Zero dependencies -- works in browser, edge runtimes, and Node 18+.
11
+ */
12
+ export declare class HttpClient {
13
+ readonly baseUrl: string;
14
+ private timeout;
15
+ private apiKey?;
16
+ private getToken?;
17
+ constructor(config: HttpClientConfig);
18
+ static resolveBaseUrl(environment: Environment, override?: string): string;
19
+ request<T = unknown>(path: string, options?: HttpRequestOptions): Promise<T>;
20
+ get<T = unknown>(path: string, options?: HttpRequestOptions): Promise<T>;
21
+ post<T = unknown>(path: string, body?: unknown, options?: HttpRequestOptions): Promise<T>;
22
+ patch<T = unknown>(path: string, body?: unknown, options?: HttpRequestOptions): Promise<T>;
23
+ put<T = unknown>(path: string, body?: unknown, options?: HttpRequestOptions): Promise<T>;
24
+ delete<T = unknown>(path: string, options?: HttpRequestOptions): Promise<T>;
25
+ private handleErrorResponse;
26
+ }
27
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQlE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,CAA2B;gBAEhC,MAAM,EAAE,gBAAgB;IAOpC,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIpE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,CAAC,CAAC;IAuDtF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIxE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzF,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1F,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIxF,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;YAI7D,mBAAmB;CAiClC"}
@@ -0,0 +1,116 @@
1
+ import { TagadaError, TagadaAuthError, TagadaValidationError, TagadaNotFoundError, TagadaRateLimitError, TagadaNetworkError, } from './errors.js';
2
+ const BASE_URLS = {
3
+ production: 'https://app.tagadapay.com',
4
+ development: 'https://app.dev.tagadapay.com',
5
+ local: 'http://localhost:3000',
6
+ };
7
+ /**
8
+ * Lightweight HTTP client built on native fetch.
9
+ * Zero dependencies -- works in browser, edge runtimes, and Node 18+.
10
+ */
11
+ export class HttpClient {
12
+ constructor(config) {
13
+ this.baseUrl = config.baseUrl.replace(/\/$/, '');
14
+ this.timeout = config.timeout;
15
+ this.apiKey = config.apiKey;
16
+ this.getToken = config.getToken;
17
+ }
18
+ static resolveBaseUrl(environment, override) {
19
+ return override ?? BASE_URLS[environment] ?? BASE_URLS.production;
20
+ }
21
+ async request(path, options = {}) {
22
+ const { method = 'GET', body, headers = {}, params, token, signal } = options;
23
+ let url = `${this.baseUrl}${path}`;
24
+ if (params) {
25
+ const qs = new URLSearchParams();
26
+ for (const [k, v] of Object.entries(params)) {
27
+ if (v !== undefined)
28
+ qs.set(k, String(v));
29
+ }
30
+ const str = qs.toString();
31
+ if (str)
32
+ url += `?${str}`;
33
+ }
34
+ const reqHeaders = {
35
+ 'Content-Type': 'application/json',
36
+ ...headers,
37
+ };
38
+ const authToken = token ?? this.apiKey ?? this.getToken?.();
39
+ if (authToken) {
40
+ reqHeaders['x-cms-token'] = authToken;
41
+ }
42
+ const controller = new AbortController();
43
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
44
+ try {
45
+ const res = await fetch(url, {
46
+ method,
47
+ headers: reqHeaders,
48
+ body: body != null ? JSON.stringify(body) : undefined,
49
+ signal: signal ?? controller.signal,
50
+ });
51
+ clearTimeout(timeoutId);
52
+ if (res.ok) {
53
+ const text = await res.text();
54
+ return text ? JSON.parse(text) : {};
55
+ }
56
+ await this.handleErrorResponse(res, path);
57
+ throw new TagadaError('Unexpected error', 'unknown', res.status);
58
+ }
59
+ catch (err) {
60
+ clearTimeout(timeoutId);
61
+ if (err instanceof TagadaError)
62
+ throw err;
63
+ if (err instanceof DOMException && err.name === 'AbortError') {
64
+ throw new TagadaNetworkError(`Request to ${path} timed out after ${this.timeout}ms.`);
65
+ }
66
+ throw new TagadaNetworkError(err instanceof Error ? err.message : 'Network request failed.');
67
+ }
68
+ }
69
+ get(path, options) {
70
+ return this.request(path, { ...options, method: 'GET' });
71
+ }
72
+ post(path, body, options) {
73
+ return this.request(path, { ...options, method: 'POST', body });
74
+ }
75
+ patch(path, body, options) {
76
+ return this.request(path, { ...options, method: 'PATCH', body });
77
+ }
78
+ put(path, body, options) {
79
+ return this.request(path, { ...options, method: 'PUT', body });
80
+ }
81
+ delete(path, options) {
82
+ return this.request(path, { ...options, method: 'DELETE' });
83
+ }
84
+ async handleErrorResponse(res, path) {
85
+ let parsed = {};
86
+ try {
87
+ parsed = (await res.json());
88
+ }
89
+ catch {
90
+ // response isn't JSON
91
+ }
92
+ const msg = parsed.message ??
93
+ parsed.error ??
94
+ `Request failed: ${res.status} ${res.statusText} on ${path}`;
95
+ switch (res.status) {
96
+ case 401:
97
+ case 403:
98
+ throw new TagadaAuthError(msg);
99
+ case 404:
100
+ throw new TagadaNotFoundError(path, '');
101
+ case 422: {
102
+ const fieldErrors = Array.isArray(parsed.errors)
103
+ ? parsed.errors
104
+ : [];
105
+ throw new TagadaValidationError(msg, fieldErrors);
106
+ }
107
+ case 429: {
108
+ const retryAfter = Number(res.headers.get('Retry-After') ?? '1') * 1000;
109
+ throw new TagadaRateLimitError(retryAfter);
110
+ }
111
+ default:
112
+ throw new TagadaError(msg, 'api_error', res.status, parsed);
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { HeadlessClient, createHeadlessClient } from './client.js';
2
+ export { CheckoutModule } from './modules/checkout.js';
3
+ export { PaymentModule } from './modules/payment.js';
4
+ export { AnalyticsModule } from './modules/analytics.js';
5
+ export { OffersModule } from './modules/offers.js';
6
+ export { CustomerModule } from './modules/customer.js';
7
+ export { HttpClient } from './http.js';
8
+ export { TagadaError, TagadaAuthError, TagadaValidationError, TagadaNotFoundError, TagadaRateLimitError, TagadaPaymentError, TagadaNetworkError, } from './errors.js';
9
+ export type { Environment, HeadlessConfig, HttpRequestOptions, LineItem, CheckoutSession, CheckoutLineItem, CheckoutTotals, CheckoutCustomer, Address, ShippingRate, PaymentMethodConfig, PaymentSetupConfig, ExpressMethod, ExpressMethods, StoreConfig, PayResult, PayOptions, PayDirectOptions, CreateInstrumentOptions, PaymentInstrument, ThreedsSession, PaymentStatus, AnalyticsEvent, PixelConfig, Offer, OfferLineItem, OfferResult, Customer, Order, OrderItem, Subscription, } from './types.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EACL,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,WAAW,EACX,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,KAAK,EACL,aAAa,EACb,WAAW,EACX,QAAQ,EACR,KAAK,EACL,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { HeadlessClient, createHeadlessClient } from './client.js';
2
+ export { CheckoutModule } from './modules/checkout.js';
3
+ export { PaymentModule } from './modules/payment.js';
4
+ export { AnalyticsModule } from './modules/analytics.js';
5
+ export { OffersModule } from './modules/offers.js';
6
+ export { CustomerModule } from './modules/customer.js';
7
+ export { HttpClient } from './http.js';
8
+ export { TagadaError, TagadaAuthError, TagadaValidationError, TagadaNotFoundError, TagadaRateLimitError, TagadaPaymentError, TagadaNetworkError, } from './errors.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EACL,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,79 @@
1
+ import type { HttpClient } from '../http.js';
2
+ import type { PixelConfig } from '../types.js';
3
+ /**
4
+ * Analytics and pixel tracking -- page views, checkout steps, conversions.
5
+ *
6
+ * Automatically loads pixel scripts (Meta, TikTok, Snapchat, GTM, GA)
7
+ * from your store's configuration in the CRM, then fires events to all active pixels.
8
+ */
9
+ export declare class AnalyticsModule {
10
+ private readonly http;
11
+ private readonly storeId;
12
+ private pixels;
13
+ private eventQueue;
14
+ private dedupeSet;
15
+ constructor(http: HttpClient, storeId: string);
16
+ /**
17
+ * Initialize analytics by loading pixel configuration from the store.
18
+ * Call this once on page load. Events fired before init completes are queued.
19
+ */
20
+ init(opts?: {
21
+ pixelConfig?: PixelConfig;
22
+ }): Promise<void>;
23
+ trackPageView(page?: string): void;
24
+ trackViewContent(data: {
25
+ productId?: string;
26
+ variantId?: string;
27
+ value?: number;
28
+ currency?: string;
29
+ }): void;
30
+ trackAddToCart(data: {
31
+ variantId: string;
32
+ quantity?: number;
33
+ amount?: number;
34
+ currency?: string;
35
+ }): void;
36
+ trackInitiateCheckout(data?: {
37
+ sessionId?: string;
38
+ value?: number;
39
+ currency?: string;
40
+ }): void;
41
+ trackAddPaymentInfo(data?: {
42
+ paymentMethod?: string;
43
+ }): void;
44
+ trackPurchase(data: {
45
+ orderId: string;
46
+ amount: number;
47
+ currency: string;
48
+ items?: unknown[];
49
+ }): void;
50
+ trackCustomEvent(event: string, data?: Record<string, unknown>): void;
51
+ /** Track a funnel step (maps to Tagada's funnel tracking endpoint). */
52
+ trackStep(data: {
53
+ stepName: string;
54
+ stepIndex?: number;
55
+ funnelId?: string;
56
+ sessionId?: string;
57
+ }): void;
58
+ trackConversion(data: {
59
+ orderId: string;
60
+ amount: number;
61
+ currency: string;
62
+ }): void;
63
+ private fireEvent;
64
+ private flushQueue;
65
+ private getCurrentPath;
66
+ private loadPixelScripts;
67
+ private loadMetaPixel;
68
+ private loadTikTokPixel;
69
+ private loadSnapchatPixel;
70
+ private loadGTM;
71
+ private loadGA;
72
+ private injectScript;
73
+ private sendToMeta;
74
+ private sendToTikTok;
75
+ private sendToSnapchat;
76
+ private sendToGTM;
77
+ private sendToGA;
78
+ }
79
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../src/core/modules/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C;;;;;GAKG;AACH,qBAAa,eAAe;IAMxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,UAAU,CAA+D;IACjF,OAAO,CAAC,SAAS,CAAqB;gBAGnB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM;IAGlC;;;OAGG;IACG,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B/D,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlC,gBAAgB,CAAC,IAAI,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI3G,cAAc,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIxG,qBAAqB,CAAC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI7F,mBAAmB,CAAC,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI5D,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,IAAI;IAInG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIrE,uEAAuE;IACvE,SAAS,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAatG,eAAe,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAQlF,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,QAAQ;CAOjB"}