@finatic/client

中文文档
1.1.6发布于 2026/10/17PROPRIETARYTypeScriptESM + CJS构建来源已验证近 30 天下载 2129

用于浏览器集成的 Finatic 客户端 SDK

中文使用文档
文档目录10 节
  1. 安装
  2. 快开始
  3. 门户认证和连接准备
  4. 精确的仪器描述符
  5. 合同能力和订单类型
  6. 接头
  7. 从β移动
  8. 环境
  9. 常见命令
  10. 文档

Finatic 客户端 SDK

浏览器 SDK 将 Finatic 连接和账户第一数据嵌入到 您的前端。公司 API 密钥从不属于此软件包。 您的后端( Server SDK) 薄荷能一次性地得到一个符; 浏览器只接收该符.

安装

npm install @finatic/client

快开始

import { FinaticConnect, isPortalLifecycleEventPayload } from '@finatic/client';

const finatic = await FinaticConnect.init('one-time-token', undefined, {
  apiEnvironment: 'sandbox', // or 'live'
});

await finatic.openPortal({
  mode: 'dark',
  onSuccess: (userId) => {
    // OTP / session ready. The user has not necessarily granted an account yet.
    console.log('Portal user linked:', userId);
  },
  onEvent: async (eventName, payload) => {
    if (eventName !== 'account.grant.created') return;
    const grant = payload as { accountId?: string };
    const accounts = await finatic.v1.listAccounts({ includeSyncStatus: true });
    const ready = accounts.success?.data ?? [];
    console.log('Grant created for', grant.accountId, 'accounts', ready);
  },
});

openPortal 必须使用 对象 要收到的表格 onEvent. 职位超载没有赠款活动.

连接解除时嵌入应用程序控制 。 打电话 closePortal() 从主机 UI 或处理可选的门户事件后; 重复呼叫为 在没有门户打开时安全无事:

await finatic.openPortal({
  onEvent: (eventName) => {
    if (eventName === 'account.grant.created') {
      finatic.closePortal();
    }
  },
  onClose: () => {
    // Runs once for either the portal close control or closePortal().
  },
});

门户认证和连接准备

onSuccess(userId) 表示门户会话认证. 这并不意味着 中间连接已经存在或连接器数据已经准备好 。 连接 schema v1 通过键入方式发布后期的转换 portal.lifecycle 事件:

await finatic.openPortal({
  onEvent: (eventName, payload) => {
    if (eventName !== 'portal.lifecycle' || !isPortalLifecycleEventPayload(payload)) return;

    switch (payload.stage) {
      case 'portal_authenticated':
        console.log('Portal authenticated', payload.userId);
        break;
      case 'broker_connection_created':
        console.log('Connection persisted', payload.connectionId);
        break;
      case 'push_agent_state_changed':
        // Only LIVE_DATA and STALE_LIVE_DATA can report dataReady: true.
        console.log(payload.state, payload.dataReady ?? 'not asserted');
        break;
    }
  },
});

SDK只有在符合Schema版本1和时才会接受生命周期消息 导出阶段/状态允许列表。 不支持的版本,错误的有效载荷, 出乎意料的字段(包括有秘密字段),以及无效的准备状态 放弃索赔。 现有范围 (eventName: string, payload?: unknown) 处理者仍然可以指派,非生命周期事件继续被转交.

客户端数据方法返回电线信封 { success, error, warning } (无) { data, errors }) (中文(简体) ).

精确的仪器描述符

账户订单、订单填充和事件、职位、位置、位置和数量都显示 API 生成 FDXInstrumentDescriptor 从包根。 准确的将来,保持满载 合同身份(MGCZ6 财务报告和审定财务报表 MGCG7 ; 仅根符号,例如 MGC 为: 标记为 future.identityQuality === 'ROOT_ONLY'. 可选过期、交换、提供者符号, 并且当 API 无法校验时, 出处字段则不在此列 。 浏览器 SDK 不推断 或正常的仪器身份.

import {
  FDXFutureInstrumentDetailsIdentityQualityEnum,
  type FDXBrokerPosition,
} from '@finatic/client';

const result = await finatic.v1.listPositions({ accountId: 'account-id' });
const position: FDXBrokerPosition | undefined = result.success?.data[0];

if (
  position?.instrument?.future?.identityQuality ===
  FDXFutureInstrumentDetailsIdentityQualityEnum.Exact
) {
  console.log(position.instrument.finaticInstrumentId, position.instrument.future.contractCode);
}

await finatic.v1.createAccountOrder({
  accountId: 'account-id',
  idempotencyKey: crypto.randomUUID(),
  body: {
    order: {
      symbol: 'MGCZ6',
      finaticInstrumentId: 'fininst_mgcz6',
      instrumentId: 'provider-native-id',
    },
  },
});

后遗症符号唯命令体和现有的平面身份字段仍然得到支持. 当两者 提供身份字段,API验证它们在授权账户范围内同意.

合同能力和订单类型

包根导出 FDXAssetType.EventContract, (中文(简体) ), EventContractCapabilityResponse, (中文(简体) ), AccountOrderSchemaResponse,以及 FinaticAPIErrorResponse 从核准的公众开放API 艺术品 能力轴是独立的:提供者提供和执行证据不 意味着公共写作授权或账户权利。 处理 publicEnabled !== true, (中文(简体) ), accountEntitled !== true,或 closingOnly === true 作为不提交开业令的理由.

import {
  FDXAssetType,
  type AccountOrderSchemaResponse,
} from '@finatic/client';

const response = await finatic.v1.getAccountOrderSchema<AccountOrderSchemaResponse>({
  accountId: 'account-id',
  action: 'place',
});
const capability = response.success?.data.eventContract;

if (
  capability?.publicEnabled === true &&
  capability.accountEntitled === true &&
  capability.closingOnly !== true
) {
  await finatic.v1.createAccountOrder({
    accountId: 'account-id',
    idempotencyKey: crypto.randomUUID(),
    body: { order: { assetType: FDXAssetType.EventContract, symbol: 'EVENT-SYMBOL' } },
  });
}

EVENT_CONTRACT 是公共资产元素值。 供应商自有有效载荷领域,例如: asset_type: 'event_contract' 穿过没有改变。 未知的公开 assetType 值失败 而不是被省略或绘制为公平。 经认证的事件合同写作 公共授权仍需要提供者/账户证据;SDK的这一释放并不要求这些证据.

打电话 FinaticConnect.reset() 在此之前 init 当您需要一个新的会话边界时.

接头

// Backend (@finatic/server-node) — keep FINATIC_API_KEY here
const token = await finatic.v1.getToken();
// 90 seconds. Send token to the browser only.

从未在 Vite 中设置 API 密钥NEXT_PUBLIC_ 用于生产.

从β移动

Beta 路径家族v1 替换
/api/beta/session/init后端 v1.getToken() 编号 : session/init
/api/beta/session/startFinaticConnect.init(oneTimeToken)
/api/beta/session/portalfinatic.openPortal(...) 或后端 v1.getPortalUrl()
/api/beta/brokers/data/accountsfinatic.v1.listAccounts(...)
/api/beta/brokers/data/balancesfinatic.v1.listBalances({ accountId })
/api/beta/brokers/data/positionsfinatic.v1.listPositions({ accountId })
/api/beta/brokers/data/ordersfinatic.v1.listOrders({ accountId })
/api/beta/brokers/data/transactionsfinatic.v1.listTransactions({ accountId })
/api/beta/brokers/ordersfinatic.v1.createAccountOrder({ accountId, body, idempotencyKey })
/api/beta/brokers/connectionsfinatic.v1.listAccounts() 加号 finatic.v1.listAccountGrants()

连接拥有门户机构/自动/同意UX. 这些流动不是公布于 finatic.v1。位置批号不在v1外观上 listPositions不要通过β connectionId 作为 {accountId}。 。 。 .

环境

apiEnvironment 实值 live | sandbox (单位:千美元)X-Finatic-Environment) URL 预设(environment: 'staging' | 'production' | ...)与沙盒 vs活数据相分离.

常见命令

任务命令
构建npm run build
测试npm test
林特npm run lint

文档

这个README是客户SDK合同. 在写完整集成之前获取其余部分 :

版本与发布记录

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

版本发布日期距今
1.1.6latest2026/10/1728 天前
1.1.52026/10/111 个月前
1.1.42026/09/201 个月前
1.1.32026/09/181 个月前
1.1.22026/09/151 个月前
1.1.12026/09/151 个月前

关于 @finatic/client 的常见问题

@finatic/client 是什么?

用于浏览器集成的 Finatic 客户端 SDK

如何安装 @finatic/client?

在项目目录运行 npm install @finatic/client,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=16.8.0)、react-dom(>=16.8.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@finatic/client 支持 TypeScript 吗?

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

@finatic/client 支持 ESM 还是 CommonJS?

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

@finatic/client 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@finatic/client 可以商用吗?

@finatic/client 使用 PROPRIETARY 许可。声明的许可为 PROPRIETARY,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@finatic/client 的下载量有多少?

根据 npm 官方下载统计,@finatic/client 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,129 次,日均约 71 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@finatic/client 还在维护吗?

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