
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
@coinbase-sample/prime-sdk-ts
Advanced tools
[](https://badge.fury.io/js/%40coinbase-sample%2Fprime-sdk-ts) [](https://opensource.org/licenses/Apache-2.
Welcome to the Coinbase Prime API TypeScript SDK. This TypeScript project provides a comprehensive, type-safe interface to the Coinbase Prime API with multiple consumption patterns optimized for different use cases.
The Prime Typescript SDK sample library is free and open source and released under the Apache License, Version 2.0.
The application and code are only available for demonstration purposes.
npm install @coinbase-sample/prime-sdk-ts
The SDK provides a modular client with lazy-loaded services for the best developer experience:
import { CoinbasePrimeClientWithServices } from '@coinbase-sample/prime-sdk-ts';
// Create client from environment variables
const client = CoinbasePrimeClientWithServices.fromEnv();
// Access services directly - no manual instantiation needed!
const portfolios = await client.portfolios.listPortfolios();
const orders = await client.orders.listPortfolioOrders({ portfolioId: 'your-id' });
const wallets = await client.wallets.listWallets({ portfolioId: 'your-id' });
Copy env.example
to .env
and populate with your values:
cp env.example .env
Then edit .env
with your actual credentials:
# API Credentials (JSON format)
PRIME_CREDENTIALS={"AccessKey":"your-access-key","SecretKey":"your-secret-key","Passphrase":"your-passphrase"}
# Required IDs
ENTITY_ID=your-entity-id
PORTFOLIO_ID=your-portfolio-id
WALLET_ID=your-wallet-id
const portfolios = await client.portfolios.listPortfolios();
console.log(portfolios.portfolios);
const assets = await client.assets.listAssets({
entityId: portfolioId
});
console.log(assets.assets);
import { OrderSide, OrderType } from '@coinbase-sample/prime-sdk-ts';
const order = await client.orders.createOrder({
portfolioId: 'your-portfolio-id',
productId: 'BTC-USD',
side: OrderSide.BUY,
type: OrderType.MARKET,
baseQuantity: '0.001'
});
console.log(order.orderId);
See the example folder for more robust examples for many of the available services and endpoints.
The SDK provides powerful pagination controls at both the client and request level:
const client = CoinbasePrimeClientWithServices.fromEnv(undefined, {
maxPages: 5, // Max pages to fetch automatically
maxItems: 1000, // Max total items across all pages
defaultLimit: 100 // Items per page
});
// Or per-request
const response = await client.transactions.listPortfolioTransactions(
{ portfolioId, limit: 50 },
{ maxPages: 10, maxItems: 500 }
);
All paginated responses include powerful methods for manual pagination control:
// Get the first page
const firstPage = await client.transactions.listPortfolioTransactions({ portfolioId });
// Check if there are more pages
if (firstPage.hasNext()) {
console.log('More data available');
}
// Get the next page manually
const secondPage = await firstPage.next();
// Fetch ALL remaining pages and combine the data
const allTransactions = await firstPage.fetchAll(
undefined, // options
(page, totalItems) => console.log(`Fetched page ${page}, total items: ${totalItems}`)
);
// Example: Manual pagination loop
let currentPage = firstPage;
while (currentPage.hasNext()) {
console.log(`Processing ${currentPage.transactions.length} transactions`);
currentPage = await currentPage.next();
}
Method | Description | Returns |
---|---|---|
hasNext() | Check if more pages are available | boolean |
next() | Fetch the next page | Promise<Response | null> |
fetchAll() | Fetch all remaining pages and combine data | Promise<DataArray[]> |
getNextCursor() | Get the next page cursor | string | undefined |
While the modular client (CoinbasePrimeClientWithServices
) is recommended for most use cases, the SDK provides additional import patterns optimized for specific scenarios:
@coinbase-sample/prime-sdk-ts/manual
)When you need full control over service instantiation:
import { CoinbasePrimeClient, OrdersService, WalletsService } from '@coinbase-sample/prime-sdk-ts/manual';
const client = CoinbasePrimeClient.fromEnv();
const orders = new OrdersService(client);
const wallets = new WalletsService(client);
// Only the services you import are included in your bundle
@coinbase-sample/prime-sdk-ts/client
)For services-only patterns (97% smaller bundles):
import { CoinbasePrimeClient } from '@coinbase-sample/prime-sdk-ts/client';
import { OrdersService } from '@coinbase-sample/prime-sdk-ts/services';
const client = CoinbasePrimeClient.fromEnv();
const orders = new OrdersService(client);
// Total bundle: ~3kb (perfect for microservices)
Import Pattern | Bundle Size | Use Case |
---|---|---|
Modular Client (recommended) | ~30kb | Best developer experience |
Manual Client | ~90kb | Full control, all services available |
Services + Client | ~6kb | Custom implementations |
Individual Service | ~3kb | Microservices, Lambda functions |
For shared libraries or type definitions:
import type { CreateOrderRequest, OrderSide } from '@coinbase-sample/prime-sdk-ts/types';
// 0kb runtime - perfect for shared type libraries
git clone https://github.com/coinbase-samples/prime-sdk-ts.git
cd prime-sdk-ts
npm install
npm run build
The SDK includes comprehensive examples in the example/
directory:
# Set up environment (copy env.example to .env first)
cp env.example .env
# Edit .env with your actual entityId, portfolioId, and walletId
# Run examples
node example/listPortfolios.js
node example/createOrder.js
node example/listWallets.js TRADING
The SDK is built with TypeScript and provides full type safety:
import {
CoinbasePrimeClientWithServices,
OrderSide,
OrderType,
CreateOrderRequest
} from '@coinbase-sample/prime-sdk-ts';
const client = CoinbasePrimeClientWithServices.fromEnv();
// Full IntelliSense and type checking
const request: CreateOrderRequest = {
portfolioId: 'your-id',
productId: 'BTC-USD',
side: OrderSide.BUY, // Enum with autocomplete
type: OrderType.MARKET,
baseQuantity: '0.001'
};
const order = await client.orders.createOrder(request);
// Response is fully typed - no manual type assertions needed
[0.6.4] - 2025-SEP-03
FAQs
[](https://badge.fury.io/js/%40coinbase-sample%2Fprime-sdk-ts) [](https://opensource.org/licenses/Apache-2.
The npm package @coinbase-sample/prime-sdk-ts receives a total of 638 weekly downloads. As such, @coinbase-sample/prime-sdk-ts popularity was classified as not popular.
We found that @coinbase-sample/prime-sdk-ts demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.