@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.
- package/NOTICE +6 -0
- package/package.json +93 -3
- package/src/api-contract/artifacts.d.ts +67 -0
- package/src/api-contract/artifacts.js +349 -0
- package/src/api-contract/artifacts.js.map +1 -0
- package/src/api-contract/client.d.ts +79 -0
- package/src/api-contract/client.js +561 -0
- package/src/api-contract/client.js.map +1 -0
- package/src/api-contract/errors.d.ts +7 -0
- package/src/api-contract/errors.js +11 -0
- package/src/api-contract/errors.js.map +1 -0
- package/src/api-contract/index.d.ts +9 -0
- package/src/api-contract/index.js +10 -0
- package/src/api-contract/index.js.map +1 -0
- package/src/api-contract/operation.d.ts +118 -0
- package/src/api-contract/operation.js +609 -0
- package/src/api-contract/operation.js.map +1 -0
- package/src/api-contract/schema.d.ts +81 -0
- package/src/api-contract/schema.js +313 -0
- package/src/api-contract/schema.js.map +1 -0
- package/src/api-contract/server.d.ts +77 -0
- package/src/api-contract/server.js +466 -0
- package/src/api-contract/server.js.map +1 -0
- package/src/async-work/contract.d.ts +17 -0
- package/src/async-work/contract.js +105 -0
- package/src/async-work/contract.js.map +1 -0
- package/src/async-work/idempotency.d.ts +123 -0
- package/src/async-work/idempotency.js +167 -0
- package/src/async-work/idempotency.js.map +1 -0
- package/src/async-work/index.d.ts +8 -0
- package/src/async-work/index.js +9 -0
- package/src/async-work/index.js.map +1 -0
- package/src/async-work/provider.d.ts +90 -0
- package/src/async-work/provider.js +155 -0
- package/src/async-work/provider.js.map +1 -0
- package/src/async-work/recovery.d.ts +103 -0
- package/src/async-work/recovery.js +291 -0
- package/src/async-work/recovery.js.map +1 -0
- package/src/async-work/schedule.d.ts +117 -0
- package/src/async-work/schedule.js +279 -0
- package/src/async-work/schedule.js.map +1 -0
- package/src/async-work/sqs.d.ts +133 -0
- package/src/async-work/sqs.js +280 -0
- package/src/async-work/sqs.js.map +1 -0
- package/src/async-work/webhook.d.ts +60 -0
- package/src/async-work/webhook.js +178 -0
- package/src/async-work/webhook.js.map +1 -0
- package/src/async-work/workflow.d.ts +98 -0
- package/src/async-work/workflow.js +225 -0
- package/src/async-work/workflow.js.map +1 -0
- package/src/auth-backend.d.ts +12 -2
- package/src/auth-backend.js +30 -18
- package/src/auth-backend.js.map +1 -1
- package/src/authorization/admission.d.ts +30 -0
- package/src/authorization/admission.js +87 -0
- package/src/authorization/admission.js.map +1 -0
- package/src/authorization/approval.d.ts +99 -0
- package/src/authorization/approval.js +249 -0
- package/src/authorization/approval.js.map +1 -0
- package/src/authorization/audit.d.ts +35 -0
- package/src/authorization/audit.js +35 -0
- package/src/authorization/audit.js.map +1 -0
- package/src/authorization/delegation.d.ts +149 -0
- package/src/authorization/delegation.js +401 -0
- package/src/authorization/delegation.js.map +1 -0
- package/src/authorization/errors.d.ts +32 -0
- package/src/authorization/errors.js +153 -0
- package/src/authorization/errors.js.map +1 -0
- package/src/authorization/evaluator.d.ts +39 -0
- package/src/authorization/evaluator.js +199 -0
- package/src/authorization/evaluator.js.map +1 -0
- package/src/authorization/index.d.ts +14 -0
- package/src/authorization/index.js +15 -0
- package/src/authorization/index.js.map +1 -0
- package/src/authorization/machine-token.d.ts +87 -0
- package/src/authorization/machine-token.js +201 -0
- package/src/authorization/machine-token.js.map +1 -0
- package/src/authorization/machine.d.ts +32 -0
- package/src/authorization/machine.js +41 -0
- package/src/authorization/machine.js.map +1 -0
- package/src/authorization/model.d.ts +112 -0
- package/src/authorization/model.js +112 -0
- package/src/authorization/model.js.map +1 -0
- package/src/canonical-json.cjs +157 -0
- package/src/canonical-json.d.cts +26 -0
- package/src/canonical-json.d.ts +18 -0
- package/src/canonical-json.js +125 -0
- package/src/canonical-json.js.map +1 -0
- package/src/configuration/contract.d.ts +107 -0
- package/src/configuration/contract.js +461 -0
- package/src/configuration/contract.js.map +1 -0
- package/src/configuration/index.d.ts +3 -0
- package/src/configuration/index.js +4 -0
- package/src/configuration/index.js.map +1 -0
- package/src/configuration/provider.d.ts +59 -0
- package/src/configuration/provider.js +198 -0
- package/src/configuration/provider.js.map +1 -0
- package/src/configuration/rollout-evaluator.cjs +54 -0
- package/src/configuration/rollout-evaluator.d.cts +26 -0
- package/src/configuration/rollout-evaluator.d.ts +18 -0
- package/src/configuration/rollout-evaluator.js +38 -0
- package/src/configuration/rollout-evaluator.js.map +1 -0
- package/src/configuration/rollout-key.cjs +38 -0
- package/src/configuration/rollout-key.d.cts +14 -0
- package/src/configuration/rollout-key.d.ts +10 -0
- package/src/configuration/rollout-key.js +26 -0
- package/src/configuration/rollout-key.js.map +1 -0
- package/src/configuration/rollout.d.ts +60 -0
- package/src/configuration/rollout.js +42 -0
- package/src/configuration/rollout.js.map +1 -0
- package/src/data-lifecycle/contract.d.ts +33 -0
- package/src/data-lifecycle/contract.js +118 -0
- package/src/data-lifecycle/contract.js.map +1 -0
- package/src/data-lifecycle/event.d.ts +28 -0
- package/src/data-lifecycle/event.js +76 -0
- package/src/data-lifecycle/event.js.map +1 -0
- package/src/data-lifecycle/evidence.d.ts +65 -0
- package/src/data-lifecycle/evidence.js +162 -0
- package/src/data-lifecycle/evidence.js.map +1 -0
- package/src/data-lifecycle/holds.d.ts +29 -0
- package/src/data-lifecycle/holds.js +124 -0
- package/src/data-lifecycle/holds.js.map +1 -0
- package/src/data-lifecycle/index.d.ts +8 -0
- package/src/data-lifecycle/index.js +9 -0
- package/src/data-lifecycle/index.js.map +1 -0
- package/src/data-lifecycle/policy.d.ts +16 -0
- package/src/data-lifecycle/policy.js +79 -0
- package/src/data-lifecycle/policy.js.map +1 -0
- package/src/data-lifecycle/restore.d.ts +90 -0
- package/src/data-lifecycle/restore.js +336 -0
- package/src/data-lifecycle/restore.js.map +1 -0
- package/src/data-lifecycle/retention.d.ts +57 -0
- package/src/data-lifecycle/retention.js +232 -0
- package/src/data-lifecycle/retention.js.map +1 -0
- package/src/data-lifecycle/rights.d.ts +171 -0
- package/src/data-lifecycle/rights.js +533 -0
- package/src/data-lifecycle/rights.js.map +1 -0
- package/src/database.d.ts +36 -0
- package/src/database.js +119 -0
- package/src/database.js.map +1 -0
- package/src/deterministic-order.cjs +16 -0
- package/src/deterministic-order.d.cts +9 -0
- package/src/deterministic-order.d.ts +7 -0
- package/src/deterministic-order.js +10 -0
- package/src/deterministic-order.js.map +1 -0
- package/src/events.d.ts +28 -19
- package/src/events.js +171 -66
- package/src/events.js.map +1 -1
- package/src/index.d.ts +7 -1
- package/src/index.js +24 -0
- package/src/index.js.map +1 -1
- package/src/lambda.d.ts +8 -2
- package/src/lambda.js +100 -39
- package/src/lambda.js.map +1 -1
- package/src/logging.d.ts +95 -36
- package/src/logging.js +460 -62
- package/src/logging.js.map +1 -1
- package/src/observability.d.ts +80 -18
- package/src/observability.js +252 -61
- package/src/observability.js.map +1 -1
- package/src/performance/index.d.ts +1 -0
- package/src/performance/index.js +2 -0
- package/src/performance/index.js.map +1 -0
- package/src/performance/protected-load-endpoint.d.ts +140 -0
- package/src/performance/protected-load-endpoint.js +462 -0
- package/src/performance/protected-load-endpoint.js.map +1 -0
- package/src/rds-global-ca-bundle.d.ts +1 -0
- package/src/rds-global-ca-bundle.js +2742 -0
- package/src/rds-global-ca-bundle.js.map +1 -0
- package/src/reliability/burn.d.ts +39 -0
- package/src/reliability/burn.js +102 -0
- package/src/reliability/burn.js.map +1 -0
- package/src/reliability/contract.d.ts +5 -0
- package/src/reliability/contract.js +317 -0
- package/src/reliability/contract.js.map +1 -0
- package/src/reliability/incident.d.ts +16 -0
- package/src/reliability/incident.js +562 -0
- package/src/reliability/incident.js.map +1 -0
- package/src/reliability/index.d.ts +5 -0
- package/src/reliability/index.js +6 -0
- package/src/reliability/index.js.map +1 -0
- package/src/reliability/model.d.ts +191 -0
- package/src/reliability/model.fixtures.d.ts +2 -0
- package/src/reliability/model.fixtures.js +57 -0
- package/src/reliability/model.fixtures.js.map +1 -0
- package/src/reliability/model.js +2 -0
- package/src/reliability/model.js.map +1 -0
- package/src/reliability/slo.d.ts +9 -0
- package/src/reliability/slo.js +74 -0
- package/src/reliability/slo.js.map +1 -0
- package/src/request-context.d.ts +57 -15
- package/src/request-context.js +116 -36
- package/src/request-context.js.map +1 -1
- package/src/safe-reference.cjs +57 -0
- package/src/safe-reference.d.cts +25 -0
- package/src/safe-reference.d.ts +11 -0
- package/src/safe-reference.js +46 -0
- package/src/safe-reference.js.map +1 -0
- package/src/secrets/contract.d.ts +99 -0
- package/src/secrets/contract.js +238 -0
- package/src/secrets/contract.js.map +1 -0
- package/src/secrets/index.d.ts +4 -0
- package/src/secrets/index.js +5 -0
- package/src/secrets/index.js.map +1 -0
- package/src/secrets/observability.d.ts +14 -0
- package/src/secrets/observability.js +100 -0
- package/src/secrets/observability.js.map +1 -0
- package/src/secrets/personal.d.ts +48 -0
- package/src/secrets/personal.js +332 -0
- package/src/secrets/personal.js.map +1 -0
- package/src/secrets/resolver.d.ts +125 -0
- package/src/secrets/resolver.js +602 -0
- package/src/secrets/resolver.js.map +1 -0
- package/src/secrets/sensitive-patterns.cjs +84 -0
- package/src/secrets/sensitive-patterns.d.cts +62 -0
- package/src/secrets/sensitive-patterns.d.ts +40 -0
- package/src/secrets/sensitive-patterns.js +60 -0
- 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-
|
|
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":"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"}
|
|
@@ -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 {};
|