tenzro-sdk 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -1
- package/dist/adaptive-burn.js +4 -4
- package/dist/adaptive-burn.js.map +1 -1
- package/dist/agent.d.ts +119 -11
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +162 -13
- package/dist/agent.js.map +1 -1
- package/dist/api-key.d.ts +128 -0
- package/dist/api-key.d.ts.map +1 -0
- package/dist/api-key.js +94 -0
- package/dist/api-key.js.map +1 -0
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/auth.d.ts +37 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +11 -0
- package/dist/auth.js.map +1 -1
- package/dist/axelar.d.ts +54 -0
- package/dist/axelar.d.ts.map +1 -0
- package/dist/axelar.js +30 -0
- package/dist/axelar.js.map +1 -0
- package/dist/babylon.d.ts +46 -0
- package/dist/babylon.d.ts.map +1 -0
- package/dist/babylon.js +37 -0
- package/dist/babylon.js.map +1 -0
- package/dist/caip.d.ts +43 -0
- package/dist/caip.d.ts.map +1 -0
- package/dist/caip.js +29 -0
- package/dist/caip.js.map +1 -0
- package/dist/canton.d.ts +16 -18
- package/dist/canton.d.ts.map +1 -1
- package/dist/canton.js +16 -18
- package/dist/canton.js.map +1 -1
- package/dist/capital.d.ts +167 -0
- package/dist/capital.d.ts.map +1 -0
- package/dist/capital.js +117 -0
- package/dist/capital.js.map +1 -0
- package/dist/client.d.ts +108 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +136 -0
- package/dist/client.js.map +1 -1
- package/dist/eip7702.d.ts +110 -0
- package/dist/eip7702.d.ts.map +1 -0
- package/dist/eip7702.js +73 -0
- package/dist/eip7702.js.map +1 -0
- package/dist/erc7683.d.ts +79 -0
- package/dist/erc7683.d.ts.map +1 -0
- package/dist/erc7683.js +82 -0
- package/dist/erc7683.js.map +1 -0
- package/dist/events.d.ts +45 -15
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +38 -8
- package/dist/events.js.map +1 -1
- package/dist/hyperlane.d.ts +47 -0
- package/dist/hyperlane.d.ts.map +1 -0
- package/dist/hyperlane.js +27 -0
- package/dist/hyperlane.js.map +1 -0
- package/dist/identity.d.ts +1 -1
- package/dist/identity.js +1 -1
- package/dist/index.d.ts +44 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -2
- package/dist/index.js.map +1 -1
- package/dist/iroh.d.ts +104 -0
- package/dist/iroh.d.ts.map +1 -0
- package/dist/iroh.js +102 -0
- package/dist/iroh.js.map +1 -0
- package/dist/marketplace.d.ts +2 -2
- package/dist/marketplace.js +2 -2
- package/dist/memory.d.ts +78 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +60 -0
- package/dist/memory.js.map +1 -0
- package/dist/multimodal.d.ts +294 -0
- package/dist/multimodal.d.ts.map +1 -0
- package/dist/multimodal.js +160 -0
- package/dist/multimodal.js.map +1 -0
- package/dist/passkey.d.ts +193 -0
- package/dist/passkey.d.ts.map +1 -0
- package/dist/passkey.js +481 -0
- package/dist/passkey.js.map +1 -0
- package/dist/permit2.d.ts +49 -0
- package/dist/permit2.d.ts.map +1 -0
- package/dist/permit2.js +30 -0
- package/dist/permit2.js.map +1 -0
- package/dist/provider.d.ts +5 -4
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +8 -5
- package/dist/provider.js.map +1 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +16 -0
- package/dist/rpc.js.map +1 -1
- package/dist/secure-mint.d.ts +39 -0
- package/dist/secure-mint.d.ts.map +1 -0
- package/dist/secure-mint.js +44 -0
- package/dist/secure-mint.js.map +1 -0
- package/dist/seed-agent.js +7 -7
- package/dist/seed-agent.js.map +1 -1
- package/dist/settlement.d.ts +23 -6
- package/dist/settlement.d.ts.map +1 -1
- package/dist/settlement.js +30 -7
- package/dist/settlement.js.map +1 -1
- package/dist/signer.d.ts +181 -0
- package/dist/signer.d.ts.map +1 -0
- package/dist/signer.js +69 -0
- package/dist/signer.js.map +1 -0
- package/dist/sla.d.ts +95 -0
- package/dist/sla.d.ts.map +1 -0
- package/dist/sla.js +70 -0
- package/dist/sla.js.map +1 -0
- package/dist/snapshot.d.ts +122 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +80 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/staking.d.ts +5 -5
- package/dist/staking.d.ts.map +1 -1
- package/dist/staking.js +8 -6
- package/dist/staking.js.map +1 -1
- package/dist/task.d.ts +56 -22
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js +65 -31
- package/dist/task.js.map +1 -1
- package/dist/token.d.ts +41 -11
- package/dist/token.d.ts.map +1 -1
- package/dist/token.js.map +1 -1
- package/dist/training.d.ts +108 -0
- package/dist/training.d.ts.map +1 -0
- package/dist/training.js +53 -0
- package/dist/training.js.map +1 -0
- package/dist/types.d.ts +165 -38
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validator.d.ts +76 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +47 -0
- package/dist/validator.js.map +1 -0
- package/dist/workflow.d.ts +98 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +131 -0
- package/dist/workflow.js.map +1 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -178,7 +178,7 @@ const result = await app.sponsorInference(user.address, 'gemma3-270m', 'Hello');
|
|
|
178
178
|
| `auth` | `onboardHuman()`, `onboardDelegatedAgent()`, `onboardAutonomousAgent()`, `revokeJwt()`, `revokeDid()`, `listPendingApprovals()`, `decideApproval()` |
|
|
179
179
|
| `wallet` | `createWallet()`, `getBalance()`, `sendTransaction()` |
|
|
180
180
|
| `identity` | `registerHuman()`, `resolveDid()`, `setUsername()` |
|
|
181
|
-
| `agent` | `register()`, `spawnAgent()`, `createSwarm()`, `delegateTask()` |
|
|
181
|
+
| `agent` | `register(name, creator, capabilities)` (server-provisioned hybrid wallet), `registerWithKeys(name, creator, capabilities, publicKey, pqPublicKey)` (BYOK), `sendMessage(from, to, message)`, `sendMessageSigned({from, to, message, signature, pqSignature, messageType?, replyTo?})`, `spawnAgent()`, `createSwarm()`, `delegateTask()` |
|
|
182
182
|
| `inference` | `listModels()`, `request()`, `estimateCost()`, plus multi-modal helpers for forecast, vision embed/similarity, text embedding, segmentation, detection, audio ASR, video embed (modality-aware routing via `tenzro_forecast`, `tenzro_visionEmbed`, `tenzro_textEmbed`, `tenzro_segment`, `tenzro_detect`, `tenzro_transcribe`, `tenzro_videoEmbed`) |
|
|
183
183
|
| `token` | `createToken()`, `listTokens()`, `crossVmTransfer()` |
|
|
184
184
|
| `nft` | `createCollection()`, `mintNft()`, `transferNft()` |
|
|
@@ -220,6 +220,16 @@ const result = await app.sponsorInference(user.address, 'gemma3-270m', 'Hello');
|
|
|
220
220
|
| `skill` | `listSkills()`, `registerSkill()` |
|
|
221
221
|
| `tool` | `listTools()`, `registerTool()` |
|
|
222
222
|
| `svm-cross-vm` | Tenzro Cross-VM SVM-native program: `TENZRO_CROSS_VM_PROGRAM_ID_BASE58`, `encodeBridgeToEvm()`, `encodeBridgeFromEvm()`, `encodeRegisterTokenPointer()`, `encodeTransferCrossVm()`, `decodeCrossVmInstruction()` |
|
|
223
|
+
| `capital` | Regulated capital-allocation intents: `openCapitalIntent()`, `quoteCapitalIntent()`, `assignCapitalIntent()`, `executeCapitalLeg()`, `verifyCapitalLeg()`, `compensateCapitalLeg()`, `settleCapitalIntent()`, `getCapitalIntent()`, `submitReserveAttestation()`, `getReserve()`, `attestedMint()` |
|
|
224
|
+
| `workflow` | Multi-party saga workflows with AP2 / x402 / MPP / Stripe SPT / Visa TAP / Mastercard Agent Pay mandate binding: `openWorkflow()`, `executeStep()`, `verifyStep()`, `compensateStep()`, `finalizeWorkflow()`, `mirrorToCanton()`, `verifyDidEnvelope()`, `getWorkflow()`, `getWorkflowSaga()`, `getWorkflowLifecycle()`, `getWorkflowReceipt()`, `getWorkflowOperationalMetrics()`, `listWorkflowsByCreator()`, `listWorkflowsByParticipant()`, `listWorkflowsByStatus()`, `listWorkflowReceipts()` |
|
|
225
|
+
| `eip7702` | Pectra Type-4 delegation registry: `install7702Delegation()`, `get7702Delegation()`, `revoke7702Delegation()` |
|
|
226
|
+
| `erc7683` | Cross-chain intents origin opener + destination fill registry: `open7683Order()`, `get7683Order()`, `list7683Orders()`, `recordFill7683()`, `getFill7683()`, `listFills7683()` |
|
|
227
|
+
| `permit2` | Permit2 `SignatureTransfer`: `domainSeparator()`, `digest()`, `verifyAndConsume()`, `nonceUsed()` (optional witness binding for ERC-7683 origin opens) |
|
|
228
|
+
| `secureMint` | Per-token 1:1 reserve-attestation invariant for tokenized RWAs: `setPolicy()`, `getPolicy()`, `clearPolicy()`, `check()`, `apply()`, `recordBurn()` |
|
|
229
|
+
| `hyperlane` | Hyperlane V3 messaging with sovereign Tenzro-validator-set ISM: `listChains()`, `quoteDispatch()`, `dispatch()`, `getMessage()` |
|
|
230
|
+
| `axelar` | Axelar GMP — Cosmos / Move / Stellar / XRPL reach: `listChains()`, `callContract()`, `payGas()`, `getMessage()` |
|
|
231
|
+
| `babylon` | Babylon Bitcoin staking finality-providers + EOTS delegations: `registerFinalityProvider()`, `submitFinalitySignature()`, `totalStakeForProvider()`, `listDelegations()` |
|
|
232
|
+
| `caip` | Tenzro CAIP namespace identifiers per `ChainAgnostic/namespaces#184`: `caip2()`, `caip10()`, `caip19()` |
|
|
223
233
|
|
|
224
234
|
## Auth (OAuth 2.1 + DPoP Onboarding)
|
|
225
235
|
|
package/dist/adaptive-burn.js
CHANGED
|
@@ -22,7 +22,7 @@ class AdaptiveBurnClient {
|
|
|
22
22
|
* @returns Active burn-rate configuration
|
|
23
23
|
*/
|
|
24
24
|
async getBurnRateConfig() {
|
|
25
|
-
return this.rpc.call("tenzro_getBurnRateConfig", []);
|
|
25
|
+
return this.rpc.call("tenzro_getBurnRateConfig", [{}]);
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
28
|
* Returns the latest rolling supply metrics snapshot — circulating
|
|
@@ -30,7 +30,7 @@ class AdaptiveBurnClient {
|
|
|
30
30
|
* @returns Latest `SupplyMetricsSnapshot`
|
|
31
31
|
*/
|
|
32
32
|
async getSupplyMetrics() {
|
|
33
|
-
return this.rpc.call("tenzro_getSupplyMetrics", []);
|
|
33
|
+
return this.rpc.call("tenzro_getSupplyMetrics", [{}]);
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
36
|
* Computes the recommended adaptive-burn action from the current
|
|
@@ -39,14 +39,14 @@ class AdaptiveBurnClient {
|
|
|
39
39
|
* @returns `BurnRateRecommendation`
|
|
40
40
|
*/
|
|
41
41
|
async getBurnRateRecommendation() {
|
|
42
|
-
return this.rpc.call("tenzro_getBurnRateRecommendation", []);
|
|
42
|
+
return this.rpc.call("tenzro_getBurnRateRecommendation", [{}]);
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* List in-flight adaptive-burn governance proposals.
|
|
46
46
|
* @returns Array of proposal records
|
|
47
47
|
*/
|
|
48
48
|
async listAdaptiveBurnProposals() {
|
|
49
|
-
return this.rpc.call("tenzro_listAdaptiveBurnProposals", []);
|
|
49
|
+
return this.rpc.call("tenzro_listAdaptiveBurnProposals", [{}]);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
exports.AdaptiveBurnClient = AdaptiveBurnClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adaptive-burn.js","sourceRoot":"","sources":["../src/adaptive-burn.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;GAUG;AACH,MAAa,kBAAkB;IACT;IAApB,YAAoB,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAEtC;;;OAGG;IACH,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"adaptive-burn.js","sourceRoot":"","sources":["../src/adaptive-burn.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;GAUG;AACH,MAAa,kBAAkB;IACT;IAApB,YAAoB,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAEtC;;;OAGG;IACH,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,yBAAyB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,yBAAyB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAQ,kCAAkC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;CACF;AArCD,gDAqCC"}
|
package/dist/agent.d.ts
CHANGED
|
@@ -8,20 +8,68 @@ export declare class AgentClient {
|
|
|
8
8
|
private rpc;
|
|
9
9
|
constructor(rpc: RpcClient);
|
|
10
10
|
/**
|
|
11
|
-
* Register a new AI agent on the network.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* Register a new AI agent on the network. The node provisions a server-
|
|
12
|
+
* side hybrid (FROST Ed25519 + ML-DSA-65) wallet and binds it to a
|
|
13
|
+
* fresh `did:tenzro:machine:` identity. Returns the agent's `agent_id`,
|
|
14
|
+
* `wallet_address`, `tenzro_did`, the agent's `classical_public_key`
|
|
15
|
+
* (32-byte Ed25519 hex) and the `pq_verifying_key_len`.
|
|
16
|
+
*
|
|
17
|
+
* For self-custodial registration (no server-held keys), see
|
|
18
|
+
* {@link registerWithKeys}.
|
|
19
|
+
*
|
|
20
|
+
* @param name - Human-readable agent name
|
|
21
|
+
* @param creator - Hex-encoded address that will own this agent
|
|
22
|
+
* @param capabilities - Capability short names: `nlp`, `vision`, `code`,
|
|
23
|
+
* `data`, `blockchain`, `smart_contract`, `api_integration`,
|
|
24
|
+
* `coordination`. Anything else becomes a `Custom` capability.
|
|
16
25
|
*/
|
|
17
|
-
register(
|
|
26
|
+
register(name: string, creator: string, capabilities: string[]): Promise<RegisterAgentResponse>;
|
|
18
27
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
28
|
+
* BYOK registration: register an agent self-custodially with a
|
|
29
|
+
* caller-supplied hybrid keypair. Both `publicKey` (32 bytes, Ed25519)
|
|
30
|
+
* and `pqPublicKey` (1952 bytes, ML-DSA-65) must be supplied as hex
|
|
31
|
+
* (with or without `0x` prefix). The node performs no wallet
|
|
32
|
+
* provisioning; the caller retains full control of the signing keys
|
|
33
|
+
* and is responsible for producing all `sendAgentMessage` signatures
|
|
34
|
+
* off-node. The returned envelope sets `byok: true` and omits the
|
|
35
|
+
* `classical_public_key` / `pq_verifying_key_len` fields (the caller
|
|
36
|
+
* already has them).
|
|
37
|
+
*/
|
|
38
|
+
registerWithKeys(name: string, creator: string, capabilities: string[], publicKey: string, pqPublicKey: string): Promise<RegisterAgentResponse>;
|
|
39
|
+
/**
|
|
40
|
+
* Send an unsigned `AgentMessage` from one registered agent to another.
|
|
41
|
+
* Only valid when the local node's `MessageRouter` has
|
|
42
|
+
* `enable_signing == false` (test/dev configs). On the production
|
|
43
|
+
* router this call is rejected with a signature-required error — use
|
|
44
|
+
* {@link sendMessageSigned} instead.
|
|
45
|
+
*/
|
|
46
|
+
sendMessage(from: string, to: string, message: string): Promise<AgentMessageResponse>;
|
|
47
|
+
/**
|
|
48
|
+
* Send a hybrid-signed `AgentMessage`. Both signature legs are required
|
|
49
|
+
* when the router enforces signing (production default); half-signed
|
|
50
|
+
* messages are rejected to prevent downgrade attacks.
|
|
51
|
+
*
|
|
52
|
+
* The signing preimage is `SHA-256(AgentMessage::signing_data())`,
|
|
53
|
+
* which depends on `from`, `to`, the resolved sender/recipient wallet
|
|
54
|
+
* addresses, the message body, the message type, and the optional
|
|
55
|
+
* `replyTo`. Callers must construct the same preimage off-node and
|
|
56
|
+
* produce both an Ed25519 (64-byte) and an ML-DSA-65 (3309-byte)
|
|
57
|
+
* signature. Both signatures are passed as hex (with or without `0x`
|
|
58
|
+
* prefix).
|
|
59
|
+
*
|
|
60
|
+
* `replyTo` (if used) MUST be set on the message before signing,
|
|
61
|
+
* because it is part of `signing_data` — the SDK forwards it verbatim
|
|
62
|
+
* so the server reconstructs the same preimage the caller signed.
|
|
23
63
|
*/
|
|
24
|
-
|
|
64
|
+
sendMessageSigned(params: {
|
|
65
|
+
from: string;
|
|
66
|
+
to: string;
|
|
67
|
+
message: string;
|
|
68
|
+
signature: string;
|
|
69
|
+
pqSignature: string;
|
|
70
|
+
messageType?: "task_request" | "task_response" | "query" | "query_response" | "notification" | "coordination" | "error";
|
|
71
|
+
replyTo?: string;
|
|
72
|
+
}): Promise<AgentMessageResponse>;
|
|
25
73
|
/**
|
|
26
74
|
* Delegate a task to an agent using the A2A protocol.
|
|
27
75
|
* @param agentId - Target agent identifier
|
|
@@ -180,5 +228,65 @@ export declare class AgentClient {
|
|
|
180
228
|
* @returns Current gas policy
|
|
181
229
|
*/
|
|
182
230
|
getGasPolicy(agentId: string): Promise<GasPolicy>;
|
|
231
|
+
/**
|
|
232
|
+
* Operational suspend (Active → Suspended). The reversible counterpart of
|
|
233
|
+
* `resumeAgent`. Distinct from the kill-switch `pauseAgent` /
|
|
234
|
+
* `quarantineAgent` axes (those require signed transactions).
|
|
235
|
+
* @param agentId - The agent identifier
|
|
236
|
+
* @param reason - Free-form audit reason
|
|
237
|
+
*/
|
|
238
|
+
suspendAgent(agentId: string, reason: string): Promise<unknown>;
|
|
239
|
+
/**
|
|
240
|
+
* Recover a Suspended agent back to Active. Used to recover from auto-
|
|
241
|
+
* suspend (heartbeat monitor) or a manual `suspendAgent`.
|
|
242
|
+
* @param agentId - The agent identifier
|
|
243
|
+
*/
|
|
244
|
+
resumeAgent(agentId: string): Promise<unknown>;
|
|
245
|
+
/**
|
|
246
|
+
* Send a liveness heartbeat for an agent. The heartbeat monitor uses
|
|
247
|
+
* `last_heartbeat` to decide whether to auto-suspend on the next sweep.
|
|
248
|
+
* @param agentId - The agent identifier
|
|
249
|
+
*/
|
|
250
|
+
agentHeartbeat(agentId: string): Promise<unknown>;
|
|
251
|
+
/**
|
|
252
|
+
* Fetch every capability attestation registered on this node for
|
|
253
|
+
* `capability`. `capability` accepts the same short-form tags as
|
|
254
|
+
* `register` (`nlp`, `vision`, `code`, `data`, `blockchain`,
|
|
255
|
+
* `smart_contract`, `api_integration`, `coordination`) — anything else
|
|
256
|
+
* is treated as a `Custom` capability with that name.
|
|
257
|
+
*
|
|
258
|
+
* When `verifiedOnly` is `true` the node re-runs query-time signature
|
|
259
|
+
* + expiry checks before returning (defence in depth on top of
|
|
260
|
+
* submit-time verification per #52). Default is `false`.
|
|
261
|
+
*
|
|
262
|
+
* Returns `{capability, verified_only, attestations: [...], total}`.
|
|
263
|
+
*
|
|
264
|
+
* @param capability - Capability short-form or custom name
|
|
265
|
+
* @param verifiedOnly - Force query-time re-verification before returning
|
|
266
|
+
*/
|
|
267
|
+
getCapabilityAttestations(capability: string, verifiedOnly?: boolean): Promise<unknown>;
|
|
268
|
+
/**
|
|
269
|
+
* Fetch every capability attestation issued for a specific agent. The
|
|
270
|
+
* reply includes the agent's registered capability list, the full
|
|
271
|
+
* attestation envelopes, and the agent's registered wallet address
|
|
272
|
+
* (used by the self-attestation guard).
|
|
273
|
+
*
|
|
274
|
+
* Returns `{agent_id, capabilities, attestations: [...],
|
|
275
|
+
* total_attestations, registered_address}`.
|
|
276
|
+
*
|
|
277
|
+
* @param agentId - The agent ID to look up
|
|
278
|
+
*/
|
|
279
|
+
getAgentCapabilityAttestations(agentId: string): Promise<unknown>;
|
|
280
|
+
/**
|
|
281
|
+
* Pick the "best" agent on this node for `capability`. Selection prefers
|
|
282
|
+
* the most recent TEE-backed attestation, falling back to any agent that
|
|
283
|
+
* has registered the capability. `capability` is parsed with the same
|
|
284
|
+
* short-form/`Custom` rules as `getCapabilityAttestations`.
|
|
285
|
+
*
|
|
286
|
+
* Returns `{capability, best_agent: string | null, total_candidates}`.
|
|
287
|
+
*
|
|
288
|
+
* @param capability - Capability short-form or custom name
|
|
289
|
+
*/
|
|
290
|
+
findBestAgentForCapability(capability: string): Promise<unknown>;
|
|
183
291
|
}
|
|
184
292
|
//# sourceMappingURL=agent.d.ts.map
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EACL,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,sBAAsB,EACtB,yBAAyB,EACzB,SAAS,EACV,MAAM,SAAS,CAAC;AAWjB;;;GAGG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAElC
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -19,35 +19,98 @@ class AgentClient {
|
|
|
19
19
|
this.rpc = rpc;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* Register a new AI agent on the network.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
22
|
+
* Register a new AI agent on the network. The node provisions a server-
|
|
23
|
+
* side hybrid (FROST Ed25519 + ML-DSA-65) wallet and binds it to a
|
|
24
|
+
* fresh `did:tenzro:machine:` identity. Returns the agent's `agent_id`,
|
|
25
|
+
* `wallet_address`, `tenzro_did`, the agent's `classical_public_key`
|
|
26
|
+
* (32-byte Ed25519 hex) and the `pq_verifying_key_len`.
|
|
27
|
+
*
|
|
28
|
+
* For self-custodial registration (no server-held keys), see
|
|
29
|
+
* {@link registerWithKeys}.
|
|
30
|
+
*
|
|
31
|
+
* @param name - Human-readable agent name
|
|
32
|
+
* @param creator - Hex-encoded address that will own this agent
|
|
33
|
+
* @param capabilities - Capability short names: `nlp`, `vision`, `code`,
|
|
34
|
+
* `data`, `blockchain`, `smart_contract`, `api_integration`,
|
|
35
|
+
* `coordination`. Anything else becomes a `Custom` capability.
|
|
27
36
|
*/
|
|
28
|
-
async register(
|
|
37
|
+
async register(name, creator, capabilities) {
|
|
29
38
|
return this.rpc.call("tenzro_registerAgent", [
|
|
30
39
|
{
|
|
31
|
-
agent_id: agentId,
|
|
32
40
|
name,
|
|
41
|
+
creator,
|
|
33
42
|
capabilities,
|
|
34
43
|
},
|
|
35
44
|
]);
|
|
36
45
|
}
|
|
37
46
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
47
|
+
* BYOK registration: register an agent self-custodially with a
|
|
48
|
+
* caller-supplied hybrid keypair. Both `publicKey` (32 bytes, Ed25519)
|
|
49
|
+
* and `pqPublicKey` (1952 bytes, ML-DSA-65) must be supplied as hex
|
|
50
|
+
* (with or without `0x` prefix). The node performs no wallet
|
|
51
|
+
* provisioning; the caller retains full control of the signing keys
|
|
52
|
+
* and is responsible for producing all `sendAgentMessage` signatures
|
|
53
|
+
* off-node. The returned envelope sets `byok: true` and omits the
|
|
54
|
+
* `classical_public_key` / `pq_verifying_key_len` fields (the caller
|
|
55
|
+
* already has them).
|
|
42
56
|
*/
|
|
43
|
-
async
|
|
57
|
+
async registerWithKeys(name, creator, capabilities, publicKey, pqPublicKey) {
|
|
58
|
+
return this.rpc.call("tenzro_registerAgent", [
|
|
59
|
+
{
|
|
60
|
+
name,
|
|
61
|
+
creator,
|
|
62
|
+
capabilities,
|
|
63
|
+
public_key: publicKey,
|
|
64
|
+
pq_public_key: pqPublicKey,
|
|
65
|
+
},
|
|
66
|
+
]);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Send an unsigned `AgentMessage` from one registered agent to another.
|
|
70
|
+
* Only valid when the local node's `MessageRouter` has
|
|
71
|
+
* `enable_signing == false` (test/dev configs). On the production
|
|
72
|
+
* router this call is rejected with a signature-required error — use
|
|
73
|
+
* {@link sendMessageSigned} instead.
|
|
74
|
+
*/
|
|
75
|
+
async sendMessage(from, to, message) {
|
|
44
76
|
return this.rpc.call("tenzro_sendAgentMessage", [
|
|
45
77
|
{
|
|
46
|
-
|
|
78
|
+
from,
|
|
79
|
+
to,
|
|
47
80
|
message,
|
|
48
81
|
},
|
|
49
82
|
]);
|
|
50
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Send a hybrid-signed `AgentMessage`. Both signature legs are required
|
|
86
|
+
* when the router enforces signing (production default); half-signed
|
|
87
|
+
* messages are rejected to prevent downgrade attacks.
|
|
88
|
+
*
|
|
89
|
+
* The signing preimage is `SHA-256(AgentMessage::signing_data())`,
|
|
90
|
+
* which depends on `from`, `to`, the resolved sender/recipient wallet
|
|
91
|
+
* addresses, the message body, the message type, and the optional
|
|
92
|
+
* `replyTo`. Callers must construct the same preimage off-node and
|
|
93
|
+
* produce both an Ed25519 (64-byte) and an ML-DSA-65 (3309-byte)
|
|
94
|
+
* signature. Both signatures are passed as hex (with or without `0x`
|
|
95
|
+
* prefix).
|
|
96
|
+
*
|
|
97
|
+
* `replyTo` (if used) MUST be set on the message before signing,
|
|
98
|
+
* because it is part of `signing_data` — the SDK forwards it verbatim
|
|
99
|
+
* so the server reconstructs the same preimage the caller signed.
|
|
100
|
+
*/
|
|
101
|
+
async sendMessageSigned(params) {
|
|
102
|
+
return this.rpc.call("tenzro_sendAgentMessage", [
|
|
103
|
+
{
|
|
104
|
+
from: params.from,
|
|
105
|
+
to: params.to,
|
|
106
|
+
message: params.message,
|
|
107
|
+
signature: params.signature,
|
|
108
|
+
pq_signature: params.pqSignature,
|
|
109
|
+
message_type: params.messageType,
|
|
110
|
+
reply_to: params.replyTo,
|
|
111
|
+
},
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
51
114
|
/**
|
|
52
115
|
* Delegate a task to an agent using the A2A protocol.
|
|
53
116
|
* @param agentId - Target agent identifier
|
|
@@ -307,6 +370,92 @@ class AgentClient {
|
|
|
307
370
|
{ agent_id: agentId },
|
|
308
371
|
]);
|
|
309
372
|
}
|
|
373
|
+
/**
|
|
374
|
+
* Operational suspend (Active → Suspended). The reversible counterpart of
|
|
375
|
+
* `resumeAgent`. Distinct from the kill-switch `pauseAgent` /
|
|
376
|
+
* `quarantineAgent` axes (those require signed transactions).
|
|
377
|
+
* @param agentId - The agent identifier
|
|
378
|
+
* @param reason - Free-form audit reason
|
|
379
|
+
*/
|
|
380
|
+
async suspendAgent(agentId, reason) {
|
|
381
|
+
return this.rpc.call("tenzro_suspendAgent", {
|
|
382
|
+
agent_id: agentId,
|
|
383
|
+
reason,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Recover a Suspended agent back to Active. Used to recover from auto-
|
|
388
|
+
* suspend (heartbeat monitor) or a manual `suspendAgent`.
|
|
389
|
+
* @param agentId - The agent identifier
|
|
390
|
+
*/
|
|
391
|
+
async resumeAgent(agentId) {
|
|
392
|
+
return this.rpc.call("tenzro_resumeAgent", {
|
|
393
|
+
agent_id: agentId,
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Send a liveness heartbeat for an agent. The heartbeat monitor uses
|
|
398
|
+
* `last_heartbeat` to decide whether to auto-suspend on the next sweep.
|
|
399
|
+
* @param agentId - The agent identifier
|
|
400
|
+
*/
|
|
401
|
+
async agentHeartbeat(agentId) {
|
|
402
|
+
return this.rpc.call("tenzro_agentHeartbeat", {
|
|
403
|
+
agent_id: agentId,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Fetch every capability attestation registered on this node for
|
|
408
|
+
* `capability`. `capability` accepts the same short-form tags as
|
|
409
|
+
* `register` (`nlp`, `vision`, `code`, `data`, `blockchain`,
|
|
410
|
+
* `smart_contract`, `api_integration`, `coordination`) — anything else
|
|
411
|
+
* is treated as a `Custom` capability with that name.
|
|
412
|
+
*
|
|
413
|
+
* When `verifiedOnly` is `true` the node re-runs query-time signature
|
|
414
|
+
* + expiry checks before returning (defence in depth on top of
|
|
415
|
+
* submit-time verification per #52). Default is `false`.
|
|
416
|
+
*
|
|
417
|
+
* Returns `{capability, verified_only, attestations: [...], total}`.
|
|
418
|
+
*
|
|
419
|
+
* @param capability - Capability short-form or custom name
|
|
420
|
+
* @param verifiedOnly - Force query-time re-verification before returning
|
|
421
|
+
*/
|
|
422
|
+
async getCapabilityAttestations(capability, verifiedOnly = false) {
|
|
423
|
+
return this.rpc.call("tenzro_getCapabilityAttestations", {
|
|
424
|
+
capability,
|
|
425
|
+
verified_only: verifiedOnly,
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Fetch every capability attestation issued for a specific agent. The
|
|
430
|
+
* reply includes the agent's registered capability list, the full
|
|
431
|
+
* attestation envelopes, and the agent's registered wallet address
|
|
432
|
+
* (used by the self-attestation guard).
|
|
433
|
+
*
|
|
434
|
+
* Returns `{agent_id, capabilities, attestations: [...],
|
|
435
|
+
* total_attestations, registered_address}`.
|
|
436
|
+
*
|
|
437
|
+
* @param agentId - The agent ID to look up
|
|
438
|
+
*/
|
|
439
|
+
async getAgentCapabilityAttestations(agentId) {
|
|
440
|
+
return this.rpc.call("tenzro_getAgentCapabilityAttestations", {
|
|
441
|
+
agent_id: agentId,
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Pick the "best" agent on this node for `capability`. Selection prefers
|
|
446
|
+
* the most recent TEE-backed attestation, falling back to any agent that
|
|
447
|
+
* has registered the capability. `capability` is parsed with the same
|
|
448
|
+
* short-form/`Custom` rules as `getCapabilityAttestations`.
|
|
449
|
+
*
|
|
450
|
+
* Returns `{capability, best_agent: string | null, total_candidates}`.
|
|
451
|
+
*
|
|
452
|
+
* @param capability - Capability short-form or custom name
|
|
453
|
+
*/
|
|
454
|
+
async findBestAgentForCapability(capability) {
|
|
455
|
+
return this.rpc.call("tenzro_findBestAgentForCapability", {
|
|
456
|
+
capability,
|
|
457
|
+
});
|
|
458
|
+
}
|
|
310
459
|
}
|
|
311
460
|
exports.AgentClient = AgentClient;
|
|
312
461
|
//# sourceMappingURL=agent.js.map
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":";;;AAkBA,0DAA0D;AAC1D,SAAS,YAAY;IACnB,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACnE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAa,WAAW;IACF;IAApB,YAAoB,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAEtC
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type { RpcClient } from "./rpc";
|
|
2
|
+
/**
|
|
3
|
+
* Key class — controls who can revoke the key.
|
|
4
|
+
*
|
|
5
|
+
* - `subject`: default. Subject can self-revoke via `revokeMine`; admin
|
|
6
|
+
* can revoke via `revoke`.
|
|
7
|
+
* - `operator_internal`: operator-only ops key. Admin can revoke; subject
|
|
8
|
+
* path does not apply.
|
|
9
|
+
* - `operator_protected`: operator-only locked-down key. Not revokable
|
|
10
|
+
* via RPC by anyone (including admin). Rotate by updating the operator
|
|
11
|
+
* secret + restarting the node.
|
|
12
|
+
*/
|
|
13
|
+
export type KeyClass = "subject" | "operator_internal" | "operator_protected";
|
|
14
|
+
/** Parameters for {@link ApiKeyClient.create}. */
|
|
15
|
+
export interface CreateApiKeyParams {
|
|
16
|
+
/** Free-form label shown in `list`. */
|
|
17
|
+
label: string;
|
|
18
|
+
/**
|
|
19
|
+
* Optional subject identifier — typically a Tenzro DID. Required if
|
|
20
|
+
* the operator wants the holder to self-revoke later.
|
|
21
|
+
*/
|
|
22
|
+
subject?: string;
|
|
23
|
+
/** Scopes to grant. Defaults to `["canton"]` server-side when empty. */
|
|
24
|
+
scopes?: string[];
|
|
25
|
+
/** Revocability class. Defaults to `subject` when omitted. */
|
|
26
|
+
class?: KeyClass;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Response from {@link ApiKeyClient.create}. The `key` field is the
|
|
30
|
+
* plaintext `tnz_...` token and is shown exactly once — persist it
|
|
31
|
+
* immediately.
|
|
32
|
+
*/
|
|
33
|
+
export interface CreatedApiKey {
|
|
34
|
+
key: string;
|
|
35
|
+
key_id: string;
|
|
36
|
+
label: string;
|
|
37
|
+
subject?: string | null;
|
|
38
|
+
scopes: string[];
|
|
39
|
+
class?: string | null;
|
|
40
|
+
created_at: number;
|
|
41
|
+
note?: string | null;
|
|
42
|
+
}
|
|
43
|
+
/** One row of the keyring as returned by `list` / `listMine`. */
|
|
44
|
+
export interface ApiKeyRecord {
|
|
45
|
+
key_id: string;
|
|
46
|
+
subject?: string | null;
|
|
47
|
+
label: string;
|
|
48
|
+
scopes: string[];
|
|
49
|
+
class?: string | null;
|
|
50
|
+
created_at: number;
|
|
51
|
+
revoked_at?: number | null;
|
|
52
|
+
active: boolean;
|
|
53
|
+
}
|
|
54
|
+
/** Response from {@link ApiKeyClient.list}. */
|
|
55
|
+
export interface ApiKeyList {
|
|
56
|
+
keys: ApiKeyRecord[];
|
|
57
|
+
}
|
|
58
|
+
/** Response from {@link ApiKeyClient.listMine}. */
|
|
59
|
+
export interface MyApiKeyList {
|
|
60
|
+
keys: ApiKeyRecord[];
|
|
61
|
+
subject: string;
|
|
62
|
+
}
|
|
63
|
+
/** Response from {@link ApiKeyClient.revoke} / {@link ApiKeyClient.revokeMine}. */
|
|
64
|
+
export interface RevokeApiKeyResult {
|
|
65
|
+
key_id: string;
|
|
66
|
+
revoked: boolean;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* API-key management client.
|
|
70
|
+
*
|
|
71
|
+
* Two control planes:
|
|
72
|
+
*
|
|
73
|
+
* 1. **Operator** (`X-Tenzro-Admin-Token`): {@link create} / {@link list}
|
|
74
|
+
* / {@link revoke} any key on the operator's own node. Sourced from
|
|
75
|
+
* the `TENZRO_ADMIN_TOKEN` env var by the underlying `RpcClient`.
|
|
76
|
+
* 2. **Subject** (`X-Tenzro-Api-Key`): {@link listMine} / {@link revokeMine}
|
|
77
|
+
* keys belonging to the caller's own subject. Sourced from `TENZRO_API_KEY`.
|
|
78
|
+
*
|
|
79
|
+
* Every Tenzro node operator holds their own admin token for *their
|
|
80
|
+
* own* node. There is no global "Tenzro Labs token," and admin
|
|
81
|
+
* capabilities do not extend to network-wide state (validator set,
|
|
82
|
+
* treasury, fee schedule, system contracts — those flow through
|
|
83
|
+
* on-chain governance via `tenzro-token`). See `docs/api-keys.md`.
|
|
84
|
+
*/
|
|
85
|
+
export declare class ApiKeyClient {
|
|
86
|
+
private readonly rpc;
|
|
87
|
+
constructor(rpc: RpcClient);
|
|
88
|
+
/**
|
|
89
|
+
* Mint a new API key on this node. Requires `TENZRO_ADMIN_TOKEN` in
|
|
90
|
+
* the environment.
|
|
91
|
+
*
|
|
92
|
+
* `class` controls revocability:
|
|
93
|
+
* - `subject` (default): subject can self-revoke, admin can revoke.
|
|
94
|
+
* - `operator_internal`: admin-only revoke.
|
|
95
|
+
* - `operator_protected`: not revokable via RPC — rotate by updating
|
|
96
|
+
* the operator secret and restarting the node. The SDK injects the
|
|
97
|
+
* `confirm_operator_protected` interlock automatically.
|
|
98
|
+
*/
|
|
99
|
+
create(params: CreateApiKeyParams): Promise<CreatedApiKey>;
|
|
100
|
+
/**
|
|
101
|
+
* List every API key the node has issued — active and revoked.
|
|
102
|
+
* Admin-token-gated.
|
|
103
|
+
*/
|
|
104
|
+
list(): Promise<ApiKeyList>;
|
|
105
|
+
/**
|
|
106
|
+
* Revoke an API key by its non-secret `key_id`. Admin-token-gated.
|
|
107
|
+
*
|
|
108
|
+
* Fails with `-32004` if the target is an `operator_protected` key
|
|
109
|
+
* (those cannot be revoked via RPC, by anyone, including an admin).
|
|
110
|
+
* Rotate that class by updating the operator secret + restart.
|
|
111
|
+
*/
|
|
112
|
+
revoke(keyId: string): Promise<RevokeApiKeyResult>;
|
|
113
|
+
/**
|
|
114
|
+
* List every API key belonging to the caller's own subject.
|
|
115
|
+
* Requires `TENZRO_API_KEY` in the environment.
|
|
116
|
+
*/
|
|
117
|
+
listMine(): Promise<MyApiKeyList>;
|
|
118
|
+
/**
|
|
119
|
+
* Revoke an API key belonging to the caller's own subject.
|
|
120
|
+
* Requires `TENZRO_API_KEY` in the environment.
|
|
121
|
+
*
|
|
122
|
+
* Only `subject`-class keys are eligible. The error for "no such key"
|
|
123
|
+
* and "not your key" is intentionally the same so ownership cannot be
|
|
124
|
+
* probed.
|
|
125
|
+
*/
|
|
126
|
+
revokeMine(keyId: string): Promise<RevokeApiKeyResult>;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=api-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.d.ts","sourceRoot":"","sources":["../src/api-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;AAE9E,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAI3C;;;;;;;;;;OAUG;IACG,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAehE;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAIjC;;;;;;OAMG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQxD;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAIvC;;;;;;;OAOG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAK7D"}
|