@fun-xyz/fiat-contract 0.22.2 → 0.24.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/index.js CHANGED
@@ -42,7 +42,14 @@ __export(index_exports, {
42
42
  FiatAmountSchema: () => FiatAmountSchema,
43
43
  FiatCurrencyCode: () => FiatCurrencyCode,
44
44
  FiatEndpointSchema: () => FiatEndpointSchema,
45
+ FiatGeoSchema: () => FiatGeoSchema,
46
+ FiatNextRequestSchema: () => FiatNextRequestSchema,
45
47
  FiatProviderSchema: () => FiatProviderSchema,
48
+ FiatRoutingQuoteErrorBodySchema: () => FiatRoutingQuoteErrorBodySchema,
49
+ FiatRoutingQuoteRequestSchema: () => FiatRoutingQuoteRequestSchema,
50
+ FiatRoutingTableErrorBodySchema: () => FiatRoutingTableErrorBodySchema,
51
+ FiatRoutingTableQuerySchema: () => FiatRoutingTableQuerySchema,
52
+ FiatRoutingTableResponseSchema: () => FiatRoutingTableResponseSchema,
46
53
  FiatStepResponseSchema: () => FiatStepResponseSchema,
47
54
  FiatTermsErrorBodySchema: () => FiatTermsErrorBodySchema,
48
55
  FiatTermsRequestSchema: () => FiatTermsRequestSchema,
@@ -67,14 +74,28 @@ __export(index_exports, {
67
74
  KycSdkResultReportSchema: () => KycSdkResultReportSchema,
68
75
  MOONPAY_ENDPOINTS: () => MOONPAY_ENDPOINTS,
69
76
  MoonPayCheckoutSchema: () => MoonPayCheckoutSchema,
77
+ MoonPayConnectPromptSchema: () => MoonPayConnectPromptSchema,
78
+ MoonPayConnectRequestSchema: () => MoonPayConnectRequestSchema,
79
+ MoonPayConsentPromptSchema: () => MoonPayConsentPromptSchema,
80
+ MoonPayConsentRequestSchema: () => MoonPayConsentRequestSchema,
81
+ MoonPayDoneSchema: () => MoonPayDoneSchema,
70
82
  MoonPayErrorBodySchema: () => MoonPayErrorBodySchema,
71
83
  MoonPayFaultSchema: () => MoonPayFaultSchema,
72
- MoonPayIntentRequestSchema: () => MoonPayIntentRequestSchema,
73
- MoonPayIntentResponseSchema: () => MoonPayIntentResponseSchema,
84
+ MoonPayKycPromptSchema: () => MoonPayKycPromptSchema,
85
+ MoonPayKycRequestSchema: () => MoonPayKycRequestSchema,
86
+ MoonPayNextRequestSchema: () => MoonPayNextRequestSchema,
87
+ MoonPayObserveRequestSchema: () => MoonPayObserveRequestSchema,
88
+ MoonPayOrderPromptSchema: () => MoonPayOrderPromptSchema,
89
+ MoonPayOrderRequestSchema: () => MoonPayOrderRequestSchema,
74
90
  MoonPayOrderResponseSchema: () => MoonPayOrderResponseSchema,
91
+ MoonPayPromptSchema: () => MoonPayPromptSchema,
75
92
  MoonPayQuoteInputSchema: () => MoonPayQuoteInputSchema,
93
+ MoonPayRequestContextSchema: () => MoonPayRequestContextSchema,
94
+ MoonPayRequestSchema: () => MoonPayRequestSchema,
95
+ MoonPayResponseSchemaFor: () => MoonPayResponseSchemaFor,
76
96
  MoonPaySdkCredentialsSchema: () => MoonPaySdkCredentialsSchema,
77
97
  MoonPayStepResponseSchema: () => MoonPayStepResponseSchema,
98
+ MoonPayWaitPromptSchema: () => MoonPayWaitPromptSchema,
78
99
  OrderAwaitingConfirmationStateSchema: () => OrderAwaitingConfirmationStateSchema,
79
100
  OrderCreatedStateSchema: () => OrderCreatedStateSchema,
80
101
  OrderRefSchema: () => OrderRefSchema,
@@ -94,6 +115,7 @@ __export(index_exports, {
94
115
  QuoteLimitsSchema: () => QuoteLimitsSchema,
95
116
  QuoteSchema: () => QuoteSchema,
96
117
  QuoteStateSchema: () => QuoteStateSchema,
118
+ ROUTING_ENDPOINTS: () => ROUTING_ENDPOINTS,
97
119
  RecoverySchema: () => RecoverySchema,
98
120
  RefundSchema: () => RefundSchema,
99
121
  ReportSpecSchema: () => ReportSpecSchema,
@@ -975,6 +997,8 @@ var $providerBoundFlowState = import_zod.z.union([
975
997
  var $flowState = import_zod.z.union([$providerBoundFlowState, $blockedState]);
976
998
  var FlowStateSchema = $flowState;
977
999
  var $nonBlank = import_zod.z.string().refine((value) => value.trim().length > 0, "must not be blank");
1000
+ var $isoInstant = import_zod.z.string().datetime({ offset: true });
1001
+ var $errorBodyFields = { errorMsg: import_zod.z.string(), reqId: import_zod.z.string().optional() };
978
1002
  var $termsStage = import_zod.z.enum(["CHECKOUT", "KYC"]);
979
1003
  var $termsDocument = obj({
980
1004
  id: $nonBlank,
@@ -990,7 +1014,7 @@ var $termsAcceptance = obj({
990
1014
  documentId: $nonBlank,
991
1015
  version: $nonBlank,
992
1016
  contentDigest: $nonBlank,
993
- acceptedAt: import_zod.z.string().datetime({ offset: true })
1017
+ acceptedAt: $isoInstant
994
1018
  });
995
1019
  var TermsDocumentAcceptanceSchema = $termsAcceptance;
996
1020
  var $termsRequest = obj({
@@ -1002,12 +1026,121 @@ var $termsResponse = obj({ recorded: import_zod.z.array($nonBlank) });
1002
1026
  var FiatTermsResponseSchema = $termsResponse;
1003
1027
  var $termsErrorBody = obj({
1004
1028
  errorCode: $nonBlank,
1005
- errorMsg: import_zod.z.string(),
1006
- reqId: import_zod.z.string().optional(),
1029
+ ...$errorBodyFields,
1007
1030
  reason: import_zod.z.enum(["STALE_TERMS", "INVALID_REQUEST", "RATE_LIMITED", "PROVIDER_UNAVAILABLE"]),
1008
1031
  recovery: import_zod.z.enum(["RETRY", "REQUOTE", "NONE"])
1009
1032
  });
1010
1033
  var FiatTermsErrorBodySchema = $termsErrorBody;
1034
+ var $decimalAmount = import_zod.z.string().regex(/^(?:0|[1-9]\d*)(?:\.\d+)?$/, "must be a decimal string");
1035
+ var compareDecimals = (left, right) => {
1036
+ const [leftWhole = "", leftFraction = ""] = left.split(".");
1037
+ const [rightWhole = "", rightFraction = ""] = right.split(".");
1038
+ if (leftWhole.length !== rightWhole.length) return leftWhole.length - rightWhole.length;
1039
+ const width = Math.max(leftFraction.length, rightFraction.length);
1040
+ const leftDigits = leftWhole + leftFraction.padEnd(width, "0");
1041
+ const rightDigits = rightWhole + rightFraction.padEnd(width, "0");
1042
+ return leftDigits < rightDigits ? -1 : leftDigits > rightDigits ? 1 : 0;
1043
+ };
1044
+ var $countryCode = import_zod.z.enum(Object.keys(CountryCode));
1045
+ var $routingProvider = $provider.extract(["TRANSAK", "BANXA", "MOONPAY", "STRIPE", "COINBASE"]);
1046
+ var $optionalGeoField = import_zod.z.union([$nonBlank, import_zod.z.literal("")]).optional();
1047
+ var US_REGION_REQUIRED = "a US buyer needs a US state code as region";
1048
+ var hasUsRegion = (country, region) => country !== "US" || UsStateCodeSchema.safeParse(region).success;
1049
+ var $routingTableQuery = obj({
1050
+ fiatCurrencyCode: import_zod.z.enum(FIAT_CURRENCY_CODES).optional(),
1051
+ cryptoCurrencyCode: $nonBlank,
1052
+ chainId: $nonBlank,
1053
+ country: $countryCode,
1054
+ region: $optionalGeoField,
1055
+ methods: import_zod.z.string().refine(
1056
+ (methods) => methods.split(",").every((method) => PAYMENT_METHOD_CATEGORIES.includes(method.trim())),
1057
+ "must be comma-separated payment method categories"
1058
+ )
1059
+ }).refine((query) => hasUsRegion(query.country, query.region), { message: US_REGION_REQUIRED, path: ["region"] });
1060
+ var FiatRoutingTableQuerySchema = $routingTableQuery;
1061
+ var $routingTableProvider = obj({
1062
+ provider: $routingProvider,
1063
+ next: import_zod.z.enum(["READY", "AUTH", "DECLARATIVE_KYC", "DOCUMENTARY_KYC", "PENDING_REVIEW"]),
1064
+ visibility: import_zod.z.enum(["COMPLETE", "PARTIAL", "AUTH_GATED"])
1065
+ });
1066
+ var $routingTableInterval = obj({
1067
+ min: $decimalAmount,
1068
+ max: $decimalAmount,
1069
+ providers: import_zod.z.array($routingTableProvider).min(1).refine((providers) => hasUniqueIds(providers.map((entry) => entry.provider)), "each provider is listed once")
1070
+ }).refine((interval) => compareDecimals(interval.min, interval.max) <= 0, { message: "min must not exceed max", path: ["max"] });
1071
+ var $routingTableMethod = obj({
1072
+ method: import_zod.z.enum(PAYMENT_METHOD_CATEGORIES),
1073
+ unavailableReason: import_zod.z.enum(["USER_LIMIT", "KYC_REJECTED", "PROVIDER_OUTAGE", "NOT_SERVED"]).optional(),
1074
+ intervals: import_zod.z.array($routingTableInterval).superRefine((intervals, context) => {
1075
+ intervals.forEach((interval, index) => {
1076
+ const previous = intervals[index - 1];
1077
+ if (previous !== void 0 && compareDecimals(interval.min, previous.max) <= 0) {
1078
+ context.addIssue({ code: "custom", path: [index, "min"], message: "intervals are sorted and do not overlap" });
1079
+ }
1080
+ });
1081
+ })
1082
+ }).refine((method) => method.unavailableReason === void 0 || method.intervals.length === 0, {
1083
+ message: "unavailableReason only with no interval",
1084
+ path: ["unavailableReason"]
1085
+ });
1086
+ var $routingTableResponse = obj({
1087
+ expiresAt: $isoInstant,
1088
+ methods: import_zod.z.array($routingTableMethod).refine((methods) => hasUniqueIds(methods.map((entry) => entry.method)), "each method is listed once")
1089
+ });
1090
+ var FiatRoutingTableResponseSchema = $routingTableResponse;
1091
+ var $routingQuoteRequest = obj({
1092
+ provider: $routingProvider,
1093
+ fiatCurrency: import_zod.z.enum(FIAT_CURRENCY_CODES),
1094
+ fiatAmount: $decimalAmount.refine((amount) => Number(amount) > 0, "must be positive"),
1095
+ cryptoCurrencyCode: $nonBlank,
1096
+ chainId: $nonBlank,
1097
+ paymentMethodId: import_zod.z.enum(PAYMENT_METHOD_CATEGORIES),
1098
+ geo: obj({ alpha2: $countryCode, region: $optionalGeoField, ip: $optionalGeoField, city: import_zod.z.string().optional() }).refine(
1099
+ (geo) => hasUsRegion(geo.alpha2, geo.region),
1100
+ { message: US_REGION_REQUIRED, path: ["region"] }
1101
+ ),
1102
+ prepareSessionAuth: import_zod.z.boolean().optional()
1103
+ });
1104
+ var FiatRoutingQuoteRequestSchema = $routingQuoteRequest;
1105
+ var $routingServiceableRange = obj({ min: $money, max: $money, userMax: $money.nullable().optional() });
1106
+ var $noRouteFields = {
1107
+ ...$errorBodyFields,
1108
+ errorCode: import_zod.z.literal("FiatNoRouteError"),
1109
+ serviceableRanges: import_zod.z.array($routingServiceableRange),
1110
+ retryable: import_zod.z.boolean()
1111
+ };
1112
+ var $routingNoRouteErrorBody = import_zod.z.union([
1113
+ obj({ ...$noRouteFields, reason: import_zod.z.enum(["NO_CANDIDATE", "PROVIDER_DECLINED", "PROVIDER_OUTAGE", "KYC_REJECTED"]) }),
1114
+ obj({ ...$noRouteFields, reason: import_zod.z.literal("USER_LIMIT"), code: import_zod.z.literal("LIMITS_EXCEEDED"), recovery: import_zod.z.literal("REQUOTE") })
1115
+ ]);
1116
+ var $amountErrorFields = { ...$errorBodyFields, fiatCurrencyCode: import_zod.z.enum(FIAT_CURRENCY_CODES) };
1117
+ var $routingAmountErrorBody = import_zod.z.union([
1118
+ obj({ ...$amountErrorFields, errorCode: import_zod.z.literal("FiatAmountBelowMinimumError"), minFiatAmount: $decimalAmount }),
1119
+ obj({ ...$amountErrorFields, errorCode: import_zod.z.literal("FiatAmountAboveMaximumError"), maxFiatAmount: $decimalAmount })
1120
+ ]);
1121
+ var $routingRateLimitedErrorBody = obj({
1122
+ ...$errorBodyFields,
1123
+ errorCode: import_zod.z.literal("TooManyRequestsError"),
1124
+ retryAfterSeconds: import_zod.z.number().int().positive().optional()
1125
+ });
1126
+ var ROUTING_ERROR_CODES = [
1127
+ "FiatNoRouteError",
1128
+ "FiatAmountBelowMinimumError",
1129
+ "FiatAmountAboveMaximumError",
1130
+ "TooManyRequestsError"
1131
+ ];
1132
+ var $routingFaultErrorBody = obj({
1133
+ ...$errorBodyFields,
1134
+ errorCode: $nonBlank.refine((code) => !ROUTING_ERROR_CODES.includes(code), "this errorCode carries its own fields")
1135
+ });
1136
+ var $routingTableErrorBody = import_zod.z.union([$routingRateLimitedErrorBody, $routingFaultErrorBody]);
1137
+ var FiatRoutingTableErrorBodySchema = $routingTableErrorBody;
1138
+ var $routingQuoteErrorBody = import_zod.z.union([$routingNoRouteErrorBody, $routingAmountErrorBody, $routingFaultErrorBody]);
1139
+ var FiatRoutingQuoteErrorBodySchema = $routingQuoteErrorBody;
1140
+ var $fiatGeo = obj({ alpha2: import_zod.z.string().regex(/^[A-Z]{2}$/), region: $nonBlank.optional(), ip: $nonBlank.optional() });
1141
+ var FiatGeoSchema = $fiatGeo;
1142
+ var $nextRequest = import_zod.z.object({ provider: $provider, action: $nonBlank, geo: $fiatGeo }).catchall(import_zod.z.unknown());
1143
+ var FiatNextRequestSchema = $nextRequest;
1011
1144
  var $providerBoundStepResponse = obj({
1012
1145
  state: $providerBoundFlowState,
1013
1146
  provider: $provider,
@@ -1067,7 +1200,7 @@ var $stepResponse = import_zod.z.union([$providerBoundStepResponse, $blockedStep
1067
1200
  var FiatStepResponseSchema = $stepResponse;
1068
1201
 
1069
1202
  // package.json
1070
- var version = "0.22.2";
1203
+ var version = "0.24.0";
1071
1204
 
1072
1205
  // src/table.ts
1073
1206
  var TABLE_VERSION = version;
@@ -2670,9 +2803,16 @@ var FUN_KYC_CONSENT_DOCUMENTS = {
2670
2803
  };
2671
2804
  var PUBLISHED_TERMS_DOCUMENTS = [MOONPAY_TERMS, ...Object.values(FUN_KYC_CONSENT_DOCUMENTS)];
2672
2805
 
2806
+ // src/routing.ts
2807
+ var ROUTING_ENDPOINTS = {
2808
+ table: "GET /fiat/routing/table",
2809
+ /** Temporary: `POST /fiat/next` replaces it for each provider that moves there. */
2810
+ quote: "POST /fiat/routing/quote"
2811
+ };
2812
+
2673
2813
  // src/providers/moonpay.ts
2674
2814
  var MOONPAY_ENDPOINTS = {
2675
- intent: "POST /fiat/providers/moonpay/intent"
2815
+ next: "POST /fiat/next"
2676
2816
  };
2677
2817
 
2678
2818
  // src/providers/moonpay.schemas.ts
@@ -2681,33 +2821,17 @@ var FIAT_CURRENCY_CODES2 = Object.keys(FIAT_CURRENCY_NAMES);
2681
2821
  var obj2 = (shape) => import_zod2.z.object(shape).strict();
2682
2822
  var $nonEmpty = import_zod2.z.string().refine((value) => value.trim().length > 0, "must not be blank");
2683
2823
  var hasUniqueIds2 = (ids) => new Set(ids).size === ids.length;
2684
- var $geo = obj2({ alpha2: import_zod2.z.string().regex(/^[A-Z]{2}$/), region: $nonEmpty.optional(), ip: $nonEmpty.optional() });
2685
2824
  var $checkout = obj2({
2686
2825
  amount: FiatAmountSchema,
2687
2826
  destination: obj2({ asset: $nonEmpty, network: $nonEmpty }),
2688
- paymentMethod: import_zod2.z.literal("apple_pay"),
2689
- geo: $geo
2827
+ paymentMethod: import_zod2.z.literal("apple_pay")
2690
2828
  });
2691
2829
  var MoonPayCheckoutSchema = $checkout;
2692
2830
  var $credentials = obj2({ customerId: $nonEmpty, accessToken: $nonEmpty });
2693
2831
  var MoonPaySdkCredentialsSchema = $credentials;
2694
- var $intentRequest = import_zod2.z.discriminatedUnion("kind", [
2695
- obj2({ kind: import_zod2.z.literal("observe"), checkout: $checkout, credentials: $credentials.optional() }),
2696
- obj2({
2697
- kind: import_zod2.z.literal("kyc"),
2698
- checkout: $checkout,
2699
- credentials: $credentials,
2700
- values: import_zod2.z.record(KycFieldIdSchema, import_zod2.z.string()).refine((values) => Object.keys(values).length > 0, "values must not be empty")
2701
- }),
2702
- obj2({
2703
- kind: import_zod2.z.literal("order"),
2704
- orderId: $nonEmpty,
2705
- transactionId: $nonEmpty.optional(),
2706
- quotedAmount: FiatAmountSchema,
2707
- geo: $geo.optional()
2708
- })
2709
- ]);
2710
- var MoonPayIntentRequestSchema = $intentRequest;
2832
+ var $context = { checkout: $checkout, credentials: $credentials.optional() };
2833
+ var $requestContext = obj2($context);
2834
+ var MoonPayRequestContextSchema = $requestContext;
2711
2835
  var $quoteInput = obj2({
2712
2836
  source: obj2({ asset: obj2({ code: import_zod2.z.enum(FIAT_CURRENCY_CODES2) }), amount: $nonEmpty }),
2713
2837
  destination: obj2({ asset: obj2({ code: $nonEmpty }) }),
@@ -2716,50 +2840,103 @@ var $quoteInput = obj2({
2716
2840
  feeBehavior: import_zod2.z.literal("inclusive")
2717
2841
  });
2718
2842
  var MoonPayQuoteInputSchema = $quoteInput;
2719
- var $stepRefusal = import_zod2.z.enum(["NOT_ELIGIBLE", "DOCUMENTS_REQUIRED", "FINAL_REJECTION", "CUSTOMER_MISMATCH"]);
2720
- var $orderRefusal = import_zod2.z.enum(["CUSTOMER_MISMATCH", "WALLET_MISMATCH", "UNRECORDABLE"]);
2843
+ var $observeFields = { action: import_zod2.z.literal("observe") };
2844
+ var $consentFields = {
2845
+ action: import_zod2.z.literal("consent"),
2846
+ acceptances: import_zod2.z.array(TermsDocumentAcceptanceSchema).min(1).refine((acceptances) => hasUniqueIds2(acceptances.map((acceptance) => acceptance.documentId)), "each document is accepted once")
2847
+ };
2848
+ var $connectFields = { action: import_zod2.z.literal("connect"), customerId: $nonEmpty, accessToken: $nonEmpty };
2849
+ var $kycFields = {
2850
+ action: import_zod2.z.literal("kyc"),
2851
+ credentials: $credentials,
2852
+ values: import_zod2.z.record(KycFieldIdSchema, import_zod2.z.string()).refine((values) => Object.keys(values).length > 0, "values must not be empty")
2853
+ };
2854
+ var $orderFields = { action: import_zod2.z.literal("order"), orderId: $nonEmpty, quotedAmount: FiatAmountSchema, transactionId: $nonEmpty.optional() };
2855
+ var $observeRequest = obj2({ ...$context, ...$observeFields });
2856
+ var $consentRequest = obj2({ ...$context, ...$consentFields });
2857
+ var $connectRequest = obj2({ ...$context, ...$connectFields });
2858
+ var $kycRequest = obj2({ ...$context, ...$kycFields });
2859
+ var $orderRequest = obj2({ ...$context, ...$orderFields });
2860
+ var MoonPayObserveRequestSchema = $observeRequest;
2861
+ var MoonPayConsentRequestSchema = $consentRequest;
2862
+ var MoonPayConnectRequestSchema = $connectRequest;
2863
+ var MoonPayKycRequestSchema = $kycRequest;
2864
+ var MoonPayOrderRequestSchema = $orderRequest;
2865
+ var $request = import_zod2.z.discriminatedUnion("action", [$observeRequest, $consentRequest, $connectRequest, $kycRequest, $orderRequest]);
2866
+ var MoonPayRequestSchema = $request;
2867
+ var $envelope = { provider: import_zod2.z.literal("MOONPAY"), geo: FiatGeoSchema, ...$context };
2868
+ var $nextRequest2 = import_zod2.z.discriminatedUnion("action", [
2869
+ obj2({ ...$envelope, ...$observeFields }),
2870
+ obj2({ ...$envelope, ...$consentFields }),
2871
+ obj2({ ...$envelope, ...$connectFields }),
2872
+ obj2({ ...$envelope, ...$kycFields }),
2873
+ obj2({ ...$envelope, ...$orderFields })
2874
+ ]);
2875
+ var MoonPayNextRequestSchema = $nextRequest2;
2721
2876
  var FIELD_OF_CODE = { PHONE_IN_USE: "PHONE_NUMBER", TAX_ID_IN_USE: "TAX_IDENTIFIER" };
2722
2877
  var $fieldError = obj2({ fieldId: $nonEmpty, message: $nonEmpty, code: import_zod2.z.enum(["PHONE_IN_USE", "TAX_ID_IN_USE"]).optional() });
2723
- var $pending = obj2({ status: import_zod2.z.literal("PENDING"), retryAfterMs: import_zod2.z.number().int().positive().max(6e4) });
2724
- var $stepStatus = import_zod2.z.discriminatedUnion("status", [
2725
- obj2({ status: import_zod2.z.literal("TERMS"), stage: import_zod2.z.enum(["CHECKOUT", "KYC"]), documents: import_zod2.z.array(TermsDocumentSchema).min(1) }),
2726
- obj2({ status: import_zod2.z.literal("SDK_AUTH"), sessionToken: $nonEmpty, quoteInput: $quoteInput, resetConnection: import_zod2.z.literal(true).optional() }),
2727
- obj2({ status: import_zod2.z.literal("KYC"), fields: import_zod2.z.array(FormFieldSchema).min(1), fieldErrors: import_zod2.z.array($fieldError).min(1).optional() }),
2728
- $pending,
2729
- obj2({ status: import_zod2.z.literal("READY"), orderId: $nonEmpty, quoteInput: $quoteInput }),
2730
- obj2({ status: import_zod2.z.literal("REFUSED"), reason: $stepRefusal, recovery: import_zod2.z.enum(["REQUOTE", "NONE"]) })
2731
- ]);
2732
- var $stepResponse2 = $stepStatus.superRefine((response, context) => {
2733
- if (response.status === "TERMS") {
2734
- if (!hasUniqueIds2(response.documents.map((document) => document.id))) {
2735
- context.addIssue({ code: "custom", path: ["documents"], message: "document ids must be unique" });
2736
- }
2737
- if (response.documents.some((document) => document.stage !== response.stage)) {
2738
- context.addIssue({ code: "custom", path: ["documents"], message: "every document must be at the response stage" });
2739
- }
2878
+ var $consentShape = obj2({ next: import_zod2.z.literal("consent"), documents: import_zod2.z.array(TermsDocumentSchema).min(1) });
2879
+ var $connectPrompt = obj2({
2880
+ next: import_zod2.z.literal("connect"),
2881
+ sessionToken: $nonEmpty,
2882
+ quoteInput: $quoteInput,
2883
+ resetConnection: import_zod2.z.literal(true).optional()
2884
+ });
2885
+ var $kycShape = obj2({ next: import_zod2.z.literal("kyc"), fields: import_zod2.z.array(FormFieldSchema).min(1), fieldErrors: import_zod2.z.array($fieldError).min(1).optional() });
2886
+ var $waitPrompt = obj2({ next: import_zod2.z.literal("wait"), retryAfterMs: import_zod2.z.number().int().positive().max(6e4) });
2887
+ var $orderPrompt = obj2({ next: import_zod2.z.literal("order"), orderId: $nonEmpty, quoteInput: $quoteInput });
2888
+ var checkConsent = (prompt, context) => {
2889
+ if (!hasUniqueIds2(prompt.documents.map((document) => document.id))) {
2890
+ context.addIssue({ code: "custom", path: ["documents"], message: "document ids must be unique" });
2740
2891
  }
2741
- if (response.status === "KYC") {
2742
- const fieldIds = response.fields.map((field) => field.id);
2743
- if (!hasUniqueIds2(fieldIds)) {
2744
- context.addIssue({ code: "custom", path: ["fields"], message: "field ids must be unique" });
2745
- }
2746
- if (response.fieldErrors?.some((error) => !fieldIds.includes(error.fieldId))) {
2747
- context.addIssue({ code: "custom", path: ["fieldErrors"], message: "a field error must name a field in this response" });
2748
- }
2749
- if (response.fieldErrors?.some((error) => error.code && FIELD_OF_CODE[error.code] !== error.fieldId)) {
2750
- context.addIssue({ code: "custom", path: ["fieldErrors"], message: "a field error code must match its field" });
2751
- }
2892
+ };
2893
+ var checkKyc = (prompt, context) => {
2894
+ const fieldIds = prompt.fields.map((field) => field.id);
2895
+ if (!hasUniqueIds2(fieldIds)) {
2896
+ context.addIssue({ code: "custom", path: ["fields"], message: "field ids must be unique" });
2897
+ }
2898
+ if (prompt.fieldErrors?.some((error) => !fieldIds.includes(error.fieldId))) {
2899
+ context.addIssue({ code: "custom", path: ["fieldErrors"], message: "a field error must name a field in this prompt" });
2752
2900
  }
2901
+ if (prompt.fieldErrors?.some((error) => error.code && FIELD_OF_CODE[error.code] !== error.fieldId)) {
2902
+ context.addIssue({ code: "custom", path: ["fieldErrors"], message: "a field error code must match its field" });
2903
+ }
2904
+ };
2905
+ var MoonPayConsentPromptSchema = $consentShape.superRefine(checkConsent);
2906
+ var MoonPayConnectPromptSchema = $connectPrompt;
2907
+ var MoonPayKycPromptSchema = $kycShape.superRefine(checkKyc);
2908
+ var MoonPayWaitPromptSchema = $waitPrompt;
2909
+ var MoonPayOrderPromptSchema = $orderPrompt;
2910
+ var checkPrompt = (response, context) => {
2911
+ if (response.next === "consent") checkConsent(response, context);
2912
+ if (response.next === "kyc") checkKyc(response, context);
2913
+ };
2914
+ var $promptOptions = [$consentShape, $connectPrompt, $kycShape, $waitPrompt, $orderPrompt];
2915
+ var $prompt = import_zod2.z.discriminatedUnion("next", [...$promptOptions]).superRefine(checkPrompt);
2916
+ var MoonPayPromptSchema = $prompt;
2917
+ var $done = obj2({ next: import_zod2.z.literal("done"), order: FiatStepResponseSchema });
2918
+ var MoonPayDoneSchema = $done;
2919
+ var $stepRefused = obj2({
2920
+ next: import_zod2.z.literal("refused"),
2921
+ reason: import_zod2.z.enum(["NOT_ELIGIBLE", "DOCUMENTS_REQUIRED", "FINAL_REJECTION", "CUSTOMER_MISMATCH"]),
2922
+ recovery: import_zod2.z.enum(["REQUOTE", "NONE"])
2923
+ });
2924
+ var $orderRefused = obj2({
2925
+ next: import_zod2.z.literal("refused"),
2926
+ reason: import_zod2.z.enum(["CUSTOMER_MISMATCH", "WALLET_MISMATCH", "UNRECORDABLE"]),
2927
+ recovery: import_zod2.z.literal("NONE")
2753
2928
  });
2929
+ var $stepResponse2 = import_zod2.z.discriminatedUnion("next", [...$promptOptions, $stepRefused]).superRefine(checkPrompt);
2754
2930
  var MoonPayStepResponseSchema = $stepResponse2;
2755
- var $orderResponse = import_zod2.z.discriminatedUnion("status", [
2756
- obj2({ status: import_zod2.z.literal("DONE"), order: FiatStepResponseSchema }),
2757
- $pending,
2758
- obj2({ status: import_zod2.z.literal("REFUSED"), reason: $orderRefusal, recovery: import_zod2.z.literal("NONE") })
2759
- ]);
2931
+ var $orderResponse = import_zod2.z.discriminatedUnion("next", [$done, $orderPrompt, $orderRefused]);
2760
2932
  var MoonPayOrderResponseSchema = $orderResponse;
2761
- var $intentResponse = import_zod2.z.union([$stepResponse2, $orderResponse]);
2762
- var MoonPayIntentResponseSchema = $intentResponse;
2933
+ var MoonPayResponseSchemaFor = {
2934
+ observe: MoonPayStepResponseSchema,
2935
+ consent: MoonPayStepResponseSchema,
2936
+ connect: MoonPayStepResponseSchema,
2937
+ kyc: MoonPayStepResponseSchema,
2938
+ order: MoonPayOrderResponseSchema
2939
+ };
2763
2940
  var $faultFields = {
2764
2941
  reason: import_zod2.z.enum(["SESSION_BUDGET_SPENT", "RATE_LIMITED", "PROVIDER_UNAVAILABLE", "INVALID_REQUEST"]),
2765
2942
  recovery: import_zod2.z.enum(["RETRY", "REQUOTE", "NONE"])