@vesant-sdk/fraud 0.2.0-dev.d2f7d80 → 0.2.0-next.648b1a9
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 +4 -1
- package/dist/index.d.mts +6 -9
- package/dist/index.d.ts +6 -9
- package/dist/index.js +23 -73
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -72
- package/dist/index.mjs.map +1 -1
- package/package.json +50 -50
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/enums.ts","../src/types/rule-signals.ts","../src/normalization/payment-methods.ts","../src/normalization/reserved-keys.ts","../src/normalization/normalize.ts","../src/normalization/preview.ts","../src/types/events.ts","../src/types/metadata.ts","../src/validation/helpers.ts","../src/validation/rules.ts","../src/client.ts","../src/types.ts"],"names":["rawType","ValidationError"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Enum types and const objects for fraud scoring requests.\n */\n\nexport type TransactionType =\n | '$sale'\n | '$authorize'\n | '$capture'\n | '$void'\n | '$refund'\n | '$deposit'\n | '$withdrawal'\n | '$transfer'\n | '$buy'\n | '$sell'\n | '$send'\n | '$receive';\n\nexport const TransactionTypeValues = [\n '$sale',\n '$authorize',\n '$capture',\n '$void',\n '$refund',\n '$deposit',\n '$withdrawal',\n '$transfer',\n '$buy',\n '$sell',\n '$send',\n '$receive',\n] as const satisfies readonly TransactionType[];\n\nexport const TransactionType = {\n Sale: '$sale',\n Authorize: '$authorize',\n Capture: '$capture',\n Void: '$void',\n Refund: '$refund',\n Deposit: '$deposit',\n Withdrawal: '$withdrawal',\n Transfer: '$transfer',\n Buy: '$buy',\n Sell: '$sell',\n Send: '$send',\n Receive: '$receive',\n} as const satisfies Record<string, TransactionType>;\n\nexport type ChargebackState =\n | '$received'\n | '$accepted'\n | '$disputed'\n | '$won'\n | '$lost';\n\nexport const ChargebackStateValues = [\n '$received',\n '$accepted',\n '$disputed',\n '$won',\n '$lost',\n] as const satisfies readonly ChargebackState[];\n\nexport const ChargebackState = {\n Received: '$received',\n Accepted: '$accepted',\n Disputed: '$disputed',\n Won: '$won',\n Lost: '$lost',\n} as const satisfies Record<string, ChargebackState>;\n\nexport type ChargebackReason =\n | '$fraud'\n | '$duplicate'\n | '$product_not_received'\n | '$product_unacceptable'\n | '$authorization'\n | '$consumer_disputes'\n | '$processing_errors'\n | '$cancel_subscription'\n | '$friendly_fraud'\n | '$ach_return'\n | '$ach_reversal'\n | '$other';\n\nexport const ChargebackReasonValues = [\n '$fraud',\n '$duplicate',\n '$product_not_received',\n '$product_unacceptable',\n '$authorization',\n '$consumer_disputes',\n '$processing_errors',\n '$cancel_subscription',\n '$friendly_fraud',\n '$ach_return',\n '$ach_reversal',\n '$other',\n] as const satisfies readonly ChargebackReason[];\n\nexport const ChargebackReason = {\n Fraud: '$fraud',\n Duplicate: '$duplicate',\n ProductNotReceived: '$product_not_received',\n ProductUnacceptable: '$product_unacceptable',\n Authorization: '$authorization',\n ConsumerDisputes: '$consumer_disputes',\n ProcessingErrors: '$processing_errors',\n CancelSubscription: '$cancel_subscription',\n FriendlyFraud: '$friendly_fraud',\n AchReturn: '$ach_return',\n AchReversal: '$ach_reversal',\n Other: '$other',\n} as const satisfies Record<string, ChargebackReason>;\n\nexport type LoginStatus = '$success' | '$failure';\n\nexport const LoginStatusValues = ['$success', '$failure'] as const satisfies readonly LoginStatus[];\n\nexport const LoginStatus = {\n Success: '$success',\n Failure: '$failure',\n} as const satisfies Record<string, LoginStatus>;\n\nexport type LoginFailureReason =\n | '$account_unknown'\n | '$account_suspended'\n | '$account_disabled'\n | '$wrong_password';\n\nexport const LoginFailureReasonValues = [\n '$account_unknown',\n '$account_suspended',\n '$account_disabled',\n '$wrong_password',\n] as const satisfies readonly LoginFailureReason[];\n\nexport type PasswordUpdateReason =\n | '$user_update'\n | '$forgot_password'\n | '$forced_reset';\n\nexport const PasswordUpdateReasonValues = [\n '$user_update',\n '$forgot_password',\n '$forced_reset',\n] as const satisfies readonly PasswordUpdateReason[];\n\nexport const PasswordUpdateReason = {\n UserUpdate: PasswordUpdateReasonValues[0],\n ForgotPassword: PasswordUpdateReasonValues[1],\n ForcedReset: PasswordUpdateReasonValues[2],\n} as const satisfies Record<string, PasswordUpdateReason>;\n\nexport type PasswordUpdateStatus = '$pending' | '$success' | '$failure';\n\nexport const PasswordUpdateStatusValues = [\n '$pending',\n '$success',\n '$failure',\n] as const satisfies readonly PasswordUpdateStatus[];\n\nexport const PasswordUpdateStatus = {\n Pending: '$pending',\n Success: '$success',\n Failure: '$failure',\n} as const satisfies Record<string, PasswordUpdateStatus>;\n\nexport type WagerStatus = '$accept' | '$cancel';\n\nexport const WagerStatusValues = ['$accept', '$cancel'] as const satisfies readonly WagerStatus[];\n\nexport const WagerStatus = {\n Accept: '$accept',\n Cancel: '$cancel',\n} as const satisfies Record<string, WagerStatus>;\n\nexport type TransactionStatus = '$success' | '$failure' | '$pending';\n\nexport const TransactionStatusValues = [\n '$success',\n '$failure',\n '$pending',\n] as const satisfies readonly TransactionStatus[];\n\nexport const TransactionStatus = {\n Success: '$success',\n Failure: '$failure',\n Pending: '$pending',\n} as const satisfies Record<string, TransactionStatus>;\n\nexport type PaymentType =\n | '$cash'\n | '$check'\n | '$credit_card'\n | '$crypto_currency'\n | '$debit_card'\n | '$digital_wallet'\n | '$electronic_fund_transfer'\n | '$financing'\n | '$gift_card'\n | '$invoice'\n | '$in_app_purchase'\n | '$money_order'\n | '$points'\n | '$prepaid_card'\n | '$store_credit'\n | '$third_party_processor'\n | '$voucher'\n | '$sepa_credit'\n | '$sepa_instant_credit'\n | '$sepa_direct_debit'\n | '$ach_credit'\n | '$ach_debit'\n | '$wire_credit'\n | '$wire_debit';\n\nexport const PaymentTypeValues = [\n '$cash',\n '$check',\n '$credit_card',\n '$crypto_currency',\n '$debit_card',\n '$digital_wallet',\n '$electronic_fund_transfer',\n '$financing',\n '$gift_card',\n '$invoice',\n '$in_app_purchase',\n '$money_order',\n '$points',\n '$prepaid_card',\n '$store_credit',\n '$third_party_processor',\n '$voucher',\n '$sepa_credit',\n '$sepa_instant_credit',\n '$sepa_direct_debit',\n '$ach_credit',\n '$ach_debit',\n '$wire_credit',\n '$wire_debit',\n] as const satisfies readonly PaymentType[];\n\nexport const PaymentType = {\n Cash: '$cash',\n Check: '$check',\n CreditCard: '$credit_card',\n CryptoCurrency: '$crypto_currency',\n DebitCard: '$debit_card',\n DigitalWallet: '$digital_wallet',\n ElectronicFundTransfer: '$electronic_fund_transfer',\n Financing: '$financing',\n GiftCard: '$gift_card',\n Invoice: '$invoice',\n InAppPurchase: '$in_app_purchase',\n MoneyOrder: '$money_order',\n Points: '$points',\n PrepaidCard: '$prepaid_card',\n StoreCredit: '$store_credit',\n ThirdPartyProcessor: '$third_party_processor',\n Voucher: '$voucher',\n SepaCredit: '$sepa_credit',\n SepaInstantCredit: '$sepa_instant_credit',\n SepaDirectDebit: '$sepa_direct_debit',\n AchCredit: '$ach_credit',\n AchDebit: '$ach_debit',\n WireCredit: '$wire_credit',\n WireDebit: '$wire_debit',\n} as const satisfies Record<string, PaymentType>;\n\nexport type WalletType = '$crypto' | '$digital' | '$fiat';\n\nexport const WalletTypeValues = ['$crypto', '$digital', '$fiat'] as const satisfies readonly WalletType[];\n\nexport const WalletType = {\n Crypto: '$crypto',\n Digital: '$digital',\n Fiat: '$fiat',\n} as const satisfies Record<string, WalletType>;\n\nexport type FraudRiskLevel = 'low' | 'medium' | 'high' | 'critical';\n","/**\n * Optional top-level rule-signal fields copied into plain metadata on the wire.\n */\n\nexport interface LoginRuleSignals {\n ip_country_mismatch?: boolean;\n}\n\nexport interface UpdateAccountRuleSignals {\n two_fa_enabled?: boolean;\n two_fa_disabled?: boolean;\n two_fa_method_changed?: boolean;\n}\n\nexport interface TransactionRuleSignals {\n payment_method?: string;\n is_first_deposit?: boolean;\n cumulative_deposit_amount?: number;\n deposit_count?: number;\n failed_deposit_count?: number;\n is_first_withdrawal?: boolean;\n withdrawal_method_differs?: boolean;\n cumulative_withdrawal_amount?: number;\n withdrawal_count?: number;\n hours_since_last_deposit?: number;\n days_since_last_activity?: number;\n hours_since_account_creation?: number;\n}\n\nexport const LOGIN_RULE_SIGNAL_KEYS = ['ip_country_mismatch'] as const;\n\nexport const UPDATE_ACCOUNT_RULE_SIGNAL_KEYS = [\n 'two_fa_enabled',\n 'two_fa_disabled',\n 'two_fa_method_changed',\n] as const;\n\nexport const TRANSACTION_RULE_SIGNAL_KEYS = [\n 'payment_method',\n 'is_first_deposit',\n 'cumulative_deposit_amount',\n 'deposit_count',\n 'failed_deposit_count',\n 'is_first_withdrawal',\n 'withdrawal_method_differs',\n 'cumulative_withdrawal_amount',\n 'withdrawal_count',\n 'hours_since_last_deposit',\n 'days_since_last_activity',\n 'hours_since_account_creation',\n] as const;\n","import { PaymentTypeValues, type PaymentType } from '../types/enums';\nimport type { PaymentMethod } from '../types/structured-fields';\n\nconst PAYMENT_TYPE_ALIASES: Record<string, PaymentType> = {\n bank_account: '$electronic_fund_transfer',\n electronic_fund_transfer: '$electronic_fund_transfer',\n credit_card: '$credit_card',\n crypto_currency: '$crypto_currency',\n debit_card: '$debit_card',\n digital_wallet: '$digital_wallet',\n cash: '$cash',\n check: '$check',\n financing: '$financing',\n gift_card: '$gift_card',\n invoice: '$invoice',\n in_app_purchase: '$in_app_purchase',\n money_order: '$money_order',\n points: '$points',\n prepaid_card: '$prepaid_card',\n store_credit: '$store_credit',\n third_party_processor: '$third_party_processor',\n voucher: '$voucher',\n sepa_credit: '$sepa_credit',\n sepa_instant_credit: '$sepa_instant_credit',\n sepa_direct_debit: '$sepa_direct_debit',\n ach_credit: '$ach_credit',\n ach_debit: '$ach_debit',\n wire_credit: '$wire_credit',\n wire_debit: '$wire_debit',\n};\n\nconst PAYMENT_METHOD_FIELD_WHITELIST = new Set([\n 'payment_type',\n 'payment_gateway',\n 'card_bin',\n 'card_last4',\n 'avs_result_code',\n 'cvv_result_code',\n 'verification_status',\n 'routing_number',\n 'account_holder_name',\n 'account_number_last5',\n 'bank_name',\n 'bank_country',\n 'wallet_address',\n 'wallet_type',\n 'paypal_payer_id',\n 'paypal_payer_email',\n]);\n\nconst DEPRECATED_PAYMENT_METHOD_KEYS = [\n 'account_number_last4',\n 'account_id',\n 'wallet_address_last4',\n 'crypto_currency',\n 'network',\n] as const;\n\nconst METADATA_STRIP_KEYS = new Set([\n 'account_id',\n 'wallet_address_last4',\n 'crypto_currency',\n 'network',\n]);\n\nfunction isDevEnvironment(): boolean {\n return typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n}\n\nfunction warnDeprecatedKey(key: string): void {\n if (!isDevEnvironment()) return;\n const messages: Record<string, string> = {\n account_number_last4:\n '[vesant-sdk/fraud] account_number_last4 is not a recognized field; use account_number_last5',\n account_id: '[vesant-sdk/fraud] account_id is not a recognized field; moved to metadata',\n wallet_address_last4:\n '[vesant-sdk/fraud] wallet_address_last4 is not a recognized field; moved to metadata',\n crypto_currency:\n '[vesant-sdk/fraud] crypto_currency is not a recognized field on payment_method; moved to metadata',\n network: '[vesant-sdk/fraud] network is not a recognized field on payment_method; moved to metadata',\n };\n const message = messages[key];\n if (message) {\n console.warn(message);\n }\n}\n\n/**\n * Maps tenant-internal payment type signals to valid $payment_type values.\n * Returns undefined when the value cannot be mapped.\n */\nexport function normalizePaymentType(\n value: string | undefined\n): PaymentType | undefined {\n if (value === undefined || value === null) return undefined;\n const trimmed = String(value).trim();\n if (trimmed === '') return undefined;\n\n const normalized = trimmed.startsWith('$') ? trimmed.slice(1) : trimmed;\n const alias = PAYMENT_TYPE_ALIASES[normalized.toLowerCase()];\n if (alias) return alias;\n\n const withPrefix = `$${normalized}` as PaymentType;\n if ((PaymentTypeValues as readonly string[]).includes(withPrefix)) {\n return withPrefix;\n }\n\n return undefined;\n}\n\n/**\n * Normalizes last-4/last-5 account digits for $account_number_last5.\n */\nexport function toAccountNumberLast5(value: unknown): string | undefined {\n if (value === undefined || value === null) return undefined;\n const digits = String(value).replace(/\\D/g, '');\n if (digits.length === 0) return undefined;\n if (digits.length >= 5) return digits.slice(-5);\n return digits.padStart(5, '0');\n}\n\nexport type NormalizePaymentMethodResult = {\n method: PaymentMethod;\n metadataExtras?: Record<string, unknown>;\n};\n\nfunction collectMetadataExtra(\n metadataExtras: Record<string, unknown>,\n key: string,\n value: unknown\n): void {\n if (value === undefined) return;\n metadataExtras[key] = value;\n}\n\n/**\n * Normalizes a single payment method object for the wire format.\n */\nexport function normalizePaymentMethod(\n raw: Record<string, unknown>\n): NormalizePaymentMethodResult | null {\n const metadataExtras: Record<string, unknown> = {};\n const method: PaymentMethod = {};\n\n const rawPaymentType =\n raw.payment_type !== undefined\n ? String(raw.payment_type)\n : raw.$payment_type !== undefined\n ? String(raw.$payment_type)\n : undefined;\n\n const normalizedType = normalizePaymentType(rawPaymentType);\n if (rawPaymentType !== undefined && normalizedType === undefined) {\n return null;\n }\n if (normalizedType !== undefined) {\n method.payment_type = normalizedType;\n }\n\n for (const key of DEPRECATED_PAYMENT_METHOD_KEYS) {\n if (key in raw) warnDeprecatedKey(key);\n }\n\n const accountLast4 = raw.account_number_last4 ?? raw.$account_number_last4;\n const accountLast5 = raw.account_number_last5 ?? raw.$account_number_last5;\n const resolvedLast5 = toAccountNumberLast5(accountLast5 ?? accountLast4);\n if (resolvedLast5 !== undefined) {\n method.account_number_last5 = resolvedLast5;\n }\n\n for (const [key, value] of Object.entries(raw)) {\n if (key === 'payment_type' || key === '$payment_type') continue;\n if (key === 'account_number_last4' || key === '$account_number_last4') continue;\n if (key === 'account_number_last5' || key === '$account_number_last5') continue;\n\n const plainKey = key.startsWith('$') ? key.slice(1) : key;\n\n if (METADATA_STRIP_KEYS.has(plainKey)) {\n if (plainKey === 'account_id') {\n collectMetadataExtra(metadataExtras, 'payment_method_account_id', String(value));\n } else {\n collectMetadataExtra(metadataExtras, plainKey, value);\n }\n continue;\n }\n\n if (!PAYMENT_METHOD_FIELD_WHITELIST.has(plainKey)) {\n collectMetadataExtra(metadataExtras, `payment_method_${plainKey}`, value);\n continue;\n }\n\n if (plainKey === 'payment_type') {\n continue;\n }\n\n method[plainKey] = value;\n }\n\n const hasMetadata = Object.keys(metadataExtras).length > 0;\n return {\n method,\n ...(hasMetadata ? { metadataExtras } : {}),\n };\n}\n\nfunction mergeAccountIds(\n target: Record<string, unknown>,\n accountId: string\n): void {\n const existing = target.payment_method_account_ids;\n if (Array.isArray(existing)) {\n existing.push(accountId);\n return;\n }\n if (typeof target.payment_method_account_id === 'string') {\n target.payment_method_account_ids = [target.payment_method_account_id, accountId];\n delete target.payment_method_account_id;\n return;\n }\n target.payment_method_account_id = accountId;\n}\n\n/**\n * Normalizes payment method arrays and aggregates stripped metadata.\n */\nexport function normalizePaymentMethods(\n methods: PaymentMethod[] | undefined\n): { payment_methods?: PaymentMethod[]; metadata?: Record<string, unknown> } {\n if (methods === undefined) return {};\n\n const normalized: PaymentMethod[] = [];\n const metadata: Record<string, unknown> = {};\n\n for (const raw of methods) {\n const result = normalizePaymentMethod(raw as Record<string, unknown>);\n if (result === null) continue;\n normalized.push(result.method);\n\n if (result.metadataExtras) {\n for (const [key, value] of Object.entries(result.metadataExtras)) {\n if (key === 'payment_method_account_id' && typeof value === 'string') {\n mergeAccountIds(metadata, value);\n } else if (key in metadata && Array.isArray(metadata[key]) && Array.isArray(value)) {\n metadata[key] = [...(metadata[key] as unknown[]), ...value];\n } else if (!(key in metadata)) {\n metadata[key] = value;\n }\n }\n }\n }\n\n const hasMetadata = Object.keys(metadata).length > 0;\n return {\n payment_methods: normalized,\n ...(hasMetadata ? { metadata } : {}),\n };\n}\n\nexport { PAYMENT_METHOD_FIELD_WHITELIST };\n","function reservedKey(key: string): string {\n return key.startsWith('$') ? key : `$${key}`;\n}\n\n/**\n * Recursively prefix object keys with $ for the reserved wire format (no double-prefix).\n */\nexport function toReservedKeyedObject(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((item) => toReservedKeyedObject(item));\n }\n if (typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(value as Record<string, unknown>)) {\n out[reservedKey(key)] = toReservedKeyedObject(nested);\n }\n return out;\n }\n return value;\n}\n","import { LoginStatus, PasswordUpdateReason, PasswordUpdateStatus } from '../types/enums';\nimport type { FraudCustomMetadata } from '../types/metadata';\nimport type { FraudScoreRequest } from '../types/requests';\nimport type { PaymentMethod } from '../types/structured-fields';\nimport {\n LOGIN_RULE_SIGNAL_KEYS,\n TRANSACTION_RULE_SIGNAL_KEYS,\n UPDATE_ACCOUNT_RULE_SIGNAL_KEYS,\n} from '../types/rule-signals';\nimport {\n normalizePaymentMethod,\n normalizePaymentMethods,\n} from './payment-methods';\nimport { toReservedKeyedObject } from './reserved-keys';\n\n/**\n * Wire name for the scoring engine's stable per-customer reference. The SDK\n * exposes this as `user_reference`; the scoring API expects the legacy key.\n */\nconst WIRE_USER_REFERENCE_KEY = 'sift_user_id';\n\nconst BASE_RESERVED_FIELD_KEYS = [\n 'session_id',\n 'user_email',\n 'name',\n 'phone',\n 'payment_method_details',\n 'payment_methods',\n 'billing_address',\n 'shipping_address',\n 'app',\n 'browser',\n 'verification_phone_number',\n 'order_id',\n 'exchange_rate',\n 'expedited_shipping',\n 'shipping_method',\n 'shipping_carrier',\n 'shipping_tracking_numbers',\n 'brand_name',\n 'site_country',\n 'site_domain',\n 'ip',\n 'skip_payment_method_normalization',\n] as const;\n\nfunction mergeMetadata(\n base: FraudCustomMetadata | undefined,\n extras: FraudCustomMetadata\n): FraudCustomMetadata {\n return { ...base, ...extras };\n}\n\nfunction stripSdkOnlyFields(\n request: Record<string, unknown>,\n keys: string[]\n): Record<string, unknown> {\n const body = { ...request };\n for (const key of keys) {\n delete body[key];\n }\n return body;\n}\n\nfunction createStrippedBody(\n rest: Record<string, unknown>,\n metadata: FraudCustomMetadata | undefined,\n stripKeys: string[]\n): Record<string, unknown> {\n return stripSdkOnlyFields(\n { ...rest, metadata: mergeMetadata(metadata, {}) },\n stripKeys\n );\n}\n\nfunction applyReservedMetadata(\n body: Record<string, unknown>,\n metadata: FraudCustomMetadata | undefined,\n reservedMetadata: FraudCustomMetadata,\n onlyWhenNonEmpty = false\n): Record<string, unknown> {\n if (!onlyWhenNonEmpty || Object.keys(reservedMetadata).length > 0) {\n body.metadata = mergeMetadata(metadata, reservedMetadata);\n }\n return body;\n}\n\nfunction collectRuleSignals(\n request: Record<string, unknown>,\n keys: readonly string[]\n): FraudCustomMetadata {\n const signals: FraudCustomMetadata = {};\n for (const key of keys) {\n const value = request[key];\n if (value !== undefined) {\n signals[key] = value;\n }\n }\n return signals;\n}\n\nfunction buildBaseReservedMetadata(body: Record<string, unknown>): FraudCustomMetadata {\n const {\n event_type,\n session_id,\n user_email,\n name,\n phone,\n payment_method_details,\n payment_methods,\n billing_address,\n shipping_address,\n app,\n browser,\n verification_phone_number,\n order_id,\n amount,\n currency_code,\n exchange_rate,\n expedited_shipping,\n shipping_method,\n shipping_carrier,\n shipping_tracking_numbers,\n brand_name,\n site_country,\n site_domain,\n ip,\n metadata,\n skip_payment_method_normalization,\n } = body;\n\n const reservedMetadata: FraudCustomMetadata = {\n ...((metadata as FraudCustomMetadata | undefined) ?? {}),\n };\n\n if (session_id !== undefined) reservedMetadata.$session_id = session_id;\n if (user_email !== undefined) reservedMetadata.$user_email = user_email;\n if (name !== undefined) reservedMetadata.$name = name;\n if (phone !== undefined) reservedMetadata.$phone = phone;\n\n if (payment_method_details !== undefined) {\n if (skip_payment_method_normalization) {\n reservedMetadata.$payment_method = toReservedKeyedObject(payment_method_details) as FraudCustomMetadata[string];\n } else {\n const result = normalizePaymentMethod(\n payment_method_details as Record<string, unknown>\n );\n if (result !== null) {\n reservedMetadata.$payment_method = toReservedKeyedObject(result.method) as FraudCustomMetadata[string];\n if (result.metadataExtras) {\n Object.assign(reservedMetadata, result.metadataExtras);\n }\n }\n }\n }\n\n if (payment_methods !== undefined) {\n if (skip_payment_method_normalization) {\n reservedMetadata.$payment_methods = toReservedKeyedObject(payment_methods) as FraudCustomMetadata[string];\n } else {\n const { payment_methods: normalized, metadata: pmMetadata } = normalizePaymentMethods(\n payment_methods as PaymentMethod[]\n );\n if (normalized !== undefined) {\n reservedMetadata.$payment_methods = toReservedKeyedObject(normalized) as FraudCustomMetadata[string];\n }\n if (pmMetadata) {\n Object.assign(reservedMetadata, pmMetadata);\n }\n }\n }\n if (billing_address !== undefined) {\n reservedMetadata.$billing_address = toReservedKeyedObject(billing_address) as FraudCustomMetadata[string];\n }\n if (shipping_address !== undefined) {\n reservedMetadata.$shipping_address = toReservedKeyedObject(shipping_address) as FraudCustomMetadata[string];\n }\n if (app !== undefined) reservedMetadata.$app = toReservedKeyedObject(app) as FraudCustomMetadata[string];\n if (browser !== undefined) {\n reservedMetadata.$browser = toReservedKeyedObject(browser) as FraudCustomMetadata[string];\n }\n if (event_type === '$create_order' || event_type === '$update_account') {\n if (verification_phone_number !== undefined) {\n reservedMetadata.$verification_phone_number = verification_phone_number;\n }\n }\n if (event_type === '$create_order') {\n if (order_id !== undefined) reservedMetadata.$order_id = order_id;\n if (amount !== undefined) reservedMetadata.$amount = amount;\n if (currency_code !== undefined) reservedMetadata.$currency_code = currency_code;\n if (exchange_rate !== undefined) {\n reservedMetadata.$exchange_rate = toReservedKeyedObject(exchange_rate) as FraudCustomMetadata[string];\n }\n if (expedited_shipping !== undefined) reservedMetadata.$expedited_shipping = expedited_shipping;\n if (shipping_method !== undefined) reservedMetadata.$shipping_method = shipping_method;\n if (shipping_carrier !== undefined) reservedMetadata.$shipping_carrier = shipping_carrier;\n if (shipping_tracking_numbers !== undefined) {\n reservedMetadata.$shipping_tracking_numbers = shipping_tracking_numbers;\n }\n if (brand_name !== undefined) reservedMetadata.$brand_name = brand_name;\n if (site_country !== undefined) reservedMetadata.$site_country = site_country;\n if (site_domain !== undefined) reservedMetadata.$site_domain = site_domain;\n if (ip !== undefined) reservedMetadata.$ip = ip;\n }\n\n return reservedMetadata;\n}\n\nfunction normalizeBaseReservedFields(body: Record<string, unknown>): Record<string, unknown> {\n const reservedMetadata = buildBaseReservedMetadata(body);\n const stripped = stripSdkOnlyFields(body, [...BASE_RESERVED_FIELD_KEYS]);\n\n if ('user_reference' in stripped) {\n stripped[WIRE_USER_REFERENCE_KEY] = stripped.user_reference;\n delete stripped.user_reference;\n }\n\n if (Object.keys(reservedMetadata).length > 0) {\n stripped.metadata = reservedMetadata;\n }\n\n return stripped;\n}\n\nfunction applyRuleSignals(\n body: Record<string, unknown>,\n request: Record<string, unknown>,\n keys: readonly string[],\n stripKeys: readonly string[]\n): Record<string, unknown> {\n const ruleSignals = collectRuleSignals(request, keys);\n const stripped = stripSdkOnlyFields(body, [...stripKeys]);\n if (Object.keys(ruleSignals).length > 0) {\n stripped.metadata = mergeMetadata(\n stripped.metadata as FraudCustomMetadata | undefined,\n ruleSignals\n );\n }\n return stripped;\n}\n\nfunction normalizeUpdatePassword(\n request: Extract<FraudScoreRequest, { event_type: '$update_password' }>\n): Record<string, unknown> {\n const { password_reason, password_status, metadata, ...rest } = request;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n 'password_reason',\n 'password_status',\n ]);\n const reservedMetadata: FraudCustomMetadata = {\n $reason: password_reason ?? PasswordUpdateReason.UserUpdate,\n $status: password_status ?? PasswordUpdateStatus.Success,\n };\n body = applyReservedMetadata(body, metadata, reservedMetadata);\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeWager(\n request: Extract<FraudScoreRequest, { event_type: '$wager' }>\n): Record<string, unknown> {\n const { wager_type, wager_status, wager_event_type, wager_event_name, wager_event_id, metadata, ...rest } =\n request;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n 'wager_type',\n 'wager_status',\n 'wager_event_type',\n 'wager_event_name',\n 'wager_event_id',\n ]);\n const reservedMetadata: FraudCustomMetadata = {\n $wager_type: wager_type,\n $wager_status: wager_status,\n };\n if (wager_event_type) reservedMetadata.$wager_event_type = wager_event_type;\n if (wager_event_name) reservedMetadata.$wager_event_name = wager_event_name;\n if (wager_event_id) reservedMetadata.$wager_event_id = wager_event_id;\n body = applyReservedMetadata(body, metadata, reservedMetadata);\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeLogin(\n request: Extract<FraudScoreRequest, { event_type: '$login' }>\n): Record<string, unknown> {\n const { login_status, login_failure_reason, metadata, ...rest } = request;\n const effectiveStatus = login_status ?? LoginStatus.Success;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n 'login_status',\n 'login_failure_reason',\n ...LOGIN_RULE_SIGNAL_KEYS,\n ]);\n const reservedMetadata: FraudCustomMetadata = {\n $login_status: effectiveStatus,\n };\n if (effectiveStatus === LoginStatus.Failure && login_failure_reason) {\n reservedMetadata.$failure_reason = login_failure_reason;\n }\n body = applyReservedMetadata(body, metadata, reservedMetadata);\n body = applyRuleSignals(\n body,\n request as unknown as Record<string, unknown>,\n LOGIN_RULE_SIGNAL_KEYS,\n []\n );\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeTransaction(\n request: Extract<FraudScoreRequest, { event_type: '$transaction' }>\n): Record<string, unknown> {\n const { transaction_status, decline_category, transfer_recipient_user_id, metadata, ...rest } =\n request;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n 'transaction_status',\n 'decline_category',\n 'transfer_recipient_user_id',\n ...TRANSACTION_RULE_SIGNAL_KEYS,\n ]);\n const reservedMetadata: FraudCustomMetadata = {};\n if (transaction_status) reservedMetadata.$transaction_status = transaction_status;\n if (decline_category) reservedMetadata.$decline_category = decline_category;\n if (transfer_recipient_user_id) {\n reservedMetadata.$transfer_recipient_user_id = transfer_recipient_user_id;\n }\n body = applyReservedMetadata(body, metadata, reservedMetadata, true);\n body = applyRuleSignals(\n body,\n request as unknown as Record<string, unknown>,\n TRANSACTION_RULE_SIGNAL_KEYS,\n []\n );\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeUpdateAccount(\n request: Extract<FraudScoreRequest, { event_type: '$update_account' }>\n): Record<string, unknown> {\n const { metadata, ...rest } = request;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n ...UPDATE_ACCOUNT_RULE_SIGNAL_KEYS,\n ]);\n body = applyRuleSignals(\n body,\n request as unknown as Record<string, unknown>,\n UPDATE_ACCOUNT_RULE_SIGNAL_KEYS,\n []\n );\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeCreateOrder(\n request: Extract<FraudScoreRequest, { event_type: '$create_order' }>\n): Record<string, unknown> {\n const { amount, currency_code, metadata, ...rest } = request;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n 'amount',\n 'currency_code',\n ]);\n const reservedMetadata: FraudCustomMetadata = {\n $amount: amount,\n $currency_code: currency_code,\n };\n body = applyReservedMetadata(body, metadata, reservedMetadata);\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeDefault(request: FraudScoreRequest): Record<string, unknown> {\n return normalizeBaseReservedFields({ ...request } as Record<string, unknown>);\n}\n\nexport function normalizeScoreRequestForApi(request: FraudScoreRequest): Record<string, unknown> {\n switch (request.event_type) {\n case '$update_password':\n return normalizeUpdatePassword(request);\n case '$wager':\n return normalizeWager(request);\n case '$login':\n return normalizeLogin(request);\n case '$transaction':\n return normalizeTransaction(request);\n case '$update_account':\n return normalizeUpdateAccount(request);\n case '$create_order':\n return normalizeCreateOrder(request);\n default:\n return normalizeDefault(request);\n }\n}\n","import type { FraudScoreRequest } from '../types/requests';\nimport { normalizeScoreRequestForApi } from './normalize';\n\n/**\n * Returns the JSON body that would be sent to POST /api/v1/fraud/score after normalization.\n * Useful for debugging without calling the API.\n */\nexport function buildScoreRequestPreview(request: FraudScoreRequest): Record<string, unknown> {\n return normalizeScoreRequestForApi(request);\n}\n","/**\n * Fraud event type unions aligned with fraud-service support matrix.\n */\n\n/** Events that run engine scoring + rule evaluation */\nexport type ScoredFraudEventType =\n | '$create_account'\n | '$create_order'\n | '$login'\n | '$logout'\n | '$update_account'\n | '$update_password'\n | '$transaction'\n | '$wager';\n\n/** Feedback-only; no meaningful fraud score in response */\nexport type ChargebackFraudEventType = '$chargeback';\n\n/** Union accepted by scoreEvent / scoreEventsBulk */\nexport type SupportedFraudEventType = ScoredFraudEventType | ChargebackFraudEventType;\n\nexport const SCORED_FRAUD_EVENT_TYPES: readonly ScoredFraudEventType[] = [\n '$create_account',\n '$create_order',\n '$login',\n '$logout',\n '$update_account',\n '$update_password',\n '$transaction',\n '$wager',\n] as const;\n\nexport const CHARGEBACK_FRAUD_EVENT_TYPE = '$chargeback' as const;\n\nexport const SUPPORTED_FRAUD_EVENT_TYPES: readonly SupportedFraudEventType[] = [\n ...SCORED_FRAUD_EVENT_TYPES,\n CHARGEBACK_FRAUD_EVENT_TYPE,\n] as const;\n\nexport const PLANNED_FRAUD_EVENT_TYPES = [\n '$verification',\n '$link_session_to_user',\n '$security_notification',\n '$update_order',\n '$order_status',\n '$add_promotion',\n] as const;\n\n/**\n * Listed in Vesant dashboard / future API — NOT valid for scoreEvent today.\n * @deprecated Not supported by POST /api/v1/fraud/score\n */\nexport type PlannedFraudEventType = (typeof PLANNED_FRAUD_EVENT_TYPES)[number];\n\n/**\n * @deprecated Use SupportedFraudEventType; kept for migration\n */\nexport type FraudEventType = SupportedFraudEventType | (typeof PLANNED_FRAUD_EVENT_TYPES)[number];\n\nexport function isPlannedFraudEventType(\n eventType: string\n): eventType is (typeof PLANNED_FRAUD_EVENT_TYPES)[number] {\n return (PLANNED_FRAUD_EVENT_TYPES as readonly string[]).includes(eventType);\n}\n\nexport function isSupportedFraudEventType(\n eventType: string\n): eventType is SupportedFraudEventType {\n return (SUPPORTED_FRAUD_EVENT_TYPES as readonly string[]).includes(eventType);\n}\n","/**\n * Metadata for fraud score requests.\n * Plain keys are Vesant rule signals; $-prefixed keys are reserved pass-through (or set via typed fields).\n */\n\nexport interface FraudRuleSignalMetadata {\n /** Rule signal payment method (e.g. \"$credit_card\"), not the reserved $payment_method object */\n payment_method?: string;\n country?: string;\n /** Customer date of birth, ISO 8601 (YYYY-MM-DD). Useful on onboarding ($create_account). */\n date_of_birth?: string;\n two_fa_enabled?: boolean;\n two_fa_disabled?: boolean;\n two_fa_method_changed?: boolean;\n ip_country_mismatch?: boolean;\n is_first_deposit?: boolean;\n cumulative_deposit_amount?: number;\n deposit_count?: number;\n failed_deposit_count?: number;\n is_first_withdrawal?: boolean;\n withdrawal_method_differs?: boolean;\n cumulative_withdrawal_amount?: number;\n withdrawal_count?: number;\n hours_since_last_deposit?: number;\n days_since_last_activity?: number;\n hours_since_account_creation?: number;\n}\n\n/** Extra reserved fields forwarded verbatim in metadata (e.g. $referrer_user_id, $promotions). */\nexport type ReservedMetadata = Record<`$${string}`, unknown>;\n\nexport type FraudCustomMetadata = FraudRuleSignalMetadata &\n ReservedMetadata &\n Record<string, unknown>;\n\n/** Maps typed request fields to metadata keys they populate (typed values win on normalize). */\nexport const TYPED_METADATA_KEYS: Readonly<Record<string, string>> = {\n session_id: '$session_id',\n user_email: '$user_email',\n name: '$name',\n phone: '$phone',\n payment_method_details: '$payment_method',\n billing_address: '$billing_address',\n payment_methods: '$payment_methods',\n app: '$app',\n verification_phone_number: '$verification_phone_number',\n order_id: '$order_id',\n exchange_rate: '$exchange_rate',\n shipping_address: '$shipping_address',\n expedited_shipping: '$expedited_shipping',\n shipping_method: '$shipping_method',\n shipping_carrier: '$shipping_carrier',\n shipping_tracking_numbers: '$shipping_tracking_numbers',\n browser: '$browser',\n brand_name: '$brand_name',\n site_country: '$site_country',\n site_domain: '$site_domain',\n ip: '$ip',\n};\n\nexport function findMetadataConflictWithTypedFields(\n metadata: FraudCustomMetadata,\n request: Record<string, unknown>\n): string | undefined {\n for (const [field, metaKey] of Object.entries(TYPED_METADATA_KEYS)) {\n if (request[field] !== undefined && metadata[metaKey] !== undefined) {\n return metaKey;\n }\n }\n return undefined;\n}\n","import { findMetadataConflictWithTypedFields } from '../types/metadata';\nimport type { FraudCustomMetadata } from '../types/metadata';\nimport type { FraudScoreRequestBase } from '../types/requests';\n\nexport function fieldPrefix(index?: number): string {\n return index === undefined ? '' : `requests[${index}].`;\n}\n\nexport function assertNonEmpty(\n value: string | undefined,\n field: string,\n errors: string[],\n prefix: string\n): void {\n if (!value?.trim()) {\n errors.push(`${prefix}${field} is required`);\n }\n}\n\nexport function assertEnum<T extends string>(\n value: string | undefined,\n allowed: readonly T[],\n field: string,\n errors: string[],\n prefix: string\n): void {\n if (value === undefined) return;\n if (!(allowed as readonly string[]).includes(value)) {\n errors.push(`${prefix}${field} must be one of: ${allowed.join(', ')}`);\n }\n}\n\nexport function assertPositiveAmount(\n amount: number | undefined,\n field: string,\n errors: string[],\n prefix: string\n): void {\n if (amount === undefined || amount <= 0) {\n errors.push(`${prefix}${field} must be greater than 0`);\n }\n}\n\nexport function validateMetadata(\n metadata: FraudCustomMetadata | undefined,\n request: FraudScoreRequestBase,\n errors: string[],\n prefix: string\n): void {\n if (!metadata) return;\n const conflictKey = findMetadataConflictWithTypedFields(\n metadata,\n request as unknown as Record<string, unknown>\n );\n if (conflictKey) {\n errors.push(\n `${prefix}metadata.${conflictKey} conflicts with a typed request field that maps to the same key; omit metadata.${conflictKey} or remove the typed field`\n );\n }\n}\n","import { ValidationError } from '@vesant-sdk/core';\nimport {\n normalizePaymentMethod,\n normalizePaymentType,\n PAYMENT_METHOD_FIELD_WHITELIST,\n} from '../normalization/payment-methods';\nimport {\n ChargebackReasonValues,\n ChargebackStateValues,\n LoginFailureReasonValues,\n LoginStatusValues,\n PasswordUpdateReasonValues,\n PasswordUpdateStatusValues,\n TransactionStatusValues,\n TransactionTypeValues,\n WagerStatusValues,\n TransactionType,\n} from '../types/enums';\nimport {\n isPlannedFraudEventType,\n isSupportedFraudEventType,\n SUPPORTED_FRAUD_EVENT_TYPES,\n} from '../types/events';\nimport type { FraudScoreRequest, FraudScoreRequestBase } from '../types/requests';\nimport {\n assertEnum,\n assertNonEmpty,\n assertPositiveAmount,\n fieldPrefix,\n validateMetadata,\n} from './helpers';\n\nconst E164_PHONE_PATTERN = /^\\+[1-9]\\d{7,14}$/;\n\nfunction validatePaymentMethods(\n request: FraudScoreRequestBase,\n errors: string[],\n prefix: string\n): void {\n const { payment_methods, skip_payment_method_normalization: skipNormalization } = request;\n\n if (payment_methods === undefined) return;\n\n if (payment_methods.length === 0) {\n errors.push(`${prefix}payment_methods must include at least one item when provided`);\n return;\n }\n\n payment_methods.forEach((method, index) => {\n const raw = method as Record<string, unknown>;\n\n if (skipNormalization) {\n for (const key of Object.keys(raw)) {\n const plainKey = key.startsWith('$') ? key.slice(1) : key;\n if (!PAYMENT_METHOD_FIELD_WHITELIST.has(plainKey)) {\n errors.push(\n `${prefix}payment_methods[${index}].${plainKey} is not a recognized payment method field`\n );\n }\n }\n const rawType =\n raw.payment_type !== undefined ? String(raw.payment_type) : undefined;\n if (rawType !== undefined && normalizePaymentType(rawType) === undefined) {\n errors.push(\n `${prefix}payment_methods[${index}].payment_type is not a recognized payment type`\n );\n }\n return;\n }\n\n const rawType =\n raw.payment_type !== undefined\n ? String(raw.payment_type)\n : raw.$payment_type !== undefined\n ? String(raw.$payment_type)\n : undefined;\n\n if (rawType !== undefined) {\n const result = normalizePaymentMethod(raw);\n if (result === null) {\n errors.push(\n `${prefix}payment_methods[${index}].payment_type is not a recognized payment type`\n );\n }\n }\n });\n}\n\nfunction validateBase(\n request: FraudScoreRequest,\n errors: string[],\n prefix: string\n): void {\n assertNonEmpty(request.customer_id, 'customer_id', errors, prefix);\n assertNonEmpty(request.user_reference, 'user_reference', errors, prefix);\n assertNonEmpty(request.event_type, 'event_type', errors, prefix);\n validateMetadata(request.metadata, request, errors, prefix);\n}\n\nfunction validateLogin(\n request: Extract<FraudScoreRequest, { event_type: '$login' }>,\n errors: string[],\n prefix: string\n): void {\n assertEnum(request.login_status, LoginStatusValues, 'login_status', errors, prefix);\n if (request.login_failure_reason !== undefined) {\n if (request.login_status === '$failure') {\n assertEnum(\n request.login_failure_reason,\n LoginFailureReasonValues,\n 'login_failure_reason',\n errors,\n prefix\n );\n } else {\n errors.push(`${prefix}login_failure_reason is only allowed when login_status is '$failure'`);\n }\n }\n}\n\nfunction validateUpdatePassword(\n request: Extract<FraudScoreRequest, { event_type: '$update_password' }>,\n errors: string[],\n prefix: string\n): void {\n assertEnum(\n request.password_reason,\n PasswordUpdateReasonValues,\n 'password_reason',\n errors,\n prefix\n );\n assertEnum(\n request.password_status,\n PasswordUpdateStatusValues,\n 'password_status',\n errors,\n prefix\n );\n}\n\nfunction validateTransaction(\n request: Extract<FraudScoreRequest, { event_type: '$transaction' }>,\n errors: string[],\n prefix: string\n): void {\n assertPositiveAmount(request.amount, 'amount', errors, prefix);\n assertNonEmpty(request.currency, 'currency', errors, prefix);\n assertEnum(request.transaction_type, TransactionTypeValues, 'transaction_type', errors, prefix);\n assertEnum(\n request.transaction_status,\n TransactionStatusValues,\n 'transaction_status',\n errors,\n prefix\n );\n\n if (request.decline_category !== undefined && request.transaction_status !== '$failure') {\n errors.push(\n `${prefix}decline_category is only allowed when transaction_status is '$failure'`\n );\n }\n\n if (\n request.transfer_recipient_user_id !== undefined &&\n request.transaction_type !== TransactionType.Transfer\n ) {\n errors.push(\n `${prefix}transfer_recipient_user_id is only allowed when transaction_type is '$transfer'`\n );\n }\n}\n\nfunction validateWager(\n request: Extract<FraudScoreRequest, { event_type: '$wager' }>,\n errors: string[],\n prefix: string\n): void {\n assertNonEmpty(request.transaction_id, 'transaction_id', errors, prefix);\n assertNonEmpty(request.wager_type, 'wager_type', errors, prefix);\n assertEnum(request.wager_status, WagerStatusValues, 'wager_status', errors, prefix);\n if (!request.wager_status) {\n errors.push(`${prefix}wager_status is required`);\n }\n assertPositiveAmount(request.amount, 'amount', errors, prefix);\n assertNonEmpty(request.currency, 'currency', errors, prefix);\n}\n\nfunction validateCreateAccount(\n request: Extract<FraudScoreRequest, { event_type: '$create_account' }>,\n errors: string[],\n prefix: string\n): void {\n validatePaymentMethods(request, errors, prefix);\n}\n\nfunction validateUpdateAccount(\n request: Extract<FraudScoreRequest, { event_type: '$update_account' }>,\n errors: string[],\n prefix: string\n): void {\n validatePaymentMethods(request, errors, prefix);\n\n if (request.verification_phone_number !== undefined) {\n if (!E164_PHONE_PATTERN.test(request.verification_phone_number.trim())) {\n errors.push(`${prefix}verification_phone_number must be E.164 (e.g. +14155550123)`);\n }\n }\n}\n\nfunction validateCreateOrder(\n request: Extract<FraudScoreRequest, { event_type: '$create_order' }>,\n errors: string[],\n prefix: string\n): void {\n assertPositiveAmount(request.amount, 'amount', errors, prefix);\n assertNonEmpty(request.currency_code, 'currency_code', errors, prefix);\n\n validatePaymentMethods(request, errors, prefix);\n\n if (request.shipping_tracking_numbers !== undefined) {\n const hasEmpty = request.shipping_tracking_numbers.some((n) => n.trim() === '');\n if (hasEmpty) {\n errors.push(`${prefix}shipping_tracking_numbers cannot contain empty values`);\n }\n }\n}\n\nfunction validateChargeback(\n request: Extract<FraudScoreRequest, { event_type: '$chargeback' }>,\n errors: string[],\n prefix: string\n): void {\n const hasTransactionId = !!request.transaction_id?.trim();\n const hasOrderId = !!request.order_id?.trim();\n if (!hasTransactionId && !hasOrderId) {\n errors.push(`${prefix}transaction_id or order_id is required`);\n }\n assertEnum(request.chargeback_state, ChargebackStateValues, 'chargeback_state', errors, prefix);\n assertEnum(\n request.chargeback_reason,\n ChargebackReasonValues,\n 'chargeback_reason',\n errors,\n prefix\n );\n if (request.ach_return_code !== undefined && request.ach_return_code.trim() !== '') {\n if (!/^R\\d{2}$/i.test(request.ach_return_code.trim())) {\n errors.push(`${prefix}ach_return_code must match NACHA R## pattern (e.g. R01)`);\n }\n }\n}\n\nfunction validateByEventType(request: FraudScoreRequest, errors: string[], prefix: string): void {\n switch (request.event_type) {\n case '$login':\n validateLogin(request, errors, prefix);\n break;\n case '$update_password':\n validateUpdatePassword(request, errors, prefix);\n break;\n case '$transaction':\n validateTransaction(request, errors, prefix);\n break;\n case '$wager':\n validateWager(request, errors, prefix);\n break;\n case '$create_order':\n validateCreateOrder(request, errors, prefix);\n break;\n case '$chargeback':\n validateChargeback(request, errors, prefix);\n break;\n case '$create_account':\n validateCreateAccount(request, errors, prefix);\n break;\n case '$logout':\n break;\n case '$update_account':\n validateUpdateAccount(request, errors, prefix);\n break;\n default:\n break;\n }\n}\n\nexport function validateScoreRequest(request: FraudScoreRequest, index?: number): void {\n const errors: string[] = [];\n const prefix = fieldPrefix(index);\n\n validateBase(request, errors, prefix);\n\n if (request.event_type && isPlannedFraudEventType(request.event_type)) {\n errors.push(\n `${prefix}event_type ${request.event_type} is not supported by POST /api/v1/fraud/score. Supported: ${SUPPORTED_FRAUD_EVENT_TYPES.join(', ')}`\n );\n } else if (request.event_type && !isSupportedFraudEventType(request.event_type)) {\n errors.push(\n `${prefix}event_type must be one of: ${SUPPORTED_FRAUD_EVENT_TYPES.join(', ')}`\n );\n } else if (isSupportedFraudEventType(request.event_type)) {\n validateByEventType(request, errors, prefix);\n }\n\n if (errors.length > 0) {\n throw new ValidationError(`Invalid fraud score request: ${errors.join(', ')}`, errors);\n }\n}\n","/**\n * Fraud scoring API client.\n */\n\nimport { BaseClient } from '@vesant-sdk/core';\nimport type { RequestOptions } from '@vesant-sdk/core';\nimport { ValidationError } from '@vesant-sdk/core';\nimport { normalizeScoreRequestForApi } from './normalization';\nimport type {\n FraudScoreRequest,\n FraudScoreResponseData,\n FraudScoreResponseEnvelope,\n} from './types';\nimport { validateScoreRequest } from './validation/rules';\n\nexport class FraudClient extends BaseClient {\n async scoreEvent(\n request: FraudScoreRequest,\n requestOptions?: RequestOptions\n ): Promise<FraudScoreResponseEnvelope<FraudScoreResponseData>> {\n validateScoreRequest(request);\n const body = normalizeScoreRequestForApi(request);\n\n return this.requestWithRetry<FraudScoreResponseEnvelope<FraudScoreResponseData>>(\n '/api/v1/fraud/score',\n {\n method: 'POST',\n body: JSON.stringify(body),\n },\n undefined,\n undefined,\n requestOptions\n );\n }\n\n async scoreEventsBulk(\n requests: FraudScoreRequest[],\n requestOptions?: RequestOptions\n ): Promise<FraudScoreResponseEnvelope<FraudScoreResponseData[]>> {\n if (!Array.isArray(requests) || requests.length === 0) {\n throw new ValidationError(\n 'Invalid bulk score request: at least one score request is required',\n ['requests']\n );\n }\n\n const bodies = requests.map((request, index) => {\n validateScoreRequest(request, index);\n return normalizeScoreRequestForApi(request);\n });\n\n return this.requestWithRetry<FraudScoreResponseEnvelope<FraudScoreResponseData[]>>(\n '/api/v1/fraud/score/bulk',\n {\n method: 'POST',\n body: JSON.stringify(bodies),\n },\n undefined,\n undefined,\n requestOptions\n );\n }\n}\n","/**\n * Fraud scoring types — responses and re-exports.\n */\n\nimport type { RiskLevel, Timestamp } from '@vesant-sdk/core';\nimport type { SupportedFraudEventType } from './types/events';\n\nexport * from './types/events';\nexport * from './types/enums';\nexport * from './types/metadata';\nexport * from './types/requests';\nexport * from './types/rule-signals';\nexport * from './types/structured-fields';\n\nexport type FraudReactionType =\n | 'approve'\n | 'reject'\n | 'hold'\n | 'restrict'\n | 'block'\n | 'refund'\n | 'void_transaction'\n | 'reverse_transaction'\n | 'freeze_account'\n | 'block_withdrawal'\n | 'limit_withdrawal'\n | 'disable_payment_method'\n | 'revoke_session'\n | 'require_reauth'\n | 'trigger_alert'\n | 'no_alert'\n | 'escalate'\n | 'increase_priority'\n | 'create_case'\n | 'auto_lock_account'\n | 'notify_team'\n | (string & Record<string, never>);\n\nexport interface TenantAction {\n type: FraudReactionType;\n params?: Record<string, unknown>;\n}\n\nexport type FraudDecision = 'approve' | 'review' | 'block' | 'reject' | (string & Record<string, never>);\n\nexport interface FraudScoreResponseData {\n reference: string;\n score: number;\n risk_level: RiskLevel;\n decision: FraudDecision;\n signals: string[];\n matched_rule_ids: string[];\n matched_rule_names: string[];\n applied_reactions: string[];\n alert_created: boolean;\n alert_reference?: string;\n tenant_actions: TenantAction[];\n}\n\n/**\n * Chargeback feedback responses may omit meaningful score/decision values.\n */\nexport interface ChargebackScoreResponseData extends Omit<FraudScoreResponseData, 'score' | 'decision'> {\n score?: number;\n decision?: FraudDecision;\n}\n\nexport interface FraudScoreResponseMetadata {\n request_id?: string;\n processing_ms?: number;\n tenant_id?: string;\n version?: string;\n}\n\nexport interface FraudScoreResponseEnvelope<T> {\n success: boolean;\n message: string;\n data: T;\n metadata?: FraudScoreResponseMetadata;\n timestamp: Timestamp;\n}\n\n/**\n * How a `fraud.alert.callback` decision was produced.\n *\n * - `sync` — resolved inline with the `/fraud/score` call; confirms a decision\n * the SDK response already returned.\n * - `deferred` — a rule configured with deferred timing re-scored the event\n * after a delay; the decision must be applied retroactively.\n * - `event_triggered` — a later related event caused a re-score of the original.\n */\nexport type FraudCallbackTrigger =\n | 'sync'\n | 'deferred'\n | 'event_triggered'\n | (string & Record<string, never>);\n\n/**\n * Outbound webhook body delivered to a tenant's configured fraud webhook URL\n * when a fraud rule resolves to a decision — including rules with **deferred**\n * or **event-triggered** timing that cannot return a verdict inline with the\n * `/fraud/score` call. Signed with `X-Webhook-Signature: sha256=<hex>`\n * (HMAC-SHA256 of the raw body). See the Fraud Integration guide.\n */\nexport interface FraudAlertCallbackEvent {\n /** Unique event ID — dedup on this; duplicate delivery is possible. */\n event_id: string;\n /** Always `\"fraud.alert.callback\"` — the wire event type to dispatch on. */\n event_type: 'fraud.alert.callback';\n /** Event-bus aggregate key (alert ID when an alert exists, else the reference). */\n aggregate_id: string;\n tenant_id: string;\n /** ISO 8601 timestamp of the decision. */\n timestamp: Timestamp;\n version?: number;\n correlation_id?: string;\n causation_id?: string;\n user_id?: string;\n /** Fraud reference (e.g. `\"FRD-e4b108d7\"`) — matches the sync score `reference`. */\n reference: string;\n /** Tenant customer ID the decision applies to. */\n customer_id: string;\n /** Originating fraud event type (`$create_account`, `$transaction`, …). */\n source_event_type: SupportedFraudEventType | (string & Record<string, never>);\n decision: FraudDecision;\n risk_level: RiskLevel;\n risk_score: number;\n /** Whether the decision arrived inline (`sync`) or as a later re-score. */\n trigger: FraudCallbackTrigger;\n /**\n * Tenant-scope reactions to apply on your platform — populated identically to\n * the sync `/fraud/score` response's `tenant_actions`. Always an array (never\n * null); empty when the rule resolved only to Vesant-scope reactions.\n */\n tenant_actions: TenantAction[];\n}\n\n/**\n * Type guard for the deferred/async fraud webhook body. Narrows an already\n * signature-verified, parsed payload to {@link FraudAlertCallbackEvent}.\n */\nexport function isFraudAlertCallbackEvent(\n value: unknown\n): value is FraudAlertCallbackEvent {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { event_type?: unknown }).event_type === 'fraud.alert.callback'\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/enums.ts","../src/types/rule-signals.ts","../src/normalization/payment-methods.ts","../src/normalization/reserved-keys.ts","../src/normalization/normalize.ts","../src/normalization/preview.ts","../src/types/events.ts","../src/types/metadata.ts","../src/validation/helpers.ts","../src/validation/rules.ts","../src/client.ts","../src/types.ts"],"names":["rawType","ValidationError"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Enum types and const objects for fraud scoring requests.\n */\n\nimport { PAYMENT_TYPE_VALUES, type PaymentTypeValue } from '@vesant-sdk/core';\n\nexport type TransactionType =\n | '$sale'\n | '$authorize'\n | '$capture'\n | '$void'\n | '$refund'\n | '$deposit'\n | '$withdrawal'\n | '$transfer'\n | '$buy'\n | '$sell'\n | '$send'\n | '$receive';\n\nexport const TransactionTypeValues = [\n '$sale',\n '$authorize',\n '$capture',\n '$void',\n '$refund',\n '$deposit',\n '$withdrawal',\n '$transfer',\n '$buy',\n '$sell',\n '$send',\n '$receive',\n] as const satisfies readonly TransactionType[];\n\nexport const TransactionType = {\n Sale: '$sale',\n Authorize: '$authorize',\n Capture: '$capture',\n Void: '$void',\n Refund: '$refund',\n Deposit: '$deposit',\n Withdrawal: '$withdrawal',\n Transfer: '$transfer',\n Buy: '$buy',\n Sell: '$sell',\n Send: '$send',\n Receive: '$receive',\n} as const satisfies Record<string, TransactionType>;\n\nexport type ChargebackState =\n | '$received'\n | '$accepted'\n | '$disputed'\n | '$won'\n | '$lost';\n\nexport const ChargebackStateValues = [\n '$received',\n '$accepted',\n '$disputed',\n '$won',\n '$lost',\n] as const satisfies readonly ChargebackState[];\n\nexport const ChargebackState = {\n Received: '$received',\n Accepted: '$accepted',\n Disputed: '$disputed',\n Won: '$won',\n Lost: '$lost',\n} as const satisfies Record<string, ChargebackState>;\n\nexport type ChargebackReason =\n | '$fraud'\n | '$duplicate'\n | '$product_not_received'\n | '$product_unacceptable'\n | '$authorization'\n | '$consumer_disputes'\n | '$processing_errors'\n | '$cancel_subscription'\n | '$friendly_fraud'\n | '$ach_return'\n | '$ach_reversal'\n | '$other';\n\nexport const ChargebackReasonValues = [\n '$fraud',\n '$duplicate',\n '$product_not_received',\n '$product_unacceptable',\n '$authorization',\n '$consumer_disputes',\n '$processing_errors',\n '$cancel_subscription',\n '$friendly_fraud',\n '$ach_return',\n '$ach_reversal',\n '$other',\n] as const satisfies readonly ChargebackReason[];\n\nexport const ChargebackReason = {\n Fraud: '$fraud',\n Duplicate: '$duplicate',\n ProductNotReceived: '$product_not_received',\n ProductUnacceptable: '$product_unacceptable',\n Authorization: '$authorization',\n ConsumerDisputes: '$consumer_disputes',\n ProcessingErrors: '$processing_errors',\n CancelSubscription: '$cancel_subscription',\n FriendlyFraud: '$friendly_fraud',\n AchReturn: '$ach_return',\n AchReversal: '$ach_reversal',\n Other: '$other',\n} as const satisfies Record<string, ChargebackReason>;\n\nexport type LoginStatus = '$success' | '$failure';\n\nexport const LoginStatusValues = ['$success', '$failure'] as const satisfies readonly LoginStatus[];\n\nexport const LoginStatus = {\n Success: '$success',\n Failure: '$failure',\n} as const satisfies Record<string, LoginStatus>;\n\nexport type LoginFailureReason =\n | '$account_unknown'\n | '$account_suspended'\n | '$account_disabled'\n | '$wrong_password';\n\nexport const LoginFailureReasonValues = [\n '$account_unknown',\n '$account_suspended',\n '$account_disabled',\n '$wrong_password',\n] as const satisfies readonly LoginFailureReason[];\n\nexport type PasswordUpdateReason =\n | '$user_update'\n | '$forgot_password'\n | '$forced_reset';\n\nexport const PasswordUpdateReasonValues = [\n '$user_update',\n '$forgot_password',\n '$forced_reset',\n] as const satisfies readonly PasswordUpdateReason[];\n\nexport const PasswordUpdateReason = {\n UserUpdate: PasswordUpdateReasonValues[0],\n ForgotPassword: PasswordUpdateReasonValues[1],\n ForcedReset: PasswordUpdateReasonValues[2],\n} as const satisfies Record<string, PasswordUpdateReason>;\n\nexport type PasswordUpdateStatus = '$pending' | '$success' | '$failure';\n\nexport const PasswordUpdateStatusValues = [\n '$pending',\n '$success',\n '$failure',\n] as const satisfies readonly PasswordUpdateStatus[];\n\nexport const PasswordUpdateStatus = {\n Pending: '$pending',\n Success: '$success',\n Failure: '$failure',\n} as const satisfies Record<string, PasswordUpdateStatus>;\n\nexport type WagerStatus = '$accept' | '$cancel';\n\nexport const WagerStatusValues = ['$accept', '$cancel'] as const satisfies readonly WagerStatus[];\n\nexport const WagerStatus = {\n Accept: '$accept',\n Cancel: '$cancel',\n} as const satisfies Record<string, WagerStatus>;\n\nexport type TransactionStatus = '$success' | '$failure' | '$pending';\n\nexport const TransactionStatusValues = [\n '$success',\n '$failure',\n '$pending',\n] as const satisfies readonly TransactionStatus[];\n\nexport const TransactionStatus = {\n Success: '$success',\n Failure: '$failure',\n Pending: '$pending',\n} as const satisfies Record<string, TransactionStatus>;\n\nexport type PaymentType = PaymentTypeValue;\n\nexport const PaymentTypeValues = PAYMENT_TYPE_VALUES;\n\nexport const PaymentType = {\n Cash: '$cash',\n Check: '$check',\n CreditCard: '$credit_card',\n CryptoCurrency: '$crypto_currency',\n DebitCard: '$debit_card',\n DigitalWallet: '$digital_wallet',\n ElectronicFundTransfer: '$electronic_fund_transfer',\n Financing: '$financing',\n GiftCard: '$gift_card',\n Invoice: '$invoice',\n InAppPurchase: '$in_app_purchase',\n MoneyOrder: '$money_order',\n Points: '$points',\n PrepaidCard: '$prepaid_card',\n StoreCredit: '$store_credit',\n ThirdPartyProcessor: '$third_party_processor',\n Voucher: '$voucher',\n SepaCredit: '$sepa_credit',\n SepaInstantCredit: '$sepa_instant_credit',\n SepaDirectDebit: '$sepa_direct_debit',\n AchCredit: '$ach_credit',\n AchDebit: '$ach_debit',\n WireCredit: '$wire_credit',\n WireDebit: '$wire_debit',\n} as const satisfies Record<string, PaymentType>;\n\nexport type WalletType = '$crypto' | '$digital' | '$fiat';\n\nexport const WalletTypeValues = ['$crypto', '$digital', '$fiat'] as const satisfies readonly WalletType[];\n\nexport const WalletType = {\n Crypto: '$crypto',\n Digital: '$digital',\n Fiat: '$fiat',\n} as const satisfies Record<string, WalletType>;\n\nexport type FraudRiskLevel = 'low' | 'medium' | 'high' | 'critical';\n","/**\n * Optional top-level rule-signal fields copied into plain metadata on the wire.\n */\n\nexport interface LoginRuleSignals {\n ip_country_mismatch?: boolean;\n}\n\nexport interface UpdateAccountRuleSignals {\n two_fa_enabled?: boolean;\n two_fa_disabled?: boolean;\n two_fa_method_changed?: boolean;\n}\n\nexport interface TransactionRuleSignals {\n payment_method?: string;\n is_first_deposit?: boolean;\n cumulative_deposit_amount?: number;\n deposit_count?: number;\n failed_deposit_count?: number;\n is_first_withdrawal?: boolean;\n withdrawal_method_differs?: boolean;\n cumulative_withdrawal_amount?: number;\n withdrawal_count?: number;\n hours_since_last_deposit?: number;\n days_since_last_activity?: number;\n hours_since_account_creation?: number;\n}\n\nexport const LOGIN_RULE_SIGNAL_KEYS = ['ip_country_mismatch'] as const;\n\nexport const UPDATE_ACCOUNT_RULE_SIGNAL_KEYS = [\n 'two_fa_enabled',\n 'two_fa_disabled',\n 'two_fa_method_changed',\n] as const;\n\nexport const TRANSACTION_RULE_SIGNAL_KEYS = [\n 'payment_method',\n 'is_first_deposit',\n 'cumulative_deposit_amount',\n 'deposit_count',\n 'failed_deposit_count',\n 'is_first_withdrawal',\n 'withdrawal_method_differs',\n 'cumulative_withdrawal_amount',\n 'withdrawal_count',\n 'hours_since_last_deposit',\n 'days_since_last_activity',\n 'hours_since_account_creation',\n] as const;\n","import { normalizePaymentType } from '@vesant-sdk/core';\nimport type { PaymentMethod } from '../types/structured-fields';\n\nexport { normalizePaymentType };\n\nconst PAYMENT_METHOD_FIELD_WHITELIST = new Set([\n 'payment_type',\n 'payment_gateway',\n 'card_bin',\n 'card_last4',\n 'avs_result_code',\n 'cvv_result_code',\n 'verification_status',\n 'routing_number',\n 'account_holder_name',\n 'account_number_last5',\n 'bank_name',\n 'bank_country',\n 'wallet_address',\n 'wallet_type',\n 'paypal_payer_id',\n 'paypal_payer_email',\n]);\n\nconst DEPRECATED_PAYMENT_METHOD_KEYS = [\n 'account_number_last4',\n 'account_id',\n 'wallet_address_last4',\n 'crypto_currency',\n 'network',\n] as const;\n\nconst METADATA_STRIP_KEYS = new Set([\n 'account_id',\n 'wallet_address_last4',\n 'crypto_currency',\n 'network',\n]);\n\nfunction isDevEnvironment(): boolean {\n return typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n}\n\nfunction warnDeprecatedKey(key: string): void {\n if (!isDevEnvironment()) return;\n const messages: Record<string, string> = {\n account_number_last4:\n '[vesant-sdk/fraud] account_number_last4 is not a recognized field; use account_number_last5',\n account_id: '[vesant-sdk/fraud] account_id is not a recognized field; moved to metadata',\n wallet_address_last4:\n '[vesant-sdk/fraud] wallet_address_last4 is not a recognized field; moved to metadata',\n crypto_currency:\n '[vesant-sdk/fraud] crypto_currency is not a recognized field on payment_method; moved to metadata',\n network: '[vesant-sdk/fraud] network is not a recognized field on payment_method; moved to metadata',\n };\n const message = messages[key];\n if (message) {\n console.warn(message);\n }\n}\n\n/**\n * Normalizes last-4/last-5 account digits for $account_number_last5.\n */\nexport function toAccountNumberLast5(value: unknown): string | undefined {\n if (value === undefined || value === null) return undefined;\n const digits = String(value).replace(/\\D/g, '');\n if (digits.length === 0) return undefined;\n if (digits.length >= 5) return digits.slice(-5);\n return digits.padStart(5, '0');\n}\n\nexport type NormalizePaymentMethodResult = {\n method: PaymentMethod;\n metadataExtras?: Record<string, unknown>;\n};\n\nfunction collectMetadataExtra(\n metadataExtras: Record<string, unknown>,\n key: string,\n value: unknown\n): void {\n if (value === undefined) return;\n metadataExtras[key] = value;\n}\n\n/**\n * Normalizes a single payment method object for the wire format.\n */\nexport function normalizePaymentMethod(\n raw: Record<string, unknown>\n): NormalizePaymentMethodResult | null {\n const metadataExtras: Record<string, unknown> = {};\n const method: PaymentMethod = {};\n\n const rawPaymentType =\n raw.payment_type !== undefined\n ? String(raw.payment_type)\n : raw.$payment_type !== undefined\n ? String(raw.$payment_type)\n : undefined;\n\n const normalizedType = normalizePaymentType(rawPaymentType);\n if (rawPaymentType !== undefined && normalizedType === undefined) {\n return null;\n }\n if (normalizedType !== undefined) {\n method.payment_type = normalizedType;\n }\n\n for (const key of DEPRECATED_PAYMENT_METHOD_KEYS) {\n if (key in raw) warnDeprecatedKey(key);\n }\n\n const accountLast4 = raw.account_number_last4 ?? raw.$account_number_last4;\n const accountLast5 = raw.account_number_last5 ?? raw.$account_number_last5;\n const resolvedLast5 = toAccountNumberLast5(accountLast5 ?? accountLast4);\n if (resolvedLast5 !== undefined) {\n method.account_number_last5 = resolvedLast5;\n }\n\n for (const [key, value] of Object.entries(raw)) {\n if (key === 'payment_type' || key === '$payment_type') continue;\n if (key === 'account_number_last4' || key === '$account_number_last4') continue;\n if (key === 'account_number_last5' || key === '$account_number_last5') continue;\n\n const plainKey = key.startsWith('$') ? key.slice(1) : key;\n\n if (METADATA_STRIP_KEYS.has(plainKey)) {\n if (plainKey === 'account_id') {\n collectMetadataExtra(metadataExtras, 'payment_method_account_id', String(value));\n } else {\n collectMetadataExtra(metadataExtras, plainKey, value);\n }\n continue;\n }\n\n if (!PAYMENT_METHOD_FIELD_WHITELIST.has(plainKey)) {\n collectMetadataExtra(metadataExtras, `payment_method_${plainKey}`, value);\n continue;\n }\n\n if (plainKey === 'payment_type') {\n continue;\n }\n\n method[plainKey] = value;\n }\n\n const hasMetadata = Object.keys(metadataExtras).length > 0;\n return {\n method,\n ...(hasMetadata ? { metadataExtras } : {}),\n };\n}\n\nfunction mergeAccountIds(\n target: Record<string, unknown>,\n accountId: string\n): void {\n const existing = target.payment_method_account_ids;\n if (Array.isArray(existing)) {\n existing.push(accountId);\n return;\n }\n if (typeof target.payment_method_account_id === 'string') {\n target.payment_method_account_ids = [target.payment_method_account_id, accountId];\n delete target.payment_method_account_id;\n return;\n }\n target.payment_method_account_id = accountId;\n}\n\n/**\n * Normalizes payment method arrays and aggregates stripped metadata.\n */\nexport function normalizePaymentMethods(\n methods: PaymentMethod[] | undefined\n): { payment_methods?: PaymentMethod[]; metadata?: Record<string, unknown> } {\n if (methods === undefined) return {};\n\n const normalized: PaymentMethod[] = [];\n const metadata: Record<string, unknown> = {};\n\n for (const raw of methods) {\n const result = normalizePaymentMethod(raw as Record<string, unknown>);\n if (result === null) continue;\n normalized.push(result.method);\n\n if (result.metadataExtras) {\n for (const [key, value] of Object.entries(result.metadataExtras)) {\n if (key === 'payment_method_account_id' && typeof value === 'string') {\n mergeAccountIds(metadata, value);\n } else if (key in metadata && Array.isArray(metadata[key]) && Array.isArray(value)) {\n metadata[key] = [...(metadata[key] as unknown[]), ...value];\n } else if (!(key in metadata)) {\n metadata[key] = value;\n }\n }\n }\n }\n\n const hasMetadata = Object.keys(metadata).length > 0;\n return {\n payment_methods: normalized,\n ...(hasMetadata ? { metadata } : {}),\n };\n}\n\nexport { PAYMENT_METHOD_FIELD_WHITELIST };\n","function reservedKey(key: string): string {\n return key.startsWith('$') ? key : `$${key}`;\n}\n\n/**\n * Recursively prefix object keys with $ for the reserved wire format (no double-prefix).\n */\nexport function toReservedKeyedObject(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((item) => toReservedKeyedObject(item));\n }\n if (typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(value as Record<string, unknown>)) {\n out[reservedKey(key)] = toReservedKeyedObject(nested);\n }\n return out;\n }\n return value;\n}\n","import { LoginStatus, PasswordUpdateReason, PasswordUpdateStatus } from '../types/enums';\nimport type { FraudCustomMetadata } from '../types/metadata';\nimport type { FraudScoreRequest } from '../types/requests';\nimport type { PaymentMethod } from '../types/structured-fields';\nimport {\n LOGIN_RULE_SIGNAL_KEYS,\n TRANSACTION_RULE_SIGNAL_KEYS,\n UPDATE_ACCOUNT_RULE_SIGNAL_KEYS,\n} from '../types/rule-signals';\nimport {\n normalizePaymentMethod,\n normalizePaymentMethods,\n normalizePaymentType,\n} from './payment-methods';\nimport { toReservedKeyedObject } from './reserved-keys';\n\n/**\n * Wire name for the scoring engine's stable per-customer reference. The SDK\n * exposes this as `user_reference`; the scoring API expects the legacy key.\n */\nconst WIRE_USER_REFERENCE_KEY = 'sift_user_id';\n\nconst BASE_RESERVED_FIELD_KEYS = [\n 'session_id',\n 'user_email',\n 'name',\n 'phone',\n 'payment_method_details',\n 'payment_methods',\n 'billing_address',\n 'shipping_address',\n 'app',\n 'browser',\n 'verification_phone_number',\n 'order_id',\n 'exchange_rate',\n 'expedited_shipping',\n 'shipping_method',\n 'shipping_carrier',\n 'shipping_tracking_numbers',\n 'brand_name',\n 'site_country',\n 'site_domain',\n 'ip',\n 'skip_payment_method_normalization',\n] as const;\n\nfunction mergeMetadata(\n base: FraudCustomMetadata | undefined,\n extras: FraudCustomMetadata\n): FraudCustomMetadata {\n return { ...base, ...extras };\n}\n\nfunction stripSdkOnlyFields(\n request: Record<string, unknown>,\n keys: string[]\n): Record<string, unknown> {\n const body = { ...request };\n for (const key of keys) {\n delete body[key];\n }\n return body;\n}\n\nfunction createStrippedBody(\n rest: Record<string, unknown>,\n metadata: FraudCustomMetadata | undefined,\n stripKeys: string[]\n): Record<string, unknown> {\n return stripSdkOnlyFields(\n { ...rest, metadata: mergeMetadata(metadata, {}) },\n stripKeys\n );\n}\n\nfunction applyReservedMetadata(\n body: Record<string, unknown>,\n metadata: FraudCustomMetadata | undefined,\n reservedMetadata: FraudCustomMetadata,\n onlyWhenNonEmpty = false\n): Record<string, unknown> {\n if (!onlyWhenNonEmpty || Object.keys(reservedMetadata).length > 0) {\n body.metadata = mergeMetadata(metadata, reservedMetadata);\n }\n return body;\n}\n\nfunction collectRuleSignals(\n request: Record<string, unknown>,\n keys: readonly string[]\n): FraudCustomMetadata {\n const signals: FraudCustomMetadata = {};\n for (const key of keys) {\n const value = request[key];\n if (value !== undefined) {\n signals[key] = value;\n }\n }\n return signals;\n}\n\nfunction buildBaseReservedMetadata(body: Record<string, unknown>): FraudCustomMetadata {\n const {\n event_type,\n session_id,\n user_email,\n name,\n phone,\n payment_method_details,\n payment_methods,\n billing_address,\n shipping_address,\n app,\n browser,\n verification_phone_number,\n order_id,\n amount,\n currency_code,\n exchange_rate,\n expedited_shipping,\n shipping_method,\n shipping_carrier,\n shipping_tracking_numbers,\n brand_name,\n site_country,\n site_domain,\n ip,\n metadata,\n skip_payment_method_normalization,\n } = body;\n\n const reservedMetadata: FraudCustomMetadata = {\n ...((metadata as FraudCustomMetadata | undefined) ?? {}),\n };\n\n if (session_id !== undefined) reservedMetadata.$session_id = session_id;\n if (user_email !== undefined) reservedMetadata.$user_email = user_email;\n if (name !== undefined) reservedMetadata.$name = name;\n if (phone !== undefined) reservedMetadata.$phone = phone;\n\n if (payment_method_details !== undefined) {\n if (skip_payment_method_normalization) {\n reservedMetadata.$payment_method = toReservedKeyedObject(payment_method_details) as FraudCustomMetadata[string];\n } else {\n const result = normalizePaymentMethod(\n payment_method_details as Record<string, unknown>\n );\n if (result !== null) {\n reservedMetadata.$payment_method = toReservedKeyedObject(result.method) as FraudCustomMetadata[string];\n if (result.metadataExtras) {\n Object.assign(reservedMetadata, result.metadataExtras);\n }\n }\n }\n }\n\n if (payment_methods !== undefined) {\n if (skip_payment_method_normalization) {\n reservedMetadata.$payment_methods = toReservedKeyedObject(payment_methods) as FraudCustomMetadata[string];\n } else {\n const { payment_methods: normalized, metadata: pmMetadata } = normalizePaymentMethods(\n payment_methods as PaymentMethod[]\n );\n if (normalized !== undefined) {\n reservedMetadata.$payment_methods = toReservedKeyedObject(normalized) as FraudCustomMetadata[string];\n }\n if (pmMetadata) {\n Object.assign(reservedMetadata, pmMetadata);\n }\n }\n }\n if (billing_address !== undefined) {\n reservedMetadata.$billing_address = toReservedKeyedObject(billing_address) as FraudCustomMetadata[string];\n }\n if (shipping_address !== undefined) {\n reservedMetadata.$shipping_address = toReservedKeyedObject(shipping_address) as FraudCustomMetadata[string];\n }\n if (app !== undefined) reservedMetadata.$app = toReservedKeyedObject(app) as FraudCustomMetadata[string];\n if (browser !== undefined) {\n reservedMetadata.$browser = toReservedKeyedObject(browser) as FraudCustomMetadata[string];\n }\n if (event_type === '$create_order' || event_type === '$update_account') {\n if (verification_phone_number !== undefined) {\n reservedMetadata.$verification_phone_number = verification_phone_number;\n }\n }\n if (event_type === '$create_order') {\n if (order_id !== undefined) reservedMetadata.$order_id = order_id;\n if (amount !== undefined) reservedMetadata.$amount = amount;\n if (currency_code !== undefined) reservedMetadata.$currency_code = currency_code;\n if (exchange_rate !== undefined) {\n reservedMetadata.$exchange_rate = toReservedKeyedObject(exchange_rate) as FraudCustomMetadata[string];\n }\n if (expedited_shipping !== undefined) reservedMetadata.$expedited_shipping = expedited_shipping;\n if (shipping_method !== undefined) reservedMetadata.$shipping_method = shipping_method;\n if (shipping_carrier !== undefined) reservedMetadata.$shipping_carrier = shipping_carrier;\n if (shipping_tracking_numbers !== undefined) {\n reservedMetadata.$shipping_tracking_numbers = shipping_tracking_numbers;\n }\n if (brand_name !== undefined) reservedMetadata.$brand_name = brand_name;\n if (site_country !== undefined) reservedMetadata.$site_country = site_country;\n if (site_domain !== undefined) reservedMetadata.$site_domain = site_domain;\n if (ip !== undefined) reservedMetadata.$ip = ip;\n }\n\n return reservedMetadata;\n}\n\nfunction normalizeBaseReservedFields(body: Record<string, unknown>): Record<string, unknown> {\n const reservedMetadata = buildBaseReservedMetadata(body);\n if (typeof reservedMetadata.payment_method === 'string') {\n reservedMetadata.payment_method =\n normalizePaymentType(reservedMetadata.payment_method) ?? reservedMetadata.payment_method;\n }\n const stripped = stripSdkOnlyFields(body, [...BASE_RESERVED_FIELD_KEYS]);\n\n if ('user_reference' in stripped) {\n stripped[WIRE_USER_REFERENCE_KEY] = stripped.user_reference;\n delete stripped.user_reference;\n }\n\n if (Object.keys(reservedMetadata).length > 0) {\n stripped.metadata = reservedMetadata;\n }\n\n return stripped;\n}\n\nfunction applyRuleSignals(\n body: Record<string, unknown>,\n request: Record<string, unknown>,\n keys: readonly string[],\n stripKeys: readonly string[]\n): Record<string, unknown> {\n const ruleSignals = collectRuleSignals(request, keys);\n const stripped = stripSdkOnlyFields(body, [...stripKeys]);\n if (Object.keys(ruleSignals).length > 0) {\n stripped.metadata = mergeMetadata(\n stripped.metadata as FraudCustomMetadata | undefined,\n ruleSignals\n );\n }\n return stripped;\n}\n\nfunction normalizeUpdatePassword(\n request: Extract<FraudScoreRequest, { event_type: '$update_password' }>\n): Record<string, unknown> {\n const { password_reason, password_status, metadata, ...rest } = request;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n 'password_reason',\n 'password_status',\n ]);\n const reservedMetadata: FraudCustomMetadata = {\n $reason: password_reason ?? PasswordUpdateReason.UserUpdate,\n $status: password_status ?? PasswordUpdateStatus.Success,\n };\n body = applyReservedMetadata(body, metadata, reservedMetadata);\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeWager(\n request: Extract<FraudScoreRequest, { event_type: '$wager' }>\n): Record<string, unknown> {\n const { wager_type, wager_status, wager_event_type, wager_event_name, wager_event_id, metadata, ...rest } =\n request;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n 'wager_type',\n 'wager_status',\n 'wager_event_type',\n 'wager_event_name',\n 'wager_event_id',\n ]);\n const reservedMetadata: FraudCustomMetadata = {\n $wager_type: wager_type,\n $wager_status: wager_status,\n };\n if (wager_event_type) reservedMetadata.$wager_event_type = wager_event_type;\n if (wager_event_name) reservedMetadata.$wager_event_name = wager_event_name;\n if (wager_event_id) reservedMetadata.$wager_event_id = wager_event_id;\n body = applyReservedMetadata(body, metadata, reservedMetadata);\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeLogin(\n request: Extract<FraudScoreRequest, { event_type: '$login' }>\n): Record<string, unknown> {\n const { login_status, login_failure_reason, metadata, ...rest } = request;\n const effectiveStatus = login_status ?? LoginStatus.Success;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n 'login_status',\n 'login_failure_reason',\n ...LOGIN_RULE_SIGNAL_KEYS,\n ]);\n const reservedMetadata: FraudCustomMetadata = {\n $login_status: effectiveStatus,\n };\n if (effectiveStatus === LoginStatus.Failure && login_failure_reason) {\n reservedMetadata.$failure_reason = login_failure_reason;\n }\n body = applyReservedMetadata(body, metadata, reservedMetadata);\n body = applyRuleSignals(\n body,\n request as unknown as Record<string, unknown>,\n LOGIN_RULE_SIGNAL_KEYS,\n []\n );\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeTransaction(\n request: Extract<FraudScoreRequest, { event_type: '$transaction' }>\n): Record<string, unknown> {\n const { transaction_status, decline_category, transfer_recipient_user_id, metadata, ...rest } =\n request;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n 'transaction_status',\n 'decline_category',\n 'transfer_recipient_user_id',\n ...TRANSACTION_RULE_SIGNAL_KEYS,\n ]);\n const reservedMetadata: FraudCustomMetadata = {};\n if (transaction_status) reservedMetadata.$transaction_status = transaction_status;\n if (decline_category) reservedMetadata.$decline_category = decline_category;\n if (transfer_recipient_user_id) {\n reservedMetadata.$transfer_recipient_user_id = transfer_recipient_user_id;\n }\n body = applyReservedMetadata(body, metadata, reservedMetadata, true);\n body = applyRuleSignals(\n body,\n request as unknown as Record<string, unknown>,\n TRANSACTION_RULE_SIGNAL_KEYS,\n []\n );\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeUpdateAccount(\n request: Extract<FraudScoreRequest, { event_type: '$update_account' }>\n): Record<string, unknown> {\n const { metadata, ...rest } = request;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n ...UPDATE_ACCOUNT_RULE_SIGNAL_KEYS,\n ]);\n body = applyRuleSignals(\n body,\n request as unknown as Record<string, unknown>,\n UPDATE_ACCOUNT_RULE_SIGNAL_KEYS,\n []\n );\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeCreateOrder(\n request: Extract<FraudScoreRequest, { event_type: '$create_order' }>\n): Record<string, unknown> {\n const { amount, currency_code, metadata, ...rest } = request;\n let body = createStrippedBody(rest as Record<string, unknown>, metadata, [\n 'amount',\n 'currency_code',\n ]);\n const reservedMetadata: FraudCustomMetadata = {\n $amount: amount,\n $currency_code: currency_code,\n };\n body = applyReservedMetadata(body, metadata, reservedMetadata);\n return normalizeBaseReservedFields(body);\n}\n\nfunction normalizeDefault(request: FraudScoreRequest): Record<string, unknown> {\n return normalizeBaseReservedFields({ ...request } as Record<string, unknown>);\n}\n\nexport function normalizeScoreRequestForApi(request: FraudScoreRequest): Record<string, unknown> {\n switch (request.event_type) {\n case '$update_password':\n return normalizeUpdatePassword(request);\n case '$wager':\n return normalizeWager(request);\n case '$login':\n return normalizeLogin(request);\n case '$transaction':\n return normalizeTransaction(request);\n case '$update_account':\n return normalizeUpdateAccount(request);\n case '$create_order':\n return normalizeCreateOrder(request);\n default:\n return normalizeDefault(request);\n }\n}\n","import type { FraudScoreRequest } from '../types/requests';\nimport { normalizeScoreRequestForApi } from './normalize';\n\n/**\n * Returns the JSON body that would be sent to POST /api/v1/fraud/score after normalization.\n * Useful for debugging without calling the API.\n */\nexport function buildScoreRequestPreview(request: FraudScoreRequest): Record<string, unknown> {\n return normalizeScoreRequestForApi(request);\n}\n","/**\n * Fraud event type unions aligned with fraud-service support matrix.\n */\n\n/** Events that run engine scoring + rule evaluation */\nexport type ScoredFraudEventType =\n | '$create_account'\n | '$create_order'\n | '$login'\n | '$logout'\n | '$update_account'\n | '$update_password'\n | '$transaction'\n | '$wager';\n\n/** Feedback-only; no meaningful fraud score in response */\nexport type ChargebackFraudEventType = '$chargeback';\n\n/** Union accepted by scoreEvent / scoreEventsBulk */\nexport type SupportedFraudEventType = ScoredFraudEventType | ChargebackFraudEventType;\n\nexport const SCORED_FRAUD_EVENT_TYPES: readonly ScoredFraudEventType[] = [\n '$create_account',\n '$create_order',\n '$login',\n '$logout',\n '$update_account',\n '$update_password',\n '$transaction',\n '$wager',\n] as const;\n\nexport const CHARGEBACK_FRAUD_EVENT_TYPE = '$chargeback' as const;\n\nexport const SUPPORTED_FRAUD_EVENT_TYPES: readonly SupportedFraudEventType[] = [\n ...SCORED_FRAUD_EVENT_TYPES,\n CHARGEBACK_FRAUD_EVENT_TYPE,\n] as const;\n\nexport const PLANNED_FRAUD_EVENT_TYPES = [\n '$verification',\n '$link_session_to_user',\n '$security_notification',\n '$update_order',\n '$order_status',\n '$add_promotion',\n] as const;\n\n/**\n * Listed in Vesant dashboard / future API — NOT valid for scoreEvent today.\n * @deprecated Not supported by POST /api/v1/fraud/score\n */\nexport type PlannedFraudEventType = (typeof PLANNED_FRAUD_EVENT_TYPES)[number];\n\n/**\n * @deprecated Use SupportedFraudEventType; kept for migration\n */\nexport type FraudEventType = SupportedFraudEventType | (typeof PLANNED_FRAUD_EVENT_TYPES)[number];\n\nexport function isPlannedFraudEventType(\n eventType: string\n): eventType is (typeof PLANNED_FRAUD_EVENT_TYPES)[number] {\n return (PLANNED_FRAUD_EVENT_TYPES as readonly string[]).includes(eventType);\n}\n\nexport function isSupportedFraudEventType(\n eventType: string\n): eventType is SupportedFraudEventType {\n return (SUPPORTED_FRAUD_EVENT_TYPES as readonly string[]).includes(eventType);\n}\n","/**\n * Metadata for fraud score requests.\n * Plain keys are Vesant rule signals; $-prefixed keys are reserved pass-through (or set via typed fields).\n */\n\nexport interface FraudRuleSignalMetadata {\n /** Rule signal payment method (e.g. \"$credit_card\"), not the reserved $payment_method object */\n payment_method?: string;\n country?: string;\n /** Customer date of birth, ISO 8601 (YYYY-MM-DD). Useful on onboarding ($create_account). */\n date_of_birth?: string;\n two_fa_enabled?: boolean;\n two_fa_disabled?: boolean;\n two_fa_method_changed?: boolean;\n ip_country_mismatch?: boolean;\n is_first_deposit?: boolean;\n cumulative_deposit_amount?: number;\n deposit_count?: number;\n failed_deposit_count?: number;\n is_first_withdrawal?: boolean;\n withdrawal_method_differs?: boolean;\n cumulative_withdrawal_amount?: number;\n withdrawal_count?: number;\n hours_since_last_deposit?: number;\n days_since_last_activity?: number;\n hours_since_account_creation?: number;\n}\n\n/** Extra reserved fields forwarded verbatim in metadata (e.g. $referrer_user_id, $promotions). */\nexport type ReservedMetadata = Record<`$${string}`, unknown>;\n\nexport type FraudCustomMetadata = FraudRuleSignalMetadata &\n ReservedMetadata &\n Record<string, unknown>;\n\n/** Maps typed request fields to metadata keys they populate (typed values win on normalize). */\nexport const TYPED_METADATA_KEYS: Readonly<Record<string, string>> = {\n session_id: '$session_id',\n user_email: '$user_email',\n name: '$name',\n phone: '$phone',\n payment_method_details: '$payment_method',\n billing_address: '$billing_address',\n payment_methods: '$payment_methods',\n app: '$app',\n verification_phone_number: '$verification_phone_number',\n order_id: '$order_id',\n exchange_rate: '$exchange_rate',\n shipping_address: '$shipping_address',\n expedited_shipping: '$expedited_shipping',\n shipping_method: '$shipping_method',\n shipping_carrier: '$shipping_carrier',\n shipping_tracking_numbers: '$shipping_tracking_numbers',\n browser: '$browser',\n brand_name: '$brand_name',\n site_country: '$site_country',\n site_domain: '$site_domain',\n ip: '$ip',\n};\n\nexport function findMetadataConflictWithTypedFields(\n metadata: FraudCustomMetadata,\n request: Record<string, unknown>\n): string | undefined {\n for (const [field, metaKey] of Object.entries(TYPED_METADATA_KEYS)) {\n if (request[field] !== undefined && metadata[metaKey] !== undefined) {\n return metaKey;\n }\n }\n return undefined;\n}\n","import { findMetadataConflictWithTypedFields } from '../types/metadata';\nimport type { FraudCustomMetadata } from '../types/metadata';\nimport type { FraudScoreRequestBase } from '../types/requests';\n\nexport function fieldPrefix(index?: number): string {\n return index === undefined ? '' : `requests[${index}].`;\n}\n\nexport function assertNonEmpty(\n value: string | undefined,\n field: string,\n errors: string[],\n prefix: string\n): void {\n if (!value?.trim()) {\n errors.push(`${prefix}${field} is required`);\n }\n}\n\nexport function assertEnum<T extends string>(\n value: string | undefined,\n allowed: readonly T[],\n field: string,\n errors: string[],\n prefix: string\n): void {\n if (value === undefined) return;\n if (!(allowed as readonly string[]).includes(value)) {\n errors.push(`${prefix}${field} must be one of: ${allowed.join(', ')}`);\n }\n}\n\nexport function assertPositiveAmount(\n amount: number | undefined,\n field: string,\n errors: string[],\n prefix: string\n): void {\n if (amount === undefined || amount <= 0) {\n errors.push(`${prefix}${field} must be greater than 0`);\n }\n}\n\nexport function validateMetadata(\n metadata: FraudCustomMetadata | undefined,\n request: FraudScoreRequestBase,\n errors: string[],\n prefix: string\n): void {\n if (!metadata) return;\n const conflictKey = findMetadataConflictWithTypedFields(\n metadata,\n request as unknown as Record<string, unknown>\n );\n if (conflictKey) {\n errors.push(\n `${prefix}metadata.${conflictKey} conflicts with a typed request field that maps to the same key; omit metadata.${conflictKey} or remove the typed field`\n );\n }\n}\n","import { ValidationError } from '@vesant-sdk/core';\nimport {\n normalizePaymentMethod,\n normalizePaymentType,\n PAYMENT_METHOD_FIELD_WHITELIST,\n} from '../normalization/payment-methods';\nimport {\n ChargebackReasonValues,\n ChargebackStateValues,\n LoginFailureReasonValues,\n LoginStatusValues,\n PasswordUpdateReasonValues,\n PasswordUpdateStatusValues,\n TransactionStatusValues,\n TransactionTypeValues,\n WagerStatusValues,\n TransactionType,\n} from '../types/enums';\nimport {\n isPlannedFraudEventType,\n isSupportedFraudEventType,\n SUPPORTED_FRAUD_EVENT_TYPES,\n} from '../types/events';\nimport type { FraudScoreRequest, FraudScoreRequestBase } from '../types/requests';\nimport {\n assertEnum,\n assertNonEmpty,\n assertPositiveAmount,\n fieldPrefix,\n validateMetadata,\n} from './helpers';\n\nconst E164_PHONE_PATTERN = /^\\+[1-9]\\d{7,14}$/;\n\nfunction validatePaymentMethods(\n request: FraudScoreRequestBase,\n errors: string[],\n prefix: string\n): void {\n const { payment_methods, skip_payment_method_normalization: skipNormalization } = request;\n\n if (payment_methods === undefined) return;\n\n if (payment_methods.length === 0) {\n errors.push(`${prefix}payment_methods must include at least one item when provided`);\n return;\n }\n\n payment_methods.forEach((method, index) => {\n const raw = method as Record<string, unknown>;\n\n if (skipNormalization) {\n for (const key of Object.keys(raw)) {\n const plainKey = key.startsWith('$') ? key.slice(1) : key;\n if (!PAYMENT_METHOD_FIELD_WHITELIST.has(plainKey)) {\n errors.push(\n `${prefix}payment_methods[${index}].${plainKey} is not a recognized payment method field`\n );\n }\n }\n const rawType =\n raw.payment_type !== undefined ? String(raw.payment_type) : undefined;\n if (rawType !== undefined && normalizePaymentType(rawType) === undefined) {\n errors.push(\n `${prefix}payment_methods[${index}].payment_type is not a recognized payment type`\n );\n }\n return;\n }\n\n const rawType =\n raw.payment_type !== undefined\n ? String(raw.payment_type)\n : raw.$payment_type !== undefined\n ? String(raw.$payment_type)\n : undefined;\n\n if (rawType !== undefined) {\n const result = normalizePaymentMethod(raw);\n if (result === null) {\n errors.push(\n `${prefix}payment_methods[${index}].payment_type is not a recognized payment type`\n );\n }\n }\n });\n}\n\nfunction validatePaymentMethodSignal(\n value: unknown,\n field: string,\n errors: string[],\n prefix: string\n): void {\n if (value === undefined) return;\n if (typeof value !== 'string' || normalizePaymentType(value) === undefined) {\n errors.push(`${prefix}${field} is not a recognized payment type`);\n }\n}\n\nfunction validateBase(\n request: FraudScoreRequest,\n errors: string[],\n prefix: string\n): void {\n assertNonEmpty(request.customer_id, 'customer_id', errors, prefix);\n assertNonEmpty(request.user_reference, 'user_reference', errors, prefix);\n assertNonEmpty(request.event_type, 'event_type', errors, prefix);\n validateMetadata(request.metadata, request, errors, prefix);\n validatePaymentMethodSignal(\n request.metadata?.payment_method,\n 'metadata.payment_method',\n errors,\n prefix\n );\n}\n\nfunction validateLogin(\n request: Extract<FraudScoreRequest, { event_type: '$login' }>,\n errors: string[],\n prefix: string\n): void {\n assertEnum(request.login_status, LoginStatusValues, 'login_status', errors, prefix);\n if (request.login_failure_reason !== undefined) {\n if (request.login_status === '$failure') {\n assertEnum(\n request.login_failure_reason,\n LoginFailureReasonValues,\n 'login_failure_reason',\n errors,\n prefix\n );\n } else {\n errors.push(`${prefix}login_failure_reason is only allowed when login_status is '$failure'`);\n }\n }\n}\n\nfunction validateUpdatePassword(\n request: Extract<FraudScoreRequest, { event_type: '$update_password' }>,\n errors: string[],\n prefix: string\n): void {\n assertEnum(\n request.password_reason,\n PasswordUpdateReasonValues,\n 'password_reason',\n errors,\n prefix\n );\n assertEnum(\n request.password_status,\n PasswordUpdateStatusValues,\n 'password_status',\n errors,\n prefix\n );\n}\n\nfunction validateTransaction(\n request: Extract<FraudScoreRequest, { event_type: '$transaction' }>,\n errors: string[],\n prefix: string\n): void {\n assertPositiveAmount(request.amount, 'amount', errors, prefix);\n assertNonEmpty(request.currency, 'currency', errors, prefix);\n assertEnum(request.transaction_type, TransactionTypeValues, 'transaction_type', errors, prefix);\n assertEnum(\n request.transaction_status,\n TransactionStatusValues,\n 'transaction_status',\n errors,\n prefix\n );\n validatePaymentMethodSignal(request.payment_method, 'payment_method', errors, prefix);\n\n if (request.decline_category !== undefined && request.transaction_status !== '$failure') {\n errors.push(\n `${prefix}decline_category is only allowed when transaction_status is '$failure'`\n );\n }\n\n if (\n request.transfer_recipient_user_id !== undefined &&\n request.transaction_type !== TransactionType.Transfer\n ) {\n errors.push(\n `${prefix}transfer_recipient_user_id is only allowed when transaction_type is '$transfer'`\n );\n }\n}\n\nfunction validateWager(\n request: Extract<FraudScoreRequest, { event_type: '$wager' }>,\n errors: string[],\n prefix: string\n): void {\n assertNonEmpty(request.transaction_id, 'transaction_id', errors, prefix);\n assertNonEmpty(request.wager_type, 'wager_type', errors, prefix);\n assertEnum(request.wager_status, WagerStatusValues, 'wager_status', errors, prefix);\n if (!request.wager_status) {\n errors.push(`${prefix}wager_status is required`);\n }\n assertPositiveAmount(request.amount, 'amount', errors, prefix);\n assertNonEmpty(request.currency, 'currency', errors, prefix);\n}\n\nfunction validateCreateAccount(\n request: Extract<FraudScoreRequest, { event_type: '$create_account' }>,\n errors: string[],\n prefix: string\n): void {\n validatePaymentMethods(request, errors, prefix);\n}\n\nfunction validateUpdateAccount(\n request: Extract<FraudScoreRequest, { event_type: '$update_account' }>,\n errors: string[],\n prefix: string\n): void {\n validatePaymentMethods(request, errors, prefix);\n\n if (request.verification_phone_number !== undefined) {\n if (!E164_PHONE_PATTERN.test(request.verification_phone_number.trim())) {\n errors.push(`${prefix}verification_phone_number must be E.164 (e.g. +14155550123)`);\n }\n }\n}\n\nfunction validateCreateOrder(\n request: Extract<FraudScoreRequest, { event_type: '$create_order' }>,\n errors: string[],\n prefix: string\n): void {\n assertPositiveAmount(request.amount, 'amount', errors, prefix);\n assertNonEmpty(request.currency_code, 'currency_code', errors, prefix);\n\n validatePaymentMethods(request, errors, prefix);\n\n if (request.shipping_tracking_numbers !== undefined) {\n const hasEmpty = request.shipping_tracking_numbers.some((n) => n.trim() === '');\n if (hasEmpty) {\n errors.push(`${prefix}shipping_tracking_numbers cannot contain empty values`);\n }\n }\n}\n\nfunction validateChargeback(\n request: Extract<FraudScoreRequest, { event_type: '$chargeback' }>,\n errors: string[],\n prefix: string\n): void {\n const hasTransactionId = !!request.transaction_id?.trim();\n const hasOrderId = !!request.order_id?.trim();\n if (!hasTransactionId && !hasOrderId) {\n errors.push(`${prefix}transaction_id or order_id is required`);\n }\n assertEnum(request.chargeback_state, ChargebackStateValues, 'chargeback_state', errors, prefix);\n assertEnum(\n request.chargeback_reason,\n ChargebackReasonValues,\n 'chargeback_reason',\n errors,\n prefix\n );\n if (request.ach_return_code !== undefined && request.ach_return_code.trim() !== '') {\n if (!/^R\\d{2}$/i.test(request.ach_return_code.trim())) {\n errors.push(`${prefix}ach_return_code must match NACHA R## pattern (e.g. R01)`);\n }\n }\n}\n\nfunction validateByEventType(request: FraudScoreRequest, errors: string[], prefix: string): void {\n switch (request.event_type) {\n case '$login':\n validateLogin(request, errors, prefix);\n break;\n case '$update_password':\n validateUpdatePassword(request, errors, prefix);\n break;\n case '$transaction':\n validateTransaction(request, errors, prefix);\n break;\n case '$wager':\n validateWager(request, errors, prefix);\n break;\n case '$create_order':\n validateCreateOrder(request, errors, prefix);\n break;\n case '$chargeback':\n validateChargeback(request, errors, prefix);\n break;\n case '$create_account':\n validateCreateAccount(request, errors, prefix);\n break;\n case '$logout':\n break;\n case '$update_account':\n validateUpdateAccount(request, errors, prefix);\n break;\n default:\n break;\n }\n}\n\nexport function validateScoreRequest(request: FraudScoreRequest, index?: number): void {\n const errors: string[] = [];\n const prefix = fieldPrefix(index);\n\n validateBase(request, errors, prefix);\n\n if (request.event_type && isPlannedFraudEventType(request.event_type)) {\n errors.push(\n `${prefix}event_type ${request.event_type} is not supported by POST /api/v1/fraud/score. Supported: ${SUPPORTED_FRAUD_EVENT_TYPES.join(', ')}`\n );\n } else if (request.event_type && !isSupportedFraudEventType(request.event_type)) {\n errors.push(\n `${prefix}event_type must be one of: ${SUPPORTED_FRAUD_EVENT_TYPES.join(', ')}`\n );\n } else if (isSupportedFraudEventType(request.event_type)) {\n validateByEventType(request, errors, prefix);\n }\n\n if (errors.length > 0) {\n throw new ValidationError(`Invalid fraud score request: ${errors.join(', ')}`, errors);\n }\n}\n","/**\n * Fraud scoring API client.\n */\n\nimport { BaseClient } from '@vesant-sdk/core';\nimport type { RequestOptions } from '@vesant-sdk/core';\nimport { ValidationError } from '@vesant-sdk/core';\nimport { normalizeScoreRequestForApi } from './normalization';\nimport type {\n FraudScoreRequest,\n FraudScoreResponseData,\n FraudScoreResponseEnvelope,\n} from './types';\nimport { validateScoreRequest } from './validation/rules';\n\nexport class FraudClient extends BaseClient {\n async scoreEvent(\n request: FraudScoreRequest,\n requestOptions?: RequestOptions\n ): Promise<FraudScoreResponseEnvelope<FraudScoreResponseData>> {\n validateScoreRequest(request);\n const body = normalizeScoreRequestForApi(request);\n\n return this.requestWithRetry<FraudScoreResponseEnvelope<FraudScoreResponseData>>(\n '/api/v1/fraud/score',\n {\n method: 'POST',\n body: JSON.stringify(body),\n },\n undefined,\n undefined,\n requestOptions\n );\n }\n\n async scoreEventsBulk(\n requests: FraudScoreRequest[],\n requestOptions?: RequestOptions\n ): Promise<FraudScoreResponseEnvelope<FraudScoreResponseData[]>> {\n if (!Array.isArray(requests) || requests.length === 0) {\n throw new ValidationError(\n 'Invalid bulk score request: at least one score request is required',\n ['requests']\n );\n }\n\n const bodies = requests.map((request, index) => {\n validateScoreRequest(request, index);\n return normalizeScoreRequestForApi(request);\n });\n\n return this.requestWithRetry<FraudScoreResponseEnvelope<FraudScoreResponseData[]>>(\n '/api/v1/fraud/score/bulk',\n {\n method: 'POST',\n body: JSON.stringify(bodies),\n },\n undefined,\n undefined,\n requestOptions\n );\n }\n}\n","/**\n * Fraud scoring types — responses and re-exports.\n */\n\nimport type { RiskLevel, Timestamp } from '@vesant-sdk/core';\nimport type { SupportedFraudEventType } from './types/events';\n\nexport * from './types/events';\nexport * from './types/enums';\nexport * from './types/metadata';\nexport * from './types/requests';\nexport * from './types/rule-signals';\nexport * from './types/structured-fields';\n\nexport type FraudReactionType =\n | 'approve'\n | 'reject'\n | 'hold'\n | 'restrict'\n | 'block'\n | 'refund'\n | 'void_transaction'\n | 'reverse_transaction'\n | 'freeze_account'\n | 'block_withdrawal'\n | 'limit_withdrawal'\n | 'disable_payment_method'\n | 'revoke_session'\n | 'require_reauth'\n | 'trigger_alert'\n | 'no_alert'\n | 'escalate'\n | 'increase_priority'\n | 'create_case'\n | 'auto_lock_account'\n | 'notify_team'\n | (string & Record<string, never>);\n\nexport interface TenantAction {\n type: FraudReactionType;\n params?: Record<string, unknown>;\n}\n\nexport type FraudDecision = 'approve' | 'review' | 'block' | 'reject' | (string & Record<string, never>);\n\nexport interface FraudScoreResponseData {\n reference: string;\n score: number;\n risk_level: RiskLevel;\n decision: FraudDecision;\n signals: string[];\n matched_rule_ids: string[];\n matched_rule_names: string[];\n applied_reactions: string[];\n alert_created: boolean;\n alert_reference?: string;\n tenant_actions: TenantAction[];\n}\n\n/**\n * Chargeback feedback responses may omit meaningful score/decision values.\n */\nexport interface ChargebackScoreResponseData extends Omit<FraudScoreResponseData, 'score' | 'decision'> {\n score?: number;\n decision?: FraudDecision;\n}\n\nexport interface FraudScoreResponseMetadata {\n request_id?: string;\n processing_ms?: number;\n tenant_id?: string;\n version?: string;\n}\n\nexport interface FraudScoreResponseEnvelope<T> {\n success: boolean;\n message: string;\n data: T;\n metadata?: FraudScoreResponseMetadata;\n timestamp: Timestamp;\n}\n\n/**\n * How a `fraud.alert.callback` decision was produced.\n *\n * - `sync` — resolved inline with the `/fraud/score` call; confirms a decision\n * the SDK response already returned.\n * - `deferred` — a rule configured with deferred timing re-scored the event\n * after a delay; the decision must be applied retroactively.\n * - `event_triggered` — a later related event caused a re-score of the original.\n */\nexport type FraudCallbackTrigger =\n | 'sync'\n | 'deferred'\n | 'event_triggered'\n | (string & Record<string, never>);\n\n/**\n * Outbound webhook body delivered to a tenant's configured fraud webhook URL\n * when a fraud rule resolves to a decision — including rules with **deferred**\n * or **event-triggered** timing that cannot return a verdict inline with the\n * `/fraud/score` call. Signed with `X-Webhook-Signature: sha256=<hex>`\n * (HMAC-SHA256 of the raw body). See the Fraud Integration guide.\n */\nexport interface FraudAlertCallbackEvent {\n /** Unique event ID — dedup on this; duplicate delivery is possible. */\n event_id: string;\n /** Always `\"fraud.alert.callback\"` — the wire event type to dispatch on. */\n event_type: 'fraud.alert.callback';\n /** Event-bus aggregate key (alert ID when an alert exists, else the reference). */\n aggregate_id: string;\n tenant_id: string;\n /** ISO 8601 timestamp of the decision. */\n timestamp: Timestamp;\n version?: number;\n correlation_id?: string;\n causation_id?: string;\n user_id?: string;\n /** Fraud reference (e.g. `\"FRD-e4b108d7\"`) — matches the sync score `reference`. */\n reference: string;\n /** Tenant customer ID the decision applies to. */\n customer_id: string;\n /** Originating fraud event type (`$create_account`, `$transaction`, …). */\n source_event_type: SupportedFraudEventType | (string & Record<string, never>);\n decision: FraudDecision;\n risk_level: RiskLevel;\n risk_score: number;\n /** Whether the decision arrived inline (`sync`) or as a later re-score. */\n trigger: FraudCallbackTrigger;\n /**\n * Tenant-scope reactions to apply on your platform — populated identically to\n * the sync `/fraud/score` response's `tenant_actions`. Always an array (never\n * null); empty when the rule resolved only to Vesant-scope reactions.\n */\n tenant_actions: TenantAction[];\n}\n\n/**\n * Type guard for the deferred/async fraud webhook body. Narrows an already\n * signature-verified, parsed payload to {@link FraudAlertCallbackEvent}.\n */\nexport function isFraudAlertCallbackEvent(\n value: unknown\n): value is FraudAlertCallbackEvent {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { event_type?: unknown }).event_type === 'fraud.alert.callback'\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
"files": [
|
|
16
|
-
"dist"
|
|
17
|
-
],
|
|
18
|
-
"scripts": {
|
|
19
|
-
"build": "tsup",
|
|
20
|
-
"dev": "tsup --watch",
|
|
21
|
-
"test": "vitest run",
|
|
22
|
-
"test:watch": "vitest",
|
|
23
|
-
"type-check": "tsc --noEmit",
|
|
24
|
-
"lint": "eslint src --ext .ts"
|
|
25
|
-
},
|
|
26
|
-
"keywords": [
|
|
27
|
-
"vesant",
|
|
28
|
-
"compliance",
|
|
29
|
-
"fraud",
|
|
30
|
-
"fraud-detection",
|
|
31
|
-
"risk-scoring"
|
|
32
|
-
],
|
|
33
|
-
"author": "Vesant Compliance",
|
|
34
|
-
"license": "MIT",
|
|
35
|
-
"dependencies": {
|
|
36
|
-
"@vesant-sdk/core": "0.1.0"
|
|
37
|
-
},
|
|
38
|
-
"devDependencies": {
|
|
39
|
-
"msw": "^2.4.0",
|
|
40
|
-
"tsup": "^8.0.0",
|
|
41
|
-
"typescript": "^5.3.0",
|
|
42
|
-
"vitest": "^2.0.0"
|
|
43
|
-
},
|
|
44
|
-
"sideEffects": false,
|
|
45
|
-
"repository": {
|
|
46
|
-
"type": "git",
|
|
47
|
-
"url": "https://github.com/botcalm-compliance/vesant-sdk.git",
|
|
48
|
-
"directory": "typescript/packages/fraud"
|
|
49
|
-
},
|
|
50
|
-
"engines": {
|
|
51
|
-
"node": ">=18"
|
|
2
|
+
"name": "@vesant-sdk/fraud",
|
|
3
|
+
"version": "0.2.0-next.648b1a9",
|
|
4
|
+
"description": "Fraud detection and scoring client for the Vesant Compliance Platform",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
52
13
|
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsup",
|
|
20
|
+
"dev": "tsup --watch",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest",
|
|
23
|
+
"type-check": "tsc --noEmit",
|
|
24
|
+
"lint": "eslint src --ext .ts"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"vesant",
|
|
28
|
+
"compliance",
|
|
29
|
+
"fraud",
|
|
30
|
+
"fraud-detection",
|
|
31
|
+
"risk-scoring"
|
|
32
|
+
],
|
|
33
|
+
"author": "Vesant Compliance",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@vesant-sdk/core": "0.1.1-next.648b1a9"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"msw": "^2.4.0",
|
|
40
|
+
"tsup": "^8.0.0",
|
|
41
|
+
"typescript": "^5.3.0",
|
|
42
|
+
"vitest": "^2.0.0"
|
|
43
|
+
},
|
|
44
|
+
"sideEffects": false,
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/botcalm-compliance/vesant-sdk.git",
|
|
48
|
+
"directory": "typescript/packages/fraud"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=18"
|
|
52
|
+
}
|
|
53
53
|
}
|