@rubric-protocol/sdk 1.1.1 → 1.2.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.
Files changed (50) hide show
  1. package/README.md +178 -90
  2. package/dist/background-queue.d.ts +57 -0
  3. package/dist/background-queue.d.ts.map +1 -0
  4. package/dist/background-queue.js +164 -0
  5. package/dist/background-queue.js.map +1 -0
  6. package/dist/index.d.ts +14 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +25 -20
  9. package/dist/index.js.map +1 -1
  10. package/dist/ml-dsa-local.d.ts +35 -0
  11. package/dist/ml-dsa-local.d.ts.map +1 -0
  12. package/dist/ml-dsa-local.js +151 -0
  13. package/dist/ml-dsa-local.js.map +1 -0
  14. package/dist/plugins/langchain.d.ts +30 -0
  15. package/dist/plugins/langchain.d.ts.map +1 -0
  16. package/dist/plugins/langchain.js +85 -0
  17. package/dist/plugins/langchain.js.map +1 -0
  18. package/dist/plugins/openai-plugin.d.ts +23 -0
  19. package/dist/plugins/openai-plugin.d.ts.map +1 -0
  20. package/dist/plugins/openai-plugin.js +72 -0
  21. package/dist/plugins/openai-plugin.js.map +1 -0
  22. package/dist/proof-types.d.ts +48 -0
  23. package/dist/proof-types.d.ts.map +1 -0
  24. package/dist/proof-types.js +105 -0
  25. package/dist/proof-types.js.map +1 -0
  26. package/dist/proof-upgrade-manager.d.ts +24 -0
  27. package/dist/proof-upgrade-manager.d.ts.map +1 -0
  28. package/dist/proof-upgrade-manager.js +103 -0
  29. package/dist/proof-upgrade-manager.js.map +1 -0
  30. package/dist/rubric-client.d.ts +104 -0
  31. package/dist/rubric-client.d.ts.map +1 -0
  32. package/dist/rubric-client.js +243 -0
  33. package/dist/rubric-client.js.map +1 -0
  34. package/dist/signing.d.ts +35 -0
  35. package/dist/signing.d.ts.map +1 -0
  36. package/dist/signing.js +151 -0
  37. package/dist/signing.js.map +1 -0
  38. package/package.json +43 -12
  39. package/dist/cli.d.ts +0 -30
  40. package/dist/cli.d.ts.map +0 -1
  41. package/dist/cli.js +0 -165
  42. package/dist/cli.js.map +0 -1
  43. package/dist/client.d.ts +0 -379
  44. package/dist/client.d.ts.map +0 -1
  45. package/dist/client.js +0 -447
  46. package/dist/client.js.map +0 -1
  47. package/dist/types.d.ts +0 -296
  48. package/dist/types.d.ts.map +0 -1
  49. package/dist/types.js +0 -6
  50. package/dist/types.js.map +0 -1
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Rubric Protocol — Local ML-DSA-65 Signing
4
+ * Uses @noble/post-quantum (NIST FIPS 204)
5
+ * Handles key generation, signing, verification, and filesystem persistence.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.generateKeyPair = generateKeyPair;
42
+ exports.signPayload = signPayload;
43
+ exports.verifySignedPayload = verifySignedPayload;
44
+ exports.saveKeyPair = saveKeyPair;
45
+ exports.loadKeyPair = loadKeyPair;
46
+ exports.loadOrCreateKeyPair = loadOrCreateKeyPair;
47
+ const ml_dsa_js_1 = require("@noble/post-quantum/ml-dsa.js");
48
+ const fs = __importStar(require("fs"));
49
+ const path = __importStar(require("path"));
50
+ const crypto = __importStar(require("crypto"));
51
+ // ─── Key Generation ──────────────────────────────────────────────────────────
52
+ /**
53
+ * Generate a fresh ML-DRA-65 keypair from a 32-byte random seed.
54
+ */
55
+ function generateKeyPair() {
56
+ const seed = crypto.randomBytes(32);
57
+ const kp = ml_dsa_js_1.ml_dsa65.keygen(seed);
58
+ return {
59
+ publicKey: kp.publicKey,
60
+ secretKey: kp.secretKey,
61
+ publicKeyHex: Buffer.from(kp.publicKey).toString('hex'),
62
+ created: new Date().toISOString(),
63
+ };
64
+ }
65
+ // ─── Sign ─────────────────────────────────────────────────────────────────────
66
+ /**
67
+ * Sign an arbitrary payload object with a local secret key.
68
+ * Canonical JSON serialization ensures deterministic signing.
69
+ */
70
+ function signPayload(payload, secretKey, publicKey) {
71
+ const canonical = canonicalJson(payload);
72
+ const msgBytes = new TextEncoder().encode(canonical);
73
+ const sig = ml_dsa_js_1.ml_dsa65.sign(msgBytes, secretKey);
74
+ return {
75
+ payload,
76
+ signature: Buffer.from(sig).toString('hex'),
77
+ publicKey: Buffer.from(publicKey).toString('hex'),
78
+ signedAt: new Date().toISOString(),
79
+ algorithm: 'ML-DSA-65',
80
+ };
81
+ }
82
+ // ─── Verify ───────────────────────────────────────────────────────────────────
83
+ /**
84
+ * Verify a signed payload locally (for testing / offline verification).
85
+ */
86
+ function verifySignedPayload(signed) {
87
+ try {
88
+ const canonical = canonicalJson(signed.payload);
89
+ const msgBytes = new TextEncoder().encode(canonical);
90
+ const sigBytes = Uint8Array.from(Buffer.from(signed.signature, 'hex'));
91
+ const pubKeyBytes = Uint8Array.from(Buffer.from(signed.publicKey, 'hex'));
92
+ return ml_dsa_js_1.ml_dsa65.verify(sigBytes, msgBytes, pubKeyBytes);
93
+ }
94
+ catch {
95
+ return false;
96
+ }
97
+ }
98
+ function saveKeyPair(kp, filePath, passphrase) {
99
+ let store;
100
+ if (passphrase) {
101
+ const key = crypto.scryptSync(passphrase, 'rubric-sdk-salt', 32);
102
+ const iv = crypto.randomBytes(12);
103
+ const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
104
+ const skHex = Buffer.from(kp.secretKey).toString('hex');
105
+ const encrypted = Buffer.concat([cipher.update(skHex, 'utf8'), cipher.final()]);
106
+ const authTag = cipher.getAuthTag();
107
+ store = { version: 1, algorithm: 'ML-DSA-65', publicKeyHex: kp.publicKeyHex, secretKeyHex: encrypted.toString('hex'), iv: iv.toString('hex'), authTag: authTag.toString('hex'), created: kp.created };
108
+ }
109
+ else {
110
+ store = { version: 1, algorithm: 'ML-DSA-65', publicKeyHex: kp.publicKeyHex, secretKeyHex: Buffer.from(kp.secretKey).toString('hex'), created: kp.created };
111
+ }
112
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
113
+ fs.writeFileSync(filePath, JSON.stringify(store, null, 2), { mode: 0o600 });
114
+ }
115
+ function loadKeyPair(filePath, passphrase) {
116
+ const raw = fs.readFileSync(filePath, 'utf8');
117
+ const store = JSON.parse(raw);
118
+ if (store.version !== 1 || store.algorithm !== 'ML-DSA-65')
119
+ throw new Error('Incompatible keystore format');
120
+ let skHex;
121
+ if (store.iv && store.authTag) {
122
+ if (!passphrase)
123
+ throw new Error('Keystore is encrypted passphrase required');
124
+ const key = crypto.scryptSync(passphrase, 'rubric-sdk-salt', 32);
125
+ const iv = Buffer.from(store.iv, 'hex');
126
+ const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);
127
+ decipher.setAuthTag(Buffer.from(store.authTag, 'hex'));
128
+ skHex = decipher.update(store.secretKeyHex, 'hex', 'utf8') + decipher.final('utf8');
129
+ }
130
+ else {
131
+ skHex = store.secretKeyHex;
132
+ }
133
+ return { publicKey: Uint8Array.from(Buffer.from(store.publicKeyHex, 'hex')), secretKey: Uint8Array.from(Buffer.from(skHex, 'hex')), publicKeyHex: store.publicKeyHex, created: store.created };
134
+ }
135
+ function loadOrCreateKeyPair(filePath, passphrase) {
136
+ if (fs.existsSync(filePath))
137
+ return loadKeyPair(filePath, passphrase);
138
+ const kp = generateKeyPair();
139
+ saveKeyPair(kp, filePath, passphrase);
140
+ return kp;
141
+ }
142
+ function canonicalJson(obj) {
143
+ if (obj === null || typeof obj !== 'object')
144
+ return JSON.stringify(obj);
145
+ if (Array.isArray(obj))
146
+ return '[' + obj.map(canonicalJson).join(',') + ']';
147
+ const keys = Object.keys(obj).sort();
148
+ const pairs = keys.map(k => JSON.stringify(k) + ':' + canonicalJson(obj[k]));
149
+ return '{' + pairs.join(',') + '}';
150
+ }
151
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../signing.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,25 +1,56 @@
1
1
  {
2
2
  "name": "@rubric-protocol/sdk",
3
- "version": "1.1.1",
4
- "description": "Rubric Protocol SDK post-quantum AI attestation with ZK inclusion proofs",
3
+ "version": "1.2.0",
4
+ "description": "Rubric Protocol SDK - post-quantum AI attestation for EU AI Act compliance. Patent Pending.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist/**/*",
9
+ "README.md"
10
+ ],
7
11
  "scripts": {
8
- "build": "tsc",
9
- "test": "ts-node src/test.ts"
12
+ "build": "tsc -p tsconfig.json",
13
+ "build:clean": "rm -rf dist && tsc -p tsconfig.json",
14
+ "typecheck": "tsc --noEmit"
10
15
  },
11
16
  "keywords": [
12
17
  "hedera",
13
- "oracle",
18
+ "hcs",
19
+ "ai-attestation",
20
+ "eu-ai-act",
14
21
  "post-quantum",
15
- "attestation",
16
- "ai-agents"
22
+ "ml-dsa",
23
+ "langchain",
24
+ "openai",
25
+ "compliance"
17
26
  ],
27
+ "author": "Echelon Intelligence Systems LLC <Scott@Rubric-Protocol.com>",
18
28
  "license": "MIT",
19
- "files": [
20
- "dist/"
21
- ],
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/rubric-protocol/sdk.git"
32
+ },
33
+ "dependencies": {
34
+ "@noble/post-quantum": "^0.5.4"
35
+ },
36
+ "peerDependencies": {
37
+ "@langchain/core": ">=0.2.0",
38
+ "openai": ">=4.0.0"
39
+ },
40
+ "peerDependenciesMeta": {
41
+ "@langchain/core": {
42
+ "optional": true
43
+ },
44
+ "openai": {
45
+ "optional": true
46
+ }
47
+ },
48
+ "devDependencies": {
49
+ "@langchain/core": "^0.2.0",
50
+ "openai": "^4.0.0",
51
+ "typescript": "^5.0.0"
52
+ },
22
53
  "engines": {
23
- "node": ">=18"
54
+ "node": ">=18.0.0"
24
55
  }
25
- }
56
+ }
package/dist/cli.d.ts DELETED
@@ -1,30 +0,0 @@
1
- #!/usr/bin/env npx ts-node --transpile-only
2
- /**
3
- * TEMPUS CLI
4
- *
5
- * Usage:
6
- * tempus verify <seq> - Verify attestation by sequence number
7
- * tempus recent [n] - Show last N attestations (default 10)
8
- * tempus status - Federation status
9
- * tempus topic - Topic info
10
- */
11
- declare const MIRROR = "https://testnet.mirrornode.hedera.com";
12
- declare const TOPIC = "0.0.8207826";
13
- declare const cmd: string, args: string[];
14
- declare const COLORS: {
15
- reset: string;
16
- cyan: string;
17
- green: string;
18
- yellow: string;
19
- red: string;
20
- purple: string;
21
- dim: string;
22
- bold: string;
23
- };
24
- declare function c(color: string, text: string): string;
25
- declare function fetchJSON(url: string): Promise<any>;
26
- declare function verifyAttestation(seq: string): Promise<void>;
27
- declare function showRecent(n: number): Promise<void>;
28
- declare function showStatus(): Promise<void>;
29
- declare function main(): Promise<void>;
30
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,QAAA,MAAM,MAAM,0CAA0C,CAAC;AACvD,QAAA,MAAM,KAAK,gBAAgB,CAAC;AAE5B,QAAA,MAAU,GAAG,UAAK,IAAI,UAAgB,CAAC;AAEvC,QAAA,MAAM,MAAM;;;;;;;;;CASX,CAAC;AAEF,iBAAS,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,iBAAe,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAIlD;AAED,iBAAe,iBAAiB,CAAC,GAAG,EAAE,MAAM,iBAwC3C;AAED,iBAAe,UAAU,CAAC,CAAC,EAAE,MAAM,iBAqBlC;AAED,iBAAe,UAAU,kBAkCxB;AAED,iBAAe,IAAI,kBAmClB"}
package/dist/cli.js DELETED
@@ -1,165 +0,0 @@
1
- #!/usr/bin/env npx ts-node --transpile-only
2
- "use strict";
3
- /**
4
- * TEMPUS CLI
5
- *
6
- * Usage:
7
- * tempus verify <seq> - Verify attestation by sequence number
8
- * tempus recent [n] - Show last N attestations (default 10)
9
- * tempus status - Federation status
10
- * tempus topic - Topic info
11
- */
12
- const MIRROR = 'https://testnet.mirrornode.hedera.com';
13
- const TOPIC = '0.0.8207826';
14
- const [, , cmd, ...args] = process.argv;
15
- const COLORS = {
16
- reset: '\x1b[0m',
17
- cyan: '\x1b[36m',
18
- green: '\x1b[32m',
19
- yellow: '\x1b[33m',
20
- red: '\x1b[31m',
21
- purple: '\x1b[35m',
22
- dim: '\x1b[2m',
23
- bold: '\x1b[1m',
24
- };
25
- function c(color, text) {
26
- return `${COLORS[color] || ''}${text}${COLORS.reset}`;
27
- }
28
- async function fetchJSON(url) {
29
- const res = await fetch(url);
30
- if (!res.ok)
31
- throw new Error(`HTTP ${res.status}`);
32
- return res.json();
33
- }
34
- async function verifyAttestation(seq) {
35
- console.log(c('dim', `\nFetching sequence ${seq} from topic ${TOPIC}...\n`));
36
- const data = await fetchJSON(`${MIRROR}/api/v1/topics/${TOPIC}/messages/${seq}`);
37
- const payload = JSON.parse(Buffer.from(data.message, 'base64').toString());
38
- const isFed = payload.type === 'federation_attestation';
39
- const conf = payload.confidence || 'UNKNOWN';
40
- const confColor = conf === 'FULL' ? 'green' : conf === 'HIGH' ? 'cyan' : conf === 'QUORUM' ? 'yellow' : 'red';
41
- console.log(c('bold', ' ╔══════════════════════════════════════════╗'));
42
- console.log(c('bold', ' ║') + c('green', ' ✓ VERIFIED ATTESTATION ') + c('bold', '║'));
43
- console.log(c('bold', ' ╚══════════════════════════════════════════╝'));
44
- console.log('');
45
- console.log(` ${c('dim', 'Sequence:')} ${c('cyan', '#' + data.sequence_number)}`);
46
- console.log(` ${c('dim', 'Type:')} ${payload.type || 'unknown'}`);
47
- console.log(` ${c('dim', 'Epoch:')} ${payload.epoch ?? '-'}`);
48
- console.log(` ${c('dim', 'View:')} ${payload.view ?? '-'}`);
49
- console.log(` ${c('dim', 'Confidence:')} ${c(confColor, conf)}`);
50
- console.log(` ${c('dim', 'Signers:')} ${payload.signer_count ?? '-'}`);
51
- console.log(` ${c('dim', 'Leader:')} ${payload.leader_id || '-'}`);
52
- console.log(` ${c('dim', 'Timestamp:')} ${payload.timestamp || '-'}`);
53
- console.log(` ${c('dim', 'Data Type:')} ${payload.data_type || '-'}`);
54
- if (payload.signers) {
55
- console.log(` ${c('dim', 'Signer IDs:')} ${payload.signers.map((s) => c('purple', s)).join(', ')}`);
56
- }
57
- if (payload.federation_nodes) {
58
- console.log(` ${c('dim', 'Fed Nodes:')} ${payload.federation_nodes.join(', ')}`);
59
- }
60
- if (payload.sources) {
61
- console.log(` ${c('dim', 'Sources:')}`);
62
- payload.sources.forEach((s) => {
63
- console.log(` ${c('dim', '•')} ${s.provider} (weight: ${s.weight})`);
64
- });
65
- }
66
- console.log('');
67
- console.log(` ${c('dim', 'Explorer:')} ${c('cyan', `https://hashscan.io/testnet/topic/${TOPIC}/${data.sequence_number}`)}`);
68
- console.log('');
69
- }
70
- async function showRecent(n) {
71
- console.log(c('dim', `\nFetching last ${n} attestations from topic ${TOPIC}...\n`));
72
- const data = await fetchJSON(`${MIRROR}/api/v1/topics/${TOPIC}/messages?order=desc&limit=${n}`);
73
- console.log(c('bold', ' Seq Type Epoch Signers Confidence'));
74
- console.log(c('dim', ' ───── ───────────────────────── ───── ─────── ──────────'));
75
- for (const m of (data.messages || [])) {
76
- try {
77
- const p = JSON.parse(Buffer.from(m.message, 'base64').toString());
78
- const conf = p.confidence || '-';
79
- const confColor = conf === 'FULL' ? 'green' : conf === 'HIGH' ? 'cyan' : conf === 'QUORUM' ? 'yellow' : 'red';
80
- const type = (p.type || 'unknown').padEnd(25);
81
- const epoch = String(p.epoch ?? '-').padEnd(5);
82
- const signers = String(p.signer_count ?? '-').padEnd(7);
83
- console.log(` ${c('cyan', '#' + String(m.sequence_number).padEnd(4))} ${type} ${epoch} ${signers} ${c(confColor, conf)}`);
84
- }
85
- catch { }
86
- }
87
- console.log('');
88
- }
89
- async function showStatus() {
90
- const data = await fetchJSON(`${MIRROR}/api/v1/topics/${TOPIC}/messages?order=desc&limit=50`);
91
- let fedCount = 0;
92
- let maxEpoch = 0;
93
- let latestConf = '';
94
- const signerSets = new Set();
95
- const confs = {};
96
- for (const m of (data.messages || [])) {
97
- try {
98
- const p = JSON.parse(Buffer.from(m.message, 'base64').toString());
99
- if (p.type === 'federation_attestation') {
100
- fedCount++;
101
- maxEpoch = Math.max(maxEpoch, p.epoch || 0);
102
- if (!latestConf)
103
- latestConf = p.confidence || '';
104
- (p.signers || []).forEach((s) => signerSets.add(s));
105
- const c = p.confidence || 'UNKNOWN';
106
- confs[c] = (confs[c] || 0) + 1;
107
- }
108
- }
109
- catch { }
110
- }
111
- console.log('');
112
- console.log(c('bold', ' TEMPUS Federation Status'));
113
- console.log(c('dim', ' ───────────────────────────'));
114
- console.log(` ${c('dim', 'Topic:')} ${c('cyan', TOPIC)}`);
115
- console.log(` ${c('dim', 'Network:')} Testnet`);
116
- console.log(` ${c('dim', 'Total Messages:')} ${data.messages?.length || 0} (last 50)`);
117
- console.log(` ${c('dim', 'Federation Atts:')} ${c('green', String(fedCount))}`);
118
- console.log(` ${c('dim', 'Latest Epoch:')} ${c('purple', String(maxEpoch))}`);
119
- console.log(` ${c('dim', 'Latest Confidence:')} ${latestConf}`);
120
- console.log(` ${c('dim', 'Known Signers:')} ${Array.from(signerSets).map(s => c('purple', s)).join(', ')}`);
121
- console.log(` ${c('dim', 'Confidence Dist:')} ${Object.entries(confs).map(([k, v]) => `${k}: ${v}`).join(', ')}`);
122
- console.log('');
123
- }
124
- async function main() {
125
- try {
126
- switch (cmd) {
127
- case 'verify':
128
- case 'v':
129
- if (!args[0]) {
130
- console.log('Usage: tempus verify <seq>');
131
- process.exit(1);
132
- }
133
- await verifyAttestation(args[0]);
134
- break;
135
- case 'recent':
136
- case 'r':
137
- await showRecent(parseInt(args[0]) || 10);
138
- break;
139
- case 'status':
140
- case 's':
141
- await showStatus();
142
- break;
143
- case 'topic':
144
- case 't':
145
- console.log(`\n Topic: ${c('cyan', TOPIC)}`);
146
- console.log(` Explorer: ${c('cyan', `https://hashscan.io/testnet/topic/${TOPIC}`)}\n`);
147
- break;
148
- default:
149
- console.log('');
150
- console.log(c('bold', ' TEMPUS CLI'));
151
- console.log(c('dim', ' ─────────────────'));
152
- console.log(` ${c('cyan', 'tempus verify <seq>')} Verify attestation`);
153
- console.log(` ${c('cyan', 'tempus recent [n]')} Last N attestations`);
154
- console.log(` ${c('cyan', 'tempus status')} Federation status`);
155
- console.log(` ${c('cyan', 'tempus topic')} Topic info`);
156
- console.log('');
157
- }
158
- }
159
- catch (err) {
160
- console.error(c('red', `\n Error: ${err.message}\n`));
161
- process.exit(1);
162
- }
163
- }
164
- main();
165
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}