@enterprisestandard/react 0.0.5-beta.20260114.3 → 0.0.5-beta.20260115.2

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.
@@ -1,5 +1,6 @@
1
+ import type { EnterpriseStandard } from '.';
1
2
  import type { TokenValidationResult } from './types/workload-schema';
2
- import type { ESConfig, WorkloadIdentity } from './workload';
3
+ import type { WorkloadIdentity } from './workload';
3
4
  /**
4
5
  * Get the workload identity from an incoming request.
5
6
  * Returns undefined if no valid workload token is present.
@@ -24,7 +25,7 @@ import type { ESConfig, WorkloadIdentity } from './workload';
24
25
  * }
25
26
  * ```
26
27
  */
27
- export declare function getWorkload(request: Request, config?: ESConfig): Promise<WorkloadIdentity | undefined>;
28
+ export declare function getWorkload(request: Request, es?: EnterpriseStandard): Promise<WorkloadIdentity | undefined>;
28
29
  /**
29
30
  * Get an access token for the configured workload identity.
30
31
  *
@@ -45,7 +46,7 @@ export declare function getWorkload(request: Request, config?: ESConfig): Promis
45
46
  * });
46
47
  * ```
47
48
  */
48
- export declare function getWorkloadToken(scope?: string, config?: ESConfig): Promise<string>;
49
+ export declare function getWorkloadToken(scope?: string, es?: EnterpriseStandard): Promise<string>;
49
50
  /**
50
51
  * Validate a workload token from an incoming request.
51
52
  *
@@ -72,7 +73,7 @@ export declare function getWorkloadToken(scope?: string, config?: ESConfig): Pro
72
73
  * }
73
74
  * ```
74
75
  */
75
- export declare function validateWorkloadToken(request: Request, config?: ESConfig): Promise<TokenValidationResult>;
76
+ export declare function validateWorkloadToken(request: Request, es?: EnterpriseStandard): Promise<TokenValidationResult>;
76
77
  /**
77
78
  * Revoke a workload access token.
78
79
  *
@@ -87,7 +88,7 @@ export declare function validateWorkloadToken(request: Request, config?: ESConfi
87
88
  * await revokeWorkloadToken(accessToken);
88
89
  * ```
89
90
  */
90
- export declare function revokeWorkloadToken(token: string, config?: ESConfig): Promise<void>;
91
+ export declare function revokeWorkloadToken(token: string, es?: EnterpriseStandard): Promise<void>;
91
92
  /**
92
93
  * Framework-agnostic handler for workload authentication routes.
93
94
  *
@@ -122,5 +123,5 @@ export declare function revokeWorkloadToken(token: string, config?: ESConfig): P
122
123
  * });
123
124
  * ```
124
125
  */
125
- export declare function workloadHandler(request: Request, config?: ESConfig): Promise<Response>;
126
+ export declare function workloadHandler(request: Request, es?: EnterpriseStandard): Promise<Response>;
126
127
  //# sourceMappingURL=workload-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workload-server.d.ts","sourceRoot":"","sources":["../src/workload-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAmB7D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAM5G;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAIzF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAa/G;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAI5F"}
1
+ {"version":3,"file":"workload-server.d.ts","sourceRoot":"","sources":["../src/workload-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,GAAG,CAAC;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAcnD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAMlH;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAI/F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAarH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAIlG"}
@@ -0,0 +1,167 @@
1
+ import { getES } from './utils';
2
+ /**
3
+ * Returns a 503 response indicating that the SSO is unavailable
4
+ */
5
+ function unavailable(error) {
6
+ error = error ?? 'Workload authentication unavailable';
7
+ new Response(JSON.stringify({ error }), {
8
+ status: 503,
9
+ statusText: error,
10
+ headers: { 'Content-Type': 'application/json' },
11
+ });
12
+ }
13
+ /**
14
+ * Get the workload identity from an incoming request.
15
+ * Returns undefined if no valid workload token is present.
16
+ *
17
+ * @param request - Request with Authorization header
18
+ * @param config - Optional EnterpriseStandard configuration
19
+ * @returns WorkloadIdentity or undefined
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * import { getWorkload } from '@enterprisestandard/react';
24
+ *
25
+ * export async function handler(request: Request) {
26
+ * const workload = await getWorkload(request);
27
+ *
28
+ * if (!workload) {
29
+ * return new Response('Unauthorized', { status: 401 });
30
+ * }
31
+ *
32
+ * console.log('Request from workload:', workload.workload_id);
33
+ * // ... process authenticated request
34
+ * }
35
+ * ```
36
+ */
37
+ export async function getWorkload(request, es) {
38
+ const workloadAuth = getES(es)?.workload;
39
+ if (!workloadAuth) {
40
+ return undefined;
41
+ }
42
+ return workloadAuth.getWorkload(request);
43
+ }
44
+ /**
45
+ * Get an access token for the configured workload identity.
46
+ *
47
+ * @param scope - Optional OAuth2 scopes (space-delimited)
48
+ * @param config - Optional EnterpriseStandard configuration
49
+ * @returns Access token string
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * import { getWorkloadToken } from '@enterprisestandard/react/server';
54
+ *
55
+ * // Get token for API calls
56
+ * const token = await getWorkloadToken('api:read api:write');
57
+ *
58
+ * // Use in outbound requests
59
+ * const response = await fetch('https://api.example.com/data', {
60
+ * headers: { 'Authorization': `Bearer ${token}` },
61
+ * });
62
+ * ```
63
+ */
64
+ export async function getWorkloadToken(scope, es) {
65
+ const workloadAuth = getES(es)?.workload;
66
+ if (!workloadAuth)
67
+ throw unavailable();
68
+ return workloadAuth.getToken(scope);
69
+ }
70
+ /**
71
+ * Validate a workload token from an incoming request.
72
+ *
73
+ * @param request - Request with Authorization header
74
+ * @param config - Optional EnterpriseStandard configuration
75
+ * @returns Token validation result
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * import { validateWorkloadToken } from '@enterprisestandard/react/server';
80
+ *
81
+ * export async function handler(request: Request) {
82
+ * const result = await validateWorkloadToken(request);
83
+ *
84
+ * if (!result.valid) {
85
+ * return new Response(
86
+ * JSON.stringify({ error: result.error }),
87
+ * { status: 401 }
88
+ * );
89
+ * }
90
+ *
91
+ * const workloadId = result.claims?.iss;
92
+ * // ... process authenticated request
93
+ * }
94
+ * ```
95
+ */
96
+ export async function validateWorkloadToken(request, es) {
97
+ const workloadAuth = getES(es)?.workload;
98
+ if (!workloadAuth) {
99
+ return { valid: false, error: 'Workload authentication unavailable' };
100
+ }
101
+ const authHeader = request.headers.get('Authorization');
102
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
103
+ return { valid: false, error: 'Missing or invalid Authorization header' };
104
+ }
105
+ const token = authHeader.substring(7);
106
+ return workloadAuth.validateToken(token);
107
+ }
108
+ /**
109
+ * Revoke a workload access token.
110
+ *
111
+ * @param token - The access token to revoke
112
+ * @param config - Optional EnterpriseStandard configuration
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * import { revokeWorkloadToken } from '@enterprisestandard/react/server';
117
+ *
118
+ * // Revoke token when workload is decommissioned
119
+ * await revokeWorkloadToken(accessToken);
120
+ * ```
121
+ */
122
+ export async function revokeWorkloadToken(token, es) {
123
+ const workloadAuth = getES(es)?.workload;
124
+ if (!workloadAuth)
125
+ throw unavailable();
126
+ return workloadAuth.revokeToken(token);
127
+ }
128
+ /**
129
+ * Framework-agnostic handler for workload authentication routes.
130
+ *
131
+ * The handler reads configuration (handler URLs, validation) directly from the
132
+ * EnterpriseStandard instance, so no config parameter is needed.
133
+ *
134
+ * @param request - Incoming request
135
+ * @param config - Optional ESConfig to specify which EnterpriseStandard instance to use
136
+ * @returns Response
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * import { workloadHandler } from '@enterprisestandard/react/server';
141
+ *
142
+ * // TanStack Start example
143
+ * export const Route = createFileRoute('/api/workload/$')({
144
+ * server: {
145
+ * handlers: ({ createHandlers }) =>
146
+ * createHandlers({
147
+ * GET: {
148
+ * handler: async ({ request }) => {
149
+ * return workloadHandler(request);
150
+ * },
151
+ * },
152
+ * POST: {
153
+ * handler: async ({ request }) => {
154
+ * return workloadHandler(request);
155
+ * },
156
+ * },
157
+ * }),
158
+ * },
159
+ * });
160
+ * ```
161
+ */
162
+ export async function workloadHandler(request, es) {
163
+ const workloadAuth = getES(es)?.workload;
164
+ if (!workloadAuth)
165
+ throw unavailable();
166
+ return workloadAuth.handler(request);
167
+ }
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Token caching for workload identity authentication.
3
+ *
4
+ * Token stores are optional but recommended for performance - they enable:
5
+ * - Token caching to avoid repeated token acquisition
6
+ * - Automatic token refresh before expiration
7
+ * - Reduced load on authorization servers
8
+ *
9
+ * ## Token Caching Strategy
10
+ *
11
+ * Unlike session stores for user authentication, workload token stores cache
12
+ * short-lived access tokens (typically 5 minutes) for service-to-service calls.
13
+ *
14
+ * **Default Behavior:**
15
+ * - Tokens cached with 5-minute TTL
16
+ * - Auto-refresh 60 seconds before expiration
17
+ * - Expired tokens automatically removed
18
+ *
19
+ * ## Performance Characteristics
20
+ *
21
+ * | Backend | Lookup Time | Use Case |
22
+ * |--------------|-------------|----------------------------|
23
+ * | InMemory | <0.00005ms | Single-server deployments |
24
+ * | Redis | 1-2ms | Multi-server deployments |
25
+ * | Database | 5-20ms | Persistent token storage |
26
+ *
27
+ * ## Example Usage
28
+ *
29
+ * ```typescript
30
+ * import { workload, InMemoryWorkloadTokenStore } from '@enterprisestandard/react/server';
31
+ *
32
+ * // With token caching
33
+ * const workloadAuth = workload({
34
+ * // ... other config
35
+ * token_store: new InMemoryWorkloadTokenStore(),
36
+ * auto_refresh: true, // Refresh before expiry
37
+ * });
38
+ *
39
+ * // Without token caching (fetch new token each time)
40
+ * const workloadAuth = workload({
41
+ * // ... config without token_store
42
+ * });
43
+ * ```
44
+ */
45
+ /**
46
+ * In-memory workload token store implementation using Maps.
47
+ *
48
+ * Suitable for:
49
+ * - Development and testing
50
+ * - Single-server deployments
51
+ * - Applications without high availability requirements
52
+ *
53
+ * NOT suitable for:
54
+ * - Multi-server deployments (tokens not shared across instances)
55
+ * - High availability scenarios (tokens lost on restart)
56
+ * - Production applications with distributed architecture
57
+ *
58
+ * For production multi-server deployments, implement WorkloadTokenStore with Redis.
59
+ *
60
+ * @template TExtended - Type-safe custom data that consumers can add to cached tokens
61
+ */
62
+ export class InMemoryWorkloadTokenStore {
63
+ constructor() {
64
+ this.tokens = new Map();
65
+ }
66
+ async set(token) {
67
+ this.tokens.set(token.workload_id, token);
68
+ }
69
+ async get(workload_id) {
70
+ const token = this.tokens.get(workload_id);
71
+ if (!token)
72
+ return null;
73
+ // Check if token is expired
74
+ if (Date.now() > token.expires_at.getTime()) {
75
+ this.tokens.delete(workload_id);
76
+ return null;
77
+ }
78
+ return token;
79
+ }
80
+ async delete(workload_id) {
81
+ this.tokens.delete(workload_id);
82
+ }
83
+ async isValid(workload_id) {
84
+ const token = await this.get(workload_id);
85
+ return token !== null;
86
+ }
87
+ async cleanup() {
88
+ const now = Date.now();
89
+ for (const [workload_id, token] of this.tokens.entries()) {
90
+ if (now > token.expires_at.getTime()) {
91
+ this.tokens.delete(workload_id);
92
+ }
93
+ }
94
+ }
95
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"workload.d.ts","sourceRoot":"","sources":["../src/workload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workload.d.ts","sourceRoot":"","sources":["../src/workload.ts"],"names":[],"mappings":"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"}