@siebly/kraken-api

中文文档
1.1.9发布于 2026/11/02MITTypeScriptESM + CJS构建来源已验证

完整和强大的Node.js SDK,用于Kraken的REST api和WebSockets,带有TypeScript和强大的端到端测试。

中文使用文档
文档目录26 节
  1. 目录表
  2. 安装
  3. 示例
  4. 问题与讨论
  5. 相关项目
  6. 文档
  7. API文档链接
  8. 结构
  9. REST API
  10. 现货交易
  11. 衍生品(期货)交易
  12. 尚
  13. WebSocket订阅(WebsocketClient)
  14. 为什么不生的呢?
  15. 在WebSocket上发现订单
  16. 公共WebSocket流
  17. 私有WebSocket流
  18. WebSocket API (websocketapicclient)
  19. 定制日志
  20. 浏览器/前端使用
  21. Webpack
  22. 与llm和AI一起使用
  23. 所使用的
  24. 贡献与感谢
  25. 贡献和拉取请求
  26. 明星的历史

Kraken REST api和WebSockets的Node.js和JavaScript SDK

Build & Test npm version npm size npm downloads last commit Telegram Ask DeepWiki

SDK Logo

Kraken REST api和WebSockets的完整和健壮的JavaScript和Node.js SDK:

  • 专业,强大和高性能的Kraken SDK与广泛的生产使用在实时交易环境。
  • 完全集成所有Kraken REST api和WebSockets。
    • 用于现货、衍生品(期货)、机构和合作伙伴操作的专用REST客户端
    • 所有市场的统一WebSocket客户端
  • 完整的TypeScript支持(大多数API请求和响应都有类型声明)。
    • 强类型请求和响应。
    • 确保可靠性的自动化端到端测试。
  • 积极维护一个现代的,承诺驱动的界面。
  • 强大的WebSocket集成可配置的连接心跳和自动重新连接,然后重新订阅工作流。
    • 事件驱动的消息传递。
    • 具有自动重连接处理的智能WebSocket持久性。
    • 发出 reconnected 事件,当断开的连接恢复时。
    • 支持公共和私有WebSocket流。
  • 浏览器友好的HMAC签名机制。
  • 自动支持ESM和CJS项目。
  • 使用真正的API调用进行大量的自动化端到端测试。
  • 通过axios集成支持代理。
  • 活跃的社区支持和协作电报: Node.js算法交易员.
  • 快速入门指南: Kraken JavaScript快速入门指南
  • Kraken JavaScript教程: Kraken JavaScript REST API和WebSocket教程

目录表

安装

安装作用域包 @siebly/kraken-api:

npm install --save @siebly/kraken-api

没有作用域的npm包 kraken-api 是一个不同的包装。不是这个SDK。

示例

参考 例子 用于实现演示的文件夹,包括:

  • 现货交易例子:市场数据、账户管理、下单
  • 衍生品交易例子:期货市场数据,账户管理,下单
  • WebSocket例子:公开市场数据流、私人账户数据

问题与讨论

查看我们的JavaScript/TypeScript/Node.js sdk和项目:

文档

大多数方法接受JS对象。可以使用Kraken的API文档指定的参数填充这些参数,或者检查此存储库中每个类的类型定义。

结构

本项目使用打字稿。资源存储在两个关键结构中:

  • src -整个连接器写在打字稿
  • 例子 -一些实现示例和演示。欢迎投稿!

使用

在Kraken的网站上创建API凭据:

REST API

SDK为不同的交易产品提供专用的REST客户端:

  • SpotClient -用于现货交易、押注和账户操作
  • DerivativesClient -用于期货交易操作
  • InstitutionalClient -供机构交易及托管
  • PartnerClient -用于合作伙伴和附属业务

现货交易

要使用Kraken的Spot api,请导入(或要求) SpotClient:

import { SpotClient } from '@siebly/kraken-api';
// or if you prefer require:
// const { SpotClient } = require('@siebly/kraken-api');

// For public endpoints, API credentials are optional
const publicClient = new SpotClient();

// For private endpoints, provide API credentials
const client = new SpotClient({
  apiKey: 'your-api-key',
  apiSecret: 'your-base64-encoded-private-key',
});

// Public API Examples

// Get ticker information
const ticker = await publicClient.getTicker({
  pair: 'XBTUSD',
});
console.log('Ticker: ', ticker);

// Get order book
const orderBook = await publicClient.getOrderBook({
  pair: 'XBTUSD',
  count: 10,
});
console.log('Order Book: ', orderBook);

// Private API Examples (requires authentication)

// Submit a market order
client
  .submitOrder({
    ordertype: 'market',
    type: 'buy',
    volume: '0.01',
    pair: 'XBTUSD',
    cl_ord_id: client.generateNewOrderID(),
  })
  .then((result) => {
    console.log('Market Order Result: ', result);
  })
  .catch((err) => {
    console.error('Error: ', err);
  });

// Submit a limit order
client
  .submitOrder({
    ordertype: 'limit',
    type: 'buy',
    volume: '0.0001',
    pair: 'XBTUSD',
    price: '10000',
    cl_ord_id: client.generateNewOrderID(),
  })
  .then((result) => {
    console.log('Limit Order Result: ', result);
  })
  .catch((err) => {
    console.error('Error: ', err);
  });

// Submit batch of orders (minimum 2, maximum 15)
client
  .submitBatchOrders({
    pair: 'XBTUSD',
    orders: [
      {
        ordertype: 'limit',
        type: 'buy',
        volume: '0.0001',
        price: '10000.00',
        timeinforce: 'GTC',
        cl_ord_id: client.generateNewOrderID(),
      },
      {
        ordertype: 'limit',
        type: 'buy',
        volume: '0.0001',
        price: '11111.00',
        timeinforce: 'GTC',
        cl_ord_id: client.generateNewOrderID(),
      },
      {
        ordertype: 'limit',
        type: 'sell',
        volume: '0.0001',
        price: '13000.00',
        timeinforce: 'GTC',
        cl_ord_id: client.generateNewOrderID(),
      },
    ],
  })
  .then((result) => {
    console.log('Batch Order Result: ', JSON.stringify(result, null, 2));
  })
  .catch((err) => {
    console.error('Error: ', err);
  });

// Get account balances
client
  .getAccountBalance()
  .then((balance) => {
    console.log('Account Balance: ', balance);
  })
  .catch((err) => {
    console.error('Error: ', err);
  });

看到 SpotClient 欲知详情,请浏览 例子 有很多用法示例。

衍生品(期货)交易

使用 DerivativesClient 期货交易业务:

import { DerivativesClient } from '@siebly/kraken-api';
// or if you prefer require:
// const { DerivativesClient } = require('@siebly/kraken-api');

// For public endpoints, API credentials are optional
const publicClient = new DerivativesClient();

// For private endpoints, provide API credentials
const client = new DerivativesClient({
  apiKey: 'your-api-key',
  apiSecret: 'your-api-secret',
});

// Public API Examples

// Get order book for a specific instrument
const orderBook = await publicClient.getOrderBook({
  symbol: 'PF_XBTUSD',
});
console.log('Futures Order Book: ', orderBook);

// Get ticker information
const ticker = await publicClient.getTickers({
  symbol: 'PF_XBTUSD',
});
console.log('Futures Ticker: ', ticker);

// Private API Examples (requires authentication)

// Get account balances
client
  .getAccountsDetails()
  .then((accounts) => {
    console.log('Accounts Details: ', accounts);
  })
  .catch((err) => {
    console.error('Error: ', err);
  });

// Submit a limit order
client
  .submitOrder({
    orderType: 'lmt',
    symbol: 'PF_ETHUSD', // Perpetual ETH/USD
    side: 'buy',
    size: 0.01, // Contract size
    limitPrice: 1000,
    cliOrdId: client.generateNewOrderID(),
  })
  .then((result) => {
    console.log('Limit Order Result: ', JSON.stringify(result, null, 2));
  })
  .catch((err) => {
    console.error('Error: ', err);
  });

Kraken于2026年7月14日退出了期货演示(测试网)环境。没有替代的演示主机,Spot也从未有过测试网。设置 testnet: true 在 DerivativesClient 或者 WebsocketClient 抛出。看到 公告.

看到 DerivativesClient 获取更多信息。

尚

Kraken支持两种类型的WebSocket连接:

  1. WebSocket订阅 -实时市场数据和账户更新 WebsocketClient
  2. WebSocket API 类rest的请求/响应交易 WebsocketAPIClient

WebSocket订阅(WebsocketClient)

统一 WebsocketClient 处理所有的Kraken WebSocket流与自动连接管理和重新连接。

WebSocket的主要特性:

  • 事件驱动的消息传递
  • 具有自动重新连接的智能WebSocket持久性
  • 检测断开连接的心跳机制
  • 重新连接后自动重新订阅
  • 支持现货和期货市场
  • 支持公共和私有WebSocket流

为什么不生的呢?

生 ws 插座为您留下了重新连接、激活、重新订阅和授权。 WebsocketClient 这样行吗?

  • 重新连接丢失的套接字,然后重新订阅已请求的主题。
  • 心跳(原生乒乓球,加上海妖) heartbeat / pong 帧),因此一个沉默的套接字被视为死亡并重新连接。
  • 私有认证:Spot WebSocket令牌在过期前从REST获取、缓存和刷新。未来私有流使用签名挑战流,重新连接重新验证。

海妖的书载荷包括一个校验和。此SDK不验证它。 在WebSocket上发现订单 保留本地本子并检查校验和。

import { WebsocketClient } from '@siebly/kraken-api';
const ws = new WebsocketClient();
ws.on('message', (data) => console.log(data));
ws.subscribe({ topic: 'ticker', payload: { symbol: ['BTC/USD'] } }, 'spotPublicV2');

在WebSocket上发现订单

使用 WebsocketClient 在WebSocket上维护带有校验和验证的Spot订单,如runnable所示 本地订单示例. 该示例应用快照和更新,恢复CRC32验证的对精度,在校验和不匹配时重新订阅,并记录最佳出价和出价。SDK处理重新连接、心跳和重新连接后的重新订阅;该示例提供了本地图书和校验和重新同步逻辑 ws 插座留给你。

公共WebSocket流

对于公开市场数据,不需要API凭据:

import { WebsocketClient } from '@siebly/kraken-api';
// or if you prefer require:
// const { WebsocketClient } = require('@siebly/kraken-api');
// Create WebSocket client for public streams
const wsClient = new WebsocketClient();

// Set up event handlers
wsClient.on('open', (data) => {
  console.log('WebSocket connected: ', data?.wsKey);
});

wsClient.on('message', (data) => {
  console.log('Data received: ', JSON.stringify(data, null, 2));
});

wsClient.on('reconnected', (data) => {
  console.log('WebSocket reconnected: ', data);
});

wsClient.on('exception', (data) => {
  console.error('WebSocket error: ', data);
});

// Spot - Subscribe to public data streams
wsClient.subscribe(
  {
    topic: 'ticker',
    payload: {
      symbol: ['BTC/USD', 'ETH/USD'],
    },
  },
  'spotPublicV2',
);

wsClient.subscribe(
  {
    topic: 'book',
    payload: {
      symbol: ['BTC/USD'],
      depth: 10,
    },
  },
  'spotPublicV2',
);

// Derivatives - Subscribe to public data streams
wsClient.subscribe(
  {
    topic: 'ticker',
    payload: {
      product_ids: ['PI_XBTUSD', 'PI_ETHUSD'],
    },
  },
  'derivativesPublicV1',
);

wsClient.subscribe(
  {
    topic: 'book',
    payload: {
      product_ids: ['PI_XBTUSD'],
    },
  },
  'derivativesPublicV1',
);

私有WebSocket流

对于私有帐户数据流,需要API凭据:

import { WebsocketClient } from '@siebly/kraken-api';

// Create WebSocket client with API credentials for private streams
const wsClient = new WebsocketClient({
  apiKey: 'your-api-key',
  apiSecret: 'your-api-secret',
});

// Set up event handlers
wsClient.on('open', (data) => {
  console.log('Private WebSocket connected: ', data?.wsKey);
});

wsClient.on('message', (data) => {
  console.log('Private data received: ', JSON.stringify(data, null, 2));
});

wsClient.on('authenticated', (data) => {
  console.log('WebSocket authenticated: ', data);
});

wsClient.on('response', (data) => {
  console.log('WebSocket response: ', data);
});

wsClient.on('exception', (data) => {
  console.error('WebSocket error: ', data);
});

// Spot - Subscribe to private data streams
wsClient.subscribe(
  {
    topic: 'executions',
    payload: {
      snap_trades: true,
      snap_orders: true,
      order_status: true,
    },
  },
  'spotPrivateV2',
);

wsClient.subscribe(
  {
    topic: 'balances',
    payload: {
      snapshot: true,
    },
  },
  'spotPrivateV2',
);

// Derivatives - Subscribe to private data streams
// Note: SDK automatically handles authentication and challenge tokens
wsClient.subscribe('open_orders', 'derivativesPrivateV1');

wsClient.subscribe(
  {
    topic: 'fills',
    payload: {
      product_ids: ['PF_XBTUSD'],
    },
  },
  'derivativesPrivateV1',
);

wsClient.subscribe('balances', 'derivativesPrivateV1');

wsClient.subscribe('open_positions', 'derivativesPrivateV1');

有关更全面的示例,包括自定义日志记录和错误处理,请查看 例子 文件夹中。

WebSocket API (websocketapicclient)

这个 WebsocketAPIClient 为WebSocket上的交易操作提供了一个类似REST的接口,提供了比REST api更低的延迟。目前只支持现货交易。

import { WebsocketAPIClient } from '@siebly/kraken-api';

// Create WebSocket API client with credentials
const wsApiClient = new WebsocketAPIClient({
  apiKey: 'your-api-key',
  apiSecret: 'your-api-secret',
});

// The client handles event listeners automatically, but you can customize them
wsApiClient
  .getWSClient()
  .on('open', (data) => {
    console.log('WebSocket API connected:', data.wsKey);
  })
  .on('response', (data) => {
    console.log('Response:', data);
  })
  .on('exception', (data) => {
    console.error('Error:', data);
  });

// Trading operations return promises

// Submit a spot order
const orderResponse = await wsApiClient.submitSpotOrder({
  order_type: 'limit',
  side: 'buy',
  limit_price: 26500.4,
  order_qty: 1.2,
  symbol: 'BTC/USD',
});
console.log('Order placed:', orderResponse);

// Amend an existing order
const amendResponse = await wsApiClient.amendSpotOrder({
  order_id: 'OAIYAU-LGI3M-PFM5VW',
  order_qty: 1.5,
  limit_price: 27000,
});

// Cancel specific orders
const cancelResponse = await wsApiClient.cancelSpotOrder({
  order_id: ['OM5CRX-N2HAL-GFGWE9', 'OLUMT4-UTEGU-ZYM7E9'],
});

// Cancel all open orders
const cancelAllResponse = await wsApiClient.cancelAllSpotOrders();

WebSocket API提供了几个优点:

  • 更低的延迟 -比REST API更快的高频交易
  • 连接重用 —单个持久连接用于多个请求
  • 更好的性能 批量提交/取消多个订单
  • 类型安全 完整的TypeScript支持类型请求和响应

看到 WebSocket API示例 以获取更详细的用法。


定制日志

传递一个支持日志方法的自定义日志记录器 trace, info 和 error,或根据需要覆盖默认记录器中的方法。

import { WebsocketClient, DefaultLogger } from '@siebly/kraken-api';

// E.g. customise logging for only the trace level:
const customLogger: DefaultLogger = {
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  trace: (...params: LogParams): void => {
    // console.log('trace', ...params);
  },
  info: (...params: LogParams): void => {
    console.log('info', ...params);
  },
  error: (...params: LogParams): void => {
    console.error('error', ...params);
  },
};

const ws = new WebsocketClient(
  {
    apiKey: 'apiKeyHere',
    apiSecret: 'apiSecretHere',
  },
  customLogger,
);

浏览器/前端使用

Webpack

使用webpack构建一个bundle:

  • npm install
  • npm run build
  • npm run pack

该包可以在 dist/. 虽然使用应该大体一致,但也会存在较小的差异。文档仍然是待办事项。

与llm和AI一起使用

此SDK包含一个捆绑的 llms.txt 文件在存储库的根目录下。如果您正在使用llm进行开发,请使用包含的 llms.txt 与您的法学硕士-它将显著提高法学硕士对如何正确使用此SDK的理解。

这个文件包含了这个包中所有功能的人工智能优化结构,以及它们的参数,以便于任何学习模型或人工智能使用。


所使用的

Repository Users Preview Image


贡献与感谢

我的项目对你有帮助吗?分享爱,有很多方式可以表达你的感谢:

贡献和拉取请求

鼓励贡献,我将审查任何传入的拉请求。请参阅事项选项卡中的待办事项项。

明星的历史

Star History Chart

版本与发布记录

@siebly/kraken-api 共发布 17 个版本,首次发布于 2025/12/01;过去 12 个月发布了 17 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.1.9latest2026/11/021 天前
1.1.82026/10/2014 天前
1.1.72026/10/1618 天前
1.1.62026/10/0627 天前
1.1.52026/09/241 个月前
1.1.42026/09/012 个月前

关于 @siebly/kraken-api 的常见问题

@siebly/kraken-api 是什么?

完整和强大的Node.js SDK,用于Kraken的REST api和WebSockets,带有TypeScript和强大的端到端测试。

如何安装 @siebly/kraken-api?

在项目目录运行 npm install @siebly/kraken-api,或使用 pnpm add / yarn add / bun add。

@siebly/kraken-api 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@siebly/kraken-api 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@siebly/kraken-api 可以商用吗?

@siebly/kraken-api 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@siebly/kraken-api 还在维护吗?

最新版本 1.1.9 发布于 2026/11/02(1 天前);至今共发布 17 个版本,其中过去 12 个月发布了 17 个;首次发布于 2025/12/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。