@cimplify/sdk 0.102.0 → 0.104.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 (69) hide show
  1. package/dist/advanced.d.mts +3 -3
  2. package/dist/advanced.d.ts +3 -3
  3. package/dist/advanced.js +23 -22
  4. package/dist/advanced.mjs +4 -3
  5. package/dist/{chunk-DCMXUKDQ.mjs → chunk-2WPVUIHX.mjs} +455 -105
  6. package/dist/{chunk-NIOUSKQQ.js → chunk-4BKOKHE3.js} +9 -0
  7. package/dist/{chunk-YDA46OZ6.js → chunk-5BDYDZ4U.js} +722 -90
  8. package/dist/{chunk-4KNFBPV2.mjs → chunk-5RT4HYMP.mjs} +61 -15
  9. package/dist/{chunk-WMEC5JWN.js → chunk-7PDEX54K.js} +50 -13
  10. package/dist/chunk-CNN7Z2IP.js +125 -0
  11. package/dist/{chunk-DLW3RWRK.mjs → chunk-DYIAX3WI.mjs} +46 -12
  12. package/dist/{chunk-LOWSMGRT.js → chunk-E4K2VQDD.js} +64 -16
  13. package/dist/chunk-GOHSXBKW.mjs +105 -0
  14. package/dist/{chunk-O3YUHLZL.mjs → chunk-H3RATH4B.mjs} +9 -0
  15. package/dist/{chunk-YER7DIOM.js → chunk-IQFFSKE2.js} +753 -594
  16. package/dist/{chunk-Z3K2D3TE.mjs → chunk-OCCNG6MO.mjs} +735 -558
  17. package/dist/{chunk-DKLHCZ5M.mjs → chunk-OKADBZAI.mjs} +652 -25
  18. package/dist/{chunk-EAZGA7LD.js → chunk-YVAEY3VC.js} +457 -107
  19. package/dist/{client-nsiMwuC1.d.ts → client-BVNWjk6W.d.ts} +2 -2
  20. package/dist/{client-B40KFazg.d.ts → client-BuLcOWLv.d.ts} +202 -319
  21. package/dist/{client-BizGfqB7.d.mts → client-D5AoobFc.d.mts} +202 -319
  22. package/dist/{client-BdErclfU.d.mts → client-fM716k7G.d.mts} +2 -2
  23. package/dist/{index-DpmnI__D.d.mts → index-BtcoqrY1.d.ts} +14 -4
  24. package/dist/{index-nEyXWIyR.d.ts → index-D7Tf3v7c.d.mts} +14 -4
  25. package/dist/index.d.mts +83 -8
  26. package/dist/index.d.ts +83 -8
  27. package/dist/index.js +203 -169
  28. package/dist/index.mjs +7 -5
  29. package/dist/link-D9iSVxt5.d.mts +308 -0
  30. package/dist/link-D9iSVxt5.d.ts +308 -0
  31. package/dist/mock/cli.mjs +463 -104
  32. package/dist/mock/library.js +463 -104
  33. package/dist/mock/library.mjs +463 -104
  34. package/dist/mock/msw.js +463 -104
  35. package/dist/mock/msw.mjs +463 -104
  36. package/dist/{product-Byf0unSy.d.mts → payment-g0HFkEDU.d.mts} +708 -61
  37. package/dist/{product-Byf0unSy.d.ts → payment-g0HFkEDU.d.ts} +708 -61
  38. package/dist/{price-BstChV9a.d.ts → price-BLIeAb8K.d.ts} +1 -1
  39. package/dist/{price-CS4E5zLS.d.mts → price-Czq_cTC_.d.mts} +1 -1
  40. package/dist/react.d.mts +4 -4
  41. package/dist/react.d.ts +4 -4
  42. package/dist/react.js +194 -169
  43. package/dist/react.mjs +55 -30
  44. package/dist/{server-DqbZh8Bk.d.mts → server-BkVhOIwn.d.mts} +14 -10
  45. package/dist/{server-Cj40R2ZD.d.ts → server-DKK_D-PP.d.ts} +14 -10
  46. package/dist/server.d.mts +4 -4
  47. package/dist/server.d.ts +4 -4
  48. package/dist/server.js +12 -10
  49. package/dist/server.mjs +6 -4
  50. package/dist/testing/msw.d.mts +2 -2
  51. package/dist/testing/msw.d.ts +2 -2
  52. package/dist/testing/msw.js +4 -3
  53. package/dist/testing/msw.mjs +3 -2
  54. package/dist/testing/suite.d.mts +6 -6
  55. package/dist/testing/suite.d.ts +6 -6
  56. package/dist/testing/suite.js +26 -25
  57. package/dist/testing/suite.mjs +7 -6
  58. package/dist/testing.d.mts +195 -56
  59. package/dist/testing.d.ts +195 -56
  60. package/dist/testing.js +95 -82
  61. package/dist/testing.mjs +14 -9
  62. package/dist/utils.d.mts +4 -4
  63. package/dist/utils.d.ts +4 -4
  64. package/dist/utils.js +37 -29
  65. package/dist/utils.mjs +2 -2
  66. package/package.json +7 -1
  67. package/registry/chat-widget.json +1 -1
  68. package/dist/payment-l0rkieEQ.d.mts +0 -113
  69. package/dist/payment-vzNnIi1n.d.ts +0 -113
@@ -1,5 +1,5 @@
1
- import { createMockApp } from './chunk-DCMXUKDQ.mjs';
2
- import { createCimplifyClient } from './chunk-DKLHCZ5M.mjs';
1
+ import { createMockApp } from './chunk-2WPVUIHX.mjs';
2
+ import { createCimplifyClient } from './chunk-OKADBZAI.mjs';
3
3
  import { z } from 'zod';
4
4
 
5
5
  var cimplifyRegistry = z.registry();
@@ -554,31 +554,50 @@ var CheckoutBodySchema = registerSchema(
554
554
  }
555
555
  );
556
556
  var assertCheckoutBody = makeAssertion(CheckoutBodySchema, "checkoutBody");
557
- var AuthorizationTypeSchema = z.enum(["otp", "pin", "phone", "birthday", "address"]);
557
+ var AuthorizationTypeSchema = z.union([
558
+ z.enum(["otp", "pin", "phone", "birthday"]),
559
+ z.object({
560
+ address: z.object({
561
+ address: z.string(),
562
+ city: z.string(),
563
+ state: z.string(),
564
+ zip_code: z.string()
565
+ })
566
+ })
567
+ ]);
558
568
  var NextActionSchema = z.discriminatedUnion("type", [
559
569
  z.object({ type: z.literal("none") }),
570
+ z.object({
571
+ type: z.literal("card_popup"),
572
+ provider: z.string().min(1),
573
+ client_secret: z.string().min(1),
574
+ public_key: z.string().min(1),
575
+ provider_account_id: z.string().min(1).optional()
576
+ }),
560
577
  z.object({ type: z.literal("redirect"), authorization_url: z.string() }),
561
578
  z.object({
562
579
  type: z.literal("authorization"),
563
- authorization_type: z.string(),
564
- display_text: z.string().optional()
565
- })
580
+ authorization_type: AuthorizationTypeSchema,
581
+ display_text: z.string().nullish()
582
+ }),
583
+ z.object({ type: z.literal("poll") })
566
584
  ]);
567
585
  var CheckoutResponseSchema = registerSchema(
568
586
  z.looseObject({
569
587
  order_id: z.string().min(1),
570
588
  order_number: z.string().min(1),
589
+ payment_id: z.string().nullish(),
571
590
  payment_status: z.string().min(1),
572
- payment_reference: z.string().optional(),
591
+ payment_reference: z.string().nullish(),
573
592
  requires_authorization: z.boolean(),
574
- authorization_type: AuthorizationTypeSchema.optional(),
593
+ authorization_type: AuthorizationTypeSchema.nullish(),
575
594
  next_action: NextActionSchema,
576
- provider: z.string().optional(),
577
- authorization_url: z.string().optional(),
578
- display_text: z.string().optional(),
579
- bill_token: z.string().optional(),
580
- client_secret: z.string().optional(),
581
- public_key: z.string().optional()
595
+ provider: z.string().nullish(),
596
+ authorization_url: z.string().nullish(),
597
+ display_text: z.string().nullish(),
598
+ bill_token: z.string().nullish(),
599
+ client_secret: z.string().nullish(),
600
+ public_key: z.string().nullish()
582
601
  }),
583
602
  {
584
603
  id: "CheckoutResponse",
@@ -587,6 +606,33 @@ var CheckoutResponseSchema = registerSchema(
587
606
  }
588
607
  );
589
608
  var assertCheckoutResponse = makeAssertion(CheckoutResponseSchema, "checkout");
609
+ var VerifyOtpRequestSchema = registerSchema(
610
+ z.object({
611
+ challenge_id: z.string().nullable().optional(),
612
+ contact: z.string(),
613
+ contact_type: z.enum(["phone", "email"]),
614
+ otp_code: z.string()
615
+ }).strict(),
616
+ {
617
+ id: "VerifyOtpRequest",
618
+ description: "Cimplify Link OTP verification request",
619
+ version: "1.0.0"
620
+ }
621
+ );
622
+ var RequestOtpResponseSchema = registerSchema(
623
+ z.object({
624
+ success: z.boolean(),
625
+ challenge_id: z.string(),
626
+ message: z.string(),
627
+ expires_in: z.number().int().nonnegative(),
628
+ is_new_account: z.boolean()
629
+ }).strict(),
630
+ {
631
+ id: "RequestOtpResponse",
632
+ description: "Cimplify Link OTP challenge issuance response",
633
+ version: "1.0.0"
634
+ }
635
+ );
590
636
 
591
637
  // src/testing/client.ts
592
638
  var TEST_BASE_URL = "http://test.local";
@@ -704,4 +750,4 @@ var fixtures = {
704
750
  }
705
751
  };
706
752
 
707
- export { AddItemPayloadSchema, AddOnDetailsSchema, AddOnGroupDetailsSchema, AddOnInDetailsSchema, AddOnOptionDetailsSchema, AuthorizationTypeSchema, BrandContactSchema, BrandFaqSchema, BrandHeroSchema, BrandNavLinkSchema, BrandPolicyPageSchema, BrandPolicySectionSchema, BrandSchema, BrandSocialSchema, BundleResolvedSchema, BundleSelectionInputSchema, CartItemSchema, CartPricingSchema, CartSchema, CheckoutBodySchema, CheckoutCustomerSchema, CheckoutResponseSchema, ChosenPriceSchema, CompositeResolvedSchema, CompositeSelectionInputSchema, CountryCodeSchema, CurrencyCodeSchema, CustomerInputValueSchema, DiscountDetailsSchema, IsoDateTimeSchema, LineTypeSchema, LocaleSchema, MoneyLooseSchema, MoneySchema, NextActionSchema, PhoneE164Schema, ProductTypeSchema, SchemaViolationError, SeedNameSchema, SelectedAddOnOptionSchema, ServiceStatusSchema, TaxPriceDisplayModeSchema, TimestampSchema, VariantDetailsSchema, VariantDisplayAttributeSchema, VariantInfoSchema, assertAddItemPayload, assertBrand, assertCart, assertCartItem, assertCheckoutBody, assertCheckoutResponse, cimplifyRegistry, createTestClient, fixtures, makeAssertion, registerSchema };
753
+ export { AddItemPayloadSchema, AddOnDetailsSchema, AddOnGroupDetailsSchema, AddOnInDetailsSchema, AddOnOptionDetailsSchema, AuthorizationTypeSchema, BrandContactSchema, BrandFaqSchema, BrandHeroSchema, BrandNavLinkSchema, BrandPolicyPageSchema, BrandPolicySectionSchema, BrandSchema, BrandSocialSchema, BundleResolvedSchema, BundleSelectionInputSchema, CartItemSchema, CartPricingSchema, CartSchema, CheckoutBodySchema, CheckoutCustomerSchema, CheckoutResponseSchema, ChosenPriceSchema, CompositeResolvedSchema, CompositeSelectionInputSchema, CountryCodeSchema, CurrencyCodeSchema, CustomerInputValueSchema, DiscountDetailsSchema, IsoDateTimeSchema, LineTypeSchema, LocaleSchema, MoneyLooseSchema, MoneySchema, NextActionSchema, PhoneE164Schema, ProductTypeSchema, RequestOtpResponseSchema, SchemaViolationError, SeedNameSchema, SelectedAddOnOptionSchema, ServiceStatusSchema, TaxPriceDisplayModeSchema, TimestampSchema, VariantDetailsSchema, VariantDisplayAttributeSchema, VariantInfoSchema, VerifyOtpRequestSchema, assertAddItemPayload, assertBrand, assertCart, assertCartItem, assertCheckoutBody, assertCheckoutResponse, cimplifyRegistry, createTestClient, fixtures, makeAssertion, registerSchema };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkNIOUSKQQ_js = require('./chunk-NIOUSKQQ.js');
3
+ var chunk4BKOKHE3_js = require('./chunk-4BKOKHE3.js');
4
4
 
5
5
  // src/utils/price.ts
6
6
  var CURRENCY_SYMBOLS = {
@@ -380,21 +380,22 @@ var PAYMENT_SUCCESS_STATUSES = /* @__PURE__ */ new Set([
380
380
  "paid",
381
381
  "captured",
382
382
  "completed",
383
- "authorized",
384
383
  "not_required"
385
384
  ]);
386
- var PAYMENT_FAILURE_STATUSES = /* @__PURE__ */ new Set([
385
+ var PAYMENT_TERMINAL_FAILURE_STATUSES = [
387
386
  "failed",
388
- "declined",
389
387
  "cancelled",
390
388
  "voided",
391
- "error",
392
- "abandoned"
393
- ]);
389
+ "abandoned",
390
+ "refunded",
391
+ "refund_pending",
392
+ "reversed",
393
+ "disputed"
394
+ ];
395
+ var PAYMENT_FAILURE_STATUSES = new Set(PAYMENT_TERMINAL_FAILURE_STATUSES);
394
396
  var PAYMENT_REQUIRES_ACTION_STATUSES = /* @__PURE__ */ new Set([
395
397
  "requires_action",
396
- "requires_payment_method",
397
- "requires_capture"
398
+ "requires_payment_method"
398
399
  ]);
399
400
  var PAYMENT_STATUS_ALIAS_MAP = {
400
401
  ok: "captured",
@@ -467,16 +468,16 @@ function normalizeStatusResponse(response) {
467
468
  return {
468
469
  status: "pending",
469
470
  paid: false,
470
- amount: chunkNIOUSKQQ_js.moneyFromNumber(0),
471
+ amount: chunk4BKOKHE3_js.moneyFromNumber(0),
471
472
  currency: "",
472
473
  message: "No status available"
473
474
  };
474
475
  }
475
476
  const res = response;
476
477
  const normalizedStatus = normalizePaymentStatusValue(res.status ?? void 0);
477
- const normalizedAmount = typeof res.amount === "string" ? chunkNIOUSKQQ_js.money(res.amount) : typeof res.amount === "number" && Number.isFinite(res.amount) ? chunkNIOUSKQQ_js.moneyFromNumber(res.amount) : chunkNIOUSKQQ_js.moneyFromNumber(0);
478
+ const normalizedAmount = typeof res.amount === "string" ? chunk4BKOKHE3_js.money(res.amount) : typeof res.amount === "number" && Number.isFinite(res.amount) ? chunk4BKOKHE3_js.moneyFromNumber(res.amount) : chunk4BKOKHE3_js.moneyFromNumber(0);
478
479
  const normalizedCurrency = typeof res.currency === "string" && res.currency.trim().length > 0 ? res.currency : "";
479
- const paidValue = res.paid === true;
480
+ const paidValue = res.paid === true && normalizedStatus !== "authorized" && !PAYMENT_REQUIRES_ACTION_STATUSES.has(normalizedStatus) && !PAYMENT_FAILURE_STATUSES.has(normalizedStatus);
480
481
  const derivedPaid = paidValue || PAYMENT_SUCCESS_STATUSES.has(normalizedStatus);
481
482
  return {
482
483
  status: normalizedStatus,
@@ -488,10 +489,43 @@ function normalizeStatusResponse(response) {
488
489
  };
489
490
  }
490
491
  var MOBILE_MONEY_PROVIDERS = {
491
- mtn: { name: "MTN Mobile Money", prefix: ["024", "025", "053", "054", "055", "059"] },
492
+ mtn: {
493
+ name: "MTN Mobile Money",
494
+ prefix: ["024", "025", "053", "054", "055", "059"]
495
+ },
492
496
  vodafone: { name: "Telecel Cash", prefix: ["020", "050"] },
493
497
  airtel: { name: "AirtelTigo Money", prefix: ["026", "027", "056", "057"] }
494
498
  };
499
+ var MOBILE_MONEY_PROVIDER_ALIASES = {
500
+ mtn: "mtn",
501
+ mtnmomo: "mtn",
502
+ vod: "telecel",
503
+ vodafone: "telecel",
504
+ telecel: "telecel",
505
+ atl: "airteltigo",
506
+ airtel: "airteltigo",
507
+ tigo: "airteltigo",
508
+ airteltigo: "airteltigo",
509
+ mpesa: "mpesa"
510
+ };
511
+ function canonicalMobileMoneyProvider(provider) {
512
+ if (typeof provider !== "string") return null;
513
+ const normalized = provider.trim().toLowerCase().replace(/[\s_-]+/g, "");
514
+ return MOBILE_MONEY_PROVIDER_ALIASES[normalized] ?? null;
515
+ }
516
+ var LOOPBACK_AUTHORIZATION_HOSTS = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "[::1]"]);
517
+ function paymentAuthorizationUrl(value) {
518
+ if (typeof value !== "string" || !value.trim()) return null;
519
+ try {
520
+ const url = new URL(value);
521
+ if (url.protocol === "https:") return url.toString();
522
+ if (url.protocol === "http:" && LOOPBACK_AUTHORIZATION_HOSTS.has(url.hostname)) {
523
+ return url.toString();
524
+ }
525
+ } catch {
526
+ }
527
+ return null;
528
+ }
495
529
  function detectMobileMoneyProvider(phoneNumber) {
496
530
  const cleaned = phoneNumber.replace(/\D/g, "");
497
531
  const networkCode = cleaned.slice(-9, -7);
@@ -505,6 +539,8 @@ function detectMobileMoneyProvider(phoneNumber) {
505
539
 
506
540
  exports.CURRENCY_SYMBOLS = CURRENCY_SYMBOLS;
507
541
  exports.MOBILE_MONEY_PROVIDERS = MOBILE_MONEY_PROVIDERS;
542
+ exports.PAYMENT_TERMINAL_FAILURE_STATUSES = PAYMENT_TERMINAL_FAILURE_STATUSES;
543
+ exports.canonicalMobileMoneyProvider = canonicalMobileMoneyProvider;
508
544
  exports.categorizePaymentError = categorizePaymentError;
509
545
  exports.detectMobileMoneyProvider = detectMobileMoneyProvider;
510
546
  exports.formatMoney = formatMoney;
@@ -534,3 +570,4 @@ exports.isTaxInclusive = isTaxInclusive;
534
570
  exports.normalizePaymentResponse = normalizePaymentResponse;
535
571
  exports.normalizeStatusResponse = normalizeStatusResponse;
536
572
  exports.parsePrice = parsePrice;
573
+ exports.paymentAuthorizationUrl = paymentAuthorizationUrl;
@@ -0,0 +1,125 @@
1
+ 'use strict';
2
+
3
+ // src/constants.ts
4
+ var CHECKOUT_MODE = {
5
+ LINK: "link",
6
+ GUEST: "guest"
7
+ };
8
+ var ORDER_TYPE = {
9
+ DELIVERY: "delivery",
10
+ PICKUP: "pickup",
11
+ DINE_IN: "dine-in",
12
+ WALK_IN: "walk-in"
13
+ };
14
+ var PAYMENT_METHOD = {
15
+ MOBILE_MONEY: "mobile_money",
16
+ CARD: "card"
17
+ };
18
+ var CHECKOUT_STEP = {
19
+ AUTHENTICATION: "authentication",
20
+ ORDER_DETAILS: "order_details",
21
+ PAYMENT_METHOD: "payment_method",
22
+ PAYMENT: "payment",
23
+ CONFIRMATION: "confirmation"
24
+ };
25
+ var PAYMENT_STATE = {
26
+ INITIAL: "initial",
27
+ PREPARING: "preparing",
28
+ PROCESSING: "processing",
29
+ VERIFYING: "verifying",
30
+ AWAITING_AUTHORIZATION: "awaiting_authorization",
31
+ SUCCESS: "success",
32
+ ERROR: "error",
33
+ TIMEOUT: "timeout"
34
+ };
35
+ var PICKUP_TIME_TYPE = {
36
+ ASAP: "asap",
37
+ SCHEDULED: "scheduled"
38
+ };
39
+ var MOBILE_MONEY_PROVIDER = {
40
+ MTN: "mtn",
41
+ VODAFONE: "vodafone",
42
+ TELECEL: "telecel",
43
+ AIRTEL: "airtel",
44
+ AIRTELTIGO: "airteltigo",
45
+ MPESA: "mpesa"
46
+ };
47
+ var AUTHORIZATION_TYPE = {
48
+ OTP: "otp",
49
+ PIN: "pin",
50
+ PHONE: "phone",
51
+ BIRTHDAY: "birthday",
52
+ ADDRESS: "address"
53
+ };
54
+ var MAX_PAYMENT_AUTHORIZATION_STEPS = 8;
55
+ var DEVICE_TYPE = {
56
+ MOBILE: "mobile",
57
+ DESKTOP: "desktop",
58
+ TABLET: "tablet",
59
+ UNKNOWN: "unknown"
60
+ };
61
+ var CONTACT_TYPE = {
62
+ PHONE: "phone",
63
+ EMAIL: "email"
64
+ };
65
+ var LINK_QUERY = {
66
+ DATA: "link.data",
67
+ ADDRESSES: "link.addresses",
68
+ MOBILE_MONEY: "link.mobile_money",
69
+ PREFERENCES: "link.preferences",
70
+ SESSIONS: "link.sessions"
71
+ };
72
+ var LINK_MUTATION = {
73
+ CHECK_STATUS: "link.check_status",
74
+ ENROLL: "link.enroll",
75
+ ENROLL_AND_LINK_ORDER: "link.enroll_and_link_order",
76
+ UPDATE_PREFERENCES: "link.update_preferences",
77
+ CREATE_ADDRESS: "link.create_address",
78
+ UPDATE_ADDRESS: "link.update_address",
79
+ DELETE_ADDRESS: "link.delete_address",
80
+ SET_DEFAULT_ADDRESS: "link.set_default_address",
81
+ TRACK_ADDRESS_USAGE: "link.track_address_usage",
82
+ CREATE_MOBILE_MONEY: "link.create_mobile_money",
83
+ DELETE_MOBILE_MONEY: "link.delete_mobile_money",
84
+ SET_DEFAULT_MOBILE_MONEY: "link.set_default_mobile_money",
85
+ TRACK_MOBILE_MONEY_USAGE: "link.track_mobile_money_usage",
86
+ VERIFY_MOBILE_MONEY: "link.verify_mobile_money",
87
+ REVOKE_SESSION: "link.revoke_session",
88
+ REVOKE_ALL_SESSIONS: "link.revoke_all_sessions"
89
+ };
90
+ var AUTH_MUTATION = {
91
+ REQUEST_OTP: "auth.request_otp",
92
+ VERIFY_OTP: "auth.verify_otp"
93
+ };
94
+ var CHECKOUT_MUTATION = {
95
+ PROCESS: "checkout.process"
96
+ };
97
+ var PAYMENT_MUTATION = {
98
+ SUBMIT_AUTHORIZATION: "payment.submit_authorization",
99
+ CHECK_STATUS: "order.poll_payment_status"
100
+ };
101
+ var ORDER_MUTATION = {
102
+ UPDATE_CUSTOMER: "order.update_order_customer"
103
+ };
104
+ var DEFAULT_CURRENCY = "GHS";
105
+ var DEFAULT_COUNTRY = "GHA";
106
+
107
+ exports.AUTHORIZATION_TYPE = AUTHORIZATION_TYPE;
108
+ exports.AUTH_MUTATION = AUTH_MUTATION;
109
+ exports.CHECKOUT_MODE = CHECKOUT_MODE;
110
+ exports.CHECKOUT_MUTATION = CHECKOUT_MUTATION;
111
+ exports.CHECKOUT_STEP = CHECKOUT_STEP;
112
+ exports.CONTACT_TYPE = CONTACT_TYPE;
113
+ exports.DEFAULT_COUNTRY = DEFAULT_COUNTRY;
114
+ exports.DEFAULT_CURRENCY = DEFAULT_CURRENCY;
115
+ exports.DEVICE_TYPE = DEVICE_TYPE;
116
+ exports.LINK_MUTATION = LINK_MUTATION;
117
+ exports.LINK_QUERY = LINK_QUERY;
118
+ exports.MAX_PAYMENT_AUTHORIZATION_STEPS = MAX_PAYMENT_AUTHORIZATION_STEPS;
119
+ exports.MOBILE_MONEY_PROVIDER = MOBILE_MONEY_PROVIDER;
120
+ exports.ORDER_MUTATION = ORDER_MUTATION;
121
+ exports.ORDER_TYPE = ORDER_TYPE;
122
+ exports.PAYMENT_METHOD = PAYMENT_METHOD;
123
+ exports.PAYMENT_MUTATION = PAYMENT_MUTATION;
124
+ exports.PAYMENT_STATE = PAYMENT_STATE;
125
+ exports.PICKUP_TIME_TYPE = PICKUP_TIME_TYPE;
@@ -1,4 +1,4 @@
1
- import { moneyFromNumber, money } from './chunk-O3YUHLZL.mjs';
1
+ import { moneyFromNumber, money } from './chunk-H3RATH4B.mjs';
2
2
 
3
3
  // src/utils/price.ts
4
4
  var CURRENCY_SYMBOLS = {
@@ -378,21 +378,22 @@ var PAYMENT_SUCCESS_STATUSES = /* @__PURE__ */ new Set([
378
378
  "paid",
379
379
  "captured",
380
380
  "completed",
381
- "authorized",
382
381
  "not_required"
383
382
  ]);
384
- var PAYMENT_FAILURE_STATUSES = /* @__PURE__ */ new Set([
383
+ var PAYMENT_TERMINAL_FAILURE_STATUSES = [
385
384
  "failed",
386
- "declined",
387
385
  "cancelled",
388
386
  "voided",
389
- "error",
390
- "abandoned"
391
- ]);
387
+ "abandoned",
388
+ "refunded",
389
+ "refund_pending",
390
+ "reversed",
391
+ "disputed"
392
+ ];
393
+ var PAYMENT_FAILURE_STATUSES = new Set(PAYMENT_TERMINAL_FAILURE_STATUSES);
392
394
  var PAYMENT_REQUIRES_ACTION_STATUSES = /* @__PURE__ */ new Set([
393
395
  "requires_action",
394
- "requires_payment_method",
395
- "requires_capture"
396
+ "requires_payment_method"
396
397
  ]);
397
398
  var PAYMENT_STATUS_ALIAS_MAP = {
398
399
  ok: "captured",
@@ -474,7 +475,7 @@ function normalizeStatusResponse(response) {
474
475
  const normalizedStatus = normalizePaymentStatusValue(res.status ?? void 0);
475
476
  const normalizedAmount = typeof res.amount === "string" ? money(res.amount) : typeof res.amount === "number" && Number.isFinite(res.amount) ? moneyFromNumber(res.amount) : moneyFromNumber(0);
476
477
  const normalizedCurrency = typeof res.currency === "string" && res.currency.trim().length > 0 ? res.currency : "";
477
- const paidValue = res.paid === true;
478
+ const paidValue = res.paid === true && normalizedStatus !== "authorized" && !PAYMENT_REQUIRES_ACTION_STATUSES.has(normalizedStatus) && !PAYMENT_FAILURE_STATUSES.has(normalizedStatus);
478
479
  const derivedPaid = paidValue || PAYMENT_SUCCESS_STATUSES.has(normalizedStatus);
479
480
  return {
480
481
  status: normalizedStatus,
@@ -486,10 +487,43 @@ function normalizeStatusResponse(response) {
486
487
  };
487
488
  }
488
489
  var MOBILE_MONEY_PROVIDERS = {
489
- mtn: { name: "MTN Mobile Money", prefix: ["024", "025", "053", "054", "055", "059"] },
490
+ mtn: {
491
+ name: "MTN Mobile Money",
492
+ prefix: ["024", "025", "053", "054", "055", "059"]
493
+ },
490
494
  vodafone: { name: "Telecel Cash", prefix: ["020", "050"] },
491
495
  airtel: { name: "AirtelTigo Money", prefix: ["026", "027", "056", "057"] }
492
496
  };
497
+ var MOBILE_MONEY_PROVIDER_ALIASES = {
498
+ mtn: "mtn",
499
+ mtnmomo: "mtn",
500
+ vod: "telecel",
501
+ vodafone: "telecel",
502
+ telecel: "telecel",
503
+ atl: "airteltigo",
504
+ airtel: "airteltigo",
505
+ tigo: "airteltigo",
506
+ airteltigo: "airteltigo",
507
+ mpesa: "mpesa"
508
+ };
509
+ function canonicalMobileMoneyProvider(provider) {
510
+ if (typeof provider !== "string") return null;
511
+ const normalized = provider.trim().toLowerCase().replace(/[\s_-]+/g, "");
512
+ return MOBILE_MONEY_PROVIDER_ALIASES[normalized] ?? null;
513
+ }
514
+ var LOOPBACK_AUTHORIZATION_HOSTS = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "[::1]"]);
515
+ function paymentAuthorizationUrl(value) {
516
+ if (typeof value !== "string" || !value.trim()) return null;
517
+ try {
518
+ const url = new URL(value);
519
+ if (url.protocol === "https:") return url.toString();
520
+ if (url.protocol === "http:" && LOOPBACK_AUTHORIZATION_HOSTS.has(url.hostname)) {
521
+ return url.toString();
522
+ }
523
+ } catch {
524
+ }
525
+ return null;
526
+ }
493
527
  function detectMobileMoneyProvider(phoneNumber) {
494
528
  const cleaned = phoneNumber.replace(/\D/g, "");
495
529
  const networkCode = cleaned.slice(-9, -7);
@@ -501,4 +535,4 @@ function detectMobileMoneyProvider(phoneNumber) {
501
535
  return null;
502
536
  }
503
537
 
504
- export { CURRENCY_SYMBOLS, MOBILE_MONEY_PROVIDERS, categorizePaymentError, detectMobileMoneyProvider, formatMoney, formatNumberCompact, formatPrice, formatPriceAdjustment, formatPriceCompact, formatPriceRange, formatPriceWithTax, formatProductPrice, getBasePrice, getCurrencySymbol, getDiscountPercentage, getDisplayPrice, getMarkupPercentage, getPriceRange, getProductCurrency, getTaxAmount, getUnitPriceAtQuantity, getVariantUnitPrice, hasTaxInfo, isOnSale, isPaymentStatusFailure, isPaymentStatusRequiresAction, isPaymentStatusSuccess, isTaxInclusive, normalizePaymentResponse, normalizeStatusResponse, parsePrice };
538
+ export { CURRENCY_SYMBOLS, MOBILE_MONEY_PROVIDERS, PAYMENT_TERMINAL_FAILURE_STATUSES, canonicalMobileMoneyProvider, categorizePaymentError, detectMobileMoneyProvider, formatMoney, formatNumberCompact, formatPrice, formatPriceAdjustment, formatPriceCompact, formatPriceRange, formatPriceWithTax, formatProductPrice, getBasePrice, getCurrencySymbol, getDiscountPercentage, getDisplayPrice, getMarkupPercentage, getPriceRange, getProductCurrency, getTaxAmount, getUnitPriceAtQuantity, getVariantUnitPrice, hasTaxInfo, isOnSale, isPaymentStatusFailure, isPaymentStatusRequiresAction, isPaymentStatusSuccess, isTaxInclusive, normalizePaymentResponse, normalizeStatusResponse, parsePrice, paymentAuthorizationUrl };
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkEAZGA7LD_js = require('./chunk-EAZGA7LD.js');
4
- var chunkYDA46OZ6_js = require('./chunk-YDA46OZ6.js');
3
+ var chunkYVAEY3VC_js = require('./chunk-YVAEY3VC.js');
4
+ var chunk5BDYDZ4U_js = require('./chunk-5BDYDZ4U.js');
5
5
  var zod = require('zod');
6
6
 
7
7
  var cimplifyRegistry = zod.z.registry();
@@ -556,31 +556,50 @@ var CheckoutBodySchema = registerSchema(
556
556
  }
557
557
  );
558
558
  var assertCheckoutBody = makeAssertion(CheckoutBodySchema, "checkoutBody");
559
- var AuthorizationTypeSchema = zod.z.enum(["otp", "pin", "phone", "birthday", "address"]);
559
+ var AuthorizationTypeSchema = zod.z.union([
560
+ zod.z.enum(["otp", "pin", "phone", "birthday"]),
561
+ zod.z.object({
562
+ address: zod.z.object({
563
+ address: zod.z.string(),
564
+ city: zod.z.string(),
565
+ state: zod.z.string(),
566
+ zip_code: zod.z.string()
567
+ })
568
+ })
569
+ ]);
560
570
  var NextActionSchema = zod.z.discriminatedUnion("type", [
561
571
  zod.z.object({ type: zod.z.literal("none") }),
572
+ zod.z.object({
573
+ type: zod.z.literal("card_popup"),
574
+ provider: zod.z.string().min(1),
575
+ client_secret: zod.z.string().min(1),
576
+ public_key: zod.z.string().min(1),
577
+ provider_account_id: zod.z.string().min(1).optional()
578
+ }),
562
579
  zod.z.object({ type: zod.z.literal("redirect"), authorization_url: zod.z.string() }),
563
580
  zod.z.object({
564
581
  type: zod.z.literal("authorization"),
565
- authorization_type: zod.z.string(),
566
- display_text: zod.z.string().optional()
567
- })
582
+ authorization_type: AuthorizationTypeSchema,
583
+ display_text: zod.z.string().nullish()
584
+ }),
585
+ zod.z.object({ type: zod.z.literal("poll") })
568
586
  ]);
569
587
  var CheckoutResponseSchema = registerSchema(
570
588
  zod.z.looseObject({
571
589
  order_id: zod.z.string().min(1),
572
590
  order_number: zod.z.string().min(1),
591
+ payment_id: zod.z.string().nullish(),
573
592
  payment_status: zod.z.string().min(1),
574
- payment_reference: zod.z.string().optional(),
593
+ payment_reference: zod.z.string().nullish(),
575
594
  requires_authorization: zod.z.boolean(),
576
- authorization_type: AuthorizationTypeSchema.optional(),
595
+ authorization_type: AuthorizationTypeSchema.nullish(),
577
596
  next_action: NextActionSchema,
578
- provider: zod.z.string().optional(),
579
- authorization_url: zod.z.string().optional(),
580
- display_text: zod.z.string().optional(),
581
- bill_token: zod.z.string().optional(),
582
- client_secret: zod.z.string().optional(),
583
- public_key: zod.z.string().optional()
597
+ provider: zod.z.string().nullish(),
598
+ authorization_url: zod.z.string().nullish(),
599
+ display_text: zod.z.string().nullish(),
600
+ bill_token: zod.z.string().nullish(),
601
+ client_secret: zod.z.string().nullish(),
602
+ public_key: zod.z.string().nullish()
584
603
  }),
585
604
  {
586
605
  id: "CheckoutResponse",
@@ -589,6 +608,33 @@ var CheckoutResponseSchema = registerSchema(
589
608
  }
590
609
  );
591
610
  var assertCheckoutResponse = makeAssertion(CheckoutResponseSchema, "checkout");
611
+ var VerifyOtpRequestSchema = registerSchema(
612
+ zod.z.object({
613
+ challenge_id: zod.z.string().nullable().optional(),
614
+ contact: zod.z.string(),
615
+ contact_type: zod.z.enum(["phone", "email"]),
616
+ otp_code: zod.z.string()
617
+ }).strict(),
618
+ {
619
+ id: "VerifyOtpRequest",
620
+ description: "Cimplify Link OTP verification request",
621
+ version: "1.0.0"
622
+ }
623
+ );
624
+ var RequestOtpResponseSchema = registerSchema(
625
+ zod.z.object({
626
+ success: zod.z.boolean(),
627
+ challenge_id: zod.z.string(),
628
+ message: zod.z.string(),
629
+ expires_in: zod.z.number().int().nonnegative(),
630
+ is_new_account: zod.z.boolean()
631
+ }).strict(),
632
+ {
633
+ id: "RequestOtpResponse",
634
+ description: "Cimplify Link OTP challenge issuance response",
635
+ version: "1.0.0"
636
+ }
637
+ );
592
638
 
593
639
  // src/testing/client.ts
594
640
  var TEST_BASE_URL = "http://test.local";
@@ -607,7 +653,7 @@ async function toForwardedRequest(input, init) {
607
653
  };
608
654
  }
609
655
  function createTestClient(options = {}) {
610
- const mock = chunkEAZGA7LD_js.createMockApp(options);
656
+ const mock = chunkYVAEY3VC_js.createMockApp(options);
611
657
  let sessionToken;
612
658
  const fetchImpl = async (input, init) => {
613
659
  const url = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
@@ -626,7 +672,7 @@ function createTestClient(options = {}) {
626
672
  if (echoed) sessionToken = echoed;
627
673
  return res;
628
674
  };
629
- const client = chunkYDA46OZ6_js.createCimplifyClient({
675
+ const client = chunk5BDYDZ4U_js.createCimplifyClient({
630
676
  baseUrl: TEST_BASE_URL,
631
677
  // Link mock lives at /v1/link on the same Hono app, so point the SDK's
632
678
  // separate Link transport at the same TEST_BASE_URL.
@@ -743,6 +789,7 @@ exports.MoneySchema = MoneySchema;
743
789
  exports.NextActionSchema = NextActionSchema;
744
790
  exports.PhoneE164Schema = PhoneE164Schema;
745
791
  exports.ProductTypeSchema = ProductTypeSchema;
792
+ exports.RequestOtpResponseSchema = RequestOtpResponseSchema;
746
793
  exports.SchemaViolationError = SchemaViolationError;
747
794
  exports.SeedNameSchema = SeedNameSchema;
748
795
  exports.SelectedAddOnOptionSchema = SelectedAddOnOptionSchema;
@@ -752,6 +799,7 @@ exports.TimestampSchema = TimestampSchema;
752
799
  exports.VariantDetailsSchema = VariantDetailsSchema;
753
800
  exports.VariantDisplayAttributeSchema = VariantDisplayAttributeSchema;
754
801
  exports.VariantInfoSchema = VariantInfoSchema;
802
+ exports.VerifyOtpRequestSchema = VerifyOtpRequestSchema;
755
803
  exports.assertAddItemPayload = assertAddItemPayload;
756
804
  exports.assertBrand = assertBrand;
757
805
  exports.assertCart = assertCart;