tenjin-cli 0.1.0-alpha.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/LICENSE +21 -0
- package/NOTICE.md +52 -0
- package/README.md +124 -0
- package/dist/_esm-ZH2J4QEH.js +3737 -0
- package/dist/_esm-ZH2J4QEH.js.map +1 -0
- package/dist/ccip-FXWZDDF5.js +17 -0
- package/dist/ccip-FXWZDDF5.js.map +1 -0
- package/dist/chunk-376LHMK2.js +100 -0
- package/dist/chunk-376LHMK2.js.map +1 -0
- package/dist/chunk-3IMLRUZE.js +44 -0
- package/dist/chunk-3IMLRUZE.js.map +1 -0
- package/dist/chunk-CPUZRZ2A.js +410 -0
- package/dist/chunk-CPUZRZ2A.js.map +1 -0
- package/dist/chunk-F5DZJLU3.js +2058 -0
- package/dist/chunk-F5DZJLU3.js.map +1 -0
- package/dist/chunk-FIYZLITH.js +14577 -0
- package/dist/chunk-FIYZLITH.js.map +1 -0
- package/dist/chunk-LTTRND4A.js +135 -0
- package/dist/chunk-LTTRND4A.js.map +1 -0
- package/dist/chunk-PAAL45FJ.js +7307 -0
- package/dist/chunk-PAAL45FJ.js.map +1 -0
- package/dist/chunk-QHIEYBLV.js +320 -0
- package/dist/chunk-QHIEYBLV.js.map +1 -0
- package/dist/chunk-SXQQ2ZSR.js +887 -0
- package/dist/chunk-SXQQ2ZSR.js.map +1 -0
- package/dist/chunk-TX5T3LKJ.js +2249 -0
- package/dist/chunk-TX5T3LKJ.js.map +1 -0
- package/dist/chunk-WOHCAMDQ.js +4474 -0
- package/dist/chunk-WOHCAMDQ.js.map +1 -0
- package/dist/chunk-ZPZFPVDN.js +67 -0
- package/dist/chunk-ZPZFPVDN.js.map +1 -0
- package/dist/cli-LMHGCZ5S.js +3763 -0
- package/dist/cli-LMHGCZ5S.js.map +1 -0
- package/dist/config-XVXZ3V2Q.js +206 -0
- package/dist/config-XVXZ3V2Q.js.map +1 -0
- package/dist/doctor-MVLZRVPU.js +338 -0
- package/dist/doctor-MVLZRVPU.js.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/mine.wasm-GQECMSGN.js +11 -0
- package/dist/mine.wasm-GQECMSGN.js.map +1 -0
- package/dist/secp256k1-35YNNB6F.js +18 -0
- package/dist/secp256k1-35YNNB6F.js.map +1 -0
- package/dist/usdc-OQUOFF6R.js +18 -0
- package/dist/usdc-OQUOFF6R.js.map +1 -0
- package/dist/wallet-NRKWLKHX.js +153 -0
- package/dist/wallet-NRKWLKHX.js.map +1 -0
- package/dist/wallet-QUWK2PA4.js +22 -0
- package/dist/wallet-QUWK2PA4.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\n// Bin entry. The Node version guard runs BEFORE importing anything else — no\n// static imports above it — so an out-of-support runtime gets one JSON error\n// envelope plus a human stderr line instead of a syntax/parse crash from a\n// lazily-loaded module written in newer syntax. Kept in conservative syntax.\nconst MIN_NODE_MAJOR = 22;\n\nconst nodeMajor = Number.parseInt(process.versions.node.split('.')[0] ?? '', 10);\n\nif (Number.isNaN(nodeMajor) || nodeMajor < MIN_NODE_MAJOR) {\n const envelope = {\n schemaVersion: 1,\n command: 'preflight',\n ok: false,\n error: {\n code: 'NODE_UNSUPPORTED',\n message: `Tenjin CLI requires Node ${MIN_NODE_MAJOR} or newer (found ${process.versions.node}).`,\n fix: 'Install Node 22 or newer',\n },\n };\n process.stdout.write(`${JSON.stringify(envelope, null, 2)}\\n`);\n process.stderr.write(`error: Node ${MIN_NODE_MAJOR}+ required, found ${process.versions.node}\\n`);\n process.exit(1);\n}\n\nconst { main } = await import('./cli');\nprocess.exit(await main(process.argv.slice(2)));\n\n// Marks this file a module so top-level await is legal; emits nothing.\nexport {};\n"],"mappings":";;;;AAKA,IAAM,iBAAiB;AAEvB,IAAM,YAAY,OAAO,SAAS,QAAQ,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE;AAE/E,IAAI,OAAO,MAAM,SAAS,KAAK,YAAY,gBAAgB;AACzD,QAAM,WAAW;AAAA,IACf,eAAe;AAAA,IACf,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,4BAA4B,cAAc,oBAAoB,QAAQ,SAAS,IAAI;AAAA,MAC5F,KAAK;AAAA,IACP;AAAA,EACF;AACA,UAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA,CAAI;AAC7D,UAAQ,OAAO,MAAM,eAAe,cAAc,qBAAqB,QAAQ,SAAS,IAAI;AAAA,CAAI;AAChG,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAM,EAAE,KAAK,IAAI,MAAM,OAAO,mBAAO;AACrC,QAAQ,KAAK,MAAM,KAAK,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createRequire as __tenjinCreateRequire } from 'node:module'; const require = __tenjinCreateRequire(import.meta.url);
|
|
2
|
+
import "./chunk-3IMLRUZE.js";
|
|
3
|
+
|
|
4
|
+
// node_modules/.pnpm/ox@0.14.30_typescript@6.0.3_zod@4.4.3/node_modules/ox/_esm/tempo/internal/mine.wasm.js
|
|
5
|
+
var wasmBase64 = "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";
|
|
6
|
+
var dataOffset = 1024;
|
|
7
|
+
export {
|
|
8
|
+
dataOffset,
|
|
9
|
+
wasmBase64
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=mine.wasm-GQECMSGN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/.pnpm/ox@0.14.30_typescript@6.0.3_zod@4.4.3/node_modules/ox/tempo/internal/mine.wasm.ts"],"sourcesContent":["// Embedded TIP-1022 WASM keccak256 salt miner (compiled from mine.c).\n//\n// Memory layout at offset 1024:\n// [0..19] address (20 bytes, set by JS)\n// [20..51] salt (32 bytes, set/read by JS, incremented in-place)\n// [52..83] hash out (32 bytes, written on match)\n//\n// Exported: mine(count: i32) -> i32 — returns 1 if found, 0 if not.\n//\n// Generated by: pnpm tsx scripts/build-mine-wasm.ts\n\n/** Base64-encoded WASM binary for the TIP-1022 salt miner. */\nexport const wasmBase64 =\n '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'\n\n/** Byte offset in WASM linear memory where mining I/O begins. */\nexport const dataOffset = 1024\n"],"mappings":";;;;AAYO,IAAM,aACX;AAGK,IAAM,aAAa;","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createRequire as __tenjinCreateRequire } from 'node:module'; const require = __tenjinCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
encodeToCurve,
|
|
4
|
+
hashToCurve,
|
|
5
|
+
schnorr,
|
|
6
|
+
secp256k1,
|
|
7
|
+
secp256k1_hasher
|
|
8
|
+
} from "./chunk-TX5T3LKJ.js";
|
|
9
|
+
import "./chunk-CPUZRZ2A.js";
|
|
10
|
+
import "./chunk-3IMLRUZE.js";
|
|
11
|
+
export {
|
|
12
|
+
encodeToCurve,
|
|
13
|
+
hashToCurve,
|
|
14
|
+
schnorr,
|
|
15
|
+
secp256k1,
|
|
16
|
+
secp256k1_hasher
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=secp256k1-35YNNB6F.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createRequire as __tenjinCreateRequire } from 'node:module'; const require = __tenjinCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
USDC_ADDRESS,
|
|
4
|
+
USDC_DECIMALS,
|
|
5
|
+
getUsdcBalance
|
|
6
|
+
} from "./chunk-PAAL45FJ.js";
|
|
7
|
+
import "./chunk-SXQQ2ZSR.js";
|
|
8
|
+
import "./chunk-TX5T3LKJ.js";
|
|
9
|
+
import "./chunk-WOHCAMDQ.js";
|
|
10
|
+
import "./chunk-F5DZJLU3.js";
|
|
11
|
+
import "./chunk-CPUZRZ2A.js";
|
|
12
|
+
import "./chunk-3IMLRUZE.js";
|
|
13
|
+
export {
|
|
14
|
+
USDC_ADDRESS,
|
|
15
|
+
USDC_DECIMALS,
|
|
16
|
+
getUsdcBalance
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=usdc-OQUOFF6R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { createRequire as __tenjinCreateRequire } from 'node:module'; const require = __tenjinCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
createLocalWallet,
|
|
4
|
+
describeWallet,
|
|
5
|
+
importLocalWallet,
|
|
6
|
+
resolveWalletProvider
|
|
7
|
+
} from "./chunk-QHIEYBLV.js";
|
|
8
|
+
import {
|
|
9
|
+
getUsdcBalance
|
|
10
|
+
} from "./chunk-PAAL45FJ.js";
|
|
11
|
+
import "./chunk-SXQQ2ZSR.js";
|
|
12
|
+
import "./chunk-TX5T3LKJ.js";
|
|
13
|
+
import "./chunk-WOHCAMDQ.js";
|
|
14
|
+
import "./chunk-F5DZJLU3.js";
|
|
15
|
+
import "./chunk-CPUZRZ2A.js";
|
|
16
|
+
import {
|
|
17
|
+
loadRawConfig,
|
|
18
|
+
resolveSettings,
|
|
19
|
+
toMoney
|
|
20
|
+
} from "./chunk-LTTRND4A.js";
|
|
21
|
+
import {
|
|
22
|
+
walletFileExists
|
|
23
|
+
} from "./chunk-376LHMK2.js";
|
|
24
|
+
import "./chunk-ZPZFPVDN.js";
|
|
25
|
+
import {
|
|
26
|
+
CliError,
|
|
27
|
+
walletPath
|
|
28
|
+
} from "./chunk-FIYZLITH.js";
|
|
29
|
+
import "./chunk-3IMLRUZE.js";
|
|
30
|
+
|
|
31
|
+
// src/commands/wallet.ts
|
|
32
|
+
var FUNDING_LINE = "Send USDC on Base. $5 covers ~50 typical resources.";
|
|
33
|
+
var isWindows = process.platform === "win32";
|
|
34
|
+
var readStdinDefault = async () => {
|
|
35
|
+
if (process.stdin.isTTY) return null;
|
|
36
|
+
const chunks = [];
|
|
37
|
+
for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
|
|
38
|
+
const data = Buffer.concat(chunks).toString("utf8").trim();
|
|
39
|
+
return data.length > 0 ? data : null;
|
|
40
|
+
};
|
|
41
|
+
async function runWalletCreate(ctx) {
|
|
42
|
+
await refuseIfWalletExists(ctx.dataDir);
|
|
43
|
+
const { address, walletPath: path } = await createLocalWallet(ctx.dataDir);
|
|
44
|
+
const warnings = custodyWarnings();
|
|
45
|
+
return {
|
|
46
|
+
data: {
|
|
47
|
+
address,
|
|
48
|
+
walletPath: path,
|
|
49
|
+
provider: "local",
|
|
50
|
+
policyEnforcement: "client-only",
|
|
51
|
+
warnings
|
|
52
|
+
},
|
|
53
|
+
humanLines: [`Wallet created: ${address}`, FUNDING_LINE, ...warnings]
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async function runWalletShow(ctx, opts = {}) {
|
|
57
|
+
const provider = resolveWalletProvider(ctx, opts);
|
|
58
|
+
const desc = await describeWallet(provider);
|
|
59
|
+
const { walletPath: path, warnings } = await provider.diagnostics();
|
|
60
|
+
return {
|
|
61
|
+
data: {
|
|
62
|
+
address: desc.address,
|
|
63
|
+
provider: desc.provider,
|
|
64
|
+
credentialSource: desc.credentialSource,
|
|
65
|
+
policyEnforcement: desc.policyEnforcement,
|
|
66
|
+
...path !== void 0 ? { walletPath: path } : {},
|
|
67
|
+
warnings
|
|
68
|
+
},
|
|
69
|
+
humanLines: [`Address: ${desc.address}`, `Key source: ${desc.credentialSource}`, ...warnings]
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
async function runWalletBalance(ctx, opts = {}) {
|
|
73
|
+
const provider = resolveWalletProvider(ctx, opts);
|
|
74
|
+
const desc = await describeWallet(provider);
|
|
75
|
+
const config = await loadRawConfig(ctx.dataDir);
|
|
76
|
+
const rpcUrl = resolveSettings({
|
|
77
|
+
config,
|
|
78
|
+
flags: { baseUrl: ctx.flags.baseUrl },
|
|
79
|
+
env: process.env
|
|
80
|
+
}).rpcUrl.value;
|
|
81
|
+
let atomic;
|
|
82
|
+
try {
|
|
83
|
+
atomic = await getUsdcBalance(desc.address, rpcUrl);
|
|
84
|
+
} catch (err) {
|
|
85
|
+
throw new CliError("RPC_ERROR", `Could not read the USDC balance from ${rpcUrl}.`, {
|
|
86
|
+
fix: "Check your network, or set a working RPC with `tenjin config set rpcUrl <url>`.",
|
|
87
|
+
cause: err
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const balance = toMoney(atomic.toString());
|
|
91
|
+
return {
|
|
92
|
+
data: { address: desc.address, balance },
|
|
93
|
+
humanLines: [`Balance: ${balance.usd} USDC on Base`]
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async function runWalletImport(args, ctx, readStdin = readStdinDefault) {
|
|
97
|
+
await refuseIfWalletExists(ctx.dataDir);
|
|
98
|
+
let key;
|
|
99
|
+
let source;
|
|
100
|
+
if (args.fromEnv) {
|
|
101
|
+
const envKey = process.env.TENJIN_WALLET_KEY;
|
|
102
|
+
if (envKey === void 0 || envKey.trim().length === 0) {
|
|
103
|
+
throw new CliError("USAGE", "TENJIN_WALLET_KEY is not set.", {
|
|
104
|
+
fix: "Set TENJIN_WALLET_KEY, or pipe the key: `echo $KEY | tenjin wallet import`."
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
key = envKey.trim();
|
|
108
|
+
source = "env";
|
|
109
|
+
} else {
|
|
110
|
+
const input = await readStdin();
|
|
111
|
+
if (input === null) {
|
|
112
|
+
throw new CliError("USAGE", "No private key on stdin.", {
|
|
113
|
+
fix: "Pipe the key (`echo $KEY | tenjin wallet import`) or use `--from-env`."
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
key = input;
|
|
117
|
+
source = "stdin";
|
|
118
|
+
}
|
|
119
|
+
const { address, walletPath: path } = await importLocalWallet(ctx.dataDir, key);
|
|
120
|
+
return {
|
|
121
|
+
data: { address, walletPath: path, source },
|
|
122
|
+
humanLines: [`Imported wallet: ${address}`]
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
async function refuseIfWalletExists(dir) {
|
|
126
|
+
if (!await walletFileExists(dir)) return;
|
|
127
|
+
const path = walletPath(dir);
|
|
128
|
+
throw new CliError("WALLET_EXISTS", `A wallet already exists at ${path}.`, {
|
|
129
|
+
fix: `Keys are non-recoverable; move it aside first (e.g. \`mv ${path} ${path}.bak\`) to create a new one.`
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
function custodyWarnings() {
|
|
133
|
+
const warnings = [];
|
|
134
|
+
if (hasEnvKey()) {
|
|
135
|
+
warnings.push("TENJIN_WALLET_KEY is set and shadows this file at runtime.");
|
|
136
|
+
}
|
|
137
|
+
if (isWindows) {
|
|
138
|
+
warnings.push("File permissions are not enforced on Windows; the key file is not restricted.");
|
|
139
|
+
}
|
|
140
|
+
return warnings;
|
|
141
|
+
}
|
|
142
|
+
function hasEnvKey() {
|
|
143
|
+
const envKey = process.env.TENJIN_WALLET_KEY;
|
|
144
|
+
return envKey !== void 0 && envKey.length > 0;
|
|
145
|
+
}
|
|
146
|
+
export {
|
|
147
|
+
readStdinDefault,
|
|
148
|
+
runWalletBalance,
|
|
149
|
+
runWalletCreate,
|
|
150
|
+
runWalletImport,
|
|
151
|
+
runWalletShow
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=wallet-NRKWLKHX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/wallet.ts"],"sourcesContent":["import { CliError } from '../lib/errors';\nimport { walletPath } from '../lib/paths';\nimport { loadRawConfig, resolveSettings } from '../lib/config';\nimport { toMoney } from '../lib/money';\nimport { getUsdcBalance } from '../lib/usdc';\nimport {\n createLocalWallet,\n describeWallet,\n importLocalWallet,\n resolveWalletProvider,\n type ResolveWalletProviderOptions,\n} from '../lib/wallet';\nimport { walletFileExists } from '../lib/wallet/store';\nimport type { CommandContext, CommandResult } from '../context';\n\nconst FUNDING_LINE = 'Send USDC on Base. $5 covers ~50 typical resources.';\nconst isWindows = process.platform === 'win32';\n\n/** Injectable stdin reader for `import`. Null means \"no piped input\" (a TTY, or an\n * empty pipe): the default never blocks on a TTY, so the command turns null into a\n * USAGE error instead of hanging. Tests inject a stub to drive every branch. */\nexport type ReadStdin = () => Promise<string | null>;\n\nexport const readStdinDefault: ReadStdin = async () => {\n if (process.stdin.isTTY) return null;\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));\n const data = Buffer.concat(chunks).toString('utf8').trim();\n return data.length > 0 ? data : null;\n};\n\nexport async function runWalletCreate(ctx: CommandContext): Promise<CommandResult> {\n await refuseIfWalletExists(ctx.dataDir);\n\n const { address, walletPath: path } = await createLocalWallet(ctx.dataDir);\n\n const warnings = custodyWarnings();\n return {\n data: {\n address,\n walletPath: path,\n provider: 'local',\n policyEnforcement: 'client-only',\n warnings,\n },\n humanLines: [`Wallet created: ${address}`, FUNDING_LINE, ...warnings],\n };\n}\n\nexport async function runWalletShow(\n ctx: CommandContext,\n opts: ResolveWalletProviderOptions = {},\n): Promise<CommandResult> {\n const provider = resolveWalletProvider(ctx, opts);\n const desc = await describeWallet(provider);\n // Diagnostics are the provider's own: a remote provider reports no local file\n // path or perms warning, so `show` never contaminates a remote wallet's output\n // with a stale local wallet.json's state.\n const { walletPath: path, warnings } = await provider.diagnostics();\n\n return {\n data: {\n address: desc.address,\n provider: desc.provider,\n credentialSource: desc.credentialSource,\n policyEnforcement: desc.policyEnforcement,\n ...(path !== undefined ? { walletPath: path } : {}),\n warnings,\n },\n humanLines: [`Address: ${desc.address}`, `Key source: ${desc.credentialSource}`, ...warnings],\n };\n}\n\nexport async function runWalletBalance(\n ctx: CommandContext,\n opts: ResolveWalletProviderOptions = {},\n): Promise<CommandResult> {\n const provider = resolveWalletProvider(ctx, opts);\n const desc = await describeWallet(provider);\n\n const config = await loadRawConfig(ctx.dataDir);\n const rpcUrl = resolveSettings({\n config,\n flags: { baseUrl: ctx.flags.baseUrl },\n env: process.env,\n }).rpcUrl.value;\n\n let atomic: bigint;\n try {\n atomic = await getUsdcBalance(desc.address, rpcUrl);\n } catch (err) {\n throw new CliError('RPC_ERROR', `Could not read the USDC balance from ${rpcUrl}.`, {\n fix: 'Check your network, or set a working RPC with `tenjin config set rpcUrl <url>`.',\n cause: err,\n });\n }\n\n const balance = toMoney(atomic.toString());\n return {\n data: { address: desc.address, balance },\n humanLines: [`Balance: ${balance.usd} USDC on Base`],\n };\n}\n\nexport async function runWalletImport(\n args: { fromEnv: boolean },\n ctx: CommandContext,\n readStdin: ReadStdin = readStdinDefault,\n): Promise<CommandResult> {\n await refuseIfWalletExists(ctx.dataDir);\n\n let key: string;\n let source: 'env' | 'stdin';\n if (args.fromEnv) {\n const envKey = process.env.TENJIN_WALLET_KEY;\n if (envKey === undefined || envKey.trim().length === 0) {\n throw new CliError('USAGE', 'TENJIN_WALLET_KEY is not set.', {\n fix: 'Set TENJIN_WALLET_KEY, or pipe the key: `echo $KEY | tenjin wallet import`.',\n });\n }\n key = envKey.trim();\n source = 'env';\n } else {\n const input = await readStdin();\n if (input === null) {\n throw new CliError('USAGE', 'No private key on stdin.', {\n fix: 'Pipe the key (`echo $KEY | tenjin wallet import`) or use `--from-env`.',\n });\n }\n key = input;\n source = 'stdin';\n }\n\n const { address, walletPath: path } = await importLocalWallet(ctx.dataDir, key);\n\n return {\n data: { address, walletPath: path, source },\n humanLines: [`Imported wallet: ${address}`],\n };\n}\n\n/** create and import both refuse to overwrite: keys are non-recoverable and may hold funds. */\nasync function refuseIfWalletExists(dir: string): Promise<void> {\n if (!(await walletFileExists(dir))) return;\n const path = walletPath(dir);\n throw new CliError('WALLET_EXISTS', `A wallet already exists at ${path}.`, {\n fix: `Keys are non-recoverable; move it aside first (e.g. \\`mv ${path} ${path}.bak\\`) to create a new one.`,\n });\n}\n\nfunction custodyWarnings(): string[] {\n const warnings: string[] = [];\n if (hasEnvKey()) {\n warnings.push('TENJIN_WALLET_KEY is set and shadows this file at runtime.');\n }\n if (isWindows) {\n warnings.push('File permissions are not enforced on Windows; the key file is not restricted.');\n }\n return warnings;\n}\n\nfunction hasEnvKey(): boolean {\n const envKey = process.env.TENJIN_WALLET_KEY;\n return envKey !== undefined && envKey.length > 0;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,IAAM,eAAe;AACrB,IAAM,YAAY,QAAQ,aAAa;AAOhC,IAAM,mBAA8B,YAAY;AACrD,MAAI,QAAQ,MAAM,MAAO,QAAO;AAChC,QAAM,SAAmB,CAAC;AAC1B,mBAAiB,SAAS,QAAQ,MAAO,QAAO,KAAK,OAAO,KAAK,KAAK,CAAC;AACvE,QAAM,OAAO,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK;AACzD,SAAO,KAAK,SAAS,IAAI,OAAO;AAClC;AAEA,eAAsB,gBAAgB,KAA6C;AACjF,QAAM,qBAAqB,IAAI,OAAO;AAEtC,QAAM,EAAE,SAAS,YAAY,KAAK,IAAI,MAAM,kBAAkB,IAAI,OAAO;AAEzE,QAAM,WAAW,gBAAgB;AACjC,SAAO;AAAA,IACL,MAAM;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB;AAAA,IACF;AAAA,IACA,YAAY,CAAC,mBAAmB,OAAO,IAAI,cAAc,GAAG,QAAQ;AAAA,EACtE;AACF;AAEA,eAAsB,cACpB,KACA,OAAqC,CAAC,GACd;AACxB,QAAM,WAAW,sBAAsB,KAAK,IAAI;AAChD,QAAM,OAAO,MAAM,eAAe,QAAQ;AAI1C,QAAM,EAAE,YAAY,MAAM,SAAS,IAAI,MAAM,SAAS,YAAY;AAElE,SAAO;AAAA,IACL,MAAM;AAAA,MACJ,SAAS,KAAK;AAAA,MACd,UAAU,KAAK;AAAA,MACf,kBAAkB,KAAK;AAAA,MACvB,mBAAmB,KAAK;AAAA,MACxB,GAAI,SAAS,SAAY,EAAE,YAAY,KAAK,IAAI,CAAC;AAAA,MACjD;AAAA,IACF;AAAA,IACA,YAAY,CAAC,YAAY,KAAK,OAAO,IAAI,eAAe,KAAK,gBAAgB,IAAI,GAAG,QAAQ;AAAA,EAC9F;AACF;AAEA,eAAsB,iBACpB,KACA,OAAqC,CAAC,GACd;AACxB,QAAM,WAAW,sBAAsB,KAAK,IAAI;AAChD,QAAM,OAAO,MAAM,eAAe,QAAQ;AAE1C,QAAM,SAAS,MAAM,cAAc,IAAI,OAAO;AAC9C,QAAM,SAAS,gBAAgB;AAAA,IAC7B;AAAA,IACA,OAAO,EAAE,SAAS,IAAI,MAAM,QAAQ;AAAA,IACpC,KAAK,QAAQ;AAAA,EACf,CAAC,EAAE,OAAO;AAEV,MAAI;AACJ,MAAI;AACF,aAAS,MAAM,eAAe,KAAK,SAAS,MAAM;AAAA,EACpD,SAAS,KAAK;AACZ,UAAM,IAAI,SAAS,aAAa,wCAAwC,MAAM,KAAK;AAAA,MACjF,KAAK;AAAA,MACL,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,QAAQ,OAAO,SAAS,CAAC;AACzC,SAAO;AAAA,IACL,MAAM,EAAE,SAAS,KAAK,SAAS,QAAQ;AAAA,IACvC,YAAY,CAAC,YAAY,QAAQ,GAAG,eAAe;AAAA,EACrD;AACF;AAEA,eAAsB,gBACpB,MACA,KACA,YAAuB,kBACC;AACxB,QAAM,qBAAqB,IAAI,OAAO;AAEtC,MAAI;AACJ,MAAI;AACJ,MAAI,KAAK,SAAS;AAChB,UAAM,SAAS,QAAQ,IAAI;AAC3B,QAAI,WAAW,UAAa,OAAO,KAAK,EAAE,WAAW,GAAG;AACtD,YAAM,IAAI,SAAS,SAAS,iCAAiC;AAAA,QAC3D,KAAK;AAAA,MACP,CAAC;AAAA,IACH;AACA,UAAM,OAAO,KAAK;AAClB,aAAS;AAAA,EACX,OAAO;AACL,UAAM,QAAQ,MAAM,UAAU;AAC9B,QAAI,UAAU,MAAM;AAClB,YAAM,IAAI,SAAS,SAAS,4BAA4B;AAAA,QACtD,KAAK;AAAA,MACP,CAAC;AAAA,IACH;AACA,UAAM;AACN,aAAS;AAAA,EACX;AAEA,QAAM,EAAE,SAAS,YAAY,KAAK,IAAI,MAAM,kBAAkB,IAAI,SAAS,GAAG;AAE9E,SAAO;AAAA,IACL,MAAM,EAAE,SAAS,YAAY,MAAM,OAAO;AAAA,IAC1C,YAAY,CAAC,oBAAoB,OAAO,EAAE;AAAA,EAC5C;AACF;AAGA,eAAe,qBAAqB,KAA4B;AAC9D,MAAI,CAAE,MAAM,iBAAiB,GAAG,EAAI;AACpC,QAAM,OAAO,WAAW,GAAG;AAC3B,QAAM,IAAI,SAAS,iBAAiB,8BAA8B,IAAI,KAAK;AAAA,IACzE,KAAK,4DAA4D,IAAI,IAAI,IAAI;AAAA,EAC/E,CAAC;AACH;AAEA,SAAS,kBAA4B;AACnC,QAAM,WAAqB,CAAC;AAC5B,MAAI,UAAU,GAAG;AACf,aAAS,KAAK,4DAA4D;AAAA,EAC5E;AACA,MAAI,WAAW;AACb,aAAS,KAAK,+EAA+E;AAAA,EAC/F;AACA,SAAO;AACT;AAEA,SAAS,YAAqB;AAC5B,QAAM,SAAS,QAAQ,IAAI;AAC3B,SAAO,WAAW,UAAa,OAAO,SAAS;AACjD;","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createRequire as __tenjinCreateRequire } from 'node:module'; const require = __tenjinCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
createLocalWallet,
|
|
4
|
+
describeWallet,
|
|
5
|
+
importLocalWallet,
|
|
6
|
+
resolveWalletProvider
|
|
7
|
+
} from "./chunk-QHIEYBLV.js";
|
|
8
|
+
import "./chunk-SXQQ2ZSR.js";
|
|
9
|
+
import "./chunk-TX5T3LKJ.js";
|
|
10
|
+
import "./chunk-F5DZJLU3.js";
|
|
11
|
+
import "./chunk-CPUZRZ2A.js";
|
|
12
|
+
import "./chunk-376LHMK2.js";
|
|
13
|
+
import "./chunk-ZPZFPVDN.js";
|
|
14
|
+
import "./chunk-FIYZLITH.js";
|
|
15
|
+
import "./chunk-3IMLRUZE.js";
|
|
16
|
+
export {
|
|
17
|
+
createLocalWallet,
|
|
18
|
+
describeWallet,
|
|
19
|
+
importLocalWallet,
|
|
20
|
+
resolveWalletProvider
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=wallet-QUWK2PA4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tenjin-cli",
|
|
3
|
+
"version": "0.1.0-alpha.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Tenjin agent CLI for the x402 knowledge marketplace.",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/BackTrackCo/tenjin-agent.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://tenjin.blog/agents",
|
|
12
|
+
"bugs": "https://github.com/BackTrackCo/tenjin-agent/issues",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"x402",
|
|
15
|
+
"usdc",
|
|
16
|
+
"base",
|
|
17
|
+
"ai-agents",
|
|
18
|
+
"agent-payments",
|
|
19
|
+
"mcp",
|
|
20
|
+
"knowledge-marketplace",
|
|
21
|
+
"micropayments",
|
|
22
|
+
"claude",
|
|
23
|
+
"codex",
|
|
24
|
+
"cli"
|
|
25
|
+
],
|
|
26
|
+
"bin": {
|
|
27
|
+
"tenjin": "dist/index.js"
|
|
28
|
+
},
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=22"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist",
|
|
34
|
+
"NOTICE.md"
|
|
35
|
+
],
|
|
36
|
+
"packageManager": "pnpm@11.11.0",
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsup",
|
|
39
|
+
"test": "vitest run",
|
|
40
|
+
"typecheck": "tsc --noEmit",
|
|
41
|
+
"lint": "eslint .",
|
|
42
|
+
"format": "prettier --write .",
|
|
43
|
+
"format:check": "prettier --check .",
|
|
44
|
+
"check": "pnpm run build && pnpm run test",
|
|
45
|
+
"pack-smoke": "bash scripts/pack-smoke.sh",
|
|
46
|
+
"prepare": "git config core.hooksPath .githooks || true"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@eslint/js": "^9",
|
|
51
|
+
"@types/node": "^25",
|
|
52
|
+
"commander": "^14.0.1",
|
|
53
|
+
"eslint": "^9",
|
|
54
|
+
"eslint-config-prettier": "^10",
|
|
55
|
+
"prettier": "^3",
|
|
56
|
+
"tsup": "^8.5.0",
|
|
57
|
+
"typescript": "^6",
|
|
58
|
+
"typescript-eslint": "^8",
|
|
59
|
+
"viem": "^2.53.1",
|
|
60
|
+
"vitest": "^4.1.9",
|
|
61
|
+
"zod": "^4.4.3"
|
|
62
|
+
}
|
|
63
|
+
}
|