@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.
- package/.env.example +7 -10
- package/build/desktop/bootstrapPage.d.ts.map +1 -1
- package/build/desktop/bootstrapPage.js +162 -55
- package/build/desktop/bootstrapPage.js.map +1 -1
- package/build/desktop/cliInventoryProbe.d.ts +18 -0
- package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
- package/build/desktop/cliInventoryProbe.js +42 -0
- package/build/desktop/cliInventoryProbe.js.map +1 -1
- package/build/desktop/contracts.d.ts +9 -0
- package/build/desktop/contracts.d.ts.map +1 -1
- package/build/desktop/main.js +101 -20
- package/build/desktop/main.js.map +1 -1
- package/build/desktop/readiness.d.ts.map +1 -1
- package/build/desktop/readiness.js +35 -2
- package/build/desktop/readiness.js.map +1 -1
- package/build/desktop/tray.d.ts +1 -1
- package/build/desktop/tray.d.ts.map +1 -1
- package/build/desktop/tray.js +2 -7
- package/build/desktop/tray.js.map +1 -1
- package/build/desktop/trayMenu.d.ts +23 -2
- package/build/desktop/trayMenu.d.ts.map +1 -1
- package/build/desktop/trayMenu.js +24 -30
- package/build/desktop/trayMenu.js.map +1 -1
- package/build/desktop/updateDialog.d.ts +40 -0
- package/build/desktop/updateDialog.d.ts.map +1 -0
- package/build/desktop/updateDialog.js +178 -0
- package/build/desktop/updateDialog.js.map +1 -0
- package/build/desktop/updateNotifications.js +2 -2
- package/build/desktop/updateNotifications.js.map +1 -1
- package/build/desktop/updaterAdapter.d.ts +1 -0
- package/build/desktop/updaterAdapter.d.ts.map +1 -1
- package/build/desktop/updaterAdapter.js +13 -1
- package/build/desktop/updaterAdapter.js.map +1 -1
- package/build/renderer/assets/{ActiveSessionPermissionChip-Dl2UOFgh.js → ActiveSessionPermissionChip-DImsuR9T.js} +1 -1
- package/build/renderer/assets/{App-CPqGDXVi.js → App-BfOvMP2m.js} +1 -1
- package/build/renderer/assets/{App-ChvP0G9X.js → App-DKOSn0o_.js} +1 -1
- package/build/renderer/assets/{App-C57f4p8k.js → App-DWd7I3Z2.js} +1 -1
- package/build/renderer/assets/{WorkspaceAppRoutes-DYg2vnjz.js → WorkspaceAppRoutes-CrbTA9En.js} +1 -1
- package/build/renderer/assets/app-BTww3Hl4.js +43 -0
- package/build/renderer/assets/{app-XnXwkcD2.css → app-CPxWQwLA.css} +1 -1
- package/build/renderer/assets/conversationSidebarRecentEntries-QuaOPxCb.js +6 -0
- package/build/renderer/assets/{useDraftSessionChips-By3XXabI.js → useDraftSessionChips-DCIId0eY.js} +1 -1
- package/build/renderer/index.html +2 -2
- package/build/server/app/renderer/auth/api.d.ts +28 -2
- package/build/server/app/renderer/auth/api.d.ts.map +1 -1
- package/build/server/app/renderer/auth/api.js +29 -4
- package/build/server/app/renderer/auth/api.js.map +1 -1
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts +11 -4
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts.map +1 -1
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js +25 -5
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js.map +1 -1
- package/build/server/app/server/authGatePolicy.js +1 -2
- package/build/server/app/server/authGatePolicy.js.map +1 -1
- package/build/server/app/server/authRoutes.d.ts +14 -1
- package/build/server/app/server/authRoutes.d.ts.map +1 -1
- package/build/server/app/server/authRoutes.js +395 -76
- package/build/server/app/server/authRoutes.js.map +1 -1
- package/build/server/app/server/contracts.d.ts +4 -1
- package/build/server/app/server/contracts.d.ts.map +1 -1
- package/build/server/app/server/dependencies.d.ts.map +1 -1
- package/build/server/app/server/dependencies.js +6 -1
- package/build/server/app/server/dependencies.js.map +1 -1
- package/build/server/app/server/platformSetupRoutes.d.ts +2 -1
- package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
- package/build/server/app/server/platformSetupRoutes.js +129 -64
- package/build/server/app/server/platformSetupRoutes.js.map +1 -1
- package/build/server/app/server/requestRouter.d.ts.map +1 -1
- package/build/server/app/server/requestRouter.js +3 -0
- package/build/server/app/server/requestRouter.js.map +1 -1
- package/build/server/app/server/runtimeSurfaceProxy.d.ts.map +1 -1
- package/build/server/app/server/runtimeSurfaceProxy.js +12 -17
- package/build/server/app/server/runtimeSurfaceProxy.js.map +1 -1
- package/build/server/config.d.ts +1 -3
- package/build/server/config.d.ts.map +1 -1
- package/build/server/config.js +2 -13
- package/build/server/config.js.map +1 -1
- package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
- package/build/server/design/components/providerModelFieldsSupport.js +4 -1
- package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
- package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
- package/build/server/design/components/useProviderTargetReconciliation.js +3 -1
- package/build/server/design/components/useProviderTargetReconciliation.js.map +1 -1
- package/build/server/platform/auth/actionGrant.d.ts +61 -0
- package/build/server/platform/auth/actionGrant.d.ts.map +1 -0
- package/build/server/platform/auth/actionGrant.js +108 -0
- package/build/server/platform/auth/actionGrant.js.map +1 -0
- package/build/server/platform/auth/adminCredentials.d.ts +37 -0
- package/build/server/platform/auth/adminCredentials.d.ts.map +1 -0
- package/build/server/platform/auth/adminCredentials.js +63 -0
- package/build/server/platform/auth/adminCredentials.js.map +1 -0
- package/build/server/platform/auth/bootstrap.d.ts +14 -0
- package/build/server/platform/auth/bootstrap.d.ts.map +1 -1
- package/build/server/platform/auth/bootstrap.js +29 -4
- package/build/server/platform/auth/bootstrap.js.map +1 -1
- package/build/server/platform/auth/config.d.ts.map +1 -1
- package/build/server/platform/auth/config.js +1 -1
- package/build/server/platform/auth/config.js.map +1 -1
- package/build/server/platform/auth/errorCodes.d.ts +2 -0
- package/build/server/platform/auth/errorCodes.d.ts.map +1 -1
- package/build/server/platform/auth/errorCodes.js +2 -0
- package/build/server/platform/auth/errorCodes.js.map +1 -1
- package/build/server/platform/auth/googleAccount.d.ts +40 -13
- package/build/server/platform/auth/googleAccount.d.ts.map +1 -1
- package/build/server/platform/auth/googleAccount.js +89 -70
- package/build/server/platform/auth/googleAccount.js.map +1 -1
- package/build/server/platform/auth/index.d.ts +4 -0
- package/build/server/platform/auth/index.d.ts.map +1 -1
- package/build/server/platform/auth/index.js +4 -0
- package/build/server/platform/auth/index.js.map +1 -1
- package/build/server/platform/auth/localLogin.d.ts +10 -0
- package/build/server/platform/auth/localLogin.d.ts.map +1 -1
- package/build/server/platform/auth/localLogin.js +17 -0
- package/build/server/platform/auth/localLogin.js.map +1 -1
- package/build/server/platform/auth/loginMethods.d.ts +18 -0
- package/build/server/platform/auth/loginMethods.d.ts.map +1 -0
- package/build/server/platform/auth/loginMethods.js +19 -0
- package/build/server/platform/auth/loginMethods.js.map +1 -0
- package/build/server/platform/auth/securityEvents.d.ts +31 -0
- package/build/server/platform/auth/securityEvents.d.ts.map +1 -0
- package/build/server/platform/auth/securityEvents.js +45 -0
- package/build/server/platform/auth/securityEvents.js.map +1 -0
- package/build/server/products/chat/api/contracts.d.ts +0 -8
- package/build/server/products/chat/api/contracts.d.ts.map +1 -1
- package/build/server/products/chat/api/setupRoutes.d.ts.map +1 -1
- package/build/server/products/chat/api/setupRoutes.js +2 -84
- package/build/server/products/chat/api/setupRoutes.js.map +1 -1
- package/build/server/products/shared/api/workspaceContracts.d.ts +0 -8
- package/build/server/products/shared/api/workspaceContracts.d.ts.map +1 -1
- package/build/server/runtime/client.d.ts +11 -0
- package/build/server/runtime/client.d.ts.map +1 -1
- package/build/server/runtime/client.js +23 -1
- package/build/server/runtime/client.js.map +1 -1
- package/build/server/shared/i18n/catalogs/en.d.ts.map +1 -1
- package/build/server/shared/i18n/catalogs/en.js +40 -0
- package/build/server/shared/i18n/catalogs/en.js.map +1 -1
- package/build/server/shared/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/build/server/shared/i18n/catalogs/zh-TW.js +39 -0
- package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
- package/build/server/shared/i18n/index.d.ts +39 -0
- package/build/server/shared/i18n/index.d.ts.map +1 -1
- package/build/server/shared/i18n/messageKeys.d.ts +39 -0
- package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
- package/build/server/shared/i18n/messageKeys.js +39 -0
- package/build/server/shared/i18n/messageKeys.js.map +1 -1
- package/build/server/shared/providerCatalog.d.ts +3 -2
- package/build/server/shared/providerCatalog.d.ts.map +1 -1
- package/build/server/shared/providerCatalog.js +9 -1
- package/build/server/shared/providerCatalog.js.map +1 -1
- package/build/server/shared/providerCatalogData.d.ts +11 -1
- package/build/server/shared/providerCatalogData.d.ts.map +1 -1
- package/build/server/shared/providerCatalogData.js +9 -0
- package/build/server/shared/providerCatalogData.js.map +1 -1
- package/build/server/shared/providerCatalogInstances.d.ts.map +1 -1
- package/build/server/shared/providerCatalogInstances.js +3 -0
- package/build/server/shared/providerCatalogInstances.js.map +1 -1
- package/package.json +1 -1
- package/scripts/README.md +30 -0
- package/scripts/linux/node-cli-common.sh +2 -75
- package/scripts/macos/node-cli-common.sh +2 -75
- package/scripts/windows/Check-WindowsSetupReadiness.ps1 +14 -443
- package/scripts/windows/Remove-MergedBranches.ps1 +229 -0
- package/build/renderer/assets/app-DVN9Ghrk.js +0 -43
- 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":"
|
|
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
|
|
6
|
-
throw new
|
|
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(
|
|
12
|
-
const password = await createLocalPasswordHash(
|
|
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;
|
|
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,
|
|
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 =
|
|
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":"AAAA,OAAO,EACL,iDAAiD,EACjD,yCAAyC,GAC1C,MAAM,+BAA+B,CAAC;AA2BvC,MAAM,CAAC,MAAM,2BAA2B,GAAG,
|
|
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
|
|
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;
|
|
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
|
|
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
|
|
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
|
|
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
|
|
24
|
+
export interface LinkGoogleIdentityToAccountResult {
|
|
26
25
|
state: PlatformAuthState;
|
|
27
26
|
account: PlatformAccountRecord;
|
|
28
27
|
identity: PlatformIdentityRecord;
|
|
29
28
|
membership: PlatformMembershipRecord;
|
|
30
|
-
|
|
29
|
+
adoptedAccountEmail: boolean;
|
|
31
30
|
}
|
|
32
|
-
export
|
|
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
|
-
|
|
42
|
+
keepSessionId: string;
|
|
36
43
|
now?: Date;
|
|
37
44
|
}
|
|
38
|
-
export interface
|
|
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
|
|
45
|
-
export
|
|
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,
|
|
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"}
|