@otim/sdk-core 0.0.12 → 0.0.15

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.
@@ -96,6 +96,18 @@ async function createSettlementSigner(params) {
96
96
 
97
97
  //#endregion
98
98
  //#region src/clients/orchestration.ts
99
+ /**
100
+ * Extracts the settlement chain ID from a BuildSettlementRequest.
101
+ * Handles all settlement types: regular, vault deposit, and vault withdraw.
102
+ */
103
+ function extractSettlementChainId(request) {
104
+ const { params } = request;
105
+ if ("settlement" in params) return params.settlement.settlementChainId;
106
+ if ("settlementVaultDeposit" in params) return params.settlementVaultDeposit.vaultChainId;
107
+ if ("vaultWithdrawSettlement" in params) return params.vaultWithdrawSettlement.settlementChainId;
108
+ if ("vaultMigrate" in params) return params.vaultMigrate.destVaultChainId;
109
+ throw new Error("Unknown settlement type");
110
+ }
99
111
  var OrchestrationClient = class {
100
112
  constructor(apiClient, account, context) {
101
113
  this.apiClient = apiClient;
@@ -105,7 +117,7 @@ var OrchestrationClient = class {
105
117
  async create(settlementRequest) {
106
118
  assertServerContext(this.context);
107
119
  const buildResponse = (await this.apiClient.payments.buildSettlementOrchestration(settlementRequest)).data;
108
- const settlementChainId = "settlement" in settlementRequest.params ? settlementRequest.params.settlement.settlementChainId : settlementRequest.params.vaultWithdrawSettlement.settlementChainId;
120
+ const settlementChainId = extractSettlementChainId(settlementRequest);
109
121
  await this.activate(buildResponse, settlementChainId);
110
122
  return {
111
123
  requestId: buildResponse.requestId,
@@ -174,12 +186,12 @@ var OrchestrationClient = class {
174
186
  * Generates a default due date 30 days from now.
175
187
  * This is a standard payment term when no due date is specified.
176
188
  */
177
- function getDefaultDueDate() {
189
+ function getDefaultDueDate$3() {
178
190
  const date = /* @__PURE__ */ new Date();
179
191
  date.setDate(date.getDate() + 30);
180
192
  return date.toISOString();
181
193
  }
182
- function buildMetadataFromParams(params) {
194
+ function buildMetadataFromParams$3(params) {
183
195
  const { amount, recipient, token, note, dueDate, payer, customMetadata } = params;
184
196
  const metadataWithToken = {
185
197
  ...buildPaymentMetadata({
@@ -191,7 +203,7 @@ function buildMetadataFromParams(params) {
191
203
  name: "",
192
204
  address: payer ?? recipient
193
205
  },
194
- dueDate: dueDate || getDefaultDueDate()
206
+ dueDate: dueDate || getDefaultDueDate$3()
195
207
  }),
196
208
  token,
197
209
  source: "Manual",
@@ -206,7 +218,7 @@ function buildMetadataFromParams(params) {
206
218
  * Converts acceptedTokens from Record<number, Address[]> to Record<string,
207
219
  * Address[]> as required by the API schema.
208
220
  */
209
- function convertAcceptedTokensToStringKeys(acceptedTokens) {
221
+ function convertAcceptedTokensToStringKeys$1(acceptedTokens) {
210
222
  const result = {};
211
223
  for (const [chainId, tokens] of Object.entries(acceptedTokens)) result[String(chainId)] = tokens;
212
224
  return result;
@@ -214,7 +226,7 @@ function convertAcceptedTokensToStringKeys(acceptedTokens) {
214
226
  function prepareSettlement(params) {
215
227
  const { chainId, token, acceptedTokens, recipient, amount, payer, note, dueDate, metadata: customMetadata, maxRuns } = params;
216
228
  if (dueDate) validateIso8601Date(dueDate);
217
- const metadata = buildMetadataFromParams({
229
+ const metadata = buildMetadataFromParams$3({
218
230
  amount,
219
231
  recipient,
220
232
  token,
@@ -225,7 +237,7 @@ function prepareSettlement(params) {
225
237
  });
226
238
  return {
227
239
  params: { settlement: {
228
- acceptedTokens: convertAcceptedTokensToStringKeys(acceptedTokens),
240
+ acceptedTokens: convertAcceptedTokensToStringKeys$1(acceptedTokens),
229
241
  settlementChainId: chainId,
230
242
  settlementToken: token,
231
243
  settlementAmount: toHex(amount),
@@ -239,5 +251,225 @@ function prepareSettlement(params) {
239
251
  }
240
252
 
241
253
  //#endregion
242
- export { ConfigClient as a, DelegationClient as i, OrchestrationClient as n, AuthClient as o, createSettlementSigner as r, ActivityClient as s, prepareSettlement as t };
243
- //# sourceMappingURL=clients-CXg-xZcK.mjs.map
254
+ //#region src/clients/helpers/prepare-vault-withdraw-settlement.ts
255
+ /**
256
+ * Generates a default due date 30 days from now.
257
+ * This is a standard payment term when no due date is specified.
258
+ */
259
+ function getDefaultDueDate$2() {
260
+ const date = /* @__PURE__ */ new Date();
261
+ date.setDate(date.getDate() + 30);
262
+ return date.toISOString();
263
+ }
264
+ function buildMetadataFromParams$2(params) {
265
+ const { amount, recipient, token, note, dueDate, payer, customMetadata } = params;
266
+ const metadataWithToken = {
267
+ ...buildPaymentMetadata({
268
+ tokenSymbol: "",
269
+ amountInUSD: Number(amount) / 1e6,
270
+ fromAccountAddress: recipient,
271
+ note,
272
+ payer: {
273
+ name: "",
274
+ address: payer ?? recipient
275
+ },
276
+ dueDate: dueDate || getDefaultDueDate$2()
277
+ }),
278
+ token,
279
+ source: "Manual",
280
+ type: "PaymentRequest"
281
+ };
282
+ return customMetadata ? {
283
+ ...metadataWithToken,
284
+ ...customMetadata
285
+ } : metadataWithToken;
286
+ }
287
+ function prepareVaultWithdrawSettlement(params) {
288
+ const { vaultAddress, vaultUnderlyingToken, vaultChainId, settlementChainId, settlementToken, recipientAddress, withdrawAmount, payer, note, dueDate, metadata: customMetadata, maxRuns } = params;
289
+ if (dueDate) validateIso8601Date(dueDate);
290
+ const metadata = buildMetadataFromParams$2({
291
+ amount: withdrawAmount,
292
+ recipient: recipientAddress,
293
+ token: settlementToken,
294
+ note,
295
+ dueDate,
296
+ payer: payer ?? void 0,
297
+ customMetadata
298
+ });
299
+ return {
300
+ params: { vaultWithdrawSettlement: {
301
+ vaultAddress,
302
+ vaultUnderlyingToken,
303
+ vaultChainId,
304
+ settlementChainId,
305
+ settlementToken,
306
+ recipientAddress,
307
+ withdrawAmount: toHex(withdrawAmount)
308
+ } },
309
+ payerAddress: payer ?? null,
310
+ metadata,
311
+ dueDate: dueDate ?? null,
312
+ maxRuns: maxRuns ?? null
313
+ };
314
+ }
315
+
316
+ //#endregion
317
+ //#region src/clients/helpers/prepare-vault-deposit-settlement.ts
318
+ /**
319
+ * Generates a default due date 30 days from now.
320
+ * This is a standard payment term when no due date is specified.
321
+ */
322
+ function getDefaultDueDate$1() {
323
+ const date = /* @__PURE__ */ new Date();
324
+ date.setDate(date.getDate() + 30);
325
+ return date.toISOString();
326
+ }
327
+ function buildMetadataFromParams$1(params) {
328
+ const { amount, recipient, token, note, dueDate, payer, customMetadata } = params;
329
+ const metadataWithToken = {
330
+ ...buildPaymentMetadata({
331
+ tokenSymbol: "",
332
+ amountInUSD: Number(amount) / 1e6,
333
+ fromAccountAddress: recipient,
334
+ note,
335
+ payer: {
336
+ name: "",
337
+ address: payer ?? recipient
338
+ },
339
+ dueDate: dueDate || getDefaultDueDate$1()
340
+ }),
341
+ token,
342
+ source: "Manual",
343
+ type: "PaymentRequest"
344
+ };
345
+ return customMetadata ? {
346
+ ...metadataWithToken,
347
+ ...customMetadata
348
+ } : metadataWithToken;
349
+ }
350
+ /**
351
+ * Converts acceptedTokens from Record<number, Address[]> to Record<string,
352
+ * Address[]> as required by the API schema.
353
+ */
354
+ function convertAcceptedTokensToStringKeys(acceptedTokens) {
355
+ const result = {};
356
+ for (const [chainId, tokens] of Object.entries(acceptedTokens)) result[String(chainId)] = tokens;
357
+ return result;
358
+ }
359
+ /**
360
+ * Prepares a vault deposit settlement request.
361
+ *
362
+ * This creates a settlement that deposits funds into an ERC4626 vault.
363
+ * Funds can be collected from multiple chains (via acceptedTokens) and
364
+ * deposited into the vault on the specified chain.
365
+ *
366
+ * @param params - The vault deposit settlement parameters
367
+ * @returns A BuildSettlementRequest ready to be sent to the API
368
+ */
369
+ function prepareVaultDepositSettlement(params) {
370
+ const { acceptedTokens, vaultChainId, vaultAddress, vaultUnderlyingToken, depositAmount, recipientAddress, vaultMinTotalShares, payer, note, dueDate, metadata: customMetadata, maxRuns } = params;
371
+ if (dueDate) validateIso8601Date(dueDate);
372
+ const metadata = buildMetadataFromParams$1({
373
+ amount: depositAmount,
374
+ recipient: recipientAddress,
375
+ token: vaultUnderlyingToken,
376
+ note,
377
+ dueDate,
378
+ payer: payer ?? void 0,
379
+ customMetadata
380
+ });
381
+ return {
382
+ params: { settlementVaultDeposit: {
383
+ acceptedTokens: convertAcceptedTokensToStringKeys(acceptedTokens),
384
+ vaultChainId,
385
+ vaultAddress,
386
+ vaultUnderlyingToken,
387
+ depositAmount: toHex(depositAmount),
388
+ recipientAddress,
389
+ vaultMinTotalShares: toHex(vaultMinTotalShares)
390
+ } },
391
+ payerAddress: payer ?? null,
392
+ metadata,
393
+ dueDate: dueDate ?? null,
394
+ maxRuns: maxRuns ?? null
395
+ };
396
+ }
397
+
398
+ //#endregion
399
+ //#region src/clients/helpers/prepare-vault-migrate-settlement.ts
400
+ /**
401
+ * Generates a default due date 30 days from now.
402
+ * This is a standard payment term when no due date is specified.
403
+ */
404
+ function getDefaultDueDate() {
405
+ const date = /* @__PURE__ */ new Date();
406
+ date.setDate(date.getDate() + 30);
407
+ return date.toISOString();
408
+ }
409
+ function buildMetadataFromParams(params) {
410
+ const { amount, recipient, token, note, dueDate, payer, customMetadata } = params;
411
+ const metadataWithToken = {
412
+ ...buildPaymentMetadata({
413
+ tokenSymbol: "",
414
+ amountInUSD: Number(amount) / 1e6,
415
+ fromAccountAddress: recipient,
416
+ note,
417
+ payer: {
418
+ name: "",
419
+ address: payer ?? recipient
420
+ },
421
+ dueDate: dueDate || getDefaultDueDate()
422
+ }),
423
+ token,
424
+ source: "Manual",
425
+ type: "PaymentRequest"
426
+ };
427
+ return customMetadata ? {
428
+ ...metadataWithToken,
429
+ ...customMetadata
430
+ } : metadataWithToken;
431
+ }
432
+ /**
433
+ * Prepares a vault migrate settlement request.
434
+ *
435
+ * This creates a settlement that migrates funds between two ERC4626 vaults.
436
+ * Funds are withdrawn from the source vault and deposited into the destination
437
+ * vault, which can be on the same chain or a different chain (cross-chain migration).
438
+ *
439
+ * @param params - The vault migrate settlement parameters
440
+ * @returns A BuildSettlementRequest ready to be sent to the API
441
+ */
442
+ function prepareVaultMigrateSettlement(params) {
443
+ const { sourceVaultAddress, sourceVaultUnderlyingToken, sourceVaultChainId, withdrawAmount, destVaultAddress, destVaultUnderlyingToken, destVaultChainId, destVaultMinTotalShares, recipientAddress, payer, note, dueDate, metadata: customMetadata, maxRuns } = params;
444
+ if (dueDate) validateIso8601Date(dueDate);
445
+ const metadata = buildMetadataFromParams({
446
+ amount: withdrawAmount,
447
+ recipient: recipientAddress,
448
+ token: destVaultUnderlyingToken,
449
+ note,
450
+ dueDate,
451
+ payer: payer ?? void 0,
452
+ customMetadata
453
+ });
454
+ return {
455
+ params: { vaultMigrate: {
456
+ sourceVaultAddress,
457
+ sourceVaultUnderlyingToken,
458
+ sourceVaultChainId,
459
+ withdrawAmount: toHex(withdrawAmount),
460
+ destVaultAddress,
461
+ destVaultUnderlyingToken,
462
+ destVaultChainId,
463
+ destVaultMinTotalShares: toHex(destVaultMinTotalShares),
464
+ recipientAddress
465
+ } },
466
+ payerAddress: payer ?? null,
467
+ metadata,
468
+ dueDate: dueDate ?? null,
469
+ maxRuns: maxRuns ?? null
470
+ };
471
+ }
472
+
473
+ //#endregion
474
+ export { OrchestrationClient as a, ConfigClient as c, prepareSettlement as i, AuthClient as l, prepareVaultDepositSettlement as n, createSettlementSigner as o, prepareVaultWithdrawSettlement as r, DelegationClient as s, prepareVaultMigrateSettlement as t, ActivityClient as u };
475
+ //# sourceMappingURL=clients-DFvueC9X.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients-DFvueC9X.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 vaultUnderlyingToken: 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 vaultUnderlyingToken,\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 vaultUnderlyingToken,\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 /** The underlying token of the vault */\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 /** Minimum total shares required for the deposit to succeed */\n vaultMinTotalShares: bigint;\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 vaultMinTotalShares,\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,\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 vaultUnderlyingToken,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n depositAmount: toHex(depositAmount),\n recipientAddress,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n vaultMinTotalShares: toHex(vaultMinTotalShares),\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 /** The underlying token of the source vault */\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 /** The underlying token of the destination vault */\n destVaultUnderlyingToken: Address;\n /** Chain ID where the destination vault is deployed */\n destVaultChainId: SupportedChainId;\n /** Minimum total shares required for the deposit to succeed */\n destVaultMinTotalShares: bigint;\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 sourceVaultUnderlyingToken,\n sourceVaultChainId,\n withdrawAmount,\n destVaultAddress,\n destVaultUnderlyingToken,\n destVaultChainId,\n destVaultMinTotalShares,\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,\n note,\n dueDate,\n payer: payer ?? undefined,\n customMetadata,\n });\n\n return {\n params: {\n vaultMigrate: {\n sourceVaultAddress,\n sourceVaultUnderlyingToken,\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 destVaultUnderlyingToken,\n destVaultChainId,\n // @ts-expect-error -- TODO: fix this once we have the correct type definitions in @otim/utils\n destVaultMinTotalShares: toHex(destVaultMinTotalShares),\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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"}
@@ -0,0 +1,203 @@
1
+ import { c as Address$1 } from "./abi-DJLWbdqc.mjs";
2
+ import { s as UnifiedPaymentSigner, x as PublicClient } from "./index-D6ncjdSF.mjs";
3
+ import { o as OtimServerClientContext$1 } from "./index-Bii-p3Pv.mjs";
4
+ import { Nullable } from "@otim/utils/helpers";
5
+ import { OtimClientContext, OtimServerClientContext } from "@otim/sdk-core/context";
6
+ import { SupportedChainId } from "@otim/utils/chains";
7
+ import { PaymentRequestMetadata, PaymentResponseWithActionNames } from "@otim/utils/payments";
8
+ import { Address } from "@otim/utils/schemas";
9
+ import { APIClient, AuthLoginResponse, BuildSettlementRequest, BuildSettlementRequest as BuildSettlementRequest$1, DelegationCreateRequest, DelegationStatusRequest, DelegationStatusResponse, GetDelegateAddressRequest, GetDelegateAddressResponse, GetInstructionActivityRequest, GetInstructionActivityResponse, GetMaxPriorityFeePerGasEstimateRequest, GetMaxPriorityFeePerGasEstimateResponse, GetPaymentRequestsRequest, GetPaymentRequestsResponse, MeResponse, OrchestrationParams, PaginatedServiceResponse, PaymentRequestBuildRequest, PaymentRequestDetailsRequest, PaymentRequestDetailsResponse, ServiceResponse, SettlementParams, SettlementVaultDepositParams, VaultMigrateParams } from "@otim/utils/api";
10
+ import { OtimAccount } from "@otim/sdk-core/account";
11
+
12
+ //#region src/clients/activity.d.ts
13
+ declare class ActivityClient {
14
+ private readonly apiClient;
15
+ constructor(apiClient: APIClient);
16
+ getInstructionActivity(request: GetInstructionActivityRequest): Promise<GetInstructionActivityResponse>;
17
+ }
18
+ //#endregion
19
+ //#region src/clients/auth.d.ts
20
+ interface LoginOptions {
21
+ address: Address$1;
22
+ }
23
+ declare class AuthClient {
24
+ private readonly apiClient;
25
+ private readonly account;
26
+ private readonly context;
27
+ constructor(apiClient: APIClient, account: OtimAccount, context: OtimClientContext);
28
+ login({
29
+ address
30
+ }: LoginOptions): Promise<AuthLoginResponse>;
31
+ getCurrentUser(): Promise<MeResponse>;
32
+ }
33
+ //#endregion
34
+ //#region src/clients/config.d.ts
35
+ declare class ConfigClient {
36
+ private readonly apiClient;
37
+ constructor(apiClient: APIClient);
38
+ getMaxPriorityFeeEstimate({
39
+ chainId
40
+ }: GetMaxPriorityFeePerGasEstimateRequest): Promise<GetMaxPriorityFeePerGasEstimateResponse>;
41
+ }
42
+ //#endregion
43
+ //#region src/clients/delegation.d.ts
44
+ declare class DelegationClient {
45
+ private readonly apiClient;
46
+ constructor(apiClient: APIClient);
47
+ getDelegateAddress({
48
+ chainId
49
+ }: GetDelegateAddressRequest): Promise<GetDelegateAddressResponse>;
50
+ getDelegationStatus(options: DelegationStatusRequest): Promise<DelegationStatusResponse>;
51
+ createDelegation(delegationRequest: DelegationCreateRequest): Promise<void>;
52
+ }
53
+ //#endregion
54
+ //#region src/clients/orchestration.d.ts
55
+ interface CreateSettlementResponse {
56
+ requestId: string;
57
+ ephemeralWalletAddress: Address;
58
+ }
59
+ interface CreateRawConfig {
60
+ settlementChainId: number;
61
+ activate?: boolean;
62
+ }
63
+ declare class OrchestrationClient {
64
+ private readonly apiClient;
65
+ private readonly account;
66
+ private readonly context;
67
+ constructor(apiClient: APIClient, account: OtimAccount, context: OtimServerClientContext);
68
+ create(settlementRequest: BuildSettlementRequest): Promise<CreateSettlementResponse>;
69
+ createRaw(payload: PaymentRequestBuildRequest, config: CreateRawConfig): Promise<CreateSettlementResponse | PaymentResponseWithActionNames>;
70
+ getDetails(request: PaymentRequestDetailsRequest): Promise<ServiceResponse<PaymentRequestDetailsResponse>>;
71
+ list(request: GetPaymentRequestsRequest): Promise<PaginatedServiceResponse<GetPaymentRequestsResponse>>;
72
+ private activate;
73
+ private buildAndEnhanceSettlement;
74
+ private createPublicClient;
75
+ private fetchDelegateAddresses;
76
+ }
77
+ //#endregion
78
+ //#region src/clients/helpers/prepare-settlement.d.ts
79
+ interface PrepareSettlementParams {
80
+ amount: bigint;
81
+ chainId: SupportedChainId;
82
+ recipient: Address;
83
+ token: Address;
84
+ acceptedTokens: Record<number, Address[]>;
85
+ payer?: Nullable<Address>;
86
+ dueDate?: string;
87
+ metadata?: PaymentRequestMetadata;
88
+ note?: string;
89
+ maxRuns?: number;
90
+ }
91
+ declare function prepareSettlement(params: PrepareSettlementParams): BuildSettlementRequest$1;
92
+ //#endregion
93
+ //#region src/clients/helpers/prepare-vault-withdraw-settlement.d.ts
94
+ interface PrepareVaultWithdrawSettlementParams {
95
+ vaultAddress: Address;
96
+ vaultUnderlyingToken: Address;
97
+ vaultChainId: SupportedChainId;
98
+ settlementChainId: SupportedChainId;
99
+ settlementToken: Address;
100
+ recipientAddress: Address;
101
+ withdrawAmount: bigint;
102
+ payer?: Nullable<Address>;
103
+ dueDate?: string;
104
+ metadata?: PaymentRequestMetadata;
105
+ note?: string;
106
+ maxRuns?: number;
107
+ }
108
+ declare function prepareVaultWithdrawSettlement(params: PrepareVaultWithdrawSettlementParams): BuildSettlementRequest;
109
+ //#endregion
110
+ //#region src/clients/helpers/prepare-vault-deposit-settlement.d.ts
111
+ interface PrepareVaultDepositSettlementParams {
112
+ /** Map of chain IDs to accepted token addresses for payment */
113
+ acceptedTokens: Record<number, Address[]>;
114
+ /** Chain ID where the vault is deployed */
115
+ vaultChainId: SupportedChainId;
116
+ /** ERC4626 vault address to deposit into */
117
+ vaultAddress: Address;
118
+ /** The underlying token of the vault */
119
+ vaultUnderlyingToken: Address;
120
+ /** Amount to deposit in the vault's underlying token units */
121
+ depositAmount: bigint;
122
+ /** Address that will receive the vault shares */
123
+ recipientAddress: Address;
124
+ /** Minimum total shares required for the deposit to succeed */
125
+ vaultMinTotalShares: bigint;
126
+ /** Optional payer address */
127
+ payer?: Nullable<Address>;
128
+ /** Optional due date in ISO 8601 format */
129
+ dueDate?: string;
130
+ /** Optional custom metadata */
131
+ metadata?: PaymentRequestMetadata;
132
+ /** Optional note for the settlement */
133
+ note?: string;
134
+ /** Optional maximum number of execution runs */
135
+ maxRuns?: number;
136
+ }
137
+ /**
138
+ * Prepares a vault deposit settlement request.
139
+ *
140
+ * This creates a settlement that deposits funds into an ERC4626 vault.
141
+ * Funds can be collected from multiple chains (via acceptedTokens) and
142
+ * deposited into the vault on the specified chain.
143
+ *
144
+ * @param params - The vault deposit settlement parameters
145
+ * @returns A BuildSettlementRequest ready to be sent to the API
146
+ */
147
+ declare function prepareVaultDepositSettlement(params: PrepareVaultDepositSettlementParams): BuildSettlementRequest;
148
+ //#endregion
149
+ //#region src/clients/helpers/prepare-vault-migrate-settlement.d.ts
150
+ interface PrepareVaultMigrateSettlementParams {
151
+ /** Source vault address to withdraw from */
152
+ sourceVaultAddress: Address;
153
+ /** The underlying token of the source vault */
154
+ sourceVaultUnderlyingToken: Address;
155
+ /** Chain ID where the source vault is deployed */
156
+ sourceVaultChainId: SupportedChainId;
157
+ /** Amount to withdraw from the source vault in underlying token units */
158
+ withdrawAmount: bigint;
159
+ /** Destination vault address to deposit into */
160
+ destVaultAddress: Address;
161
+ /** The underlying token of the destination vault */
162
+ destVaultUnderlyingToken: Address;
163
+ /** Chain ID where the destination vault is deployed */
164
+ destVaultChainId: SupportedChainId;
165
+ /** Minimum total shares required for the deposit to succeed */
166
+ destVaultMinTotalShares: bigint;
167
+ /** Address that will receive the destination vault shares */
168
+ recipientAddress: Address;
169
+ /** Optional payer address */
170
+ payer?: Nullable<Address>;
171
+ /** Optional due date in ISO 8601 format */
172
+ dueDate?: string;
173
+ /** Optional custom metadata */
174
+ metadata?: PaymentRequestMetadata;
175
+ /** Optional note for the settlement */
176
+ note?: string;
177
+ /** Optional maximum number of execution runs */
178
+ maxRuns?: number;
179
+ }
180
+ /**
181
+ * Prepares a vault migrate settlement request.
182
+ *
183
+ * This creates a settlement that migrates funds between two ERC4626 vaults.
184
+ * Funds are withdrawn from the source vault and deposited into the destination
185
+ * vault, which can be on the same chain or a different chain (cross-chain migration).
186
+ *
187
+ * @param params - The vault migrate settlement parameters
188
+ * @returns A BuildSettlementRequest ready to be sent to the API
189
+ */
190
+ declare function prepareVaultMigrateSettlement(params: PrepareVaultMigrateSettlementParams): BuildSettlementRequest;
191
+ //#endregion
192
+ //#region src/clients/helpers/settlement-signer.d.ts
193
+ interface CreateSettlementSignerParams {
194
+ context: OtimServerClientContext$1;
195
+ buildResponse: PaymentResponseWithActionNames;
196
+ publicClient: PublicClient;
197
+ delegateAddressMap: Map<number, Address>;
198
+ }
199
+ type CreateSettlementSignerResult = Awaited<ReturnType<UnifiedPaymentSigner["signAll"]>>;
200
+ declare function createSettlementSigner(params: CreateSettlementSignerParams): Promise<CreateSettlementSignerResult>;
201
+ //#endregion
202
+ export { ActivityClient as C, LoginOptions as S, CreateSettlementResponse as _, prepareVaultMigrateSettlement as a, ConfigClient as b, prepareVaultDepositSettlement as c, BuildSettlementRequest$1 as d, OrchestrationParams as f, CreateRawConfig as g, prepareSettlement as h, VaultMigrateParams as i, PrepareVaultWithdrawSettlementParams as l, SettlementParams as m, createSettlementSigner as n, PrepareVaultDepositSettlementParams as o, PrepareSettlementParams as p, PrepareVaultMigrateSettlementParams as r, SettlementVaultDepositParams as s, CreateSettlementSignerParams as t, prepareVaultWithdrawSettlement as u, OrchestrationClient as v, AuthClient as x, DelegationClient as y };
203
+ //# sourceMappingURL=index-BXxyBVLr.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BXxyBVLr.d.mts","names":[],"sources":["../src/clients/activity.ts","../src/clients/auth.ts","../src/clients/config.ts","../src/clients/delegation.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","../src/clients/helpers/settlement-signer.ts"],"sourcesContent":[],"mappings":"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"}