@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
@@ -0,0 +1,466 @@
1
+ import { __awaiter } from "tslib";
2
+ import { compareUtf16 } from '../deterministic-order.js';
3
+ import { createHash } from 'node:crypto';
4
+ import { createHttpJsonHandler, } from '../lambda.js';
5
+ import { isRuntimeError, RuntimeError } from '../response.js';
6
+ import { ApiContractError } from './errors.js';
7
+ import { defineApiOperation, } from './operation.js';
8
+ import { isCanonicalApiHttpHeaderValue, } from './schema.js';
9
+ export const apiServerRuntime = {
10
+ exportPath: '@empire-builder-kit/runtime/api-server',
11
+ packageName: '@empire-builder-kit/runtime',
12
+ responseProfile: 'ebk-app-v1',
13
+ };
14
+ function canonicalApiJson(value) {
15
+ if (Array.isArray(value))
16
+ return value.map(canonicalApiJson);
17
+ if (value && typeof value === 'object') {
18
+ return Object.fromEntries(Object.entries(value)
19
+ .filter(([, entry]) => entry !== undefined)
20
+ .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
21
+ .map(([name, entry]) => [name, canonicalApiJson(entry)]));
22
+ }
23
+ return value;
24
+ }
25
+ export function createApiRequestFingerprint(request) {
26
+ const serialized = JSON.stringify(canonicalApiJson(request));
27
+ if (serialized === undefined) {
28
+ throw new ApiContractError('api-request-invalid', 'API request cannot be canonically fingerprinted.');
29
+ }
30
+ return createHash('sha256').update(serialized).digest('hex');
31
+ }
32
+ function header(headers, name) {
33
+ const entry = Object.entries(headers !== null && headers !== void 0 ? headers : {}).find(([key]) => key.toLowerCase() === name);
34
+ return entry === null || entry === void 0 ? void 0 : entry[1];
35
+ }
36
+ function transportScalarType(schema) {
37
+ const type = schema === null || schema === void 0 ? void 0 : schema.type;
38
+ return ['boolean', 'integer', 'number', 'string'].includes(String(type))
39
+ ? type
40
+ : undefined;
41
+ }
42
+ function decodeTransportScalar(value, schema, label) {
43
+ const type = transportScalarType(schema);
44
+ if (type === 'string')
45
+ return value;
46
+ if (type === 'boolean') {
47
+ if (value === 'true')
48
+ return true;
49
+ if (value === 'false')
50
+ return false;
51
+ }
52
+ else if (type === 'integer' || type === 'number') {
53
+ const parsed = Number(value);
54
+ if (Number.isFinite(parsed) &&
55
+ String(parsed) === value &&
56
+ (type !== 'integer' || Number.isSafeInteger(parsed))) {
57
+ return parsed;
58
+ }
59
+ }
60
+ return requestFailure('invalid_request', `${label} does not use the canonical declared transport encoding.`, 400);
61
+ }
62
+ function decodeTransportRecord(schema, values, label, options) {
63
+ var _a;
64
+ const properties = (_a = schema.jsonSchema.properties) !== null && _a !== void 0 ? _a : {};
65
+ const result = Object.create(null);
66
+ for (const [name, entries] of [...values.entries()].sort(([left], [right]) => compareUtf16(left, right))) {
67
+ const property = properties[name];
68
+ if (!property) {
69
+ result[name] = entries.length === 1 ? entries[0] : [...entries];
70
+ continue;
71
+ }
72
+ if (property.type === 'array') {
73
+ if (!options.repeated ||
74
+ !options.repeatedValuesAreExact ||
75
+ !property.items ||
76
+ transportScalarType(property.items) === undefined) {
77
+ return requestFailure('invalid_request', `${label} ${name} has an ambiguous repeated transport encoding.`, 400);
78
+ }
79
+ result[name] = entries.map((entry, index) => decodeTransportScalar(entry, property.items, `${label} ${name}[${index}]`));
80
+ continue;
81
+ }
82
+ if (entries.length !== 1 || transportScalarType(property) === undefined) {
83
+ return requestFailure('invalid_request', `${label} ${name} has an ambiguous transport encoding.`, 400);
84
+ }
85
+ result[name] = decodeTransportScalar(entries[0], property, `${label} ${name}`);
86
+ }
87
+ return result;
88
+ }
89
+ function normalizedHeaders(headers, schema) {
90
+ var _a, _b;
91
+ const names = Object.keys((_a = schema.jsonSchema.properties) !== null && _a !== void 0 ? _a : {});
92
+ const declared = new Set(names.map((name) => name.toLowerCase()));
93
+ const values = new Map();
94
+ for (const [key, value] of Object.entries(headers !== null && headers !== void 0 ? headers : {})) {
95
+ const normalized = key.toLowerCase();
96
+ if (value === undefined || !declared.has(normalized))
97
+ continue;
98
+ if (!isCanonicalApiHttpHeaderValue(value)) {
99
+ return requestFailure('invalid_request', 'A declared request header is invalid.', 400);
100
+ }
101
+ const entries = (_b = values.get(normalized)) !== null && _b !== void 0 ? _b : [];
102
+ entries.push(value);
103
+ values.set(normalized, entries);
104
+ }
105
+ return decodeTransportRecord(schema, values, 'Request header', {
106
+ repeated: false,
107
+ repeatedValuesAreExact: false,
108
+ });
109
+ }
110
+ function decodeRawQueryComponent(value) {
111
+ try {
112
+ return decodeURIComponent(value.replace(/\+/g, ' '));
113
+ }
114
+ catch (_a) {
115
+ return requestFailure('invalid_request', 'The raw query string contains invalid percent encoding.', 400);
116
+ }
117
+ }
118
+ function rawQueryValues(rawQueryString) {
119
+ var _a;
120
+ if (new TextEncoder().encode(rawQueryString).byteLength > 64 * 1024 ||
121
+ rawQueryString.startsWith('?')) {
122
+ return requestFailure('invalid_request', 'The raw query string is invalid or exceeds its transport bound.', 400);
123
+ }
124
+ const values = new Map();
125
+ if (rawQueryString === '')
126
+ return values;
127
+ const segments = rawQueryString.split('&');
128
+ if (segments.length > 1024) {
129
+ return requestFailure('invalid_request', 'The raw query string contains too many values.', 400);
130
+ }
131
+ for (const segment of segments) {
132
+ const separator = segment.indexOf('=');
133
+ if (separator < 1) {
134
+ return requestFailure('invalid_request', 'The raw query string contains an ambiguous value.', 400);
135
+ }
136
+ const name = decodeRawQueryComponent(segment.slice(0, separator));
137
+ const value = decodeRawQueryComponent(segment.slice(separator + 1));
138
+ const entries = (_a = values.get(name)) !== null && _a !== void 0 ? _a : [];
139
+ entries.push(value);
140
+ values.set(name, entries);
141
+ }
142
+ return values;
143
+ }
144
+ function queryValues(event) {
145
+ var _a;
146
+ if (event.rawQueryString !== undefined) {
147
+ return {
148
+ exact: true,
149
+ values: rawQueryValues(event.rawQueryString),
150
+ };
151
+ }
152
+ return {
153
+ exact: false,
154
+ values: new Map(Object.entries((_a = event.queryStringParameters) !== null && _a !== void 0 ? _a : {})
155
+ .filter((entry) => entry[1] !== undefined)
156
+ .map(([name, value]) => [name, [value]])),
157
+ };
158
+ }
159
+ function normalizedQuery(event, schema) {
160
+ const query = queryValues(event);
161
+ return decodeTransportRecord(schema, query.values, 'Request query', {
162
+ repeated: true,
163
+ repeatedValuesAreExact: query.exact,
164
+ });
165
+ }
166
+ function normalizedPath(path, schema) {
167
+ if (Object.values(path !== null && path !== void 0 ? path : {}).some((value) => value === '.' || value === '..')) {
168
+ return requestFailure('invalid_request', 'Request path values cannot be URL dot segments.', 400);
169
+ }
170
+ return decodeTransportRecord(schema, new Map(Object.entries(path !== null && path !== void 0 ? path : {})
171
+ .filter((entry) => entry[1] !== undefined)
172
+ .map(([name, value]) => [name, [value]])), 'Request path', {
173
+ repeated: false,
174
+ repeatedValuesAreExact: false,
175
+ });
176
+ }
177
+ function requestFailure(code, message, status) {
178
+ throw new RuntimeError({
179
+ code,
180
+ expose: true,
181
+ message,
182
+ retryable: false,
183
+ status,
184
+ });
185
+ }
186
+ function parseJsonBody(event, maximumBytes) {
187
+ var _a, _b;
188
+ const contentType = (_b = (_a = header(event.headers, 'content-type')) === null || _a === void 0 ? void 0 : _a.split(';', 1)[0]) === null || _b === void 0 ? void 0 : _b.trim().toLowerCase();
189
+ if (contentType !== 'application/json') {
190
+ return requestFailure('invalid_request', 'The request must use application/json.', 400);
191
+ }
192
+ if (event.body === undefined || event.body === null || event.body === '') {
193
+ return requestFailure('invalid_request', 'The request body is required.', 400);
194
+ }
195
+ let body;
196
+ try {
197
+ if (event.isBase64Encoded) {
198
+ if (event.body.length > Math.ceil(maximumBytes / 3) * 4 + 4 ||
199
+ !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(event.body)) {
200
+ return requestFailure('invalid_request', 'The request body encoding is invalid.', 400);
201
+ }
202
+ body = new TextDecoder('utf-8', { fatal: true }).decode(Buffer.from(event.body, 'base64'));
203
+ }
204
+ else {
205
+ body = event.body;
206
+ }
207
+ }
208
+ catch (_c) {
209
+ return requestFailure('invalid_request', 'The request body encoding is invalid.', 400);
210
+ }
211
+ if (Buffer.byteLength(body, 'utf8') > maximumBytes) {
212
+ return requestFailure('invalid_request', 'The request body exceeds its declared bound.', 400);
213
+ }
214
+ try {
215
+ return JSON.parse(body);
216
+ }
217
+ catch (_d) {
218
+ return requestFailure('invalid_request', 'The request body is not valid JSON.', 400);
219
+ }
220
+ }
221
+ function requestSemantics(operation, event) {
222
+ var _a, _b;
223
+ const rawIdempotencyKey = header(event.headers, 'idempotency-key');
224
+ const rawIfMatch = header(event.headers, 'if-match');
225
+ const idempotencyKey = rawIdempotencyKey === null || rawIdempotencyKey === void 0 ? void 0 : rawIdempotencyKey.trim();
226
+ const ifMatch = rawIfMatch === null || rawIfMatch === void 0 ? void 0 : rawIfMatch.trim();
227
+ if (rawIdempotencyKey !== undefined) {
228
+ if (!operation.idempotency) {
229
+ return requestFailure('invalid_request', 'This operation does not declare idempotency.', 400);
230
+ }
231
+ if (!idempotencyKey ||
232
+ idempotencyKey !== rawIdempotencyKey ||
233
+ idempotencyKey.length > operation.idempotency.maxKeyLength ||
234
+ !/^[A-Za-z0-9._:/-]+$/.test(idempotencyKey)) {
235
+ return requestFailure('invalid_request', 'The idempotency key is invalid.', 400);
236
+ }
237
+ }
238
+ if (((_a = operation.idempotency) === null || _a === void 0 ? void 0 : _a.required) && rawIdempotencyKey === undefined) {
239
+ return requestFailure('invalid_request', 'This operation requires an Idempotency-Key value.', 400);
240
+ }
241
+ if (rawIfMatch !== undefined && !operation.conditionalWrite) {
242
+ return requestFailure('invalid_request', 'This operation does not declare conditional writes.', 400);
243
+ }
244
+ if (rawIfMatch !== undefined &&
245
+ (!ifMatch ||
246
+ ifMatch !== rawIfMatch ||
247
+ ifMatch.length > 512 ||
248
+ !/^"[\x21\x23-\x7e]*"$/.test(ifMatch))) {
249
+ return requestFailure('invalid_request', 'The If-Match value is invalid.', 400);
250
+ }
251
+ if (((_b = operation.conditionalWrite) === null || _b === void 0 ? void 0 : _b.required) && rawIfMatch === undefined) {
252
+ return requestFailure('invalid_request', 'This operation requires an If-Match value.', 400);
253
+ }
254
+ return Object.assign(Object.assign({}, (idempotencyKey ? { idempotencyKey } : {})), (ifMatch ? { ifMatch } : {}));
255
+ }
256
+ function parseRequest(operation, event) {
257
+ var _a, _b, _c, _d;
258
+ const method = (_c = (_b = (_a = event.requestContext) === null || _a === void 0 ? void 0 : _a.http) === null || _b === void 0 ? void 0 : _b.method) === null || _c === void 0 ? void 0 : _c.toUpperCase();
259
+ if (method !== operation.method) {
260
+ return requestFailure('method_not_allowed', 'The request method is not allowed for this operation.', 405);
261
+ }
262
+ try {
263
+ const request = operation.request;
264
+ const body = (request === null || request === void 0 ? void 0 : request.body)
265
+ ? request.body.parse(parseJsonBody(event, (_d = request.maxBodyBytes) !== null && _d !== void 0 ? _d :
266
+ /* normalized by defineApiOperation */
267
+ 256 * 1024), 'request.body')
268
+ : undefined;
269
+ if (!(request === null || request === void 0 ? void 0 : request.body) &&
270
+ event.body !== undefined &&
271
+ event.body !== null &&
272
+ event.body !== '') {
273
+ return requestFailure('invalid_request', 'This operation does not declare a request body.', 400);
274
+ }
275
+ return {
276
+ body,
277
+ headers: (request === null || request === void 0 ? void 0 : request.headers)
278
+ ? request.headers.parse(normalizedHeaders(event.headers, request.headers), 'request.headers')
279
+ : undefined,
280
+ path: (request === null || request === void 0 ? void 0 : request.path)
281
+ ? request.path.parse(normalizedPath(event.pathParameters, request.path), 'request.path')
282
+ : undefined,
283
+ query: (request === null || request === void 0 ? void 0 : request.query)
284
+ ? request.query.parse(normalizedQuery(event, request.query), 'request.query')
285
+ : undefined,
286
+ };
287
+ }
288
+ catch (error) {
289
+ if (error instanceof ApiContractError &&
290
+ error.classification === 'api-schema-validation-failed') {
291
+ return requestFailure('invalid_request', 'The request does not satisfy the operation contract.', 400);
292
+ }
293
+ throw error;
294
+ }
295
+ }
296
+ function normalizeDeclaredProblem(operation, error) {
297
+ if (!isRuntimeError(error))
298
+ throw error;
299
+ const problem = operation.problems.find(({ code }) => code === error.code);
300
+ if (!problem ||
301
+ error.status !== problem.status ||
302
+ error.retryable !== problem.retryable) {
303
+ throw new ApiContractError('api-response-invalid', `Operation ${operation.operationId} threw an undeclared or inconsistent problem.`);
304
+ }
305
+ let details;
306
+ if (error.details !== undefined) {
307
+ if (!problem.details) {
308
+ throw new ApiContractError('api-response-invalid', `Operation ${operation.operationId} returned undeclared problem details.`);
309
+ }
310
+ details = problem.details.project(error.details, 'response.error.details');
311
+ }
312
+ throw new RuntimeError({
313
+ code: problem.code,
314
+ details,
315
+ expose: true,
316
+ message: problem.message,
317
+ retryable: problem.retryable,
318
+ status: problem.status,
319
+ });
320
+ }
321
+ function projectRepresentation(operation, value) {
322
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
323
+ throw new ApiContractError('api-response-invalid', `Operation ${operation.operationId} returned an invalid representation result.`);
324
+ }
325
+ const record = value;
326
+ if (!Object.prototype.hasOwnProperty.call(record, 'response') ||
327
+ Object.keys(record).some((name) => !['etag', 'response'].includes(name))) {
328
+ throw new ApiContractError('api-response-invalid', `Operation ${operation.operationId} returned an invalid representation result.`);
329
+ }
330
+ const etag = record['etag'];
331
+ if (operation.conditionalWrite &&
332
+ (typeof etag !== 'string' ||
333
+ etag.length > 512 ||
334
+ !/^"[\x21\x23-\x7e]*"$/.test(etag))) {
335
+ throw new ApiContractError('api-response-invalid', `Operation ${operation.operationId} returned an invalid ETag.`);
336
+ }
337
+ if (!operation.conditionalWrite && etag !== undefined) {
338
+ throw new ApiContractError('api-response-invalid', `Operation ${operation.operationId} returned an undeclared ETag.`);
339
+ }
340
+ return Object.freeze(Object.assign(Object.assign({}, (typeof etag === 'string' ? { etag } : {})), { response: operation.response.body.project(record['response'], 'response.data') }));
341
+ }
342
+ export function createContractHttpJsonHandler(options) {
343
+ const operation = defineApiOperation(options.operation);
344
+ const authorize = options.authorize;
345
+ if (operation.authentication !== 'anonymous' && !authorize) {
346
+ throw new ApiContractError('api-authentication-required', `Operation ${operation.operationId} requires an authorization callback.`);
347
+ }
348
+ if (operation.authentication === 'anonymous' && authorize) {
349
+ throw new ApiContractError('api-contract-invalid', `Anonymous operation ${operation.operationId} cannot install an authorization callback.`);
350
+ }
351
+ const conditionalWrite = options.conditionalWrite;
352
+ if (operation.conditionalWrite && !conditionalWrite) {
353
+ throw new ApiContractError('api-contract-invalid', `Operation ${operation.operationId} requires a conditional-write adapter.`);
354
+ }
355
+ if (!operation.conditionalWrite && conditionalWrite) {
356
+ throw new ApiContractError('api-contract-invalid', `Operation ${operation.operationId} does not declare conditional writes.`);
357
+ }
358
+ const idempotency = options.idempotency;
359
+ if (operation.idempotency && !idempotency) {
360
+ throw new ApiContractError('api-contract-invalid', `Operation ${operation.operationId} requires an idempotency adapter.`);
361
+ }
362
+ if (!operation.idempotency && idempotency) {
363
+ throw new ApiContractError('api-contract-invalid', `Operation ${operation.operationId} does not declare idempotency.`);
364
+ }
365
+ const etags = new WeakMap();
366
+ const baseOptions = {
367
+ component: options.component,
368
+ feature: operation.feature,
369
+ includeErrorDetails: true,
370
+ logger: options.logger,
371
+ operation: operation.operationId,
372
+ slice: operation.slice,
373
+ stage: options.stage,
374
+ successStatus: operation.response.status,
375
+ workspace: options.workspace,
376
+ handle(_a) {
377
+ return __awaiter(this, arguments, void 0, function* ({ context, event, logger }) {
378
+ const request = parseRequest(operation, event);
379
+ const semantics = requestSemantics(operation, event);
380
+ try {
381
+ const principal = authorize
382
+ ? yield authorize({
383
+ context,
384
+ event,
385
+ logger,
386
+ operation: operation,
387
+ request,
388
+ semantics,
389
+ })
390
+ : undefined;
391
+ const handlerInput = {
392
+ context,
393
+ logger,
394
+ operation: operation,
395
+ principal,
396
+ request,
397
+ semantics,
398
+ };
399
+ const executeBusiness = () => __awaiter(this, void 0, void 0, function* () {
400
+ return operation.response.body.project(yield options.handle(handlerInput), 'response.data');
401
+ });
402
+ let businessExecution;
403
+ const executeBusinessOnce = () => {
404
+ businessExecution !== null && businessExecution !== void 0 ? businessExecution : (businessExecution = executeBusiness());
405
+ return businessExecution;
406
+ };
407
+ const executeRepresentation = () => __awaiter(this, void 0, void 0, function* () {
408
+ if (operation.conditionalWrite && conditionalWrite) {
409
+ return projectRepresentation(operation, yield conditionalWrite.execute(Object.assign(Object.assign({}, handlerInput), { contract: operation.conditionalWrite }), executeBusinessOnce));
410
+ }
411
+ return projectRepresentation(operation, {
412
+ response: yield executeBusinessOnce(),
413
+ });
414
+ });
415
+ let representationExecution;
416
+ const executeRepresentationOnce = () => {
417
+ representationExecution !== null && representationExecution !== void 0 ? representationExecution : (representationExecution = executeRepresentation());
418
+ return representationExecution;
419
+ };
420
+ let representation;
421
+ if (operation.idempotency && idempotency && semantics.idempotencyKey) {
422
+ const key = semantics.idempotencyKey;
423
+ const principalScope = yield idempotency.principalScope(handlerInput);
424
+ if (typeof principalScope !== 'string' ||
425
+ principalScope.length < 1 ||
426
+ principalScope.length > 256 ||
427
+ /[\r\n]/.test(principalScope)) {
428
+ throw new ApiContractError('api-contract-invalid', `Operation ${operation.operationId} produced an invalid idempotency principal scope.`);
429
+ }
430
+ representation = projectRepresentation(operation, yield idempotency.execute(Object.assign(Object.assign({}, handlerInput), { contract: operation.idempotency, fingerprint: createApiRequestFingerprint(operation.conditionalWrite && semantics.ifMatch
431
+ ? {
432
+ request,
433
+ semantics: { ifMatch: semantics.ifMatch },
434
+ }
435
+ : request), key, scope: `${operation.operationId}:${createHash('sha256')
436
+ .update(principalScope)
437
+ .digest('hex')}` }), executeRepresentationOnce));
438
+ }
439
+ else {
440
+ representation = yield executeRepresentationOnce();
441
+ }
442
+ if (representation.etag) {
443
+ etags.set(event, representation.etag);
444
+ }
445
+ return representation.response;
446
+ }
447
+ catch (error) {
448
+ return normalizeDeclaredProblem(operation, error);
449
+ }
450
+ });
451
+ },
452
+ };
453
+ const baseHandler = createHttpJsonHandler(baseOptions);
454
+ return (event) => __awaiter(this, void 0, void 0, function* () {
455
+ try {
456
+ const response = yield baseHandler(event);
457
+ const etagValue = etags.get(event);
458
+ return etagValue && response.statusCode === operation.response.status
459
+ ? Object.assign(Object.assign({}, response), { headers: Object.assign(Object.assign({}, response.headers), { etag: etagValue }) }) : response;
460
+ }
461
+ finally {
462
+ etags.delete(event);
463
+ }
464
+ });
465
+ }
466
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/api-contract/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type AsyncWorkFailureClassification = 'async-input-invalid' | 'async-idempotency-conflict' | 'async-idempotency-window-invalid' | 'async-adapter-outcome-invalid' | 'async-retry-exhausted' | 'async-report-invalid' | 'async-report-expired' | 'async-approval-required' | 'async-webhook-signature-invalid' | 'async-webhook-timestamp-invalid' | 'async-provider-outcome-unknown' | 'async-workflow-version-unsupported' | 'async-workflow-callback-invalid';
2
+ export declare class AsyncWorkRuntimeError extends Error {
3
+ readonly classification: AsyncWorkFailureClassification;
4
+ readonly pointer: string;
5
+ constructor(classification: AsyncWorkFailureClassification, pointer: string, message: string);
6
+ }
7
+ export declare function failAsyncWork(classification: AsyncWorkFailureClassification, pointer: string, message: string): never;
8
+ export declare function requireAsyncIdentifier(value: unknown, pointer: string): string;
9
+ export declare function requireAsyncCursor(value: unknown, pointer: string): string;
10
+ export declare function requireAsyncDigest(value: unknown, pointer: string): string;
11
+ export declare function requireCanonicalAsyncTimestamp(value: unknown, pointer: string): string;
12
+ export declare function requireAsyncInteger(value: unknown, pointer: string, minimum: number, maximum: number): number;
13
+ export declare function requireAsyncNumber(value: unknown, pointer: string, minimum: number, maximum: number): number;
14
+ export declare function canonicalAsyncJson(value: unknown): string;
15
+ export declare function asyncWorkDigest(value: unknown): string;
16
+ export declare function asyncWorkIdentity(namespace: string, values: readonly string[]): string;
17
+ export declare function compareAsyncStrings(left: string, right: string): number;
@@ -0,0 +1,105 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { canonicalJson, CanonicalJsonError } from '../canonical-json.js';
3
+ export class AsyncWorkRuntimeError extends Error {
4
+ constructor(classification, pointer, message) {
5
+ super(`${pointer}: ${message}`);
6
+ this.classification = classification;
7
+ this.pointer = pointer;
8
+ this.name = 'AsyncWorkRuntimeError';
9
+ }
10
+ }
11
+ export function failAsyncWork(classification, pointer, message) {
12
+ throw new AsyncWorkRuntimeError(classification, pointer, message);
13
+ }
14
+ const IDENTIFIER_PATTERN = /^[a-zA-Z0-9](?:[a-zA-Z0-9._:/-]{0,254}[a-zA-Z0-9])?$/;
15
+ const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;
16
+ const CURSOR_PATTERN = /^[A-Za-z0-9_-]{1,512}$/;
17
+ function containsControlCharacter(value) {
18
+ return Array.from(value).some((character) => {
19
+ var _a;
20
+ const point = (_a = character.codePointAt(0)) !== null && _a !== void 0 ? _a : 0;
21
+ return ((point >= 0 && point <= 0x1f) ||
22
+ (point >= 0x7f && point <= 0x9f) ||
23
+ point === 0x2028 ||
24
+ point === 0x2029);
25
+ });
26
+ }
27
+ export function requireAsyncIdentifier(value, pointer) {
28
+ if (typeof value !== 'string' ||
29
+ value.trim() !== value ||
30
+ value.length === 0 ||
31
+ value.length > 256 ||
32
+ containsControlCharacter(value) ||
33
+ !IDENTIFIER_PATTERN.test(value)) {
34
+ failAsyncWork('async-input-invalid', pointer, 'must be a bounded normalized identifier');
35
+ }
36
+ return value;
37
+ }
38
+ export function requireAsyncCursor(value, pointer) {
39
+ if (typeof value !== 'string' || !CURSOR_PATTERN.test(value)) {
40
+ failAsyncWork('async-input-invalid', pointer, 'must be an opaque cursor with at most 512 characters');
41
+ }
42
+ return value;
43
+ }
44
+ export function requireAsyncDigest(value, pointer) {
45
+ if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {
46
+ failAsyncWork('async-input-invalid', pointer, 'must be a sha256 digest');
47
+ }
48
+ return value;
49
+ }
50
+ export function requireCanonicalAsyncTimestamp(value, pointer) {
51
+ if (typeof value !== 'string' ||
52
+ value.length > 40 ||
53
+ !Number.isFinite(Date.parse(value)) ||
54
+ new Date(value).toISOString() !== value) {
55
+ failAsyncWork('async-input-invalid', pointer, 'must be a canonical ISO-8601 timestamp');
56
+ }
57
+ return value;
58
+ }
59
+ export function requireAsyncInteger(value, pointer, minimum, maximum) {
60
+ if (typeof value !== 'number' ||
61
+ !Number.isSafeInteger(value) ||
62
+ value < minimum ||
63
+ value > maximum) {
64
+ failAsyncWork('async-input-invalid', pointer, `must be a safe integer from ${minimum} through ${maximum}`);
65
+ }
66
+ return value;
67
+ }
68
+ export function requireAsyncNumber(value, pointer, minimum, maximum) {
69
+ if (typeof value !== 'number' ||
70
+ !Number.isFinite(value) ||
71
+ value < minimum ||
72
+ value > maximum) {
73
+ failAsyncWork('async-input-invalid', pointer, `must be a finite number from ${minimum} through ${maximum}`);
74
+ }
75
+ return value;
76
+ }
77
+ export function canonicalAsyncJson(value) {
78
+ try {
79
+ return canonicalJson(value);
80
+ }
81
+ catch (error) {
82
+ if (error instanceof CanonicalJsonError) {
83
+ failAsyncWork('async-input-invalid', error.path.replace(/^\$/, ''), error.message);
84
+ }
85
+ throw error;
86
+ }
87
+ }
88
+ export function asyncWorkDigest(value) {
89
+ return `sha256:${createHash('sha256')
90
+ .update(canonicalAsyncJson(value), 'utf8')
91
+ .digest('hex')}`;
92
+ }
93
+ export function asyncWorkIdentity(namespace, values) {
94
+ const hash = createHash('sha256').update(requireAsyncIdentifier(namespace, '/namespace'), 'utf8');
95
+ for (const [index, value] of values.entries()) {
96
+ hash
97
+ .update('\0', 'utf8')
98
+ .update(requireAsyncIdentifier(value, `/values/${index}`), 'utf8');
99
+ }
100
+ return `sha256:${hash.digest('hex')}`;
101
+ }
102
+ export function compareAsyncStrings(left, right) {
103
+ return left < right ? -1 : left > right ? 1 : 0;
104
+ }
105
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/async-work/contract.ts"],"names":[],"mappings":"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"}