@empire-builder-kit/runtime 0.0.1-alpha.2 → 0.0.1-alpha.5

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.
@@ -0,0 +1,18 @@
1
+ import { BetterAuthConfig, AuthenticatedSession } from './auth';
2
+ import { type JWTVerifyGetKey } from 'jose';
3
+ /**
4
+ * Verifies a Cognito JWT token and returns a typed session.
5
+ * Uses the Cognito JWKS endpoint for validation.
6
+ */
7
+ export interface CognitoJwtVerifier {
8
+ verify(token: string): Promise<AuthenticatedSession>;
9
+ }
10
+ export interface CognitoJwtVerifierOptions {
11
+ jwks?: JWTVerifyGetKey;
12
+ }
13
+ export declare function createCognitoJwtVerifier(config: BetterAuthConfig, options?: CognitoJwtVerifierOptions): CognitoJwtVerifier;
14
+ /**
15
+ * Extracts a Bearer token from an Authorization header.
16
+ */
17
+ export declare function extractBearerToken(authHeader: string | undefined): string | null;
18
+ //# sourceMappingURL=auth-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-backend.d.ts","sourceRoot":"","sources":["../src/auth-backend.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEhB,oBAAoB,EACrB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,MAAM,CAAC;AAEd;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AA+BD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,yBAA8B,GACtC,kBAAkB,CAmCpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,MAAM,GAAG,IAAI,CAKf"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCognitoJwtVerifier = createCognitoJwtVerifier;
4
+ exports.extractBearerToken = extractBearerToken;
5
+ const auth_1 = require("./auth");
6
+ const jose_1 = require("jose");
7
+ function hasExpectedAudience(payload, clientId) {
8
+ return (payload.aud === clientId ||
9
+ (Array.isArray(payload.aud) && payload.aud.includes(clientId)) ||
10
+ payload.client_id === clientId);
11
+ }
12
+ function normalizeGroups(groups) {
13
+ if (!Array.isArray(groups)) {
14
+ return undefined;
15
+ }
16
+ const normalized = groups.filter((group) => typeof group === 'string');
17
+ return normalized.length > 0 ? normalized : undefined;
18
+ }
19
+ function createCognitoJwtVerifier(config, options = {}) {
20
+ const jwks = options.jwks ??
21
+ (0, jose_1.createRemoteJWKSet)(new URL(`${config.issuerUrl}/.well-known/jwks.json`));
22
+ return {
23
+ async verify(token) {
24
+ const parts = token.split('.');
25
+ if (parts.length !== 3) {
26
+ throw new Error('Invalid JWT format');
27
+ }
28
+ const { payload } = await (0, jose_1.jwtVerify)(token, jwks, {
29
+ algorithms: ['RS256'],
30
+ issuer: config.issuerUrl,
31
+ });
32
+ if (!hasExpectedAudience(payload, config.clientId)) {
33
+ throw new Error('Invalid audience');
34
+ }
35
+ if (!payload.sub) {
36
+ throw new Error('Invalid subject');
37
+ }
38
+ return (0, auth_1.sessionFromCognitoToken)({
39
+ sub: payload.sub,
40
+ email: payload.email,
41
+ 'cognito:username': payload['cognito:username'],
42
+ 'cognito:groups': normalizeGroups(payload['cognito:groups']),
43
+ exp: payload.exp,
44
+ iat: payload.iat,
45
+ });
46
+ },
47
+ };
48
+ }
49
+ /**
50
+ * Extracts a Bearer token from an Authorization header.
51
+ */
52
+ function extractBearerToken(authHeader) {
53
+ if (!authHeader?.startsWith('Bearer ')) {
54
+ return null;
55
+ }
56
+ return authHeader.slice(7).trim() || null;
57
+ }
@@ -0,0 +1,18 @@
1
+ import { BetterAuthConfig } from './auth';
2
+ /**
3
+ * Creates Next.js middleware configuration for auth.
4
+ * Validates JWT from cookies or Authorization header.
5
+ */
6
+ export declare function createAuthMiddlewareConfig(config: BetterAuthConfig): {
7
+ verifier: import("./auth-backend").CognitoJwtVerifier;
8
+ /**
9
+ * Extract and verify session from a Next.js request.
10
+ * Checks Authorization header first, then auth cookie.
11
+ */
12
+ getSession(request: {
13
+ headers: {
14
+ get(name: string): string | null;
15
+ };
16
+ }): Promise<import("./auth").AuthenticatedSession | null>;
17
+ };
18
+ //# sourceMappingURL=auth-web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-web.d.ts","sourceRoot":"","sources":["../src/auth-web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAG1C;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,gBAAgB;;IAK/D;;;OAGG;wBACuB;QACxB,OAAO,EAAE;YAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC;KAC/C;EAiBJ"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAuthMiddlewareConfig = createAuthMiddlewareConfig;
4
+ const auth_backend_1 = require("./auth-backend");
5
+ /**
6
+ * Creates Next.js middleware configuration for auth.
7
+ * Validates JWT from cookies or Authorization header.
8
+ */
9
+ function createAuthMiddlewareConfig(config) {
10
+ const verifier = (0, auth_backend_1.createCognitoJwtVerifier)(config);
11
+ return {
12
+ verifier,
13
+ /**
14
+ * Extract and verify session from a Next.js request.
15
+ * Checks Authorization header first, then auth cookie.
16
+ */
17
+ async getSession(request) {
18
+ const authHeader = request.headers.get('authorization');
19
+ const token = (0, auth_backend_1.extractBearerToken)(authHeader ?? undefined) ??
20
+ request.headers.get('x-auth-token');
21
+ if (!token) {
22
+ return null;
23
+ }
24
+ try {
25
+ return await verifier.verify(token);
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ },
31
+ };
32
+ }
@@ -53,6 +53,22 @@ export interface QueueAlarmRegistration extends QueueAlarmInput {
53
53
  thresholds: QueueAlertThresholds;
54
54
  }
55
55
  export type MonitoringOwner = 'platform' | 'product';
56
+ export type AppGroupAlarmKind = 'app-runtime-errors' | 'web-5xx-errors' | 'function-errors' | 'runtime-smoke-failures';
57
+ export interface AppGroupObservabilityInput {
58
+ app: string;
59
+ functions?: readonly string[];
60
+ owner?: MonitoringOwner;
61
+ stage: string;
62
+ summary?: string;
63
+ webApps?: readonly string[];
64
+ }
65
+ export interface AppGroupObservabilityRegistration extends AppGroupObservabilityInput {
66
+ alarms: AlarmDefinition[];
67
+ dashboards: MonitoringDashboardRegistration[];
68
+ owner: MonitoringOwner;
69
+ queues: QueueAlarmRegistration[];
70
+ summary: string;
71
+ }
56
72
  export interface AppGroupMonitoringRegistration {
57
73
  app: string;
58
74
  dashboards: MonitoringDashboardRegistration[];
@@ -67,5 +83,7 @@ export declare function createQueueAlarmDefinitions(input: QueueAlarmInput): Ala
67
83
  export declare function createDashboardPath(input: DashboardPathInput): string;
68
84
  export declare function createDashboardRegistration(input: DashboardRegistrationInput): MonitoringDashboardRegistration;
69
85
  export declare function createQueueAlarmRegistration(input: QueueAlarmRegistrationInput): QueueAlarmRegistration;
86
+ export declare function createDefaultAppGroupAlarmDefinitions(input: AppGroupObservabilityInput): AlarmDefinition[];
87
+ export declare function createAppGroupObservabilityRegistration(input: AppGroupObservabilityInput): AppGroupObservabilityRegistration;
70
88
  export declare function defineAppGroupMonitoringRegistration<T extends AppGroupMonitoringRegistration>(registration: T): T;
71
89
  //# sourceMappingURL=observability.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEnE,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,+BAA+B,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,+BACf,SAAQ,kBAAkB,EACxB,IAAI,CAAC,0BAA0B,EAAE,aAAa,GAAG,OAAO,CAAC;IAC3D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,2BAA4B,SAAQ,eAAe;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,8BAA8B;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,+BAA+B,EAAE,CAAC;IAC9C,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAUD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAQ7D;AAED,wBAAgB,2BAA2B,CACzC,SAAS,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAC5C,oBAAoB,CAOtB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,eAAe,GACrB,eAAe,EAAE,CAmEnB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAIrE;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,0BAA0B,GAChC,+BAA+B,CAKjC;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,2BAA2B,GACjC,sBAAsB,CAkBxB;AAED,wBAAgB,oCAAoC,CAClD,CAAC,SAAS,8BAA8B,EACxC,YAAY,EAAE,CAAC,GAAG,CAAC,CAEpB"}
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ exports.createQueueAlarmDefinitions = createQueueAlarmDefinitions;
7
7
  exports.createDashboardPath = createDashboardPath;
8
8
  exports.createDashboardRegistration = createDashboardRegistration;
9
9
  exports.createQueueAlarmRegistration = createQueueAlarmRegistration;
10
+ exports.createDefaultAppGroupAlarmDefinitions = createDefaultAppGroupAlarmDefinitions;
11
+ exports.createAppGroupObservabilityRegistration = createAppGroupObservabilityRegistration;
10
12
  exports.defineAppGroupMonitoringRegistration = defineAppGroupMonitoringRegistration;
11
13
  function normalizeSegment(value) {
12
14
  return value
@@ -129,6 +131,120 @@ function createQueueAlarmRegistration(input) {
129
131
  thresholds,
130
132
  };
131
133
  }
134
+ function createAppGroupMetricDimensions(input, extra = {}) {
135
+ return {
136
+ App: input.app,
137
+ Stage: input.stage,
138
+ ...extra,
139
+ };
140
+ }
141
+ function createDefaultAppGroupAlarmDefinitions(input) {
142
+ const namespace = createMetricNamespace(input.app);
143
+ const alarms = [
144
+ {
145
+ comparisonOperator: 'GreaterThanOrEqualToThreshold',
146
+ description: `Runtime errors for ${input.app} exceed the app-group baseline threshold.`,
147
+ dimensions: createAppGroupMetricDimensions(input),
148
+ evaluationPeriods: 1,
149
+ metricName: 'RuntimeErrors',
150
+ name: createAlarmName({
151
+ app: input.app,
152
+ component: 'app',
153
+ metric: 'runtime-errors',
154
+ severity: 'high',
155
+ stage: input.stage,
156
+ }),
157
+ namespace,
158
+ periodSeconds: 60,
159
+ severity: 'high',
160
+ threshold: 1,
161
+ },
162
+ ];
163
+ for (const webApp of input.webApps ?? []) {
164
+ alarms.push({
165
+ comparisonOperator: 'GreaterThanOrEqualToThreshold',
166
+ description: `5xx responses for ${input.app}/${webApp} exceed the web baseline threshold.`,
167
+ dimensions: createAppGroupMetricDimensions(input, {
168
+ WebApp: webApp,
169
+ }),
170
+ evaluationPeriods: 1,
171
+ metricName: 'Web5xxErrors',
172
+ name: createAlarmName({
173
+ app: input.app,
174
+ component: `web-${webApp}`,
175
+ metric: '5xx-errors',
176
+ severity: 'high',
177
+ stage: input.stage,
178
+ }),
179
+ namespace,
180
+ periodSeconds: 60,
181
+ severity: 'high',
182
+ threshold: 1,
183
+ });
184
+ }
185
+ for (const functionName of input.functions ?? []) {
186
+ alarms.push({
187
+ comparisonOperator: 'GreaterThanOrEqualToThreshold',
188
+ description: `Lambda errors for ${input.app}/${functionName} exceed the function baseline threshold.`,
189
+ dimensions: createAppGroupMetricDimensions(input, {
190
+ Function: functionName,
191
+ }),
192
+ evaluationPeriods: 1,
193
+ metricName: 'FunctionErrors',
194
+ name: createAlarmName({
195
+ app: input.app,
196
+ component: `function-${functionName}`,
197
+ metric: 'errors',
198
+ severity: 'high',
199
+ stage: input.stage,
200
+ }),
201
+ namespace,
202
+ periodSeconds: 60,
203
+ severity: 'high',
204
+ threshold: 1,
205
+ });
206
+ }
207
+ alarms.push({
208
+ comparisonOperator: 'GreaterThanOrEqualToThreshold',
209
+ description: `Runtime smoke failures for ${input.app} exceed the release-readiness threshold.`,
210
+ dimensions: createAppGroupMetricDimensions(input),
211
+ evaluationPeriods: 1,
212
+ metricName: 'RuntimeSmokeFailures',
213
+ name: createAlarmName({
214
+ app: input.app,
215
+ component: 'runtime-smoke',
216
+ metric: 'failures',
217
+ severity: 'critical',
218
+ stage: input.stage,
219
+ }),
220
+ namespace,
221
+ periodSeconds: 300,
222
+ severity: 'critical',
223
+ threshold: 1,
224
+ });
225
+ return alarms;
226
+ }
227
+ function createAppGroupObservabilityRegistration(input) {
228
+ const owner = input.owner ?? 'product';
229
+ const summary = input.summary ??
230
+ `${input.app} app-group CloudWatch baseline for runtime health, web health, function errors, and smoke validation.`;
231
+ return {
232
+ ...input,
233
+ alarms: createDefaultAppGroupAlarmDefinitions(input),
234
+ dashboards: [
235
+ createDashboardRegistration({
236
+ app: input.app,
237
+ dashboard: 'operations',
238
+ description: summary,
239
+ stage: input.stage,
240
+ title: `${input.app} Operations`,
241
+ }),
242
+ ],
243
+ owner,
244
+ queues: [],
245
+ summary,
246
+ };
247
+ }
132
248
  function defineAppGroupMonitoringRegistration(registration) {
133
249
  return registration;
134
250
  }
package/package.json CHANGED
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "@empire-builder-kit/runtime",
3
- "version": "0.0.1-alpha.2",
3
+ "version": "0.0.1-alpha.5",
4
+ "license": "MIT",
4
5
  "publishConfig": {
5
- "access": "public"
6
+ "access": "public",
7
+ "provenance": false
6
8
  },
7
9
  "main": "./dist/index.js",
8
10
  "module": "./dist/index.js",
@@ -21,6 +23,18 @@
21
23
  "import": "./dist/auth.js",
22
24
  "default": "./dist/auth.js"
23
25
  },
26
+ "./auth-backend": {
27
+ "@org/source": "./src/auth-backend.ts",
28
+ "types": "./dist/auth-backend.d.ts",
29
+ "import": "./dist/auth-backend.js",
30
+ "default": "./dist/auth-backend.js"
31
+ },
32
+ "./auth-web": {
33
+ "@org/source": "./src/auth-web.ts",
34
+ "types": "./dist/auth-web.d.ts",
35
+ "import": "./dist/auth-web.js",
36
+ "default": "./dist/auth-web.js"
37
+ },
24
38
  "./config": {
25
39
  "@org/source": "./src/config.ts",
26
40
  "types": "./dist/config.d.ts",
@@ -104,6 +118,7 @@
104
118
  }
105
119
  },
106
120
  "dependencies": {
121
+ "jose": "^6.2.2",
107
122
  "tslib": "^2.3.0"
108
123
  },
109
124
  "repository": {