@vesant-sdk/fraud 0.1.1-next.f2f4e87 → 0.1.2-dev.ab7ff29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/enums.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"],"names":["ValidationError","BaseClient"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Sift-aligned enum types and const objects for fraud scoring requests.\n */\n\nexport type SiftTransactionType =\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 SiftTransactionTypeValues = [\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 SiftTransactionType[];\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, SiftTransactionType>;\n\nexport type SiftChargebackState =\n | '$received'\n | '$accepted'\n | '$disputed'\n | '$won'\n | '$lost';\n\nexport const SiftChargebackStateValues = [\n '$received',\n '$accepted',\n '$disputed',\n '$won',\n '$lost',\n] as const satisfies readonly SiftChargebackState[];\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, SiftChargebackState>;\n\nexport type SiftChargebackReason =\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 SiftChargebackReasonValues = [\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 SiftChargebackReason[];\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, SiftChargebackReason>;\n\nexport type SiftLoginStatus = '$success' | '$failure';\n\nexport const SiftLoginStatusValues = ['$success', '$failure'] as const satisfies readonly SiftLoginStatus[];\n\nexport const LoginStatus = {\n Success: '$success',\n Failure: '$failure',\n} as const satisfies Record<string, SiftLoginStatus>;\n\nexport type SiftLoginFailureReason =\n | '$account_unknown'\n | '$account_suspended'\n | '$account_disabled'\n | '$wrong_password';\n\nexport const SiftLoginFailureReasonValues = [\n '$account_unknown',\n '$account_suspended',\n '$account_disabled',\n '$wrong_password',\n] as const satisfies readonly SiftLoginFailureReason[];\n\nexport type SiftPasswordUpdateReason =\n | '$user_update'\n | '$forgot_password'\n | '$forced_reset';\n\nexport const SiftPasswordUpdateReasonValues = [\n '$user_update',\n '$forgot_password',\n '$forced_reset',\n] as const satisfies readonly SiftPasswordUpdateReason[];\n\nexport const PasswordUpdateReason = {\n UserUpdate: SiftPasswordUpdateReasonValues[0],\n ForgotPassword: SiftPasswordUpdateReasonValues[1],\n ForcedReset: SiftPasswordUpdateReasonValues[2],\n} as const satisfies Record<string, SiftPasswordUpdateReason>;\n\nexport type SiftPasswordUpdateStatus = '$pending' | '$success' | '$failure';\n\nexport const SiftPasswordUpdateStatusValues = [\n '$pending',\n '$success',\n '$failure',\n] as const satisfies readonly SiftPasswordUpdateStatus[];\n\nexport const PasswordUpdateStatus = {\n Pending: '$pending',\n Success: '$success',\n Failure: '$failure',\n} as const satisfies Record<string, SiftPasswordUpdateStatus>;\n\nexport type SiftWagerStatus = '$accept' | '$cancel';\n\nexport const SiftWagerStatusValues = ['$accept', '$cancel'] as const satisfies readonly SiftWagerStatus[];\n\nexport const WagerStatus = {\n Accept: '$accept',\n Cancel: '$cancel',\n} as const satisfies Record<string, SiftWagerStatus>;\n\nexport type SiftTransactionStatus = '$success' | '$failure' | '$pending';\n\nexport const SiftTransactionStatusValues = [\n '$success',\n '$failure',\n '$pending',\n] as const satisfies readonly SiftTransactionStatus[];\n\nexport const TransactionStatus = {\n Success: '$success',\n Failure: '$failure',\n Pending: '$pending',\n} as const satisfies Record<string, SiftTransactionStatus>;\n\nexport type FraudRiskLevel = 'low' | 'medium' | 'high' | 'critical';\n","import { LoginStatus } from '../types/enums';\nimport type { FraudScoreRequest } from '../types/requests';\nimport type { FraudCustomMetadata } from '../types/metadata';\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 applySiftMetadata(\n body: Record<string, unknown>,\n metadata: FraudCustomMetadata | undefined,\n siftMetadata: FraudCustomMetadata,\n onlyWhenNonEmpty = false\n): Record<string, unknown> {\n if (!onlyWhenNonEmpty || Object.keys(siftMetadata).length > 0) {\n body.metadata = mergeMetadata(metadata, siftMetadata);\n }\n return body;\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 const body = createStrippedBody(rest, metadata, []);\n const siftMetadata: FraudCustomMetadata = {};\n if (password_reason) siftMetadata.$reason = password_reason;\n if (password_status) siftMetadata.$status = password_status;\n return applySiftMetadata(body, metadata, siftMetadata);\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 const body = createStrippedBody(rest, metadata, [\n 'wager_type',\n 'wager_status',\n 'wager_event_type',\n 'wager_event_name',\n 'wager_event_id',\n ]);\n const siftMetadata: FraudCustomMetadata = {\n $wager_type: wager_type,\n $wager_status: wager_status,\n };\n if (wager_event_type) siftMetadata.wager_event_type = wager_event_type;\n if (wager_event_name) siftMetadata.wager_event_name = wager_event_name;\n if (wager_event_id) siftMetadata.wager_event_id = wager_event_id;\n return applySiftMetadata(body, metadata, siftMetadata);\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 const body = createStrippedBody(rest, metadata, [\n 'login_status',\n 'login_failure_reason',\n ]);\n const siftMetadata: FraudCustomMetadata = {\n $login_status: effectiveStatus,\n };\n if (effectiveStatus === LoginStatus.Failure && login_failure_reason) {\n siftMetadata.$failure_reason = login_failure_reason;\n }\n return applySiftMetadata(body, metadata, siftMetadata);\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 const body = createStrippedBody(rest, metadata, [\n 'transaction_status',\n 'decline_category',\n 'transfer_recipient_user_id',\n ]);\n const siftMetadata: FraudCustomMetadata = {};\n if (transaction_status) siftMetadata.$transaction_status = transaction_status;\n if (decline_category) siftMetadata.$decline_category = decline_category;\n if (transfer_recipient_user_id) {\n siftMetadata.$transfer_recipient_user_id = transfer_recipient_user_id;\n }\n return applySiftMetadata(body, metadata, siftMetadata, true);\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 default:\n return { ...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 Sift scoring + rule engine */\nexport type ScoredFraudEventType =\n | '$create_account'\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 '$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 '$create_order',\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 * Custom metadata for fraud score requests (non-Sift reserved keys).\n */\n\nexport type FraudCustomMetadata = Record<string, unknown>;\n\nexport function hasReservedMetadataKey(metadata: FraudCustomMetadata): string | undefined {\n for (const key of Object.keys(metadata)) {\n if (key.startsWith('$')) {\n return key;\n }\n }\n return undefined;\n}\n","import { hasReservedMetadataKey } from '../types/metadata';\nimport type { FraudCustomMetadata } from '../types/metadata';\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 errors: string[],\n prefix: string\n): void {\n if (!metadata) return;\n const reservedKey = hasReservedMetadataKey(metadata);\n if (reservedKey) {\n errors.push(\n `${prefix}metadata keys must not start with '$' (found '${reservedKey}'). Use typed request fields instead.`\n );\n }\n}\n","import { ValidationError } from '@vesant-sdk/core';\nimport {\n SiftChargebackReasonValues,\n SiftChargebackStateValues,\n SiftLoginFailureReasonValues,\n SiftLoginStatusValues,\n SiftPasswordUpdateReasonValues,\n SiftPasswordUpdateStatusValues,\n SiftTransactionStatusValues,\n SiftTransactionTypeValues,\n SiftWagerStatusValues,\n TransactionType,\n} from '../types/enums';\nimport {\n isPlannedFraudEventType,\n isSupportedFraudEventType,\n SUPPORTED_FRAUD_EVENT_TYPES,\n} from '../types/events';\nimport type { FraudScoreRequest } from '../types/requests';\nimport {\n assertEnum,\n assertNonEmpty,\n assertPositiveAmount,\n fieldPrefix,\n validateMetadata,\n} from './helpers';\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.sift_user_id, 'sift_user_id', errors, prefix);\n assertNonEmpty(request.event_type, 'event_type', errors, prefix);\n validateMetadata(request.metadata, 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, SiftLoginStatusValues, '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 SiftLoginFailureReasonValues,\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 SiftPasswordUpdateReasonValues,\n 'password_reason',\n errors,\n prefix\n );\n if (!request.password_reason) {\n errors.push(`${prefix}password_reason is required`);\n }\n assertEnum(\n request.password_status,\n SiftPasswordUpdateStatusValues,\n 'password_status',\n errors,\n prefix\n );\n if (!request.password_status) {\n errors.push(`${prefix}password_status is required`);\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, SiftTransactionTypeValues, 'transaction_type', errors, prefix);\n assertEnum(\n request.transaction_status,\n SiftTransactionStatusValues,\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, SiftWagerStatusValues, '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 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, SiftChargebackStateValues, 'chargeback_state', errors, prefix);\n assertEnum(\n request.chargeback_reason,\n SiftChargebackReasonValues,\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 '$chargeback':\n validateChargeback(request, errors, prefix);\n break;\n case '$create_account':\n case '$logout':\n case '$update_account':\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"]}
1
+ {"version":3,"sources":["../src/types/enums.ts","../src/types/rule-signals.ts","../src/normalization/payment-methods.ts","../src/normalization/sift-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"],"names":["rawType","ValidationError","BaseClient"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Sift-aligned enum types and const objects for fraud scoring requests.\n */\n\nexport type SiftTransactionType =\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 SiftTransactionTypeValues = [\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 SiftTransactionType[];\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, SiftTransactionType>;\n\nexport type SiftChargebackState =\n | '$received'\n | '$accepted'\n | '$disputed'\n | '$won'\n | '$lost';\n\nexport const SiftChargebackStateValues = [\n '$received',\n '$accepted',\n '$disputed',\n '$won',\n '$lost',\n] as const satisfies readonly SiftChargebackState[];\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, SiftChargebackState>;\n\nexport type SiftChargebackReason =\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 SiftChargebackReasonValues = [\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 SiftChargebackReason[];\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, SiftChargebackReason>;\n\nexport type SiftLoginStatus = '$success' | '$failure';\n\nexport const SiftLoginStatusValues = ['$success', '$failure'] as const satisfies readonly SiftLoginStatus[];\n\nexport const LoginStatus = {\n Success: '$success',\n Failure: '$failure',\n} as const satisfies Record<string, SiftLoginStatus>;\n\nexport type SiftLoginFailureReason =\n | '$account_unknown'\n | '$account_suspended'\n | '$account_disabled'\n | '$wrong_password';\n\nexport const SiftLoginFailureReasonValues = [\n '$account_unknown',\n '$account_suspended',\n '$account_disabled',\n '$wrong_password',\n] as const satisfies readonly SiftLoginFailureReason[];\n\nexport type SiftPasswordUpdateReason =\n | '$user_update'\n | '$forgot_password'\n | '$forced_reset';\n\nexport const SiftPasswordUpdateReasonValues = [\n '$user_update',\n '$forgot_password',\n '$forced_reset',\n] as const satisfies readonly SiftPasswordUpdateReason[];\n\nexport const PasswordUpdateReason = {\n UserUpdate: SiftPasswordUpdateReasonValues[0],\n ForgotPassword: SiftPasswordUpdateReasonValues[1],\n ForcedReset: SiftPasswordUpdateReasonValues[2],\n} as const satisfies Record<string, SiftPasswordUpdateReason>;\n\nexport type SiftPasswordUpdateStatus = '$pending' | '$success' | '$failure';\n\nexport const SiftPasswordUpdateStatusValues = [\n '$pending',\n '$success',\n '$failure',\n] as const satisfies readonly SiftPasswordUpdateStatus[];\n\nexport const PasswordUpdateStatus = {\n Pending: '$pending',\n Success: '$success',\n Failure: '$failure',\n} as const satisfies Record<string, SiftPasswordUpdateStatus>;\n\nexport type SiftWagerStatus = '$accept' | '$cancel';\n\nexport const SiftWagerStatusValues = ['$accept', '$cancel'] as const satisfies readonly SiftWagerStatus[];\n\nexport const WagerStatus = {\n Accept: '$accept',\n Cancel: '$cancel',\n} as const satisfies Record<string, SiftWagerStatus>;\n\nexport type SiftTransactionStatus = '$success' | '$failure' | '$pending';\n\nexport const SiftTransactionStatusValues = [\n '$success',\n '$failure',\n '$pending',\n] as const satisfies readonly SiftTransactionStatus[];\n\nexport const TransactionStatus = {\n Success: '$success',\n Failure: '$failure',\n Pending: '$pending',\n} as const satisfies Record<string, SiftTransactionStatus>;\n\nexport type SiftPaymentType =\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 SiftPaymentTypeValues = [\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 SiftPaymentType[];\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, SiftPaymentType>;\n\nexport type SiftWalletType = '$crypto' | '$digital' | '$fiat';\n\nexport const SiftWalletTypeValues = ['$crypto', '$digital', '$fiat'] as const satisfies readonly SiftWalletType[];\n\nexport const WalletType = {\n Crypto: '$crypto',\n Digital: '$digital',\n Fiat: '$fiat',\n} as const satisfies Record<string, SiftWalletType>;\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 { SiftPaymentTypeValues, type SiftPaymentType } from '../types/enums';\nimport type { SiftPaymentMethod } from '../types/sift-fields';\n\nconst PAYMENT_TYPE_ALIASES: Record<string, SiftPaymentType> = {\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 SIFT_PAYMENT_METHOD_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 Sift field; use account_number_last5',\n account_id: '[vesant-sdk/fraud] account_id is not a Sift field; moved to metadata',\n wallet_address_last4:\n '[vesant-sdk/fraud] wallet_address_last4 is not a Sift field; moved to metadata',\n crypto_currency:\n '[vesant-sdk/fraud] crypto_currency is not a Sift field on payment_method; moved to metadata',\n network: '[vesant-sdk/fraud] network is not a Sift 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 Sift-valid $payment_type values.\n * Returns undefined when the value cannot be mapped.\n */\nexport function normalizeSiftPaymentType(\n value: string | undefined\n): SiftPaymentType | 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 SiftPaymentType;\n if ((SiftPaymentTypeValues 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 Sift $account_number_last5.\n */\nexport function toSiftAccountNumberLast5(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: SiftPaymentMethod;\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 Sift wire format.\n */\nexport function normalizeSiftPaymentMethod(\n raw: Record<string, unknown>\n): NormalizePaymentMethodResult | null {\n const metadataExtras: Record<string, unknown> = {};\n const method: SiftPaymentMethod = {};\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 = normalizeSiftPaymentType(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 = toSiftAccountNumberLast5(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, 'linkmoney_account_id', String(value));\n } else {\n collectMetadataExtra(metadataExtras, plainKey, value);\n }\n continue;\n }\n\n if (!SIFT_PAYMENT_METHOD_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.linkmoney_account_ids;\n if (Array.isArray(existing)) {\n existing.push(accountId);\n return;\n }\n if (typeof target.linkmoney_account_id === 'string') {\n target.linkmoney_account_ids = [target.linkmoney_account_id, accountId];\n delete target.linkmoney_account_id;\n return;\n }\n target.linkmoney_account_id = accountId;\n}\n\n/**\n * Normalizes payment method arrays and aggregates stripped metadata.\n */\nexport function normalizeSiftPaymentMethods(\n methods: SiftPaymentMethod[] | undefined\n): { payment_methods?: SiftPaymentMethod[]; metadata?: Record<string, unknown> } {\n if (methods === undefined) return {};\n\n const normalized: SiftPaymentMethod[] = [];\n const metadata: Record<string, unknown> = {};\n\n for (const raw of methods) {\n const result = normalizeSiftPaymentMethod(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 === 'linkmoney_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 { SIFT_PAYMENT_METHOD_WHITELIST };\n","function siftKey(key: string): string {\n return key.startsWith('$') ? key : `$${key}`;\n}\n\n/**\n * Recursively prefix object keys with $ for Sift wire format (no double-prefix).\n */\nexport function toSiftKeyedObject(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((item) => toSiftKeyedObject(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[siftKey(key)] = toSiftKeyedObject(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 { SiftPaymentMethod } from '../types/sift-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 normalizeSiftPaymentMethod,\n normalizeSiftPaymentMethods,\n} from './payment-methods';\nimport { toSiftKeyedObject } from './sift-keys';\n\nconst BASE_SIFT_FIELD_KEYS = [\n 'session_id',\n 'user_email',\n 'name',\n 'phone',\n 'sift_payment_method',\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 applySiftMetadata(\n body: Record<string, unknown>,\n metadata: FraudCustomMetadata | undefined,\n siftMetadata: FraudCustomMetadata,\n onlyWhenNonEmpty = false\n): Record<string, unknown> {\n if (!onlyWhenNonEmpty || Object.keys(siftMetadata).length > 0) {\n body.metadata = mergeMetadata(metadata, siftMetadata);\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 buildBaseSiftMetadata(body: Record<string, unknown>): FraudCustomMetadata {\n const {\n event_type,\n session_id,\n user_email,\n name,\n phone,\n sift_payment_method,\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 siftMetadata: FraudCustomMetadata = {\n ...((metadata as FraudCustomMetadata | undefined) ?? {}),\n };\n\n if (session_id !== undefined) siftMetadata.$session_id = session_id;\n if (user_email !== undefined) siftMetadata.$user_email = user_email;\n if (name !== undefined) siftMetadata.$name = name;\n if (phone !== undefined) siftMetadata.$phone = phone;\n\n if (sift_payment_method !== undefined) {\n if (skip_payment_method_normalization) {\n siftMetadata.$payment_method = toSiftKeyedObject(sift_payment_method) as FraudCustomMetadata[string];\n } else {\n const result = normalizeSiftPaymentMethod(\n sift_payment_method as Record<string, unknown>\n );\n if (result !== null) {\n siftMetadata.$payment_method = toSiftKeyedObject(result.method) as FraudCustomMetadata[string];\n if (result.metadataExtras) {\n Object.assign(siftMetadata, result.metadataExtras);\n }\n }\n }\n }\n\n if (payment_methods !== undefined) {\n if (skip_payment_method_normalization) {\n siftMetadata.$payment_methods = toSiftKeyedObject(payment_methods) as FraudCustomMetadata[string];\n } else {\n const { payment_methods: normalized, metadata: pmMetadata } = normalizeSiftPaymentMethods(\n payment_methods as SiftPaymentMethod[]\n );\n if (normalized !== undefined) {\n siftMetadata.$payment_methods = toSiftKeyedObject(normalized) as FraudCustomMetadata[string];\n }\n if (pmMetadata) {\n Object.assign(siftMetadata, pmMetadata);\n }\n }\n }\n if (billing_address !== undefined) {\n siftMetadata.$billing_address = toSiftKeyedObject(billing_address) as FraudCustomMetadata[string];\n }\n if (shipping_address !== undefined) {\n siftMetadata.$shipping_address = toSiftKeyedObject(shipping_address) as FraudCustomMetadata[string];\n }\n if (app !== undefined) siftMetadata.$app = toSiftKeyedObject(app) as FraudCustomMetadata[string];\n if (browser !== undefined) {\n siftMetadata.$browser = toSiftKeyedObject(browser) as FraudCustomMetadata[string];\n }\n if (event_type === '$create_order' || event_type === '$update_account') {\n if (verification_phone_number !== undefined) {\n siftMetadata.$verification_phone_number = verification_phone_number;\n }\n }\n if (event_type === '$create_order') {\n if (order_id !== undefined) siftMetadata.$order_id = order_id;\n if (amount !== undefined) siftMetadata.$amount = amount;\n if (currency_code !== undefined) siftMetadata.$currency_code = currency_code;\n if (exchange_rate !== undefined) {\n siftMetadata.$exchange_rate = toSiftKeyedObject(exchange_rate) as FraudCustomMetadata[string];\n }\n if (expedited_shipping !== undefined) siftMetadata.$expedited_shipping = expedited_shipping;\n if (shipping_method !== undefined) siftMetadata.$shipping_method = shipping_method;\n if (shipping_carrier !== undefined) siftMetadata.$shipping_carrier = shipping_carrier;\n if (shipping_tracking_numbers !== undefined) {\n siftMetadata.$shipping_tracking_numbers = shipping_tracking_numbers;\n }\n if (brand_name !== undefined) siftMetadata.$brand_name = brand_name;\n if (site_country !== undefined) siftMetadata.$site_country = site_country;\n if (site_domain !== undefined) siftMetadata.$site_domain = site_domain;\n if (ip !== undefined) siftMetadata.$ip = ip;\n }\n\n return siftMetadata;\n}\n\nfunction normalizeBaseSiftFields(body: Record<string, unknown>): Record<string, unknown> {\n const siftMetadata = buildBaseSiftMetadata(body);\n const stripped = stripSdkOnlyFields(body, [...BASE_SIFT_FIELD_KEYS]);\n\n if (Object.keys(siftMetadata).length > 0) {\n stripped.metadata = siftMetadata;\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 siftMetadata: FraudCustomMetadata = {\n $reason: password_reason ?? PasswordUpdateReason.UserUpdate,\n $status: password_status ?? PasswordUpdateStatus.Success,\n };\n body = applySiftMetadata(body, metadata, siftMetadata);\n return normalizeBaseSiftFields(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 siftMetadata: FraudCustomMetadata = {\n $wager_type: wager_type,\n $wager_status: wager_status,\n };\n if (wager_event_type) siftMetadata.$wager_event_type = wager_event_type;\n if (wager_event_name) siftMetadata.$wager_event_name = wager_event_name;\n if (wager_event_id) siftMetadata.$wager_event_id = wager_event_id;\n body = applySiftMetadata(body, metadata, siftMetadata);\n return normalizeBaseSiftFields(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 siftMetadata: FraudCustomMetadata = {\n $login_status: effectiveStatus,\n };\n if (effectiveStatus === LoginStatus.Failure && login_failure_reason) {\n siftMetadata.$failure_reason = login_failure_reason;\n }\n body = applySiftMetadata(body, metadata, siftMetadata);\n body = applyRuleSignals(\n body,\n request as unknown as Record<string, unknown>,\n LOGIN_RULE_SIGNAL_KEYS,\n []\n );\n return normalizeBaseSiftFields(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 siftMetadata: FraudCustomMetadata = {};\n if (transaction_status) siftMetadata.$transaction_status = transaction_status;\n if (decline_category) siftMetadata.$decline_category = decline_category;\n if (transfer_recipient_user_id) {\n siftMetadata.$transfer_recipient_user_id = transfer_recipient_user_id;\n }\n body = applySiftMetadata(body, metadata, siftMetadata, true);\n body = applyRuleSignals(\n body,\n request as unknown as Record<string, unknown>,\n TRANSACTION_RULE_SIGNAL_KEYS,\n []\n );\n return normalizeBaseSiftFields(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 normalizeBaseSiftFields(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 siftMetadata: FraudCustomMetadata = {\n $amount: amount,\n $currency_code: currency_code,\n };\n body = applySiftMetadata(body, metadata, siftMetadata);\n return normalizeBaseSiftFields(body);\n}\n\nfunction normalizeDefault(request: FraudScoreRequest): Record<string, unknown> {\n return normalizeBaseSiftFields({ ...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 Sift scoring + rule engine */\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 Sift pass-through (or set via typed fields).\n */\n\nexport interface FraudRuleSignalMetadata {\n /** Rule signal payment method (e.g. \"$credit_card\"), not Sift $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 Sift fields forwarded verbatim in metadata (e.g. $referrer_user_id, $promotions). */\nexport type SiftPassThroughMetadata = Record<`$${string}`, unknown>;\n\nexport type FraudCustomMetadata = FraudRuleSignalMetadata &\n SiftPassThroughMetadata &\n Record<string, unknown>;\n\n/** Maps typed request fields to metadata keys they populate (typed values win on normalize). */\nexport const TYPED_SIFT_METADATA_KEYS: Readonly<Record<string, string>> = {\n session_id: '$session_id',\n user_email: '$user_email',\n name: '$name',\n phone: '$phone',\n sift_payment_method: '$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_SIFT_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 normalizeSiftPaymentMethod,\n normalizeSiftPaymentType,\n SIFT_PAYMENT_METHOD_WHITELIST,\n} from '../normalization/payment-methods';\nimport {\n SiftChargebackReasonValues,\n SiftChargebackStateValues,\n SiftLoginFailureReasonValues,\n SiftLoginStatusValues,\n SiftPasswordUpdateReasonValues,\n SiftPasswordUpdateStatusValues,\n SiftTransactionStatusValues,\n SiftTransactionTypeValues,\n SiftWagerStatusValues,\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 (!SIFT_PAYMENT_METHOD_WHITELIST.has(plainKey)) {\n errors.push(\n `${prefix}payment_methods[${index}].${plainKey} is not a valid Sift payment method field`\n );\n }\n }\n const rawType =\n raw.payment_type !== undefined ? String(raw.payment_type) : undefined;\n if (rawType !== undefined && normalizeSiftPaymentType(rawType) === undefined) {\n errors.push(\n `${prefix}payment_methods[${index}].payment_type is not a valid Sift 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 = normalizeSiftPaymentMethod(raw);\n if (result === null) {\n errors.push(\n `${prefix}payment_methods[${index}].payment_type is not a valid Sift 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.sift_user_id, 'sift_user_id', 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, SiftLoginStatusValues, '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 SiftLoginFailureReasonValues,\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 SiftPasswordUpdateReasonValues,\n 'password_reason',\n errors,\n prefix\n );\n assertEnum(\n request.password_status,\n SiftPasswordUpdateStatusValues,\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, SiftTransactionTypeValues, 'transaction_type', errors, prefix);\n assertEnum(\n request.transaction_status,\n SiftTransactionStatusValues,\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, SiftWagerStatusValues, '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, SiftChargebackStateValues, 'chargeback_state', errors, prefix);\n assertEnum(\n request.chargeback_reason,\n SiftChargebackReasonValues,\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"]}