@capxul/sdk 0.1.0-alpha.2 → 0.1.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/dist/{client-CweJSkaY.d.ts → client-BI863O0y.d.ts} +2 -24
- package/dist/{client-D-0KTn8D.d.cts → client-CwcnMbGv.d.cts} +2 -24
- package/dist/client.cjs +11 -285
- package/dist/client.d.cts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +11 -285
- package/dist/index.cjs +21 -285
- package/dist/index.d.cts +12 -5
- package/dist/index.d.ts +12 -5
- package/dist/index.js +21 -286
- package/dist/{types-75UokagF.d.ts → types-BE3tVIOI.d.ts} +1 -9
- package/dist/{types-DVWojoy4.d.cts → types-z4VLz9rS.d.cts} +1 -9
- package/dist/webhooks.d.cts +1 -1
- package/dist/webhooks.d.ts +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { S as Session, C as CapxulClient, A as AccountProvisionPersonalInput } from './client-
|
|
2
|
-
export { a as AccountsClient, b as ApiKeyCreateResult, c as ApiKeysClient, d as AuthClient, e as AuthSessionStore, B as BrowserCapxulConfig, f as CapxulAuthConfig, g as CapxulConfig, h as CapxulDataClient, i as CapxulFlowFactories, j as CapxulSigningConfig, D as DocumentsClient, E as ExternalAccountsClient, H as HttpTransport, L as LocalPrivateKeySignerProvider, M as MeClient, O as OperationsClient, k as OrgDocumentsClient, l as OrgPaymentsClient, m as OrgSafesClient, n as OrgTransfersClient, o as OrgTreasuryClient, p as OrgWithdrawalsClient, q as OrganizationsClient, P as PaymentsClient, r as SubAccountsClient, T as TransfersClient, s as TransportRuntime, t as TransportState, V as VirtualAccountsClient, u as VirtualCardsClient, W as WebhookEndpointCreateResult, v as WebhookEndpointsClient, w as WebhookEventsClient, x as WithdrawalsClient, y as createCapxulClient, z as makeHttpTransport } from './client-
|
|
1
|
+
import { S as Session, C as CapxulClient, A as AccountProvisionPersonalInput } from './client-CwcnMbGv.cjs';
|
|
2
|
+
export { a as AccountsClient, b as ApiKeyCreateResult, c as ApiKeysClient, d as AuthClient, e as AuthSessionStore, B as BrowserCapxulConfig, f as CapxulAuthConfig, g as CapxulConfig, h as CapxulDataClient, i as CapxulFlowFactories, j as CapxulSigningConfig, D as DocumentsClient, E as ExternalAccountsClient, H as HttpTransport, L as LocalPrivateKeySignerProvider, M as MeClient, O as OperationsClient, k as OrgDocumentsClient, l as OrgPaymentsClient, m as OrgSafesClient, n as OrgTransfersClient, o as OrgTreasuryClient, p as OrgWithdrawalsClient, q as OrganizationsClient, P as PaymentsClient, r as SubAccountsClient, T as TransfersClient, s as TransportRuntime, t as TransportState, V as VirtualAccountsClient, u as VirtualCardsClient, W as WebhookEndpointCreateResult, v as WebhookEndpointsClient, w as WebhookEventsClient, x as WithdrawalsClient, y as createCapxulClient, z as makeHttpTransport } from './client-CwcnMbGv.cjs';
|
|
3
3
|
import * as xstate from 'xstate';
|
|
4
4
|
import { E as Email, U as Username, O as OperationId, N as NextAction } from './next-action-DkrwXYay.cjs';
|
|
5
5
|
export { A as AccountId, a as ApiKeyId, B as BalanceLedgerEntryId, C as CorrelationId, D as DocumentId, b as ExternalAccountId, K as KybProfileId, c as KycProfileId, M as MemberId, d as OrganizationId, P as PaymentId, e as PhoneNumber, S as SafeId, f as SubAccountId, T as TransactionIntentId, g as TransferId, h as TreasuryId, V as VirtualAccountId, i as VirtualCardId, W as WebhookEndpointId, j as WebhookEventId, k as WithdrawalId, t as toAccountId, l as toApiKeyId, m as toBalanceLedgerEntryId, n as toDocumentId, o as toEmail, p as toExternalAccountId, q as toKybProfileId, r as toKycProfileId, s as toMemberId, u as toOperationId, v as toOrganizationId, w as toPaymentId, x as toPhoneNumber, y as toSafeId, z as toSubAccountId, F as toTransferId, G as toTreasuryId, H as toUsername, I as toVirtualAccountId, J as toVirtualCardId, L as toWebhookEndpointId, Q as toWebhookEventId, R as toWithdrawalId } from './next-action-DkrwXYay.cjs';
|
|
6
6
|
import { C as CapxulError$1, a as CapxulErrorCode$1 } from './errors-GgKrSUKp.cjs';
|
|
7
7
|
export { b as CapxulErrorDetails, c as CapxulErrorEnvelope, d as CapxulResult } from './errors-GgKrSUKp.cjs';
|
|
8
|
-
import { A as Account } from './types-
|
|
9
|
-
export { a as AccountLookupResult, b as ApiKey, c as ApiKeyEnvironment, d as ApiKeyType, B as BalanceLedgerEntry, e as BankStatementDocument, C as CreatePaymentResult, f as CreateTransferResult, g as CreateWithdrawalResult, D as Document, E as ExternalAccount, h as ExternalAccountKind, I as InvoiceDocument, K as KybProfile, i as KycProfile, j as KycUploadDocument, L as List, M as Member, k as Money, O as Operation, l as OperationStatus, m as OperationSummary, n as Organization, P as PageInfo, o as Payment, p as PaymentParty, q as PaymentStatus, r as PayrollRunDocument, s as PayrollScheduleDocument, R as ReceiptDocument, S as Safe, t as Scope, u as Settlement, v as SubAccount, w as SubAccountOwnerKind, T as TaxFormDocument, x as TimestampIso, y as Transfer, z as TransferCustody, F as TransferEndpoint, G as TransferFx, H as TransferStatus, J as Treasury, U as UserIdentifier, V as VirtualAccount, N as VirtualAccountOwnerKind, Q as VirtualCard, W as VirtualCardLimits, X as VirtualCardOwnerKind, Y as WebhookEndpoint, Z as WebhookEvent, _ as Withdrawal, $ as WithdrawalStatus } from './types-
|
|
8
|
+
import { A as Account } from './types-z4VLz9rS.cjs';
|
|
9
|
+
export { a as AccountLookupResult, b as ApiKey, c as ApiKeyEnvironment, d as ApiKeyType, B as BalanceLedgerEntry, e as BankStatementDocument, C as CreatePaymentResult, f as CreateTransferResult, g as CreateWithdrawalResult, D as Document, E as ExternalAccount, h as ExternalAccountKind, I as InvoiceDocument, K as KybProfile, i as KycProfile, j as KycUploadDocument, L as List, M as Member, k as Money, O as Operation, l as OperationStatus, m as OperationSummary, n as Organization, P as PageInfo, o as Payment, p as PaymentParty, q as PaymentStatus, r as PayrollRunDocument, s as PayrollScheduleDocument, R as ReceiptDocument, S as Safe, t as Scope, u as Settlement, v as SubAccount, w as SubAccountOwnerKind, T as TaxFormDocument, x as TimestampIso, y as Transfer, z as TransferCustody, F as TransferEndpoint, G as TransferFx, H as TransferStatus, J as Treasury, U as UserIdentifier, V as VirtualAccount, N as VirtualAccountOwnerKind, Q as VirtualCard, W as VirtualCardLimits, X as VirtualCardOwnerKind, Y as WebhookEndpoint, Z as WebhookEvent, _ as Withdrawal, $ as WithdrawalStatus } from './types-z4VLz9rS.cjs';
|
|
10
10
|
import { Account as Account$1 } from 'viem';
|
|
11
11
|
export { WebhookVerificationOptions, WebhookVerificationResult, verifyWebhook } from './webhooks.cjs';
|
|
12
12
|
import '@repo/api-contract/gen/types';
|
|
@@ -500,6 +500,13 @@ declare function matchAction<A extends NextAction, R>(action: A, handlers: {
|
|
|
500
500
|
}>) => R;
|
|
501
501
|
}): R;
|
|
502
502
|
|
|
503
|
+
/**
|
|
504
|
+
* Go-style error handling for async calls.
|
|
505
|
+
* Returns [error, null] on failure, [null, value] on success.
|
|
506
|
+
* Pure utility — no side effects, no reporter.
|
|
507
|
+
*/
|
|
508
|
+
declare function tryCatch<T>(promise: Promise<T>): Promise<[Error, null] | [null, T]>;
|
|
509
|
+
|
|
503
510
|
/**
|
|
504
511
|
* Convenience constructor for a viem `Account` backed by a raw private
|
|
505
512
|
* key — the CLI / server-side signer per CANON.md §4.28.
|
|
@@ -512,4 +519,4 @@ declare function matchAction<A extends NextAction, R>(action: A, handlers: {
|
|
|
512
519
|
*/
|
|
513
520
|
declare function createLocalSigner(privateKey: `0x${string}`): Account$1;
|
|
514
521
|
|
|
515
|
-
export { Account, AccountProvisionPersonalInput, type AuthFlowContext, type AuthFlowError, type AuthFlowEvent, CapxulClient, CapxulError$1 as CapxulError, CapxulErrorCode$1 as CapxulErrorCode, Email, NextAction, type OnboardingFlowContext, type OnboardingFlowError, type OnboardingFlowEvent, type OnboardingProfileInput, type OnboardingSubjectKind, OperationId, type ProvisioningFlowContext, type ProvisioningFlowError, type ProvisioningFlowEvent, type ProvisioningFlowInput, type ProvisioningFlowOutput, Session, Username, createAuthFlowMachine, createLocalSigner, createOnboardingFlowMachine, createProvisioningMachine as createProvisioningFlowMachine, matchAction, matchError, matchStatus };
|
|
522
|
+
export { Account, AccountProvisionPersonalInput, type AuthFlowContext, type AuthFlowError, type AuthFlowEvent, CapxulClient, CapxulError$1 as CapxulError, CapxulErrorCode$1 as CapxulErrorCode, Email, NextAction, type OnboardingFlowContext, type OnboardingFlowError, type OnboardingFlowEvent, type OnboardingProfileInput, type OnboardingSubjectKind, OperationId, type ProvisioningFlowContext, type ProvisioningFlowError, type ProvisioningFlowEvent, type ProvisioningFlowInput, type ProvisioningFlowOutput, Session, Username, createAuthFlowMachine, createLocalSigner, createOnboardingFlowMachine, createProvisioningMachine as createProvisioningFlowMachine, matchAction, matchError, matchStatus, tryCatch };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { S as Session, C as CapxulClient, A as AccountProvisionPersonalInput } from './client-
|
|
2
|
-
export { a as AccountsClient, b as ApiKeyCreateResult, c as ApiKeysClient, d as AuthClient, e as AuthSessionStore, B as BrowserCapxulConfig, f as CapxulAuthConfig, g as CapxulConfig, h as CapxulDataClient, i as CapxulFlowFactories, j as CapxulSigningConfig, D as DocumentsClient, E as ExternalAccountsClient, H as HttpTransport, L as LocalPrivateKeySignerProvider, M as MeClient, O as OperationsClient, k as OrgDocumentsClient, l as OrgPaymentsClient, m as OrgSafesClient, n as OrgTransfersClient, o as OrgTreasuryClient, p as OrgWithdrawalsClient, q as OrganizationsClient, P as PaymentsClient, r as SubAccountsClient, T as TransfersClient, s as TransportRuntime, t as TransportState, V as VirtualAccountsClient, u as VirtualCardsClient, W as WebhookEndpointCreateResult, v as WebhookEndpointsClient, w as WebhookEventsClient, x as WithdrawalsClient, y as createCapxulClient, z as makeHttpTransport } from './client-
|
|
1
|
+
import { S as Session, C as CapxulClient, A as AccountProvisionPersonalInput } from './client-BI863O0y.js';
|
|
2
|
+
export { a as AccountsClient, b as ApiKeyCreateResult, c as ApiKeysClient, d as AuthClient, e as AuthSessionStore, B as BrowserCapxulConfig, f as CapxulAuthConfig, g as CapxulConfig, h as CapxulDataClient, i as CapxulFlowFactories, j as CapxulSigningConfig, D as DocumentsClient, E as ExternalAccountsClient, H as HttpTransport, L as LocalPrivateKeySignerProvider, M as MeClient, O as OperationsClient, k as OrgDocumentsClient, l as OrgPaymentsClient, m as OrgSafesClient, n as OrgTransfersClient, o as OrgTreasuryClient, p as OrgWithdrawalsClient, q as OrganizationsClient, P as PaymentsClient, r as SubAccountsClient, T as TransfersClient, s as TransportRuntime, t as TransportState, V as VirtualAccountsClient, u as VirtualCardsClient, W as WebhookEndpointCreateResult, v as WebhookEndpointsClient, w as WebhookEventsClient, x as WithdrawalsClient, y as createCapxulClient, z as makeHttpTransport } from './client-BI863O0y.js';
|
|
3
3
|
import * as xstate from 'xstate';
|
|
4
4
|
import { E as Email, U as Username, O as OperationId, N as NextAction } from './next-action-DkrwXYay.js';
|
|
5
5
|
export { A as AccountId, a as ApiKeyId, B as BalanceLedgerEntryId, C as CorrelationId, D as DocumentId, b as ExternalAccountId, K as KybProfileId, c as KycProfileId, M as MemberId, d as OrganizationId, P as PaymentId, e as PhoneNumber, S as SafeId, f as SubAccountId, T as TransactionIntentId, g as TransferId, h as TreasuryId, V as VirtualAccountId, i as VirtualCardId, W as WebhookEndpointId, j as WebhookEventId, k as WithdrawalId, t as toAccountId, l as toApiKeyId, m as toBalanceLedgerEntryId, n as toDocumentId, o as toEmail, p as toExternalAccountId, q as toKybProfileId, r as toKycProfileId, s as toMemberId, u as toOperationId, v as toOrganizationId, w as toPaymentId, x as toPhoneNumber, y as toSafeId, z as toSubAccountId, F as toTransferId, G as toTreasuryId, H as toUsername, I as toVirtualAccountId, J as toVirtualCardId, L as toWebhookEndpointId, Q as toWebhookEventId, R as toWithdrawalId } from './next-action-DkrwXYay.js';
|
|
6
6
|
import { C as CapxulError$1, a as CapxulErrorCode$1 } from './errors-QHD5Tlok.js';
|
|
7
7
|
export { b as CapxulErrorDetails, c as CapxulErrorEnvelope, d as CapxulResult } from './errors-QHD5Tlok.js';
|
|
8
|
-
import { A as Account } from './types-
|
|
9
|
-
export { a as AccountLookupResult, b as ApiKey, c as ApiKeyEnvironment, d as ApiKeyType, B as BalanceLedgerEntry, e as BankStatementDocument, C as CreatePaymentResult, f as CreateTransferResult, g as CreateWithdrawalResult, D as Document, E as ExternalAccount, h as ExternalAccountKind, I as InvoiceDocument, K as KybProfile, i as KycProfile, j as KycUploadDocument, L as List, M as Member, k as Money, O as Operation, l as OperationStatus, m as OperationSummary, n as Organization, P as PageInfo, o as Payment, p as PaymentParty, q as PaymentStatus, r as PayrollRunDocument, s as PayrollScheduleDocument, R as ReceiptDocument, S as Safe, t as Scope, u as Settlement, v as SubAccount, w as SubAccountOwnerKind, T as TaxFormDocument, x as TimestampIso, y as Transfer, z as TransferCustody, F as TransferEndpoint, G as TransferFx, H as TransferStatus, J as Treasury, U as UserIdentifier, V as VirtualAccount, N as VirtualAccountOwnerKind, Q as VirtualCard, W as VirtualCardLimits, X as VirtualCardOwnerKind, Y as WebhookEndpoint, Z as WebhookEvent, _ as Withdrawal, $ as WithdrawalStatus } from './types-
|
|
8
|
+
import { A as Account } from './types-BE3tVIOI.js';
|
|
9
|
+
export { a as AccountLookupResult, b as ApiKey, c as ApiKeyEnvironment, d as ApiKeyType, B as BalanceLedgerEntry, e as BankStatementDocument, C as CreatePaymentResult, f as CreateTransferResult, g as CreateWithdrawalResult, D as Document, E as ExternalAccount, h as ExternalAccountKind, I as InvoiceDocument, K as KybProfile, i as KycProfile, j as KycUploadDocument, L as List, M as Member, k as Money, O as Operation, l as OperationStatus, m as OperationSummary, n as Organization, P as PageInfo, o as Payment, p as PaymentParty, q as PaymentStatus, r as PayrollRunDocument, s as PayrollScheduleDocument, R as ReceiptDocument, S as Safe, t as Scope, u as Settlement, v as SubAccount, w as SubAccountOwnerKind, T as TaxFormDocument, x as TimestampIso, y as Transfer, z as TransferCustody, F as TransferEndpoint, G as TransferFx, H as TransferStatus, J as Treasury, U as UserIdentifier, V as VirtualAccount, N as VirtualAccountOwnerKind, Q as VirtualCard, W as VirtualCardLimits, X as VirtualCardOwnerKind, Y as WebhookEndpoint, Z as WebhookEvent, _ as Withdrawal, $ as WithdrawalStatus } from './types-BE3tVIOI.js';
|
|
10
10
|
import { Account as Account$1 } from 'viem';
|
|
11
11
|
export { WebhookVerificationOptions, WebhookVerificationResult, verifyWebhook } from './webhooks.js';
|
|
12
12
|
import '@repo/api-contract/gen/types';
|
|
@@ -500,6 +500,13 @@ declare function matchAction<A extends NextAction, R>(action: A, handlers: {
|
|
|
500
500
|
}>) => R;
|
|
501
501
|
}): R;
|
|
502
502
|
|
|
503
|
+
/**
|
|
504
|
+
* Go-style error handling for async calls.
|
|
505
|
+
* Returns [error, null] on failure, [null, value] on success.
|
|
506
|
+
* Pure utility — no side effects, no reporter.
|
|
507
|
+
*/
|
|
508
|
+
declare function tryCatch<T>(promise: Promise<T>): Promise<[Error, null] | [null, T]>;
|
|
509
|
+
|
|
503
510
|
/**
|
|
504
511
|
* Convenience constructor for a viem `Account` backed by a raw private
|
|
505
512
|
* key — the CLI / server-side signer per CANON.md §4.28.
|
|
@@ -512,4 +519,4 @@ declare function matchAction<A extends NextAction, R>(action: A, handlers: {
|
|
|
512
519
|
*/
|
|
513
520
|
declare function createLocalSigner(privateKey: `0x${string}`): Account$1;
|
|
514
521
|
|
|
515
|
-
export { Account, AccountProvisionPersonalInput, type AuthFlowContext, type AuthFlowError, type AuthFlowEvent, CapxulClient, CapxulError$1 as CapxulError, CapxulErrorCode$1 as CapxulErrorCode, Email, NextAction, type OnboardingFlowContext, type OnboardingFlowError, type OnboardingFlowEvent, type OnboardingProfileInput, type OnboardingSubjectKind, OperationId, type ProvisioningFlowContext, type ProvisioningFlowError, type ProvisioningFlowEvent, type ProvisioningFlowInput, type ProvisioningFlowOutput, Session, Username, createAuthFlowMachine, createLocalSigner, createOnboardingFlowMachine, createProvisioningMachine as createProvisioningFlowMachine, matchAction, matchError, matchStatus };
|
|
522
|
+
export { Account, AccountProvisionPersonalInput, type AuthFlowContext, type AuthFlowError, type AuthFlowEvent, CapxulClient, CapxulError$1 as CapxulError, CapxulErrorCode$1 as CapxulErrorCode, Email, NextAction, type OnboardingFlowContext, type OnboardingFlowError, type OnboardingFlowEvent, type OnboardingProfileInput, type OnboardingSubjectKind, OperationId, type ProvisioningFlowContext, type ProvisioningFlowError, type ProvisioningFlowEvent, type ProvisioningFlowInput, type ProvisioningFlowOutput, Session, Username, createAuthFlowMachine, createLocalSigner, createOnboardingFlowMachine, createProvisioningMachine as createProvisioningFlowMachine, matchAction, matchError, matchStatus, tryCatch };
|
package/dist/index.js
CHANGED
|
@@ -1100,298 +1100,24 @@ function createOrgTransfersClient() {
|
|
|
1100
1100
|
cancel: async () => stub("organizations.transfers.cancel")
|
|
1101
1101
|
};
|
|
1102
1102
|
}
|
|
1103
|
-
|
|
1104
|
-
|
|
1103
|
+
|
|
1104
|
+
// src/core/withdrawals.ts
|
|
1105
|
+
function createWithdrawalsClient() {
|
|
1105
1106
|
return {
|
|
1106
|
-
create: async (
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
}
|
|
1110
|
-
let created = null;
|
|
1111
|
-
let submitted = null;
|
|
1112
|
-
try {
|
|
1113
|
-
created = await config.data.mutation(
|
|
1114
|
-
api.withdrawals.mutations.create,
|
|
1115
|
-
{
|
|
1116
|
-
amount: input.amount,
|
|
1117
|
-
destination: {
|
|
1118
|
-
externalAccountId: input.destination.externalAccountId,
|
|
1119
|
-
kind: input.destination.kind
|
|
1120
|
-
},
|
|
1121
|
-
source: input.source,
|
|
1122
|
-
reference: input.reference,
|
|
1123
|
-
idempotencyKey: input.idempotencyKey
|
|
1124
|
-
}
|
|
1125
|
-
);
|
|
1126
|
-
if (!created) {
|
|
1127
|
-
return [
|
|
1128
|
-
new CapxulError({
|
|
1129
|
-
code: "NETWORK_ERROR",
|
|
1130
|
-
message: "withdrawals.create returned no withdrawal resource"
|
|
1131
|
-
}),
|
|
1132
|
-
null
|
|
1133
|
-
];
|
|
1134
|
-
}
|
|
1135
|
-
if (created.status !== "processing" || created.operation.status !== "processing") {
|
|
1136
|
-
return [null, created];
|
|
1137
|
-
}
|
|
1138
|
-
if (input.destination.kind !== "evm") {
|
|
1139
|
-
return [null, created];
|
|
1140
|
-
}
|
|
1141
|
-
if (!config.signer || !config.signing) {
|
|
1142
|
-
return [null, created];
|
|
1143
|
-
}
|
|
1144
|
-
if (!EVM_ADDRESS_RE.test(input.destination.externalAccountId)) {
|
|
1145
|
-
throw new CapxulError({
|
|
1146
|
-
code: "INVALID_INPUT",
|
|
1147
|
-
message: "destination.externalAccountId must be a 0x-prefixed EVM address while external_accounts resolution is pending (slice 1).",
|
|
1148
|
-
details: { field: "destination.externalAccountId" }
|
|
1149
|
-
});
|
|
1150
|
-
}
|
|
1151
|
-
const currentSigner = await config.data.query(
|
|
1152
|
-
api.safe.queries.getMySignerAddress,
|
|
1153
|
-
{}
|
|
1154
|
-
);
|
|
1155
|
-
if (!currentSigner?.address) {
|
|
1156
|
-
throw new CapxulError({
|
|
1157
|
-
code: "PERMISSION_DENIED",
|
|
1158
|
-
message: "No signer is registered for the authenticated account.",
|
|
1159
|
-
details: { withdrawalId: created.id }
|
|
1160
|
-
});
|
|
1161
|
-
}
|
|
1162
|
-
if (getAddress(currentSigner.address) !== getAddress(config.signer.address)) {
|
|
1163
|
-
throw new CapxulError({
|
|
1164
|
-
code: "PERMISSION_DENIED",
|
|
1165
|
-
message: "Configured signer does not match the authenticated account signer.",
|
|
1166
|
-
details: {
|
|
1167
|
-
withdrawalId: created.id,
|
|
1168
|
-
expectedSignerAddress: currentSigner.address,
|
|
1169
|
-
actualSignerAddress: config.signer.address
|
|
1170
|
-
}
|
|
1171
|
-
});
|
|
1172
|
-
}
|
|
1173
|
-
const submission = await config.data.query(
|
|
1174
|
-
api.withdrawals.queries.prepareSubmission,
|
|
1175
|
-
{ withdrawalId: created.id }
|
|
1176
|
-
);
|
|
1177
|
-
if (!submission?.externalAccountId) {
|
|
1178
|
-
throw new CapxulError({
|
|
1179
|
-
code: "NETWORK_ERROR",
|
|
1180
|
-
message: "withdrawals.prepareSubmission returned no destination.",
|
|
1181
|
-
details: { withdrawalId: created.id }
|
|
1182
|
-
});
|
|
1183
|
-
}
|
|
1184
|
-
const transfer = await transferAsOwner(
|
|
1185
|
-
{
|
|
1186
|
-
signer: config.signer,
|
|
1187
|
-
signing: config.signing
|
|
1188
|
-
},
|
|
1189
|
-
{
|
|
1190
|
-
tokenAddress: resolvePaymentTokenAddress(submission.amount.currency),
|
|
1191
|
-
recipientAddress: submission.externalAccountId,
|
|
1192
|
-
amount: toTokenUnits(submission.amount.value, 6)
|
|
1193
|
-
}
|
|
1194
|
-
);
|
|
1195
|
-
if (!transfer.success) {
|
|
1196
|
-
throw new CapxulError({
|
|
1197
|
-
code: "NETWORK_ERROR",
|
|
1198
|
-
message: "Bundler submission did not succeed.",
|
|
1199
|
-
details: {
|
|
1200
|
-
withdrawalId: created.id,
|
|
1201
|
-
txHash: transfer.txHash,
|
|
1202
|
-
userOpHash: transfer.userOpHash
|
|
1203
|
-
}
|
|
1204
|
-
});
|
|
1205
|
-
}
|
|
1206
|
-
submitted = {
|
|
1207
|
-
txHash: transfer.txHash,
|
|
1208
|
-
userOpHash: transfer.userOpHash
|
|
1209
|
-
};
|
|
1210
|
-
await config.data.mutation(
|
|
1211
|
-
api.withdrawals.mutations.recordSubmitted,
|
|
1212
|
-
{
|
|
1213
|
-
withdrawalId: created.id,
|
|
1214
|
-
txHash: transfer.txHash,
|
|
1215
|
-
userOpHash: transfer.userOpHash
|
|
1216
|
-
}
|
|
1217
|
-
);
|
|
1218
|
-
return [null, created];
|
|
1219
|
-
} catch (cause) {
|
|
1220
|
-
const error = mapCreateError2(fromConvexError(cause));
|
|
1221
|
-
if (created?.id && created.status === "processing" && !submitted) {
|
|
1222
|
-
await bestEffortMarkFailed2({ data: config.data }, created.id, error);
|
|
1223
|
-
}
|
|
1224
|
-
if (submitted && created?.id) {
|
|
1225
|
-
return [
|
|
1226
|
-
new CapxulError({
|
|
1227
|
-
code: "NETWORK_ERROR",
|
|
1228
|
-
message: "Withdrawal was submitted on-chain, but backend submission tracking failed.",
|
|
1229
|
-
cause,
|
|
1230
|
-
details: {
|
|
1231
|
-
withdrawalId: created.id,
|
|
1232
|
-
txHash: submitted.txHash,
|
|
1233
|
-
userOpHash: submitted.userOpHash
|
|
1234
|
-
}
|
|
1235
|
-
}),
|
|
1236
|
-
null
|
|
1237
|
-
];
|
|
1238
|
-
}
|
|
1239
|
-
return [error, null];
|
|
1240
|
-
}
|
|
1241
|
-
},
|
|
1242
|
-
retrieve: async (withdrawalId) => {
|
|
1243
|
-
if (!config.data) {
|
|
1244
|
-
return stub("withdrawals.retrieve");
|
|
1245
|
-
}
|
|
1246
|
-
try {
|
|
1247
|
-
const withdrawal = await config.data.query(
|
|
1248
|
-
api.withdrawals.queries.retrieve,
|
|
1249
|
-
{ withdrawalId }
|
|
1250
|
-
);
|
|
1251
|
-
if (!withdrawal) {
|
|
1252
|
-
return [
|
|
1253
|
-
new CapxulError({
|
|
1254
|
-
code: "NOT_FOUND",
|
|
1255
|
-
message: `withdrawal ${withdrawalId} not found`
|
|
1256
|
-
}),
|
|
1257
|
-
null
|
|
1258
|
-
];
|
|
1259
|
-
}
|
|
1260
|
-
return [null, withdrawal];
|
|
1261
|
-
} catch (cause) {
|
|
1262
|
-
return [
|
|
1263
|
-
fromConvexError(cause),
|
|
1264
|
-
null
|
|
1265
|
-
];
|
|
1266
|
-
}
|
|
1267
|
-
},
|
|
1268
|
-
list: async (input) => {
|
|
1269
|
-
if (!config.data) {
|
|
1270
|
-
return stub("withdrawals.list");
|
|
1271
|
-
}
|
|
1272
|
-
try {
|
|
1273
|
-
const result = await config.data.query(
|
|
1274
|
-
api.withdrawals.queries.list,
|
|
1275
|
-
{
|
|
1276
|
-
limit: input?.limit,
|
|
1277
|
-
cursor: input?.cursor
|
|
1278
|
-
}
|
|
1279
|
-
);
|
|
1280
|
-
return [null, result];
|
|
1281
|
-
} catch (cause) {
|
|
1282
|
-
return [
|
|
1283
|
-
fromConvexError(cause),
|
|
1284
|
-
null
|
|
1285
|
-
];
|
|
1286
|
-
}
|
|
1287
|
-
}
|
|
1107
|
+
create: async () => stub("withdrawals.create"),
|
|
1108
|
+
retrieve: async () => stub("withdrawals.retrieve"),
|
|
1109
|
+
list: async () => stub("withdrawals.list")
|
|
1288
1110
|
};
|
|
1289
1111
|
}
|
|
1290
|
-
function createOrgWithdrawalsClient(
|
|
1112
|
+
function createOrgWithdrawalsClient() {
|
|
1291
1113
|
return {
|
|
1292
|
-
// Slice 1 ships personal-scope only end-to-end; org-scope create
|
|
1293
|
-
// remains stubbed pending org-scoped backend mutation. List + retrieve
|
|
1294
|
-
// are wired through the org-aware query.
|
|
1295
1114
|
create: async () => stub(
|
|
1296
1115
|
"organizations.withdrawals.create"
|
|
1297
1116
|
),
|
|
1298
|
-
retrieve: async (
|
|
1299
|
-
|
|
1300
|
-
return stub(
|
|
1301
|
-
"organizations.withdrawals.retrieve"
|
|
1302
|
-
);
|
|
1303
|
-
}
|
|
1304
|
-
try {
|
|
1305
|
-
const withdrawal = await config.data.query(
|
|
1306
|
-
api.withdrawals.queries.retrieve,
|
|
1307
|
-
{ withdrawalId: input.withdrawalId }
|
|
1308
|
-
);
|
|
1309
|
-
if (!withdrawal) {
|
|
1310
|
-
return [
|
|
1311
|
-
new CapxulError({
|
|
1312
|
-
code: "NOT_FOUND",
|
|
1313
|
-
message: `withdrawal ${input.withdrawalId} not found`
|
|
1314
|
-
}),
|
|
1315
|
-
null
|
|
1316
|
-
];
|
|
1317
|
-
}
|
|
1318
|
-
const ownerCheck = withdrawal.owner;
|
|
1319
|
-
if (ownerCheck?.type !== "organization" || ownerCheck.id !== input.organizationId) {
|
|
1320
|
-
return [
|
|
1321
|
-
new CapxulError({
|
|
1322
|
-
code: "NOT_FOUND",
|
|
1323
|
-
message: `withdrawal ${input.withdrawalId} does not belong to organization ${input.organizationId}`
|
|
1324
|
-
}),
|
|
1325
|
-
null
|
|
1326
|
-
];
|
|
1327
|
-
}
|
|
1328
|
-
return [null, withdrawal];
|
|
1329
|
-
} catch (cause) {
|
|
1330
|
-
return [
|
|
1331
|
-
fromConvexError(cause),
|
|
1332
|
-
null
|
|
1333
|
-
];
|
|
1334
|
-
}
|
|
1335
|
-
},
|
|
1336
|
-
list: async (input) => {
|
|
1337
|
-
if (!config.data) {
|
|
1338
|
-
return stub(
|
|
1339
|
-
"organizations.withdrawals.list"
|
|
1340
|
-
);
|
|
1341
|
-
}
|
|
1342
|
-
try {
|
|
1343
|
-
const result = await config.data.query(
|
|
1344
|
-
api.withdrawals.queries.listOrg,
|
|
1345
|
-
{
|
|
1346
|
-
organizationId: input.organizationId,
|
|
1347
|
-
limit: input.limit,
|
|
1348
|
-
cursor: input.cursor
|
|
1349
|
-
}
|
|
1350
|
-
);
|
|
1351
|
-
return [null, result];
|
|
1352
|
-
} catch (cause) {
|
|
1353
|
-
return [
|
|
1354
|
-
fromConvexError(cause),
|
|
1355
|
-
null
|
|
1356
|
-
];
|
|
1357
|
-
}
|
|
1358
|
-
}
|
|
1117
|
+
retrieve: async () => stub("organizations.withdrawals.retrieve"),
|
|
1118
|
+
list: async () => stub("organizations.withdrawals.list")
|
|
1359
1119
|
};
|
|
1360
1120
|
}
|
|
1361
|
-
async function bestEffortMarkFailed2(config, withdrawalId, error) {
|
|
1362
|
-
try {
|
|
1363
|
-
await config.data.mutation(api.withdrawals.mutations.markFailed, {
|
|
1364
|
-
withdrawalId,
|
|
1365
|
-
errorCode: error.code,
|
|
1366
|
-
errorMessage: error.message
|
|
1367
|
-
});
|
|
1368
|
-
} catch {
|
|
1369
|
-
}
|
|
1370
|
-
}
|
|
1371
|
-
function mapCreateError2(error) {
|
|
1372
|
-
switch (error.code) {
|
|
1373
|
-
case "NOT_AUTHENTICATED":
|
|
1374
|
-
case "PERMISSION_DENIED":
|
|
1375
|
-
case "INVALID_INPUT":
|
|
1376
|
-
case "INSUFFICIENT_BALANCE":
|
|
1377
|
-
case "IDEMPOTENCY_CONFLICT":
|
|
1378
|
-
case "KYC_REQUIRED":
|
|
1379
|
-
case "POLICY_DENIED":
|
|
1380
|
-
case "RATE_LIMITED":
|
|
1381
|
-
case "NETWORK_ERROR":
|
|
1382
|
-
return error;
|
|
1383
|
-
default:
|
|
1384
|
-
return new CapxulError({
|
|
1385
|
-
code: "NETWORK_ERROR",
|
|
1386
|
-
message: error.message,
|
|
1387
|
-
cause: error,
|
|
1388
|
-
details: error.details,
|
|
1389
|
-
operationId: error.operationId,
|
|
1390
|
-
correlationId: error.correlationId,
|
|
1391
|
-
retryable: error.retryable
|
|
1392
|
-
});
|
|
1393
|
-
}
|
|
1394
|
-
}
|
|
1395
1121
|
|
|
1396
1122
|
// src/core/webhook-endpoints.ts
|
|
1397
1123
|
function createWebhookEndpointsClient() {
|
|
@@ -1491,7 +1217,7 @@ function createOrganizationsClient(config = {}) {
|
|
|
1491
1217
|
},
|
|
1492
1218
|
payments: createOrgPaymentsClient(),
|
|
1493
1219
|
transfers: createOrgTransfersClient(),
|
|
1494
|
-
withdrawals: createOrgWithdrawalsClient(
|
|
1220
|
+
withdrawals: createOrgWithdrawalsClient(),
|
|
1495
1221
|
documents: createOrgDocumentsClient(),
|
|
1496
1222
|
webhookEndpoints: createWebhookEndpointsClient(),
|
|
1497
1223
|
webhookEvents: createWebhookEventsClient()
|
|
@@ -1528,6 +1254,15 @@ function createVirtualCardsClient() {
|
|
|
1528
1254
|
};
|
|
1529
1255
|
}
|
|
1530
1256
|
|
|
1257
|
+
// ../observability/src/try-catch.ts
|
|
1258
|
+
async function tryCatch(promise) {
|
|
1259
|
+
try {
|
|
1260
|
+
return [null, await promise];
|
|
1261
|
+
} catch (e) {
|
|
1262
|
+
return [e instanceof Error ? e : new Error(String(e)), null];
|
|
1263
|
+
}
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1531
1266
|
// ../observability/src/debug-log.ts
|
|
1532
1267
|
function isDevelopmentBuild() {
|
|
1533
1268
|
if (typeof process === "undefined") {
|
|
@@ -2348,7 +2083,7 @@ function createCapxulClient(config = {}) {
|
|
|
2348
2083
|
organizations: createOrganizationsClient(config),
|
|
2349
2084
|
payments: createPaymentsClient(config),
|
|
2350
2085
|
transfers: createTransfersClient(),
|
|
2351
|
-
withdrawals: createWithdrawalsClient(
|
|
2086
|
+
withdrawals: createWithdrawalsClient(),
|
|
2352
2087
|
documents: createDocumentsClient(),
|
|
2353
2088
|
subAccounts: createSubAccountsClient(),
|
|
2354
2089
|
virtualAccounts: createVirtualAccountsClient(),
|
|
@@ -2466,4 +2201,4 @@ function isWebhookEvent(value) {
|
|
|
2466
2201
|
return typeof candidate.id === "string" && typeof candidate.type === "string" && typeof candidate.createdAt === "string" && (candidate.operationId === void 0 || typeof candidate.operationId === "string") && (candidate.correlationId === void 0 || typeof candidate.correlationId === "string") && !!candidate.data && typeof candidate.data === "object" && !Array.isArray(candidate.data);
|
|
2467
2202
|
}
|
|
2468
2203
|
|
|
2469
|
-
export { CapxulError, createAuthFlowMachine, createCapxulClient, createLocalSigner, createOnboardingFlowMachine, createProvisioningMachine as createProvisioningFlowMachine, makeHttpTransport, matchAction, matchError, matchStatus, toAccountId, toApiKeyId, toBalanceLedgerEntryId, toDocumentId, toEmail, toExternalAccountId, toKybProfileId, toKycProfileId, toMemberId, toOperationId, toOrganizationId, toPaymentId, toPhoneNumber, toSafeId, toSubAccountId, toTransferId, toTreasuryId, toUsername, toVirtualAccountId, toVirtualCardId, toWebhookEndpointId, toWebhookEventId, toWithdrawalId, verifyWebhook };
|
|
2204
|
+
export { CapxulError, createAuthFlowMachine, createCapxulClient, createLocalSigner, createOnboardingFlowMachine, createProvisioningMachine as createProvisioningFlowMachine, makeHttpTransport, matchAction, matchError, matchStatus, toAccountId, toApiKeyId, toBalanceLedgerEntryId, toDocumentId, toEmail, toExternalAccountId, toKybProfileId, toKycProfileId, toMemberId, toOperationId, toOrganizationId, toPaymentId, toPhoneNumber, toSafeId, toSubAccountId, toTransferId, toTreasuryId, toUsername, toVirtualAccountId, toVirtualCardId, toWebhookEndpointId, toWebhookEventId, toWithdrawalId, tryCatch, verifyWebhook };
|
|
@@ -155,15 +155,7 @@ type Payment = WithStatus<WirePaymentWithBrand, PaymentStatus>;
|
|
|
155
155
|
type CreatePaymentResult = WithStatus<WirePaymentWithBrand, "processing" | "action_required" | "failed">;
|
|
156
156
|
type PaymentParty = types.PaymentParty;
|
|
157
157
|
type WireWithdrawalWithBrand = Rebrand<types.Withdrawal, WithdrawalId>;
|
|
158
|
-
|
|
159
|
-
* Canon-aligned superset (resources.mdx §withdrawal lifecycle note).
|
|
160
|
-
* Wider than `OperationStatus` because `submitted → completed` is a
|
|
161
|
-
* withdrawal-specific transition driven by external reconciliation
|
|
162
|
-
* the operation envelope cannot witness directly. Slice 1 of
|
|
163
|
-
* Withdrawals v1 (#440) widened this from `PaymentStatus` to match
|
|
164
|
-
* canon.
|
|
165
|
-
*/
|
|
166
|
-
type WithdrawalStatus = "draft" | "action_required" | "processing" | "submitted" | "completed" | "failed" | "canceled";
|
|
158
|
+
type WithdrawalStatus = PaymentStatus;
|
|
167
159
|
type Withdrawal = WithStatus<WireWithdrawalWithBrand, WithdrawalStatus>;
|
|
168
160
|
type CreateWithdrawalResult = WithStatus<WireWithdrawalWithBrand, "processing" | "action_required" | "failed">;
|
|
169
161
|
type WireTransferWithBrand = Rebrand<types.Transfer, TransferId>;
|
|
@@ -155,15 +155,7 @@ type Payment = WithStatus<WirePaymentWithBrand, PaymentStatus>;
|
|
|
155
155
|
type CreatePaymentResult = WithStatus<WirePaymentWithBrand, "processing" | "action_required" | "failed">;
|
|
156
156
|
type PaymentParty = types.PaymentParty;
|
|
157
157
|
type WireWithdrawalWithBrand = Rebrand<types.Withdrawal, WithdrawalId>;
|
|
158
|
-
|
|
159
|
-
* Canon-aligned superset (resources.mdx §withdrawal lifecycle note).
|
|
160
|
-
* Wider than `OperationStatus` because `submitted → completed` is a
|
|
161
|
-
* withdrawal-specific transition driven by external reconciliation
|
|
162
|
-
* the operation envelope cannot witness directly. Slice 1 of
|
|
163
|
-
* Withdrawals v1 (#440) widened this from `PaymentStatus` to match
|
|
164
|
-
* canon.
|
|
165
|
-
*/
|
|
166
|
-
type WithdrawalStatus = "draft" | "action_required" | "processing" | "submitted" | "completed" | "failed" | "canceled";
|
|
158
|
+
type WithdrawalStatus = PaymentStatus;
|
|
167
159
|
type Withdrawal = WithStatus<WireWithdrawalWithBrand, WithdrawalStatus>;
|
|
168
160
|
type CreateWithdrawalResult = WithStatus<WireWithdrawalWithBrand, "processing" | "action_required" | "failed">;
|
|
169
161
|
type WireTransferWithBrand = Rebrand<types.Transfer, TransferId>;
|
package/dist/webhooks.d.cts
CHANGED
package/dist/webhooks.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capxul/sdk",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.3",
|
|
4
4
|
"description": "Headless TypeScript client for Capxul's /v1/* HTTP contract.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"private": false,
|
|
@@ -71,8 +71,8 @@
|
|
|
71
71
|
"vitest": "^4.1.2",
|
|
72
72
|
"zod": "^4.3.6",
|
|
73
73
|
"@repo/api-contract": "0.0.0",
|
|
74
|
-
"@repo/backend": "0.0.0",
|
|
75
74
|
"@repo/config": "0.0.0",
|
|
75
|
+
"@repo/backend": "0.0.0",
|
|
76
76
|
"@repo/observability": "0.0.0",
|
|
77
77
|
"@repo/platform-kernel": "0.0.0",
|
|
78
78
|
"@repo/typescript-config": "0.0.0"
|