@otim/utils 0.0.2-development.0 → 0.0.3

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.
Files changed (36) hide show
  1. package/dist/api/index.js +11 -6
  2. package/dist/api/index.js.map +2 -2
  3. package/dist/api/index.mjs +11 -6
  4. package/dist/api/index.mjs.map +2 -2
  5. package/dist/api/schemas/payments.d.mts +3 -0
  6. package/dist/api/schemas/payments.d.ts +3 -0
  7. package/dist/api/schemas/payments.d.ts.map +1 -1
  8. package/dist/chains/config/all-chains.d.mts +4 -4
  9. package/dist/chains/config/all-chains.d.ts +4 -4
  10. package/dist/chains/config/all-chains.d.ts.map +1 -1
  11. package/dist/chains/index.js +8 -2
  12. package/dist/chains/index.js.map +2 -2
  13. package/dist/chains/index.mjs +8 -2
  14. package/dist/chains/index.mjs.map +2 -2
  15. package/dist/helpers/index.js +20 -0
  16. package/dist/helpers/index.js.map +2 -2
  17. package/dist/helpers/index.mjs +20 -0
  18. package/dist/helpers/index.mjs.map +2 -2
  19. package/dist/helpers/zod.d.mts +21 -0
  20. package/dist/helpers/zod.d.ts +21 -0
  21. package/dist/helpers/zod.d.ts.map +1 -1
  22. package/dist/payments/build.d.mts +1 -0
  23. package/dist/payments/build.d.ts +1 -0
  24. package/dist/payments/build.d.ts.map +1 -1
  25. package/dist/payments/comprehensive-payment-request.d.mts +1 -0
  26. package/dist/payments/comprehensive-payment-request.d.ts +1 -0
  27. package/dist/payments/comprehensive-payment-request.d.ts.map +1 -1
  28. package/dist/payments/index.js +16 -12
  29. package/dist/payments/index.js.map +2 -2
  30. package/dist/payments/index.mjs +16 -12
  31. package/dist/payments/index.mjs.map +2 -2
  32. package/dist/server/index.js +3 -3
  33. package/dist/server/index.js.map +1 -1
  34. package/dist/server/index.mjs +3 -3
  35. package/dist/server/index.mjs.map +1 -1
  36. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/server/index.ts", "../../src/server/client.ts", "../../src/env.ts", "../../src/helpers/logger.ts", "../../src/helpers/types.ts", "../../src/server/routes/account.ts", "../../src/server/routes/auth.ts", "../../src/server/routes/bridge.ts", "../../src/server/routes/config.ts", "../../src/server/routes/instruction.ts", "../../src/server/routes/integration.ts", "../../src/server/routes/payments.ts"],
4
- "sourcesContent": ["export * from \"./client\";\nexport * from \"./routes\";\n", "import axios from \"axios\";\n\nimport { isString, logger } from \"@otim/utils/helpers\";\n\nimport { APP_API_URL } from \"../env\";\n\nconst getApiUrl = (): string => {\n const appApiUrl = APP_API_URL;\n\n if (!isString(appApiUrl) || appApiUrl.trim() === \"\") {\n const errorMessage = \"APP API Client URL must be defined\";\n logger.error(errorMessage, { context: \"App Server Client\" });\n throw new Error(errorMessage);\n }\n\n return appApiUrl;\n};\n\nlet authTokenGetter: (() => Promise<string | undefined>) | null = null;\n\nexport const setAuthTokenGetter = (\n getter: () => Promise<string | undefined>,\n) => {\n authTokenGetter = getter;\n};\n\nexport const appApiClient = axios.create({\n baseURL: getApiUrl(),\n timeout: 30000,\n});\n\nappApiClient.interceptors.request.use(async (config) => {\n if (authTokenGetter) {\n const token = await authTokenGetter();\n if (token) {\n config.headers = config.headers ?? {};\n config.headers.Authorization = `Bearer ${token}`;\n }\n }\n return config;\n});\n", "/**\n * Environment configuration for @otim/utils\n *\n * These values are injected at build time via esbuild's define option.\n * See scripts/build.js for the injection logic.\n */\n\n/**\n * Build mode - determines production vs development behavior\n * Values: \"production\" | \"development\"\n */\nexport const BUILD_MODE = process.env.BUILD_MODE || \"development\";\n\n/**\n * App API URL - base URL for API requests\n * Defaults to production URL if not specified\n */\nexport const APP_API_URL =\n process.env.NEXT_PUBLIC_APP_API_URL || \"https://app.otim.com/api\";\n", "import { BUILD_MODE } from \"../env\";\n\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\ninterface LoggerOptions {\n context?: string;\n data?: unknown;\n}\n\ninterface ErrorLogOptions {\n context?: string;\n operation?: string;\n metadata?: Record<string, unknown>;\n}\n\nclass Logger {\n private isDevelopment = BUILD_MODE === \"development\";\n\n debug(message: string, options?: LoggerOptions): void {\n if (this.isDevelopment) {\n this.log(\"debug\", message, options);\n }\n }\n\n info(message: string, options?: LoggerOptions): void {\n this.log(\"info\", message, options);\n }\n\n warn(message: string, options?: LoggerOptions): void {\n this.log(\"warn\", message, options);\n }\n\n error(message: string, options?: LoggerOptions): void {\n this.log(\"error\", message, options);\n }\n\n /**\n * Log errors with context - useful for non-API errors\n * For API errors, use the existing getErrorMessage from @otim/utils/api\n */\n logError(error: unknown, options: ErrorLogOptions = {}): void {\n const { context, operation, metadata } = options;\n const prefix = this.buildPrefix(context, operation);\n\n // Extract basic error message\n let message = \"Unknown error\";\n if (error instanceof Error) {\n message = error.message;\n } else if (typeof error === \"string\") {\n message = error;\n } else if (error && typeof error === \"object\" && \"message\" in error) {\n message = String((error as { message: unknown }).message);\n }\n\n console.error(prefix ? `${prefix} ${message}` : message);\n\n // Log metadata if provided\n if (metadata && Object.keys(metadata).length > 0) {\n console.error(\"Context:\", metadata);\n }\n\n // Log the full error object for debugging\n if (error instanceof Error && error.stack) {\n console.error(\"Stack:\", error.stack);\n } else {\n console.error(\"Error details:\", error);\n }\n }\n\n private buildPrefix(context?: string, operation?: string): string {\n const parts: string[] = [];\n if (context) parts.push(`[${context}]`);\n if (operation) parts.push(`[${operation}]`);\n return parts.join(\" \");\n }\n\n private log(level: LogLevel, message: string, options?: LoggerOptions): void {\n const prefix = options?.context ? `[${options.context}]` : \"\";\n const fullMessage = `${prefix} ${message}`.trim();\n\n switch (level) {\n case \"debug\":\n case \"info\":\n console.log(fullMessage);\n break;\n case \"warn\":\n console.warn(fullMessage);\n break;\n case \"error\":\n console.error(fullMessage);\n break;\n }\n\n if (options?.data) {\n console.dir(options.data, { depth: null });\n }\n }\n}\n\nexport const logger = new Logger();\n", "import type { z, ZodObject } from \"zod\";\n\nexport type Nullable<T> = T | null;\nexport type Nullish<T> = T | null | undefined;\nexport type Optional<T> = T | undefined;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- any is ok\nexport type Any = any;\n\nexport type NumberOrString = number | string;\n\nexport type OverrideProps<T, TOverridden> = Omit<T, keyof TOverridden> &\n TOverridden;\n\nexport type NonEmptyArray<T> = [T, ...T[]];\n\nexport interface DataRecord {\n [value: string]: Nullish<DataRecord | string | number | boolean>;\n}\n\nexport interface Input<T> {\n input: T;\n}\n\nexport type ZodCustom<Values extends object> = ZodObject<{\n [P in keyof Values]: z.ZodType<Values[P]>;\n}>;\n\nexport const isError = (value: unknown): value is Error =>\n value instanceof Error;\n\nexport const isFunction = (\n value: unknown,\n): value is (...args: unknown[]) => unknown => typeof value === \"function\";\n\nexport const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nexport const isNumber = (value: unknown): value is number =>\n typeof value === \"number\";\n\nexport const isString = (value: unknown): value is string =>\n typeof value === \"string\";\n\nexport const isUndefined = (value: unknown): value is undefined =>\n typeof value === \"undefined\";\n\nexport const isBoolean = (value: unknown): value is boolean =>\n typeof value === \"boolean\";\n\n/**\n * Safely extracts a string from an unknown value.\n * @param value - The value to extract from\n * @param fallback - Optional fallback value if extraction fails\n * @returns The extracted string or fallback/undefined\n */\nexport const extractString = (\n value: unknown,\n fallback?: string,\n): Optional<string> => {\n return isString(value) ? value : fallback;\n};\n\n/**\n * Safely extracts a number from an unknown value.\n * Handles both number and string representations.\n * @param value - The value to extract from\n * @returns The extracted number or undefined\n */\nexport const extractNumber = (value: unknown): Optional<number> => {\n if (isNumber(value)) {\n return value;\n }\n\n if (isString(value)) {\n const parsed = Number.parseFloat(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n return undefined;\n};\n", "import type {\n DelegationCreateRequest,\n DelegationCreateResponse,\n DelegationStatusRequest,\n DelegationStatusResponse,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\n/* Delegation Routes */\n\nexport const createDelegation = async (\n request: DelegationCreateRequest,\n): Promise<DelegationCreateResponse> => {\n const response = await appApiClient.post<DelegationCreateResponse>(\n \"/account/delegation\",\n request,\n );\n\n return response.data;\n};\n\nexport const getDelegationStatus = async (\n request: DelegationStatusRequest,\n): Promise<DelegationStatusResponse> => {\n const response = await appApiClient.get<DelegationStatusResponse>(\n \"/account/delegation/status\",\n { params: request },\n );\n\n return response.data;\n};\n", "import type {\n AddressWhitelistCheckRequest,\n AddressWhitelistCheckResponse,\n AuthLoginRequest,\n AuthLoginResponse,\n ChainIdResponse,\n ChainSuccessResponse,\n GetCurrentUserResponse,\n SessionTokenRequest,\n SessionTokenResponse,\n SessionVerifyResponse,\n SetChainIdRequest,\n TurnkeyLoginRequest,\n TurnkeyLoginResponse,\n TurnkeyVerificationRequest,\n TurnkeyVerificationResponse,\n WhitelistCheckRequest,\n WhitelistCheckResponse,\n} from \"@otim/utils/api\";\nimport type { User } from \"@otim/utils/schemas\";\n\nimport { appApiClient } from \"../client\";\n\n/* Login Routes */\n\nexport const postLogin = async (\n request: AuthLoginRequest,\n): Promise<AuthLoginResponse> => {\n const response = await appApiClient.post<AuthLoginResponse>(\n \"/auth/login\",\n request,\n );\n\n return response.data;\n};\n\n/* Turnkey Routes */\n\nexport const turnkeyVerification = async (\n request: TurnkeyVerificationRequest,\n): Promise<TurnkeyVerificationResponse> => {\n const response = await appApiClient.post<TurnkeyVerificationResponse>(\n \"/auth/turnkey-verification\",\n request,\n );\n\n return response.data;\n};\n\nexport const turnkeyLogin = async (\n request: TurnkeyLoginRequest,\n): Promise<TurnkeyLoginResponse> => {\n const response = await appApiClient.post<TurnkeyLoginResponse>(\n \"/auth/turnkey-login\",\n request,\n );\n\n return response.data;\n};\n\n/* Client API Routes */\n\nexport async function getNonce(): Promise<string> {\n const response = await appApiClient.get<{ nonce: string }>(\"/auth/nonce\");\n\n return response.data.nonce;\n}\n\nexport async function verifyAuthentication(params: {\n message: string;\n signature: string;\n}): Promise<{\n authorization: string;\n user: User;\n}> {\n const response = await appApiClient.post<{\n authorization: string;\n user: User;\n }>(\"/auth/authenticate\", params);\n\n return response.data;\n}\n\nexport async function setSessionToken(\n sessionToken: string,\n): Promise<{ success: boolean }> {\n const response = await appApiClient.post<{ success: boolean }>(\n \"/auth/session\",\n { sessionToken },\n );\n\n return response.data;\n}\n\nexport async function destroySessionToken(): Promise<{ success: boolean }> {\n const response = await appApiClient.delete<{ success: boolean }>(\n \"/auth/session\",\n );\n\n return response.data;\n}\n\n/* Chain Routes */\n\nexport const getChainId = async (): Promise<ChainIdResponse> => {\n const response = await appApiClient.get<ChainIdResponse>(\"/auth/chain\");\n\n return response.data;\n};\n\nexport const postChainId = async (\n request: SetChainIdRequest,\n): Promise<ChainSuccessResponse> => {\n const response = await appApiClient.post<ChainSuccessResponse>(\n \"/auth/chain\",\n request,\n );\n\n return response.data;\n};\n\nexport const deleteChainId = async (): Promise<ChainSuccessResponse> => {\n const response =\n await appApiClient.delete<ChainSuccessResponse>(\"/auth/chain\");\n\n return response.data;\n};\n\n/* Session Routes */\n\nexport const postSessionToken = async (\n request: SessionTokenRequest,\n): Promise<SessionTokenResponse> => {\n const response = await appApiClient.post<SessionTokenResponse>(\n \"/auth/session\",\n request,\n );\n\n return response.data;\n};\n\n/* Verify Routes */\n\nexport const getSessionVerify = async (): Promise<SessionVerifyResponse> => {\n const response =\n await appApiClient.get<SessionVerifyResponse>(\"/auth/verify\");\n\n return response.data;\n};\n\n/* User Routes */\n\nexport const getCurrentUser = async (): Promise<User> => {\n const response = await appApiClient.get<GetCurrentUserResponse>(\"/auth/me\");\n\n return response.data.data;\n};\n\n/* Whitelist Routes */\n\nexport const postCheckEmailInWhitelist = async (\n request: WhitelistCheckRequest,\n): Promise<WhitelistCheckResponse> => {\n const response = await appApiClient.post<WhitelistCheckResponse>(\n \"/auth/whitelist/email\",\n request,\n );\n\n return response.data;\n};\n\nexport const postCheckAddressInWhitelist = async (\n request: AddressWhitelistCheckRequest,\n): Promise<AddressWhitelistCheckResponse> => {\n const response = await appApiClient.post<AddressWhitelistCheckResponse>(\n \"/auth/whitelist/wallet-address\",\n request,\n );\n\n return response.data;\n};\n", "import { appApiClient } from \"../client\";\n\ntype BridgeCustomerType = \"individual\" | \"business\";\n\nexport interface GetBridgeCustomerResult {\n id: string;\n email?: string;\n status?: string;\n type?: BridgeCustomerType;\n hasAcceptedTermsOfService?: boolean;\n kycStatus?:\n | \"pending\"\n | \"approved\"\n | \"rejected\"\n | \"unknown\"\n | \"incomplete\"\n | \"awaiting_ubo\"\n | \"under_review\";\n endorsements?: Array<{\n name: string;\n status: string;\n requirements?: {\n complete: Array<string>;\n };\n }>;\n externalAccounts?: Array<{\n id: string;\n accountName: string;\n accountType: string;\n currency: string;\n bankName?: string;\n last_4?: string;\n active: boolean;\n }>;\n}\n\nexport interface GenerateBridgeKycLinksParams {\n email: string;\n type: BridgeCustomerType;\n fullName?: string;\n businessName?: string;\n}\n\nexport interface BridgeKycLink {\n kycLinkId: string;\n kycLink: string;\n kycStatus?:\n | \"pending\"\n | \"approved\"\n | \"rejected\"\n | \"unknown\"\n | \"incomplete\"\n | \"awaiting_ubo\"\n | \"under_review\";\n tosLink: string;\n tosStatus?: string;\n customerId: string;\n}\n\nexport interface CreateBridgePlaidLinkTokenParams {\n customerId: string;\n products?: string[];\n redirectUri?: string;\n}\n\nexport interface CreateBridgePlaidLinkTokenResult {\n linkToken: string;\n linkTokenExpiresAt?: string;\n callbackUrl?: string;\n}\n\nexport interface BridgeExchangePlaidPublicTokenParams {\n publicToken: string;\n linkToken: string;\n}\n\nexport interface BridgeExchangePlaidPublicTokenResult {\n success: boolean;\n message: string;\n}\n\nexport interface GetBridgeExternalAccountsResult {\n externalAccounts: Array<{\n id: string;\n accountName: string;\n accountType: string;\n currency: string;\n bankName?: string;\n last_4?: string;\n status: string;\n address?: {\n streetLine1?: string;\n streetLine2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n };\n }>;\n}\n\nexport interface GetBridgeLiquidationAddressesResult {\n liquidationAddresses: Array<{\n id: string;\n address: string;\n externalAccountId?: string;\n chain?: string;\n currency?: string;\n blockchainMemo?: string;\n }>;\n}\n\nexport interface CreateBridgeLiquidationAddressParams {\n customerId: string;\n chain: string;\n currency: string;\n externalAccountId?: string;\n externalAccountAddress?: {\n streetLine1?: string;\n streetLine2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n };\n destinationPaymentRail?: string;\n destinationCurrency?: string;\n destinationWireMessage?: string;\n destinationAddress?: string;\n customDeveloperFeePercent?: string;\n}\n\nexport interface CreateBridgeLiquidationAddressResult {\n id: string;\n address: string;\n chain?: string;\n currency?: string;\n blockchainMemo?: string;\n}\n\nexport interface CreateBridgeTransferParams {\n customerId: string;\n amount: string;\n sourceExternalAccountId: string;\n destinationWalletAddress: string;\n chainId: number;\n developerFee?: string;\n}\n\nexport interface CreateBridgeTransferResult {\n id: string;\n state: string;\n amount: string | null;\n source: {\n payment_rail: string;\n currency: string;\n external_account_id?: string;\n description?: string;\n };\n destination: {\n payment_rail: string;\n currency: string;\n to_address?: string;\n };\n source_deposit_instructions?: {\n payment_rail: string;\n amount: string;\n currency: string;\n deposit_message: string;\n bank_name: string;\n bank_address: string;\n bank_routing_number: string;\n bank_account_number: string;\n bank_beneficiary_name: string;\n bank_beneficiary_address: string;\n };\n receipt: {\n initial_amount: string;\n developer_fee: string;\n exchange_fee: string;\n subtotal_amount: string;\n gas_fee: string;\n final_amount: string;\n url: string;\n };\n created_at: string;\n updated_at: string;\n}\n\nexport const getBridgeCustomer = async (\n customerId: string,\n): Promise<GetBridgeCustomerResult> => {\n const response = await appApiClient.get<GetBridgeCustomerResult>(\n \"/bridge/customer\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const generateBridgeKycLinks = async (\n request: GenerateBridgeKycLinksParams,\n): Promise<BridgeKycLink> => {\n const response = await appApiClient.post<BridgeKycLink>(\n \"/bridge/kyc-links\",\n request,\n );\n\n return response.data;\n};\n\nexport const getBridgeKycLinkStatus = async (\n kycLinkId: string,\n): Promise<BridgeKycLink> => {\n const response = await appApiClient.get<BridgeKycLink>(\n \"/bridge/kyc-links/status\",\n { params: { kycLinkId } },\n );\n\n return response.data;\n};\n\nexport const createBridgePlaidLinkToken = async (\n request: CreateBridgePlaidLinkTokenParams,\n): Promise<CreateBridgePlaidLinkTokenResult> => {\n const response = await appApiClient.post<CreateBridgePlaidLinkTokenResult>(\n \"/bridge/plaid/link-token\",\n request,\n );\n\n return response.data;\n};\n\nexport const bridgeExchangePlaidPublicToken = async (\n request: BridgeExchangePlaidPublicTokenParams,\n): Promise<BridgeExchangePlaidPublicTokenResult> => {\n const response =\n await appApiClient.post<BridgeExchangePlaidPublicTokenResult>(\n \"/bridge/plaid/exchange-token\",\n request,\n );\n\n return response.data;\n};\n\nexport const getBridgeExternalAccounts = async (\n customerId: string,\n): Promise<GetBridgeExternalAccountsResult> => {\n const response = await appApiClient.get<GetBridgeExternalAccountsResult>(\n \"/bridge/external-accounts\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const getBridgeLiquidationAddresses = async (\n customerId: string,\n): Promise<GetBridgeLiquidationAddressesResult> => {\n const response = await appApiClient.get<GetBridgeLiquidationAddressesResult>(\n \"/bridge/liquidation-addresses\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const createBridgeLiquidationAddress = async (\n request: CreateBridgeLiquidationAddressParams,\n): Promise<CreateBridgeLiquidationAddressResult> => {\n const response =\n await appApiClient.post<CreateBridgeLiquidationAddressResult>(\n \"/bridge/liquidation-addresses\",\n request,\n );\n\n return response.data;\n};\n\nexport const createBridgeTransfer = async (\n request: CreateBridgeTransferParams,\n): Promise<CreateBridgeTransferResult> => {\n const response = await appApiClient.post<CreateBridgeTransferResult>(\n \"/bridge/transfer\",\n request,\n );\n\n return response.data;\n};\n\nexport interface UpdateBridgeExternalAccountAddressParams {\n customerId: string;\n externalAccountId: string;\n address: {\n streetLine1: string;\n streetLine2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n };\n}\n\nexport const updateBridgeExternalAccountAddress = async (\n customerId: string,\n externalAccountId: string,\n address: {\n streetLine1: string;\n streetLine2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n },\n): Promise<{ success: boolean }> => {\n const response = await appApiClient.put<{ success: boolean }>(\n \"/bridge/external-accounts/update-address\",\n {\n customerId,\n externalAccountId,\n address,\n },\n );\n\n return response.data;\n};\n", "import type {\n GetDelegateAddressRequest,\n GetDelegateAddressResponse,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const getDelegateAddress = async (\n request: GetDelegateAddressRequest,\n): Promise<GetDelegateAddressResponse> => {\n const response = await appApiClient.get<GetDelegateAddressResponse>(\n `/config/delegate-address/${request.chainId}`,\n );\n\n return response.data;\n};\n", "import type {\n InstructionActivateRequest,\n InstructionActivateResponse,\n InstructionBuild,\n InstructionBuildRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const buildInstruction = async (\n request: InstructionBuildRequest,\n): Promise<InstructionBuild> => {\n const response = await appApiClient.post<InstructionBuild>(\n \"/instruction/build\",\n request,\n );\n\n return response.data;\n};\n\nexport const activateInstruction = async (\n request: InstructionActivateRequest,\n): Promise<InstructionActivateResponse> => {\n const response = await appApiClient.post<InstructionActivateResponse>(\n \"/instruction/activate\",\n request,\n );\n\n return response.data;\n};\n", "import type {\n GetIntegrationRequest,\n IntegrationResponse,\n UpdateIntegrationRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const getIntegration = async (\n request: GetIntegrationRequest,\n): Promise<IntegrationResponse> => {\n const response = await appApiClient.post<IntegrationResponse>(\n \"/integration/get\",\n request,\n );\n\n return response.data;\n};\n\nexport const upsertIntegration = async (\n request: UpdateIntegrationRequest,\n): Promise<IntegrationResponse> => {\n const response = await appApiClient.put<IntegrationResponse>(\n \"/integration\",\n request,\n );\n\n return response.data;\n};\n", "import type {\n PaymentRequestBuildRequest,\n PaymentRequestBuildResponse,\n PaymentRequestNewRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const buildPaymentRequest = async (\n request: PaymentRequestBuildRequest,\n): Promise<PaymentRequestBuildResponse> => {\n const response = await appApiClient.post<PaymentRequestBuildResponse>(\n \"/payment/request/build\",\n request,\n );\n\n return response.data;\n};\n\nexport const newPaymentRequest = async (\n request: PaymentRequestNewRequest,\n): Promise<unknown> => {\n const response = await appApiClient.post<unknown>(\n \"/payment/request/new\",\n request,\n );\n\n return response.data;\n};\n"],
4
+ "sourcesContent": ["export * from \"./client\";\nexport * from \"./routes\";\n", "import axios from \"axios\";\n\nimport { isString, logger } from \"@otim/utils/helpers\";\n\nimport { APP_API_URL } from \"../env\";\n\nconst getApiUrl = (): string => {\n const appApiUrl = APP_API_URL;\n\n if (!isString(appApiUrl) || appApiUrl.trim() === \"\") {\n const errorMessage = \"APP API Client URL must be defined\";\n logger.error(errorMessage, { context: \"App Server Client\" });\n throw new Error(errorMessage);\n }\n\n return appApiUrl;\n};\n\nlet authTokenGetter: (() => Promise<string | undefined>) | null = null;\n\nexport const setAuthTokenGetter = (\n getter: () => Promise<string | undefined>,\n) => {\n authTokenGetter = getter;\n};\n\nexport const appApiClient = axios.create({\n baseURL: getApiUrl(),\n timeout: 30000,\n});\n\nappApiClient.interceptors.request.use(async (config) => {\n if (authTokenGetter) {\n const token = await authTokenGetter();\n if (token) {\n config.headers = config.headers ?? {};\n config.headers.Authorization = `Bearer ${token}`;\n }\n }\n return config;\n});\n", "/**\n * Environment configuration for @otim/utils\n *\n * These values are injected at build time via esbuild's define option.\n * See scripts/build.js for the injection logic.\n */\n\n/**\n * Build mode - determines production vs development behavior\n * Values: \"production\" | \"development\"\n */\nexport const BUILD_MODE = process.env.BUILD_MODE || \"development\";\n\n/**\n * App API URL - base URL for API requests\n * Defaults to production URL if not specified\n */\nexport const APP_API_URL =\n process.env.NEXT_PUBLIC_APP_API_URL || \"https://app.otim.com/api\";\n", "import { BUILD_MODE } from \"../env\";\n\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\ninterface LoggerOptions {\n context?: string;\n data?: unknown;\n}\n\ninterface ErrorLogOptions {\n context?: string;\n operation?: string;\n metadata?: Record<string, unknown>;\n}\n\nclass Logger {\n private isDevelopment = BUILD_MODE === \"development\";\n\n debug(message: string, options?: LoggerOptions): void {\n if (this.isDevelopment) {\n this.log(\"debug\", message, options);\n }\n }\n\n info(message: string, options?: LoggerOptions): void {\n this.log(\"info\", message, options);\n }\n\n warn(message: string, options?: LoggerOptions): void {\n this.log(\"warn\", message, options);\n }\n\n error(message: string, options?: LoggerOptions): void {\n this.log(\"error\", message, options);\n }\n\n /**\n * Log errors with context - useful for non-API errors\n * For API errors, use the existing getErrorMessage from @otim/utils/api\n */\n logError(error: unknown, options: ErrorLogOptions = {}): void {\n const { context, operation, metadata } = options;\n const prefix = this.buildPrefix(context, operation);\n\n // Extract basic error message\n let message = \"Unknown error\";\n if (error instanceof Error) {\n message = error.message;\n } else if (typeof error === \"string\") {\n message = error;\n } else if (error && typeof error === \"object\" && \"message\" in error) {\n message = String((error as { message: unknown }).message);\n }\n\n console.error(prefix ? `${prefix} ${message}` : message);\n\n // Log metadata if provided\n if (metadata && Object.keys(metadata).length > 0) {\n console.error(\"Context:\", metadata);\n }\n\n // Log the full error object for debugging\n if (error instanceof Error && error.stack) {\n console.error(\"Stack:\", error.stack);\n } else {\n console.error(\"Error details:\", error);\n }\n }\n\n private buildPrefix(context?: string, operation?: string): string {\n const parts: string[] = [];\n if (context) parts.push(`[${context}]`);\n if (operation) parts.push(`[${operation}]`);\n return parts.join(\" \");\n }\n\n private log(level: LogLevel, message: string, options?: LoggerOptions): void {\n const prefix = options?.context ? `[${options.context}]` : \"\";\n const fullMessage = `${prefix} ${message}`.trim();\n\n switch (level) {\n case \"debug\":\n case \"info\":\n console.log(fullMessage);\n break;\n case \"warn\":\n console.warn(fullMessage);\n break;\n case \"error\":\n console.error(fullMessage);\n break;\n }\n\n if (options?.data) {\n console.dir(options.data, { depth: null });\n }\n }\n}\n\nexport const logger = new Logger();\n", "import type { z, ZodObject } from \"zod\";\n\nexport type Nullable<T> = T | null;\nexport type Nullish<T> = T | null | undefined;\nexport type Optional<T> = T | undefined;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- any is ok\nexport type Any = any;\n\nexport type NumberOrString = number | string;\n\nexport type OverrideProps<T, TOverridden> = Omit<T, keyof TOverridden> &\n TOverridden;\n\nexport type NonEmptyArray<T> = [T, ...T[]];\n\nexport interface DataRecord {\n [value: string]: Nullish<DataRecord | string | number | boolean>;\n}\n\nexport interface Input<T> {\n input: T;\n}\n\nexport type ZodCustom<Values extends object> = ZodObject<{\n [P in keyof Values]: z.ZodType<Values[P]>;\n}>;\n\nexport const isError = (value: unknown): value is Error =>\n value instanceof Error;\n\nexport const isFunction = (\n value: unknown,\n): value is (...args: unknown[]) => unknown => typeof value === \"function\";\n\nexport const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nexport const isNumber = (value: unknown): value is number =>\n typeof value === \"number\";\n\nexport const isString = (value: unknown): value is string =>\n typeof value === \"string\";\n\nexport const isUndefined = (value: unknown): value is undefined =>\n typeof value === \"undefined\";\n\nexport const isBoolean = (value: unknown): value is boolean =>\n typeof value === \"boolean\";\n\n/**\n * Safely extracts a string from an unknown value.\n * @param value - The value to extract from\n * @param fallback - Optional fallback value if extraction fails\n * @returns The extracted string or fallback/undefined\n */\nexport const extractString = (\n value: unknown,\n fallback?: string,\n): Optional<string> => {\n return isString(value) ? value : fallback;\n};\n\n/**\n * Safely extracts a number from an unknown value.\n * Handles both number and string representations.\n * @param value - The value to extract from\n * @returns The extracted number or undefined\n */\nexport const extractNumber = (value: unknown): Optional<number> => {\n if (isNumber(value)) {\n return value;\n }\n\n if (isString(value)) {\n const parsed = Number.parseFloat(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n return undefined;\n};\n", "import type {\n DelegationCreateRequest,\n DelegationCreateResponse,\n DelegationStatusRequest,\n DelegationStatusResponse,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\n/* Delegation Routes */\n\nexport const createDelegation = async (\n request: DelegationCreateRequest,\n): Promise<DelegationCreateResponse> => {\n const response = await appApiClient.post<DelegationCreateResponse>(\n \"/account/delegation\",\n request,\n );\n\n return response.data;\n};\n\nexport const getDelegationStatus = async (\n request: DelegationStatusRequest,\n): Promise<DelegationStatusResponse> => {\n const response = await appApiClient.get<DelegationStatusResponse>(\n \"/account/delegation/status\",\n { params: request },\n );\n\n return response.data;\n};\n", "import type {\n AddressWhitelistCheckRequest,\n AddressWhitelistCheckResponse,\n AuthLoginRequest,\n AuthLoginResponse,\n ChainIdResponse,\n ChainSuccessResponse,\n GetCurrentUserResponse,\n SessionTokenRequest,\n SessionTokenResponse,\n SessionVerifyResponse,\n SetChainIdRequest,\n TurnkeyLoginRequest,\n TurnkeyLoginResponse,\n TurnkeyVerificationRequest,\n TurnkeyVerificationResponse,\n WhitelistCheckRequest,\n WhitelistCheckResponse,\n} from \"@otim/utils/api\";\nimport type { User } from \"@otim/utils/schemas\";\n\nimport { appApiClient } from \"../client\";\n\n/* Login Routes */\n\nexport const postLogin = async (\n request: AuthLoginRequest,\n): Promise<AuthLoginResponse> => {\n const response = await appApiClient.post<AuthLoginResponse>(\n \"/auth/login\",\n request,\n );\n\n return response.data;\n};\n\n/* Turnkey Routes */\n\nexport const turnkeyVerification = async (\n request: TurnkeyVerificationRequest,\n): Promise<TurnkeyVerificationResponse> => {\n const response = await appApiClient.post<TurnkeyVerificationResponse>(\n \"/auth/turnkey-verification\",\n request,\n );\n\n return response.data;\n};\n\nexport const turnkeyLogin = async (\n request: TurnkeyLoginRequest,\n): Promise<TurnkeyLoginResponse> => {\n const response = await appApiClient.post<TurnkeyLoginResponse>(\n \"/auth/turnkey-login\",\n request,\n );\n\n return response.data;\n};\n\n/* Client API Routes */\n\nexport async function getNonce(): Promise<string> {\n const response = await appApiClient.get<{ nonce: string }>(\"/auth/nonce\");\n\n return response.data.nonce;\n}\n\nexport async function verifyAuthentication(params: {\n message: string;\n signature: string;\n}): Promise<{\n authorization: string;\n user: User;\n}> {\n const response = await appApiClient.post<{\n authorization: string;\n user: User;\n }>(\"/auth/authenticate\", params);\n\n return response.data;\n}\n\nexport async function setSessionToken(\n sessionToken: string,\n): Promise<{ success: boolean }> {\n const response = await appApiClient.post<{ success: boolean }>(\n \"/auth/session\",\n { sessionToken },\n );\n\n return response.data;\n}\n\nexport async function destroySessionToken(): Promise<{ success: boolean }> {\n const response = await appApiClient.delete<{ success: boolean }>(\n \"/auth/session\",\n );\n\n return response.data;\n}\n\n/* Chain Routes */\n\nexport const getChainId = async (): Promise<ChainIdResponse> => {\n const response = await appApiClient.get<ChainIdResponse>(\"/auth/chain\");\n\n return response.data;\n};\n\nexport const postChainId = async (\n request: SetChainIdRequest,\n): Promise<ChainSuccessResponse> => {\n const response = await appApiClient.post<ChainSuccessResponse>(\n \"/auth/chain\",\n request,\n );\n\n return response.data;\n};\n\nexport const deleteChainId = async (): Promise<ChainSuccessResponse> => {\n const response =\n await appApiClient.delete<ChainSuccessResponse>(\"/auth/chain\");\n\n return response.data;\n};\n\n/* Session Routes */\n\nexport const postSessionToken = async (\n request: SessionTokenRequest,\n): Promise<SessionTokenResponse> => {\n const response = await appApiClient.post<SessionTokenResponse>(\n \"/auth/session\",\n request,\n );\n\n return response.data;\n};\n\n/* Verify Routes */\n\nexport const getSessionVerify = async (): Promise<SessionVerifyResponse> => {\n const response =\n await appApiClient.get<SessionVerifyResponse>(\"/auth/verify\");\n\n return response.data;\n};\n\n/* User Routes */\n\nexport const getCurrentUser = async (): Promise<User> => {\n const response = await appApiClient.get<GetCurrentUserResponse>(\"/auth/me\");\n\n return response.data.data;\n};\n\n/* Whitelist Routes */\n\nexport const postCheckEmailInWhitelist = async (\n request: WhitelistCheckRequest,\n): Promise<WhitelistCheckResponse> => {\n const response = await appApiClient.post<WhitelistCheckResponse>(\n \"/auth/whitelist/email\",\n request,\n );\n\n return response.data;\n};\n\nexport const postCheckAddressInWhitelist = async (\n request: AddressWhitelistCheckRequest,\n): Promise<AddressWhitelistCheckResponse> => {\n const response = await appApiClient.post<AddressWhitelistCheckResponse>(\n \"/auth/whitelist/wallet-address\",\n request,\n );\n\n return response.data;\n};\n", "import { appApiClient } from \"../client\";\n\ntype BridgeCustomerType = \"individual\" | \"business\";\n\nexport interface GetBridgeCustomerResult {\n id: string;\n email?: string;\n status?: string;\n type?: BridgeCustomerType;\n hasAcceptedTermsOfService?: boolean;\n kycStatus?:\n | \"pending\"\n | \"approved\"\n | \"rejected\"\n | \"unknown\"\n | \"incomplete\"\n | \"awaiting_ubo\"\n | \"under_review\";\n endorsements?: Array<{\n name: string;\n status: string;\n requirements?: {\n complete: Array<string>;\n };\n }>;\n externalAccounts?: Array<{\n id: string;\n accountName: string;\n accountType: string;\n currency: string;\n bankName?: string;\n last_4?: string;\n active: boolean;\n }>;\n}\n\nexport interface GenerateBridgeKycLinksParams {\n email: string;\n type: BridgeCustomerType;\n fullName?: string;\n businessName?: string;\n}\n\nexport interface BridgeKycLink {\n kycLinkId: string;\n kycLink: string;\n kycStatus?:\n | \"pending\"\n | \"approved\"\n | \"rejected\"\n | \"unknown\"\n | \"incomplete\"\n | \"awaiting_ubo\"\n | \"under_review\";\n tosLink: string;\n tosStatus?: string;\n customerId: string;\n}\n\nexport interface CreateBridgePlaidLinkTokenParams {\n customerId: string;\n products?: string[];\n redirectUri?: string;\n}\n\nexport interface CreateBridgePlaidLinkTokenResult {\n linkToken: string;\n linkTokenExpiresAt?: string;\n callbackUrl?: string;\n}\n\nexport interface BridgeExchangePlaidPublicTokenParams {\n publicToken: string;\n linkToken: string;\n}\n\nexport interface BridgeExchangePlaidPublicTokenResult {\n success: boolean;\n message: string;\n}\n\nexport interface GetBridgeExternalAccountsResult {\n externalAccounts: Array<{\n id: string;\n accountName: string;\n accountType: string;\n currency: string;\n bankName?: string;\n last_4?: string;\n status: string;\n address?: {\n streetLine1?: string;\n streetLine2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n };\n }>;\n}\n\nexport interface GetBridgeLiquidationAddressesResult {\n liquidationAddresses: Array<{\n id: string;\n address: string;\n externalAccountId?: string;\n chain?: string;\n currency?: string;\n blockchainMemo?: string;\n }>;\n}\n\nexport interface CreateBridgeLiquidationAddressParams {\n customerId: string;\n chain: string;\n currency: string;\n externalAccountId?: string;\n externalAccountAddress?: {\n streetLine1?: string;\n streetLine2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n };\n destinationPaymentRail?: string;\n destinationCurrency?: string;\n destinationWireMessage?: string;\n destinationAddress?: string;\n customDeveloperFeePercent?: string;\n}\n\nexport interface CreateBridgeLiquidationAddressResult {\n id: string;\n address: string;\n chain?: string;\n currency?: string;\n blockchainMemo?: string;\n}\n\nexport interface CreateBridgeTransferParams {\n customerId: string;\n amount: string;\n sourceExternalAccountId: string;\n destinationWalletAddress: string;\n chainId: number;\n developerFee?: string;\n}\n\nexport interface CreateBridgeTransferResult {\n id: string;\n state: string;\n amount: string | null;\n source: {\n payment_rail: string;\n currency: string;\n external_account_id?: string;\n description?: string;\n };\n destination: {\n payment_rail: string;\n currency: string;\n to_address?: string;\n };\n source_deposit_instructions?: {\n payment_rail: string;\n amount: string;\n currency: string;\n deposit_message: string;\n bank_name: string;\n bank_address: string;\n bank_routing_number: string;\n bank_account_number: string;\n bank_beneficiary_name: string;\n bank_beneficiary_address: string;\n };\n receipt: {\n initial_amount: string;\n developer_fee: string;\n exchange_fee: string;\n subtotal_amount: string;\n gas_fee: string;\n final_amount: string;\n url: string;\n };\n created_at: string;\n updated_at: string;\n}\n\nexport const getBridgeCustomer = async (\n customerId: string,\n): Promise<GetBridgeCustomerResult> => {\n const response = await appApiClient.get<GetBridgeCustomerResult>(\n \"/bridge/customer\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const generateBridgeKycLinks = async (\n request: GenerateBridgeKycLinksParams,\n): Promise<BridgeKycLink> => {\n const response = await appApiClient.post<BridgeKycLink>(\n \"/bridge/kyc-links\",\n request,\n );\n\n return response.data;\n};\n\nexport const getBridgeKycLinkStatus = async (\n kycLinkId: string,\n): Promise<BridgeKycLink> => {\n const response = await appApiClient.get<BridgeKycLink>(\n \"/bridge/kyc-links/status\",\n { params: { kycLinkId } },\n );\n\n return response.data;\n};\n\nexport const createBridgePlaidLinkToken = async (\n request: CreateBridgePlaidLinkTokenParams,\n): Promise<CreateBridgePlaidLinkTokenResult> => {\n const response = await appApiClient.post<CreateBridgePlaidLinkTokenResult>(\n \"/bridge/plaid/link-token\",\n request,\n );\n\n return response.data;\n};\n\nexport const bridgeExchangePlaidPublicToken = async (\n request: BridgeExchangePlaidPublicTokenParams,\n): Promise<BridgeExchangePlaidPublicTokenResult> => {\n const response =\n await appApiClient.post<BridgeExchangePlaidPublicTokenResult>(\n \"/bridge/plaid/exchange-token\",\n request,\n );\n\n return response.data;\n};\n\nexport const getBridgeExternalAccounts = async (\n customerId: string,\n): Promise<GetBridgeExternalAccountsResult> => {\n const response = await appApiClient.get<GetBridgeExternalAccountsResult>(\n \"/bridge/external-accounts\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const getBridgeLiquidationAddresses = async (\n customerId: string,\n): Promise<GetBridgeLiquidationAddressesResult> => {\n const response = await appApiClient.get<GetBridgeLiquidationAddressesResult>(\n \"/bridge/liquidation-addresses\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const createBridgeLiquidationAddress = async (\n request: CreateBridgeLiquidationAddressParams,\n): Promise<CreateBridgeLiquidationAddressResult> => {\n const response =\n await appApiClient.post<CreateBridgeLiquidationAddressResult>(\n \"/bridge/liquidation-addresses\",\n request,\n );\n\n return response.data;\n};\n\nexport const createBridgeTransfer = async (\n request: CreateBridgeTransferParams,\n): Promise<CreateBridgeTransferResult> => {\n const response = await appApiClient.post<CreateBridgeTransferResult>(\n \"/bridge/transfer\",\n request,\n );\n\n return response.data;\n};\n\nexport interface UpdateBridgeExternalAccountAddressParams {\n customerId: string;\n externalAccountId: string;\n address: {\n streetLine1: string;\n streetLine2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n };\n}\n\nexport const updateBridgeExternalAccountAddress = async (\n customerId: string,\n externalAccountId: string,\n address: {\n streetLine1: string;\n streetLine2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n },\n): Promise<{ success: boolean }> => {\n const response = await appApiClient.put<{ success: boolean }>(\n \"/bridge/external-accounts/update-address\",\n {\n customerId,\n externalAccountId,\n address,\n },\n );\n\n return response.data;\n};\n", "import type {\n GetDelegateAddressRequest,\n GetDelegateAddressResponse,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const getDelegateAddress = async (\n request: GetDelegateAddressRequest,\n): Promise<GetDelegateAddressResponse> => {\n const response = await appApiClient.get<GetDelegateAddressResponse>(\n `/config/delegate-address/${request.chainId}`,\n );\n\n return response.data;\n};\n", "import type {\n InstructionActivateRequest,\n InstructionActivateResponse,\n InstructionBuild,\n InstructionBuildRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const buildInstruction = async (\n request: InstructionBuildRequest,\n): Promise<InstructionBuild> => {\n const response = await appApiClient.post<InstructionBuild>(\n \"/instruction/build\",\n request,\n );\n\n return response.data;\n};\n\nexport const activateInstruction = async (\n request: InstructionActivateRequest,\n): Promise<InstructionActivateResponse> => {\n const response = await appApiClient.post<InstructionActivateResponse>(\n \"/instruction/activate\",\n request,\n );\n\n return response.data;\n};\n", "import type {\n GetIntegrationRequest,\n IntegrationResponse,\n UpdateIntegrationRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const getIntegration = async (\n request: GetIntegrationRequest,\n): Promise<IntegrationResponse> => {\n const response = await appApiClient.post<IntegrationResponse>(\n \"/integration/get\",\n request,\n );\n\n return response.data;\n};\n\nexport const upsertIntegration = async (\n request: UpdateIntegrationRequest,\n): Promise<IntegrationResponse> => {\n const response = await appApiClient.put<IntegrationResponse>(\n \"/integration\",\n request,\n );\n\n return response.data;\n};\n", "import type {\n PaymentRequestBuildRequest,\n PaymentRequestBuildResponse,\n PaymentRequestNewRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const buildPaymentRequest = async (\n request: PaymentRequestBuildRequest,\n): Promise<PaymentRequestBuildResponse> => {\n const response = await appApiClient.post<PaymentRequestBuildResponse>(\n \"/orchestration/build\",\n request,\n );\n\n return response.data;\n};\n\nexport const newPaymentRequest = async (\n request: PaymentRequestNewRequest,\n): Promise<unknown> => {\n const response = await appApiClient.post<unknown>(\n \"/orchestration/new\",\n request,\n );\n\n return response.data;\n};\n"],
5
5
  "mappings": "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",
6
6
  "names": ["axios"]
7
7
  }
@@ -7,7 +7,7 @@ import axios from "axios";
7
7
 
8
8
  // src/env.ts
9
9
  var BUILD_MODE = "development";
10
- var APP_API_URL = "https://app.otim.com/api";
10
+ var APP_API_URL = "http://localhost:3000/api";
11
11
 
12
12
  // src/helpers/logger.ts
13
13
  var Logger = class {
@@ -336,14 +336,14 @@ var upsertIntegration = async (request) => {
336
336
  // src/server/routes/payments.ts
337
337
  var buildPaymentRequest = async (request) => {
338
338
  const response = await appApiClient.post(
339
- "/payment/request/build",
339
+ "/orchestration/build",
340
340
  request
341
341
  );
342
342
  return response.data;
343
343
  };
344
344
  var newPaymentRequest = async (request) => {
345
345
  const response = await appApiClient.post(
346
- "/payment/request/new",
346
+ "/orchestration/new",
347
347
  request
348
348
  );
349
349
  return response.data;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/server/client.ts", "../../src/env.ts", "../../src/helpers/logger.ts", "../../src/helpers/types.ts", "../../src/server/routes/account.ts", "../../src/server/routes/auth.ts", "../../src/server/routes/bridge.ts", "../../src/server/routes/config.ts", "../../src/server/routes/instruction.ts", "../../src/server/routes/integration.ts", "../../src/server/routes/payments.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\n\nimport { isString, logger } from \"@otim/utils/helpers\";\n\nimport { APP_API_URL } from \"../env\";\n\nconst getApiUrl = (): string => {\n const appApiUrl = APP_API_URL;\n\n if (!isString(appApiUrl) || appApiUrl.trim() === \"\") {\n const errorMessage = \"APP API Client URL must be defined\";\n logger.error(errorMessage, { context: \"App Server Client\" });\n throw new Error(errorMessage);\n }\n\n return appApiUrl;\n};\n\nlet authTokenGetter: (() => Promise<string | undefined>) | null = null;\n\nexport const setAuthTokenGetter = (\n getter: () => Promise<string | undefined>,\n) => {\n authTokenGetter = getter;\n};\n\nexport const appApiClient = axios.create({\n baseURL: getApiUrl(),\n timeout: 30000,\n});\n\nappApiClient.interceptors.request.use(async (config) => {\n if (authTokenGetter) {\n const token = await authTokenGetter();\n if (token) {\n config.headers = config.headers ?? {};\n config.headers.Authorization = `Bearer ${token}`;\n }\n }\n return config;\n});\n", "/**\n * Environment configuration for @otim/utils\n *\n * These values are injected at build time via esbuild's define option.\n * See scripts/build.js for the injection logic.\n */\n\n/**\n * Build mode - determines production vs development behavior\n * Values: \"production\" | \"development\"\n */\nexport const BUILD_MODE = process.env.BUILD_MODE || \"development\";\n\n/**\n * App API URL - base URL for API requests\n * Defaults to production URL if not specified\n */\nexport const APP_API_URL =\n process.env.NEXT_PUBLIC_APP_API_URL || \"https://app.otim.com/api\";\n", "import { BUILD_MODE } from \"../env\";\n\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\ninterface LoggerOptions {\n context?: string;\n data?: unknown;\n}\n\ninterface ErrorLogOptions {\n context?: string;\n operation?: string;\n metadata?: Record<string, unknown>;\n}\n\nclass Logger {\n private isDevelopment = BUILD_MODE === \"development\";\n\n debug(message: string, options?: LoggerOptions): void {\n if (this.isDevelopment) {\n this.log(\"debug\", message, options);\n }\n }\n\n info(message: string, options?: LoggerOptions): void {\n this.log(\"info\", message, options);\n }\n\n warn(message: string, options?: LoggerOptions): void {\n this.log(\"warn\", message, options);\n }\n\n error(message: string, options?: LoggerOptions): void {\n this.log(\"error\", message, options);\n }\n\n /**\n * Log errors with context - useful for non-API errors\n * For API errors, use the existing getErrorMessage from @otim/utils/api\n */\n logError(error: unknown, options: ErrorLogOptions = {}): void {\n const { context, operation, metadata } = options;\n const prefix = this.buildPrefix(context, operation);\n\n // Extract basic error message\n let message = \"Unknown error\";\n if (error instanceof Error) {\n message = error.message;\n } else if (typeof error === \"string\") {\n message = error;\n } else if (error && typeof error === \"object\" && \"message\" in error) {\n message = String((error as { message: unknown }).message);\n }\n\n console.error(prefix ? `${prefix} ${message}` : message);\n\n // Log metadata if provided\n if (metadata && Object.keys(metadata).length > 0) {\n console.error(\"Context:\", metadata);\n }\n\n // Log the full error object for debugging\n if (error instanceof Error && error.stack) {\n console.error(\"Stack:\", error.stack);\n } else {\n console.error(\"Error details:\", error);\n }\n }\n\n private buildPrefix(context?: string, operation?: string): string {\n const parts: string[] = [];\n if (context) parts.push(`[${context}]`);\n if (operation) parts.push(`[${operation}]`);\n return parts.join(\" \");\n }\n\n private log(level: LogLevel, message: string, options?: LoggerOptions): void {\n const prefix = options?.context ? `[${options.context}]` : \"\";\n const fullMessage = `${prefix} ${message}`.trim();\n\n switch (level) {\n case \"debug\":\n case \"info\":\n console.log(fullMessage);\n break;\n case \"warn\":\n console.warn(fullMessage);\n break;\n case \"error\":\n console.error(fullMessage);\n break;\n }\n\n if (options?.data) {\n console.dir(options.data, { depth: null });\n }\n }\n}\n\nexport const logger = new Logger();\n", "import type { z, ZodObject } from \"zod\";\n\nexport type Nullable<T> = T | null;\nexport type Nullish<T> = T | null | undefined;\nexport type Optional<T> = T | undefined;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- any is ok\nexport type Any = any;\n\nexport type NumberOrString = number | string;\n\nexport type OverrideProps<T, TOverridden> = Omit<T, keyof TOverridden> &\n TOverridden;\n\nexport type NonEmptyArray<T> = [T, ...T[]];\n\nexport interface DataRecord {\n [value: string]: Nullish<DataRecord | string | number | boolean>;\n}\n\nexport interface Input<T> {\n input: T;\n}\n\nexport type ZodCustom<Values extends object> = ZodObject<{\n [P in keyof Values]: z.ZodType<Values[P]>;\n}>;\n\nexport const isError = (value: unknown): value is Error =>\n value instanceof Error;\n\nexport const isFunction = (\n value: unknown,\n): value is (...args: unknown[]) => unknown => typeof value === \"function\";\n\nexport const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nexport const isNumber = (value: unknown): value is number =>\n typeof value === \"number\";\n\nexport const isString = (value: unknown): value is string =>\n typeof value === \"string\";\n\nexport const isUndefined = (value: unknown): value is undefined =>\n typeof value === \"undefined\";\n\nexport const isBoolean = (value: unknown): value is boolean =>\n typeof value === \"boolean\";\n\n/**\n * Safely extracts a string from an unknown value.\n * @param value - The value to extract from\n * @param fallback - Optional fallback value if extraction fails\n * @returns The extracted string or fallback/undefined\n */\nexport const extractString = (\n value: unknown,\n fallback?: string,\n): Optional<string> => {\n return isString(value) ? value : fallback;\n};\n\n/**\n * Safely extracts a number from an unknown value.\n * Handles both number and string representations.\n * @param value - The value to extract from\n * @returns The extracted number or undefined\n */\nexport const extractNumber = (value: unknown): Optional<number> => {\n if (isNumber(value)) {\n return value;\n }\n\n if (isString(value)) {\n const parsed = Number.parseFloat(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n return undefined;\n};\n", "import type {\n DelegationCreateRequest,\n DelegationCreateResponse,\n DelegationStatusRequest,\n DelegationStatusResponse,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\n/* Delegation Routes */\n\nexport const createDelegation = async (\n request: DelegationCreateRequest,\n): Promise<DelegationCreateResponse> => {\n const response = await appApiClient.post<DelegationCreateResponse>(\n \"/account/delegation\",\n request,\n );\n\n return response.data;\n};\n\nexport const getDelegationStatus = async (\n request: DelegationStatusRequest,\n): Promise<DelegationStatusResponse> => {\n const response = await appApiClient.get<DelegationStatusResponse>(\n \"/account/delegation/status\",\n { params: request },\n );\n\n return response.data;\n};\n", "import type {\n AddressWhitelistCheckRequest,\n AddressWhitelistCheckResponse,\n AuthLoginRequest,\n AuthLoginResponse,\n ChainIdResponse,\n ChainSuccessResponse,\n GetCurrentUserResponse,\n SessionTokenRequest,\n SessionTokenResponse,\n SessionVerifyResponse,\n SetChainIdRequest,\n TurnkeyLoginRequest,\n TurnkeyLoginResponse,\n TurnkeyVerificationRequest,\n TurnkeyVerificationResponse,\n WhitelistCheckRequest,\n WhitelistCheckResponse,\n} from \"@otim/utils/api\";\nimport type { User } from \"@otim/utils/schemas\";\n\nimport { appApiClient } from \"../client\";\n\n/* Login Routes */\n\nexport const postLogin = async (\n request: AuthLoginRequest,\n): Promise<AuthLoginResponse> => {\n const response = await appApiClient.post<AuthLoginResponse>(\n \"/auth/login\",\n request,\n );\n\n return response.data;\n};\n\n/* Turnkey Routes */\n\nexport const turnkeyVerification = async (\n request: TurnkeyVerificationRequest,\n): Promise<TurnkeyVerificationResponse> => {\n const response = await appApiClient.post<TurnkeyVerificationResponse>(\n \"/auth/turnkey-verification\",\n request,\n );\n\n return response.data;\n};\n\nexport const turnkeyLogin = async (\n request: TurnkeyLoginRequest,\n): Promise<TurnkeyLoginResponse> => {\n const response = await appApiClient.post<TurnkeyLoginResponse>(\n \"/auth/turnkey-login\",\n request,\n );\n\n return response.data;\n};\n\n/* Client API Routes */\n\nexport async function getNonce(): Promise<string> {\n const response = await appApiClient.get<{ nonce: string }>(\"/auth/nonce\");\n\n return response.data.nonce;\n}\n\nexport async function verifyAuthentication(params: {\n message: string;\n signature: string;\n}): Promise<{\n authorization: string;\n user: User;\n}> {\n const response = await appApiClient.post<{\n authorization: string;\n user: User;\n }>(\"/auth/authenticate\", params);\n\n return response.data;\n}\n\nexport async function setSessionToken(\n sessionToken: string,\n): Promise<{ success: boolean }> {\n const response = await appApiClient.post<{ success: boolean }>(\n \"/auth/session\",\n { sessionToken },\n );\n\n return response.data;\n}\n\nexport async function destroySessionToken(): Promise<{ success: boolean }> {\n const response = await appApiClient.delete<{ success: boolean }>(\n \"/auth/session\",\n );\n\n return response.data;\n}\n\n/* Chain Routes */\n\nexport const getChainId = async (): Promise<ChainIdResponse> => {\n const response = await appApiClient.get<ChainIdResponse>(\"/auth/chain\");\n\n return response.data;\n};\n\nexport const postChainId = async (\n request: SetChainIdRequest,\n): Promise<ChainSuccessResponse> => {\n const response = await appApiClient.post<ChainSuccessResponse>(\n \"/auth/chain\",\n request,\n );\n\n return response.data;\n};\n\nexport const deleteChainId = async (): Promise<ChainSuccessResponse> => {\n const response =\n await appApiClient.delete<ChainSuccessResponse>(\"/auth/chain\");\n\n return response.data;\n};\n\n/* Session Routes */\n\nexport const postSessionToken = async (\n request: SessionTokenRequest,\n): Promise<SessionTokenResponse> => {\n const response = await appApiClient.post<SessionTokenResponse>(\n \"/auth/session\",\n request,\n );\n\n return response.data;\n};\n\n/* Verify Routes */\n\nexport const getSessionVerify = async (): Promise<SessionVerifyResponse> => {\n const response =\n await appApiClient.get<SessionVerifyResponse>(\"/auth/verify\");\n\n return response.data;\n};\n\n/* User Routes */\n\nexport const getCurrentUser = async (): Promise<User> => {\n const response = await appApiClient.get<GetCurrentUserResponse>(\"/auth/me\");\n\n return response.data.data;\n};\n\n/* Whitelist Routes */\n\nexport const postCheckEmailInWhitelist = async (\n request: WhitelistCheckRequest,\n): Promise<WhitelistCheckResponse> => {\n const response = await appApiClient.post<WhitelistCheckResponse>(\n \"/auth/whitelist/email\",\n request,\n );\n\n return response.data;\n};\n\nexport const postCheckAddressInWhitelist = async (\n request: AddressWhitelistCheckRequest,\n): Promise<AddressWhitelistCheckResponse> => {\n const response = await appApiClient.post<AddressWhitelistCheckResponse>(\n \"/auth/whitelist/wallet-address\",\n request,\n );\n\n return response.data;\n};\n", "import { appApiClient } from \"../client\";\n\ntype BridgeCustomerType = \"individual\" | \"business\";\n\nexport interface GetBridgeCustomerResult {\n id: string;\n email?: string;\n status?: string;\n type?: BridgeCustomerType;\n hasAcceptedTermsOfService?: boolean;\n kycStatus?:\n | \"pending\"\n | \"approved\"\n | \"rejected\"\n | \"unknown\"\n | \"incomplete\"\n | \"awaiting_ubo\"\n | \"under_review\";\n endorsements?: Array<{\n name: string;\n status: string;\n requirements?: {\n complete: Array<string>;\n };\n }>;\n externalAccounts?: Array<{\n id: string;\n accountName: string;\n accountType: string;\n currency: string;\n bankName?: string;\n last_4?: string;\n active: boolean;\n }>;\n}\n\nexport interface GenerateBridgeKycLinksParams {\n email: string;\n type: BridgeCustomerType;\n fullName?: string;\n businessName?: string;\n}\n\nexport interface BridgeKycLink {\n kycLinkId: string;\n kycLink: string;\n kycStatus?:\n | \"pending\"\n | \"approved\"\n | \"rejected\"\n | \"unknown\"\n | \"incomplete\"\n | \"awaiting_ubo\"\n | \"under_review\";\n tosLink: string;\n tosStatus?: string;\n customerId: string;\n}\n\nexport interface CreateBridgePlaidLinkTokenParams {\n customerId: string;\n products?: string[];\n redirectUri?: string;\n}\n\nexport interface CreateBridgePlaidLinkTokenResult {\n linkToken: string;\n linkTokenExpiresAt?: string;\n callbackUrl?: string;\n}\n\nexport interface BridgeExchangePlaidPublicTokenParams {\n publicToken: string;\n linkToken: string;\n}\n\nexport interface BridgeExchangePlaidPublicTokenResult {\n success: boolean;\n message: string;\n}\n\nexport interface GetBridgeExternalAccountsResult {\n externalAccounts: Array<{\n id: string;\n accountName: string;\n accountType: string;\n currency: string;\n bankName?: string;\n last_4?: string;\n status: string;\n address?: {\n streetLine1?: string;\n streetLine2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n };\n }>;\n}\n\nexport interface GetBridgeLiquidationAddressesResult {\n liquidationAddresses: Array<{\n id: string;\n address: string;\n externalAccountId?: string;\n chain?: string;\n currency?: string;\n blockchainMemo?: string;\n }>;\n}\n\nexport interface CreateBridgeLiquidationAddressParams {\n customerId: string;\n chain: string;\n currency: string;\n externalAccountId?: string;\n externalAccountAddress?: {\n streetLine1?: string;\n streetLine2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n };\n destinationPaymentRail?: string;\n destinationCurrency?: string;\n destinationWireMessage?: string;\n destinationAddress?: string;\n customDeveloperFeePercent?: string;\n}\n\nexport interface CreateBridgeLiquidationAddressResult {\n id: string;\n address: string;\n chain?: string;\n currency?: string;\n blockchainMemo?: string;\n}\n\nexport interface CreateBridgeTransferParams {\n customerId: string;\n amount: string;\n sourceExternalAccountId: string;\n destinationWalletAddress: string;\n chainId: number;\n developerFee?: string;\n}\n\nexport interface CreateBridgeTransferResult {\n id: string;\n state: string;\n amount: string | null;\n source: {\n payment_rail: string;\n currency: string;\n external_account_id?: string;\n description?: string;\n };\n destination: {\n payment_rail: string;\n currency: string;\n to_address?: string;\n };\n source_deposit_instructions?: {\n payment_rail: string;\n amount: string;\n currency: string;\n deposit_message: string;\n bank_name: string;\n bank_address: string;\n bank_routing_number: string;\n bank_account_number: string;\n bank_beneficiary_name: string;\n bank_beneficiary_address: string;\n };\n receipt: {\n initial_amount: string;\n developer_fee: string;\n exchange_fee: string;\n subtotal_amount: string;\n gas_fee: string;\n final_amount: string;\n url: string;\n };\n created_at: string;\n updated_at: string;\n}\n\nexport const getBridgeCustomer = async (\n customerId: string,\n): Promise<GetBridgeCustomerResult> => {\n const response = await appApiClient.get<GetBridgeCustomerResult>(\n \"/bridge/customer\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const generateBridgeKycLinks = async (\n request: GenerateBridgeKycLinksParams,\n): Promise<BridgeKycLink> => {\n const response = await appApiClient.post<BridgeKycLink>(\n \"/bridge/kyc-links\",\n request,\n );\n\n return response.data;\n};\n\nexport const getBridgeKycLinkStatus = async (\n kycLinkId: string,\n): Promise<BridgeKycLink> => {\n const response = await appApiClient.get<BridgeKycLink>(\n \"/bridge/kyc-links/status\",\n { params: { kycLinkId } },\n );\n\n return response.data;\n};\n\nexport const createBridgePlaidLinkToken = async (\n request: CreateBridgePlaidLinkTokenParams,\n): Promise<CreateBridgePlaidLinkTokenResult> => {\n const response = await appApiClient.post<CreateBridgePlaidLinkTokenResult>(\n \"/bridge/plaid/link-token\",\n request,\n );\n\n return response.data;\n};\n\nexport const bridgeExchangePlaidPublicToken = async (\n request: BridgeExchangePlaidPublicTokenParams,\n): Promise<BridgeExchangePlaidPublicTokenResult> => {\n const response =\n await appApiClient.post<BridgeExchangePlaidPublicTokenResult>(\n \"/bridge/plaid/exchange-token\",\n request,\n );\n\n return response.data;\n};\n\nexport const getBridgeExternalAccounts = async (\n customerId: string,\n): Promise<GetBridgeExternalAccountsResult> => {\n const response = await appApiClient.get<GetBridgeExternalAccountsResult>(\n \"/bridge/external-accounts\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const getBridgeLiquidationAddresses = async (\n customerId: string,\n): Promise<GetBridgeLiquidationAddressesResult> => {\n const response = await appApiClient.get<GetBridgeLiquidationAddressesResult>(\n \"/bridge/liquidation-addresses\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const createBridgeLiquidationAddress = async (\n request: CreateBridgeLiquidationAddressParams,\n): Promise<CreateBridgeLiquidationAddressResult> => {\n const response =\n await appApiClient.post<CreateBridgeLiquidationAddressResult>(\n \"/bridge/liquidation-addresses\",\n request,\n );\n\n return response.data;\n};\n\nexport const createBridgeTransfer = async (\n request: CreateBridgeTransferParams,\n): Promise<CreateBridgeTransferResult> => {\n const response = await appApiClient.post<CreateBridgeTransferResult>(\n \"/bridge/transfer\",\n request,\n );\n\n return response.data;\n};\n\nexport interface UpdateBridgeExternalAccountAddressParams {\n customerId: string;\n externalAccountId: string;\n address: {\n streetLine1: string;\n streetLine2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n };\n}\n\nexport const updateBridgeExternalAccountAddress = async (\n customerId: string,\n externalAccountId: string,\n address: {\n streetLine1: string;\n streetLine2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n },\n): Promise<{ success: boolean }> => {\n const response = await appApiClient.put<{ success: boolean }>(\n \"/bridge/external-accounts/update-address\",\n {\n customerId,\n externalAccountId,\n address,\n },\n );\n\n return response.data;\n};\n", "import type {\n GetDelegateAddressRequest,\n GetDelegateAddressResponse,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const getDelegateAddress = async (\n request: GetDelegateAddressRequest,\n): Promise<GetDelegateAddressResponse> => {\n const response = await appApiClient.get<GetDelegateAddressResponse>(\n `/config/delegate-address/${request.chainId}`,\n );\n\n return response.data;\n};\n", "import type {\n InstructionActivateRequest,\n InstructionActivateResponse,\n InstructionBuild,\n InstructionBuildRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const buildInstruction = async (\n request: InstructionBuildRequest,\n): Promise<InstructionBuild> => {\n const response = await appApiClient.post<InstructionBuild>(\n \"/instruction/build\",\n request,\n );\n\n return response.data;\n};\n\nexport const activateInstruction = async (\n request: InstructionActivateRequest,\n): Promise<InstructionActivateResponse> => {\n const response = await appApiClient.post<InstructionActivateResponse>(\n \"/instruction/activate\",\n request,\n );\n\n return response.data;\n};\n", "import type {\n GetIntegrationRequest,\n IntegrationResponse,\n UpdateIntegrationRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const getIntegration = async (\n request: GetIntegrationRequest,\n): Promise<IntegrationResponse> => {\n const response = await appApiClient.post<IntegrationResponse>(\n \"/integration/get\",\n request,\n );\n\n return response.data;\n};\n\nexport const upsertIntegration = async (\n request: UpdateIntegrationRequest,\n): Promise<IntegrationResponse> => {\n const response = await appApiClient.put<IntegrationResponse>(\n \"/integration\",\n request,\n );\n\n return response.data;\n};\n", "import type {\n PaymentRequestBuildRequest,\n PaymentRequestBuildResponse,\n PaymentRequestNewRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const buildPaymentRequest = async (\n request: PaymentRequestBuildRequest,\n): Promise<PaymentRequestBuildResponse> => {\n const response = await appApiClient.post<PaymentRequestBuildResponse>(\n \"/payment/request/build\",\n request,\n );\n\n return response.data;\n};\n\nexport const newPaymentRequest = async (\n request: PaymentRequestNewRequest,\n): Promise<unknown> => {\n const response = await appApiClient.post<unknown>(\n \"/payment/request/new\",\n request,\n );\n\n return response.data;\n};\n"],
4
+ "sourcesContent": ["import axios from \"axios\";\n\nimport { isString, logger } from \"@otim/utils/helpers\";\n\nimport { APP_API_URL } from \"../env\";\n\nconst getApiUrl = (): string => {\n const appApiUrl = APP_API_URL;\n\n if (!isString(appApiUrl) || appApiUrl.trim() === \"\") {\n const errorMessage = \"APP API Client URL must be defined\";\n logger.error(errorMessage, { context: \"App Server Client\" });\n throw new Error(errorMessage);\n }\n\n return appApiUrl;\n};\n\nlet authTokenGetter: (() => Promise<string | undefined>) | null = null;\n\nexport const setAuthTokenGetter = (\n getter: () => Promise<string | undefined>,\n) => {\n authTokenGetter = getter;\n};\n\nexport const appApiClient = axios.create({\n baseURL: getApiUrl(),\n timeout: 30000,\n});\n\nappApiClient.interceptors.request.use(async (config) => {\n if (authTokenGetter) {\n const token = await authTokenGetter();\n if (token) {\n config.headers = config.headers ?? {};\n config.headers.Authorization = `Bearer ${token}`;\n }\n }\n return config;\n});\n", "/**\n * Environment configuration for @otim/utils\n *\n * These values are injected at build time via esbuild's define option.\n * See scripts/build.js for the injection logic.\n */\n\n/**\n * Build mode - determines production vs development behavior\n * Values: \"production\" | \"development\"\n */\nexport const BUILD_MODE = process.env.BUILD_MODE || \"development\";\n\n/**\n * App API URL - base URL for API requests\n * Defaults to production URL if not specified\n */\nexport const APP_API_URL =\n process.env.NEXT_PUBLIC_APP_API_URL || \"https://app.otim.com/api\";\n", "import { BUILD_MODE } from \"../env\";\n\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\ninterface LoggerOptions {\n context?: string;\n data?: unknown;\n}\n\ninterface ErrorLogOptions {\n context?: string;\n operation?: string;\n metadata?: Record<string, unknown>;\n}\n\nclass Logger {\n private isDevelopment = BUILD_MODE === \"development\";\n\n debug(message: string, options?: LoggerOptions): void {\n if (this.isDevelopment) {\n this.log(\"debug\", message, options);\n }\n }\n\n info(message: string, options?: LoggerOptions): void {\n this.log(\"info\", message, options);\n }\n\n warn(message: string, options?: LoggerOptions): void {\n this.log(\"warn\", message, options);\n }\n\n error(message: string, options?: LoggerOptions): void {\n this.log(\"error\", message, options);\n }\n\n /**\n * Log errors with context - useful for non-API errors\n * For API errors, use the existing getErrorMessage from @otim/utils/api\n */\n logError(error: unknown, options: ErrorLogOptions = {}): void {\n const { context, operation, metadata } = options;\n const prefix = this.buildPrefix(context, operation);\n\n // Extract basic error message\n let message = \"Unknown error\";\n if (error instanceof Error) {\n message = error.message;\n } else if (typeof error === \"string\") {\n message = error;\n } else if (error && typeof error === \"object\" && \"message\" in error) {\n message = String((error as { message: unknown }).message);\n }\n\n console.error(prefix ? `${prefix} ${message}` : message);\n\n // Log metadata if provided\n if (metadata && Object.keys(metadata).length > 0) {\n console.error(\"Context:\", metadata);\n }\n\n // Log the full error object for debugging\n if (error instanceof Error && error.stack) {\n console.error(\"Stack:\", error.stack);\n } else {\n console.error(\"Error details:\", error);\n }\n }\n\n private buildPrefix(context?: string, operation?: string): string {\n const parts: string[] = [];\n if (context) parts.push(`[${context}]`);\n if (operation) parts.push(`[${operation}]`);\n return parts.join(\" \");\n }\n\n private log(level: LogLevel, message: string, options?: LoggerOptions): void {\n const prefix = options?.context ? `[${options.context}]` : \"\";\n const fullMessage = `${prefix} ${message}`.trim();\n\n switch (level) {\n case \"debug\":\n case \"info\":\n console.log(fullMessage);\n break;\n case \"warn\":\n console.warn(fullMessage);\n break;\n case \"error\":\n console.error(fullMessage);\n break;\n }\n\n if (options?.data) {\n console.dir(options.data, { depth: null });\n }\n }\n}\n\nexport const logger = new Logger();\n", "import type { z, ZodObject } from \"zod\";\n\nexport type Nullable<T> = T | null;\nexport type Nullish<T> = T | null | undefined;\nexport type Optional<T> = T | undefined;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- any is ok\nexport type Any = any;\n\nexport type NumberOrString = number | string;\n\nexport type OverrideProps<T, TOverridden> = Omit<T, keyof TOverridden> &\n TOverridden;\n\nexport type NonEmptyArray<T> = [T, ...T[]];\n\nexport interface DataRecord {\n [value: string]: Nullish<DataRecord | string | number | boolean>;\n}\n\nexport interface Input<T> {\n input: T;\n}\n\nexport type ZodCustom<Values extends object> = ZodObject<{\n [P in keyof Values]: z.ZodType<Values[P]>;\n}>;\n\nexport const isError = (value: unknown): value is Error =>\n value instanceof Error;\n\nexport const isFunction = (\n value: unknown,\n): value is (...args: unknown[]) => unknown => typeof value === \"function\";\n\nexport const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nexport const isNumber = (value: unknown): value is number =>\n typeof value === \"number\";\n\nexport const isString = (value: unknown): value is string =>\n typeof value === \"string\";\n\nexport const isUndefined = (value: unknown): value is undefined =>\n typeof value === \"undefined\";\n\nexport const isBoolean = (value: unknown): value is boolean =>\n typeof value === \"boolean\";\n\n/**\n * Safely extracts a string from an unknown value.\n * @param value - The value to extract from\n * @param fallback - Optional fallback value if extraction fails\n * @returns The extracted string or fallback/undefined\n */\nexport const extractString = (\n value: unknown,\n fallback?: string,\n): Optional<string> => {\n return isString(value) ? value : fallback;\n};\n\n/**\n * Safely extracts a number from an unknown value.\n * Handles both number and string representations.\n * @param value - The value to extract from\n * @returns The extracted number or undefined\n */\nexport const extractNumber = (value: unknown): Optional<number> => {\n if (isNumber(value)) {\n return value;\n }\n\n if (isString(value)) {\n const parsed = Number.parseFloat(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n return undefined;\n};\n", "import type {\n DelegationCreateRequest,\n DelegationCreateResponse,\n DelegationStatusRequest,\n DelegationStatusResponse,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\n/* Delegation Routes */\n\nexport const createDelegation = async (\n request: DelegationCreateRequest,\n): Promise<DelegationCreateResponse> => {\n const response = await appApiClient.post<DelegationCreateResponse>(\n \"/account/delegation\",\n request,\n );\n\n return response.data;\n};\n\nexport const getDelegationStatus = async (\n request: DelegationStatusRequest,\n): Promise<DelegationStatusResponse> => {\n const response = await appApiClient.get<DelegationStatusResponse>(\n \"/account/delegation/status\",\n { params: request },\n );\n\n return response.data;\n};\n", "import type {\n AddressWhitelistCheckRequest,\n AddressWhitelistCheckResponse,\n AuthLoginRequest,\n AuthLoginResponse,\n ChainIdResponse,\n ChainSuccessResponse,\n GetCurrentUserResponse,\n SessionTokenRequest,\n SessionTokenResponse,\n SessionVerifyResponse,\n SetChainIdRequest,\n TurnkeyLoginRequest,\n TurnkeyLoginResponse,\n TurnkeyVerificationRequest,\n TurnkeyVerificationResponse,\n WhitelistCheckRequest,\n WhitelistCheckResponse,\n} from \"@otim/utils/api\";\nimport type { User } from \"@otim/utils/schemas\";\n\nimport { appApiClient } from \"../client\";\n\n/* Login Routes */\n\nexport const postLogin = async (\n request: AuthLoginRequest,\n): Promise<AuthLoginResponse> => {\n const response = await appApiClient.post<AuthLoginResponse>(\n \"/auth/login\",\n request,\n );\n\n return response.data;\n};\n\n/* Turnkey Routes */\n\nexport const turnkeyVerification = async (\n request: TurnkeyVerificationRequest,\n): Promise<TurnkeyVerificationResponse> => {\n const response = await appApiClient.post<TurnkeyVerificationResponse>(\n \"/auth/turnkey-verification\",\n request,\n );\n\n return response.data;\n};\n\nexport const turnkeyLogin = async (\n request: TurnkeyLoginRequest,\n): Promise<TurnkeyLoginResponse> => {\n const response = await appApiClient.post<TurnkeyLoginResponse>(\n \"/auth/turnkey-login\",\n request,\n );\n\n return response.data;\n};\n\n/* Client API Routes */\n\nexport async function getNonce(): Promise<string> {\n const response = await appApiClient.get<{ nonce: string }>(\"/auth/nonce\");\n\n return response.data.nonce;\n}\n\nexport async function verifyAuthentication(params: {\n message: string;\n signature: string;\n}): Promise<{\n authorization: string;\n user: User;\n}> {\n const response = await appApiClient.post<{\n authorization: string;\n user: User;\n }>(\"/auth/authenticate\", params);\n\n return response.data;\n}\n\nexport async function setSessionToken(\n sessionToken: string,\n): Promise<{ success: boolean }> {\n const response = await appApiClient.post<{ success: boolean }>(\n \"/auth/session\",\n { sessionToken },\n );\n\n return response.data;\n}\n\nexport async function destroySessionToken(): Promise<{ success: boolean }> {\n const response = await appApiClient.delete<{ success: boolean }>(\n \"/auth/session\",\n );\n\n return response.data;\n}\n\n/* Chain Routes */\n\nexport const getChainId = async (): Promise<ChainIdResponse> => {\n const response = await appApiClient.get<ChainIdResponse>(\"/auth/chain\");\n\n return response.data;\n};\n\nexport const postChainId = async (\n request: SetChainIdRequest,\n): Promise<ChainSuccessResponse> => {\n const response = await appApiClient.post<ChainSuccessResponse>(\n \"/auth/chain\",\n request,\n );\n\n return response.data;\n};\n\nexport const deleteChainId = async (): Promise<ChainSuccessResponse> => {\n const response =\n await appApiClient.delete<ChainSuccessResponse>(\"/auth/chain\");\n\n return response.data;\n};\n\n/* Session Routes */\n\nexport const postSessionToken = async (\n request: SessionTokenRequest,\n): Promise<SessionTokenResponse> => {\n const response = await appApiClient.post<SessionTokenResponse>(\n \"/auth/session\",\n request,\n );\n\n return response.data;\n};\n\n/* Verify Routes */\n\nexport const getSessionVerify = async (): Promise<SessionVerifyResponse> => {\n const response =\n await appApiClient.get<SessionVerifyResponse>(\"/auth/verify\");\n\n return response.data;\n};\n\n/* User Routes */\n\nexport const getCurrentUser = async (): Promise<User> => {\n const response = await appApiClient.get<GetCurrentUserResponse>(\"/auth/me\");\n\n return response.data.data;\n};\n\n/* Whitelist Routes */\n\nexport const postCheckEmailInWhitelist = async (\n request: WhitelistCheckRequest,\n): Promise<WhitelistCheckResponse> => {\n const response = await appApiClient.post<WhitelistCheckResponse>(\n \"/auth/whitelist/email\",\n request,\n );\n\n return response.data;\n};\n\nexport const postCheckAddressInWhitelist = async (\n request: AddressWhitelistCheckRequest,\n): Promise<AddressWhitelistCheckResponse> => {\n const response = await appApiClient.post<AddressWhitelistCheckResponse>(\n \"/auth/whitelist/wallet-address\",\n request,\n );\n\n return response.data;\n};\n", "import { appApiClient } from \"../client\";\n\ntype BridgeCustomerType = \"individual\" | \"business\";\n\nexport interface GetBridgeCustomerResult {\n id: string;\n email?: string;\n status?: string;\n type?: BridgeCustomerType;\n hasAcceptedTermsOfService?: boolean;\n kycStatus?:\n | \"pending\"\n | \"approved\"\n | \"rejected\"\n | \"unknown\"\n | \"incomplete\"\n | \"awaiting_ubo\"\n | \"under_review\";\n endorsements?: Array<{\n name: string;\n status: string;\n requirements?: {\n complete: Array<string>;\n };\n }>;\n externalAccounts?: Array<{\n id: string;\n accountName: string;\n accountType: string;\n currency: string;\n bankName?: string;\n last_4?: string;\n active: boolean;\n }>;\n}\n\nexport interface GenerateBridgeKycLinksParams {\n email: string;\n type: BridgeCustomerType;\n fullName?: string;\n businessName?: string;\n}\n\nexport interface BridgeKycLink {\n kycLinkId: string;\n kycLink: string;\n kycStatus?:\n | \"pending\"\n | \"approved\"\n | \"rejected\"\n | \"unknown\"\n | \"incomplete\"\n | \"awaiting_ubo\"\n | \"under_review\";\n tosLink: string;\n tosStatus?: string;\n customerId: string;\n}\n\nexport interface CreateBridgePlaidLinkTokenParams {\n customerId: string;\n products?: string[];\n redirectUri?: string;\n}\n\nexport interface CreateBridgePlaidLinkTokenResult {\n linkToken: string;\n linkTokenExpiresAt?: string;\n callbackUrl?: string;\n}\n\nexport interface BridgeExchangePlaidPublicTokenParams {\n publicToken: string;\n linkToken: string;\n}\n\nexport interface BridgeExchangePlaidPublicTokenResult {\n success: boolean;\n message: string;\n}\n\nexport interface GetBridgeExternalAccountsResult {\n externalAccounts: Array<{\n id: string;\n accountName: string;\n accountType: string;\n currency: string;\n bankName?: string;\n last_4?: string;\n status: string;\n address?: {\n streetLine1?: string;\n streetLine2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n };\n }>;\n}\n\nexport interface GetBridgeLiquidationAddressesResult {\n liquidationAddresses: Array<{\n id: string;\n address: string;\n externalAccountId?: string;\n chain?: string;\n currency?: string;\n blockchainMemo?: string;\n }>;\n}\n\nexport interface CreateBridgeLiquidationAddressParams {\n customerId: string;\n chain: string;\n currency: string;\n externalAccountId?: string;\n externalAccountAddress?: {\n streetLine1?: string;\n streetLine2?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n country?: string;\n };\n destinationPaymentRail?: string;\n destinationCurrency?: string;\n destinationWireMessage?: string;\n destinationAddress?: string;\n customDeveloperFeePercent?: string;\n}\n\nexport interface CreateBridgeLiquidationAddressResult {\n id: string;\n address: string;\n chain?: string;\n currency?: string;\n blockchainMemo?: string;\n}\n\nexport interface CreateBridgeTransferParams {\n customerId: string;\n amount: string;\n sourceExternalAccountId: string;\n destinationWalletAddress: string;\n chainId: number;\n developerFee?: string;\n}\n\nexport interface CreateBridgeTransferResult {\n id: string;\n state: string;\n amount: string | null;\n source: {\n payment_rail: string;\n currency: string;\n external_account_id?: string;\n description?: string;\n };\n destination: {\n payment_rail: string;\n currency: string;\n to_address?: string;\n };\n source_deposit_instructions?: {\n payment_rail: string;\n amount: string;\n currency: string;\n deposit_message: string;\n bank_name: string;\n bank_address: string;\n bank_routing_number: string;\n bank_account_number: string;\n bank_beneficiary_name: string;\n bank_beneficiary_address: string;\n };\n receipt: {\n initial_amount: string;\n developer_fee: string;\n exchange_fee: string;\n subtotal_amount: string;\n gas_fee: string;\n final_amount: string;\n url: string;\n };\n created_at: string;\n updated_at: string;\n}\n\nexport const getBridgeCustomer = async (\n customerId: string,\n): Promise<GetBridgeCustomerResult> => {\n const response = await appApiClient.get<GetBridgeCustomerResult>(\n \"/bridge/customer\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const generateBridgeKycLinks = async (\n request: GenerateBridgeKycLinksParams,\n): Promise<BridgeKycLink> => {\n const response = await appApiClient.post<BridgeKycLink>(\n \"/bridge/kyc-links\",\n request,\n );\n\n return response.data;\n};\n\nexport const getBridgeKycLinkStatus = async (\n kycLinkId: string,\n): Promise<BridgeKycLink> => {\n const response = await appApiClient.get<BridgeKycLink>(\n \"/bridge/kyc-links/status\",\n { params: { kycLinkId } },\n );\n\n return response.data;\n};\n\nexport const createBridgePlaidLinkToken = async (\n request: CreateBridgePlaidLinkTokenParams,\n): Promise<CreateBridgePlaidLinkTokenResult> => {\n const response = await appApiClient.post<CreateBridgePlaidLinkTokenResult>(\n \"/bridge/plaid/link-token\",\n request,\n );\n\n return response.data;\n};\n\nexport const bridgeExchangePlaidPublicToken = async (\n request: BridgeExchangePlaidPublicTokenParams,\n): Promise<BridgeExchangePlaidPublicTokenResult> => {\n const response =\n await appApiClient.post<BridgeExchangePlaidPublicTokenResult>(\n \"/bridge/plaid/exchange-token\",\n request,\n );\n\n return response.data;\n};\n\nexport const getBridgeExternalAccounts = async (\n customerId: string,\n): Promise<GetBridgeExternalAccountsResult> => {\n const response = await appApiClient.get<GetBridgeExternalAccountsResult>(\n \"/bridge/external-accounts\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const getBridgeLiquidationAddresses = async (\n customerId: string,\n): Promise<GetBridgeLiquidationAddressesResult> => {\n const response = await appApiClient.get<GetBridgeLiquidationAddressesResult>(\n \"/bridge/liquidation-addresses\",\n { params: { customerId } },\n );\n\n return response.data;\n};\n\nexport const createBridgeLiquidationAddress = async (\n request: CreateBridgeLiquidationAddressParams,\n): Promise<CreateBridgeLiquidationAddressResult> => {\n const response =\n await appApiClient.post<CreateBridgeLiquidationAddressResult>(\n \"/bridge/liquidation-addresses\",\n request,\n );\n\n return response.data;\n};\n\nexport const createBridgeTransfer = async (\n request: CreateBridgeTransferParams,\n): Promise<CreateBridgeTransferResult> => {\n const response = await appApiClient.post<CreateBridgeTransferResult>(\n \"/bridge/transfer\",\n request,\n );\n\n return response.data;\n};\n\nexport interface UpdateBridgeExternalAccountAddressParams {\n customerId: string;\n externalAccountId: string;\n address: {\n streetLine1: string;\n streetLine2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n };\n}\n\nexport const updateBridgeExternalAccountAddress = async (\n customerId: string,\n externalAccountId: string,\n address: {\n streetLine1: string;\n streetLine2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n },\n): Promise<{ success: boolean }> => {\n const response = await appApiClient.put<{ success: boolean }>(\n \"/bridge/external-accounts/update-address\",\n {\n customerId,\n externalAccountId,\n address,\n },\n );\n\n return response.data;\n};\n", "import type {\n GetDelegateAddressRequest,\n GetDelegateAddressResponse,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const getDelegateAddress = async (\n request: GetDelegateAddressRequest,\n): Promise<GetDelegateAddressResponse> => {\n const response = await appApiClient.get<GetDelegateAddressResponse>(\n `/config/delegate-address/${request.chainId}`,\n );\n\n return response.data;\n};\n", "import type {\n InstructionActivateRequest,\n InstructionActivateResponse,\n InstructionBuild,\n InstructionBuildRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const buildInstruction = async (\n request: InstructionBuildRequest,\n): Promise<InstructionBuild> => {\n const response = await appApiClient.post<InstructionBuild>(\n \"/instruction/build\",\n request,\n );\n\n return response.data;\n};\n\nexport const activateInstruction = async (\n request: InstructionActivateRequest,\n): Promise<InstructionActivateResponse> => {\n const response = await appApiClient.post<InstructionActivateResponse>(\n \"/instruction/activate\",\n request,\n );\n\n return response.data;\n};\n", "import type {\n GetIntegrationRequest,\n IntegrationResponse,\n UpdateIntegrationRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const getIntegration = async (\n request: GetIntegrationRequest,\n): Promise<IntegrationResponse> => {\n const response = await appApiClient.post<IntegrationResponse>(\n \"/integration/get\",\n request,\n );\n\n return response.data;\n};\n\nexport const upsertIntegration = async (\n request: UpdateIntegrationRequest,\n): Promise<IntegrationResponse> => {\n const response = await appApiClient.put<IntegrationResponse>(\n \"/integration\",\n request,\n );\n\n return response.data;\n};\n", "import type {\n PaymentRequestBuildRequest,\n PaymentRequestBuildResponse,\n PaymentRequestNewRequest,\n} from \"@otim/utils/api\";\n\nimport { appApiClient } from \"../client\";\n\nexport const buildPaymentRequest = async (\n request: PaymentRequestBuildRequest,\n): Promise<PaymentRequestBuildResponse> => {\n const response = await appApiClient.post<PaymentRequestBuildResponse>(\n \"/orchestration/build\",\n request,\n );\n\n return response.data;\n};\n\nexport const newPaymentRequest = async (\n request: PaymentRequestNewRequest,\n): Promise<unknown> => {\n const response = await appApiClient.post<unknown>(\n \"/orchestration/new\",\n request,\n );\n\n return response.data;\n};\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@otim/utils",
3
- "version": "0.0.2-development.0",
3
+ "version": "0.0.3",
4
4
  "description": "Shared utilities for Otim apps and packages",
5
5
  "keywords": [
6
6
  "otim",
@@ -190,7 +190,7 @@
190
190
  "abitype": "^1.1.2",
191
191
  "axios": "^1.13.2",
192
192
  "viem": "^2.39.3",
193
- "wagmi": "^3.0.1",
193
+ "wagmi": "^2.19.5",
194
194
  "zod": "^4.1.12"
195
195
  },
196
196
  "devDependencies": {