@happyvertical/smrt-users 0.53.3 → 0.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +43 -2
- package/README.md +185 -2
- package/agents/retention.md +14 -7
- package/dist/chunks/{TerminalAuthService-DoadwiqV.js → TerminalAuthService-BfxG493c.js} +3373 -2121
- package/dist/chunks/TerminalAuthService-BfxG493c.js.map +1 -0
- package/dist/collections/CliAuthApproveLimitCollection.d.ts +4 -0
- package/dist/collections/CliAuthApproveLimitCollection.d.ts.map +1 -1
- package/dist/collections/CliAuthRequestCollection.d.ts.map +1 -1
- package/dist/collections/LoginAttemptCollection.d.ts +105 -0
- package/dist/collections/LoginAttemptCollection.d.ts.map +1 -0
- package/dist/collections/LoginAuditEventCollection.d.ts +19 -0
- package/dist/collections/LoginAuditEventCollection.d.ts.map +1 -0
- package/dist/collections/PinCredentialCollection.d.ts +26 -0
- package/dist/collections/PinCredentialCollection.d.ts.map +1 -0
- package/dist/collections/SessionCollection.d.ts +33 -1
- package/dist/collections/SessionCollection.d.ts.map +1 -1
- package/dist/collections/index.d.ts +3 -0
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +144 -31
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +3245 -1990
- package/dist/models/CliAuthApproveLimit.d.ts +8 -1
- package/dist/models/CliAuthApproveLimit.d.ts.map +1 -1
- package/dist/models/LoginAttempt.d.ts +59 -0
- package/dist/models/LoginAttempt.d.ts.map +1 -0
- package/dist/models/LoginAuditEvent.d.ts +49 -0
- package/dist/models/LoginAuditEvent.d.ts.map +1 -0
- package/dist/models/PinCredential.d.ts +31 -0
- package/dist/models/PinCredential.d.ts.map +1 -0
- package/dist/models/Session.d.ts +69 -1
- package/dist/models/Session.d.ts.map +1 -1
- package/dist/models/index.d.ts +4 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/retention.d.ts +7 -1
- package/dist/retention.d.ts.map +1 -1
- package/dist/services/DeviceCredentialService.d.ts +348 -0
- package/dist/services/DeviceCredentialService.d.ts.map +1 -0
- package/dist/services/LoginAttemptLimiter.d.ts +227 -0
- package/dist/services/LoginAttemptLimiter.d.ts.map +1 -0
- package/dist/services/MobileAuthService.d.ts.map +1 -1
- package/dist/services/OperationPermissionService.d.ts.map +1 -1
- package/dist/services/SessionPermissionContext.d.ts.map +1 -1
- package/dist/services/SessionService.d.ts +56 -1
- package/dist/services/SessionService.d.ts.map +1 -1
- package/dist/services/TerminalAuthService.d.ts +18 -3
- package/dist/services/TerminalAuthService.d.ts.map +1 -1
- package/dist/services/index.d.ts +4 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/smrt-knowledge.json +679 -9
- package/dist/sveltekit/device-credential-handlers.d.ts +60 -0
- package/dist/sveltekit/device-credential-handlers.d.ts.map +1 -0
- package/dist/sveltekit/index.d.ts +10 -0
- package/dist/sveltekit/index.d.ts.map +1 -1
- package/dist/sveltekit/types.d.ts +6 -0
- package/dist/sveltekit/types.d.ts.map +1 -1
- package/dist/sveltekit.js +184 -4
- package/dist/sveltekit.js.map +1 -1
- package/package.json +12 -12
- package/dist/chunks/TerminalAuthService-DoadwiqV.js.map +0 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SvelteKit glue for {@link DeviceCredentialService} (#3276).
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* // src/lib/server/device-auth.ts
|
|
6
|
+
* import { createDeviceCredentialHandlers } from '@happyvertical/smrt-users/sveltekit';
|
|
7
|
+
*
|
|
8
|
+
* export const deviceAuth = createDeviceCredentialHandlers({
|
|
9
|
+
* db: { type: 'postgres', url: DATABASE_URL },
|
|
10
|
+
* pin: { pepper: PIN_PEPPER },
|
|
11
|
+
* assertEnrolledDevice: async (device) => (await devices.findActiveByUserId(device.user.id)) !== null,
|
|
12
|
+
* });
|
|
13
|
+
*
|
|
14
|
+
* // routes/api/device/pin/sign-in/+server.ts → export const POST = deviceAuth.pinSignIn;
|
|
15
|
+
* // routes/api/device/sign-out/+server.ts → export const POST = deviceAuth.signOut;
|
|
16
|
+
* // routes/api/device/pin/+server.ts → export const PUT = deviceAuth.setPin;
|
|
17
|
+
* // export const DELETE = deviceAuth.clearPin;
|
|
18
|
+
* // routes/api/device/pin/reset/+server.ts → export const POST = deviceAuth.resetPin;
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Wire contract:
|
|
22
|
+
*
|
|
23
|
+
* - `pinSignIn`: `Authorization: Bearer <device token>` + JSON `{ userId, pin }`
|
|
24
|
+
* → 201 `{ sessionId, userId, tenantId, authMethod, expiresAt, mustReset }`;
|
|
25
|
+
* 401 `{ error, code: 'invalid_credentials' }` for every refusal that is not
|
|
26
|
+
* a rate limit (not a device, inactive device, unknown user, wrong PIN, no
|
|
27
|
+
* membership); 429 + `Retry-After` when the budget is exhausted.
|
|
28
|
+
* - `signOut`: `Authorization: Bearer <person token>` → 200 `{ authenticated: false }`
|
|
29
|
+
* always (does not reveal whether the token was live). Ends only the
|
|
30
|
+
* person's session.
|
|
31
|
+
* - `setPin` / `resetPin` / `clearPin`: act as the `Authorization: Bearer`
|
|
32
|
+
* session when present (resolved here), else as the session
|
|
33
|
+
* the host's hook put in `event.locals` (which must include `authMethod` —
|
|
34
|
+
* `createSessionHandler` does), JSON
|
|
35
|
+
* `{ userId, pin, currentPin? }`; 204 on success, 400 on policy, 403 when
|
|
36
|
+
* the actor may not manage that PIN, 429 on a rate-limited current-PIN
|
|
37
|
+
* check.
|
|
38
|
+
*
|
|
39
|
+
* @packageDocumentation
|
|
40
|
+
*/
|
|
41
|
+
import '../__smrt-register__.js';
|
|
42
|
+
import { DeviceCredentialService, type DeviceCredentialServiceOptions } from '../services/DeviceCredentialService.js';
|
|
43
|
+
type RequestEvent = {
|
|
44
|
+
getClientAddress?: () => string;
|
|
45
|
+
locals?: Record<string, unknown>;
|
|
46
|
+
request: Request;
|
|
47
|
+
url: URL;
|
|
48
|
+
};
|
|
49
|
+
export interface DeviceCredentialHandlers {
|
|
50
|
+
pinSignIn: (event: RequestEvent) => Promise<Response>;
|
|
51
|
+
signOut: (event: RequestEvent) => Promise<Response>;
|
|
52
|
+
setPin: (event: RequestEvent) => Promise<Response>;
|
|
53
|
+
resetPin: (event: RequestEvent) => Promise<Response>;
|
|
54
|
+
clearPin: (event: RequestEvent) => Promise<Response>;
|
|
55
|
+
/** The lazily created service, for hosts that add their own verifiers. */
|
|
56
|
+
service: () => Promise<DeviceCredentialService>;
|
|
57
|
+
}
|
|
58
|
+
export declare function createDeviceCredentialHandlers(options: DeviceCredentialServiceOptions): DeviceCredentialHandlers;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=device-credential-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-credential-handlers.d.ts","sourceRoot":"","sources":["../../src/sveltekit/device-credential-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAGH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EAIL,uBAAuB,EACvB,KAAK,8BAA8B,EACpC,MAAM,wCAAwC,CAAC;AAMhD,KAAK,YAAY,GAAG;IAClB,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AA8GF,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtD,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,0EAA0E;IAC1E,OAAO,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACjD;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,8BAA8B,GACtC,wBAAwB,CAwH1B"}
|
|
@@ -18,11 +18,13 @@
|
|
|
18
18
|
import '../__smrt-register__.js';
|
|
19
19
|
import type { SmrtClassOptions } from '@happyvertical/smrt-core';
|
|
20
20
|
import type { OidcProfileOwnerAuthorizer, OidcProfileResolver } from '../collections/UserCollection.js';
|
|
21
|
+
import { type SessionAuthMethod } from '../models/Session.js';
|
|
21
22
|
import { type OidcLoginResult, type OidcProviderResolutionOptions, type OidcTransaction } from '../services/OidcLoginService.js';
|
|
22
23
|
import { TerminalAuthError, TerminalAuthRateLimitError, TerminalAuthService, type TerminalAuthServiceOptions } from '../services/TerminalAuthService.js';
|
|
23
24
|
export { type AppResultContract, type AppResultMetadata, type CommandRequirements, canonicalizeDiscoveryArtifact, createDiscoveryConformanceArtifact, type DeclaredActionField, type DiscoveryArtifactIntegrity, DiscoveryArtifactValidationError, type DiscoveryConformanceArtifact, type DiscoveryPayload, deriveCommandRequirements, type JsonValue, SMRT_APP_RESULT_CONTRACT, SMRT_APP_RESULT_SCHEMA, SMRT_APP_RESULT_VERSION, SMRT_DISCOVERY_CONFORMANCE_ARTIFACT_SCHEMA, SMRT_DISCOVERY_CONFORMANCE_SCHEMA, SMRT_DISCOVERY_CONFORMANCE_VERSION, SMRT_MCP_RESULT_METADATA_KEY, validateDiscoveryConformanceArtifact, } from '../app-contract.js';
|
|
24
25
|
export type { NormalizedOidcClaims, OidcProfileOwnerAuthorization, OidcProfileOwnerAuthorizer, OidcProfileOwnerAuthorizerContext, OidcProfileResolver, OidcProfileResolverContext, } from '../collections/UserCollection.js';
|
|
25
26
|
export { MobileAuthError, type MobileAuthErrorCode, MobileAuthService, type MobileAuthServiceOptions, type MobileBootstrapContext, type MobileLoginContext, type MobileLogoutResult, type MobileRequestMeta, type MobileResolvedUser, type MobileTenantContext, readMobileBearerToken, validateMobileRedirectUri, } from '../services/MobileAuthService.js';
|
|
27
|
+
export { createDeviceCredentialHandlers, type DeviceCredentialHandlers, } from './device-credential-handlers.js';
|
|
26
28
|
export { type CreateMobileAuthHandlersOptions, createMobileAuthHandlers, type MobileAuthHandlers, type MobileRequestEvent, type MobileRequestHandler, resolveMobileUploadDedupKey, } from './mobile-handlers.js';
|
|
27
29
|
export { type CliResource, type CommandDefinition, type CommandKind, type CommandPolicyContext, type CommandScope, type CreateResourceListHandlerOptions, createResourceListHandler, InvalidBearerError, type ResolvedSession, type ResourceListResponseBody, } from './resource-list-handler.js';
|
|
28
30
|
export { defaultSessionLocals, type SessionLocals } from './types.js';
|
|
@@ -188,6 +190,14 @@ export interface CreateSessionCookieOptions {
|
|
|
188
190
|
ipAddress?: string;
|
|
189
191
|
/** Custom session data */
|
|
190
192
|
data?: Record<string, unknown>;
|
|
193
|
+
/**
|
|
194
|
+
* How the session was established (#2944). Login helpers in this package
|
|
195
|
+
* set it (`oidc`, `pin`, …); hosts minting cookies for their own flows
|
|
196
|
+
* should pass their own value so gates can tell channels apart.
|
|
197
|
+
*/
|
|
198
|
+
authMethod?: SessionAuthMethod | null;
|
|
199
|
+
/** Parent session for a layered session (#3276). */
|
|
200
|
+
parentSessionId?: string | null;
|
|
191
201
|
}
|
|
192
202
|
/**
|
|
193
203
|
* Helper to create a session and set the cookie after login.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sveltekit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sveltekit/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* @packageDocumentation
|
|
4
4
|
*/
|
|
5
5
|
import type { Membership } from '../models/Membership.js';
|
|
6
|
+
import type { SessionAuthMethod } from '../models/Session.js';
|
|
6
7
|
import type { User } from '../models/User.js';
|
|
8
|
+
import type { SessionParentContext } from '../services/SessionService.js';
|
|
7
9
|
/**
|
|
8
10
|
* Extended locals interface for SvelteKit
|
|
9
11
|
*
|
|
@@ -27,6 +29,10 @@ export interface SessionLocals {
|
|
|
27
29
|
tenantId: string | null;
|
|
28
30
|
/** Session ID (null if no session) */
|
|
29
31
|
sessionId: string | null;
|
|
32
|
+
/** How the session was established (#2944); null when unknown or unauthenticated. */
|
|
33
|
+
authMethod?: SessionAuthMethod | null;
|
|
34
|
+
/** For a layered (e.g. PIN) session, the device session it rides on (#3276). */
|
|
35
|
+
sessionParent?: SessionParentContext | null;
|
|
30
36
|
}
|
|
31
37
|
/**
|
|
32
38
|
* Default session locals values
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sveltekit/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sveltekit/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,kCAAkC;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sCAAsC;IACtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qFAAqF;IACrF,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtC,gFAAgF;IAChF,aAAa,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC7C;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAQlC,CAAC"}
|
package/dist/sveltekit.js
CHANGED
|
@@ -1,9 +1,180 @@
|
|
|
1
|
-
import { C as
|
|
1
|
+
import { A as DeviceCredentialForbiddenError, C as encodeOidcTransaction, L as SessionService, M as DeviceCredentialService, S as decodeOidcTransaction, T as resolveOidcProviderConfig, _ as MobileAuthService, a as TerminalAuthError, b as OidcLoginError, c as OperationPermissionError, g as MobileAuthError, h as withSessionPermissionContext, j as DeviceCredentialPolicyError, k as DeviceCredentialError, o as TerminalAuthRateLimitError, q as LoginRateLimitError, s as TerminalAuthService, v as readMobileBearerToken, w as getUsersOidcConfig, x as OidcLoginService, y as validateMobileRedirectUri } from "./chunks/TerminalAuthService-BfxG493c.js";
|
|
2
2
|
import { DiscoveryArtifactValidationError, SMRT_APP_RESULT_CONTRACT, SMRT_APP_RESULT_SCHEMA, SMRT_APP_RESULT_VERSION, SMRT_DISCOVERY_CONFORMANCE_ARTIFACT_SCHEMA, SMRT_DISCOVERY_CONFORMANCE_SCHEMA, SMRT_DISCOVERY_CONFORMANCE_VERSION, SMRT_MCP_RESULT_METADATA_KEY, canonicalizeDiscoveryArtifact, createDiscoveryConformanceArtifact, deriveCommandRequirements, validateDiscoveryConformanceArtifact } from "./app-contract.js";
|
|
3
3
|
import { ObjectRegistry, createClassNamePredicate, resolveCustomActionMetadata, resolveEffectiveActionMetadata } from "@happyvertical/smrt-core";
|
|
4
4
|
import { createLogger } from "@happyvertical/logger";
|
|
5
5
|
import { classnameToTablename } from "@happyvertical/smrt-core/utils";
|
|
6
6
|
import { methodNameToKebab, resolveApiActionSet } from "@happyvertical/smrt-core/vite-plugin";
|
|
7
|
+
//#region src/sveltekit/device-credential-handlers.ts
|
|
8
|
+
var logger$2 = createLogger({ level: "info" });
|
|
9
|
+
var NO_STORE_HEADERS$2 = {
|
|
10
|
+
"cache-control": "private, no-store",
|
|
11
|
+
pragma: "no-cache"
|
|
12
|
+
};
|
|
13
|
+
function json(body2, status = 200, headers) {
|
|
14
|
+
return new Response(JSON.stringify(body2), {
|
|
15
|
+
status,
|
|
16
|
+
headers: {
|
|
17
|
+
"content-type": "application/json",
|
|
18
|
+
...headers
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function bearer(event) {
|
|
23
|
+
return (event.request.headers.get("authorization")?.match(/^Bearer\s+(.+)$/iu))?.[1]?.trim() || null;
|
|
24
|
+
}
|
|
25
|
+
async function body(event) {
|
|
26
|
+
const parsed = await event.request.json().catch(() => null);
|
|
27
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
|
|
28
|
+
}
|
|
29
|
+
function str(value) {
|
|
30
|
+
return typeof value === "string" ? value : "";
|
|
31
|
+
}
|
|
32
|
+
function errorResponse$1(error) {
|
|
33
|
+
if (error instanceof LoginRateLimitError) return json({
|
|
34
|
+
error: "Too many attempts. Try again later.",
|
|
35
|
+
code: "rate_limited"
|
|
36
|
+
}, 429, {
|
|
37
|
+
...NO_STORE_HEADERS$2,
|
|
38
|
+
"retry-after": String(error.retryAfterSeconds)
|
|
39
|
+
});
|
|
40
|
+
if (error instanceof DeviceCredentialError) return json({
|
|
41
|
+
error: "Invalid credentials.",
|
|
42
|
+
code: "invalid_credentials"
|
|
43
|
+
}, 401, NO_STORE_HEADERS$2);
|
|
44
|
+
if (error instanceof DeviceCredentialForbiddenError) return json({
|
|
45
|
+
error: error.message,
|
|
46
|
+
code: "forbidden"
|
|
47
|
+
}, 403, NO_STORE_HEADERS$2);
|
|
48
|
+
if (error instanceof DeviceCredentialPolicyError) return json({
|
|
49
|
+
error: error.message,
|
|
50
|
+
code: "pin_policy"
|
|
51
|
+
}, 400, NO_STORE_HEADERS$2);
|
|
52
|
+
logger$2.error("Device credential handler error", { error });
|
|
53
|
+
return json({
|
|
54
|
+
error: "Internal error.",
|
|
55
|
+
code: "internal"
|
|
56
|
+
}, 500, NO_STORE_HEADERS$2);
|
|
57
|
+
}
|
|
58
|
+
async function resolveActor(event, service) {
|
|
59
|
+
const token = bearer(event);
|
|
60
|
+
if (token) return service.resolveActor(token);
|
|
61
|
+
const locals = event.locals ?? {};
|
|
62
|
+
const user = locals.user;
|
|
63
|
+
const sessionId = locals.sessionId;
|
|
64
|
+
if (!user || !sessionId) return null;
|
|
65
|
+
if (!("authMethod" in locals)) return null;
|
|
66
|
+
return {
|
|
67
|
+
user,
|
|
68
|
+
membership: locals.membership ?? null,
|
|
69
|
+
permissions: Array.isArray(locals.permissions) ? locals.permissions : [],
|
|
70
|
+
tenantId: locals.tenantId ?? null,
|
|
71
|
+
sessionId,
|
|
72
|
+
authMethod: locals.authMethod ?? null,
|
|
73
|
+
parent: locals.sessionParent ?? null
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function createDeviceCredentialHandlers(options) {
|
|
77
|
+
let servicePromise = null;
|
|
78
|
+
const service = () => {
|
|
79
|
+
servicePromise ??= DeviceCredentialService.create(options);
|
|
80
|
+
return servicePromise;
|
|
81
|
+
};
|
|
82
|
+
const meta = (event) => ({
|
|
83
|
+
ipAddress: event.getClientAddress?.(),
|
|
84
|
+
userAgent: event.request.headers.get("user-agent") ?? void 0
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
service,
|
|
88
|
+
pinSignIn: async (event) => {
|
|
89
|
+
const deviceToken = bearer(event);
|
|
90
|
+
const input = await body(event);
|
|
91
|
+
const userId = str(input.userId).trim();
|
|
92
|
+
const pin = str(input.pin);
|
|
93
|
+
if (!deviceToken || !userId || !pin) return json({
|
|
94
|
+
error: "Invalid credentials.",
|
|
95
|
+
code: "invalid_credentials"
|
|
96
|
+
}, 401, NO_STORE_HEADERS$2);
|
|
97
|
+
try {
|
|
98
|
+
return json(await (await service()).signInWithPin({
|
|
99
|
+
deviceToken,
|
|
100
|
+
userId,
|
|
101
|
+
pin,
|
|
102
|
+
...meta(event)
|
|
103
|
+
}), 201, NO_STORE_HEADERS$2);
|
|
104
|
+
} catch (error) {
|
|
105
|
+
return errorResponse$1(error);
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
signOut: async (event) => {
|
|
109
|
+
const token = bearer(event);
|
|
110
|
+
if (token) try {
|
|
111
|
+
await (await service()).signOut(token);
|
|
112
|
+
} catch (error) {
|
|
113
|
+
logger$2.error("Device credential sign-out error", { error });
|
|
114
|
+
}
|
|
115
|
+
return json({ authenticated: false }, 200, NO_STORE_HEADERS$2);
|
|
116
|
+
},
|
|
117
|
+
setPin: async (event) => {
|
|
118
|
+
const actor = await resolveActor(event, await service());
|
|
119
|
+
if (!actor) return json({
|
|
120
|
+
error: "Unauthenticated.",
|
|
121
|
+
code: "unauthenticated"
|
|
122
|
+
}, 401, NO_STORE_HEADERS$2);
|
|
123
|
+
const input = await body(event);
|
|
124
|
+
try {
|
|
125
|
+
await (await service()).setPin({
|
|
126
|
+
actor,
|
|
127
|
+
userId: str(input.userId).trim() || (actor.user.id ?? ""),
|
|
128
|
+
pin: str(input.pin),
|
|
129
|
+
currentPin: str(input.currentPin) || void 0,
|
|
130
|
+
ipAddress: event.getClientAddress?.()
|
|
131
|
+
});
|
|
132
|
+
return new Response(null, {
|
|
133
|
+
status: 204,
|
|
134
|
+
headers: NO_STORE_HEADERS$2
|
|
135
|
+
});
|
|
136
|
+
} catch (error) {
|
|
137
|
+
return errorResponse$1(error);
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
resetPin: async (event) => {
|
|
141
|
+
const actor = await resolveActor(event, await service());
|
|
142
|
+
if (!actor) return json({
|
|
143
|
+
error: "Unauthenticated.",
|
|
144
|
+
code: "unauthenticated"
|
|
145
|
+
}, 401, NO_STORE_HEADERS$2);
|
|
146
|
+
const input = await body(event);
|
|
147
|
+
try {
|
|
148
|
+
return json(await (await service()).resetPin({
|
|
149
|
+
actor,
|
|
150
|
+
userId: str(input.userId).trim(),
|
|
151
|
+
pin: str(input.pin),
|
|
152
|
+
ipAddress: event.getClientAddress?.()
|
|
153
|
+
}), 200, NO_STORE_HEADERS$2);
|
|
154
|
+
} catch (error) {
|
|
155
|
+
return errorResponse$1(error);
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
clearPin: async (event) => {
|
|
159
|
+
const actor = await resolveActor(event, await service());
|
|
160
|
+
if (!actor) return json({
|
|
161
|
+
error: "Unauthenticated.",
|
|
162
|
+
code: "unauthenticated"
|
|
163
|
+
}, 401, NO_STORE_HEADERS$2);
|
|
164
|
+
const input = await body(event);
|
|
165
|
+
try {
|
|
166
|
+
return json(await (await service()).clearPin({
|
|
167
|
+
actor,
|
|
168
|
+
userId: str(input.userId).trim() || (actor.user.id ?? ""),
|
|
169
|
+
ipAddress: event.getClientAddress?.()
|
|
170
|
+
}), 200, NO_STORE_HEADERS$2);
|
|
171
|
+
} catch (error) {
|
|
172
|
+
return errorResponse$1(error);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//#endregion
|
|
7
178
|
//#region src/sveltekit/mobile-handlers.ts
|
|
8
179
|
var logger$1 = createLogger({ level: "info" });
|
|
9
180
|
var NO_STORE_HEADERS$1 = {
|
|
@@ -566,7 +737,9 @@ var defaultSessionLocals = {
|
|
|
566
737
|
membership: null,
|
|
567
738
|
permissions: [],
|
|
568
739
|
tenantId: null,
|
|
569
|
-
sessionId: null
|
|
740
|
+
sessionId: null,
|
|
741
|
+
authMethod: null,
|
|
742
|
+
sessionParent: null
|
|
570
743
|
};
|
|
571
744
|
//#endregion
|
|
572
745
|
//#region src/sveltekit/index.ts
|
|
@@ -590,6 +763,8 @@ function createSessionHandler(options) {
|
|
|
590
763
|
event.locals.permissions = [];
|
|
591
764
|
event.locals.tenantId = null;
|
|
592
765
|
event.locals.sessionId = null;
|
|
766
|
+
event.locals.authMethod = null;
|
|
767
|
+
event.locals.sessionParent = null;
|
|
593
768
|
if (skipPaths.some((path) => event.url.pathname.startsWith(path))) return resolve(event);
|
|
594
769
|
const sessionId = event.cookies.get(cookieName);
|
|
595
770
|
if (!sessionId && !options.postgresRls) return resolve(event);
|
|
@@ -608,6 +783,8 @@ function createSessionHandler(options) {
|
|
|
608
783
|
event.locals.permissions = context.permissions;
|
|
609
784
|
event.locals.tenantId = context.tenantId;
|
|
610
785
|
event.locals.sessionId = context.sessionId;
|
|
786
|
+
event.locals.authMethod = context.session.authMethod ?? null;
|
|
787
|
+
event.locals.sessionParent = context.session.parent ?? null;
|
|
611
788
|
}
|
|
612
789
|
return resolve(event);
|
|
613
790
|
});
|
|
@@ -641,7 +818,9 @@ async function createSessionCookie(event, userId, tenantId, options) {
|
|
|
641
818
|
ttl,
|
|
642
819
|
userAgent: options.userAgent,
|
|
643
820
|
ipAddress: options.ipAddress,
|
|
644
|
-
data: options.data
|
|
821
|
+
data: options.data,
|
|
822
|
+
authMethod: options.authMethod,
|
|
823
|
+
parentSessionId: options.parentSessionId
|
|
645
824
|
});
|
|
646
825
|
event.cookies.set(cookieName, sessionId, {
|
|
647
826
|
path: cookiePath,
|
|
@@ -836,6 +1015,7 @@ async function completeOidcLogin(event, options) {
|
|
|
836
1015
|
cookiePath: options.sessionCookiePath,
|
|
837
1016
|
cookieSameSite: options.sessionCookieSameSite,
|
|
838
1017
|
cookieSecure: useSecureCookie(event, options.sessionCookieSecure),
|
|
1018
|
+
authMethod: "oidc",
|
|
839
1019
|
data: {
|
|
840
1020
|
oidcIssuer: result.claims.iss,
|
|
841
1021
|
oidcProvider: service.providerName
|
|
@@ -1015,6 +1195,6 @@ var NO_STORE_HEADERS = {
|
|
|
1015
1195
|
pragma: "no-cache"
|
|
1016
1196
|
};
|
|
1017
1197
|
//#endregion
|
|
1018
|
-
export { DiscoveryArtifactValidationError, InvalidBearerError, MobileAuthError, MobileAuthService, SMRT_APP_RESULT_CONTRACT, SMRT_APP_RESULT_SCHEMA, SMRT_APP_RESULT_VERSION, SMRT_DISCOVERY_CONFORMANCE_ARTIFACT_SCHEMA, SMRT_DISCOVERY_CONFORMANCE_SCHEMA, SMRT_DISCOVERY_CONFORMANCE_VERSION, SMRT_MCP_RESULT_METADATA_KEY, TerminalAuthError, TerminalAuthRateLimitError, TerminalAuthService, beginOidcLogin, canonicalizeDiscoveryArtifact, completeOidcLogin, createBearerSessionDeleteHandler, createDiscoveryConformanceArtifact, createMobileAuthHandlers, createOidcCallbackHandler, createOidcLoginHandler, createResourceListHandler, createSessionCookie, createSessionHandler, createTerminalAuthStartHandler, createTerminalAuthTokenHandler, defaultSessionLocals, deriveCommandRequirements, destroySessionCookie, loadBearerSessionContext, mountTerminalLoginPage, parseBearerToken, readMobileBearerToken, resolveMobileUploadDedupKey, switchSessionTenant, validateDiscoveryConformanceArtifact, validateMobileRedirectUri };
|
|
1198
|
+
export { DiscoveryArtifactValidationError, InvalidBearerError, MobileAuthError, MobileAuthService, SMRT_APP_RESULT_CONTRACT, SMRT_APP_RESULT_SCHEMA, SMRT_APP_RESULT_VERSION, SMRT_DISCOVERY_CONFORMANCE_ARTIFACT_SCHEMA, SMRT_DISCOVERY_CONFORMANCE_SCHEMA, SMRT_DISCOVERY_CONFORMANCE_VERSION, SMRT_MCP_RESULT_METADATA_KEY, TerminalAuthError, TerminalAuthRateLimitError, TerminalAuthService, beginOidcLogin, canonicalizeDiscoveryArtifact, completeOidcLogin, createBearerSessionDeleteHandler, createDeviceCredentialHandlers, createDiscoveryConformanceArtifact, createMobileAuthHandlers, createOidcCallbackHandler, createOidcLoginHandler, createResourceListHandler, createSessionCookie, createSessionHandler, createTerminalAuthStartHandler, createTerminalAuthTokenHandler, defaultSessionLocals, deriveCommandRequirements, destroySessionCookie, loadBearerSessionContext, mountTerminalLoginPage, parseBearerToken, readMobileBearerToken, resolveMobileUploadDedupKey, switchSessionTenant, validateDiscoveryConformanceArtifact, validateMobileRedirectUri };
|
|
1019
1199
|
|
|
1020
1200
|
//# sourceMappingURL=sveltekit.js.map
|