@empire-builder-kit/runtime 0.0.1-alpha.8 → 1.0.0-beta.4

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.
Files changed (68) hide show
  1. package/LICENSE +201 -21
  2. package/NOTICE +5 -0
  3. package/README.md +14 -23
  4. package/package.json +53 -97
  5. package/src/auth-backend.d.ts +44 -0
  6. package/src/auth-backend.js +158 -0
  7. package/src/auth-backend.js.map +1 -0
  8. package/src/auth-session.d.ts +175 -0
  9. package/src/auth-session.js +181 -0
  10. package/src/auth-session.js.map +1 -0
  11. package/src/auth-web.d.ts +79 -0
  12. package/src/auth-web.js +153 -0
  13. package/src/auth-web.js.map +1 -0
  14. package/src/auth.d.ts +143 -0
  15. package/src/auth.js +233 -0
  16. package/src/auth.js.map +1 -0
  17. package/{dist → src}/config.d.ts +0 -1
  18. package/{dist → src}/config.js +9 -21
  19. package/src/config.js.map +1 -0
  20. package/src/events.d.ts +74 -0
  21. package/src/events.js +149 -0
  22. package/src/events.js.map +1 -0
  23. package/{dist → src}/frontend.d.ts +1 -2
  24. package/src/frontend.js +62 -0
  25. package/src/frontend.js.map +1 -0
  26. package/src/hosts.d.ts +9 -0
  27. package/src/hosts.js +38 -0
  28. package/src/hosts.js.map +1 -0
  29. package/src/index.d.ts +15 -0
  30. package/src/index.js +30 -0
  31. package/src/index.js.map +1 -0
  32. package/src/lambda.d.ts +45 -0
  33. package/src/lambda.js +117 -0
  34. package/src/lambda.js.map +1 -0
  35. package/{dist → src}/logging.d.ts +0 -1
  36. package/src/logging.js +113 -0
  37. package/src/logging.js.map +1 -0
  38. package/{dist → src}/observability.d.ts +18 -1
  39. package/{dist → src}/observability.js +72 -62
  40. package/src/observability.js.map +1 -0
  41. package/{dist → src}/request-context.d.ts +12 -2
  42. package/src/request-context.js +68 -0
  43. package/src/request-context.js.map +1 -0
  44. package/{dist → src}/response.d.ts +0 -1
  45. package/src/response.js +66 -0
  46. package/src/response.js.map +1 -0
  47. package/dist/auth-backend.d.ts +0 -18
  48. package/dist/auth-backend.d.ts.map +0 -1
  49. package/dist/auth-backend.js +0 -57
  50. package/dist/auth-web.d.ts +0 -18
  51. package/dist/auth-web.d.ts.map +0 -1
  52. package/dist/auth-web.js +0 -32
  53. package/dist/auth.d.ts +0 -68
  54. package/dist/auth.d.ts.map +0 -1
  55. package/dist/auth.js +0 -107
  56. package/dist/config.d.ts.map +0 -1
  57. package/dist/frontend.d.ts.map +0 -1
  58. package/dist/frontend.js +0 -64
  59. package/dist/index.d.ts +0 -12
  60. package/dist/index.d.ts.map +0 -1
  61. package/dist/index.js +0 -23
  62. package/dist/logging.d.ts.map +0 -1
  63. package/dist/logging.js +0 -129
  64. package/dist/observability.d.ts.map +0 -1
  65. package/dist/request-context.d.ts.map +0 -1
  66. package/dist/request-context.js +0 -58
  67. package/dist/response.d.ts.map +0 -1
  68. package/dist/response.js +0 -66
package/src/logging.js ADDED
@@ -0,0 +1,113 @@
1
+ export const loggingContract = {
2
+ defaultFormat: 'json',
3
+ exportPath: '@empire-builder-kit/runtime/logging',
4
+ packageName: '@empire-builder-kit/runtime',
5
+ };
6
+ function mergeContext(base, overrides) {
7
+ var _a, _b, _c, _d, _e, _f, _g, _h;
8
+ if (!base && !overrides) {
9
+ return undefined;
10
+ }
11
+ return {
12
+ actor: (_a = overrides === null || overrides === void 0 ? void 0 : overrides.actor) !== null && _a !== void 0 ? _a : base === null || base === void 0 ? void 0 : base.actor,
13
+ correlationId: (_b = overrides === null || overrides === void 0 ? void 0 : overrides.correlationId) !== null && _b !== void 0 ? _b : base === null || base === void 0 ? void 0 : base.correlationId,
14
+ metadata: Object.assign(Object.assign({}, ((_c = base === null || base === void 0 ? void 0 : base.metadata) !== null && _c !== void 0 ? _c : {})), ((_d = overrides === null || overrides === void 0 ? void 0 : overrides.metadata) !== null && _d !== void 0 ? _d : {})),
15
+ operation: (_e = overrides === null || overrides === void 0 ? void 0 : overrides.operation) !== null && _e !== void 0 ? _e : base === null || base === void 0 ? void 0 : base.operation,
16
+ requestId: (_f = overrides === null || overrides === void 0 ? void 0 : overrides.requestId) !== null && _f !== void 0 ? _f : base === null || base === void 0 ? void 0 : base.requestId,
17
+ source: (_g = overrides === null || overrides === void 0 ? void 0 : overrides.source) !== null && _g !== void 0 ? _g : base === null || base === void 0 ? void 0 : base.source,
18
+ stage: (_h = overrides === null || overrides === void 0 ? void 0 : overrides.stage) !== null && _h !== void 0 ? _h : base === null || base === void 0 ? void 0 : base.stage,
19
+ };
20
+ }
21
+ function contextMetadata(context) {
22
+ var _a, _b, _c;
23
+ if (!context) {
24
+ return {};
25
+ }
26
+ return compactObject(Object.assign({ actorId: (_a = context.actor) === null || _a === void 0 ? void 0 : _a.id, actorType: (_b = context.actor) === null || _b === void 0 ? void 0 : _b.type, operation: context.operation, source: context.source }, ((_c = context.metadata) !== null && _c !== void 0 ? _c : {})));
27
+ }
28
+ function compactObject(value) {
29
+ return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
30
+ }
31
+ function safeStringify(value) {
32
+ if (typeof value === 'string') {
33
+ return value;
34
+ }
35
+ try {
36
+ return JSON.stringify(value);
37
+ }
38
+ catch (_a) {
39
+ return String(value);
40
+ }
41
+ }
42
+ export function serializeError(error) {
43
+ if (error instanceof Error) {
44
+ const value = error;
45
+ return compactObject({
46
+ code: value.code,
47
+ message: value.message,
48
+ name: value.name,
49
+ stack: value.stack,
50
+ });
51
+ }
52
+ return {
53
+ message: safeStringify(error),
54
+ name: 'UnknownError',
55
+ };
56
+ }
57
+ export function consoleSink(entry) {
58
+ console.log(JSON.stringify(entry));
59
+ }
60
+ export function createLogger(options) {
61
+ var _a, _b;
62
+ const sink = (_a = options.sink) !== null && _a !== void 0 ? _a : consoleSink;
63
+ const now = (_b = options.now) !== null && _b !== void 0 ? _b : (() => new Date());
64
+ const write = (level, message, input = {}) => {
65
+ var _a, _b, _c;
66
+ const mergedContext = mergeContext(options.context, input.context);
67
+ const metadata = compactObject(Object.assign(Object.assign(Object.assign({}, ((_a = options.metadata) !== null && _a !== void 0 ? _a : {})), contextMetadata(mergedContext)), ((_b = input.metadata) !== null && _b !== void 0 ? _b : {})));
68
+ const entry = compactObject({
69
+ app: options.app,
70
+ correlationId: mergedContext === null || mergedContext === void 0 ? void 0 : mergedContext.correlationId,
71
+ error: input.error === undefined ? undefined : serializeError(input.error),
72
+ level,
73
+ message,
74
+ metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
75
+ requestId: mergedContext === null || mergedContext === void 0 ? void 0 : mergedContext.requestId,
76
+ service: options.service,
77
+ stage: (_c = mergedContext === null || mergedContext === void 0 ? void 0 : mergedContext.stage) !== null && _c !== void 0 ? _c : options.stage,
78
+ timestamp: now().toISOString(),
79
+ });
80
+ sink(entry);
81
+ return entry;
82
+ };
83
+ return {
84
+ child(childOptions = {}) {
85
+ var _a, _b, _c, _d;
86
+ return createLogger({
87
+ app: options.app,
88
+ context: mergeContext(options.context, childOptions.context),
89
+ metadata: Object.assign(Object.assign({}, ((_a = options.metadata) !== null && _a !== void 0 ? _a : {})), ((_b = childOptions.metadata) !== null && _b !== void 0 ? _b : {})),
90
+ now,
91
+ service: (_c = childOptions.service) !== null && _c !== void 0 ? _c : options.service,
92
+ sink,
93
+ stage: (_d = childOptions.stage) !== null && _d !== void 0 ? _d : options.stage,
94
+ });
95
+ },
96
+ debug(message, input) {
97
+ return write('debug', message, input);
98
+ },
99
+ error(message, input) {
100
+ return write('error', message, input);
101
+ },
102
+ info(message, input) {
103
+ return write('info', message, input);
104
+ },
105
+ log(level, message, input) {
106
+ return write(level, message, input);
107
+ },
108
+ warn(message, input) {
109
+ return write('warn', message, input);
110
+ },
111
+ };
112
+ }
113
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../../packages/runtime/src/logging.ts"],"names":[],"mappings":"AAsEA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,EAAE,MAAM;IACrB,UAAU,EAAE,qCAAqC;IACjD,WAAW,EAAE,6BAA6B;CAClC,CAAC;AAEX,SAAS,YAAY,CACnB,IAA+B,EAC/B,SAAoC;;IAEpC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,mCAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK;QACtC,aAAa,EAAE,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,aAAa,mCAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa;QAC9D,QAAQ,kCACH,CAAC,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,mCAAI,EAAE,CAAC,GACtB,CAAC,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,mCAAI,EAAE,CAAC,CAC/B;QACD,SAAS,EAAE,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,mCAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS;QAClD,SAAS,EAAE,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,mCAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS;QAClD,MAAM,EAAE,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,mCAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM;QACzC,KAAK,EAAE,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,mCAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAAuB;;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,aAAa,iBAClB,OAAO,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,EAAE,EAC1B,SAAS,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,IAAI,EAC9B,SAAS,EAAE,OAAO,CAAC,SAAS,EAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,IACnB,CAAC,MAAA,OAAO,CAAC,QAAQ,mCAAI,EAAE,CAAC,EAC3B,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAoC,KAAQ;IAChE,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAC5D,CAAC;AACT,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAA2C,CAAC;QAE1D,OAAO,aAAa,CAAC;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,cAAc;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAA4B;;IACvD,MAAM,IAAI,GAAG,MAAA,OAAO,CAAC,IAAI,mCAAI,WAAW,CAAC;IACzC,MAAM,GAAG,GAAG,MAAA,OAAO,CAAC,GAAG,mCAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,CACZ,KAAe,EACf,OAAe,EACf,QAAuB,EAAE,EACf,EAAE;;QACZ,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,aAAa,+CACzB,CAAC,MAAA,OAAO,CAAC,QAAQ,mCAAI,EAAE,CAAC,GACxB,eAAe,CAAC,aAAa,CAAC,GAC9B,CAAC,MAAA,KAAK,CAAC,QAAQ,mCAAI,EAAE,CAAC,EACzB,CAAC;QAEH,MAAM,KAAK,GAAa,aAAa,CAAC;YACpC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,aAAa,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,aAAa;YAC3C,KAAK,EACH,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;YACrE,KAAK;YACL,OAAO;YACP,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACjE,SAAS,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,SAAS;YACnC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,mCAAI,OAAO,CAAC,KAAK;YAC5C,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,CAAC;QAEZ,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,YAAY,GAAG,EAAE;;YACrB,OAAO,YAAY,CAAC;gBAClB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC;gBAC5D,QAAQ,kCACH,CAAC,MAAA,OAAO,CAAC,QAAQ,mCAAI,EAAE,CAAC,GACxB,CAAC,MAAA,YAAY,CAAC,QAAQ,mCAAI,EAAE,CAAC,CACjC;gBACD,GAAG;gBACH,OAAO,EAAE,MAAA,YAAY,CAAC,OAAO,mCAAI,OAAO,CAAC,OAAO;gBAChD,IAAI;gBACJ,KAAK,EAAE,MAAA,YAAY,CAAC,KAAK,mCAAI,OAAO,CAAC,KAAK;aAC3C,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,OAAO,EAAE,KAAK;YAClB,OAAO,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,OAAO,EAAE,KAAK;YAClB,OAAO,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,KAAK;YACjB,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK;YACvB,OAAO,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,KAAK;YACjB,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -83,7 +83,24 @@ export declare function createQueueAlarmDefinitions(input: QueueAlarmInput): Ala
83
83
  export declare function createDashboardPath(input: DashboardPathInput): string;
84
84
  export declare function createDashboardRegistration(input: DashboardRegistrationInput): MonitoringDashboardRegistration;
85
85
  export declare function createQueueAlarmRegistration(input: QueueAlarmRegistrationInput): QueueAlarmRegistration;
86
+ export interface EventConsumerAlarmInput {
87
+ app: string;
88
+ consumer: string;
89
+ queueName: string;
90
+ dlqName: string;
91
+ severity?: AlarmSeverity;
92
+ stage: string;
93
+ thresholds?: Partial<QueueAlertThresholds>;
94
+ }
95
+ export interface EventConsumerAlarmRegistration {
96
+ alarms: AlarmDefinition[];
97
+ app: string;
98
+ consumer: string;
99
+ dlqName: string;
100
+ queueName: string;
101
+ stage: string;
102
+ }
103
+ export declare function defineEventConsumerAlarms(input: EventConsumerAlarmInput): EventConsumerAlarmRegistration;
86
104
  export declare function createDefaultAppGroupAlarmDefinitions(input: AppGroupObservabilityInput): AlarmDefinition[];
87
105
  export declare function createAppGroupObservabilityRegistration(input: AppGroupObservabilityInput): AppGroupObservabilityRegistration;
88
106
  export declare function defineAppGroupMonitoringRegistration<T extends AppGroupMonitoringRegistration>(registration: T): T;
89
- //# sourceMappingURL=observability.d.ts.map
@@ -1,15 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMetricNamespace = createMetricNamespace;
4
- exports.createAlarmName = createAlarmName;
5
- exports.defaultQueueAlertThresholds = defaultQueueAlertThresholds;
6
- exports.createQueueAlarmDefinitions = createQueueAlarmDefinitions;
7
- exports.createDashboardPath = createDashboardPath;
8
- exports.createDashboardRegistration = createDashboardRegistration;
9
- exports.createQueueAlarmRegistration = createQueueAlarmRegistration;
10
- exports.createDefaultAppGroupAlarmDefinitions = createDefaultAppGroupAlarmDefinitions;
11
- exports.createAppGroupObservabilityRegistration = createAppGroupObservabilityRegistration;
12
- exports.defineAppGroupMonitoringRegistration = defineAppGroupMonitoringRegistration;
13
1
  function normalizeSegment(value) {
14
2
  return value
15
3
  .trim()
@@ -17,30 +5,27 @@ function normalizeSegment(value) {
17
5
  .replace(/[^a-z0-9]+/g, '-')
18
6
  .replace(/^-+|-+$/g, '');
19
7
  }
20
- function createMetricNamespace(app) {
8
+ export function createMetricNamespace(app) {
21
9
  return `EBK/${normalizeSegment(app)}`;
22
10
  }
23
- function createAlarmName(input) {
11
+ export function createAlarmName(input) {
12
+ var _a;
24
13
  return [
25
14
  normalizeSegment(input.app),
26
15
  normalizeSegment(input.stage),
27
16
  normalizeSegment(input.component),
28
17
  normalizeSegment(input.metric),
29
- normalizeSegment(input.severity ?? 'medium'),
18
+ normalizeSegment((_a = input.severity) !== null && _a !== void 0 ? _a : 'medium'),
30
19
  ].join('-');
31
20
  }
32
- function defaultQueueAlertThresholds(overrides = {}) {
33
- return {
34
- messagesInFlight: 10,
35
- messagesVisible: 25,
36
- oldestMessageAgeSeconds: 300,
37
- ...overrides,
38
- };
21
+ export function defaultQueueAlertThresholds(overrides = {}) {
22
+ return Object.assign({ messagesInFlight: 10, messagesVisible: 25, oldestMessageAgeSeconds: 300 }, overrides);
39
23
  }
40
- function createQueueAlarmDefinitions(input) {
24
+ export function createQueueAlarmDefinitions(input) {
25
+ var _a;
41
26
  const thresholds = defaultQueueAlertThresholds(input.thresholds);
42
27
  const namespace = 'AWS/SQS';
43
- const severity = input.severity ?? 'high';
28
+ const severity = (_a = input.severity) !== null && _a !== void 0 ? _a : 'high';
44
29
  return [
45
30
  {
46
31
  comparisonOperator: 'GreaterThanOrEqualToThreshold',
@@ -104,41 +89,72 @@ function createQueueAlarmDefinitions(input) {
104
89
  },
105
90
  ];
106
91
  }
107
- function createDashboardPath(input) {
92
+ export function createDashboardPath(input) {
108
93
  return `/${normalizeSegment(input.stage)}/${normalizeSegment(input.app)}/${normalizeSegment(input.dashboard)}`;
109
94
  }
110
- function createDashboardRegistration(input) {
111
- return {
112
- ...input,
113
- path: createDashboardPath(input),
114
- };
95
+ export function createDashboardRegistration(input) {
96
+ return Object.assign(Object.assign({}, input), { path: createDashboardPath(input) });
115
97
  }
116
- function createQueueAlarmRegistration(input) {
98
+ export function createQueueAlarmRegistration(input) {
117
99
  const thresholds = defaultQueueAlertThresholds(input.thresholds);
118
- return {
119
- ...input,
120
- alarms: createQueueAlarmDefinitions({
121
- ...input,
122
- thresholds,
123
- }),
124
- dashboardPath: input.dashboard
100
+ return Object.assign(Object.assign({}, input), { alarms: createQueueAlarmDefinitions(Object.assign(Object.assign({}, input), { thresholds })), dashboardPath: input.dashboard
125
101
  ? createDashboardPath({
126
102
  app: input.app,
127
103
  dashboard: input.dashboard,
128
104
  stage: input.stage,
129
105
  })
130
- : undefined,
131
- thresholds,
132
- };
106
+ : undefined, thresholds });
133
107
  }
134
- function createAppGroupMetricDimensions(input, extra = {}) {
108
+ // Baseline alarms for an event consumer on the shared core bus
109
+ // (rule -> SQS buffer -> Lambda, DLQ on the buffer):
110
+ //
111
+ // - DLQ depth >= 1 (critical): a poison event exhausted its retries and
112
+ // needs manual redrive — this is the primary signal.
113
+ // - Buffer queue depth / in-flight / age (standard queue thresholds): the
114
+ // consumer is falling behind its publisher.
115
+ export function defineEventConsumerAlarms(input) {
116
+ var _a;
117
+ const bufferAlarms = createQueueAlarmDefinitions({
118
+ app: input.app,
119
+ queue: input.queueName,
120
+ severity: (_a = input.severity) !== null && _a !== void 0 ? _a : 'high',
121
+ stage: input.stage,
122
+ thresholds: input.thresholds,
123
+ });
124
+ const dlqAlarm = {
125
+ comparisonOperator: 'GreaterThanOrEqualToThreshold',
126
+ description: `Dead-lettered ${input.consumer} events in ${input.dlqName} — a poison event exhausted its retries and needs redrive.`,
127
+ dimensions: {
128
+ QueueName: input.dlqName,
129
+ },
130
+ evaluationPeriods: 1,
131
+ metricName: 'ApproximateNumberOfMessagesVisible',
132
+ name: createAlarmName({
133
+ app: input.app,
134
+ component: `${input.consumer}-event-dlq`,
135
+ metric: 'dead-lettered-events',
136
+ severity: 'critical',
137
+ stage: input.stage,
138
+ }),
139
+ namespace: 'AWS/SQS',
140
+ periodSeconds: 60,
141
+ severity: 'critical',
142
+ threshold: 1,
143
+ };
135
144
  return {
136
- App: input.app,
137
- Stage: input.stage,
138
- ...extra,
145
+ alarms: [dlqAlarm, ...bufferAlarms],
146
+ app: input.app,
147
+ consumer: input.consumer,
148
+ dlqName: input.dlqName,
149
+ queueName: input.queueName,
150
+ stage: input.stage,
139
151
  };
140
152
  }
141
- function createDefaultAppGroupAlarmDefinitions(input) {
153
+ function createAppGroupMetricDimensions(input, extra = {}) {
154
+ return Object.assign({ App: input.app, Stage: input.stage }, extra);
155
+ }
156
+ export function createDefaultAppGroupAlarmDefinitions(input) {
157
+ var _a, _b;
142
158
  const namespace = createMetricNamespace(input.app);
143
159
  const alarms = [
144
160
  {
@@ -160,7 +176,7 @@ function createDefaultAppGroupAlarmDefinitions(input) {
160
176
  threshold: 1,
161
177
  },
162
178
  ];
163
- for (const webApp of input.webApps ?? []) {
179
+ for (const webApp of (_a = input.webApps) !== null && _a !== void 0 ? _a : []) {
164
180
  alarms.push({
165
181
  comparisonOperator: 'GreaterThanOrEqualToThreshold',
166
182
  description: `5xx responses for ${input.app}/${webApp} exceed the web baseline threshold.`,
@@ -182,7 +198,7 @@ function createDefaultAppGroupAlarmDefinitions(input) {
182
198
  threshold: 1,
183
199
  });
184
200
  }
185
- for (const functionName of input.functions ?? []) {
201
+ for (const functionName of (_b = input.functions) !== null && _b !== void 0 ? _b : []) {
186
202
  alarms.push({
187
203
  comparisonOperator: 'GreaterThanOrEqualToThreshold',
188
204
  description: `Lambda errors for ${input.app}/${functionName} exceed the function baseline threshold.`,
@@ -224,14 +240,11 @@ function createDefaultAppGroupAlarmDefinitions(input) {
224
240
  });
225
241
  return alarms;
226
242
  }
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: [
243
+ export function createAppGroupObservabilityRegistration(input) {
244
+ var _a, _b;
245
+ const owner = (_a = input.owner) !== null && _a !== void 0 ? _a : 'product';
246
+ const summary = (_b = input.summary) !== null && _b !== void 0 ? _b : `${input.app} app-group CloudWatch baseline for runtime health, web health, function errors, and smoke validation.`;
247
+ return Object.assign(Object.assign({}, input), { alarms: createDefaultAppGroupAlarmDefinitions(input), dashboards: [
235
248
  createDashboardRegistration({
236
249
  app: input.app,
237
250
  dashboard: 'operations',
@@ -239,12 +252,9 @@ function createAppGroupObservabilityRegistration(input) {
239
252
  stage: input.stage,
240
253
  title: `${input.app} Operations`,
241
254
  }),
242
- ],
243
- owner,
244
- queues: [],
245
- summary,
246
- };
255
+ ], owner, queues: [], summary });
247
256
  }
248
- function defineAppGroupMonitoringRegistration(registration) {
257
+ export function defineAppGroupMonitoringRegistration(registration) {
249
258
  return registration;
250
259
  }
260
+ //# sourceMappingURL=observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.js","sourceRoot":"","sources":["../../../../packages/runtime/src/observability.ts"],"names":[],"mappings":"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"}
@@ -7,25 +7,35 @@ export interface RequestActor {
7
7
  export interface RequestContext {
8
8
  app: string;
9
9
  actor?: RequestActor;
10
+ causationId?: string;
10
11
  correlationId: string;
11
12
  metadata: RequestMetadata;
12
13
  operation: string;
13
14
  requestId: string;
14
15
  source?: string;
15
16
  stage?: string;
17
+ tenantId?: string;
18
+ traceParent?: string;
19
+ traceState?: string;
16
20
  }
17
21
  export interface RequestContextInput {
18
22
  app: string;
19
23
  actor?: RequestActor;
24
+ causationId?: string;
20
25
  correlationId?: string;
21
26
  metadata?: Record<string, RequestMetadataValue | undefined>;
22
27
  operation: string;
23
28
  requestId?: string;
24
29
  source?: string;
25
30
  stage?: string;
31
+ tenantId?: string;
32
+ traceParent?: string;
33
+ traceState?: string;
26
34
  }
35
+ export declare function normalizePropagationId(value: string | null | undefined): string | undefined;
36
+ export declare function normalizeTraceParent(value: string | null | undefined): string | undefined;
37
+ export declare function normalizeTraceState(value: string | null | undefined): string | undefined;
27
38
  export declare function createRequestContext(input: RequestContextInput): RequestContext;
28
39
  export declare function extendRequestContext(context: RequestContext, overrides?: Partial<RequestContextInput>): RequestContext;
29
- export declare function toRequestHeaders(context: Pick<RequestContext, 'correlationId' | 'requestId'>): Record<string, string>;
40
+ export declare function toRequestHeaders(context: Pick<RequestContext, 'correlationId' | 'requestId' | 'traceParent' | 'traceState'>): Record<string, string>;
30
41
  export declare function toRequestLogMetadata(context: Partial<RequestContext>): RequestMetadata;
31
- //# sourceMappingURL=request-context.d.ts.map
@@ -0,0 +1,68 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ const PROPAGATION_ID_PATTERN = /^[A-Za-z0-9._:/-]{1,128}$/;
3
+ const TRACE_PARENT_PATTERN = /^00-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$/;
4
+ export function normalizePropagationId(value) {
5
+ const normalized = value === null || value === void 0 ? void 0 : value.trim();
6
+ return normalized && PROPAGATION_ID_PATTERN.test(normalized)
7
+ ? normalized
8
+ : undefined;
9
+ }
10
+ export function normalizeTraceParent(value) {
11
+ const normalized = value === null || value === void 0 ? void 0 : value.trim().toLowerCase();
12
+ return normalized && TRACE_PARENT_PATTERN.test(normalized)
13
+ ? normalized
14
+ : undefined;
15
+ }
16
+ export function normalizeTraceState(value) {
17
+ const normalized = value === null || value === void 0 ? void 0 : value.trim();
18
+ return normalized && normalized.length <= 512 && !/[\r\n]/.test(normalized)
19
+ ? normalized
20
+ : undefined;
21
+ }
22
+ function normalizeMetadata(metadata) {
23
+ const entries = Object.entries(metadata !== null && metadata !== void 0 ? metadata : {}).filter(([, value]) => value !== undefined);
24
+ return Object.fromEntries(entries);
25
+ }
26
+ export function createRequestContext(input) {
27
+ var _a, _b;
28
+ const requestId = (_a = normalizePropagationId(input.requestId)) !== null && _a !== void 0 ? _a : randomUUID();
29
+ return {
30
+ app: input.app,
31
+ actor: input.actor,
32
+ causationId: normalizePropagationId(input.causationId),
33
+ correlationId: (_b = normalizePropagationId(input.correlationId)) !== null && _b !== void 0 ? _b : requestId,
34
+ metadata: normalizeMetadata(input.metadata),
35
+ operation: input.operation,
36
+ requestId,
37
+ source: input.source,
38
+ stage: input.stage,
39
+ tenantId: normalizePropagationId(input.tenantId),
40
+ traceParent: normalizeTraceParent(input.traceParent),
41
+ traceState: normalizeTraceState(input.traceState),
42
+ };
43
+ }
44
+ export function extendRequestContext(context, overrides = {}) {
45
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
46
+ return {
47
+ app: (_a = overrides.app) !== null && _a !== void 0 ? _a : context.app,
48
+ actor: (_b = overrides.actor) !== null && _b !== void 0 ? _b : context.actor,
49
+ causationId: (_c = normalizePropagationId(overrides.causationId)) !== null && _c !== void 0 ? _c : context.causationId,
50
+ correlationId: (_d = normalizePropagationId(overrides.correlationId)) !== null && _d !== void 0 ? _d : context.correlationId,
51
+ metadata: Object.assign(Object.assign({}, context.metadata), normalizeMetadata(overrides.metadata)),
52
+ operation: (_e = overrides.operation) !== null && _e !== void 0 ? _e : context.operation,
53
+ requestId: (_f = overrides.requestId) !== null && _f !== void 0 ? _f : context.requestId,
54
+ source: (_g = overrides.source) !== null && _g !== void 0 ? _g : context.source,
55
+ stage: (_h = overrides.stage) !== null && _h !== void 0 ? _h : context.stage,
56
+ tenantId: (_j = normalizePropagationId(overrides.tenantId)) !== null && _j !== void 0 ? _j : context.tenantId,
57
+ traceParent: (_k = normalizeTraceParent(overrides.traceParent)) !== null && _k !== void 0 ? _k : context.traceParent,
58
+ traceState: (_l = normalizeTraceState(overrides.traceState)) !== null && _l !== void 0 ? _l : context.traceState,
59
+ };
60
+ }
61
+ export function toRequestHeaders(context) {
62
+ return Object.assign(Object.assign({ 'x-causation-id': context.requestId, 'x-correlation-id': context.correlationId, 'x-request-id': context.requestId }, (context.traceParent ? { traceparent: context.traceParent } : {})), (context.traceState ? { tracestate: context.traceState } : {}));
63
+ }
64
+ export function toRequestLogMetadata(context) {
65
+ var _a, _b;
66
+ return normalizeMetadata(Object.assign({ actorId: (_a = context.actor) === null || _a === void 0 ? void 0 : _a.id, actorType: (_b = context.actor) === null || _b === void 0 ? void 0 : _b.type, app: context.app, causationId: context.causationId, correlationId: context.correlationId, operation: context.operation, requestId: context.requestId, source: context.source, stage: context.stage, tenantId: context.tenantId, traceParent: context.traceParent, traceState: context.traceState }, context.metadata));
67
+ }
68
+ //# sourceMappingURL=request-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../../../packages/runtime/src/request-context.ts"],"names":[],"mappings":"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"}
@@ -58,4 +58,3 @@ export declare class RuntimeError extends Error {
58
58
  export declare function isRuntimeError(error: unknown): error is RuntimeError;
59
59
  export declare function createSuccessResponse<T, M extends ResponseMetadata = ResponseMetadata>(data: T, options?: CreateSuccessResponseOptions<M>): SuccessResponse<T, M>;
60
60
  export declare function createErrorResponse<M extends ResponseMetadata = ResponseMetadata>(error: unknown, options?: CreateErrorResponseOptions<M>): ErrorResponse<M>;
61
- //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1,66 @@
1
+ export const responseContract = {
2
+ exportPath: '@empire-builder-kit/runtime/response',
3
+ packageName: '@empire-builder-kit/runtime',
4
+ };
5
+ export class RuntimeError extends Error {
6
+ constructor(options) {
7
+ var _a, _b, _c;
8
+ super(options.message);
9
+ this.name = 'RuntimeError';
10
+ this.code = options.code;
11
+ this.details = options.details;
12
+ this.status = (_a = options.status) !== null && _a !== void 0 ? _a : 500;
13
+ this.retryable = (_b = options.retryable) !== null && _b !== void 0 ? _b : false;
14
+ this.expose = (_c = options.expose) !== null && _c !== void 0 ? _c : this.status < 500;
15
+ }
16
+ }
17
+ export function isRuntimeError(error) {
18
+ return error instanceof RuntimeError;
19
+ }
20
+ export function createSuccessResponse(data, options = {}) {
21
+ var _a;
22
+ return compactObject({
23
+ data,
24
+ meta: options.meta,
25
+ ok: true,
26
+ status: (_a = options.status) !== null && _a !== void 0 ? _a : 200,
27
+ });
28
+ }
29
+ export function createErrorResponse(error, options = {}) {
30
+ var _a, _b;
31
+ const normalized = normalizeError(error, options);
32
+ const expose = normalized.expose;
33
+ return compactObject({
34
+ error: compactObject({
35
+ code: expose
36
+ ? normalized.code
37
+ : ((_a = options.fallbackCode) !== null && _a !== void 0 ? _a : 'internal_error'),
38
+ details: expose && options.includeDetails !== false
39
+ ? normalized.details
40
+ : undefined,
41
+ message: expose
42
+ ? normalized.message
43
+ : ((_b = options.fallbackMessage) !== null && _b !== void 0 ? _b : 'Internal server error'),
44
+ retryable: normalized.retryable,
45
+ }),
46
+ meta: options.meta,
47
+ ok: false,
48
+ status: normalized.status,
49
+ });
50
+ }
51
+ function normalizeError(error, options) {
52
+ var _a, _b;
53
+ if (isRuntimeError(error)) {
54
+ return error;
55
+ }
56
+ return new RuntimeError({
57
+ code: (_a = options.fallbackCode) !== null && _a !== void 0 ? _a : 'internal_error',
58
+ expose: false,
59
+ message: (_b = options.fallbackMessage) !== null && _b !== void 0 ? _b : 'Internal server error',
60
+ status: 500,
61
+ });
62
+ }
63
+ function compactObject(value) {
64
+ return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
65
+ }
66
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../../packages/runtime/src/response.ts"],"names":[],"mappings":"AA8DA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,sCAAsC;IAClD,WAAW,EAAE,6BAA6B;CAClC,CAAC;AAEX,MAAM,OAAO,YAAa,SAAQ,KAAK;IAOrC,YAAY,OAA4B;;QACtC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,GAAG,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,MAAA,OAAO,CAAC,SAAS,mCAAI,KAAK,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;IACpD,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,YAAY,YAAY,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAInC,IAAO,EACP,UAA2C,EAAE;;IAE7C,OAAO,aAAa,CAAC;QACnB,IAAI;QACJ,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,EAAE,EAAE,IAAa;QACjB,MAAM,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,GAAG;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CAGjC,KAAc,EACd,UAAyC,EAAE;;IAE3C,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAEjC,OAAO,aAAa,CAAC;QACnB,KAAK,EAAE,aAAa,CAAC;YACnB,IAAI,EAAE,MAAM;gBACV,CAAC,CAAC,UAAU,CAAC,IAAI;gBACjB,CAAC,CAAC,CAAC,MAAA,OAAO,CAAC,YAAY,mCAAI,gBAAgB,CAAC;YAC9C,OAAO,EACL,MAAM,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK;gBACxC,CAAC,CAAC,UAAU,CAAC,OAAO;gBACpB,CAAC,CAAC,SAAS;YACf,OAAO,EAAE,MAAM;gBACb,CAAC,CAAC,UAAU,CAAC,OAAO;gBACpB,CAAC,CAAC,CAAC,MAAA,OAAO,CAAC,eAAe,mCAAI,uBAAuB,CAAC;YACxD,SAAS,EAAE,UAAU,CAAC,SAAS;SAChC,CAAC;QACF,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,EAAE,EAAE,KAAc;QAClB,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,OAAsC;;IAEtC,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,YAAY,CAAC;QACtB,IAAI,EAAE,MAAA,OAAO,CAAC,YAAY,mCAAI,gBAAgB;QAC9C,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,uBAAuB;QAC3D,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAoC,KAAQ;IAChE,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAC5D,CAAC;AACT,CAAC"}
@@ -1,18 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,57 +0,0 @@
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
- }