@empire-builder-kit/runtime 0.0.1-alpha.9 → 1.0.0-beta.11

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 (74) hide show
  1. package/LICENSE +201 -21
  2. package/NOTICE +5 -0
  3. package/README.md +14 -23
  4. package/package.json +58 -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/database.d.ts +32 -0
  21. package/src/database.js +119 -0
  22. package/src/database.js.map +1 -0
  23. package/src/events.d.ts +74 -0
  24. package/src/events.js +149 -0
  25. package/src/events.js.map +1 -0
  26. package/{dist → src}/frontend.d.ts +1 -2
  27. package/src/frontend.js +62 -0
  28. package/src/frontend.js.map +1 -0
  29. package/src/hosts.d.ts +9 -0
  30. package/src/hosts.js +38 -0
  31. package/src/hosts.js.map +1 -0
  32. package/src/index.d.ts +15 -0
  33. package/src/index.js +31 -0
  34. package/src/index.js.map +1 -0
  35. package/src/lambda.d.ts +45 -0
  36. package/src/lambda.js +117 -0
  37. package/src/lambda.js.map +1 -0
  38. package/{dist → src}/logging.d.ts +0 -1
  39. package/src/logging.js +113 -0
  40. package/src/logging.js.map +1 -0
  41. package/{dist → src}/observability.d.ts +18 -1
  42. package/{dist → src}/observability.js +72 -62
  43. package/src/observability.js.map +1 -0
  44. package/src/rds-global-ca-bundle.d.ts +1 -0
  45. package/src/rds-global-ca-bundle.js +2742 -0
  46. package/src/rds-global-ca-bundle.js.map +1 -0
  47. package/{dist → src}/request-context.d.ts +12 -2
  48. package/src/request-context.js +68 -0
  49. package/src/request-context.js.map +1 -0
  50. package/{dist → src}/response.d.ts +0 -1
  51. package/src/response.js +66 -0
  52. package/src/response.js.map +1 -0
  53. package/dist/auth-backend.d.ts +0 -18
  54. package/dist/auth-backend.d.ts.map +0 -1
  55. package/dist/auth-backend.js +0 -57
  56. package/dist/auth-web.d.ts +0 -18
  57. package/dist/auth-web.d.ts.map +0 -1
  58. package/dist/auth-web.js +0 -32
  59. package/dist/auth.d.ts +0 -68
  60. package/dist/auth.d.ts.map +0 -1
  61. package/dist/auth.js +0 -107
  62. package/dist/config.d.ts.map +0 -1
  63. package/dist/frontend.d.ts.map +0 -1
  64. package/dist/frontend.js +0 -64
  65. package/dist/index.d.ts +0 -12
  66. package/dist/index.d.ts.map +0 -1
  67. package/dist/index.js +0 -23
  68. package/dist/logging.d.ts.map +0 -1
  69. package/dist/logging.js +0 -129
  70. package/dist/observability.d.ts.map +0 -1
  71. package/dist/request-context.d.ts.map +0 -1
  72. package/dist/request-context.js +0 -58
  73. package/dist/response.d.ts.map +0 -1
  74. package/dist/response.js +0 -66
package/dist/logging.js DELETED
@@ -1,129 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loggingContract = void 0;
4
- exports.serializeError = serializeError;
5
- exports.consoleSink = consoleSink;
6
- exports.createLogger = createLogger;
7
- exports.loggingContract = {
8
- defaultFormat: 'json',
9
- exportPath: '@empire-builder-kit/runtime/logging',
10
- packageName: '@empire-builder-kit/runtime',
11
- };
12
- function mergeContext(base, overrides) {
13
- if (!base && !overrides) {
14
- return undefined;
15
- }
16
- return {
17
- actor: overrides?.actor ?? base?.actor,
18
- correlationId: overrides?.correlationId ?? base?.correlationId,
19
- metadata: {
20
- ...(base?.metadata ?? {}),
21
- ...(overrides?.metadata ?? {}),
22
- },
23
- operation: overrides?.operation ?? base?.operation,
24
- requestId: overrides?.requestId ?? base?.requestId,
25
- source: overrides?.source ?? base?.source,
26
- stage: overrides?.stage ?? base?.stage,
27
- };
28
- }
29
- function contextMetadata(context) {
30
- if (!context) {
31
- return {};
32
- }
33
- return compactObject({
34
- actorId: context.actor?.id,
35
- actorType: context.actor?.type,
36
- operation: context.operation,
37
- source: context.source,
38
- ...(context.metadata ?? {}),
39
- });
40
- }
41
- function compactObject(value) {
42
- return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
43
- }
44
- function safeStringify(value) {
45
- if (typeof value === 'string') {
46
- return value;
47
- }
48
- try {
49
- return JSON.stringify(value);
50
- }
51
- catch {
52
- return String(value);
53
- }
54
- }
55
- function serializeError(error) {
56
- if (error instanceof Error) {
57
- const value = error;
58
- return compactObject({
59
- code: value.code,
60
- message: value.message,
61
- name: value.name,
62
- stack: value.stack,
63
- });
64
- }
65
- return {
66
- message: safeStringify(error),
67
- name: 'UnknownError',
68
- };
69
- }
70
- function consoleSink(entry) {
71
- console.log(JSON.stringify(entry));
72
- }
73
- function createLogger(options) {
74
- const sink = options.sink ?? consoleSink;
75
- const now = options.now ?? (() => new Date());
76
- const write = (level, message, input = {}) => {
77
- const mergedContext = mergeContext(options.context, input.context);
78
- const metadata = compactObject({
79
- ...(options.metadata ?? {}),
80
- ...contextMetadata(mergedContext),
81
- ...(input.metadata ?? {}),
82
- });
83
- const entry = compactObject({
84
- app: options.app,
85
- correlationId: mergedContext?.correlationId,
86
- error: input.error === undefined ? undefined : serializeError(input.error),
87
- level,
88
- message,
89
- metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
90
- requestId: mergedContext?.requestId,
91
- service: options.service,
92
- stage: mergedContext?.stage ?? options.stage,
93
- timestamp: now().toISOString(),
94
- });
95
- sink(entry);
96
- return entry;
97
- };
98
- return {
99
- child(childOptions = {}) {
100
- return createLogger({
101
- app: options.app,
102
- context: mergeContext(options.context, childOptions.context),
103
- metadata: {
104
- ...(options.metadata ?? {}),
105
- ...(childOptions.metadata ?? {}),
106
- },
107
- now,
108
- service: childOptions.service ?? options.service,
109
- sink,
110
- stage: childOptions.stage ?? options.stage,
111
- });
112
- },
113
- debug(message, input) {
114
- return write('debug', message, input);
115
- },
116
- error(message, input) {
117
- return write('error', message, input);
118
- },
119
- info(message, input) {
120
- return write('info', message, input);
121
- },
122
- log(level, message, input) {
123
- return write(level, message, input);
124
- },
125
- warn(message, input) {
126
- return write('warn', message, input);
127
- },
128
- };
129
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../src/request-context.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACpE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC,CAAC;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAYD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,mBAAmB,GACzB,cAAc,CAahB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EACvB,SAAS,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAC3C,cAAc,CAchB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe,GAAG,WAAW,CAAC,GAC3D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKxB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,eAAe,CAYjB"}
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRequestContext = createRequestContext;
4
- exports.extendRequestContext = extendRequestContext;
5
- exports.toRequestHeaders = toRequestHeaders;
6
- exports.toRequestLogMetadata = toRequestLogMetadata;
7
- const node_crypto_1 = require("node:crypto");
8
- function normalizeMetadata(metadata) {
9
- const entries = Object.entries(metadata ?? {}).filter(([, value]) => value !== undefined);
10
- return Object.fromEntries(entries);
11
- }
12
- function createRequestContext(input) {
13
- const requestId = input.requestId ?? (0, node_crypto_1.randomUUID)();
14
- return {
15
- app: input.app,
16
- actor: input.actor,
17
- correlationId: input.correlationId ?? requestId,
18
- metadata: normalizeMetadata(input.metadata),
19
- operation: input.operation,
20
- requestId,
21
- source: input.source,
22
- stage: input.stage,
23
- };
24
- }
25
- function extendRequestContext(context, overrides = {}) {
26
- return {
27
- app: overrides.app ?? context.app,
28
- actor: overrides.actor ?? context.actor,
29
- correlationId: overrides.correlationId ?? context.correlationId,
30
- metadata: {
31
- ...context.metadata,
32
- ...normalizeMetadata(overrides.metadata),
33
- },
34
- operation: overrides.operation ?? context.operation,
35
- requestId: overrides.requestId ?? context.requestId,
36
- source: overrides.source ?? context.source,
37
- stage: overrides.stage ?? context.stage,
38
- };
39
- }
40
- function toRequestHeaders(context) {
41
- return {
42
- 'x-correlation-id': context.correlationId,
43
- 'x-request-id': context.requestId,
44
- };
45
- }
46
- function toRequestLogMetadata(context) {
47
- return normalizeMetadata({
48
- actorId: context.actor?.id,
49
- actorType: context.actor?.type,
50
- app: context.app,
51
- correlationId: context.correlationId,
52
- operation: context.operation,
53
- requestId: context.requestId,
54
- source: context.source,
55
- stage: context.stage,
56
- ...context.metadata,
57
- });
58
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe,CAC9B,CAAC,EACD,CAAC,SAAS,gBAAgB,GAAG,gBAAgB;IAE7C,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB;IAC1E,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,IACpE,aAAa,CAAC,CAAC,CAAC,GAChB,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1B,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B,CACzC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB;IAE7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,CAAC;CACV;AAED,MAAM,WAAW,4BAA4B,CAC3C,CAAC,SAAS,gBAAgB,GAAG,gBAAgB;IAE7C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,gBAAgB;;;CAGnB,CAAC;AAEX,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,OAAO,EAAE,mBAAmB;CASzC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED,wBAAgB,qBAAqB,CACnC,CAAC,EACD,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,EAE7C,IAAI,EAAE,CAAC,EACP,OAAO,GAAE,4BAA4B,CAAC,CAAC,CAAM,GAC5C,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAOvB;AAED,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,EAE7C,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,0BAA0B,CAAC,CAAC,CAAM,GAC1C,aAAa,CAAC,CAAC,CAAC,CAelB"}
package/dist/response.js DELETED
@@ -1,66 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RuntimeError = exports.responseContract = void 0;
4
- exports.isRuntimeError = isRuntimeError;
5
- exports.createSuccessResponse = createSuccessResponse;
6
- exports.createErrorResponse = createErrorResponse;
7
- exports.responseContract = {
8
- exportPath: '@empire-builder-kit/runtime/response',
9
- packageName: '@empire-builder-kit/runtime',
10
- };
11
- class RuntimeError extends Error {
12
- code;
13
- details;
14
- expose;
15
- retryable;
16
- status;
17
- constructor(options) {
18
- super(options.message);
19
- this.name = 'RuntimeError';
20
- this.code = options.code;
21
- this.details = options.details;
22
- this.status = options.status ?? 500;
23
- this.retryable = options.retryable ?? false;
24
- this.expose = options.expose ?? this.status < 500;
25
- }
26
- }
27
- exports.RuntimeError = RuntimeError;
28
- function isRuntimeError(error) {
29
- return error instanceof RuntimeError;
30
- }
31
- function createSuccessResponse(data, options = {}) {
32
- return compactObject({
33
- data,
34
- meta: options.meta,
35
- ok: true,
36
- status: options.status ?? 200,
37
- });
38
- }
39
- function createErrorResponse(error, options = {}) {
40
- const normalized = normalizeError(error, options);
41
- return compactObject({
42
- error: compactObject({
43
- code: normalized.code,
44
- details: options.includeDetails === false ? undefined : normalized.details,
45
- message: normalized.message,
46
- retryable: normalized.retryable,
47
- }),
48
- meta: options.meta,
49
- ok: false,
50
- status: normalized.status,
51
- });
52
- }
53
- function normalizeError(error, options) {
54
- if (isRuntimeError(error)) {
55
- return error;
56
- }
57
- return new RuntimeError({
58
- code: options.fallbackCode ?? 'internal_error',
59
- expose: false,
60
- message: options.fallbackMessage ?? 'Internal server error',
61
- status: 500,
62
- });
63
- }
64
- function compactObject(value) {
65
- return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
66
- }