@fun-xyz/fiat-contract 0.7.0 → 0.9.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/README.md +20 -11
- package/dist/{chunk-OGNYHIOE.mjs → chunk-5QGVY5Z4.mjs} +33 -24
- package/dist/fixtures/index.d.ts +3 -4
- package/dist/index.js +262 -96
- package/dist/index.mjs +231 -74
- package/dist/schemas.d.ts +3 -1
- package/dist/table.d.ts +2 -3
- package/dist/table.js +32 -23
- package/dist/table.mjs +1 -1
- package/dist/types.d.ts +23 -23
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
tableEntry,
|
|
13
13
|
unofferedEndpoints,
|
|
14
14
|
unreachableStates
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-5QGVY5Z4.mjs";
|
|
16
16
|
|
|
17
17
|
// src/codes.ts
|
|
18
18
|
var COUNTRY_CURRENCY_LIST = [
|
|
@@ -295,7 +295,15 @@ var HTTP_VERBS = ["GET", "POST"];
|
|
|
295
295
|
var ENDPOINT_PATTERN = /^(GET|POST) \/fiat\/[^\s]*$/;
|
|
296
296
|
var $endpoint = z.string().regex(ENDPOINT_PATTERN, 'endpoint must read "<GET|POST> /fiat/\u2026"');
|
|
297
297
|
var FiatEndpointSchema = $endpoint;
|
|
298
|
-
var $provider = z.enum([
|
|
298
|
+
var $provider = z.enum([
|
|
299
|
+
"TRANSAK",
|
|
300
|
+
"SWAPPED",
|
|
301
|
+
"BANXA",
|
|
302
|
+
"MOONPAY",
|
|
303
|
+
"STRIPE",
|
|
304
|
+
"COINBASE",
|
|
305
|
+
"CROSSMINT"
|
|
306
|
+
]);
|
|
299
307
|
var FiatProviderSchema = $provider;
|
|
300
308
|
var $kycProvider = z.enum(["SUMSUB"]);
|
|
301
309
|
var KYCProviderSchema = $kycProvider;
|
|
@@ -362,6 +370,8 @@ var $quote = obj({
|
|
|
362
370
|
expiresAt: z.string()
|
|
363
371
|
});
|
|
364
372
|
var QuoteSchema = $quote;
|
|
373
|
+
var $quoteLimits = obj({ min: z.string(), max: z.string() });
|
|
374
|
+
var QuoteLimitsSchema = $quoteLimits;
|
|
365
375
|
var $instrument = obj({ brandLabel: z.string(), last4: z.string() });
|
|
366
376
|
var InstrumentSchema = $instrument;
|
|
367
377
|
var $orderRef = obj({
|
|
@@ -392,7 +402,14 @@ var $refund = obj({
|
|
|
392
402
|
expectedBy: z.string()
|
|
393
403
|
});
|
|
394
404
|
var RefundSchema = $refund;
|
|
395
|
-
var $surfaceKind = z.enum([
|
|
405
|
+
var $surfaceKind = z.enum([
|
|
406
|
+
"URL_REDIRECT",
|
|
407
|
+
"KYC_SDK",
|
|
408
|
+
"PCI_COMPONENT",
|
|
409
|
+
"PAY_SHEET",
|
|
410
|
+
"ACH_COMPONENT",
|
|
411
|
+
"AUTH_COMPONENT"
|
|
412
|
+
]);
|
|
396
413
|
var SurfaceKindSchema = $surfaceKind;
|
|
397
414
|
var $surface = obj({
|
|
398
415
|
kind: $surfaceKind,
|
|
@@ -537,6 +554,8 @@ var AuthChallengeSchema = $authChallenge;
|
|
|
537
554
|
var $quoteState = obj({
|
|
538
555
|
kind: z.literal("QUOTE"),
|
|
539
556
|
quote: $quote,
|
|
557
|
+
limits: $quoteLimits,
|
|
558
|
+
helper: z.string().optional(),
|
|
540
559
|
/** Present when the provider's component is the primary CTA, inline on the entry screen. */
|
|
541
560
|
surface: $surface.optional(),
|
|
542
561
|
error: $failureReason.optional()
|
|
@@ -550,13 +569,15 @@ var $funAuthState = obj({
|
|
|
550
569
|
var FunAuthStateSchema = $funAuthState;
|
|
551
570
|
var $sessionAuthState = obj({
|
|
552
571
|
kind: z.literal("SESSION_AUTH"),
|
|
553
|
-
channel: z.
|
|
572
|
+
channel: z.enum(["EMAIL_OTP", "SMS_OTP", "PROVIDER_RENDERED"]),
|
|
573
|
+
surface: $surface.optional(),
|
|
554
574
|
error: $failureReason.optional()
|
|
555
575
|
});
|
|
556
576
|
var SessionAuthStateSchema = $sessionAuthState;
|
|
557
577
|
var $kycCaptureState = obj({
|
|
558
578
|
kind: z.literal("KYC"),
|
|
559
579
|
phase: z.literal("CAPTURE"),
|
|
580
|
+
quote: $quote,
|
|
560
581
|
surface: $surface,
|
|
561
582
|
error: $failureReason.optional()
|
|
562
583
|
});
|
|
@@ -564,6 +585,7 @@ var KycCaptureStateSchema = $kycCaptureState;
|
|
|
564
585
|
var $kycInputRequiredState = obj({
|
|
565
586
|
kind: z.literal("KYC"),
|
|
566
587
|
phase: z.literal("INPUT_REQUIRED"),
|
|
588
|
+
quote: $quote,
|
|
567
589
|
form: $formDescriptor,
|
|
568
590
|
error: $failureReason.optional()
|
|
569
591
|
});
|
|
@@ -571,6 +593,7 @@ var KycInputRequiredStateSchema = $kycInputRequiredState;
|
|
|
571
593
|
var $kycNoActionRequiredState = obj({
|
|
572
594
|
kind: z.literal("KYC"),
|
|
573
595
|
phase: z.literal("NO_ACTION_REQUIRED"),
|
|
596
|
+
quote: $quote,
|
|
574
597
|
reason: z.enum(["IN_REVIEW", "ON_HOLD", "REJECTED"]),
|
|
575
598
|
retryAfter: z.string().optional(),
|
|
576
599
|
failureReason: $failureReason.optional(),
|
|
@@ -583,9 +606,16 @@ var $pendingOrderState = obj({
|
|
|
583
606
|
error: $failureReason.optional()
|
|
584
607
|
});
|
|
585
608
|
var PendingOrderStateSchema = $pendingOrderState;
|
|
609
|
+
var $blockedReason = z.enum([
|
|
610
|
+
"REGION_UNSUPPORTED",
|
|
611
|
+
"ASSET_UNSUPPORTED",
|
|
612
|
+
"ALL_PROVIDERS_DECLINED",
|
|
613
|
+
"AMOUNT_UNSERVABLE"
|
|
614
|
+
]);
|
|
615
|
+
var BlockedReasonSchema = $blockedReason;
|
|
586
616
|
var $blockedState = obj({
|
|
587
617
|
kind: z.literal("BLOCKED"),
|
|
588
|
-
reason:
|
|
618
|
+
reason: $blockedReason,
|
|
589
619
|
retryAfter: z.string().nullable().optional(),
|
|
590
620
|
error: $failureReason.optional()
|
|
591
621
|
});
|
|
@@ -652,6 +682,10 @@ var FIXTURE_DATA = {
|
|
|
652
682
|
"screen-01-quote": {
|
|
653
683
|
"state": {
|
|
654
684
|
"kind": "QUOTE",
|
|
685
|
+
"limits": {
|
|
686
|
+
"min": "1.00",
|
|
687
|
+
"max": "3000.00"
|
|
688
|
+
},
|
|
655
689
|
"quote": {
|
|
656
690
|
"quoteRef": "q_8f2",
|
|
657
691
|
"fiat": {
|
|
@@ -696,6 +730,10 @@ var FIXTURE_DATA = {
|
|
|
696
730
|
"screen-01b-quote-with-pay-sheet": {
|
|
697
731
|
"state": {
|
|
698
732
|
"kind": "QUOTE",
|
|
733
|
+
"limits": {
|
|
734
|
+
"min": "1.00",
|
|
735
|
+
"max": "3000.00"
|
|
736
|
+
},
|
|
699
737
|
"quote": {
|
|
700
738
|
"quoteRef": "q_8f2",
|
|
701
739
|
"fiat": {
|
|
@@ -778,45 +816,43 @@ var FIXTURE_DATA = {
|
|
|
778
816
|
"state": {
|
|
779
817
|
"kind": "KYC",
|
|
780
818
|
"phase": "INPUT_REQUIRED",
|
|
819
|
+
"quote": {
|
|
820
|
+
"quoteRef": "q_8f2",
|
|
821
|
+
"fiat": {
|
|
822
|
+
"currency": "GBP",
|
|
823
|
+
"amount": "100.00"
|
|
824
|
+
},
|
|
825
|
+
"crypto": {
|
|
826
|
+
"currency": "USDC",
|
|
827
|
+
"network": "polygon",
|
|
828
|
+
"amount": "98.41"
|
|
829
|
+
},
|
|
830
|
+
"rate": "0.9841",
|
|
831
|
+
"totalFee": "1.59",
|
|
832
|
+
"feeBreakdown": [
|
|
833
|
+
{
|
|
834
|
+
"id": "provider_fee",
|
|
835
|
+
"labelFallback": "Processing fee",
|
|
836
|
+
"amount": "1.59"
|
|
837
|
+
}
|
|
838
|
+
],
|
|
839
|
+
"paymentMethod": "bank_transfer",
|
|
840
|
+
"expiresAt": "\u2026"
|
|
841
|
+
},
|
|
781
842
|
"form": {
|
|
782
|
-
"formId": "
|
|
843
|
+
"formId": "kyc_q_8f2_1",
|
|
783
844
|
"fields": [
|
|
784
845
|
{
|
|
785
|
-
"id": "
|
|
846
|
+
"id": "tin",
|
|
786
847
|
"type": "TEXT",
|
|
787
|
-
"labelFallback": "
|
|
788
|
-
"required": true
|
|
789
|
-
},
|
|
790
|
-
{
|
|
791
|
-
"id": "dob",
|
|
792
|
-
"type": "DATE",
|
|
793
|
-
"labelFallback": "Date of birth",
|
|
848
|
+
"labelFallback": "Tax ID",
|
|
794
849
|
"required": true
|
|
795
850
|
},
|
|
796
851
|
{
|
|
797
|
-
"id": "
|
|
798
|
-
"type": "
|
|
799
|
-
"labelFallback": "
|
|
852
|
+
"id": "address",
|
|
853
|
+
"type": "TEXT",
|
|
854
|
+
"labelFallback": "Home address",
|
|
800
855
|
"required": true
|
|
801
|
-
},
|
|
802
|
-
{
|
|
803
|
-
"id": "sourceOfFunds",
|
|
804
|
-
"type": "SELECT",
|
|
805
|
-
"labelFallback": "Source of funds",
|
|
806
|
-
"required": true,
|
|
807
|
-
"options": [
|
|
808
|
-
{
|
|
809
|
-
"id": "salary",
|
|
810
|
-
"labelFallback": "Salary"
|
|
811
|
-
}
|
|
812
|
-
]
|
|
813
|
-
},
|
|
814
|
-
{
|
|
815
|
-
"id": "idProof",
|
|
816
|
-
"type": "HOSTED_LINK",
|
|
817
|
-
"labelFallback": "Verify your ID",
|
|
818
|
-
"required": true,
|
|
819
|
-
"url": "\u2026"
|
|
820
856
|
}
|
|
821
857
|
]
|
|
822
858
|
}
|
|
@@ -828,7 +864,8 @@ var FIXTURE_DATA = {
|
|
|
828
864
|
"mode": "SUBMIT",
|
|
829
865
|
"endpoint": "POST /fiat/kyc/form",
|
|
830
866
|
"params": {
|
|
831
|
-
"
|
|
867
|
+
"quoteRef": "q_8f2",
|
|
868
|
+
"formId": "kyc_q_8f2_1"
|
|
832
869
|
},
|
|
833
870
|
"inputs": {
|
|
834
871
|
"values": {
|
|
@@ -913,11 +950,84 @@ var FIXTURE_DATA = {
|
|
|
913
950
|
}
|
|
914
951
|
]
|
|
915
952
|
},
|
|
953
|
+
"screen-08-kyc-capture": {
|
|
954
|
+
"state": {
|
|
955
|
+
"kind": "KYC",
|
|
956
|
+
"phase": "CAPTURE",
|
|
957
|
+
"quote": {
|
|
958
|
+
"quoteRef": "q_8f2",
|
|
959
|
+
"fiat": {
|
|
960
|
+
"currency": "GBP",
|
|
961
|
+
"amount": "100.00"
|
|
962
|
+
},
|
|
963
|
+
"crypto": {
|
|
964
|
+
"currency": "USDC",
|
|
965
|
+
"network": "polygon",
|
|
966
|
+
"amount": "98.41"
|
|
967
|
+
},
|
|
968
|
+
"rate": "0.9841",
|
|
969
|
+
"totalFee": "1.59",
|
|
970
|
+
"feeBreakdown": [
|
|
971
|
+
{
|
|
972
|
+
"id": "provider_fee",
|
|
973
|
+
"labelFallback": "Processing fee",
|
|
974
|
+
"amount": "1.59"
|
|
975
|
+
}
|
|
976
|
+
],
|
|
977
|
+
"paymentMethod": "bank_transfer",
|
|
978
|
+
"expiresAt": "\u2026"
|
|
979
|
+
},
|
|
980
|
+
"surface": {
|
|
981
|
+
"kind": "KYC_SDK",
|
|
982
|
+
"provider": "SUMSUB",
|
|
983
|
+
"params": {
|
|
984
|
+
"accessToken": "eyJ\u2026"
|
|
985
|
+
},
|
|
986
|
+
"expiresAt": "\u2026"
|
|
987
|
+
}
|
|
988
|
+
},
|
|
989
|
+
"provider": "TRANSAK",
|
|
990
|
+
"transitions": [
|
|
991
|
+
{
|
|
992
|
+
"id": "capture",
|
|
993
|
+
"mode": "CLIENT_SURFACE",
|
|
994
|
+
"report": {
|
|
995
|
+
"endpoint": "POST /fiat/kyc/capture",
|
|
996
|
+
"params": {
|
|
997
|
+
"quoteRef": "q_8f2"
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
]
|
|
1002
|
+
},
|
|
916
1003
|
"screen-09-kyc-in-review": {
|
|
917
1004
|
"state": {
|
|
918
1005
|
"kind": "KYC",
|
|
919
1006
|
"phase": "NO_ACTION_REQUIRED",
|
|
920
|
-
"reason": "IN_REVIEW"
|
|
1007
|
+
"reason": "IN_REVIEW",
|
|
1008
|
+
"quote": {
|
|
1009
|
+
"quoteRef": "q_8f2",
|
|
1010
|
+
"fiat": {
|
|
1011
|
+
"currency": "GBP",
|
|
1012
|
+
"amount": "100.00"
|
|
1013
|
+
},
|
|
1014
|
+
"crypto": {
|
|
1015
|
+
"currency": "USDC",
|
|
1016
|
+
"network": "polygon",
|
|
1017
|
+
"amount": "98.41"
|
|
1018
|
+
},
|
|
1019
|
+
"rate": "0.9841",
|
|
1020
|
+
"totalFee": "1.59",
|
|
1021
|
+
"feeBreakdown": [
|
|
1022
|
+
{
|
|
1023
|
+
"id": "provider_fee",
|
|
1024
|
+
"labelFallback": "Processing fee",
|
|
1025
|
+
"amount": "1.59"
|
|
1026
|
+
}
|
|
1027
|
+
],
|
|
1028
|
+
"paymentMethod": "bank_transfer",
|
|
1029
|
+
"expiresAt": "\u2026"
|
|
1030
|
+
}
|
|
921
1031
|
},
|
|
922
1032
|
"provider": "TRANSAK",
|
|
923
1033
|
"transitions": [
|
|
@@ -925,10 +1035,7 @@ var FIXTURE_DATA = {
|
|
|
925
1035
|
"id": "poll",
|
|
926
1036
|
"mode": "AWAIT",
|
|
927
1037
|
"poll": {
|
|
928
|
-
"endpoint": "GET /fiat/
|
|
929
|
-
"params": {
|
|
930
|
-
"quoteRef": "q_8f2"
|
|
931
|
-
},
|
|
1038
|
+
"endpoint": "GET /fiat/quotes/q_8f2",
|
|
932
1039
|
"intervalMs": 3e3,
|
|
933
1040
|
"backoffFactor": 1.5,
|
|
934
1041
|
"maxIntervalMs": 1e4,
|
|
@@ -942,28 +1049,70 @@ var FIXTURE_DATA = {
|
|
|
942
1049
|
"kind": "KYC",
|
|
943
1050
|
"phase": "NO_ACTION_REQUIRED",
|
|
944
1051
|
"reason": "ON_HOLD",
|
|
945
|
-
"retryAfter": "2026-08-20T09:00:00Z"
|
|
1052
|
+
"retryAfter": "2026-08-20T09:00:00Z",
|
|
1053
|
+
"quote": {
|
|
1054
|
+
"quoteRef": "q_8f2",
|
|
1055
|
+
"fiat": {
|
|
1056
|
+
"currency": "GBP",
|
|
1057
|
+
"amount": "100.00"
|
|
1058
|
+
},
|
|
1059
|
+
"crypto": {
|
|
1060
|
+
"currency": "USDC",
|
|
1061
|
+
"network": "polygon",
|
|
1062
|
+
"amount": "98.41"
|
|
1063
|
+
},
|
|
1064
|
+
"rate": "0.9841",
|
|
1065
|
+
"totalFee": "1.59",
|
|
1066
|
+
"feeBreakdown": [
|
|
1067
|
+
{
|
|
1068
|
+
"id": "provider_fee",
|
|
1069
|
+
"labelFallback": "Processing fee",
|
|
1070
|
+
"amount": "1.59"
|
|
1071
|
+
}
|
|
1072
|
+
],
|
|
1073
|
+
"paymentMethod": "bank_transfer",
|
|
1074
|
+
"expiresAt": "\u2026"
|
|
1075
|
+
}
|
|
946
1076
|
},
|
|
947
1077
|
"provider": "TRANSAK",
|
|
948
1078
|
"transitions": []
|
|
949
1079
|
},
|
|
950
|
-
"screen-11-kyc-rejected
|
|
1080
|
+
"screen-11-kyc-rejected": {
|
|
951
1081
|
"state": {
|
|
952
1082
|
"kind": "KYC",
|
|
953
1083
|
"phase": "NO_ACTION_REQUIRED",
|
|
954
|
-
"reason": "REJECTED"
|
|
1084
|
+
"reason": "REJECTED",
|
|
1085
|
+
"quote": {
|
|
1086
|
+
"quoteRef": "q_8f2",
|
|
1087
|
+
"fiat": {
|
|
1088
|
+
"currency": "GBP",
|
|
1089
|
+
"amount": "100.00"
|
|
1090
|
+
},
|
|
1091
|
+
"crypto": {
|
|
1092
|
+
"currency": "USDC",
|
|
1093
|
+
"network": "polygon",
|
|
1094
|
+
"amount": "98.41"
|
|
1095
|
+
},
|
|
1096
|
+
"rate": "0.9841",
|
|
1097
|
+
"totalFee": "1.59",
|
|
1098
|
+
"feeBreakdown": [
|
|
1099
|
+
{
|
|
1100
|
+
"id": "provider_fee",
|
|
1101
|
+
"labelFallback": "Processing fee",
|
|
1102
|
+
"amount": "1.59"
|
|
1103
|
+
}
|
|
1104
|
+
],
|
|
1105
|
+
"paymentMethod": "bank_transfer",
|
|
1106
|
+
"expiresAt": "\u2026"
|
|
1107
|
+
},
|
|
1108
|
+
"failureReason": {
|
|
1109
|
+
"category": "KYC_REJECTED",
|
|
1110
|
+
"retryable": false,
|
|
1111
|
+
"recovery": "CONTACT_SUPPORT"
|
|
1112
|
+
}
|
|
955
1113
|
},
|
|
956
1114
|
"provider": "TRANSAK",
|
|
957
|
-
"transitions": [
|
|
958
|
-
{
|
|
959
|
-
"id": "escalate",
|
|
960
|
-
"mode": "SUBMIT",
|
|
961
|
-
"endpoint": "GET /fiat/kyc",
|
|
962
|
-
"params": {
|
|
963
|
-
"tier": "escalated"
|
|
964
|
-
}
|
|
965
|
-
}
|
|
966
|
-
]
|
|
1115
|
+
"transitions": []
|
|
967
1116
|
},
|
|
968
1117
|
"screen-12-pending-order": {
|
|
969
1118
|
"state": {
|
|
@@ -1096,6 +1245,10 @@ var FIXTURE_DATA = {
|
|
|
1096
1245
|
"worked-example-01-quote": {
|
|
1097
1246
|
"state": {
|
|
1098
1247
|
"kind": "QUOTE",
|
|
1248
|
+
"limits": {
|
|
1249
|
+
"min": "1.00",
|
|
1250
|
+
"max": "3000.00"
|
|
1251
|
+
},
|
|
1099
1252
|
"quote": {
|
|
1100
1253
|
"quoteRef": "q_8f2",
|
|
1101
1254
|
"fiat": {
|
|
@@ -1241,8 +1394,8 @@ var FIXTURES = [
|
|
|
1241
1394
|
{
|
|
1242
1395
|
id: "screen-03-kyc-input-required",
|
|
1243
1396
|
file: "screen-03-kyc-input-required.json",
|
|
1244
|
-
source: "
|
|
1245
|
-
docRef: "
|
|
1397
|
+
source: "KYC_DOC",
|
|
1398
|
+
docRef: "Fiat KYC \xB7 L1 input round",
|
|
1246
1399
|
screen: 3,
|
|
1247
1400
|
stateKey: "KYC/INPUT_REQUIRED",
|
|
1248
1401
|
notes: ["Carries the FORM_VALUES input spec \u2014 the no-double-carry case of the accepted split."]
|
|
@@ -1270,34 +1423,40 @@ var FIXTURES = [
|
|
|
1270
1423
|
"TODO(open-decision): report target per card topology is a Transak ask (contract Flow A)."
|
|
1271
1424
|
]
|
|
1272
1425
|
},
|
|
1426
|
+
{
|
|
1427
|
+
id: "screen-08-kyc-capture",
|
|
1428
|
+
file: "screen-08-kyc-capture.json",
|
|
1429
|
+
source: "KYC_DOC",
|
|
1430
|
+
docRef: "Fiat KYC \xB7 embedded Sumsub WebSDK",
|
|
1431
|
+
screen: 8,
|
|
1432
|
+
stateKey: "KYC/CAPTURE",
|
|
1433
|
+
notes: ["The client mounts the Sumsub adapter; no URL or iframe is emitted."]
|
|
1434
|
+
},
|
|
1273
1435
|
{
|
|
1274
1436
|
id: "screen-09-kyc-in-review",
|
|
1275
1437
|
file: "screen-09-kyc-in-review.json",
|
|
1276
|
-
source: "
|
|
1277
|
-
docRef: "
|
|
1438
|
+
source: "KYC_DOC",
|
|
1439
|
+
docRef: "Fiat KYC \xB7 pending quote",
|
|
1278
1440
|
screen: 9,
|
|
1279
1441
|
stateKey: "KYC/NO_ACTION_REQUIRED:IN_REVIEW"
|
|
1280
1442
|
},
|
|
1281
1443
|
{
|
|
1282
1444
|
id: "screen-10-kyc-on-hold",
|
|
1283
1445
|
file: "screen-10-kyc-on-hold.json",
|
|
1284
|
-
source: "
|
|
1285
|
-
docRef: "
|
|
1446
|
+
source: "KYC_DOC",
|
|
1447
|
+
docRef: "Fiat KYC \xB7 verification on hold",
|
|
1286
1448
|
screen: 10,
|
|
1287
1449
|
stateKey: "KYC/NO_ACTION_REQUIRED:ON_HOLD",
|
|
1288
1450
|
notes: ["transitions: [] and NOT terminal \u2014 the fixture that proves terminality is table data."]
|
|
1289
1451
|
},
|
|
1290
1452
|
{
|
|
1291
|
-
id: "screen-11-kyc-rejected
|
|
1292
|
-
file: "screen-11-kyc-rejected
|
|
1293
|
-
source: "
|
|
1294
|
-
docRef: "
|
|
1453
|
+
id: "screen-11-kyc-rejected",
|
|
1454
|
+
file: "screen-11-kyc-rejected.json",
|
|
1455
|
+
source: "KYC_DOC",
|
|
1456
|
+
docRef: "Fiat KYC \xB7 non-retryable rejection",
|
|
1295
1457
|
screen: 11,
|
|
1296
1458
|
stateKey: "KYC/NO_ACTION_REQUIRED:REJECTED",
|
|
1297
|
-
notes: [
|
|
1298
|
-
"TODO(open-decision): the escalation transition is a flagged placeholder \u2014 a GET carrying params is not a real request shape (FE doc Screen 11 + open question 7).",
|
|
1299
|
-
"The terminal REJECTED variant (failureReason + transitions []) is described in prose, not published as JSON \u2014 no fixture."
|
|
1300
|
-
]
|
|
1459
|
+
notes: ["Only an explicit non-retryable provider or identity-vendor outcome reaches this state."]
|
|
1301
1460
|
},
|
|
1302
1461
|
{
|
|
1303
1462
|
id: "screen-12-pending-order",
|
|
@@ -1342,7 +1501,7 @@ var FIXTURES = [
|
|
|
1342
1501
|
docRef: "Screen 16 \xB7 Not available",
|
|
1343
1502
|
screen: 16,
|
|
1344
1503
|
stateKey: "BLOCKED",
|
|
1345
|
-
notes: ["
|
|
1504
|
+
notes: ["A flatly terminal availability state; explicit non-retryable KYC rejection is terminal too."]
|
|
1346
1505
|
},
|
|
1347
1506
|
{
|
|
1348
1507
|
id: "worked-example-01-quote",
|
|
@@ -1374,10 +1533,6 @@ var FIXTURE_COVERAGE_GAPS = [
|
|
|
1374
1533
|
{
|
|
1375
1534
|
stateKey: "FUN_AUTH",
|
|
1376
1535
|
reason: "No step response exists in either doc \u2014 shape owned by the auth spike, and FUN_AUTH never renders in fomo. TODO(open-decision): contract \xA7Auth & ref binding, item 5."
|
|
1377
|
-
},
|
|
1378
|
-
{
|
|
1379
|
-
stateKey: "KYC/CAPTURE",
|
|
1380
|
-
reason: "Dropped from v1 (FE Screen 8 tombstone, no UK module coverage); no step response was ever published. Kind retained as handshake-gated vocabulary."
|
|
1381
1536
|
}
|
|
1382
1537
|
];
|
|
1383
1538
|
var fixtureMeta = (id) => {
|
|
@@ -1536,6 +1691,7 @@ function assertAllFixtures() {
|
|
|
1536
1691
|
}
|
|
1537
1692
|
export {
|
|
1538
1693
|
AuthChallengeSchema,
|
|
1694
|
+
BlockedReasonSchema,
|
|
1539
1695
|
BlockedStateSchema,
|
|
1540
1696
|
COUNTRY_NAMES,
|
|
1541
1697
|
COUNTRY_TO_CURRENCY,
|
|
@@ -1580,6 +1736,7 @@ export {
|
|
|
1580
1736
|
PaymentInstructStateSchema,
|
|
1581
1737
|
PendingOrderStateSchema,
|
|
1582
1738
|
PollSpecSchema,
|
|
1739
|
+
QuoteLimitsSchema,
|
|
1583
1740
|
QuoteSchema,
|
|
1584
1741
|
QuoteStateSchema,
|
|
1585
1742
|
RecoverySchema,
|
package/dist/schemas.d.ts
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* They are module-private, so none of it reaches the published declarations.
|
|
28
28
|
*/
|
|
29
29
|
import { z } from 'zod';
|
|
30
|
-
import type { CryptoAmount, FailureReason, FeeLine, FiatEndpoint, FieldSpec, FlowState, FormDescriptor, FormField, FormFieldType, Instructions, InstructionField, Instrument, JsonValue, FiatAmount, OrderRef, OrderStatus, OrderSummary, PollSpec, FiatProvider, Quote, Recovery, Refund, ReportSpec, SelectOption, StatusHistoryEntry, FiatStepResponse, Surface, SurfaceKind, SurfaceProvider, KYCProvider, Transition, TransitionInputs, TransitionParams, Tx } from './types';
|
|
30
|
+
import type { BlockedReason, CryptoAmount, FailureReason, FeeLine, FiatEndpoint, FieldSpec, FlowState, FormDescriptor, FormField, FormFieldType, Instructions, InstructionField, Instrument, JsonValue, FiatAmount, OrderRef, OrderStatus, OrderSummary, PollSpec, FiatProvider, Quote, QuoteLimits, Recovery, Refund, ReportSpec, SelectOption, StatusHistoryEntry, FiatStepResponse, Surface, SurfaceKind, SurfaceProvider, KYCProvider, Transition, TransitionInputs, TransitionParams, Tx } from './types';
|
|
31
31
|
export declare const JsonSchema: z.ZodType<JsonValue>;
|
|
32
32
|
export declare const HTTP_VERBS: readonly ["GET", "POST"];
|
|
33
33
|
/** `"POST /fiat/session/verify"`, `"GET /fiat/orders/o_31c"` — the verb rides the string. */
|
|
@@ -43,6 +43,7 @@ export declare const FiatAmountSchema: z.ZodType<FiatAmount>;
|
|
|
43
43
|
export declare const CryptoAmountSchema: z.ZodType<CryptoAmount>;
|
|
44
44
|
export declare const FeeLineSchema: z.ZodType<FeeLine>;
|
|
45
45
|
export declare const QuoteSchema: z.ZodType<Quote>;
|
|
46
|
+
export declare const QuoteLimitsSchema: z.ZodType<QuoteLimits>;
|
|
46
47
|
export declare const InstrumentSchema: z.ZodType<Instrument>;
|
|
47
48
|
export declare const OrderRefSchema: z.ZodType<OrderRef>;
|
|
48
49
|
export declare const OrderSummarySchema: z.ZodType<OrderSummary>;
|
|
@@ -84,6 +85,7 @@ export declare const KycCaptureStateSchema: z.ZodType<State<'KYC', 'CAPTURE'>>;
|
|
|
84
85
|
export declare const KycInputRequiredStateSchema: z.ZodType<State<'KYC', 'INPUT_REQUIRED'>>;
|
|
85
86
|
export declare const KycNoActionRequiredStateSchema: z.ZodType<State<'KYC', 'NO_ACTION_REQUIRED'>>;
|
|
86
87
|
export declare const PendingOrderStateSchema: z.ZodType<State<'PENDING_ORDER'>>;
|
|
88
|
+
export declare const BlockedReasonSchema: z.ZodType<BlockedReason>;
|
|
87
89
|
export declare const BlockedStateSchema: z.ZodType<State<'BLOCKED'>>;
|
|
88
90
|
export declare const PaymentCaptureStateSchema: z.ZodType<State<'PAYMENT', 'CAPTURE'>>;
|
|
89
91
|
export declare const PaymentInstructStateSchema: z.ZodType<State<'PAYMENT', 'INSTRUCT'>>;
|
package/dist/table.d.ts
CHANGED
|
@@ -42,8 +42,7 @@ export type StateKey = 'QUOTE' | 'FUN_AUTH' | 'SESSION_AUTH' | 'KYC/CAPTURE' | '
|
|
|
42
42
|
export declare const TERMINAL_ORDER_STATUSES: readonly ["SETTLED", "EXPIRED", "CANCELLED", "FAILED", "REFUNDED"];
|
|
43
43
|
export type TerminalOrderStatus = (typeof TERMINAL_ORDER_STATUSES)[number];
|
|
44
44
|
/**
|
|
45
|
-
* Endpoint template as written in the docs
|
|
46
|
-
* `"POST /fiat/orders/:id/cancel"` matches the emitted `"POST /fiat/orders/o_31c/cancel"`.
|
|
45
|
+
* Endpoint template as written in the docs. Named `:` segments match one emitted path segment.
|
|
47
46
|
*/
|
|
48
47
|
export type EndpointTemplate = FiatEndpoint;
|
|
49
48
|
export interface AllowedTransition {
|
|
@@ -91,7 +90,7 @@ export declare const STATE_KEYS: StateKey[];
|
|
|
91
90
|
* named by the table (QUOTE's capture-first entry) while the doc's endpoint table still lists no
|
|
92
91
|
* session-minting call for that rail.
|
|
93
92
|
*/
|
|
94
|
-
export declare const DOCUMENTED_ENDPOINTS: readonly ["GET /fiat/payment-methods", "POST /fiat/quote", "POST /fiat/auth", "POST /fiat/payment-session", "POST /fiat/session", "POST /fiat/session/verify", "GET /fiat/
|
|
93
|
+
export declare const DOCUMENTED_ENDPOINTS: readonly ["GET /fiat/payment-methods", "POST /fiat/quote", "POST /fiat/auth", "POST /fiat/payment-session", "POST /fiat/session", "POST /fiat/session/verify", "GET /fiat/quotes/:quoteRef", "POST /fiat/kyc/form", "POST /fiat/kyc/capture", "POST /fiat/kyc/sdk-token", "POST /fiat/kyc/document", "POST /fiat/instruments", "POST /fiat/orders", "GET /fiat/orders/:id", "GET /fiat/orders/:id/instructions", "POST /fiat/orders/:id/confirm-payment", "POST /fiat/orders/:id/reference", "POST /fiat/orders/:id/cancel", "POST /fiat/orders/:id/surface-result"];
|
|
95
94
|
/**
|
|
96
95
|
* Documented endpoints no flow state offers, and why. Declared so an endpoint nothing can reach is
|
|
97
96
|
* visible instead of silent — the table test asserts the unoffered set equals exactly these.
|