@cimplify/sdk 0.104.1 → 0.106.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 +22 -22
- package/dist/advanced.mjs +3 -3
- package/dist/{catalogue-BlQ85Uma.d.mts → catalogue-CB44dO-g.d.mts} +4 -1
- package/dist/{catalogue-C8TqOj9K.d.ts → catalogue-lUdp-1hu.d.ts} +4 -1
- package/dist/{checkout-BqK9XUz5.d.mts → checkout-XoV4HNg2.d.mts} +311 -31
- package/dist/{checkout-BqK9XUz5.d.ts → checkout-XoV4HNg2.d.ts} +311 -31
- package/dist/{chunk-L5SNEU2O.mjs → chunk-3BTMAWL7.mjs} +47 -15
- package/dist/{chunk-BWEIMKLF.js → chunk-7SEOB5UW.js} +108 -76
- package/dist/{chunk-SFUJMS5E.js → chunk-AVXA4F6G.js} +33 -1
- package/dist/{chunk-UFOWPN3D.mjs → chunk-DPVDLMLI.mjs} +8 -13
- package/dist/{chunk-DQEXY542.js → chunk-H2WXUTMT.js} +211 -189
- package/dist/{chunk-6G3ANKQA.mjs → chunk-L4XKIMUO.mjs} +8 -1
- package/dist/{chunk-HYFA67A7.js → chunk-NJK3THWT.js} +67 -60
- package/dist/{chunk-RBNBSQI7.mjs → chunk-NJYR6GGM.mjs} +29 -2
- package/dist/{chunk-U54CWUUT.mjs → chunk-NYDVVNZI.mjs} +1 -1
- package/dist/{chunk-V4457OKB.mjs → chunk-RQT5BZ2Y.mjs} +36 -14
- package/dist/{chunk-XAUSDMMZ.js → chunk-UYFTOIFW.js} +6 -6
- package/dist/{chunk-WXREIBFW.js → chunk-YARZTZTB.js} +141 -146
- package/dist/{client-DhXeiUrf.d.ts → client-BQ_8FtA4.d.ts} +12 -2
- package/dist/{client-mXiUrV4X.d.mts → client-BWe1KWMf.d.mts} +12 -2
- package/dist/{index-DPWI5XcU.d.ts → index-C0k9om1S.d.ts} +2 -2
- package/dist/{index-B0AdZvrM.d.mts → index-DRMBo26v.d.mts} +2 -2
- package/dist/{index-CK8Nk5uQ.d.ts → index-DweR60Cv.d.ts} +2 -2
- package/dist/{index-DVfUh-ci.d.mts → index-aIQzSiP_.d.mts} +2 -2
- package/dist/index.d.mts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +166 -146
- package/dist/index.mjs +5 -5
- package/dist/mock/cli.mjs +9 -0
- package/dist/mock/library.js +9 -0
- package/dist/mock/library.mjs +9 -0
- package/dist/mock/msw.js +9 -0
- package/dist/mock/msw.mjs +9 -0
- package/dist/{price-BUDv1rI7.d.mts → price-CUGIYRtD.d.mts} +1 -1
- package/dist/{price-6hQIIac9.d.ts → price-De-sxcuj.d.ts} +1 -1
- package/dist/react.d.mts +3 -3
- package/dist/react.d.ts +3 -3
- package/dist/react.js +151 -151
- package/dist/react.mjs +4 -4
- package/dist/{server-DJ0mSs9i.d.mts → server-7soMMUgP.d.ts} +3 -2
- package/dist/{server-DSTX76Ki.d.ts → server-DDEJ7e9s.d.mts} +3 -2
- package/dist/server.d.mts +3 -3
- package/dist/server.d.ts +3 -3
- package/dist/server.js +10 -10
- package/dist/server.mjs +4 -4
- package/dist/testing/msw.d.mts +2 -2
- package/dist/testing/msw.d.ts +2 -2
- package/dist/testing/msw.js +3 -3
- package/dist/testing/msw.mjs +2 -2
- package/dist/testing/suite.d.mts +5 -5
- package/dist/testing/suite.d.ts +5 -5
- package/dist/testing/suite.js +26 -25
- package/dist/testing/suite.mjs +7 -6
- package/dist/testing.d.mts +315 -8
- package/dist/testing.d.ts +315 -8
- package/dist/testing.js +118 -118
- package/dist/testing.mjs +7 -7
- package/dist/utils.d.mts +3 -3
- package/dist/utils.d.ts +3 -3
- package/dist/utils.js +32 -32
- package/dist/utils.mjs +2 -2
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunkEV2EVOYS_js = require('./chunk-EV2EVOYS.js');
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkUYFTOIFW_js = require('./chunk-UYFTOIFW.js');
|
|
5
|
+
var chunkAVXA4F6G_js = require('./chunk-AVXA4F6G.js');
|
|
6
6
|
|
|
7
7
|
// src/types/result.ts
|
|
8
8
|
function ok(value) {
|
|
@@ -117,11 +117,11 @@ function clearIntentIdempotencyKey(scope, storage = sessionStorageOrNull()) {
|
|
|
117
117
|
|
|
118
118
|
// src/internal/safe.ts
|
|
119
119
|
function toCimplifyError(error) {
|
|
120
|
-
if (error instanceof
|
|
120
|
+
if (error instanceof chunkAVXA4F6G_js.CimplifyError) return chunkAVXA4F6G_js.enrichError(error);
|
|
121
121
|
if (error instanceof Error) {
|
|
122
|
-
return
|
|
122
|
+
return chunkAVXA4F6G_js.enrichError(new chunkAVXA4F6G_js.CimplifyError(chunkAVXA4F6G_js.ErrorCode.UNKNOWN_ERROR, error.message, false));
|
|
123
123
|
}
|
|
124
|
-
return
|
|
124
|
+
return chunkAVXA4F6G_js.enrichError(new chunkAVXA4F6G_js.CimplifyError(chunkAVXA4F6G_js.ErrorCode.UNKNOWN_ERROR, String(error), false));
|
|
125
125
|
}
|
|
126
126
|
async function safe(promise) {
|
|
127
127
|
try {
|
|
@@ -696,7 +696,7 @@ var CartOperations = class {
|
|
|
696
696
|
if (typeof updates.quantity !== "number") {
|
|
697
697
|
return {
|
|
698
698
|
ok: false,
|
|
699
|
-
error: new
|
|
699
|
+
error: new chunkAVXA4F6G_js.CimplifyError(
|
|
700
700
|
"VALIDATION_ERROR",
|
|
701
701
|
"updateItem requires a quantity; richer mid-cart edits are not supported"
|
|
702
702
|
)
|
|
@@ -800,12 +800,12 @@ var PAYMENT_AUTHORIZATION_PROVIDER = {
|
|
|
800
800
|
|
|
801
801
|
// src/payment-authorization/providers/paystack.ts
|
|
802
802
|
var PAYSTACK_POPUP_ERROR = {
|
|
803
|
-
PROVIDER_UNAVAILABLE:
|
|
803
|
+
PROVIDER_UNAVAILABLE: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
804
804
|
SUBMISSION_UNKNOWN: "SUBMISSION_UNKNOWN",
|
|
805
805
|
CANCELLED: "CANCELLED",
|
|
806
|
-
PAYMENT_CANCELLED:
|
|
807
|
-
PAYMENT_FAILED:
|
|
808
|
-
POPUP_BLOCKED:
|
|
806
|
+
PAYMENT_CANCELLED: chunkAVXA4F6G_js.ErrorCode.PAYMENT_CANCELLED,
|
|
807
|
+
PAYMENT_FAILED: chunkAVXA4F6G_js.ErrorCode.PAYMENT_FAILED,
|
|
808
|
+
POPUP_BLOCKED: chunkAVXA4F6G_js.ErrorCode.POPUP_BLOCKED
|
|
809
809
|
};
|
|
810
810
|
async function openPaystackPopup(options, signal) {
|
|
811
811
|
if (typeof window === "undefined") {
|
|
@@ -911,7 +911,7 @@ var PaystackAuthorizationAdapter = class {
|
|
|
911
911
|
if (result.error === PAYSTACK_POPUP_ERROR.POPUP_BLOCKED) {
|
|
912
912
|
return {
|
|
913
913
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
914
|
-
code:
|
|
914
|
+
code: chunkAVXA4F6G_js.ErrorCode.POPUP_BLOCKED,
|
|
915
915
|
message: "Unable to open the Paystack payment popup. Please allow popups and try again.",
|
|
916
916
|
recoverable: true
|
|
917
917
|
};
|
|
@@ -919,14 +919,14 @@ var PaystackAuthorizationAdapter = class {
|
|
|
919
919
|
if (result.error === PAYSTACK_POPUP_ERROR.PROVIDER_UNAVAILABLE) {
|
|
920
920
|
return {
|
|
921
921
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
922
|
-
code:
|
|
922
|
+
code: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
923
923
|
message: "Paystack is unavailable in this environment.",
|
|
924
924
|
recoverable: false
|
|
925
925
|
};
|
|
926
926
|
}
|
|
927
927
|
return {
|
|
928
928
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
929
|
-
code:
|
|
929
|
+
code: chunkAVXA4F6G_js.ErrorCode.PAYMENT_FAILED,
|
|
930
930
|
message: result.error || "Paystack payment could not be submitted.",
|
|
931
931
|
recoverable: true
|
|
932
932
|
};
|
|
@@ -1024,14 +1024,14 @@ function stripeFailure(error) {
|
|
|
1024
1024
|
if (error?.code === "payment_intent_authentication_failure" || error?.type === "invalid_request_error") {
|
|
1025
1025
|
return {
|
|
1026
1026
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1027
|
-
code:
|
|
1027
|
+
code: chunkAVXA4F6G_js.ErrorCode.AUTHORIZATION_FAILED,
|
|
1028
1028
|
message,
|
|
1029
1029
|
recoverable: true
|
|
1030
1030
|
};
|
|
1031
1031
|
}
|
|
1032
1032
|
return {
|
|
1033
1033
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1034
|
-
code:
|
|
1034
|
+
code: chunkAVXA4F6G_js.ErrorCode.PAYMENT_FAILED,
|
|
1035
1035
|
message,
|
|
1036
1036
|
recoverable: true
|
|
1037
1037
|
};
|
|
@@ -1045,7 +1045,7 @@ var StripeAuthorizationAdapter = class {
|
|
|
1045
1045
|
if (typeof window === "undefined" || typeof document === "undefined" || context.signal?.aborted) {
|
|
1046
1046
|
return context.signal?.aborted ? { status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.CANCELLED } : {
|
|
1047
1047
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1048
|
-
code:
|
|
1048
|
+
code: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
1049
1049
|
message: "Stripe Payment Element is unavailable in this environment.",
|
|
1050
1050
|
recoverable: false
|
|
1051
1051
|
};
|
|
@@ -1059,7 +1059,7 @@ var StripeAuthorizationAdapter = class {
|
|
|
1059
1059
|
} catch (error) {
|
|
1060
1060
|
return {
|
|
1061
1061
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1062
|
-
code:
|
|
1062
|
+
code: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
1063
1063
|
message: error instanceof Error ? error.message : "Stripe.js could not be loaded.",
|
|
1064
1064
|
recoverable: true
|
|
1065
1065
|
};
|
|
@@ -1070,7 +1070,7 @@ var StripeAuthorizationAdapter = class {
|
|
|
1070
1070
|
if (!stripe) {
|
|
1071
1071
|
return {
|
|
1072
1072
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1073
|
-
code:
|
|
1073
|
+
code: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
1074
1074
|
message: "Stripe.js could not be loaded.",
|
|
1075
1075
|
recoverable: false
|
|
1076
1076
|
};
|
|
@@ -1079,7 +1079,7 @@ var StripeAuthorizationAdapter = class {
|
|
|
1079
1079
|
if (!modal) {
|
|
1080
1080
|
return {
|
|
1081
1081
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1082
|
-
code:
|
|
1082
|
+
code: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
1083
1083
|
message: "Stripe Payment Element could not be mounted.",
|
|
1084
1084
|
recoverable: false
|
|
1085
1085
|
};
|
|
@@ -1095,7 +1095,7 @@ var StripeAuthorizationAdapter = class {
|
|
|
1095
1095
|
modal.previousFocus?.focus();
|
|
1096
1096
|
return {
|
|
1097
1097
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1098
|
-
code:
|
|
1098
|
+
code: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
1099
1099
|
message: "Stripe Payment Element could not be initialized.",
|
|
1100
1100
|
recoverable: false
|
|
1101
1101
|
};
|
|
@@ -1198,7 +1198,7 @@ var StripeAuthorizationAdapter = class {
|
|
|
1198
1198
|
if (confirmationStarted) return;
|
|
1199
1199
|
settle({
|
|
1200
1200
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1201
|
-
code:
|
|
1201
|
+
code: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
1202
1202
|
message: event?.error?.message || "Stripe Payment Element failed to load.",
|
|
1203
1203
|
recoverable: true
|
|
1204
1204
|
});
|
|
@@ -1243,7 +1243,7 @@ var PaymentAuthorizationAdapterRegistry = class {
|
|
|
1243
1243
|
if (!provider) {
|
|
1244
1244
|
return {
|
|
1245
1245
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1246
|
-
code:
|
|
1246
|
+
code: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
1247
1247
|
message: "Card authorization response did not identify a payment provider.",
|
|
1248
1248
|
recoverable: false
|
|
1249
1249
|
};
|
|
@@ -1252,7 +1252,7 @@ var PaymentAuthorizationAdapterRegistry = class {
|
|
|
1252
1252
|
if (!adapter) {
|
|
1253
1253
|
return {
|
|
1254
1254
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1255
|
-
code:
|
|
1255
|
+
code: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
1256
1256
|
message: `Card authorization provider '${provider}' is not supported by this SDK client.`,
|
|
1257
1257
|
recoverable: false
|
|
1258
1258
|
};
|
|
@@ -1263,7 +1263,7 @@ var PaymentAuthorizationAdapterRegistry = class {
|
|
|
1263
1263
|
} catch (error) {
|
|
1264
1264
|
return {
|
|
1265
1265
|
status: PAYMENT_AUTHORIZATION_OUTCOME_STATUS.FAILED,
|
|
1266
|
-
code:
|
|
1266
|
+
code: chunkAVXA4F6G_js.ErrorCode.PAYMENT_FAILED,
|
|
1267
1267
|
message: error instanceof Error ? error.message : `Card authorization provider '${provider}' failed unexpectedly.`,
|
|
1268
1268
|
recoverable: true
|
|
1269
1269
|
};
|
|
@@ -1284,7 +1284,7 @@ function isExactlyZeroMoney(value) {
|
|
|
1284
1284
|
return EXACT_ZERO_MONEY.test(value.trim());
|
|
1285
1285
|
}
|
|
1286
1286
|
function selectPurchaseIntentPaymentOption(terms, selection) {
|
|
1287
|
-
return terms.payment_options.filter((option) => option.status ===
|
|
1287
|
+
return terms.payment_options.filter((option) => option.status === chunkAVXA4F6G_js.PAYMENT_OPTION_STATUS.ELIGIBLE).sort((left, right) => left.rank - right.rank).find(
|
|
1288
1288
|
(option) => option.method_kind === selection.method_kind && (selection.payment_option_id === void 0 || option.id === selection.payment_option_id)
|
|
1289
1289
|
);
|
|
1290
1290
|
}
|
|
@@ -1299,7 +1299,7 @@ function createPurchaseIntentConfirmation(terms, paymentOption, idempotencyKey)
|
|
|
1299
1299
|
throw new TypeError("Zero-rail terms must not name a payment option");
|
|
1300
1300
|
}
|
|
1301
1301
|
const authoritativeOption = paymentOption ? terms.payment_options.find(
|
|
1302
|
-
(candidate) => candidate.id === paymentOption.id && candidate.status ===
|
|
1302
|
+
(candidate) => candidate.id === paymentOption.id && candidate.status === chunkAVXA4F6G_js.PAYMENT_OPTION_STATUS.ELIGIBLE
|
|
1303
1303
|
) : void 0;
|
|
1304
1304
|
if (paymentOption && !authoritativeOption) {
|
|
1305
1305
|
throw new TypeError("Payment option is not eligible for these checkout terms");
|
|
@@ -1322,59 +1322,59 @@ function purchaseIntentRequiresPaymentOption(terms) {
|
|
|
1322
1322
|
|
|
1323
1323
|
// src/utils/purchase-intent-adapter.ts
|
|
1324
1324
|
function tenderPreference(form) {
|
|
1325
|
-
if (form.payment_method ===
|
|
1325
|
+
if (form.payment_method === chunkAVXA4F6G_js.PURCHASE_INTENT_PAYMENT_METHOD.MOBILE_MONEY) {
|
|
1326
1326
|
if (form.link_payment_method_id) {
|
|
1327
1327
|
return {
|
|
1328
|
-
method_kind:
|
|
1328
|
+
method_kind: chunkAVXA4F6G_js.PURCHASE_INTENT_PAYMENT_METHOD.MOBILE_MONEY,
|
|
1329
1329
|
authority: {
|
|
1330
|
-
authority_kind:
|
|
1330
|
+
authority_kind: chunkAVXA4F6G_js.MOBILE_MONEY_TENDER_AUTHORITY_KIND.SAVED_REFERENCE,
|
|
1331
1331
|
stored_instrument_id: form.link_payment_method_id
|
|
1332
1332
|
}
|
|
1333
1333
|
};
|
|
1334
1334
|
}
|
|
1335
1335
|
const details = form.mobile_money_details;
|
|
1336
1336
|
if (!details?.phone_number || !details.provider) {
|
|
1337
|
-
throw new
|
|
1338
|
-
|
|
1337
|
+
throw new chunkAVXA4F6G_js.CimplifyError(
|
|
1338
|
+
chunkAVXA4F6G_js.ErrorCode.INVALID_PAYMENT_METHOD,
|
|
1339
1339
|
"Mobile money requires a phone number and network.",
|
|
1340
1340
|
false
|
|
1341
1341
|
);
|
|
1342
1342
|
}
|
|
1343
|
-
const network =
|
|
1343
|
+
const network = chunkUYFTOIFW_js.purchaseIntentMobileMoneyNetwork(details.provider);
|
|
1344
1344
|
if (!network) {
|
|
1345
|
-
throw new
|
|
1346
|
-
|
|
1345
|
+
throw new chunkAVXA4F6G_js.CimplifyError(
|
|
1346
|
+
chunkAVXA4F6G_js.ErrorCode.INVALID_PAYMENT_METHOD,
|
|
1347
1347
|
"That mobile money network is not available for PurchaseIntent checkout.",
|
|
1348
1348
|
false
|
|
1349
1349
|
);
|
|
1350
1350
|
}
|
|
1351
1351
|
return {
|
|
1352
|
-
method_kind:
|
|
1352
|
+
method_kind: chunkAVXA4F6G_js.PURCHASE_INTENT_PAYMENT_METHOD.MOBILE_MONEY,
|
|
1353
1353
|
authority: {
|
|
1354
|
-
authority_kind:
|
|
1354
|
+
authority_kind: chunkAVXA4F6G_js.MOBILE_MONEY_TENDER_AUTHORITY_KIND.TRANSIENT,
|
|
1355
1355
|
phone_number: details.phone_number,
|
|
1356
1356
|
network
|
|
1357
1357
|
}
|
|
1358
1358
|
};
|
|
1359
1359
|
}
|
|
1360
|
-
if (form.payment_method ===
|
|
1361
|
-
throw new
|
|
1362
|
-
|
|
1360
|
+
if (form.payment_method === chunkAVXA4F6G_js.LEGACY_CHECKOUT_PAYMENT_METHOD_ALIAS.CASH || form.payment_method === chunkAVXA4F6G_js.PURCHASE_INTENT_PAYMENT_METHOD.OFFLINE) {
|
|
1361
|
+
throw new chunkAVXA4F6G_js.CimplifyError(
|
|
1362
|
+
chunkAVXA4F6G_js.ErrorCode.INVALID_PAYMENT_METHOD,
|
|
1363
1363
|
"Offline tender requires an authenticated staff checkout.",
|
|
1364
1364
|
false
|
|
1365
1365
|
);
|
|
1366
1366
|
}
|
|
1367
|
-
if (form.payment_method ===
|
|
1367
|
+
if (form.payment_method === chunkAVXA4F6G_js.PURCHASE_INTENT_PAYMENT_METHOD.CARD) {
|
|
1368
1368
|
return {
|
|
1369
|
-
method_kind:
|
|
1369
|
+
method_kind: chunkAVXA4F6G_js.PURCHASE_INTENT_PAYMENT_METHOD.CARD,
|
|
1370
1370
|
stored_instrument_id: form.link_payment_method_id
|
|
1371
1371
|
};
|
|
1372
1372
|
}
|
|
1373
|
-
if (form.payment_method ===
|
|
1373
|
+
if (form.payment_method === chunkAVXA4F6G_js.LEGACY_CHECKOUT_PAYMENT_METHOD_ALIAS.STORE_CREDIT) {
|
|
1374
1374
|
return void 0;
|
|
1375
1375
|
}
|
|
1376
|
-
throw new
|
|
1377
|
-
|
|
1376
|
+
throw new chunkAVXA4F6G_js.CimplifyError(
|
|
1377
|
+
chunkAVXA4F6G_js.ErrorCode.INVALID_PAYMENT_METHOD,
|
|
1378
1378
|
"Checkout payment method is not supported.",
|
|
1379
1379
|
false
|
|
1380
1380
|
);
|
|
@@ -1382,7 +1382,7 @@ function tenderPreference(form) {
|
|
|
1382
1382
|
function checkoutFormToIntentRequest(form, clientIntentKey) {
|
|
1383
1383
|
return {
|
|
1384
1384
|
client_intent_key: clientIntentKey,
|
|
1385
|
-
source: { kind:
|
|
1385
|
+
source: { kind: chunkAVXA4F6G_js.PURCHASE_INTENT_SOURCE_KIND.CART, cart_id: form.cart_id },
|
|
1386
1386
|
checkout: {
|
|
1387
1387
|
customer: form.customer,
|
|
1388
1388
|
order_type: form.order_type,
|
|
@@ -1394,7 +1394,7 @@ function checkoutFormToIntentRequest(form, clientIntentKey) {
|
|
|
1394
1394
|
metadata: form.metadata,
|
|
1395
1395
|
pay_currency: form.pay_currency,
|
|
1396
1396
|
fx_quote_id: form.fx_quote_id,
|
|
1397
|
-
use_store_credit: form.use_store_credit || form.payment_method ===
|
|
1397
|
+
use_store_credit: form.use_store_credit || form.payment_method === chunkAVXA4F6G_js.LEGACY_CHECKOUT_PAYMENT_METHOD_ALIAS.STORE_CREDIT,
|
|
1398
1398
|
voucher_code: form.voucher_code,
|
|
1399
1399
|
pay_deposit: form.pay_deposit,
|
|
1400
1400
|
tender_preference: tenderPreference(form)
|
|
@@ -1404,7 +1404,7 @@ function checkoutFormToIntentRequest(form, clientIntentKey) {
|
|
|
1404
1404
|
function selectCheckoutPaymentOption(terms, form) {
|
|
1405
1405
|
const preference = tenderPreference(form);
|
|
1406
1406
|
if (!preference) return void 0;
|
|
1407
|
-
return terms.payment_options.filter((option) => option.status ===
|
|
1407
|
+
return terms.payment_options.filter((option) => option.status === chunkAVXA4F6G_js.PAYMENT_OPTION_STATUS.ELIGIBLE).sort((left, right) => left.rank - right.rank).find((option) => option.method_kind === preference.method_kind);
|
|
1408
1408
|
}
|
|
1409
1409
|
function checkoutFormToConfirmation(_form, terms, paymentOption, idempotencyKey) {
|
|
1410
1410
|
return createPurchaseIntentConfirmation(terms, paymentOption, idempotencyKey);
|
|
@@ -1420,39 +1420,39 @@ function committedBase(response) {
|
|
|
1420
1420
|
}
|
|
1421
1421
|
function confirmationToCheckoutResult(response) {
|
|
1422
1422
|
switch (response.status) {
|
|
1423
|
-
case
|
|
1423
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.ORDER_CREATED:
|
|
1424
1424
|
return ok({
|
|
1425
1425
|
...committedBase(response),
|
|
1426
|
-
payment_status:
|
|
1426
|
+
payment_status: chunkAVXA4F6G_js.LEGACY_CHECKOUT_PAYMENT_STATUS.SUCCEEDED,
|
|
1427
1427
|
requires_authorization: false,
|
|
1428
1428
|
next_action: { type: chunkEV2EVOYS_js.CHECKOUT_NEXT_ACTION.NONE }
|
|
1429
1429
|
});
|
|
1430
|
-
case
|
|
1430
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.COLLECTION_PROCESSING:
|
|
1431
1431
|
return ok({
|
|
1432
1432
|
...committedBase(response),
|
|
1433
|
-
payment_status:
|
|
1433
|
+
payment_status: chunkAVXA4F6G_js.LEGACY_CHECKOUT_PAYMENT_STATUS.PROCESSING,
|
|
1434
1434
|
requires_authorization: false,
|
|
1435
1435
|
next_action: { type: chunkEV2EVOYS_js.CHECKOUT_NEXT_ACTION.POLL }
|
|
1436
1436
|
});
|
|
1437
|
-
case
|
|
1437
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.PAYMENT_OUTCOME_UNKNOWN:
|
|
1438
1438
|
return ok({
|
|
1439
1439
|
...committedBase(response),
|
|
1440
|
-
payment_status:
|
|
1440
|
+
payment_status: chunkAVXA4F6G_js.LEGACY_CHECKOUT_PAYMENT_STATUS.UNKNOWN,
|
|
1441
1441
|
requires_authorization: false,
|
|
1442
1442
|
next_action: { type: chunkEV2EVOYS_js.CHECKOUT_NEXT_ACTION.POLL }
|
|
1443
1443
|
});
|
|
1444
|
-
case
|
|
1444
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.PAYMENT_FAILED:
|
|
1445
1445
|
return err(
|
|
1446
|
-
new
|
|
1447
|
-
|
|
1446
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1447
|
+
chunkAVXA4F6G_js.PURCHASE_INTENT_ERROR_CODE.PAYMENT_FAILED,
|
|
1448
1448
|
"Payment failed. The order remains recorded, but collection did not succeed.",
|
|
1449
1449
|
true
|
|
1450
1450
|
)
|
|
1451
1451
|
);
|
|
1452
|
-
case
|
|
1452
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.REDIRECT_REQUIRED:
|
|
1453
1453
|
return ok({
|
|
1454
1454
|
...committedBase(response),
|
|
1455
|
-
payment_status:
|
|
1455
|
+
payment_status: chunkAVXA4F6G_js.LEGACY_CHECKOUT_PAYMENT_STATUS.REQUIRES_ACTION,
|
|
1456
1456
|
requires_authorization: false,
|
|
1457
1457
|
authorization_url: response.authorization_url,
|
|
1458
1458
|
next_action: {
|
|
@@ -1460,10 +1460,10 @@ function confirmationToCheckoutResult(response) {
|
|
|
1460
1460
|
authorization_url: response.authorization_url
|
|
1461
1461
|
}
|
|
1462
1462
|
});
|
|
1463
|
-
case
|
|
1463
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.CARD_POPUP_REQUIRED:
|
|
1464
1464
|
return ok({
|
|
1465
1465
|
...committedBase(response),
|
|
1466
|
-
payment_status:
|
|
1466
|
+
payment_status: chunkAVXA4F6G_js.LEGACY_CHECKOUT_PAYMENT_STATUS.REQUIRES_ACTION,
|
|
1467
1467
|
requires_authorization: false,
|
|
1468
1468
|
provider: response.provider,
|
|
1469
1469
|
client_secret: response.client_secret,
|
|
@@ -1476,10 +1476,10 @@ function confirmationToCheckoutResult(response) {
|
|
|
1476
1476
|
provider_account_id: response.provider_account_id ?? void 0
|
|
1477
1477
|
}
|
|
1478
1478
|
});
|
|
1479
|
-
case
|
|
1479
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.AUTHORIZATION_REQUIRED:
|
|
1480
1480
|
return ok({
|
|
1481
1481
|
...committedBase(response),
|
|
1482
|
-
payment_status:
|
|
1482
|
+
payment_status: chunkAVXA4F6G_js.LEGACY_CHECKOUT_PAYMENT_STATUS.REQUIRES_ACTION,
|
|
1483
1483
|
requires_authorization: true,
|
|
1484
1484
|
authorization_type: response.authorization_type,
|
|
1485
1485
|
display_text: response.display_text,
|
|
@@ -1489,34 +1489,34 @@ function confirmationToCheckoutResult(response) {
|
|
|
1489
1489
|
display_text: response.display_text
|
|
1490
1490
|
}
|
|
1491
1491
|
});
|
|
1492
|
-
case
|
|
1492
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.TERMS_CHANGED:
|
|
1493
1493
|
return err(
|
|
1494
|
-
new
|
|
1495
|
-
|
|
1494
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1495
|
+
chunkAVXA4F6G_js.PURCHASE_INTENT_ERROR_CODE.TERMS_CHANGED,
|
|
1496
1496
|
"Checkout terms changed. Review the replacement terms before confirming again.",
|
|
1497
1497
|
true
|
|
1498
1498
|
)
|
|
1499
1499
|
);
|
|
1500
|
-
case
|
|
1500
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.SELECTION_UNAVAILABLE:
|
|
1501
1501
|
return err(
|
|
1502
|
-
new
|
|
1503
|
-
|
|
1502
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1503
|
+
chunkAVXA4F6G_js.PURCHASE_INTENT_ERROR_CODE.SELECTION_UNAVAILABLE,
|
|
1504
1504
|
"One or more checkout selections are no longer available.",
|
|
1505
1505
|
true
|
|
1506
1506
|
)
|
|
1507
1507
|
);
|
|
1508
|
-
case
|
|
1508
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.OFFER_ENDED:
|
|
1509
1509
|
return err(
|
|
1510
|
-
new
|
|
1511
|
-
|
|
1510
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1511
|
+
chunkAVXA4F6G_js.PURCHASE_INTENT_ERROR_CODE.OFFER_ENDED,
|
|
1512
1512
|
"This offer has ended.",
|
|
1513
1513
|
false
|
|
1514
1514
|
)
|
|
1515
1515
|
);
|
|
1516
|
-
case
|
|
1516
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.SOURCE_UNAVAILABLE:
|
|
1517
1517
|
return err(
|
|
1518
|
-
new
|
|
1519
|
-
|
|
1518
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1519
|
+
chunkAVXA4F6G_js.PURCHASE_INTENT_ERROR_CODE.SOURCE_UNAVAILABLE,
|
|
1520
1520
|
"This purchase source is unavailable.",
|
|
1521
1521
|
false
|
|
1522
1522
|
)
|
|
@@ -1526,7 +1526,7 @@ function confirmationToCheckoutResult(response) {
|
|
|
1526
1526
|
|
|
1527
1527
|
// src/checkout.ts
|
|
1528
1528
|
function checkoutActionAuthority(response) {
|
|
1529
|
-
if (response.status !==
|
|
1529
|
+
if (response.status !== chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.CARD_POPUP_REQUIRED && response.status !== chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.AUTHORIZATION_REQUIRED) {
|
|
1530
1530
|
return null;
|
|
1531
1531
|
}
|
|
1532
1532
|
const paymentId = response.payment_id?.trim();
|
|
@@ -1537,7 +1537,7 @@ function checkoutActionAuthority(response) {
|
|
|
1537
1537
|
} : null;
|
|
1538
1538
|
}
|
|
1539
1539
|
function isAmbiguousCheckoutError(error) {
|
|
1540
|
-
return error.code ===
|
|
1540
|
+
return error.code === chunkAVXA4F6G_js.ErrorCode.NETWORK_ERROR || error.code === chunkAVXA4F6G_js.ErrorCode.TIMEOUT;
|
|
1541
1541
|
}
|
|
1542
1542
|
function authorizationKind(value) {
|
|
1543
1543
|
if (value && typeof value === "object" && chunkEV2EVOYS_js.AUTHORIZATION_TYPE.ADDRESS in value) {
|
|
@@ -1592,7 +1592,7 @@ function isValidCustomerName(name) {
|
|
|
1592
1592
|
return trimmed.length >= 2 && /\p{L}/u.test(trimmed);
|
|
1593
1593
|
}
|
|
1594
1594
|
function isOfflinePaymentMethod(method) {
|
|
1595
|
-
return method ===
|
|
1595
|
+
return method === chunkAVXA4F6G_js.LEGACY_CHECKOUT_PAYMENT_METHOD_ALIAS.CASH || method === chunkAVXA4F6G_js.PURCHASE_INTENT_PAYMENT_METHOD.OFFLINE;
|
|
1596
1596
|
}
|
|
1597
1597
|
function notifyCheckoutStatus(observer, status, context = {}) {
|
|
1598
1598
|
try {
|
|
@@ -1612,7 +1612,7 @@ var CHECKOUT_CONFIRMATION_SCOPE_PREFIX = "checkout-confirm:";
|
|
|
1612
1612
|
var CHECKOUT_INTENT_RECOVERY_FINGERPRINT = "cart-intent-v1";
|
|
1613
1613
|
var ABORT_ERROR_NAME = "AbortError";
|
|
1614
1614
|
var AUTHORIZATION_POPUP_NAME = "cimplify-auth";
|
|
1615
|
-
var AUTHORIZATION_POPUP_FEATURES = "width=520,height=760
|
|
1615
|
+
var AUTHORIZATION_POPUP_FEATURES = "width=520,height=760";
|
|
1616
1616
|
var ORDER_TOKEN_QUERY_PARAMETER = "token";
|
|
1617
1617
|
var CHECKOUT_API_ROUTE = {
|
|
1618
1618
|
COLLECTION_OPTIONS: "/api/v1/payments/collection-options",
|
|
@@ -1621,13 +1621,13 @@ var CHECKOUT_API_ROUTE = {
|
|
|
1621
1621
|
verifyPayment: (orderId) => `/api/v1/orders/${orderId}/verify-payment`
|
|
1622
1622
|
};
|
|
1623
1623
|
var CHECKOUT_STATUS_BY_PURCHASE_INTENT_RESOLVE_STATUS = {
|
|
1624
|
-
[
|
|
1625
|
-
[
|
|
1626
|
-
[
|
|
1627
|
-
[
|
|
1628
|
-
[
|
|
1629
|
-
[
|
|
1630
|
-
[
|
|
1624
|
+
[chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLVE_STATUS.CONFIRMING]: chunkEV2EVOYS_js.CHECKOUT_STATUS.PROCESSING,
|
|
1625
|
+
[chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLVE_STATUS.POLLING]: chunkEV2EVOYS_js.CHECKOUT_STATUS.POLLING,
|
|
1626
|
+
[chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLVE_STATUS.AWAITING_ACTION]: chunkEV2EVOYS_js.CHECKOUT_STATUS.AWAITING_AUTHORIZATION,
|
|
1627
|
+
[chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLVE_STATUS.REVIEWING_TERMS]: chunkEV2EVOYS_js.CHECKOUT_STATUS.REVIEWING_TERMS,
|
|
1628
|
+
[chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLVE_STATUS.COMPLETED]: chunkEV2EVOYS_js.CHECKOUT_STATUS.FINALIZING,
|
|
1629
|
+
[chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLVE_STATUS.FAILED]: chunkEV2EVOYS_js.CHECKOUT_STATUS.FAILED,
|
|
1630
|
+
[chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLVE_STATUS.OUTCOME_UNKNOWN]: chunkEV2EVOYS_js.CHECKOUT_STATUS.RECOVERING
|
|
1631
1631
|
};
|
|
1632
1632
|
function normalizeCollectionOptions(value, expectedCurrency) {
|
|
1633
1633
|
if (!value || typeof value !== "object") return null;
|
|
@@ -1651,7 +1651,7 @@ function normalizeCollectionOptions(value, expectedCurrency) {
|
|
|
1651
1651
|
if (option.method !== chunkEV2EVOYS_js.PAYMENT_METHOD.MOBILE_MONEY || typeof option.network !== "string" || !option.network.trim()) {
|
|
1652
1652
|
continue;
|
|
1653
1653
|
}
|
|
1654
|
-
const network =
|
|
1654
|
+
const network = chunkUYFTOIFW_js.purchaseIntentMobileMoneyNetwork(option.network);
|
|
1655
1655
|
if (!network) continue;
|
|
1656
1656
|
const key = `${chunkEV2EVOYS_js.PAYMENT_METHOD.MOBILE_MONEY}:${network}`;
|
|
1657
1657
|
if (seen.has(key)) continue;
|
|
@@ -1670,15 +1670,15 @@ var CheckoutService = class {
|
|
|
1670
1670
|
}
|
|
1671
1671
|
validateCheckoutData(data) {
|
|
1672
1672
|
if (isOfflinePaymentMethod(data.payment_method)) {
|
|
1673
|
-
return new
|
|
1674
|
-
|
|
1673
|
+
return new chunkAVXA4F6G_js.CimplifyError(
|
|
1674
|
+
chunkAVXA4F6G_js.ErrorCode.INVALID_PAYMENT_METHOD,
|
|
1675
1675
|
"Offline payment isn't available for online checkout. Please pay by card or mobile money.",
|
|
1676
1676
|
false
|
|
1677
1677
|
);
|
|
1678
1678
|
}
|
|
1679
1679
|
if (!isValidCustomerName(data.customer?.name)) {
|
|
1680
|
-
return new
|
|
1681
|
-
|
|
1680
|
+
return new chunkAVXA4F6G_js.CimplifyError(
|
|
1681
|
+
chunkAVXA4F6G_js.ErrorCode.INVALID_CUSTOMER_NAME,
|
|
1682
1682
|
"Enter your name, not a phone number.",
|
|
1683
1683
|
false
|
|
1684
1684
|
);
|
|
@@ -1692,10 +1692,10 @@ var CheckoutService = class {
|
|
|
1692
1692
|
/** Available storefront collection methods for one presentment currency. */
|
|
1693
1693
|
async collectionOptions(currency) {
|
|
1694
1694
|
const normalized = currency.trim().toUpperCase();
|
|
1695
|
-
if (!
|
|
1695
|
+
if (!chunkAVXA4F6G_js.isSupportedCurrency(normalized)) {
|
|
1696
1696
|
return err(
|
|
1697
|
-
new
|
|
1698
|
-
|
|
1697
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1698
|
+
chunkAVXA4F6G_js.ErrorCode.UNSUPPORTED_CURRENCY,
|
|
1699
1699
|
"No online payment method is available for this currency.",
|
|
1700
1700
|
false
|
|
1701
1701
|
)
|
|
@@ -1709,8 +1709,8 @@ var CheckoutService = class {
|
|
|
1709
1709
|
if (!response.ok) return response;
|
|
1710
1710
|
const options = normalizeCollectionOptions(response.value, normalized);
|
|
1711
1711
|
return options ? ok(options) : err(
|
|
1712
|
-
new
|
|
1713
|
-
|
|
1712
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1713
|
+
chunkAVXA4F6G_js.ErrorCode.PAYMENT_CAPABILITY_MISMATCH,
|
|
1714
1714
|
"Payment methods could not be verified for this currency.",
|
|
1715
1715
|
false
|
|
1716
1716
|
)
|
|
@@ -1742,8 +1742,8 @@ var CheckoutService = class {
|
|
|
1742
1742
|
clearIntentIdempotencyKey(intentScope);
|
|
1743
1743
|
this.intentCommands.delete(intentScope);
|
|
1744
1744
|
return err(
|
|
1745
|
-
error instanceof
|
|
1746
|
-
|
|
1745
|
+
error instanceof chunkAVXA4F6G_js.CimplifyError ? error : new chunkAVXA4F6G_js.CimplifyError(
|
|
1746
|
+
chunkAVXA4F6G_js.ErrorCode.CHECKOUT_VALIDATION_FAILED,
|
|
1747
1747
|
"Checkout details are invalid.",
|
|
1748
1748
|
false
|
|
1749
1749
|
)
|
|
@@ -1762,8 +1762,8 @@ var CheckoutService = class {
|
|
|
1762
1762
|
clearIntentIdempotencyKey(intentScope);
|
|
1763
1763
|
this.intentCommands.delete(intentScope);
|
|
1764
1764
|
return err(
|
|
1765
|
-
new
|
|
1766
|
-
|
|
1765
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1766
|
+
chunkAVXA4F6G_js.ErrorCode.CHECKOUT_TERMS_UNAVAILABLE,
|
|
1767
1767
|
"Checkout terms are not available for this purchase intent.",
|
|
1768
1768
|
true
|
|
1769
1769
|
)
|
|
@@ -1774,8 +1774,8 @@ var CheckoutService = class {
|
|
|
1774
1774
|
paymentOption = selectCheckoutPaymentOption(terms, checkoutData);
|
|
1775
1775
|
} catch (error) {
|
|
1776
1776
|
return err(
|
|
1777
|
-
error instanceof
|
|
1778
|
-
|
|
1777
|
+
error instanceof chunkAVXA4F6G_js.CimplifyError ? error : new chunkAVXA4F6G_js.CimplifyError(
|
|
1778
|
+
chunkAVXA4F6G_js.ErrorCode.INVALID_PAYMENT_METHOD,
|
|
1779
1779
|
"Payment details are invalid.",
|
|
1780
1780
|
false
|
|
1781
1781
|
)
|
|
@@ -1783,8 +1783,8 @@ var CheckoutService = class {
|
|
|
1783
1783
|
}
|
|
1784
1784
|
if (!paymentOption && purchaseIntentRequiresPaymentOption(terms)) {
|
|
1785
1785
|
return err(
|
|
1786
|
-
new
|
|
1787
|
-
|
|
1786
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1787
|
+
chunkAVXA4F6G_js.ErrorCode.PAYMENT_CAPABILITY_MISMATCH,
|
|
1788
1788
|
"The selected payment method is not eligible for these checkout terms.",
|
|
1789
1789
|
true
|
|
1790
1790
|
)
|
|
@@ -1836,7 +1836,7 @@ var CheckoutService = class {
|
|
|
1836
1836
|
if (!started.ok) return started;
|
|
1837
1837
|
this.reconcileActionAuthority(started.value.initialResponse);
|
|
1838
1838
|
const result = confirmationToCheckoutResult(started.value.initialResponse);
|
|
1839
|
-
if (started.value.initialResponse.status ===
|
|
1839
|
+
if (started.value.initialResponse.status === chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.ORDER_CREATED || started.value.initialResponse.status === chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.PAYMENT_FAILED) {
|
|
1840
1840
|
clearIntentIdempotencyKey(started.value.intentScope);
|
|
1841
1841
|
clearIntentIdempotencyKey(started.value.confirmationScope);
|
|
1842
1842
|
this.intentCommands.delete(started.value.intentScope);
|
|
@@ -1845,8 +1845,8 @@ var CheckoutService = class {
|
|
|
1845
1845
|
}
|
|
1846
1846
|
async initializePayment(_orderId, _method) {
|
|
1847
1847
|
return err(
|
|
1848
|
-
new
|
|
1849
|
-
|
|
1848
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1849
|
+
chunkAVXA4F6G_js.ErrorCode.NOT_IMPLEMENTED,
|
|
1850
1850
|
"initializePayment is not available in REST mode.",
|
|
1851
1851
|
false
|
|
1852
1852
|
)
|
|
@@ -1863,8 +1863,8 @@ var CheckoutService = class {
|
|
|
1863
1863
|
const authority = this.actionAuthorities.get(paymentId);
|
|
1864
1864
|
if (!authority) {
|
|
1865
1865
|
return err(
|
|
1866
|
-
new
|
|
1867
|
-
|
|
1866
|
+
new chunkAVXA4F6G_js.CimplifyError(
|
|
1867
|
+
chunkAVXA4F6G_js.ErrorCode.CHECKOUT_AUTHORITY_REQUIRED,
|
|
1868
1868
|
"The purchase-intent action authority is unavailable. Restart checkout before submitting authorization.",
|
|
1869
1869
|
false
|
|
1870
1870
|
)
|
|
@@ -1956,7 +1956,7 @@ var CheckoutService = class {
|
|
|
1956
1956
|
if (!data.cart_id) {
|
|
1957
1957
|
return ok(
|
|
1958
1958
|
toTerminalFailure(
|
|
1959
|
-
|
|
1959
|
+
chunkAVXA4F6G_js.ErrorCode.INVALID_CART,
|
|
1960
1960
|
"A valid cart is required before checkout can start.",
|
|
1961
1961
|
false
|
|
1962
1962
|
)
|
|
@@ -1966,7 +1966,7 @@ var CheckoutService = class {
|
|
|
1966
1966
|
if (!cartResult.ok || !cartResult.value?.id) {
|
|
1967
1967
|
return ok(
|
|
1968
1968
|
toTerminalFailure(
|
|
1969
|
-
|
|
1969
|
+
chunkAVXA4F6G_js.ErrorCode.INVALID_CART,
|
|
1970
1970
|
"Unable to load cart for checkout.",
|
|
1971
1971
|
false
|
|
1972
1972
|
)
|
|
@@ -1976,7 +1976,7 @@ var CheckoutService = class {
|
|
|
1976
1976
|
if (cart.id !== data.cart_id || cart.items.length === 0) {
|
|
1977
1977
|
return ok(
|
|
1978
1978
|
toTerminalFailure(
|
|
1979
|
-
|
|
1979
|
+
chunkAVXA4F6G_js.ErrorCode.INVALID_CART,
|
|
1980
1980
|
"Cart is empty or no longer valid. Please refresh and try again.",
|
|
1981
1981
|
false
|
|
1982
1982
|
)
|
|
@@ -2003,10 +2003,10 @@ var CheckoutService = class {
|
|
|
2003
2003
|
pay_deposit: data.pay_deposit
|
|
2004
2004
|
};
|
|
2005
2005
|
const rawBaseCurrency = typeof cart.pricing.currency === "string" ? cart.pricing.currency.trim().toUpperCase() : "";
|
|
2006
|
-
if (!
|
|
2006
|
+
if (!chunkAVXA4F6G_js.isSupportedCurrency(rawBaseCurrency)) {
|
|
2007
2007
|
return ok(
|
|
2008
2008
|
toTerminalFailure(
|
|
2009
|
-
|
|
2009
|
+
chunkAVXA4F6G_js.ErrorCode.UNSUPPORTED_CURRENCY,
|
|
2010
2010
|
"Cart currency is missing or unsupported. Refresh the cart before checkout.",
|
|
2011
2011
|
false
|
|
2012
2012
|
)
|
|
@@ -2014,21 +2014,21 @@ var CheckoutService = class {
|
|
|
2014
2014
|
}
|
|
2015
2015
|
const baseCurrency = rawBaseCurrency;
|
|
2016
2016
|
const payCurrency = data.pay_currency?.trim().toUpperCase();
|
|
2017
|
-
if (payCurrency && !
|
|
2017
|
+
if (payCurrency && !chunkAVXA4F6G_js.isSupportedCurrency(payCurrency)) {
|
|
2018
2018
|
return ok(
|
|
2019
2019
|
toTerminalFailure(
|
|
2020
|
-
|
|
2020
|
+
chunkAVXA4F6G_js.ErrorCode.UNSUPPORTED_CURRENCY,
|
|
2021
2021
|
"Payment currency is unsupported for checkout.",
|
|
2022
2022
|
false
|
|
2023
2023
|
)
|
|
2024
2024
|
);
|
|
2025
2025
|
}
|
|
2026
|
-
const payCurrencyCode = payCurrency &&
|
|
2026
|
+
const payCurrencyCode = payCurrency && chunkAVXA4F6G_js.isSupportedCurrency(payCurrency) ? payCurrency : void 0;
|
|
2027
2027
|
const cartTotalSign = decimalSign(cart.pricing.total_price);
|
|
2028
2028
|
if (cartTotalSign === null || cartTotalSign < 0) {
|
|
2029
2029
|
return ok(
|
|
2030
2030
|
toTerminalFailure(
|
|
2031
|
-
|
|
2031
|
+
chunkAVXA4F6G_js.ErrorCode.CHECKOUT_VALIDATION_FAILED,
|
|
2032
2032
|
"Cart total is not a valid non-negative decimal amount.",
|
|
2033
2033
|
false
|
|
2034
2034
|
)
|
|
@@ -2043,7 +2043,7 @@ var CheckoutService = class {
|
|
|
2043
2043
|
if (!fxQuoteResult.ok) {
|
|
2044
2044
|
return ok(
|
|
2045
2045
|
toTerminalFailure(
|
|
2046
|
-
|
|
2046
|
+
chunkAVXA4F6G_js.ErrorCode.FX_QUOTE_FAILED,
|
|
2047
2047
|
fxQuoteResult.error.message || "Unable to lock FX quote for checkout.",
|
|
2048
2048
|
true
|
|
2049
2049
|
)
|
|
@@ -2057,7 +2057,7 @@ var CheckoutService = class {
|
|
|
2057
2057
|
if (!started.ok) {
|
|
2058
2058
|
return ok(
|
|
2059
2059
|
toTerminalFailure(
|
|
2060
|
-
started.error.code ||
|
|
2060
|
+
started.error.code || chunkAVXA4F6G_js.ErrorCode.CHECKOUT_FAILED,
|
|
2061
2061
|
started.error.message || "Unable to process checkout.",
|
|
2062
2062
|
started.error.retryable ?? true
|
|
2063
2063
|
)
|
|
@@ -2074,11 +2074,11 @@ var CheckoutService = class {
|
|
|
2074
2074
|
onStatusChange: (status, response) => {
|
|
2075
2075
|
const context = {};
|
|
2076
2076
|
if (response && "order_id" in response) context.order_id = response.order_id;
|
|
2077
|
-
if (response?.status ===
|
|
2077
|
+
if (response?.status === chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.TERMS_CHANGED) {
|
|
2078
2078
|
context.replacement_terms = response.replacement;
|
|
2079
2079
|
context.terms_deltas = response.deltas;
|
|
2080
2080
|
}
|
|
2081
|
-
if (response?.status ===
|
|
2081
|
+
if (response?.status === chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.SELECTION_UNAVAILABLE) {
|
|
2082
2082
|
context.unavailable_lines = response.lines;
|
|
2083
2083
|
}
|
|
2084
2084
|
const checkoutStatus = CHECKOUT_STATUS_BY_PURCHASE_INTENT_RESOLVE_STATUS[status];
|
|
@@ -2086,15 +2086,15 @@ var CheckoutService = class {
|
|
|
2086
2086
|
},
|
|
2087
2087
|
onActionRequired: async (action) => {
|
|
2088
2088
|
switch (action.status) {
|
|
2089
|
-
case
|
|
2089
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.CARD_POPUP_REQUIRED: {
|
|
2090
2090
|
const allowPopups = data.allow_popups ?? typeof window !== "undefined";
|
|
2091
2091
|
if (!allowPopups) {
|
|
2092
2092
|
actionFailure = {
|
|
2093
|
-
code:
|
|
2093
|
+
code: chunkAVXA4F6G_js.ErrorCode.PROVIDER_UNAVAILABLE,
|
|
2094
2094
|
message: "Card authorization UI is unavailable in this environment.",
|
|
2095
2095
|
recoverable: false
|
|
2096
2096
|
};
|
|
2097
|
-
return
|
|
2097
|
+
return chunkAVXA4F6G_js.PURCHASE_INTENT_ACTION_DECISION.STOP;
|
|
2098
2098
|
}
|
|
2099
2099
|
let outcome;
|
|
2100
2100
|
try {
|
|
@@ -2118,10 +2118,10 @@ var CheckoutService = class {
|
|
|
2118
2118
|
notifyAuthorizationUi(data.on_authorization_ui_change, false);
|
|
2119
2119
|
}
|
|
2120
2120
|
if (outcome.status === PAYMENT_AUTHORIZATION_OUTCOME_STATUS.SUBMITTED) {
|
|
2121
|
-
return
|
|
2121
|
+
return chunkAVXA4F6G_js.PURCHASE_INTENT_ACTION_DECISION.CONTINUE;
|
|
2122
2122
|
}
|
|
2123
2123
|
actionFailure = outcome.status === PAYMENT_AUTHORIZATION_OUTCOME_STATUS.CANCELLED ? {
|
|
2124
|
-
code:
|
|
2124
|
+
code: chunkAVXA4F6G_js.ErrorCode.PAYMENT_CANCELLED,
|
|
2125
2125
|
message: "Card payment was cancelled before submission.",
|
|
2126
2126
|
recoverable: true
|
|
2127
2127
|
} : {
|
|
@@ -2129,53 +2129,55 @@ var CheckoutService = class {
|
|
|
2129
2129
|
message: outcome.message,
|
|
2130
2130
|
recoverable: outcome.recoverable
|
|
2131
2131
|
};
|
|
2132
|
-
return
|
|
2132
|
+
return chunkAVXA4F6G_js.PURCHASE_INTENT_ACTION_DECISION.STOP;
|
|
2133
2133
|
}
|
|
2134
|
-
case
|
|
2135
|
-
const authorizationUrl =
|
|
2134
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.REDIRECT_REQUIRED: {
|
|
2135
|
+
const authorizationUrl = chunkUYFTOIFW_js.paymentAuthorizationUrl(action.authorization_url);
|
|
2136
2136
|
if (!authorizationUrl) {
|
|
2137
2137
|
actionFailure = {
|
|
2138
|
-
code:
|
|
2138
|
+
code: chunkAVXA4F6G_js.ErrorCode.AUTHORIZATION_FAILED,
|
|
2139
2139
|
message: "The provider returned an invalid authorization URL.",
|
|
2140
2140
|
recoverable: false
|
|
2141
2141
|
};
|
|
2142
|
-
return
|
|
2142
|
+
return chunkAVXA4F6G_js.PURCHASE_INTENT_ACTION_DECISION.STOP;
|
|
2143
2143
|
}
|
|
2144
2144
|
if (typeof window !== "undefined") {
|
|
2145
2145
|
if (data.allow_popups === false) {
|
|
2146
2146
|
window.location.assign(authorizationUrl);
|
|
2147
2147
|
} else {
|
|
2148
2148
|
const popup = window.open(
|
|
2149
|
-
|
|
2149
|
+
"",
|
|
2150
2150
|
AUTHORIZATION_POPUP_NAME,
|
|
2151
2151
|
AUTHORIZATION_POPUP_FEATURES
|
|
2152
2152
|
);
|
|
2153
2153
|
if (!popup) {
|
|
2154
2154
|
actionFailure = {
|
|
2155
|
-
code:
|
|
2155
|
+
code: chunkAVXA4F6G_js.ErrorCode.POPUP_BLOCKED,
|
|
2156
2156
|
message: "Authorization popup was blocked.",
|
|
2157
2157
|
recoverable: true
|
|
2158
2158
|
};
|
|
2159
|
-
return
|
|
2159
|
+
return chunkAVXA4F6G_js.PURCHASE_INTENT_ACTION_DECISION.STOP;
|
|
2160
2160
|
}
|
|
2161
|
+
popup.opener = null;
|
|
2162
|
+
popup.location.replace(authorizationUrl);
|
|
2161
2163
|
}
|
|
2162
2164
|
}
|
|
2163
2165
|
actionFailure = {
|
|
2164
|
-
code:
|
|
2166
|
+
code: chunkAVXA4F6G_js.ErrorCode.REDIRECT_REQUIRED,
|
|
2165
2167
|
message: "Complete authorization at the payment provider, then resume checkout.",
|
|
2166
2168
|
recoverable: true
|
|
2167
2169
|
};
|
|
2168
|
-
return
|
|
2170
|
+
return chunkAVXA4F6G_js.PURCHASE_INTENT_ACTION_DECISION.STOP;
|
|
2169
2171
|
}
|
|
2170
|
-
case
|
|
2172
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.AUTHORIZATION_REQUIRED: {
|
|
2171
2173
|
const expected = authorizationKind(action.authorization_type);
|
|
2172
2174
|
if (!expected || !data.on_authorization_required) {
|
|
2173
2175
|
actionFailure = {
|
|
2174
|
-
code:
|
|
2176
|
+
code: chunkAVXA4F6G_js.ErrorCode.AUTHORIZATION_REQUIRED,
|
|
2175
2177
|
message: "Additional payment authorization is required.",
|
|
2176
2178
|
recoverable: true
|
|
2177
2179
|
};
|
|
2178
|
-
return
|
|
2180
|
+
return chunkAVXA4F6G_js.PURCHASE_INTENT_ACTION_DECISION.STOP;
|
|
2179
2181
|
}
|
|
2180
2182
|
let submission;
|
|
2181
2183
|
await data.on_authorization_required(expected, async (candidate) => {
|
|
@@ -2184,14 +2186,14 @@ var CheckoutService = class {
|
|
|
2184
2186
|
});
|
|
2185
2187
|
if (!submission) {
|
|
2186
2188
|
actionFailure = {
|
|
2187
|
-
code:
|
|
2189
|
+
code: chunkAVXA4F6G_js.ErrorCode.AUTHORIZATION_REQUIRED,
|
|
2188
2190
|
message: "Payment authorization was not submitted.",
|
|
2189
2191
|
recoverable: true
|
|
2190
2192
|
};
|
|
2191
|
-
return
|
|
2193
|
+
return chunkAVXA4F6G_js.PURCHASE_INTENT_ACTION_DECISION.STOP;
|
|
2192
2194
|
}
|
|
2193
2195
|
return {
|
|
2194
|
-
kind:
|
|
2196
|
+
kind: chunkAVXA4F6G_js.PURCHASE_INTENT_ACTION_DECISION.SUBMIT,
|
|
2195
2197
|
request: { authorization: submission }
|
|
2196
2198
|
};
|
|
2197
2199
|
}
|
|
@@ -2201,14 +2203,14 @@ var CheckoutService = class {
|
|
|
2201
2203
|
if (!resolved.ok) {
|
|
2202
2204
|
return ok(
|
|
2203
2205
|
toTerminalFailure(
|
|
2204
|
-
resolved.error.code ||
|
|
2206
|
+
resolved.error.code || chunkAVXA4F6G_js.ErrorCode.CHECKOUT_FAILED,
|
|
2205
2207
|
resolved.error.message || "Unable to resolve checkout.",
|
|
2206
2208
|
resolved.error.retryable ?? true
|
|
2207
2209
|
)
|
|
2208
2210
|
);
|
|
2209
2211
|
}
|
|
2210
2212
|
switch (resolved.value.kind) {
|
|
2211
|
-
case
|
|
2213
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLUTION_KIND.COMPLETED: {
|
|
2212
2214
|
clearIntentIdempotencyKey(started.value.intentScope);
|
|
2213
2215
|
clearIntentIdempotencyKey(started.value.confirmationScope);
|
|
2214
2216
|
const response = resolved.value.response;
|
|
@@ -2231,70 +2233,70 @@ var CheckoutService = class {
|
|
|
2231
2233
|
enrolled_in_link: enrolledInLink
|
|
2232
2234
|
});
|
|
2233
2235
|
}
|
|
2234
|
-
case
|
|
2236
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLUTION_KIND.FAILED:
|
|
2235
2237
|
clearIntentIdempotencyKey(started.value.confirmationScope);
|
|
2236
2238
|
return ok(
|
|
2237
2239
|
toTerminalFailure(
|
|
2238
|
-
|
|
2240
|
+
chunkAVXA4F6G_js.PURCHASE_INTENT_ERROR_CODE.PAYMENT_FAILED,
|
|
2239
2241
|
"Payment failed. Choose another method or retry collection.",
|
|
2240
2242
|
true
|
|
2241
2243
|
)
|
|
2242
2244
|
);
|
|
2243
|
-
case
|
|
2245
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLUTION_KIND.OUTCOME_UNKNOWN:
|
|
2244
2246
|
return ok(
|
|
2245
2247
|
toTerminalFailure(
|
|
2246
|
-
|
|
2248
|
+
chunkAVXA4F6G_js.ErrorCode.PAYMENT_OUTCOME_UNKNOWN,
|
|
2247
2249
|
"Payment outcome is still unknown. Resume this intent before retrying.",
|
|
2248
2250
|
true
|
|
2249
2251
|
)
|
|
2250
2252
|
);
|
|
2251
|
-
case
|
|
2253
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLUTION_KIND.TIMED_OUT:
|
|
2252
2254
|
return ok(
|
|
2253
2255
|
toTerminalFailure(
|
|
2254
|
-
|
|
2256
|
+
chunkAVXA4F6G_js.ErrorCode.TIMEOUT,
|
|
2255
2257
|
"Payment is still processing. Resume this intent to continue polling.",
|
|
2256
2258
|
true
|
|
2257
2259
|
)
|
|
2258
2260
|
);
|
|
2259
|
-
case
|
|
2261
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLUTION_KIND.ACTION_REQUIRED:
|
|
2260
2262
|
return ok(
|
|
2261
2263
|
toTerminalFailure(
|
|
2262
|
-
actionFailure?.code ??
|
|
2264
|
+
actionFailure?.code ?? chunkAVXA4F6G_js.ErrorCode.AUTHORIZATION_REQUIRED,
|
|
2263
2265
|
actionFailure?.message ?? "Checkout requires additional authorization.",
|
|
2264
2266
|
actionFailure?.recoverable ?? true
|
|
2265
2267
|
)
|
|
2266
2268
|
);
|
|
2267
|
-
case
|
|
2269
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_RESOLUTION_KIND.REVIEW_REQUIRED: {
|
|
2268
2270
|
const response = resolved.value.response;
|
|
2269
2271
|
switch (response.status) {
|
|
2270
|
-
case
|
|
2272
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.TERMS_CHANGED:
|
|
2271
2273
|
return ok(
|
|
2272
2274
|
toTerminalFailure(
|
|
2273
|
-
|
|
2275
|
+
chunkAVXA4F6G_js.PURCHASE_INTENT_ERROR_CODE.TERMS_CHANGED,
|
|
2274
2276
|
"Checkout terms changed and require explicit review.",
|
|
2275
2277
|
true
|
|
2276
2278
|
)
|
|
2277
2279
|
);
|
|
2278
|
-
case
|
|
2280
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.SELECTION_UNAVAILABLE:
|
|
2279
2281
|
return ok(
|
|
2280
2282
|
toTerminalFailure(
|
|
2281
|
-
|
|
2283
|
+
chunkAVXA4F6G_js.PURCHASE_INTENT_ERROR_CODE.SELECTION_UNAVAILABLE,
|
|
2282
2284
|
"One or more checkout selections are unavailable.",
|
|
2283
2285
|
true
|
|
2284
2286
|
)
|
|
2285
2287
|
);
|
|
2286
|
-
case
|
|
2288
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.OFFER_ENDED:
|
|
2287
2289
|
return ok(
|
|
2288
2290
|
toTerminalFailure(
|
|
2289
|
-
|
|
2291
|
+
chunkAVXA4F6G_js.PURCHASE_INTENT_ERROR_CODE.OFFER_ENDED,
|
|
2290
2292
|
"This offer has ended.",
|
|
2291
2293
|
false
|
|
2292
2294
|
)
|
|
2293
2295
|
);
|
|
2294
|
-
case
|
|
2296
|
+
case chunkAVXA4F6G_js.PURCHASE_INTENT_CONFIRM_STATUS.SOURCE_UNAVAILABLE:
|
|
2295
2297
|
return ok(
|
|
2296
2298
|
toTerminalFailure(
|
|
2297
|
-
|
|
2299
|
+
chunkAVXA4F6G_js.PURCHASE_INTENT_ERROR_CODE.SOURCE_UNAVAILABLE,
|
|
2298
2300
|
"This purchase source is unavailable.",
|
|
2299
2301
|
false
|
|
2300
2302
|
)
|
|
@@ -2306,7 +2308,7 @@ var CheckoutService = class {
|
|
|
2306
2308
|
const cancelled = data.signal?.aborted || error instanceof Error && error.name === ABORT_ERROR_NAME;
|
|
2307
2309
|
return ok(
|
|
2308
2310
|
toTerminalFailure(
|
|
2309
|
-
cancelled ?
|
|
2311
|
+
cancelled ? chunkAVXA4F6G_js.ErrorCode.CANCELLED : chunkAVXA4F6G_js.ErrorCode.AUTHORIZATION_FAILED,
|
|
2310
2312
|
cancelled ? "Checkout was cancelled." : error instanceof Error ? error.message : "Checkout authorization failed.",
|
|
2311
2313
|
true
|
|
2312
2314
|
)
|
|
@@ -2389,7 +2391,7 @@ var LinkService = class {
|
|
|
2389
2391
|
supersededActivation() {
|
|
2390
2392
|
return {
|
|
2391
2393
|
ok: false,
|
|
2392
|
-
error: new
|
|
2394
|
+
error: new chunkAVXA4F6G_js.CimplifyError(
|
|
2393
2395
|
"session_superseded",
|
|
2394
2396
|
"A newer authentication session replaced this one"
|
|
2395
2397
|
)
|
|
@@ -2670,7 +2672,7 @@ var BusinessService = class {
|
|
|
2670
2672
|
if (!result.ok) return err(result.error);
|
|
2671
2673
|
const location = result.value.find((item) => item.id === locationId);
|
|
2672
2674
|
if (!location) {
|
|
2673
|
-
return err(new
|
|
2675
|
+
return err(new chunkAVXA4F6G_js.CimplifyError(chunkAVXA4F6G_js.ErrorCode.NOT_FOUND, `Location not found: ${locationId}`, false));
|
|
2674
2676
|
}
|
|
2675
2677
|
return ok(location);
|
|
2676
2678
|
}
|
|
@@ -3295,7 +3297,7 @@ function startRedirectSignIn(opts, authorizeEndpoint, pkce, state) {
|
|
|
3295
3297
|
|
|
3296
3298
|
// src/elements.ts
|
|
3297
3299
|
function toCheckoutError(code, message, recoverable) {
|
|
3298
|
-
const hint =
|
|
3300
|
+
const hint = chunkAVXA4F6G_js.getErrorHint(code);
|
|
3299
3301
|
return {
|
|
3300
3302
|
success: false,
|
|
3301
3303
|
error: {
|
|
@@ -3521,7 +3523,7 @@ var CimplifyElements = class {
|
|
|
3521
3523
|
return {
|
|
3522
3524
|
success: false,
|
|
3523
3525
|
error: {
|
|
3524
|
-
code: result.error?.code ||
|
|
3526
|
+
code: result.error?.code || chunkAVXA4F6G_js.ErrorCode.CHECKOUT_FAILED,
|
|
3525
3527
|
message: result.error?.message || "Checkout failed"
|
|
3526
3528
|
}
|
|
3527
3529
|
};
|
|
@@ -3539,7 +3541,7 @@ var CimplifyElements = class {
|
|
|
3539
3541
|
if (this.checkoutInProgress) {
|
|
3540
3542
|
this.debug("[cimplify:checkout] BLOCKED: already processing");
|
|
3541
3543
|
return toCheckoutError(
|
|
3542
|
-
|
|
3544
|
+
chunkAVXA4F6G_js.ErrorCode.ALREADY_PROCESSING,
|
|
3543
3545
|
"Checkout is already in progress.",
|
|
3544
3546
|
false
|
|
3545
3547
|
);
|
|
@@ -3550,7 +3552,7 @@ var CimplifyElements = class {
|
|
|
3550
3552
|
if (this.authEstablishmentInProgress) {
|
|
3551
3553
|
this.checkoutInProgress = false;
|
|
3552
3554
|
return toCheckoutError(
|
|
3553
|
-
|
|
3555
|
+
chunkAVXA4F6G_js.ErrorCode.AUTH_INCOMPLETE,
|
|
3554
3556
|
"Authentication must finish establishing the checkout session.",
|
|
3555
3557
|
true
|
|
3556
3558
|
);
|
|
@@ -3560,7 +3562,7 @@ var CimplifyElements = class {
|
|
|
3560
3562
|
this.debug("[cimplify:checkout] BLOCKED: no cart_id or intent_id");
|
|
3561
3563
|
this.checkoutInProgress = false;
|
|
3562
3564
|
return toCheckoutError(
|
|
3563
|
-
|
|
3565
|
+
chunkAVXA4F6G_js.ErrorCode.CHECKOUT_AUTHORITY_REQUIRED,
|
|
3564
3566
|
"A cart or existing purchase intent is required before checkout can start.",
|
|
3565
3567
|
false
|
|
3566
3568
|
);
|
|
@@ -3569,7 +3571,7 @@ var CimplifyElements = class {
|
|
|
3569
3571
|
this.debug("[cimplify:checkout] BLOCKED: no order_type");
|
|
3570
3572
|
this.checkoutInProgress = false;
|
|
3571
3573
|
return toCheckoutError(
|
|
3572
|
-
|
|
3574
|
+
chunkAVXA4F6G_js.ErrorCode.ORDER_TYPE_REQUIRED,
|
|
3573
3575
|
"Order type is required before checkout can start.",
|
|
3574
3576
|
false
|
|
3575
3577
|
);
|
|
@@ -3579,7 +3581,7 @@ var CimplifyElements = class {
|
|
|
3579
3581
|
this.debug("[cimplify:checkout] BLOCKED: no checkout element");
|
|
3580
3582
|
this.checkoutInProgress = false;
|
|
3581
3583
|
return toCheckoutError(
|
|
3582
|
-
|
|
3584
|
+
chunkAVXA4F6G_js.ErrorCode.NO_PAYMENT_ELEMENT,
|
|
3583
3585
|
"Checkout element must be mounted before checkout.",
|
|
3584
3586
|
false
|
|
3585
3587
|
);
|
|
@@ -3588,7 +3590,7 @@ var CimplifyElements = class {
|
|
|
3588
3590
|
this.debug("[cimplify:checkout] BLOCKED: checkout element not mounted");
|
|
3589
3591
|
this.checkoutInProgress = false;
|
|
3590
3592
|
return toCheckoutError(
|
|
3591
|
-
|
|
3593
|
+
chunkAVXA4F6G_js.ErrorCode.PAYMENT_NOT_MOUNTED,
|
|
3592
3594
|
"Checkout element must be mounted before checkout.",
|
|
3593
3595
|
false
|
|
3594
3596
|
);
|
|
@@ -3600,7 +3602,7 @@ var CimplifyElements = class {
|
|
|
3600
3602
|
this.debug("[cimplify:checkout] BLOCKED: auth incomplete");
|
|
3601
3603
|
this.checkoutInProgress = false;
|
|
3602
3604
|
return toCheckoutError(
|
|
3603
|
-
|
|
3605
|
+
chunkAVXA4F6G_js.ErrorCode.AUTH_INCOMPLETE,
|
|
3604
3606
|
"Authentication must complete before checkout can start.",
|
|
3605
3607
|
true
|
|
3606
3608
|
);
|
|
@@ -3642,9 +3644,14 @@ var CimplifyElements = class {
|
|
|
3642
3644
|
account_id: this.accountId ?? void 0,
|
|
3643
3645
|
customer_id: this.customerId ?? void 0
|
|
3644
3646
|
};
|
|
3645
|
-
const
|
|
3647
|
+
const inactivityTimeoutMs = options.timeout_ms ?? 18e4;
|
|
3648
|
+
const shopperPendingStatuses = /* @__PURE__ */ new Set([
|
|
3649
|
+
chunkEV2EVOYS_js.CHECKOUT_STATUS.REVIEWING_TERMS,
|
|
3650
|
+
chunkEV2EVOYS_js.CHECKOUT_STATUS.AWAITING_AUTHORIZATION
|
|
3651
|
+
]);
|
|
3646
3652
|
return new Promise((resolve) => {
|
|
3647
3653
|
let settled = false;
|
|
3654
|
+
let timeout;
|
|
3648
3655
|
const cleanup = () => {
|
|
3649
3656
|
if (typeof window !== "undefined") {
|
|
3650
3657
|
window.removeEventListener("message", handleCheckoutMessage);
|
|
@@ -3661,15 +3668,23 @@ var CimplifyElements = class {
|
|
|
3661
3668
|
cleanup();
|
|
3662
3669
|
resolve(result);
|
|
3663
3670
|
};
|
|
3664
|
-
const
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
|
|
3670
|
-
|
|
3671
|
-
|
|
3672
|
-
|
|
3671
|
+
const armTimeout = () => {
|
|
3672
|
+
clearTimeout(timeout);
|
|
3673
|
+
timeout = setTimeout(() => {
|
|
3674
|
+
settle(
|
|
3675
|
+
toCheckoutError(
|
|
3676
|
+
chunkAVXA4F6G_js.ErrorCode.TIMEOUT,
|
|
3677
|
+
"Checkout timed out before receiving a terminal response.",
|
|
3678
|
+
true
|
|
3679
|
+
)
|
|
3680
|
+
);
|
|
3681
|
+
}, inactivityTimeoutMs);
|
|
3682
|
+
};
|
|
3683
|
+
const suspendTimeout = () => {
|
|
3684
|
+
clearTimeout(timeout);
|
|
3685
|
+
timeout = void 0;
|
|
3686
|
+
};
|
|
3687
|
+
armTimeout();
|
|
3673
3688
|
const handleCheckoutMessage = (event) => {
|
|
3674
3689
|
if (!isAllowedOrigin(event.origin)) {
|
|
3675
3690
|
return;
|
|
@@ -3682,10 +3697,16 @@ var CimplifyElements = class {
|
|
|
3682
3697
|
return;
|
|
3683
3698
|
}
|
|
3684
3699
|
if (message.type === MESSAGE_TYPES.CHECKOUT_STATUS) {
|
|
3700
|
+
if (shopperPendingStatuses.has(message.status)) {
|
|
3701
|
+
suspendTimeout();
|
|
3702
|
+
} else {
|
|
3703
|
+
armTimeout();
|
|
3704
|
+
}
|
|
3685
3705
|
options.on_status_change?.(message.status, message.context);
|
|
3686
3706
|
return;
|
|
3687
3707
|
}
|
|
3688
3708
|
if (message.type === MESSAGE_TYPES.TERMS_CHANGED) {
|
|
3709
|
+
suspendTimeout();
|
|
3689
3710
|
options.on_status_change?.(chunkEV2EVOYS_js.CHECKOUT_STATUS.REVIEWING_TERMS, {
|
|
3690
3711
|
intent_id: message.intent_id,
|
|
3691
3712
|
replacement_terms: message.replacement,
|
|
@@ -3694,6 +3715,7 @@ var CimplifyElements = class {
|
|
|
3694
3715
|
return;
|
|
3695
3716
|
}
|
|
3696
3717
|
if (message.type === MESSAGE_TYPES.SELECTION_UNAVAILABLE) {
|
|
3718
|
+
suspendTimeout();
|
|
3697
3719
|
options.on_status_change?.(chunkEV2EVOYS_js.CHECKOUT_STATUS.REVIEWING_TERMS, {
|
|
3698
3720
|
intent_id: message.intent_id,
|
|
3699
3721
|
unavailable_lines: message.lines
|
|
@@ -3716,7 +3738,7 @@ var CimplifyElements = class {
|
|
|
3716
3738
|
checkoutElement.sendMessage({ type: MESSAGE_TYPES.ABORT_CHECKOUT });
|
|
3717
3739
|
settle(
|
|
3718
3740
|
toCheckoutError(
|
|
3719
|
-
|
|
3741
|
+
chunkAVXA4F6G_js.ErrorCode.AUTH_LOST,
|
|
3720
3742
|
"Authentication was cleared during checkout.",
|
|
3721
3743
|
true
|
|
3722
3744
|
)
|
|
@@ -3728,7 +3750,7 @@ var CimplifyElements = class {
|
|
|
3728
3750
|
}
|
|
3729
3751
|
abortFn = () => {
|
|
3730
3752
|
checkoutElement.sendMessage({ type: MESSAGE_TYPES.ABORT_CHECKOUT });
|
|
3731
|
-
settle(toCheckoutError(
|
|
3753
|
+
settle(toCheckoutError(chunkAVXA4F6G_js.ErrorCode.CANCELLED, "Checkout was cancelled.", true));
|
|
3732
3754
|
};
|
|
3733
3755
|
this.activeCheckoutAbort = abortFn;
|
|
3734
3756
|
this.debug("[cimplify:checkout] sending process_checkout to checkout iframe", {
|
|
@@ -3967,7 +3989,7 @@ var CimplifyElements = class {
|
|
|
3967
3989
|
const redirectUri = auth.redirectUri ?? readPublicEnv("NEXT_PUBLIC_CIMPLIFY_REDIRECT_URI");
|
|
3968
3990
|
if (!clientId || !redirectUri) {
|
|
3969
3991
|
sourceElement._emitError({
|
|
3970
|
-
code:
|
|
3992
|
+
code: chunkAVXA4F6G_js.ErrorCode.AUTH_CONFIG_REQUIRED,
|
|
3971
3993
|
message: "Cimplify OAuth clientId and redirectUri are required."
|
|
3972
3994
|
});
|
|
3973
3995
|
return;
|
|
@@ -3991,7 +4013,7 @@ var CimplifyElements = class {
|
|
|
3991
4013
|
this.authInProgress = false;
|
|
3992
4014
|
if (!accessToken) {
|
|
3993
4015
|
sourceElement._emitError({
|
|
3994
|
-
code:
|
|
4016
|
+
code: chunkAVXA4F6G_js.ErrorCode.AUTH_CALLBACK_MISSING_TOKEN,
|
|
3995
4017
|
message: "Sign-in callback did not return an access token."
|
|
3996
4018
|
});
|
|
3997
4019
|
return;
|
|
@@ -4018,7 +4040,7 @@ var CimplifyElements = class {
|
|
|
4018
4040
|
if (this.authGeneration !== generation) return;
|
|
4019
4041
|
this.authInProgress = false;
|
|
4020
4042
|
sourceElement._emitError({
|
|
4021
|
-
code:
|
|
4043
|
+
code: chunkAVXA4F6G_js.ErrorCode.AUTH_START_FAILED,
|
|
4022
4044
|
message: error instanceof Error ? error.message : "Unable to start sign-in."
|
|
4023
4045
|
});
|
|
4024
4046
|
});
|
|
@@ -4294,7 +4316,7 @@ var CimplifyElement = class {
|
|
|
4294
4316
|
if (!resolvedBusinessId || !this.container || !this.mounted) {
|
|
4295
4317
|
console.error("Unable to mount element without a resolved business ID");
|
|
4296
4318
|
this.emit(EVENT_TYPES.ERROR, {
|
|
4297
|
-
code:
|
|
4319
|
+
code: chunkAVXA4F6G_js.ErrorCode.BUSINESS_ID_REQUIRED,
|
|
4298
4320
|
message: "Unable to initialize checkout without a business ID."
|
|
4299
4321
|
});
|
|
4300
4322
|
return;
|