tn8r 0.1.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/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '@terminator-network/core';
package/dist/cli.js ADDED
@@ -0,0 +1,200 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/cli.ts
4
+ import { Command } from "commander";
5
+ import { Terminator } from "@terminator-network/core";
6
+ var program = new Command();
7
+ program.name("tn8r").description("Disposable identities for AI agents \u2014 email, phone, and virtual cards").version("0.1.0");
8
+ program.command("create").description("Create a new disposable agent identity").option("-e, --email", "Include email inbox", true).option("-p, --phone", "Include phone number", true).option("-c, --card", "Include virtual card", true).option("--no-email", "Exclude email inbox").option("--no-phone", "Exclude phone number").option("--no-card", "Exclude virtual card").option("--ttl <minutes>", "Time-to-live in minutes", parseInt).option("--spend-limit <cents>", "Card spend limit in cents", parseInt).option("--confirm", "Confirm card creation (if policy requires it)").action(async (options) => {
9
+ const resources = [];
10
+ if (options.email) resources.push("email");
11
+ if (options.phone) resources.push("phone");
12
+ if (options.card) resources.push("card");
13
+ const terminator = new Terminator();
14
+ try {
15
+ console.log("Creating identity...");
16
+ const identity = await terminator.createIdentity({
17
+ resources,
18
+ ttlMinutes: options.ttl,
19
+ spendLimitCents: options.spendLimit,
20
+ confirm: options.confirm
21
+ });
22
+ console.log(`
23
+ Identity created: ${identity.id}`);
24
+ console.log(` Name: ${identity.persona.fullName}`);
25
+ console.log(` Status: ${identity.status}`);
26
+ if (identity.email) console.log(` Email: ${identity.email}`);
27
+ if (identity.phone) console.log(` Phone: ${identity.phone}`);
28
+ if (identity.cardLastFour) console.log(` Card: ****${identity.cardLastFour}`);
29
+ if (identity.ttlExpiresAt) console.log(` TTL: ${identity.ttlExpiresAt}`);
30
+ } catch (error) {
31
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
32
+ process.exit(1);
33
+ } finally {
34
+ terminator.close();
35
+ }
36
+ });
37
+ program.command("list").description("List all agent identities").option("-s, --status <status>", "Filter by status: active, killed, all", "all").action((options) => {
38
+ const terminator = new Terminator();
39
+ try {
40
+ const identities = terminator.listIdentities(options.status);
41
+ if (identities.length === 0) {
42
+ console.log("No identities found.");
43
+ return;
44
+ }
45
+ console.log(`Found ${identities.length} identities:
46
+ `);
47
+ for (const id of identities) {
48
+ const resources = [
49
+ id.email ? `email:${id.email}` : null,
50
+ id.phone ? `phone:${id.phone}` : null,
51
+ id.cardLastFour ? `card:****${id.cardLastFour}` : null
52
+ ].filter(Boolean).join(" ");
53
+ console.log(` ${id.id} [${id.status}] ${id.persona.fullName}`);
54
+ if (resources) console.log(` ${resources}`);
55
+ }
56
+ } finally {
57
+ terminator.close();
58
+ }
59
+ });
60
+ program.command("messages").description("View messages (email + SMS) for an identity").argument("<identity-id>", "Identity ID").option("--since <timestamp>", "Only show messages after this ISO timestamp").action(async (identityId, options) => {
61
+ const terminator = new Terminator();
62
+ try {
63
+ const sinceDate = options.since ? new Date(options.since) : void 0;
64
+ const { emails, sms } = await terminator.readMessages(identityId, sinceDate);
65
+ if (emails.length === 0 && sms.length === 0) {
66
+ console.log("No messages found.");
67
+ return;
68
+ }
69
+ if (emails.length > 0) {
70
+ console.log(`Emails (${emails.length}):
71
+ `);
72
+ for (const e of emails) {
73
+ console.log(` From: ${e.from}`);
74
+ console.log(` Subject: ${e.subject}`);
75
+ console.log(` Date: ${e.receivedAt}`);
76
+ console.log(` Body: ${e.text.slice(0, 200)}${e.text.length > 200 ? "..." : ""}`);
77
+ console.log("");
78
+ }
79
+ }
80
+ if (sms.length > 0) {
81
+ console.log(`SMS (${sms.length}):
82
+ `);
83
+ for (const s of sms) {
84
+ console.log(` From: ${s.from}`);
85
+ console.log(` Date: ${s.receivedAt}`);
86
+ console.log(` Body: ${s.body}`);
87
+ console.log("");
88
+ }
89
+ }
90
+ const code = await terminator.extractCode(identityId);
91
+ if (code) {
92
+ console.log(`Verification code found: ${code}`);
93
+ }
94
+ } catch (error) {
95
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
96
+ process.exit(1);
97
+ } finally {
98
+ terminator.close();
99
+ }
100
+ });
101
+ program.command("kill").description("Kill an identity (revoke all its resources)").argument("[identity-id]", "Identity ID to kill").option("--all", "Kill ALL active identities (emergency kill switch)").action(async (identityId, options) => {
102
+ const terminator = new Terminator();
103
+ try {
104
+ if (options.all) {
105
+ console.log("KILL SWITCH: Revoking ALL active identities...\n");
106
+ const results = await terminator.killAll();
107
+ if (results.length === 0) {
108
+ console.log("No active identities to kill.");
109
+ return;
110
+ }
111
+ for (const r of results) {
112
+ const status = r.errors.length === 0 ? "OK" : "PARTIAL";
113
+ console.log(` ${r.identityId} [${status}]`);
114
+ if (r.emailRevoked) console.log(" email revoked");
115
+ if (r.phoneRevoked) console.log(" phone revoked");
116
+ if (r.cardRevoked) console.log(" card revoked");
117
+ for (const err of r.errors) {
118
+ console.log(` ERROR: ${err}`);
119
+ }
120
+ }
121
+ console.log(`
122
+ Killed ${results.length} identities.`);
123
+ return;
124
+ }
125
+ if (!identityId) {
126
+ console.error("Error: specify an identity ID, or use --all to kill everything.");
127
+ process.exit(1);
128
+ }
129
+ console.log(`Killing identity ${identityId}...`);
130
+ const result = await terminator.killIdentity(identityId);
131
+ console.log(`
132
+ Identity ${result.identityId} killed.`);
133
+ if (result.emailRevoked) console.log(" email revoked");
134
+ if (result.phoneRevoked) console.log(" phone revoked");
135
+ if (result.cardRevoked) console.log(" card revoked");
136
+ for (const err of result.errors) {
137
+ console.log(` ERROR: ${err}`);
138
+ }
139
+ } catch (error) {
140
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
141
+ process.exit(1);
142
+ } finally {
143
+ terminator.close();
144
+ }
145
+ });
146
+ program.command("log").description("View the activity log").argument("[identity-id]", "Optional: filter by identity ID").option("-n, --limit <count>", "Number of events to show", parseInt, 20).option("-t, --type <event-type>", "Filter by event type").action((identityId, options) => {
147
+ const terminator = new Terminator();
148
+ try {
149
+ const events = terminator.getActivityLog({
150
+ identityId,
151
+ eventType: options.type,
152
+ limit: options.limit
153
+ });
154
+ if (events.length === 0) {
155
+ console.log("No activity log events found.");
156
+ return;
157
+ }
158
+ console.log(`Activity log (${events.length} events):
159
+ `);
160
+ for (const e of events) {
161
+ const ts = e.timestamp.replace("T", " ").slice(0, 19);
162
+ const cost = e.costEstimateCents ? ` ($${(e.costEstimateCents / 100).toFixed(2)})` : "";
163
+ const provider = e.provider ? ` [${e.provider}]` : "";
164
+ console.log(` ${ts} ${e.eventType}${provider}${cost}`);
165
+ if (e.identityId) console.log(` identity: ${e.identityId}`);
166
+ if (e.details) {
167
+ const detailStr = JSON.stringify(e.details);
168
+ if (detailStr.length < 120) {
169
+ console.log(` ${detailStr}`);
170
+ }
171
+ }
172
+ }
173
+ } finally {
174
+ terminator.close();
175
+ }
176
+ });
177
+ program.command("status").description("Show configured providers and system health").action(async () => {
178
+ const terminator = new Terminator();
179
+ try {
180
+ const status = await terminator.checkStatus();
181
+ console.log("Terminator Status\n");
182
+ console.log("Providers:");
183
+ for (const p of status.providers) {
184
+ const icon = p.healthy ? "+" : "x";
185
+ console.log(` [${icon}] ${p.provider}: ${p.message ?? (p.healthy ? "healthy" : "unhealthy")}`);
186
+ }
187
+ console.log(
188
+ `
189
+ Configured: email=${status.configuredProviders.email} phone=${status.configuredProviders.phone} card=${status.configuredProviders.card}`
190
+ );
191
+ console.log(`Active identities: ${status.activeIdentities}`);
192
+ } catch (error) {
193
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
194
+ process.exit(1);
195
+ } finally {
196
+ terminator.close();
197
+ }
198
+ });
199
+ program.parse();
200
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport { Terminator } from \"@terminator-network/core\";\n\nconst program = new Command();\n\nprogram\n\t.name(\"tn8r\")\n\t.description(\"Disposable identities for AI agents — email, phone, and virtual cards\")\n\t.version(\"0.1.0\");\n\nprogram\n\t.command(\"create\")\n\t.description(\"Create a new disposable agent identity\")\n\t.option(\"-e, --email\", \"Include email inbox\", true)\n\t.option(\"-p, --phone\", \"Include phone number\", true)\n\t.option(\"-c, --card\", \"Include virtual card\", true)\n\t.option(\"--no-email\", \"Exclude email inbox\")\n\t.option(\"--no-phone\", \"Exclude phone number\")\n\t.option(\"--no-card\", \"Exclude virtual card\")\n\t.option(\"--ttl <minutes>\", \"Time-to-live in minutes\", parseInt)\n\t.option(\"--spend-limit <cents>\", \"Card spend limit in cents\", parseInt)\n\t.option(\"--confirm\", \"Confirm card creation (if policy requires it)\")\n\t.action(async (options) => {\n\t\tconst resources: (\"email\" | \"phone\" | \"card\")[] = [];\n\t\tif (options.email) resources.push(\"email\");\n\t\tif (options.phone) resources.push(\"phone\");\n\t\tif (options.card) resources.push(\"card\");\n\n\t\tconst terminator = new Terminator();\n\t\ttry {\n\t\t\tconsole.log(\"Creating identity...\");\n\t\t\tconst identity = await terminator.createIdentity({\n\t\t\t\tresources,\n\t\t\t\tttlMinutes: options.ttl,\n\t\t\t\tspendLimitCents: options.spendLimit,\n\t\t\t\tconfirm: options.confirm,\n\t\t\t});\n\n\t\t\tconsole.log(`\\nIdentity created: ${identity.id}`);\n\t\t\tconsole.log(` Name: ${identity.persona.fullName}`);\n\t\t\tconsole.log(` Status: ${identity.status}`);\n\t\t\tif (identity.email) console.log(` Email: ${identity.email}`);\n\t\t\tif (identity.phone) console.log(` Phone: ${identity.phone}`);\n\t\t\tif (identity.cardLastFour) console.log(` Card: ****${identity.cardLastFour}`);\n\t\t\tif (identity.ttlExpiresAt) console.log(` TTL: ${identity.ttlExpiresAt}`);\n\t\t} catch (error) {\n\t\t\tconsole.error(`Error: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\tprocess.exit(1);\n\t\t} finally {\n\t\t\tterminator.close();\n\t\t}\n\t});\n\nprogram\n\t.command(\"list\")\n\t.description(\"List all agent identities\")\n\t.option(\"-s, --status <status>\", \"Filter by status: active, killed, all\", \"all\")\n\t.action((options) => {\n\t\tconst terminator = new Terminator();\n\t\ttry {\n\t\t\tconst identities = terminator.listIdentities(options.status as \"active\" | \"killed\" | \"all\");\n\n\t\t\tif (identities.length === 0) {\n\t\t\t\tconsole.log(\"No identities found.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconsole.log(`Found ${identities.length} identities:\\n`);\n\t\t\tfor (const id of identities) {\n\t\t\t\tconst resources = [\n\t\t\t\t\tid.email ? `email:${id.email}` : null,\n\t\t\t\t\tid.phone ? `phone:${id.phone}` : null,\n\t\t\t\t\tid.cardLastFour ? `card:****${id.cardLastFour}` : null,\n\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\" \");\n\n\t\t\t\tconsole.log(` ${id.id} [${id.status}] ${id.persona.fullName}`);\n\t\t\t\tif (resources) console.log(` ${resources}`);\n\t\t\t}\n\t\t} finally {\n\t\t\tterminator.close();\n\t\t}\n\t});\n\nprogram\n\t.command(\"messages\")\n\t.description(\"View messages (email + SMS) for an identity\")\n\t.argument(\"<identity-id>\", \"Identity ID\")\n\t.option(\"--since <timestamp>\", \"Only show messages after this ISO timestamp\")\n\t.action(async (identityId, options) => {\n\t\tconst terminator = new Terminator();\n\t\ttry {\n\t\t\tconst sinceDate = options.since ? new Date(options.since) : undefined;\n\t\t\tconst { emails, sms } = await terminator.readMessages(identityId, sinceDate);\n\n\t\t\tif (emails.length === 0 && sms.length === 0) {\n\t\t\t\tconsole.log(\"No messages found.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (emails.length > 0) {\n\t\t\t\tconsole.log(`Emails (${emails.length}):\\n`);\n\t\t\t\tfor (const e of emails) {\n\t\t\t\t\tconsole.log(` From: ${e.from}`);\n\t\t\t\t\tconsole.log(` Subject: ${e.subject}`);\n\t\t\t\t\tconsole.log(` Date: ${e.receivedAt}`);\n\t\t\t\t\tconsole.log(` Body: ${e.text.slice(0, 200)}${e.text.length > 200 ? \"...\" : \"\"}`);\n\t\t\t\t\tconsole.log(\"\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (sms.length > 0) {\n\t\t\t\tconsole.log(`SMS (${sms.length}):\\n`);\n\t\t\t\tfor (const s of sms) {\n\t\t\t\t\tconsole.log(` From: ${s.from}`);\n\t\t\t\t\tconsole.log(` Date: ${s.receivedAt}`);\n\t\t\t\t\tconsole.log(` Body: ${s.body}`);\n\t\t\t\t\tconsole.log(\"\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst code = await terminator.extractCode(identityId);\n\t\t\tif (code) {\n\t\t\t\tconsole.log(`Verification code found: ${code}`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(`Error: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\tprocess.exit(1);\n\t\t} finally {\n\t\t\tterminator.close();\n\t\t}\n\t});\n\nprogram\n\t.command(\"kill\")\n\t.description(\"Kill an identity (revoke all its resources)\")\n\t.argument(\"[identity-id]\", \"Identity ID to kill\")\n\t.option(\"--all\", \"Kill ALL active identities (emergency kill switch)\")\n\t.action(async (identityId, options) => {\n\t\tconst terminator = new Terminator();\n\t\ttry {\n\t\t\tif (options.all) {\n\t\t\t\tconsole.log(\"KILL SWITCH: Revoking ALL active identities...\\n\");\n\t\t\t\tconst results = await terminator.killAll();\n\n\t\t\t\tif (results.length === 0) {\n\t\t\t\t\tconsole.log(\"No active identities to kill.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const r of results) {\n\t\t\t\t\tconst status = r.errors.length === 0 ? \"OK\" : \"PARTIAL\";\n\t\t\t\t\tconsole.log(` ${r.identityId} [${status}]`);\n\t\t\t\t\tif (r.emailRevoked) console.log(\" email revoked\");\n\t\t\t\t\tif (r.phoneRevoked) console.log(\" phone revoked\");\n\t\t\t\t\tif (r.cardRevoked) console.log(\" card revoked\");\n\t\t\t\t\tfor (const err of r.errors) {\n\t\t\t\t\t\tconsole.log(` ERROR: ${err}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconsole.log(`\\nKilled ${results.length} identities.`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!identityId) {\n\t\t\t\tconsole.error(\"Error: specify an identity ID, or use --all to kill everything.\");\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\tconsole.log(`Killing identity ${identityId}...`);\n\t\t\tconst result = await terminator.killIdentity(identityId);\n\n\t\t\tconsole.log(`\\nIdentity ${result.identityId} killed.`);\n\t\t\tif (result.emailRevoked) console.log(\" email revoked\");\n\t\t\tif (result.phoneRevoked) console.log(\" phone revoked\");\n\t\t\tif (result.cardRevoked) console.log(\" card revoked\");\n\t\t\tfor (const err of result.errors) {\n\t\t\t\tconsole.log(` ERROR: ${err}`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(`Error: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\tprocess.exit(1);\n\t\t} finally {\n\t\t\tterminator.close();\n\t\t}\n\t});\n\nprogram\n\t.command(\"log\")\n\t.description(\"View the activity log\")\n\t.argument(\"[identity-id]\", \"Optional: filter by identity ID\")\n\t.option(\"-n, --limit <count>\", \"Number of events to show\", parseInt, 20)\n\t.option(\"-t, --type <event-type>\", \"Filter by event type\")\n\t.action((identityId, options) => {\n\t\tconst terminator = new Terminator();\n\t\ttry {\n\t\t\tconst events = terminator.getActivityLog({\n\t\t\t\tidentityId,\n\t\t\t\teventType: options.type,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\n\t\t\tif (events.length === 0) {\n\t\t\t\tconsole.log(\"No activity log events found.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconsole.log(`Activity log (${events.length} events):\\n`);\n\t\t\tfor (const e of events) {\n\t\t\t\tconst ts = e.timestamp.replace(\"T\", \" \").slice(0, 19);\n\t\t\t\tconst cost = e.costEstimateCents ? ` ($${(e.costEstimateCents / 100).toFixed(2)})` : \"\";\n\t\t\t\tconst provider = e.provider ? ` [${e.provider}]` : \"\";\n\n\t\t\t\tconsole.log(` ${ts} ${e.eventType}${provider}${cost}`);\n\t\t\t\tif (e.identityId) console.log(` identity: ${e.identityId}`);\n\t\t\t\tif (e.details) {\n\t\t\t\t\tconst detailStr = JSON.stringify(e.details);\n\t\t\t\t\tif (detailStr.length < 120) {\n\t\t\t\t\t\tconsole.log(` ${detailStr}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tterminator.close();\n\t\t}\n\t});\n\nprogram\n\t.command(\"status\")\n\t.description(\"Show configured providers and system health\")\n\t.action(async () => {\n\t\tconst terminator = new Terminator();\n\t\ttry {\n\t\t\tconst status = await terminator.checkStatus();\n\n\t\t\tconsole.log(\"Terminator Status\\n\");\n\t\t\tconsole.log(\"Providers:\");\n\t\t\tfor (const p of status.providers) {\n\t\t\t\tconst icon = p.healthy ? \"+\" : \"x\";\n\t\t\t\tconsole.log(` [${icon}] ${p.provider}: ${p.message ?? (p.healthy ? \"healthy\" : \"unhealthy\")}`);\n\t\t\t}\n\n\t\t\tconsole.log(\n\t\t\t\t`\\nConfigured: email=${status.configuredProviders.email} phone=${status.configuredProviders.phone} card=${status.configuredProviders.card}`,\n\t\t\t);\n\t\t\tconsole.log(`Active identities: ${status.activeIdentities}`);\n\t\t} catch (error) {\n\t\t\tconsole.error(`Error: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\tprocess.exit(1);\n\t\t} finally {\n\t\t\tterminator.close();\n\t\t}\n\t});\n\nprogram.parse();\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ export * from '@terminator-network/core';
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ // src/index.ts
2
+ export * from "@terminator-network/core";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"@terminator-network/core\";\n"],"mappings":";AAAA,cAAc;","names":[]}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "tn8r",
3
+ "publishConfig": {
4
+ "access": "public"
5
+ },
6
+ "version": "0.1.0",
7
+ "type": "module",
8
+ "description": "Disposable identities for AI agents — email, phone, and virtual cards",
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ }
16
+ },
17
+ "bin": {
18
+ "tn8r": "dist/cli.js"
19
+ },
20
+ "files": ["dist"],
21
+ "scripts": {
22
+ "build": "tsup",
23
+ "test": "vitest run",
24
+ "clean": "rm -rf dist"
25
+ },
26
+ "dependencies": {
27
+ "@terminator-network/core": "workspace:*",
28
+ "commander": "^13.0.0"
29
+ },
30
+ "devDependencies": {
31
+ "tsup": "^8.3.0",
32
+ "typescript": "^5.7.0",
33
+ "vitest": "^3.0.0"
34
+ },
35
+ "engines": {
36
+ "node": ">=20.0.0"
37
+ },
38
+ "keywords": [
39
+ "ai-agents",
40
+ "disposable-identity",
41
+ "email",
42
+ "phone",
43
+ "virtual-card",
44
+ "mcp",
45
+ "terminator"
46
+ ],
47
+ "license": "MIT",
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/terminator-network/terminator"
51
+ },
52
+ "homepage": "https://github.com/terminator-network/terminator#readme"
53
+ }