@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,100 @@
|
|
|
1
|
+
export const SECRET_RESOLUTION_FEATURE = 'secret-management';
|
|
2
|
+
export const SECRET_RESOLUTION_OPERATION = 'secret.resolve';
|
|
3
|
+
export const SECRET_RESOLUTION_COMPONENT = 'secret-resolver';
|
|
4
|
+
function renderObservation(observation) {
|
|
5
|
+
switch (observation.type) {
|
|
6
|
+
case 'authentication-retry':
|
|
7
|
+
return {
|
|
8
|
+
level: 'warn',
|
|
9
|
+
message: 'Secret authentication retry started',
|
|
10
|
+
metricName: 'SecretAuthenticationRetries',
|
|
11
|
+
};
|
|
12
|
+
case 'cache-hit':
|
|
13
|
+
return {
|
|
14
|
+
level: 'debug',
|
|
15
|
+
message: 'Secret cache hit',
|
|
16
|
+
};
|
|
17
|
+
case 'cache-invalidated':
|
|
18
|
+
return {
|
|
19
|
+
level: 'info',
|
|
20
|
+
message: 'Secret cache invalidated',
|
|
21
|
+
};
|
|
22
|
+
case 'refresh-failed':
|
|
23
|
+
return {
|
|
24
|
+
level: 'error',
|
|
25
|
+
message: 'Secret resolution failed',
|
|
26
|
+
metricName: 'SecretResolutionFailures',
|
|
27
|
+
outcome: 'failure',
|
|
28
|
+
};
|
|
29
|
+
case 'refresh-started':
|
|
30
|
+
return {
|
|
31
|
+
level: 'debug',
|
|
32
|
+
message: 'Secret resolution started',
|
|
33
|
+
};
|
|
34
|
+
case 'refresh-succeeded':
|
|
35
|
+
return {
|
|
36
|
+
level: 'info',
|
|
37
|
+
message: 'Secret resolution completed',
|
|
38
|
+
outcome: 'success',
|
|
39
|
+
};
|
|
40
|
+
case 'stale-value-used':
|
|
41
|
+
return {
|
|
42
|
+
level: 'warn',
|
|
43
|
+
message: 'Secret stale value used',
|
|
44
|
+
metricName: 'SecretStaleValueUses',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function reviewedAttributes(observation) {
|
|
49
|
+
const common = {
|
|
50
|
+
lifecycleEvent: observation.type,
|
|
51
|
+
logicalName: observation.logicalName,
|
|
52
|
+
};
|
|
53
|
+
switch (observation.type) {
|
|
54
|
+
case 'authentication-retry':
|
|
55
|
+
case 'refresh-started':
|
|
56
|
+
case 'refresh-succeeded':
|
|
57
|
+
return common;
|
|
58
|
+
case 'cache-hit':
|
|
59
|
+
return Object.assign(Object.assign({}, common), { cacheAgeMs: observation.ageMs });
|
|
60
|
+
case 'cache-invalidated':
|
|
61
|
+
return Object.assign(Object.assign({}, common), { invalidationReason: observation.reason });
|
|
62
|
+
case 'refresh-failed':
|
|
63
|
+
return Object.assign(Object.assign({}, common), { failureClass: observation.failureClass });
|
|
64
|
+
case 'stale-value-used':
|
|
65
|
+
return Object.assign(Object.assign({}, common), { cacheAgeMs: observation.ageMs, retryAfterMs: observation.retryAfterMs });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export function createSecretResolverObservability(options) {
|
|
69
|
+
var _a;
|
|
70
|
+
const component = (_a = options.component) !== null && _a !== void 0 ? _a : SECRET_RESOLUTION_COMPONENT;
|
|
71
|
+
const logger = options.logger.child({
|
|
72
|
+
component,
|
|
73
|
+
feature: SECRET_RESOLUTION_FEATURE,
|
|
74
|
+
operation: SECRET_RESOLUTION_OPERATION,
|
|
75
|
+
});
|
|
76
|
+
return Object.freeze({
|
|
77
|
+
observe(observation) {
|
|
78
|
+
const rendering = renderObservation(observation);
|
|
79
|
+
const context = observation.correlationId === 'unavailable'
|
|
80
|
+
? undefined
|
|
81
|
+
: { correlationId: observation.correlationId };
|
|
82
|
+
logger[rendering.level](rendering.message, {
|
|
83
|
+
attributes: reviewedAttributes(observation),
|
|
84
|
+
context,
|
|
85
|
+
outcome: rendering.outcome,
|
|
86
|
+
});
|
|
87
|
+
if (rendering.metricName !== undefined) {
|
|
88
|
+
options.metrics.emit({
|
|
89
|
+
dimensions: Object.assign(Object.assign({ component, feature: SECRET_RESOLUTION_FEATURE, operation: SECRET_RESOLUTION_OPERATION }, (rendering.outcome === undefined
|
|
90
|
+
? {}
|
|
91
|
+
: { outcome: rendering.outcome })), { slice: options.slice, stage: options.stage }),
|
|
92
|
+
metricName: rendering.metricName,
|
|
93
|
+
unit: 'Count',
|
|
94
|
+
value: 1,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=observability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/secrets/observability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type DefinedSecret, type SecretValueOf, type SecretValuePayload, type SecretValueSchema } from './contract.js';
|
|
2
|
+
import { type SecretResolutionContext, type SecretResolverHooks, type ServerSecretRuntimeBinding } from './resolver.js';
|
|
3
|
+
export declare const CANONICAL_SECRET_STAGES: readonly ["development", "staging", "production"];
|
|
4
|
+
export interface PersonalSstSecretReference {
|
|
5
|
+
logicalName: string;
|
|
6
|
+
provider: 'sst-personal-secret';
|
|
7
|
+
stage: string;
|
|
8
|
+
}
|
|
9
|
+
export interface PersonalSstSecretSourceValue {
|
|
10
|
+
payload: SecretValuePayload;
|
|
11
|
+
provenance: 'explicit' | 'fallback' | 'placeholder';
|
|
12
|
+
valueKind?: 'binary' | 'json' | 'string';
|
|
13
|
+
}
|
|
14
|
+
export interface PersonalSstSecretSource {
|
|
15
|
+
read(input: {
|
|
16
|
+
logicalName: string;
|
|
17
|
+
stage: string;
|
|
18
|
+
}): Promise<PersonalSstSecretSourceValue | undefined>;
|
|
19
|
+
}
|
|
20
|
+
export interface PersonalSstLinkedResource {
|
|
21
|
+
value: string;
|
|
22
|
+
}
|
|
23
|
+
export interface PersonalSstSecretResolver {
|
|
24
|
+
get<Declaration extends DefinedSecret<string, SecretValueSchema<unknown>>>(declaration: Declaration, reference: PersonalSstSecretReference, context?: SecretResolutionContext): Promise<SecretValueOf<Declaration>>;
|
|
25
|
+
runWithSecret<Declaration extends DefinedSecret<string, SecretValueSchema<unknown>>, Result>(options: {
|
|
26
|
+
context?: SecretResolutionContext;
|
|
27
|
+
declaration: Declaration;
|
|
28
|
+
isAuthenticationFailure(error: unknown): boolean;
|
|
29
|
+
operation(value: SecretValueOf<Declaration>): Promise<Result>;
|
|
30
|
+
reference: PersonalSstSecretReference;
|
|
31
|
+
}): Promise<Result>;
|
|
32
|
+
}
|
|
33
|
+
export interface CreatePersonalSstSecretResolverOptions {
|
|
34
|
+
accountId: string;
|
|
35
|
+
binding: ServerSecretRuntimeBinding;
|
|
36
|
+
developmentAccountId: string;
|
|
37
|
+
hooks?: SecretResolverHooks;
|
|
38
|
+
mode: 'sst-dev';
|
|
39
|
+
source: PersonalSstSecretSource;
|
|
40
|
+
stage: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Adapts the value-only resources emitted by the generated personal SST
|
|
44
|
+
* bridge. Product code never reads `Resource.<name>.value` directly.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createLinkedPersonalSstSecretSource(resources: Readonly<Record<string, unknown>>): PersonalSstSecretSource;
|
|
47
|
+
export declare function personalSstSecretReference(logicalName: string, stage: string): PersonalSstSecretReference;
|
|
48
|
+
export declare function createPersonalSstSecretResolver(options: CreatePersonalSstSecretResolverOptions): PersonalSstSecretResolver;
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { SECRET_CANONICAL_STAGES, isDefinedSecret, } from './contract.js';
|
|
3
|
+
import { SecretResolutionError, assertServerSecretRuntimeBinding, } from './resolver.js';
|
|
4
|
+
export const CANONICAL_SECRET_STAGES = SECRET_CANONICAL_STAGES;
|
|
5
|
+
const accountPattern = /^\d{12}$/;
|
|
6
|
+
const logicalNamePattern = /^[A-Za-z][A-Za-z0-9]{0,63}$/;
|
|
7
|
+
const personalStagePattern = /^personal-[a-z0-9](?:[a-z0-9-]{0,25}[a-z0-9])?$/;
|
|
8
|
+
const correlationPattern = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
|
|
9
|
+
const personalSecretEnvelopePrefix = 'ebk-personal-secret-v1:';
|
|
10
|
+
const canonicalBase64Pattern = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
|
|
11
|
+
function isRecord(value) {
|
|
12
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
13
|
+
}
|
|
14
|
+
function decodePersonalSecretEnvelope(input) {
|
|
15
|
+
var _a, _b, _c;
|
|
16
|
+
if (!input.value.startsWith(personalSecretEnvelopePrefix)) {
|
|
17
|
+
return Object.freeze({
|
|
18
|
+
payload: Object.freeze({}),
|
|
19
|
+
provenance: 'placeholder',
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
const encoded = input.value.slice(personalSecretEnvelopePrefix.length);
|
|
23
|
+
if (encoded.length === 0 ||
|
|
24
|
+
encoded.length % 4 !== 0 ||
|
|
25
|
+
!canonicalBase64Pattern.test(encoded)) {
|
|
26
|
+
return Object.freeze({
|
|
27
|
+
payload: Object.freeze({}),
|
|
28
|
+
provenance: 'placeholder',
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const envelope = Uint8Array.from(Buffer.from(encoded, 'base64'));
|
|
32
|
+
try {
|
|
33
|
+
const stageLength = (_a = envelope[1]) !== null && _a !== void 0 ? _a : 0;
|
|
34
|
+
const logicalNameLength = (_b = envelope[2]) !== null && _b !== void 0 ? _b : 0;
|
|
35
|
+
const valueOffset = 4 + stageLength + logicalNameLength;
|
|
36
|
+
if (envelope[0] !== 1 ||
|
|
37
|
+
![1, 2, 3].includes((_c = envelope[3]) !== null && _c !== void 0 ? _c : 0) ||
|
|
38
|
+
stageLength === 0 ||
|
|
39
|
+
logicalNameLength === 0 ||
|
|
40
|
+
valueOffset > envelope.byteLength) {
|
|
41
|
+
return Object.freeze({
|
|
42
|
+
payload: Object.freeze({}),
|
|
43
|
+
provenance: 'placeholder',
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
47
|
+
const stage = decoder.decode(envelope.subarray(4, 4 + stageLength));
|
|
48
|
+
const logicalName = decoder.decode(envelope.subarray(4 + stageLength, 4 + stageLength + logicalNameLength));
|
|
49
|
+
if (stage !== input.stage) {
|
|
50
|
+
return Object.freeze({
|
|
51
|
+
payload: Object.freeze({}),
|
|
52
|
+
provenance: 'fallback',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (logicalName !== input.logicalName) {
|
|
56
|
+
return Object.freeze({
|
|
57
|
+
payload: Object.freeze({}),
|
|
58
|
+
provenance: 'placeholder',
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const value = envelope.subarray(valueOffset);
|
|
62
|
+
if (envelope[3] === 1) {
|
|
63
|
+
return Object.freeze({
|
|
64
|
+
payload: Object.freeze({
|
|
65
|
+
secretBinary: new Uint8Array(value),
|
|
66
|
+
}),
|
|
67
|
+
provenance: 'explicit',
|
|
68
|
+
valueKind: 'binary',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return Object.freeze({
|
|
72
|
+
payload: Object.freeze({
|
|
73
|
+
secretString: decoder.decode(value),
|
|
74
|
+
}),
|
|
75
|
+
provenance: 'explicit',
|
|
76
|
+
valueKind: envelope[3] === 2 ? 'json' : 'string',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (_d) {
|
|
80
|
+
return Object.freeze({
|
|
81
|
+
payload: Object.freeze({}),
|
|
82
|
+
provenance: 'placeholder',
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
envelope.fill(0);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Adapts the value-only resources emitted by the generated personal SST
|
|
91
|
+
* bridge. Product code never reads `Resource.<name>.value` directly.
|
|
92
|
+
*/
|
|
93
|
+
export function createLinkedPersonalSstSecretSource(resources) {
|
|
94
|
+
if (!isRecord(resources)) {
|
|
95
|
+
throw new SecretResolutionError({
|
|
96
|
+
code: 'secret-runtime-configuration-invalid',
|
|
97
|
+
logicalName: 'unknown',
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return Object.freeze({
|
|
101
|
+
read(_a) {
|
|
102
|
+
return __awaiter(this, arguments, void 0, function* ({ logicalName, stage, }) {
|
|
103
|
+
if (!logicalNamePattern.test(logicalName) ||
|
|
104
|
+
!Object.prototype.hasOwnProperty.call(resources, logicalName)) {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
const resource = resources[logicalName];
|
|
108
|
+
if (!isRecord(resource) ||
|
|
109
|
+
resource['type'] !== 'sst.sst.Secret' ||
|
|
110
|
+
typeof resource['value'] !== 'string' ||
|
|
111
|
+
Object.keys(resource).some((key) => key !== 'type' && key !== 'value')) {
|
|
112
|
+
throw new SecretResolutionError({
|
|
113
|
+
code: 'secret-source-failed',
|
|
114
|
+
logicalName,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return decodePersonalSecretEnvelope({
|
|
118
|
+
logicalName,
|
|
119
|
+
stage,
|
|
120
|
+
value: resource['value'],
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
export function personalSstSecretReference(logicalName, stage) {
|
|
127
|
+
if (!logicalNamePattern.test(logicalName) ||
|
|
128
|
+
!personalStagePattern.test(stage)) {
|
|
129
|
+
throw new SecretResolutionError({
|
|
130
|
+
code: 'secret-reference-invalid',
|
|
131
|
+
logicalName,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return Object.freeze({
|
|
135
|
+
logicalName,
|
|
136
|
+
provider: 'sst-personal-secret',
|
|
137
|
+
stage,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
function safeCorrelationId(context) {
|
|
141
|
+
return (context === null || context === void 0 ? void 0 : context.correlationId) !== undefined &&
|
|
142
|
+
correlationPattern.test(context.correlationId)
|
|
143
|
+
? context.correlationId
|
|
144
|
+
: 'unavailable';
|
|
145
|
+
}
|
|
146
|
+
function validatePersonalEnvironment(options) {
|
|
147
|
+
assertServerSecretRuntimeBinding(options.binding);
|
|
148
|
+
if (options.mode !== 'sst-dev' ||
|
|
149
|
+
!personalStagePattern.test(options.stage) ||
|
|
150
|
+
CANONICAL_SECRET_STAGES.includes(options.stage) ||
|
|
151
|
+
options.binding.stage !== options.stage ||
|
|
152
|
+
!accountPattern.test(options.accountId) ||
|
|
153
|
+
!accountPattern.test(options.developmentAccountId) ||
|
|
154
|
+
options.accountId !== options.developmentAccountId) {
|
|
155
|
+
throw new SecretResolutionError({
|
|
156
|
+
code: 'secret-personal-stage-invalid',
|
|
157
|
+
logicalName: 'unknown',
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function validateReference(declaration, reference, stage, context) {
|
|
162
|
+
if (!isDefinedSecret(declaration)) {
|
|
163
|
+
throw new SecretResolutionError({
|
|
164
|
+
code: 'secret-reference-invalid',
|
|
165
|
+
correlationId: context === null || context === void 0 ? void 0 : context.correlationId,
|
|
166
|
+
logicalName: 'unknown',
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
if (reference.provider !== 'sst-personal-secret' ||
|
|
170
|
+
reference.stage !== stage ||
|
|
171
|
+
declaration.source !== 'operator' ||
|
|
172
|
+
!logicalNamePattern.test(reference.logicalName)) {
|
|
173
|
+
throw new SecretResolutionError({
|
|
174
|
+
code: 'secret-reference-invalid',
|
|
175
|
+
correlationId: context === null || context === void 0 ? void 0 : context.correlationId,
|
|
176
|
+
logicalName: declaration.logicalName,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
if (reference.logicalName !== declaration.logicalName) {
|
|
180
|
+
throw new SecretResolutionError({
|
|
181
|
+
code: 'secret-reference-mismatch',
|
|
182
|
+
correlationId: context === null || context === void 0 ? void 0 : context.correlationId,
|
|
183
|
+
logicalName: declaration.logicalName,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function validateValue(declaration, sourcePayload, context) {
|
|
188
|
+
var _a;
|
|
189
|
+
let decodedBinary;
|
|
190
|
+
let validationBinary;
|
|
191
|
+
try {
|
|
192
|
+
const payload = sourcePayload.secretBinary === undefined
|
|
193
|
+
? sourcePayload
|
|
194
|
+
: {
|
|
195
|
+
secretBinary: (decodedBinary = new Uint8Array(sourcePayload.secretBinary)),
|
|
196
|
+
};
|
|
197
|
+
const result = declaration.value.validate(Object.assign(Object.assign({}, (payload.secretBinary === undefined
|
|
198
|
+
? {}
|
|
199
|
+
: {
|
|
200
|
+
secretBinary: (validationBinary = new Uint8Array(payload.secretBinary)),
|
|
201
|
+
})), (payload.secretString === undefined
|
|
202
|
+
? {}
|
|
203
|
+
: { secretString: payload.secretString })));
|
|
204
|
+
if (result.valid) {
|
|
205
|
+
return (declaration.value.kind === 'binary' &&
|
|
206
|
+
result.value instanceof Uint8Array
|
|
207
|
+
? new Uint8Array(result.value)
|
|
208
|
+
: result.value);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (_b) {
|
|
212
|
+
// Validator details may contain the personal value and are discarded.
|
|
213
|
+
}
|
|
214
|
+
finally {
|
|
215
|
+
validationBinary === null || validationBinary === void 0 ? void 0 : validationBinary.fill(0);
|
|
216
|
+
decodedBinary === null || decodedBinary === void 0 ? void 0 : decodedBinary.fill(0);
|
|
217
|
+
(_a = sourcePayload.secretBinary) === null || _a === void 0 ? void 0 : _a.fill(0);
|
|
218
|
+
}
|
|
219
|
+
throw new SecretResolutionError({
|
|
220
|
+
code: 'secret-value-malformed',
|
|
221
|
+
correlationId: context === null || context === void 0 ? void 0 : context.correlationId,
|
|
222
|
+
logicalName: declaration.logicalName,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
export function createPersonalSstSecretResolver(options) {
|
|
226
|
+
validatePersonalEnvironment(options);
|
|
227
|
+
function observe(observation) {
|
|
228
|
+
var _a, _b;
|
|
229
|
+
try {
|
|
230
|
+
(_b = (_a = options.hooks) === null || _a === void 0 ? void 0 : _a.observe) === null || _b === void 0 ? void 0 : _b.call(_a, observation);
|
|
231
|
+
}
|
|
232
|
+
catch (_c) {
|
|
233
|
+
// Observability cannot alter personal secret resolution.
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function get(declaration, reference, context) {
|
|
237
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
238
|
+
validateReference(declaration, reference, options.stage, context);
|
|
239
|
+
const observationContext = {
|
|
240
|
+
correlationId: safeCorrelationId(context),
|
|
241
|
+
logicalName: declaration.logicalName,
|
|
242
|
+
};
|
|
243
|
+
observe(Object.assign(Object.assign({}, observationContext), { type: 'refresh-started' }));
|
|
244
|
+
let sourceValue;
|
|
245
|
+
try {
|
|
246
|
+
sourceValue = yield options.source.read({
|
|
247
|
+
logicalName: declaration.logicalName,
|
|
248
|
+
stage: options.stage,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
catch (_a) {
|
|
252
|
+
observe(Object.assign(Object.assign({}, observationContext), { failureClass: 'other', type: 'refresh-failed' }));
|
|
253
|
+
throw new SecretResolutionError({
|
|
254
|
+
code: 'secret-source-failed',
|
|
255
|
+
correlationId: context === null || context === void 0 ? void 0 : context.correlationId,
|
|
256
|
+
logicalName: declaration.logicalName,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
if (sourceValue === undefined) {
|
|
260
|
+
observe(Object.assign(Object.assign({}, observationContext), { failureClass: 'missing', type: 'refresh-failed' }));
|
|
261
|
+
throw new SecretResolutionError({
|
|
262
|
+
code: 'secret-source-missing',
|
|
263
|
+
correlationId: context === null || context === void 0 ? void 0 : context.correlationId,
|
|
264
|
+
logicalName: declaration.logicalName,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
let provenance;
|
|
268
|
+
let payload;
|
|
269
|
+
let valueKind;
|
|
270
|
+
try {
|
|
271
|
+
provenance = sourceValue.provenance;
|
|
272
|
+
payload = sourceValue.payload;
|
|
273
|
+
valueKind = sourceValue.valueKind;
|
|
274
|
+
}
|
|
275
|
+
catch (_b) {
|
|
276
|
+
observe(Object.assign(Object.assign({}, observationContext), { failureClass: 'other', type: 'refresh-failed' }));
|
|
277
|
+
throw new SecretResolutionError({
|
|
278
|
+
code: 'secret-source-failed',
|
|
279
|
+
correlationId: context === null || context === void 0 ? void 0 : context.correlationId,
|
|
280
|
+
logicalName: declaration.logicalName,
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
if (provenance !== 'explicit' || valueKind !== declaration.value.kind) {
|
|
284
|
+
observe(Object.assign(Object.assign({}, observationContext), { failureClass: 'other', type: 'refresh-failed' }));
|
|
285
|
+
throw new SecretResolutionError({
|
|
286
|
+
code: 'secret-personal-source-forbidden',
|
|
287
|
+
correlationId: context === null || context === void 0 ? void 0 : context.correlationId,
|
|
288
|
+
logicalName: declaration.logicalName,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
const value = validateValue(declaration, payload, context);
|
|
293
|
+
observe(Object.assign(Object.assign({}, observationContext), { type: 'refresh-succeeded' }));
|
|
294
|
+
return value;
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
observe(Object.assign(Object.assign({}, observationContext), { failureClass: 'other', type: 'refresh-failed' }));
|
|
298
|
+
throw error instanceof SecretResolutionError
|
|
299
|
+
? error
|
|
300
|
+
: new SecretResolutionError({
|
|
301
|
+
code: 'secret-source-failed',
|
|
302
|
+
correlationId: context === null || context === void 0 ? void 0 : context.correlationId,
|
|
303
|
+
logicalName: declaration.logicalName,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
return Object.freeze({
|
|
309
|
+
get,
|
|
310
|
+
runWithSecret(runOptions) {
|
|
311
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
312
|
+
const initial = yield get(runOptions.declaration, runOptions.reference, runOptions.context);
|
|
313
|
+
try {
|
|
314
|
+
return yield runOptions.operation(initial);
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
if (!runOptions.isAuthenticationFailure(error)) {
|
|
318
|
+
throw error;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
observe({
|
|
322
|
+
correlationId: safeCorrelationId(runOptions.context),
|
|
323
|
+
logicalName: runOptions.declaration.logicalName,
|
|
324
|
+
type: 'authentication-retry',
|
|
325
|
+
});
|
|
326
|
+
const refreshed = yield get(runOptions.declaration, runOptions.reference, runOptions.context);
|
|
327
|
+
return runOptions.operation(refreshed);
|
|
328
|
+
});
|
|
329
|
+
},
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=personal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personal.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/secrets/personal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { GetSecretValueCommand, type GetSecretValueCommandOutput } from '@aws-sdk/client-secrets-manager';
|
|
2
|
+
import { type DefinedSecret, type SecretReference, type SecretValueOf, type SecretValuePayload, type SecretValueSchema } from './contract.js';
|
|
3
|
+
declare const SERVER_RUNTIME_BRAND: unique symbol;
|
|
4
|
+
export declare const DEFAULT_SECRET_CACHE_MAX_ENTRIES: 64;
|
|
5
|
+
export declare const MAX_SECRET_CACHE_MAX_ENTRIES: 1024;
|
|
6
|
+
export declare const SECRET_SOURCE_FAILURE_CLASSES: readonly ["access-denied", "availability", "missing", "other"];
|
|
7
|
+
export type SecretSourceFailureClass = (typeof SECRET_SOURCE_FAILURE_CLASSES)[number];
|
|
8
|
+
export interface SecretSourceRequest {
|
|
9
|
+
logicalName: string;
|
|
10
|
+
secretArn: string;
|
|
11
|
+
versionStage: 'AWSCURRENT';
|
|
12
|
+
}
|
|
13
|
+
export interface SecretSourceValue extends SecretValuePayload {
|
|
14
|
+
versionStages: readonly string[];
|
|
15
|
+
}
|
|
16
|
+
export interface SecretSource {
|
|
17
|
+
getCurrentValue(request: SecretSourceRequest): Promise<SecretSourceValue>;
|
|
18
|
+
}
|
|
19
|
+
export declare class SecretSourceError extends Error {
|
|
20
|
+
readonly code: string;
|
|
21
|
+
readonly failureClass: SecretSourceFailureClass;
|
|
22
|
+
constructor(failureClass: SecretSourceFailureClass, code: string);
|
|
23
|
+
}
|
|
24
|
+
export declare const SECRET_RESOLUTION_ERROR_CODES: readonly ["secret-access-denied", "secret-current-version-missing", "secret-cache-capacity-exceeded", "secret-reference-invalid", "secret-reference-mismatch", "secret-refresh-invalidated", "secret-personal-source-forbidden", "secret-personal-stage-invalid", "secret-runtime-configuration-invalid", "secret-runtime-unbound", "secret-source-failed", "secret-source-missing", "secret-source-unavailable", "secret-value-malformed"];
|
|
25
|
+
export type SecretResolutionErrorCode = (typeof SECRET_RESOLUTION_ERROR_CODES)[number];
|
|
26
|
+
export declare class SecretResolutionError extends Error {
|
|
27
|
+
readonly code: SecretResolutionErrorCode;
|
|
28
|
+
readonly correlationId: string;
|
|
29
|
+
readonly logicalName: string;
|
|
30
|
+
readonly staleEligible: boolean;
|
|
31
|
+
constructor(input: {
|
|
32
|
+
code: SecretResolutionErrorCode;
|
|
33
|
+
correlationId?: string;
|
|
34
|
+
logicalName: string;
|
|
35
|
+
staleEligible?: boolean;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export interface ServerSecretRuntimeBinding {
|
|
39
|
+
readonly [SERVER_RUNTIME_BRAND]: true;
|
|
40
|
+
readonly stage: string;
|
|
41
|
+
readonly workload: string;
|
|
42
|
+
}
|
|
43
|
+
export interface SecretResolutionContext {
|
|
44
|
+
correlationId?: string;
|
|
45
|
+
}
|
|
46
|
+
export type SecretResolverObservation = {
|
|
47
|
+
correlationId: string;
|
|
48
|
+
logicalName: string;
|
|
49
|
+
type: 'authentication-retry';
|
|
50
|
+
} | {
|
|
51
|
+
correlationId: string;
|
|
52
|
+
logicalName: string;
|
|
53
|
+
reason: 'authentication-failure' | 'explicit' | 'rotation';
|
|
54
|
+
type: 'cache-invalidated';
|
|
55
|
+
} | {
|
|
56
|
+
ageMs: number;
|
|
57
|
+
correlationId: string;
|
|
58
|
+
logicalName: string;
|
|
59
|
+
type: 'cache-hit';
|
|
60
|
+
} | {
|
|
61
|
+
correlationId: string;
|
|
62
|
+
failureClass: SecretSourceFailureClass;
|
|
63
|
+
logicalName: string;
|
|
64
|
+
type: 'refresh-failed';
|
|
65
|
+
} | {
|
|
66
|
+
correlationId: string;
|
|
67
|
+
logicalName: string;
|
|
68
|
+
type: 'refresh-started' | 'refresh-succeeded';
|
|
69
|
+
} | {
|
|
70
|
+
ageMs: number;
|
|
71
|
+
correlationId: string;
|
|
72
|
+
logicalName: string;
|
|
73
|
+
retryAfterMs: number;
|
|
74
|
+
type: 'stale-value-used';
|
|
75
|
+
};
|
|
76
|
+
export interface SecretResolverHooks {
|
|
77
|
+
/**
|
|
78
|
+
* These are sanitized lifecycle facts, not log records. Workstream A owns
|
|
79
|
+
* the canonical record, operation, severity, and metric rendering.
|
|
80
|
+
*/
|
|
81
|
+
observe?(observation: SecretResolverObservation): void;
|
|
82
|
+
}
|
|
83
|
+
export interface SecretResolverClock {
|
|
84
|
+
now(): number;
|
|
85
|
+
}
|
|
86
|
+
export interface SecretResolverCachePolicy {
|
|
87
|
+
freshTtlMs?: number;
|
|
88
|
+
maximumEntries?: number;
|
|
89
|
+
staleTtlMs?: number;
|
|
90
|
+
}
|
|
91
|
+
export interface SecretResolverBackoffPolicy {
|
|
92
|
+
initialMs?: number;
|
|
93
|
+
maximumMs?: number;
|
|
94
|
+
}
|
|
95
|
+
export interface CreateServerSecretResolverOptions {
|
|
96
|
+
backoff?: SecretResolverBackoffPolicy;
|
|
97
|
+
binding: ServerSecretRuntimeBinding;
|
|
98
|
+
cache?: SecretResolverCachePolicy;
|
|
99
|
+
clock?: SecretResolverClock;
|
|
100
|
+
hooks?: SecretResolverHooks;
|
|
101
|
+
source: SecretSource;
|
|
102
|
+
}
|
|
103
|
+
export interface RunWithSecretOptions<Declaration extends DefinedSecret<string, SecretValueSchema<unknown>>, Result> {
|
|
104
|
+
context?: SecretResolutionContext;
|
|
105
|
+
declaration: Declaration;
|
|
106
|
+
isAuthenticationFailure(error: unknown): boolean;
|
|
107
|
+
operation(value: SecretValueOf<Declaration>): Promise<Result>;
|
|
108
|
+
reference: SecretReference;
|
|
109
|
+
}
|
|
110
|
+
export interface ServerSecretResolver {
|
|
111
|
+
get<Declaration extends DefinedSecret<string, SecretValueSchema<unknown>>>(declaration: Declaration, reference: SecretReference, context?: SecretResolutionContext): Promise<SecretValueOf<Declaration>>;
|
|
112
|
+
invalidate<Declaration extends DefinedSecret<string, SecretValueSchema<unknown>>>(declaration: Declaration, reference: SecretReference, reason?: 'authentication-failure' | 'explicit' | 'rotation', context?: SecretResolutionContext): void;
|
|
113
|
+
runWithSecret<Declaration extends DefinedSecret<string, SecretValueSchema<unknown>>, Result>(options: RunWithSecretOptions<Declaration, Result>): Promise<Result>;
|
|
114
|
+
}
|
|
115
|
+
interface AwsSecretsManagerClient {
|
|
116
|
+
send(command: GetSecretValueCommand): Promise<GetSecretValueCommandOutput>;
|
|
117
|
+
}
|
|
118
|
+
export declare function assertServerSecretRuntimeBinding(value: unknown): asserts value is ServerSecretRuntimeBinding;
|
|
119
|
+
export declare function bindServerSecretRuntime(input: {
|
|
120
|
+
stage: string;
|
|
121
|
+
workload: string;
|
|
122
|
+
}): ServerSecretRuntimeBinding;
|
|
123
|
+
export declare function createAwsSecretsManagerSource(client?: AwsSecretsManagerClient): SecretSource;
|
|
124
|
+
export declare function createServerSecretResolver(options: CreateServerSecretResolverOptions): ServerSecretResolver;
|
|
125
|
+
export {};
|