@empire-builder-kit/runtime 1.0.0-beta.8 → 1.0.0-rc.1

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/NOTICE CHANGED
@@ -3,3 +3,9 @@ Copyright 2026 Gupta-Leary Technology Consulting LLC
3
3
 
4
4
  This product includes software developed by Gupta-Leary Technology Consulting
5
5
  LLC and its contributors.
6
+
7
+ This repository contains selected SST v4.17.1 source files solely in
8
+ `tools/consumer-smoke/fixtures/sst-v4.17.1/` for offline compatibility
9
+ verification. SST is Copyright (c) 2024 SST and licensed under the MIT License;
10
+ see that directory's `LICENSE` and `PROVENANCE.json`. This test-only snapshot is
11
+ not included in the published Empire Builder Kit packages.
package/package.json CHANGED
@@ -1,7 +1,17 @@
1
1
  {
2
2
  "name": "@empire-builder-kit/runtime",
3
- "version": "1.0.0-beta.8",
3
+ "version": "1.0.0-rc.1",
4
4
  "description": "Runtime contracts for Empire Builder Kit Foundation and product workloads",
5
+ "keywords": [
6
+ "aws",
7
+ "typescript",
8
+ "runtime",
9
+ "api",
10
+ "events",
11
+ "secrets",
12
+ "observability"
13
+ ],
14
+ "author": "Gupta-Leary Technology Consulting LLC",
5
15
  "license": "Apache-2.0",
6
16
  "type": "module",
7
17
  "main": "./src/index.js",
@@ -28,10 +38,63 @@
28
38
  "types": "./src/auth-web.d.ts",
29
39
  "default": "./src/auth-web.js"
30
40
  },
41
+ "./api-client": {
42
+ "types": "./src/api-contract/client.d.ts",
43
+ "default": "./src/api-contract/client.js"
44
+ },
45
+ "./api-contract": {
46
+ "types": "./src/api-contract/index.d.ts",
47
+ "default": "./src/api-contract/index.js"
48
+ },
49
+ "./api-server": {
50
+ "types": "./src/api-contract/server.d.ts",
51
+ "default": "./src/api-contract/server.js"
52
+ },
53
+ "./async-work": {
54
+ "types": "./src/async-work/index.d.ts",
55
+ "default": "./src/async-work/index.js"
56
+ },
57
+ "./authorization": {
58
+ "types": "./src/authorization/index.d.ts",
59
+ "default": "./src/authorization/index.js"
60
+ },
31
61
  "./config": {
32
62
  "types": "./src/config.d.ts",
33
63
  "default": "./src/config.js"
34
64
  },
65
+ "./configuration": {
66
+ "types": "./src/configuration/index.d.ts",
67
+ "default": "./src/configuration/index.js"
68
+ },
69
+ "./configuration-rollout-key": {
70
+ "types": "./src/configuration/rollout-key.d.cts",
71
+ "require": "./src/configuration/rollout-key.cjs",
72
+ "default": "./src/configuration/rollout-key.cjs"
73
+ },
74
+ "./configuration-rollout-evaluator": {
75
+ "types": "./src/configuration/rollout-evaluator.d.cts",
76
+ "require": "./src/configuration/rollout-evaluator.cjs",
77
+ "default": "./src/configuration/rollout-evaluator.cjs"
78
+ },
79
+ "./canonical-json": {
80
+ "types": "./src/canonical-json.d.ts",
81
+ "require": "./src/canonical-json.cjs",
82
+ "default": "./src/canonical-json.js"
83
+ },
84
+ "./deterministic-order": {
85
+ "types": "./src/deterministic-order.d.ts",
86
+ "require": "./src/deterministic-order.cjs",
87
+ "default": "./src/deterministic-order.js"
88
+ },
89
+ "./safe-reference": {
90
+ "types": "./src/safe-reference.d.ts",
91
+ "require": "./src/safe-reference.cjs",
92
+ "default": "./src/safe-reference.js"
93
+ },
94
+ "./database": {
95
+ "types": "./src/database.d.ts",
96
+ "default": "./src/database.js"
97
+ },
35
98
  "./events": {
36
99
  "types": "./src/events.d.ts",
37
100
  "default": "./src/events.js"
@@ -52,14 +115,39 @@
52
115
  "types": "./src/logging.d.ts",
53
116
  "default": "./src/logging.js"
54
117
  },
118
+ "./data-lifecycle": {
119
+ "types": "./src/data-lifecycle/index.d.ts",
120
+ "default": "./src/data-lifecycle/index.js"
121
+ },
55
122
  "./observability": {
56
123
  "types": "./src/observability.d.ts",
57
124
  "default": "./src/observability.js"
58
125
  },
126
+ "./performance": {
127
+ "types": "./src/performance/index.d.ts",
128
+ "default": "./src/performance/index.js"
129
+ },
59
130
  "./request-context": {
60
131
  "types": "./src/request-context.d.ts",
61
132
  "default": "./src/request-context.js"
62
133
  },
134
+ "./reliability": {
135
+ "types": "./src/reliability/index.d.ts",
136
+ "default": "./src/reliability/index.js"
137
+ },
138
+ "./secret-contract": {
139
+ "types": "./src/secrets/contract.d.ts",
140
+ "default": "./src/secrets/contract.js"
141
+ },
142
+ "./secrets": {
143
+ "types": "./src/secrets/index.d.ts",
144
+ "default": "./src/secrets/index.js"
145
+ },
146
+ "./sensitive-patterns": {
147
+ "types": "./src/secrets/sensitive-patterns.d.ts",
148
+ "require": "./src/secrets/sensitive-patterns.cjs",
149
+ "default": "./src/secrets/sensitive-patterns.js"
150
+ },
63
151
  "./response": {
64
152
  "types": "./src/response.d.ts",
65
153
  "default": "./src/response.js"
@@ -70,6 +158,7 @@
70
158
  "provenance": false
71
159
  },
72
160
  "dependencies": {
161
+ "@aws-sdk/client-secrets-manager": "^3.700.0",
73
162
  "jose": "^6.2.2",
74
163
  "tslib": "^2.3.0"
75
164
  },
@@ -85,5 +174,6 @@
85
174
  "engines": {
86
175
  "node": ">=22.12.0"
87
176
  },
88
- "module": "./src/index.js"
89
- }
177
+ "module": "./src/index.js",
178
+ "gitHead": "99840554fa37e586bd86c2136ff6bebbecc9a519"
179
+ }
@@ -0,0 +1,67 @@
1
+ import { API_CONTRACT_SCHEMA_VERSION, EBK_APP_V1_RESPONSE_PROFILE, type ApiContractDefinition, type ApiOperationDefinition } from './operation.js';
2
+ import type { JsonSchema202012 } from './schema.js';
3
+ export declare const OPENAPI_31_VERSION: "3.1.0";
4
+ export interface NormalizedApiProblemV1 {
5
+ code: string;
6
+ details?: JsonSchema202012;
7
+ message: string;
8
+ retryable: boolean;
9
+ status: number;
10
+ type: string;
11
+ }
12
+ export interface NormalizedApiOperationV1 {
13
+ authentication: ApiOperationDefinition['authentication'];
14
+ authorizationActions: readonly string[];
15
+ conditionalWrite?: ApiOperationDefinition['conditionalWrite'];
16
+ contractVersion: string;
17
+ feature: string;
18
+ idempotency?: ApiOperationDefinition['idempotency'];
19
+ lifecycle: ApiOperationDefinition['lifecycle'];
20
+ method: ApiOperationDefinition['method'];
21
+ operationId: string;
22
+ pagination?: ApiOperationDefinition['pagination'];
23
+ path: string;
24
+ problems: readonly NormalizedApiProblemV1[];
25
+ request?: {
26
+ body?: JsonSchema202012;
27
+ headers?: JsonSchema202012;
28
+ maxBodyBytes?: number;
29
+ path?: JsonSchema202012;
30
+ query?: JsonSchema202012;
31
+ };
32
+ response: {
33
+ body: JsonSchema202012;
34
+ status: number;
35
+ };
36
+ responseProfile: typeof EBK_APP_V1_RESPONSE_PROFILE;
37
+ slice: string;
38
+ summary: string;
39
+ }
40
+ export interface NormalizedApiContractV1 {
41
+ operations: readonly NormalizedApiOperationV1[];
42
+ schemaVersion: typeof API_CONTRACT_SCHEMA_VERSION;
43
+ slice: string;
44
+ title: string;
45
+ version: string;
46
+ }
47
+ export interface OpenApi31Document {
48
+ components: {
49
+ schemas: Readonly<Record<string, JsonSchema202012>>;
50
+ };
51
+ info: {
52
+ title: string;
53
+ version: string;
54
+ };
55
+ openapi: typeof OPENAPI_31_VERSION;
56
+ paths: Readonly<Record<string, Record<string, unknown>>>;
57
+ }
58
+ export interface ApiContractArtifacts {
59
+ normalized: NormalizedApiContractV1;
60
+ normalizedJson: string;
61
+ openApi: OpenApi31Document;
62
+ openApiJson: string;
63
+ }
64
+ export declare function serializeApiArtifact(value: unknown): string;
65
+ export declare function createNormalizedApiContract(contract: ApiContractDefinition): NormalizedApiContractV1;
66
+ export declare function createOpenApi31Document(contract: ApiContractDefinition): OpenApi31Document;
67
+ export declare function createApiContractArtifacts(contract: ApiContractDefinition): ApiContractArtifacts;
@@ -0,0 +1,349 @@
1
+ import { ApiContractError } from './errors.js';
2
+ import { API_CONTRACT_SCHEMA_VERSION, defineApiContract, } from './operation.js';
3
+ export const OPENAPI_31_VERSION = '3.1.0';
4
+ function compareStrings(left, right) {
5
+ return left < right ? -1 : left > right ? 1 : 0;
6
+ }
7
+ function canonicalize(value) {
8
+ if (Array.isArray(value)) {
9
+ return value.map(canonicalize);
10
+ }
11
+ if (value && typeof value === 'object') {
12
+ return Object.fromEntries(Object.entries(value)
13
+ .filter(([, entry]) => entry !== undefined)
14
+ .sort(([left], [right]) => compareStrings(left, right))
15
+ .map(([key, entry]) => [key, canonicalize(entry)]));
16
+ }
17
+ return value;
18
+ }
19
+ export function serializeApiArtifact(value) {
20
+ return `${JSON.stringify(canonicalize(value), null, 2)}\n`;
21
+ }
22
+ function normalizeSchema(schema) {
23
+ return canonicalize(schema);
24
+ }
25
+ function normalizeProblem(problem) {
26
+ return Object.assign(Object.assign({ code: problem.code }, (problem.details
27
+ ? { details: normalizeSchema(problem.details.jsonSchema) }
28
+ : {})), { message: problem.message, retryable: problem.retryable, status: problem.status, type: problem.type });
29
+ }
30
+ function normalizeOperation(operation) {
31
+ const request = operation.request
32
+ ? Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (operation.request.body
33
+ ? { body: normalizeSchema(operation.request.body.jsonSchema) }
34
+ : {})), (operation.request.headers
35
+ ? { headers: normalizeSchema(operation.request.headers.jsonSchema) }
36
+ : {})), (operation.request.maxBodyBytes === undefined
37
+ ? {}
38
+ : { maxBodyBytes: operation.request.maxBodyBytes })), (operation.request.path
39
+ ? { path: normalizeSchema(operation.request.path.jsonSchema) }
40
+ : {})), (operation.request.query
41
+ ? { query: normalizeSchema(operation.request.query.jsonSchema) }
42
+ : {})) : undefined;
43
+ return canonicalize({
44
+ authentication: operation.authentication,
45
+ authorizationActions: [...operation.authorizationActions].sort(compareStrings),
46
+ conditionalWrite: operation.conditionalWrite,
47
+ contractVersion: operation.contractVersion,
48
+ feature: operation.feature,
49
+ idempotency: operation.idempotency,
50
+ lifecycle: operation.lifecycle.status === 'deprecated'
51
+ ? Object.assign(Object.assign({}, operation.lifecycle), { deprecation: Object.assign(Object.assign({}, operation.lifecycle.deprecation), { knownConsumers: [
52
+ ...operation.lifecycle.deprecation.knownConsumers,
53
+ ].sort(compareStrings) }) }) : operation.lifecycle,
54
+ method: operation.method,
55
+ operationId: operation.operationId,
56
+ pagination: operation.pagination,
57
+ path: operation.path,
58
+ problems: [...operation.problems]
59
+ .sort((left, right) => compareStrings(left.code, right.code))
60
+ .map(normalizeProblem),
61
+ request,
62
+ response: {
63
+ body: normalizeSchema(operation.response.body.jsonSchema),
64
+ status: operation.response.status,
65
+ },
66
+ responseProfile: operation.responseProfile,
67
+ slice: operation.slice,
68
+ summary: operation.summary,
69
+ });
70
+ }
71
+ export function createNormalizedApiContract(contract) {
72
+ const validated = defineApiContract(contract);
73
+ return canonicalize({
74
+ operations: validated.operations.map(normalizeOperation),
75
+ schemaVersion: API_CONTRACT_SCHEMA_VERSION,
76
+ slice: validated.slice,
77
+ title: validated.title,
78
+ version: validated.version,
79
+ });
80
+ }
81
+ function schemaName(operationId, suffix) {
82
+ const encoded = [...operationId]
83
+ .map((character) => /^[A-Za-z0-9]$/.test(character)
84
+ ? character
85
+ : `_x${character.charCodeAt(0).toString(16)}_`)
86
+ .join('');
87
+ return `${encoded}_${suffix}`;
88
+ }
89
+ function responseMetadataSchema() {
90
+ return {
91
+ additionalProperties: false,
92
+ properties: {
93
+ correlationId: {
94
+ maxLength: 128,
95
+ pattern: '^[A-Za-z0-9._:/-]{1,128}$',
96
+ type: 'string',
97
+ },
98
+ requestId: {
99
+ maxLength: 128,
100
+ pattern: '^[A-Za-z0-9._:/-]{1,128}$',
101
+ type: 'string',
102
+ },
103
+ stage: {
104
+ maxLength: 128,
105
+ pattern: '^[A-Za-z0-9._:/-]{1,128}$',
106
+ type: 'string',
107
+ },
108
+ },
109
+ type: 'object',
110
+ };
111
+ }
112
+ function successEnvelope(operation, bodyReference) {
113
+ return {
114
+ additionalProperties: false,
115
+ properties: {
116
+ data: { $ref: bodyReference },
117
+ meta: responseMetadataSchema(),
118
+ ok: { const: true, type: 'boolean' },
119
+ status: { const: operation.response.status, type: 'integer' },
120
+ },
121
+ required: ['data', 'ok', 'status'],
122
+ type: 'object',
123
+ };
124
+ }
125
+ function errorEnvelope(problem) {
126
+ return {
127
+ additionalProperties: false,
128
+ properties: {
129
+ error: {
130
+ additionalProperties: false,
131
+ properties: Object.assign(Object.assign({ code: { const: problem.code, type: 'string' } }, (problem.details ? { details: problem.details } : {})), { message: ['invalid_request', 'method_not_allowed'].includes(problem.code)
132
+ ? { type: 'string' }
133
+ : { const: problem.message, type: 'string' }, retryable: { const: problem.retryable, type: 'boolean' } }),
134
+ required: ['code', 'message', 'retryable'],
135
+ type: 'object',
136
+ },
137
+ meta: responseMetadataSchema(),
138
+ ok: { const: false, type: 'boolean' },
139
+ status: { const: problem.status, type: 'integer' },
140
+ },
141
+ required: ['error', 'ok', 'status'],
142
+ type: 'object',
143
+ };
144
+ }
145
+ const frameworkProblems = [
146
+ {
147
+ code: 'invalid_request',
148
+ message: 'The request is invalid.',
149
+ retryable: false,
150
+ status: 400,
151
+ type: 'https://empirebuilderkit.dev/problems/invalid-request',
152
+ },
153
+ {
154
+ code: 'method_not_allowed',
155
+ message: 'The request method is not allowed.',
156
+ retryable: false,
157
+ status: 405,
158
+ type: 'https://empirebuilderkit.dev/problems/method-not-allowed',
159
+ },
160
+ {
161
+ code: 'internal_error',
162
+ message: 'Internal server error',
163
+ retryable: false,
164
+ status: 500,
165
+ type: 'https://empirebuilderkit.dev/problems/internal-error',
166
+ },
167
+ ];
168
+ function operationParameters(operation) {
169
+ var _a, _b;
170
+ const parameters = [];
171
+ for (const [location, parameterLocation] of [
172
+ ['path', 'path'],
173
+ ['query', 'query'],
174
+ ['headers', 'header'],
175
+ ]) {
176
+ const schema = (_a = operation.request) === null || _a === void 0 ? void 0 : _a[location];
177
+ if (!schema)
178
+ continue;
179
+ if (schema.type !== 'object' || !schema.properties) {
180
+ throw new ApiContractError('api-contract-invalid', `${operation.operationId} ${location} parameters must use an object schema.`);
181
+ }
182
+ const required = new Set((_b = schema.required) !== null && _b !== void 0 ? _b : []);
183
+ for (const [name, property] of Object.entries(schema.properties).sort(([left], [right]) => compareStrings(left, right))) {
184
+ parameters.push({
185
+ in: parameterLocation,
186
+ name,
187
+ required: parameterLocation === 'path' || required.has(name),
188
+ schema: property,
189
+ });
190
+ }
191
+ }
192
+ const pathNames = [
193
+ ...operation.path.matchAll(/\{([a-z][A-Za-z0-9]*)\}/g),
194
+ ].map((match) => match[1]);
195
+ const declaredPathNames = parameters
196
+ .filter((parameter) => parameter['in'] === 'path')
197
+ .map((parameter) => String(parameter['name']));
198
+ if (JSON.stringify([...pathNames].sort(compareStrings)) !==
199
+ JSON.stringify([...declaredPathNames].sort(compareStrings))) {
200
+ throw new ApiContractError('api-contract-invalid', `${operation.operationId} path template parameters must exactly match its path schema.`);
201
+ }
202
+ if (operation.idempotency) {
203
+ parameters.push({
204
+ in: 'header',
205
+ name: operation.idempotency.keyHeader,
206
+ required: operation.idempotency.required,
207
+ schema: {
208
+ maxLength: operation.idempotency.maxKeyLength,
209
+ minLength: 1,
210
+ pattern: '^[A-Za-z0-9._:/-]+$',
211
+ type: 'string',
212
+ },
213
+ });
214
+ }
215
+ if (operation.conditionalWrite) {
216
+ parameters.push({
217
+ in: 'header',
218
+ name: operation.conditionalWrite.requestHeader,
219
+ required: operation.conditionalWrite.required,
220
+ schema: {
221
+ maxLength: 512,
222
+ minLength: 2,
223
+ pattern: '^"[!#-~]*"$',
224
+ type: 'string',
225
+ },
226
+ });
227
+ }
228
+ return parameters;
229
+ }
230
+ function openApiResponseHeaders(options = {}) {
231
+ return Object.assign(Object.assign(Object.assign({}, (options.etag
232
+ ? {
233
+ etag: {
234
+ description: 'Declared optimistic-concurrency entity tag',
235
+ required: true,
236
+ schema: {
237
+ maxLength: 512,
238
+ minLength: 2,
239
+ pattern: '^"[!#-~]*"$',
240
+ type: 'string',
241
+ },
242
+ },
243
+ }
244
+ : {})), (options.retryAfter
245
+ ? {
246
+ 'retry-after': {
247
+ description: 'Bounded server retry guidance',
248
+ schema: { maxLength: 512, minLength: 1, type: 'string' },
249
+ },
250
+ }
251
+ : {})), { 'x-correlation-id': {
252
+ description: 'Safe request correlation identifier',
253
+ schema: {
254
+ maxLength: 128,
255
+ pattern: '^[A-Za-z0-9._:/-]{1,128}$',
256
+ type: 'string',
257
+ },
258
+ }, 'x-request-id': {
259
+ description: 'Safe request identifier',
260
+ schema: {
261
+ maxLength: 128,
262
+ pattern: '^[A-Za-z0-9._:/-]{1,128}$',
263
+ type: 'string',
264
+ },
265
+ } });
266
+ }
267
+ export function createOpenApi31Document(contract) {
268
+ var _a, _b, _c, _d;
269
+ var _e;
270
+ const normalized = createNormalizedApiContract(contract);
271
+ const schemas = {};
272
+ const paths = {};
273
+ for (const operation of normalized.operations) {
274
+ const responseName = schemaName(operation.operationId, 'response_body');
275
+ schemas[responseName] = operation.response.body;
276
+ const requestName = schemaName(operation.operationId, 'request_body');
277
+ if ((_a = operation.request) === null || _a === void 0 ? void 0 : _a.body) {
278
+ schemas[requestName] = operation.request.body;
279
+ }
280
+ const responses = {
281
+ [String(operation.response.status)]: {
282
+ content: {
283
+ 'application/json': {
284
+ schema: successEnvelope(operation, `#/components/schemas/${responseName}`),
285
+ },
286
+ },
287
+ description: 'Declared successful response',
288
+ headers: openApiResponseHeaders({
289
+ etag: Boolean(operation.conditionalWrite),
290
+ }),
291
+ },
292
+ };
293
+ const problemsByStatus = new Map();
294
+ for (const problem of [...operation.problems, ...frameworkProblems]) {
295
+ const problems = (_b = problemsByStatus.get(problem.status)) !== null && _b !== void 0 ? _b : [];
296
+ problems.push(problem);
297
+ problemsByStatus.set(problem.status, problems);
298
+ }
299
+ for (const [status, problems] of [...problemsByStatus.entries()].sort(([left], [right]) => left - right)) {
300
+ responses[String(status)] = {
301
+ content: {
302
+ 'application/json': {
303
+ schema: problems.length === 1
304
+ ? errorEnvelope(problems[0])
305
+ : { oneOf: problems.map(errorEnvelope) },
306
+ },
307
+ },
308
+ description: 'Declared error response',
309
+ headers: openApiResponseHeaders({
310
+ retryAfter: problems.some(({ retryable }) => retryable),
311
+ }),
312
+ };
313
+ }
314
+ const parameters = operationParameters(operation);
315
+ const path = ((_c = paths[_e = operation.path]) !== null && _c !== void 0 ? _c : (paths[_e] = {}));
316
+ path[operation.method.toLowerCase()] = canonicalize(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (operation.lifecycle.status === 'deprecated'
317
+ ? { deprecated: true }
318
+ : {})), { operationId: operation.operationId }), (parameters.length > 0 ? { parameters } : {})), (((_d = operation.request) === null || _d === void 0 ? void 0 : _d.body)
319
+ ? {
320
+ requestBody: {
321
+ content: {
322
+ 'application/json': {
323
+ schema: { $ref: `#/components/schemas/${requestName}` },
324
+ },
325
+ },
326
+ required: true,
327
+ 'x-ebk-max-body-bytes': operation.request.maxBodyBytes,
328
+ },
329
+ }
330
+ : {})), { responses, summary: operation.summary, 'x-ebk-authentication': operation.authentication, 'x-ebk-authorization-actions': operation.authorizationActions, 'x-ebk-conditional-write': operation.conditionalWrite, 'x-ebk-contract-version': operation.contractVersion, 'x-ebk-feature': operation.feature, 'x-ebk-idempotency': operation.idempotency, 'x-ebk-lifecycle': operation.lifecycle, 'x-ebk-pagination': operation.pagination, 'x-ebk-problems': operation.problems, 'x-ebk-response-profile': operation.responseProfile }));
331
+ }
332
+ return canonicalize({
333
+ components: { schemas },
334
+ info: { title: normalized.title, version: normalized.version },
335
+ openapi: OPENAPI_31_VERSION,
336
+ paths,
337
+ });
338
+ }
339
+ export function createApiContractArtifacts(contract) {
340
+ const normalized = createNormalizedApiContract(contract);
341
+ const openApi = createOpenApi31Document(contract);
342
+ return {
343
+ normalized,
344
+ normalizedJson: serializeApiArtifact(normalized),
345
+ openApi,
346
+ openApiJson: serializeApiArtifact(openApi),
347
+ };
348
+ }
349
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/api-contract/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,2BAA2B,EAE3B,iBAAiB,GAIlB,MAAM,gBAAgB,CAAC;AAGxB,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAgB,CAAC;AAgEnD,SAAS,cAAc,CAAC,IAAY,EAAE,KAAa;IACjD,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;aAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;aAC1C,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACtD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,SAAS,eAAe,CAAC,MAAwB;IAC/C,OAAO,YAAY,CAAC,MAAM,CAAqB,CAAC;AAClD,CAAC;AAED,SAAS,gBAAgB,CACvB,OAA6B;IAE7B,qCACE,IAAI,EAAE,OAAO,CAAC,IAAI,IACf,CAAC,OAAO,CAAC,OAAO;QACjB,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAC1D,CAAC,CAAC,EAAE,CAAC,KACP,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,SAAS,EAAE,OAAO,CAAC,SAAS,EAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,IAAI,EAAE,OAAO,CAAC,IAAI,IAClB;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,SAAiC;IAEjC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO;QAC/B,CAAC,2EACM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI;YACxB,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YAC9D,CAAC,CAAC,EAAE,CAAC,GACJ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO;YAC3B,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACpE,CAAC,CAAC,EAAE,CAAC,GACJ,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS;YAC9C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,GAClD,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI;YACxB,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YAC9D,CAAC,CAAC,EAAE,CAAC,GACJ,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK;YACzB,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;YAChE,CAAC,CAAC,EAAE,CAAC,EAEX,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,YAAY,CAAC;QAClB,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,oBAAoB,EAAE,CAAC,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAC5D,cAAc,CACf;QACD,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,SAAS,EACP,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,YAAY;YACzC,CAAC,iCACM,SAAS,CAAC,SAAS,KACtB,WAAW,kCACN,SAAS,CAAC,SAAS,CAAC,WAAW,KAClC,cAAc,EAAE;wBACd,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,cAAc;qBAClD,CAAC,IAAI,CAAC,cAAc,CAAC,OAG5B,CAAC,CAAC,SAAS,CAAC,SAAS;QACzB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC;aAC9B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;aAC5D,GAAG,CAAC,gBAAgB,CAAC;QACxB,OAAO;QACP,QAAQ,EAAE;YACR,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACzD,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM;SAClC;QACD,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,OAAO,EAAE,SAAS,CAAC,OAAO;KAC3B,CAA6B,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAA+B;IAE/B,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,YAAY,CAAC;QAClB,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACxD,aAAa,EAAE,2BAA2B;QAC1C,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,OAAO,EAAE,SAAS,CAAC,OAAO;KAC3B,CAA4B,CAAC;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,WAAmB,EAAE,MAAc;IACrD,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,CAAC;SAC7B,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACjB,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;QAC7B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CACjD;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO;QACL,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,aAAa,EAAE;gBACb,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE,QAAQ;aACf;YACD,SAAS,EAAE;gBACT,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE,QAAQ;aACf;YACD,KAAK,EAAE;gBACL,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE,QAAQ;aACf;SACF;QACD,IAAI,EAAE,QAAQ;KACf,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,SAAmC,EACnC,aAAqB;IAErB,OAAO;QACL,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;YAC7B,IAAI,EAAE,sBAAsB,EAAE;YAC9B,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;YACpC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;SAC9D;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;QAClC,IAAI,EAAE,QAAQ;KACf,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAA+B;IACpD,OAAO;QACL,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,gCACR,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAC1C,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACxD,OAAO,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CACzD,OAAO,CAAC,IAAI,CACb;wBACC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACpB,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC9C,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GACzD;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC;gBAC1C,IAAI,EAAE,QAAQ;aACf;YACD,IAAI,EAAE,sBAAsB,EAAE;YAC9B,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;YACrC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;SACnD;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;QACnC,IAAI,EAAE,QAAQ;KACf,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAAsC;IAC3D;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,yBAAyB;QAClC,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,uDAAuD;KAC9D;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,oCAAoC;QAC7C,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,0DAA0D;KACjE;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,uBAAuB;QAChC,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,sDAAsD;KAC7D;CACF,CAAC;AAEF,SAAS,mBAAmB,CAC1B,SAAmC;;IAEnC,MAAM,UAAU,GAA8B,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI;QAC1C,CAAC,MAAM,EAAE,MAAM,CAAC;QAChB,CAAC,OAAO,EAAE,OAAO,CAAC;QAClB,CAAC,SAAS,EAAE,QAAQ,CAAC;KACb,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAA,SAAS,CAAC,OAAO,0CAAG,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACnD,MAAM,IAAI,gBAAgB,CACxB,sBAAsB,EACtB,GAAG,SAAS,CAAC,WAAW,IAAI,QAAQ,wCAAwC,CAC7E,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAA,MAAM,CAAC,QAAQ,mCAAI,EAAE,CAAC,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CACnE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CACjD,EAAE,CAAC;YACF,UAAU,CAAC,IAAI,CAAC;gBACd,EAAE,EAAE,iBAAiB;gBACrB,IAAI;gBACJ,QAAQ,EAAE,iBAAiB,KAAK,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5D,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG;QAChB,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACvD,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,iBAAiB,GAAG,UAAU;SACjC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC;SACjD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjD,IACE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAC3D,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,sBAAsB,EACtB,GAAG,SAAS,CAAC,WAAW,+DAA+D,CACxF,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1B,UAAU,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,SAAS;YACrC,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,QAAQ;YACxC,MAAM,EAAE;gBACN,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,YAAY;gBAC7C,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,qBAAqB;gBAC9B,IAAI,EAAE,QAAQ;aACf;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC/B,UAAU,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,SAAS,CAAC,gBAAgB,CAAC,aAAa;YAC9C,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,QAAQ;YAC7C,MAAM,EAAE;gBACN,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,aAAa;gBACtB,IAAI,EAAE,QAAQ;aACf;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,sBAAsB,CAC7B,UAAoD,EAAE;IAEtD,qDACK,CAAC,OAAO,CAAC,IAAI;QACd,CAAC,CAAC;YACE,IAAI,EAAE;gBACJ,WAAW,EAAE,4CAA4C;gBACzD,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,SAAS,EAAE,GAAG;oBACd,SAAS,EAAE,CAAC;oBACZ,OAAO,EAAE,aAAa;oBACtB,IAAI,EAAE,QAAQ;iBACf;aACF;SACF;QACH,CAAC,CAAC,EAAE,CAAC,GACJ,CAAC,OAAO,CAAC,UAAU;QACpB,CAAC,CAAC;YACE,aAAa,EAAE;gBACb,WAAW,EAAE,+BAA+B;gBAC5C,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;aACzD;SACF;QACH,CAAC,CAAC,EAAE,CAAC,KACP,kBAAkB,EAAE;YAClB,WAAW,EAAE,qCAAqC;YAClD,MAAM,EAAE;gBACN,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE,QAAQ;aACf;SACF,EACD,cAAc,EAAE;YACd,WAAW,EAAE,yBAAyB;YACtC,MAAM,EAAE;gBACN,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE,QAAQ;aACf;SACF,IACD;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAA+B;;;IAE/B,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,OAAO,GAAqC,EAAE,CAAC;IACrD,MAAM,KAAK,GAA4C,EAAE,CAAC;IAC1D,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACxE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChD,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACtE,IAAI,MAAA,SAAS,CAAC,OAAO,0CAAE,IAAI,EAAE,CAAC;YAC5B,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;QAChD,CAAC;QACD,MAAM,SAAS,GAA4B;YACzC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gBACnC,OAAO,EAAE;oBACP,kBAAkB,EAAE;wBAClB,MAAM,EAAE,eAAe,CACrB,SAAS,EACT,wBAAwB,YAAY,EAAE,CACvC;qBACF;iBACF;gBACD,WAAW,EAAE,8BAA8B;gBAC3C,OAAO,EAAE,sBAAsB,CAAC;oBAC9B,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;iBAC1C,CAAC;aACH;SACF,CAAC;QACF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAoC,CAAC;QACrE,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC;YACpE,MAAM,QAAQ,GAAG,MAAA,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC;YAC5D,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACnE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAClC,EAAE,CAAC;YACF,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG;gBAC1B,OAAO,EAAE;oBACP,kBAAkB,EAAE;wBAClB,MAAM,EACJ,QAAQ,CAAC,MAAM,KAAK,CAAC;4BACnB,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;4BAC5B,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;qBAC7C;iBACF;gBACD,WAAW,EAAE,yBAAyB;gBACtC,OAAO,EAAE,sBAAsB,CAAC;oBAC9B,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC;iBACxD,CAAC;aACH,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,OAAC,KAAK,MAAC,SAAS,CAAC,IAAI,qCAApB,KAAK,OAAqB,EAAE,EAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,YAAY,2EAC9C,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,YAAY;YAC7C,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE;YACtB,CAAC,CAAC,EAAE,CAAC,KACP,WAAW,EAAE,SAAS,CAAC,WAAW,KAC/B,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAC7C,CAAC,CAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,IAAI;YACzB,CAAC,CAAC;gBACE,WAAW,EAAE;oBACX,OAAO,EAAE;wBACP,kBAAkB,EAAE;4BAClB,MAAM,EAAE,EAAE,IAAI,EAAE,wBAAwB,WAAW,EAAE,EAAE;yBACxD;qBACF;oBACD,QAAQ,EAAE,IAAI;oBACd,sBAAsB,EAAE,SAAS,CAAC,OAAO,CAAC,YAAY;iBACvD;aACF;YACH,CAAC,CAAC,EAAE,CAAC,KACP,SAAS,EACT,OAAO,EAAE,SAAS,CAAC,OAAO,EAC1B,sBAAsB,EAAE,SAAS,CAAC,cAAc,EAChD,6BAA6B,EAAE,SAAS,CAAC,oBAAoB,EAC7D,yBAAyB,EAAE,SAAS,CAAC,gBAAgB,EACrD,wBAAwB,EAAE,SAAS,CAAC,eAAe,EACnD,eAAe,EAAE,SAAS,CAAC,OAAO,EAClC,mBAAmB,EAAE,SAAS,CAAC,WAAW,EAC1C,iBAAiB,EAAE,SAAS,CAAC,SAAS,EACtC,kBAAkB,EAAE,SAAS,CAAC,UAAU,EACxC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,EACpC,wBAAwB,EAAE,SAAS,CAAC,eAAe,IACxB,CAAC;IAChC,CAAC;IACD,OAAO,YAAY,CAAC;QAClB,UAAU,EAAE,EAAE,OAAO,EAAE;QACvB,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE;QAC9D,OAAO,EAAE,kBAAkB;QAC3B,KAAK;KACN,CAAiC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,QAA+B;IAE/B,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO;QACL,UAAU;QACV,cAAc,EAAE,oBAAoB,CAAC,UAAU,CAAC;QAChD,OAAO;QACP,WAAW,EAAE,oBAAoB,CAAC,OAAO,CAAC;KAC3C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,79 @@
1
+ import type { RuntimeErrorShape } from '../response.js';
2
+ import { type ApiContractDefinition, type ApiOperationDefinition, type ApiRequestValue, type ApiResponseValue } from './operation.js';
3
+ export interface ApiClientContext {
4
+ causationId?: string;
5
+ correlationId?: string;
6
+ requestId?: string;
7
+ traceParent?: string;
8
+ traceState?: string;
9
+ }
10
+ export interface ApiClientInvocation<Operation extends ApiOperationDefinition> {
11
+ context?: ApiClientContext;
12
+ idempotencyKey?: string;
13
+ ifMatch?: string;
14
+ request: ApiRequestValue<Operation>;
15
+ signal?: AbortSignal;
16
+ timeoutMs?: number;
17
+ }
18
+ export interface ApiClientSafeHeaders {
19
+ correlationId?: string;
20
+ etag?: string;
21
+ requestId?: string;
22
+ retryAfter?: string;
23
+ }
24
+ export interface ApiClientResponseMetadata {
25
+ correlationId?: string;
26
+ requestId?: string;
27
+ stage?: string;
28
+ }
29
+ export interface ApiClientSuccess<T> {
30
+ data: T;
31
+ headers: ApiClientSafeHeaders;
32
+ kind: 'success';
33
+ meta?: ApiClientResponseMetadata;
34
+ ok: true;
35
+ status: number;
36
+ }
37
+ export interface ApiClientFailure {
38
+ error: RuntimeErrorShape & {
39
+ type?: string;
40
+ };
41
+ headers: ApiClientSafeHeaders;
42
+ kind: 'api' | 'invalid-response' | 'transport';
43
+ meta?: ApiClientResponseMetadata;
44
+ ok: false;
45
+ status: number;
46
+ }
47
+ export type ApiClientResult<T> = ApiClientFailure | ApiClientSuccess<T>;
48
+ export interface CreateApiClientOptions {
49
+ baseUrl: string;
50
+ credentials?: RequestCredentials;
51
+ fetch?: typeof globalThis.fetch;
52
+ headers?: () => Promise<Readonly<Record<string, string>>> | Readonly<Record<string, string>>;
53
+ maxResponseBytes?: number;
54
+ timeoutMs?: number;
55
+ }
56
+ export interface ApiClient<Operation extends ApiOperationDefinition> {
57
+ readonly operation: Operation;
58
+ invoke(input: ApiClientInvocation<Operation>): Promise<ApiClientResult<ApiResponseValue<Operation>>>;
59
+ }
60
+ type ContractOperation<Contract extends ApiContractDefinition> = Contract['operations'][number];
61
+ export type ApiContractClient<Contract extends ApiContractDefinition> = {
62
+ readonly [OperationId in ContractOperation<Contract>['operationId']]: ApiClient<Extract<ContractOperation<Contract>, {
63
+ readonly operationId: OperationId;
64
+ }>>;
65
+ };
66
+ export declare const apiClientRuntime: {
67
+ readonly exportPath: "@empire-builder-kit/runtime/api-client";
68
+ readonly packageName: "@empire-builder-kit/runtime";
69
+ readonly responseProfile: "ebk-app-v1";
70
+ };
71
+ export declare function createApiClient<Operation extends ApiOperationDefinition>(operationInput: Operation, options: CreateApiClientOptions): ApiClient<Operation>;
72
+ /**
73
+ * Builds a deterministic operation-ID keyed client directly from the
74
+ * authoritative contract. Adding an operation to the contract therefore adds
75
+ * it to the generated/client surface without another hand-maintained topology
76
+ * list.
77
+ */
78
+ export declare function createApiContractClient<const Contract extends ApiContractDefinition>(contractInput: Contract, options: CreateApiClientOptions): ApiContractClient<Contract>;
79
+ export {};