@comms-id /制裁
为通信键入的客户端。身份证制裁API (https://api.comms.id/dfat-sanctions-consolidated-list/v1):根据澳大利亚制裁综合名单筛选一个个人、实体或船只。
src/ 是从Sanctions合约(packages/dfat-consolidated-list/openapi/dfat-sanctions-consolidated-list.v1.json) @comms-id/forge-transformers. 不要编辑它:更改合同并运行 pnpm --filter @comms-id/forge-transformers generate.
import { createDfatSanctionsConsolidatedListClient } from "@comms-id/dfat-sanctions-consolidated-list/server";
const client = createDfatSanctionsConsolidatedListClient({
clientId: process.env.COMMS_ID_CLIENT_ID!,
privateJwk: JSON.parse(process.env.COMMS_ID_PRIVATE_JWK!),
});
const reply = await client.screen({"type": "Individual", "name": "Example Person", "dateOfBirth": "1970-06-15"});
操作
screen根据澳大利亚制裁综合名单(DFAT)筛选一个个人、实体或船只:准确的姓名和别名,可根据出生日期和地点缩小范围。回复包含所有可能的匹配,包括证据、列表生成和新鲜度。它拒绝回答陈旧的名单。
每个操作都是读操作,可以安全地重复,并在可重试失败后重试。不匹配的应答是应答约定的结果之一:错误 outcomeOf(error) 的 no-match, source-unavailable 或者 failed;中断永远不是“不匹配”。
先测试一下
createDfatSanctionsConsolidatedListFixtureClient() 从 @comms-id/dfat-sanctions-consolidated-list/fixtures 从合同本身的例子中得到答案,没有网络,并说(fixture: true). 要调用TEST服务(合成回复,您的开发应用程序的键),请通过 environment: "test";上线只会改变环境和钥匙。
服务器只
制裁筛选对没有凭据的浏览器是不开放的:从您自己的服务器调用它,或者通过中继(@comms-id/relay)。 ./browser 走你的路线,从不签名。
COMMS_ID_PRIVATE_JWK 是一架ML-DSA-87私人JWK (kty AKP, priv 和 pub). 服务器入口需要Node.js 24.7或更高版本,或者带有兼容性标志的Cloudflare Worker webcrypto_modern_algorithms.
条目: . (类型和错误,在浏览器中是安全的) ./server (每次呼叫都签名), ./browser (你的接力路线;从不签名), ./fixtures (本地装置,无网络), ./descriptor ( @comms-id/relay 可能向前)。
LICENSE 是消费者客户牌照。
表单
@comms-id/dfat-sanctions-consolidated-list/controller 是制裁筛选表单的无头控制器:值、检查、一个显式提交、答案、错误和重试,具有标签表单的可访问性属性。它没有框架,也没有DOM。 @comms-id/dfat-sanctions-consolidated-list-react (一个钩子和一个组件) <comms-id-dfat-sanctions-consolidated-list> (一个web元素)可以在上面运行,你自己的UI也可以。
import { createDfatSanctionsConsolidatedListController } from "@comms-id/dfat-sanctions-consolidated-list/controller";
const controller = createDfatSanctionsConsolidatedListController({ client, onResult: (record, timing) => console.log(record, timing.ms) });
controller.subscribe(() => render(controller.getState()));
controller.setValue("name", "…");
controller.submit();
src/local/profile.ts 是唯一特定于产品的部分:它列出字段、检查值、准备调用并以简单的文字表示回复。其他一切都生成了。与客户端本身一样,表单是为您的服务器或中继服务的:筛选永远不会向没有凭据的浏览器打开。