@alienplatform/bindings

中文文档
3.3.54发布于 2026/11/05FSL-1.1-Apache-2.0TypeScriptES Module近 30 天下载 2.8万

用于异形存储、 kv、 队列、 金库、 和邮资的直线类型脚本绑定

中文使用文档
文档目录9 节
  1. 远程存储
  2. 远程 KV
  3. 链接集装箱
  4. 邮资
  5. 原生添加分辨率
  6. 地方发展
  7. 预建软件包( E) npm/ (中文(简体) )
  8. 队列批次
  9. 远程队列

@alienplatform/bindings

用于外星存储、 kv、 队列、 金库、 链接- 容器的直接类型脚本绑定 和Postgres over a 正在处理 美洲狮 塞顿。 外加者自己住在罗斯特 条框 crates/alien-bindings-node; 此软件包是已发布的 JavaScript 把它包起来.

远程存储

使用 Bindings.forRemoteDeployment 从信任的后端访问存储器 用于现有部署的资源。 永远不要在浏览器中放出异形 API 令牌, 移动,或其他客户端代码。 符号必须具有写入权限 部署; 仅读符号不能解决云证书.

import { Bindings } from "@alienplatform/bindings"

const bindings = await Bindings.forRemoteDeployment({
  deploymentId: process.env.ALIEN_DEPLOYMENT_ID!,
  token: process.env.ALIEN_API_TOKEN!,
})

const archive = bindings.storage("archive")
const write = await archive.put("reports/latest.json", Buffer.from(JSON.stringify({ ready: true })), {
  condition: "absent",
  attributes: {
    contentType: "application/json",
    cacheControl: "private, max-age=60",
    metadata: { schema: "report-v1" },
  },
})

const head = await archive.head("reports/latest.json")
const object = await archive.get("reports/latest.json")
const report = JSON.parse(object.data.toString())
console.log(write.eTag, head.meta, head.attributes, report)
const reports = await archive.list("reports/")

await archive.delete("reports/latest.json")

云存储提供者坚持这些对象属性. 本地文件系统 提供者拒绝带有属性的写作,因为它不能代表它们. GCS 也拒绝 contentEncoding: "gzip": 它的减压转码省略 字节精确所需的响应长度 。 其他GCS编码,例如 br被保存下来.

condition: "absent" 制造 put 仅用原子创建写入。 如果对象 已存在, 操作失败 STORAGE_OBJECT_ALREADY_EXISTS 而不是替换它.

远程存储曝光 get, (中文(简体) ), put, (中文(简体) ), head, (中文(简体) ), list,以及 delete它不会 曝光复制或签名的 URL 。 一样 Bindings 和存储手柄仍然有效 本地客户端刷新短寿命的云层证书并定期更新 重新发现部署的指定管理器. 旋转外星 API 令牌 需要新建 Bindings 数值。 过 apiBaseUrl 仅在 针对非默认的异构 API 端点; 普通 HTTP 只在 a 上被接受 地方发展的回放地址.

命名的资源必须是跑道、 冻结 S3、 GCS 或 Azure Blob 存储器 已启用远程访问资源。 允许远程访问增加了混凝土 对象读取/写入/列表/删除该桶或容器的访问权限 部署的专用遥控器身份。 生成并应用更新客户设置 允许它在现有部署中。 终点返回一个短暂的租约 对于远程绑定身份,只有在它验证了指定的资源之后,所以 外国代币和所有退回的供应商证书必须作为后端处理 秘密,我们有秘密.

远程 KV

信任的后端可以使用相同的读取和写入客户端的 KV 资源 短期证书租赁作为远程存储:

const bindings = await Bindings.forRemoteCustomer({ project, externalId, token })
await bindings.kv("check-cache").setJson("status", { ready: true }, { ttl: 86400 })

启用 remoteAccess 并首先应用更新的设置. 资源必须运行和冻结。 AWS 允许在 选定的 DynamomDB 表格; Azure 授予选定表格上的实体操作. Firestore IAM 无法在共享默认数据库中隔离收藏, 因此它的 远程身份可以在整个项目中访问文件。 仅启用 当范围合适时.

远程 KV 使用相同的读取、 写入、 有条件写入、 扫描和逻辑 TTL 行为作为工作量 KV. 原始值限制在DynamoDB上的408 576字节, Firestore上的783,360字节(基础编码加文件元数据需要室), 和24,576字节在Azure和本地存储. DynamoDB 保留它的一基B 400 KiB 密钥和元数据项限制 。 使用对象存储值较大 .

链接集装箱

这些工厂由下列公司再出口: @alienplatform/sdk 为工人应用. 长期运行的Control和守护进程应用程序可以直接导入此包. A 类 链接容器为只读服务发现 :

import { container } from "@alienplatform/bindings"

const database = container("database")
const internalUrl = await database.getInternalUrl()
const publicUrl = await database.getPublicUrl() // string | null

使用内部 URL 调用同一部署中的资源 。 使用 只有当呼叫者不在私人网络时, 才会公开 URL .

邮资

Postgres是只连接:每个后端都说相同的线程,所以 绑定手背连接细节, 您的应用程序与自己的驱动程序连接 . 解析管理下云后端( Aurora, Cloud SQL, 灵活服务器) 读取 该云的秘密商店的密码 使用工作量本身的身份—— 只能装上定位器.

import { Client } from "pg"
import { postgres } from "@alienplatform/bindings"

const conn = await postgres("my-db").connection()

// Field style: node-postgres parses a URL's sslmode and would override `ssl`, so
// pass the fields when you need `conn.ssl` to take effect.
const client = new Client({
  host: conn.host,
  port: conn.port,
  database: conn.database,
  user: conn.username,
  password: conn.password,
  ssl: conn.ssl,
})
await client.connect()

conn.connectionString 与a postgres:// URL,带 证书%-编码, 对于驾驶员谁需要一个.

外部 (BYO) Postgres 绑定默认使用已验证的TLS. 他们 sslMode 政策被故意限制在 "verify-full" 财务报告和审定财务报表 "disable" 因为 节点不能代表 libpq 的机会性 prefer 后退无 拥有连接尝试 。 使用 "disable" 仅作为明确的相容性 选择退出纯文本服务器; 缺少遗留配置默认为 "verify-full"。 。 。 .

原生添加分辨率

导入软件包从不加载附加件, 因此软件包仍然保留 sideEffects: false环保工厂把它装入第一个装入 操作. Bindings.forRemoteDeployment 立即装入, 因为管理器 发现是合成器的一部分. src/loader.ts 解决它 顺序 :

  1. ALIEN_BINDINGS_ADDON_PATH - 一条通往 .node 文档。 Dev/测试 只能逃出舱口;从未设置在已公布的安装中.
  2. 每个平台的预建包 @alienplatform/bindings-<triple>,拉动 作为 optionalDependency。这就是终端用户如何获得加词: npm编号 :bun 只安装匹配主机的软件包 os编号 :cpu编号 :libc编辑 optionalDependencies 块已存在 只见于已公布的清单 - 没错 发布时由发布管道注入,所以工作空间检查 携带无.
  3. 倒计时: 本地建起的加通 crates/alien-bindings-node/alien-bindings-node.<triple>.node时 从安装的软件包走过来。 仅在装入时 version() 匹配 此软件包的版本( stale building 警告并拒绝).

地方发展

为主机构建附加符一次, 然后运行任何导入包的操作 :

bun run build:addon   # or: pnpm -C packages/bindings run build:addon

build:addon 运行 napi build --platform --release 反对 crates/alien-bindings-node 并放弃 .node 旁边的箱子,在哪里 加载器的dev倒置后(上第3步)发现. 更改任何 Rust 后重建 内 alien-bindings 或者说 alien-bindings-node。构建 .node 被点燃了. build:addon 仅用于主机 三进制; 在一个Mac上, 横跨 其他 mac 三进制(例如. darwin-x64 从一个 arm64 需要明确 napi build --release --target x86_64-apple-darwin --cwd ../../crates/alien-bindings-node。 。 。 .

将装载器指向另一个地方,设定 ALIEN_BINDINGS_ADDON_PATH 走向其道路(步骤1).

预建软件包( E)npm/(中文(简体) )

npm/<triple>/ 持有每个平台软件包的骨架 (单位:千美元)darwin-arm64, (中文(简体) ), darwin-x64, (中文(简体) ), linux-x64-gnu, (中文(简体) ), linux-arm64-gnu) (中文(简体) ). 每个载体 (单位:千美元) package.json (单位:千美元)name编号 :os编号 :cpu编号 :libc编号 :main编号 :files和一个读取器 .node 是在建设时间开始的 从来没有承诺过 没有木丝 目标:部署基础图像是glibc(链卫/wolfi-base),而不是高山.

释放管道在原生跑道上制造出每个加成物,分级进入 匹配 npm/<triple>/ dir, 重写占位符 0.0.0 给 释放版本, 注入精确版本 optionalDependencies 输入此选项 软件包已公布清单,并在 包装 固定准确的版本只保证出版的包装 永远装入匹配版本平台加载.

队列批次

queue("events").sendBatch([{ order: 1 }, { order: 2 }]) 发送 JSON 消息; sendBatchText(["first", "second"]) 发送文本。 Python 曝光时 send_batch 财务报告和审定财务报表 send_batch_text 在队列控件上。 粗糙的暴露 Queue::send_batch 财务报告和审定财务报表 BoundQueue::send_batch。 。 。 .

每种输入按输入顺序返回一个结果: sent 指提供者 确认接受, rejected 包含一个代码和信件,用于确定 拒绝,和 unknown 在无法发送时包含代码和信件 已经建立。 重试未知结果可产生重复. 没有 跨批自动重复或交易担保。 之前的一个例外 结果返回意味着没有试图发送.

信件在序列化后必须包含1–65,536个UTF-8字节. 请求是 使用 SQS SendMessageBatch(最多10个条目和256KiB)进行块化,Pub/Sub发布, 并发送服务巴士HTTP批次。 服务 公共汽车还计算了JSON信封/逃逸 反对256KiB批量限制,因此严重逃逸的文本可能被否决. 空输入 返回空结果。 现有范围出版许可覆盖分批.

远程队列

发布冻结队列 remoteAccess: true,应用其最新设置 从后端解决它:

const bindings = await Bindings.forRemoteCustomer({ project, externalId, token })
const events = bindings.queue("events")
await events.send({ order: 1 })
const results = await events.sendBatch([{ order: 2 }, { order: 3 }])

Python 用途 await Bindings.for_remote_customer(...),则 bindings.queue("events").send(...) 或者说 .send_batch(...)两种语言都使用 Rust 供应商执行。 TypeScript 和 Python 远程队列控件只曝光发送; 云许可也拒绝接收、承认和清洗。 全权证书 由于租约到期,在运营前更新。 SQS、Pub/Sub和服务巴士 使用资源范围出版社赠款。 批次结果有相同的部分失败 语义作为本地队列手柄 .

新会话的沙盒能力来自 await sandbox.capabilities()。 。 。 . 重新连接后, 使用 await sandbox.capabilities(sandboxId) 以查询 届会。 Azure会议保留其原有的本地或代理运输工具 图像升级和回滚,所以工作支持可以与新会话不同.

版本与发布记录

@alienplatform/bindings 共发布 71 个版本,首次发布于 2026/03/14;过去 12 个月发布了 71 个版本。

版本发布日期距今
3.3.54latest2026/11/05今天
3.3.532026/11/041 天前
3.3.522026/11/042 天前
3.3.512026/11/042 天前
3.3.502026/11/032 天前
3.3.492026/11/024 天前

其他发布通道:dev → 3.3.42-dev.6e3a661b219b3886d55014b3cef8af0ecdcc65fe。

关于 @alienplatform/bindings 的常见问题

@alienplatform/bindings 是什么?

用于异形存储、 kv、 队列、 金库、 和邮资的直线类型脚本绑定

如何安装 @alienplatform/bindings?

在项目目录运行 npm install @alienplatform/bindings,或使用 pnpm add / yarn add / bun add。

@alienplatform/bindings 支持 TypeScript 吗?

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

@alienplatform/bindings 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@alienplatform/bindings 需要什么版本的 Node.js?

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

@alienplatform/bindings 可以商用吗?

@alienplatform/bindings 使用 FSL-1.1-Apache-2.0 许可。声明的许可为 FSL-1.1-Apache-2.0,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@alienplatform/bindings 的下载量有多少?

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

@alienplatform/bindings 还在维护吗?

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