cspr402 0.4.7
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/README.md +173 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +108 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +207 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +400 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/onboard.d.ts +4 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +192 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/onboard.test.d.ts +2 -0
- package/dist/commands/onboard.test.d.ts.map +1 -0
- package/dist/commands/onboard.test.js +48 -0
- package/dist/commands/onboard.test.js.map +1 -0
- package/dist/commands/purchase.d.ts +2 -0
- package/dist/commands/purchase.d.ts.map +1 -0
- package/dist/commands/purchase.js +206 -0
- package/dist/commands/purchase.js.map +1 -0
- package/dist/commands/wallet.d.ts +2 -0
- package/dist/commands/wallet.d.ts.map +1 -0
- package/dist/commands/wallet.js +161 -0
- package/dist/commands/wallet.js.map +1 -0
- package/dist/config.d.ts +77 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +329 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +101 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +197 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp.d.ts +2 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +337 -0
- package/dist/mcp.js.map +1 -0
- package/dist/mpp.d.ts +57 -0
- package/dist/mpp.d.ts.map +1 -0
- package/dist/mpp.js +165 -0
- package/dist/mpp.js.map +1 -0
- package/dist/ows.d.ts +190 -0
- package/dist/ows.d.ts.map +1 -0
- package/dist/ows.js +565 -0
- package/dist/ows.js.map +1 -0
- package/dist/soroban.d.ts +92 -0
- package/dist/soroban.d.ts.map +1 -0
- package/dist/soroban.js +313 -0
- package/dist/soroban.js.map +1 -0
- package/dist/stellar.d.ts +53 -0
- package/dist/stellar.d.ts.map +1 -0
- package/dist/stellar.js +180 -0
- package/dist/stellar.js.map +1 -0
- package/dist/version-check.d.ts +5 -0
- package/dist/version-check.d.ts.map +1 -0
- package/dist/version-check.js +203 -0
- package/dist/version-check.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stellar.js","sourceRoot":"","sources":["../src/stellar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Fire-and-forget update check. Returns immediately; the check runs
|
|
2
|
+
* in the background. Safe to call at CLI startup regardless of which
|
|
3
|
+
* subcommand is about to run. */
|
|
4
|
+
export declare function checkForUpdates(): void;
|
|
5
|
+
//# sourceMappingURL=version-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAuHA;;kCAEkC;AAClC,wBAAgB,eAAe,IAAI,IAAI,CA+CtC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Background version check — warns the operator on stderr if their
|
|
3
|
+
// locally-installed cards402 is older than the current `latest` tag on
|
|
4
|
+
// the npm registry.
|
|
5
|
+
//
|
|
6
|
+
// Design constraints (all of these matter for a CLI that agents run
|
|
7
|
+
// inside an LLM loop):
|
|
8
|
+
//
|
|
9
|
+
// - Fire-and-forget. Never blocks the command. The check runs in
|
|
10
|
+
// parallel with whatever `main()` dispatched to; if the command
|
|
11
|
+
// exits first, we let the check drop. If the check finishes first,
|
|
12
|
+
// the warning prints before the command result.
|
|
13
|
+
// - Short timeout. 2s on the registry fetch so a slow network never
|
|
14
|
+
// measurably affects agent throughput.
|
|
15
|
+
// - Cached. We write the last-check timestamp + seen-latest-version
|
|
16
|
+
// to `~/.cards402/version-check.json` and skip the registry entirely
|
|
17
|
+
// if we checked within the last 24h. That's fine because once an
|
|
18
|
+
// operator has seen the warning they know to upgrade, and repeating
|
|
19
|
+
// the same warning every second is noise.
|
|
20
|
+
// - Non-fatal on every failure path. Network down, missing file,
|
|
21
|
+
// permission denied, JSON parse error, semver comparison throws —
|
|
22
|
+
// any of those silently no-op. A broken update check must never
|
|
23
|
+
// break an actual purchase.
|
|
24
|
+
// - stderr only. Never pollutes stdout so scripts parsing CLI output
|
|
25
|
+
// aren't affected.
|
|
26
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
27
|
+
if (k2 === undefined) k2 = k;
|
|
28
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
29
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
30
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
31
|
+
}
|
|
32
|
+
Object.defineProperty(o, k2, desc);
|
|
33
|
+
}) : (function(o, m, k, k2) {
|
|
34
|
+
if (k2 === undefined) k2 = k;
|
|
35
|
+
o[k2] = m[k];
|
|
36
|
+
}));
|
|
37
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
38
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
39
|
+
}) : function(o, v) {
|
|
40
|
+
o["default"] = v;
|
|
41
|
+
});
|
|
42
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
43
|
+
var ownKeys = function(o) {
|
|
44
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
45
|
+
var ar = [];
|
|
46
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
47
|
+
return ar;
|
|
48
|
+
};
|
|
49
|
+
return ownKeys(o);
|
|
50
|
+
};
|
|
51
|
+
return function (mod) {
|
|
52
|
+
if (mod && mod.__esModule) return mod;
|
|
53
|
+
var result = {};
|
|
54
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
55
|
+
__setModuleDefault(result, mod);
|
|
56
|
+
return result;
|
|
57
|
+
};
|
|
58
|
+
})();
|
|
59
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
60
|
+
exports.checkForUpdates = checkForUpdates;
|
|
61
|
+
const fs = __importStar(require("fs"));
|
|
62
|
+
const path = __importStar(require("path"));
|
|
63
|
+
const os = __importStar(require("os"));
|
|
64
|
+
const REGISTRY_URL = 'https://registry.npmjs.org/cards402/latest';
|
|
65
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // once per day
|
|
66
|
+
const FETCH_TIMEOUT_MS = 2_000;
|
|
67
|
+
const STATE_FILE = path.join(os.homedir(), '.cards402', 'version-check.json');
|
|
68
|
+
// F1-version-check (2026-04-16): cap on local state file. Matches the
|
|
69
|
+
// 16 KB pattern from config.ts and purchase.ts. The state file is
|
|
70
|
+
// normally <200 bytes; anything larger is corruption or tampering.
|
|
71
|
+
const MAX_STATE_BYTES = 16 * 1024;
|
|
72
|
+
// F2-version-check (2026-04-16): cap on the npm registry response body.
|
|
73
|
+
// The /latest endpoint returns a package manifest — normally ~2 KB for
|
|
74
|
+
// cards402. A hostile server (DNS hijack, MITM, compromised CDN) could
|
|
75
|
+
// push megabytes within the 2s abort window. 64 KB is generous for any
|
|
76
|
+
// legitimate manifest and bounds memory consumption.
|
|
77
|
+
const MAX_REGISTRY_BODY_BYTES = 64 * 1024;
|
|
78
|
+
function readLocalVersion() {
|
|
79
|
+
try {
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
81
|
+
const pkg = require('../package.json');
|
|
82
|
+
return pkg.version;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function readState() {
|
|
89
|
+
try {
|
|
90
|
+
// F1-version-check: size cap before readFileSync. A multi-GB state
|
|
91
|
+
// file (corruption, symlink) would OOM the process on every CLI
|
|
92
|
+
// invocation since checkForUpdates fires at startup for every command.
|
|
93
|
+
const stat = fs.statSync(STATE_FILE);
|
|
94
|
+
if (stat.size > MAX_STATE_BYTES)
|
|
95
|
+
return null;
|
|
96
|
+
const raw = fs.readFileSync(STATE_FILE, 'utf8');
|
|
97
|
+
return JSON.parse(raw);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function writeState(state) {
|
|
104
|
+
try {
|
|
105
|
+
fs.mkdirSync(path.dirname(STATE_FILE), { recursive: true, mode: 0o700 });
|
|
106
|
+
fs.writeFileSync(STATE_FILE, JSON.stringify(state), { mode: 0o600 });
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
/* best-effort */
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Returns >0 if a > b, <0 if a < b, 0 if equal. Handles plain semver
|
|
113
|
+
* triples; pre-release tags (e.g. 0.4.6-beta.1) fall back to string
|
|
114
|
+
* compare which is accurate enough for our gating. */
|
|
115
|
+
function compareVersions(a, b) {
|
|
116
|
+
const stripped = (s) => s.split('-')[0] ?? s;
|
|
117
|
+
const pa = stripped(a)
|
|
118
|
+
.split('.')
|
|
119
|
+
.map((n) => parseInt(n, 10));
|
|
120
|
+
const pb = stripped(b)
|
|
121
|
+
.split('.')
|
|
122
|
+
.map((n) => parseInt(n, 10));
|
|
123
|
+
for (let i = 0; i < 3; i++) {
|
|
124
|
+
const x = pa[i] ?? 0;
|
|
125
|
+
const y = pb[i] ?? 0;
|
|
126
|
+
if (x !== y)
|
|
127
|
+
return x - y;
|
|
128
|
+
}
|
|
129
|
+
return a.localeCompare(b);
|
|
130
|
+
}
|
|
131
|
+
function printWarning(local, latest) {
|
|
132
|
+
// Write to stderr so scripts piping stdout aren't affected. The
|
|
133
|
+
// warning is ≤ 3 lines and mentions the exact upgrade command so
|
|
134
|
+
// an LLM operator can act on it without extra prompting.
|
|
135
|
+
const msg = [
|
|
136
|
+
'',
|
|
137
|
+
`⚠ cards402 ${local} is out of date — ${latest} is available on npm.`,
|
|
138
|
+
` Upgrade: npx -y cards402@latest <command> | npm i -g cards402@latest`,
|
|
139
|
+
` Release notes: https://cards402.com/changelog`,
|
|
140
|
+
'',
|
|
141
|
+
].join('\n');
|
|
142
|
+
try {
|
|
143
|
+
process.stderr.write(msg);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
/* stderr closed — ignore */
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/** Fire-and-forget update check. Returns immediately; the check runs
|
|
150
|
+
* in the background. Safe to call at CLI startup regardless of which
|
|
151
|
+
* subcommand is about to run. */
|
|
152
|
+
function checkForUpdates() {
|
|
153
|
+
const local = readLocalVersion();
|
|
154
|
+
if (!local)
|
|
155
|
+
return;
|
|
156
|
+
// Throttle: skip if we've checked in the last 24h.
|
|
157
|
+
const state = readState();
|
|
158
|
+
if (state?.last_checked_at) {
|
|
159
|
+
const age = Date.now() - Date.parse(state.last_checked_at);
|
|
160
|
+
if (age < CHECK_INTERVAL_MS && state.latest_seen) {
|
|
161
|
+
// Re-use the cached result so a stale install still nags.
|
|
162
|
+
if (compareVersions(local, state.latest_seen) < 0) {
|
|
163
|
+
printWarning(local, state.latest_seen);
|
|
164
|
+
}
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Fetch the registry in the background. `void` the promise so Node
|
|
169
|
+
// doesn't treat it as unhandled. We use AbortController to cap the
|
|
170
|
+
// fetch wall time independent of the socket timeouts.
|
|
171
|
+
void (async () => {
|
|
172
|
+
try {
|
|
173
|
+
const ctrl = new AbortController();
|
|
174
|
+
const timer = setTimeout(() => ctrl.abort(), FETCH_TIMEOUT_MS);
|
|
175
|
+
const res = await fetch(REGISTRY_URL, { signal: ctrl.signal });
|
|
176
|
+
clearTimeout(timer);
|
|
177
|
+
if (!res.ok)
|
|
178
|
+
return;
|
|
179
|
+
// F2-version-check: read the body as text with a length cap
|
|
180
|
+
// before JSON.parse. The 2s abort limits wall time but NOT data
|
|
181
|
+
// volume — a fast hostile server can push ~200 MB through a
|
|
182
|
+
// gigabit link in 2 seconds. res.json() loads the entire body
|
|
183
|
+
// into a string before parsing, so a multi-MB response fills
|
|
184
|
+
// memory. Cap at MAX_REGISTRY_BODY_BYTES and discard anything
|
|
185
|
+
// larger — a legitimate npm /latest manifest is ~2 KB.
|
|
186
|
+
const text = await res.text();
|
|
187
|
+
if (text.length > MAX_REGISTRY_BODY_BYTES)
|
|
188
|
+
return;
|
|
189
|
+
const body = JSON.parse(text);
|
|
190
|
+
const latest = body?.version;
|
|
191
|
+
if (!latest)
|
|
192
|
+
return;
|
|
193
|
+
writeState({ last_checked_at: new Date().toISOString(), latest_seen: latest });
|
|
194
|
+
if (compareVersions(local, latest) < 0) {
|
|
195
|
+
printWarning(local, latest);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
/* network / parse / abort — silent no-op */
|
|
200
|
+
}
|
|
201
|
+
})();
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=version-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cspr402",
|
|
3
|
+
"version": "0.4.7",
|
|
4
|
+
"description": "CSPR402 SDK and CLI for Casper testnet payment verification and mock virtual cards",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"require": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./mcp": {
|
|
14
|
+
"types": "./dist/mcp.d.ts",
|
|
15
|
+
"import": "./dist/mcp.js",
|
|
16
|
+
"require": "./dist/mcp.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"bin": {
|
|
20
|
+
"cspr402": "dist/cli.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"README.md",
|
|
25
|
+
"LICENSE"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"dev": "tsc --watch",
|
|
30
|
+
"lint": "eslint src",
|
|
31
|
+
"typecheck": "tsc --noEmit",
|
|
32
|
+
"test": "vitest run src/__tests__/client.test.ts src/__tests__/config.test.ts src/__tests__/errors.test.ts src/__tests__/integration.test.ts",
|
|
33
|
+
"prepublishOnly": "npm run build && npm test"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"casper",
|
|
37
|
+
"cspr",
|
|
38
|
+
"testnet",
|
|
39
|
+
"virtual-card",
|
|
40
|
+
"vcc",
|
|
41
|
+
"ai-agent",
|
|
42
|
+
"mcp",
|
|
43
|
+
"model-context-protocol",
|
|
44
|
+
"402-payment",
|
|
45
|
+
"cep18",
|
|
46
|
+
"cspr402"
|
|
47
|
+
],
|
|
48
|
+
"license": "MIT",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "git+https://github.com/kann420/CSPR402.git"
|
|
52
|
+
},
|
|
53
|
+
"homepage": "https://cspr402.xyz",
|
|
54
|
+
"publishConfig": {
|
|
55
|
+
"access": "public"
|
|
56
|
+
},
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">=18"
|
|
59
|
+
},
|
|
60
|
+
"overrides": {
|
|
61
|
+
"axios": "^1.15.0"
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
65
|
+
"@ctx.com/stellar-ows-core": "^1.3.0-stellar",
|
|
66
|
+
"@stellar/stellar-sdk": "^15.0.1"
|
|
67
|
+
},
|
|
68
|
+
"optionalDependencies": {
|
|
69
|
+
"@ctx.com/stellar-ows-core-linux-x64-gnu": "1.3.0-stellar",
|
|
70
|
+
"@ctx.com/stellar-ows-core-linux-arm64-gnu": "1.3.0-stellar",
|
|
71
|
+
"@ctx.com/stellar-ows-core-darwin-x64": "1.3.0-stellar",
|
|
72
|
+
"@ctx.com/stellar-ows-core-darwin-arm64": "1.3.0-stellar"
|
|
73
|
+
},
|
|
74
|
+
"devDependencies": {
|
|
75
|
+
"@types/node": "^22.0.0",
|
|
76
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
77
|
+
"typescript": "^6.0.0",
|
|
78
|
+
"vitest": "^4.1.5"
|
|
79
|
+
}
|
|
80
|
+
}
|