@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.
Files changed (96) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +5 -3
  3. package/dist/commands/auth/helpers.d.ts +2 -0
  4. package/dist/commands/auth/helpers.d.ts.map +1 -1
  5. package/dist/commands/auth/helpers.js +52 -0
  6. package/dist/commands/auth/helpers.js.map +1 -1
  7. package/dist/commands/auth/login.d.ts.map +1 -1
  8. package/dist/commands/auth/login.js +13 -4
  9. package/dist/commands/auth/login.js.map +1 -1
  10. package/dist/commands/auth/status.d.ts +5 -8
  11. package/dist/commands/auth/status.d.ts.map +1 -1
  12. package/dist/commands/auth/status.js +28 -22
  13. package/dist/commands/auth/status.js.map +1 -1
  14. package/dist/commands/channel/delete.d.ts.map +1 -1
  15. package/dist/commands/channel/delete.js +1 -13
  16. package/dist/commands/channel/delete.js.map +1 -1
  17. package/dist/commands/config/view.d.ts.map +1 -1
  18. package/dist/commands/config/view.js +7 -1
  19. package/dist/commands/config/view.js.map +1 -1
  20. package/dist/commands/conversation/helpers.d.ts +3 -1
  21. package/dist/commands/conversation/helpers.d.ts.map +1 -1
  22. package/dist/commands/conversation/index.d.ts.map +1 -1
  23. package/dist/commands/conversation/index.js +4 -1
  24. package/dist/commands/conversation/index.js.map +1 -1
  25. package/dist/commands/conversation/reply.d.ts.map +1 -1
  26. package/dist/commands/conversation/reply.js +29 -6
  27. package/dist/commands/conversation/reply.js.map +1 -1
  28. package/dist/commands/doctor.js +2 -2
  29. package/dist/commands/doctor.js.map +1 -1
  30. package/dist/commands/thread/create.d.ts +1 -0
  31. package/dist/commands/thread/create.d.ts.map +1 -1
  32. package/dist/commands/thread/create.js +24 -6
  33. package/dist/commands/thread/create.js.map +1 -1
  34. package/dist/commands/thread/index.d.ts.map +1 -1
  35. package/dist/commands/thread/index.js +8 -2
  36. package/dist/commands/thread/index.js.map +1 -1
  37. package/dist/commands/thread/reply.d.ts +1 -0
  38. package/dist/commands/thread/reply.d.ts.map +1 -1
  39. package/dist/commands/thread/reply.js +37 -10
  40. package/dist/commands/thread/reply.js.map +1 -1
  41. package/dist/commands/view.d.ts.map +1 -1
  42. package/dist/commands/view.js +2 -7
  43. package/dist/commands/view.js.map +1 -1
  44. package/dist/lib/api.d.ts +4 -1
  45. package/dist/lib/api.d.ts.map +1 -1
  46. package/dist/lib/api.js +21 -7
  47. package/dist/lib/api.js.map +1 -1
  48. package/dist/lib/attachments.d.ts +20 -0
  49. package/dist/lib/attachments.d.ts.map +1 -0
  50. package/dist/lib/attachments.js +45 -0
  51. package/dist/lib/attachments.js.map +1 -0
  52. package/dist/lib/auth-pages.d.ts.map +1 -1
  53. package/dist/lib/auth-pages.js +173 -302
  54. package/dist/lib/auth-pages.js.map +1 -1
  55. package/dist/lib/auth-provider.d.ts +41 -18
  56. package/dist/lib/auth-provider.d.ts.map +1 -1
  57. package/dist/lib/auth-provider.js +368 -78
  58. package/dist/lib/auth-provider.js.map +1 -1
  59. package/dist/lib/auth.d.ts +12 -1
  60. package/dist/lib/auth.d.ts.map +1 -1
  61. package/dist/lib/auth.js +41 -10
  62. package/dist/lib/auth.js.map +1 -1
  63. package/dist/lib/comms-account.d.ts +6 -0
  64. package/dist/lib/comms-account.d.ts.map +1 -1
  65. package/dist/lib/comms-account.js +6 -0
  66. package/dist/lib/comms-account.js.map +1 -1
  67. package/dist/lib/config.d.ts +14 -0
  68. package/dist/lib/config.d.ts.map +1 -1
  69. package/dist/lib/config.js +76 -0
  70. package/dist/lib/config.js.map +1 -1
  71. package/dist/lib/errors.d.ts +8 -1
  72. package/dist/lib/errors.d.ts.map +1 -1
  73. package/dist/lib/errors.js +25 -9
  74. package/dist/lib/errors.js.map +1 -1
  75. package/dist/lib/local-file.d.ts +29 -0
  76. package/dist/lib/local-file.d.ts.map +1 -0
  77. package/dist/lib/local-file.js +48 -0
  78. package/dist/lib/local-file.js.map +1 -0
  79. package/dist/lib/options.d.ts +5 -0
  80. package/dist/lib/options.d.ts.map +1 -1
  81. package/dist/lib/options.js +7 -1
  82. package/dist/lib/options.js.map +1 -1
  83. package/dist/lib/refs.d.ts +2 -0
  84. package/dist/lib/refs.d.ts.map +1 -1
  85. package/dist/lib/refs.js +62 -26
  86. package/dist/lib/refs.js.map +1 -1
  87. package/dist/lib/search-api.d.ts.map +1 -1
  88. package/dist/lib/search-api.js +8 -4
  89. package/dist/lib/search-api.js.map +1 -1
  90. package/dist/lib/skills/content.d.ts +1 -1
  91. package/dist/lib/skills/content.d.ts.map +1 -1
  92. package/dist/lib/skills/content.js +9 -2
  93. package/dist/lib/skills/content.js.map +1 -1
  94. package/dist/lib/user-records.js +27 -0
  95. package/dist/lib/user-records.js.map +1 -1
  96. package/package.json +3 -3
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AAGlE,OAAO,EAAE,KAAK,QAAQ,EAAa,MAAM,aAAa,CAAA;AACtD,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,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,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,qBAAa,YAAa,SAAQ,QAAQ;;CAUzC;AAED,4EAA4E;AAC5E,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,+EAA+E;AAC/E,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAW9D;AAED,oEAAoE;AACpE,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAM7D"}
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 createCommsTokenStore().active();
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 createCommsTokenStore().active();
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,
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AAElE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EAAiB,SAAS,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO,EAAE,2BAA2B,EAAE,CAAA;AAEtC,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAA;AAE9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,2BAA2B,CAAA;AA8BnE,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACtC;QACI,KAAK,CACD,UAAU,EACV,2BAA2B,aAAa,2DAA2D,EACnG,CAAC,4CAA4C,CAAC,EAC9C,MAAM,CACT,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC9B,CAAC;CACJ;AAED,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,MAAM,QAAQ,GAAG,MAAM,qBAAqB,EAAE,CAAC,MAAM,EAAE,CAAA;IACvD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,YAAY,EAAE,CAAA;IACvC,OAAO,QAAQ,CAAC,KAAK,CAAA;AACzB,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,MAAM,QAAQ,GAAG,MAAM,qBAAqB,EAAE,CAAC,MAAM,EAAE,CAAA;IACvD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,YAAY,EAAE,CAAA;IACvC,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAA;IAC3C,OAAO;QACH,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,QAAQ,EACJ,MAAM,KAAK,KAAK;YACZ,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;YACxC,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE;KAC7D,CAAA;AACL,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC7E,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;IAChC,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI,MAAM;QAAE,OAAO,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAC3E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AACpD,CAAC;AAED,SAAS,eAAe,CAAC,OAAqB;IAM1C,OAAO;QACH,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;QACzC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7D,YAAY,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;KAC3C,CAAA;AACL,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;AAC5D,CAAC"}
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;CACrB,GAAG,YAAY,CAOf;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC1B,WAAW,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC7C,QAAQ,GAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,YAAY,CAOd"}
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,KAKhC;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;KACnC,CAAA;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC1B,WAA6C,EAC7C,WAAwD,EAAE;IAE1D,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;KAChC,CAAC,CAAA;AACN,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"}
@@ -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
  /**
@@ -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;AAuBpD,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;CACjB,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,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,CAiGjF"}
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"}
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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;AAEnB;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAkB3D;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"}
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"}
@@ -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 (typeof error !== 'object' ||
9
- error === null ||
10
- !('httpStatusCode' in error) ||
11
- !('responseData' in error)) {
15
+ if (!hasCommsStatusCode(error, 403))
12
16
  return false;
13
- }
14
- const { httpStatusCode, responseData } = error;
15
- return (httpStatusCode === 403 &&
16
- typeof responseData?.error_string === 'string' &&
17
- responseData.error_string.includes('Insufficient scope'));
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
@@ -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;AA8DvB;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAC9C,IACI,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,CAAC,gBAAgB,IAAI,KAAK,CAAC;QAC5B,CAAC,CAAC,cAAc,IAAI,KAAK,CAAC,EAC5B,CAAC;QACC,OAAO,KAAK,CAAA;IAChB,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,KAGxC,CAAA;IACD,OAAO,CACH,cAAc,KAAK,GAAG;QACtB,OAAO,YAAY,EAAE,YAAY,KAAK,QAAQ;QAC9C,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAC3D,CAAA;AACL,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"}
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"}
@@ -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"}
@@ -1,2 +1,8 @@
1
- export {};
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
@@ -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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/lib/refs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/lib/refs.ts"],"names":[],"mappings":"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"}