@levr-one/auth 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -0
- package/dist/config-watcher.d.ts +65 -0
- package/dist/config-watcher.d.ts.map +1 -0
- package/dist/config-watcher.js +140 -0
- package/dist/config-watcher.js.map +1 -0
- package/dist/config-watcher.test.d.ts +2 -0
- package/dist/config-watcher.test.d.ts.map +1 -0
- package/dist/config-watcher.test.js +116 -0
- package/dist/config-watcher.test.js.map +1 -0
- package/dist/config.d.ts +58 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +234 -0
- package/dist/config.js.map +1 -0
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +221 -0
- package/dist/config.test.js.map +1 -0
- package/dist/file-lock.d.ts +41 -0
- package/dist/file-lock.d.ts.map +1 -0
- package/dist/file-lock.js +110 -0
- package/dist/file-lock.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth-client.d.ts +156 -0
- package/dist/oauth-client.d.ts.map +1 -0
- package/dist/oauth-client.js +572 -0
- package/dist/oauth-client.js.map +1 -0
- package/dist/oauth-client.test.d.ts +2 -0
- package/dist/oauth-client.test.d.ts.map +1 -0
- package/dist/oauth-client.test.js +290 -0
- package/dist/oauth-client.test.js.map +1 -0
- package/dist/test-utils.d.ts +10 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/test-utils.js +45 -0
- package/dist/test-utils.js.map +1 -0
- package/dist/token-store.d.ts +78 -0
- package/dist/token-store.d.ts.map +1 -0
- package/dist/token-store.js +299 -0
- package/dist/token-store.js.map +1 -0
- package/dist/token-store.test.d.ts +2 -0
- package/dist/token-store.test.d.ts.map +1 -0
- package/dist/token-store.test.js +239 -0
- package/dist/token-store.test.js.map +1 -0
- package/dist/token-watcher.d.ts +82 -0
- package/dist/token-watcher.d.ts.map +1 -0
- package/dist/token-watcher.js +185 -0
- package/dist/token-watcher.js.map +1 -0
- package/dist/types.d.ts +70 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace-store.d.ts +60 -0
- package/dist/workspace-store.d.ts.map +1 -0
- package/dist/workspace-store.js +147 -0
- package/dist/workspace-store.js.map +1 -0
- package/dist/workspace-store.test.d.ts +2 -0
- package/dist/workspace-store.test.d.ts.map +1 -0
- package/dist/workspace-store.test.js +169 -0
- package/dist/workspace-store.test.js.map +1 -0
- package/dist/workspaces.d.ts +60 -0
- package/dist/workspaces.d.ts.map +1 -0
- package/dist/workspaces.js +80 -0
- package/dist/workspaces.js.map +1 -0
- package/dist/workspaces.test.d.ts +2 -0
- package/dist/workspaces.test.d.ts.map +1 -0
- package/dist/workspaces.test.js +111 -0
- package/dist/workspaces.test.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-store.test.js","sourceRoot":"","sources":["../src/workspace-store.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace listing — public library surface for `@levr-one/auth`.
|
|
3
|
+
*
|
|
4
|
+
* Promotes the CLI's former private `fetchWorkspaceSites()` into a reusable
|
|
5
|
+
* library function (internal / D2). Consumed by `@levr-one/setup` and any other
|
|
6
|
+
* embedder of `@levr-one/auth`.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT (internal / R2F1): a public library function must NEVER terminate
|
|
9
|
+
* its caller's process. Where the old CLI-private helper terminated the process
|
|
10
|
+
* on auth/HTTP-error branches, `listWorkspaces()` instead throws a typed
|
|
11
|
+
* `WorkspaceFetchError`. Process termination + user-facing stderr messaging live
|
|
12
|
+
* in the CLI wrapper (`cli.ts`), which catches this error.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* A workspace (site) the authenticated user has access to.
|
|
16
|
+
*
|
|
17
|
+
* This shape mirrors the backend contract exactly — `siteItemSchema` in
|
|
18
|
+
* `apps/backender/src/auth/dto/sites-response.dto.ts`, backing
|
|
19
|
+
* `GET /v1/auth/sites`. (internal / audit H1: the former client-side interface
|
|
20
|
+
* had drifted — it was missing `user_id`/`role`/`last_accessed_at`, carried a
|
|
21
|
+
* dead/misnamed `url_key`, and had a nonexistent `id`. All corrected here.)
|
|
22
|
+
*/
|
|
23
|
+
export interface WorkspaceSite {
|
|
24
|
+
workspace_id: string;
|
|
25
|
+
workspace_name: string;
|
|
26
|
+
workspace_url_key: string;
|
|
27
|
+
user_id: string;
|
|
28
|
+
role: 'owner' | 'admin' | 'member' | 'guest';
|
|
29
|
+
is_primary: boolean;
|
|
30
|
+
last_accessed_at: string | null;
|
|
31
|
+
}
|
|
32
|
+
/** Why a `listWorkspaces()` call failed — lets callers format their own messaging. */
|
|
33
|
+
export type WorkspaceFetchErrorCode = 'not_authenticated' | 'token_refresh_failed' | 'http_error';
|
|
34
|
+
/**
|
|
35
|
+
* Thrown by `listWorkspaces()` instead of terminating the process. Carries a
|
|
36
|
+
* machine-readable `code` and, for HTTP failures, the response `status`/`body`.
|
|
37
|
+
*/
|
|
38
|
+
export declare class WorkspaceFetchError extends Error {
|
|
39
|
+
readonly code: WorkspaceFetchErrorCode;
|
|
40
|
+
readonly status?: number;
|
|
41
|
+
readonly body?: string;
|
|
42
|
+
constructor(code: WorkspaceFetchErrorCode, message: string, options?: {
|
|
43
|
+
status?: number;
|
|
44
|
+
body?: string;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* List the workspaces (sites) the authenticated user has access to.
|
|
49
|
+
*
|
|
50
|
+
* Resolves the env/client from the persisted `~/.tq/config.json` (via
|
|
51
|
+
* `loadConfig()`), loads the stored tokens, refreshes if needed, and calls
|
|
52
|
+
* `GET /v1/auth/sites`.
|
|
53
|
+
*
|
|
54
|
+
* @throws {WorkspaceFetchError} `not_authenticated` if no tokens are stored,
|
|
55
|
+
* `token_refresh_failed` if the access token can't be obtained/refreshed, or
|
|
56
|
+
* `http_error` (carrying `status`/`body`) on a non-2xx response. Never
|
|
57
|
+
* terminates the process.
|
|
58
|
+
*/
|
|
59
|
+
export declare function listWorkspaces(): Promise<WorkspaceSite[]>;
|
|
60
|
+
//# sourceMappingURL=workspaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../src/workspaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC7C,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,sFAAsF;AACtF,MAAM,MAAM,uBAAuB,GAC/B,mBAAmB,GACnB,sBAAsB,GACtB,YAAY,CAAC;AAEjB;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,uBAAuB,EAC7B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;CAQ/C;AAQD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CA6C/D"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace listing — public library surface for `@levr-one/auth`.
|
|
3
|
+
*
|
|
4
|
+
* Promotes the CLI's former private `fetchWorkspaceSites()` into a reusable
|
|
5
|
+
* library function (internal / D2). Consumed by `@levr-one/setup` and any other
|
|
6
|
+
* embedder of `@levr-one/auth`.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT (internal / R2F1): a public library function must NEVER terminate
|
|
9
|
+
* its caller's process. Where the old CLI-private helper terminated the process
|
|
10
|
+
* on auth/HTTP-error branches, `listWorkspaces()` instead throws a typed
|
|
11
|
+
* `WorkspaceFetchError`. Process termination + user-facing stderr messaging live
|
|
12
|
+
* in the CLI wrapper (`cli.ts`), which catches this error.
|
|
13
|
+
*/
|
|
14
|
+
import { OAuthClient } from './oauth-client.js';
|
|
15
|
+
import { loadTokens } from './token-store.js';
|
|
16
|
+
import { loadConfig } from './config.js';
|
|
17
|
+
/**
|
|
18
|
+
* Thrown by `listWorkspaces()` instead of terminating the process. Carries a
|
|
19
|
+
* machine-readable `code` and, for HTTP failures, the response `status`/`body`.
|
|
20
|
+
*/
|
|
21
|
+
export class WorkspaceFetchError extends Error {
|
|
22
|
+
code;
|
|
23
|
+
status;
|
|
24
|
+
body;
|
|
25
|
+
constructor(code, message, options) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.name = 'WorkspaceFetchError';
|
|
28
|
+
this.code = code;
|
|
29
|
+
this.status = options?.status;
|
|
30
|
+
this.body = options?.body;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* List the workspaces (sites) the authenticated user has access to.
|
|
35
|
+
*
|
|
36
|
+
* Resolves the env/client from the persisted `~/.tq/config.json` (via
|
|
37
|
+
* `loadConfig()`), loads the stored tokens, refreshes if needed, and calls
|
|
38
|
+
* `GET /v1/auth/sites`.
|
|
39
|
+
*
|
|
40
|
+
* @throws {WorkspaceFetchError} `not_authenticated` if no tokens are stored,
|
|
41
|
+
* `token_refresh_failed` if the access token can't be obtained/refreshed, or
|
|
42
|
+
* `http_error` (carrying `status`/`body`) on a non-2xx response. Never
|
|
43
|
+
* terminates the process.
|
|
44
|
+
*/
|
|
45
|
+
export async function listWorkspaces() {
|
|
46
|
+
const stored = loadTokens();
|
|
47
|
+
if (!stored) {
|
|
48
|
+
throw new WorkspaceFetchError('not_authenticated', 'Not logged in.');
|
|
49
|
+
}
|
|
50
|
+
const config = loadConfig();
|
|
51
|
+
const authServerUrl = config.apiUrl;
|
|
52
|
+
const client = new OAuthClient({
|
|
53
|
+
clientId: config.oauthClientId,
|
|
54
|
+
authServerUrl,
|
|
55
|
+
});
|
|
56
|
+
// The OAuthClient constructor only loads tokens lazily via the disk path.
|
|
57
|
+
// Seed it with the freshly-loaded tokens so getAccessToken() can refresh
|
|
58
|
+
// (or use) them instead of throwing "No access token available".
|
|
59
|
+
client.setTokensFromStorage(stored);
|
|
60
|
+
let token;
|
|
61
|
+
try {
|
|
62
|
+
token = await client.getAccessToken();
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
throw new WorkspaceFetchError('token_refresh_failed', 'Token expired and refresh failed.');
|
|
66
|
+
}
|
|
67
|
+
const url = new URL('/v1/auth/sites', authServerUrl);
|
|
68
|
+
const res = await fetch(url.toString(), {
|
|
69
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
70
|
+
});
|
|
71
|
+
if (!res.ok) {
|
|
72
|
+
const body = await res.text();
|
|
73
|
+
throw new WorkspaceFetchError('http_error', `Failed to fetch workspaces (${res.status}).`, { status: res.status, body });
|
|
74
|
+
}
|
|
75
|
+
// Backend returns { sites: [...], current_workspace_id: "..." }.
|
|
76
|
+
// Tolerate older bare-array responses for forward compat.
|
|
77
|
+
const data = (await res.json());
|
|
78
|
+
return Array.isArray(data) ? data : (data.sites ?? []);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=workspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../src/workspaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA2BzC;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAA0B;IAC9B,MAAM,CAAU;IAChB,IAAI,CAAU;IAEvB,YACE,IAA6B,EAC7B,OAAe,EACf,OAA4C;QAE5C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;IAC5B,CAAC;CACF;AAQD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,mBAAmB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC,aAAa;QAC9B,aAAa;KACd,CAAC,CAAC;IACH,0EAA0E;IAC1E,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAEpC,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,mBAAmB,CAC3B,sBAAsB,EACtB,mCAAmC,CACpC,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;QACtC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;KAC9C,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,mBAAmB,CAC3B,YAAY,EACZ,+BAA+B,GAAG,CAAC,MAAM,IAAI,EAC7C,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAC7B,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,0DAA0D;IAC1D,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4C,CAAC;IAC3E,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.test.d.ts","sourceRoot":"","sources":["../src/workspaces.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { listWorkspaces, WorkspaceFetchError } from './workspaces.js';
|
|
3
|
+
// --- Module mocks -----------------------------------------------------------
|
|
4
|
+
const mockLoadTokens = vi.fn();
|
|
5
|
+
const mockGetAccessToken = vi.fn();
|
|
6
|
+
const mockSetTokensFromStorage = vi.fn();
|
|
7
|
+
vi.mock('./token-store.js', () => ({
|
|
8
|
+
loadTokens: () => mockLoadTokens(),
|
|
9
|
+
}));
|
|
10
|
+
vi.mock('./config.js', () => ({
|
|
11
|
+
loadConfig: () => ({
|
|
12
|
+
environment: 'staging',
|
|
13
|
+
apiUrl: 'https://api.example.test',
|
|
14
|
+
authUrl: 'https://auth.example.test',
|
|
15
|
+
clientUrl: 'https://app.example.test',
|
|
16
|
+
oauthClientId: 'test-client',
|
|
17
|
+
}),
|
|
18
|
+
}));
|
|
19
|
+
vi.mock('./oauth-client.js', () => ({
|
|
20
|
+
OAuthClient: class {
|
|
21
|
+
setTokensFromStorage = mockSetTokensFromStorage;
|
|
22
|
+
getAccessToken = () => mockGetAccessToken();
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
const FAKE_TOKENS = {
|
|
26
|
+
accessToken: 'a',
|
|
27
|
+
refreshToken: 'r',
|
|
28
|
+
expiresAt: Date.now() + 60_000,
|
|
29
|
+
};
|
|
30
|
+
const SITE = {
|
|
31
|
+
workspace_id: '019f0000-0000-7000-8000-000000000001',
|
|
32
|
+
workspace_name: 'Acme',
|
|
33
|
+
workspace_url_key: 'acme',
|
|
34
|
+
user_id: '019f0000-0000-7000-8000-0000000000aa',
|
|
35
|
+
role: 'owner',
|
|
36
|
+
is_primary: true,
|
|
37
|
+
last_accessed_at: null,
|
|
38
|
+
};
|
|
39
|
+
describe('listWorkspaces', () => {
|
|
40
|
+
let exitSpy;
|
|
41
|
+
beforeEach(() => {
|
|
42
|
+
vi.clearAllMocks();
|
|
43
|
+
mockGetAccessToken.mockResolvedValue('access-token');
|
|
44
|
+
// Guard: the library must NEVER terminate the caller's process (R2F1).
|
|
45
|
+
exitSpy = vi
|
|
46
|
+
.spyOn(process, 'exit')
|
|
47
|
+
.mockImplementation((() => undefined));
|
|
48
|
+
});
|
|
49
|
+
afterEach(() => {
|
|
50
|
+
exitSpy.mockRestore();
|
|
51
|
+
vi.unstubAllGlobals();
|
|
52
|
+
});
|
|
53
|
+
it('throws (does not process.exit) when not authenticated — R2F1', async () => {
|
|
54
|
+
mockLoadTokens.mockReturnValue(null);
|
|
55
|
+
await expect(listWorkspaces()).rejects.toBeInstanceOf(WorkspaceFetchError);
|
|
56
|
+
await expect(listWorkspaces()).rejects.toMatchObject({
|
|
57
|
+
code: 'not_authenticated',
|
|
58
|
+
});
|
|
59
|
+
expect(exitSpy).not.toHaveBeenCalled();
|
|
60
|
+
});
|
|
61
|
+
it('throws token_refresh_failed (not exit) when the token cannot be obtained', async () => {
|
|
62
|
+
mockLoadTokens.mockReturnValue(FAKE_TOKENS);
|
|
63
|
+
mockGetAccessToken.mockRejectedValue(new Error('refresh failed'));
|
|
64
|
+
await expect(listWorkspaces()).rejects.toMatchObject({
|
|
65
|
+
code: 'token_refresh_failed',
|
|
66
|
+
});
|
|
67
|
+
expect(exitSpy).not.toHaveBeenCalled();
|
|
68
|
+
});
|
|
69
|
+
it('throws http_error carrying status/body on a non-2xx response', async () => {
|
|
70
|
+
mockLoadTokens.mockReturnValue(FAKE_TOKENS);
|
|
71
|
+
vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
|
|
72
|
+
ok: false,
|
|
73
|
+
status: 403,
|
|
74
|
+
text: () => Promise.resolve('forbidden'),
|
|
75
|
+
}));
|
|
76
|
+
const err = await listWorkspaces().catch((e) => e);
|
|
77
|
+
expect(err).toBeInstanceOf(WorkspaceFetchError);
|
|
78
|
+
expect(err).toMatchObject({
|
|
79
|
+
code: 'http_error',
|
|
80
|
+
status: 403,
|
|
81
|
+
body: 'forbidden',
|
|
82
|
+
});
|
|
83
|
+
expect(exitSpy).not.toHaveBeenCalled();
|
|
84
|
+
});
|
|
85
|
+
it('unwraps the { sites } envelope and returns the corrected WorkspaceSite shape', async () => {
|
|
86
|
+
mockLoadTokens.mockReturnValue(FAKE_TOKENS);
|
|
87
|
+
vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
|
|
88
|
+
ok: true,
|
|
89
|
+
json: () => Promise.resolve({
|
|
90
|
+
sites: [SITE],
|
|
91
|
+
current_workspace_id: SITE.workspace_id,
|
|
92
|
+
}),
|
|
93
|
+
}));
|
|
94
|
+
const sites = await listWorkspaces();
|
|
95
|
+
expect(sites).toHaveLength(1);
|
|
96
|
+
expect(sites[0]).toEqual(SITE);
|
|
97
|
+
// H1: role/user_id/last_accessed_at are part of the typed surface.
|
|
98
|
+
expect(sites[0].role).toBe('owner');
|
|
99
|
+
expect(sites[0].user_id).toBeDefined();
|
|
100
|
+
});
|
|
101
|
+
it('tolerates a bare-array response for forward compat', async () => {
|
|
102
|
+
mockLoadTokens.mockReturnValue(FAKE_TOKENS);
|
|
103
|
+
vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
|
|
104
|
+
ok: true,
|
|
105
|
+
json: () => Promise.resolve([SITE]),
|
|
106
|
+
}));
|
|
107
|
+
const sites = await listWorkspaces();
|
|
108
|
+
expect(sites).toEqual([SITE]);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=workspaces.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.test.js","sourceRoot":"","sources":["../src/workspaces.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@levr-one/auth",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Shared OAuth 2.1 client with self-healing token management for TQ MCP servers",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc",
|
|
10
|
+
"dev": "tsc --watch",
|
|
11
|
+
"typecheck": "tsgo --noEmit",
|
|
12
|
+
"lint:ts": "eslint src/**/*.ts --no-warn-ignored",
|
|
13
|
+
"lint:format": "prettier --check \"src/**/*.ts\"",
|
|
14
|
+
"lint": "npm-run-all --parallel \"lint:*\"",
|
|
15
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
16
|
+
"test": "vitest run",
|
|
17
|
+
"test:unit": "vitest run",
|
|
18
|
+
"test:watch": "vitest",
|
|
19
|
+
"precommit": "tsc"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"open": "^10.1.0"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@eslint/js": "^9.18.0",
|
|
26
|
+
"@types/node": "^20.0.0",
|
|
27
|
+
"@typescript/tsgo": "npm:@typescript/native-preview@^7.0.0-dev.20260113.1",
|
|
28
|
+
"eslint": "^9.18.0",
|
|
29
|
+
"globals": "^16.0.0",
|
|
30
|
+
"npm-run-all": "^4.1.5",
|
|
31
|
+
"prettier": "^3.4.2",
|
|
32
|
+
"typescript": "^5.0.0",
|
|
33
|
+
"typescript-eslint": "^8.20.0",
|
|
34
|
+
"vitest": "^4.1.0-beta.2"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist"
|
|
38
|
+
],
|
|
39
|
+
"exports": {
|
|
40
|
+
".": {
|
|
41
|
+
"source": "./src/index.ts",
|
|
42
|
+
"types": "./dist/index.d.ts",
|
|
43
|
+
"default": "./dist/index.js"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public"
|
|
48
|
+
},
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "https://github.com/BitModern/levr.git",
|
|
52
|
+
"directory": "packages/auth"
|
|
53
|
+
},
|
|
54
|
+
"bugs": {
|
|
55
|
+
"url": "https://github.com/BitModern/levr/issues"
|
|
56
|
+
},
|
|
57
|
+
"homepage": "https://github.com/BitModern/levr/tree/main/packages/auth#readme"
|
|
58
|
+
}
|