@levr-one/auth 1.1.2 → 1.1.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/dist/connection-error.d.ts +24 -0
- package/dist/connection-error.d.ts.map +1 -0
- package/dist/connection-error.js +56 -0
- package/dist/connection-error.js.map +1 -0
- package/dist/connection-error.test.d.ts +2 -0
- package/dist/connection-error.test.d.ts.map +1 -0
- package/dist/connection-error.test.js +63 -0
- package/dist/connection-error.test.js.map +1 -0
- package/dist/logout-args.d.ts +36 -0
- package/dist/logout-args.d.ts.map +1 -0
- package/dist/logout-args.js +100 -0
- package/dist/logout-args.js.map +1 -0
- package/dist/logout-args.test.d.ts +2 -0
- package/dist/logout-args.test.d.ts.map +1 -0
- package/dist/logout-args.test.js +72 -0
- package/dist/logout-args.test.js.map +1 -0
- package/dist/status-report.d.ts +91 -0
- package/dist/status-report.d.ts.map +1 -0
- package/dist/status-report.js +145 -0
- package/dist/status-report.js.map +1 -0
- package/dist/status-report.test.d.ts +2 -0
- package/dist/status-report.test.d.ts.map +1 -0
- package/dist/status-report.test.js +159 -0
- package/dist/status-report.test.js.map +1 -0
- package/dist/token-store.d.ts +43 -2
- package/dist/token-store.d.ts.map +1 -1
- package/dist/token-store.js +89 -25
- package/dist/token-store.js.map +1 -1
- package/dist/token-store.test.js +116 -0
- package/dist/token-store.test.js.map +1 -1
- package/dist/workspace-store.d.ts +13 -1
- package/dist/workspace-store.d.ts.map +1 -1
- package/dist/workspace-store.js +25 -2
- package/dist/workspace-store.js.map +1 -1
- package/dist/workspace-store.test.js +46 -0
- package/dist/workspace-store.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-report.js","sourceRoot":"","sources":["../src/status-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-report.test.d.ts","sourceRoot":"","sources":["../src/status-report.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { PRESETS } from './config.js';
|
|
3
|
+
import { backendUrlForLevrMcp, buildTokenRows, formatExpiry, labelForBackend, levrEntryFrom, } from './status-report.js';
|
|
4
|
+
const NOW = 1_700_000_000_000;
|
|
5
|
+
const at = (minutes) => ({ expiresAt: NOW + minutes * 60_000 });
|
|
6
|
+
describe('buildTokenRows', () => {
|
|
7
|
+
// The regression this whole module exists for: the old block rendered the
|
|
8
|
+
// three hardcoded ENV_URLS presets, so a worktree-offset local was invisible
|
|
9
|
+
// and the `:8080` row it printed instead could never be refreshed.
|
|
10
|
+
it('lists a backend that is not one of the three presets', () => {
|
|
11
|
+
const rows = buildTokenRows([{ url: 'http://localhost:9480', tokens: at(60) }], 'http://localhost:9480', NOW);
|
|
12
|
+
expect(rows.map((r) => r.url)).toEqual(['http://localhost:9480']);
|
|
13
|
+
});
|
|
14
|
+
it('decides "active" by url, not by environment name', () => {
|
|
15
|
+
const rows = buildTokenRows([
|
|
16
|
+
{ url: 'http://localhost:8080', tokens: at(-99999) },
|
|
17
|
+
{ url: 'http://localhost:9480', tokens: at(60) },
|
|
18
|
+
], 'http://localhost:9480', NOW);
|
|
19
|
+
// Both are "local" by name. Only the configured URL is active — marking
|
|
20
|
+
// the :8080 preset active is exactly the old bug.
|
|
21
|
+
expect(rows.filter((r) => r.active).map((r) => r.url)).toEqual([
|
|
22
|
+
'http://localhost:9480',
|
|
23
|
+
]);
|
|
24
|
+
expect(rows.every((r) => r.label === 'local')).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
it('puts the active row first, then sorts the rest alphabetically', () => {
|
|
27
|
+
const rows = buildTokenRows([
|
|
28
|
+
{ url: 'https://api.levr.now', tokens: at(60) },
|
|
29
|
+
{ url: 'http://localhost:8080', tokens: at(60) },
|
|
30
|
+
{ url: 'http://localhost:9480', tokens: at(60) },
|
|
31
|
+
], 'http://localhost:9480', NOW);
|
|
32
|
+
expect(rows.map((r) => r.url)).toEqual([
|
|
33
|
+
'http://localhost:9480',
|
|
34
|
+
'http://localhost:8080',
|
|
35
|
+
'https://api.levr.now',
|
|
36
|
+
]);
|
|
37
|
+
});
|
|
38
|
+
it('marks nothing active when the configured backend has no token', () => {
|
|
39
|
+
const rows = buildTokenRows([{ url: 'https://api.levr.now', tokens: at(60) }], 'http://localhost:9480', NOW);
|
|
40
|
+
expect(rows.some((r) => r.active)).toBe(false);
|
|
41
|
+
});
|
|
42
|
+
it('marks nothing active when there is no configured backend', () => {
|
|
43
|
+
const rows = buildTokenRows([{ url: 'https://api.levr.now', tokens: at(60) }], undefined, NOW);
|
|
44
|
+
expect(rows.some((r) => r.active)).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('formatExpiry', () => {
|
|
48
|
+
it('reports remaining minutes while valid', () => {
|
|
49
|
+
expect(formatExpiry(NOW + 90 * 60_000, NOW)).toBe('valid 90m');
|
|
50
|
+
});
|
|
51
|
+
it('reports elapsed minutes once expired', () => {
|
|
52
|
+
expect(formatExpiry(NOW - 12 * 60_000, NOW)).toBe('expired 12m ago');
|
|
53
|
+
});
|
|
54
|
+
it('treats the exact expiry instant as expired', () => {
|
|
55
|
+
expect(formatExpiry(NOW, NOW)).toBe('expired 0m ago');
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('labelForBackend', () => {
|
|
59
|
+
it('names the presets', () => {
|
|
60
|
+
expect(labelForBackend('https://api.levr.now')).toBe('staging');
|
|
61
|
+
expect(labelForBackend('https://api.levr.one')).toBe('production');
|
|
62
|
+
expect(labelForBackend('http://localhost:8080')).toBe('local');
|
|
63
|
+
});
|
|
64
|
+
it('names a worktree-offset loopback backend local', () => {
|
|
65
|
+
expect(labelForBackend('http://localhost:9480')).toBe('local');
|
|
66
|
+
expect(labelForBackend('http://127.0.0.1:9480')).toBe('local');
|
|
67
|
+
});
|
|
68
|
+
it('names the DEV_TLS dev domain local', () => {
|
|
69
|
+
expect(labelForBackend('https://ai.levr.test:3020/api')).toBe('local');
|
|
70
|
+
expect(labelForBackend('https://api.levr.test:8080')).toBe('local');
|
|
71
|
+
});
|
|
72
|
+
it('names the levr.test apex local, not just its subdomains', () => {
|
|
73
|
+
expect(labelForBackend('https://levr.test:3020')).toBe('local');
|
|
74
|
+
});
|
|
75
|
+
it('falls back to custom for a remote backend', () => {
|
|
76
|
+
expect(labelForBackend('https://backend.testquality.net')).toBe('custom');
|
|
77
|
+
});
|
|
78
|
+
it('falls back to custom for an unparseable url', () => {
|
|
79
|
+
expect(labelForBackend('not a url')).toBe('custom');
|
|
80
|
+
});
|
|
81
|
+
it('does not treat a lookalike host as local', () => {
|
|
82
|
+
// `.endsWith('.levr.test')` must not match an attacker-ish suffix host.
|
|
83
|
+
expect(labelForBackend('https://evil-levr.test.example.com')).toBe('custom');
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe('backendUrlForLevrMcp', () => {
|
|
87
|
+
it('maps the hosted staging MCP url to the api host it is keyed by', () => {
|
|
88
|
+
expect(backendUrlForLevrMcp('https://ai.levr.now/api/v1/mcp')).toBe('https://api.levr.now');
|
|
89
|
+
});
|
|
90
|
+
it('maps the hosted production MCP url to the api host it is keyed by', () => {
|
|
91
|
+
expect(backendUrlForLevrMcp('https://ai.levr.one/api/v1/mcp')).toBe('https://api.levr.one');
|
|
92
|
+
});
|
|
93
|
+
it('keys a worktree local verbatim', () => {
|
|
94
|
+
expect(backendUrlForLevrMcp('http://localhost:9780/v1/mcp')).toBe('http://localhost:9780');
|
|
95
|
+
});
|
|
96
|
+
it('keys a DEV_TLS local verbatim, keeping the /api prefix', () => {
|
|
97
|
+
// This exact string is a real key in the token map — rewriting it would
|
|
98
|
+
// make the entry unreachable.
|
|
99
|
+
expect(backendUrlForLevrMcp('https://ai.levr.test:3020/api/v1/mcp')).toBe('https://ai.levr.test:3020/api');
|
|
100
|
+
});
|
|
101
|
+
it('keeps two different worktree ports distinct', () => {
|
|
102
|
+
expect(backendUrlForLevrMcp('http://localhost:8180/v1/mcp')).not.toBe(backendUrlForLevrMcp('http://localhost:8580/v1/mcp'));
|
|
103
|
+
});
|
|
104
|
+
// review F-006. `PRESETS.local` must never join the alias loop: under
|
|
105
|
+
// DEV_TLS its clientUrl+/api is `https://ai.levr.test:3020/api`, a real key
|
|
106
|
+
// in the token map that has to resolve verbatim. Asserting against
|
|
107
|
+
// PRESETS.local itself pins the exclusion in BOTH modes — a hardcoded
|
|
108
|
+
// DEV_TLS string cannot, because isTestEnv() forces the plain-HTTP preset
|
|
109
|
+
// and the assertion would pass over a broken function.
|
|
110
|
+
it('never aliases the local preset, whichever variant is active', () => {
|
|
111
|
+
const localMcp = `${PRESETS.local.clientUrl}/api/v1/mcp`;
|
|
112
|
+
expect(backendUrlForLevrMcp(localMcp)).toBe(`${PRESETS.local.clientUrl}/api`);
|
|
113
|
+
expect(backendUrlForLevrMcp(localMcp)).not.toBe(PRESETS.local.apiUrl);
|
|
114
|
+
});
|
|
115
|
+
it('tolerates a trailing slash', () => {
|
|
116
|
+
expect(backendUrlForLevrMcp('https://ai.levr.now/api/v1/mcp/')).toBe('https://api.levr.now');
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe('levrEntryFrom', () => {
|
|
120
|
+
const config = {
|
|
121
|
+
mcpServers: {
|
|
122
|
+
levr: {
|
|
123
|
+
type: 'http',
|
|
124
|
+
url: 'https://ai.levr.now/api/v1/mcp',
|
|
125
|
+
headers: { 'Workspace-Id': 'ws-1' },
|
|
126
|
+
},
|
|
127
|
+
'qinetic-mcp': { type: 'stdio' },
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
it('extracts the url and the Workspace-Id header', () => {
|
|
131
|
+
expect(levrEntryFrom(config)).toEqual({
|
|
132
|
+
url: 'https://ai.levr.now/api/v1/mcp',
|
|
133
|
+
workspaceId: 'ws-1',
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
it('returns the url alone when no Workspace-Id is pinned', () => {
|
|
137
|
+
expect(levrEntryFrom({ mcpServers: { levr: { url: 'http://x/v1/mcp' } } })).toEqual({ url: 'http://x/v1/mcp', workspaceId: undefined });
|
|
138
|
+
});
|
|
139
|
+
it.each([
|
|
140
|
+
['null', null],
|
|
141
|
+
['an array', []],
|
|
142
|
+
['a string', 'nope'],
|
|
143
|
+
['no mcpServers', {}],
|
|
144
|
+
['no levr server', { mcpServers: { 'qinetic-mcp': { type: 'stdio' } } }],
|
|
145
|
+
['a levr server with no url', { mcpServers: { levr: { type: 'http' } } }],
|
|
146
|
+
['a non-string url', { mcpServers: { levr: { url: 42 } } }],
|
|
147
|
+
['an empty url', { mcpServers: { levr: { url: '' } } }],
|
|
148
|
+
])('returns undefined for %s', (_label, input) => {
|
|
149
|
+
expect(levrEntryFrom(input)).toBeUndefined();
|
|
150
|
+
});
|
|
151
|
+
it('ignores a non-string Workspace-Id rather than rendering it', () => {
|
|
152
|
+
expect(levrEntryFrom({
|
|
153
|
+
mcpServers: {
|
|
154
|
+
levr: { url: 'http://x/v1/mcp', headers: { 'Workspace-Id': 7 } },
|
|
155
|
+
},
|
|
156
|
+
})).toEqual({ url: 'http://x/v1/mcp', workspaceId: undefined });
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=status-report.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-report.test.js","sourceRoot":"","sources":["../src/status-report.test.ts"],"names":[],"mappings":"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"}
|
package/dist/token-store.d.ts
CHANGED
|
@@ -60,6 +60,23 @@ export declare function loadTokensForEnv(env: EnvName): StoredTokens | null;
|
|
|
60
60
|
* `--target <url>` and the CLI fetches the matching token entry by URL.
|
|
61
61
|
*/
|
|
62
62
|
export declare function loadTokensForUrl(url: string): StoredTokens | null;
|
|
63
|
+
/**
|
|
64
|
+
* Every backend the token map actually holds, with its canonical key.
|
|
65
|
+
*
|
|
66
|
+
* `loadTokensForEnv` can only ever see the three hardcoded `ENV_URLS`
|
|
67
|
+
* presets, so a worktree-offset local (`http://localhost:9480`), a DEV_TLS
|
|
68
|
+
* local, or any custom backend is invisible to it — while `saveTokens` keys
|
|
69
|
+
* on the token's real `apiBaseUrl`. Anything that wants to SHOW what is
|
|
70
|
+
* stored, rather than resolve one named environment, must enumerate the real
|
|
71
|
+
* keys or it will report on a backend the user never logged into. (internal)
|
|
72
|
+
*
|
|
73
|
+
* Malformed entries are dropped, so every returned `tokens` is a usable
|
|
74
|
+
* `StoredTokens` — expired included, since expiry is the caller's to display.
|
|
75
|
+
*/
|
|
76
|
+
export declare function listTokenEntries(): Array<{
|
|
77
|
+
url: string;
|
|
78
|
+
tokens: StoredTokens;
|
|
79
|
+
}>;
|
|
63
80
|
/**
|
|
64
81
|
* Save tokens for the current environment.
|
|
65
82
|
* Upserts the entry keyed by the token's apiBaseUrl.
|
|
@@ -69,11 +86,35 @@ export declare function saveTokens(tokens: StoredTokens): void;
|
|
|
69
86
|
* Save tokens for a specific environment by name.
|
|
70
87
|
*/
|
|
71
88
|
export declare function saveTokensForEnv(env: EnvName, tokens: StoredTokens): void;
|
|
89
|
+
/**
|
|
90
|
+
* Remove the stored token for exactly ONE backend.
|
|
91
|
+
*
|
|
92
|
+
* @returns true when an entry was removed, false when that backend had none.
|
|
93
|
+
*
|
|
94
|
+
* Never touches another backend's entry, and never removes the file except
|
|
95
|
+
* when the entry cleared was the last one — at which point an empty map and a
|
|
96
|
+
* missing file mean the same thing.
|
|
97
|
+
*/
|
|
98
|
+
export declare function clearTokensForUrl(url: string): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Remove EVERY stored token, for every backend.
|
|
101
|
+
*
|
|
102
|
+
* Only ever reached through an explicit opt-in (`tq:logout --all`). This used
|
|
103
|
+
* to be the silent fallback of `clearTokens()` whenever the current backend
|
|
104
|
+
* could not be resolved — so an absent `~/.tq/config.json` with no
|
|
105
|
+
* `TQ_BACKEND_URL` set destroyed a dozen backends' credentials while the
|
|
106
|
+
* operator believed they were logging out of one. The single `.bak` survives
|
|
107
|
+
* that once, not twice. (internal D2)
|
|
108
|
+
*/
|
|
109
|
+
export declare function clearAllTokens(): void;
|
|
72
110
|
/**
|
|
73
111
|
* Clear stored tokens for the current environment.
|
|
74
|
-
*
|
|
112
|
+
*
|
|
113
|
+
* Refuses when the current backend cannot be resolved rather than falling
|
|
114
|
+
* back to wiping the file — see `clearAllTokens` for what that fallback used
|
|
115
|
+
* to do. Returns false when nothing was removed, for any reason.
|
|
75
116
|
*/
|
|
76
|
-
export declare function clearTokens():
|
|
117
|
+
export declare function clearTokens(): boolean;
|
|
77
118
|
/**
|
|
78
119
|
* Attempt to restore tokens from backup (.bak file)
|
|
79
120
|
* Returns true if backup was restored successfully.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;AAyBzD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAMlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,MAAM,GAAG,SAAS,CAGpB;AAiED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI,YAAY,GAAG,IAAI,CAmBhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAOjE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAarD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAIzE;AAED
|
|
1
|
+
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;AAyBzD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAMlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,MAAM,GAAG,SAAS,CAGpB;AAiED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI,YAAY,GAAG,IAAI,CAmBhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAOjE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,IAAI,KAAK,CAAC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC,CAID;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAarD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAIzE;AAaD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAqBtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAQrC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAWrC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAiCjD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAIzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAiBrD"}
|
package/dist/token-store.js
CHANGED
|
@@ -183,6 +183,24 @@ export function loadTokensForUrl(url) {
|
|
|
183
183
|
return entry;
|
|
184
184
|
return null;
|
|
185
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* Every backend the token map actually holds, with its canonical key.
|
|
188
|
+
*
|
|
189
|
+
* `loadTokensForEnv` can only ever see the three hardcoded `ENV_URLS`
|
|
190
|
+
* presets, so a worktree-offset local (`http://localhost:9480`), a DEV_TLS
|
|
191
|
+
* local, or any custom backend is invisible to it — while `saveTokens` keys
|
|
192
|
+
* on the token's real `apiBaseUrl`. Anything that wants to SHOW what is
|
|
193
|
+
* stored, rather than resolve one named environment, must enumerate the real
|
|
194
|
+
* keys or it will report on a backend the user never logged into. (internal)
|
|
195
|
+
*
|
|
196
|
+
* Malformed entries are dropped, so every returned `tokens` is a usable
|
|
197
|
+
* `StoredTokens` — expired included, since expiry is the caller's to display.
|
|
198
|
+
*/
|
|
199
|
+
export function listTokenEntries() {
|
|
200
|
+
return Object.entries(readTokenMap())
|
|
201
|
+
.filter((entry) => isValidToken(entry[1]))
|
|
202
|
+
.map(([url, tokens]) => ({ url, tokens }));
|
|
203
|
+
}
|
|
186
204
|
/**
|
|
187
205
|
* Save tokens for the current environment.
|
|
188
206
|
* Upserts the entry keyed by the token's apiBaseUrl.
|
|
@@ -209,42 +227,88 @@ export function saveTokensForEnv(env, tokens) {
|
|
|
209
227
|
map[ENV_URLS[env]] = tokens;
|
|
210
228
|
writeTokenMap(map);
|
|
211
229
|
}
|
|
230
|
+
/** Snapshot the whole map to `.bak` before any destructive edit. */
|
|
231
|
+
function backupTokenFile() {
|
|
232
|
+
try {
|
|
233
|
+
const backupPath = TOKEN_FILE + '.bak';
|
|
234
|
+
fs.copyFileSync(TOKEN_FILE, backupPath);
|
|
235
|
+
fs.chmodSync(backupPath, 0o600);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
// Backup failed — still proceed with the clear.
|
|
239
|
+
}
|
|
240
|
+
}
|
|
212
241
|
/**
|
|
213
|
-
*
|
|
214
|
-
*
|
|
242
|
+
* Remove the stored token for exactly ONE backend.
|
|
243
|
+
*
|
|
244
|
+
* @returns true when an entry was removed, false when that backend had none.
|
|
245
|
+
*
|
|
246
|
+
* Never touches another backend's entry, and never removes the file except
|
|
247
|
+
* when the entry cleared was the last one — at which point an empty map and a
|
|
248
|
+
* missing file mean the same thing.
|
|
215
249
|
*/
|
|
216
|
-
export function
|
|
250
|
+
export function clearTokensForUrl(url) {
|
|
217
251
|
try {
|
|
218
252
|
if (!fs.existsSync(TOKEN_FILE))
|
|
219
|
-
return;
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
fs.copyFileSync(TOKEN_FILE, backupPath);
|
|
224
|
-
fs.chmodSync(backupPath, 0o600);
|
|
225
|
-
}
|
|
226
|
-
catch {
|
|
227
|
-
// Backup failed — still proceed with clear
|
|
228
|
-
}
|
|
253
|
+
return false;
|
|
254
|
+
const key = normalizeBackendUrl(url);
|
|
255
|
+
if (!key)
|
|
256
|
+
return false;
|
|
229
257
|
const map = readTokenMap();
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
writeTokenMap(map);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
else if (!currentUrl) {
|
|
241
|
-
// No current URL known — clear entire file (legacy behavior)
|
|
258
|
+
if (!(key in map))
|
|
259
|
+
return false;
|
|
260
|
+
backupTokenFile();
|
|
261
|
+
delete map[key];
|
|
262
|
+
if (Object.keys(map).length === 0) {
|
|
242
263
|
fs.unlinkSync(TOKEN_FILE);
|
|
243
264
|
}
|
|
265
|
+
else {
|
|
266
|
+
writeTokenMap(map);
|
|
267
|
+
}
|
|
268
|
+
return true;
|
|
244
269
|
}
|
|
245
270
|
catch (error) {
|
|
246
271
|
console.error('[levr-auth] Failed to clear tokens:', error);
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Remove EVERY stored token, for every backend.
|
|
277
|
+
*
|
|
278
|
+
* Only ever reached through an explicit opt-in (`tq:logout --all`). This used
|
|
279
|
+
* to be the silent fallback of `clearTokens()` whenever the current backend
|
|
280
|
+
* could not be resolved — so an absent `~/.tq/config.json` with no
|
|
281
|
+
* `TQ_BACKEND_URL` set destroyed a dozen backends' credentials while the
|
|
282
|
+
* operator believed they were logging out of one. The single `.bak` survives
|
|
283
|
+
* that once, not twice. (internal D2)
|
|
284
|
+
*/
|
|
285
|
+
export function clearAllTokens() {
|
|
286
|
+
try {
|
|
287
|
+
if (!fs.existsSync(TOKEN_FILE))
|
|
288
|
+
return;
|
|
289
|
+
backupTokenFile();
|
|
290
|
+
fs.unlinkSync(TOKEN_FILE);
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
console.error('[levr-auth] Failed to clear tokens:', error);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Clear stored tokens for the current environment.
|
|
298
|
+
*
|
|
299
|
+
* Refuses when the current backend cannot be resolved rather than falling
|
|
300
|
+
* back to wiping the file — see `clearAllTokens` for what that fallback used
|
|
301
|
+
* to do. Returns false when nothing was removed, for any reason.
|
|
302
|
+
*/
|
|
303
|
+
export function clearTokens() {
|
|
304
|
+
const currentUrl = getCurrentApiUrl();
|
|
305
|
+
if (!currentUrl) {
|
|
306
|
+
console.error('[levr-auth] Refusing to clear tokens: no backend is configured, so ' +
|
|
307
|
+
'there is no single environment to log out of. Pass an explicit ' +
|
|
308
|
+
'`--backend <url>`, or `--all` to clear every backend.');
|
|
309
|
+
return false;
|
|
247
310
|
}
|
|
311
|
+
return clearTokensForUrl(currentUrl);
|
|
248
312
|
}
|
|
249
313
|
/**
|
|
250
314
|
* Attempt to restore tokens from backup (.bak file)
|
package/dist/token-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"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"}
|
package/dist/token-store.test.js
CHANGED
|
@@ -20,6 +20,9 @@ let getTqDir;
|
|
|
20
20
|
let getTokenFilePath;
|
|
21
21
|
let resolveEnvFromUrl;
|
|
22
22
|
let resolveUrlFromEnv;
|
|
23
|
+
let listTokenEntries;
|
|
24
|
+
let clearTokensForUrl;
|
|
25
|
+
let clearAllTokens;
|
|
23
26
|
const stagingTokens = {
|
|
24
27
|
accessToken: 'staging-access',
|
|
25
28
|
refreshToken: 'staging-refresh',
|
|
@@ -47,6 +50,9 @@ beforeEach(async () => {
|
|
|
47
50
|
getTokenFilePath = mod.getTokenFilePath;
|
|
48
51
|
resolveEnvFromUrl = mod.resolveEnvFromUrl;
|
|
49
52
|
resolveUrlFromEnv = mod.resolveUrlFromEnv;
|
|
53
|
+
listTokenEntries = mod.listTokenEntries;
|
|
54
|
+
clearTokensForUrl = mod.clearTokensForUrl;
|
|
55
|
+
clearAllTokens = mod.clearAllTokens;
|
|
50
56
|
});
|
|
51
57
|
afterEach(() => {
|
|
52
58
|
delete process.env.TQ_BACKEND_URL;
|
|
@@ -208,6 +214,19 @@ describe('clearTokens', () => {
|
|
|
208
214
|
it('does not throw when no token file exists', () => {
|
|
209
215
|
expect(() => clearTokens()).not.toThrow();
|
|
210
216
|
});
|
|
217
|
+
// internal D2. This used to unlink the WHOLE file: an absent config.json
|
|
218
|
+
// with no TQ_BACKEND_URL destroyed every backend's credentials while the
|
|
219
|
+
// operator believed they were logging out of one.
|
|
220
|
+
it('refuses, and keeps every token, when no backend can be resolved', () => {
|
|
221
|
+
saveTokens(stagingTokens);
|
|
222
|
+
saveTokens({ ...localTokens, apiBaseUrl: 'http://localhost:9480' });
|
|
223
|
+
fs.rmSync(path.join(state.tmpDir, '.tq', 'config.json'), { force: true });
|
|
224
|
+
delete process.env.TQ_BACKEND_URL;
|
|
225
|
+
expect(clearTokens()).toBe(false);
|
|
226
|
+
expect(listTokenEntries()
|
|
227
|
+
.map((e) => e.url)
|
|
228
|
+
.sort()).toEqual(['http://localhost:9480', 'https://api.levr.now']);
|
|
229
|
+
});
|
|
211
230
|
it('creates a backup before clearing', () => {
|
|
212
231
|
saveTokens(stagingTokens);
|
|
213
232
|
process.env.TQ_BACKEND_URL = 'https://api.levr.now';
|
|
@@ -236,4 +255,101 @@ describe('saveTokensForEnv', () => {
|
|
|
236
255
|
expect(loaded?.accessToken).toBe('prod-access');
|
|
237
256
|
});
|
|
238
257
|
});
|
|
258
|
+
describe('listTokenEntries', () => {
|
|
259
|
+
it('returns every stored backend, including ones absent from ENV_URLS', () => {
|
|
260
|
+
// A worktree-offset local. `loadTokensForEnv('local')` cannot see this —
|
|
261
|
+
// it only ever looks at the hardcoded `http://localhost:8080`. (internal)
|
|
262
|
+
saveTokens({ ...localTokens, apiBaseUrl: 'http://localhost:9480' });
|
|
263
|
+
saveTokens(stagingTokens);
|
|
264
|
+
const urls = listTokenEntries().map((e) => e.url);
|
|
265
|
+
expect(urls).toContain('http://localhost:9480');
|
|
266
|
+
expect(urls).toContain('https://api.levr.now');
|
|
267
|
+
expect(loadTokensForEnv('local')).toBeNull();
|
|
268
|
+
});
|
|
269
|
+
it('returns an empty array when nothing is stored', () => {
|
|
270
|
+
expect(listTokenEntries()).toEqual([]);
|
|
271
|
+
});
|
|
272
|
+
it('pairs each url with its own tokens', () => {
|
|
273
|
+
saveTokens({ ...localTokens, apiBaseUrl: 'http://localhost:9480' });
|
|
274
|
+
const entry = listTokenEntries().find((e) => e.url === 'http://localhost:9480');
|
|
275
|
+
expect(entry?.tokens.accessToken).toBe('local-access');
|
|
276
|
+
});
|
|
277
|
+
it('drops malformed entries rather than surfacing them as tokens', () => {
|
|
278
|
+
saveTokens(stagingTokens);
|
|
279
|
+
const file = getTokenFilePath();
|
|
280
|
+
const map = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
281
|
+
map['http://localhost:9480'] = { accessToken: 'no-refresh-no-expiry' };
|
|
282
|
+
fs.writeFileSync(file, JSON.stringify(map));
|
|
283
|
+
const urls = listTokenEntries().map((e) => e.url);
|
|
284
|
+
expect(urls).toEqual(['https://api.levr.now']);
|
|
285
|
+
});
|
|
286
|
+
it('normalizes a trailing-slash key so one backend yields one row', () => {
|
|
287
|
+
saveTokens({ ...stagingTokens, apiBaseUrl: 'https://api.levr.now/' });
|
|
288
|
+
expect(listTokenEntries().map((e) => e.url)).toEqual([
|
|
289
|
+
'https://api.levr.now',
|
|
290
|
+
]);
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
describe('clearTokensForUrl', () => {
|
|
294
|
+
it('removes exactly one backend and leaves the rest', () => {
|
|
295
|
+
saveTokens(stagingTokens);
|
|
296
|
+
saveTokens({ ...localTokens, apiBaseUrl: 'http://localhost:8180' });
|
|
297
|
+
saveTokens({ ...localTokens, apiBaseUrl: 'http://localhost:9480' });
|
|
298
|
+
expect(clearTokensForUrl('http://localhost:8180')).toBe(true);
|
|
299
|
+
expect(listTokenEntries()
|
|
300
|
+
.map((e) => e.url)
|
|
301
|
+
.sort()).toEqual(['http://localhost:9480', 'https://api.levr.now']);
|
|
302
|
+
});
|
|
303
|
+
it('reports false for a backend it has no token for', () => {
|
|
304
|
+
saveTokens(stagingTokens);
|
|
305
|
+
expect(clearTokensForUrl('http://localhost:8180')).toBe(false);
|
|
306
|
+
expect(listTokenEntries()).toHaveLength(1);
|
|
307
|
+
});
|
|
308
|
+
it('matches a trailing-slash url to the canonical entry', () => {
|
|
309
|
+
saveTokens(stagingTokens);
|
|
310
|
+
expect(clearTokensForUrl('https://api.levr.now/')).toBe(true);
|
|
311
|
+
expect(hasStoredTokens()).toBe(false);
|
|
312
|
+
});
|
|
313
|
+
it('ignores a url that is not a usable key', () => {
|
|
314
|
+
saveTokens(stagingTokens);
|
|
315
|
+
expect(clearTokensForUrl(' ')).toBe(false);
|
|
316
|
+
expect(listTokenEntries()).toHaveLength(1);
|
|
317
|
+
});
|
|
318
|
+
it('backs the file up before removing an entry', () => {
|
|
319
|
+
saveTokens(stagingTokens);
|
|
320
|
+
saveTokens({ ...localTokens, apiBaseUrl: 'http://localhost:8180' });
|
|
321
|
+
clearTokensForUrl('http://localhost:8180');
|
|
322
|
+
expect(fs.existsSync(getTokenFilePath() + '.bak')).toBe(true);
|
|
323
|
+
});
|
|
324
|
+
it('does not write a backup when there was nothing to remove', () => {
|
|
325
|
+
saveTokens(stagingTokens);
|
|
326
|
+
clearTokensForUrl('http://localhost:8180');
|
|
327
|
+
// A no-op must not burn the single backup slot — that backup is the only
|
|
328
|
+
// thing standing between a mistyped url and a lost credential.
|
|
329
|
+
expect(fs.existsSync(getTokenFilePath() + '.bak')).toBe(false);
|
|
330
|
+
});
|
|
331
|
+
it('removes the file when the last entry goes', () => {
|
|
332
|
+
saveTokens(stagingTokens);
|
|
333
|
+
expect(clearTokensForUrl('https://api.levr.now')).toBe(true);
|
|
334
|
+
expect(hasStoredTokens()).toBe(false);
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
describe('clearAllTokens', () => {
|
|
338
|
+
it('removes every backend', () => {
|
|
339
|
+
saveTokens(stagingTokens);
|
|
340
|
+
saveTokens({ ...localTokens, apiBaseUrl: 'http://localhost:9480' });
|
|
341
|
+
clearAllTokens();
|
|
342
|
+
expect(hasStoredTokens()).toBe(false);
|
|
343
|
+
expect(listTokenEntries()).toEqual([]);
|
|
344
|
+
});
|
|
345
|
+
it('backs up first', () => {
|
|
346
|
+
saveTokens(stagingTokens);
|
|
347
|
+
const backup = getTokenFilePath() + '.bak';
|
|
348
|
+
clearAllTokens();
|
|
349
|
+
expect(fs.existsSync(backup)).toBe(true);
|
|
350
|
+
});
|
|
351
|
+
it('does not throw when there is no token file', () => {
|
|
352
|
+
expect(() => clearAllTokens()).not.toThrow();
|
|
353
|
+
});
|
|
354
|
+
});
|
|
239
355
|
//# sourceMappingURL=token-store.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.test.js","sourceRoot":"","sources":["../src/token-store.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"token-store.test.js","sourceRoot":"","sources":["../src/token-store.test.ts"],"names":[],"mappings":"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"}
|