@ftptech/canton-agent-wallet 0.1.10 → 0.1.12
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/cli.js +46 -3
- package/dist/cli.js.map +1 -1
- package/dist/keys.d.ts +11 -0
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +36 -0
- package/dist/keys.js.map +1 -1
- package/dist/onboard.d.ts +9 -0
- package/dist/onboard.d.ts.map +1 -1
- package/dist/onboard.js +35 -26
- package/dist/onboard.js.map +1 -1
- package/package.json +3 -3
package/dist/cli.js
CHANGED
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
* pay [--relay-url <url>] <url> fetch a URL, auto-paying any x402 402 challenge
|
|
10
10
|
* withdraw --to <p> send CC back out (--amount <cc> for a partial amount)
|
|
11
11
|
* export print the private key (backup; guard it)
|
|
12
|
+
* import [--relay-url <url>] [--key-file <p>] restore a wallet from a backed-up
|
|
13
|
+
* key (stdin or --key-file); inverse of export
|
|
12
14
|
*
|
|
13
15
|
* The relay (facilitator) URL is REQUIRED for the commands that talk to a
|
|
14
|
-
* relay (`create`, `pay`). There is intentionally no built-in default — a
|
|
16
|
+
* relay (`create`, `pay`, `import`). There is intentionally no built-in default — a
|
|
15
17
|
* wrong/stale default would silently send an agent's payments to a dead host.
|
|
16
18
|
* Supply it via `--relay-url <url>` or the `CANTON_AGENT_RELAY_URL` env var.
|
|
17
19
|
* The current FTP facilitator is `https://facilitator.ftptech.xyz`. `address`,
|
|
@@ -25,8 +27,10 @@
|
|
|
25
27
|
* CANTON_AGENT_API_KEY. Wallet lives at ~/.canton-agent/wallet.json (0600).
|
|
26
28
|
*/
|
|
27
29
|
/* eslint-disable no-console -- CLI entrypoint: stdout is its result channel */
|
|
30
|
+
import { readFileSync } from "node:fs";
|
|
28
31
|
import { ensureWallet } from "./onboard.js";
|
|
29
32
|
import { loadWallet } from "./store.js";
|
|
33
|
+
import { agentKeyFromPrivatePem } from "./keys.js";
|
|
30
34
|
import { makePayingFetch } from "./pay.js";
|
|
31
35
|
import { RelayClient } from "./relay-client.js";
|
|
32
36
|
import { claimAll } from "./tx.js";
|
|
@@ -42,6 +46,16 @@ function fail(msg) {
|
|
|
42
46
|
function requireRelay(args) {
|
|
43
47
|
return resolveRelayUrl(args) ?? fail(MISSING_RELAY_HELP);
|
|
44
48
|
}
|
|
49
|
+
/** Read all of stdin as UTF-8 (used by `import` to accept a piped key). */
|
|
50
|
+
function readStdin() {
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
let data = "";
|
|
53
|
+
process.stdin.setEncoding("utf8");
|
|
54
|
+
process.stdin.on("data", (c) => (data += c));
|
|
55
|
+
process.stdin.on("end", () => resolve(data));
|
|
56
|
+
process.stdin.on("error", reject);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
45
59
|
async function main() {
|
|
46
60
|
// Route outbound fetch through HTTP(S)_PROXY when set — node's fetch does not
|
|
47
61
|
// honor those env vars on its own, so an agent behind a proxy would otherwise
|
|
@@ -123,9 +137,38 @@ async function main() {
|
|
|
123
137
|
console.log(w.privateKeyPkcs8Pem);
|
|
124
138
|
break;
|
|
125
139
|
}
|
|
140
|
+
case "import": {
|
|
141
|
+
// Restore a wallet from a backed-up private key (the inverse of `export`).
|
|
142
|
+
// Refuse to clobber an existing wallet — restore goes into a FRESH home.
|
|
143
|
+
if (loadWallet())
|
|
144
|
+
return fail("a wallet already exists in this home — import restores into a FRESH wallet dir.\n" +
|
|
145
|
+
" point CANTON_AGENT_HOME at an empty directory and re-run.");
|
|
146
|
+
const relayUrl = requireRelay(args);
|
|
147
|
+
const keyFile = flag(args, "--key-file");
|
|
148
|
+
let pem;
|
|
149
|
+
if (keyFile)
|
|
150
|
+
pem = readFileSync(keyFile, "utf8");
|
|
151
|
+
else if (!process.stdin.isTTY)
|
|
152
|
+
pem = await readStdin();
|
|
153
|
+
else
|
|
154
|
+
return fail("no private key — pipe `export` output via stdin or pass --key-file <path>.\n" +
|
|
155
|
+
" e.g. canton-agent-wallet export > key.pem && CANTON_AGENT_HOME=./restored \\\n" +
|
|
156
|
+
" canton-agent-wallet import --relay-url <url> --key-file key.pem");
|
|
157
|
+
const w = await ensureWallet({
|
|
158
|
+
relayUrl,
|
|
159
|
+
network: resolveNetwork(args),
|
|
160
|
+
apiKey: API_KEY,
|
|
161
|
+
key: agentKeyFromPrivatePem(pem),
|
|
162
|
+
restore: true,
|
|
163
|
+
});
|
|
164
|
+
console.log(`wallet restored (${w.network})\n` +
|
|
165
|
+
` party: ${w.party}\n` +
|
|
166
|
+
` run: canton-agent-wallet balance`);
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
126
169
|
default:
|
|
127
|
-
console.error("canton-agent-wallet: create | address | balance | claim | pay <url> | withdraw --to <party> | export\n" +
|
|
128
|
-
" relay required for create/pay: --relay-url <url> or CANTON_AGENT_RELAY_URL");
|
|
170
|
+
console.error("canton-agent-wallet: create | address | balance | claim | pay <url> | withdraw --to <party> | export | import\n" +
|
|
171
|
+
" relay required for create/pay/import: --relay-url <url> or CANTON_AGENT_RELAY_URL");
|
|
129
172
|
process.exit(cmd ? 1 : 0);
|
|
130
173
|
}
|
|
131
174
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/keys.d.ts
CHANGED
|
@@ -13,6 +13,17 @@ export interface AgentKeyMaterial {
|
|
|
13
13
|
privateKeyPkcs8Pem: string;
|
|
14
14
|
}
|
|
15
15
|
export declare function generateAgentKey(): AgentKeyMaterial;
|
|
16
|
+
/**
|
|
17
|
+
* Reconstruct the full key material from a PKCS8 PEM private key — the inverse of
|
|
18
|
+
* `export` (which prints `privateKeyPkcs8Pem`). The Ed25519 public key is derived
|
|
19
|
+
* deterministically from the private key, so a backed-up private key is all that
|
|
20
|
+
* is needed to restore a wallet (the party namespace is this key's fingerprint,
|
|
21
|
+
* re-affirmed idempotently by the relay on `import`).
|
|
22
|
+
*
|
|
23
|
+
* Throws on a malformed PEM or a non-Ed25519 key — the agent wallet is Ed25519
|
|
24
|
+
* only, and importing a wrong-curve key would onboard an unusable party.
|
|
25
|
+
*/
|
|
26
|
+
export declare function agentKeyFromPrivatePem(pkcs8Pem: string): AgentKeyMaterial;
|
|
16
27
|
export declare function loadPrivateKey(pkcs8Pem: string): KeyObject;
|
|
17
28
|
export declare function loadPublicKey(spkiB64: string): KeyObject;
|
|
18
29
|
/**
|
package/dist/keys.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,IAAI,gBAAgB,CAQnD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAE1D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAMxD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAOT"}
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,IAAI,gBAAgB,CAQnD;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CA8BzE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAE1D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAMxD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAOT"}
|
package/dist/keys.js
CHANGED
|
@@ -13,6 +13,42 @@ export function generateAgentKey() {
|
|
|
13
13
|
privateKeyPkcs8Pem: privateKey.export({ type: "pkcs8", format: "pem" }),
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Reconstruct the full key material from a PKCS8 PEM private key — the inverse of
|
|
18
|
+
* `export` (which prints `privateKeyPkcs8Pem`). The Ed25519 public key is derived
|
|
19
|
+
* deterministically from the private key, so a backed-up private key is all that
|
|
20
|
+
* is needed to restore a wallet (the party namespace is this key's fingerprint,
|
|
21
|
+
* re-affirmed idempotently by the relay on `import`).
|
|
22
|
+
*
|
|
23
|
+
* Throws on a malformed PEM or a non-Ed25519 key — the agent wallet is Ed25519
|
|
24
|
+
* only, and importing a wrong-curve key would onboard an unusable party.
|
|
25
|
+
*/
|
|
26
|
+
export function agentKeyFromPrivatePem(pkcs8Pem) {
|
|
27
|
+
// Trim: a PEM piped from `export` (stdin) or read from a file carries a
|
|
28
|
+
// trailing newline, and copy/paste can add leading whitespace — neither is
|
|
29
|
+
// significant, but createPrivateKey rejects some of it.
|
|
30
|
+
const pem = pkcs8Pem.trim();
|
|
31
|
+
let privateKey;
|
|
32
|
+
try {
|
|
33
|
+
privateKey = createPrivateKey(pem);
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
throw new Error(`could not parse the private key — expected a PKCS8 PEM ` +
|
|
37
|
+
`(-----BEGIN PRIVATE KEY-----): ${e instanceof Error ? e.message : String(e)}`);
|
|
38
|
+
}
|
|
39
|
+
if (privateKey.asymmetricKeyType !== "ed25519") {
|
|
40
|
+
throw new Error(`unsupported key type ${JSON.stringify(privateKey.asymmetricKeyType)} — ` +
|
|
41
|
+
`the agent wallet is Ed25519 only`);
|
|
42
|
+
}
|
|
43
|
+
const publicKey = createPublicKey(privateKey);
|
|
44
|
+
return {
|
|
45
|
+
publicKeySpkiB64: Buffer.from(publicKey.export({ type: "spki", format: "der" })).toString("base64"),
|
|
46
|
+
privateKeyPkcs8Pem: privateKey.export({
|
|
47
|
+
type: "pkcs8",
|
|
48
|
+
format: "pem",
|
|
49
|
+
}),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
16
52
|
export function loadPrivateKey(pkcs8Pem) {
|
|
17
53
|
return createPrivateKey(pkcs8Pem);
|
|
18
54
|
}
|
package/dist/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,IAAI,IAAI,UAAU,EAClB,MAAM,IAAI,YAAY,GAEvB,MAAM,aAAa,CAAC;AASrB,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjE,OAAO;QACL,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAC3B,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAClD,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACpB,kBAAkB,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAW;KAClF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,eAAe,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACnC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,QAAgB;IAC3D,OAAO,UAAU,CACf,IAAI,EACJ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC9B,gBAAgB,CAAC,QAAQ,CAAC,CAC3B,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACvB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,YAAoB,EACpB,OAAe;IAEf,OAAO,YAAY,CACjB,IAAI,EACJ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC9B,aAAa,CAAC,OAAO,CAAC,EACtB,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CACpC,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
|
package/dist/onboard.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type AgentKeyMaterial } from "./keys.js";
|
|
1
2
|
import { type AgentWallet } from "./store.js";
|
|
2
3
|
import { RelayClient } from "./relay-client.js";
|
|
3
4
|
export interface EnsureWalletOpts {
|
|
@@ -7,6 +8,14 @@ export interface EnsureWalletOpts {
|
|
|
7
8
|
partyHint?: string;
|
|
8
9
|
/** Injectable for tests; defaults to a real RelayClient. */
|
|
9
10
|
relay?: RelayClient;
|
|
11
|
+
/** Restore from an existing key (the `import` command) instead of generating a
|
|
12
|
+
* fresh one. The party namespace is this key's fingerprint, so the party is
|
|
13
|
+
* already on-ledger from the original `create`. */
|
|
14
|
+
key?: AgentKeyMaterial;
|
|
15
|
+
/** Restore mode (`import`): SKIP onboard/finalize because the external party is
|
|
16
|
+
* already allocated (a second allocate returns HTTP 400). prepare + the
|
|
17
|
+
* verify-before-sign legs still run; we persist the verified prep.party. */
|
|
18
|
+
restore?: boolean;
|
|
10
19
|
}
|
|
11
20
|
export declare function ensureWallet(opts: EnsureWalletOpts): Promise<AgentWallet>;
|
|
12
21
|
//# sourceMappingURL=onboard.d.ts.map
|
package/dist/onboard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../src/onboard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../src/onboard.ts"],"names":[],"mappings":"AASA,OAAO,EAAiC,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;wDAEoD;IACpD,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB;;iFAE6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAoI/E"}
|
package/dist/onboard.js
CHANGED
|
@@ -16,7 +16,7 @@ export async function ensureWallet(opts) {
|
|
|
16
16
|
const existing = loadWallet();
|
|
17
17
|
if (existing)
|
|
18
18
|
return existing;
|
|
19
|
-
const key = generateAgentKey();
|
|
19
|
+
const key = opts.key ?? generateAgentKey();
|
|
20
20
|
const relay = opts.relay ?? new RelayClient({ relayUrl: opts.relayUrl, apiKey: opts.apiKey });
|
|
21
21
|
const prep = await relay.onboardPrepare({
|
|
22
22
|
publicKey: {
|
|
@@ -61,31 +61,40 @@ export async function ensureWallet(opts) {
|
|
|
61
61
|
// gap (the namespace is the fingerprint; if the relay lies about the fingerprint
|
|
62
62
|
// it lies about the namespace). Fail-closed.
|
|
63
63
|
await assertLocalFingerprintMatches(key.publicKeySpkiB64, prep.publicKeyFingerprint);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
64
|
+
// FINALIZE (create) vs SKIP (restore/import). A first-time onboard signs the
|
|
65
|
+
// recomputed multiHash and submits it so the participant ALLOCATES the external
|
|
66
|
+
// party. On `import` (restore of an already-onboarded key) the party is ALREADY
|
|
67
|
+
// allocated — a second allocate returns HTTP 400 — so we skip finalize and
|
|
68
|
+
// persist the party that prepare+verify just proved binds our key. The
|
|
69
|
+
// verify-before-sign legs above run on BOTH paths (the security invariant).
|
|
70
|
+
let party = prep.party;
|
|
71
|
+
if (!opts.restore) {
|
|
72
|
+
const signature = {
|
|
73
|
+
format: ED25519_WIRE_CONSTANTS.signatureFormat,
|
|
74
|
+
// Sign the RECOMPUTED multiHash, not the relay's hashToSign (they are proven
|
|
75
|
+
// equal above; signing the recomputed value makes the binding explicit).
|
|
76
|
+
signature: signHashB64(recomputedMultiHash, key.privateKeyPkcs8Pem),
|
|
77
|
+
signingAlgorithmSpec: ED25519_WIRE_CONSTANTS.signingAlgorithmSpec,
|
|
78
|
+
signedBy: prep.publicKeyFingerprint,
|
|
79
|
+
};
|
|
80
|
+
const fin = await relay.onboardFinalize({
|
|
81
|
+
onboardingTransactions: prep.onboardingTransactions,
|
|
82
|
+
multiHashSignatures: [signature],
|
|
83
|
+
});
|
|
84
|
+
// The party we PERSIST (and will later act_as) must be the one we just proved
|
|
85
|
+
// lives in the agent key's namespace. The verified anchor is prep.party (it was
|
|
86
|
+
// checked against publicKeyFingerprint above); if the finalize step returns a
|
|
87
|
+
// different party, it must STILL be in that same verified namespace, else a
|
|
88
|
+
// relay could swap the persisted identity after the topology check. Fail-closed.
|
|
89
|
+
party = fin.party || prep.party;
|
|
90
|
+
if (party !== prep.party) {
|
|
91
|
+
const sep = party.lastIndexOf("::");
|
|
92
|
+
const ns = sep > 0 ? party.slice(sep + 2) : "";
|
|
93
|
+
if (ns !== prep.publicKeyFingerprint) {
|
|
94
|
+
throw new OnboardingTopologyMismatchError(`onboard/finalize returned party ${JSON.stringify(party)} whose namespace does not match ` +
|
|
95
|
+
`the verified key fingerprint ${JSON.stringify(prep.publicKeyFingerprint)} — refusing to ` +
|
|
96
|
+
`persist a wallet for a party outside the agent key's own namespace`);
|
|
97
|
+
}
|
|
89
98
|
}
|
|
90
99
|
}
|
|
91
100
|
// Resolve wallet.network from the relay's /supported (AUTHORITATIVE — the relay
|
package/dist/onboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../src/onboard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../src/onboard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ftptech/canton-agent-wallet",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.1.
|
|
5
|
-
"description": "Self-custody Canton wallet + x402 autopay for AI agents. One CLI: create, pay, balance, withdraw, export. Backs the canton-x402-agent skill.",
|
|
4
|
+
"version": "0.1.12",
|
|
5
|
+
"description": "Self-custody Canton wallet + x402 autopay for AI agents. One CLI: create, pay, balance, withdraw, export, import. Backs the canton-x402-agent skill.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"author": "FTP team",
|
|
8
8
|
"type": "module",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"@canton-network/core-ledger-proto": "~1.4.0",
|
|
21
21
|
"undici": "^7.1.0",
|
|
22
22
|
"@ftptech/x402-canton-ledger": "0.1.0",
|
|
23
|
-
"@ftptech/x402-canton-client": "0.1.
|
|
23
|
+
"@ftptech/x402-canton-client": "0.1.2"
|
|
24
24
|
},
|
|
25
25
|
"publishConfig": {
|
|
26
26
|
"access": "public"
|