@otim/sdk-core 0.0.19 → 0.0.20

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 (35) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/account/index.d.cts +1 -1
  3. package/dist/account/index.d.mts +1 -1
  4. package/dist/authorization-BnF84ABo.d.cts.map +1 -1
  5. package/dist/clients/index.cjs +1 -1
  6. package/dist/clients/index.d.cts +3 -3
  7. package/dist/clients/index.d.mts +3 -3
  8. package/dist/clients/index.mjs +1 -1
  9. package/dist/{clients-Dkt56jVn.mjs → clients-BpUkaSb-.mjs} +3 -3
  10. package/dist/clients-BpUkaSb-.mjs.map +1 -0
  11. package/dist/{clients-CAKAVAKd.cjs → clients-jegPyhCH.cjs} +2 -2
  12. package/dist/clients-jegPyhCH.cjs.map +1 -0
  13. package/dist/{index-D6ncjdSF.d.mts → index-BRCDIv2-.d.mts} +2 -2
  14. package/dist/{index-D6ncjdSF.d.mts.map → index-BRCDIv2-.d.mts.map} +1 -1
  15. package/dist/{index-Dclw8n-r.d.cts → index-BmrWgMvx.d.cts} +2 -2
  16. package/dist/{index-CT89rCH1.d.mts.map → index-BmrWgMvx.d.cts.map} +1 -1
  17. package/dist/{index-CT89rCH1.d.mts → index-nalKWiJB.d.mts} +2 -2
  18. package/dist/{index-Dclw8n-r.d.cts.map → index-nalKWiJB.d.mts.map} +1 -1
  19. package/dist/{index-_2bU9FSx.d.cts → index-tt-bw0Dh.d.cts} +2 -2
  20. package/dist/{index-_2bU9FSx.d.cts.map → index-tt-bw0Dh.d.cts.map} +1 -1
  21. package/dist/index.cjs +1 -1
  22. package/dist/index.d.cts +3 -3
  23. package/dist/index.d.mts +3 -3
  24. package/dist/index.mjs +1 -1
  25. package/dist/{rpc-C-51kawS.d.cts → rpc-B2EqDraY.d.cts} +13 -3
  26. package/dist/rpc-B2EqDraY.d.cts.map +1 -0
  27. package/dist/{rpc-BWDaWzVn.d.mts → rpc-CMGNtfHM.d.mts} +13 -3
  28. package/dist/rpc-CMGNtfHM.d.mts.map +1 -0
  29. package/dist/signing/index.d.cts +2 -2
  30. package/dist/signing/index.d.mts +2 -2
  31. package/package.json +4 -4
  32. package/dist/clients-CAKAVAKd.cjs.map +0 -1
  33. package/dist/clients-Dkt56jVn.mjs.map +0 -1
  34. package/dist/rpc-BWDaWzVn.d.mts.map +0 -1
  35. package/dist/rpc-C-51kawS.d.cts.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import "../abi-C34qVuOe.cjs";
2
- import "../rpc-C-51kawS.cjs";
2
+ import "../rpc-B2EqDraY.cjs";
3
3
  import "../authorization-BnF84ABo.cjs";
4
- import { _ as Signature, a as InstructionDigestComputer, b as SignerConfig, c as ServerWalletSigningService, d as ActivityPollingConfig, f as ApiKeyClientActivationParameters, g as ServerWalletActivationParameters, h as ISigningService, i as createRlpEncodedAuthorization, l as ApiKeyClientSigningService, m as FormattedSignature, n as FormattedInstruction, o as AuthorizationDigestComputer, p as DigestComputationResult, r as SignatureFormatter, s as UnifiedPaymentSigner, t as EthereumWalletAdapter, u as ActivationResult, v as SignatureResult, y as SignedInstruction } from "../index-_2bU9FSx.cjs";
4
+ import { _ as Signature, a as InstructionDigestComputer, b as SignerConfig, c as ServerWalletSigningService, d as ActivityPollingConfig, f as ApiKeyClientActivationParameters, g as ServerWalletActivationParameters, h as ISigningService, i as createRlpEncodedAuthorization, l as ApiKeyClientSigningService, m as FormattedSignature, n as FormattedInstruction, o as AuthorizationDigestComputer, p as DigestComputationResult, r as SignatureFormatter, s as UnifiedPaymentSigner, t as EthereumWalletAdapter, u as ActivationResult, v as SignatureResult, y as SignedInstruction } from "../index-tt-bw0Dh.cjs";
5
5
  export { ActivationResult, ActivityPollingConfig, ApiKeyClientActivationParameters, ApiKeyClientSigningService, AuthorizationDigestComputer, DigestComputationResult, EthereumWalletAdapter, FormattedInstruction, FormattedSignature, ISigningService, InstructionDigestComputer, ServerWalletActivationParameters, ServerWalletSigningService, Signature, SignatureFormatter, SignatureResult, SignedInstruction, SignerConfig, UnifiedPaymentSigner, createRlpEncodedAuthorization };
@@ -1,5 +1,5 @@
1
1
  import "../abi-DJLWbdqc.mjs";
2
- import "../rpc-BWDaWzVn.mjs";
2
+ import "../rpc-CMGNtfHM.mjs";
3
3
  import "../authorization-C5pDhI13.mjs";
4
- import { _ as Signature, a as InstructionDigestComputer, b as SignerConfig, c as ServerWalletSigningService, d as ActivityPollingConfig, f as ApiKeyClientActivationParameters, g as ServerWalletActivationParameters, h as ISigningService, i as createRlpEncodedAuthorization, l as ApiKeyClientSigningService, m as FormattedSignature, n as FormattedInstruction, o as AuthorizationDigestComputer, p as DigestComputationResult, r as SignatureFormatter, s as UnifiedPaymentSigner, t as EthereumWalletAdapter, u as ActivationResult, v as SignatureResult, y as SignedInstruction } from "../index-D6ncjdSF.mjs";
4
+ import { _ as Signature, a as InstructionDigestComputer, b as SignerConfig, c as ServerWalletSigningService, d as ActivityPollingConfig, f as ApiKeyClientActivationParameters, g as ServerWalletActivationParameters, h as ISigningService, i as createRlpEncodedAuthorization, l as ApiKeyClientSigningService, m as FormattedSignature, n as FormattedInstruction, o as AuthorizationDigestComputer, p as DigestComputationResult, r as SignatureFormatter, s as UnifiedPaymentSigner, t as EthereumWalletAdapter, u as ActivationResult, v as SignatureResult, y as SignedInstruction } from "../index-BRCDIv2-.mjs";
5
5
  export { ActivationResult, ActivityPollingConfig, ApiKeyClientActivationParameters, ApiKeyClientSigningService, AuthorizationDigestComputer, DigestComputationResult, EthereumWalletAdapter, FormattedInstruction, FormattedSignature, ISigningService, InstructionDigestComputer, ServerWalletActivationParameters, ServerWalletSigningService, Signature, SignatureFormatter, SignatureResult, SignedInstruction, SignerConfig, UnifiedPaymentSigner, createRlpEncodedAuthorization };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@otim/sdk-core",
3
- "version": "0.0.19",
3
+ "version": "0.0.20",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -118,11 +118,11 @@
118
118
  "typescript-eslint": "^8.47.0",
119
119
  "vitest": "^4.0.10",
120
120
  "@testing-library/user-event": "^14.6.1",
121
- "@otim/eslint-config": "0.0.1",
122
- "@otim/typescript-config": "0.0.0"
121
+ "@otim/typescript-config": "0.0.0",
122
+ "@otim/eslint-config": "0.0.1"
123
123
  },
124
124
  "dependencies": {
125
- "@otim/utils": "0.0.12",
125
+ "@otim/utils": "0.0.13",
126
126
  "@t3-oss/env-core": "^0.13.8",
127
127
  "@turnkey/api-key-stamper": "^0.5.0",
128
128
  "@turnkey/core": "^1.7.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"clients-CAKAVAKd.cjs","names":["apiClient: APIClient","apiClient: APIClient","account: OtimAccount","context: OtimClientContext","apiClient: APIClient","apiClient: APIClient","isApiAccountConfig","UnifiedPaymentSigner","ApiKeyClientSigningService","ServerWalletSigningService","apiClient: APIClient","account: OtimAccount","context: OtimServerClientContext","hexStringSchema","getDefaultDueDate","buildMetadataFromParams","convertAcceptedTokensToStringKeys","result: Record<string, Address[]>","getDefaultDueDate","buildMetadataFromParams","getDefaultDueDate","buildMetadataFromParams","result: Record<string, Address[]>"],"sources":["../src/clients/activity.ts","../src/clients/auth.ts","../src/clients/config.ts","../src/clients/delegation.ts","../src/clients/helpers/settlement-signer.ts","../src/clients/orchestration.ts","../src/clients/helpers/prepare-settlement.ts","../src/clients/helpers/prepare-vault-withdraw-settlement.ts","../src/clients/helpers/prepare-vault-deposit-settlement.ts","../src/clients/helpers/prepare-vault-migrate-settlement.ts"],"sourcesContent":["import type {\n APIClient,\n GetInstructionActivityRequest,\n GetInstructionActivityResponse,\n} from \"@otim/utils/api\";\n\nexport class ActivityClient {\n constructor(private readonly apiClient: APIClient) {}\n\n async getInstructionActivity(\n request: GetInstructionActivityRequest,\n ): Promise<GetInstructionActivityResponse> {\n const response =\n await this.apiClient.activity.getInstructionActivity(request);\n\n return response.data;\n }\n}\n","import type { OtimAccount } from \"@otim/sdk-core/account\";\nimport type { OtimClientContext } from \"@otim/sdk-core/context\";\nimport type { APIClient, AuthLoginResponse, MeResponse } from \"@otim/utils/api\";\nimport type { Address } from \"viem\";\n\nimport { parseSignatureToVRS } from \"@otim/utils/helpers\";\n\nimport { createLoginSiweMessage } from \"@otim/sdk-core/config\";\nimport { assertRequiresAuth } from \"@otim/sdk-core/context\";\n\nexport interface LoginOptions {\n address: Address;\n}\n\nexport class AuthClient {\n constructor(\n private readonly apiClient: APIClient,\n private readonly account: OtimAccount,\n private readonly context: OtimClientContext,\n ) {}\n\n async login({ address }: LoginOptions): Promise<AuthLoginResponse> {\n assertRequiresAuth(this.context);\n\n const message = createLoginSiweMessage(address, Date.now().toString());\n const signature = await this.account.signMessage({ message });\n const vrsParsedSignature = parseSignatureToVRS(signature);\n\n const response = await this.apiClient.auth.login({\n siwe: message,\n signature: vrsParsedSignature,\n });\n\n return response.data;\n }\n\n async getCurrentUser(): Promise<MeResponse> {\n const response = await this.apiClient.auth.me();\n return response.data;\n }\n}\n","import type {\n APIClient,\n GetMaxPriorityFeePerGasEstimateRequest,\n GetMaxPriorityFeePerGasEstimateResponse,\n} from \"@otim/utils/api\";\n\nexport class ConfigClient {\n constructor(private readonly apiClient: APIClient) {}\n\n async getMaxPriorityFeeEstimate({\n chainId,\n }: GetMaxPriorityFeePerGasEstimateRequest): Promise<GetMaxPriorityFeePerGasEstimateResponse> {\n const response =\n await this.apiClient.config.getMaxPriorityFeePerGasEstimate({ chainId });\n\n return response.data;\n }\n}\n","import type {\n APIClient,\n DelegationCreateRequest,\n DelegationStatusRequest,\n DelegationStatusResponse,\n GetDelegateAddressRequest,\n GetDelegateAddressResponse,\n} from \"@otim/utils/api\";\n\nexport class DelegationClient {\n constructor(private readonly apiClient: APIClient) {}\n\n async getDelegateAddress({\n chainId,\n }: GetDelegateAddressRequest): Promise<GetDelegateAddressResponse> {\n const response = await this.apiClient.config.getDelegateAddress({\n chainId,\n });\n\n return response.data;\n }\n\n async getDelegationStatus(\n options: DelegationStatusRequest,\n ): Promise<DelegationStatusResponse> {\n const response = await this.apiClient.account.getDelegationStatus({\n address: options.address,\n chainId: options.chainId,\n });\n\n return response.data;\n }\n\n async createDelegation(\n delegationRequest: DelegationCreateRequest,\n ): Promise<void> {\n await this.apiClient.account.createDelegation(delegationRequest);\n }\n}\n","import type { OtimServerClientContext } from \"../../context\";\nimport type { PaymentResponseWithActionNames } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\nimport type { PublicClient } from \"viem\";\n\nimport { createWalletClient, http } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nimport { isApiAccountConfig } from \"../../account\";\nimport {\n ApiKeyClientSigningService,\n ServerWalletSigningService,\n UnifiedPaymentSigner,\n} from \"../../signing\";\n\nexport interface CreateSettlementSignerParams {\n context: OtimServerClientContext;\n buildResponse: PaymentResponseWithActionNames;\n publicClient: PublicClient;\n delegateAddressMap: Map<number, Address>;\n}\n\ntype CreateSettlementSignerResult = Awaited<\n ReturnType<UnifiedPaymentSigner[\"signAll\"]>\n>;\n\nexport async function createSettlementSigner(\n params: CreateSettlementSignerParams,\n): Promise<CreateSettlementSignerResult> {\n const { context, buildResponse, publicClient, delegateAddressMap } = params;\n\n if (isApiAccountConfig(context.config)) {\n const signingService = new ApiKeyClientSigningService(\n context.config.publicKey,\n context.config.privateKey,\n );\n\n const signer = new UnifiedPaymentSigner({\n buildResponse,\n signingService,\n publicClient,\n delegateAddressMap,\n });\n\n return signer.signAll();\n }\n\n const account = privateKeyToAccount(context.config.privateKey);\n const walletClient = createWalletClient({\n account,\n transport: http(),\n });\n\n const signingService =\n ServerWalletSigningService.fromViemWallet(walletClient);\n\n const signer = new UnifiedPaymentSigner({\n buildResponse,\n signingService,\n publicClient,\n delegateAddressMap,\n });\n\n return signer.signAll();\n}\n","import type { OtimAccount } from \"@otim/sdk-core/account\";\nimport type { OtimServerClientContext } from \"@otim/sdk-core/context\";\nimport type {\n APIClient,\n BuildSettlementRequest,\n GetPaymentRequestsRequest,\n GetPaymentRequestsResponse,\n PaginatedServiceResponse,\n PaymentRequestBuildRequest,\n PaymentRequestDetailsRequest,\n PaymentRequestDetailsResponse,\n ServiceResponse,\n} from \"@otim/utils/api\";\nimport type { PaymentResponseWithActionNames } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\nimport type { Chain, PublicClient } from \"viem\";\n\nimport { getChainById } from \"@otim/utils/chains\";\nimport {\n addActionNamesToInstructions,\n extractActionNamesMap,\n} from \"@otim/utils/payments\";\nimport { hexStringSchema } from \"@otim/utils/schemas\";\nimport { createPublicClient, http } from \"viem\";\n\nimport { assertServerContext } from \"@otim/sdk-core/context\";\n\nimport { createSettlementSigner } from \"./helpers/settlement-signer\";\n\nexport interface CreateSettlementResponse {\n requestId: string;\n ephemeralWalletAddress: Address;\n}\n\nexport interface CreateRawConfig {\n settlementChainId: number;\n activate?: boolean;\n}\n\ntype SettlementInstruction =\n PaymentResponseWithActionNames[\"completionInstructions\"][number];\n\n/**\n * Extracts the settlement chain ID from a BuildSettlementRequest.\n * Handles all settlement types: regular, vault deposit, and vault withdraw.\n */\nfunction extractSettlementChainId(request: BuildSettlementRequest): number {\n const { params } = request;\n\n if (\"settlement\" in params) {\n return params.settlement.settlementChainId;\n }\n\n if (\"settlementVaultDeposit\" in params) {\n return params.settlementVaultDeposit.vaultChainId;\n }\n\n if (\"vaultWithdrawSettlement\" in params) {\n return params.vaultWithdrawSettlement.settlementChainId;\n }\n\n if (\"vaultMigrate\" in params) {\n return params.vaultMigrate.destVaultChainId;\n }\n\n throw new Error(\"Unknown settlement type\");\n}\n\nexport class OrchestrationClient {\n constructor(\n private readonly apiClient: APIClient,\n private readonly account: OtimAccount,\n private readonly context: OtimServerClientContext,\n ) {}\n\n async create(\n settlementRequest: BuildSettlementRequest,\n ): Promise<CreateSettlementResponse> {\n assertServerContext(this.context);\n\n const response =\n await this.apiClient.payments.buildSettlementOrchestration(\n settlementRequest,\n );\n const buildResponse = response.data;\n\n const settlementChainId = extractSettlementChainId(settlementRequest);\n\n await this.activate(buildResponse, settlementChainId);\n\n return {\n requestId: buildResponse.requestId,\n ephemeralWalletAddress: buildResponse.ephemeralWalletAddress,\n };\n }\n\n async createRaw(\n payload: PaymentRequestBuildRequest,\n config: CreateRawConfig,\n ): Promise<CreateSettlementResponse | PaymentResponseWithActionNames> {\n assertServerContext(this.context);\n\n const { settlementChainId, activate = true } = config;\n const buildResponse = await this.buildAndEnhanceSettlement(payload);\n\n if (!activate) {\n return buildResponse;\n }\n\n await this.activate(buildResponse, settlementChainId);\n\n return {\n requestId: buildResponse.requestId,\n ephemeralWalletAddress: buildResponse.ephemeralWalletAddress,\n };\n }\n\n async getDetails(\n request: PaymentRequestDetailsRequest,\n ): Promise<ServiceResponse<PaymentRequestDetailsResponse>> {\n return this.apiClient.payments.getPaymentRequestDetails(request);\n }\n\n async list(\n request: GetPaymentRequestsRequest,\n ): Promise<PaginatedServiceResponse<GetPaymentRequestsResponse>> {\n return this.apiClient.payments.getPaymentRequests(request);\n }\n\n private async activate(\n buildResponse: PaymentResponseWithActionNames,\n settlementChainId: number,\n ): Promise<void> {\n const publicClient = this.createPublicClient(settlementChainId);\n\n const instructions = [\n ...buildResponse.completionInstructions,\n ...buildResponse.instructions,\n ];\n\n const delegateAddressMap = await this.fetchDelegateAddresses(instructions);\n\n const {\n signedAuthorization,\n completionInstructions,\n instructions: signedInstructions,\n } = await createSettlementSigner({\n context: this.context,\n buildResponse,\n publicClient,\n delegateAddressMap,\n });\n\n await this.apiClient.payments.newPaymentRequest({\n requestId: buildResponse.requestId,\n signedAuthorization,\n completionInstructions,\n instructions: signedInstructions,\n });\n }\n\n private async buildAndEnhanceSettlement(\n payload: PaymentRequestBuildRequest,\n ): Promise<PaymentResponseWithActionNames> {\n const actionNames = extractActionNamesMap(\n payload.completionInstructions,\n payload.instructions,\n );\n\n const response = await this.apiClient.payments.buildPaymentRequest(payload);\n\n return addActionNamesToInstructions(response.data, actionNames);\n }\n\n private createPublicClient(chainId: number): PublicClient {\n const chain = getChainById(chainId);\n if (!chain) {\n throw new Error(`Chain with id ${chainId} not found`);\n }\n\n return createPublicClient({ chain: chain as Chain, transport: http() });\n }\n\n private async fetchDelegateAddresses(\n instructions: SettlementInstruction[],\n ): Promise<Map<number, Address>> {\n const chainIds = Array.from(\n new Set(instructions.map((instruction) => instruction.chainId)),\n );\n\n const addresses = await Promise.all(\n chainIds.map(async (chainId) => {\n const response = await this.apiClient.config.getDelegateAddress({\n chainId,\n });\n const address = hexStringSchema.parse(\n response.data.otimDelegateAddress,\n );\n return [chainId, address] as const;\n }),\n );\n\n return new Map(addresses);\n }\n}\n","import type {\n BuildSettlementRequest,\n OrchestrationParams,\n SettlementParams,\n VaultWithdrawSettlementParams,\n} from \"@otim/utils/api\";\nimport type { SupportedChainId } from \"@otim/utils/chains\";\nimport type { Nullable } from \"@otim/utils/helpers\";\nimport type { PaymentRequestMetadata } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\n\nimport { validateIso8601Date } from \"@otim/utils/helpers\";\nimport { buildPaymentMetadata } from \"@otim/utils/payments\";\nimport { toHex } from \"viem\";\n\n/**\n * Generates a default due date 30 days from now.\n * This is a standard payment term when no due date is specified.\n */\nfunction getDefaultDueDate(): string {\n const date = new Date();\n date.setDate(date.getDate() + 30);\n return date.toISOString();\n}\n\nexport type {\n BuildSettlementRequest,\n OrchestrationParams,\n SettlementParams,\n VaultWithdrawSettlementParams,\n};\n\nexport interface PrepareSettlementParams {\n amount: bigint;\n chainId: SupportedChainId;\n recipient: Address;\n token: Address;\n acceptedTokens: Record<number, Address[]>;\n payer?: Nullable<Address>;\n dueDate?: string;\n metadata?: PaymentRequestMetadata;\n note?: string;\n maxRuns?: number;\n}\n\nfunction buildMetadataFromParams(params: {\n amount: bigint;\n recipient: Address;\n token: Address;\n note?: string;\n dueDate?: string;\n payer?: Address;\n customMetadata?: PaymentRequestMetadata;\n}): PaymentRequestMetadata {\n const { amount, recipient, token, note, dueDate, payer, customMetadata } =\n params;\n\n /* Convert from smallest token units to USD */\n const amountInUSD = Number(amount) / 1_000_000;\n\n const baseMetadata = buildPaymentMetadata({\n tokenSymbol: \"\",\n amountInUSD,\n fromAccountAddress: recipient,\n note,\n payer: { name: \"\", address: payer ?? recipient },\n dueDate: dueDate || getDefaultDueDate(),\n });\n\n const metadataWithToken = {\n ...baseMetadata,\n token,\n source: \"Manual\" as const,\n type: \"PaymentRequest\" as const,\n };\n\n return customMetadata\n ? { ...metadataWithToken, ...customMetadata }\n : metadataWithToken;\n}\n\n/**\n * Converts acceptedTokens from Record<number, Address[]> to Record<string,\n * Address[]> as required by the API schema.\n */\nfunction convertAcceptedTokensToStringKeys(\n acceptedTokens: Record<number, Address[]>,\n): Record<string, Address[]> {\n const result: Record<string, Address[]> = {};\n for (const [chainId, tokens] of Object.entries(acceptedTokens)) {\n result[String(chainId)] = tokens;\n }\n return result;\n}\n\nexport function prepareSettlement(\n params: PrepareSettlementParams,\n): BuildSettlementRequest {\n const {\n chainId,\n token,\n acceptedTokens,\n recipient,\n amount,\n payer,\n note,\n dueDate,\n metadata: customMetadata,\n maxRuns,\n } = params;\n\n if (dueDate) {\n validateIso8601Date(dueDate);\n }\n\n const metadata = buildMetadataFromParams({\n amount,\n recipient,\n token,\n note,\n dueDate,\n payer: payer ?? undefined,\n customMetadata,\n });\n\n return {\n params: {\n settlement: {\n acceptedTokens: convertAcceptedTokensToStringKeys(acceptedTokens),\n settlementChainId: chainId,\n settlementToken: token,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n settlementAmount: toHex(amount),\n recipientAddress: recipient,\n },\n },\n payerAddress: payer ?? null,\n metadata,\n dueDate: dueDate ?? null,\n maxRuns: maxRuns ?? null,\n };\n}\n","import type {\n BuildSettlementRequest,\n VaultWithdrawSettlementParams,\n} from \"@otim/utils/api\";\nimport type { SupportedChainId } from \"@otim/utils/chains\";\nimport type { Nullable } from \"@otim/utils/helpers\";\nimport type { PaymentRequestMetadata } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\n\nimport { validateIso8601Date } from \"@otim/utils/helpers\";\nimport { buildPaymentMetadata } from \"@otim/utils/payments\";\nimport { toHex } from \"viem\";\n\nexport type { VaultWithdrawSettlementParams };\n\nexport interface PrepareVaultWithdrawSettlementParams {\n vaultAddress: Address;\n vaultChainId: SupportedChainId;\n settlementChainId: SupportedChainId;\n settlementToken: Address;\n recipientAddress: Address;\n withdrawAmount: bigint;\n payer?: Nullable<Address>;\n dueDate?: string;\n metadata?: PaymentRequestMetadata;\n note?: string;\n maxRuns?: number;\n}\n\n/**\n * Generates a default due date 30 days from now.\n * This is a standard payment term when no due date is specified.\n */\nfunction getDefaultDueDate(): string {\n const date = new Date();\n date.setDate(date.getDate() + 30);\n return date.toISOString();\n}\n\nfunction buildMetadataFromParams(params: {\n amount: bigint;\n recipient: Address;\n token: Address;\n note?: string;\n dueDate?: string;\n payer?: Address;\n customMetadata?: PaymentRequestMetadata;\n}): PaymentRequestMetadata {\n const { amount, recipient, token, note, dueDate, payer, customMetadata } =\n params;\n\n /* Convert from smallest token units to USD */\n const amountInUSD = Number(amount) / 1_000_000;\n\n const baseMetadata = buildPaymentMetadata({\n tokenSymbol: \"\",\n amountInUSD,\n fromAccountAddress: recipient,\n note,\n payer: { name: \"\", address: payer ?? recipient },\n dueDate: dueDate || getDefaultDueDate(),\n });\n\n const metadataWithToken = {\n ...baseMetadata,\n token,\n source: \"Manual\" as const,\n type: \"PaymentRequest\" as const,\n };\n\n return customMetadata\n ? { ...metadataWithToken, ...customMetadata }\n : metadataWithToken;\n}\n\nexport function prepareVaultWithdrawSettlement(\n params: PrepareVaultWithdrawSettlementParams,\n): BuildSettlementRequest {\n const {\n vaultAddress,\n vaultChainId,\n settlementChainId,\n settlementToken,\n recipientAddress,\n withdrawAmount,\n payer,\n note,\n dueDate,\n metadata: customMetadata,\n maxRuns,\n } = params;\n\n if (dueDate) {\n validateIso8601Date(dueDate);\n }\n\n const metadata = buildMetadataFromParams({\n amount: withdrawAmount,\n recipient: recipientAddress,\n token: settlementToken,\n note,\n dueDate,\n payer: payer ?? undefined,\n customMetadata,\n });\n\n return {\n params: {\n vaultWithdrawSettlement: {\n vaultAddress,\n vaultChainId,\n settlementChainId,\n settlementToken,\n recipientAddress,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n withdrawAmount: toHex(withdrawAmount),\n },\n },\n payerAddress: payer ?? null,\n metadata,\n dueDate: dueDate ?? null,\n maxRuns: maxRuns ?? null,\n };\n}\n","import type {\n BuildSettlementRequest,\n SettlementVaultDepositParams,\n} from \"@otim/utils/api\";\nimport type { SupportedChainId } from \"@otim/utils/chains\";\nimport type { Nullable } from \"@otim/utils/helpers\";\nimport type { PaymentRequestMetadata } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\n\nimport { validateIso8601Date } from \"@otim/utils/helpers\";\nimport { buildPaymentMetadata } from \"@otim/utils/payments\";\nimport { toHex } from \"viem\";\n\nexport type { SettlementVaultDepositParams };\n\nexport interface PrepareVaultDepositSettlementParams {\n /** Map of chain IDs to accepted token addresses for payment */\n acceptedTokens: Record<number, Address[]>;\n /** Chain ID where the vault is deployed */\n vaultChainId: SupportedChainId;\n /** ERC4626 vault address to deposit into */\n vaultAddress: Address;\n /** Optional: the underlying token of the vault (used only for metadata, not sent to API) */\n vaultUnderlyingToken?: Address;\n /** Amount to deposit in the vault's underlying token units */\n depositAmount: bigint;\n /** Address that will receive the vault shares */\n recipientAddress: Address;\n /** Optional payer address */\n payer?: Nullable<Address>;\n /** Optional due date in ISO 8601 format */\n dueDate?: string;\n /** Optional custom metadata */\n metadata?: PaymentRequestMetadata;\n /** Optional note for the settlement */\n note?: string;\n /** Optional maximum number of execution runs */\n maxRuns?: number;\n}\n\n/**\n * Generates a default due date 30 days from now.\n * This is a standard payment term when no due date is specified.\n */\nfunction getDefaultDueDate(): string {\n const date = new Date();\n date.setDate(date.getDate() + 30);\n return date.toISOString();\n}\n\nfunction buildMetadataFromParams(params: {\n amount: bigint;\n recipient: Address;\n token: Address;\n note?: string;\n dueDate?: string;\n payer?: Address;\n customMetadata?: PaymentRequestMetadata;\n}): PaymentRequestMetadata {\n const { amount, recipient, token, note, dueDate, payer, customMetadata } =\n params;\n\n /* Convert from smallest token units to USD */\n const amountInUSD = Number(amount) / 1_000_000;\n\n const baseMetadata = buildPaymentMetadata({\n tokenSymbol: \"\",\n amountInUSD,\n fromAccountAddress: recipient,\n note,\n payer: { name: \"\", address: payer ?? recipient },\n dueDate: dueDate || getDefaultDueDate(),\n });\n\n const metadataWithToken = {\n ...baseMetadata,\n token,\n source: \"Manual\" as const,\n type: \"PaymentRequest\" as const,\n };\n\n return customMetadata\n ? { ...metadataWithToken, ...customMetadata }\n : metadataWithToken;\n}\n\n/**\n * Converts acceptedTokens from Record<number, Address[]> to Record<string,\n * Address[]> as required by the API schema.\n */\nfunction convertAcceptedTokensToStringKeys(\n acceptedTokens: Record<number, Address[]>,\n): Record<string, Address[]> {\n const result: Record<string, Address[]> = {};\n for (const [chainId, tokens] of Object.entries(acceptedTokens)) {\n result[String(chainId)] = tokens;\n }\n return result;\n}\n\n/**\n * Prepares a vault deposit settlement request.\n *\n * This creates a settlement that deposits funds into an ERC4626 vault.\n * Funds can be collected from multiple chains (via acceptedTokens) and\n * deposited into the vault on the specified chain.\n *\n * @param params - The vault deposit settlement parameters\n * @returns A BuildSettlementRequest ready to be sent to the API\n */\nexport function prepareVaultDepositSettlement(\n params: PrepareVaultDepositSettlementParams,\n): BuildSettlementRequest {\n const {\n acceptedTokens,\n vaultChainId,\n vaultAddress,\n vaultUnderlyingToken,\n depositAmount,\n recipientAddress,\n payer,\n note,\n dueDate,\n metadata: customMetadata,\n maxRuns,\n } = params;\n\n if (dueDate) {\n validateIso8601Date(dueDate);\n }\n\n const metadata = buildMetadataFromParams({\n amount: depositAmount,\n recipient: recipientAddress,\n token: vaultUnderlyingToken ?? vaultAddress,\n note,\n dueDate,\n payer: payer ?? undefined,\n customMetadata,\n });\n\n return {\n params: {\n settlementVaultDeposit: {\n acceptedTokens: convertAcceptedTokensToStringKeys(acceptedTokens),\n vaultChainId,\n vaultAddress,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n depositAmount: toHex(depositAmount),\n recipientAddress,\n },\n },\n payerAddress: payer ?? null,\n metadata,\n dueDate: dueDate ?? null,\n maxRuns: maxRuns ?? null,\n };\n}\n","import type {\n BuildSettlementRequest,\n VaultMigrateParams,\n} from \"@otim/utils/api\";\nimport type { SupportedChainId } from \"@otim/utils/chains\";\nimport type { Nullable } from \"@otim/utils/helpers\";\nimport type { PaymentRequestMetadata } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\n\nimport { validateIso8601Date } from \"@otim/utils/helpers\";\nimport { buildPaymentMetadata } from \"@otim/utils/payments\";\nimport { toHex } from \"viem\";\n\nexport type { VaultMigrateParams };\n\nexport interface PrepareVaultMigrateSettlementParams {\n /** Source vault address to withdraw from */\n sourceVaultAddress: Address;\n /** Optional: the underlying token of the source vault (used only for metadata, not sent to API) */\n sourceVaultUnderlyingToken?: Address;\n /** Chain ID where the source vault is deployed */\n sourceVaultChainId: SupportedChainId;\n /** Amount to withdraw from the source vault in underlying token units */\n withdrawAmount: bigint;\n /** Destination vault address to deposit into */\n destVaultAddress: Address;\n /** Optional: the underlying token of the destination vault (used only for metadata, not sent to API) */\n destVaultUnderlyingToken?: Address;\n /** Chain ID where the destination vault is deployed */\n destVaultChainId: SupportedChainId;\n /** Address that will receive the destination vault shares */\n recipientAddress: Address;\n /** Optional payer address */\n payer?: Nullable<Address>;\n /** Optional due date in ISO 8601 format */\n dueDate?: string;\n /** Optional custom metadata */\n metadata?: PaymentRequestMetadata;\n /** Optional note for the settlement */\n note?: string;\n /** Optional maximum number of execution runs */\n maxRuns?: number;\n}\n\n/**\n * Generates a default due date 30 days from now.\n * This is a standard payment term when no due date is specified.\n */\nfunction getDefaultDueDate(): string {\n const date = new Date();\n date.setDate(date.getDate() + 30);\n return date.toISOString();\n}\n\nfunction buildMetadataFromParams(params: {\n amount: bigint;\n recipient: Address;\n token: Address;\n note?: string;\n dueDate?: string;\n payer?: Address;\n customMetadata?: PaymentRequestMetadata;\n}): PaymentRequestMetadata {\n const { amount, recipient, token, note, dueDate, payer, customMetadata } =\n params;\n\n /* Convert from smallest token units to USD */\n const amountInUSD = Number(amount) / 1_000_000;\n\n const baseMetadata = buildPaymentMetadata({\n tokenSymbol: \"\",\n amountInUSD,\n fromAccountAddress: recipient,\n note,\n payer: { name: \"\", address: payer ?? recipient },\n dueDate: dueDate || getDefaultDueDate(),\n });\n\n const metadataWithToken = {\n ...baseMetadata,\n token,\n source: \"Manual\" as const,\n type: \"PaymentRequest\" as const,\n };\n\n return customMetadata\n ? { ...metadataWithToken, ...customMetadata }\n : metadataWithToken;\n}\n\n/**\n * Prepares a vault migrate settlement request.\n *\n * This creates a settlement that migrates funds between two ERC4626 vaults.\n * Funds are withdrawn from the source vault and deposited into the destination\n * vault, which can be on the same chain or a different chain (cross-chain migration).\n *\n * @param params - The vault migrate settlement parameters\n * @returns A BuildSettlementRequest ready to be sent to the API\n */\nexport function prepareVaultMigrateSettlement(\n params: PrepareVaultMigrateSettlementParams,\n): BuildSettlementRequest {\n const {\n sourceVaultAddress,\n sourceVaultChainId,\n withdrawAmount,\n destVaultAddress,\n destVaultUnderlyingToken,\n destVaultChainId,\n recipientAddress,\n payer,\n note,\n dueDate,\n metadata: customMetadata,\n maxRuns,\n } = params;\n\n if (dueDate) {\n validateIso8601Date(dueDate);\n }\n\n const metadata = buildMetadataFromParams({\n amount: withdrawAmount,\n recipient: recipientAddress,\n token: destVaultUnderlyingToken ?? destVaultAddress,\n note,\n dueDate,\n payer: payer ?? undefined,\n customMetadata,\n });\n\n return {\n params: {\n vaultMigrate: {\n sourceVaultAddress,\n sourceVaultChainId,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n withdrawAmount: toHex(withdrawAmount),\n destVaultAddress,\n destVaultChainId,\n recipientAddress,\n },\n },\n payerAddress: payer ?? null,\n metadata,\n dueDate: dueDate ?? null,\n maxRuns: maxRuns ?? null,\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"clients-Dkt56jVn.mjs","names":["apiClient: APIClient","apiClient: APIClient","account: OtimAccount","context: OtimClientContext","apiClient: APIClient","apiClient: APIClient","apiClient: APIClient","account: OtimAccount","context: OtimServerClientContext","getDefaultDueDate","buildMetadataFromParams","convertAcceptedTokensToStringKeys","result: Record<string, Address[]>","getDefaultDueDate","buildMetadataFromParams","getDefaultDueDate","buildMetadataFromParams","result: Record<string, Address[]>"],"sources":["../src/clients/activity.ts","../src/clients/auth.ts","../src/clients/config.ts","../src/clients/delegation.ts","../src/clients/helpers/settlement-signer.ts","../src/clients/orchestration.ts","../src/clients/helpers/prepare-settlement.ts","../src/clients/helpers/prepare-vault-withdraw-settlement.ts","../src/clients/helpers/prepare-vault-deposit-settlement.ts","../src/clients/helpers/prepare-vault-migrate-settlement.ts"],"sourcesContent":["import type {\n APIClient,\n GetInstructionActivityRequest,\n GetInstructionActivityResponse,\n} from \"@otim/utils/api\";\n\nexport class ActivityClient {\n constructor(private readonly apiClient: APIClient) {}\n\n async getInstructionActivity(\n request: GetInstructionActivityRequest,\n ): Promise<GetInstructionActivityResponse> {\n const response =\n await this.apiClient.activity.getInstructionActivity(request);\n\n return response.data;\n }\n}\n","import type { OtimAccount } from \"@otim/sdk-core/account\";\nimport type { OtimClientContext } from \"@otim/sdk-core/context\";\nimport type { APIClient, AuthLoginResponse, MeResponse } from \"@otim/utils/api\";\nimport type { Address } from \"viem\";\n\nimport { parseSignatureToVRS } from \"@otim/utils/helpers\";\n\nimport { createLoginSiweMessage } from \"@otim/sdk-core/config\";\nimport { assertRequiresAuth } from \"@otim/sdk-core/context\";\n\nexport interface LoginOptions {\n address: Address;\n}\n\nexport class AuthClient {\n constructor(\n private readonly apiClient: APIClient,\n private readonly account: OtimAccount,\n private readonly context: OtimClientContext,\n ) {}\n\n async login({ address }: LoginOptions): Promise<AuthLoginResponse> {\n assertRequiresAuth(this.context);\n\n const message = createLoginSiweMessage(address, Date.now().toString());\n const signature = await this.account.signMessage({ message });\n const vrsParsedSignature = parseSignatureToVRS(signature);\n\n const response = await this.apiClient.auth.login({\n siwe: message,\n signature: vrsParsedSignature,\n });\n\n return response.data;\n }\n\n async getCurrentUser(): Promise<MeResponse> {\n const response = await this.apiClient.auth.me();\n return response.data;\n }\n}\n","import type {\n APIClient,\n GetMaxPriorityFeePerGasEstimateRequest,\n GetMaxPriorityFeePerGasEstimateResponse,\n} from \"@otim/utils/api\";\n\nexport class ConfigClient {\n constructor(private readonly apiClient: APIClient) {}\n\n async getMaxPriorityFeeEstimate({\n chainId,\n }: GetMaxPriorityFeePerGasEstimateRequest): Promise<GetMaxPriorityFeePerGasEstimateResponse> {\n const response =\n await this.apiClient.config.getMaxPriorityFeePerGasEstimate({ chainId });\n\n return response.data;\n }\n}\n","import type {\n APIClient,\n DelegationCreateRequest,\n DelegationStatusRequest,\n DelegationStatusResponse,\n GetDelegateAddressRequest,\n GetDelegateAddressResponse,\n} from \"@otim/utils/api\";\n\nexport class DelegationClient {\n constructor(private readonly apiClient: APIClient) {}\n\n async getDelegateAddress({\n chainId,\n }: GetDelegateAddressRequest): Promise<GetDelegateAddressResponse> {\n const response = await this.apiClient.config.getDelegateAddress({\n chainId,\n });\n\n return response.data;\n }\n\n async getDelegationStatus(\n options: DelegationStatusRequest,\n ): Promise<DelegationStatusResponse> {\n const response = await this.apiClient.account.getDelegationStatus({\n address: options.address,\n chainId: options.chainId,\n });\n\n return response.data;\n }\n\n async createDelegation(\n delegationRequest: DelegationCreateRequest,\n ): Promise<void> {\n await this.apiClient.account.createDelegation(delegationRequest);\n }\n}\n","import type { OtimServerClientContext } from \"../../context\";\nimport type { PaymentResponseWithActionNames } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\nimport type { PublicClient } from \"viem\";\n\nimport { createWalletClient, http } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nimport { isApiAccountConfig } from \"../../account\";\nimport {\n ApiKeyClientSigningService,\n ServerWalletSigningService,\n UnifiedPaymentSigner,\n} from \"../../signing\";\n\nexport interface CreateSettlementSignerParams {\n context: OtimServerClientContext;\n buildResponse: PaymentResponseWithActionNames;\n publicClient: PublicClient;\n delegateAddressMap: Map<number, Address>;\n}\n\ntype CreateSettlementSignerResult = Awaited<\n ReturnType<UnifiedPaymentSigner[\"signAll\"]>\n>;\n\nexport async function createSettlementSigner(\n params: CreateSettlementSignerParams,\n): Promise<CreateSettlementSignerResult> {\n const { context, buildResponse, publicClient, delegateAddressMap } = params;\n\n if (isApiAccountConfig(context.config)) {\n const signingService = new ApiKeyClientSigningService(\n context.config.publicKey,\n context.config.privateKey,\n );\n\n const signer = new UnifiedPaymentSigner({\n buildResponse,\n signingService,\n publicClient,\n delegateAddressMap,\n });\n\n return signer.signAll();\n }\n\n const account = privateKeyToAccount(context.config.privateKey);\n const walletClient = createWalletClient({\n account,\n transport: http(),\n });\n\n const signingService =\n ServerWalletSigningService.fromViemWallet(walletClient);\n\n const signer = new UnifiedPaymentSigner({\n buildResponse,\n signingService,\n publicClient,\n delegateAddressMap,\n });\n\n return signer.signAll();\n}\n","import type { OtimAccount } from \"@otim/sdk-core/account\";\nimport type { OtimServerClientContext } from \"@otim/sdk-core/context\";\nimport type {\n APIClient,\n BuildSettlementRequest,\n GetPaymentRequestsRequest,\n GetPaymentRequestsResponse,\n PaginatedServiceResponse,\n PaymentRequestBuildRequest,\n PaymentRequestDetailsRequest,\n PaymentRequestDetailsResponse,\n ServiceResponse,\n} from \"@otim/utils/api\";\nimport type { PaymentResponseWithActionNames } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\nimport type { Chain, PublicClient } from \"viem\";\n\nimport { getChainById } from \"@otim/utils/chains\";\nimport {\n addActionNamesToInstructions,\n extractActionNamesMap,\n} from \"@otim/utils/payments\";\nimport { hexStringSchema } from \"@otim/utils/schemas\";\nimport { createPublicClient, http } from \"viem\";\n\nimport { assertServerContext } from \"@otim/sdk-core/context\";\n\nimport { createSettlementSigner } from \"./helpers/settlement-signer\";\n\nexport interface CreateSettlementResponse {\n requestId: string;\n ephemeralWalletAddress: Address;\n}\n\nexport interface CreateRawConfig {\n settlementChainId: number;\n activate?: boolean;\n}\n\ntype SettlementInstruction =\n PaymentResponseWithActionNames[\"completionInstructions\"][number];\n\n/**\n * Extracts the settlement chain ID from a BuildSettlementRequest.\n * Handles all settlement types: regular, vault deposit, and vault withdraw.\n */\nfunction extractSettlementChainId(request: BuildSettlementRequest): number {\n const { params } = request;\n\n if (\"settlement\" in params) {\n return params.settlement.settlementChainId;\n }\n\n if (\"settlementVaultDeposit\" in params) {\n return params.settlementVaultDeposit.vaultChainId;\n }\n\n if (\"vaultWithdrawSettlement\" in params) {\n return params.vaultWithdrawSettlement.settlementChainId;\n }\n\n if (\"vaultMigrate\" in params) {\n return params.vaultMigrate.destVaultChainId;\n }\n\n throw new Error(\"Unknown settlement type\");\n}\n\nexport class OrchestrationClient {\n constructor(\n private readonly apiClient: APIClient,\n private readonly account: OtimAccount,\n private readonly context: OtimServerClientContext,\n ) {}\n\n async create(\n settlementRequest: BuildSettlementRequest,\n ): Promise<CreateSettlementResponse> {\n assertServerContext(this.context);\n\n const response =\n await this.apiClient.payments.buildSettlementOrchestration(\n settlementRequest,\n );\n const buildResponse = response.data;\n\n const settlementChainId = extractSettlementChainId(settlementRequest);\n\n await this.activate(buildResponse, settlementChainId);\n\n return {\n requestId: buildResponse.requestId,\n ephemeralWalletAddress: buildResponse.ephemeralWalletAddress,\n };\n }\n\n async createRaw(\n payload: PaymentRequestBuildRequest,\n config: CreateRawConfig,\n ): Promise<CreateSettlementResponse | PaymentResponseWithActionNames> {\n assertServerContext(this.context);\n\n const { settlementChainId, activate = true } = config;\n const buildResponse = await this.buildAndEnhanceSettlement(payload);\n\n if (!activate) {\n return buildResponse;\n }\n\n await this.activate(buildResponse, settlementChainId);\n\n return {\n requestId: buildResponse.requestId,\n ephemeralWalletAddress: buildResponse.ephemeralWalletAddress,\n };\n }\n\n async getDetails(\n request: PaymentRequestDetailsRequest,\n ): Promise<ServiceResponse<PaymentRequestDetailsResponse>> {\n return this.apiClient.payments.getPaymentRequestDetails(request);\n }\n\n async list(\n request: GetPaymentRequestsRequest,\n ): Promise<PaginatedServiceResponse<GetPaymentRequestsResponse>> {\n return this.apiClient.payments.getPaymentRequests(request);\n }\n\n private async activate(\n buildResponse: PaymentResponseWithActionNames,\n settlementChainId: number,\n ): Promise<void> {\n const publicClient = this.createPublicClient(settlementChainId);\n\n const instructions = [\n ...buildResponse.completionInstructions,\n ...buildResponse.instructions,\n ];\n\n const delegateAddressMap = await this.fetchDelegateAddresses(instructions);\n\n const {\n signedAuthorization,\n completionInstructions,\n instructions: signedInstructions,\n } = await createSettlementSigner({\n context: this.context,\n buildResponse,\n publicClient,\n delegateAddressMap,\n });\n\n await this.apiClient.payments.newPaymentRequest({\n requestId: buildResponse.requestId,\n signedAuthorization,\n completionInstructions,\n instructions: signedInstructions,\n });\n }\n\n private async buildAndEnhanceSettlement(\n payload: PaymentRequestBuildRequest,\n ): Promise<PaymentResponseWithActionNames> {\n const actionNames = extractActionNamesMap(\n payload.completionInstructions,\n payload.instructions,\n );\n\n const response = await this.apiClient.payments.buildPaymentRequest(payload);\n\n return addActionNamesToInstructions(response.data, actionNames);\n }\n\n private createPublicClient(chainId: number): PublicClient {\n const chain = getChainById(chainId);\n if (!chain) {\n throw new Error(`Chain with id ${chainId} not found`);\n }\n\n return createPublicClient({ chain: chain as Chain, transport: http() });\n }\n\n private async fetchDelegateAddresses(\n instructions: SettlementInstruction[],\n ): Promise<Map<number, Address>> {\n const chainIds = Array.from(\n new Set(instructions.map((instruction) => instruction.chainId)),\n );\n\n const addresses = await Promise.all(\n chainIds.map(async (chainId) => {\n const response = await this.apiClient.config.getDelegateAddress({\n chainId,\n });\n const address = hexStringSchema.parse(\n response.data.otimDelegateAddress,\n );\n return [chainId, address] as const;\n }),\n );\n\n return new Map(addresses);\n }\n}\n","import type {\n BuildSettlementRequest,\n OrchestrationParams,\n SettlementParams,\n VaultWithdrawSettlementParams,\n} from \"@otim/utils/api\";\nimport type { SupportedChainId } from \"@otim/utils/chains\";\nimport type { Nullable } from \"@otim/utils/helpers\";\nimport type { PaymentRequestMetadata } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\n\nimport { validateIso8601Date } from \"@otim/utils/helpers\";\nimport { buildPaymentMetadata } from \"@otim/utils/payments\";\nimport { toHex } from \"viem\";\n\n/**\n * Generates a default due date 30 days from now.\n * This is a standard payment term when no due date is specified.\n */\nfunction getDefaultDueDate(): string {\n const date = new Date();\n date.setDate(date.getDate() + 30);\n return date.toISOString();\n}\n\nexport type {\n BuildSettlementRequest,\n OrchestrationParams,\n SettlementParams,\n VaultWithdrawSettlementParams,\n};\n\nexport interface PrepareSettlementParams {\n amount: bigint;\n chainId: SupportedChainId;\n recipient: Address;\n token: Address;\n acceptedTokens: Record<number, Address[]>;\n payer?: Nullable<Address>;\n dueDate?: string;\n metadata?: PaymentRequestMetadata;\n note?: string;\n maxRuns?: number;\n}\n\nfunction buildMetadataFromParams(params: {\n amount: bigint;\n recipient: Address;\n token: Address;\n note?: string;\n dueDate?: string;\n payer?: Address;\n customMetadata?: PaymentRequestMetadata;\n}): PaymentRequestMetadata {\n const { amount, recipient, token, note, dueDate, payer, customMetadata } =\n params;\n\n /* Convert from smallest token units to USD */\n const amountInUSD = Number(amount) / 1_000_000;\n\n const baseMetadata = buildPaymentMetadata({\n tokenSymbol: \"\",\n amountInUSD,\n fromAccountAddress: recipient,\n note,\n payer: { name: \"\", address: payer ?? recipient },\n dueDate: dueDate || getDefaultDueDate(),\n });\n\n const metadataWithToken = {\n ...baseMetadata,\n token,\n source: \"Manual\" as const,\n type: \"PaymentRequest\" as const,\n };\n\n return customMetadata\n ? { ...metadataWithToken, ...customMetadata }\n : metadataWithToken;\n}\n\n/**\n * Converts acceptedTokens from Record<number, Address[]> to Record<string,\n * Address[]> as required by the API schema.\n */\nfunction convertAcceptedTokensToStringKeys(\n acceptedTokens: Record<number, Address[]>,\n): Record<string, Address[]> {\n const result: Record<string, Address[]> = {};\n for (const [chainId, tokens] of Object.entries(acceptedTokens)) {\n result[String(chainId)] = tokens;\n }\n return result;\n}\n\nexport function prepareSettlement(\n params: PrepareSettlementParams,\n): BuildSettlementRequest {\n const {\n chainId,\n token,\n acceptedTokens,\n recipient,\n amount,\n payer,\n note,\n dueDate,\n metadata: customMetadata,\n maxRuns,\n } = params;\n\n if (dueDate) {\n validateIso8601Date(dueDate);\n }\n\n const metadata = buildMetadataFromParams({\n amount,\n recipient,\n token,\n note,\n dueDate,\n payer: payer ?? undefined,\n customMetadata,\n });\n\n return {\n params: {\n settlement: {\n acceptedTokens: convertAcceptedTokensToStringKeys(acceptedTokens),\n settlementChainId: chainId,\n settlementToken: token,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n settlementAmount: toHex(amount),\n recipientAddress: recipient,\n },\n },\n payerAddress: payer ?? null,\n metadata,\n dueDate: dueDate ?? null,\n maxRuns: maxRuns ?? null,\n };\n}\n","import type {\n BuildSettlementRequest,\n VaultWithdrawSettlementParams,\n} from \"@otim/utils/api\";\nimport type { SupportedChainId } from \"@otim/utils/chains\";\nimport type { Nullable } from \"@otim/utils/helpers\";\nimport type { PaymentRequestMetadata } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\n\nimport { validateIso8601Date } from \"@otim/utils/helpers\";\nimport { buildPaymentMetadata } from \"@otim/utils/payments\";\nimport { toHex } from \"viem\";\n\nexport type { VaultWithdrawSettlementParams };\n\nexport interface PrepareVaultWithdrawSettlementParams {\n vaultAddress: Address;\n vaultChainId: SupportedChainId;\n settlementChainId: SupportedChainId;\n settlementToken: Address;\n recipientAddress: Address;\n withdrawAmount: bigint;\n payer?: Nullable<Address>;\n dueDate?: string;\n metadata?: PaymentRequestMetadata;\n note?: string;\n maxRuns?: number;\n}\n\n/**\n * Generates a default due date 30 days from now.\n * This is a standard payment term when no due date is specified.\n */\nfunction getDefaultDueDate(): string {\n const date = new Date();\n date.setDate(date.getDate() + 30);\n return date.toISOString();\n}\n\nfunction buildMetadataFromParams(params: {\n amount: bigint;\n recipient: Address;\n token: Address;\n note?: string;\n dueDate?: string;\n payer?: Address;\n customMetadata?: PaymentRequestMetadata;\n}): PaymentRequestMetadata {\n const { amount, recipient, token, note, dueDate, payer, customMetadata } =\n params;\n\n /* Convert from smallest token units to USD */\n const amountInUSD = Number(amount) / 1_000_000;\n\n const baseMetadata = buildPaymentMetadata({\n tokenSymbol: \"\",\n amountInUSD,\n fromAccountAddress: recipient,\n note,\n payer: { name: \"\", address: payer ?? recipient },\n dueDate: dueDate || getDefaultDueDate(),\n });\n\n const metadataWithToken = {\n ...baseMetadata,\n token,\n source: \"Manual\" as const,\n type: \"PaymentRequest\" as const,\n };\n\n return customMetadata\n ? { ...metadataWithToken, ...customMetadata }\n : metadataWithToken;\n}\n\nexport function prepareVaultWithdrawSettlement(\n params: PrepareVaultWithdrawSettlementParams,\n): BuildSettlementRequest {\n const {\n vaultAddress,\n vaultChainId,\n settlementChainId,\n settlementToken,\n recipientAddress,\n withdrawAmount,\n payer,\n note,\n dueDate,\n metadata: customMetadata,\n maxRuns,\n } = params;\n\n if (dueDate) {\n validateIso8601Date(dueDate);\n }\n\n const metadata = buildMetadataFromParams({\n amount: withdrawAmount,\n recipient: recipientAddress,\n token: settlementToken,\n note,\n dueDate,\n payer: payer ?? undefined,\n customMetadata,\n });\n\n return {\n params: {\n vaultWithdrawSettlement: {\n vaultAddress,\n vaultChainId,\n settlementChainId,\n settlementToken,\n recipientAddress,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n withdrawAmount: toHex(withdrawAmount),\n },\n },\n payerAddress: payer ?? null,\n metadata,\n dueDate: dueDate ?? null,\n maxRuns: maxRuns ?? null,\n };\n}\n","import type {\n BuildSettlementRequest,\n SettlementVaultDepositParams,\n} from \"@otim/utils/api\";\nimport type { SupportedChainId } from \"@otim/utils/chains\";\nimport type { Nullable } from \"@otim/utils/helpers\";\nimport type { PaymentRequestMetadata } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\n\nimport { validateIso8601Date } from \"@otim/utils/helpers\";\nimport { buildPaymentMetadata } from \"@otim/utils/payments\";\nimport { toHex } from \"viem\";\n\nexport type { SettlementVaultDepositParams };\n\nexport interface PrepareVaultDepositSettlementParams {\n /** Map of chain IDs to accepted token addresses for payment */\n acceptedTokens: Record<number, Address[]>;\n /** Chain ID where the vault is deployed */\n vaultChainId: SupportedChainId;\n /** ERC4626 vault address to deposit into */\n vaultAddress: Address;\n /** Optional: the underlying token of the vault (used only for metadata, not sent to API) */\n vaultUnderlyingToken?: Address;\n /** Amount to deposit in the vault's underlying token units */\n depositAmount: bigint;\n /** Address that will receive the vault shares */\n recipientAddress: Address;\n /** Optional payer address */\n payer?: Nullable<Address>;\n /** Optional due date in ISO 8601 format */\n dueDate?: string;\n /** Optional custom metadata */\n metadata?: PaymentRequestMetadata;\n /** Optional note for the settlement */\n note?: string;\n /** Optional maximum number of execution runs */\n maxRuns?: number;\n}\n\n/**\n * Generates a default due date 30 days from now.\n * This is a standard payment term when no due date is specified.\n */\nfunction getDefaultDueDate(): string {\n const date = new Date();\n date.setDate(date.getDate() + 30);\n return date.toISOString();\n}\n\nfunction buildMetadataFromParams(params: {\n amount: bigint;\n recipient: Address;\n token: Address;\n note?: string;\n dueDate?: string;\n payer?: Address;\n customMetadata?: PaymentRequestMetadata;\n}): PaymentRequestMetadata {\n const { amount, recipient, token, note, dueDate, payer, customMetadata } =\n params;\n\n /* Convert from smallest token units to USD */\n const amountInUSD = Number(amount) / 1_000_000;\n\n const baseMetadata = buildPaymentMetadata({\n tokenSymbol: \"\",\n amountInUSD,\n fromAccountAddress: recipient,\n note,\n payer: { name: \"\", address: payer ?? recipient },\n dueDate: dueDate || getDefaultDueDate(),\n });\n\n const metadataWithToken = {\n ...baseMetadata,\n token,\n source: \"Manual\" as const,\n type: \"PaymentRequest\" as const,\n };\n\n return customMetadata\n ? { ...metadataWithToken, ...customMetadata }\n : metadataWithToken;\n}\n\n/**\n * Converts acceptedTokens from Record<number, Address[]> to Record<string,\n * Address[]> as required by the API schema.\n */\nfunction convertAcceptedTokensToStringKeys(\n acceptedTokens: Record<number, Address[]>,\n): Record<string, Address[]> {\n const result: Record<string, Address[]> = {};\n for (const [chainId, tokens] of Object.entries(acceptedTokens)) {\n result[String(chainId)] = tokens;\n }\n return result;\n}\n\n/**\n * Prepares a vault deposit settlement request.\n *\n * This creates a settlement that deposits funds into an ERC4626 vault.\n * Funds can be collected from multiple chains (via acceptedTokens) and\n * deposited into the vault on the specified chain.\n *\n * @param params - The vault deposit settlement parameters\n * @returns A BuildSettlementRequest ready to be sent to the API\n */\nexport function prepareVaultDepositSettlement(\n params: PrepareVaultDepositSettlementParams,\n): BuildSettlementRequest {\n const {\n acceptedTokens,\n vaultChainId,\n vaultAddress,\n vaultUnderlyingToken,\n depositAmount,\n recipientAddress,\n payer,\n note,\n dueDate,\n metadata: customMetadata,\n maxRuns,\n } = params;\n\n if (dueDate) {\n validateIso8601Date(dueDate);\n }\n\n const metadata = buildMetadataFromParams({\n amount: depositAmount,\n recipient: recipientAddress,\n token: vaultUnderlyingToken ?? vaultAddress,\n note,\n dueDate,\n payer: payer ?? undefined,\n customMetadata,\n });\n\n return {\n params: {\n settlementVaultDeposit: {\n acceptedTokens: convertAcceptedTokensToStringKeys(acceptedTokens),\n vaultChainId,\n vaultAddress,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n depositAmount: toHex(depositAmount),\n recipientAddress,\n },\n },\n payerAddress: payer ?? null,\n metadata,\n dueDate: dueDate ?? null,\n maxRuns: maxRuns ?? null,\n };\n}\n","import type {\n BuildSettlementRequest,\n VaultMigrateParams,\n} from \"@otim/utils/api\";\nimport type { SupportedChainId } from \"@otim/utils/chains\";\nimport type { Nullable } from \"@otim/utils/helpers\";\nimport type { PaymentRequestMetadata } from \"@otim/utils/payments\";\nimport type { Address } from \"@otim/utils/schemas\";\n\nimport { validateIso8601Date } from \"@otim/utils/helpers\";\nimport { buildPaymentMetadata } from \"@otim/utils/payments\";\nimport { toHex } from \"viem\";\n\nexport type { VaultMigrateParams };\n\nexport interface PrepareVaultMigrateSettlementParams {\n /** Source vault address to withdraw from */\n sourceVaultAddress: Address;\n /** Optional: the underlying token of the source vault (used only for metadata, not sent to API) */\n sourceVaultUnderlyingToken?: Address;\n /** Chain ID where the source vault is deployed */\n sourceVaultChainId: SupportedChainId;\n /** Amount to withdraw from the source vault in underlying token units */\n withdrawAmount: bigint;\n /** Destination vault address to deposit into */\n destVaultAddress: Address;\n /** Optional: the underlying token of the destination vault (used only for metadata, not sent to API) */\n destVaultUnderlyingToken?: Address;\n /** Chain ID where the destination vault is deployed */\n destVaultChainId: SupportedChainId;\n /** Address that will receive the destination vault shares */\n recipientAddress: Address;\n /** Optional payer address */\n payer?: Nullable<Address>;\n /** Optional due date in ISO 8601 format */\n dueDate?: string;\n /** Optional custom metadata */\n metadata?: PaymentRequestMetadata;\n /** Optional note for the settlement */\n note?: string;\n /** Optional maximum number of execution runs */\n maxRuns?: number;\n}\n\n/**\n * Generates a default due date 30 days from now.\n * This is a standard payment term when no due date is specified.\n */\nfunction getDefaultDueDate(): string {\n const date = new Date();\n date.setDate(date.getDate() + 30);\n return date.toISOString();\n}\n\nfunction buildMetadataFromParams(params: {\n amount: bigint;\n recipient: Address;\n token: Address;\n note?: string;\n dueDate?: string;\n payer?: Address;\n customMetadata?: PaymentRequestMetadata;\n}): PaymentRequestMetadata {\n const { amount, recipient, token, note, dueDate, payer, customMetadata } =\n params;\n\n /* Convert from smallest token units to USD */\n const amountInUSD = Number(amount) / 1_000_000;\n\n const baseMetadata = buildPaymentMetadata({\n tokenSymbol: \"\",\n amountInUSD,\n fromAccountAddress: recipient,\n note,\n payer: { name: \"\", address: payer ?? recipient },\n dueDate: dueDate || getDefaultDueDate(),\n });\n\n const metadataWithToken = {\n ...baseMetadata,\n token,\n source: \"Manual\" as const,\n type: \"PaymentRequest\" as const,\n };\n\n return customMetadata\n ? { ...metadataWithToken, ...customMetadata }\n : metadataWithToken;\n}\n\n/**\n * Prepares a vault migrate settlement request.\n *\n * This creates a settlement that migrates funds between two ERC4626 vaults.\n * Funds are withdrawn from the source vault and deposited into the destination\n * vault, which can be on the same chain or a different chain (cross-chain migration).\n *\n * @param params - The vault migrate settlement parameters\n * @returns A BuildSettlementRequest ready to be sent to the API\n */\nexport function prepareVaultMigrateSettlement(\n params: PrepareVaultMigrateSettlementParams,\n): BuildSettlementRequest {\n const {\n sourceVaultAddress,\n sourceVaultChainId,\n withdrawAmount,\n destVaultAddress,\n destVaultUnderlyingToken,\n destVaultChainId,\n recipientAddress,\n payer,\n note,\n dueDate,\n metadata: customMetadata,\n maxRuns,\n } = params;\n\n if (dueDate) {\n validateIso8601Date(dueDate);\n }\n\n const metadata = buildMetadataFromParams({\n amount: withdrawAmount,\n recipient: recipientAddress,\n token: destVaultUnderlyingToken ?? destVaultAddress,\n note,\n dueDate,\n payer: payer ?? undefined,\n customMetadata,\n });\n\n return {\n params: {\n vaultMigrate: {\n sourceVaultAddress,\n sourceVaultChainId,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n withdrawAmount: toHex(withdrawAmount),\n destVaultAddress,\n destVaultChainId,\n recipientAddress,\n },\n },\n payerAddress: payer ?? null,\n metadata,\n dueDate: dueDate ?? null,\n maxRuns: maxRuns ?? null,\n };\n}\n"],"mappings":"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"}