@coinbase/cdp-sdk
Version:
SDK for interacting with the Coinbase Developer Platform Wallet API
189 lines • 10.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toEndUserAccount = toEndUserAccount;
const analytics_js_1 = require("../../analytics.js");
/**
* Resolves the first EVM EOA address for this end user, or throws if none exist and no override was provided.
*
* @param endUser - The OpenAPI end user.
* @param override - An optional address override.
* @returns The resolved EVM address.
*/
function resolveEvmAddress(endUser, override) {
const address = override ?? endUser.evmAccountObjects[0]?.address;
if (!address) {
throw new Error("No EVM account found on this end user. Provide an explicit address or add an EVM account first.");
}
return address;
}
/**
* Resolves the first EVM smart account address for this end user, or throws if none exist and no override was provided.
*
* @param endUser - The OpenAPI end user.
* @param override - An optional address override.
* @returns The resolved EVM smart account address.
*/
function resolveEvmSmartAccountAddress(endUser, override) {
const address = override ?? endUser.evmSmartAccountObjects[0]?.address;
if (!address) {
throw new Error("No EVM smart account found on this end user. Provide an explicit address or add an EVM smart account first.");
}
return address;
}
/**
* Resolves the first Solana address for this end user, or throws if none exist and no override was provided.
*
* @param endUser - The OpenAPI end user.
* @param override - An optional address override.
* @returns The resolved Solana address.
*/
function resolveSolanaAddress(endUser, override) {
const address = override ?? endUser.solanaAccountObjects[0]?.address;
if (!address) {
throw new Error("No Solana account found on this end user. Provide an explicit address or add a Solana account first.");
}
return address;
}
/**
* Creates an EndUserAccount instance with actions from an existing OpenAPI EndUser.
* This wraps the raw API response and adds convenience methods for adding accounts
* and performing delegated signing/sending operations.
*
* @param apiClient - The API client.
* @param options - Configuration options.
* @param options.endUser - The end user from the API response.
* @returns An EndUserAccount instance with action methods.
*/
function toEndUserAccount(apiClient, options) {
const { endUser } = options;
const endUserAccount = {
// Pass through all properties from the OpenAPI EndUser
userId: endUser.userId,
authenticationMethods: endUser.authenticationMethods,
mfaMethods: endUser.mfaMethods,
evmAccounts: endUser.evmAccounts,
evmAccountObjects: endUser.evmAccountObjects,
evmSmartAccounts: endUser.evmSmartAccounts,
evmSmartAccountObjects: endUser.evmSmartAccountObjects,
solanaAccounts: endUser.solanaAccounts,
solanaAccountObjects: endUser.solanaAccountObjects,
createdAt: endUser.createdAt,
// ─── Account Management Methods ───
async addEvmAccount(idempotencyKey) {
analytics_js_1.Analytics.trackAction({ action: "end_user_add_evm_account" });
return apiClient.addEndUserEvmAccount(endUser.userId, {}, idempotencyKey);
},
async addEvmSmartAccount(smartAccountOptions) {
analytics_js_1.Analytics.trackAction({ action: "end_user_add_evm_smart_account" });
return apiClient.addEndUserEvmSmartAccount(endUser.userId, { enableSpendPermissions: smartAccountOptions.enableSpendPermissions }, smartAccountOptions.idempotencyKey);
},
async addSolanaAccount(idempotencyKey) {
analytics_js_1.Analytics.trackAction({ action: "end_user_add_solana_account" });
return apiClient.addEndUserSolanaAccount(endUser.userId, {}, idempotencyKey);
},
async getDelegation() {
analytics_js_1.Analytics.trackAction({ action: "end_user_get_delegation" });
return apiClient.getDelegationForEndUser(endUser.userId);
},
async revokeDelegation(idempotencyKey) {
analytics_js_1.Analytics.trackAction({ action: "end_user_revoke_delegation" });
await apiClient.revokeDelegationForEndUser(endUser.userId, {}, undefined, idempotencyKey);
},
// ─── Account-Scoped Delegation Methods ───
async getDelegationForAccount(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_get_delegation_for_account" });
const address = resolveEvmAddress(endUser, opts.address);
return apiClient.getDelegationForEndUserAccount(endUser.userId, address);
},
async revokeDelegationForAccount(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_revoke_delegation_for_account" });
const address = resolveEvmAddress(endUser, opts.address);
await apiClient.revokeDelegationForEndUserAccount(endUser.userId, address, {}, undefined, opts.idempotencyKey);
},
// ─── Delegated EVM Sign Methods ───
async signEvmTransaction(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_sign_evm_transaction" });
const address = resolveEvmAddress(endUser, opts.address);
return apiClient.signEvmTransactionWithEndUserAccount(endUser.userId, { address, transaction: opts.transaction }, undefined, opts.idempotencyKey);
},
async signEvmMessage(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_sign_evm_message" });
const address = resolveEvmAddress(endUser, opts.address);
return apiClient.signEvmMessageWithEndUserAccount(endUser.userId, { address, message: opts.message }, undefined, opts.idempotencyKey);
},
async signEvmTypedData(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_sign_evm_typed_data" });
const address = resolveEvmAddress(endUser, opts.address);
return apiClient.signEvmTypedDataWithEndUserAccount(endUser.userId, { address, typedData: opts.typedData }, undefined, opts.idempotencyKey);
},
// ─── Delegated EVM Send Methods ───
async sendEvmTransaction(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_send_evm_transaction" });
const address = resolveEvmAddress(endUser, opts.address);
return apiClient.sendEvmTransactionWithEndUserAccount(endUser.userId, { address, transaction: opts.transaction, network: opts.network }, undefined, opts.idempotencyKey);
},
async sendEvmAsset(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_send_evm_asset" });
const address = resolveEvmAddress(endUser, opts.address);
const asset = opts.asset ?? "usdc";
return apiClient.sendEvmAssetWithEndUserAccount(endUser.userId, address, asset, {
to: opts.to,
amount: opts.amount,
network: opts.network,
useCdpPaymaster: opts.useCdpPaymaster,
paymasterUrl: opts.paymasterUrl,
}, undefined, opts.idempotencyKey);
},
async sendUserOperation(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_send_user_operation" });
const address = resolveEvmSmartAccountAddress(endUser, opts.address);
return apiClient.sendUserOperationWithEndUserAccount(endUser.userId, address, {
network: opts.network,
calls: opts.calls,
useCdpPaymaster: opts.useCdpPaymaster,
paymasterUrl: opts.paymasterUrl,
dataSuffix: opts.dataSuffix,
}, undefined, opts.idempotencyKey);
},
// ─── Delegated EVM EIP-7702 Delegation Method ───
async createEvmEip7702Delegation(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_create_evm_eip7702_delegation" });
const address = resolveEvmAddress(endUser, opts.address);
return apiClient.createEvmEip7702DelegationWithEndUserAccount(endUser.userId, {
address,
network: opts.network,
enableSpendPermissions: opts.enableSpendPermissions,
}, undefined, opts.idempotencyKey);
},
// ─── Delegated Solana Sign Methods ───
async signSolanaMessage(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_sign_solana_message" });
const address = resolveSolanaAddress(endUser, opts.address);
return apiClient.signSolanaMessageWithEndUserAccount(endUser.userId, { address, message: opts.message }, undefined, opts.idempotencyKey);
},
async signSolanaTransaction(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_sign_solana_transaction" });
const address = resolveSolanaAddress(endUser, opts.address);
return apiClient.signSolanaTransactionWithEndUserAccount(endUser.userId, { address, transaction: opts.transaction }, undefined, opts.idempotencyKey);
},
// ─── Delegated Solana Send Methods ───
async sendSolanaTransaction(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_send_solana_transaction" });
const address = resolveSolanaAddress(endUser, opts.address);
return apiClient.sendSolanaTransactionWithEndUserAccount(endUser.userId, { address, transaction: opts.transaction, network: opts.network }, undefined, opts.idempotencyKey);
},
async sendSolanaAsset(opts) {
analytics_js_1.Analytics.trackAction({ action: "end_user_send_solana_asset" });
const address = resolveSolanaAddress(endUser, opts.address);
const asset = opts.asset ?? "usdc";
return apiClient.sendSolanaAssetWithEndUserAccount(endUser.userId, address, asset, {
to: opts.to,
amount: opts.amount,
network: opts.network,
createRecipientAta: opts.createRecipientAta,
}, undefined, opts.idempotencyKey);
},
};
return endUserAccount;
}
//# sourceMappingURL=toEndUserAccount.js.map