@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.
- package/dist/advanced.d.mts +3 -3
- package/dist/advanced.d.ts +3 -3
- package/dist/advanced.js +23 -22
- package/dist/advanced.mjs +4 -3
- package/dist/{chunk-DCMXUKDQ.mjs → chunk-2WPVUIHX.mjs} +455 -105
- package/dist/{chunk-NIOUSKQQ.js → chunk-4BKOKHE3.js} +9 -0
- package/dist/{chunk-YDA46OZ6.js → chunk-5BDYDZ4U.js} +722 -90
- package/dist/{chunk-4KNFBPV2.mjs → chunk-5RT4HYMP.mjs} +61 -15
- package/dist/{chunk-WMEC5JWN.js → chunk-7PDEX54K.js} +50 -13
- package/dist/chunk-CNN7Z2IP.js +125 -0
- package/dist/{chunk-DLW3RWRK.mjs → chunk-DYIAX3WI.mjs} +46 -12
- package/dist/{chunk-LOWSMGRT.js → chunk-E4K2VQDD.js} +64 -16
- package/dist/chunk-GOHSXBKW.mjs +105 -0
- package/dist/{chunk-O3YUHLZL.mjs → chunk-H3RATH4B.mjs} +9 -0
- package/dist/{chunk-YER7DIOM.js → chunk-IQFFSKE2.js} +753 -594
- package/dist/{chunk-Z3K2D3TE.mjs → chunk-OCCNG6MO.mjs} +735 -558
- package/dist/{chunk-DKLHCZ5M.mjs → chunk-OKADBZAI.mjs} +652 -25
- package/dist/{chunk-EAZGA7LD.js → chunk-YVAEY3VC.js} +457 -107
- package/dist/{client-nsiMwuC1.d.ts → client-BVNWjk6W.d.ts} +2 -2
- package/dist/{client-B40KFazg.d.ts → client-BuLcOWLv.d.ts} +202 -319
- package/dist/{client-BizGfqB7.d.mts → client-D5AoobFc.d.mts} +202 -319
- package/dist/{client-BdErclfU.d.mts → client-fM716k7G.d.mts} +2 -2
- package/dist/{index-DpmnI__D.d.mts → index-BtcoqrY1.d.ts} +14 -4
- package/dist/{index-nEyXWIyR.d.ts → index-D7Tf3v7c.d.mts} +14 -4
- package/dist/index.d.mts +83 -8
- package/dist/index.d.ts +83 -8
- package/dist/index.js +203 -169
- package/dist/index.mjs +7 -5
- package/dist/link-D9iSVxt5.d.mts +308 -0
- package/dist/link-D9iSVxt5.d.ts +308 -0
- package/dist/mock/cli.mjs +463 -104
- package/dist/mock/library.js +463 -104
- package/dist/mock/library.mjs +463 -104
- package/dist/mock/msw.js +463 -104
- package/dist/mock/msw.mjs +463 -104
- package/dist/{product-Byf0unSy.d.mts → payment-g0HFkEDU.d.mts} +708 -61
- package/dist/{product-Byf0unSy.d.ts → payment-g0HFkEDU.d.ts} +708 -61
- package/dist/{price-BstChV9a.d.ts → price-BLIeAb8K.d.ts} +1 -1
- package/dist/{price-CS4E5zLS.d.mts → price-Czq_cTC_.d.mts} +1 -1
- package/dist/react.d.mts +4 -4
- package/dist/react.d.ts +4 -4
- package/dist/react.js +194 -169
- package/dist/react.mjs +55 -30
- package/dist/{server-DqbZh8Bk.d.mts → server-BkVhOIwn.d.mts} +14 -10
- package/dist/{server-Cj40R2ZD.d.ts → server-DKK_D-PP.d.ts} +14 -10
- package/dist/server.d.mts +4 -4
- package/dist/server.d.ts +4 -4
- package/dist/server.js +12 -10
- package/dist/server.mjs +6 -4
- package/dist/testing/msw.d.mts +2 -2
- package/dist/testing/msw.d.ts +2 -2
- package/dist/testing/msw.js +4 -3
- package/dist/testing/msw.mjs +3 -2
- package/dist/testing/suite.d.mts +6 -6
- package/dist/testing/suite.d.ts +6 -6
- package/dist/testing/suite.js +26 -25
- package/dist/testing/suite.mjs +7 -6
- package/dist/testing.d.mts +195 -56
- package/dist/testing.d.ts +195 -56
- package/dist/testing.js +95 -82
- package/dist/testing.mjs +14 -9
- package/dist/utils.d.mts +4 -4
- package/dist/utils.d.ts +4 -4
- package/dist/utils.js +37 -29
- package/dist/utils.mjs +2 -2
- package/package.json +7 -1
- package/registry/chat-widget.json +1 -1
- package/dist/payment-l0rkieEQ.d.mts +0 -113
- package/dist/payment-vzNnIi1n.d.ts +0 -113
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createMockApp } from './chunk-
|
|
2
|
-
import { createCimplifyClient } from './chunk-
|
|
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.
|
|
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:
|
|
564
|
-
display_text: z.string().
|
|
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().
|
|
591
|
+
payment_reference: z.string().nullish(),
|
|
573
592
|
requires_authorization: z.boolean(),
|
|
574
|
-
authorization_type: AuthorizationTypeSchema.
|
|
593
|
+
authorization_type: AuthorizationTypeSchema.nullish(),
|
|
575
594
|
next_action: NextActionSchema,
|
|
576
|
-
provider: z.string().
|
|
577
|
-
authorization_url: z.string().
|
|
578
|
-
display_text: z.string().
|
|
579
|
-
bill_token: z.string().
|
|
580
|
-
client_secret: z.string().
|
|
581
|
-
public_key: z.string().
|
|
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
|
|
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
|
|
385
|
+
var PAYMENT_TERMINAL_FAILURE_STATUSES = [
|
|
387
386
|
"failed",
|
|
388
|
-
"declined",
|
|
389
387
|
"cancelled",
|
|
390
388
|
"voided",
|
|
391
|
-
"
|
|
392
|
-
"
|
|
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:
|
|
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" ?
|
|
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: {
|
|
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-
|
|
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
|
|
383
|
+
var PAYMENT_TERMINAL_FAILURE_STATUSES = [
|
|
385
384
|
"failed",
|
|
386
|
-
"declined",
|
|
387
385
|
"cancelled",
|
|
388
386
|
"voided",
|
|
389
|
-
"
|
|
390
|
-
"
|
|
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: {
|
|
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
|
|
4
|
-
var
|
|
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.
|
|
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:
|
|
566
|
-
display_text: zod.z.string().
|
|
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().
|
|
593
|
+
payment_reference: zod.z.string().nullish(),
|
|
575
594
|
requires_authorization: zod.z.boolean(),
|
|
576
|
-
authorization_type: AuthorizationTypeSchema.
|
|
595
|
+
authorization_type: AuthorizationTypeSchema.nullish(),
|
|
577
596
|
next_action: NextActionSchema,
|
|
578
|
-
provider: zod.z.string().
|
|
579
|
-
authorization_url: zod.z.string().
|
|
580
|
-
display_text: zod.z.string().
|
|
581
|
-
bill_token: zod.z.string().
|
|
582
|
-
client_secret: zod.z.string().
|
|
583
|
-
public_key: zod.z.string().
|
|
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 =
|
|
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 =
|
|
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;
|