@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.
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './protected-load-endpoint.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/performance/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
export declare const PROTECTED_LOAD_ENDPOINT_ADAPTERS: readonly [{
|
|
2
|
+
readonly capacityBound: "rate";
|
|
3
|
+
readonly cleanupPath: null;
|
|
4
|
+
readonly id: "ebk-api-lambda-v1";
|
|
5
|
+
readonly mutation: false;
|
|
6
|
+
readonly requestMethod: "GET";
|
|
7
|
+
readonly requestPath: "/__ebk/performance/api-lambda";
|
|
8
|
+
readonly scenarioId: "api-peak";
|
|
9
|
+
readonly saturationSignalRef: "runtime:nodejs-heap-utilization-percent";
|
|
10
|
+
readonly version: "1.0.0";
|
|
11
|
+
readonly workload: "api-lambda";
|
|
12
|
+
}, {
|
|
13
|
+
readonly capacityBound: "rate";
|
|
14
|
+
readonly cleanupPath: "/__ebk/performance/async-worker/cleanup";
|
|
15
|
+
readonly id: "ebk-async-worker-v1";
|
|
16
|
+
readonly mutation: true;
|
|
17
|
+
readonly requestMethod: "POST";
|
|
18
|
+
readonly requestPath: "/__ebk/performance/async-worker";
|
|
19
|
+
readonly scenarioId: "async-burst";
|
|
20
|
+
readonly saturationSignalRef: "database:protected-async-backlog-utilization-percent";
|
|
21
|
+
readonly version: "1.0.0";
|
|
22
|
+
readonly workload: "async-worker";
|
|
23
|
+
}, {
|
|
24
|
+
readonly capacityBound: "concurrency";
|
|
25
|
+
readonly cleanupPath: "/__ebk/performance/database/cleanup";
|
|
26
|
+
readonly id: "ebk-database-v1";
|
|
27
|
+
readonly mutation: true;
|
|
28
|
+
readonly requestMethod: "POST";
|
|
29
|
+
readonly requestPath: "/__ebk/performance/database";
|
|
30
|
+
readonly scenarioId: "database-cold-resume";
|
|
31
|
+
readonly saturationSignalRef: "database:connection-utilization-percent";
|
|
32
|
+
readonly version: "1.0.0";
|
|
33
|
+
readonly workload: "database";
|
|
34
|
+
}, {
|
|
35
|
+
readonly capacityBound: "concurrency";
|
|
36
|
+
readonly cleanupPath: "/__ebk/performance/service/cleanup";
|
|
37
|
+
readonly id: "ebk-service-v1";
|
|
38
|
+
readonly mutation: false;
|
|
39
|
+
readonly requestMethod: "GET";
|
|
40
|
+
readonly requestPath: "/__ebk/performance/service";
|
|
41
|
+
readonly scenarioId: "service-extension";
|
|
42
|
+
readonly saturationSignalRef: null;
|
|
43
|
+
readonly version: "1.0.0";
|
|
44
|
+
readonly workload: "service";
|
|
45
|
+
}];
|
|
46
|
+
export type ProtectedLoadEndpointAdapterId = (typeof PROTECTED_LOAD_ENDPOINT_ADAPTERS)[number]['id'];
|
|
47
|
+
export type ProtectedLoadEndpointStage = 'production' | 'staging';
|
|
48
|
+
export interface ProtectedLoadEndpointReleaseV1 {
|
|
49
|
+
candidateDigest: string;
|
|
50
|
+
releaseId: string;
|
|
51
|
+
releaseMaterialDigest: string;
|
|
52
|
+
sourceCommit: string;
|
|
53
|
+
}
|
|
54
|
+
export interface ProtectedLoadEndpointHmacKeyV1 {
|
|
55
|
+
id: string;
|
|
56
|
+
secret: string;
|
|
57
|
+
}
|
|
58
|
+
export interface ProtectedLoadEndpointTargetV1 {
|
|
59
|
+
accountFingerprint: string;
|
|
60
|
+
endpoint: string;
|
|
61
|
+
region: string;
|
|
62
|
+
slice: string;
|
|
63
|
+
}
|
|
64
|
+
export interface ProtectedLoadEndpointBindingV1 {
|
|
65
|
+
adapterId: ProtectedLoadEndpointAdapterId;
|
|
66
|
+
deployedCandidateDigest: string;
|
|
67
|
+
deployedReleaseId: string;
|
|
68
|
+
deployedReleaseMaterialDigest: string;
|
|
69
|
+
deployedSourceCommit: string;
|
|
70
|
+
hmacKeys: {
|
|
71
|
+
current: ProtectedLoadEndpointHmacKeyV1;
|
|
72
|
+
previous?: ProtectedLoadEndpointHmacKeyV1;
|
|
73
|
+
};
|
|
74
|
+
stage: ProtectedLoadEndpointStage;
|
|
75
|
+
target: Omit<ProtectedLoadEndpointTargetV1, 'endpoint'> & {
|
|
76
|
+
origin: string;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export interface ProtectedLoadRequestAuthorizationV1 {
|
|
80
|
+
adapterId: ProtectedLoadEndpointAdapterId;
|
|
81
|
+
configuredMaximum: number;
|
|
82
|
+
createdAt: string;
|
|
83
|
+
durationSeconds: number;
|
|
84
|
+
effectId: string | null;
|
|
85
|
+
expiresAt: string;
|
|
86
|
+
maximumRequests: number;
|
|
87
|
+
hmacKeyId: string;
|
|
88
|
+
operation: 'cleanup' | 'execute';
|
|
89
|
+
planMaterialDigest: string;
|
|
90
|
+
release: ProtectedLoadEndpointReleaseV1;
|
|
91
|
+
requestOrdinal: number;
|
|
92
|
+
runId: string;
|
|
93
|
+
saturationSignalRef: string;
|
|
94
|
+
scenarioId: string;
|
|
95
|
+
stage: ProtectedLoadEndpointStage;
|
|
96
|
+
target: ProtectedLoadEndpointTargetV1;
|
|
97
|
+
workload: 'api-lambda' | 'async-worker' | 'database' | 'service';
|
|
98
|
+
}
|
|
99
|
+
export interface ProtectedLoadEndpointRequestV1 {
|
|
100
|
+
body?: unknown;
|
|
101
|
+
headers: Readonly<Record<string, string | undefined>>;
|
|
102
|
+
method: 'GET' | 'POST';
|
|
103
|
+
url: string;
|
|
104
|
+
}
|
|
105
|
+
export interface ProtectedLoadEndpointResponseV1 {
|
|
106
|
+
body: unknown;
|
|
107
|
+
status: number;
|
|
108
|
+
}
|
|
109
|
+
export declare class ProtectedLoadEndpointError extends Error {
|
|
110
|
+
readonly pointer: string;
|
|
111
|
+
readonly classification = "performance-load-authorization-invalid";
|
|
112
|
+
constructor(pointer: string, message: string);
|
|
113
|
+
}
|
|
114
|
+
export declare function createProtectedLoadRequestSignature(input: {
|
|
115
|
+
authorization: ProtectedLoadRequestAuthorizationV1;
|
|
116
|
+
hmacKey: ProtectedLoadEndpointHmacKeyV1;
|
|
117
|
+
}): string;
|
|
118
|
+
export declare function handleProtectedLoadScenarioEndpoint(input: {
|
|
119
|
+
binding: ProtectedLoadEndpointBindingV1;
|
|
120
|
+
execute(request: {
|
|
121
|
+
authorization: ProtectedLoadRequestAuthorizationV1;
|
|
122
|
+
effectId?: string;
|
|
123
|
+
requestOrdinal: number;
|
|
124
|
+
}): Promise<{
|
|
125
|
+
effectState?: 'already-existed' | 'created';
|
|
126
|
+
saturationPercent: number;
|
|
127
|
+
}>;
|
|
128
|
+
now?: () => Date;
|
|
129
|
+
request: ProtectedLoadEndpointRequestV1;
|
|
130
|
+
reserve(authorization: ProtectedLoadRequestAuthorizationV1): Promise<'claimed'>;
|
|
131
|
+
}): Promise<ProtectedLoadEndpointResponseV1>;
|
|
132
|
+
export declare function handleProtectedLoadCleanupEndpoint(input: {
|
|
133
|
+
binding: ProtectedLoadEndpointBindingV1;
|
|
134
|
+
cleanup(authorization: ProtectedLoadRequestAuthorizationV1): Promise<{
|
|
135
|
+
remainingEffectCount: number;
|
|
136
|
+
removedEffectCount: number;
|
|
137
|
+
}>;
|
|
138
|
+
now?: () => Date;
|
|
139
|
+
request: ProtectedLoadEndpointRequestV1;
|
|
140
|
+
}): Promise<ProtectedLoadEndpointResponseV1>;
|
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
3
|
+
import { isBoundedSafeReference } from '../safe-reference.js';
|
|
4
|
+
export const PROTECTED_LOAD_ENDPOINT_ADAPTERS = [
|
|
5
|
+
{
|
|
6
|
+
capacityBound: 'rate',
|
|
7
|
+
cleanupPath: null,
|
|
8
|
+
id: 'ebk-api-lambda-v1',
|
|
9
|
+
mutation: false,
|
|
10
|
+
requestMethod: 'GET',
|
|
11
|
+
requestPath: '/__ebk/performance/api-lambda',
|
|
12
|
+
scenarioId: 'api-peak',
|
|
13
|
+
saturationSignalRef: 'runtime:nodejs-heap-utilization-percent',
|
|
14
|
+
version: '1.0.0',
|
|
15
|
+
workload: 'api-lambda',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
capacityBound: 'rate',
|
|
19
|
+
cleanupPath: '/__ebk/performance/async-worker/cleanup',
|
|
20
|
+
id: 'ebk-async-worker-v1',
|
|
21
|
+
mutation: true,
|
|
22
|
+
requestMethod: 'POST',
|
|
23
|
+
requestPath: '/__ebk/performance/async-worker',
|
|
24
|
+
scenarioId: 'async-burst',
|
|
25
|
+
saturationSignalRef: 'database:protected-async-backlog-utilization-percent',
|
|
26
|
+
version: '1.0.0',
|
|
27
|
+
workload: 'async-worker',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
capacityBound: 'concurrency',
|
|
31
|
+
cleanupPath: '/__ebk/performance/database/cleanup',
|
|
32
|
+
id: 'ebk-database-v1',
|
|
33
|
+
mutation: true,
|
|
34
|
+
requestMethod: 'POST',
|
|
35
|
+
requestPath: '/__ebk/performance/database',
|
|
36
|
+
scenarioId: 'database-cold-resume',
|
|
37
|
+
saturationSignalRef: 'database:connection-utilization-percent',
|
|
38
|
+
version: '1.0.0',
|
|
39
|
+
workload: 'database',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
capacityBound: 'concurrency',
|
|
43
|
+
cleanupPath: '/__ebk/performance/service/cleanup',
|
|
44
|
+
id: 'ebk-service-v1',
|
|
45
|
+
mutation: false,
|
|
46
|
+
requestMethod: 'GET',
|
|
47
|
+
requestPath: '/__ebk/performance/service',
|
|
48
|
+
scenarioId: 'service-extension',
|
|
49
|
+
saturationSignalRef: null,
|
|
50
|
+
version: '1.0.0',
|
|
51
|
+
workload: 'service',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
export class ProtectedLoadEndpointError extends Error {
|
|
55
|
+
constructor(pointer, message) {
|
|
56
|
+
super(`${pointer}: ${message}`);
|
|
57
|
+
this.pointer = pointer;
|
|
58
|
+
this.classification = 'performance-load-authorization-invalid';
|
|
59
|
+
this.name = 'ProtectedLoadEndpointError';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const DIGEST = /^[a-f0-9]{64}$/;
|
|
63
|
+
const FULL_COMMIT = /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/;
|
|
64
|
+
const ACCOUNT_FINGERPRINT = /^sha256:[a-f0-9]{64}$/;
|
|
65
|
+
const AWS_REGION = /^(?:(?:af|ap|ca|cn|eu|il|me|mx|sa|us)(?:-(?:gov|iso|isob|isoe|isof))?|eusc-[a-z]{2})-[a-z]+-\d$/;
|
|
66
|
+
const HMAC_KEY_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
|
|
67
|
+
const SLICE = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
68
|
+
const MAXIMUM_AUTHORIZATION_SECONDS = 24 * 60 * 60;
|
|
69
|
+
const MAXIMUM_CLEANUP_GRACE_SECONDS = 24 * 60 * 60;
|
|
70
|
+
const MAXIMUM_REQUESTS = 100000;
|
|
71
|
+
function invalid(pointer, message) {
|
|
72
|
+
return new ProtectedLoadEndpointError(pointer, message);
|
|
73
|
+
}
|
|
74
|
+
function record(value) {
|
|
75
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
76
|
+
}
|
|
77
|
+
function exactKeys(value, expected, pointer) {
|
|
78
|
+
if (!record(value))
|
|
79
|
+
throw invalid(pointer, 'must be an object');
|
|
80
|
+
const actual = Object.keys(value).sort();
|
|
81
|
+
const wanted = [...expected].sort();
|
|
82
|
+
if (JSON.stringify(actual) !== JSON.stringify(wanted)) {
|
|
83
|
+
throw invalid(pointer, 'must contain only the exact v1 fields');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function reference(value, pointer) {
|
|
87
|
+
if (!isBoundedSafeReference(value, 'performance-evidence')) {
|
|
88
|
+
throw invalid(pointer, 'must be one bounded opaque reference');
|
|
89
|
+
}
|
|
90
|
+
return value;
|
|
91
|
+
}
|
|
92
|
+
function digest(value, pointer) {
|
|
93
|
+
if (typeof value !== 'string' || !DIGEST.test(value)) {
|
|
94
|
+
throw invalid(pointer, 'must be a lowercase SHA-256 digest');
|
|
95
|
+
}
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
function canonicalInstant(value, pointer) {
|
|
99
|
+
if (typeof value !== 'string' ||
|
|
100
|
+
!Number.isFinite(Date.parse(value)) ||
|
|
101
|
+
new Date(Date.parse(value)).toISOString() !== value) {
|
|
102
|
+
throw invalid(pointer, 'must be a canonical ISO-8601 instant');
|
|
103
|
+
}
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
function positiveInteger(value, pointer, maximum) {
|
|
107
|
+
const parsed = typeof value === 'number' ? value : Number(value);
|
|
108
|
+
if (!Number.isSafeInteger(parsed) || parsed <= 0 || parsed > maximum) {
|
|
109
|
+
throw invalid(pointer, `must be between 1 and ${maximum}`);
|
|
110
|
+
}
|
|
111
|
+
return parsed;
|
|
112
|
+
}
|
|
113
|
+
function positiveNumber(value, pointer) {
|
|
114
|
+
const parsed = typeof value === 'number' ? value : Number(value);
|
|
115
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
116
|
+
throw invalid(pointer, 'must be a finite number greater than zero');
|
|
117
|
+
}
|
|
118
|
+
return parsed;
|
|
119
|
+
}
|
|
120
|
+
function validateRelease(value, pointer) {
|
|
121
|
+
exactKeys(value, ['candidateDigest', 'releaseId', 'releaseMaterialDigest', 'sourceCommit'], pointer);
|
|
122
|
+
const sourceCommit = value['sourceCommit'];
|
|
123
|
+
if (typeof sourceCommit !== 'string' || !FULL_COMMIT.test(sourceCommit)) {
|
|
124
|
+
throw invalid(`${pointer}/sourceCommit`, 'must be one full Git object ID');
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
candidateDigest: digest(value['candidateDigest'], `${pointer}/candidateDigest`),
|
|
128
|
+
releaseId: reference(value['releaseId'], `${pointer}/releaseId`),
|
|
129
|
+
releaseMaterialDigest: digest(value['releaseMaterialDigest'], `${pointer}/releaseMaterialDigest`),
|
|
130
|
+
sourceCommit,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function adapter(id) {
|
|
134
|
+
const value = PROTECTED_LOAD_ENDPOINT_ADAPTERS.find((candidate) => candidate.id === id);
|
|
135
|
+
if (!value)
|
|
136
|
+
throw invalid('binding/adapterId', 'is not supported');
|
|
137
|
+
return value;
|
|
138
|
+
}
|
|
139
|
+
function materialBytes(value) {
|
|
140
|
+
return JSON.stringify({
|
|
141
|
+
adapterId: value.adapterId,
|
|
142
|
+
configuredMaximum: value.configuredMaximum,
|
|
143
|
+
createdAt: value.createdAt,
|
|
144
|
+
durationSeconds: value.durationSeconds,
|
|
145
|
+
effectId: value.effectId,
|
|
146
|
+
expiresAt: value.expiresAt,
|
|
147
|
+
hmacKeyId: value.hmacKeyId,
|
|
148
|
+
maximumRequests: value.maximumRequests,
|
|
149
|
+
operation: value.operation,
|
|
150
|
+
planMaterialDigest: value.planMaterialDigest,
|
|
151
|
+
release: {
|
|
152
|
+
candidateDigest: value.release.candidateDigest,
|
|
153
|
+
releaseId: value.release.releaseId,
|
|
154
|
+
releaseMaterialDigest: value.release.releaseMaterialDigest,
|
|
155
|
+
sourceCommit: value.release.sourceCommit,
|
|
156
|
+
},
|
|
157
|
+
requestOrdinal: value.requestOrdinal,
|
|
158
|
+
runId: value.runId,
|
|
159
|
+
saturationSignalRef: value.saturationSignalRef,
|
|
160
|
+
scenarioId: value.scenarioId,
|
|
161
|
+
stage: value.stage,
|
|
162
|
+
target: {
|
|
163
|
+
accountFingerprint: value.target.accountFingerprint,
|
|
164
|
+
endpoint: value.target.endpoint,
|
|
165
|
+
region: value.target.region,
|
|
166
|
+
slice: value.target.slice,
|
|
167
|
+
},
|
|
168
|
+
workload: value.workload,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
function validateHmacKey(value, pointer) {
|
|
172
|
+
const secret = record(value) && typeof value['secret'] === 'string' ? value['secret'] : '';
|
|
173
|
+
const decoded = /^[A-Za-z0-9_-]{43}$/.test(secret)
|
|
174
|
+
? Buffer.from(secret, 'base64url')
|
|
175
|
+
: Buffer.alloc(0);
|
|
176
|
+
if (!record(value) ||
|
|
177
|
+
Object.keys(value).length !== 2 ||
|
|
178
|
+
!Object.prototype.hasOwnProperty.call(value, 'id') ||
|
|
179
|
+
!Object.prototype.hasOwnProperty.call(value, 'secret') ||
|
|
180
|
+
typeof value['id'] !== 'string' ||
|
|
181
|
+
!HMAC_KEY_ID.test(value['id']) ||
|
|
182
|
+
decoded.length !== 32 ||
|
|
183
|
+
decoded.toString('base64url') !== secret) {
|
|
184
|
+
throw invalid(pointer, 'must contain one bounded key ID and a canonical base64url 256-bit secret');
|
|
185
|
+
}
|
|
186
|
+
return value;
|
|
187
|
+
}
|
|
188
|
+
export function createProtectedLoadRequestSignature(input) {
|
|
189
|
+
const key = validateHmacKey(input.hmacKey, 'hmacKey');
|
|
190
|
+
if (input.authorization.hmacKeyId !== key.id) {
|
|
191
|
+
throw invalid('authorization/hmacKeyId', 'must equal the selected HMAC key identity');
|
|
192
|
+
}
|
|
193
|
+
return createHmac('sha256', Buffer.from(key.secret, 'base64url'))
|
|
194
|
+
.update(materialBytes(input.authorization), 'utf8')
|
|
195
|
+
.digest('hex');
|
|
196
|
+
}
|
|
197
|
+
function canonicalEndpoint(value, pointer) {
|
|
198
|
+
if (typeof value !== 'string') {
|
|
199
|
+
throw invalid(pointer, 'must be one exact canonical HTTPS endpoint');
|
|
200
|
+
}
|
|
201
|
+
let endpoint;
|
|
202
|
+
try {
|
|
203
|
+
endpoint = new URL(value);
|
|
204
|
+
}
|
|
205
|
+
catch (_a) {
|
|
206
|
+
throw invalid(pointer, 'must be one exact canonical HTTPS endpoint');
|
|
207
|
+
}
|
|
208
|
+
if (endpoint.protocol !== 'https:' ||
|
|
209
|
+
endpoint.username ||
|
|
210
|
+
endpoint.password ||
|
|
211
|
+
endpoint.search ||
|
|
212
|
+
endpoint.hash ||
|
|
213
|
+
endpoint.href !== value ||
|
|
214
|
+
['localhost', '127.0.0.1', '::1'].includes(endpoint.hostname) ||
|
|
215
|
+
endpoint.hostname.endsWith('.localhost')) {
|
|
216
|
+
throw invalid(pointer, 'must be one exact canonical remote HTTPS endpoint');
|
|
217
|
+
}
|
|
218
|
+
return endpoint.href;
|
|
219
|
+
}
|
|
220
|
+
function expectedEndpoint(binding, operation) {
|
|
221
|
+
const definition = adapter(binding.adapterId);
|
|
222
|
+
const path = operation === 'cleanup' ? definition.cleanupPath : definition.requestPath;
|
|
223
|
+
if (path === null) {
|
|
224
|
+
throw invalid('binding/adapterId', 'does not provide cleanup');
|
|
225
|
+
}
|
|
226
|
+
const origin = canonicalEndpoint(`${binding.target.origin}/`, 'binding/target/origin');
|
|
227
|
+
if (new URL(origin).origin !== binding.target.origin) {
|
|
228
|
+
throw invalid('binding/target/origin', 'must be one exact canonical HTTPS origin without a trailing slash');
|
|
229
|
+
}
|
|
230
|
+
return new URL(`/${binding.target.slice}${path}`, origin).href;
|
|
231
|
+
}
|
|
232
|
+
function requestAuthorization(request, binding, operation, now) {
|
|
233
|
+
var _a, _b, _c, _d, _e, _f;
|
|
234
|
+
const definition = adapter(binding.adapterId);
|
|
235
|
+
const currentHmacKey = validateHmacKey((_a = binding.hmacKeys) === null || _a === void 0 ? void 0 : _a.current, 'binding/hmacKeys/current');
|
|
236
|
+
const previousHmacKey = ((_b = binding.hmacKeys) === null || _b === void 0 ? void 0 : _b.previous) === undefined
|
|
237
|
+
? undefined
|
|
238
|
+
: validateHmacKey(binding.hmacKeys.previous, 'binding/hmacKeys/previous');
|
|
239
|
+
if (!DIGEST.test(binding.deployedCandidateDigest) ||
|
|
240
|
+
!isBoundedSafeReference(binding.deployedReleaseId, 'performance-evidence') ||
|
|
241
|
+
!DIGEST.test(binding.deployedReleaseMaterialDigest) ||
|
|
242
|
+
!FULL_COMMIT.test(binding.deployedSourceCommit) ||
|
|
243
|
+
!['production', 'staging'].includes(binding.stage) ||
|
|
244
|
+
!ACCOUNT_FINGERPRINT.test((_c = binding.target) === null || _c === void 0 ? void 0 : _c.accountFingerprint) ||
|
|
245
|
+
!AWS_REGION.test((_d = binding.target) === null || _d === void 0 ? void 0 : _d.region) ||
|
|
246
|
+
!SLICE.test((_e = binding.target) === null || _e === void 0 ? void 0 : _e.slice) ||
|
|
247
|
+
(previousHmacKey === null || previousHmacKey === void 0 ? void 0 : previousHmacKey.id) === currentHmacKey.id ||
|
|
248
|
+
(previousHmacKey === null || previousHmacKey === void 0 ? void 0 : previousHmacKey.secret) === currentHmacKey.secret) {
|
|
249
|
+
throw invalid('binding', 'must bind one exact deployed release, target, stage, and HMAC key generation');
|
|
250
|
+
}
|
|
251
|
+
const deployedEndpoint = expectedEndpoint(binding, operation);
|
|
252
|
+
const body = request.body === undefined ? {} : request.body;
|
|
253
|
+
if (!record(body))
|
|
254
|
+
throw invalid('request/body', 'must be an object');
|
|
255
|
+
const release = validateRelease({
|
|
256
|
+
candidateDigest: request.headers['x-ebk-performance-candidate'],
|
|
257
|
+
releaseId: request.headers['x-ebk-performance-release-id'],
|
|
258
|
+
releaseMaterialDigest: request.headers['x-ebk-performance-release-material'],
|
|
259
|
+
sourceCommit: request.headers['x-ebk-performance-source'],
|
|
260
|
+
}, 'request/release');
|
|
261
|
+
const createdAt = canonicalInstant(request.headers['x-ebk-performance-created-at'], 'request/createdAt');
|
|
262
|
+
const expiresAt = canonicalInstant(request.headers['x-ebk-performance-expires-at'], 'request/expiresAt');
|
|
263
|
+
const durationSeconds = positiveInteger(request.headers['x-ebk-performance-duration-seconds'], 'request/durationSeconds', MAXIMUM_AUTHORIZATION_SECONDS);
|
|
264
|
+
const configuredMaximum = positiveNumber(request.headers['x-ebk-performance-configured-maximum'], 'request/configuredMaximum');
|
|
265
|
+
const maximumRequests = positiveInteger(request.headers['x-ebk-performance-maximum-requests'], 'request/maximumRequests', MAXIMUM_REQUESTS);
|
|
266
|
+
const requestOrdinal = positiveInteger(request.headers['x-ebk-performance-request'], 'request/requestOrdinal', maximumRequests);
|
|
267
|
+
const stage = request.headers['x-ebk-performance-stage'];
|
|
268
|
+
if (stage !== 'production' && stage !== 'staging') {
|
|
269
|
+
throw invalid('request/stage', 'must equal production or staging');
|
|
270
|
+
}
|
|
271
|
+
const hmacKeyId = request.headers['x-ebk-performance-hmac-key-id'];
|
|
272
|
+
if (typeof hmacKeyId !== 'string' || !HMAC_KEY_ID.test(hmacKeyId)) {
|
|
273
|
+
throw invalid('request/hmacKeyId', 'must select one bounded deployed HMAC key generation');
|
|
274
|
+
}
|
|
275
|
+
const accountFingerprint = request.headers['x-ebk-performance-account-fingerprint'];
|
|
276
|
+
const region = request.headers['x-ebk-performance-region'];
|
|
277
|
+
const slice = request.headers['x-ebk-performance-slice'];
|
|
278
|
+
if (typeof accountFingerprint !== 'string' ||
|
|
279
|
+
!ACCOUNT_FINGERPRINT.test(accountFingerprint) ||
|
|
280
|
+
typeof region !== 'string' ||
|
|
281
|
+
!AWS_REGION.test(region) ||
|
|
282
|
+
typeof slice !== 'string' ||
|
|
283
|
+
!SLICE.test(slice)) {
|
|
284
|
+
throw invalid('request/target', 'must contain the exact account fingerprint, Region, and Slice');
|
|
285
|
+
}
|
|
286
|
+
const target = {
|
|
287
|
+
accountFingerprint,
|
|
288
|
+
endpoint: canonicalEndpoint(request.url, 'request/url'),
|
|
289
|
+
region,
|
|
290
|
+
slice,
|
|
291
|
+
};
|
|
292
|
+
const effectId = typeof body['effectId'] === 'string' ? body['effectId'] : null;
|
|
293
|
+
const authorization = {
|
|
294
|
+
adapterId: binding.adapterId,
|
|
295
|
+
configuredMaximum,
|
|
296
|
+
createdAt,
|
|
297
|
+
durationSeconds,
|
|
298
|
+
effectId,
|
|
299
|
+
expiresAt,
|
|
300
|
+
hmacKeyId,
|
|
301
|
+
maximumRequests,
|
|
302
|
+
operation,
|
|
303
|
+
planMaterialDigest: digest(request.headers['x-ebk-performance-plan'], 'request/planMaterialDigest'),
|
|
304
|
+
release,
|
|
305
|
+
requestOrdinal,
|
|
306
|
+
runId: reference(request.headers['x-ebk-performance-run'], 'request/runId'),
|
|
307
|
+
saturationSignalRef: reference(request.headers['x-ebk-performance-saturation-signal'], 'request/saturationSignalRef'),
|
|
308
|
+
scenarioId: reference(request.headers['x-ebk-performance-scenario'], 'request/scenarioId'),
|
|
309
|
+
stage,
|
|
310
|
+
target,
|
|
311
|
+
workload: definition.workload,
|
|
312
|
+
};
|
|
313
|
+
if (binding.stage !== stage ||
|
|
314
|
+
definition.scenarioId !== authorization.scenarioId ||
|
|
315
|
+
(definition.saturationSignalRef !== null &&
|
|
316
|
+
definition.saturationSignalRef !== authorization.saturationSignalRef) ||
|
|
317
|
+
binding.deployedCandidateDigest !== release.candidateDigest ||
|
|
318
|
+
binding.deployedReleaseId !== release.releaseId ||
|
|
319
|
+
binding.deployedReleaseMaterialDigest !== release.releaseMaterialDigest ||
|
|
320
|
+
binding.deployedSourceCommit !== release.sourceCommit ||
|
|
321
|
+
binding.target.accountFingerprint !== target.accountFingerprint ||
|
|
322
|
+
binding.target.region !== target.region ||
|
|
323
|
+
binding.target.slice !== target.slice ||
|
|
324
|
+
deployedEndpoint !== target.endpoint ||
|
|
325
|
+
request.method !==
|
|
326
|
+
(operation === 'cleanup' ? 'POST' : definition.requestMethod)) {
|
|
327
|
+
throw invalid('request', 'does not match the deployed release, target, adapter, signal, method, and stage');
|
|
328
|
+
}
|
|
329
|
+
const created = Date.parse(createdAt);
|
|
330
|
+
const expires = Date.parse(expiresAt);
|
|
331
|
+
const nowMilliseconds = now.getTime();
|
|
332
|
+
if (expires <= created ||
|
|
333
|
+
expires - created > MAXIMUM_AUTHORIZATION_SECONDS * 1000 ||
|
|
334
|
+
durationSeconds * 1000 > expires - created ||
|
|
335
|
+
nowMilliseconds < created ||
|
|
336
|
+
nowMilliseconds >
|
|
337
|
+
expires +
|
|
338
|
+
(operation === 'cleanup' ? MAXIMUM_CLEANUP_GRACE_SECONDS * 1000 : 0)) {
|
|
339
|
+
throw invalid('request/authorizationWindow', 'is not active inside the bounded execution or cleanup window');
|
|
340
|
+
}
|
|
341
|
+
const selectedHmacKey = currentHmacKey.id === hmacKeyId
|
|
342
|
+
? currentHmacKey
|
|
343
|
+
: (previousHmacKey === null || previousHmacKey === void 0 ? void 0 : previousHmacKey.id) === hmacKeyId
|
|
344
|
+
? previousHmacKey
|
|
345
|
+
: undefined;
|
|
346
|
+
if (!selectedHmacKey ||
|
|
347
|
+
(operation === 'execute' && selectedHmacKey !== currentHmacKey)) {
|
|
348
|
+
throw invalid('request/hmacKeyId', operation === 'execute'
|
|
349
|
+
? 'execution requires the current deployed HMAC key generation'
|
|
350
|
+
: 'cleanup requires the current or immediately previous deployed HMAC key generation');
|
|
351
|
+
}
|
|
352
|
+
const signature = (_f = request.headers['x-ebk-performance-signature']) !== null && _f !== void 0 ? _f : '';
|
|
353
|
+
const actual = Buffer.from(signature, 'hex');
|
|
354
|
+
const expected = createHmac('sha256', Buffer.from(selectedHmacKey.secret, 'base64url'))
|
|
355
|
+
.update(materialBytes(authorization), 'utf8')
|
|
356
|
+
.digest();
|
|
357
|
+
if (!DIGEST.test(signature) ||
|
|
358
|
+
actual.length !== expected.length ||
|
|
359
|
+
!timingSafeEqual(actual, expected)) {
|
|
360
|
+
throw invalid('request/signature', 'does not authorize the exact request');
|
|
361
|
+
}
|
|
362
|
+
const expectedBodyKeys = [
|
|
363
|
+
...(definition.mutation && operation === 'execute' ? ['effectId'] : []),
|
|
364
|
+
'planMaterialDigest',
|
|
365
|
+
'release',
|
|
366
|
+
'requestOrdinal',
|
|
367
|
+
'runId',
|
|
368
|
+
'scenarioId',
|
|
369
|
+
'workload',
|
|
370
|
+
];
|
|
371
|
+
if (request.method === 'POST') {
|
|
372
|
+
exactKeys(body, expectedBodyKeys, 'request/body');
|
|
373
|
+
const bodyRelease = validateRelease(body['release'], 'request/body/release');
|
|
374
|
+
if (body['planMaterialDigest'] !== authorization.planMaterialDigest ||
|
|
375
|
+
body['requestOrdinal'] !== requestOrdinal ||
|
|
376
|
+
body['runId'] !== authorization.runId ||
|
|
377
|
+
body['scenarioId'] !== authorization.scenarioId ||
|
|
378
|
+
body['workload'] !== definition.workload ||
|
|
379
|
+
JSON.stringify(bodyRelease) !== JSON.stringify(release)) {
|
|
380
|
+
throw invalid('request/body', 'does not match the signed authorization');
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
else if (Object.keys(body).length !== 0) {
|
|
384
|
+
throw invalid('request/body', 'GET authorization cannot carry a body');
|
|
385
|
+
}
|
|
386
|
+
if ((definition.mutation &&
|
|
387
|
+
operation === 'execute' &&
|
|
388
|
+
!DIGEST.test(effectId !== null && effectId !== void 0 ? effectId : '')) ||
|
|
389
|
+
(operation === 'cleanup' && effectId !== null) ||
|
|
390
|
+
(!definition.mutation && effectId !== null)) {
|
|
391
|
+
throw invalid('request/body/effectId', 'must match the fixed execute-effect or run-cleanup contract');
|
|
392
|
+
}
|
|
393
|
+
return { authorization, body };
|
|
394
|
+
}
|
|
395
|
+
export function handleProtectedLoadScenarioEndpoint(input) {
|
|
396
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
397
|
+
var _a;
|
|
398
|
+
const definition = adapter(input.binding.adapterId);
|
|
399
|
+
const { authorization } = requestAuthorization(input.request, input.binding, 'execute', ((_a = input.now) !== null && _a !== void 0 ? _a : (() => new Date()))());
|
|
400
|
+
if ((yield input.reserve(authorization)) !== 'claimed') {
|
|
401
|
+
throw invalid('request/reservation', 'was not atomically claimed');
|
|
402
|
+
}
|
|
403
|
+
const result = yield input.execute(Object.assign(Object.assign({ authorization }, (authorization.effectId ? { effectId: authorization.effectId } : {})), { requestOrdinal: authorization.requestOrdinal }));
|
|
404
|
+
if (typeof result.saturationPercent !== 'number' ||
|
|
405
|
+
!Number.isFinite(result.saturationPercent) ||
|
|
406
|
+
result.saturationPercent < 0 ||
|
|
407
|
+
result.saturationPercent > 100 ||
|
|
408
|
+
(definition.mutation &&
|
|
409
|
+
!['already-existed', 'created'].includes(String(result.effectState))) ||
|
|
410
|
+
(!definition.mutation && result.effectState !== undefined)) {
|
|
411
|
+
throw invalid('execution', 'must return bounded saturation and the exact effect outcome');
|
|
412
|
+
}
|
|
413
|
+
return {
|
|
414
|
+
body: Object.assign(Object.assign({}, (authorization.effectId
|
|
415
|
+
? {
|
|
416
|
+
effect: {
|
|
417
|
+
id: authorization.effectId,
|
|
418
|
+
state: result.effectState,
|
|
419
|
+
},
|
|
420
|
+
}
|
|
421
|
+
: {})), { kind: 'ebk-protected-load-telemetry', hmacKeyId: authorization.hmacKeyId, planMaterialDigest: authorization.planMaterialDigest, release: authorization.release, requestOrdinal: authorization.requestOrdinal, runId: authorization.runId, saturation: {
|
|
422
|
+
percent: result.saturationPercent,
|
|
423
|
+
signalRef: authorization.saturationSignalRef,
|
|
424
|
+
}, scenarioId: authorization.scenarioId, schemaVersion: 1, target: authorization.target, workload: authorization.workload }),
|
|
425
|
+
status: 200,
|
|
426
|
+
};
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
export function handleProtectedLoadCleanupEndpoint(input) {
|
|
430
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
431
|
+
var _a;
|
|
432
|
+
const definition = adapter(input.binding.adapterId);
|
|
433
|
+
if (definition.cleanupPath === null) {
|
|
434
|
+
throw invalid('cleanup', 'is unavailable for this adapter');
|
|
435
|
+
}
|
|
436
|
+
const { authorization } = requestAuthorization(input.request, input.binding, 'cleanup', ((_a = input.now) !== null && _a !== void 0 ? _a : (() => new Date()))());
|
|
437
|
+
const cleanup = yield input.cleanup(authorization);
|
|
438
|
+
if (!Number.isSafeInteger(cleanup.remainingEffectCount) ||
|
|
439
|
+
cleanup.remainingEffectCount !== 0 ||
|
|
440
|
+
!Number.isSafeInteger(cleanup.removedEffectCount) ||
|
|
441
|
+
cleanup.removedEffectCount < 0) {
|
|
442
|
+
throw invalid('cleanup', 'must prove the exact protected run absent');
|
|
443
|
+
}
|
|
444
|
+
return {
|
|
445
|
+
body: {
|
|
446
|
+
kind: 'ebk-protected-load-cleanup-result',
|
|
447
|
+
hmacKeyId: authorization.hmacKeyId,
|
|
448
|
+
planMaterialDigest: authorization.planMaterialDigest,
|
|
449
|
+
release: authorization.release,
|
|
450
|
+
remainingEffectCount: cleanup.remainingEffectCount,
|
|
451
|
+
removedEffectCount: cleanup.removedEffectCount,
|
|
452
|
+
runId: authorization.runId,
|
|
453
|
+
scenarioId: authorization.scenarioId,
|
|
454
|
+
schemaVersion: 1,
|
|
455
|
+
status: 'run-absent',
|
|
456
|
+
target: authorization.target,
|
|
457
|
+
},
|
|
458
|
+
status: 200,
|
|
459
|
+
};
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=protected-load-endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protected-load-endpoint.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/performance/protected-load-endpoint.ts"],"names":[],"mappings":"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"}
|