@empire-builder-kit/runtime 0.0.1-alpha.9 → 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.
- package/LICENSE +201 -21
- package/NOTICE +5 -0
- package/README.md +14 -23
- package/package.json +53 -97
- package/src/auth-backend.d.ts +44 -0
- package/src/auth-backend.js +158 -0
- package/src/auth-backend.js.map +1 -0
- package/src/auth-session.d.ts +175 -0
- package/src/auth-session.js +181 -0
- package/src/auth-session.js.map +1 -0
- package/src/auth-web.d.ts +79 -0
- package/src/auth-web.js +153 -0
- package/src/auth-web.js.map +1 -0
- package/src/auth.d.ts +143 -0
- package/src/auth.js +233 -0
- package/src/auth.js.map +1 -0
- package/{dist → src}/config.d.ts +0 -1
- package/{dist → src}/config.js +9 -21
- package/src/config.js.map +1 -0
- package/src/events.d.ts +74 -0
- package/src/events.js +149 -0
- package/src/events.js.map +1 -0
- package/{dist → src}/frontend.d.ts +1 -2
- package/src/frontend.js +62 -0
- package/src/frontend.js.map +1 -0
- package/src/hosts.d.ts +9 -0
- package/src/hosts.js +38 -0
- package/src/hosts.js.map +1 -0
- package/src/index.d.ts +15 -0
- package/src/index.js +30 -0
- package/src/index.js.map +1 -0
- package/src/lambda.d.ts +45 -0
- package/src/lambda.js +117 -0
- package/src/lambda.js.map +1 -0
- package/{dist → src}/logging.d.ts +0 -1
- package/src/logging.js +113 -0
- package/src/logging.js.map +1 -0
- package/{dist → src}/observability.d.ts +18 -1
- package/{dist → src}/observability.js +72 -62
- package/src/observability.js.map +1 -0
- package/{dist → src}/request-context.d.ts +12 -2
- package/src/request-context.js +68 -0
- package/src/request-context.js.map +1 -0
- package/{dist → src}/response.d.ts +0 -1
- package/src/response.js +66 -0
- package/src/response.js.map +1 -0
- package/dist/auth-backend.d.ts +0 -18
- package/dist/auth-backend.d.ts.map +0 -1
- package/dist/auth-backend.js +0 -57
- package/dist/auth-web.d.ts +0 -18
- package/dist/auth-web.d.ts.map +0 -1
- package/dist/auth-web.js +0 -32
- package/dist/auth.d.ts +0 -68
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -107
- package/dist/config.d.ts.map +0 -1
- package/dist/frontend.d.ts.map +0 -1
- package/dist/frontend.js +0 -64
- package/dist/index.d.ts +0 -12
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -23
- package/dist/logging.d.ts.map +0 -1
- package/dist/logging.js +0 -129
- package/dist/observability.d.ts.map +0 -1
- package/dist/request-context.d.ts.map +0 -1
- package/dist/request-context.js +0 -58
- package/dist/response.d.ts.map +0 -1
- 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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
|
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
|
-
|
|
229
|
-
const
|
|
230
|
-
|
|
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
|
package/src/response.js
ADDED
|
@@ -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"}
|
package/dist/auth-backend.d.ts
DELETED
|
@@ -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"}
|
package/dist/auth-backend.js
DELETED
|
@@ -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
|
-
}
|