@cats-inc/cats-platform 0.1.9 → 0.1.21

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 (163) hide show
  1. package/.env.example +7 -10
  2. package/build/desktop/bootstrapPage.d.ts.map +1 -1
  3. package/build/desktop/bootstrapPage.js +162 -55
  4. package/build/desktop/bootstrapPage.js.map +1 -1
  5. package/build/desktop/cliInventoryProbe.d.ts +18 -0
  6. package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
  7. package/build/desktop/cliInventoryProbe.js +42 -0
  8. package/build/desktop/cliInventoryProbe.js.map +1 -1
  9. package/build/desktop/contracts.d.ts +9 -0
  10. package/build/desktop/contracts.d.ts.map +1 -1
  11. package/build/desktop/main.js +101 -20
  12. package/build/desktop/main.js.map +1 -1
  13. package/build/desktop/readiness.d.ts.map +1 -1
  14. package/build/desktop/readiness.js +35 -2
  15. package/build/desktop/readiness.js.map +1 -1
  16. package/build/desktop/tray.d.ts +1 -1
  17. package/build/desktop/tray.d.ts.map +1 -1
  18. package/build/desktop/tray.js +2 -7
  19. package/build/desktop/tray.js.map +1 -1
  20. package/build/desktop/trayMenu.d.ts +23 -2
  21. package/build/desktop/trayMenu.d.ts.map +1 -1
  22. package/build/desktop/trayMenu.js +24 -30
  23. package/build/desktop/trayMenu.js.map +1 -1
  24. package/build/desktop/updateDialog.d.ts +40 -0
  25. package/build/desktop/updateDialog.d.ts.map +1 -0
  26. package/build/desktop/updateDialog.js +178 -0
  27. package/build/desktop/updateDialog.js.map +1 -0
  28. package/build/desktop/updateNotifications.js +2 -2
  29. package/build/desktop/updateNotifications.js.map +1 -1
  30. package/build/desktop/updaterAdapter.d.ts +1 -0
  31. package/build/desktop/updaterAdapter.d.ts.map +1 -1
  32. package/build/desktop/updaterAdapter.js +13 -1
  33. package/build/desktop/updaterAdapter.js.map +1 -1
  34. package/build/renderer/assets/{ActiveSessionPermissionChip-Dl2UOFgh.js → ActiveSessionPermissionChip-DImsuR9T.js} +1 -1
  35. package/build/renderer/assets/{App-CPqGDXVi.js → App-BfOvMP2m.js} +1 -1
  36. package/build/renderer/assets/{App-ChvP0G9X.js → App-DKOSn0o_.js} +1 -1
  37. package/build/renderer/assets/{App-C57f4p8k.js → App-DWd7I3Z2.js} +1 -1
  38. package/build/renderer/assets/{WorkspaceAppRoutes-DYg2vnjz.js → WorkspaceAppRoutes-CrbTA9En.js} +1 -1
  39. package/build/renderer/assets/app-BTww3Hl4.js +43 -0
  40. package/build/renderer/assets/{app-XnXwkcD2.css → app-CPxWQwLA.css} +1 -1
  41. package/build/renderer/assets/conversationSidebarRecentEntries-QuaOPxCb.js +6 -0
  42. package/build/renderer/assets/{useDraftSessionChips-By3XXabI.js → useDraftSessionChips-DCIId0eY.js} +1 -1
  43. package/build/renderer/index.html +2 -2
  44. package/build/server/app/renderer/auth/api.d.ts +28 -2
  45. package/build/server/app/renderer/auth/api.d.ts.map +1 -1
  46. package/build/server/app/renderer/auth/api.js +29 -4
  47. package/build/server/app/renderer/auth/api.js.map +1 -1
  48. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts +11 -4
  49. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts.map +1 -1
  50. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js +25 -5
  51. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js.map +1 -1
  52. package/build/server/app/server/authGatePolicy.js +1 -2
  53. package/build/server/app/server/authGatePolicy.js.map +1 -1
  54. package/build/server/app/server/authRoutes.d.ts +14 -1
  55. package/build/server/app/server/authRoutes.d.ts.map +1 -1
  56. package/build/server/app/server/authRoutes.js +395 -76
  57. package/build/server/app/server/authRoutes.js.map +1 -1
  58. package/build/server/app/server/contracts.d.ts +4 -1
  59. package/build/server/app/server/contracts.d.ts.map +1 -1
  60. package/build/server/app/server/dependencies.d.ts.map +1 -1
  61. package/build/server/app/server/dependencies.js +6 -1
  62. package/build/server/app/server/dependencies.js.map +1 -1
  63. package/build/server/app/server/platformSetupRoutes.d.ts +2 -1
  64. package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
  65. package/build/server/app/server/platformSetupRoutes.js +129 -64
  66. package/build/server/app/server/platformSetupRoutes.js.map +1 -1
  67. package/build/server/app/server/requestRouter.d.ts.map +1 -1
  68. package/build/server/app/server/requestRouter.js +3 -0
  69. package/build/server/app/server/requestRouter.js.map +1 -1
  70. package/build/server/app/server/runtimeSurfaceProxy.d.ts.map +1 -1
  71. package/build/server/app/server/runtimeSurfaceProxy.js +12 -17
  72. package/build/server/app/server/runtimeSurfaceProxy.js.map +1 -1
  73. package/build/server/config.d.ts +1 -3
  74. package/build/server/config.d.ts.map +1 -1
  75. package/build/server/config.js +2 -13
  76. package/build/server/config.js.map +1 -1
  77. package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
  78. package/build/server/design/components/providerModelFieldsSupport.js +4 -1
  79. package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
  80. package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
  81. package/build/server/design/components/useProviderTargetReconciliation.js +3 -1
  82. package/build/server/design/components/useProviderTargetReconciliation.js.map +1 -1
  83. package/build/server/platform/auth/actionGrant.d.ts +61 -0
  84. package/build/server/platform/auth/actionGrant.d.ts.map +1 -0
  85. package/build/server/platform/auth/actionGrant.js +108 -0
  86. package/build/server/platform/auth/actionGrant.js.map +1 -0
  87. package/build/server/platform/auth/adminCredentials.d.ts +37 -0
  88. package/build/server/platform/auth/adminCredentials.d.ts.map +1 -0
  89. package/build/server/platform/auth/adminCredentials.js +63 -0
  90. package/build/server/platform/auth/adminCredentials.js.map +1 -0
  91. package/build/server/platform/auth/bootstrap.d.ts +14 -0
  92. package/build/server/platform/auth/bootstrap.d.ts.map +1 -1
  93. package/build/server/platform/auth/bootstrap.js +29 -4
  94. package/build/server/platform/auth/bootstrap.js.map +1 -1
  95. package/build/server/platform/auth/config.d.ts.map +1 -1
  96. package/build/server/platform/auth/config.js +1 -1
  97. package/build/server/platform/auth/config.js.map +1 -1
  98. package/build/server/platform/auth/errorCodes.d.ts +2 -0
  99. package/build/server/platform/auth/errorCodes.d.ts.map +1 -1
  100. package/build/server/platform/auth/errorCodes.js +2 -0
  101. package/build/server/platform/auth/errorCodes.js.map +1 -1
  102. package/build/server/platform/auth/googleAccount.d.ts +40 -13
  103. package/build/server/platform/auth/googleAccount.d.ts.map +1 -1
  104. package/build/server/platform/auth/googleAccount.js +89 -70
  105. package/build/server/platform/auth/googleAccount.js.map +1 -1
  106. package/build/server/platform/auth/index.d.ts +4 -0
  107. package/build/server/platform/auth/index.d.ts.map +1 -1
  108. package/build/server/platform/auth/index.js +4 -0
  109. package/build/server/platform/auth/index.js.map +1 -1
  110. package/build/server/platform/auth/localLogin.d.ts +10 -0
  111. package/build/server/platform/auth/localLogin.d.ts.map +1 -1
  112. package/build/server/platform/auth/localLogin.js +17 -0
  113. package/build/server/platform/auth/localLogin.js.map +1 -1
  114. package/build/server/platform/auth/loginMethods.d.ts +18 -0
  115. package/build/server/platform/auth/loginMethods.d.ts.map +1 -0
  116. package/build/server/platform/auth/loginMethods.js +19 -0
  117. package/build/server/platform/auth/loginMethods.js.map +1 -0
  118. package/build/server/platform/auth/securityEvents.d.ts +31 -0
  119. package/build/server/platform/auth/securityEvents.d.ts.map +1 -0
  120. package/build/server/platform/auth/securityEvents.js +45 -0
  121. package/build/server/platform/auth/securityEvents.js.map +1 -0
  122. package/build/server/products/chat/api/contracts.d.ts +0 -8
  123. package/build/server/products/chat/api/contracts.d.ts.map +1 -1
  124. package/build/server/products/chat/api/setupRoutes.d.ts.map +1 -1
  125. package/build/server/products/chat/api/setupRoutes.js +2 -84
  126. package/build/server/products/chat/api/setupRoutes.js.map +1 -1
  127. package/build/server/products/shared/api/workspaceContracts.d.ts +0 -8
  128. package/build/server/products/shared/api/workspaceContracts.d.ts.map +1 -1
  129. package/build/server/runtime/client.d.ts +11 -0
  130. package/build/server/runtime/client.d.ts.map +1 -1
  131. package/build/server/runtime/client.js +23 -1
  132. package/build/server/runtime/client.js.map +1 -1
  133. package/build/server/shared/i18n/catalogs/en.d.ts.map +1 -1
  134. package/build/server/shared/i18n/catalogs/en.js +40 -0
  135. package/build/server/shared/i18n/catalogs/en.js.map +1 -1
  136. package/build/server/shared/i18n/catalogs/zh-TW.d.ts.map +1 -1
  137. package/build/server/shared/i18n/catalogs/zh-TW.js +39 -0
  138. package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
  139. package/build/server/shared/i18n/index.d.ts +39 -0
  140. package/build/server/shared/i18n/index.d.ts.map +1 -1
  141. package/build/server/shared/i18n/messageKeys.d.ts +39 -0
  142. package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
  143. package/build/server/shared/i18n/messageKeys.js +39 -0
  144. package/build/server/shared/i18n/messageKeys.js.map +1 -1
  145. package/build/server/shared/providerCatalog.d.ts +3 -2
  146. package/build/server/shared/providerCatalog.d.ts.map +1 -1
  147. package/build/server/shared/providerCatalog.js +9 -1
  148. package/build/server/shared/providerCatalog.js.map +1 -1
  149. package/build/server/shared/providerCatalogData.d.ts +11 -1
  150. package/build/server/shared/providerCatalogData.d.ts.map +1 -1
  151. package/build/server/shared/providerCatalogData.js +9 -0
  152. package/build/server/shared/providerCatalogData.js.map +1 -1
  153. package/build/server/shared/providerCatalogInstances.d.ts.map +1 -1
  154. package/build/server/shared/providerCatalogInstances.js +3 -0
  155. package/build/server/shared/providerCatalogInstances.js.map +1 -1
  156. package/package.json +1 -1
  157. package/scripts/README.md +30 -0
  158. package/scripts/linux/node-cli-common.sh +2 -75
  159. package/scripts/macos/node-cli-common.sh +2 -75
  160. package/scripts/windows/Check-WindowsSetupReadiness.ps1 +14 -443
  161. package/scripts/windows/Remove-MergedBranches.ps1 +229 -0
  162. package/build/renderer/assets/app-DVN9Ghrk.js +0 -43
  163. package/build/renderer/assets/conversationSidebarRecentEntries-XZVCnMLw.js +0 -6
@@ -1,4 +1,5 @@
1
1
  import { useEffect, useRef, useState } from 'react';
2
+ import { isProductProviderDefaultModelPlaceholder } from '../../shared/providerCatalog.js';
2
3
  import { resolveCatalogTargetSelection, sameProviderModelSelection, } from '../../shared/providerSelection.js';
3
4
  import { attachExecutionLabelToProviderTarget, sanitizePersistentTargetSelection, shouldDeferCatalogTargetReconciliation, shouldTreatPersistedTargetAsLegacyModel, } from './providerModelFieldsSupport.js';
4
5
  export function useProviderTargetReconciliation(input) {
@@ -60,12 +61,13 @@ export function useProviderTargetReconciliation(input) {
60
61
  if (input.effectiveCatalog.models.length === 0 || hasBlankLegacyDraft) {
61
62
  return;
62
63
  }
64
+ const providerDefaultPlaceholder = isProductProviderDefaultModelPlaceholder(input.provider, input.model);
63
65
  const deferStaticCatalogReconciliation = shouldDeferCatalogTargetReconciliation({
64
66
  catalogSource: input.effectiveCatalog.source,
65
67
  advancedCatalogSource: input.effectiveAdvancedCatalog.source,
66
68
  model: input.model,
67
69
  modelSelection: input.modelSelection,
68
- });
70
+ }) && (input.catalogLoading || !providerDefaultPlaceholder);
69
71
  if (deferStaticCatalogReconciliation) {
70
72
  return;
71
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useProviderTargetReconciliation.js","sourceRoot":"","sources":["../../../../src/design/components/useProviderTargetReconciliation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useProviderTargetReconciliation.js","sourceRoot":"","sources":["../../../../src/design/components/useProviderTargetReconciliation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Short-lived, single-use, purpose-bound step-up capability.
3
+ *
4
+ * ADR-111 section 3 rejects both a renderer-only password modal and a broad
5
+ * `recentlyAuthenticatedAt` timestamp on the session: the first is not an
6
+ * authorization boundary at all, and the second can authorize several
7
+ * unrelated sensitive actions. A grant is therefore bound to one account, one
8
+ * browser session, and one purpose, and is consumed on the first attempt that
9
+ * presents it — whether or not the rest of that attempt succeeds.
10
+ *
11
+ * Grants live in memory only. They are five-minute capabilities that should
12
+ * die with the process, so they are never written to the auth-state file.
13
+ */
14
+ export declare const PLATFORM_AUTH_ACTION_GRANT_TTL_MS: number;
15
+ export declare const PLATFORM_AUTH_ACTION_GRANT_TOKEN_BYTES = 32;
16
+ export declare const MAX_PENDING_PLATFORM_AUTH_ACTION_GRANTS = 32;
17
+ export declare const PLATFORM_AUTH_ACTION_HEADER = "x-cats-auth-action";
18
+ export declare const PLATFORM_AUTH_ACTION_GRANT_PURPOSES: readonly ["link_google", "unlink_google"];
19
+ export type PlatformAuthActionGrantPurpose = (typeof PLATFORM_AUTH_ACTION_GRANT_PURPOSES)[number];
20
+ export declare function isPlatformAuthActionGrantPurpose(value: unknown): value is PlatformAuthActionGrantPurpose;
21
+ export interface PlatformAuthActionGrantIssueInput {
22
+ accountId: string;
23
+ sessionId: string;
24
+ purpose: PlatformAuthActionGrantPurpose;
25
+ sessionSecret: string;
26
+ ttlMs?: number;
27
+ now?: Date;
28
+ }
29
+ export interface PlatformAuthActionGrantIssueResult {
30
+ token: string;
31
+ expiresAt: string;
32
+ }
33
+ export interface PlatformAuthActionGrantConsumeInput {
34
+ token: string;
35
+ accountId: string;
36
+ sessionId: string;
37
+ purpose: PlatformAuthActionGrantPurpose;
38
+ sessionSecret: string;
39
+ now?: Date;
40
+ }
41
+ export type PlatformAuthActionGrantRejectionReason = 'missing_token' | 'unknown_or_expired' | 'purpose_mismatch' | 'account_mismatch' | 'session_mismatch';
42
+ export type PlatformAuthActionGrantConsumeOutcome = {
43
+ ok: true;
44
+ purpose: PlatformAuthActionGrantPurpose;
45
+ } | {
46
+ ok: false;
47
+ reason: PlatformAuthActionGrantRejectionReason;
48
+ };
49
+ export interface PlatformAuthActionGrantStore {
50
+ issue(input: PlatformAuthActionGrantIssueInput): PlatformAuthActionGrantIssueResult;
51
+ consume(input: PlatformAuthActionGrantConsumeInput): PlatformAuthActionGrantConsumeOutcome;
52
+ revokeForSession(sessionId: string): void;
53
+ }
54
+ export declare class MemoryPlatformAuthActionGrantStore implements PlatformAuthActionGrantStore {
55
+ private readonly grants;
56
+ issue(input: PlatformAuthActionGrantIssueInput): PlatformAuthActionGrantIssueResult;
57
+ consume(input: PlatformAuthActionGrantConsumeInput): PlatformAuthActionGrantConsumeOutcome;
58
+ revokeForSession(sessionId: string): void;
59
+ private prune;
60
+ }
61
+ //# sourceMappingURL=actionGrant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionGrant.d.ts","sourceRoot":"","sources":["../../../../src/platform/auth/actionGrant.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,iCAAiC,QAAgB,CAAC;AAC/D,eAAO,MAAM,sCAAsC,KAAK,CAAC;AACzD,eAAO,MAAM,uCAAuC,KAAK,CAAC;AAC1D,eAAO,MAAM,2BAA2B,uBAAuB,CAAC;AAEhE,eAAO,MAAM,mCAAmC,2CAGtC,CAAC;AAEX,MAAM,MAAM,8BAA8B,GACxC,CAAC,OAAO,mCAAmC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,8BAA8B,CAGzC;AAED,MAAM,WAAW,iCAAiC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,8BAA8B,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,kCAAkC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mCAAmC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,8BAA8B,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,MAAM,sCAAsC,GAC9C,eAAe,GACf,oBAAoB,GACpB,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,qCAAqC,GAC7C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,8BAA8B,CAAA;CAAE,GACrD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,sCAAsC,CAAA;CAAE,CAAC;AAElE,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,KAAK,EAAE,iCAAiC,GAAG,kCAAkC,CAAC;IACpF,OAAO,CAAC,KAAK,EAAE,mCAAmC,GAAG,qCAAqC,CAAC;IAC3F,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAWD,qBAAa,kCAAmC,YAAW,4BAA4B;IACrF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoD;IAE3E,KAAK,CAAC,KAAK,EAAE,iCAAiC,GAAG,kCAAkC;IAsCnF,OAAO,CAAC,KAAK,EAAE,mCAAmC,GAAG,qCAAqC;IA8B1F,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQzC,OAAO,CAAC,KAAK;CAQd"}
@@ -0,0 +1,108 @@
1
+ import { randomBytes, timingSafeEqual } from 'node:crypto';
2
+ import { hashSessionToken } from './session.js';
3
+ /**
4
+ * Short-lived, single-use, purpose-bound step-up capability.
5
+ *
6
+ * ADR-111 section 3 rejects both a renderer-only password modal and a broad
7
+ * `recentlyAuthenticatedAt` timestamp on the session: the first is not an
8
+ * authorization boundary at all, and the second can authorize several
9
+ * unrelated sensitive actions. A grant is therefore bound to one account, one
10
+ * browser session, and one purpose, and is consumed on the first attempt that
11
+ * presents it — whether or not the rest of that attempt succeeds.
12
+ *
13
+ * Grants live in memory only. They are five-minute capabilities that should
14
+ * die with the process, so they are never written to the auth-state file.
15
+ */
16
+ export const PLATFORM_AUTH_ACTION_GRANT_TTL_MS = 5 * 60 * 1000;
17
+ export const PLATFORM_AUTH_ACTION_GRANT_TOKEN_BYTES = 32;
18
+ export const MAX_PENDING_PLATFORM_AUTH_ACTION_GRANTS = 32;
19
+ export const PLATFORM_AUTH_ACTION_HEADER = 'x-cats-auth-action';
20
+ export const PLATFORM_AUTH_ACTION_GRANT_PURPOSES = [
21
+ 'link_google',
22
+ 'unlink_google',
23
+ ];
24
+ export function isPlatformAuthActionGrantPurpose(value) {
25
+ return typeof value === 'string'
26
+ && PLATFORM_AUTH_ACTION_GRANT_PURPOSES.includes(value);
27
+ }
28
+ export class MemoryPlatformAuthActionGrantStore {
29
+ grants = new Map();
30
+ issue(input) {
31
+ const accountId = input.accountId.trim();
32
+ const sessionId = input.sessionId.trim();
33
+ if (!accountId || !sessionId) {
34
+ throw new Error('Action grant account and session ids are required.');
35
+ }
36
+ const now = input.now ?? new Date();
37
+ this.prune(now);
38
+ const ttlMs = input.ttlMs ?? PLATFORM_AUTH_ACTION_GRANT_TTL_MS;
39
+ const token = randomBytes(PLATFORM_AUTH_ACTION_GRANT_TOKEN_BYTES).toString('base64url');
40
+ const tokenHash = hashSessionToken(token, input.sessionSecret);
41
+ const expiresAt = new Date(now.getTime() + ttlMs).toISOString();
42
+ // A caller that keeps requesting grants without spending them must not be
43
+ // able to grow this map without bound. Evicting the oldest entry keeps the
44
+ // most recent step-up usable, which is the one the operator just performed.
45
+ if (this.grants.size >= MAX_PENDING_PLATFORM_AUTH_ACTION_GRANTS) {
46
+ const oldest = [...this.grants.entries()].sort((left, right) => Date.parse(left[1].createdAt) - Date.parse(right[1].createdAt))[0];
47
+ if (oldest) {
48
+ this.grants.delete(oldest[0]);
49
+ }
50
+ }
51
+ this.grants.set(tokenHash, {
52
+ tokenHash,
53
+ accountId,
54
+ sessionId,
55
+ purpose: input.purpose,
56
+ createdAt: now.toISOString(),
57
+ expiresAt,
58
+ });
59
+ return { token, expiresAt };
60
+ }
61
+ consume(input) {
62
+ const token = input.token.trim();
63
+ if (!token) {
64
+ return { ok: false, reason: 'missing_token' };
65
+ }
66
+ const now = input.now ?? new Date();
67
+ this.prune(now);
68
+ const tokenHash = hashSessionToken(token, input.sessionSecret);
69
+ const stored = this.grants.get(tokenHash) ?? null;
70
+ if (!stored || !matchesTokenHash(stored.tokenHash, tokenHash)) {
71
+ return { ok: false, reason: 'unknown_or_expired' };
72
+ }
73
+ // SPEC-113 requirement 22: the grant is spent on the first matching attempt
74
+ // even when a later check in that same attempt fails.
75
+ this.grants.delete(tokenHash);
76
+ if (stored.purpose !== input.purpose) {
77
+ return { ok: false, reason: 'purpose_mismatch' };
78
+ }
79
+ if (stored.accountId !== input.accountId) {
80
+ return { ok: false, reason: 'account_mismatch' };
81
+ }
82
+ if (stored.sessionId !== input.sessionId) {
83
+ return { ok: false, reason: 'session_mismatch' };
84
+ }
85
+ return { ok: true, purpose: stored.purpose };
86
+ }
87
+ revokeForSession(sessionId) {
88
+ for (const [tokenHash, grant] of this.grants) {
89
+ if (grant.sessionId === sessionId) {
90
+ this.grants.delete(tokenHash);
91
+ }
92
+ }
93
+ }
94
+ prune(now) {
95
+ const nowMs = now.getTime();
96
+ for (const [tokenHash, grant] of this.grants) {
97
+ if (Date.parse(grant.expiresAt) <= nowMs) {
98
+ this.grants.delete(tokenHash);
99
+ }
100
+ }
101
+ }
102
+ }
103
+ function matchesTokenHash(storedHash, candidateHash) {
104
+ const stored = Buffer.from(storedHash, 'utf8');
105
+ const candidate = Buffer.from(candidateHash, 'utf8');
106
+ return stored.length === candidate.length && timingSafeEqual(stored, candidate);
107
+ }
108
+ //# sourceMappingURL=actionGrant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionGrant.js","sourceRoot":"","sources":["../../../../src/platform/auth/actionGrant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shared Admin credential rules for first-admin setup and repair bootstrap.
3
+ *
4
+ * ADR-111 fixes one promotion-period password policy for both paths: 8 to 256
5
+ * Unicode code points inclusive, with no composition rules. Length is counted
6
+ * in code points, not UTF-16 code units, so an emoji or other astral character
7
+ * counts once rather than twice.
8
+ */
9
+ export declare const PLATFORM_ADMIN_PASSWORD_MIN_CODE_POINTS = 8;
10
+ export declare const PLATFORM_ADMIN_PASSWORD_MAX_CODE_POINTS = 256;
11
+ export type PlatformAdminCredentialRejectionReason = 'identifier_required' | 'password_required' | 'password_too_short' | 'password_too_long';
12
+ export interface PlatformAdminCredentials {
13
+ identifier: string;
14
+ password: string;
15
+ }
16
+ export type PlatformAdminCredentialValidation = {
17
+ ok: true;
18
+ credentials: PlatformAdminCredentials;
19
+ } | {
20
+ ok: false;
21
+ reason: PlatformAdminCredentialRejectionReason;
22
+ };
23
+ export declare class PlatformAdminCredentialError extends Error {
24
+ readonly reason: PlatformAdminCredentialRejectionReason;
25
+ constructor(reason: PlatformAdminCredentialRejectionReason);
26
+ }
27
+ export declare function countUnicodeCodePoints(value: string): number;
28
+ export declare function validatePlatformAdminCredentials(input: {
29
+ identifier: unknown;
30
+ password: unknown;
31
+ }): PlatformAdminCredentialValidation;
32
+ export declare function assertPlatformAdminCredentials(input: {
33
+ identifier: unknown;
34
+ password: unknown;
35
+ }): PlatformAdminCredentials;
36
+ export declare function describePlatformAdminCredentialRejection(reason: PlatformAdminCredentialRejectionReason): string;
37
+ //# sourceMappingURL=adminCredentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminCredentials.d.ts","sourceRoot":"","sources":["../../../../src/platform/auth/adminCredentials.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,uCAAuC,IAAI,CAAC;AACzD,eAAO,MAAM,uCAAuC,MAAM,CAAC;AAE3D,MAAM,MAAM,sCAAsC,GAC9C,qBAAqB,GACrB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,CAAC;AAExB,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iCAAiC,GACzC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,wBAAwB,CAAA;CAAE,GACnD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,sCAAsC,CAAA;CAAE,CAAC;AAElE,qBAAa,4BAA6B,SAAQ,KAAK;aACzB,MAAM,EAAE,sCAAsC;gBAA9C,MAAM,EAAE,sCAAsC;CAI3E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE;IACtD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,iCAAiC,CAoBpC;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,wBAAwB,CAM3B;AAED,wBAAgB,wCAAwC,CACtD,MAAM,EAAE,sCAAsC,GAC7C,MAAM,CAeR"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Shared Admin credential rules for first-admin setup and repair bootstrap.
3
+ *
4
+ * ADR-111 fixes one promotion-period password policy for both paths: 8 to 256
5
+ * Unicode code points inclusive, with no composition rules. Length is counted
6
+ * in code points, not UTF-16 code units, so an emoji or other astral character
7
+ * counts once rather than twice.
8
+ */
9
+ export const PLATFORM_ADMIN_PASSWORD_MIN_CODE_POINTS = 8;
10
+ export const PLATFORM_ADMIN_PASSWORD_MAX_CODE_POINTS = 256;
11
+ export class PlatformAdminCredentialError extends Error {
12
+ reason;
13
+ constructor(reason) {
14
+ super(describePlatformAdminCredentialRejection(reason));
15
+ this.reason = reason;
16
+ this.name = 'PlatformAdminCredentialError';
17
+ }
18
+ }
19
+ export function countUnicodeCodePoints(value) {
20
+ let count = 0;
21
+ for (const _codePoint of value) {
22
+ count += 1;
23
+ }
24
+ return count;
25
+ }
26
+ export function validatePlatformAdminCredentials(input) {
27
+ const identifier = typeof input.identifier === 'string' ? input.identifier.trim() : '';
28
+ if (!identifier) {
29
+ return { ok: false, reason: 'identifier_required' };
30
+ }
31
+ const password = typeof input.password === 'string' ? input.password : '';
32
+ if (!password) {
33
+ return { ok: false, reason: 'password_required' };
34
+ }
35
+ const codePoints = countUnicodeCodePoints(password);
36
+ if (codePoints < PLATFORM_ADMIN_PASSWORD_MIN_CODE_POINTS) {
37
+ return { ok: false, reason: 'password_too_short' };
38
+ }
39
+ if (codePoints > PLATFORM_ADMIN_PASSWORD_MAX_CODE_POINTS) {
40
+ return { ok: false, reason: 'password_too_long' };
41
+ }
42
+ return { ok: true, credentials: { identifier, password } };
43
+ }
44
+ export function assertPlatformAdminCredentials(input) {
45
+ const validation = validatePlatformAdminCredentials(input);
46
+ if (!validation.ok) {
47
+ throw new PlatformAdminCredentialError(validation.reason);
48
+ }
49
+ return validation.credentials;
50
+ }
51
+ export function describePlatformAdminCredentialRejection(reason) {
52
+ switch (reason) {
53
+ case 'identifier_required':
54
+ return 'Admin identifier is required.';
55
+ case 'password_required':
56
+ return 'Admin password is required.';
57
+ case 'password_too_short':
58
+ return `Admin password must contain at least ${PLATFORM_ADMIN_PASSWORD_MIN_CODE_POINTS} characters.`;
59
+ case 'password_too_long':
60
+ return `Admin password must contain at most ${PLATFORM_ADMIN_PASSWORD_MAX_CODE_POINTS} characters.`;
61
+ }
62
+ }
63
+ //# sourceMappingURL=adminCredentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminCredentials.js","sourceRoot":"","sources":["../../../../src/platform/auth/adminCredentials.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAAG,CAAC;AAiB3D,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACzB;IAA5B,YAA4B,MAA8C;QACxE,KAAK,CAAC,wCAAwC,CAAC,MAAM,CAAC,CAAC,CAAC;QAD9B,WAAM,GAAN,MAAM,CAAwC;QAExE,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,KAGhD;IACC,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,UAAU,GAAG,uCAAuC,EAAE,CAAC;QACzD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,UAAU,GAAG,uCAAuC,EAAE,CAAC;QACzD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAG9C;IACC,MAAM,UAAU,GAAG,gCAAgC,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,4BAA4B,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,UAAU,CAAC,WAAW,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,MAA8C;IAE9C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,qBAAqB;YACxB,OAAO,+BAA+B,CAAC;QACzC,KAAK,mBAAmB;YACtB,OAAO,6BAA6B,CAAC;QACvC,KAAK,oBAAoB;YACvB,OAAO,wCACL,uCACF,cAAc,CAAC;QACjB,KAAK,mBAAmB;YACtB,OAAO,uCACL,uCACF,cAAc,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -1,5 +1,19 @@
1
1
  import { type BrowserSessionIssueResult } from './session.js';
2
2
  import type { PlatformAccountRecord, PlatformAuthState, PlatformIdentityRecord, PlatformMembershipRecord } from './types.js';
3
+ /**
4
+ * Raised when first-admin creation loses the uniqueness recheck that runs
5
+ * inside the serialized auth-state mutation. Callers map this to a conflict
6
+ * response instead of creating a second Account.
7
+ */
8
+ export declare class PlatformFirstAdminExistsError extends Error {
9
+ constructor();
10
+ }
11
+ /**
12
+ * SPEC-113 requirement 5: the "no Admin exists" check must run inside the same
13
+ * serialized mutation that persists the new records. A prior setup-status read
14
+ * is not concurrency control.
15
+ */
16
+ export declare function hasExistingPlatformAdmin(state: PlatformAuthState): boolean;
3
17
  export interface CreateFirstAdminLocalInput {
4
18
  state: PlatformAuthState;
5
19
  displayName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../../src/platform/auth/bootstrap.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,wBAAwB,CAAC;IACrC,OAAO,EAAE,yBAAyB,CAAC;CACpC;AAED,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,2BAA2B,CAAC,CA0DtC;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAMrE"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../../src/platform/auth/bootstrap.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;;CAKvD;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAK1E;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,wBAAwB,CAAC;IACrC,OAAO,EAAE,yBAAyB,CAAC;CACpC;AAED,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,2BAA2B,CAAC,CA8DtC;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAMrE"}
@@ -1,15 +1,40 @@
1
1
  import { randomUUID } from 'node:crypto';
2
+ import { assertPlatformAdminCredentials } from './adminCredentials.js';
2
3
  import { createLocalPasswordHash } from './password.js';
3
4
  import { issueBrowserSession } from './session.js';
5
+ /**
6
+ * Raised when first-admin creation loses the uniqueness recheck that runs
7
+ * inside the serialized auth-state mutation. Callers map this to a conflict
8
+ * response instead of creating a second Account.
9
+ */
10
+ export class PlatformFirstAdminExistsError extends Error {
11
+ constructor() {
12
+ super('First admin already exists.');
13
+ this.name = 'PlatformFirstAdminExistsError';
14
+ }
15
+ }
16
+ /**
17
+ * SPEC-113 requirement 5: the "no Admin exists" check must run inside the same
18
+ * serialized mutation that persists the new records. A prior setup-status read
19
+ * is not concurrency control.
20
+ */
21
+ export function hasExistingPlatformAdmin(state) {
22
+ return state.accounts.length > 0
23
+ || state.memberships.some((membership) => membership.roles.some((role) => role === 'owner' || role === 'admin'));
24
+ }
4
25
  export async function createFirstAdminLocalAuthState(input) {
5
- if (input.state.accounts.length > 0) {
6
- throw new Error('First admin already exists.');
26
+ if (hasExistingPlatformAdmin(input.state)) {
27
+ throw new PlatformFirstAdminExistsError();
7
28
  }
29
+ const credentials = assertPlatformAdminCredentials({
30
+ identifier: input.identifier,
31
+ password: input.password,
32
+ });
8
33
  const now = input.now ?? new Date();
9
34
  const nowIso = now.toISOString();
10
35
  const accountId = `auth-account-${randomUUID()}`;
11
- const normalizedIdentifier = normalizeAccountIdentifier(input.identifier);
12
- const password = await createLocalPasswordHash(input.password);
36
+ const normalizedIdentifier = normalizeAccountIdentifier(credentials.identifier);
37
+ const password = await createLocalPasswordHash(credentials.password);
13
38
  const account = {
14
39
  id: accountId,
15
40
  displayName: input.displayName.trim() || 'Owner',
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../../src/platform/auth/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAkC,MAAM,cAAc,CAAC;AA0BnF,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,KAAiC;IAEjC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,gBAAgB,UAAU,EAAE,EAAE,CAAC;IACjD,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,OAAO,GAA0B;QACrC,EAAE,EAAE,SAAS;QACb,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,OAAO;QAChD,KAAK,EAAE,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI;QACzE,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;KAClB,CAAC;IACF,MAAM,QAAQ,GAA2B;QACvC,EAAE,EAAE,iBAAiB,UAAU,EAAE,EAAE;QACnC,SAAS;QACT,QAAQ,EAAE,gBAAgB;QAC1B,eAAe,EAAE,oBAAoB;QACrC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;QACrD,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;KAClB,CAAC;IACF,MAAM,UAAU,GAA6B;QAC3C,EAAE,EAAE,mBAAmB,UAAU,EAAE,EAAE;QACrC,SAAS;QACT,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;QACzB,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;KAClB,CAAC;IACF,MAAM,OAAO,GAAG,mBAAmB,CAAC;QAClC,SAAS;QACT,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,KAAK,EAAE,KAAK,CAAC,YAAY;QACzB,GAAG;KACJ,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE;YACL,GAAG,KAAK,CAAC,KAAK;YACd,SAAS,EAAE,MAAM;YACjB,QAAQ,EAAE,CAAC,OAAO,CAAC;YACnB,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,WAAW,EAAE,CAAC,UAAU,CAAC;YACzB,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;SAC5B;QACD,OAAO;QACP,QAAQ;QACR,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,UAAkB;IAC3D,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,OAAO,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../../src/platform/auth/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/platform/auth/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAEzE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,wBAAwB,CAAC;CAClC;AAED,eAAO,MAAM,2BAA2B,QAA0B,CAAC;AACnE,eAAO,MAAM,kCAAkC,QAA2B,CAAC;AAC3E,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,sCAAsC,MAAM,CAAC;AAC1D,eAAO,MAAM,gCAAgC,QAAiB,CAAC;AAC/D,eAAO,MAAM,qCAAqC,MAAM,CAAC;AAEzD,MAAM,WAAW,2BAA2B;IAC1C,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,kBAAkB,CAqD7F"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/platform/auth/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAEzE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,wBAAwB,CAAC;CAClC;AAED,eAAO,MAAM,2BAA2B,QAA2B,CAAC;AACpE,eAAO,MAAM,kCAAkC,QAA2B,CAAC;AAC3E,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,sCAAsC,MAAM,CAAC;AAC1D,eAAO,MAAM,gCAAgC,QAAiB,CAAC;AAC/D,eAAO,MAAM,qCAAqC,MAAM,CAAC;AAEzD,MAAM,WAAW,2BAA2B;IAC1C,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,kBAAkB,CAqD7F"}
@@ -1,5 +1,5 @@
1
1
  import { resolvePlatformAuthRecoveryTokenPathFromChatState, resolvePlatformAuthStatePathFromChatState, } from '../../shared/platformPaths.js';
2
- export const DEFAULT_AUTH_SESSION_TTL_MS = 7 * 24 * 60 * 60 * 1000;
2
+ export const DEFAULT_AUTH_SESSION_TTL_MS = 30 * 24 * 60 * 60 * 1000;
3
3
  export const DEFAULT_AUTH_MOBILE_SESSION_TTL_MS = 30 * 24 * 60 * 60 * 1000;
4
4
  export const DEFAULT_AUTH_LOGIN_FAILURE_LIMIT = 5;
5
5
  export const DEFAULT_AUTH_LOGIN_LOCKOUT_MS = 30_000;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/platform/auth/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/platform/auth/config.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ export declare const PLATFORM_AUTH_ERROR_CODES: {
2
2
  readonly unauthenticated: "E_UNAUTHENTICATED";
3
3
  readonly forbidden: "E_FORBIDDEN";
4
4
  readonly csrfMismatch: "E_CSRF_MISMATCH";
5
+ readonly reauthRequired: "E_REAUTH_REQUIRED";
6
+ readonly identityConflict: "E_IDENTITY_CONFLICT";
5
7
  };
6
8
  export type PlatformAuthErrorCode = (typeof PLATFORM_AUTH_ERROR_CODES)[keyof typeof PLATFORM_AUTH_ERROR_CODES];
7
9
  //# sourceMappingURL=errorCodes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errorCodes.d.ts","sourceRoot":"","sources":["../../../../src/platform/auth/errorCodes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAC/B,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,OAAO,yBAAyB,CAAC,CAAC"}
1
+ {"version":3,"file":"errorCodes.d.ts","sourceRoot":"","sources":["../../../../src/platform/auth/errorCodes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB;;;;;;CAM5B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAC/B,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,OAAO,yBAAyB,CAAC,CAAC"}
@@ -2,5 +2,7 @@ export const PLATFORM_AUTH_ERROR_CODES = {
2
2
  unauthenticated: 'E_UNAUTHENTICATED',
3
3
  forbidden: 'E_FORBIDDEN',
4
4
  csrfMismatch: 'E_CSRF_MISMATCH',
5
+ reauthRequired: 'E_REAUTH_REQUIRED',
6
+ identityConflict: 'E_IDENTITY_CONFLICT',
5
7
  };
6
8
  //# sourceMappingURL=errorCodes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errorCodes.js","sourceRoot":"","sources":["../../../../src/platform/auth/errorCodes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,eAAe,EAAE,mBAAmB;IACpC,SAAS,EAAE,aAAa;IACxB,YAAY,EAAE,iBAAiB;CACvB,CAAC"}
1
+ {"version":3,"file":"errorCodes.js","sourceRoot":"","sources":["../../../../src/platform/auth/errorCodes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,eAAe,EAAE,mBAAmB;IACpC,SAAS,EAAE,aAAa;IACxB,YAAY,EAAE,iBAAiB;IAC/B,cAAc,EAAE,mBAAmB;IACnC,gBAAgB,EAAE,qBAAqB;CAC/B,CAAC"}
@@ -1,47 +1,74 @@
1
1
  import { type BrowserSessionIssueResult } from './session.js';
2
2
  import type { PlatformAccountRecord, PlatformAuthState, PlatformIdentityRecord, PlatformMembershipRecord } from './types.js';
3
3
  import type { PlatformVerifiedGoogleIdentity } from './googleVerifier.js';
4
- export interface CreateFirstAdminGoogleInput {
4
+ export interface CreateGoogleBrowserSessionInput {
5
5
  state: PlatformAuthState;
6
6
  identity: PlatformVerifiedGoogleIdentity;
7
7
  sessionSecret: string;
8
8
  sessionTtlMs: number;
9
9
  now?: Date;
10
10
  }
11
- export interface CreateFirstAdminGoogleResult {
11
+ export interface CreateGoogleBrowserSessionResult {
12
12
  state: PlatformAuthState;
13
13
  account: PlatformAccountRecord;
14
14
  identity: PlatformIdentityRecord;
15
15
  membership: PlatformMembershipRecord;
16
16
  session: BrowserSessionIssueResult;
17
17
  }
18
- export interface CreateGoogleBrowserSessionInput {
18
+ export interface LinkGoogleIdentityToAccountInput {
19
19
  state: PlatformAuthState;
20
+ accountId: string;
20
21
  identity: PlatformVerifiedGoogleIdentity;
21
- sessionSecret: string;
22
- sessionTtlMs: number;
23
22
  now?: Date;
24
23
  }
25
- export interface CreateGoogleBrowserSessionResult {
24
+ export interface LinkGoogleIdentityToAccountResult {
26
25
  state: PlatformAuthState;
27
26
  account: PlatformAccountRecord;
28
27
  identity: PlatformIdentityRecord;
29
28
  membership: PlatformMembershipRecord;
30
- session: BrowserSessionIssueResult;
29
+ adoptedAccountEmail: boolean;
31
30
  }
32
- export interface LinkGoogleIdentityToAccountInput {
31
+ export type GoogleIdentityLinkRejectionReason = 'account_not_found' | 'email_mismatch' | 'subject_owned_by_other_account' | 'account_has_other_google_identity';
32
+ export type LinkGoogleIdentityToAccountOutcome = {
33
+ ok: true;
34
+ result: LinkGoogleIdentityToAccountResult;
35
+ } | {
36
+ ok: false;
37
+ reason: GoogleIdentityLinkRejectionReason;
38
+ };
39
+ export interface UnlinkGoogleIdentityFromAccountInput {
33
40
  state: PlatformAuthState;
34
41
  accountId: string;
35
- identity: PlatformVerifiedGoogleIdentity;
42
+ keepSessionId: string;
36
43
  now?: Date;
37
44
  }
38
- export interface LinkGoogleIdentityToAccountResult {
45
+ export interface UnlinkGoogleIdentityFromAccountResult {
39
46
  state: PlatformAuthState;
40
47
  account: PlatformAccountRecord;
41
- identity: PlatformIdentityRecord;
42
48
  membership: PlatformMembershipRecord;
49
+ revokedSessionIds: string[];
43
50
  }
44
- export declare function createFirstAdminGoogleAuthState(input: CreateFirstAdminGoogleInput): CreateFirstAdminGoogleResult;
45
- export declare function linkGoogleIdentityToAccount(input: LinkGoogleIdentityToAccountInput): LinkGoogleIdentityToAccountResult | null;
51
+ export type GoogleIdentityUnlinkRejectionReason = 'account_not_found' | 'google_not_linked' | 'local_fallback_missing';
52
+ export type UnlinkGoogleIdentityFromAccountOutcome = {
53
+ ok: true;
54
+ result: UnlinkGoogleIdentityFromAccountResult;
55
+ } | {
56
+ ok: false;
57
+ reason: GoogleIdentityUnlinkRejectionReason;
58
+ };
59
+ /**
60
+ * ADR-111 section 4: trim and lowercase only. Cats deliberately does not apply
61
+ * Gmail alias, dot, or plus-address canonicalization, so two addresses Google
62
+ * may route to one mailbox stay distinct here.
63
+ */
64
+ export declare function normalizePlatformAccountEmail(value: string | null | undefined): string | null;
65
+ export declare function linkGoogleIdentityToAccount(input: LinkGoogleIdentityToAccountInput): LinkGoogleIdentityToAccountOutcome;
66
+ /**
67
+ * ADR-111 section 6: unlinking must preserve a usable local login and must not
68
+ * leave ambient access behind. Session records do not retain which identity
69
+ * established them, so every other browser and mobile session for the account
70
+ * is revoked and only the step-up-verified session survives.
71
+ */
72
+ export declare function unlinkGoogleIdentityFromAccount(input: UnlinkGoogleIdentityFromAccountInput): UnlinkGoogleIdentityFromAccountOutcome;
46
73
  export declare function createGoogleBrowserSessionForLinkedIdentity(input: CreateGoogleBrowserSessionInput): CreateGoogleBrowserSessionResult | null;
47
74
  //# sourceMappingURL=googleAccount.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"googleAccount.d.ts","sourceRoot":"","sources":["../../../../src/platform/auth/googleAccount.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAE1E,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,8BAA8B,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,wBAAwB,CAAC;IACrC,OAAO,EAAE,yBAAyB,CAAC;CACpC;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,8BAA8B,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,gCAAgC;IAC/C,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,wBAAwB,CAAC;IACrC,OAAO,EAAE,yBAAyB,CAAC;CACpC;AAED,MAAM,WAAW,gCAAgC;IAC/C,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,8BAA8B,CAAC;IACzC,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,wBAAwB,CAAC;CACtC;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,2BAA2B,GACjC,4BAA4B,CAsD9B;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,gCAAgC,GACtC,iCAAiC,GAAG,IAAI,CAuE1C;AAED,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,+BAA+B,GACrC,gCAAgC,GAAG,IAAI,CAoDzC"}
1
+ {"version":3,"file":"googleAccount.d.ts","sourceRoot":"","sources":["../../../../src/platform/auth/googleAccount.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAE1E,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,8BAA8B,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,gCAAgC;IAC/C,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,wBAAwB,CAAC;IACrC,OAAO,EAAE,yBAAyB,CAAC;CACpC;AAED,MAAM,WAAW,gCAAgC;IAC/C,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,8BAA8B,CAAC;IACzC,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,wBAAwB,CAAC;IACrC,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,iCAAiC,GACzC,mBAAmB,GACnB,gBAAgB,GAChB,gCAAgC,GAChC,mCAAmC,CAAC;AAExC,MAAM,MAAM,kCAAkC,GAC1C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,iCAAiC,CAAA;CAAE,GACvD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iCAAiC,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,oCAAoC;IACnD,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,qCAAqC;IACpD,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,UAAU,EAAE,wBAAwB,CAAC;IACrC,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,mCAAmC,GAC3C,mBAAmB,GACnB,mBAAmB,GACnB,wBAAwB,CAAC;AAE7B,MAAM,MAAM,sCAAsC,GAC9C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,qCAAqC,CAAA;CAAE,GAC3D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mCAAmC,CAAA;CAAE,CAAC;AAE/D;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAG7F;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,gCAAgC,GACtC,kCAAkC,CAqFpC;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,oCAAoC,GAC1C,sCAAsC,CA2DxC;AAED,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,+BAA+B,GACrC,gCAAgC,GAAG,IAAI,CAmDzC"}