@enshell/sdk 0.1.0-beta.2 → 0.1.0-beta.21
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/dist/client.d.ts +35 -28
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +124 -51
- package/dist/client.js.map +1 -1
- package/dist/contract.d.ts +1 -1
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +8 -8
- package/dist/contract.js.map +1 -1
- package/dist/crypto.d.ts +4 -12
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +57 -21
- package/dist/crypto.js.map +1 -1
- package/dist/ens.d.ts +3 -1
- package/dist/ens.d.ts.map +1 -1
- package/dist/ens.js +5 -2
- package/dist/ens.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/networks.d.ts +1 -0
- package/dist/networks.d.ts.map +1 -1
- package/dist/networks.js +4 -2
- package/dist/networks.js.map +1 -1
- package/dist/relay.d.ts +15 -0
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +26 -0
- package/dist/relay.js.map +1 -1
- package/dist/types.d.ts +17 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +4 -2
package/dist/client.d.ts
CHANGED
|
@@ -1,36 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { ENShellConfig, Agent, RegisterAgentOptions, ActionResult, QueuedAction, ProtectOptions, ProtectResult } from "./types.js";
|
|
1
|
+
import type { ENShellConfig, Agent, RegisterAgentOptions, ActionResult, QueuedAction, ProtectOptions, ProtectResult, ResolutionResult } from "./types.js";
|
|
3
2
|
export declare class ENShell {
|
|
4
3
|
private contract;
|
|
4
|
+
private readContract;
|
|
5
5
|
private config;
|
|
6
6
|
constructor(config: ENShellConfig);
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
* Use this for a simple one-call flow.
|
|
8
|
+
* Register an agent. The contract creates the ENS subdomain automatically.
|
|
10
9
|
*/
|
|
11
|
-
registerAgent(agentId: string, options: RegisterAgentOptions): Promise<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* Sets the default avatar text record on the subdomain.
|
|
15
|
-
*/
|
|
16
|
-
createAgentSubdomain(agentId: string): Promise<void>;
|
|
17
|
-
/**
|
|
18
|
-
* Register an agent on the firewall contract and set allowed targets.
|
|
19
|
-
* Call this after createAgentSubdomain() if you want separate steps,
|
|
20
|
-
* or use registerAgent() for both in one call.
|
|
21
|
-
*/
|
|
22
|
-
registerAgentOnChain(agentId: string, options: RegisterAgentOptions): Promise<void>;
|
|
10
|
+
registerAgent(agentId: string, options: RegisterAgentOptions): Promise<{
|
|
11
|
+
txHash: string;
|
|
12
|
+
}>;
|
|
23
13
|
getAgent(agentId: string): Promise<Agent>;
|
|
24
14
|
getAgentCount(): Promise<bigint>;
|
|
25
|
-
deactivateAgent(agentId: string): Promise<
|
|
26
|
-
|
|
27
|
-
|
|
15
|
+
deactivateAgent(agentId: string): Promise<{
|
|
16
|
+
txHash: string;
|
|
17
|
+
}>;
|
|
18
|
+
reactivateAgent(agentId: string): Promise<{
|
|
19
|
+
txHash: string;
|
|
20
|
+
}>;
|
|
21
|
+
setAllowedTarget(agentId: string, target: string, allowed: boolean): Promise<{
|
|
22
|
+
txHash: string;
|
|
23
|
+
}>;
|
|
28
24
|
isTargetAllowed(agentId: string, target: string): Promise<boolean>;
|
|
29
25
|
submitAction(agentId: string, target: string, value: string, data: string, instructionHash: string): Promise<ActionResult>;
|
|
30
|
-
approveAction(actionId: bigint): Promise<
|
|
31
|
-
|
|
26
|
+
approveAction(actionId: bigint): Promise<{
|
|
27
|
+
txHash: string;
|
|
28
|
+
}>;
|
|
29
|
+
rejectAction(actionId: bigint): Promise<{
|
|
30
|
+
txHash: string;
|
|
31
|
+
}>;
|
|
32
32
|
getQueuedAction(actionId: bigint): Promise<QueuedAction>;
|
|
33
33
|
isTrusted(agentId: string): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Check trust between two agents. Emits TrustChecked event on-chain.
|
|
36
|
+
* Returns whether the target agent is trusted.
|
|
37
|
+
*/
|
|
38
|
+
checkTrust(checkerAgentId: string, targetAgentId: string): Promise<{
|
|
39
|
+
trusted: boolean;
|
|
40
|
+
txHash: string;
|
|
41
|
+
}>;
|
|
34
42
|
/**
|
|
35
43
|
* Submit an action through the ENShell firewall.
|
|
36
44
|
*
|
|
@@ -42,13 +50,12 @@ export declare class ENShell {
|
|
|
42
50
|
*/
|
|
43
51
|
protect(agentId: string, options: ProtectOptions): Promise<ProtectResult>;
|
|
44
52
|
/**
|
|
45
|
-
* Poll the contract until a queued action is resolved.
|
|
46
|
-
* Returns the
|
|
47
|
-
*
|
|
48
|
-
* @param actionId - The queued action ID
|
|
49
|
-
* @param pollIntervalMs - Polling interval in milliseconds (default 5000)
|
|
50
|
-
* @param timeoutMs - Maximum wait time in milliseconds (default 5 minutes)
|
|
53
|
+
* Poll the contract until a queued action is resolved by the CRE oracle.
|
|
54
|
+
* Returns the decision + analysis data for escalated/blocked actions.
|
|
55
|
+
* For ESCALATED actions, returns immediately (caller handles approval).
|
|
51
56
|
*/
|
|
52
|
-
waitForResolution(actionId: bigint, pollIntervalMs?: number, timeoutMs?: number): Promise<
|
|
57
|
+
waitForResolution(actionId: bigint, pollIntervalMs?: number, timeoutMs?: number): Promise<ResolutionResult>;
|
|
58
|
+
/** Fetch CRE analysis from the relay for a given action. */
|
|
59
|
+
private fetchAnalysis;
|
|
53
60
|
}
|
|
54
61
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAsBjC;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA6CxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAezC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAoB7D,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAsB7D,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAMxB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMlE,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,CAAC;IA4BlB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAM5D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAM3D,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBxD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlD;;;OAGG;IACG,UAAU,CACd,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBhD;;;;;;;;OAQG;IACG,OAAO,CACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC;IA8BzB;;;;OAIG;IACG,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,cAAc,SAAO,EACrB,SAAS,SAAU,GAClB,OAAO,CAAC,gBAAgB,CAAC;IA0B5B,4DAA4D;YAC9C,aAAa;CAa5B"}
|
package/dist/client.js
CHANGED
|
@@ -1,48 +1,36 @@
|
|
|
1
|
-
import { parseEther, keccak256, toUtf8Bytes } from "ethers";
|
|
1
|
+
import { JsonRpcProvider, parseEther, keccak256, toUtf8Bytes } from "ethers";
|
|
2
2
|
import { getFirewallContract } from "./contract.js";
|
|
3
3
|
import { NETWORK_CONFIG } from "./networks.js";
|
|
4
|
-
import { computeEnsNode, createSubdomain } from "./ens.js";
|
|
5
4
|
import { encryptForOracle } from "./crypto.js";
|
|
6
5
|
import { RelayClient } from "./relay.js";
|
|
7
6
|
import { ActionDecision } from "./types.js";
|
|
8
7
|
export class ENShell {
|
|
9
8
|
contract;
|
|
9
|
+
readContract;
|
|
10
10
|
config;
|
|
11
11
|
constructor(config) {
|
|
12
12
|
this.config = config;
|
|
13
|
-
const
|
|
14
|
-
|
|
13
|
+
const networkConfig = NETWORK_CONFIG[config.network];
|
|
14
|
+
const address = config.contractAddress ?? networkConfig.firewallAddress;
|
|
15
15
|
if (!address) {
|
|
16
16
|
throw new Error(`No contract address configured for network ${config.network}`);
|
|
17
17
|
}
|
|
18
18
|
this.contract = getFirewallContract(address, config.signer);
|
|
19
|
+
// Separate read-only provider for view calls (avoids WalletConnect eth_call issues)
|
|
20
|
+
const rpcUrl = config.rpcUrl ?? networkConfig.rpcUrl;
|
|
21
|
+
const readProvider = new JsonRpcProvider(rpcUrl);
|
|
22
|
+
this.readContract = getFirewallContract(address, readProvider);
|
|
19
23
|
}
|
|
20
24
|
// -- Agent Management --
|
|
21
25
|
/**
|
|
22
|
-
*
|
|
23
|
-
* Use this for a simple one-call flow.
|
|
26
|
+
* Register an agent. The contract creates the ENS subdomain automatically.
|
|
24
27
|
*/
|
|
25
28
|
async registerAgent(agentId, options) {
|
|
26
|
-
|
|
27
|
-
await this.registerAgentOnChain(agentId, options);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Create the ENS subdomain for an agent (e.g. trader.enshell.eth).
|
|
31
|
-
* Sets the default avatar text record on the subdomain.
|
|
32
|
-
*/
|
|
33
|
-
async createAgentSubdomain(agentId) {
|
|
34
|
-
await createSubdomain(agentId, this.config.network, this.config.signer);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Register an agent on the firewall contract and set allowed targets.
|
|
38
|
-
* Call this after createAgentSubdomain() if you want separate steps,
|
|
39
|
-
* or use registerAgent() for both in one call.
|
|
40
|
-
*/
|
|
41
|
-
async registerAgentOnChain(agentId, options) {
|
|
42
|
-
const ensNode = computeEnsNode(agentId, this.config.network);
|
|
29
|
+
let txHash;
|
|
43
30
|
try {
|
|
44
|
-
const tx = await this.contract.registerAgentSimple(agentId,
|
|
45
|
-
await tx.wait();
|
|
31
|
+
const tx = await this.contract.registerAgentSimple(agentId, options.agentAddress, parseEther(options.spendLimit));
|
|
32
|
+
const receipt = await tx.wait();
|
|
33
|
+
txHash = receipt.hash;
|
|
46
34
|
}
|
|
47
35
|
catch (err) {
|
|
48
36
|
if (err.message?.includes("Agent already registered")) {
|
|
@@ -54,12 +42,30 @@ export class ENShell {
|
|
|
54
42
|
const targetTx = await this.contract.setAllowedTargets(agentId, options.allowedTargets, true);
|
|
55
43
|
await targetTx.wait();
|
|
56
44
|
}
|
|
45
|
+
// Post agent info to relay for dashboard display
|
|
46
|
+
const networkConfig = NETWORK_CONFIG[this.config.network];
|
|
47
|
+
if (networkConfig.relayUrl) {
|
|
48
|
+
try {
|
|
49
|
+
const relay = new RelayClient(networkConfig.relayUrl);
|
|
50
|
+
await relay.registerAgent(agentId, {
|
|
51
|
+
ensName: `${agentId}.${networkConfig.ensParentDomain}`,
|
|
52
|
+
address: options.agentAddress,
|
|
53
|
+
spendLimit: options.spendLimit,
|
|
54
|
+
active: true,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Relay is optional - don't fail registration if relay is down
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return { txHash };
|
|
57
62
|
}
|
|
58
63
|
async getAgent(agentId) {
|
|
59
|
-
const raw = await this.
|
|
64
|
+
const raw = await this.readContract.getAgent(agentId);
|
|
60
65
|
return {
|
|
61
66
|
ensNode: raw.ensNode,
|
|
62
67
|
agentAddress: raw.agentAddress,
|
|
68
|
+
owner: raw.owner,
|
|
63
69
|
spendLimit: raw.spendLimit,
|
|
64
70
|
threatScore: raw.threatScore,
|
|
65
71
|
strikes: raw.strikes,
|
|
@@ -69,23 +75,50 @@ export class ENShell {
|
|
|
69
75
|
};
|
|
70
76
|
}
|
|
71
77
|
async getAgentCount() {
|
|
72
|
-
return this.
|
|
78
|
+
return this.readContract.getAgentCount();
|
|
73
79
|
}
|
|
74
80
|
async deactivateAgent(agentId) {
|
|
81
|
+
const agent = await this.getAgent(agentId);
|
|
82
|
+
if (!agent.active) {
|
|
83
|
+
throw new Error(`Agent "${agentId}" is already deactivated`);
|
|
84
|
+
}
|
|
75
85
|
const tx = await this.contract.deactivateAgent(agentId);
|
|
76
|
-
await tx.wait();
|
|
86
|
+
const receipt = await tx.wait();
|
|
87
|
+
const networkConfig = NETWORK_CONFIG[this.config.network];
|
|
88
|
+
if (networkConfig.relayUrl) {
|
|
89
|
+
try {
|
|
90
|
+
const relay = new RelayClient(networkConfig.relayUrl);
|
|
91
|
+
await relay.updateAgent(agentId, { active: false });
|
|
92
|
+
}
|
|
93
|
+
catch { /* relay is optional */ }
|
|
94
|
+
}
|
|
95
|
+
return { txHash: receipt.hash };
|
|
77
96
|
}
|
|
78
97
|
async reactivateAgent(agentId) {
|
|
98
|
+
const agent = await this.getAgent(agentId);
|
|
99
|
+
if (agent.active) {
|
|
100
|
+
throw new Error(`Agent "${agentId}" is already active`);
|
|
101
|
+
}
|
|
79
102
|
const tx = await this.contract.reactivateAgent(agentId);
|
|
80
|
-
await tx.wait();
|
|
103
|
+
const receipt = await tx.wait();
|
|
104
|
+
const networkConfig = NETWORK_CONFIG[this.config.network];
|
|
105
|
+
if (networkConfig.relayUrl) {
|
|
106
|
+
try {
|
|
107
|
+
const relay = new RelayClient(networkConfig.relayUrl);
|
|
108
|
+
await relay.updateAgent(agentId, { active: true });
|
|
109
|
+
}
|
|
110
|
+
catch { /* relay is optional */ }
|
|
111
|
+
}
|
|
112
|
+
return { txHash: receipt.hash };
|
|
81
113
|
}
|
|
82
114
|
// -- Target Permissions --
|
|
83
115
|
async setAllowedTarget(agentId, target, allowed) {
|
|
84
116
|
const tx = await this.contract.setAllowedTarget(agentId, target, allowed);
|
|
85
|
-
await tx.wait();
|
|
117
|
+
const receipt = await tx.wait();
|
|
118
|
+
return { txHash: receipt.hash };
|
|
86
119
|
}
|
|
87
120
|
async isTargetAllowed(agentId, target) {
|
|
88
|
-
return this.
|
|
121
|
+
return this.readContract.isTargetAllowed(agentId, target);
|
|
89
122
|
}
|
|
90
123
|
// -- Action Submission --
|
|
91
124
|
async submitAction(agentId, target, value, data, instructionHash) {
|
|
@@ -96,7 +129,7 @@ export class ENShell {
|
|
|
96
129
|
try {
|
|
97
130
|
const parsed = iface.parseLog(log);
|
|
98
131
|
if (parsed?.name === "ActionSubmitted") {
|
|
99
|
-
return { actionId: parsed.args[0] };
|
|
132
|
+
return { actionId: parsed.args[0], txHash: receipt.hash };
|
|
100
133
|
}
|
|
101
134
|
}
|
|
102
135
|
catch {
|
|
@@ -108,14 +141,16 @@ export class ENShell {
|
|
|
108
141
|
// -- Ledger Approval (for escalated actions) --
|
|
109
142
|
async approveAction(actionId) {
|
|
110
143
|
const tx = await this.contract.approveAction(actionId);
|
|
111
|
-
await tx.wait();
|
|
144
|
+
const receipt = await tx.wait();
|
|
145
|
+
return { txHash: receipt.hash };
|
|
112
146
|
}
|
|
113
147
|
async rejectAction(actionId) {
|
|
114
148
|
const tx = await this.contract.rejectAction(actionId);
|
|
115
|
-
await tx.wait();
|
|
149
|
+
const receipt = await tx.wait();
|
|
150
|
+
return { txHash: receipt.hash };
|
|
116
151
|
}
|
|
117
152
|
async getQueuedAction(actionId) {
|
|
118
|
-
const raw = await this.
|
|
153
|
+
const raw = await this.readContract.getQueuedAction(actionId);
|
|
119
154
|
return {
|
|
120
155
|
agentId: raw.agentId,
|
|
121
156
|
target: raw.target,
|
|
@@ -129,7 +164,28 @@ export class ENShell {
|
|
|
129
164
|
}
|
|
130
165
|
// -- Trust Mesh --
|
|
131
166
|
async isTrusted(agentId) {
|
|
132
|
-
return this.
|
|
167
|
+
return this.readContract.isTrusted(agentId);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Check trust between two agents. Emits TrustChecked event on-chain.
|
|
171
|
+
* Returns whether the target agent is trusted.
|
|
172
|
+
*/
|
|
173
|
+
async checkTrust(checkerAgentId, targetAgentId) {
|
|
174
|
+
const tx = await this.contract.checkTrust(checkerAgentId, targetAgentId);
|
|
175
|
+
const receipt = await tx.wait();
|
|
176
|
+
// Parse the TrustChecked event to get the result
|
|
177
|
+
const iface = this.contract.interface;
|
|
178
|
+
let trusted = false;
|
|
179
|
+
for (const log of receipt.logs) {
|
|
180
|
+
try {
|
|
181
|
+
const parsed = iface.parseLog({ topics: log.topics, data: log.data });
|
|
182
|
+
if (parsed?.name === "TrustChecked") {
|
|
183
|
+
trusted = parsed.args[4]; // 5th arg is 'trusted'
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch { /* skip non-matching logs */ }
|
|
187
|
+
}
|
|
188
|
+
return { trusted, txHash: receipt.hash };
|
|
133
189
|
}
|
|
134
190
|
// -- Protect (core firewall method) --
|
|
135
191
|
/**
|
|
@@ -148,10 +204,10 @@ export class ENShell {
|
|
|
148
204
|
const data = tx.data ?? "0x";
|
|
149
205
|
// 1. Hash the instruction
|
|
150
206
|
const instructionHash = keccak256(toUtf8Bytes(instruction));
|
|
151
|
-
// 2. Encrypt and
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
const
|
|
207
|
+
// 2. Encrypt and ship to relay
|
|
208
|
+
const networkConfig = NETWORK_CONFIG[this.config.network];
|
|
209
|
+
if (networkConfig.oraclePublicKey && networkConfig.relayUrl) {
|
|
210
|
+
const encrypted = encryptForOracle(instruction, networkConfig.oraclePublicKey);
|
|
155
211
|
const relay = new RelayClient(networkConfig.relayUrl);
|
|
156
212
|
await relay.put(instructionHash, encrypted);
|
|
157
213
|
}
|
|
@@ -160,34 +216,51 @@ export class ENShell {
|
|
|
160
216
|
// 4. Return result with resolution helper
|
|
161
217
|
return {
|
|
162
218
|
actionId: result.actionId,
|
|
219
|
+
txHash: result.txHash,
|
|
163
220
|
instructionHash,
|
|
164
221
|
tx: { to: target, value, data },
|
|
165
222
|
waitForResolution: () => this.waitForResolution(result.actionId),
|
|
166
223
|
};
|
|
167
224
|
}
|
|
168
225
|
/**
|
|
169
|
-
* Poll the contract until a queued action is resolved.
|
|
170
|
-
* Returns the
|
|
171
|
-
*
|
|
172
|
-
* @param actionId - The queued action ID
|
|
173
|
-
* @param pollIntervalMs - Polling interval in milliseconds (default 5000)
|
|
174
|
-
* @param timeoutMs - Maximum wait time in milliseconds (default 5 minutes)
|
|
226
|
+
* Poll the contract until a queued action is resolved by the CRE oracle.
|
|
227
|
+
* Returns the decision + analysis data for escalated/blocked actions.
|
|
228
|
+
* For ESCALATED actions, returns immediately (caller handles approval).
|
|
175
229
|
*/
|
|
176
230
|
async waitForResolution(actionId, pollIntervalMs = 5000, timeoutMs = 300_000) {
|
|
177
231
|
const start = Date.now();
|
|
178
232
|
while (Date.now() - start < timeoutMs) {
|
|
179
233
|
const action = await this.getQueuedAction(actionId);
|
|
180
234
|
if (action.decision !== ActionDecision.PENDING) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
235
|
+
const decision = action.decision;
|
|
236
|
+
let analysis;
|
|
237
|
+
// Fetch analysis from relay for escalated or blocked actions
|
|
238
|
+
if (decision === ActionDecision.ESCALATED || decision === ActionDecision.BLOCKED) {
|
|
239
|
+
analysis = await this.fetchAnalysis(actionId);
|
|
185
240
|
}
|
|
186
|
-
return
|
|
241
|
+
// For ESCALATED: return immediately — caller handles approval prompt
|
|
242
|
+
// For APPROVED/BLOCKED: action is already resolved
|
|
243
|
+
return { decision, analysis };
|
|
187
244
|
}
|
|
188
245
|
await new Promise((r) => setTimeout(r, pollIntervalMs));
|
|
189
246
|
}
|
|
190
247
|
throw new Error(`Action #${actionId} resolution timed out after ${timeoutMs / 1000}s`);
|
|
191
248
|
}
|
|
249
|
+
/** Fetch CRE analysis from the relay for a given action. */
|
|
250
|
+
async fetchAnalysis(actionId) {
|
|
251
|
+
const networkConfig = NETWORK_CONFIG[this.config.network];
|
|
252
|
+
if (!networkConfig.relayUrl)
|
|
253
|
+
return undefined;
|
|
254
|
+
try {
|
|
255
|
+
const relay = new RelayClient(networkConfig.relayUrl);
|
|
256
|
+
const res = await fetch(`${networkConfig.relayUrl}/analysis/${actionId}`);
|
|
257
|
+
if (!res.ok)
|
|
258
|
+
return undefined;
|
|
259
|
+
return await res.json();
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
return undefined;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
192
265
|
}
|
|
193
266
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/contract.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ import { Contract, type Signer, type Provider } from "ethers";
|
|
|
4
4
|
* Only includes functions currently deployed on-chain.
|
|
5
5
|
* Updated as new features are added to the contract.
|
|
6
6
|
*/
|
|
7
|
-
export declare const AGENT_FIREWALL_ABI: readonly ["function registerAgentSimple(string agentId,
|
|
7
|
+
export declare const AGENT_FIREWALL_ABI: readonly ["function registerAgentSimple(string agentId, address agentAddress, uint256 spendLimit) external", "function getAgent(string agentId) external view returns (tuple(bytes32 ensNode, address agentAddress, address owner, uint256 spendLimit, uint256 threatScore, uint256 strikes, bool active, bool worldIdVerified, uint256 registeredAt))", "function getAgentCount() external view returns (uint256)", "function agentIds(uint256) external view returns (string)", "function deactivateAgent(string agentId) external", "function reactivateAgent(string agentId) external", "function setAllowedTarget(string agentId, address target, bool allowed) external", "function setAllowedTargets(string agentId, address[] targets, bool allowed) external", "function isTargetAllowed(string agentId, address target) external view returns (bool)", "function submitAction(string agentId, address target, uint256 value, bytes data, bytes32 instructionHash) external returns (uint256 actionId)", "function getQueuedAction(uint256 actionId) external view returns (tuple(string agentId, address target, uint256 value, bytes data, bytes32 instructionHash, uint256 queuedAt, bool resolved, uint8 decision))", "function onReport(bytes metadata, bytes report) external", "function supportsInterface(bytes4 interfaceId) external pure returns (bool)", "function approveAction(uint256 actionId) external", "function rejectAction(uint256 actionId) external", "function checkTrust(string checkerAgentId, string targetAgentId) external returns (bool)", "function isTrusted(string agentId) external view returns (bool)", "function setMaxStrikes(uint256 _max) external", "function setBlockThreshold(uint256 _threshold) external", "function setEscalateThreshold(uint256 _threshold) external", "function setForwarder(address _forwarder) external", "function setENSResolver(address _ensResolver) external", "event AgentRegistered(string indexed agentId, bytes32 ensNode, address owner, address agentAddress, uint256 spendLimit, bool worldIdVerified)", "event AgentDeactivated(string indexed agentId, string reason)", "event AllowedTargetUpdated(string indexed agentId, address target, bool allowed)", "event ActionSubmitted(uint256 indexed actionId, string indexed agentId, address target, uint256 value, bytes32 instructionHash)", "event ActionApproved(uint256 indexed actionId, string indexed agentId)", "event ActionBlocked(uint256 indexed actionId, string indexed agentId, string reason)", "event ActionEscalated(uint256 indexed actionId, string indexed agentId, uint256 threatScore)", "event ThreatScoreUpdated(string indexed agentId, uint256 previousScore, uint256 newScore, uint256 rawDetectionScore, uint256 strikes)", "event TrustChecked(string indexed checkerAgentId, string indexed targetAgentId, uint256 threatScore, uint256 strikes, bool trusted)"];
|
|
8
8
|
export declare function getFirewallContract(address: string, signerOrProvider: Signer | Provider): Contract;
|
|
9
9
|
//# sourceMappingURL=contract.d.ts.map
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,4wFAiDrB,CAAC;AAEX,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,QAAQ,GAClC,QAAQ,CAEV"}
|
package/dist/contract.js
CHANGED
|
@@ -6,9 +6,10 @@ import { Contract } from "ethers";
|
|
|
6
6
|
*/
|
|
7
7
|
export const AGENT_FIREWALL_ABI = [
|
|
8
8
|
// Agent registration
|
|
9
|
-
"function registerAgentSimple(string agentId,
|
|
10
|
-
"function getAgent(string agentId) external view returns (tuple(bytes32 ensNode, address agentAddress, uint256 spendLimit, uint256 threatScore, uint256 strikes, bool active, bool worldIdVerified, uint256 registeredAt))",
|
|
9
|
+
"function registerAgentSimple(string agentId, address agentAddress, uint256 spendLimit) external",
|
|
10
|
+
"function getAgent(string agentId) external view returns (tuple(bytes32 ensNode, address agentAddress, address owner, uint256 spendLimit, uint256 threatScore, uint256 strikes, bool active, bool worldIdVerified, uint256 registeredAt))",
|
|
11
11
|
"function getAgentCount() external view returns (uint256)",
|
|
12
|
+
"function agentIds(uint256) external view returns (string)",
|
|
12
13
|
// Agent lifecycle
|
|
13
14
|
"function deactivateAgent(string agentId) external",
|
|
14
15
|
"function reactivateAgent(string agentId) external",
|
|
@@ -19,13 +20,12 @@ export const AGENT_FIREWALL_ABI = [
|
|
|
19
20
|
// Action submission (always queues, CRE resolves)
|
|
20
21
|
"function submitAction(string agentId, address target, uint256 value, bytes data, bytes32 instructionHash) external returns (uint256 actionId)",
|
|
21
22
|
"function getQueuedAction(uint256 actionId) external view returns (tuple(string agentId, address target, uint256 value, bytes data, bytes32 instructionHash, uint256 queuedAt, bool resolved, uint8 decision))",
|
|
22
|
-
// CRE
|
|
23
|
-
"function
|
|
23
|
+
// CRE report receiver
|
|
24
|
+
"function onReport(bytes metadata, bytes report) external",
|
|
25
|
+
"function supportsInterface(bytes4 interfaceId) external pure returns (bool)",
|
|
24
26
|
// Ledger approval (for escalated actions only)
|
|
25
27
|
"function approveAction(uint256 actionId) external",
|
|
26
28
|
"function rejectAction(uint256 actionId) external",
|
|
27
|
-
// Threat scores
|
|
28
|
-
"function updateThreatScore(string agentId, uint256 rawScore) external",
|
|
29
29
|
// Trust mesh
|
|
30
30
|
"function checkTrust(string checkerAgentId, string targetAgentId) external returns (bool)",
|
|
31
31
|
"function isTrusted(string agentId) external view returns (bool)",
|
|
@@ -33,10 +33,10 @@ export const AGENT_FIREWALL_ABI = [
|
|
|
33
33
|
"function setMaxStrikes(uint256 _max) external",
|
|
34
34
|
"function setBlockThreshold(uint256 _threshold) external",
|
|
35
35
|
"function setEscalateThreshold(uint256 _threshold) external",
|
|
36
|
-
"function
|
|
36
|
+
"function setForwarder(address _forwarder) external",
|
|
37
37
|
"function setENSResolver(address _ensResolver) external",
|
|
38
38
|
// Events
|
|
39
|
-
"event AgentRegistered(string indexed agentId, bytes32 ensNode, address agentAddress, uint256 spendLimit, bool worldIdVerified)",
|
|
39
|
+
"event AgentRegistered(string indexed agentId, bytes32 ensNode, address owner, address agentAddress, uint256 spendLimit, bool worldIdVerified)",
|
|
40
40
|
"event AgentDeactivated(string indexed agentId, string reason)",
|
|
41
41
|
"event AllowedTargetUpdated(string indexed agentId, address target, bool allowed)",
|
|
42
42
|
"event ActionSubmitted(uint256 indexed actionId, string indexed agentId, address target, uint256 value, bytes32 instructionHash)",
|
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA8B,MAAM,QAAQ,CAAC;AAE9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,qBAAqB;IACrB,
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA8B,MAAM,QAAQ,CAAC;AAE9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,qBAAqB;IACrB,iGAAiG;IACjG,0OAA0O;IAC1O,0DAA0D;IAC1D,2DAA2D;IAE3D,kBAAkB;IAClB,mDAAmD;IACnD,mDAAmD;IAEnD,kBAAkB;IAClB,kFAAkF;IAClF,sFAAsF;IACtF,uFAAuF;IAEvF,kDAAkD;IAClD,+IAA+I;IAC/I,+MAA+M;IAE/M,sBAAsB;IACtB,0DAA0D;IAC1D,6EAA6E;IAE7E,+CAA+C;IAC/C,mDAAmD;IACnD,kDAAkD;IAElD,aAAa;IACb,0FAA0F;IAC1F,iEAAiE;IAEjE,QAAQ;IACR,+CAA+C;IAC/C,yDAAyD;IACzD,4DAA4D;IAC5D,oDAAoD;IACpD,wDAAwD;IAExD,SAAS;IACT,+IAA+I;IAC/I,+DAA+D;IAC/D,kFAAkF;IAClF,iIAAiI;IACjI,wEAAwE;IACxE,sFAAsF;IACtF,8FAA8F;IAC9F,uIAAuI;IACvI,qIAAqI;CAC7H,CAAC;AAEX,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,gBAAmC;IAEnC,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;AACrE,CAAC"}
|
package/dist/crypto.d.ts
CHANGED
|
@@ -1,24 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Encrypt a plaintext string with a secp256k1 public key
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* @param plaintext - The instruction text to encrypt
|
|
6
|
-
* @param publicKeyHex - The recipient's secp256k1 public key (hex, compressed or uncompressed)
|
|
7
|
-
* @returns Hex-encoded encrypted payload
|
|
2
|
+
* Encrypt a plaintext string with a secp256k1 public key.
|
|
3
|
+
* The oracle's public key is hardcoded in network config (safe to ship publicly).
|
|
4
|
+
* Only the oracle's private key (in Vault DON) can decrypt.
|
|
8
5
|
*/
|
|
9
6
|
export declare function encryptForOracle(plaintext: string, publicKeyHex: string): string;
|
|
10
7
|
/**
|
|
11
8
|
* Decrypt an ECIES-encrypted payload with a secp256k1 private key.
|
|
12
|
-
* Used by the CRE oracle
|
|
13
|
-
*
|
|
14
|
-
* @param encryptedHex - Hex-encoded encrypted payload (with 0x prefix)
|
|
15
|
-
* @param privateKeyHex - The recipient's secp256k1 private key (hex)
|
|
16
|
-
* @returns Decrypted plaintext string
|
|
9
|
+
* Used by the CRE oracle inside the TEE.
|
|
17
10
|
*/
|
|
18
11
|
export declare function decryptAsOracle(encryptedHex: string, privateKeyHex: string): string;
|
|
19
12
|
/**
|
|
20
13
|
* Derive the compressed public key from a private key.
|
|
21
|
-
* Useful for getting the oracle's public key from its private key.
|
|
22
14
|
*/
|
|
23
15
|
export declare function getPublicKeyFromPrivate(privateKeyHex: string): string;
|
|
24
16
|
//# sourceMappingURL=crypto.d.ts.map
|
package/dist/crypto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAiCA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAoBhF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAcnF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAGrE"}
|
package/dist/crypto.js
CHANGED
|
@@ -1,37 +1,73 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getPublicKey, getSharedSecret, utils } from "@noble/secp256k1";
|
|
2
|
+
// @ts-ignore - noble v2 uses subpath exports with .js extension
|
|
3
|
+
import { gcm } from "@noble/ciphers/aes.js";
|
|
4
|
+
// @ts-ignore - noble v2 uses subpath exports with .js extension
|
|
5
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
2
6
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
7
|
+
* Custom ECIES implementation using noble-crypto primitives.
|
|
8
|
+
* Works in Node.js, browsers, and CRE WASM (QuickJS).
|
|
5
9
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
10
|
+
* Encryption flow:
|
|
11
|
+
* 1. Generate ephemeral secp256k1 keypair
|
|
12
|
+
* 2. ECDH with recipient's public key → shared secret
|
|
13
|
+
* 3. SHA-256(shared secret) → AES-256-GCM key
|
|
14
|
+
* 4. Encrypt plaintext with AES-256-GCM
|
|
15
|
+
* 5. Output: ephemeral public key (33 bytes) + nonce (12 bytes) + ciphertext
|
|
16
|
+
*/
|
|
17
|
+
function hexToBytes(hex) {
|
|
18
|
+
const clean = hex.replace("0x", "");
|
|
19
|
+
const bytes = new Uint8Array(clean.length / 2);
|
|
20
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
21
|
+
bytes[i] = parseInt(clean.substring(i * 2, i * 2 + 2), 16);
|
|
22
|
+
}
|
|
23
|
+
return bytes;
|
|
24
|
+
}
|
|
25
|
+
function bytesToHex(bytes) {
|
|
26
|
+
return Array.from(bytes)
|
|
27
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
28
|
+
.join("");
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Encrypt a plaintext string with a secp256k1 public key.
|
|
32
|
+
* The oracle's public key is hardcoded in network config (safe to ship publicly).
|
|
33
|
+
* Only the oracle's private key (in Vault DON) can decrypt.
|
|
9
34
|
*/
|
|
10
35
|
export function encryptForOracle(plaintext, publicKeyHex) {
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
36
|
+
const ephemeralPrivate = utils.randomSecretKey();
|
|
37
|
+
const ephemeralPublic = getPublicKey(ephemeralPrivate, true); // compressed, 33 bytes
|
|
38
|
+
const sharedSecret = getSharedSecret(ephemeralPrivate, hexToBytes(publicKeyHex));
|
|
39
|
+
const aesKey = sha256(sharedSecret);
|
|
40
|
+
const nonce = new Uint8Array(12);
|
|
41
|
+
crypto.getRandomValues(nonce);
|
|
42
|
+
const cipher = gcm(aesKey, nonce);
|
|
43
|
+
const ciphertext = cipher.encrypt(new TextEncoder().encode(plaintext));
|
|
44
|
+
// Pack: ephemeralPublic (33) + nonce (12) + ciphertext (variable)
|
|
45
|
+
const packed = new Uint8Array(33 + 12 + ciphertext.length);
|
|
46
|
+
packed.set(ephemeralPublic, 0);
|
|
47
|
+
packed.set(nonce, 33);
|
|
48
|
+
packed.set(ciphertext, 45);
|
|
49
|
+
return "0x" + bytesToHex(packed);
|
|
14
50
|
}
|
|
15
51
|
/**
|
|
16
52
|
* Decrypt an ECIES-encrypted payload with a secp256k1 private key.
|
|
17
|
-
* Used by the CRE oracle
|
|
18
|
-
*
|
|
19
|
-
* @param encryptedHex - Hex-encoded encrypted payload (with 0x prefix)
|
|
20
|
-
* @param privateKeyHex - The recipient's secp256k1 private key (hex)
|
|
21
|
-
* @returns Decrypted plaintext string
|
|
53
|
+
* Used by the CRE oracle inside the TEE.
|
|
22
54
|
*/
|
|
23
55
|
export function decryptAsOracle(encryptedHex, privateKeyHex) {
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
56
|
+
const packed = hexToBytes(encryptedHex);
|
|
57
|
+
const ephemeralPublic = packed.slice(0, 33);
|
|
58
|
+
const nonce = packed.slice(33, 45);
|
|
59
|
+
const ciphertext = packed.slice(45);
|
|
60
|
+
const sharedSecret = getSharedSecret(hexToBytes(privateKeyHex), ephemeralPublic);
|
|
61
|
+
const aesKey = sha256(sharedSecret);
|
|
62
|
+
const decipher = gcm(aesKey, nonce);
|
|
63
|
+
const decrypted = decipher.decrypt(ciphertext);
|
|
64
|
+
return new TextDecoder().decode(decrypted);
|
|
28
65
|
}
|
|
29
66
|
/**
|
|
30
67
|
* Derive the compressed public key from a private key.
|
|
31
|
-
* Useful for getting the oracle's public key from its private key.
|
|
32
68
|
*/
|
|
33
69
|
export function getPublicKeyFromPrivate(privateKeyHex) {
|
|
34
|
-
const
|
|
35
|
-
return
|
|
70
|
+
const pub = getPublicKey(hexToBytes(privateKeyHex), true);
|
|
71
|
+
return bytesToHex(pub);
|
|
36
72
|
}
|
|
37
73
|
//# sourceMappingURL=crypto.js.map
|
package/dist/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/ens.d.ts
CHANGED
|
@@ -16,5 +16,7 @@ export declare function computeEnsNode(agentId: string, network: Network): strin
|
|
|
16
16
|
* The subdomain is owned by the signer and uses the network's ENS resolver.
|
|
17
17
|
* Throws a clear error if the subdomain already exists.
|
|
18
18
|
*/
|
|
19
|
-
export declare function createSubdomain(agentId: string, network: Network, signer: Signer): Promise<
|
|
19
|
+
export declare function createSubdomain(agentId: string, network: Network, signer: Signer): Promise<{
|
|
20
|
+
txHash: string;
|
|
21
|
+
}>;
|
|
20
22
|
//# sourceMappingURL=ens.d.ts.map
|
package/dist/ens.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ens.d.ts","sourceRoot":"","sources":["../src/ens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAW7D;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAGxE;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ens.d.ts","sourceRoot":"","sources":["../src/ens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAW7D;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAGxE;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA8D7B"}
|
package/dist/ens.js
CHANGED
|
@@ -38,7 +38,7 @@ export async function createSubdomain(agentId, network, signer) {
|
|
|
38
38
|
if (existingOwner !== "0x0000000000000000000000000000000000000000") {
|
|
39
39
|
// If the signer already owns it, skip creation (idempotent)
|
|
40
40
|
if (existingOwner.toLowerCase() === signerAddress.toLowerCase()) {
|
|
41
|
-
return;
|
|
41
|
+
return { txHash: "" };
|
|
42
42
|
}
|
|
43
43
|
const domain = `${agentId}.${config.ensParentDomain}`;
|
|
44
44
|
throw new Error(`ENS subdomain '${domain}' is owned by another address (${existingOwner})`);
|
|
@@ -50,11 +50,13 @@ export async function createSubdomain(agentId, network, signer) {
|
|
|
50
50
|
throw err;
|
|
51
51
|
}
|
|
52
52
|
const maxExpiry = BigInt("18446744073709551615"); // max uint64
|
|
53
|
+
let txHash;
|
|
53
54
|
try {
|
|
54
55
|
const tx = await nameWrapper.setSubnodeRecord(parentNode, agentId, signerAddress, config.ensResolverAddress, 0, // ttl
|
|
55
56
|
0, // fuses (no restrictions)
|
|
56
57
|
maxExpiry);
|
|
57
|
-
await tx.wait();
|
|
58
|
+
const receipt = await tx.wait();
|
|
59
|
+
txHash = receipt.hash;
|
|
58
60
|
}
|
|
59
61
|
catch (err) {
|
|
60
62
|
const domain = `${agentId}.${config.ensParentDomain}`;
|
|
@@ -66,5 +68,6 @@ export async function createSubdomain(agentId, network, signer) {
|
|
|
66
68
|
const avatarTx = await resolver.setText(subdomainNode, "avatar", config.ensDefaultAvatar);
|
|
67
69
|
await avatarTx.wait();
|
|
68
70
|
}
|
|
71
|
+
return { txHash };
|
|
69
72
|
}
|
|
70
73
|
//# sourceMappingURL=ens.js.map
|
package/dist/ens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ens.js","sourceRoot":"","sources":["../src/ens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAe,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,cAAc,EAAgB,MAAM,eAAe,CAAC;AAE7D,MAAM,gBAAgB,GAAG;IACvB,yJAAyJ;IACzJ,qDAAqD;CAC7C,CAAC;AAEX,MAAM,YAAY,GAAG;IACnB,0DAA0D;CAClD,CAAC;AAEX;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,OAAgB;IAC9D,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC;IAC7D,OAAO,QAAQ,CAAC,GAAG,OAAO,IAAI,YAAY,EAAE,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,OAAgB,EAChB,MAAc;IAEd,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAEhD,MAAM,WAAW,GAAG,IAAI,QAAQ,CAC9B,MAAM,CAAC,kBAAkB,EACzB,gBAAgB,EAChB,MAAM,CACP,CAAC;IAEF,mDAAmD;IACnD,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,aAAa,KAAK,4CAA4C,EAAE,CAAC;YACnE,4DAA4D;YAC5D,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;gBAChE,OAAO;
|
|
1
|
+
{"version":3,"file":"ens.js","sourceRoot":"","sources":["../src/ens.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export { ENShell } from "./client.js";
|
|
|
6
6
|
export { encryptForOracle, decryptAsOracle, getPublicKeyFromPrivate } from "./crypto.js";
|
|
7
7
|
export { RelayClient } from "./relay.js";
|
|
8
8
|
export { ActionDecision } from "./types.js";
|
|
9
|
-
export type { Agent, RegisterAgentOptions, ActionResult, QueuedAction, ProtectOptions, ProtectResult, ENShellConfig, } from "./types.js";
|
|
9
|
+
export type { Agent, RegisterAgentOptions, ActionResult, QueuedAction, ProtectOptions, ProtectResult, ResolutionResult, AnalysisResult, ENShellConfig, } from "./types.js";
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEzF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EACV,KAAK,EACL,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEzF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EACV,KAAK,EACL,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC"}
|
package/dist/networks.d.ts
CHANGED
package/dist/networks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networks.d.ts","sourceRoot":"","sources":["../src/networks.ts"],"names":[],"mappings":"AAAA,oBAAY,OAAO;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"networks.d.ts","sourceRoot":"","sources":["../src/networks.ts"],"names":[],"mappings":"AAAA,oBAAY,OAAO;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,CAuBzD,CAAC"}
|
package/dist/networks.js
CHANGED
|
@@ -9,6 +9,7 @@ export const NETWORK_CONFIG = {
|
|
|
9
9
|
rpcUrl: "https://eth.llamarpc.com",
|
|
10
10
|
firewallAddress: "",
|
|
11
11
|
relayUrl: "",
|
|
12
|
+
oraclePublicKey: "",
|
|
12
13
|
ensParentDomain: "enshell.eth",
|
|
13
14
|
nameWrapperAddress: "0xD4416b13d2b3a9aBae7AcD5D6C2BbDBE25686401",
|
|
14
15
|
ensResolverAddress: "0xF29100983E058B709F3D539b0c765937B804AC15",
|
|
@@ -16,9 +17,10 @@ export const NETWORK_CONFIG = {
|
|
|
16
17
|
},
|
|
17
18
|
[Network.SEPOLIA]: {
|
|
18
19
|
chainId: 11155111,
|
|
19
|
-
rpcUrl: "https://rpc.
|
|
20
|
-
firewallAddress: "
|
|
20
|
+
rpcUrl: "https://ethereum-sepolia-rpc.publicnode.com",
|
|
21
|
+
firewallAddress: "0x3886791bd82ff55294FaaEcCe3624A2376978dB2",
|
|
21
22
|
relayUrl: "https://relay.enshell.xyz",
|
|
23
|
+
oraclePublicKey: "02cea1f34f52c8e8a2d7d5bf4a768677e600be906fb5c68985fe635ac1331409ca",
|
|
22
24
|
ensParentDomain: "enshell.eth",
|
|
23
25
|
nameWrapperAddress: "0x0635513f179D50A207757E05759CbD106d7dFcE8",
|
|
24
26
|
ensResolverAddress: "0xE99638b40E4Fff0129D56f03b55b6bbC4BBE49b5",
|
package/dist/networks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networks.js","sourceRoot":"","sources":["../src/networks.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,8BAAmB,CAAA;IACnB,8BAAmB,CAAA;AACrB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;
|
|
1
|
+
{"version":3,"file":"networks.js","sourceRoot":"","sources":["../src/networks.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,8BAAmB,CAAA;IACnB,8BAAmB,CAAA;AACrB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAcD,MAAM,CAAC,MAAM,cAAc,GAAmC;IAC5D,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACjB,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,0BAA0B;QAClC,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,EAAE;QACnB,eAAe,EAAE,aAAa;QAC9B,kBAAkB,EAAE,4CAA4C;QAChE,kBAAkB,EAAE,4CAA4C;QAChE,gBAAgB,EAAE,4BAA4B;KAC/C;IACD,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACjB,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,6CAA6C;QACrD,eAAe,EAAE,4CAA4C;QAC7D,QAAQ,EAAE,2BAA2B;QACrC,eAAe,EAAE,oEAAoE;QACrF,eAAe,EAAE,aAAa;QAC9B,kBAAkB,EAAE,4CAA4C;QAChE,kBAAkB,EAAE,4CAA4C;QAChE,gBAAgB,EAAE,oCAAoC;KACvD;CACF,CAAC"}
|
package/dist/relay.d.ts
CHANGED
|
@@ -17,6 +17,21 @@ export declare class RelayClient {
|
|
|
17
17
|
* @returns The encrypted payload, or null if not found/expired
|
|
18
18
|
*/
|
|
19
19
|
get(instructionHash: string): Promise<string | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Register an agent on the relay for dashboard display.
|
|
22
|
+
*/
|
|
23
|
+
registerAgent(agentId: string, data: {
|
|
24
|
+
ensName: string;
|
|
25
|
+
address: string;
|
|
26
|
+
spendLimit: string;
|
|
27
|
+
active: boolean;
|
|
28
|
+
}): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Update an agent's fields on the relay (partial update).
|
|
31
|
+
*/
|
|
32
|
+
updateAgent(agentId: string, data: {
|
|
33
|
+
active?: boolean;
|
|
34
|
+
}): Promise<void>;
|
|
20
35
|
/**
|
|
21
36
|
* Health check on the relay service.
|
|
22
37
|
*/
|
package/dist/relay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;gBAEZ,QAAQ,EAAE,MAAM;IAI5B;;;;OAIG;IACG,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3E;;;;OAIG;IACG,GAAG,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAe1D;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAO7D"}
|
|
1
|
+
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;gBAEZ,QAAQ,EAAE,MAAM;IAI5B;;;;OAIG;IACG,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3E;;;;OAIG;IACG,GAAG,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAe1D;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QACzC,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,OAAO,CAAC;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7E;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAO7D"}
|
package/dist/relay.js
CHANGED
|
@@ -43,6 +43,32 @@ export class RelayClient {
|
|
|
43
43
|
const body = await res.json();
|
|
44
44
|
return body.encryptedPayload;
|
|
45
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Register an agent on the relay for dashboard display.
|
|
48
|
+
*/
|
|
49
|
+
async registerAgent(agentId, data) {
|
|
50
|
+
const res = await fetch(`${this.baseUrl}/agents/${agentId}`, {
|
|
51
|
+
method: "POST",
|
|
52
|
+
headers: { "Content-Type": "application/json" },
|
|
53
|
+
body: JSON.stringify(data),
|
|
54
|
+
});
|
|
55
|
+
if (!res.ok && res.status !== 409) {
|
|
56
|
+
// Ignore errors - relay is optional for agent registration
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Update an agent's fields on the relay (partial update).
|
|
61
|
+
*/
|
|
62
|
+
async updateAgent(agentId, data) {
|
|
63
|
+
const res = await fetch(`${this.baseUrl}/agents/${agentId}`, {
|
|
64
|
+
method: "PATCH",
|
|
65
|
+
headers: { "Content-Type": "application/json" },
|
|
66
|
+
body: JSON.stringify(data),
|
|
67
|
+
});
|
|
68
|
+
if (!res.ok && res.status !== 404) {
|
|
69
|
+
// Ignore errors - relay is optional
|
|
70
|
+
}
|
|
71
|
+
}
|
|
46
72
|
/**
|
|
47
73
|
* Health check on the relay service.
|
|
48
74
|
*/
|
package/dist/relay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,OAAO,WAAW;IACd,OAAO,CAAS;IAExB,YAAY,QAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,eAAuB,EAAE,gBAAwB;QACzD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,UAAU,eAAe,EAAE,EAAE;YAClE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;SAC3C,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,4CAA4C;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,MAAM,MAAO,IAAY,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,eAAuB;QAC/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,UAAU,eAAe,EAAE,CAAC,CAAC;QAEpE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAkC,CAAC;QAC9D,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,EAAkD,CAAC;IACpE,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { Network } from "./networks.js";
|
|
|
3
3
|
export interface Agent {
|
|
4
4
|
ensNode: string;
|
|
5
5
|
agentAddress: string;
|
|
6
|
+
owner: string;
|
|
6
7
|
spendLimit: bigint;
|
|
7
8
|
threatScore: bigint;
|
|
8
9
|
strikes: bigint;
|
|
@@ -23,6 +24,7 @@ export declare enum ActionDecision {
|
|
|
23
24
|
}
|
|
24
25
|
export interface ActionResult {
|
|
25
26
|
actionId: bigint;
|
|
27
|
+
txHash: string;
|
|
26
28
|
}
|
|
27
29
|
export interface QueuedAction {
|
|
28
30
|
agentId: string;
|
|
@@ -34,6 +36,18 @@ export interface QueuedAction {
|
|
|
34
36
|
resolved: boolean;
|
|
35
37
|
decision: number;
|
|
36
38
|
}
|
|
39
|
+
export interface AnalysisResult {
|
|
40
|
+
score: number;
|
|
41
|
+
decision: number;
|
|
42
|
+
reasoning: string;
|
|
43
|
+
instruction: string;
|
|
44
|
+
target: string;
|
|
45
|
+
agentId: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ResolutionResult {
|
|
48
|
+
decision: ActionDecision;
|
|
49
|
+
analysis?: AnalysisResult;
|
|
50
|
+
}
|
|
37
51
|
export interface ProtectOptions {
|
|
38
52
|
instruction: string;
|
|
39
53
|
tx: {
|
|
@@ -44,6 +58,7 @@ export interface ProtectOptions {
|
|
|
44
58
|
}
|
|
45
59
|
export interface ProtectResult {
|
|
46
60
|
actionId: bigint;
|
|
61
|
+
txHash: string;
|
|
47
62
|
instructionHash: string;
|
|
48
63
|
tx: {
|
|
49
64
|
to: string;
|
|
@@ -51,13 +66,12 @@ export interface ProtectResult {
|
|
|
51
66
|
data: string;
|
|
52
67
|
};
|
|
53
68
|
/** Wait for the CRE oracle to resolve the action. Polls the contract. */
|
|
54
|
-
waitForResolution: () => Promise<
|
|
69
|
+
waitForResolution: () => Promise<ResolutionResult>;
|
|
55
70
|
}
|
|
56
71
|
export interface ENShellConfig {
|
|
57
72
|
network: Network;
|
|
58
73
|
signer: Signer;
|
|
59
74
|
contractAddress?: string;
|
|
60
|
-
|
|
61
|
-
oraclePublicKey?: string;
|
|
75
|
+
rpcUrl?: string;
|
|
62
76
|
}
|
|
63
77
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID,oBAAY,cAAc;IACxB,OAAO,IAAI;IACX,QAAQ,IAAI;IACZ,SAAS,IAAI;IACb,OAAO,IAAI;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID,oBAAY,cAAc;IACxB,OAAO,IAAI;IACX,QAAQ,IAAI;IACZ,SAAS,IAAI;IACb,OAAO,IAAI;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAID,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,EAAE,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACpD;AAID,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAuBA,gBAAgB;AAEhB,MAAM,CAAN,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,yDAAW,CAAA;IACX,2DAAY,CAAA;IACZ,6DAAa,CAAA;IACb,yDAAW,CAAA;AACb,CAAC,EALW,cAAc,KAAd,cAAc,QAKzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enshell/sdk",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.21",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
"prepublishOnly": "npm run build"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"
|
|
18
|
+
"@noble/ciphers": "^2.1.1",
|
|
19
|
+
"@noble/hashes": "^2.0.1",
|
|
20
|
+
"@noble/secp256k1": "^3.0.0",
|
|
19
21
|
"ethers": "^6.15.0"
|
|
20
22
|
},
|
|
21
23
|
"publishConfig": {
|