@empire-builder-kit/runtime 1.0.0-beta.9 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/NOTICE +6 -0
  2. package/package.json +93 -3
  3. package/src/api-contract/artifacts.d.ts +67 -0
  4. package/src/api-contract/artifacts.js +349 -0
  5. package/src/api-contract/artifacts.js.map +1 -0
  6. package/src/api-contract/client.d.ts +79 -0
  7. package/src/api-contract/client.js +561 -0
  8. package/src/api-contract/client.js.map +1 -0
  9. package/src/api-contract/errors.d.ts +7 -0
  10. package/src/api-contract/errors.js +11 -0
  11. package/src/api-contract/errors.js.map +1 -0
  12. package/src/api-contract/index.d.ts +9 -0
  13. package/src/api-contract/index.js +10 -0
  14. package/src/api-contract/index.js.map +1 -0
  15. package/src/api-contract/operation.d.ts +118 -0
  16. package/src/api-contract/operation.js +609 -0
  17. package/src/api-contract/operation.js.map +1 -0
  18. package/src/api-contract/schema.d.ts +81 -0
  19. package/src/api-contract/schema.js +313 -0
  20. package/src/api-contract/schema.js.map +1 -0
  21. package/src/api-contract/server.d.ts +77 -0
  22. package/src/api-contract/server.js +466 -0
  23. package/src/api-contract/server.js.map +1 -0
  24. package/src/async-work/contract.d.ts +17 -0
  25. package/src/async-work/contract.js +105 -0
  26. package/src/async-work/contract.js.map +1 -0
  27. package/src/async-work/idempotency.d.ts +123 -0
  28. package/src/async-work/idempotency.js +167 -0
  29. package/src/async-work/idempotency.js.map +1 -0
  30. package/src/async-work/index.d.ts +8 -0
  31. package/src/async-work/index.js +9 -0
  32. package/src/async-work/index.js.map +1 -0
  33. package/src/async-work/provider.d.ts +90 -0
  34. package/src/async-work/provider.js +155 -0
  35. package/src/async-work/provider.js.map +1 -0
  36. package/src/async-work/recovery.d.ts +103 -0
  37. package/src/async-work/recovery.js +291 -0
  38. package/src/async-work/recovery.js.map +1 -0
  39. package/src/async-work/schedule.d.ts +117 -0
  40. package/src/async-work/schedule.js +279 -0
  41. package/src/async-work/schedule.js.map +1 -0
  42. package/src/async-work/sqs.d.ts +133 -0
  43. package/src/async-work/sqs.js +280 -0
  44. package/src/async-work/sqs.js.map +1 -0
  45. package/src/async-work/webhook.d.ts +60 -0
  46. package/src/async-work/webhook.js +178 -0
  47. package/src/async-work/webhook.js.map +1 -0
  48. package/src/async-work/workflow.d.ts +98 -0
  49. package/src/async-work/workflow.js +225 -0
  50. package/src/async-work/workflow.js.map +1 -0
  51. package/src/auth-backend.d.ts +12 -2
  52. package/src/auth-backend.js +30 -18
  53. package/src/auth-backend.js.map +1 -1
  54. package/src/authorization/admission.d.ts +30 -0
  55. package/src/authorization/admission.js +87 -0
  56. package/src/authorization/admission.js.map +1 -0
  57. package/src/authorization/approval.d.ts +99 -0
  58. package/src/authorization/approval.js +249 -0
  59. package/src/authorization/approval.js.map +1 -0
  60. package/src/authorization/audit.d.ts +35 -0
  61. package/src/authorization/audit.js +35 -0
  62. package/src/authorization/audit.js.map +1 -0
  63. package/src/authorization/delegation.d.ts +149 -0
  64. package/src/authorization/delegation.js +401 -0
  65. package/src/authorization/delegation.js.map +1 -0
  66. package/src/authorization/errors.d.ts +32 -0
  67. package/src/authorization/errors.js +153 -0
  68. package/src/authorization/errors.js.map +1 -0
  69. package/src/authorization/evaluator.d.ts +39 -0
  70. package/src/authorization/evaluator.js +199 -0
  71. package/src/authorization/evaluator.js.map +1 -0
  72. package/src/authorization/index.d.ts +14 -0
  73. package/src/authorization/index.js +15 -0
  74. package/src/authorization/index.js.map +1 -0
  75. package/src/authorization/machine-token.d.ts +87 -0
  76. package/src/authorization/machine-token.js +201 -0
  77. package/src/authorization/machine-token.js.map +1 -0
  78. package/src/authorization/machine.d.ts +32 -0
  79. package/src/authorization/machine.js +41 -0
  80. package/src/authorization/machine.js.map +1 -0
  81. package/src/authorization/model.d.ts +112 -0
  82. package/src/authorization/model.js +112 -0
  83. package/src/authorization/model.js.map +1 -0
  84. package/src/canonical-json.cjs +157 -0
  85. package/src/canonical-json.d.cts +26 -0
  86. package/src/canonical-json.d.ts +18 -0
  87. package/src/canonical-json.js +125 -0
  88. package/src/canonical-json.js.map +1 -0
  89. package/src/configuration/contract.d.ts +107 -0
  90. package/src/configuration/contract.js +461 -0
  91. package/src/configuration/contract.js.map +1 -0
  92. package/src/configuration/index.d.ts +3 -0
  93. package/src/configuration/index.js +4 -0
  94. package/src/configuration/index.js.map +1 -0
  95. package/src/configuration/provider.d.ts +59 -0
  96. package/src/configuration/provider.js +198 -0
  97. package/src/configuration/provider.js.map +1 -0
  98. package/src/configuration/rollout-evaluator.cjs +54 -0
  99. package/src/configuration/rollout-evaluator.d.cts +26 -0
  100. package/src/configuration/rollout-evaluator.d.ts +18 -0
  101. package/src/configuration/rollout-evaluator.js +38 -0
  102. package/src/configuration/rollout-evaluator.js.map +1 -0
  103. package/src/configuration/rollout-key.cjs +38 -0
  104. package/src/configuration/rollout-key.d.cts +14 -0
  105. package/src/configuration/rollout-key.d.ts +10 -0
  106. package/src/configuration/rollout-key.js +26 -0
  107. package/src/configuration/rollout-key.js.map +1 -0
  108. package/src/configuration/rollout.d.ts +60 -0
  109. package/src/configuration/rollout.js +42 -0
  110. package/src/configuration/rollout.js.map +1 -0
  111. package/src/data-lifecycle/contract.d.ts +33 -0
  112. package/src/data-lifecycle/contract.js +118 -0
  113. package/src/data-lifecycle/contract.js.map +1 -0
  114. package/src/data-lifecycle/event.d.ts +28 -0
  115. package/src/data-lifecycle/event.js +76 -0
  116. package/src/data-lifecycle/event.js.map +1 -0
  117. package/src/data-lifecycle/evidence.d.ts +65 -0
  118. package/src/data-lifecycle/evidence.js +162 -0
  119. package/src/data-lifecycle/evidence.js.map +1 -0
  120. package/src/data-lifecycle/holds.d.ts +29 -0
  121. package/src/data-lifecycle/holds.js +124 -0
  122. package/src/data-lifecycle/holds.js.map +1 -0
  123. package/src/data-lifecycle/index.d.ts +8 -0
  124. package/src/data-lifecycle/index.js +9 -0
  125. package/src/data-lifecycle/index.js.map +1 -0
  126. package/src/data-lifecycle/policy.d.ts +16 -0
  127. package/src/data-lifecycle/policy.js +79 -0
  128. package/src/data-lifecycle/policy.js.map +1 -0
  129. package/src/data-lifecycle/restore.d.ts +90 -0
  130. package/src/data-lifecycle/restore.js +336 -0
  131. package/src/data-lifecycle/restore.js.map +1 -0
  132. package/src/data-lifecycle/retention.d.ts +57 -0
  133. package/src/data-lifecycle/retention.js +232 -0
  134. package/src/data-lifecycle/retention.js.map +1 -0
  135. package/src/data-lifecycle/rights.d.ts +171 -0
  136. package/src/data-lifecycle/rights.js +533 -0
  137. package/src/data-lifecycle/rights.js.map +1 -0
  138. package/src/database.d.ts +36 -0
  139. package/src/database.js +119 -0
  140. package/src/database.js.map +1 -0
  141. package/src/deterministic-order.cjs +16 -0
  142. package/src/deterministic-order.d.cts +9 -0
  143. package/src/deterministic-order.d.ts +7 -0
  144. package/src/deterministic-order.js +10 -0
  145. package/src/deterministic-order.js.map +1 -0
  146. package/src/events.d.ts +28 -19
  147. package/src/events.js +171 -66
  148. package/src/events.js.map +1 -1
  149. package/src/index.d.ts +7 -1
  150. package/src/index.js +24 -0
  151. package/src/index.js.map +1 -1
  152. package/src/lambda.d.ts +8 -2
  153. package/src/lambda.js +100 -39
  154. package/src/lambda.js.map +1 -1
  155. package/src/logging.d.ts +95 -36
  156. package/src/logging.js +460 -62
  157. package/src/logging.js.map +1 -1
  158. package/src/observability.d.ts +80 -18
  159. package/src/observability.js +252 -61
  160. package/src/observability.js.map +1 -1
  161. package/src/performance/index.d.ts +1 -0
  162. package/src/performance/index.js +2 -0
  163. package/src/performance/index.js.map +1 -0
  164. package/src/performance/protected-load-endpoint.d.ts +140 -0
  165. package/src/performance/protected-load-endpoint.js +462 -0
  166. package/src/performance/protected-load-endpoint.js.map +1 -0
  167. package/src/rds-global-ca-bundle.d.ts +1 -0
  168. package/src/rds-global-ca-bundle.js +2742 -0
  169. package/src/rds-global-ca-bundle.js.map +1 -0
  170. package/src/reliability/burn.d.ts +39 -0
  171. package/src/reliability/burn.js +102 -0
  172. package/src/reliability/burn.js.map +1 -0
  173. package/src/reliability/contract.d.ts +5 -0
  174. package/src/reliability/contract.js +317 -0
  175. package/src/reliability/contract.js.map +1 -0
  176. package/src/reliability/incident.d.ts +16 -0
  177. package/src/reliability/incident.js +562 -0
  178. package/src/reliability/incident.js.map +1 -0
  179. package/src/reliability/index.d.ts +5 -0
  180. package/src/reliability/index.js +6 -0
  181. package/src/reliability/index.js.map +1 -0
  182. package/src/reliability/model.d.ts +191 -0
  183. package/src/reliability/model.fixtures.d.ts +2 -0
  184. package/src/reliability/model.fixtures.js +57 -0
  185. package/src/reliability/model.fixtures.js.map +1 -0
  186. package/src/reliability/model.js +2 -0
  187. package/src/reliability/model.js.map +1 -0
  188. package/src/reliability/slo.d.ts +9 -0
  189. package/src/reliability/slo.js +74 -0
  190. package/src/reliability/slo.js.map +1 -0
  191. package/src/request-context.d.ts +57 -15
  192. package/src/request-context.js +116 -36
  193. package/src/request-context.js.map +1 -1
  194. package/src/safe-reference.cjs +57 -0
  195. package/src/safe-reference.d.cts +25 -0
  196. package/src/safe-reference.d.ts +11 -0
  197. package/src/safe-reference.js +46 -0
  198. package/src/safe-reference.js.map +1 -0
  199. package/src/secrets/contract.d.ts +99 -0
  200. package/src/secrets/contract.js +238 -0
  201. package/src/secrets/contract.js.map +1 -0
  202. package/src/secrets/index.d.ts +4 -0
  203. package/src/secrets/index.js +5 -0
  204. package/src/secrets/index.js.map +1 -0
  205. package/src/secrets/observability.d.ts +14 -0
  206. package/src/secrets/observability.js +100 -0
  207. package/src/secrets/observability.js.map +1 -0
  208. package/src/secrets/personal.d.ts +48 -0
  209. package/src/secrets/personal.js +332 -0
  210. package/src/secrets/personal.js.map +1 -0
  211. package/src/secrets/resolver.d.ts +125 -0
  212. package/src/secrets/resolver.js +602 -0
  213. package/src/secrets/resolver.js.map +1 -0
  214. package/src/secrets/sensitive-patterns.cjs +84 -0
  215. package/src/secrets/sensitive-patterns.d.cts +62 -0
  216. package/src/secrets/sensitive-patterns.d.ts +40 -0
  217. package/src/secrets/sensitive-patterns.js +60 -0
  218. package/src/secrets/sensitive-patterns.js.map +1 -0
package/src/index.d.ts CHANGED
@@ -1,15 +1,21 @@
1
1
  export * from './auth.js';
2
2
  export * from './auth-session.js';
3
+ export * from './canonical-json.js';
3
4
  export * from './config.js';
5
+ export * from './deterministic-order.js';
4
6
  export * from './events.js';
5
7
  export * from './frontend.js';
6
8
  export * from './hosts.js';
7
9
  export * from './logging.js';
8
10
  export * from './lambda.js';
9
11
  export * from './observability.js';
12
+ export * from './performance/index.js';
10
13
  export * from './request-context.js';
14
+ export * from './reliability/index.js';
11
15
  export * from './response.js';
16
+ export * from './safe-reference.js';
17
+ export * from './secrets/sensitive-patterns.js';
12
18
  export declare const runtimePackage: {
13
- readonly exports: readonly ["@empire-builder-kit/runtime/auth", "@empire-builder-kit/runtime/auth-backend", "@empire-builder-kit/runtime/auth-web", "@empire-builder-kit/runtime/auth-session", "@empire-builder-kit/runtime/config", "@empire-builder-kit/runtime/events", "@empire-builder-kit/runtime/frontend", "@empire-builder-kit/runtime/hosts", "@empire-builder-kit/runtime/request-context", "@empire-builder-kit/runtime/logging", "@empire-builder-kit/runtime/lambda", "@empire-builder-kit/runtime/observability", "@empire-builder-kit/runtime/response"];
19
+ readonly exports: readonly ["@empire-builder-kit/runtime/api-client", "@empire-builder-kit/runtime/api-contract", "@empire-builder-kit/runtime/api-server", "@empire-builder-kit/runtime/async-work", "@empire-builder-kit/runtime/auth", "@empire-builder-kit/runtime/auth-backend", "@empire-builder-kit/runtime/auth-web", "@empire-builder-kit/runtime/auth-session", "@empire-builder-kit/runtime/authorization", "@empire-builder-kit/runtime/canonical-json", "@empire-builder-kit/runtime/config", "@empire-builder-kit/runtime/configuration", "@empire-builder-kit/runtime/configuration-rollout-evaluator", "@empire-builder-kit/runtime/configuration-rollout-key", "@empire-builder-kit/runtime/data-lifecycle", "@empire-builder-kit/runtime/database", "@empire-builder-kit/runtime/deterministic-order", "@empire-builder-kit/runtime/events", "@empire-builder-kit/runtime/frontend", "@empire-builder-kit/runtime/hosts", "@empire-builder-kit/runtime/request-context", "@empire-builder-kit/runtime/reliability", "@empire-builder-kit/runtime/logging", "@empire-builder-kit/runtime/lambda", "@empire-builder-kit/runtime/observability", "@empire-builder-kit/runtime/performance", "@empire-builder-kit/runtime/response", "@empire-builder-kit/runtime/safe-reference", "@empire-builder-kit/runtime/secret-contract", "@empire-builder-kit/runtime/secrets", "@empire-builder-kit/runtime/sensitive-patterns"];
14
20
  readonly name: "@empire-builder-kit/runtime";
15
21
  };
package/src/index.js CHANGED
@@ -1,29 +1,53 @@
1
1
  export * from './auth.js';
2
2
  export * from './auth-session.js';
3
+ export * from './canonical-json.js';
3
4
  export * from './config.js';
5
+ export * from './deterministic-order.js';
4
6
  export * from './events.js';
5
7
  export * from './frontend.js';
6
8
  export * from './hosts.js';
7
9
  export * from './logging.js';
8
10
  export * from './lambda.js';
9
11
  export * from './observability.js';
12
+ export * from './performance/index.js';
10
13
  export * from './request-context.js';
14
+ export * from './reliability/index.js';
11
15
  export * from './response.js';
16
+ export * from './safe-reference.js';
17
+ export * from './secrets/sensitive-patterns.js';
12
18
  export const runtimePackage = {
13
19
  exports: [
20
+ '@empire-builder-kit/runtime/api-client',
21
+ '@empire-builder-kit/runtime/api-contract',
22
+ '@empire-builder-kit/runtime/api-server',
23
+ '@empire-builder-kit/runtime/async-work',
14
24
  '@empire-builder-kit/runtime/auth',
15
25
  '@empire-builder-kit/runtime/auth-backend',
16
26
  '@empire-builder-kit/runtime/auth-web',
17
27
  '@empire-builder-kit/runtime/auth-session',
28
+ '@empire-builder-kit/runtime/authorization',
29
+ '@empire-builder-kit/runtime/canonical-json',
18
30
  '@empire-builder-kit/runtime/config',
31
+ '@empire-builder-kit/runtime/configuration',
32
+ '@empire-builder-kit/runtime/configuration-rollout-evaluator',
33
+ '@empire-builder-kit/runtime/configuration-rollout-key',
34
+ '@empire-builder-kit/runtime/data-lifecycle',
35
+ '@empire-builder-kit/runtime/database',
36
+ '@empire-builder-kit/runtime/deterministic-order',
19
37
  '@empire-builder-kit/runtime/events',
20
38
  '@empire-builder-kit/runtime/frontend',
21
39
  '@empire-builder-kit/runtime/hosts',
22
40
  '@empire-builder-kit/runtime/request-context',
41
+ '@empire-builder-kit/runtime/reliability',
23
42
  '@empire-builder-kit/runtime/logging',
24
43
  '@empire-builder-kit/runtime/lambda',
25
44
  '@empire-builder-kit/runtime/observability',
45
+ '@empire-builder-kit/runtime/performance',
26
46
  '@empire-builder-kit/runtime/response',
47
+ '@empire-builder-kit/runtime/safe-reference',
48
+ '@empire-builder-kit/runtime/secret-contract',
49
+ '@empire-builder-kit/runtime/secrets',
50
+ '@empire-builder-kit/runtime/sensitive-patterns',
27
51
  ],
28
52
  name: '@empire-builder-kit/runtime',
29
53
  };
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/runtime/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAE9B,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE;QACP,kCAAkC;QAClC,0CAA0C;QAC1C,sCAAsC;QACtC,0CAA0C;QAC1C,oCAAoC;QACpC,oCAAoC;QACpC,sCAAsC;QACtC,mCAAmC;QACnC,6CAA6C;QAC7C,qCAAqC;QACrC,oCAAoC;QACpC,2CAA2C;QAC3C,sCAAsC;KACvC;IACD,IAAI,EAAE,6BAA6B;CAC3B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/runtime/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAEhD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE;QACP,wCAAwC;QACxC,0CAA0C;QAC1C,wCAAwC;QACxC,wCAAwC;QACxC,kCAAkC;QAClC,0CAA0C;QAC1C,sCAAsC;QACtC,0CAA0C;QAC1C,2CAA2C;QAC3C,4CAA4C;QAC5C,oCAAoC;QACpC,2CAA2C;QAC3C,6DAA6D;QAC7D,uDAAuD;QACvD,4CAA4C;QAC5C,sCAAsC;QACtC,iDAAiD;QACjD,oCAAoC;QACpC,sCAAsC;QACtC,mCAAmC;QACnC,6CAA6C;QAC7C,yCAAyC;QACzC,qCAAqC;QACrC,oCAAoC;QACpC,2CAA2C;QAC3C,yCAAyC;QACzC,sCAAsC;QACtC,4CAA4C;QAC5C,6CAA6C;QAC7C,qCAAqC;QACrC,gDAAgD;KACjD;IACD,IAAI,EAAE,6BAA6B;CAC3B,CAAC"}
package/src/lambda.d.ts CHANGED
@@ -4,7 +4,11 @@ import { type AppResponse } from './response.js';
4
4
  export interface RuntimeHttpEvent {
5
5
  body?: string | null;
6
6
  headers?: Record<string, string | undefined> | null;
7
+ isBase64Encoded?: boolean;
8
+ pathParameters?: Record<string, string | undefined> | null;
9
+ queryStringParameters?: Record<string, string | undefined> | null;
7
10
  rawPath?: string;
11
+ rawQueryString?: string;
8
12
  requestContext?: {
9
13
  http?: {
10
14
  method?: string;
@@ -26,14 +30,16 @@ export interface RuntimeHttpHandlerInput<E extends RuntimeHttpEvent = RuntimeHtt
26
30
  logger: Logger;
27
31
  }
28
32
  export interface CreateHttpJsonHandlerOptions<T, E extends RuntimeHttpEvent = RuntimeHttpEvent> {
29
- app: string;
33
+ component: string;
34
+ feature: string;
30
35
  handle(input: RuntimeHttpHandlerInput<E>): Promise<T> | T;
31
36
  includeErrorDetails?: boolean;
32
37
  logger?: Logger;
33
38
  operation: string;
34
- service?: string;
39
+ slice: string;
35
40
  stage?: string;
36
41
  successStatus?: number;
42
+ workspace: string;
37
43
  }
38
44
  export type RuntimeHttpJsonHandler<E extends RuntimeHttpEvent = RuntimeHttpEvent> = (event: E) => Promise<RuntimeHttpJsonResponse>;
39
45
  export declare const lambdaContract: {
package/src/lambda.js CHANGED
@@ -1,26 +1,42 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { createLogger } from './logging.js';
3
3
  import { createRequestContext, toRequestHeaders, } from './request-context.js';
4
- import { createErrorResponse, createSuccessResponse, } from './response.js';
4
+ import { createErrorResponse, createSuccessResponse, isRuntimeError, RuntimeError, } from './response.js';
5
5
  export const lambdaContract = {
6
6
  defaultResponseFormat: 'json',
7
7
  exportPath: '@empire-builder-kit/runtime/lambda',
8
8
  packageName: '@empire-builder-kit/runtime',
9
9
  };
10
- function getHeader(headers, name) {
11
- if (!headers) {
12
- return undefined;
10
+ function normalizeHeaders(headers) {
11
+ const normalized = Object.create(null);
12
+ const names = new Set();
13
+ for (const [name, value] of Object.entries(headers !== null && headers !== void 0 ? headers : {})) {
14
+ const lowerName = name.toLowerCase();
15
+ if (names.has(lowerName)) {
16
+ throw new RuntimeError({
17
+ code: 'invalid_request',
18
+ expose: true,
19
+ message: 'Request headers must not repeat a case-insensitive name.',
20
+ retryable: false,
21
+ status: 400,
22
+ });
23
+ }
24
+ names.add(lowerName);
25
+ normalized[lowerName] = value;
13
26
  }
14
- const lowerName = name.toLowerCase();
15
- const entry = Object.entries(headers).find(([key]) => key.toLowerCase() === lowerName);
16
- return entry === null || entry === void 0 ? void 0 : entry[1];
27
+ return normalized;
28
+ }
29
+ function getHeader(headers, name) {
30
+ return headers === null || headers === void 0 ? void 0 : headers[name.toLowerCase()];
17
31
  }
18
32
  function resolveStage(stage) {
19
33
  const resolved = stage !== null && stage !== void 0 ? stage : process.env['EBK_STAGE'];
20
- if (resolved === undefined || resolved.trim() === '') {
21
- throw new Error('EBK runtime stage is required. Pass options.stage or set EBK_STAGE.');
34
+ if (resolved === undefined ||
35
+ resolved !== resolved.trim() ||
36
+ !/^[A-Za-z0-9._:/-]{1,128}$/.test(resolved)) {
37
+ throw new Error('EBK runtime stage must be a bounded machine-readable token. Pass options.stage or set EBK_STAGE.');
22
38
  }
23
- return resolved.trim();
39
+ return resolved;
24
40
  }
25
41
  function createResponseMeta(context) {
26
42
  return {
@@ -42,43 +58,85 @@ export function toHttpJsonResponse(response) {
42
58
  };
43
59
  }
44
60
  export function createHttpJsonHandler(options) {
45
- var _a, _b;
61
+ var _a;
46
62
  const stage = resolveStage(options.stage);
63
+ const operationLabel = options.operation.startsWith(`${options.slice}.`)
64
+ ? options.operation
65
+ : `${options.slice}.${options.operation}`;
47
66
  const baseLogger = (_a = options.logger) !== null && _a !== void 0 ? _a : createLogger({
48
- app: options.app,
49
- service: (_b = options.service) !== null && _b !== void 0 ? _b : options.operation,
67
+ component: options.component,
68
+ feature: options.feature,
69
+ operation: options.operation,
70
+ slice: options.slice,
50
71
  stage,
72
+ workspace: options.workspace,
51
73
  });
52
74
  return (event) => __awaiter(this, void 0, void 0, function* () {
53
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
54
- const requestId = (_a = getHeader(event.headers, 'x-request-id')) !== null && _a !== void 0 ? _a : (_b = event.requestContext) === null || _b === void 0 ? void 0 : _b.requestId;
75
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
76
+ let normalizedHeaders;
77
+ try {
78
+ // Reject ambiguous input before request context, authorization, or
79
+ // operation parsing can consume a case-selected header value.
80
+ normalizedHeaders = normalizeHeaders(event.headers);
81
+ }
82
+ catch (error) {
83
+ const context = createRequestContext({
84
+ metadata: {
85
+ method: (_b = (_a = event.requestContext) === null || _a === void 0 ? void 0 : _a.http) === null || _b === void 0 ? void 0 : _b.method,
86
+ },
87
+ operation: options.operation,
88
+ requestId: (_c = event.requestContext) === null || _c === void 0 ? void 0 : _c.requestId,
89
+ slice: options.slice,
90
+ source: 'http',
91
+ stage,
92
+ });
93
+ const requestLogger = baseLogger.child({
94
+ component: options.component,
95
+ context,
96
+ feature: options.feature,
97
+ operation: options.operation,
98
+ });
99
+ const response = createErrorResponse(error, {
100
+ includeDetails: options.includeErrorDetails,
101
+ meta: createResponseMeta(context),
102
+ });
103
+ requestLogger.error(`${operationLabel} request failed`, {
104
+ attributes: {
105
+ httpStatus: response.status,
106
+ },
107
+ error,
108
+ errorMessageIsSafe: isRuntimeError(error) && error.expose,
109
+ outcome: 'failure',
110
+ });
111
+ const httpResponse = toHttpJsonResponse(response);
112
+ return Object.assign(Object.assign({}, httpResponse), { headers: Object.assign(Object.assign({}, httpResponse.headers), toRequestHeaders(context)) });
113
+ }
114
+ const requestId = (_d = getHeader(normalizedHeaders, 'x-request-id')) !== null && _d !== void 0 ? _d : (_e = event.requestContext) === null || _e === void 0 ? void 0 : _e.requestId;
55
115
  const context = createRequestContext({
56
- app: options.app,
57
- causationId: getHeader(event.headers, 'x-causation-id'),
58
- correlationId: (_c = getHeader(event.headers, 'x-correlation-id')) !== null && _c !== void 0 ? _c : requestId,
116
+ causationId: getHeader(normalizedHeaders, 'x-causation-id'),
117
+ correlationId: (_f = getHeader(normalizedHeaders, 'x-correlation-id')) !== null && _f !== void 0 ? _f : requestId,
59
118
  metadata: {
60
- method: (_e = (_d = event.requestContext) === null || _d === void 0 ? void 0 : _d.http) === null || _e === void 0 ? void 0 : _e.method,
61
- path: (_f = event.rawPath) !== null && _f !== void 0 ? _f : (_h = (_g = event.requestContext) === null || _g === void 0 ? void 0 : _g.http) === null || _h === void 0 ? void 0 : _h.path,
62
- sourceIp: (_k = (_j = event.requestContext) === null || _j === void 0 ? void 0 : _j.http) === null || _k === void 0 ? void 0 : _k.sourceIp,
63
- userAgent: (_m = (_l = event.requestContext) === null || _l === void 0 ? void 0 : _l.http) === null || _m === void 0 ? void 0 : _m.userAgent,
119
+ method: (_h = (_g = event.requestContext) === null || _g === void 0 ? void 0 : _g.http) === null || _h === void 0 ? void 0 : _h.method,
64
120
  },
65
121
  operation: options.operation,
66
122
  requestId,
123
+ slice: options.slice,
124
+ source: 'http',
67
125
  stage,
68
- tenantId: getHeader(event.headers, 'x-tenant-id'),
69
- traceParent: getHeader(event.headers, 'traceparent'),
70
- traceState: getHeader(event.headers, 'tracestate'),
126
+ tenantId: getHeader(normalizedHeaders, 'x-tenant-id'),
127
+ traceParent: getHeader(normalizedHeaders, 'traceparent'),
128
+ traceState: getHeader(normalizedHeaders, 'tracestate'),
71
129
  });
72
130
  const requestLogger = baseLogger.child({
131
+ component: options.component,
73
132
  context,
74
- service: (_o = options.service) !== null && _o !== void 0 ? _o : options.operation,
75
- stage,
133
+ feature: options.feature,
134
+ operation: options.operation,
76
135
  });
77
- requestLogger.info(`${options.app}.${options.operation} request received`, {
78
- metadata: {
79
- method: (_q = (_p = event.requestContext) === null || _p === void 0 ? void 0 : _p.http) === null || _q === void 0 ? void 0 : _q.method,
80
- path: (_r = event.rawPath) !== null && _r !== void 0 ? _r : (_t = (_s = event.requestContext) === null || _s === void 0 ? void 0 : _s.http) === null || _t === void 0 ? void 0 : _t.path,
81
- },
136
+ requestLogger.info(`${operationLabel} request received`, {
137
+ attributes: ((_k = (_j = event.requestContext) === null || _j === void 0 ? void 0 : _j.http) === null || _k === void 0 ? void 0 : _k.method)
138
+ ? { httpMethod: event.requestContext.http.method }
139
+ : undefined,
82
140
  });
83
141
  try {
84
142
  const data = yield options.handle({
@@ -90,10 +148,11 @@ export function createHttpJsonHandler(options) {
90
148
  meta: createResponseMeta(context),
91
149
  status: options.successStatus,
92
150
  });
93
- requestLogger.info(`${options.app}.${options.operation} request completed`, {
94
- metadata: {
95
- status: response.status,
151
+ requestLogger.info(`${operationLabel} request completed`, {
152
+ attributes: {
153
+ httpStatus: response.status,
96
154
  },
155
+ outcome: 'success',
97
156
  });
98
157
  const httpResponse = toHttpJsonResponse(response);
99
158
  return Object.assign(Object.assign({}, httpResponse), { headers: Object.assign(Object.assign({}, httpResponse.headers), toRequestHeaders(context)) });
@@ -103,11 +162,13 @@ export function createHttpJsonHandler(options) {
103
162
  includeDetails: options.includeErrorDetails,
104
163
  meta: createResponseMeta(context),
105
164
  });
106
- requestLogger.error(`${options.app}.${options.operation} request failed`, {
107
- error,
108
- metadata: {
109
- status: response.status,
165
+ requestLogger.error(`${operationLabel} request failed`, {
166
+ attributes: {
167
+ httpStatus: response.status,
110
168
  },
169
+ error,
170
+ errorMessageIsSafe: isRuntimeError(error) && error.expose,
171
+ outcome: 'failure',
111
172
  });
112
173
  const httpResponse = toHttpJsonResponse(response);
113
174
  return Object.assign(Object.assign({}, httpResponse), { headers: Object.assign(Object.assign({}, httpResponse.headers), toRequestHeaders(context)) });
package/src/lambda.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lambda.js","sourceRoot":"","sources":["../../../../packages/runtime/src/lambda.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lambda.js","sourceRoot":"","sources":["../../../../packages/runtime/src/lambda.ts"],"names":[],"mappings":"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"}
package/src/logging.d.ts CHANGED
@@ -1,69 +1,128 @@
1
- export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
2
- export type LogMetadata = Record<string, unknown>;
3
- export interface LoggerActor {
4
- id?: string;
5
- type?: string;
6
- }
7
- export interface LoggerContext {
8
- actor?: LoggerActor;
9
- correlationId?: string;
10
- metadata?: Record<string, string | number | boolean | null | undefined>;
11
- operation?: string;
12
- requestId?: string;
13
- source?: string;
14
- stage?: string;
15
- }
1
+ import { type RuntimeContext } from './request-context.js';
2
+ export declare const LOG_SCHEMA_VERSION: 1;
3
+ export declare const LOG_RECORD_LIMITS: {
4
+ readonly arrayItems: 32;
5
+ readonly attributeKeys: 64;
6
+ readonly attributeKeyLength: 128;
7
+ readonly attributeStringLength: 2048;
8
+ readonly attributeValues: 256;
9
+ readonly dimensionLength: 128;
10
+ readonly errorStackLength: 4096;
11
+ readonly messageLength: 512;
12
+ readonly nestingDepth: 4;
13
+ readonly recordBytes: number;
14
+ };
15
+ export type LogLevel = 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'FATAL';
16
+ export type LogOutcome = 'success' | 'failure' | 'cancelled' | 'unknown';
17
+ export type LogAttributes = Record<string, unknown>;
18
+ export type LoggerContext = Partial<RuntimeContext>;
19
+ export type LogAttributeValue = boolean | null | number | string | LogAttributeValue[] | {
20
+ [key: string]: LogAttributeValue;
21
+ };
16
22
  export interface SerializedError {
17
23
  code?: number | string;
18
24
  message: string;
19
25
  name: string;
20
26
  stack?: string;
21
27
  }
28
+ export interface LogTruncation {
29
+ circularValues?: number;
30
+ droppedKeys?: number;
31
+ recordKeysDropped?: number;
32
+ redactedValues?: number;
33
+ truncatedArrays?: number;
34
+ truncatedDepth?: number;
35
+ truncatedStrings?: number;
36
+ truncatedValues?: number;
37
+ unsupportedValues?: number;
38
+ }
22
39
  export interface LogEntry {
23
- app: string;
40
+ attributes?: Record<string, LogAttributeValue>;
41
+ causationId?: string;
42
+ component: string;
24
43
  correlationId?: string;
25
- error?: SerializedError;
44
+ eventId?: string;
45
+ eventType?: string;
46
+ feature: string;
26
47
  level: LogLevel;
27
48
  message: string;
28
- metadata?: LogMetadata;
49
+ operation: string;
50
+ outcome?: LogOutcome;
29
51
  requestId?: string;
30
- service?: string;
31
- stage?: string;
52
+ schemaVersion: typeof LOG_SCHEMA_VERSION;
53
+ slice: string;
54
+ spanId?: string;
55
+ stage: string;
32
56
  timestamp: string;
57
+ traceId?: string;
58
+ workspace: string;
33
59
  }
34
60
  export interface LogEventInput {
61
+ attributes?: LogAttributes;
35
62
  context?: LoggerContext;
36
63
  error?: unknown;
37
- metadata?: LogMetadata;
64
+ /**
65
+ * Only set this for a framework-owned/reviewed error whose message is
66
+ * explicitly classified safe for raw-log readers.
67
+ */
68
+ errorMessageIsSafe?: boolean;
69
+ outcome?: LogOutcome;
38
70
  }
39
71
  export interface ChildLoggerOptions {
72
+ attributes?: LogAttributes;
73
+ component?: string;
40
74
  context?: LoggerContext;
41
- metadata?: LogMetadata;
42
- service?: string;
43
- stage?: string;
75
+ feature?: string;
76
+ operation?: string;
44
77
  }
45
78
  export interface CreateLoggerOptions {
46
- app: string;
79
+ attributes?: LogAttributes;
80
+ component: string;
47
81
  context?: LoggerContext;
48
- metadata?: LogMetadata;
82
+ /**
83
+ * Development diagnostics may include bounded error messages and stacks.
84
+ * Production remains the safe default.
85
+ */
86
+ errorDetail?: 'development' | 'production';
87
+ feature: string;
88
+ minimumLevel?: LogLevel;
49
89
  now?: () => Date;
50
- service?: string;
51
- sink?: (entry: LogEntry) => void;
52
- stage?: string;
90
+ operation: string;
91
+ sink?: LogSink;
92
+ slice: string;
93
+ stage: string;
94
+ workspace: string;
53
95
  }
54
96
  export interface Logger {
55
97
  child(options?: ChildLoggerOptions): Logger;
56
- debug(message: string, input?: LogEventInput): LogEntry;
57
- error(message: string, input?: LogEventInput): LogEntry;
58
- info(message: string, input?: LogEventInput): LogEntry;
59
- log(level: LogLevel, message: string, input?: LogEventInput): LogEntry;
60
- warn(message: string, input?: LogEventInput): LogEntry;
98
+ debug(message: string, input?: LogEventInput): LogEntry | undefined;
99
+ error(message: string, input?: LogEventInput): LogEntry | undefined;
100
+ fatal(message: string, input?: LogEventInput): LogEntry | undefined;
101
+ info(message: string, input?: LogEventInput): LogEntry | undefined;
102
+ log(level: LogLevel, message: string, input?: LogEventInput): LogEntry | undefined;
103
+ trace(message: string, input?: LogEventInput): LogEntry | undefined;
104
+ warn(message: string, input?: LogEventInput): LogEntry | undefined;
105
+ }
106
+ export type LogSink = (entry: Readonly<LogEntry>) => void;
107
+ export interface LogWritable {
108
+ write(chunk: string): unknown;
109
+ }
110
+ export interface ProcessLogStreams {
111
+ stderr: LogWritable;
112
+ stdout: LogWritable;
113
+ }
114
+ export interface SerializeErrorOptions {
115
+ detail?: 'development' | 'production';
116
+ messageIsSafe?: boolean;
61
117
  }
62
118
  export declare const loggingContract: {
63
119
  readonly defaultFormat: "json";
64
120
  readonly exportPath: "@empire-builder-kit/runtime/logging";
65
121
  readonly packageName: "@empire-builder-kit/runtime";
122
+ readonly schemaVersion: 1;
66
123
  };
67
- export declare function serializeError(error: unknown): SerializedError;
68
- export declare function consoleSink(entry: LogEntry): void;
124
+ export declare function serializeError(error: unknown, options?: SerializeErrorOptions): SerializedError;
125
+ export declare function serializeLogRecord(entry: LogEntry): string;
126
+ export declare function createProcessLogSink(streams?: ProcessLogStreams): LogSink;
127
+ export declare const processLogSink: LogSink;
69
128
  export declare function createLogger(options: CreateLoggerOptions): Logger;