# @avail-project/nexus-core 中文文档

规范地址：https://npmcn.com/package/%40avail-project/nexus-core/

版本：3\.2\.0
npm 元数据更新时间：2026-11-05T12:56:33.144Z
中文译文更新时间：2026-11-07T07:29:22.477Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40avail-project/nexus-core
原文对照：https://npmcn.com/package/%40avail-project/nexus-core/?lang=original
项目主页：https://github.com/availproject/nexus-sdk#readme
源码仓库：https://github.com/availproject/nexus-sdk

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：451 kB，8 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=18\.0\.0
- 运行依赖：10 个
- 首次发布：2025-09-26T12:24:40.835Z
- 最新版本发布：2026-11-05T12:56:32.736Z
- 近 30 天下载量：2405（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：129（近 12 个月 93 个）

## 中文简介

跨链交易的无头 SDK

## 安装

```sh
npm install @avail-project/nexus-core
```

也可以使用：`pnpm add @avail-project/nexus-core`、`yarn add @avail-project/nexus-core`、`bun add @avail-project/nexus-core`

## README

# `@avail-project/nexus-core`

无头 TypeScript SDK 用于跨链互换,同资产桥接,钱包余额和EVM 合同执行。 带回您的钱包连接和用户界面 .

## 安装和连接

```bash
npm install @avail-project/nexus-core
```

```ts
import { createNexusClient, type EthereumProvider } from '@avail-project/nexus-core';
import { formatUnits, parseUnits } from '@avail-project/nexus-core/utils';

const client = createNexusClient({ clientId: 'your-app-name', network: 'mainnet' });
await client.initialize();

// Use the EIP-1193 provider supplied by your wallet connector.
declare const provider: EthereumProvider;
await client.setEVMProvider(provider);
```

`clientId` 是需要的、非空的、稳定的应用标识符。 目录查询和准确输入 引用预览需要初始化,但没有钱包。 执行和钱包余额需要连接 供养. 在账户/提供者更改和调用后重建客户端 `client.destroy()` 关于清理.

`mainnet` 财务报告和审定财务报表 `canary` 使用主网链. `testnet` 仅支持独立执行; 意图 操作和同步意图目录帮助器拒绝 `ENVIRONMENT_NOT_SUPPORTED`。 。 。 .

## 选择操作

| 需求 | 方法 |
| --- | --- |
| 接收指定的目标数量 | `swapWithExactOut` |
| 支出指定来源金额 | `swapWithExactIn` |
| 同一资产跨链接通 | 两种互换方法,每条链上都有该资产的地址 |
| 为目的地合同电话提供资金,然后执行 | `swapAndExecute` |
| 使用目的地的资金执行 | `execute` |
| 估计独立合同电话 | `simulateExecute` |

数额为未加工 `bigint` 数值。 通过链式ID和合同地址解析令牌,然后使用自己的 小数 `parseUnits` 编号 : `formatUnits`。原生地址来自目录元数据. 路线、提供者和收费由引文决定.

## 发现资产和余额

```ts
const chains = client.getSupportedChains();
const swapChains = chains.filter((chain) => chain.capabilities.intent);
const executeChains = chains.filter((chain) => chain.capabilities.execute);

const page = await client.getTokensByChain(8453, { symbol: 'USDC', limit: 25 });
const baseUsdc = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
const destination = { chainId: 8453, tokenAddress: baseUsdc } as const;
const token = await client.getToken(destination);
const amountRaw = parseUnits('10', token.decimals);

const balances = await client.getBalances();
for (const balance of balances) {
  console.log(balance.symbol, formatUnits(balance.usableBalanceRaw, balance.decimals), balance.usable);
}
```

余额曝光 `actualBalanceRaw` (完整的钱包余额)和 `usableBalanceRaw` (备有 天然气储备后的路由)作为 `bigint`。 。 。 . `balanceRaw` 是一个已贬值的别名,其名称是: `usableBalanceRaw`。 。 。 . `valueUsd` 值为可用余额,且为 `null` 当没有价格时.

| 目录方法 | 回返 |
| --- | --- |
| `getSupportedChains()` | 缓存链式元数据, 没有符号列表 |
| `getTokens(query?)` | 横跨链条的插页 |
| `getTokensByChain(chainId, query?)` | 在一个链上键入页面 |
| `getToken({ chainId, tokenAddress })` | 精确符号元数据 |
| `getAvailableSourceTokens(destination, selectedSources?, query?)` | 包含链条和令牌的提供者组的页面 |
| `getAvailableDestinationTokens(sources, query?)` | 包含目的符号的链条页 |
| `confirmRouteExists(sources, destination)` | 作为布尔的目录兼容性 |
| `getSupportedChainsForRoute(constraints)` | 链式元数据匹配路由限制 |

接受按键查询 `chainId`, (中文(简体) ), `providers`, (中文(简体) ), `name`, (中文(简体) ), `symbol`, (中文(简体) ), `contract`, (中文(简体) ), `includeUnverified`, (中文(简体) ), `offset`,以及 `limit`与AND结合的过滤器。 默认抵消0并限制50页;上限 限制为1000。 调试页面默认已验证资产; 选择使用 `includeUnverified: true`。 。 。 . 精确的搜索可以解决未验证的符. 平衡包括两者;尊重 `verified` 财务报告和审定财务报表 `usable`。 。 。 .

提前标注 `page.offset + page.limit` ,而这个小于 `page.total`兼容性 页面在过滤前计算候选人,所以空页并不意味着没有后期匹配. 当过滤器或选择器改变时重置偏移 。 保留显示页面以外的选择; 返回的符号使用 `address`选择 `tokenAddress`. 复制供应商集团 通过链式ID加地址.

对于精确输入的采取者,将现有来源传递至 `getAvailableSourceTokens` 所以所有选择 共享一个提供者。 确切产出来源是替代品:用途 `getAvailableSourceTokens(destination, [], query)`。 。 。 . `confirmRouteExists` 需要共享提供者 并且不能保证引言 查找失败与空页分开拒绝 .

路由限制接受 `sources`, (中文(简体) ), `destinations`, (中文(简体) ), `providers`,以及 `valueUsd`。腿部接受 `chainId?`, (中文(简体) ), `tokenAddress?`,以及 `amountRaw?`;金额需要两个身份字段。 用同样的 字段,最多一个缩放模式:源数、目的地数、, 或美元价值。 数量必须是非负数。 Token 查询不会继承路由限制 .

## 交换

精确输出指定要接收什么 。 奥米 `sources` (或通过) `[]`自动钱包资金; 明确来源限制了符合资格的链条和标志. `toNativeAmountRaw` 可选请求 目的地是天然气的本土资金.

```ts
const result = await client.swapWithExactOut({
  toChainId: destination.chainId,
  toTokenAddress: destination.tokenAddress,
  toAmountRaw: amountRaw,
  sources: [{ chainId: 1, tokenAddress: '0xA0b86991c6218b36c1d19d4a2e9eb0cE3606eB48' }],
});
console.log(result.intentId, result.intentExplorerUrl);
```

精确输入指定了每个源的正生量. 所有来源和目的地必须 共享一个提供者.

```ts
const source = {
  chainId: 1,
  tokenAddress: '0xA0b86991c6218b36c1d19d4a2e9eb0cE3606eB48',
} as const;
const sourceToken = await client.getToken(source);
await client.swapWithExactIn({
  sources: [{ ...source, amountRaw: parseUnits('5', sourceToken.decimals) }],
  toChainId: destination.chainId,
  toTokenAddress: destination.tokenAddress,
});
```

## 引用和预览率

过 `options.hooks.onIntent` 以显示确认 UI 。 行动等待 `allow()` 或者说 `deny()`;单从回调返回不接受. 没有钩子,引文被接受 自动。 ERC-20批准使用最低要求的金额;钱包也可能提示 批准签名和源交易.

```ts
import type { IntentHookData, SwapOperationOptions } from '@avail-project/nexus-core';

declare function showReview(hook: IntentHookData): void;
const options: SwapOperationOptions = {
  hooks: { onIntent: showReview },
  slippageBps: 50,
  fillTimeoutMinutes: 2,
  pollingIntervalMs: 2000,
};
```

过 `options` 作为交换方法的第二个参数。 这些是默认的选项值 . 剪贴页接受从 0 到 10 000 的整数或 `'auto'`。UI使用的审查 `hook.quote`, (中文(简体) ), `hook.execution`, (中文(简体) ), `hook.allow()`, (中文(简体) ), `hook.deny()`,以及 `await hook.refresh(sources?)`。 。 。 . 刷新返回完整替换引号; 使返回值读取 `hook.execution` 再来一次 在允许前等待更新。 精确输入的替换源仍必须携带符号 地址和原始金额。 引文在验收后被固定.

引文曝光 `input`, (中文(简体) ), `output`, (中文(简体) ), `output.minAmountRaw`, (中文(简体) ), `fees`, (中文(简体) ), `allowances`, (中文(简体) ), `plan`, (中文(简体) ), `sourceVerdicts`,以及 `expiresAt` (Unix秒). 期末金额 `Raw` 为: `bigint`· ; 美元引号数额是小数字符串. `quote.isExecutable` (一) 来源平衡检查; `quote.executionWarnings` 说明任何不足.

`swapWithExactIn` 可以在钱包连接前预览费率。 它的钩子暴露:

```ts
type QuoteExecution =
  | { possible: true }
  | { possible: false; cause: 'not-connected' | 'insufficient-balance' };
```

在整个操作中,预览仍然不连续。 连接后, 启动新的互换呼叫 并审查它的新引文. `allow()` 以断开的预览拒绝 `WALLET_NOT_CONNECTED`· ; `deny()` 拒绝作为用户拒绝。 没有成功的预览结果 。 没有钩子,引文 事件被释放,呼叫被拒绝。 如果缺少源批准气体,预览报价也可能失败. 余额不足的已连接引文无法执行; 为钱包提供资金并刷新 . 精确输出和复合操作需要钱包.

## 进展和成果

`options.onEvent` 接收 `IntentEvent`数字 :

-   `quote`:当前引文和计划.
-   `step`数字 : `step`, (中文(简体) ), `state` (单位:千美元)`started`, (中文(简体) ), `completed`,或 `failed`, (中文(简体) ), `committed`选择 `errorDetails`。 。 。 .
-   `status`数字 : `intentId`, (中文(简体) ), `status` (单位:千美元)`created`, (中文(简体) ), `deposited`, (中文(简体) ), `fulfilled`,或 `expired`, (中文(简体) ), `substatus`源代码 `legs` 有交易链接和错误.

```ts
import type { IntentEvent } from '@avail-project/nexus-core';

const onEvent = (event: IntentEvent): void => {
  switch (event.type) {
    case 'quote':
      console.log('Quote updated', event.quote.output, event.quote.fees, event.quote.plan.steps);
      break;
    case 'step':
      console.log('Step progress', event.step.type, event.state);
      if (event.state === 'failed') {
        console.error(event.errorDetails?.message, event.errorDetails?.code);
        // A committed attempt may still settle; check its status before retrying.
        console.log('Intent committed', event.committed);
      }
      break;
    case 'status':
      console.log('Intent status', event.intentId, event.status, event.substatus);
      for (const leg of event.legs) {
        console.log('Source progress', leg.sourceIndex, leg.status, leg.txExplorerUrl, leg.error);
      }
      break;
  }
};

const swapOptions: SwapOperationOptions = { ...options, onEvent };
```

过 `swapOptions` 作为交换方法的第二个参数。 将日志替换为您的 应用程序进度 UI;下面的错误示例使用这些相同的选项.

计划步骤类型 `erc20_approval`, (中文(简体) ), `source_approval_signature`, (中文(简体) ), `intent_signature`, (中文(简体) ), `native_transaction`, (中文(简体) ), `intent_submission`,以及 `intent_fulfillment`。事件召回失败 不中断操作。 使用 `errorDetails` 而不是堕落的一步 `error` 绳子.

实现后交换承诺 `IntentResult`数字 : `intentId`, (中文(简体) ), `intentExplorerUrl`, (中文(简体) ), `quote`, (中文(简体) ), `status`, (中文(简体) ), `approvals`, (中文(简体) ), `nativeTransactions`选择 `attemptId`音轨 `attemptId` 并行 `intentId` 请求支持。 被拒绝的允诺可跟随已经提交的交易.

## 执行合同呼叫

```ts
import type { ExecuteParams } from '@avail-project/nexus-core';

declare const contract: ExecuteParams['to'];
declare const calldata: ExecuteParams['data'];
const executeParams: ExecuteParams = {
  toChainId: destination.chainId,
  to: contract,
  data: calldata,
  value: 0n,
  tokenApproval: {
    toTokenAddress: destination.tokenAddress,
    amount: amountRaw,
    spender: contract,
  },
};
const estimate = await client.simulateExecute(executeParams);
const executed = await client.execute(executeParams);
console.log(estimate.estimatedGasUnits, executed.execute.txExplorerUrl);
```

奥米 `tokenApproval` 当不需要时; 使用本地语汇 `value`. 需要模拟 钱包,并估计批准气体。 执行返回 `execute`选项 `approval`, (中文(简体) ), 财务报告和审定财务报表 `chainId`默认情况下,它等待收据; `waitForReceipt: false` 播放后返回. 收款控制为 `receiptTimeout` (毫秒,默认为30万)和 `requiredConfirmations` (默认一). 提交的交易在只播出结果后仍会失败.

## 供资和执行

`swapAndExecute` 默认为 `tradeType: 'exactOutput'`: 指定 `toAmountRaw`和SDK基金 当所选余额已经覆盖执行时,目标缺口或跳过交换.

```ts
const composed = await client.swapAndExecute(
  {
    tradeType: 'exactOutput', // Optional; this is the default.
    toChainId: destination.chainId,
    toTokenAddress: destination.tokenAddress,
    toAmountRaw: amountRaw,
    execute: {
      to: contract,
      data: calldata,
      gas: 350_000n,
      tokenApproval: executeParams.tokenApproval,
    },
  },
  {
    hooks: {
      onIntent({ intent, allow }) {
        console.log(intent.executeRequirement, intent.available, intent.shortfall);
        allow(); // In an app, call after the user confirms.
      },
    },
  },
);
console.log(composed.swapSkipped, composed.executeAmountRaw);
if (composed.executionMode === 'wallet') console.log(composed.execute.txExplorerUrl);
if (!composed.swapSkipped) console.log(composed.swapResult.intentExplorerUrl);
```

提供正数 `execute.gas` 估计与你的合同电话有关 SDK账户 执行气体和价值,为目的地短缺提供资金,然后在完成后执行. 复合钩子收到 `intent`没有 `quote`;即使资金已经足够,它也能运作. `intent.quote` 仅在 `intent.swapRequired` 这是真的.

准确输入, 设置 `tradeType: 'exactInput'`,提供正数 `amountRaw` 每个来源,和 删除 `toAmountRaw`。匹配目的链和令牌的来源留在钱包中,并且是 预留执行。 其他来源以固定金额输入互换,必须共享一个 提供方与目的地。 如果每个来源已经是目的地标志,则互换被跳过; ERC -20的处决仍需要 本地天然气资金在这个链.

```ts
declare function buildDepositData(amountRaw: bigint): NonNullable<ExecuteParams['data']>;

await client.swapAndExecute(
  {
    tradeType: 'exactInput',
    sources: [{ ...source, amountRaw: parseUnits('5', sourceToken.decimals) }],
    toChainId: destination.chainId,
    toTokenAddress: destination.tokenAddress,
    execute: {
      to: contract,
      data: calldata,
      gas: 350_000n,
      tokenApproval: {
        toTokenAddress: destination.tokenAddress,
        amount: 0n, // The SDK sets the final approval amount after funding.
        spender: contract,
      },
    },
  },
  {
    hooks: {
      onIntent({ intent, allow }) {
        console.log(intent.executeRequirement.token.amountRaw, intent.quote?.output);
        allow(); // In an app, call after the user confirms.
      },
    },
    beforeExecute: async ({ receivedAmountRaw, executeAmountRaw }) => {
      console.log('Actual swap proceeds', receivedAmountRaw);
      return { data: buildDepositData(executeAmountRaw) };
    },
  },
);
```

评论钩显示一个基于引文最小输出加上所选取的本地符号的估计. 经审查后,SDK在供资和 完成之后再次出现. `beforeExecute` 接收 `BeforeExecuteContext`数字 :

-   `receivedAmountRaw`: 各种资金的平衡差额, 或当互换被跳过时为零.
-   `executeAmountRaw`: 准确输入时, 实际收益加上选定的本地符号, 仅次于本地 执行储备; 确切产出,请 `toAmountRaw`。 。 。 .

例如,从10个目的地开始的钱包 USDT 并选择其中的5个用于执行 5个本地人 如果资金将余额提高到140美元,则钩子获得130美元的收益 135美元用于执行,使未选取的5美元未受影响.

余额差异包括供资期间不相关的转账。 缺少当地资金, 未实现余额读取、非正值互换收益或当地执行储备不足 执行。 原生产出储备执行值和气体;非原生产出请求减少气体 需要的时候。 何时 `tokenApproval.toTokenAddress` 匹配精确输入目的地 SDK 储存批准气体,然后重新检查备抵,建立批准 `executeAmountRaw` 之后 钩子回来了 开发者提供更新的调用数据;批准建造留在SDK. 当每个输入都是当地输入时,金额已经知道,所以足够的津贴可以避免预留 不需要的批准气体.

复合 `refresh(sources?)` 返回当前收费估计数和替换的更新意向 必要时援引资金。 它重用原有的平衡快照; 开始新的操作来重读 余额。 外出来源保留选择。 对于准确的输出, `[]` 清除; 准确输入 替换源必须是非空的,并包括符号地址和正原始数量. 顶级 `beforeExecute` 能够返回 `{ data?, value?, gas? }` 在供资后,但取消 重新计算资金. 使用 `executeAmountRaw` 通过这个钩子编写对量敏感的调用数据。 忽略的召回 情况仍然得到支持. 意向性活动包括供资;综合承诺也包括随后的合同呼吁.

### 提供方目的地执行

设定 `useProviderDestinationExecution: true` 打开 `swapAndExecute` 要求Relay批准和 执行目的呼叫. `swapWithExactIn` 财务报告和审定财务报表 `swapWithExactOut` 仍为普通互换. 重用 `execute.to`, (中文(简体) ), `execute.data`, (中文(简体) ), `execute.value`,以及 `execute.tokenApproval`; SDK 编码 执行通知前的批准。 目的地合同必须支持代表 因为它的呼叫器是Relay的路由器.

```ts
const deposited = await client.swapAndExecute(
  {
    tradeType: 'exactInput',
    sources: [{ ...source, amountRaw: parseUnits('5', sourceToken.decimals) }],
    toChainId: destination.chainId,
    toTokenAddress: destination.tokenAddress,
    execute: {
      to: contract,
      gas: 350_000n,
      tokenApproval: { toTokenAddress: destination.tokenAddress, amount: 0n, spender: contract },
    },
  },
  {
    useProviderDestinationExecution: true,
    beforeExecute: async ({ executeAmountRaw }) => ({ data: buildDepositData(executeAmountRaw) }),
    hooks: {
      onIntent({ intent, allow }) {
        console.log(intent.executionMode, intent.executeRequirement.token.amountRaw, intent.quote);
        allow(); // In an app, call after the user confirms.
      },
    },
  },
);
if (deposited.executionMode === 'provider') {
  console.log(deposited.executeAmountRaw, deposited.swapResult.intentExplorerUrl);
  // No wallet execution transaction: deposited.execute and deposited.approval are undefined.
}
```

使用此选项省略或 `false`,上面描述的钱包流仍然是默认的。 用这个 设置为 `true`,一个不支持的路由在签名前拒绝,并且永远不会回到钱包执行中. 中间的软件 `quote.supportsDestinationCalls` 旗帜决定来自资助分支的支持 实际被选中:允许多个候选人,但只有一个链条/托起的腿可以资助路线. 被选中的多条腿,或者没有旗帜的更老的中间软件,拒绝.

提供执行人通过引文为整个电话提供资金。 现有目标钱包余额 不得在保证金中减去或默示增加。 匹配目的地的精确输入源 链/托肯输入引文作为明确的源输入。 SDK从不花额外的钱包 实现后的迹象。 只能批准输出符; 必须出现本地执行值 符合当地产出,并符合引用的执行预算。 ERC-20 输出为本地调用值 不支持提供者模式.

精确输出引用请求 `toAmountRaw` 没有钱包执行气体。 首先精确输入 预览中继引用,然后将执行金额固定在保证最小值以下。 预备队 等于该最低值的1%(四舍五入为原始单位),按照报价的美元估价,上限为一美元 (四舍入生单位. 无价产出,或产出太小,不能表示正储备 与执行金额,拒绝。 这种储备与互换滑行是分开的.

在提供者模式下, `beforeExecute` 运行 **审议前** 准备编码的呼叫,并再次 在每一个新鲜. `receivedAmountRaw` 是预览的保证最小值(请求的金额) (a) 准确产出,非计量收益; `executeAmountRaw` 是固定的执行预算. 将后者用于对量敏感的调用数据或本地数据 `value`。回调只应准备 呼叫,必须安全地重复。 SDK引用这些电话 并拒绝低于 签名前已编码预算 。 更新新电话、预算和最后引文; 失败的刷新保留了先前的意图.

综合审查显示 `executionMode: 'provider'`,固定存款,零钱包气体 ; 报价中包括供应商执行费用。 源批准和意图 签名可能需要钱包提示 。 完成提供者执行,剩余 输出到接收者。 结果暴露了 `executeAmountRaw` 财务报告和审定财务报表 `swapResult`,没有 编造 `execute` 或者说 `approval` 交易。 在钱包模式下, `executeAmountRaw` 实际 执行分配和现有交易结果仍然有效.

## 历史和错误

```ts
const history = await client.listIntents({ page: 1, status: 'fulfilled' });
console.log(history.intents, history.total);
```

所有 SDK 错误扩展 `NexusError` 并携带 `category`, (中文(简体) ), `code`, (中文(简体) ), `context`选择 `details`。 。 。 . 使用 `UserActionError` 拒绝和 `ERROR_CODES` 用于具体的追回行动. `getIntentQuoteFailure(error)` 提取结构化路线、数量、余额、批准气体和价格 诊断。 处理代码而不是解析信件文本 。 见 [引用错误](https://npmcn.com/package/%40avail-project/nexus-core/docs/ERRORS.md)。 。 。 .

| 引用错误常数( E)`ERROR_CODES.*`(中文(简体) ) | 恢复 |
| --- | --- |
| `BACKEND_VALUE_ABOVE_CEILING` | 降低数值; `getIntentQuoteFailure(error)?.details.maxValueUsd` 美元限额 |
| `BACKEND_INPUT_BELOW_DEPOSIT_FEE` | 增加来源金额以支付存款费 |
| `BACKEND_NO_ROUTE_TO_DESTINATION` | 选择由允许提供者支持的目的地 |
| `BACKEND_NO_ROUTABLE_SOURCE` | 审查来源裁决并调整来源或各种失败原因 |

中间软件报告特定数量或目标失败, 当所有无法运行源时 说吧 这些失败 `retryable: false`; 在重试前更改请求。 来源判决 可包含 `DESTINATION_NOT_SERVED`。没有每个供应商支持的目的地仍然随行 不支持符号处理 .

```ts
import {
  ERROR_CODES,
  NexusError,
  UserActionError,
  getIntentQuoteFailure,
} from '@avail-project/nexus-core';

try {
  const swap = await client.swapWithExactOut(
    {
      toChainId: destination.chainId,
      toTokenAddress: destination.tokenAddress,
      toAmountRaw: amountRaw,
    },
    swapOptions,
  );
  console.log('Fulfilled', swap.intentExplorerUrl);
} catch (error) {
  if (error instanceof UserActionError) {
    console.info('Action declined', error.code);
  } else if (error instanceof NexusError) {
    switch (error.code) {
      case ERROR_CODES.WALLET_NOT_CONNECTED:
        console.info('Connect a wallet, then request a fresh quote.');
        break;
      case ERROR_CODES.BACKEND_INSUFFICIENT_BALANCE:
        console.info('Fund the wallet or choose different source assets.');
        break;
      case ERROR_CODES.BACKEND_INSUFFICIENT_APPROVAL_GAS:
        console.info('Add native gas funds on the source chain or choose another source.');
        break;
      default:
        console.error(error.message, error.code, error.context);
    }

    const failure = getIntentQuoteFailure(error);
    if (failure) console.log('Quote diagnostics', failure.subcode, failure.sourceVerdicts);
    if (error.details?.approvals) console.log('Broadcast approvals', error.details.approvals);
  } else {
    throw error;
  }
}
```

使用信件更新您的 UI 并保留错误代码/ context 支持 。 事件处理器 显示进展; 行动的承诺 仍然必须抓住 处理最后的失败.

承诺后超时或连接失败后, 请检查历史、 探索者、 已知 重试前交易散列。 意图还可能实现。 批准失败可能暴露 `error.details.approvals` 与 `confirmed`, (中文(简体) ), `reverted`,或 `unconfirmed` 各州。 一个未经证实的 交易仍可确认;在启动另一个操作时使用新引号.

产品分析可以禁用 `analytics: { enabled: false }` 在客户端配置中. 诊断日志是单独配置的;参见 [遥测参考](https://npmcn.com/package/%40avail-project/nexus-core/docs/TELEMETRY.md)。 。 。 .

## 移动已存在的集成

使用基于地址的互换来删除 `bridge` 编号 : `bridgeAndTransfer` 方法及方法 `swapAndExecute` 页:1 `bridgeAndExecute`。没有接收者覆盖或独立交换模拟方法; 使用引号校正 `onIntent`。 。 。 . `getBalancesForSwap` 是一个已贬值的别名,其名称是: `getBalances`。 。 。 .

删除本地最大/ 路由帮助器、 安全和电平键配置, `onAllowance`旧的 桥梁/游泳计划活动。 使用 `options.hooks`, (中文(简体) ), `IntentQuote`, (中文(简体) ), `IntentEvent`,以及 `IntentResult`。 。 。 . 可用功能来自 `@avail-project/nexus-core/utils` 财务报告和审定财务报表 `client.utils`。 。 。 .

## 常见问题

### @avail-project/nexus-core 是什么？

跨链交易的无头 SDK

### 如何安装 @avail-project/nexus-core？

在项目目录运行 npm install @avail-project/nexus-core，或使用 pnpm add / yarn add / bun add。

### @avail-project/nexus-core 支持 TypeScript 吗？

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

### @avail-project/nexus-core 支持 ESM 还是 CommonJS？

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

### @avail-project/nexus-core 需要什么版本的 Node\.js？

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

### @avail-project/nexus-core 可以商用吗？

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

### @avail-project/nexus-core 的下载量有多少？

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

### @avail-project/nexus-core 还在维护吗？

最新版本 3\.2\.0 发布于 2026/11/05（2 天前）；至今共发布 129 个版本，其中过去 12 个月发布了 93 个；首次发布于 2025/09/26。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

