@capibox/bridge-nextjs-client 0.0.57 → 0.0.59

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/dist/index.d.mts CHANGED
@@ -28,6 +28,17 @@ type ParamsLandingPageResponse = {
28
28
  };
29
29
  };
30
30
 
31
+ type UpSellConfigItem = {
32
+ slug: string;
33
+ percent: number;
34
+ ignoreAfter?: string;
35
+ splitTemplates?: boolean;
36
+ };
37
+ type UpSellConfigItemValue = (UpSellConfigItem[] | string);
38
+ type UpSellConfigType = {
39
+ [key: string]: UpSellConfigItemValue[];
40
+ };
41
+
31
42
  declare const browser: {
32
43
  capi: {
33
44
  facebook: (data: {
@@ -72,6 +83,35 @@ declare const browser: {
72
83
  }) => Promise<{
73
84
  success: boolean;
74
85
  }>;
86
+ tiktok: (data: {
87
+ uuid: string;
88
+ event: {
89
+ eventId: string;
90
+ eventName: string;
91
+ eventData: {
92
+ value: number;
93
+ sku: string;
94
+ currency: string;
95
+ contentType: string;
96
+ sourceUrl: string;
97
+ };
98
+ testEventCode?: string;
99
+ clientData?: {
100
+ email?: string;
101
+ ip?: string;
102
+ userAgent?: string;
103
+ fbc?: string;
104
+ fbp?: string;
105
+ country?: string;
106
+ state?: string;
107
+ city?: string;
108
+ zip?: string;
109
+ phone?: string;
110
+ };
111
+ };
112
+ }) => Promise<{
113
+ success: boolean;
114
+ }>;
75
115
  };
76
116
  mail: {
77
117
  sendToRecipient: (data: {
@@ -96,26 +136,15 @@ declare const browser: {
96
136
  [key: string]: unknown;
97
137
  };
98
138
  }) => Promise<{
99
- id: string;
100
- project: string;
101
- cookies: {
102
- [key: string]: unknown;
103
- };
104
- country: string;
139
+ id: number;
140
+ uuid: string;
141
+ transactionId: string;
142
+ userId: string;
143
+ trustpilotLink?: string;
144
+ postbackUrl?: string;
145
+ status: string;
105
146
  createdAt: string;
106
- ip: string;
107
- isEu: boolean;
108
- origin: string;
109
- query: {
110
- [key: string]: unknown;
111
- };
112
- referer: string;
113
- slug: string;
114
147
  updatedAt: string;
115
- useragent: string;
116
- extraData: {
117
- [key: string]: unknown;
118
- };
119
148
  }>;
120
149
  create: ({ language, email, currency, quiz, ...data }: {
121
150
  language: string;
@@ -139,74 +168,41 @@ declare const browser: {
139
168
  referer?: string;
140
169
  slug: string;
141
170
  }, "origin" | "referer" | "cookies" | "slug" | "query" | "ip" | "user-agent" | "analyticsId" | "analyticsIdv3">) => Promise<{
142
- id: string;
143
- project: string;
144
- cookies: {
145
- [key: string]: unknown;
146
- };
147
- country: string;
171
+ id: number;
172
+ uuid: string;
173
+ transactionId: string;
174
+ userId: string;
175
+ trustpilotLink?: string;
176
+ postbackUrl?: string;
177
+ status: string;
148
178
  createdAt: string;
149
- ip: string;
150
- isEu: boolean;
151
- origin: string;
152
- query: {
153
- [key: string]: unknown;
154
- };
155
- referer: string;
156
- slug: string;
157
179
  updatedAt: string;
158
- useragent: string;
159
- extraData: {
160
- [key: string]: unknown;
161
- };
162
180
  }>;
163
181
  get: (uuid: string) => Promise<{
164
- id: string;
165
- project: string;
166
- cookies: {
167
- [key: string]: unknown;
168
- };
169
- country: string;
182
+ id: number;
183
+ uuid: string;
184
+ transactionId: string;
185
+ userId: string;
186
+ trustpilotLink?: string;
187
+ postbackUrl?: string;
188
+ status: string;
170
189
  createdAt: string;
171
- ip: string;
172
- isEu: boolean;
173
- origin: string;
174
- query: {
175
- [key: string]: unknown;
176
- };
177
- referer: string;
178
- slug: string;
179
190
  updatedAt: string;
180
- useragent: string;
181
- extraData: {
182
- [key: string]: unknown;
183
- };
184
191
  }>;
185
192
  };
186
193
  sessionWithCurrency: {
187
194
  get: (uuid: string) => Promise<{
188
195
  success: number;
189
196
  data: {
190
- id: string;
191
- project: string;
192
- cookies: {
193
- [key: string]: unknown;
194
- };
195
- country: string;
197
+ id: number;
198
+ uuid: string;
199
+ transactionId: string;
200
+ userId: string;
201
+ trustpilotLink?: string;
202
+ postbackUrl?: string;
203
+ status: string;
196
204
  createdAt: string;
197
- ip: string;
198
- isEu: boolean;
199
- origin: string;
200
- query: {
201
- [key: string]: unknown;
202
- };
203
- referer: string;
204
- slug: string;
205
205
  updatedAt: string;
206
- useragent: string;
207
- extraData: {
208
- [key: string]: unknown;
209
- };
210
206
  };
211
207
  currency: {
212
208
  currency: string;
@@ -239,26 +235,15 @@ declare const browser: {
239
235
  }, "origin" | "referer" | "cookies" | "slug" | "query" | "ip" | "user-agent" | "analyticsId" | "analyticsIdv3">) => Promise<{
240
236
  success: number;
241
237
  data: {
242
- id: string;
243
- project: string;
244
- cookies: {
245
- [key: string]: unknown;
246
- };
247
- country: string;
238
+ id: number;
239
+ uuid: string;
240
+ transactionId: string;
241
+ userId: string;
242
+ trustpilotLink?: string;
243
+ postbackUrl?: string;
244
+ status: string;
248
245
  createdAt: string;
249
- ip: string;
250
- isEu: boolean;
251
- origin: string;
252
- query: {
253
- [key: string]: unknown;
254
- };
255
- referer: string;
256
- slug: string;
257
246
  updatedAt: string;
258
- useragent: string;
259
- extraData: {
260
- [key: string]: unknown;
261
- };
262
247
  };
263
248
  currency: {
264
249
  currency: string;
@@ -357,12 +342,110 @@ declare const browser: {
357
342
  oneUsdChargeAndRefund: (dto: {
358
343
  paymentMethodToken?: string;
359
344
  orderId: string;
345
+ customerId: string;
346
+ currencyCode: string;
360
347
  amount: number;
361
348
  metadata?: {
362
349
  [key: string]: unknown;
363
350
  };
351
+ customer: {
352
+ emailAddress: string;
353
+ billingAddress: {
354
+ countryCode: string;
355
+ };
356
+ };
357
+ order: {
358
+ countryCode: string;
359
+ };
364
360
  }) => Promise<{
365
361
  success: boolean;
362
+ data: {
363
+ id: string;
364
+ date: string;
365
+ dateUpdated: string;
366
+ amount: number;
367
+ currencyCode: string;
368
+ customerId: string;
369
+ metadata: Record<string, never>;
370
+ orderId: string;
371
+ status: "PENDING" | "FAILED" | "AUTHORIZED" | "SETTLING" | "PARTIALLY_SETTLED" | "SETTLED" | "DECLINED" | "CANCELLED";
372
+ order: {
373
+ countryCode: string;
374
+ };
375
+ customer: {
376
+ emailAddress: string;
377
+ billingAddress: {
378
+ countryCode: string;
379
+ };
380
+ };
381
+ paymentMethod: {
382
+ paymentType: string;
383
+ authorizationType: string;
384
+ paymentMethodToken: string;
385
+ isVaulted: boolean;
386
+ analyticsId: string;
387
+ paymentMethodType: string;
388
+ paymentMethodData: {
389
+ last4Digits: string;
390
+ first6Digits: string;
391
+ expirationMonth: string;
392
+ expirationYear: string;
393
+ network: string;
394
+ isNetworkTokenized: boolean;
395
+ binData: {
396
+ [key: string]: unknown;
397
+ } & {
398
+ network: string;
399
+ issuerCountryCode: string;
400
+ issuerName: string;
401
+ issuerCurrencyCode: string;
402
+ regionalRestriction: string;
403
+ accountNumberType: string;
404
+ accountFundingType: string;
405
+ prepaidReloadableIndicator: string;
406
+ productUsageType: string;
407
+ productCode: string;
408
+ productName: string;
409
+ };
410
+ networkTransactionId: string;
411
+ accountFundingType: string;
412
+ };
413
+ threeDSecureAuthentication: {
414
+ responseCode: string;
415
+ };
416
+ };
417
+ processor: {
418
+ name: string;
419
+ processorMerchantId: string;
420
+ amountCaptured: number;
421
+ amountRefunded: number;
422
+ };
423
+ transactions: {
424
+ date: string;
425
+ amount: number;
426
+ currencyCode: string;
427
+ transactionType: string;
428
+ transactionDate: string;
429
+ processorTransactionId: string;
430
+ processorName: string;
431
+ processorMerchantId: string;
432
+ processorStatus: string;
433
+ orderId: string;
434
+ }[];
435
+ riskData: {
436
+ cvvCheck: {
437
+ source: string;
438
+ result: string;
439
+ };
440
+ avsCheck: {
441
+ source: string;
442
+ result: {
443
+ streetAddress: string;
444
+ postalCode: string;
445
+ };
446
+ };
447
+ };
448
+ };
366
449
  }>;
367
450
  oneUsdChargeAndRefundDeferred: (dto: {
368
451
  paymentMethodToken?: string;
@@ -424,6 +507,50 @@ declare const browser: {
424
507
  message: string;
425
508
  }>;
426
509
  };
510
+ jumpTask: {
511
+ create: (dto: {
512
+ transactionId: string;
513
+ userId: string;
514
+ }) => Promise<{
515
+ data: {
516
+ id: number;
517
+ uuid: string;
518
+ transactionId: string;
519
+ userId: string;
520
+ trustpilotLink?: string;
521
+ postbackUrl?: string;
522
+ status: string;
523
+ createdAt: string;
524
+ updatedAt: string;
525
+ };
526
+ }>;
527
+ update: (uuid: string, dto: {
528
+ trustpilotLink?: string;
529
+ status?: "created" | "completed";
530
+ }) => Promise<{
531
+ data: {
532
+ id: number;
533
+ uuid: string;
534
+ transactionId: string;
535
+ userId: string;
536
+ trustpilotLink?: string;
537
+ postbackUrl?: string;
538
+ status: string;
539
+ createdAt: string;
540
+ updatedAt: string;
541
+ };
542
+ }>;
543
+ };
544
+ abTool: {
545
+ upSellNavigation: {
546
+ configItemIndexBySlug: (config: UpSellConfigType, template: string, slug: string) => number;
547
+ nextPathByConfigItemIndex: (config: UpSellConfigType, template: string, currentIndex: number, currentSlug?: string) => string | undefined;
548
+ nextPathByConfigItemSlug: (config: UpSellConfigType, template: string, currentSlug: string) => string | undefined;
549
+ };
550
+ upSellTemplatesSplit: {
551
+ getTemplate: (config: UpSellConfigType, template: string) => string;
552
+ };
553
+ };
427
554
  hooks: {
428
555
  useParamsLandingPage: () => ParamsLandingPageResponse;
429
556
  };
@@ -437,4 +564,4 @@ declare const browser: {
437
564
  };
438
565
  };
439
566
 
440
- export { type SdkRemoteFunnel, browser };
567
+ export { type SdkRemoteFunnel, type UpSellConfigType, browser };
package/dist/index.d.ts CHANGED
@@ -28,6 +28,17 @@ type ParamsLandingPageResponse = {
28
28
  };
29
29
  };
30
30
 
31
+ type UpSellConfigItem = {
32
+ slug: string;
33
+ percent: number;
34
+ ignoreAfter?: string;
35
+ splitTemplates?: boolean;
36
+ };
37
+ type UpSellConfigItemValue = (UpSellConfigItem[] | string);
38
+ type UpSellConfigType = {
39
+ [key: string]: UpSellConfigItemValue[];
40
+ };
41
+
31
42
  declare const browser: {
32
43
  capi: {
33
44
  facebook: (data: {
@@ -72,6 +83,35 @@ declare const browser: {
72
83
  }) => Promise<{
73
84
  success: boolean;
74
85
  }>;
86
+ tiktok: (data: {
87
+ uuid: string;
88
+ event: {
89
+ eventId: string;
90
+ eventName: string;
91
+ eventData: {
92
+ value: number;
93
+ sku: string;
94
+ currency: string;
95
+ contentType: string;
96
+ sourceUrl: string;
97
+ };
98
+ testEventCode?: string;
99
+ clientData?: {
100
+ email?: string;
101
+ ip?: string;
102
+ userAgent?: string;
103
+ fbc?: string;
104
+ fbp?: string;
105
+ country?: string;
106
+ state?: string;
107
+ city?: string;
108
+ zip?: string;
109
+ phone?: string;
110
+ };
111
+ };
112
+ }) => Promise<{
113
+ success: boolean;
114
+ }>;
75
115
  };
76
116
  mail: {
77
117
  sendToRecipient: (data: {
@@ -96,26 +136,15 @@ declare const browser: {
96
136
  [key: string]: unknown;
97
137
  };
98
138
  }) => Promise<{
99
- id: string;
100
- project: string;
101
- cookies: {
102
- [key: string]: unknown;
103
- };
104
- country: string;
139
+ id: number;
140
+ uuid: string;
141
+ transactionId: string;
142
+ userId: string;
143
+ trustpilotLink?: string;
144
+ postbackUrl?: string;
145
+ status: string;
105
146
  createdAt: string;
106
- ip: string;
107
- isEu: boolean;
108
- origin: string;
109
- query: {
110
- [key: string]: unknown;
111
- };
112
- referer: string;
113
- slug: string;
114
147
  updatedAt: string;
115
- useragent: string;
116
- extraData: {
117
- [key: string]: unknown;
118
- };
119
148
  }>;
120
149
  create: ({ language, email, currency, quiz, ...data }: {
121
150
  language: string;
@@ -139,74 +168,41 @@ declare const browser: {
139
168
  referer?: string;
140
169
  slug: string;
141
170
  }, "origin" | "referer" | "cookies" | "slug" | "query" | "ip" | "user-agent" | "analyticsId" | "analyticsIdv3">) => Promise<{
142
- id: string;
143
- project: string;
144
- cookies: {
145
- [key: string]: unknown;
146
- };
147
- country: string;
171
+ id: number;
172
+ uuid: string;
173
+ transactionId: string;
174
+ userId: string;
175
+ trustpilotLink?: string;
176
+ postbackUrl?: string;
177
+ status: string;
148
178
  createdAt: string;
149
- ip: string;
150
- isEu: boolean;
151
- origin: string;
152
- query: {
153
- [key: string]: unknown;
154
- };
155
- referer: string;
156
- slug: string;
157
179
  updatedAt: string;
158
- useragent: string;
159
- extraData: {
160
- [key: string]: unknown;
161
- };
162
180
  }>;
163
181
  get: (uuid: string) => Promise<{
164
- id: string;
165
- project: string;
166
- cookies: {
167
- [key: string]: unknown;
168
- };
169
- country: string;
182
+ id: number;
183
+ uuid: string;
184
+ transactionId: string;
185
+ userId: string;
186
+ trustpilotLink?: string;
187
+ postbackUrl?: string;
188
+ status: string;
170
189
  createdAt: string;
171
- ip: string;
172
- isEu: boolean;
173
- origin: string;
174
- query: {
175
- [key: string]: unknown;
176
- };
177
- referer: string;
178
- slug: string;
179
190
  updatedAt: string;
180
- useragent: string;
181
- extraData: {
182
- [key: string]: unknown;
183
- };
184
191
  }>;
185
192
  };
186
193
  sessionWithCurrency: {
187
194
  get: (uuid: string) => Promise<{
188
195
  success: number;
189
196
  data: {
190
- id: string;
191
- project: string;
192
- cookies: {
193
- [key: string]: unknown;
194
- };
195
- country: string;
197
+ id: number;
198
+ uuid: string;
199
+ transactionId: string;
200
+ userId: string;
201
+ trustpilotLink?: string;
202
+ postbackUrl?: string;
203
+ status: string;
196
204
  createdAt: string;
197
- ip: string;
198
- isEu: boolean;
199
- origin: string;
200
- query: {
201
- [key: string]: unknown;
202
- };
203
- referer: string;
204
- slug: string;
205
205
  updatedAt: string;
206
- useragent: string;
207
- extraData: {
208
- [key: string]: unknown;
209
- };
210
206
  };
211
207
  currency: {
212
208
  currency: string;
@@ -239,26 +235,15 @@ declare const browser: {
239
235
  }, "origin" | "referer" | "cookies" | "slug" | "query" | "ip" | "user-agent" | "analyticsId" | "analyticsIdv3">) => Promise<{
240
236
  success: number;
241
237
  data: {
242
- id: string;
243
- project: string;
244
- cookies: {
245
- [key: string]: unknown;
246
- };
247
- country: string;
238
+ id: number;
239
+ uuid: string;
240
+ transactionId: string;
241
+ userId: string;
242
+ trustpilotLink?: string;
243
+ postbackUrl?: string;
244
+ status: string;
248
245
  createdAt: string;
249
- ip: string;
250
- isEu: boolean;
251
- origin: string;
252
- query: {
253
- [key: string]: unknown;
254
- };
255
- referer: string;
256
- slug: string;
257
246
  updatedAt: string;
258
- useragent: string;
259
- extraData: {
260
- [key: string]: unknown;
261
- };
262
247
  };
263
248
  currency: {
264
249
  currency: string;
@@ -357,12 +342,110 @@ declare const browser: {
357
342
  oneUsdChargeAndRefund: (dto: {
358
343
  paymentMethodToken?: string;
359
344
  orderId: string;
345
+ customerId: string;
346
+ currencyCode: string;
360
347
  amount: number;
361
348
  metadata?: {
362
349
  [key: string]: unknown;
363
350
  };
351
+ customer: {
352
+ emailAddress: string;
353
+ billingAddress: {
354
+ countryCode: string;
355
+ };
356
+ };
357
+ order: {
358
+ countryCode: string;
359
+ };
364
360
  }) => Promise<{
365
361
  success: boolean;
362
+ data: {
363
+ id: string;
364
+ date: string;
365
+ dateUpdated: string;
366
+ amount: number;
367
+ currencyCode: string;
368
+ customerId: string;
369
+ metadata: Record<string, never>;
370
+ orderId: string;
371
+ status: "PENDING" | "FAILED" | "AUTHORIZED" | "SETTLING" | "PARTIALLY_SETTLED" | "SETTLED" | "DECLINED" | "CANCELLED";
372
+ order: {
373
+ countryCode: string;
374
+ };
375
+ customer: {
376
+ emailAddress: string;
377
+ billingAddress: {
378
+ countryCode: string;
379
+ };
380
+ };
381
+ paymentMethod: {
382
+ paymentType: string;
383
+ authorizationType: string;
384
+ paymentMethodToken: string;
385
+ isVaulted: boolean;
386
+ analyticsId: string;
387
+ paymentMethodType: string;
388
+ paymentMethodData: {
389
+ last4Digits: string;
390
+ first6Digits: string;
391
+ expirationMonth: string;
392
+ expirationYear: string;
393
+ network: string;
394
+ isNetworkTokenized: boolean;
395
+ binData: {
396
+ [key: string]: unknown;
397
+ } & {
398
+ network: string;
399
+ issuerCountryCode: string;
400
+ issuerName: string;
401
+ issuerCurrencyCode: string;
402
+ regionalRestriction: string;
403
+ accountNumberType: string;
404
+ accountFundingType: string;
405
+ prepaidReloadableIndicator: string;
406
+ productUsageType: string;
407
+ productCode: string;
408
+ productName: string;
409
+ };
410
+ networkTransactionId: string;
411
+ accountFundingType: string;
412
+ };
413
+ threeDSecureAuthentication: {
414
+ responseCode: string;
415
+ };
416
+ };
417
+ processor: {
418
+ name: string;
419
+ processorMerchantId: string;
420
+ amountCaptured: number;
421
+ amountRefunded: number;
422
+ };
423
+ transactions: {
424
+ date: string;
425
+ amount: number;
426
+ currencyCode: string;
427
+ transactionType: string;
428
+ transactionDate: string;
429
+ processorTransactionId: string;
430
+ processorName: string;
431
+ processorMerchantId: string;
432
+ processorStatus: string;
433
+ orderId: string;
434
+ }[];
435
+ riskData: {
436
+ cvvCheck: {
437
+ source: string;
438
+ result: string;
439
+ };
440
+ avsCheck: {
441
+ source: string;
442
+ result: {
443
+ streetAddress: string;
444
+ postalCode: string;
445
+ };
446
+ };
447
+ };
448
+ };
366
449
  }>;
367
450
  oneUsdChargeAndRefundDeferred: (dto: {
368
451
  paymentMethodToken?: string;
@@ -424,6 +507,50 @@ declare const browser: {
424
507
  message: string;
425
508
  }>;
426
509
  };
510
+ jumpTask: {
511
+ create: (dto: {
512
+ transactionId: string;
513
+ userId: string;
514
+ }) => Promise<{
515
+ data: {
516
+ id: number;
517
+ uuid: string;
518
+ transactionId: string;
519
+ userId: string;
520
+ trustpilotLink?: string;
521
+ postbackUrl?: string;
522
+ status: string;
523
+ createdAt: string;
524
+ updatedAt: string;
525
+ };
526
+ }>;
527
+ update: (uuid: string, dto: {
528
+ trustpilotLink?: string;
529
+ status?: "created" | "completed";
530
+ }) => Promise<{
531
+ data: {
532
+ id: number;
533
+ uuid: string;
534
+ transactionId: string;
535
+ userId: string;
536
+ trustpilotLink?: string;
537
+ postbackUrl?: string;
538
+ status: string;
539
+ createdAt: string;
540
+ updatedAt: string;
541
+ };
542
+ }>;
543
+ };
544
+ abTool: {
545
+ upSellNavigation: {
546
+ configItemIndexBySlug: (config: UpSellConfigType, template: string, slug: string) => number;
547
+ nextPathByConfigItemIndex: (config: UpSellConfigType, template: string, currentIndex: number, currentSlug?: string) => string | undefined;
548
+ nextPathByConfigItemSlug: (config: UpSellConfigType, template: string, currentSlug: string) => string | undefined;
549
+ };
550
+ upSellTemplatesSplit: {
551
+ getTemplate: (config: UpSellConfigType, template: string) => string;
552
+ };
553
+ };
427
554
  hooks: {
428
555
  useParamsLandingPage: () => ParamsLandingPageResponse;
429
556
  };
@@ -437,4 +564,4 @@ declare const browser: {
437
564
  };
438
565
  };
439
566
 
440
- export { type SdkRemoteFunnel, browser };
567
+ export { type SdkRemoteFunnel, type UpSellConfigType, browser };
package/dist/index.js CHANGED
@@ -182,7 +182,113 @@ var getTemplates = (_0) => __async(null, [_0], function* ({
182
182
  // src/index.ts
183
183
  var import_bridge_server = require("@capibox/bridge-server");
184
184
  var import_bridge_browser = require("@capibox/bridge-browser");
185
+
186
+ // src/browser/abtool/upSellNavigation/getUpsellConfigItemIndexBySlug.ts
187
+ var getUpsellConfigItemIndexBySlug = (config, template, slug) => {
188
+ const slugs = config[template] || [];
189
+ return slugs.findIndex((el) => el === slug || Array.isArray(el) && el.map((s) => s.slug).indexOf(slug) >= 0);
190
+ };
191
+
192
+ // src/browser/abtool/upSellNavigation/getUpsellConfigNextSlugByIndex.ts
193
+ var getUpsellConfigNextSlugByIndex = (config, template, currentIndex, currentSlug) => {
194
+ const slugs = config[template] || [];
195
+ const nextIndex = currentIndex + 1;
196
+ if (nextIndex > -1 && nextIndex < slugs.length) {
197
+ const path = slugs[nextIndex];
198
+ if (Array.isArray(path)) {
199
+ const _time = (/* @__PURE__ */ new Date()).getTime();
200
+ const _seed100 = _time % 100;
201
+ const splitValues = path.filter((f) => {
202
+ if (!currentSlug) return true;
203
+ if (!f.ignoreAfter) return true;
204
+ return f.ignoreAfter !== currentSlug;
205
+ }).map((curr, i, data) => {
206
+ const minPercent = data.slice(0, i).map((a) => a.percent).reduce((a, b) => a + b, 0);
207
+ return __spreadProps(__spreadValues({}, curr), {
208
+ range: {
209
+ start: minPercent,
210
+ finish: minPercent + curr.percent
211
+ }
212
+ });
213
+ });
214
+ if (splitValues.length === 0) {
215
+ return getUpsellConfigNextSlugByIndex(config, template, currentIndex + 1, currentSlug);
216
+ }
217
+ let winner = splitValues.find(
218
+ (e) => e.range.start <= _seed100 && e.range.finish > _seed100
219
+ );
220
+ if (!winner) {
221
+ winner = splitValues[0];
222
+ }
223
+ if (winner.slug === "") {
224
+ return getUpsellConfigNextSlugByIndex(config, template, currentIndex + 1, currentSlug);
225
+ }
226
+ return winner.slug;
227
+ } else {
228
+ return path;
229
+ }
230
+ }
231
+ return void 0;
232
+ };
233
+
234
+ // src/browser/abtool/upSellNavigation/getUpsellConfigNextSlugBySlug.ts
235
+ var getUpsellConfigNextSlugBySlug = (config, template, currentSlug) => {
236
+ const currentIndex = getUpsellConfigItemIndexBySlug(config, template, currentSlug);
237
+ return getUpsellConfigNextSlugByIndex(config, template, currentIndex, currentSlug);
238
+ };
239
+
240
+ // src/browser/abtool/upSellNavigation/index.ts
241
+ var upSellNavigation = {
242
+ configItemIndexBySlug: getUpsellConfigItemIndexBySlug,
243
+ nextPathByConfigItemIndex: getUpsellConfigNextSlugByIndex,
244
+ nextPathByConfigItemSlug: getUpsellConfigNextSlugBySlug
245
+ };
246
+
247
+ // src/browser/abtool/upSellTemplatesSplit/isSplitTemplate.ts
248
+ var isSplitTemplate = (items) => {
249
+ if (items.length > 0 && Array.isArray(items[0]) && "splitTemplates" in items[0][0]) {
250
+ return true;
251
+ }
252
+ return false;
253
+ };
254
+
255
+ // src/browser/abtool/upSellTemplatesSplit/getUpsellPageTemplate.ts
256
+ var getUpsellPageTemplate = (config, template) => {
257
+ const items = config[template] || [];
258
+ if (isSplitTemplate(items) && Array.isArray(items[0])) {
259
+ const itemsWithRange = items[0].map((curr, i, data) => {
260
+ const minPercent = data.slice(0, i).map((a) => a.percent).reduce((a, b) => a + b, 0);
261
+ return __spreadProps(__spreadValues({}, curr), {
262
+ range: {
263
+ start: minPercent,
264
+ finish: minPercent + curr.percent
265
+ }
266
+ });
267
+ });
268
+ const _time = (/* @__PURE__ */ new Date()).getTime();
269
+ const _seed100 = _time % 100;
270
+ let currentSplit = itemsWithRange.find(
271
+ (e) => e.range.start <= _seed100 && e.range.finish > _seed100
272
+ );
273
+ if (!currentSplit) {
274
+ currentSplit = itemsWithRange[0];
275
+ }
276
+ return currentSplit.slug;
277
+ }
278
+ return template;
279
+ };
280
+
281
+ // src/browser/abtool/upSellTemplatesSplit/index.ts
282
+ var upSellTemplatesSplit = {
283
+ getTemplate: getUpsellPageTemplate
284
+ };
285
+
286
+ // src/index.ts
185
287
  var browser = __spreadValues({
288
+ abTool: {
289
+ upSellNavigation,
290
+ upSellTemplatesSplit
291
+ },
186
292
  hooks: {
187
293
  useParamsLandingPage
188
294
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/browser/hooks/useParamsLandingPage.ts","../src/lib/api.ts","../src/browser/funnels/get.ts","../src/browser/funnels/get-templates.ts"],"sourcesContent":["import {useParamsLandingPage} from \"./browser/hooks/useParamsLandingPage\";\nimport {getFunnels} from \"./browser/funnels/get\";\nimport {getTemplates} from \"./browser/funnels/get-templates\";\nimport {server} from '@capibox/bridge-server'\nimport {browser as clientBrowser} from '@capibox/bridge-browser'\n\n\nexport {SdkRemoteFunnel} from \"./browser/funnels/get\";\n\nconst browser = {\n hooks: {\n useParamsLandingPage\n },\n funnels: {\n get: getFunnels,\n getTemplates: getTemplates\n },\n ...clientBrowser\n}\n\n\nexport {\n browser,\n server\n}\n\nif (typeof window !== 'undefined') {\n // @ts-ignore\n window.capibox = browser;\n}\n// v.0.0.56","import {useParams} from 'next/navigation'\n\nexport type ParamsLandingPage = {\n landing?: string\n checkout?: string\n}\nexport type ParamsLandingPageResponse = {\n landing: string\n checkout: string\n angle: string\n version: string\n path: {\n root: string\n rootPretty: string\n }\n}\n\nexport const useParamsLandingPage = (): ParamsLandingPageResponse => {\n const params = useParams<ParamsLandingPage>();\n\n const angle = (params.landing ?? 'main').toLowerCase()\n const version = (params.checkout ?? 'a').toLowerCase()\n\n return {\n landing: angle,\n checkout: version,\n angle,\n version,\n path: {\n root: `/${angle}/${version}`,\n rootPretty: angle === 'main' && version === 'a' ? '' : `/${angle}/${version}`\n }\n }\n}","import createFetchClient from \"openapi-fetch\";\nimport type {paths} from \"./api.def\";\n\nconst endpoint = '/api-client-proxy';\n\nexport const $apiClient = createFetchClient<paths>({\n baseUrl: endpoint,\n headers: {\n 'project-key': \"Frontend\"\n },\n});","import {$apiClient} from \"../../lib/api\";\nimport {components} from \"../../lib/api.def\";\n\nexport type SdkRemoteFunnel = {\n checkout: string,\n landing: string,\n\n angle: string,\n version: string,\n\n homePageTemplate: string,\n quizPageTemplate: string,\n resultPageTemplate: string,\n emailPageTemplate: string,\n checkoutPageTemplate: string,\n paymentWindowTemplate: string,\n upsellPageTemplate: string,\n\n options?: any,\n upsellOptions?: any,\n}\n\nexport const getFunnels = async (): Promise<SdkRemoteFunnel[]> => {\n let response: components['schemas']['FunnelResponseDto'][] = [];\n\n const res = await $apiClient.GET('/funnels/funnel', {\n params: {\n header: {\n 'project-key': 'Frontend'\n }\n }\n });\n if (!res || !res.data) return [];\n response = res.data;\n\n const tmpFunnels: components['schemas']['FunnelResponseDto'][] = response;\n const output: SdkRemoteFunnel[] = [];\n for (const funnel of tmpFunnels) {\n output.push({\n landing: funnel.angle,\n checkout: funnel.version,\n\n angle: funnel.angle,\n version: funnel.version,\n\n homePageTemplate: funnel.home_page,\n quizPageTemplate: funnel.quiz_page,\n resultPageTemplate: funnel.results_page,\n emailPageTemplate: funnel.email_page,\n checkoutPageTemplate: funnel.checkout_page,\n paymentWindowTemplate: funnel.payment_window,\n upsellPageTemplate: funnel.upsell_page,\n\n options: funnel.options,\n upsellOptions: funnel.upsell_options,\n });\n }\n return output;\n}","import {getFunnels, SdkRemoteFunnel} from \"./get\";\nimport {ReadonlyURLSearchParams} from \"next/navigation\";\n\n\ntype SdkRemoteTemplate = Omit<SdkRemoteFunnel, \"checkout\" | \"angle\" | \"landing\" | \"version\" | \"options\" | \"upsellOptions\">\n\nconst defaultTemplate: SdkRemoteTemplate = {\n homePageTemplate: 'Default',\n quizPageTemplate: 'Default',\n resultPageTemplate: 'Default',\n emailPageTemplate: 'Default',\n checkoutPageTemplate: 'Default',\n paymentWindowTemplate: 'Default',\n upsellPageTemplate: 'Default',\n}\n\ntype Props = {\n angle: string,\n version: string,\n searchParams?: ReadonlyURLSearchParams\n}\n\nexport const getTemplates = async ({\n angle, version, searchParams\n }: Props): Promise<SdkRemoteFunnel> => {\n const funnelsData = await getFunnels();\n\n const filteredFunnelsData = funnelsData.filter((a) => {\n if (\n (a.checkout === version || a.checkout === 'any') &&\n (a.landing === angle || a.landing === 'any')\n ) {\n return true\n }\n return false\n })\n if (filteredFunnelsData.length > 0) {\n const _flowData: SdkRemoteFunnel = JSON.parse(\n JSON.stringify(filteredFunnelsData[filteredFunnelsData.length - 1])\n )\n if (searchParams) {\n const keys = Object.keys(defaultTemplate)\n for (const key of keys) {\n if (searchParams.get(key)) {\n // @ts-ignore\n _flowData[key] = searchParams.get(key);\n }\n }\n }\n\n return _flowData;\n }\n return {\n ...defaultTemplate,\n landing: angle,\n checkout: version,\n angle,\n version,\n }\n}"],"mappings":"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","names":["createFetchClient","clientBrowser"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/browser/hooks/useParamsLandingPage.ts","../src/lib/api.ts","../src/browser/funnels/get.ts","../src/browser/funnels/get-templates.ts","../src/browser/abtool/upSellNavigation/getUpsellConfigItemIndexBySlug.ts","../src/browser/abtool/upSellNavigation/getUpsellConfigNextSlugByIndex.ts","../src/browser/abtool/upSellNavigation/getUpsellConfigNextSlugBySlug.ts","../src/browser/abtool/upSellNavigation/index.ts","../src/browser/abtool/upSellTemplatesSplit/isSplitTemplate.ts","../src/browser/abtool/upSellTemplatesSplit/getUpsellPageTemplate.ts","../src/browser/abtool/upSellTemplatesSplit/index.ts"],"sourcesContent":["import {useParamsLandingPage} from \"./browser/hooks/useParamsLandingPage\";\nimport {getFunnels} from \"./browser/funnels/get\";\nimport {getTemplates} from \"./browser/funnels/get-templates\";\nimport {server} from '@capibox/bridge-server'\nimport {browser as clientBrowser} from '@capibox/bridge-browser'\nimport {upSellNavigation} from \"./browser/abtool/upSellNavigation\";\nimport {upSellTemplatesSplit} from \"./browser/abtool/upSellTemplatesSplit\";\n\nexport type {UpSellConfigType} from './browser/abtool/upSellNavigation/types'\nexport type {SdkRemoteFunnel} from \"./browser/funnels/get\";\n\nconst browser = {\n abTool: {\n upSellNavigation,\n upSellTemplatesSplit,\n },\n hooks: {\n useParamsLandingPage\n },\n funnels: {\n get: getFunnels,\n getTemplates: getTemplates\n },\n ...clientBrowser\n}\n\n\nexport {\n browser,\n server\n}\n\n\nif (typeof window !== 'undefined') {\n // @ts-ignore\n window.capibox = browser;\n}\n// v.0.0.59\n","import {useParams} from 'next/navigation'\n\nexport type ParamsLandingPage = {\n landing?: string\n checkout?: string\n}\nexport type ParamsLandingPageResponse = {\n landing: string\n checkout: string\n angle: string\n version: string\n path: {\n root: string\n rootPretty: string\n }\n}\n\nexport const useParamsLandingPage = (): ParamsLandingPageResponse => {\n const params = useParams<ParamsLandingPage>();\n\n const angle = (params.landing ?? 'main').toLowerCase()\n const version = (params.checkout ?? 'a').toLowerCase()\n\n return {\n landing: angle,\n checkout: version,\n angle,\n version,\n path: {\n root: `/${angle}/${version}`,\n rootPretty: angle === 'main' && version === 'a' ? '' : `/${angle}/${version}`\n }\n }\n}","import createFetchClient from \"openapi-fetch\";\nimport type {paths} from \"./api.def\";\n\nconst endpoint = '/api-client-proxy';\n\nexport const $apiClient = createFetchClient<paths>({\n baseUrl: endpoint,\n headers: {\n 'project-key': \"Frontend\"\n },\n});","import {$apiClient} from \"../../lib/api\";\nimport {components} from \"../../lib/api.def\";\n\nexport type SdkRemoteFunnel = {\n checkout: string,\n landing: string,\n\n angle: string,\n version: string,\n\n homePageTemplate: string,\n quizPageTemplate: string,\n resultPageTemplate: string,\n emailPageTemplate: string,\n checkoutPageTemplate: string,\n paymentWindowTemplate: string,\n upsellPageTemplate: string,\n\n options?: any,\n upsellOptions?: any,\n}\n\nexport const getFunnels = async (): Promise<SdkRemoteFunnel[]> => {\n let response: components['schemas']['FunnelResponseDto'][] = [];\n\n const res = await $apiClient.GET('/funnels/funnel', {\n params: {\n header: {\n 'project-key': 'Frontend'\n }\n }\n });\n if (!res || !res.data) return [];\n response = res.data;\n\n const tmpFunnels: components['schemas']['FunnelResponseDto'][] = response;\n const output: SdkRemoteFunnel[] = [];\n for (const funnel of tmpFunnels) {\n output.push({\n landing: funnel.angle,\n checkout: funnel.version,\n\n angle: funnel.angle,\n version: funnel.version,\n\n homePageTemplate: funnel.home_page,\n quizPageTemplate: funnel.quiz_page,\n resultPageTemplate: funnel.results_page,\n emailPageTemplate: funnel.email_page,\n checkoutPageTemplate: funnel.checkout_page,\n paymentWindowTemplate: funnel.payment_window,\n upsellPageTemplate: funnel.upsell_page,\n\n options: funnel.options,\n upsellOptions: funnel.upsell_options,\n });\n }\n return output;\n}","import {getFunnels, SdkRemoteFunnel} from \"./get\";\nimport {ReadonlyURLSearchParams} from \"next/navigation\";\n\n\ntype SdkRemoteTemplate = Omit<SdkRemoteFunnel, \"checkout\" | \"angle\" | \"landing\" | \"version\" | \"options\" | \"upsellOptions\">\n\nconst defaultTemplate: SdkRemoteTemplate = {\n homePageTemplate: 'Default',\n quizPageTemplate: 'Default',\n resultPageTemplate: 'Default',\n emailPageTemplate: 'Default',\n checkoutPageTemplate: 'Default',\n paymentWindowTemplate: 'Default',\n upsellPageTemplate: 'Default',\n}\n\ntype Props = {\n angle: string,\n version: string,\n searchParams?: ReadonlyURLSearchParams\n}\n\nexport const getTemplates = async ({\n angle, version, searchParams\n }: Props): Promise<SdkRemoteFunnel> => {\n const funnelsData = await getFunnels();\n\n const filteredFunnelsData = funnelsData.filter((a) => {\n if (\n (a.checkout === version || a.checkout === 'any') &&\n (a.landing === angle || a.landing === 'any')\n ) {\n return true\n }\n return false\n })\n if (filteredFunnelsData.length > 0) {\n const _flowData: SdkRemoteFunnel = JSON.parse(\n JSON.stringify(filteredFunnelsData[filteredFunnelsData.length - 1])\n )\n if (searchParams) {\n const keys = Object.keys(defaultTemplate)\n for (const key of keys) {\n if (searchParams.get(key)) {\n // @ts-ignore\n _flowData[key] = searchParams.get(key);\n }\n }\n }\n\n return _flowData;\n }\n return {\n ...defaultTemplate,\n landing: angle,\n checkout: version,\n angle,\n version,\n }\n}","import {UpSellConfigType} from \"./types\";\n\nexport const getUpsellConfigItemIndexBySlug = (config: UpSellConfigType, template: string, slug: string) => {\n const slugs = config[template] || []\n return slugs.findIndex(el => el === slug || (Array.isArray(el) && el.map(s => s.slug).indexOf(slug) >= 0))\n}\n","import {UpSellConfigType} from \"./types\";\n\nexport const getUpsellConfigNextSlugByIndex = (config: UpSellConfigType, template: string, currentIndex: number, currentSlug?: string) : string | undefined => {\n const slugs = config[template] || []\n const nextIndex = currentIndex + 1;\n\n if (nextIndex > -1 && nextIndex < slugs.length) {\n const path = slugs[nextIndex]\n if (Array.isArray(path)) {\n const _time = new Date().getTime()\n const _seed100 = _time % 100\n const splitValues = path.filter(f => {\n if (!currentSlug) return true;\n if (!f.ignoreAfter) return true;\n return f.ignoreAfter !== currentSlug;\n }).map((curr, i, data) => {\n const minPercent = data\n .slice(0, i)\n .map((a) => a.percent)\n .reduce((a, b) => a + b, 0)\n\n return {\n ...curr,\n range: {\n start: minPercent,\n finish: minPercent + curr.percent,\n },\n }\n })\n if (splitValues.length === 0) {\n return getUpsellConfigNextSlugByIndex(config, template, currentIndex + 1, currentSlug);\n }\n let winner = splitValues.find(\n (e) => e.range.start <= _seed100 && e.range.finish > _seed100,\n )\n if (!winner) {\n winner = splitValues[0]\n }\n if (winner.slug === '') {\n return getUpsellConfigNextSlugByIndex(config, template, currentIndex + 1, currentSlug);\n }\n return winner.slug;\n } else {\n return path;\n }\n }\n return undefined;\n}","import {UpSellConfigType} from \"./types\";\nimport {getUpsellConfigItemIndexBySlug} from \"./getUpsellConfigItemIndexBySlug\";\nimport {getUpsellConfigNextSlugByIndex} from \"./getUpsellConfigNextSlugByIndex\";\n\nexport const getUpsellConfigNextSlugBySlug = (config: UpSellConfigType, template: string, currentSlug: string) : string | undefined => {\n const currentIndex = getUpsellConfigItemIndexBySlug(config, template, currentSlug)\n return getUpsellConfigNextSlugByIndex(config, template, currentIndex, currentSlug)\n}\n","import {getUpsellConfigItemIndexBySlug} from \"./getUpsellConfigItemIndexBySlug\";\nimport {getUpsellConfigNextSlugByIndex} from \"./getUpsellConfigNextSlugByIndex\";\nimport {getUpsellConfigNextSlugBySlug} from \"./getUpsellConfigNextSlugBySlug\";\n\nexport const upSellNavigation = {\n configItemIndexBySlug: getUpsellConfigItemIndexBySlug,\n nextPathByConfigItemIndex: getUpsellConfigNextSlugByIndex,\n nextPathByConfigItemSlug: getUpsellConfigNextSlugBySlug,\n}","import {UpSellConfigItemValue} from \"../upSellNavigation/types\";\n\nexport const isSplitTemplate = (items: UpSellConfigItemValue[]) => {\n if (items.length > 0 && Array.isArray(items[0]) && ('splitTemplates' in items[0][0])) {\n return true;\n }\n return false;\n}","import {UpSellConfigType} from \"../upSellNavigation/types\";\nimport {isSplitTemplate} from \"./isSplitTemplate\";\n\nexport const getUpsellPageTemplate = (config: UpSellConfigType, template: string) => {\n const items = config[template] || []\n if (isSplitTemplate(items) && Array.isArray(items[0])) {\n const itemsWithRange = items[0].map((curr, i, data) => {\n const minPercent = data\n .slice(0, i)\n .map((a) => a.percent)\n .reduce((a, b) => a + b, 0)\n\n return {\n ...curr,\n range: {\n start: minPercent,\n finish: minPercent + curr.percent,\n },\n }\n });\n\n const _time = new Date().getTime()\n const _seed100 = _time % 100\n\n let currentSplit = itemsWithRange.find(\n (e) => e.range.start <= _seed100 && e.range.finish > _seed100,\n )\n if (!currentSplit) {\n currentSplit = itemsWithRange[0]\n }\n return currentSplit.slug;\n }\n return template;\n}","import {getUpsellPageTemplate} from \"./getUpsellPageTemplate\";\n\nexport const upSellTemplatesSplit = {\n getTemplate: getUpsellPageTemplate,\n}"],"mappings":"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","names":["createFetchClient","clientBrowser"]}
package/dist/index.mjs CHANGED
@@ -148,7 +148,113 @@ var getTemplates = (_0) => __async(null, [_0], function* ({
148
148
  // src/index.ts
149
149
  import { server } from "@capibox/bridge-server";
150
150
  import { browser as clientBrowser } from "@capibox/bridge-browser";
151
+
152
+ // src/browser/abtool/upSellNavigation/getUpsellConfigItemIndexBySlug.ts
153
+ var getUpsellConfigItemIndexBySlug = (config, template, slug) => {
154
+ const slugs = config[template] || [];
155
+ return slugs.findIndex((el) => el === slug || Array.isArray(el) && el.map((s) => s.slug).indexOf(slug) >= 0);
156
+ };
157
+
158
+ // src/browser/abtool/upSellNavigation/getUpsellConfigNextSlugByIndex.ts
159
+ var getUpsellConfigNextSlugByIndex = (config, template, currentIndex, currentSlug) => {
160
+ const slugs = config[template] || [];
161
+ const nextIndex = currentIndex + 1;
162
+ if (nextIndex > -1 && nextIndex < slugs.length) {
163
+ const path = slugs[nextIndex];
164
+ if (Array.isArray(path)) {
165
+ const _time = (/* @__PURE__ */ new Date()).getTime();
166
+ const _seed100 = _time % 100;
167
+ const splitValues = path.filter((f) => {
168
+ if (!currentSlug) return true;
169
+ if (!f.ignoreAfter) return true;
170
+ return f.ignoreAfter !== currentSlug;
171
+ }).map((curr, i, data) => {
172
+ const minPercent = data.slice(0, i).map((a) => a.percent).reduce((a, b) => a + b, 0);
173
+ return __spreadProps(__spreadValues({}, curr), {
174
+ range: {
175
+ start: minPercent,
176
+ finish: minPercent + curr.percent
177
+ }
178
+ });
179
+ });
180
+ if (splitValues.length === 0) {
181
+ return getUpsellConfigNextSlugByIndex(config, template, currentIndex + 1, currentSlug);
182
+ }
183
+ let winner = splitValues.find(
184
+ (e) => e.range.start <= _seed100 && e.range.finish > _seed100
185
+ );
186
+ if (!winner) {
187
+ winner = splitValues[0];
188
+ }
189
+ if (winner.slug === "") {
190
+ return getUpsellConfigNextSlugByIndex(config, template, currentIndex + 1, currentSlug);
191
+ }
192
+ return winner.slug;
193
+ } else {
194
+ return path;
195
+ }
196
+ }
197
+ return void 0;
198
+ };
199
+
200
+ // src/browser/abtool/upSellNavigation/getUpsellConfigNextSlugBySlug.ts
201
+ var getUpsellConfigNextSlugBySlug = (config, template, currentSlug) => {
202
+ const currentIndex = getUpsellConfigItemIndexBySlug(config, template, currentSlug);
203
+ return getUpsellConfigNextSlugByIndex(config, template, currentIndex, currentSlug);
204
+ };
205
+
206
+ // src/browser/abtool/upSellNavigation/index.ts
207
+ var upSellNavigation = {
208
+ configItemIndexBySlug: getUpsellConfigItemIndexBySlug,
209
+ nextPathByConfigItemIndex: getUpsellConfigNextSlugByIndex,
210
+ nextPathByConfigItemSlug: getUpsellConfigNextSlugBySlug
211
+ };
212
+
213
+ // src/browser/abtool/upSellTemplatesSplit/isSplitTemplate.ts
214
+ var isSplitTemplate = (items) => {
215
+ if (items.length > 0 && Array.isArray(items[0]) && "splitTemplates" in items[0][0]) {
216
+ return true;
217
+ }
218
+ return false;
219
+ };
220
+
221
+ // src/browser/abtool/upSellTemplatesSplit/getUpsellPageTemplate.ts
222
+ var getUpsellPageTemplate = (config, template) => {
223
+ const items = config[template] || [];
224
+ if (isSplitTemplate(items) && Array.isArray(items[0])) {
225
+ const itemsWithRange = items[0].map((curr, i, data) => {
226
+ const minPercent = data.slice(0, i).map((a) => a.percent).reduce((a, b) => a + b, 0);
227
+ return __spreadProps(__spreadValues({}, curr), {
228
+ range: {
229
+ start: minPercent,
230
+ finish: minPercent + curr.percent
231
+ }
232
+ });
233
+ });
234
+ const _time = (/* @__PURE__ */ new Date()).getTime();
235
+ const _seed100 = _time % 100;
236
+ let currentSplit = itemsWithRange.find(
237
+ (e) => e.range.start <= _seed100 && e.range.finish > _seed100
238
+ );
239
+ if (!currentSplit) {
240
+ currentSplit = itemsWithRange[0];
241
+ }
242
+ return currentSplit.slug;
243
+ }
244
+ return template;
245
+ };
246
+
247
+ // src/browser/abtool/upSellTemplatesSplit/index.ts
248
+ var upSellTemplatesSplit = {
249
+ getTemplate: getUpsellPageTemplate
250
+ };
251
+
252
+ // src/index.ts
151
253
  var browser = __spreadValues({
254
+ abTool: {
255
+ upSellNavigation,
256
+ upSellTemplatesSplit
257
+ },
152
258
  hooks: {
153
259
  useParamsLandingPage
154
260
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/browser/hooks/useParamsLandingPage.ts","../src/lib/api.ts","../src/browser/funnels/get.ts","../src/browser/funnels/get-templates.ts","../src/index.ts"],"sourcesContent":["import {useParams} from 'next/navigation'\n\nexport type ParamsLandingPage = {\n landing?: string\n checkout?: string\n}\nexport type ParamsLandingPageResponse = {\n landing: string\n checkout: string\n angle: string\n version: string\n path: {\n root: string\n rootPretty: string\n }\n}\n\nexport const useParamsLandingPage = (): ParamsLandingPageResponse => {\n const params = useParams<ParamsLandingPage>();\n\n const angle = (params.landing ?? 'main').toLowerCase()\n const version = (params.checkout ?? 'a').toLowerCase()\n\n return {\n landing: angle,\n checkout: version,\n angle,\n version,\n path: {\n root: `/${angle}/${version}`,\n rootPretty: angle === 'main' && version === 'a' ? '' : `/${angle}/${version}`\n }\n }\n}","import createFetchClient from \"openapi-fetch\";\nimport type {paths} from \"./api.def\";\n\nconst endpoint = '/api-client-proxy';\n\nexport const $apiClient = createFetchClient<paths>({\n baseUrl: endpoint,\n headers: {\n 'project-key': \"Frontend\"\n },\n});","import {$apiClient} from \"../../lib/api\";\nimport {components} from \"../../lib/api.def\";\n\nexport type SdkRemoteFunnel = {\n checkout: string,\n landing: string,\n\n angle: string,\n version: string,\n\n homePageTemplate: string,\n quizPageTemplate: string,\n resultPageTemplate: string,\n emailPageTemplate: string,\n checkoutPageTemplate: string,\n paymentWindowTemplate: string,\n upsellPageTemplate: string,\n\n options?: any,\n upsellOptions?: any,\n}\n\nexport const getFunnels = async (): Promise<SdkRemoteFunnel[]> => {\n let response: components['schemas']['FunnelResponseDto'][] = [];\n\n const res = await $apiClient.GET('/funnels/funnel', {\n params: {\n header: {\n 'project-key': 'Frontend'\n }\n }\n });\n if (!res || !res.data) return [];\n response = res.data;\n\n const tmpFunnels: components['schemas']['FunnelResponseDto'][] = response;\n const output: SdkRemoteFunnel[] = [];\n for (const funnel of tmpFunnels) {\n output.push({\n landing: funnel.angle,\n checkout: funnel.version,\n\n angle: funnel.angle,\n version: funnel.version,\n\n homePageTemplate: funnel.home_page,\n quizPageTemplate: funnel.quiz_page,\n resultPageTemplate: funnel.results_page,\n emailPageTemplate: funnel.email_page,\n checkoutPageTemplate: funnel.checkout_page,\n paymentWindowTemplate: funnel.payment_window,\n upsellPageTemplate: funnel.upsell_page,\n\n options: funnel.options,\n upsellOptions: funnel.upsell_options,\n });\n }\n return output;\n}","import {getFunnels, SdkRemoteFunnel} from \"./get\";\nimport {ReadonlyURLSearchParams} from \"next/navigation\";\n\n\ntype SdkRemoteTemplate = Omit<SdkRemoteFunnel, \"checkout\" | \"angle\" | \"landing\" | \"version\" | \"options\" | \"upsellOptions\">\n\nconst defaultTemplate: SdkRemoteTemplate = {\n homePageTemplate: 'Default',\n quizPageTemplate: 'Default',\n resultPageTemplate: 'Default',\n emailPageTemplate: 'Default',\n checkoutPageTemplate: 'Default',\n paymentWindowTemplate: 'Default',\n upsellPageTemplate: 'Default',\n}\n\ntype Props = {\n angle: string,\n version: string,\n searchParams?: ReadonlyURLSearchParams\n}\n\nexport const getTemplates = async ({\n angle, version, searchParams\n }: Props): Promise<SdkRemoteFunnel> => {\n const funnelsData = await getFunnels();\n\n const filteredFunnelsData = funnelsData.filter((a) => {\n if (\n (a.checkout === version || a.checkout === 'any') &&\n (a.landing === angle || a.landing === 'any')\n ) {\n return true\n }\n return false\n })\n if (filteredFunnelsData.length > 0) {\n const _flowData: SdkRemoteFunnel = JSON.parse(\n JSON.stringify(filteredFunnelsData[filteredFunnelsData.length - 1])\n )\n if (searchParams) {\n const keys = Object.keys(defaultTemplate)\n for (const key of keys) {\n if (searchParams.get(key)) {\n // @ts-ignore\n _flowData[key] = searchParams.get(key);\n }\n }\n }\n\n return _flowData;\n }\n return {\n ...defaultTemplate,\n landing: angle,\n checkout: version,\n angle,\n version,\n }\n}","import {useParamsLandingPage} from \"./browser/hooks/useParamsLandingPage\";\nimport {getFunnels} from \"./browser/funnels/get\";\nimport {getTemplates} from \"./browser/funnels/get-templates\";\nimport {server} from '@capibox/bridge-server'\nimport {browser as clientBrowser} from '@capibox/bridge-browser'\n\n\nexport {SdkRemoteFunnel} from \"./browser/funnels/get\";\n\nconst browser = {\n hooks: {\n useParamsLandingPage\n },\n funnels: {\n get: getFunnels,\n getTemplates: getTemplates\n },\n ...clientBrowser\n}\n\n\nexport {\n browser,\n server\n}\n\nif (typeof window !== 'undefined') {\n // @ts-ignore\n window.capibox = browser;\n}\n// v.0.0.56"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/browser/hooks/useParamsLandingPage.ts","../src/lib/api.ts","../src/browser/funnels/get.ts","../src/browser/funnels/get-templates.ts","../src/index.ts","../src/browser/abtool/upSellNavigation/getUpsellConfigItemIndexBySlug.ts","../src/browser/abtool/upSellNavigation/getUpsellConfigNextSlugByIndex.ts","../src/browser/abtool/upSellNavigation/getUpsellConfigNextSlugBySlug.ts","../src/browser/abtool/upSellNavigation/index.ts","../src/browser/abtool/upSellTemplatesSplit/isSplitTemplate.ts","../src/browser/abtool/upSellTemplatesSplit/getUpsellPageTemplate.ts","../src/browser/abtool/upSellTemplatesSplit/index.ts"],"sourcesContent":["import {useParams} from 'next/navigation'\n\nexport type ParamsLandingPage = {\n landing?: string\n checkout?: string\n}\nexport type ParamsLandingPageResponse = {\n landing: string\n checkout: string\n angle: string\n version: string\n path: {\n root: string\n rootPretty: string\n }\n}\n\nexport const useParamsLandingPage = (): ParamsLandingPageResponse => {\n const params = useParams<ParamsLandingPage>();\n\n const angle = (params.landing ?? 'main').toLowerCase()\n const version = (params.checkout ?? 'a').toLowerCase()\n\n return {\n landing: angle,\n checkout: version,\n angle,\n version,\n path: {\n root: `/${angle}/${version}`,\n rootPretty: angle === 'main' && version === 'a' ? '' : `/${angle}/${version}`\n }\n }\n}","import createFetchClient from \"openapi-fetch\";\nimport type {paths} from \"./api.def\";\n\nconst endpoint = '/api-client-proxy';\n\nexport const $apiClient = createFetchClient<paths>({\n baseUrl: endpoint,\n headers: {\n 'project-key': \"Frontend\"\n },\n});","import {$apiClient} from \"../../lib/api\";\nimport {components} from \"../../lib/api.def\";\n\nexport type SdkRemoteFunnel = {\n checkout: string,\n landing: string,\n\n angle: string,\n version: string,\n\n homePageTemplate: string,\n quizPageTemplate: string,\n resultPageTemplate: string,\n emailPageTemplate: string,\n checkoutPageTemplate: string,\n paymentWindowTemplate: string,\n upsellPageTemplate: string,\n\n options?: any,\n upsellOptions?: any,\n}\n\nexport const getFunnels = async (): Promise<SdkRemoteFunnel[]> => {\n let response: components['schemas']['FunnelResponseDto'][] = [];\n\n const res = await $apiClient.GET('/funnels/funnel', {\n params: {\n header: {\n 'project-key': 'Frontend'\n }\n }\n });\n if (!res || !res.data) return [];\n response = res.data;\n\n const tmpFunnels: components['schemas']['FunnelResponseDto'][] = response;\n const output: SdkRemoteFunnel[] = [];\n for (const funnel of tmpFunnels) {\n output.push({\n landing: funnel.angle,\n checkout: funnel.version,\n\n angle: funnel.angle,\n version: funnel.version,\n\n homePageTemplate: funnel.home_page,\n quizPageTemplate: funnel.quiz_page,\n resultPageTemplate: funnel.results_page,\n emailPageTemplate: funnel.email_page,\n checkoutPageTemplate: funnel.checkout_page,\n paymentWindowTemplate: funnel.payment_window,\n upsellPageTemplate: funnel.upsell_page,\n\n options: funnel.options,\n upsellOptions: funnel.upsell_options,\n });\n }\n return output;\n}","import {getFunnels, SdkRemoteFunnel} from \"./get\";\nimport {ReadonlyURLSearchParams} from \"next/navigation\";\n\n\ntype SdkRemoteTemplate = Omit<SdkRemoteFunnel, \"checkout\" | \"angle\" | \"landing\" | \"version\" | \"options\" | \"upsellOptions\">\n\nconst defaultTemplate: SdkRemoteTemplate = {\n homePageTemplate: 'Default',\n quizPageTemplate: 'Default',\n resultPageTemplate: 'Default',\n emailPageTemplate: 'Default',\n checkoutPageTemplate: 'Default',\n paymentWindowTemplate: 'Default',\n upsellPageTemplate: 'Default',\n}\n\ntype Props = {\n angle: string,\n version: string,\n searchParams?: ReadonlyURLSearchParams\n}\n\nexport const getTemplates = async ({\n angle, version, searchParams\n }: Props): Promise<SdkRemoteFunnel> => {\n const funnelsData = await getFunnels();\n\n const filteredFunnelsData = funnelsData.filter((a) => {\n if (\n (a.checkout === version || a.checkout === 'any') &&\n (a.landing === angle || a.landing === 'any')\n ) {\n return true\n }\n return false\n })\n if (filteredFunnelsData.length > 0) {\n const _flowData: SdkRemoteFunnel = JSON.parse(\n JSON.stringify(filteredFunnelsData[filteredFunnelsData.length - 1])\n )\n if (searchParams) {\n const keys = Object.keys(defaultTemplate)\n for (const key of keys) {\n if (searchParams.get(key)) {\n // @ts-ignore\n _flowData[key] = searchParams.get(key);\n }\n }\n }\n\n return _flowData;\n }\n return {\n ...defaultTemplate,\n landing: angle,\n checkout: version,\n angle,\n version,\n }\n}","import {useParamsLandingPage} from \"./browser/hooks/useParamsLandingPage\";\nimport {getFunnels} from \"./browser/funnels/get\";\nimport {getTemplates} from \"./browser/funnels/get-templates\";\nimport {server} from '@capibox/bridge-server'\nimport {browser as clientBrowser} from '@capibox/bridge-browser'\nimport {upSellNavigation} from \"./browser/abtool/upSellNavigation\";\nimport {upSellTemplatesSplit} from \"./browser/abtool/upSellTemplatesSplit\";\n\nexport type {UpSellConfigType} from './browser/abtool/upSellNavigation/types'\nexport type {SdkRemoteFunnel} from \"./browser/funnels/get\";\n\nconst browser = {\n abTool: {\n upSellNavigation,\n upSellTemplatesSplit,\n },\n hooks: {\n useParamsLandingPage\n },\n funnels: {\n get: getFunnels,\n getTemplates: getTemplates\n },\n ...clientBrowser\n}\n\n\nexport {\n browser,\n server\n}\n\n\nif (typeof window !== 'undefined') {\n // @ts-ignore\n window.capibox = browser;\n}\n// v.0.0.59\n","import {UpSellConfigType} from \"./types\";\n\nexport const getUpsellConfigItemIndexBySlug = (config: UpSellConfigType, template: string, slug: string) => {\n const slugs = config[template] || []\n return slugs.findIndex(el => el === slug || (Array.isArray(el) && el.map(s => s.slug).indexOf(slug) >= 0))\n}\n","import {UpSellConfigType} from \"./types\";\n\nexport const getUpsellConfigNextSlugByIndex = (config: UpSellConfigType, template: string, currentIndex: number, currentSlug?: string) : string | undefined => {\n const slugs = config[template] || []\n const nextIndex = currentIndex + 1;\n\n if (nextIndex > -1 && nextIndex < slugs.length) {\n const path = slugs[nextIndex]\n if (Array.isArray(path)) {\n const _time = new Date().getTime()\n const _seed100 = _time % 100\n const splitValues = path.filter(f => {\n if (!currentSlug) return true;\n if (!f.ignoreAfter) return true;\n return f.ignoreAfter !== currentSlug;\n }).map((curr, i, data) => {\n const minPercent = data\n .slice(0, i)\n .map((a) => a.percent)\n .reduce((a, b) => a + b, 0)\n\n return {\n ...curr,\n range: {\n start: minPercent,\n finish: minPercent + curr.percent,\n },\n }\n })\n if (splitValues.length === 0) {\n return getUpsellConfigNextSlugByIndex(config, template, currentIndex + 1, currentSlug);\n }\n let winner = splitValues.find(\n (e) => e.range.start <= _seed100 && e.range.finish > _seed100,\n )\n if (!winner) {\n winner = splitValues[0]\n }\n if (winner.slug === '') {\n return getUpsellConfigNextSlugByIndex(config, template, currentIndex + 1, currentSlug);\n }\n return winner.slug;\n } else {\n return path;\n }\n }\n return undefined;\n}","import {UpSellConfigType} from \"./types\";\nimport {getUpsellConfigItemIndexBySlug} from \"./getUpsellConfigItemIndexBySlug\";\nimport {getUpsellConfigNextSlugByIndex} from \"./getUpsellConfigNextSlugByIndex\";\n\nexport const getUpsellConfigNextSlugBySlug = (config: UpSellConfigType, template: string, currentSlug: string) : string | undefined => {\n const currentIndex = getUpsellConfigItemIndexBySlug(config, template, currentSlug)\n return getUpsellConfigNextSlugByIndex(config, template, currentIndex, currentSlug)\n}\n","import {getUpsellConfigItemIndexBySlug} from \"./getUpsellConfigItemIndexBySlug\";\nimport {getUpsellConfigNextSlugByIndex} from \"./getUpsellConfigNextSlugByIndex\";\nimport {getUpsellConfigNextSlugBySlug} from \"./getUpsellConfigNextSlugBySlug\";\n\nexport const upSellNavigation = {\n configItemIndexBySlug: getUpsellConfigItemIndexBySlug,\n nextPathByConfigItemIndex: getUpsellConfigNextSlugByIndex,\n nextPathByConfigItemSlug: getUpsellConfigNextSlugBySlug,\n}","import {UpSellConfigItemValue} from \"../upSellNavigation/types\";\n\nexport const isSplitTemplate = (items: UpSellConfigItemValue[]) => {\n if (items.length > 0 && Array.isArray(items[0]) && ('splitTemplates' in items[0][0])) {\n return true;\n }\n return false;\n}","import {UpSellConfigType} from \"../upSellNavigation/types\";\nimport {isSplitTemplate} from \"./isSplitTemplate\";\n\nexport const getUpsellPageTemplate = (config: UpSellConfigType, template: string) => {\n const items = config[template] || []\n if (isSplitTemplate(items) && Array.isArray(items[0])) {\n const itemsWithRange = items[0].map((curr, i, data) => {\n const minPercent = data\n .slice(0, i)\n .map((a) => a.percent)\n .reduce((a, b) => a + b, 0)\n\n return {\n ...curr,\n range: {\n start: minPercent,\n finish: minPercent + curr.percent,\n },\n }\n });\n\n const _time = new Date().getTime()\n const _seed100 = _time % 100\n\n let currentSplit = itemsWithRange.find(\n (e) => e.range.start <= _seed100 && e.range.finish > _seed100,\n )\n if (!currentSplit) {\n currentSplit = itemsWithRange[0]\n }\n return currentSplit.slug;\n }\n return template;\n}","import {getUpsellPageTemplate} from \"./getUpsellPageTemplate\";\n\nexport const upSellTemplatesSplit = {\n getTemplate: getUpsellPageTemplate,\n}"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capibox/bridge-nextjs-client",
3
- "version": "0.0.57",
3
+ "version": "0.0.59",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -8,6 +8,16 @@
8
8
  "files": [
9
9
  "dist"
10
10
  ],
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.mjs",
14
+ "require": "./dist/index.js"
15
+ },
16
+ "./server": {
17
+ "import": "./dist/server/index.mjs",
18
+ "require": "./dist/server/index.js"
19
+ }
20
+ },
11
21
  "scripts": {
12
22
  "build": "tsup",
13
23
  "test": "echo \"Error: no test specified\" && exit 1",
@@ -24,8 +34,8 @@
24
34
  "typescript": "^5.8.3"
25
35
  },
26
36
  "dependencies": {
27
- "@capibox/bridge-browser": "^0.0.56",
28
- "@capibox/bridge-server": "^0.0.57",
37
+ "@capibox/bridge-browser": "^0.0.59",
38
+ "@capibox/bridge-server": "^0.0.58",
29
39
  "@nestjs/swagger": "^11.2.0",
30
40
  "class-validator": "^0.14.2",
31
41
  "memory-cache": "^0.2.0",