@treza/cli 1.1.0 → 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.
- package/README.md +19 -0
- package/dist/commands/kyc.js +39 -0
- package/dist/commands/kyc.js.map +1 -1
- package/dist/commands/pii.d.ts +3 -0
- package/dist/commands/pii.d.ts.map +1 -0
- package/dist/commands/pii.js +172 -0
- package/dist/commands/pii.js.map +1 -0
- package/dist/commands/redact/index.d.ts +3 -0
- package/dist/commands/redact/index.d.ts.map +1 -0
- package/dist/commands/redact/index.js +10 -0
- package/dist/commands/redact/index.js.map +1 -0
- package/dist/commands/redact/log.d.ts +3 -0
- package/dist/commands/redact/log.d.ts.map +1 -0
- package/dist/commands/redact/log.js +48 -0
- package/dist/commands/redact/log.js.map +1 -0
- package/dist/commands/redact/proxy.d.ts +3 -0
- package/dist/commands/redact/proxy.d.ts.map +1 -0
- package/dist/commands/redact/proxy.js +269 -0
- package/dist/commands/redact/proxy.js.map +1 -0
- package/dist/commands/redact/run.d.ts +3 -0
- package/dist/commands/redact/run.d.ts.map +1 -0
- package/dist/commands/redact/run.js +115 -0
- package/dist/commands/redact/run.js.map +1 -0
- package/dist/commands/redact/trial.d.ts +3 -0
- package/dist/commands/redact/trial.d.ts.map +1 -0
- package/dist/commands/redact/trial.js +33 -0
- package/dist/commands/redact/trial.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/api.d.ts +36 -0
- package/dist/utils/api.d.ts.map +1 -1
- package/dist/utils/api.js +41 -0
- package/dist/utils/api.js.map +1 -1
- package/dist/utils/config.d.ts +6 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +15 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/redact-api.d.ts +124 -0
- package/dist/utils/redact-api.d.ts.map +1 -0
- package/dist/utils/redact-api.js +231 -0
- package/dist/utils/redact-api.js.map +1 -0
- package/dist/utils/redact-config.d.ts +22 -0
- package/dist/utils/redact-config.d.ts.map +1 -0
- package/dist/utils/redact-config.js +27 -0
- package/dist/utils/redact-config.js.map +1 -0
- package/dist/utils/redact-local.d.ts +3 -0
- package/dist/utils/redact-local.d.ts.map +1 -0
- package/dist/utils/redact-local.js +160 -0
- package/dist/utils/redact-local.js.map +1 -0
- package/dist/utils/redact-manifest.json +44 -0
- package/package.json +3 -2
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as http from 'http';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { chatCompletionProxy, chatCompletionProxyStream, StreamRehydrator, fetchAttestation, RedactApiError, MissingCredentialsError, } from '../../utils/redact-api.js';
|
|
5
|
+
const DEFAULT_PORT = 8717;
|
|
6
|
+
function applyRehydration(value, map) {
|
|
7
|
+
if (typeof value === 'string') {
|
|
8
|
+
let out = value;
|
|
9
|
+
for (const [placeholder, original] of Object.entries(map)) {
|
|
10
|
+
out = out.split(placeholder).join(original);
|
|
11
|
+
}
|
|
12
|
+
return out;
|
|
13
|
+
}
|
|
14
|
+
if (Array.isArray(value)) {
|
|
15
|
+
return value.map((v) => applyRehydration(v, map));
|
|
16
|
+
}
|
|
17
|
+
if (value && typeof value === 'object') {
|
|
18
|
+
const result = {};
|
|
19
|
+
for (const [k, v] of Object.entries(value)) {
|
|
20
|
+
result[k] = applyRehydration(v, map);
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
async function readRequestBody(req) {
|
|
27
|
+
const chunks = [];
|
|
28
|
+
for await (const chunk of req) {
|
|
29
|
+
chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
|
|
30
|
+
}
|
|
31
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
32
|
+
}
|
|
33
|
+
function send(res, status, body) {
|
|
34
|
+
res.statusCode = status;
|
|
35
|
+
res.setHeader('Content-Type', 'application/json');
|
|
36
|
+
res.end(typeof body === 'string' ? body : JSON.stringify(body));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Pipe an upstream SSE chat-completion stream to the local client.
|
|
40
|
+
*
|
|
41
|
+
* Without `--rehydrate` the raw bytes are forwarded untouched (the privacy
|
|
42
|
+
* default — placeholders stay in the output). With `--rehydrate` we decode the
|
|
43
|
+
* SSE, swap placeholders back to originals across chunk boundaries via
|
|
44
|
+
* {@link StreamRehydrator}, and re-emit valid SSE.
|
|
45
|
+
*/
|
|
46
|
+
async function streamChatCompletion(res, upstream, rehydrate) {
|
|
47
|
+
// Upstream returned a non-SSE body (e.g. a JSON error) despite stream:true —
|
|
48
|
+
// forward it verbatim as a normal response.
|
|
49
|
+
if (!upstream.stream) {
|
|
50
|
+
if (upstream.requestId)
|
|
51
|
+
res.setHeader('x-treza-request-id', upstream.requestId);
|
|
52
|
+
res.setHeader('x-treza-mode', 'tee');
|
|
53
|
+
send(res, upstream.status, upstream.body ?? { error: 'empty upstream response' });
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
res.statusCode = upstream.status;
|
|
57
|
+
res.setHeader('Content-Type', 'text/event-stream; charset=utf-8');
|
|
58
|
+
res.setHeader('Cache-Control', 'no-cache, no-transform');
|
|
59
|
+
res.setHeader('Connection', 'keep-alive');
|
|
60
|
+
if (upstream.requestId)
|
|
61
|
+
res.setHeader('x-treza-request-id', upstream.requestId);
|
|
62
|
+
res.setHeader('x-treza-mode', 'tee');
|
|
63
|
+
const reader = upstream.stream.getReader();
|
|
64
|
+
res.on('close', () => { void reader.cancel().catch(() => { }); });
|
|
65
|
+
const map = rehydrate ? upstream.rehydrationMap : undefined;
|
|
66
|
+
// Fast path: nothing to rehydrate — forward the SSE bytes unchanged.
|
|
67
|
+
if (!map || Object.keys(map).length === 0) {
|
|
68
|
+
for (;;) {
|
|
69
|
+
const { value, done } = await reader.read();
|
|
70
|
+
if (done)
|
|
71
|
+
break;
|
|
72
|
+
res.write(Buffer.from(value));
|
|
73
|
+
}
|
|
74
|
+
res.end();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Rehydrating path: one rehydrator per choice index so split placeholders are
|
|
78
|
+
// resolved against accumulated text, never an individual delta.
|
|
79
|
+
const decoder = new TextDecoder();
|
|
80
|
+
const rehydrators = new Map();
|
|
81
|
+
const rehydratorFor = (i) => {
|
|
82
|
+
let r = rehydrators.get(i);
|
|
83
|
+
if (!r) {
|
|
84
|
+
r = new StreamRehydrator(map);
|
|
85
|
+
rehydrators.set(i, r);
|
|
86
|
+
}
|
|
87
|
+
return r;
|
|
88
|
+
};
|
|
89
|
+
const handleLine = (line) => {
|
|
90
|
+
if (!line.startsWith('data:')) {
|
|
91
|
+
// Event separators (blank lines) and comments pass through untouched.
|
|
92
|
+
res.write(line + '\n');
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const payload = line.slice(5).trim();
|
|
96
|
+
if (payload === '[DONE]') {
|
|
97
|
+
// Drain any held-back tail (safety net — finish chunks already flush).
|
|
98
|
+
for (const [i, r] of rehydrators) {
|
|
99
|
+
const tail = r.flush();
|
|
100
|
+
if (tail) {
|
|
101
|
+
res.write(`data: ${JSON.stringify({ choices: [{ index: i, delta: { content: tail } }] })}\n\n`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
res.write('data: [DONE]\n');
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
let chunk;
|
|
108
|
+
try {
|
|
109
|
+
chunk = JSON.parse(payload);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
res.write(line + '\n');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
for (const choice of chunk.choices ?? []) {
|
|
116
|
+
const r = rehydratorFor(typeof choice.index === 'number' ? choice.index : 0);
|
|
117
|
+
const delta = choice.delta;
|
|
118
|
+
const hadContent = delta != null && typeof delta.content === 'string';
|
|
119
|
+
let piece = hadContent ? r.push(delta.content) : '';
|
|
120
|
+
if (choice.finish_reason != null)
|
|
121
|
+
piece += r.flush();
|
|
122
|
+
if (delta != null && (hadContent || piece))
|
|
123
|
+
delta.content = piece;
|
|
124
|
+
}
|
|
125
|
+
res.write(`data: ${JSON.stringify(chunk)}\n`);
|
|
126
|
+
};
|
|
127
|
+
let buf = '';
|
|
128
|
+
for (;;) {
|
|
129
|
+
const { value, done } = await reader.read();
|
|
130
|
+
if (done)
|
|
131
|
+
break;
|
|
132
|
+
buf += decoder.decode(value, { stream: true });
|
|
133
|
+
let nl;
|
|
134
|
+
while ((nl = buf.indexOf('\n')) !== -1) {
|
|
135
|
+
handleLine(buf.slice(0, nl));
|
|
136
|
+
buf = buf.slice(nl + 1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (buf)
|
|
140
|
+
handleLine(buf);
|
|
141
|
+
res.end();
|
|
142
|
+
}
|
|
143
|
+
export const proxyCommand = new Command('proxy')
|
|
144
|
+
.description('Run a local OpenAI-compatible endpoint that redacts in-flight via the TEE')
|
|
145
|
+
.option('-p, --port <n>', 'Local port to listen on', String(DEFAULT_PORT))
|
|
146
|
+
.option('--model-key <key>', 'Caller OpenAI key for the upstream call (defaults to OPENAI_API_KEY)')
|
|
147
|
+
.option('--rehydrate', 'Substitute placeholders back to originals in responses (client-side only)', false)
|
|
148
|
+
.option('--api-key <key>', 'Override configured Treza API key')
|
|
149
|
+
.action(async (options) => {
|
|
150
|
+
const modelKey = options.modelKey || process.env.OPENAI_API_KEY;
|
|
151
|
+
if (!modelKey) {
|
|
152
|
+
console.error(chalk.red('Missing upstream model key. Set OPENAI_API_KEY in your environment or pass --model-key.'));
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
const port = options.port ? parseInt(options.port, 10) : DEFAULT_PORT;
|
|
156
|
+
if (!Number.isFinite(port) || port <= 0) {
|
|
157
|
+
console.error(chalk.red(`Invalid --port value: ${options.port}`));
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
let attest;
|
|
161
|
+
try {
|
|
162
|
+
attest = await fetchAttestation({ apiKey: options.apiKey });
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
if (err instanceof MissingCredentialsError) {
|
|
166
|
+
console.error(chalk.red(err.message));
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
console.error(chalk.red(`Failed to fetch attestation: ${err.message}`));
|
|
170
|
+
if (err instanceof RedactApiError && err.statusCode === 403) {
|
|
171
|
+
console.error(chalk.yellow('Your API key is missing redact permissions. Contact your Treza account team.'));
|
|
172
|
+
}
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
const server = http.createServer(async (req, res) => {
|
|
176
|
+
const startedAt = Date.now();
|
|
177
|
+
const url = req.url || '/';
|
|
178
|
+
if (req.method === 'GET' && (url === '/' || url === '/v1/health' || url === '/healthz')) {
|
|
179
|
+
send(res, 200, { ok: true, mode: 'tee', attestation: attest });
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (req.method !== 'POST' || !url.startsWith('/v1/chat/completions')) {
|
|
183
|
+
send(res, 404, { error: 'Not found. Try POST /v1/chat/completions' });
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const rawBody = await readRequestBody(req);
|
|
187
|
+
let body;
|
|
188
|
+
try {
|
|
189
|
+
body = rawBody ? JSON.parse(rawBody) : {};
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
send(res, 400, { error: 'Invalid JSON in request body' });
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const wantsStream = body.stream === true;
|
|
196
|
+
try {
|
|
197
|
+
if (wantsStream) {
|
|
198
|
+
const upstream = await chatCompletionProxyStream(body, modelKey, {
|
|
199
|
+
rehydrate: options.rehydrate,
|
|
200
|
+
apiKey: options.apiKey,
|
|
201
|
+
});
|
|
202
|
+
await streamChatCompletion(res, upstream, !!options.rehydrate);
|
|
203
|
+
const ms = Date.now() - startedAt;
|
|
204
|
+
console.log(chalk.gray(`[${new Date().toISOString()}] POST /v1/chat/completions (stream) → ${upstream.status} (${ms}ms)`));
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const upstream = await chatCompletionProxy(body, modelKey, {
|
|
208
|
+
rehydrate: options.rehydrate,
|
|
209
|
+
apiKey: options.apiKey,
|
|
210
|
+
});
|
|
211
|
+
let payload = upstream.body;
|
|
212
|
+
if (options.rehydrate && upstream.rehydrationMap) {
|
|
213
|
+
payload = applyRehydration(payload, upstream.rehydrationMap);
|
|
214
|
+
}
|
|
215
|
+
if (upstream.requestId)
|
|
216
|
+
res.setHeader('x-treza-request-id', upstream.requestId);
|
|
217
|
+
res.setHeader('x-treza-mode', 'tee');
|
|
218
|
+
send(res, upstream.status, payload);
|
|
219
|
+
const ms = Date.now() - startedAt;
|
|
220
|
+
console.log(chalk.gray(`[${new Date().toISOString()}] POST /v1/chat/completions → ${upstream.status} (${ms}ms)`));
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
const status = err instanceof RedactApiError ? err.statusCode || 502 : 502;
|
|
224
|
+
const message = err instanceof Error
|
|
225
|
+
? err.message
|
|
226
|
+
: 'Redaction upstream failed; payload was NOT forwarded to the model provider.';
|
|
227
|
+
// If a stream was already in flight the headers (and some bytes) are
|
|
228
|
+
// gone — just close the connection. Redaction itself happens before the
|
|
229
|
+
// first byte, so a mid-stream failure never leaks un-redacted data.
|
|
230
|
+
if (res.headersSent) {
|
|
231
|
+
res.end();
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
send(res, status, {
|
|
235
|
+
error: 'redaction_failed',
|
|
236
|
+
message,
|
|
237
|
+
note: 'No data was forwarded upstream. The proxy fails closed when the TEE step errors.',
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
console.error(chalk.red(`[${new Date().toISOString()}] redaction failed: ${message}`));
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
server.listen(port, () => {
|
|
244
|
+
const base = `http://localhost:${port}/v1`;
|
|
245
|
+
console.log('');
|
|
246
|
+
console.log(chalk.bold('Treza redaction proxy running.'));
|
|
247
|
+
console.log(chalk.gray(` Base URL: ${base}`));
|
|
248
|
+
console.log(chalk.gray(` Upstream: api.openai.com`));
|
|
249
|
+
console.log(chalk.gray(` TEE: attested (enclave ${attest?.enclaveId || 'unknown'}, ${attest?.region || 'unknown'})`));
|
|
250
|
+
if (options.rehydrate) {
|
|
251
|
+
console.log(chalk.yellow(' Rehydrate: ON (placeholders replaced client-side in responses)'));
|
|
252
|
+
}
|
|
253
|
+
console.log(chalk.gray(' Streaming: supported (stream:true) — buffered and SSE both proxied'));
|
|
254
|
+
console.log('');
|
|
255
|
+
console.log(chalk.bold('Point your client here:'));
|
|
256
|
+
console.log(chalk.cyan(` openai.base_url = "${base}"`));
|
|
257
|
+
console.log('');
|
|
258
|
+
console.log(chalk.gray('Logging redactions to: treza redact log'));
|
|
259
|
+
console.log('');
|
|
260
|
+
});
|
|
261
|
+
const shutdown = () => {
|
|
262
|
+
console.log('\n' + chalk.gray('Shutting down proxy…'));
|
|
263
|
+
server.close(() => process.exit(0));
|
|
264
|
+
setTimeout(() => process.exit(0), 2000).unref();
|
|
265
|
+
};
|
|
266
|
+
process.on('SIGINT', shutdown);
|
|
267
|
+
process.on('SIGTERM', shutdown);
|
|
268
|
+
});
|
|
269
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/commands/redact/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/redact/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6CpC,eAAO,MAAM,UAAU,SAmFnB,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { redactText, RedactApiError, MissingCredentialsError, } from '../../utils/redact-api.js';
|
|
5
|
+
async function readStdin() {
|
|
6
|
+
if (process.stdin.isTTY)
|
|
7
|
+
return '';
|
|
8
|
+
const chunks = [];
|
|
9
|
+
for await (const chunk of process.stdin) {
|
|
10
|
+
chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
|
|
11
|
+
}
|
|
12
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
13
|
+
}
|
|
14
|
+
function formatMap(result) {
|
|
15
|
+
const lines = [`Redacted ${result.entities.length} entities:`];
|
|
16
|
+
for (const e of result.entities) {
|
|
17
|
+
const pad = e.placeholder.padEnd(12);
|
|
18
|
+
lines.push(` ${pad} chars ${e.start}-${e.end}`);
|
|
19
|
+
}
|
|
20
|
+
return lines.join('\n');
|
|
21
|
+
}
|
|
22
|
+
function modeBanner(mode, attest) {
|
|
23
|
+
if (mode === 'tee') {
|
|
24
|
+
const id = attest?.enclaveId || 'unknown';
|
|
25
|
+
const region = attest?.region || 'unknown';
|
|
26
|
+
return chalk.gray(`Mode: tee (attested, enclave ${id}, region ${region})`);
|
|
27
|
+
}
|
|
28
|
+
return chalk.yellow('Mode: local (NOT ATTESTED, no audit log)');
|
|
29
|
+
}
|
|
30
|
+
export const runCommand = new Command('run')
|
|
31
|
+
.description('Redact PII/PHI from a file or stdin')
|
|
32
|
+
.argument('[file]', 'File to redact (omit to read from stdin)')
|
|
33
|
+
.option('--show-map', 'Also print the entity map (to stderr unless --json)', false)
|
|
34
|
+
.option('--json', 'Emit { redacted, entities } as a single JSON object on stdout', false)
|
|
35
|
+
.option('--out <file>', 'Write redacted text to a file instead of stdout')
|
|
36
|
+
.option('--api-key <key>', 'Override configured API key (TEE mode only)')
|
|
37
|
+
.option('--local', 'Run redaction in-process (NOT ATTESTED, no audit log)', false)
|
|
38
|
+
.action(async (file, options) => {
|
|
39
|
+
let input;
|
|
40
|
+
try {
|
|
41
|
+
if (file) {
|
|
42
|
+
input = fs.readFileSync(file, 'utf8');
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
input = await readStdin();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
console.error(chalk.red(`Error reading input: ${err.message}`));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
if (!input || !input.trim()) {
|
|
53
|
+
console.error(chalk.red('No input provided. Pipe text via stdin or pass a file path.'));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
let result;
|
|
57
|
+
let bannerAttest;
|
|
58
|
+
try {
|
|
59
|
+
if (options.local) {
|
|
60
|
+
const { redactTextLocal } = await import('../../utils/redact-local.js');
|
|
61
|
+
result = await redactTextLocal(input);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
result = await redactText(input, { apiKey: options.apiKey });
|
|
65
|
+
bannerAttest = result.attestation
|
|
66
|
+
? { enclaveId: result.attestation.enclaveId, region: result.attestation.region }
|
|
67
|
+
: undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
if (err instanceof MissingCredentialsError) {
|
|
72
|
+
console.error(chalk.red(err.message));
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
if (err instanceof RedactApiError) {
|
|
76
|
+
console.error(chalk.red(`Redaction failed: ${err.message}`));
|
|
77
|
+
if (err.statusCode === 401) {
|
|
78
|
+
console.error(chalk.yellow('Your API key may be invalid or your wallet header may not match the key owner.'));
|
|
79
|
+
}
|
|
80
|
+
else if (err.statusCode === 403) {
|
|
81
|
+
console.error(chalk.yellow('Your API key is missing redact:run permission. Contact your Treza account team.'));
|
|
82
|
+
}
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
console.error(chalk.red(`Redaction failed: ${err.message}`));
|
|
86
|
+
console.error(chalk.gray('Re-run with `--local` to use the on-device engine (NOT ATTESTED).'));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
if (options.json) {
|
|
90
|
+
const payload = {
|
|
91
|
+
redacted: result.redacted,
|
|
92
|
+
entities: result.entities,
|
|
93
|
+
mode: options.local ? 'local' : 'tee',
|
|
94
|
+
attestation: result.attestation,
|
|
95
|
+
modelVersion: result.modelVersion,
|
|
96
|
+
recognizerVersion: result.recognizerVersion,
|
|
97
|
+
};
|
|
98
|
+
process.stdout.write(JSON.stringify(payload, null, 2) + '\n');
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (options.out) {
|
|
102
|
+
fs.writeFileSync(options.out, result.redacted, 'utf8');
|
|
103
|
+
console.error(chalk.green(`Wrote redacted output to ${options.out}`));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
process.stdout.write(result.redacted);
|
|
107
|
+
if (!result.redacted.endsWith('\n'))
|
|
108
|
+
process.stdout.write('\n');
|
|
109
|
+
}
|
|
110
|
+
if (options.showMap) {
|
|
111
|
+
process.stderr.write('\n' + modeBanner(options.local ? 'local' : 'tee', bannerAttest) + '\n');
|
|
112
|
+
process.stderr.write(formatMap(result) + '\n');
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/redact/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial.d.ts","sourceRoot":"","sources":["../../../src/commands/redact/trial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,YAAY,SAwBrB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { claimTrialKey, RedactApiError } from '../../utils/redact-api.js';
|
|
5
|
+
import { getRedactApiUrl, saveRedactApiKey } from '../../utils/redact-config.js';
|
|
6
|
+
import * as output from '../../utils/output.js';
|
|
7
|
+
export const trialCommand = new Command('trial')
|
|
8
|
+
.description('Get a free, rate-limited redaction API key (no signup)')
|
|
9
|
+
.action(async () => {
|
|
10
|
+
const apiUrl = getRedactApiUrl();
|
|
11
|
+
const spinner = ora('Requesting trial key…').start();
|
|
12
|
+
try {
|
|
13
|
+
const res = await claimTrialKey(apiUrl);
|
|
14
|
+
saveRedactApiKey(res.apiKey);
|
|
15
|
+
spinner.succeed('Trial key issued');
|
|
16
|
+
console.log('');
|
|
17
|
+
output.keyValue('Key', '••••••••' + res.apiKey.slice(-6));
|
|
18
|
+
output.keyValue('Tier', res.tier);
|
|
19
|
+
output.keyValue('Daily quota', String(res.quotaPerDay));
|
|
20
|
+
output.keyValue('Resets at', res.resetsAt);
|
|
21
|
+
console.log('');
|
|
22
|
+
console.log(chalk.gray('Saved to CLI config. Try it:'));
|
|
23
|
+
console.log(chalk.cyan(' echo "Patient John Doe, SSN 123-45-6789" | treza redact run --show-map'));
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
spinner.fail(err instanceof Error ? err.message : String(err));
|
|
27
|
+
if (err instanceof RedactApiError && err.statusCode === 429) {
|
|
28
|
+
console.log(chalk.yellow('\nTrial key rate limit reached. Try again later or contact sales for an upgrade.'));
|
|
29
|
+
}
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=trial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial.js","sourceRoot":"","sources":["../../../src/commands/redact/trial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAEhD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QACxC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC,CAAC;IACtG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,GAAG,YAAY,cAAc,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kFAAkF,CAAC,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,8 @@ import { enclaveCommand } from './commands/enclave.js';
|
|
|
6
6
|
import { kycCommand } from './commands/kyc.js';
|
|
7
7
|
import { providerCommand } from './commands/provider.js';
|
|
8
8
|
import { taskCommand } from './commands/task.js';
|
|
9
|
+
import { piiCommand } from './commands/pii.js';
|
|
10
|
+
import { redactCommand } from './commands/redact/index.js';
|
|
9
11
|
import { getConfig } from './utils/config.js';
|
|
10
12
|
const VERSION = '1.0.0';
|
|
11
13
|
const program = new Command();
|
|
@@ -36,6 +38,8 @@ program.addCommand(enclaveCommand);
|
|
|
36
38
|
program.addCommand(kycCommand);
|
|
37
39
|
program.addCommand(providerCommand);
|
|
38
40
|
program.addCommand(taskCommand);
|
|
41
|
+
program.addCommand(piiCommand);
|
|
42
|
+
program.addCommand(redactCommand);
|
|
39
43
|
// Custom help
|
|
40
44
|
program.on('--help', () => {
|
|
41
45
|
console.log('');
|
|
@@ -44,6 +48,8 @@ program.on('--help', () => {
|
|
|
44
48
|
console.log(' $ treza enclave list # List your enclaves');
|
|
45
49
|
console.log(' $ treza enclave create --name "Bot" # Create an enclave');
|
|
46
50
|
console.log(' $ treza kyc verify <proof-id> # Verify a KYC proof');
|
|
51
|
+
console.log(' $ echo "..." | treza redact run --show-map # Redact PII');
|
|
52
|
+
console.log(' $ treza redact proxy # Local PII-redacting OpenAI proxy');
|
|
47
53
|
console.log('');
|
|
48
54
|
console.log('Documentation:');
|
|
49
55
|
console.log(` ${chalk.cyan('https://docs.treza.xyz/cli')}`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,mBAAmB;AACnB,MAAM,MAAM,GAAG;EACb,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,4CAA4C,CAAC;EAClE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,uBAAuB,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;EACxI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;EAC9G,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,4CAA4C,CAAC;CACnE,CAAC;AAEF,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,wBAAwB,CAAC;KAC3D,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,uDAAuD;IACvD,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,WAAW,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/api.d.ts
CHANGED
|
@@ -121,5 +121,41 @@ export declare function createTask(data: {
|
|
|
121
121
|
export declare function deleteTask(id: string): Promise<{
|
|
122
122
|
message: string;
|
|
123
123
|
}>;
|
|
124
|
+
export declare function piiIngest(body: Record<string, unknown>): Promise<unknown>;
|
|
125
|
+
export declare function piiRetrieve(body: Record<string, unknown>): Promise<unknown>;
|
|
126
|
+
export declare function piiDelete(piiId: string): Promise<unknown>;
|
|
127
|
+
export declare function piiConsentGrant(body: Record<string, unknown>): Promise<unknown>;
|
|
128
|
+
export declare function piiConsentRevoke(consentId: string): Promise<unknown>;
|
|
129
|
+
export interface PiiAuditEvent {
|
|
130
|
+
eventId: string;
|
|
131
|
+
workflowId: string;
|
|
132
|
+
workflowRunId: string;
|
|
133
|
+
stepId: string;
|
|
134
|
+
stepName: string;
|
|
135
|
+
piiFieldsPresent: string[];
|
|
136
|
+
piiFieldsAllowed: string[];
|
|
137
|
+
piiFieldsStripped: string[];
|
|
138
|
+
hadViolation: boolean;
|
|
139
|
+
timestamp: string;
|
|
140
|
+
account?: string;
|
|
141
|
+
walletAddress?: string;
|
|
142
|
+
}
|
|
143
|
+
export interface PiiAuditResponse {
|
|
144
|
+
summary: {
|
|
145
|
+
total: number;
|
|
146
|
+
violations: number;
|
|
147
|
+
workflows: string[];
|
|
148
|
+
};
|
|
149
|
+
events: PiiAuditEvent[];
|
|
150
|
+
}
|
|
151
|
+
export declare function piiAudit(params: {
|
|
152
|
+
wallet?: string;
|
|
153
|
+
workflowId?: string;
|
|
154
|
+
violations?: boolean;
|
|
155
|
+
startDate?: string;
|
|
156
|
+
limit?: string;
|
|
157
|
+
}): Promise<PiiAuditResponse>;
|
|
158
|
+
/** KYC → PII bridge (verified proof in DynamoDB + encrypted PII row). */
|
|
159
|
+
export declare function kycPiiBridge(body: Record<string, unknown>): Promise<unknown>;
|
|
124
160
|
export {};
|
|
125
161
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/utils/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAEA,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,qBAAa,QAAS,SAAQ,KAAK;IAGxB,UAAU,EAAE,MAAM;IAClB,OAAO,CAAC,EAAE,OAAO;gBAFxB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,wBAAsB,UAAU,CAAC,CAAC,EAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/api.js
CHANGED
|
@@ -18,12 +18,16 @@ export async function apiRequest(endpoint, options = {}) {
|
|
|
18
18
|
const searchParams = new URLSearchParams(options.params);
|
|
19
19
|
url += `?${searchParams.toString()}`;
|
|
20
20
|
}
|
|
21
|
+
const walletAddress = getWalletAddress();
|
|
21
22
|
const headers = {
|
|
22
23
|
'Content-Type': 'application/json',
|
|
23
24
|
};
|
|
24
25
|
if (apiKey) {
|
|
25
26
|
headers['Authorization'] = `Bearer ${apiKey}`;
|
|
26
27
|
}
|
|
28
|
+
if (walletAddress) {
|
|
29
|
+
headers['x-treza-wallet'] = walletAddress;
|
|
30
|
+
}
|
|
27
31
|
const response = await fetch(url, {
|
|
28
32
|
method: options.method || 'GET',
|
|
29
33
|
headers,
|
|
@@ -101,4 +105,41 @@ export async function deleteTask(id) {
|
|
|
101
105
|
params: { id, wallet },
|
|
102
106
|
});
|
|
103
107
|
}
|
|
108
|
+
// PII / TEE API
|
|
109
|
+
export async function piiIngest(body) {
|
|
110
|
+
return apiRequest('/api/pii/ingest', { method: 'POST', body });
|
|
111
|
+
}
|
|
112
|
+
export async function piiRetrieve(body) {
|
|
113
|
+
return apiRequest('/api/pii/retrieve', { method: 'POST', body });
|
|
114
|
+
}
|
|
115
|
+
export async function piiDelete(piiId) {
|
|
116
|
+
return apiRequest('/api/pii/delete', { method: 'POST', body: { piiId } });
|
|
117
|
+
}
|
|
118
|
+
export async function piiConsentGrant(body) {
|
|
119
|
+
return apiRequest('/api/pii/consent', { method: 'POST', body });
|
|
120
|
+
}
|
|
121
|
+
export async function piiConsentRevoke(consentId) {
|
|
122
|
+
return apiRequest('/api/pii/consent', {
|
|
123
|
+
method: 'POST',
|
|
124
|
+
body: { revoke: true, consentId },
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
export async function piiAudit(params) {
|
|
128
|
+
// `account` is the canonical tenant param (legacy `walletAddress` still
|
|
129
|
+
// accepted server-side). Reads require an API key with the pii:audit scope
|
|
130
|
+
// whose account matches the x-treza-wallet header sent by apiRequest().
|
|
131
|
+
const account = params.wallet || getWalletAddress();
|
|
132
|
+
const q = { account, limit: params.limit || '100' };
|
|
133
|
+
if (params.workflowId)
|
|
134
|
+
q.workflowId = params.workflowId;
|
|
135
|
+
if (params.violations)
|
|
136
|
+
q.violations = 'true';
|
|
137
|
+
if (params.startDate)
|
|
138
|
+
q.startDate = params.startDate;
|
|
139
|
+
return apiRequest('/api/pii/audit', { params: q });
|
|
140
|
+
}
|
|
141
|
+
/** KYC → PII bridge (verified proof in DynamoDB + encrypted PII row). */
|
|
142
|
+
export async function kycPiiBridge(body) {
|
|
143
|
+
return apiRequest('/api/kyc/pii-bridge', { method: 'POST', body });
|
|
144
|
+
}
|
|
104
145
|
//# sourceMappingURL=api.js.map
|