aismemory 0.7.2 → 0.7.3
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 +110 -0
- package/dist/__tests__/agent-key-mode.test.js +60 -0
- package/dist/__tests__/agent-key-mode.test.js.map +1 -1
- package/dist/__tests__/agent-load-persistence.test.js +25 -2
- package/dist/__tests__/agent-load-persistence.test.js.map +1 -1
- package/dist/__tests__/agentmemory.test.d.ts +1 -0
- package/dist/__tests__/agentmemory.test.js +73 -0
- package/dist/__tests__/agentmemory.test.js.map +1 -0
- package/dist/__tests__/ais-http.test.js +65 -45
- package/dist/__tests__/ais-http.test.js.map +1 -1
- package/dist/__tests__/auto-enroll-key.test.js +10 -6
- package/dist/__tests__/auto-enroll-key.test.js.map +1 -1
- package/dist/__tests__/beacon-contract.test.d.ts +1 -0
- package/dist/__tests__/beacon-contract.test.js +106 -0
- package/dist/__tests__/beacon-contract.test.js.map +1 -0
- package/dist/__tests__/credential-isolation.test.d.ts +1 -0
- package/dist/__tests__/credential-isolation.test.js +61 -0
- package/dist/__tests__/credential-isolation.test.js.map +1 -0
- package/dist/__tests__/credential-resolution.test.d.ts +1 -0
- package/dist/__tests__/credential-resolution.test.js +141 -0
- package/dist/__tests__/credential-resolution.test.js.map +1 -0
- package/dist/__tests__/doctor.test.js +250 -9
- package/dist/__tests__/doctor.test.js.map +1 -1
- package/dist/__tests__/ender-receipt-auth.test.d.ts +1 -0
- package/dist/__tests__/ender-receipt-auth.test.js +26 -0
- package/dist/__tests__/ender-receipt-auth.test.js.map +1 -0
- package/dist/__tests__/fixtures/beacon-contract.d.ts +66 -0
- package/dist/__tests__/fixtures/beacon-contract.js +72 -0
- package/dist/__tests__/fixtures/beacon-contract.js.map +1 -0
- package/dist/__tests__/list-all-agents.test.js +2 -0
- package/dist/__tests__/list-all-agents.test.js.map +1 -1
- package/dist/__tests__/lost-agent.test.d.ts +1 -0
- package/dist/__tests__/lost-agent.test.js +108 -0
- package/dist/__tests__/lost-agent.test.js.map +1 -0
- package/dist/__tests__/memory-write-failure.test.js +5 -1
- package/dist/__tests__/memory-write-failure.test.js.map +1 -1
- package/dist/__tests__/no-registered-keys-disk-bearer-fallback.test.d.ts +1 -0
- package/dist/__tests__/no-registered-keys-disk-bearer-fallback.test.js +207 -0
- package/dist/__tests__/no-registered-keys-disk-bearer-fallback.test.js.map +1 -0
- package/dist/__tests__/provisional-register-mcp-remember.test.js +5 -1
- package/dist/__tests__/provisional-register-mcp-remember.test.js.map +1 -1
- package/dist/__tests__/readme-tools-parity.test.d.ts +1 -0
- package/dist/__tests__/readme-tools-parity.test.js +64 -0
- package/dist/__tests__/readme-tools-parity.test.js.map +1 -0
- package/dist/__tests__/reconnect-survival-e2e.test.js +63 -1
- package/dist/__tests__/reconnect-survival-e2e.test.js.map +1 -1
- package/dist/__tests__/token-manager.test.js +12 -0
- package/dist/__tests__/token-manager.test.js.map +1 -1
- package/dist/__tests__/tool-args.test.js +129 -1
- package/dist/__tests__/tool-args.test.js.map +1 -1
- package/dist/__tests__/workspace-key-mode.test.d.ts +1 -0
- package/dist/__tests__/workspace-key-mode.test.js +264 -0
- package/dist/__tests__/workspace-key-mode.test.js.map +1 -0
- package/dist/agent-key-mode.d.ts +4 -2
- package/dist/agent-key-mode.js +68 -7
- package/dist/agent-key-mode.js.map +1 -1
- package/dist/ais-http.d.ts +1 -0
- package/dist/ais-http.js +67 -5
- package/dist/ais-http.js.map +1 -1
- package/dist/auth-staleness.d.ts +2 -0
- package/dist/auth-staleness.js +5 -0
- package/dist/auth-staleness.js.map +1 -1
- package/dist/auto-handoff.d.ts +1 -1
- package/dist/auto-handoff.js +5 -3
- package/dist/auto-handoff.js.map +1 -1
- package/dist/cli/doctor.d.ts +4 -0
- package/dist/cli/doctor.js +120 -8
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/enable-key-auth.js +4 -5
- package/dist/cli/enable-key-auth.js.map +1 -1
- package/dist/cli/orientation.d.ts +15 -0
- package/dist/cli/orientation.js +89 -0
- package/dist/cli/orientation.js.map +1 -0
- package/dist/harness-identity.d.ts +17 -0
- package/dist/harness-identity.js +105 -0
- package/dist/harness-identity.js.map +1 -0
- package/dist/hydration.d.ts +1 -1
- package/dist/hydration.js +3 -2
- package/dist/hydration.js.map +1 -1
- package/dist/index.js +364 -43
- package/dist/index.js.map +1 -1
- package/dist/key-auth.js +9 -9
- package/dist/key-auth.js.map +1 -1
- package/dist/oauth-credentials.d.ts +11 -0
- package/dist/oauth-credentials.js +31 -3
- package/dist/oauth-credentials.js.map +1 -1
- package/dist/token-manager.d.ts +3 -2
- package/dist/token-manager.js +7 -4
- package/dist/token-manager.js.map +1 -1
- package/dist/tool-args.d.ts +56 -0
- package/dist/tool-args.js +85 -0
- package/dist/tool-args.js.map +1 -1
- package/dist/workspace-key-mode.d.ts +40 -0
- package/dist/workspace-key-mode.js +258 -0
- package/dist/workspace-key-mode.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the workspace key auth mode module (CORBOT-3103ED88).
|
|
3
|
+
*
|
|
4
|
+
* Covers:
|
|
5
|
+
* - loadWorkspaceKeyConfig(): env parsing, fatal-error cases, prefix
|
|
6
|
+
* validation, whitespace trimming.
|
|
7
|
+
* - dispatchToolWorkspaceKeyMode(): HTTP requests send x-workspace-key
|
|
8
|
+
* and no Authorization header; in-scope tools call expected routes;
|
|
9
|
+
* agent_load switches the active agent or throws AgentNotGrantedError;
|
|
10
|
+
* handoff is out of scope; unknown tools return the sentinel.
|
|
11
|
+
*/
|
|
12
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
13
|
+
import { AgentNotGrantedError, dispatchToolWorkspaceKeyMode, loadWorkspaceKeyConfig, UNKNOWN_TOOL_WORKSPACE_KEY_MODE, WorkspaceKeyConfigError, } from '../workspace-key-mode.js';
|
|
14
|
+
import { OutOfScopeToolError } from '../agent-key-mode.js';
|
|
15
|
+
const AIS_URL = 'https://ais.example.test';
|
|
16
|
+
function jsonResponse(status, body) {
|
|
17
|
+
return new Response(JSON.stringify(body), {
|
|
18
|
+
status,
|
|
19
|
+
headers: { 'content-type': 'application/json' },
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// loadWorkspaceKeyConfig
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
describe('loadWorkspaceKeyConfig', () => {
|
|
26
|
+
it('returns null when AIS_WORKSPACE_KEY is unset', () => {
|
|
27
|
+
expect(loadWorkspaceKeyConfig({})).toBeNull();
|
|
28
|
+
});
|
|
29
|
+
it('returns the config when both AIS_WORKSPACE_KEY and AIS_AGENT_ID are set', () => {
|
|
30
|
+
const config = loadWorkspaceKeyConfig({
|
|
31
|
+
AIS_WORKSPACE_KEY: 'ais_wk_test123',
|
|
32
|
+
AIS_AGENT_ID: 'agent-1',
|
|
33
|
+
});
|
|
34
|
+
expect(config).toEqual({ workspaceKey: 'ais_wk_test123', agentId: 'agent-1' });
|
|
35
|
+
});
|
|
36
|
+
it('throws WorkspaceKeyConfigError when AIS_WORKSPACE_KEY is set without AIS_AGENT_ID', () => {
|
|
37
|
+
expect(() => loadWorkspaceKeyConfig({ AIS_WORKSPACE_KEY: 'ais_wk_test123' })).toThrow(WorkspaceKeyConfigError);
|
|
38
|
+
expect(() => loadWorkspaceKeyConfig({ AIS_WORKSPACE_KEY: 'ais_wk_test123' })).toThrow(/AIS_AGENT_ID is missing/);
|
|
39
|
+
});
|
|
40
|
+
it('throws (never falls through) when AIS_WORKSPACE_KEY is set but empty', () => {
|
|
41
|
+
expect(() => loadWorkspaceKeyConfig({ AIS_WORKSPACE_KEY: '', AIS_AGENT_ID: 'agent-1' })).toThrow(WorkspaceKeyConfigError);
|
|
42
|
+
expect(() => loadWorkspaceKeyConfig({ AIS_WORKSPACE_KEY: ' ', AIS_AGENT_ID: 'agent-1' })).toThrow(/empty \(or whitespace-only\)/);
|
|
43
|
+
expect(() => loadWorkspaceKeyConfig({ AIS_WORKSPACE_KEY: '\n' })).toThrow(/Unset the variable to use the device flow/);
|
|
44
|
+
});
|
|
45
|
+
it('trims a trailing newline from the key (CI secret injection)', () => {
|
|
46
|
+
const config = loadWorkspaceKeyConfig({
|
|
47
|
+
AIS_WORKSPACE_KEY: 'ais_wk_test123\n',
|
|
48
|
+
AIS_AGENT_ID: 'agent-1',
|
|
49
|
+
});
|
|
50
|
+
expect(config).toEqual({ workspaceKey: 'ais_wk_test123', agentId: 'agent-1' });
|
|
51
|
+
});
|
|
52
|
+
it('trims AIS_AGENT_ID', () => {
|
|
53
|
+
const config = loadWorkspaceKeyConfig({
|
|
54
|
+
AIS_WORKSPACE_KEY: 'ais_wk_test123',
|
|
55
|
+
AIS_AGENT_ID: ' agent-1\n',
|
|
56
|
+
});
|
|
57
|
+
expect(config).toEqual({ workspaceKey: 'ais_wk_test123', agentId: 'agent-1' });
|
|
58
|
+
});
|
|
59
|
+
it('treats a whitespace-only AIS_AGENT_ID as missing', () => {
|
|
60
|
+
expect(() => loadWorkspaceKeyConfig({ AIS_WORKSPACE_KEY: 'ais_wk_test123', AIS_AGENT_ID: ' ' })).toThrow(/AIS_AGENT_ID is missing/);
|
|
61
|
+
});
|
|
62
|
+
it('rejects keys without the ais_wk_ prefix', () => {
|
|
63
|
+
expect(() => loadWorkspaceKeyConfig({ AIS_WORKSPACE_KEY: 'ais_ak_agent_key', AIS_AGENT_ID: 'agent-1' })).toThrow(WorkspaceKeyConfigError);
|
|
64
|
+
expect(() => loadWorkspaceKeyConfig({ AIS_WORKSPACE_KEY: 'sk_service_key_123', AIS_AGENT_ID: 'agent-1' })).toThrow(/expected the ais_wk_ prefix/);
|
|
65
|
+
expect(() => loadWorkspaceKeyConfig({ AIS_WORKSPACE_KEY: 'not-a-key', AIS_AGENT_ID: 'agent-1' })).toThrow(/Agent API keys.*go in AIS_AGENT_API_KEY/);
|
|
66
|
+
});
|
|
67
|
+
it('returns config even when AIS_AGENT_API_KEY is also set (workspace key takes precedence)', () => {
|
|
68
|
+
const config = loadWorkspaceKeyConfig({
|
|
69
|
+
AIS_WORKSPACE_KEY: 'ais_wk_test123',
|
|
70
|
+
AIS_AGENT_API_KEY: 'ais_ak_test456',
|
|
71
|
+
AIS_AGENT_ID: 'agent-1',
|
|
72
|
+
});
|
|
73
|
+
expect(config).toEqual({ workspaceKey: 'ais_wk_test123', agentId: 'agent-1' });
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// dispatchToolWorkspaceKeyMode -- in-scope tools
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
describe('dispatchToolWorkspaceKeyMode -- in-scope tools send x-workspace-key header only', () => {
|
|
80
|
+
const config = { workspaceKey: 'ais_wk_scoped', agentId: 'agent-42' };
|
|
81
|
+
it('remember: POSTs to /v1/agents/:id/memory with x-workspace-key and no Authorization', async () => {
|
|
82
|
+
const fetchMock = vi.fn(async (_url, init) => {
|
|
83
|
+
const headers = init?.headers;
|
|
84
|
+
expect(headers['x-workspace-key']).toBe('ais_wk_scoped');
|
|
85
|
+
expect(headers['Authorization']).toBeUndefined();
|
|
86
|
+
expect(headers['authorization']).toBeUndefined();
|
|
87
|
+
return jsonResponse(200, { success: true, data: { id: 'mem-1' } });
|
|
88
|
+
});
|
|
89
|
+
const result = await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'remember', { content: 'a fact', type: 'fact' }, fetchMock);
|
|
90
|
+
expect(fetchMock).toHaveBeenCalledTimes(1);
|
|
91
|
+
const [url] = fetchMock.mock.calls[0];
|
|
92
|
+
expect(url).toBe(`${AIS_URL}/v1/agents/agent-42/memory`);
|
|
93
|
+
expect(result).toEqual({ success: true, data: { id: 'mem-1' } });
|
|
94
|
+
});
|
|
95
|
+
it('recall: GETs /v1/agents/:id/memory with the workspace key header', async () => {
|
|
96
|
+
const fetchMock = vi.fn(async (_url, init) => {
|
|
97
|
+
const headers = init?.headers;
|
|
98
|
+
expect(headers['x-workspace-key']).toBe('ais_wk_scoped');
|
|
99
|
+
expect(headers['Authorization']).toBeUndefined();
|
|
100
|
+
return jsonResponse(200, { success: true, data: { memories: [] } });
|
|
101
|
+
});
|
|
102
|
+
await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'recall', { query: 'test' }, fetchMock);
|
|
103
|
+
const [url] = fetchMock.mock.calls[0];
|
|
104
|
+
expect(String(url)).toContain('/v1/agents/agent-42/memory?query=test');
|
|
105
|
+
});
|
|
106
|
+
it('full_context: GETs /v1/agents/:id/full-context', async () => {
|
|
107
|
+
const fetchMock = vi.fn(async (_url, _init) => jsonResponse(200, { success: true, data: {} }));
|
|
108
|
+
await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'full_context', {}, fetchMock);
|
|
109
|
+
const [url] = fetchMock.mock.calls[0];
|
|
110
|
+
expect(url).toBe(`${AIS_URL}/v1/agents/agent-42/full-context`);
|
|
111
|
+
});
|
|
112
|
+
it('dream: POSTs /v1/agents/:id/dream', async () => {
|
|
113
|
+
const fetchMock = vi.fn(async (_url, _init) => jsonResponse(200, { success: true, data: {} }));
|
|
114
|
+
await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'dream', {}, fetchMock);
|
|
115
|
+
const [url, init] = fetchMock.mock.calls[0];
|
|
116
|
+
expect(url).toBe(`${AIS_URL}/v1/agents/agent-42/dream`);
|
|
117
|
+
expect(init.method).toBe('POST');
|
|
118
|
+
});
|
|
119
|
+
it('whoami: answers from AIS_AGENT_ID and probes an allowed route', async () => {
|
|
120
|
+
const calledPaths = [];
|
|
121
|
+
const fetchMock = vi.fn(async (url) => {
|
|
122
|
+
calledPaths.push(String(url));
|
|
123
|
+
return jsonResponse(200, { success: true, data: { memories: [] } });
|
|
124
|
+
});
|
|
125
|
+
const result = await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'whoami', {}, fetchMock);
|
|
126
|
+
expect(calledPaths).toHaveLength(1);
|
|
127
|
+
expect(calledPaths[0]).toContain('/v1/agents/agent-42/memory?limit=1');
|
|
128
|
+
expect(result).toMatchObject({
|
|
129
|
+
success: true,
|
|
130
|
+
data: { agentId: 'agent-42', authMode: 'workspace-key', keyValid: true },
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
it('a key loaded from env with a trailing newline reaches the header trimmed', async () => {
|
|
134
|
+
const loaded = loadWorkspaceKeyConfig({
|
|
135
|
+
AIS_WORKSPACE_KEY: 'ais_wk_from_ci\n',
|
|
136
|
+
AIS_AGENT_ID: 'agent-42\n',
|
|
137
|
+
});
|
|
138
|
+
expect(loaded).not.toBeNull();
|
|
139
|
+
const fetchMock = vi.fn(async (_url, init) => {
|
|
140
|
+
const headers = init?.headers;
|
|
141
|
+
expect(headers['x-workspace-key']).toBe('ais_wk_from_ci');
|
|
142
|
+
return jsonResponse(200, { success: true, data: { id: 'mem-1' } });
|
|
143
|
+
});
|
|
144
|
+
await dispatchToolWorkspaceKeyMode(AIS_URL, loaded, 'remember', { content: 'x' }, fetchMock);
|
|
145
|
+
expect(fetchMock).toHaveBeenCalledTimes(1);
|
|
146
|
+
const [url] = fetchMock.mock.calls[0];
|
|
147
|
+
expect(url).toBe(`${AIS_URL}/v1/agents/agent-42/memory`);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
// dispatchToolWorkspaceKeyMode -- goal tools (CORBOT-721e9a8b, L4)
|
|
152
|
+
// ---------------------------------------------------------------------------
|
|
153
|
+
describe('dispatchToolWorkspaceKeyMode -- goal tools', () => {
|
|
154
|
+
const config = { workspaceKey: 'ais_wk_scoped', agentId: 'agent-42' };
|
|
155
|
+
it('goal_create: POSTs to /v1/agents/:id/goals with the workspace key header', async () => {
|
|
156
|
+
const fetchMock = vi.fn(async (_url, init) => {
|
|
157
|
+
const headers = init?.headers;
|
|
158
|
+
expect(headers['x-workspace-key']).toBe('ais_wk_scoped');
|
|
159
|
+
return jsonResponse(201, { success: true, data: { id: 'goal-1', title: 'Ship it', status: 'draft' } });
|
|
160
|
+
});
|
|
161
|
+
const result = await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'goal_create', { title: 'Ship it', description: 'Ship the thing' }, fetchMock);
|
|
162
|
+
const [url, init] = fetchMock.mock.calls[0];
|
|
163
|
+
expect(url).toBe(`${AIS_URL}/v1/agents/agent-42/goals`);
|
|
164
|
+
expect(init.method).toBe('POST');
|
|
165
|
+
expect(result).toEqual({ success: true, data: { id: 'goal-1', title: 'Ship it', status: 'draft' } });
|
|
166
|
+
});
|
|
167
|
+
it('goal_list: GETs /v1/agents/:id/goals', async () => {
|
|
168
|
+
const fetchMock = vi.fn(async (_url) => jsonResponse(200, { success: true, data: { items: [], pagination: { page: 1, limit: 20 } } }));
|
|
169
|
+
await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'goal_list', {}, fetchMock);
|
|
170
|
+
const [url] = fetchMock.mock.calls[0];
|
|
171
|
+
expect(String(url)).toBe(`${AIS_URL}/v1/agents/agent-42/goals?limit=20`);
|
|
172
|
+
});
|
|
173
|
+
it('goal_update_progress: PATCHes /v1/agents/:id/goals/:goalId', async () => {
|
|
174
|
+
const goalId = '22222222-2222-2222-2222-222222222222';
|
|
175
|
+
const fetchMock = vi.fn(async (_url, _init) => jsonResponse(200, { success: true, data: { id: goalId, progress: 75 } }));
|
|
176
|
+
const result = await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'goal_update_progress', { goalId, progress: 75 }, fetchMock);
|
|
177
|
+
const [url, init] = fetchMock.mock.calls[0];
|
|
178
|
+
expect(url).toBe(`${AIS_URL}/v1/agents/agent-42/goals/${goalId}`);
|
|
179
|
+
expect(init.method).toBe('PATCH');
|
|
180
|
+
expect(JSON.parse(init.body)).toEqual({ progress: 75 });
|
|
181
|
+
expect(result).toEqual({ success: true, data: { id: goalId, progress: 75 } });
|
|
182
|
+
});
|
|
183
|
+
it('goal_complete: POSTs /v1/agents/:id/goals/:goalId/complete', async () => {
|
|
184
|
+
const goalId = '33333333-3333-3333-3333-333333333333';
|
|
185
|
+
const fetchMock = vi.fn(async (_url, _init) => jsonResponse(200, { success: true, data: { id: goalId, status: 'completed' } }));
|
|
186
|
+
const result = await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'goal_complete', { goalId, success: true }, fetchMock);
|
|
187
|
+
const [url, init] = fetchMock.mock.calls[0];
|
|
188
|
+
expect(url).toBe(`${AIS_URL}/v1/agents/agent-42/goals/${goalId}/complete`);
|
|
189
|
+
expect(init.method).toBe('POST');
|
|
190
|
+
expect(result).toEqual({ success: true, data: { id: goalId, status: 'completed' } });
|
|
191
|
+
});
|
|
192
|
+
it('inbox_ack is out of scope for workspace keys (no inbox route in the allowlist)', async () => {
|
|
193
|
+
const fetchMock = vi.fn();
|
|
194
|
+
const result = await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'inbox_ack', { messageIds: ['11111111-1111-1111-1111-111111111111'] }, fetchMock);
|
|
195
|
+
expect(result).toBe(UNKNOWN_TOOL_WORKSPACE_KEY_MODE);
|
|
196
|
+
expect(fetchMock).not.toHaveBeenCalled();
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
// ---------------------------------------------------------------------------
|
|
200
|
+
// dispatchToolWorkspaceKeyMode -- agent_load
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
describe('dispatchToolWorkspaceKeyMode -- agent_load switches active agent', () => {
|
|
203
|
+
const config = { workspaceKey: 'ais_wk_scoped', agentId: 'agent-42' };
|
|
204
|
+
it('returns AgentSwitchResult on successful probe of target agent', async () => {
|
|
205
|
+
const calledUrls = [];
|
|
206
|
+
const fetchMock = vi.fn(async (url) => {
|
|
207
|
+
calledUrls.push(String(url));
|
|
208
|
+
return jsonResponse(200, { success: true, data: { memories: [] } });
|
|
209
|
+
});
|
|
210
|
+
const result = await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'agent_load', { query: 'agent-99' }, fetchMock);
|
|
211
|
+
expect(result).toEqual({ switched: true, agentId: 'agent-99' });
|
|
212
|
+
expect(calledUrls[0]).toContain('/v1/agents/agent-99/memory?limit=1');
|
|
213
|
+
});
|
|
214
|
+
it('throws AgentNotGrantedError on 403 from target agent probe', async () => {
|
|
215
|
+
const fetchMock = vi.fn(async () => jsonResponse(403, {
|
|
216
|
+
success: false,
|
|
217
|
+
error: { code: 'AGENT_NOT_GRANTED', message: 'Workspace key does not have access to this agent' },
|
|
218
|
+
}));
|
|
219
|
+
await expect(dispatchToolWorkspaceKeyMode(AIS_URL, config, 'agent_load', { query: 'agent-forbidden' }, fetchMock)).rejects.toThrow(AgentNotGrantedError);
|
|
220
|
+
await expect(dispatchToolWorkspaceKeyMode(AIS_URL, config, 'agent_load', { query: 'agent-forbidden' }, fetchMock)).rejects.toThrow(/does not have a grant for agent/);
|
|
221
|
+
});
|
|
222
|
+
it('re-throws non-403 errors from agent probe (e.g. 500)', async () => {
|
|
223
|
+
const fetchMock = vi.fn(async () => jsonResponse(500, { success: false, error: { message: 'Internal server error' } }));
|
|
224
|
+
await expect(dispatchToolWorkspaceKeyMode(AIS_URL, config, 'agent_load', { query: 'agent-99' }, fetchMock)).rejects.toThrow(/500/);
|
|
225
|
+
// Must NOT be AgentNotGrantedError
|
|
226
|
+
await expect(dispatchToolWorkspaceKeyMode(AIS_URL, config, 'agent_load', { query: 'agent-99' }, fetchMock)).rejects.not.toBeInstanceOf(AgentNotGrantedError);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
// ---------------------------------------------------------------------------
|
|
230
|
+
// dispatchToolWorkspaceKeyMode -- out-of-scope tools
|
|
231
|
+
// ---------------------------------------------------------------------------
|
|
232
|
+
describe('dispatchToolWorkspaceKeyMode -- out-of-scope tools fail honestly', () => {
|
|
233
|
+
const config = { workspaceKey: 'ais_wk_scoped', agentId: 'agent-42' };
|
|
234
|
+
it('handoff throws OutOfScopeToolError without calling fetch', async () => {
|
|
235
|
+
const fetchMock = vi.fn();
|
|
236
|
+
await expect(dispatchToolWorkspaceKeyMode(AIS_URL, config, 'handoff', {}, fetchMock)).rejects.toThrow(OutOfScopeToolError);
|
|
237
|
+
await expect(dispatchToolWorkspaceKeyMode(AIS_URL, config, 'handoff', {}, fetchMock)).rejects.toThrow(/not available with agent API key auth/);
|
|
238
|
+
expect(fetchMock).not.toHaveBeenCalled();
|
|
239
|
+
});
|
|
240
|
+
it('unknown tool name returns the UNKNOWN_TOOL_WORKSPACE_KEY_MODE sentinel', async () => {
|
|
241
|
+
const fetchMock = vi.fn();
|
|
242
|
+
const result = await dispatchToolWorkspaceKeyMode(AIS_URL, config, 'not_a_real_tool', {}, fetchMock);
|
|
243
|
+
expect(result).toBe(UNKNOWN_TOOL_WORKSPACE_KEY_MODE);
|
|
244
|
+
expect(fetchMock).not.toHaveBeenCalled();
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
// ---------------------------------------------------------------------------
|
|
248
|
+
// Server rejections
|
|
249
|
+
// ---------------------------------------------------------------------------
|
|
250
|
+
describe('dispatchToolWorkspaceKeyMode -- server rejections surface honestly', () => {
|
|
251
|
+
const config = { workspaceKey: 'ais_wk_revoked', agentId: 'agent-42' };
|
|
252
|
+
it('403 on a memory tool is surfaced as a thrown error', async () => {
|
|
253
|
+
const fetchMock = vi.fn(async () => jsonResponse(403, {
|
|
254
|
+
success: false,
|
|
255
|
+
error: { code: 'FORBIDDEN', message: 'Workspace key does not authorize access to this agent' },
|
|
256
|
+
}));
|
|
257
|
+
await expect(dispatchToolWorkspaceKeyMode(AIS_URL, config, 'recall', { query: 'x' }, fetchMock)).rejects.toThrow(/403/);
|
|
258
|
+
});
|
|
259
|
+
it('401 (invalid or expired key) is surfaced as a thrown error', async () => {
|
|
260
|
+
const fetchMock = vi.fn(async () => jsonResponse(401, { success: false, error: { code: 'UNAUTHORIZED', message: 'Invalid or expired workspace key' } }));
|
|
261
|
+
await expect(dispatchToolWorkspaceKeyMode(AIS_URL, config, 'remember', { content: 'x' }, fetchMock)).rejects.toThrow(/401/);
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
//# sourceMappingURL=workspace-key-mode.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-key-mode.test.js","sourceRoot":"","sources":["../../src/__tests__/workspace-key-mode.test.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-key-mode.d.ts
CHANGED
|
@@ -7,9 +7,10 @@ export declare class AgentApiKeyConfigError extends Error {
|
|
|
7
7
|
constructor(message: string);
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* Read
|
|
10
|
+
* Read AIS_API_KEY (preferred) or the legacy AIS_AGENT_API_KEY alias.
|
|
11
|
+
* Only scoped ais_ak_ keys are accepted; never read AIS_SERVICE_KEY.
|
|
11
12
|
*
|
|
12
|
-
* Returns null when
|
|
13
|
+
* Returns null when both key variables are unset — the caller falls through to
|
|
13
14
|
* the device-flow/DID-key path. Throws AgentApiKeyConfigError when the key
|
|
14
15
|
* is set but AIS_AGENT_ID is missing; the caller must print the message to
|
|
15
16
|
* stderr and exit nonzero, and must NEVER fall back to the device flow or
|
|
@@ -20,6 +21,7 @@ export declare function loadAgentApiKeyConfig(env?: Record<string, string | unde
|
|
|
20
21
|
type FetchImpl = typeof globalThis.fetch;
|
|
21
22
|
export declare function aisKeyPost(aisUrl: string, path: string, apiKey: string, body: unknown, fetchImpl?: FetchImpl): Promise<unknown>;
|
|
22
23
|
export declare function aisKeyGet(aisUrl: string, path: string, apiKey: string, fetchImpl?: FetchImpl): Promise<unknown>;
|
|
24
|
+
export declare function aisKeyPatch(aisUrl: string, path: string, apiKey: string, body: unknown, fetchImpl?: FetchImpl): Promise<unknown>;
|
|
23
25
|
/** Sentinel returned for a tool name this dispatcher doesn't recognize. */
|
|
24
26
|
export declare const UNKNOWN_TOOL_KEY_MODE: unique symbol;
|
|
25
27
|
/**
|
package/dist/agent-key-mode.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { AisHttpError } from './ais-http-error.js';
|
|
23
23
|
import { emitTelemetry } from './telemetry.js';
|
|
24
|
-
import { parseEmptyToolArgs, parseRecallArgs, parseFullContextArgs, parseRememberArgs, parseInboxSendArgs, parseInboxReadArgs, } from './tool-args.js';
|
|
24
|
+
import { parseEmptyToolArgs, parseRecallArgs, parseFullContextArgs, parseRememberArgs, parseInboxSendArgs, parseInboxReadArgs, parseGoalCreateArgs, parseGoalListArgs, parseGoalUpdateProgressArgs, parseGoalCompleteArgs, parseInboxAckArgs, } from './tool-args.js';
|
|
25
25
|
import { readInboxAndMaybeAck } from './inbox-client.js';
|
|
26
26
|
/** Thrown by loadAgentApiKeyConfig when AIS_AGENT_API_KEY is set without AIS_AGENT_ID. */
|
|
27
27
|
export class AgentApiKeyConfigError extends Error {
|
|
@@ -31,9 +31,10 @@ export class AgentApiKeyConfigError extends Error {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
* Read
|
|
34
|
+
* Read AIS_API_KEY (preferred) or the legacy AIS_AGENT_API_KEY alias.
|
|
35
|
+
* Only scoped ais_ak_ keys are accepted; never read AIS_SERVICE_KEY.
|
|
35
36
|
*
|
|
36
|
-
* Returns null when
|
|
37
|
+
* Returns null when both key variables are unset — the caller falls through to
|
|
37
38
|
* the device-flow/DID-key path. Throws AgentApiKeyConfigError when the key
|
|
38
39
|
* is set but AIS_AGENT_ID is missing; the caller must print the message to
|
|
39
40
|
* stderr and exit nonzero, and must NEVER fall back to the device flow or
|
|
@@ -41,7 +42,8 @@ export class AgentApiKeyConfigError extends Error {
|
|
|
41
42
|
* mode exists to kill).
|
|
42
43
|
*/
|
|
43
44
|
export function loadAgentApiKeyConfig(env = process.env) {
|
|
44
|
-
const
|
|
45
|
+
const keyName = env['AIS_API_KEY'] !== undefined ? 'AIS_API_KEY' : 'AIS_AGENT_API_KEY';
|
|
46
|
+
const rawApiKey = env[keyName];
|
|
45
47
|
// Only a truly ABSENT variable selects the device-flow path. A present-but-
|
|
46
48
|
// empty value is a misconfiguration (e.g. a CI secret that failed to
|
|
47
49
|
// resolve) and must fail fast: silently falling through to the device flow
|
|
@@ -53,19 +55,19 @@ export function loadAgentApiKeyConfig(env = process.env) {
|
|
|
53
55
|
// header characters, or the server answers an opaque 401).
|
|
54
56
|
const apiKey = rawApiKey.trim();
|
|
55
57
|
if (apiKey === '') {
|
|
56
|
-
throw new AgentApiKeyConfigError(
|
|
58
|
+
throw new AgentApiKeyConfigError(`${keyName} is set but empty (or whitespace-only).\n` +
|
|
57
59
|
'Refusing to start: silently falling back to the device flow could ' +
|
|
58
60
|
'create a duplicate provisional agent.\n' +
|
|
59
61
|
'Unset the variable to use the device flow, or set a real ais_ak_ key.');
|
|
60
62
|
}
|
|
61
63
|
if (!apiKey.startsWith('ais_ak_')) {
|
|
62
|
-
throw new AgentApiKeyConfigError(
|
|
64
|
+
throw new AgentApiKeyConfigError(`${keyName} does not look like an agent API key — expected the ` +
|
|
63
65
|
'ais_ak_ prefix. Service keys and JWTs do not work here; mint an ' +
|
|
64
66
|
'agent-scoped API key for this agent and use that.');
|
|
65
67
|
}
|
|
66
68
|
const agentId = env['AIS_AGENT_ID']?.trim();
|
|
67
69
|
if (!agentId) {
|
|
68
|
-
throw new AgentApiKeyConfigError(
|
|
70
|
+
throw new AgentApiKeyConfigError(`${keyName} is set but AIS_AGENT_ID is missing.\n` +
|
|
69
71
|
'Agent API keys are scoped to exactly one agent — set AIS_AGENT_ID to the id ' +
|
|
70
72
|
'of the agent this key belongs to (the same agent it was minted for).\n' +
|
|
71
73
|
'Refusing to start: falling back to the device flow or creating a new ' +
|
|
@@ -112,6 +114,26 @@ export async function aisKeyGet(aisUrl, path, apiKey, fetchImpl = globalThis.fet
|
|
|
112
114
|
}
|
|
113
115
|
return data;
|
|
114
116
|
}
|
|
117
|
+
export async function aisKeyPatch(aisUrl, path, apiKey, body, fetchImpl = globalThis.fetch) {
|
|
118
|
+
const headers = {
|
|
119
|
+
'Content-Type': 'application/json',
|
|
120
|
+
'x-agent-api-key': apiKey,
|
|
121
|
+
};
|
|
122
|
+
let res;
|
|
123
|
+
try {
|
|
124
|
+
res = await fetchImpl(`${aisUrl}${path}`, { method: 'PATCH', headers, body: JSON.stringify(body) });
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
emitTelemetry({ event: 'ais.http.failure', path, error: err instanceof Error ? err.message : String(err) });
|
|
128
|
+
throw err;
|
|
129
|
+
}
|
|
130
|
+
const data = await readJson(res);
|
|
131
|
+
if (!res.ok) {
|
|
132
|
+
emitTelemetry({ event: 'ais.http.failure', path, httpStatus: res.status, error: `HTTP ${res.status}` });
|
|
133
|
+
throw new AisHttpError(res.status, path, data);
|
|
134
|
+
}
|
|
135
|
+
return data;
|
|
136
|
+
}
|
|
115
137
|
// ── Scoped tool dispatch ─────────────────────────────────────────────────
|
|
116
138
|
/** Sentinel returned for a tool name this dispatcher doesn't recognize. */
|
|
117
139
|
export const UNKNOWN_TOOL_KEY_MODE = Symbol('unknown-tool-key-mode');
|
|
@@ -205,6 +227,45 @@ export async function dispatchToolKeyMode(aisUrl, config, name, rawArgs, fetchIm
|
|
|
205
227
|
params.set('unreadOnly', String(args.unreadOnly));
|
|
206
228
|
return readInboxAndMaybeAck(args, () => aisKeyGet(aisUrl, `/v1/agents/${agentId}/inbox?${params}`, apiKey, fetchImpl), (messageIds) => aisKeyPost(aisUrl, `/v1/agents/${agentId}/inbox/ack`, apiKey, { messageIds }, fetchImpl));
|
|
207
229
|
}
|
|
230
|
+
case 'inbox_ack': {
|
|
231
|
+
const args = parseInboxAckArgs(rawArgs);
|
|
232
|
+
return aisKeyPost(aisUrl, `/v1/agents/${agentId}/inbox/ack`, apiKey, { messageIds: args.messageIds }, fetchImpl);
|
|
233
|
+
}
|
|
234
|
+
case 'goal_create': {
|
|
235
|
+
const args = parseGoalCreateArgs(rawArgs);
|
|
236
|
+
return aisKeyPost(aisUrl, `/v1/agents/${agentId}/goals`, apiKey, {
|
|
237
|
+
title: args.title,
|
|
238
|
+
description: args.description,
|
|
239
|
+
...(args.successCriteria !== undefined ? { successCriteria: args.successCriteria } : {}),
|
|
240
|
+
...(args.parentGoalId !== undefined ? { parentGoalId: args.parentGoalId } : {}),
|
|
241
|
+
}, fetchImpl);
|
|
242
|
+
}
|
|
243
|
+
case 'goal_list': {
|
|
244
|
+
const args = parseGoalListArgs(rawArgs);
|
|
245
|
+
const params = new URLSearchParams();
|
|
246
|
+
if (args.status !== undefined)
|
|
247
|
+
params.set('status', args.status);
|
|
248
|
+
if (args.page !== undefined)
|
|
249
|
+
params.set('page', String(args.page));
|
|
250
|
+
params.set('limit', String(args.limit));
|
|
251
|
+
if (args.parentGoalId !== undefined)
|
|
252
|
+
params.set('parentGoalId', args.parentGoalId);
|
|
253
|
+
return aisKeyGet(aisUrl, `/v1/agents/${agentId}/goals?${params}`, apiKey, fetchImpl);
|
|
254
|
+
}
|
|
255
|
+
case 'goal_update_progress': {
|
|
256
|
+
const args = parseGoalUpdateProgressArgs(rawArgs);
|
|
257
|
+
return aisKeyPatch(aisUrl, `/v1/agents/${agentId}/goals/${args.goalId}`, apiKey, {
|
|
258
|
+
progress: args.progress,
|
|
259
|
+
}, fetchImpl);
|
|
260
|
+
}
|
|
261
|
+
case 'goal_complete': {
|
|
262
|
+
const args = parseGoalCompleteArgs(rawArgs);
|
|
263
|
+
return aisKeyPost(aisUrl, `/v1/agents/${agentId}/goals/${args.goalId}/complete`, apiKey, {
|
|
264
|
+
success: args.success,
|
|
265
|
+
...(args.notes !== undefined ? { notes: args.notes } : {}),
|
|
266
|
+
...(args.lessonsLearned !== undefined ? { lessonsLearned: args.lessonsLearned } : {}),
|
|
267
|
+
}, fetchImpl);
|
|
268
|
+
}
|
|
208
269
|
case 'handoff':
|
|
209
270
|
throw new OutOfScopeToolError('handoff', "the handoff route is outside the key's allowed scope (memory, goals, dream, full-context).");
|
|
210
271
|
case 'agent_load':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-key-mode.js","sourceRoot":"","sources":["../src/agent-key-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAOzD,0FAA0F;AAC1F,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAA0C,OAAO,CAAC,GAAG;IAErD,MAAM,SAAS,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC3C,4EAA4E;IAC5E,qEAAqE;IACrE,2EAA2E;IAC3E,6DAA6D;IAC7D,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEzC,4EAA4E;IAC5E,2EAA2E;IAC3E,2DAA2D;IAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,sBAAsB,CAC9B,4DAA4D;YAC1D,oEAAoE;YACpE,yCAAyC;YACzC,uEAAuE,CAC1E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,sBAAsB,CAC9B,uEAAuE;YACrE,kEAAkE;YAClE,mDAAmD,CACtD,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,sBAAsB,CAC9B,yDAAyD;YACvD,8EAA8E;YAC9E,wEAAwE;YACxE,uEAAuE;YACvE,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAMD,KAAK,UAAU,QAAQ,CAAC,GAAa;IACnC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,IAAY,EACZ,MAAc,EACd,IAAa,EACb,YAAuB,UAAU,CAAC,KAAK;IAEvC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,iBAAiB,EAAE,MAAM;KAC1B,CAAC;IACF,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5G,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,aAAa,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxG,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,IAAY,EACZ,MAAc,EACd,YAAuB,UAAU,CAAC,KAAK;IAEvC,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACxF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5G,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,aAAa,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxG,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4EAA4E;AAE5E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAErE;;;;;;GAMG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,IAAY,EAAE,MAAc;QACtC,KAAK,CAAC,GAAG,IAAI,mEAAmE,MAAM,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,MAAyB,EACzB,IAAY,EACZ,OAAgB,EAChB,YAAuB,UAAU,CAAC,KAAK;IAEvC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEnC,QAAQ,IAAI,EAAE,CAAC;QACf,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,UAAU,CAAC,MAAM,EAAE,cAAc,OAAO,SAAS,EAAE,MAAM,EAAE;gBAChE,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,SAAS,CAAC,MAAM,EAAE,cAAc,OAAO,WAAW,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACxF,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;gBAAE,QAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACrG,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;gBAAE,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YACpG,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,cAAc,OAAO,gBAAgB,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7E,OAAO,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACtD,CAAC;QAED,KAAK,OAAO;YACV,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,UAAU,CAAC,MAAM,EAAE,cAAc,OAAO,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QAElF,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC5B,sEAAsE;YACtE,kEAAkE;YAClE,iEAAiE;YACjE,sEAAsE;YACtE,yEAAyE;YACzE,MAAM,SAAS,CAAC,MAAM,EAAE,cAAc,OAAO,iBAAiB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YACnF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,OAAO;oBACP,QAAQ,EAAE,eAAe;oBACzB,QAAQ,EAAE,IAAI;iBACf;aACF,CAAC;QACJ,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,UAAU,CAAC,MAAM,EAAE,cAAc,OAAO,QAAQ,EAAE,MAAM,EAAE;gBAC/D,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1E,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAClD,OAAO,oBAAoB,CACzB,IAAI,EACJ,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,OAAO,UAAU,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EACnF,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,OAAO,YAAY,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,CAAC,CACzG,CAAC;QACJ,CAAC;QAED,KAAK,SAAS;YACZ,MAAM,IAAI,mBAAmB,CAC3B,SAAS,EACT,4FAA4F,CAC7F,CAAC;QAEJ,KAAK,YAAY;YACf,MAAM,IAAI,mBAAmB,CAC3B,YAAY,EACZ,oFAAoF;gBAClF,8FAA8F,CACjG,CAAC;QAEJ;YACE,OAAO,qBAAqB,CAAC;IAC/B,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"agent-key-mode.js","sourceRoot":"","sources":["../src/agent-key-mode.ts"],"names":[],"mappings":"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"}
|
package/dist/ais-http.d.ts
CHANGED
|
@@ -3,4 +3,5 @@
|
|
|
3
3
|
* CORBOT-282AE4FE
|
|
4
4
|
*/
|
|
5
5
|
export declare function aisPost(path: string, body: unknown, token?: string): Promise<unknown>;
|
|
6
|
+
export declare function aisPatch(path: string, body: unknown, token?: string): Promise<unknown>;
|
|
6
7
|
export declare function aisGet(path: string, token: string): Promise<unknown>;
|
package/dist/ais-http.js
CHANGED
|
@@ -5,17 +5,43 @@
|
|
|
5
5
|
import { isAuthErrorResult } from './auth-staleness.js';
|
|
6
6
|
import { AisHttpError } from './ais-http-error.js';
|
|
7
7
|
import { emitTelemetry } from './telemetry.js';
|
|
8
|
-
const
|
|
8
|
+
const AIS_HTTP_TIMEOUT_MS = 10_000;
|
|
9
|
+
function getAisUrl() {
|
|
10
|
+
const aisUrl = process.env['AIS_URL']?.trim();
|
|
11
|
+
if (!aisUrl) {
|
|
12
|
+
throw new Error('AIS_URL is not configured');
|
|
13
|
+
}
|
|
14
|
+
return aisUrl;
|
|
15
|
+
}
|
|
16
|
+
function buildUrl(path) {
|
|
17
|
+
const aisUrl = getAisUrl();
|
|
18
|
+
const baseUrl = aisUrl.endsWith('/') ? aisUrl : `${aisUrl}/`;
|
|
19
|
+
return new URL(path, baseUrl).toString();
|
|
20
|
+
}
|
|
21
|
+
async function readJsonBody(res, path) {
|
|
22
|
+
const text = await res.text();
|
|
23
|
+
if (text.trim() === '')
|
|
24
|
+
return null;
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(text);
|
|
27
|
+
return parsed;
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
31
|
+
throw new Error(`AIS response for ${path} was not valid JSON (HTTP ${res.status}): ${message}; body=${text.slice(0, 200)}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
9
34
|
export async function aisPost(path, body, token) {
|
|
10
35
|
const headers = { 'Content-Type': 'application/json' };
|
|
11
36
|
if (token)
|
|
12
37
|
headers['Authorization'] = `Bearer ${token}`;
|
|
13
38
|
let res;
|
|
14
39
|
try {
|
|
15
|
-
res = await fetch(
|
|
40
|
+
res = await fetch(buildUrl(path), {
|
|
16
41
|
method: 'POST',
|
|
17
42
|
headers,
|
|
18
43
|
body: JSON.stringify(body),
|
|
44
|
+
signal: AbortSignal.timeout(AIS_HTTP_TIMEOUT_MS),
|
|
19
45
|
});
|
|
20
46
|
}
|
|
21
47
|
catch (err) {
|
|
@@ -26,7 +52,7 @@ export async function aisPost(path, body, token) {
|
|
|
26
52
|
});
|
|
27
53
|
throw err;
|
|
28
54
|
}
|
|
29
|
-
const data = await res
|
|
55
|
+
const data = await readJsonBody(res, path);
|
|
30
56
|
if (!res.ok) {
|
|
31
57
|
emitTelemetry({
|
|
32
58
|
event: 'ais.http.failure',
|
|
@@ -43,11 +69,47 @@ export async function aisPost(path, body, token) {
|
|
|
43
69
|
}
|
|
44
70
|
return data;
|
|
45
71
|
}
|
|
72
|
+
export async function aisPatch(path, body, token) {
|
|
73
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
74
|
+
if (token)
|
|
75
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
76
|
+
let res;
|
|
77
|
+
try {
|
|
78
|
+
res = await fetch(buildUrl(path), {
|
|
79
|
+
method: 'PATCH',
|
|
80
|
+
headers,
|
|
81
|
+
body: JSON.stringify(body),
|
|
82
|
+
signal: AbortSignal.timeout(AIS_HTTP_TIMEOUT_MS),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
emitTelemetry({
|
|
87
|
+
event: 'ais.http.failure',
|
|
88
|
+
path,
|
|
89
|
+
error: err instanceof Error ? err.message : String(err),
|
|
90
|
+
});
|
|
91
|
+
throw err;
|
|
92
|
+
}
|
|
93
|
+
const data = await readJsonBody(res, path);
|
|
94
|
+
if (!res.ok) {
|
|
95
|
+
emitTelemetry({
|
|
96
|
+
event: 'ais.http.failure',
|
|
97
|
+
path,
|
|
98
|
+
httpStatus: res.status,
|
|
99
|
+
error: `HTTP ${res.status}`,
|
|
100
|
+
});
|
|
101
|
+
if (isAuthErrorResult(data))
|
|
102
|
+
return data;
|
|
103
|
+
throw new AisHttpError(res.status, path, data);
|
|
104
|
+
}
|
|
105
|
+
return data;
|
|
106
|
+
}
|
|
46
107
|
export async function aisGet(path, token) {
|
|
47
108
|
let res;
|
|
48
109
|
try {
|
|
49
|
-
res = await fetch(
|
|
110
|
+
res = await fetch(buildUrl(path), {
|
|
50
111
|
headers: { 'Authorization': `Bearer ${token}` },
|
|
112
|
+
signal: AbortSignal.timeout(AIS_HTTP_TIMEOUT_MS),
|
|
51
113
|
});
|
|
52
114
|
}
|
|
53
115
|
catch (err) {
|
|
@@ -58,7 +120,7 @@ export async function aisGet(path, token) {
|
|
|
58
120
|
});
|
|
59
121
|
throw err;
|
|
60
122
|
}
|
|
61
|
-
const data = await res
|
|
123
|
+
const data = await readJsonBody(res, path);
|
|
62
124
|
if (!res.ok) {
|
|
63
125
|
emitTelemetry({
|
|
64
126
|
event: 'ais.http.failure',
|
package/dist/ais-http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ais-http.js","sourceRoot":"","sources":["../src/ais-http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,
|
|
1
|
+
{"version":3,"file":"ais-http.js","sourceRoot":"","sources":["../src/ais-http.ts"],"names":[],"mappings":"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"}
|
package/dist/auth-staleness.d.ts
CHANGED
|
@@ -25,3 +25,5 @@ export declare function isCredsStale(expiresAt: string, nowMs: number, marginMs?
|
|
|
25
25
|
* (TOKEN_EXPIRED or INVALID_TOKEN) — the signal to re-auth and retry.
|
|
26
26
|
*/
|
|
27
27
|
export declare function isAuthErrorResult(result: unknown): boolean;
|
|
28
|
+
/** True when AIS rejected did-prove because no human key is registered for this DID. */
|
|
29
|
+
export declare function isNoRegisteredKeysAuthError(err: unknown): boolean;
|