actor-gate 0.1.0 → 0.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "actor-gate",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Schema-agnostic Next.js auth library for direct and MCP authentication flows.",
5
5
  "type": "module",
6
6
  "private": false,
@@ -1 +1,2 @@
1
1
  export { withExpressProtectedRoute, type ExpressProtectedAuth, type ExpressProtectedRouteContext, type ExpressRequestLike, type ExpressResponseLike, type WithExpressProtectedRouteOptions, } from './protected-route';
2
+ export { buildProtectedRouteSession, buildProtectedRouteSessionWithMeta, type ProtectedRouteSession, type ProtectedRouteSessionWithMeta, } from '../shared/protected-route-session';
@@ -1 +1,2 @@
1
1
  export { withExpressProtectedRoute, } from './protected-route';
2
+ export { buildProtectedRouteSession, buildProtectedRouteSessionWithMeta, } from '../shared/protected-route-session';
@@ -1,5 +1,6 @@
1
1
  export declare const SUPPORTED_NEXT_ROUTERS: readonly ["pages", "app"];
2
2
  export type SupportedNextRouter = (typeof SUPPORTED_NEXT_ROUTERS)[number];
3
+ export { buildProtectedRouteSession, buildProtectedRouteSessionWithMeta, type ProtectedRouteSession, type ProtectedRouteSessionWithMeta, } from '../shared/protected-route-session';
3
4
  export * from './pages/index';
4
5
  export * from './app/index';
5
6
  export * from './shared/auth-routes';
package/src/next/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export const SUPPORTED_NEXT_ROUTERS = ['pages', 'app'];
2
+ export { buildProtectedRouteSession, buildProtectedRouteSessionWithMeta, } from '../shared/protected-route-session';
2
3
  export * from './pages/index';
3
4
  export * from './app/index';
4
5
  export * from './shared/auth-routes';
@@ -0,0 +1,34 @@
1
+ import { type AuthServiceErrorCode } from '../core/services/auth-error';
2
+ import type { ValidatedAccessTokenResult } from '../core/services/contracts';
3
+ import type { AuthActor } from '../core/types/auth-contract';
4
+ type SessionMetaValue<TServerSessionData extends {
5
+ meta?: unknown;
6
+ }> = Exclude<TServerSessionData['meta'], undefined | null>;
7
+ export type ProtectedRouteSession<TSessionId, TUserId, TActor extends AuthActor = AuthActor, TServerSessionData extends Record<string, unknown> = Record<string, never>> = {
8
+ sessionId: TSessionId;
9
+ userId: TUserId;
10
+ actor: TActor;
11
+ issuedAt: number;
12
+ expiresAt: number;
13
+ serverSessionData?: TServerSessionData;
14
+ };
15
+ export type ProtectedRouteSessionWithMeta<TSessionId, TUserId, TActor extends AuthActor = AuthActor, TServerSessionData extends Record<string, unknown> & {
16
+ meta?: unknown;
17
+ } = {
18
+ meta?: unknown;
19
+ }> = ProtectedRouteSession<TSessionId, TUserId, TActor, TServerSessionData> & {
20
+ serverSessionData: TServerSessionData & {
21
+ meta: SessionMetaValue<TServerSessionData>;
22
+ };
23
+ meta: SessionMetaValue<TServerSessionData>;
24
+ };
25
+ export declare function buildProtectedRouteSession<TSessionId, TUserId, TActor extends AuthActor = AuthActor, TServerSessionData extends Record<string, unknown> = Record<string, never>, TClientSessionData extends Record<string, unknown> = Record<string, never>, TExtClaims extends Record<string, unknown> = Record<string, never>>(auth: ValidatedAccessTokenResult<TSessionId, TUserId, TActor, TServerSessionData, TClientSessionData, TExtClaims>): ProtectedRouteSession<TSessionId, TUserId, TActor, TServerSessionData>;
26
+ export declare function buildProtectedRouteSessionWithMeta<TSessionId, TUserId, TActor extends AuthActor = AuthActor, TServerSessionData extends Record<string, unknown> & {
27
+ meta?: unknown;
28
+ } = {
29
+ meta?: unknown;
30
+ }, TClientSessionData extends Record<string, unknown> = Record<string, never>, TExtClaims extends Record<string, unknown> = Record<string, never>>(auth: ValidatedAccessTokenResult<TSessionId, TUserId, TActor, TServerSessionData, TClientSessionData, TExtClaims>, options?: {
31
+ errorCode?: AuthServiceErrorCode;
32
+ errorMessage?: string;
33
+ }): ProtectedRouteSessionWithMeta<TSessionId, TUserId, TActor, TServerSessionData>;
34
+ export {};
@@ -0,0 +1,33 @@
1
+ import { AuthServiceError, } from '../core/services/auth-error';
2
+ function buildMissingMetaError(options) {
3
+ return new AuthServiceError({
4
+ code: options?.errorCode ?? 'unauthorized',
5
+ message: options?.errorMessage ?? 'Authenticated session metadata is missing.',
6
+ });
7
+ }
8
+ export function buildProtectedRouteSession(auth) {
9
+ const session = auth.session;
10
+ return {
11
+ sessionId: auth.authContext.sessionId,
12
+ userId: auth.authContext.userId,
13
+ actor: auth.claims.actor,
14
+ issuedAt: session?.issuedAt ?? auth.claims.iat,
15
+ expiresAt: session?.expiresAt ?? auth.claims.exp,
16
+ ...(session?.serverSessionData === undefined
17
+ ? {}
18
+ : { serverSessionData: session.serverSessionData }),
19
+ };
20
+ }
21
+ export function buildProtectedRouteSessionWithMeta(auth, options) {
22
+ const session = buildProtectedRouteSession(auth);
23
+ const serverSessionData = session.serverSessionData;
24
+ const meta = serverSessionData?.meta;
25
+ if (meta === undefined || meta === null) {
26
+ throw buildMissingMetaError(options);
27
+ }
28
+ return {
29
+ ...session,
30
+ serverSessionData: serverSessionData,
31
+ meta: meta,
32
+ };
33
+ }