@hexidecibel/companion 0.0.1
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/__tests__/task-parser.test.d.ts +2 -0
- package/dist/__tests__/task-parser.test.d.ts.map +1 -0
- package/dist/__tests__/task-parser.test.js +79 -0
- package/dist/__tests__/task-parser.test.js.map +1 -0
- package/dist/anthropic-usage.d.ts +5 -0
- package/dist/anthropic-usage.d.ts.map +1 -0
- package/dist/anthropic-usage.js +112 -0
- package/dist/anthropic-usage.js.map +1 -0
- package/dist/cert-generator.d.ts +15 -0
- package/dist/cert-generator.d.ts.map +1 -0
- package/dist/cert-generator.js +298 -0
- package/dist/cert-generator.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +122 -0
- package/dist/config.js.map +1 -0
- package/dist/encryption.d.ts +28 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +95 -0
- package/dist/encryption.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +211 -0
- package/dist/index.js.map +1 -0
- package/dist/input-injector.d.ts +21 -0
- package/dist/input-injector.d.ts.map +1 -0
- package/dist/input-injector.js +126 -0
- package/dist/input-injector.js.map +1 -0
- package/dist/mdns.d.ts +11 -0
- package/dist/mdns.d.ts.map +1 -0
- package/dist/mdns.js +93 -0
- package/dist/mdns.js.map +1 -0
- package/dist/parser.d.ts +43 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +800 -0
- package/dist/parser.js.map +1 -0
- package/dist/push.d.ts +38 -0
- package/dist/push.d.ts.map +1 -0
- package/dist/push.js +359 -0
- package/dist/push.js.map +1 -0
- package/dist/qr-server.d.ts +13 -0
- package/dist/qr-server.d.ts.map +1 -0
- package/dist/qr-server.js +421 -0
- package/dist/qr-server.js.map +1 -0
- package/dist/scaffold/generator.d.ts +11 -0
- package/dist/scaffold/generator.d.ts.map +1 -0
- package/dist/scaffold/generator.js +206 -0
- package/dist/scaffold/generator.js.map +1 -0
- package/dist/scaffold/templates/index.d.ts +5 -0
- package/dist/scaffold/templates/index.d.ts.map +1 -0
- package/dist/scaffold/templates/index.js +22 -0
- package/dist/scaffold/templates/index.js.map +1 -0
- package/dist/scaffold/templates/node-express.d.ts +3 -0
- package/dist/scaffold/templates/node-express.d.ts.map +1 -0
- package/dist/scaffold/templates/node-express.js +218 -0
- package/dist/scaffold/templates/node-express.js.map +1 -0
- package/dist/scaffold/templates/python-fastapi.d.ts +3 -0
- package/dist/scaffold/templates/python-fastapi.d.ts.map +1 -0
- package/dist/scaffold/templates/python-fastapi.js +302 -0
- package/dist/scaffold/templates/python-fastapi.js.map +1 -0
- package/dist/scaffold/templates/react-mui-website.d.ts +3 -0
- package/dist/scaffold/templates/react-mui-website.d.ts.map +1 -0
- package/dist/scaffold/templates/react-mui-website.js +405 -0
- package/dist/scaffold/templates/react-mui-website.js.map +1 -0
- package/dist/scaffold/templates/react-typescript.d.ts +3 -0
- package/dist/scaffold/templates/react-typescript.d.ts.map +1 -0
- package/dist/scaffold/templates/react-typescript.js +275 -0
- package/dist/scaffold/templates/react-typescript.js.map +1 -0
- package/dist/scaffold/types.d.ts +55 -0
- package/dist/scaffold/types.d.ts.map +1 -0
- package/dist/scaffold/types.js +3 -0
- package/dist/scaffold/types.js.map +1 -0
- package/dist/subagent-watcher.d.ts +24 -0
- package/dist/subagent-watcher.d.ts.map +1 -0
- package/dist/subagent-watcher.js +307 -0
- package/dist/subagent-watcher.js.map +1 -0
- package/dist/tls.d.ts +10 -0
- package/dist/tls.d.ts.map +1 -0
- package/dist/tls.js +77 -0
- package/dist/tls.js.map +1 -0
- package/dist/tmux-manager.d.ts +71 -0
- package/dist/tmux-manager.d.ts.map +1 -0
- package/dist/tmux-manager.js +243 -0
- package/dist/tmux-manager.js.map +1 -0
- package/dist/tool-config.d.ts +33 -0
- package/dist/tool-config.d.ts.map +1 -0
- package/dist/tool-config.js +211 -0
- package/dist/tool-config.js.map +1 -0
- package/dist/types.d.ts +218 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/watcher.d.ts +63 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +596 -0
- package/dist/watcher.js.map +1 -0
- package/dist/watcher.test.d.ts +2 -0
- package/dist/watcher.test.d.ts.map +1 -0
- package/dist/watcher.test.js +110 -0
- package/dist/watcher.test.js.map +1 -0
- package/dist/websocket.d.ts +62 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +1695 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +71 -0
- package/scripts/build.sh +23 -0
- package/scripts/install-remote.sh +18 -0
- package/scripts/install.sh +558 -0
- package/scripts/uninstall.sh +113 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-parser.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/task-parser.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const parser_1 = require("../parser");
|
|
4
|
+
describe('extractTasks', () => {
|
|
5
|
+
const mockJsonlWithTasks = `
|
|
6
|
+
{"type":"assistant","message":{"content":[{"type":"tool_use","id":"toolu_01","name":"TaskCreate","input":{"subject":"Fix login bug","description":"The login button doesn't work on mobile","activeForm":"Fixing login bug"}}]},"timestamp":"2026-01-28T10:00:00.000Z","uuid":"msg1"}
|
|
7
|
+
{"type":"assistant","message":{"content":[{"type":"tool_result","tool_use_id":"toolu_01","content":"Task created with ID: 1"}]},"timestamp":"2026-01-28T10:00:01.000Z","uuid":"msg2"}
|
|
8
|
+
{"type":"assistant","message":{"content":[{"type":"tool_use","id":"toolu_02","name":"TaskCreate","input":{"subject":"Add tests","description":"Write unit tests for auth module"}}]},"timestamp":"2026-01-28T10:00:02.000Z","uuid":"msg3"}
|
|
9
|
+
{"type":"assistant","message":{"content":[{"type":"tool_result","tool_use_id":"toolu_02","content":"Task created with ID: 2"}]},"timestamp":"2026-01-28T10:00:03.000Z","uuid":"msg4"}
|
|
10
|
+
{"type":"assistant","message":{"content":[{"type":"tool_use","id":"toolu_03","name":"TaskUpdate","input":{"taskId":"1","status":"in_progress","activeForm":"Working on login fix"}}]},"timestamp":"2026-01-28T10:00:04.000Z","uuid":"msg5"}
|
|
11
|
+
{"type":"assistant","message":{"content":[{"type":"tool_result","tool_use_id":"toolu_03","content":"Task updated"}]},"timestamp":"2026-01-28T10:00:05.000Z","uuid":"msg6"}
|
|
12
|
+
{"type":"assistant","message":{"content":[{"type":"tool_use","id":"toolu_04","name":"TaskUpdate","input":{"taskId":"1","status":"completed"}}]},"timestamp":"2026-01-28T10:00:06.000Z","uuid":"msg7"}
|
|
13
|
+
{"type":"assistant","message":{"content":[{"type":"tool_result","tool_use_id":"toolu_04","content":"Task updated"}]},"timestamp":"2026-01-28T10:00:07.000Z","uuid":"msg8"}
|
|
14
|
+
`.trim();
|
|
15
|
+
it('should extract tasks from JSONL content', () => {
|
|
16
|
+
const tasks = (0, parser_1.extractTasks)(mockJsonlWithTasks);
|
|
17
|
+
expect(tasks).toHaveLength(2);
|
|
18
|
+
});
|
|
19
|
+
it('should parse task subject and description', () => {
|
|
20
|
+
const tasks = (0, parser_1.extractTasks)(mockJsonlWithTasks);
|
|
21
|
+
const task1 = tasks.find(t => t.subject === 'Fix login bug');
|
|
22
|
+
expect(task1).toBeDefined();
|
|
23
|
+
expect(task1?.description).toBe("The login button doesn't work on mobile");
|
|
24
|
+
});
|
|
25
|
+
it('should apply status updates in order', () => {
|
|
26
|
+
const tasks = (0, parser_1.extractTasks)(mockJsonlWithTasks);
|
|
27
|
+
const task1 = tasks.find(t => t.subject === 'Fix login bug');
|
|
28
|
+
const task2 = tasks.find(t => t.subject === 'Add tests');
|
|
29
|
+
// Task 1 was updated to completed
|
|
30
|
+
expect(task1?.status).toBe('completed');
|
|
31
|
+
// Task 2 was never updated, should be pending
|
|
32
|
+
expect(task2?.status).toBe('pending');
|
|
33
|
+
});
|
|
34
|
+
it('should track activeForm from latest update', () => {
|
|
35
|
+
const tasks = (0, parser_1.extractTasks)(mockJsonlWithTasks);
|
|
36
|
+
const task1 = tasks.find(t => t.subject === 'Fix login bug');
|
|
37
|
+
// Last update didn't have activeForm, but previous one did
|
|
38
|
+
// Actually the completed update clears activeForm
|
|
39
|
+
expect(task1?.activeForm).toBeUndefined();
|
|
40
|
+
});
|
|
41
|
+
it('should extract task IDs from tool results', () => {
|
|
42
|
+
const tasks = (0, parser_1.extractTasks)(mockJsonlWithTasks);
|
|
43
|
+
expect(tasks[0].id).toBe('1');
|
|
44
|
+
expect(tasks[1].id).toBe('2');
|
|
45
|
+
});
|
|
46
|
+
it('should return empty array for content without tasks', () => {
|
|
47
|
+
const noTasks = `
|
|
48
|
+
{"type":"assistant","message":{"content":[{"type":"text","text":"Hello!"}]},"timestamp":"2026-01-28T10:00:00.000Z","uuid":"msg1"}
|
|
49
|
+
{"type":"user","message":{"content":"Hi"},"timestamp":"2026-01-28T10:00:01.000Z","uuid":"msg2"}
|
|
50
|
+
`.trim();
|
|
51
|
+
const tasks = (0, parser_1.extractTasks)(noTasks);
|
|
52
|
+
expect(tasks).toHaveLength(0);
|
|
53
|
+
});
|
|
54
|
+
it('should handle blockedBy relationships', () => {
|
|
55
|
+
const withBlocking = `
|
|
56
|
+
{"type":"assistant","message":{"content":[{"type":"tool_use","id":"toolu_01","name":"TaskCreate","input":{"subject":"Task A","description":"First task"}}]},"timestamp":"2026-01-28T10:00:00.000Z","uuid":"msg1"}
|
|
57
|
+
{"type":"assistant","message":{"content":[{"type":"tool_result","tool_use_id":"toolu_01","content":"Task created with ID: 1"}]},"timestamp":"2026-01-28T10:00:01.000Z","uuid":"msg2"}
|
|
58
|
+
{"type":"assistant","message":{"content":[{"type":"tool_use","id":"toolu_02","name":"TaskCreate","input":{"subject":"Task B","description":"Second task"}}]},"timestamp":"2026-01-28T10:00:02.000Z","uuid":"msg3"}
|
|
59
|
+
{"type":"assistant","message":{"content":[{"type":"tool_result","tool_use_id":"toolu_02","content":"Task created with ID: 2"}]},"timestamp":"2026-01-28T10:00:03.000Z","uuid":"msg4"}
|
|
60
|
+
{"type":"assistant","message":{"content":[{"type":"tool_use","id":"toolu_03","name":"TaskUpdate","input":{"taskId":"2","addBlockedBy":["1"]}}]},"timestamp":"2026-01-28T10:00:04.000Z","uuid":"msg5"}
|
|
61
|
+
{"type":"assistant","message":{"content":[{"type":"tool_result","tool_use_id":"toolu_03","content":"Task updated"}]},"timestamp":"2026-01-28T10:00:05.000Z","uuid":"msg6"}
|
|
62
|
+
`.trim();
|
|
63
|
+
const tasks = (0, parser_1.extractTasks)(withBlocking);
|
|
64
|
+
const taskB = tasks.find(t => t.subject === 'Task B');
|
|
65
|
+
expect(taskB?.blockedBy).toEqual(['1']);
|
|
66
|
+
});
|
|
67
|
+
it('should handle deleted tasks', () => {
|
|
68
|
+
const withDeleted = `
|
|
69
|
+
{"type":"assistant","message":{"content":[{"type":"tool_use","id":"toolu_01","name":"TaskCreate","input":{"subject":"To Delete","description":"This will be deleted"}}]},"timestamp":"2026-01-28T10:00:00.000Z","uuid":"msg1"}
|
|
70
|
+
{"type":"assistant","message":{"content":[{"type":"tool_result","tool_use_id":"toolu_01","content":"Task created with ID: 1"}]},"timestamp":"2026-01-28T10:00:01.000Z","uuid":"msg2"}
|
|
71
|
+
{"type":"assistant","message":{"content":[{"type":"tool_use","id":"toolu_02","name":"TaskUpdate","input":{"taskId":"1","status":"deleted"}}]},"timestamp":"2026-01-28T10:00:02.000Z","uuid":"msg3"}
|
|
72
|
+
{"type":"assistant","message":{"content":[{"type":"tool_result","tool_use_id":"toolu_02","content":"Task deleted"}]},"timestamp":"2026-01-28T10:00:03.000Z","uuid":"msg4"}
|
|
73
|
+
`.trim();
|
|
74
|
+
const tasks = (0, parser_1.extractTasks)(withDeleted);
|
|
75
|
+
// Deleted tasks should not be included
|
|
76
|
+
expect(tasks).toHaveLength(0);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=task-parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-parser.test.js","sourceRoot":"","sources":["../../src/__tests__/task-parser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ApiUsageStats } from './types';
|
|
2
|
+
export declare function fetchAnthropicUsage(adminApiKey: string, startDate: Date, endDate: Date): Promise<ApiUsageStats>;
|
|
3
|
+
export declare function fetchTodayUsage(adminApiKey: string): Promise<ApiUsageStats>;
|
|
4
|
+
export declare function fetchMonthUsage(adminApiKey: string): Promise<ApiUsageStats>;
|
|
5
|
+
//# sourceMappingURL=anthropic-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-usage.d.ts","sourceRoot":"","sources":["../src/anthropic-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,aAAa,EAAE,MAAM,SAAS,CAAC;AA6BhE,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,GACZ,OAAO,CAAC,aAAa,CAAC,CAoFxB;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAIjF;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAIjF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchAnthropicUsage = fetchAnthropicUsage;
|
|
4
|
+
exports.fetchTodayUsage = fetchTodayUsage;
|
|
5
|
+
exports.fetchMonthUsage = fetchMonthUsage;
|
|
6
|
+
// Approximate pricing per million tokens (USD) - update as needed
|
|
7
|
+
const PRICING = {
|
|
8
|
+
'claude-opus-4-5-20251101': { input: 15, output: 75, cacheWrite: 18.75, cacheRead: 1.5 },
|
|
9
|
+
'claude-sonnet-4-5-20251101': { input: 3, output: 15, cacheWrite: 3.75, cacheRead: 0.3 },
|
|
10
|
+
'claude-sonnet-4-20250514': { input: 3, output: 15, cacheWrite: 3.75, cacheRead: 0.3 },
|
|
11
|
+
'claude-3-5-sonnet-20241022': { input: 3, output: 15, cacheWrite: 3.75, cacheRead: 0.3 },
|
|
12
|
+
'claude-3-5-haiku-20241022': { input: 0.8, output: 4, cacheWrite: 1, cacheRead: 0.08 },
|
|
13
|
+
'claude-3-opus-20240229': { input: 15, output: 75, cacheWrite: 18.75, cacheRead: 1.5 },
|
|
14
|
+
'claude-3-sonnet-20240229': { input: 3, output: 15, cacheWrite: 3.75, cacheRead: 0.3 },
|
|
15
|
+
'claude-3-haiku-20240307': { input: 0.25, output: 1.25, cacheWrite: 0.3, cacheRead: 0.03 },
|
|
16
|
+
};
|
|
17
|
+
function getModelPricing(model) {
|
|
18
|
+
// Try exact match first
|
|
19
|
+
if (PRICING[model])
|
|
20
|
+
return PRICING[model];
|
|
21
|
+
// Try partial match (model names often have date suffixes)
|
|
22
|
+
for (const [key, value] of Object.entries(PRICING)) {
|
|
23
|
+
if (model.includes(key.split('-').slice(0, -1).join('-'))) {
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Default to Sonnet pricing as fallback
|
|
28
|
+
return { input: 3, output: 15, cacheWrite: 3.75, cacheRead: 0.3 };
|
|
29
|
+
}
|
|
30
|
+
async function fetchAnthropicUsage(adminApiKey, startDate, endDate) {
|
|
31
|
+
const stats = {
|
|
32
|
+
periodStart: startDate.toISOString(),
|
|
33
|
+
periodEnd: endDate.toISOString(),
|
|
34
|
+
totalInputTokens: 0,
|
|
35
|
+
totalOutputTokens: 0,
|
|
36
|
+
totalCacheCreationTokens: 0,
|
|
37
|
+
totalCacheReadTokens: 0,
|
|
38
|
+
byModel: {},
|
|
39
|
+
estimatedCostUsd: 0,
|
|
40
|
+
};
|
|
41
|
+
let hasMore = true;
|
|
42
|
+
let page;
|
|
43
|
+
while (hasMore) {
|
|
44
|
+
const url = new URL('https://api.anthropic.com/v1/organizations/usage_report/messages');
|
|
45
|
+
url.searchParams.set('starting_at', startDate.toISOString());
|
|
46
|
+
url.searchParams.set('ending_at', endDate.toISOString());
|
|
47
|
+
url.searchParams.set('bucket_width', '1d');
|
|
48
|
+
url.searchParams.set('group_by[]', 'model');
|
|
49
|
+
if (page) {
|
|
50
|
+
url.searchParams.set('page', page);
|
|
51
|
+
}
|
|
52
|
+
const response = await fetch(url.toString(), {
|
|
53
|
+
headers: {
|
|
54
|
+
'anthropic-version': '2023-06-01',
|
|
55
|
+
'x-api-key': adminApiKey,
|
|
56
|
+
'User-Agent': 'Companion/1.0.0',
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
const errorText = await response.text();
|
|
61
|
+
throw new Error(`Anthropic API error: ${response.status} - ${errorText}`);
|
|
62
|
+
}
|
|
63
|
+
const data = await response.json();
|
|
64
|
+
for (const bucket of data.data) {
|
|
65
|
+
const model = bucket.model || 'unknown';
|
|
66
|
+
const uncachedInput = bucket.uncached_input_tokens || 0;
|
|
67
|
+
const cacheCreation = bucket.cache_creation_input_tokens || 0;
|
|
68
|
+
const cacheRead = bucket.cache_read_input_tokens || 0;
|
|
69
|
+
const output = bucket.output_tokens || 0;
|
|
70
|
+
// Total input = uncached + cache creation (cache reads are "free" comparatively)
|
|
71
|
+
const totalInput = uncachedInput + cacheCreation;
|
|
72
|
+
stats.totalInputTokens += totalInput;
|
|
73
|
+
stats.totalOutputTokens += output;
|
|
74
|
+
stats.totalCacheCreationTokens += cacheCreation;
|
|
75
|
+
stats.totalCacheReadTokens += cacheRead;
|
|
76
|
+
if (!stats.byModel[model]) {
|
|
77
|
+
stats.byModel[model] = {
|
|
78
|
+
inputTokens: 0,
|
|
79
|
+
outputTokens: 0,
|
|
80
|
+
cacheCreationTokens: 0,
|
|
81
|
+
cacheReadTokens: 0,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
stats.byModel[model].inputTokens += totalInput;
|
|
85
|
+
stats.byModel[model].outputTokens += output;
|
|
86
|
+
stats.byModel[model].cacheCreationTokens += cacheCreation;
|
|
87
|
+
stats.byModel[model].cacheReadTokens += cacheRead;
|
|
88
|
+
// Calculate cost
|
|
89
|
+
const pricing = getModelPricing(model);
|
|
90
|
+
stats.estimatedCostUsd += (uncachedInput / 1_000_000) * pricing.input;
|
|
91
|
+
stats.estimatedCostUsd += (cacheCreation / 1_000_000) * pricing.cacheWrite;
|
|
92
|
+
stats.estimatedCostUsd += (cacheRead / 1_000_000) * pricing.cacheRead;
|
|
93
|
+
stats.estimatedCostUsd += (output / 1_000_000) * pricing.output;
|
|
94
|
+
}
|
|
95
|
+
hasMore = data.has_more;
|
|
96
|
+
page = data.next_page;
|
|
97
|
+
}
|
|
98
|
+
// Round cost to 2 decimal places
|
|
99
|
+
stats.estimatedCostUsd = Math.round(stats.estimatedCostUsd * 100) / 100;
|
|
100
|
+
return stats;
|
|
101
|
+
}
|
|
102
|
+
async function fetchTodayUsage(adminApiKey) {
|
|
103
|
+
const now = new Date();
|
|
104
|
+
const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
105
|
+
return fetchAnthropicUsage(adminApiKey, startOfDay, now);
|
|
106
|
+
}
|
|
107
|
+
async function fetchMonthUsage(adminApiKey) {
|
|
108
|
+
const now = new Date();
|
|
109
|
+
const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
110
|
+
return fetchAnthropicUsage(adminApiKey, startOfMonth, now);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=anthropic-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-usage.js","sourceRoot":"","sources":["../src/anthropic-usage.ts"],"names":[],"mappings":";;AA6BA,kDAwFC;AAED,0CAIC;AAED,0CAIC;AA/HD,kEAAkE;AAClE,MAAM,OAAO,GAA6F;IACxG,0BAA0B,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE;IACxF,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;IACxF,0BAA0B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;IACtF,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;IACxF,2BAA2B,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;IACtF,wBAAwB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE;IACtF,0BAA0B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;IACtF,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;CAC3F,CAAC;AAEF,SAAS,eAAe,CAAC,KAAa;IACpC,wBAAwB;IACxB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;IAE1C,2DAA2D;IAC3D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACpE,CAAC;AAEM,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,SAAe,EACf,OAAa;IAEb,MAAM,KAAK,GAAkB;QAC3B,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE;QACpC,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE;QAChC,gBAAgB,EAAE,CAAC;QACnB,iBAAiB,EAAE,CAAC;QACpB,wBAAwB,EAAE,CAAC;QAC3B,oBAAoB,EAAE,CAAC;QACvB,OAAO,EAAE,EAAE;QACX,gBAAgB,EAAE,CAAC;KACpB,CAAC;IAEF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,IAAwB,CAAC;IAE7B,OAAO,OAAO,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,kEAAkE,CAAC,CAAC;QACxF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC3C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC3C,OAAO,EAAE;gBACP,mBAAmB,EAAE,YAAY;gBACjC,WAAW,EAAE,WAAW;gBACxB,YAAY,EAAE,iBAAiB;aAChC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4B,CAAC;QAE7D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC;YACxC,MAAM,aAAa,GAAG,MAAM,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACxD,MAAM,aAAa,GAAG,MAAM,CAAC,2BAA2B,IAAI,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,uBAAuB,IAAI,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;YAEzC,iFAAiF;YACjF,MAAM,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;YAEjD,KAAK,CAAC,gBAAgB,IAAI,UAAU,CAAC;YACrC,KAAK,CAAC,iBAAiB,IAAI,MAAM,CAAC;YAClC,KAAK,CAAC,wBAAwB,IAAI,aAAa,CAAC;YAChD,KAAK,CAAC,oBAAoB,IAAI,SAAS,CAAC;YAExC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;oBACrB,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,mBAAmB,EAAE,CAAC;oBACtB,eAAe,EAAE,CAAC;iBACnB,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,IAAI,UAAU,CAAC;YAC/C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC;YAC5C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,mBAAmB,IAAI,aAAa,CAAC;YAC1D,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,eAAe,IAAI,SAAS,CAAC;YAElD,iBAAiB;YACjB,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACvC,KAAK,CAAC,gBAAgB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;YACtE,KAAK,CAAC,gBAAgB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAC3E,KAAK,CAAC,gBAAgB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;YACtE,KAAK,CAAC,gBAAgB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QAClE,CAAC;QAED,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAExE,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9E,OAAO,mBAAmB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IACpE,OAAO,mBAAmB,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface CertPaths {
|
|
2
|
+
certPath: string;
|
|
3
|
+
keyPath: string;
|
|
4
|
+
}
|
|
5
|
+
interface GeneratedCert {
|
|
6
|
+
cert: string;
|
|
7
|
+
key: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function ensureCertsDirectory(certsDir: string): void;
|
|
10
|
+
export declare function certsExist(certPath: string, keyPath: string): boolean;
|
|
11
|
+
export declare function generateSelfSignedCert(commonName?: string): GeneratedCert;
|
|
12
|
+
export declare function generateAndSaveCerts(certPath: string, keyPath: string): CertPaths;
|
|
13
|
+
export declare function getDefaultCertPaths(): CertPaths;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=cert-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cert-generator.d.ts","sourceRoot":"","sources":["../src/cert-generator.ts"],"names":[],"mappings":"AAIA,UAAU,SAAS;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAK3D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAErE;AAED,wBAAgB,sBAAsB,CACpC,UAAU,GAAE,MAAoB,GAC/B,aAAa,CA0Bf;AAiRD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAcjF;AAED,wBAAgB,mBAAmB,IAAI,SAAS,CAM/C"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ensureCertsDirectory = ensureCertsDirectory;
|
|
37
|
+
exports.certsExist = certsExist;
|
|
38
|
+
exports.generateSelfSignedCert = generateSelfSignedCert;
|
|
39
|
+
exports.generateAndSaveCerts = generateAndSaveCerts;
|
|
40
|
+
exports.getDefaultCertPaths = getDefaultCertPaths;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const crypto = __importStar(require("crypto"));
|
|
44
|
+
function ensureCertsDirectory(certsDir) {
|
|
45
|
+
if (!fs.existsSync(certsDir)) {
|
|
46
|
+
fs.mkdirSync(certsDir, { recursive: true, mode: 0o700 });
|
|
47
|
+
console.log(`Created certificates directory: ${certsDir}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function certsExist(certPath, keyPath) {
|
|
51
|
+
return fs.existsSync(certPath) && fs.existsSync(keyPath);
|
|
52
|
+
}
|
|
53
|
+
function generateSelfSignedCert(commonName = 'companion') {
|
|
54
|
+
// Generate RSA key pair
|
|
55
|
+
const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {
|
|
56
|
+
modulusLength: 2048,
|
|
57
|
+
publicKeyEncoding: { type: 'spki', format: 'pem' },
|
|
58
|
+
privateKeyEncoding: { type: 'pkcs8', format: 'pem' },
|
|
59
|
+
});
|
|
60
|
+
// Create self-signed certificate
|
|
61
|
+
// This is a simplified approach using Node's crypto module
|
|
62
|
+
// For production, you'd want to use a proper X.509 certificate library
|
|
63
|
+
const now = new Date();
|
|
64
|
+
const oneYear = 365 * 24 * 60 * 60 * 1000;
|
|
65
|
+
const notAfter = new Date(now.getTime() + oneYear);
|
|
66
|
+
// Build a minimal self-signed certificate structure
|
|
67
|
+
// Note: This creates a basic certificate. For more robust cert generation,
|
|
68
|
+
// consider using the 'selfsigned' or 'node-forge' packages
|
|
69
|
+
const cert = createMinimalCert(publicKey, privateKey, commonName, now, notAfter);
|
|
70
|
+
return {
|
|
71
|
+
cert,
|
|
72
|
+
key: privateKey,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function createMinimalCert(publicKey, privateKey, commonName, notBefore, notAfter) {
|
|
76
|
+
// Use crypto.X509Certificate if available (Node 15.6+)
|
|
77
|
+
// Otherwise, create a basic PEM structure
|
|
78
|
+
// For simplicity, we'll use a pre-formed certificate template approach
|
|
79
|
+
// This generates a working self-signed cert using Node's built-in crypto
|
|
80
|
+
const serialNumber = crypto.randomBytes(16).toString('hex');
|
|
81
|
+
// Create certificate using crypto module's certificate generation
|
|
82
|
+
// Note: This requires Node 15.6+ for full X509Certificate support
|
|
83
|
+
try {
|
|
84
|
+
// Generate certificate using crypto.createPrivateKey and sign
|
|
85
|
+
const cert = generateX509Cert(publicKey, privateKey, commonName, notBefore, notAfter, serialNumber);
|
|
86
|
+
return cert;
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
// Fallback: Generate a basic self-signed cert structure
|
|
90
|
+
console.warn('Using basic certificate generation');
|
|
91
|
+
return generateBasicCert(publicKey, privateKey, commonName);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function generateX509Cert(publicKey, privateKey, commonName, notBefore, notAfter, serialNumber) {
|
|
95
|
+
// Create certificate request and self-sign it
|
|
96
|
+
// This uses Node's newer crypto APIs
|
|
97
|
+
const certInfo = {
|
|
98
|
+
subject: { CN: commonName },
|
|
99
|
+
issuer: { CN: commonName },
|
|
100
|
+
serial: serialNumber,
|
|
101
|
+
notBefore,
|
|
102
|
+
notAfter,
|
|
103
|
+
publicKey,
|
|
104
|
+
};
|
|
105
|
+
// Sign the certificate data
|
|
106
|
+
const sign = crypto.createSign('SHA256');
|
|
107
|
+
sign.update(JSON.stringify(certInfo));
|
|
108
|
+
const signature = sign.sign(privateKey, 'base64');
|
|
109
|
+
// For a proper X.509 cert, we need ASN.1 encoding
|
|
110
|
+
// Use a simplified approach that creates a working cert
|
|
111
|
+
return createPemCertificate(publicKey, privateKey, commonName, notBefore, notAfter);
|
|
112
|
+
}
|
|
113
|
+
function createPemCertificate(publicKey, privateKey, commonName, notBefore, notAfter) {
|
|
114
|
+
// Generate a proper self-signed X.509 certificate
|
|
115
|
+
// Using OpenSSL-compatible format
|
|
116
|
+
const keyObj = crypto.createPrivateKey(privateKey);
|
|
117
|
+
const pubKeyObj = crypto.createPublicKey(publicKey);
|
|
118
|
+
// Create certificate using forge-style approach
|
|
119
|
+
// Since we can't easily create ASN.1 without external deps,
|
|
120
|
+
// we'll create a certificate that works with Node's TLS
|
|
121
|
+
// For the MVP, return the public key as the cert
|
|
122
|
+
// In production, use the 'selfsigned' npm package
|
|
123
|
+
// Actually create a proper cert using createCertificate from tls
|
|
124
|
+
const fakeCert = generateOpenSSLStyleCert(privateKey, commonName, notBefore, notAfter);
|
|
125
|
+
return fakeCert;
|
|
126
|
+
}
|
|
127
|
+
function generateOpenSSLStyleCert(privateKey, commonName, notBefore, notAfter) {
|
|
128
|
+
// Generate certificate data
|
|
129
|
+
const serial = crypto.randomBytes(8).toString('hex');
|
|
130
|
+
const keyObj = crypto.createPrivateKey(privateKey);
|
|
131
|
+
const pubKeyObj = crypto.createPublicKey(keyObj);
|
|
132
|
+
const publicKeyPem = pubKeyObj.export({ type: 'spki', format: 'pem' });
|
|
133
|
+
// Build basic ASN.1 TBSCertificate structure
|
|
134
|
+
// This is a simplified implementation
|
|
135
|
+
const tbsCert = buildTbsCertificate(publicKeyPem, commonName, serial, notBefore, notAfter);
|
|
136
|
+
// Sign the TBS certificate
|
|
137
|
+
const sign = crypto.createSign('SHA256');
|
|
138
|
+
sign.update(tbsCert);
|
|
139
|
+
const signature = sign.sign(keyObj);
|
|
140
|
+
// Combine into final certificate
|
|
141
|
+
const certDer = buildCertificateDer(tbsCert, signature);
|
|
142
|
+
const certPem = derToPem(certDer, 'CERTIFICATE');
|
|
143
|
+
return certPem;
|
|
144
|
+
}
|
|
145
|
+
function buildTbsCertificate(publicKeyPem, commonName, serial, notBefore, notAfter) {
|
|
146
|
+
// Build minimal ASN.1 DER structure for TBSCertificate
|
|
147
|
+
const version = Buffer.from([0xa0, 0x03, 0x02, 0x01, 0x02]); // Version 3
|
|
148
|
+
const serialNum = asn1Integer(Buffer.from(serial, 'hex'));
|
|
149
|
+
const signatureAlg = asn1Sequence([
|
|
150
|
+
asn1ObjectId([2, 16, 840, 1, 101, 3, 4, 2, 1]), // SHA256
|
|
151
|
+
asn1Null(),
|
|
152
|
+
]);
|
|
153
|
+
const issuer = buildName(commonName);
|
|
154
|
+
const validity = buildValidity(notBefore, notAfter);
|
|
155
|
+
const subject = buildName(commonName);
|
|
156
|
+
const subjectPublicKeyInfo = pemToDer(publicKeyPem.replace(/-----[^-]+-----/g, '').replace(/\s/g, ''));
|
|
157
|
+
return asn1Sequence([
|
|
158
|
+
version,
|
|
159
|
+
serialNum,
|
|
160
|
+
signatureAlg,
|
|
161
|
+
issuer,
|
|
162
|
+
validity,
|
|
163
|
+
subject,
|
|
164
|
+
subjectPublicKeyInfo,
|
|
165
|
+
]);
|
|
166
|
+
}
|
|
167
|
+
function buildCertificateDer(tbsCert, signature) {
|
|
168
|
+
const signatureAlg = asn1Sequence([
|
|
169
|
+
asn1ObjectId([1, 2, 840, 113549, 1, 1, 11]), // sha256WithRSAEncryption
|
|
170
|
+
asn1Null(),
|
|
171
|
+
]);
|
|
172
|
+
const signatureBits = asn1BitString(signature);
|
|
173
|
+
return asn1Sequence([tbsCert, signatureAlg, signatureBits]);
|
|
174
|
+
}
|
|
175
|
+
function buildName(cn) {
|
|
176
|
+
const cnOid = asn1ObjectId([2, 5, 4, 3]); // Common Name
|
|
177
|
+
const cnValue = asn1PrintableString(cn);
|
|
178
|
+
const rdn = asn1Set([asn1Sequence([cnOid, cnValue])]);
|
|
179
|
+
return asn1Sequence([rdn]);
|
|
180
|
+
}
|
|
181
|
+
function buildValidity(notBefore, notAfter) {
|
|
182
|
+
return asn1Sequence([
|
|
183
|
+
asn1UtcTime(notBefore),
|
|
184
|
+
asn1UtcTime(notAfter),
|
|
185
|
+
]);
|
|
186
|
+
}
|
|
187
|
+
// ASN.1 encoding helpers
|
|
188
|
+
function asn1Sequence(items) {
|
|
189
|
+
const content = Buffer.concat(items);
|
|
190
|
+
return asn1Tag(0x30, content);
|
|
191
|
+
}
|
|
192
|
+
function asn1Set(items) {
|
|
193
|
+
const content = Buffer.concat(items);
|
|
194
|
+
return asn1Tag(0x31, content);
|
|
195
|
+
}
|
|
196
|
+
function asn1Integer(value) {
|
|
197
|
+
// Add leading zero if high bit set
|
|
198
|
+
const needsPadding = value[0] & 0x80;
|
|
199
|
+
const content = needsPadding ? Buffer.concat([Buffer.from([0]), value]) : value;
|
|
200
|
+
return asn1Tag(0x02, content);
|
|
201
|
+
}
|
|
202
|
+
function asn1BitString(value) {
|
|
203
|
+
const content = Buffer.concat([Buffer.from([0]), value]); // 0 unused bits
|
|
204
|
+
return asn1Tag(0x03, content);
|
|
205
|
+
}
|
|
206
|
+
function asn1ObjectId(oid) {
|
|
207
|
+
const bytes = [];
|
|
208
|
+
bytes.push(oid[0] * 40 + oid[1]);
|
|
209
|
+
for (let i = 2; i < oid.length; i++) {
|
|
210
|
+
const val = oid[i];
|
|
211
|
+
if (val < 128) {
|
|
212
|
+
bytes.push(val);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
const parts = [];
|
|
216
|
+
let v = val;
|
|
217
|
+
while (v > 0) {
|
|
218
|
+
parts.unshift(v & 0x7f);
|
|
219
|
+
v >>= 7;
|
|
220
|
+
}
|
|
221
|
+
for (let j = 0; j < parts.length - 1; j++) {
|
|
222
|
+
parts[j] |= 0x80;
|
|
223
|
+
}
|
|
224
|
+
bytes.push(...parts);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return asn1Tag(0x06, Buffer.from(bytes));
|
|
228
|
+
}
|
|
229
|
+
function asn1Null() {
|
|
230
|
+
return Buffer.from([0x05, 0x00]);
|
|
231
|
+
}
|
|
232
|
+
function asn1PrintableString(str) {
|
|
233
|
+
return asn1Tag(0x13, Buffer.from(str, 'ascii'));
|
|
234
|
+
}
|
|
235
|
+
function asn1UtcTime(date) {
|
|
236
|
+
const str = date.getUTCFullYear().toString().slice(-2) +
|
|
237
|
+
(date.getUTCMonth() + 1).toString().padStart(2, '0') +
|
|
238
|
+
date.getUTCDate().toString().padStart(2, '0') +
|
|
239
|
+
date.getUTCHours().toString().padStart(2, '0') +
|
|
240
|
+
date.getUTCMinutes().toString().padStart(2, '0') +
|
|
241
|
+
date.getUTCSeconds().toString().padStart(2, '0') +
|
|
242
|
+
'Z';
|
|
243
|
+
return asn1Tag(0x17, Buffer.from(str, 'ascii'));
|
|
244
|
+
}
|
|
245
|
+
function asn1Tag(tag, content) {
|
|
246
|
+
const len = content.length;
|
|
247
|
+
let lenBytes;
|
|
248
|
+
if (len < 128) {
|
|
249
|
+
lenBytes = Buffer.from([len]);
|
|
250
|
+
}
|
|
251
|
+
else if (len < 256) {
|
|
252
|
+
lenBytes = Buffer.from([0x81, len]);
|
|
253
|
+
}
|
|
254
|
+
else if (len < 65536) {
|
|
255
|
+
lenBytes = Buffer.from([0x82, (len >> 8) & 0xff, len & 0xff]);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
throw new Error('Content too long');
|
|
259
|
+
}
|
|
260
|
+
return Buffer.concat([Buffer.from([tag]), lenBytes, content]);
|
|
261
|
+
}
|
|
262
|
+
function pemToDer(base64) {
|
|
263
|
+
return Buffer.from(base64, 'base64');
|
|
264
|
+
}
|
|
265
|
+
function derToPem(der, type) {
|
|
266
|
+
const base64 = der.toString('base64');
|
|
267
|
+
const lines = [];
|
|
268
|
+
for (let i = 0; i < base64.length; i += 64) {
|
|
269
|
+
lines.push(base64.slice(i, i + 64));
|
|
270
|
+
}
|
|
271
|
+
return `-----BEGIN ${type}-----\n${lines.join('\n')}\n-----END ${type}-----\n`;
|
|
272
|
+
}
|
|
273
|
+
function generateBasicCert(publicKey, privateKey, commonName) {
|
|
274
|
+
// Fallback: use the public key as a placeholder
|
|
275
|
+
// This won't work for actual TLS but prevents crashes
|
|
276
|
+
console.warn('Certificate generation fallback - TLS may not work properly');
|
|
277
|
+
console.warn('Consider installing the "selfsigned" package for proper cert generation');
|
|
278
|
+
return publicKey;
|
|
279
|
+
}
|
|
280
|
+
function generateAndSaveCerts(certPath, keyPath) {
|
|
281
|
+
const certsDir = path.dirname(certPath);
|
|
282
|
+
ensureCertsDirectory(certsDir);
|
|
283
|
+
console.log('Generating self-signed TLS certificates...');
|
|
284
|
+
const { cert, key } = generateSelfSignedCert('companion');
|
|
285
|
+
fs.writeFileSync(certPath, cert, { mode: 0o644 });
|
|
286
|
+
fs.writeFileSync(keyPath, key, { mode: 0o600 });
|
|
287
|
+
console.log(`Certificate saved to: ${certPath}`);
|
|
288
|
+
console.log(`Private key saved to: ${keyPath}`);
|
|
289
|
+
return { certPath, keyPath };
|
|
290
|
+
}
|
|
291
|
+
function getDefaultCertPaths() {
|
|
292
|
+
const certsDir = process.env.CERTS_DIR || '/etc/companion/certs';
|
|
293
|
+
return {
|
|
294
|
+
certPath: path.join(certsDir, 'cert.pem'),
|
|
295
|
+
keyPath: path.join(certsDir, 'key.pem'),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=cert-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cert-generator.js","sourceRoot":"","sources":["../src/cert-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA2BvC,wBAAgB,UAAU,IAAI,YAAY,CAgDzC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAkBrD"}
|