@phantom/client
v1.0.0
Published
HTTP client for Phantom Wallet API
Downloads
38,335
Keywords
Readme
@phantom/client
HTTP client for Phantom Wallet API.
Installation
npm install @phantom/client
# or
yarn add @phantom/clientUsage
The PhantomClient class provides a fully typed HTTP client for interacting with Phantom's wallet service API.
Basic Usage (Without Authentication)
import { PhantomClient } from "@phantom/client";
const client = new PhantomClient({
apiBaseUrl: "https://api.phantom.app/v1/wallets",
organizationId: "your-org-id",
});
// Use the client for public endpoints
const wallets = await client.getWallets();With Authentication (Using a Stamper)
The client accepts an optional stamper parameter that can be used to sign requests. You can use the @phantom/api-key-stamper package for API key authentication:
import { PhantomClient } from "@phantom/client";
import { ApiKeyStamper } from "@phantom/api-key-stamper";
// Create a stamper for authentication
const stamper = new ApiKeyStamper({
apiSecretKey: "your-base58-encoded-secret-key",
});
// Create client with authentication
const client = new PhantomClient(
{
apiBaseUrl: "https://api.phantom.app/v1/wallets",
organizationId: "your-org-id",
},
stamper,
);
// Now you can use authenticated endpoints
const wallet = await client.createWallet("My Wallet");Available Methods
Wallet Management
createWallet(walletName?: string)- Create a new wallet with default addresses for Solana, Ethereum, Bitcoin, and SuigetWallets(limit?, offset?)- List wallets for the organization with pagination supportgetWalletAddresses(walletId, derivationPaths?)- Get addresses for a wallet, optionally specifying custom derivation paths
Transaction & Signing
signAndSendTransaction(params)- Sign and optionally submit a transaction to the blockchainsignMessage(params)- Sign a message with a wallet's private key
// Sign message
await client.signMessage({
walletId: "wallet_123",
message: "base64url_encoded_message",
networkId: NetworkId.SOLANA_MAINNET,
});
// Sign transaction
await client.signAndSendTransaction({
walletId: "wallet_123",
transaction: "base64url_encoded_transaction",
networkId: NetworkId.SOLANA_MAINNET,
});Organization Management
getOrganization(organizationId)- Get organization details by IDcreateOrganization(name, users)- Create a new organization with custom usersgetWalletWithTag(params)- Get a wallet by tag from an organizationgrantOrganizationAccess(params)- Grant access permissions to an organization
Authentication Management
createAuthenticator(params)- Create a new authenticator for a user in an organizationdeleteAuthenticator(params)- Delete an authenticator from a user in an organization
Network Support
The client supports multiple blockchain networks through CAIP-2 identifiers. For a complete list of supported networks including Solana, Ethereum, Polygon, Base, Arbitrum, Monad, and more, see the Network Support section in the main README.
import { NetworkId } from "@phantom/client";
// Example: Solana
await client.signAndSendTransaction({
walletId,
transaction,
networkId: NetworkId.SOLANA_MAINNET,
});
// Example: Ethereum
await client.signAndSendTransaction({
walletId,
transaction,
networkId: NetworkId.ETHEREUM_MAINNET,
});Custom Stamper Implementation
You can implement your own stamper for custom authentication methods:
class CustomStamper {
async stamp(config: AxiosRequestConfig): Promise<AxiosRequestConfig> {
// Add your custom authentication logic here
config.headers = config.headers || {};
config.headers["Authorization"] = "Bearer your-token";
return config;
}
}
const client = new PhantomClient(config, new CustomStamper());Organization and Authentication Examples
// Get organization details
const organization = await client.getOrganization("org-id");
// Create organization with custom users
const newOrg = await client.createOrganization("My Organization", [
{
username: "admin-user",
role: "ADMIN",
authenticators: [
{
authenticatorName: "Primary Auth",
authenticatorKind: "keypair",
publicKey: "base64url-encoded-public-key",
algorithm: "Ed25519",
},
{
authenticatorName: "OIDC Auth",
authenticatorKind: "oidc",
jwksUrl: "https://issuer.com/.well-known/jwks.json",
idTokenClaims: {
sub: "user-subject-id",
iss: "https://issuer.com",
},
},
],
},
]);
// Get wallet by tag
const taggedWallet = await client.getWalletWithTag({
organizationId: "org-id",
tag: "demo-wallet",
derivationPaths: ["m/44'/501'/0'/0'"],
});
// Create an authenticator for a user
const authenticator = await client.createAuthenticator({
organizationId: "org-id",
username: "user-123",
authenticatorName: "New Auth",
authenticator: {
authenticatorName: "New Auth",
authenticatorKind: "keypair",
publicKey: "base64url-encoded-public-key",
algorithm: "Ed25519",
},
});
// Delete an authenticator
await client.deleteAuthenticator({
organizationId: "org-id",
username: "user-123",
authenticatorId: "auth-id",
});TypeScript Support
This package is written in TypeScript and provides full type definitions for all API methods and responses. All request parameter types are imported from @phantom/openapi-wallet-service.
