@doist/comms-cli 1.3.2 → 1.5.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/CHANGELOG.md +12 -0
- package/README.md +5 -3
- package/dist/commands/auth/helpers.d.ts +2 -0
- package/dist/commands/auth/helpers.d.ts.map +1 -1
- package/dist/commands/auth/helpers.js +52 -0
- package/dist/commands/auth/helpers.js.map +1 -1
- package/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +13 -4
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/status.d.ts +5 -8
- package/dist/commands/auth/status.d.ts.map +1 -1
- package/dist/commands/auth/status.js +28 -22
- package/dist/commands/auth/status.js.map +1 -1
- package/dist/commands/channel/delete.d.ts.map +1 -1
- package/dist/commands/channel/delete.js +1 -13
- package/dist/commands/channel/delete.js.map +1 -1
- package/dist/commands/config/view.d.ts.map +1 -1
- package/dist/commands/config/view.js +7 -1
- package/dist/commands/config/view.js.map +1 -1
- package/dist/commands/conversation/helpers.d.ts +3 -1
- package/dist/commands/conversation/helpers.d.ts.map +1 -1
- package/dist/commands/conversation/index.d.ts.map +1 -1
- package/dist/commands/conversation/index.js +4 -1
- package/dist/commands/conversation/index.js.map +1 -1
- package/dist/commands/conversation/reply.d.ts.map +1 -1
- package/dist/commands/conversation/reply.js +29 -6
- package/dist/commands/conversation/reply.js.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/thread/create.d.ts +1 -0
- package/dist/commands/thread/create.d.ts.map +1 -1
- package/dist/commands/thread/create.js +24 -6
- package/dist/commands/thread/create.js.map +1 -1
- package/dist/commands/thread/index.d.ts.map +1 -1
- package/dist/commands/thread/index.js +8 -2
- package/dist/commands/thread/index.js.map +1 -1
- package/dist/commands/thread/reply.d.ts +1 -0
- package/dist/commands/thread/reply.d.ts.map +1 -1
- package/dist/commands/thread/reply.js +37 -10
- package/dist/commands/thread/reply.js.map +1 -1
- package/dist/commands/view.d.ts.map +1 -1
- package/dist/commands/view.js +2 -7
- package/dist/commands/view.js.map +1 -1
- package/dist/lib/api.d.ts +4 -1
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +21 -7
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/attachments.d.ts +20 -0
- package/dist/lib/attachments.d.ts.map +1 -0
- package/dist/lib/attachments.js +45 -0
- package/dist/lib/attachments.js.map +1 -0
- package/dist/lib/auth-pages.d.ts.map +1 -1
- package/dist/lib/auth-pages.js +173 -302
- package/dist/lib/auth-pages.js.map +1 -1
- package/dist/lib/auth-provider.d.ts +41 -18
- package/dist/lib/auth-provider.d.ts.map +1 -1
- package/dist/lib/auth-provider.js +368 -78
- package/dist/lib/auth-provider.js.map +1 -1
- package/dist/lib/auth.d.ts +12 -1
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +41 -10
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/comms-account.d.ts +6 -0
- package/dist/lib/comms-account.d.ts.map +1 -1
- package/dist/lib/comms-account.js +6 -0
- package/dist/lib/comms-account.js.map +1 -1
- package/dist/lib/config.d.ts +14 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +76 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +8 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +25 -9
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/local-file.d.ts +29 -0
- package/dist/lib/local-file.d.ts.map +1 -0
- package/dist/lib/local-file.js +48 -0
- package/dist/lib/local-file.js.map +1 -0
- package/dist/lib/options.d.ts +5 -0
- package/dist/lib/options.d.ts.map +1 -1
- package/dist/lib/options.js +7 -1
- package/dist/lib/options.js.map +1 -1
- package/dist/lib/refs.d.ts +2 -0
- package/dist/lib/refs.d.ts.map +1 -1
- package/dist/lib/refs.js +62 -26
- package/dist/lib/refs.js.map +1 -1
- package/dist/lib/search-api.d.ts.map +1 -1
- package/dist/lib/search-api.js +8 -4
- package/dist/lib/search-api.js.map +1 -1
- package/dist/lib/skills/content.d.ts +1 -1
- package/dist/lib/skills/content.d.ts.map +1 -1
- package/dist/lib/skills/content.js +9 -2
- package/dist/lib/skills/content.js.map +1 -1
- package/dist/lib/user-records.js +27 -0
- package/dist/lib/user-records.js.map +1 -1
- package/package.json +3 -3
package/dist/lib/auth.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SecureStoreUnavailableError } from '@doist/cli-core/auth';
|
|
2
|
+
import type { CommsAccount } from './auth-provider.js';
|
|
2
3
|
import { type AuthMode } from './config.js';
|
|
3
4
|
import { CliError } from './errors.js';
|
|
4
5
|
export { SecureStoreUnavailableError };
|
|
@@ -11,6 +12,7 @@ export type TokenStorageResult = {
|
|
|
11
12
|
};
|
|
12
13
|
export type AuthMetadata = {
|
|
13
14
|
authMode: AuthMode;
|
|
15
|
+
authResource?: string;
|
|
14
16
|
authScope?: string;
|
|
15
17
|
authUserId?: number;
|
|
16
18
|
authUserName?: string;
|
|
@@ -18,6 +20,7 @@ export type AuthMetadata = {
|
|
|
18
20
|
};
|
|
19
21
|
export type AuthProbeMetadata = {
|
|
20
22
|
authMode: AuthMode;
|
|
23
|
+
authResource?: string;
|
|
21
24
|
authScope?: string;
|
|
22
25
|
authUserId?: number;
|
|
23
26
|
authUserName?: string;
|
|
@@ -27,13 +30,21 @@ export type AuthProbeResult = {
|
|
|
27
30
|
token: string;
|
|
28
31
|
metadata: AuthProbeMetadata;
|
|
29
32
|
};
|
|
33
|
+
export type AuthProbeOptions = {
|
|
34
|
+
refresh?: boolean;
|
|
35
|
+
};
|
|
36
|
+
export type ActiveAuthSnapshot = {
|
|
37
|
+
token: string;
|
|
38
|
+
account: CommsAccount;
|
|
39
|
+
};
|
|
30
40
|
export declare class NoTokenError extends CliError {
|
|
31
41
|
constructor();
|
|
32
42
|
}
|
|
33
43
|
/** Read the active token. The store wraps env-var precedence internally. */
|
|
34
44
|
export declare function getApiToken(): Promise<string>;
|
|
45
|
+
export declare function getApiTokenSnapshot(ref?: string): Promise<ActiveAuthSnapshot>;
|
|
35
46
|
/** Token + metadata in one round-trip for `tdc config view` / `tdc doctor`. */
|
|
36
|
-
export declare function probeApiToken(): Promise<AuthProbeResult>;
|
|
47
|
+
export declare function probeApiToken(options?: AuthProbeOptions): Promise<AuthProbeResult>;
|
|
37
48
|
/** Auth metadata for `tdc auth status` and `ensureWriteAllowed`. */
|
|
38
49
|
export declare function getAuthMetadata(): Promise<AuthMetadata>;
|
|
39
50
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/lib/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAOtD,OAAO,EAAE,KAAK,QAAQ,EAA4B,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAGtC,OAAO,EAAE,2BAA2B,EAAE,CAAA;AAEtC,eAAO,MAAM,aAAa,oBAAoB,CAAA;AAE9C,eAAO,MAAM,wBAAwB,8BAA8B,CAAA;AAEnE,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,aAAa,CAAA;AAEjE,MAAM,MAAM,kBAAkB,GAAG;IAC7B,OAAO,EAAE,oBAAoB,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,EAAE,QAAQ,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,EAAE,QAAQ,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,KAAK,GAAG,aAAa,GAAG,cAAc,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,iBAAiB,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,YAAY,CAAA;CACxB,CAAA;AAID,qBAAa,YAAa,SAAQ,QAAQ;;CAUzC;AAED,4EAA4E;AAC5E,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAGnD;AAED,wBAAsB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAEnF;AAED,+EAA+E;AAC/E,wBAAsB,aAAa,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAU5F;AA8CD,oEAAoE;AACpE,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAM7D"}
|
package/dist/lib/auth.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { SecureStoreUnavailableError } from '@doist/cli-core/auth';
|
|
2
|
-
import { createCommsTokenStore, getActiveTokenSource } from './auth-provider.js';
|
|
3
|
-
import { getConfig } from './config.js';
|
|
1
|
+
import { refreshAccessToken, SecureStoreUnavailableError } from '@doist/cli-core/auth';
|
|
2
|
+
import { createCommsAuthProvider, createCommsTokenStore, getActiveTokenSource, getCommsOAuthRefreshHandshake, } from './auth-provider.js';
|
|
3
|
+
import { getConfig, getConfigPath } from './config.js';
|
|
4
4
|
import { CliError } from './errors.js';
|
|
5
5
|
import { getDefaultUserRecord } from './user-records.js';
|
|
6
6
|
export { SecureStoreUnavailableError };
|
|
7
7
|
export const TOKEN_ENV_VAR = 'COMMS_API_TOKEN';
|
|
8
8
|
export const SECURE_STORE_DESCRIPTION = 'system credential manager';
|
|
9
|
+
const REFRESH_SKEW_MS = 60_000;
|
|
9
10
|
export class NoTokenError extends CliError {
|
|
10
11
|
constructor() {
|
|
11
12
|
super('NO_TOKEN', `No API token found. Set ${TOKEN_ENV_VAR} or run \`tdc auth login\` or \`tdc auth token <token>\`.`, ['Set COMMS_API_TOKEN or run: tdc auth login'], 'info');
|
|
@@ -14,16 +15,15 @@ export class NoTokenError extends CliError {
|
|
|
14
15
|
}
|
|
15
16
|
/** Read the active token. The store wraps env-var precedence internally. */
|
|
16
17
|
export async function getApiToken() {
|
|
17
|
-
const snapshot = await
|
|
18
|
-
if (!snapshot)
|
|
19
|
-
throw new NoTokenError();
|
|
18
|
+
const snapshot = await getApiTokenSnapshot();
|
|
20
19
|
return snapshot.token;
|
|
21
20
|
}
|
|
21
|
+
export async function getApiTokenSnapshot(ref) {
|
|
22
|
+
return getActiveSnapshot({ refresh: true, ref });
|
|
23
|
+
}
|
|
22
24
|
/** Token + metadata in one round-trip for `tdc config view` / `tdc doctor`. */
|
|
23
|
-
export async function probeApiToken() {
|
|
24
|
-
const snapshot = await
|
|
25
|
-
if (!snapshot)
|
|
26
|
-
throw new NoTokenError();
|
|
25
|
+
export async function probeApiToken(options = {}) {
|
|
26
|
+
const snapshot = await getActiveSnapshot({ refresh: options.refresh === true });
|
|
27
27
|
const source = await getActiveTokenSource();
|
|
28
28
|
return {
|
|
29
29
|
token: snapshot.token,
|
|
@@ -32,6 +32,36 @@ export async function probeApiToken() {
|
|
|
32
32
|
: { ...toAccountFields(snapshot.account), source },
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
|
+
async function getActiveSnapshot({ refresh, ref, }) {
|
|
36
|
+
const store = createCommsTokenStore();
|
|
37
|
+
const snapshot = await store.activeBundle(ref);
|
|
38
|
+
if (!snapshot)
|
|
39
|
+
throw new NoTokenError();
|
|
40
|
+
const { account, bundle } = snapshot;
|
|
41
|
+
const expiresAt = bundle.accessTokenExpiresAt;
|
|
42
|
+
if (expiresAt !== undefined) {
|
|
43
|
+
const now = Date.now();
|
|
44
|
+
if (refresh && bundle.refreshToken && expiresAt - now < REFRESH_SKEW_MS) {
|
|
45
|
+
if (!account.oauthClientId) {
|
|
46
|
+
if (expiresAt > now)
|
|
47
|
+
return { token: bundle.accessToken, account };
|
|
48
|
+
throw new CliError('NO_TOKEN', 'Stored OAuth token cannot be refreshed because its client metadata is missing.', ['Run: tdc auth login']);
|
|
49
|
+
}
|
|
50
|
+
const refreshed = await refreshAccessToken({
|
|
51
|
+
store,
|
|
52
|
+
provider: createCommsAuthProvider(),
|
|
53
|
+
skewMs: REFRESH_SKEW_MS,
|
|
54
|
+
lockPath: `${getConfigPath()}.refresh.lock`,
|
|
55
|
+
handshake: getCommsOAuthRefreshHandshake(account),
|
|
56
|
+
});
|
|
57
|
+
return { token: refreshed.bundle.accessToken, account: refreshed.account };
|
|
58
|
+
}
|
|
59
|
+
if (refresh && expiresAt <= now) {
|
|
60
|
+
throw new CliError('NO_TOKEN', 'Stored OAuth token has expired and cannot be refreshed.', ['Run: tdc auth login']);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return { token: bundle.accessToken, account };
|
|
64
|
+
}
|
|
35
65
|
/** Auth metadata for `tdc auth status` and `ensureWriteAllowed`. */
|
|
36
66
|
export async function getAuthMetadata() {
|
|
37
67
|
if (process.env[TOKEN_ENV_VAR])
|
|
@@ -45,6 +75,7 @@ export async function getAuthMetadata() {
|
|
|
45
75
|
function toAccountFields(account) {
|
|
46
76
|
return {
|
|
47
77
|
authMode: account.authMode,
|
|
78
|
+
...(account.authResource ? { authResource: account.authResource } : {}),
|
|
48
79
|
authScope: account.authScope || undefined,
|
|
49
80
|
authUserId: account.id ? toAuthUserId(account.id) : undefined,
|
|
50
81
|
authUserName: account.label || undefined,
|
package/dist/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ export declare function makeCommsAccount(input: {
|
|
|
6
6
|
label: string;
|
|
7
7
|
authMode?: AuthMode;
|
|
8
8
|
authScope?: string;
|
|
9
|
+
oauthClientId?: string;
|
|
10
|
+
authBaseUrl?: string;
|
|
11
|
+
authResource?: string;
|
|
9
12
|
}): CommsAccount;
|
|
10
13
|
/**
|
|
11
14
|
* Adapt a Comms `getSessionUser` payload to a `CommsAccount`. Lives in its
|
|
@@ -18,5 +21,8 @@ export declare function toCommsAccount(sessionUser: {
|
|
|
18
21
|
}, metadata?: {
|
|
19
22
|
authMode?: AuthMode;
|
|
20
23
|
authScope?: string;
|
|
24
|
+
oauthClientId?: string;
|
|
25
|
+
authBaseUrl?: string;
|
|
26
|
+
authResource?: string;
|
|
21
27
|
}): CommsAccount;
|
|
22
28
|
//# sourceMappingURL=comms-account.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comms-account.d.ts","sourceRoot":"","sources":["../../src/lib/comms-account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"comms-account.d.ts","sourceRoot":"","sources":["../../src/lib/comms-account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB,GAAG,YAAY,CAUf;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC1B,WAAW,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC7C,QAAQ,GAAE;IACN,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACnB,GACP,YAAY,CAUd"}
|
|
@@ -5,6 +5,9 @@ export function makeCommsAccount(input) {
|
|
|
5
5
|
label: input.label,
|
|
6
6
|
authMode: input.authMode ?? 'unknown',
|
|
7
7
|
authScope: input.authScope ?? '',
|
|
8
|
+
...(input.oauthClientId ? { oauthClientId: input.oauthClientId } : {}),
|
|
9
|
+
...(input.authBaseUrl ? { authBaseUrl: input.authBaseUrl } : {}),
|
|
10
|
+
...(input.authResource ? { authResource: input.authResource } : {}),
|
|
8
11
|
};
|
|
9
12
|
}
|
|
10
13
|
/**
|
|
@@ -18,6 +21,9 @@ export function toCommsAccount(sessionUser, metadata = {}) {
|
|
|
18
21
|
label: sessionUser.fullName,
|
|
19
22
|
authMode: metadata.authMode,
|
|
20
23
|
authScope: metadata.authScope,
|
|
24
|
+
oauthClientId: metadata.oauthClientId,
|
|
25
|
+
authBaseUrl: metadata.authBaseUrl,
|
|
26
|
+
authResource: metadata.authResource,
|
|
21
27
|
});
|
|
22
28
|
}
|
|
23
29
|
//# sourceMappingURL=comms-account.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comms-account.js","sourceRoot":"","sources":["../../src/lib/comms-account.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"comms-account.js","sourceRoot":"","sources":["../../src/lib/comms-account.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,KAQhC;IACG,OAAO;QACH,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;QACrC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;QAChC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAA;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC1B,WAA6C,EAC7C,WAMI,EAAE;IAEN,OAAO,gBAAgB,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1B,KAAK,EAAE,WAAW,CAAC,QAAQ;QAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,YAAY,EAAE,QAAQ,CAAC,YAAY;KACtC,CAAC,CAAA;AACN,CAAC"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -22,12 +22,26 @@ export type StoredUser = {
|
|
|
22
22
|
authMode?: AuthMode;
|
|
23
23
|
authScope?: string;
|
|
24
24
|
token?: string;
|
|
25
|
+
fallbackRefreshToken?: string;
|
|
26
|
+
accessTokenExpiresAt?: number;
|
|
27
|
+
refreshTokenExpiresAt?: number;
|
|
28
|
+
hasRefreshToken?: boolean;
|
|
29
|
+
oauthClientId?: string;
|
|
30
|
+
authBaseUrl?: string;
|
|
31
|
+
authResource?: string;
|
|
32
|
+
};
|
|
33
|
+
export type StoredOAuthClient = {
|
|
34
|
+
clientId: string;
|
|
35
|
+
authBaseUrl: string;
|
|
36
|
+
authResource: string;
|
|
37
|
+
redirectUri: string;
|
|
25
38
|
};
|
|
26
39
|
export interface Config {
|
|
27
40
|
users?: StoredUser[];
|
|
28
41
|
defaultUserId?: string;
|
|
29
42
|
currentWorkspace?: number;
|
|
30
43
|
updateChannel?: UpdateChannel;
|
|
44
|
+
oauthClients?: StoredOAuthClient[];
|
|
31
45
|
userSettings?: UserSettings;
|
|
32
46
|
}
|
|
33
47
|
/**
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAA;AAC7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAA;AAC7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,aAAa,CAAA;AAqCpD,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,aAAa,CAAsC,CAAA;AAE7F,MAAM,WAAW,YAAY;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAChC;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,WAAW,MAAM;IACnB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAClC,YAAY,CAAC,EAAE,YAAY,CAAA;CAC9B;AAyBD;;;;;GAKG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAGjD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1F;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAkClE;AAED,oDAAoD;AACpD,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CA6KjF"}
|
package/dist/lib/config.js
CHANGED
|
@@ -15,6 +15,7 @@ const KNOWN_CONFIG_KEYS = new Set([
|
|
|
15
15
|
// cli-core's update command writes the channel under `update_channel`;
|
|
16
16
|
// the in-memory `Config` exposes it as `updateChannel`.
|
|
17
17
|
'update_channel',
|
|
18
|
+
'oauthClients',
|
|
18
19
|
'userSettings',
|
|
19
20
|
'users',
|
|
20
21
|
'defaultUserId',
|
|
@@ -25,8 +26,21 @@ const KNOWN_STORED_USER_KEYS = new Set([
|
|
|
25
26
|
'authMode',
|
|
26
27
|
'authScope',
|
|
27
28
|
'token',
|
|
29
|
+
'fallbackRefreshToken',
|
|
30
|
+
'accessTokenExpiresAt',
|
|
31
|
+
'refreshTokenExpiresAt',
|
|
32
|
+
'hasRefreshToken',
|
|
33
|
+
'oauthClientId',
|
|
34
|
+
'authBaseUrl',
|
|
35
|
+
'authResource',
|
|
28
36
|
]);
|
|
29
37
|
const KNOWN_USER_SETTINGS_KEYS = new Set(['unarchiveNewThreads']);
|
|
38
|
+
const KNOWN_OAUTH_CLIENT_KEYS = new Set([
|
|
39
|
+
'clientId',
|
|
40
|
+
'authBaseUrl',
|
|
41
|
+
'authResource',
|
|
42
|
+
'redirectUri',
|
|
43
|
+
]);
|
|
30
44
|
const AUTH_MODES = new Set(['read-only', 'read-write', 'unknown']);
|
|
31
45
|
export const UPDATE_CHANNELS = new Set(['stable', 'pre-release']);
|
|
32
46
|
/**
|
|
@@ -121,6 +135,38 @@ export function validateConfigForDoctor(config) {
|
|
|
121
135
|
if (config.defaultUserId !== undefined && typeof config.defaultUserId !== 'string') {
|
|
122
136
|
issues.push('defaultUserId must be a string');
|
|
123
137
|
}
|
|
138
|
+
if (config.oauthClients !== undefined) {
|
|
139
|
+
if (!Array.isArray(config.oauthClients)) {
|
|
140
|
+
issues.push('oauthClients must be an array');
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
for (let i = 0; i < config.oauthClients.length; i++) {
|
|
144
|
+
const client = config.oauthClients[i];
|
|
145
|
+
if (client === null || typeof client !== 'object' || Array.isArray(client)) {
|
|
146
|
+
issues.push(`oauthClients[${i}] must be an object`);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const clientRecord = client;
|
|
150
|
+
for (const key of Object.keys(clientRecord)) {
|
|
151
|
+
if (!KNOWN_OAUTH_CLIENT_KEYS.has(key)) {
|
|
152
|
+
issues.push(`oauthClients[${i}] contains unrecognized key "${key}"`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (typeof clientRecord.clientId !== 'string') {
|
|
156
|
+
issues.push(`oauthClients[${i}].clientId must be a string`);
|
|
157
|
+
}
|
|
158
|
+
if (typeof clientRecord.authBaseUrl !== 'string') {
|
|
159
|
+
issues.push(`oauthClients[${i}].authBaseUrl must be a string`);
|
|
160
|
+
}
|
|
161
|
+
if (typeof clientRecord.authResource !== 'string') {
|
|
162
|
+
issues.push(`oauthClients[${i}].authResource must be a string`);
|
|
163
|
+
}
|
|
164
|
+
if (typeof clientRecord.redirectUri !== 'string') {
|
|
165
|
+
issues.push(`oauthClients[${i}].redirectUri must be a string`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
124
170
|
if (config.users !== undefined) {
|
|
125
171
|
if (!Array.isArray(config.users)) {
|
|
126
172
|
issues.push('users must be an array');
|
|
@@ -156,6 +202,36 @@ export function validateConfigForDoctor(config) {
|
|
|
156
202
|
if (userRecord.token !== undefined && typeof userRecord.token !== 'string') {
|
|
157
203
|
issues.push(`users[${i}].token must be a string`);
|
|
158
204
|
}
|
|
205
|
+
if (userRecord.fallbackRefreshToken !== undefined &&
|
|
206
|
+
typeof userRecord.fallbackRefreshToken !== 'string') {
|
|
207
|
+
issues.push(`users[${i}].fallbackRefreshToken must be a string`);
|
|
208
|
+
}
|
|
209
|
+
if (userRecord.accessTokenExpiresAt !== undefined &&
|
|
210
|
+
(typeof userRecord.accessTokenExpiresAt !== 'number' ||
|
|
211
|
+
!Number.isFinite(userRecord.accessTokenExpiresAt))) {
|
|
212
|
+
issues.push(`users[${i}].accessTokenExpiresAt must be a finite number`);
|
|
213
|
+
}
|
|
214
|
+
if (userRecord.refreshTokenExpiresAt !== undefined &&
|
|
215
|
+
(typeof userRecord.refreshTokenExpiresAt !== 'number' ||
|
|
216
|
+
!Number.isFinite(userRecord.refreshTokenExpiresAt))) {
|
|
217
|
+
issues.push(`users[${i}].refreshTokenExpiresAt must be a finite number`);
|
|
218
|
+
}
|
|
219
|
+
if (userRecord.hasRefreshToken !== undefined &&
|
|
220
|
+
typeof userRecord.hasRefreshToken !== 'boolean') {
|
|
221
|
+
issues.push(`users[${i}].hasRefreshToken must be a boolean`);
|
|
222
|
+
}
|
|
223
|
+
if (userRecord.oauthClientId !== undefined &&
|
|
224
|
+
typeof userRecord.oauthClientId !== 'string') {
|
|
225
|
+
issues.push(`users[${i}].oauthClientId must be a string`);
|
|
226
|
+
}
|
|
227
|
+
if (userRecord.authBaseUrl !== undefined &&
|
|
228
|
+
typeof userRecord.authBaseUrl !== 'string') {
|
|
229
|
+
issues.push(`users[${i}].authBaseUrl must be a string`);
|
|
230
|
+
}
|
|
231
|
+
if (userRecord.authResource !== undefined &&
|
|
232
|
+
typeof userRecord.authResource !== 'string') {
|
|
233
|
+
issues.push(`users[${i}].authResource must be a string`);
|
|
234
|
+
}
|
|
159
235
|
}
|
|
160
236
|
}
|
|
161
237
|
}
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,IAAI,iBAAiB,EAClC,UAAU,IAAI,cAAc,EAC5B,gBAAgB,IAAI,oBAAoB,EACxC,YAAY,IAAI,gBAAgB,EAChC,WAAW,IAAI,eAAe,GACjC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,MAAM,QAAQ,GAAG,WAAW,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,aAAa;IACzB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AACtC,CAAC;AAKD,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC;IACnD,kBAAkB;IAClB,uEAAuE;IACvE,wDAAwD;IACxD,gBAAgB;IAChB,cAAc;IACd,OAAO;IACP,eAAe;CAClB,CAAC,CAAA;AAEF,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC;IACxD,IAAI;IACJ,MAAM;IACN,UAAU;IACV,WAAW;IACX,OAAO;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/errors.d.ts
CHANGED
|
@@ -6,12 +6,19 @@ export type { ErrorType } from '@doist/cli-core';
|
|
|
6
6
|
* This union provides intellisense suggestions while still accepting any string,
|
|
7
7
|
* allowing dynamic codes and future additions.
|
|
8
8
|
*/
|
|
9
|
-
export type ErrorCode = 'AUTH_FAILED' | 'FORBIDDEN' | 'INSUFFICIENT_SCOPE' | 'INVALID_TOKEN' | 'NO_TOKEN' | 'READ_ONLY' | 'CONFLICTING_OPTIONS' | 'INVALID_CURSOR' | 'INVALID_DATE' | 'INVALID_ID' | 'INVALID_MINUTES' | 'INVALID_REF' | 'INVALID_SCOPE' | 'INVALID_STATE' | 'INVALID_TYPE' | 'INVALID_URL' | 'INVALID_VALUE' | 'MISSING_CONTENT' | 'MISSING_YES_FLAG' | 'UNKNOWN_KEY' | 'INVALID_NAME' | 'MISSING_USERS' | 'ACCOUNT_NOT_FOUND' | 'CHANNEL_NOT_FOUND' | 'GROUP_NOT_FOUND' | 'NOT_FOUND' | 'USER_NOT_FOUND' | 'WORKSPACE_NOT_FOUND' | 'AMBIGUOUS_CHANNEL' | 'AMBIGUOUS_GROUP' | 'AMBIGUOUS_USER' | 'AMBIGUOUS_WORKSPACE' | 'ALREADY_INSTALLED' | 'BATCH_FAILED' | 'FILE_READ_ERROR' | 'NOT_CREATOR' | 'NOT_INSTALLED' | 'UNKNOWN_AGENT' | 'API_ERROR' | 'INTERNAL_ERROR' | 'CONFIG_READ_FAILED' | 'CONFIG_INVALID_JSON' | 'CONFIG_INVALID_SHAPE' | (string & {});
|
|
9
|
+
export type ErrorCode = 'AUTH_DCR_FAILED' | 'AUTH_FAILED' | 'AUTH_REFRESH_EXPIRED' | 'AUTH_REFRESH_TRANSIENT' | 'AUTH_TOKEN_EXCHANGE_FAILED' | 'FORBIDDEN' | 'INSUFFICIENT_SCOPE' | 'INVALID_TOKEN' | 'NO_TOKEN' | 'READ_ONLY' | 'CONFLICTING_OPTIONS' | 'INVALID_CURSOR' | 'INVALID_DATE' | 'INVALID_ID' | 'INVALID_MINUTES' | 'INVALID_REF' | 'INVALID_SCOPE' | 'INVALID_STATE' | 'INVALID_TYPE' | 'INVALID_URL' | 'INVALID_VALUE' | 'MISSING_CONTENT' | 'MISSING_YES_FLAG' | 'UNKNOWN_KEY' | 'INVALID_NAME' | 'MISSING_USERS' | 'ACCOUNT_NOT_FOUND' | 'CHANNEL_NOT_FOUND' | 'GROUP_NOT_FOUND' | 'NOT_FOUND' | 'USER_NOT_FOUND' | 'WORKSPACE_NOT_FOUND' | 'AMBIGUOUS_CHANNEL' | 'AMBIGUOUS_GROUP' | 'AMBIGUOUS_USER' | 'AMBIGUOUS_WORKSPACE' | 'ALREADY_INSTALLED' | 'BATCH_FAILED' | 'FILE_NOT_FOUND' | 'FILE_READ_ERROR' | 'NOT_CREATOR' | 'NOT_INSTALLED' | 'UNKNOWN_AGENT' | 'API_ERROR' | 'INTERNAL_ERROR' | 'CONFIG_READ_FAILED' | 'CONFIG_INVALID_JSON' | 'CONFIG_INVALID_SHAPE' | (string & {});
|
|
10
10
|
/**
|
|
11
11
|
* Check whether an error is a Comms API 403 "Insufficient scope" response.
|
|
12
12
|
* Works with any error shaped like CommsRequestError (httpStatusCode + responseData).
|
|
13
13
|
*/
|
|
14
14
|
export declare function isInsufficientScope(error: unknown): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Check whether an error is a plain workspace-permission 403 — i.e. a 403 that
|
|
17
|
+
* is NOT an OAuth-scope failure. Exclusive with `isInsufficientScope` so the
|
|
18
|
+
* two predicates can be checked in any order without downgrading a scope error
|
|
19
|
+
* to a generic `FORBIDDEN`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isForbidden(error: unknown): boolean;
|
|
15
22
|
/**
|
|
16
23
|
* Comms-flavoured CliError that preserves the historical positional
|
|
17
24
|
* `(code, message, hints?, type?)` signature used across hundreds of call
|
package/dist/lib/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE7F,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAEf,aAAa,GACb,WAAW,GACX,oBAAoB,GACpB,eAAe,GACf,UAAU,GACV,WAAW,GAEX,qBAAqB,GACrB,gBAAgB,GAChB,cAAc,GACd,YAAY,GACZ,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,eAAe,GACf,cAAc,GACd,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,kBAAkB,GAClB,aAAa,GACb,cAAc,GACd,eAAe,GAEf,mBAAmB,GACnB,mBAAmB,GACnB,iBAAiB,GACjB,WAAW,GACX,gBAAgB,GAChB,qBAAqB,GAErB,mBAAmB,GACnB,iBAAiB,GACjB,gBAAgB,GAChB,qBAAqB,GAErB,mBAAmB,GACnB,cAAc,GACd,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,eAAe,GAEf,WAAW,GACX,gBAAgB,GAEhB,oBAAoB,GACpB,qBAAqB,GACrB,sBAAsB,GAEtB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE7F,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAEf,iBAAiB,GACjB,aAAa,GACb,sBAAsB,GACtB,wBAAwB,GACxB,4BAA4B,GAC5B,WAAW,GACX,oBAAoB,GACpB,eAAe,GACf,UAAU,GACV,WAAW,GAEX,qBAAqB,GACrB,gBAAgB,GAChB,cAAc,GACd,YAAY,GACZ,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,eAAe,GACf,cAAc,GACd,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,kBAAkB,GAClB,aAAa,GACb,cAAc,GACd,eAAe,GAEf,mBAAmB,GACnB,mBAAmB,GACnB,iBAAiB,GACjB,WAAW,GACX,gBAAgB,GAChB,qBAAqB,GAErB,mBAAmB,GACnB,iBAAiB,GACjB,gBAAgB,GAChB,qBAAqB,GAErB,mBAAmB,GACnB,cAAc,GACd,gBAAgB,GAChB,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,eAAe,GAEf,WAAW,GACX,gBAAgB,GAEhB,oBAAoB,GACpB,qBAAqB,GACrB,sBAAsB,GAEtB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAYnB;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAW3D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEnD;AAED;;;;;;;;;GASG;AACH,qBAAa,QAAS,SAAQ,YAAY,CAAC,SAAS,CAAC;gBAE7C,IAAI,EAAE,SAAS,GAAG,YAAY,EAC9B,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,IAAI,GAAE,SAAmB;CAIhC"}
|
package/dist/lib/errors.js
CHANGED
|
@@ -1,20 +1,36 @@
|
|
|
1
1
|
import { CliError as BaseCliError } from '@doist/cli-core';
|
|
2
2
|
export { BaseCliError };
|
|
3
|
+
function hasCommsStatusCode(error, status) {
|
|
4
|
+
return (typeof error === 'object' &&
|
|
5
|
+
error !== null &&
|
|
6
|
+
'httpStatusCode' in error &&
|
|
7
|
+
typeof error.httpStatusCode === 'number' &&
|
|
8
|
+
error.httpStatusCode === status);
|
|
9
|
+
}
|
|
3
10
|
/**
|
|
4
11
|
* Check whether an error is a Comms API 403 "Insufficient scope" response.
|
|
5
12
|
* Works with any error shaped like CommsRequestError (httpStatusCode + responseData).
|
|
6
13
|
*/
|
|
7
14
|
export function isInsufficientScope(error) {
|
|
8
|
-
if (
|
|
9
|
-
error === null ||
|
|
10
|
-
!('httpStatusCode' in error) ||
|
|
11
|
-
!('responseData' in error)) {
|
|
15
|
+
if (!hasCommsStatusCode(error, 403))
|
|
12
16
|
return false;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
if (!('responseData' in error))
|
|
18
|
+
return false;
|
|
19
|
+
const data = error.responseData;
|
|
20
|
+
return (typeof data === 'object' &&
|
|
21
|
+
data !== null &&
|
|
22
|
+
'error_string' in data &&
|
|
23
|
+
typeof data.error_string === 'string' &&
|
|
24
|
+
data.error_string.includes('Insufficient scope'));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check whether an error is a plain workspace-permission 403 — i.e. a 403 that
|
|
28
|
+
* is NOT an OAuth-scope failure. Exclusive with `isInsufficientScope` so the
|
|
29
|
+
* two predicates can be checked in any order without downgrading a scope error
|
|
30
|
+
* to a generic `FORBIDDEN`.
|
|
31
|
+
*/
|
|
32
|
+
export function isForbidden(error) {
|
|
33
|
+
return hasCommsStatusCode(error, 403) && !isInsufficientScope(error);
|
|
18
34
|
}
|
|
19
35
|
/**
|
|
20
36
|
* Comms-flavoured CliError that preserves the historical positional
|
package/dist/lib/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAqC,MAAM,iBAAiB,CAAA;AAE7F,OAAO,EAAE,YAAY,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAqC,MAAM,iBAAiB,CAAA;AAE7F,OAAO,EAAE,YAAY,EAAE,CAAA;AAmEvB,SAAS,kBAAkB,CAAC,KAAc,EAAE,MAAc;IACtD,OAAO,CACH,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,gBAAgB,IAAI,KAAK;QACzB,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;QACxC,KAAK,CAAC,cAAc,KAAK,MAAM,CAClC,CAAA;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAC9C,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACjD,IAAI,CAAC,CAAC,cAAc,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAA;IAC/B,OAAO,CACH,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,cAAc,IAAI,IAAI;QACtB,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;QACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CACnD,CAAA;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACtC,OAAO,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;AACxE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,QAAS,SAAQ,YAAuB;IACjD,YACI,IAA8B,EAC9B,OAAe,EACf,KAAgB,EAChB,OAAkB,OAAO;QAEzB,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACzC,CAAC;CACJ"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type LocalFileOptions = {
|
|
2
|
+
/** Path to the file on disk (relative paths resolve against cwd). */
|
|
3
|
+
file: string;
|
|
4
|
+
/** Optional override for the upload's user-facing filename. Defaults to `basename(file)`. */
|
|
5
|
+
fileName?: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Open a local file as a streaming `Blob` for upload, with CLI-grade
|
|
9
|
+
* error reporting. The returned Blob is file-backed — undici reads it
|
|
10
|
+
* lazily when serializing the multipart request body, so the payload
|
|
11
|
+
* never has to fit in memory all at once.
|
|
12
|
+
*
|
|
13
|
+
* Returns the resolved absolute path and the effective `fileName`
|
|
14
|
+
* (caller's override, falling back to `basename(filePath)`) so call
|
|
15
|
+
* sites don't have to recompute either.
|
|
16
|
+
*
|
|
17
|
+
* On the happy path this is a single `openAsBlob` — no separate readability
|
|
18
|
+
* probe, so no extra filesystem open and no time-of-check/time-of-use window.
|
|
19
|
+
* The probe only runs when `openAsBlob` fails: it rewraps fs errors as an
|
|
20
|
+
* opaque `ERR_INVALID_ARG_VALUE` TypeError (it does *not* preserve `ENOENT`),
|
|
21
|
+
* so we re-open with `fs.open` to recover the real errno and map it to a
|
|
22
|
+
* precise `FILE_NOT_FOUND` vs `FILE_READ_ERROR`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function openLocalFileAsBlob(options: LocalFileOptions): Promise<{
|
|
25
|
+
blob: Blob;
|
|
26
|
+
filePath: string;
|
|
27
|
+
fileName: string;
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=local-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-file.d.ts","sourceRoot":"","sources":["../../src/lib/local-file.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG;IAC3B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAA;IACZ,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB7D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { openAsBlob } from 'node:fs';
|
|
2
|
+
import { open } from 'node:fs/promises';
|
|
3
|
+
import { basename, resolve } from 'node:path';
|
|
4
|
+
import { CliError } from './errors.js';
|
|
5
|
+
/**
|
|
6
|
+
* Open a local file as a streaming `Blob` for upload, with CLI-grade
|
|
7
|
+
* error reporting. The returned Blob is file-backed — undici reads it
|
|
8
|
+
* lazily when serializing the multipart request body, so the payload
|
|
9
|
+
* never has to fit in memory all at once.
|
|
10
|
+
*
|
|
11
|
+
* Returns the resolved absolute path and the effective `fileName`
|
|
12
|
+
* (caller's override, falling back to `basename(filePath)`) so call
|
|
13
|
+
* sites don't have to recompute either.
|
|
14
|
+
*
|
|
15
|
+
* On the happy path this is a single `openAsBlob` — no separate readability
|
|
16
|
+
* probe, so no extra filesystem open and no time-of-check/time-of-use window.
|
|
17
|
+
* The probe only runs when `openAsBlob` fails: it rewraps fs errors as an
|
|
18
|
+
* opaque `ERR_INVALID_ARG_VALUE` TypeError (it does *not* preserve `ENOENT`),
|
|
19
|
+
* so we re-open with `fs.open` to recover the real errno and map it to a
|
|
20
|
+
* precise `FILE_NOT_FOUND` vs `FILE_READ_ERROR`.
|
|
21
|
+
*/
|
|
22
|
+
export async function openLocalFileAsBlob(options) {
|
|
23
|
+
const filePath = resolve(options.file);
|
|
24
|
+
try {
|
|
25
|
+
const blob = await openAsBlob(filePath);
|
|
26
|
+
return { blob, filePath, fileName: options.fileName || basename(filePath) };
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
// `openAsBlob` masks the underlying fs error; re-open to recover the errno.
|
|
30
|
+
try {
|
|
31
|
+
const handle = await open(filePath, 'r');
|
|
32
|
+
await handle.close();
|
|
33
|
+
}
|
|
34
|
+
catch (fsErr) {
|
|
35
|
+
if (fsErr.code === 'ENOENT') {
|
|
36
|
+
throw new CliError('FILE_NOT_FOUND', `File not found: ${filePath}`, [
|
|
37
|
+
'Check the file path and try again.',
|
|
38
|
+
]);
|
|
39
|
+
}
|
|
40
|
+
const message = fsErr instanceof Error ? fsErr.message : String(fsErr);
|
|
41
|
+
throw new CliError('FILE_READ_ERROR', `Cannot read file: ${filePath}`, [message]);
|
|
42
|
+
}
|
|
43
|
+
// The path is readable but `openAsBlob` still failed — surface as a read error.
|
|
44
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
45
|
+
throw new CliError('FILE_READ_ERROR', `Cannot read file: ${filePath}`, [message]);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=local-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-file.js","sourceRoot":"","sources":["../../src/lib/local-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAStC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,OAAyB;IAEzB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAA;QACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC/E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,4EAA4E;QAC5E,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACxC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrD,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,QAAQ,EAAE,EAAE;oBAChE,oCAAoC;iBACvC,CAAC,CAAA;YACN,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE,qBAAqB,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;QACrF,CAAC;QACD,gFAAgF;QAChF,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChE,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE,qBAAqB,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACrF,CAAC;AACL,CAAC"}
|
package/dist/lib/options.d.ts
CHANGED
|
@@ -14,4 +14,9 @@ export type MutationOptions = {
|
|
|
14
14
|
full?: boolean;
|
|
15
15
|
yes?: boolean;
|
|
16
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* Commander collector for repeatable options (e.g. `--file a --file b`).
|
|
19
|
+
* Use with a `[]` default: `.option('--file <path>', '…', collect, [])`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function collect(value: string, previous?: string[]): string[];
|
|
17
22
|
//# sourceMappingURL=options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/lib/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAErE,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG;IACxC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA"}
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/lib/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAErE,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG;IACxC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAExE"}
|
package/dist/lib/options.js
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Commander collector for repeatable options (e.g. `--file a --file b`).
|
|
3
|
+
* Use with a `[]` default: `.option('--file <path>', '…', collect, [])`.
|
|
4
|
+
*/
|
|
5
|
+
export function collect(value, previous = []) {
|
|
6
|
+
return [...previous, value];
|
|
7
|
+
}
|
|
2
8
|
//# sourceMappingURL=options.js.map
|
package/dist/lib/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/lib/options.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/lib/options.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,WAAqB,EAAE;IAC1D,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC/B,CAAC"}
|
package/dist/lib/refs.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Channel, Group, Workspace } from '@doist/comms-sdk';
|
|
2
|
+
export declare const SUPPORTED_COMMS_HOSTS: readonly ["comms.todoist.com", "comms.staging.todoist.com", "comms.local.todoist.com"];
|
|
3
|
+
export declare function isSupportedCommsHost(hostname: string): boolean;
|
|
2
4
|
export declare function isIdRef(ref: string): boolean;
|
|
3
5
|
/**
|
|
4
6
|
* Returns the raw id portion of `123`, `id:123`, or `id:abc-xyz`. The Comms
|
package/dist/lib/refs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/lib/refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAQjE,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO7C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAc,GAAG,MAAM,EAAE,GAAG,IAAI,CAkBrF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/lib/refs.ts"],"names":[],"mappings":"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"}
|