@yigemo/choosefire 0.1.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.
Files changed (62) hide show
  1. package/README.md +83 -0
  2. package/contracts/choosefire-family-wealth/v2/capability-matrix.v1.json +464 -0
  3. package/contracts/choosefire-family-wealth/v2/golden/performance.v1.json +79 -0
  4. package/contracts/choosefire-family-wealth/v2/golden/r2-contract.v1.json +1070 -0
  5. package/contracts/choosefire-family-wealth/v2/golden/scenarios.v1.json +241 -0
  6. package/contracts/choosefire-family-wealth/v2/golden/transport.v1.json +207 -0
  7. package/contracts/choosefire-family-wealth/v2/manifest.json +58 -0
  8. package/contracts/choosefire-family-wealth/v2/openapi.generated.json +2605 -0
  9. package/contracts/choosefire-family-wealth/v2/runtime-schemas/family-wealth.v2.schema.json +2127 -0
  10. package/contracts/choosefire-family-wealth/v2/taxonomies/account-types.v1.json +41 -0
  11. package/contracts/choosefire-family-wealth/v2/taxonomies/asset-classes.v1.json +45 -0
  12. package/contracts/choosefire-family-wealth/v2/taxonomies/transaction-types.v1.json +57 -0
  13. package/contracts/choosefire-financial-workspace/v1/field-registry.generated.json +137 -0
  14. package/contracts/choosefire-financial-workspace/v1/field-registry.manifest.json +11 -0
  15. package/contracts/choosefire-financial-workspace/v1/golden/commands.invalid.json +583 -0
  16. package/contracts/choosefire-financial-workspace/v1/golden/commands.valid.json +201 -0
  17. package/contracts/choosefire-financial-workspace/v1/golden/cursors.invalid.json +82 -0
  18. package/contracts/choosefire-financial-workspace/v1/golden/errors.invalid.json +191 -0
  19. package/contracts/choosefire-financial-workspace/v1/golden/errors.valid.json +298 -0
  20. package/contracts/choosefire-financial-workspace/v1/golden/fingerprints.json +105 -0
  21. package/contracts/choosefire-financial-workspace/v1/golden/projections.invalid.json +3543 -0
  22. package/contracts/choosefire-financial-workspace/v1/golden/projections.valid.json +2953 -0
  23. package/contracts/choosefire-financial-workspace/v1/manifest.json +69 -0
  24. package/contracts/choosefire-financial-workspace/v1/openapi.generated.json +1987 -0
  25. package/contracts/choosefire-financial-workspace/v1/runtime-schemas/financial-workspace.v1.schema.json +1496 -0
  26. package/dist/args.d.ts +5 -0
  27. package/dist/args.js +60 -0
  28. package/dist/args.js.map +1 -0
  29. package/dist/auth.d.ts +55 -0
  30. package/dist/auth.js +480 -0
  31. package/dist/auth.js.map +1 -0
  32. package/dist/commands.d.ts +4 -0
  33. package/dist/commands.js +637 -0
  34. package/dist/commands.js.map +1 -0
  35. package/dist/config.d.ts +10 -0
  36. package/dist/config.js +74 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/family-wealth-v2-contracts.d.ts +276 -0
  39. package/dist/family-wealth-v2-contracts.js +77 -0
  40. package/dist/family-wealth-v2-contracts.js.map +1 -0
  41. package/dist/family-wealth-v2-http.d.ts +65 -0
  42. package/dist/family-wealth-v2-http.js +340 -0
  43. package/dist/family-wealth-v2-http.js.map +1 -0
  44. package/dist/financial-workspace-contracts.d.ts +191 -0
  45. package/dist/financial-workspace-contracts.js +282 -0
  46. package/dist/financial-workspace-contracts.js.map +1 -0
  47. package/dist/http.d.ts +76 -0
  48. package/dist/http.js +446 -0
  49. package/dist/http.js.map +1 -0
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.js +50 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/output.d.ts +18 -0
  54. package/dist/output.js +111 -0
  55. package/dist/output.js.map +1 -0
  56. package/dist/token-store.d.ts +27 -0
  57. package/dist/token-store.js +408 -0
  58. package/dist/token-store.js.map +1 -0
  59. package/dist/types.d.ts +65 -0
  60. package/dist/types.js +5 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +43 -0
package/dist/args.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import type { ParsedArgs } from './types.js';
2
+ export declare function parseArgs(argv: string[]): ParsedArgs;
3
+ export declare function getStringFlag(flags: ParsedArgs['flags'], name: string): string | undefined;
4
+ export declare function getBooleanFlag(flags: ParsedArgs['flags'], name: string): boolean;
5
+ export declare function getRepeatedStringFlag(flags: ParsedArgs['flags'], name: string): string[];
package/dist/args.js ADDED
@@ -0,0 +1,60 @@
1
+ export function parseArgs(argv) {
2
+ const positionals = [];
3
+ const flags = {};
4
+ for (let index = 0; index < argv.length; index += 1) {
5
+ const token = argv[index];
6
+ if (token === '--') {
7
+ continue;
8
+ }
9
+ if (!token.startsWith('-')) {
10
+ positionals.push(token);
11
+ continue;
12
+ }
13
+ const normalized = token.replace(/^--?/, '');
14
+ const equalIndex = normalized.indexOf('=');
15
+ if (equalIndex >= 0) {
16
+ setFlag(flags, normalized.slice(0, equalIndex), normalized.slice(equalIndex + 1));
17
+ continue;
18
+ }
19
+ const next = argv[index + 1];
20
+ if (!next || next.startsWith('-')) {
21
+ setFlag(flags, normalized, true);
22
+ continue;
23
+ }
24
+ setFlag(flags, normalized, next);
25
+ index += 1;
26
+ }
27
+ return { positionals, flags };
28
+ }
29
+ export function getStringFlag(flags, name) {
30
+ const value = flags[name];
31
+ if (Array.isArray(value))
32
+ return value.at(-1);
33
+ return typeof value === 'string' ? value : undefined;
34
+ }
35
+ export function getBooleanFlag(flags, name) {
36
+ return flags[name] === true;
37
+ }
38
+ export function getRepeatedStringFlag(flags, name) {
39
+ const value = flags[name];
40
+ if (Array.isArray(value))
41
+ return value;
42
+ return typeof value === 'string' ? [value] : [];
43
+ }
44
+ function setFlag(flags, name, value) {
45
+ const key = toCamelCase(name);
46
+ const existing = flags[key];
47
+ if (existing === undefined) {
48
+ flags[key] = value;
49
+ return;
50
+ }
51
+ if (Array.isArray(existing)) {
52
+ existing.push(String(value));
53
+ return;
54
+ }
55
+ flags[key] = [String(existing), String(value)];
56
+ }
57
+ function toCamelCase(value) {
58
+ return value.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
59
+ }
60
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
package/dist/auth.d.ts ADDED
@@ -0,0 +1,55 @@
1
+ import type { CliConfig, ChooseFireUser, LegacyCredential, WorkspaceCredential } from './types.js';
2
+ type LoginOptions = {
3
+ port?: number;
4
+ openBrowser?: boolean;
5
+ fetch?: typeof fetch;
6
+ credentialPath?: string;
7
+ now?: () => Date;
8
+ };
9
+ export type CodeExchangeBody = {
10
+ code: string;
11
+ redirectUri: string;
12
+ codeVerifier: string;
13
+ nonce: string;
14
+ };
15
+ type AuthRequestOptions = {
16
+ fetch?: typeof fetch;
17
+ credentialPath?: string;
18
+ now?: () => Date;
19
+ };
20
+ export declare function login(config: CliConfig, options?: LoginOptions): Promise<{
21
+ success: boolean;
22
+ apiBaseUrl: string;
23
+ configPath: string;
24
+ user: ChooseFireUser | null;
25
+ workspaceAuthenticated: boolean;
26
+ }>;
27
+ export declare function exchangeLoginCode(config: CliConfig, body: CodeExchangeBody, options?: AuthRequestOptions): Promise<{
28
+ user: ChooseFireUser | null;
29
+ legacy: LegacyCredential;
30
+ workspace: WorkspaceCredential | null;
31
+ }>;
32
+ export declare function refreshWorkspaceAuth(config: CliConfig, options?: AuthRequestOptions): Promise<{
33
+ success: boolean;
34
+ workspaceAuthenticated: boolean;
35
+ }>;
36
+ export declare function logoutWorkspace(config: CliConfig, options?: Omit<AuthRequestOptions, 'now'>): Promise<{
37
+ success: boolean;
38
+ configPath: string;
39
+ }>;
40
+ export declare function logout(credentialPath?: string): {
41
+ success: boolean;
42
+ configPath: string;
43
+ };
44
+ export declare function authStatus(config: CliConfig, credentialPath?: string): {
45
+ authenticated: boolean;
46
+ workspaceAuthenticated: boolean;
47
+ workspaceEnabled: boolean;
48
+ familyWealthV2Enabled: boolean;
49
+ apiBaseUrl: string;
50
+ accountsIssuer: string;
51
+ tokenSource: string;
52
+ configPath: string;
53
+ user: ChooseFireUser | null;
54
+ };
55
+ export {};
package/dist/auth.js ADDED
@@ -0,0 +1,480 @@
1
+ import { createHash, randomBytes } from 'node:crypto';
2
+ import { createServer } from 'node:http';
3
+ import { spawn } from 'node:child_process';
4
+ import { WORKSPACE_AUDIENCE, WORKSPACE_CREDENTIAL_KIND, WORKSPACE_LOGOUT_KIND, WORKSPACE_REFRESH_KIND, } from './types.js';
5
+ import { clearStoredAuth, clearWorkspaceAuth, getConfigPath, readStoredAuth, writeStoredAuth, } from './token-store.js';
6
+ export async function login(config, options = {}) {
7
+ const port = options.port ?? 8787;
8
+ const redirectUri = `http://127.0.0.1:${port}/callback`;
9
+ const state = randomBase64Url(32);
10
+ const nonce = randomBase64Url(32);
11
+ const codeVerifier = randomBase64Url(64);
12
+ const codeChallenge = sha256Base64Url(codeVerifier);
13
+ const authorizeUrl = new URL('/authorize', config.accountsIssuer);
14
+ authorizeUrl.searchParams.set('client_id', config.workspaceEnabled ? 'choosefire-cli' : config.oidcClientId);
15
+ authorizeUrl.searchParams.set('response_type', 'code');
16
+ authorizeUrl.searchParams.set('scope', 'openid email profile');
17
+ authorizeUrl.searchParams.set('redirect_uri', redirectUri);
18
+ authorizeUrl.searchParams.set('code_challenge', codeChallenge);
19
+ authorizeUrl.searchParams.set('code_challenge_method', 'S256');
20
+ authorizeUrl.searchParams.set('state', state);
21
+ authorizeUrl.searchParams.set('nonce', nonce);
22
+ const callbackPromise = waitForCallback(port);
23
+ if (options.openBrowser !== false)
24
+ openUrl(authorizeUrl.toString());
25
+ const callback = await callbackPromise;
26
+ if (callback.state !== state)
27
+ throw new Error('ChooseFIRE login callback was rejected');
28
+ const result = await exchangeLoginCode(config, { code: callback.code, redirectUri, codeVerifier, nonce }, options);
29
+ return {
30
+ success: true,
31
+ apiBaseUrl: config.apiBaseUrl,
32
+ configPath: options.credentialPath ?? getConfigPath(),
33
+ user: result.user,
34
+ workspaceAuthenticated: Boolean(result.workspace),
35
+ };
36
+ }
37
+ export async function exchangeLoginCode(config, body, options = {}) {
38
+ const requestStartedAt = (options.now ?? (() => new Date()))();
39
+ const route = config.workspaceEnabled
40
+ ? '/choosefire/auth/accounts/callback/cli'
41
+ : '/choosefire/auth/accounts/callback';
42
+ const payload = await postJson(config.apiBaseUrl, route, body, options.fetch, 'login');
43
+ const existing = readStoredAuth(options.credentialPath);
44
+ if (!config.workspaceEnabled) {
45
+ const response = parseLegacyLoginResponse(payload);
46
+ const legacy = legacyFromResponse(config, response, requestStartedAt);
47
+ writeStoredAuth({ version: 2, legacy, workspace: existing?.workspace }, options.credentialPath);
48
+ return { user: response.user ?? null, legacy, workspace: existing?.workspace ?? null };
49
+ }
50
+ const response = parseDualLoginResponse(payload);
51
+ const legacy = legacyFromResponse(config, response, requestStartedAt);
52
+ const workspace = workspaceFromWire(config, response.workspace, requestStartedAt);
53
+ writeStoredAuth({ version: 2, legacy, workspace }, options.credentialPath);
54
+ return { user: response.user, legacy, workspace };
55
+ }
56
+ export async function refreshWorkspaceAuth(config, options = {}) {
57
+ const current = requireBoundWorkspaceCredential(config);
58
+ const requestStartedAt = (options.now ?? (() => new Date()))();
59
+ try {
60
+ const payload = await postJson(config.apiBaseUrl, '/choosefire/auth/workspace/refresh', { kind: WORKSPACE_REFRESH_KIND, refreshToken: current.refreshToken }, options.fetch, 'workspace refresh');
61
+ const wire = parseWorkspaceWire(payload);
62
+ const workspace = workspaceFromWire(config, wire, requestStartedAt);
63
+ const stored = readStoredAuth(options.credentialPath);
64
+ writeStoredAuth({ version: 2, legacy: stored?.legacy, workspace }, options.credentialPath);
65
+ return { success: true, workspaceAuthenticated: true };
66
+ }
67
+ catch (error) {
68
+ // A rotating refresh request can have an unknown remote outcome. Never
69
+ // retain and retry the old refresh credential after any failed dispatch.
70
+ clearWorkspaceAuth(options.credentialPath);
71
+ throw error;
72
+ }
73
+ }
74
+ export async function logoutWorkspace(config, options = {}) {
75
+ try {
76
+ if (config.workspaceEnabled && config.workspaceCredential) {
77
+ const current = requireBoundWorkspaceCredential(config);
78
+ await postJson(config.apiBaseUrl, '/choosefire/auth/workspace/logout', { kind: WORKSPACE_LOGOUT_KIND, refreshToken: current.refreshToken }, options.fetch, 'workspace logout');
79
+ }
80
+ return { success: true, configPath: options.credentialPath ?? getConfigPath() };
81
+ }
82
+ finally {
83
+ clearWorkspaceAuth(options.credentialPath);
84
+ }
85
+ }
86
+ export function logout(credentialPath) {
87
+ clearStoredAuth(credentialPath);
88
+ return { success: true, configPath: credentialPath ?? getConfigPath() };
89
+ }
90
+ export function authStatus(config, credentialPath) {
91
+ const storedAuth = readStoredAuth(credentialPath);
92
+ const matchingLegacy = storedAuth?.legacy?.apiBaseUrl === config.apiBaseUrl;
93
+ return {
94
+ authenticated: Boolean(config.accessToken),
95
+ workspaceAuthenticated: Boolean(config.workspaceCredential),
96
+ workspaceEnabled: config.workspaceEnabled,
97
+ familyWealthV2Enabled: config.familyWealthV2Enabled === true,
98
+ apiBaseUrl: config.apiBaseUrl,
99
+ accountsIssuer: config.accountsIssuer,
100
+ tokenSource: process.env.CHOOSEFIRE_ACCESS_TOKEN
101
+ ? 'environment'
102
+ : matchingLegacy
103
+ ? 'local_config'
104
+ : 'none',
105
+ configPath: credentialPath ?? getConfigPath(),
106
+ user: matchingLegacy ? safeStoredUser(storedAuth?.legacy?.user) : null,
107
+ };
108
+ }
109
+ function parseLegacyLoginResponse(value) {
110
+ if (!isRecord(value))
111
+ invalidResponse('login');
112
+ assertAllowedKeys(value, [
113
+ 'accessToken',
114
+ 'tokenType',
115
+ 'expiresIn',
116
+ 'user',
117
+ 'accountsLogoutUrl',
118
+ ]);
119
+ requireBearerToken(value.accessToken);
120
+ if (value.tokenType !== undefined && value.tokenType !== 'Bearer')
121
+ invalidResponse('login');
122
+ if (value.expiresIn !== undefined && !isLegacyExpiresIn(value.expiresIn)) {
123
+ invalidResponse('login');
124
+ }
125
+ if (value.accountsLogoutUrl !== undefined)
126
+ requireAbsoluteUrl(value.accountsLogoutUrl);
127
+ return {
128
+ accessToken: value.accessToken,
129
+ tokenType: value.tokenType,
130
+ expiresIn: value.expiresIn,
131
+ user: value.user === undefined ? undefined : parseCompatibleUser(value.user),
132
+ accountsLogoutUrl: value.accountsLogoutUrl,
133
+ };
134
+ }
135
+ function parseDualLoginResponse(value) {
136
+ if (!isRecord(value))
137
+ invalidResponse('login');
138
+ assertExactKeys(value, [
139
+ 'accessToken',
140
+ 'tokenType',
141
+ 'expiresIn',
142
+ 'user',
143
+ 'accountsLogoutUrl',
144
+ 'workspace',
145
+ ]);
146
+ requireBearerToken(value.accessToken);
147
+ if (value.tokenType !== 'Bearer')
148
+ invalidResponse('login');
149
+ if (!isLegacyExpiresIn(value.expiresIn))
150
+ invalidResponse('login');
151
+ const user = parseStrictUser(value.user);
152
+ requireAbsoluteUrl(value.accountsLogoutUrl);
153
+ const workspace = parseWorkspaceWire(value.workspace);
154
+ return {
155
+ accessToken: value.accessToken,
156
+ tokenType: 'Bearer',
157
+ expiresIn: value.expiresIn,
158
+ user,
159
+ accountsLogoutUrl: value.accountsLogoutUrl,
160
+ workspace,
161
+ };
162
+ }
163
+ function parseWorkspaceWire(value) {
164
+ if (!isRecord(value))
165
+ invalidResponse('workspace credential');
166
+ assertExactKeys(value, [
167
+ 'kind',
168
+ 'accessToken',
169
+ 'tokenType',
170
+ 'expiresIn',
171
+ 'refreshToken',
172
+ 'refreshExpiresIn',
173
+ 'audience',
174
+ 'scopes',
175
+ ]);
176
+ if (value.kind !== WORKSPACE_CREDENTIAL_KIND)
177
+ invalidResponse('workspace credential');
178
+ requireBearerToken(value.accessToken);
179
+ if (value.tokenType !== 'Bearer')
180
+ invalidResponse('workspace credential');
181
+ const accessLifetime = parsePositiveDuration(value.expiresIn, 900);
182
+ if (typeof value.refreshToken !== 'string' || !/^[A-Za-z0-9_-]{43}$/.test(value.refreshToken)) {
183
+ invalidResponse('workspace credential');
184
+ }
185
+ const refreshLifetime = parsePositiveDuration(value.refreshExpiresIn, 2_592_000);
186
+ if (accessLifetime > refreshLifetime)
187
+ invalidResponse('workspace credential');
188
+ if (value.audience !== WORKSPACE_AUDIENCE)
189
+ invalidResponse('workspace credential');
190
+ if (!hasCanonicalWorkspaceScopes(value.scopes))
191
+ invalidResponse('workspace credential');
192
+ return value;
193
+ }
194
+ function legacyFromResponse(config, response, requestStartedAt) {
195
+ return {
196
+ apiBaseUrl: config.apiBaseUrl,
197
+ accessToken: response.accessToken,
198
+ tokenType: response.tokenType,
199
+ expiresIn: response.expiresIn,
200
+ savedAt: requestStartedAt.toISOString(),
201
+ user: response.user,
202
+ accountsLogoutUrl: response.accountsLogoutUrl,
203
+ };
204
+ }
205
+ function workspaceFromWire(config, response, requestStartedAt) {
206
+ return {
207
+ kind: WORKSPACE_CREDENTIAL_KIND,
208
+ accessToken: response.accessToken,
209
+ tokenType: 'Bearer',
210
+ accessExpiresAt: expiryFrom(requestStartedAt, response.expiresIn),
211
+ refreshToken: response.refreshToken,
212
+ refreshExpiresAt: expiryFrom(requestStartedAt, response.refreshExpiresIn),
213
+ audience: WORKSPACE_AUDIENCE,
214
+ registeredClientId: 'choosefire-cli',
215
+ scopes: [...response.scopes],
216
+ apiOrigin: config.apiBaseUrl,
217
+ issuer: config.accountsIssuer,
218
+ };
219
+ }
220
+ function requireBoundWorkspaceCredential(config) {
221
+ const credential = config.workspaceCredential;
222
+ if (!config.workspaceEnabled ||
223
+ !credential ||
224
+ credential.apiOrigin !== config.apiBaseUrl ||
225
+ credential.issuer !== config.accountsIssuer ||
226
+ credential.audience !== WORKSPACE_AUDIENCE ||
227
+ credential.registeredClientId !== 'choosefire-cli') {
228
+ throw new Error('ChooseFIRE workspace authentication is required');
229
+ }
230
+ return credential;
231
+ }
232
+ async function postJson(apiOrigin, path, body, fetchImplementation = fetch, operation) {
233
+ let response;
234
+ try {
235
+ response = await fetchImplementation(`${apiOrigin}${path}`, {
236
+ method: 'POST',
237
+ redirect: 'error',
238
+ headers: { accept: 'application/json', 'content-type': 'application/json' },
239
+ body: JSON.stringify(body),
240
+ });
241
+ }
242
+ catch {
243
+ throw new Error(`ChooseFIRE ${operation} request failed`);
244
+ }
245
+ const contentType = response.headers.get('content-type')?.split(';', 1)[0]?.trim().toLowerCase();
246
+ const payload = await response.json().catch(() => null);
247
+ if (response.status !== 200) {
248
+ throw new Error(`ChooseFIRE ${operation} failed (HTTP ${response.status})`);
249
+ }
250
+ if (contentType !== 'application/json' ||
251
+ !isRecord(payload) ||
252
+ !hasExactKeys(payload, ['code', 'success', 'status', 'data']) ||
253
+ payload.code !== 0 ||
254
+ payload.success !== true ||
255
+ payload.status !== 'success') {
256
+ invalidResponse(operation);
257
+ }
258
+ return payload.data;
259
+ }
260
+ function waitForCallback(port) {
261
+ return new Promise((resolve, reject) => {
262
+ const server = createServer((request, response) => {
263
+ try {
264
+ const url = new URL(request.url || '/', `http://127.0.0.1:${port}`);
265
+ if (url.pathname !== '/callback') {
266
+ writeHtml(response, 404, 'ChooseFIRE CLI login route not found.');
267
+ return;
268
+ }
269
+ if (url.searchParams.has('error') || url.searchParams.has('error_description')) {
270
+ writeHtml(response, 400, 'ChooseFIRE CLI login failed.');
271
+ reject(new Error('ChooseFIRE login callback was rejected'));
272
+ server.close();
273
+ return;
274
+ }
275
+ const code = url.searchParams.get('code');
276
+ const state = url.searchParams.get('state');
277
+ if (!code || !state) {
278
+ writeHtml(response, 400, 'ChooseFIRE CLI login callback is incomplete.');
279
+ reject(new Error('ChooseFIRE login callback was rejected'));
280
+ server.close();
281
+ return;
282
+ }
283
+ writeHtml(response, 200, 'ChooseFIRE CLI login succeeded. You can close this tab.');
284
+ resolve({ code, state });
285
+ server.close();
286
+ }
287
+ catch {
288
+ reject(new Error('ChooseFIRE login callback was rejected'));
289
+ server.close();
290
+ }
291
+ });
292
+ server.once('error', () => reject(new Error('ChooseFIRE login callback server failed')));
293
+ server.listen(port, '127.0.0.1');
294
+ });
295
+ }
296
+ function writeHtml(response, statusCode, body) {
297
+ response.writeHead(statusCode, { 'content-type': 'text/html; charset=utf-8' });
298
+ response.end(`<!doctype html><title>ChooseFIRE CLI</title><p>${body}</p>`);
299
+ }
300
+ function openUrl(url) {
301
+ const platform = process.platform;
302
+ const command = platform === 'darwin' ? 'open' : platform === 'win32' ? 'cmd' : 'xdg-open';
303
+ const args = platform === 'win32' ? ['/c', 'start', '', url] : [url];
304
+ const child = spawn(command, args, { detached: true, stdio: 'ignore' });
305
+ child.unref();
306
+ }
307
+ function randomBase64Url(byteLength) {
308
+ return base64Url(randomBytes(byteLength));
309
+ }
310
+ function sha256Base64Url(value) {
311
+ return base64Url(createHash('sha256').update(value).digest());
312
+ }
313
+ function base64Url(value) {
314
+ return value
315
+ .toString('base64')
316
+ .replace(/\+/g, '-')
317
+ .replace(/\//g, '_')
318
+ .replace(/=+$/g, '');
319
+ }
320
+ function expiryFrom(start, seconds) {
321
+ return new Date(start.getTime() + seconds * 1000).toISOString();
322
+ }
323
+ function parsePositiveDuration(value, maximum) {
324
+ if (typeof value !== 'number' ||
325
+ !Number.isSafeInteger(value) ||
326
+ value <= 0 ||
327
+ value > maximum) {
328
+ invalidResponse('credential');
329
+ }
330
+ return value;
331
+ }
332
+ function assertAllowedKeys(value, allowed) {
333
+ const keys = new Set(allowed);
334
+ if (Object.keys(value).some((key) => !keys.has(key)))
335
+ invalidResponse('login');
336
+ }
337
+ function assertExactKeys(value, expected) {
338
+ assertAllowedKeys(value, expected);
339
+ if (expected.some((key) => !(key in value)))
340
+ invalidResponse('credential');
341
+ }
342
+ function hasExactKeys(value, expected) {
343
+ const keys = Object.keys(value);
344
+ return keys.length === expected.length && expected.every((key) => keys.includes(key));
345
+ }
346
+ function requireString(value) {
347
+ if (typeof value !== 'string' || value.length === 0)
348
+ invalidResponse('credential');
349
+ }
350
+ function requireBearerToken(value) {
351
+ if (typeof value !== 'string' ||
352
+ value.length === 0 ||
353
+ value.length > 8192 ||
354
+ !/^[A-Za-z0-9._~-]+$/.test(value)) {
355
+ invalidResponse('credential');
356
+ }
357
+ }
358
+ function requireAbsoluteUrl(value) {
359
+ if (typeof value !== 'string' || value.length === 0 || value.length > 2048) {
360
+ invalidResponse('login');
361
+ }
362
+ try {
363
+ const url = new URL(value);
364
+ const localDevelopmentUrl = process.env.NODE_ENV !== 'production' &&
365
+ (url.hostname === 'localhost' || url.hostname === '127.0.0.1');
366
+ if (url.protocol !== 'https:' && !localDevelopmentUrl)
367
+ invalidResponse('login');
368
+ }
369
+ catch {
370
+ invalidResponse('login');
371
+ }
372
+ }
373
+ function parseStrictUser(value) {
374
+ if (!isRecord(value) ||
375
+ !hasRequiredAndOptionalKeys(value, ['id'], ['email', 'emailVerified', 'name', 'picture', 'status', 'lastLoginAt', 'createdAt'])) {
376
+ invalidResponse('login');
377
+ }
378
+ return projectCompatibleUser(value);
379
+ }
380
+ function parseCompatibleUser(value) {
381
+ if (!isRecord(value))
382
+ invalidResponse('login');
383
+ return projectCompatibleUser(value);
384
+ }
385
+ function safeStoredUser(value) {
386
+ if (value === undefined)
387
+ return null;
388
+ try {
389
+ return parseCompatibleUser(value);
390
+ }
391
+ catch {
392
+ return null;
393
+ }
394
+ }
395
+ function projectCompatibleUser(value) {
396
+ const validId = (typeof value.id === 'string' && value.id.length > 0 && value.id.length <= 200) ||
397
+ (typeof value.id === 'number' && Number.isSafeInteger(value.id) && value.id > 0);
398
+ if (!validId ||
399
+ !isOptionalNullableString(value.email, 320) ||
400
+ (value.emailVerified !== undefined && typeof value.emailVerified !== 'boolean') ||
401
+ !isOptionalNullableString(value.name, 300) ||
402
+ !isOptionalNullableString(value.picture, 2048) ||
403
+ !isOptionalString(value.status, 100) ||
404
+ !isOptionalNullableString(value.lastLoginAt, 100) ||
405
+ !isOptionalNullableString(value.createdAt, 100)) {
406
+ invalidResponse('login');
407
+ }
408
+ const user = { id: value.id };
409
+ if (value.email !== undefined)
410
+ user.email = value.email;
411
+ if (value.emailVerified !== undefined)
412
+ user.emailVerified = value.emailVerified;
413
+ if (value.name !== undefined)
414
+ user.name = value.name;
415
+ if (value.picture !== undefined)
416
+ user.picture = value.picture;
417
+ if (value.status !== undefined)
418
+ user.status = value.status;
419
+ if (value.lastLoginAt !== undefined)
420
+ user.lastLoginAt = value.lastLoginAt;
421
+ if (value.createdAt !== undefined)
422
+ user.createdAt = value.createdAt;
423
+ return user;
424
+ }
425
+ function hasRequiredAndOptionalKeys(value, required, optional) {
426
+ const allowed = new Set([...required, ...optional]);
427
+ return required.every((key) => Object.hasOwn(value, key)) &&
428
+ Object.keys(value).every((key) => allowed.has(key));
429
+ }
430
+ function isOptionalNullableString(value, maximumLength) {
431
+ return value === undefined || value === null ||
432
+ (typeof value === 'string' && value.length <= maximumLength);
433
+ }
434
+ function isOptionalString(value, maximumLength) {
435
+ return value === undefined ||
436
+ (typeof value === 'string' && value.length <= maximumLength);
437
+ }
438
+ function hasCanonicalWorkspaceScopes(value) {
439
+ const canonical = [
440
+ 'workspace:read',
441
+ 'workspace:initialize',
442
+ 'workspace:write:fact',
443
+ ];
444
+ if (!Array.isArray(value) || value.length === 0 || value.length > canonical.length)
445
+ return false;
446
+ let previousIndex = -1;
447
+ for (const scope of value) {
448
+ const index = canonical.indexOf(scope);
449
+ if (index <= previousIndex)
450
+ return false;
451
+ previousIndex = index;
452
+ }
453
+ return true;
454
+ }
455
+ function isLegacyExpiresIn(value) {
456
+ if (typeof value === 'number') {
457
+ return Number.isSafeInteger(value) && value > 0 && value <= 2_592_000;
458
+ }
459
+ if (typeof value !== 'string')
460
+ return false;
461
+ const match = /^(\d+)([smhd])?$/.exec(value);
462
+ if (!match)
463
+ return false;
464
+ const amount = Number(match[1]);
465
+ const multiplier = match[2] === 'm'
466
+ ? 60
467
+ : match[2] === 'h'
468
+ ? 3600
469
+ : match[2] === 'd'
470
+ ? 86_400
471
+ : 1;
472
+ return Number.isSafeInteger(amount) && amount > 0 && amount * multiplier <= 2_592_000;
473
+ }
474
+ function isRecord(value) {
475
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
476
+ }
477
+ function invalidResponse(kind) {
478
+ throw new Error(`ChooseFIRE ${kind} response was invalid`);
479
+ }
480
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type AccountFinancialWorkspaceHttpOptions } from './http.js';
2
+ import { type FamilyWealthV2HttpOptions } from './family-wealth-v2-http.js';
3
+ import type { CliConfig, ParsedArgs } from './types.js';
4
+ export declare function runCommand(config: CliConfig, parsed: ParsedArgs, dependencies?: AccountFinancialWorkspaceHttpOptions & FamilyWealthV2HttpOptions): Promise<unknown>;