Mero.js — Calimero 1.0 的 JavaScript客户端
JavaScript/ TypeScript 客户端 卡利梅罗
1.0, 密论云. CalimeroClient 验证一个节点的TDX证明,
封存每一份结束的请求(Noise NK, calimero/sealed-http/v2),标志
使用WebAuthn 密码和 API 密钥的机器,并调用应用程序
每一个运行在自己的复制日志。 它运行在浏览器和节点 18+,并且是
与核心字节兼容 calimero-sealed 财务报告和审定财务报表 calimero-client。 。 。 .
27版本仅是Calimero 1.0客户端. 用于 merod 0.x 节点的 v1 SDK (单位:千美元)
MeroJs,管理员和认证 API 客户端,JSON-RPC,上下文和命名空间) 是在26x。 见 从v1 移动。 。 。 .
文档
https://calimero-network.github.io/mero-js/ (中文(简体) ):快速启动、向导和
用于每个方法和它所调用的路由的参考。 来源在 docs/。 。 。 .
安装
npm install @calimero-network/mero-js
软件包 ESM、CommonJS和精密浏览器
TypeScript 声明. 它唯一的依赖, @phala/dcap-qvl,验证TDX
引用并被加载在第一个使用上.
快开始
import { CalimeroClient, browserPasskey } from '@calimero-network/mero-js';
// Reach a Calimero Cloud cluster by name.
const client = await CalimeroClient.connect({
cluster: 'eu-shared-1',
// Trust the signed mero-tee release the node names, from this one up.
policy: { release: { minReleaseVersion: '2.3.109' } },
});
await client.signUp(browserPasskey(), 'alice'); // or signIn(browserPasskey())
await client.installPackage('com.example.kv', '1.0.0'); // signed .mpk from the registry
const app = await client.createApp('kv', { package: 'com.example.kv', version: '1.0.0' }, { confirmMethods: ['clear'] });
await client.call(app, 'set', { key: 'a', value: '1' });
const { result } = await client.view(app, 'get', { key: 'a' });
await client.callConfirmed(app, 'clear', {}, browserPasskey()); // passkey consent
for await (const event of client.events(app)) console.log(event);
await client.upgradeApp(app, { version: '1.1.0' }, browserPasskey()); // the owner approves
发展组merod local, (中文(简体) ), merod run --dev以模拟的教训盟誓,
仅通过 policy: { allowMock: true }。从
环境.
连接到集群
CalimeroClient.connect({ cluster, policy }) 建议的实现方式
卡利梅罗云团. 它从公共节点读取集群的节点
目录( e)DEFAULT_DIRECTORY, (中文(简体) ), https://manager.cloud.calimero.network/api/v2/directory· ;
directory 名称(另一个),把这些放在 zone 当你给一个,和
按目录的权重加权。 一组
目录不知道,或者一个没有可用的节点,丢出 DirectoryError。 。 。 .
目录只选择要尝试的节点, 选择的顺序 。 没有
信任: 每个节点在下面被验证 policy 在事情发生之前
因此,一个错误或被篡改的列表只能使连接失败.
集群的任何节点都满足任何请求。 使用中的节点答案 503
或无法到达, 呼叫或视图被重审到那里(retry; 当这些
再试一次,它失败了 到下一个节点,然后重新开始那里,
与 不变 一能键,应用程序复制的日志解答一次
整个集群。 每个节点每个请求都尝试一次;当全部失败时
最后一个 UnavailableError 到达你。 失败后,一旦目录
refreshAfterSeconds 客户端已经通过(在下次请求时选中)
在背景中再次读取目录: 使用中的节点先保留,
不再列出的节点被删除 . client.nodeUrl 是正在使用的节点,
client.nodes 名单.
对于固定的节点列表或集群,您自己运行,构建客户端
直接 : new CalimeroClient({ baseUrl, nodes, policy })失败结束
介于 baseUrl 财务报告和审定财务报表 nodes 永远不要读目录.
什么客户检查
就像核心的Rust客户端所做的那样 在它把任何东西送到节点之前Measurements::Release:
- 节点名称是它运行的地铁释放。 以下发布
minReleaseVersion在获取任何物品之前被拒绝. - 释放
published-mrtds.json正在获取,其Sigstore 签名将对照 mero-tee 节点发布工作流程检查. 默认它来自cloud.calimero.network镜像;releaseSource: 'github'读取 GitHub 版本取而代之(仅节点: GitHub 发送无 CORS 头 ). - 引文与英特尔的抵押物核对
@phala/dcap-qvl:签名链和TCB状态. 担保品出自"云镜"("相克")DEFAULT_COLLATERAL_MIRROR),浏览器可以读取;它只携带由英特尔签名的项目.collateralSource: 'intel'询问 Intel 的 PCS (没有 CORS: 不在浏览器中),fetchCollateral替换获取,以及maxCollateralAgeDays拒绝更早前发布的抵押情报. - 拒绝调试 TD .
- 登记簿必须是释放的
locked-read-only图像; 仅信任调试配置文件allowDebugProfile。 。 。 . - 引文中的报告数据绑定了客户端的非ce和密封信道打开的传输密钥.
固定测量通过 policy.verifyQuote (单位:千美元)createQuoteVerifier) (中文(简体) ).
API( API )
- 全权证书数字 :
signUp(与invite(a) 通过邀请获取新账户的集群;signUpPolicy读到,signIn, (中文(简体) ),refresh, (中文(简体) ),signOut, (中文(简体) ),signOutEverywhere, (中文(简体) ),useSession, (中文(简体) ),useApiKey, (中文(简体) ),me, (中文(简体) ),usage, (中文(简体) ),addPasskey, (中文(简体) ),labelPasskey, (中文(简体) ),removePasskey, (中文(简体) ),createApiKey, (中文(简体) ),listApiKeys, (中文(简体) ),revokeApiKey。添加或去除密码并创建 API 密钥时,会使用该账户已有的密码. - 账户回收 (核心号4844):
createRecoveryCode, (中文(简体) ),removeRecoveryCode(密码核准;代码显示一次),然后签出startAccountRecovery(code, passkey)72小时后,finishAccountRecovery(passkey, accountId?);账户的密码在两者之间仍然被取消(cancelAccountRecovery· ;me()显示recoveryCode财务报告和审定财务报表recoveryPending) (中文(简体) ). - 软件包来源数字 :
packageOrigins.list, (中文(简体) ),packageOrigins.add, (中文(简体) ),packageOrigins.remove. 软件包的管理人员登记他们自己主机的前端的网络来源(用密码核准);signUp财务报告和审定财务报表signIn在这样的页面上发送其来源,为该来源的依赖方编号签名,并打开一个与软件包相绑的会话(me()答对它app财务报告和审定财务报表origin) (中文(简体) ). 拒绝提供未登记来源OriginNotRegistered。 。 。 .packageOrigins.add(pkg, origin, passkey, { served: true })注册自定义域: 集群还服务于软件包的前端, 从它所签名的捆绑(https://host,无端口;密码的许可名称served: true(三);list答题served并且额外的拒绝是NotServing(组别无前端),ClusterNotUpgraded(节点在旧版上),QuotaExceeded(每包4份,每组64份)OriginTaken(与他人持有)served) (中文(简体) ). - 软件包数字 :
installPackage, (中文(简体) ),uploadPackage, (中文(简体) ),packages, (中文(简体) ),package, (中文(简体) ),uninstallPackage· ;uploadBundle(raw WASM,只开发集群). - 应用程序数字 :
createApp, (中文(简体) ),listApps, (中文(简体) ),getApp, (中文(简体) ),deleteApp, (中文(简体) ),setAccess, (中文(简体) ),setAppMetadata, (中文(简体) ),appStorage, (中文(简体) ),appAbi, (中文(简体) ),upgradeApp, (中文(简体) ),transferApp。 。 。 . - 电话数字 :
call, (中文(简体) ),callConfirmed, (中文(简体) ),view, (中文(简体) ),events。一个电话总是带一个“一能”密钥,在节点回答时随它再次发出503,然后转到下一个节点. - 集团和存在数字 :
uploadBlob, (中文(简体) ),downloadBlob, (中文(简体) ),listBlobs, (中文(简体) ),blobInfo, (中文(简体) ),deleteBlob· ;publishPresence, (中文(简体) ),presence, (中文(简体) ),presenceStream。 。 。 . - 组织数字 :
createOrg, (中文(简体) ),getOrg, (中文(简体) ),deleteOrg, (中文(简体) ),setOrgMetadata, (中文(简体) ),setMember, (中文(简体) ),removeMember, (中文(简体) ),setMemberMetadata, (中文(简体) ),setCapabilities(单位:千美元)ORG_CAPABILITIES),团队,invite, (中文(简体) ),redeemInvite恢复(setRecoveryKey, (中文(简体) ),startRecovery, (中文(简体) ),cancelRecovery, (中文(简体) ),finishRecovery· ;newRecoverySeed, (中文(简体) ),recoveryPublicKey) (中文(简体) ). 设置或删除成员或团队成员,能力和邀请书由呼叫者的密码批准;赎回邀请书不是. - 所有人的决定 (passkey批准,从未从应用程序的前端):
upgradeOrg, (中文(简体) ),upgradeRun, (中文(简体) ),retryUpgradeRun, (中文(简体) ),approveRelease, (中文(简体) ),approveOutbound, (中文(简体) ),bindPublisher, (中文(简体) ),upgradePublished。 。 。 . - 应用程序的核准数字 :
appsReport, (中文(简体) ),releaseRules, (中文(简体) ),pendingApprovals,则requestConsent编号 :openConsentPage将用户发送到节点的同意页面,以及consentResult显示答案code发送给用户之前url(单位:千美元)openConsentPage是因为confirm钩;它们应该在页面上看到相同的代码(confirmationCode(requestId)检查它。 见 请用户批准节点图像和应用程序升级。 。 。 . - 运算符 (ops sorders): (原始内容存档于2018-03-21)
opsApps, (中文(简体) ),opsOrgs, (中文(简体) ),opsServedOrigins(每个自定义域 日志持有, 通过包标签),setReleaseDeadline, (中文(简体) ),liftReleaseDeadline。 。 。 . - 任何路线数字 :
get, (中文(简体) ),post, (中文(简体) ),put, (中文(简体) ),delete· ;postConfirmed财务报告和审定财务报表deleteConfirmed答复 a412 CONFIRM_REQUIRED有钥匙.
拒绝的打字(LoginRequired, (中文(简体) ), PasskeyUnknownHere, (中文(简体) ), WrongNode, (中文(简体) ), NotFound, (中文(简体) ), ConfirmRequired, (中文(简体) ), ConfirmCancelled, (中文(简体) ),
ArgsTooLarge, (中文(简体) ), IdempotencyMismatch, (中文(简体) ), ReleaseDeadlineError, (中文(简体) ), ConsentStale, (中文(简体) ), AppError, (中文(简体) ), TrapError, (中文(简体) ),
UnavailableError, (中文(简体) ), OriginNotRegistered, (中文(简体) ), BadOrigin, (中文(简体) ), OriginTaken, (中文(简体) ), QuotaExceeded, (中文(简体) ),
所有扩展 CalimeroError 与节点 status 财务报告和审定财务报表 codeA级 401 一次
发布会话的节点被替换或无法到达的节点由一个解答
刷新并重复; a 421 WRONG_NODE 移动到下一个 nodes 客户是
给出。 见
错误模型。 。 。 .
由它建造的部件也出口:密封运输
(单位:千美元)createSealedFetch,引文和签名释放核查
(单位:千美元)createQuoteVerifier, (中文(简体) ), createSignedReleaseVerifier, (中文(简体) ), trustSignedRelease),以及
梅罗泰私人代理大门的客户端(attestAgent, (中文(简体) ), provisionAgent, (中文(简体) ),
releaseAgent) (中文(简体) ).
发展
pnpm install
pnpm build
pnpm test:unit # unit tests, against a stand-in node over a real sealed channel
pnpm lint
pnpm typecheck
pnpm typecheck:consumer
组群测试tests/cloud-v2开始 3 merod run --dev 节点和
运行客户端反对他们:
MEROD_BINARY=/path/to/merod KV_STORE_WASM=/path/to/kv_store.wasm pnpm test:cloud-v2
没有他们使用的变量 ../core/target/debug/merod 财务报告和审定财务报表
../core/target/wasm32-unknown-unknown/app-release/kv_store.wasm 从一个兄弟
核心检出. scripts/download-released-merod.sh 获取最新发布的
1.0 国家 merod 和它的kv-商店的固定, 这是CI运行 他们与;核心的
e2e.yml 运行同一个套房 与核心自己的树.
许可证
麻省理工学院——见 自由主义。 。 。 .