@intentius/chant-lexicon-aws 0.34.0 → 0.37.0
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/dist/api/read-client.d.ts +108 -0
- package/dist/api/read-client.d.ts.map +1 -0
- package/dist/codegen/docs.d.ts.map +1 -1
- package/dist/composites/lambda-function.d.ts +4 -4
- package/dist/composites/lambda-function.d.ts.map +1 -1
- package/dist/deep-observe.d.ts +87 -26
- package/dist/deep-observe.d.ts.map +1 -1
- package/dist/dependencies.d.ts +3 -0
- package/dist/dependencies.d.ts.map +1 -1
- package/dist/generated/index.d.ts +1 -0
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/integrity.json +4 -4
- package/dist/manifest.json +1 -1
- package/dist/meta.json +30 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/properties.d.ts +23 -7
- package/dist/properties.d.ts.map +1 -1
- package/dist/types/index.d.ts +21 -0
- package/package.json +2 -2
- package/src/api/read-client.test.ts +203 -0
- package/src/api/read-client.ts +286 -0
- package/src/codegen/docs.ts +21 -4
- package/src/deep-observe.test.ts +357 -99
- package/src/deep-observe.ts +347 -131
- package/src/dependencies.ts +11 -6
- package/src/generated/index.d.ts +21 -0
- package/src/generated/index.ts +1 -0
- package/src/generated/lexicon-aws.json +30 -0
- package/src/index.ts +18 -1
- package/src/lifecycle-integration.test.ts +54 -45
- package/src/plugin.ts +66 -55
- package/src/properties.test.ts +38 -5
- package/src/properties.ts +47 -21
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The native AWS read transport (#1206) — the read half of what
|
|
3
|
+
* `op/activities/aws-apply.ts` already does for writes.
|
|
4
|
+
*
|
|
5
|
+
* Every AWS observer shelled `aws …` once per entity, serially, and parsed
|
|
6
|
+
* stderr to find out what went wrong (#1085). The applier does not: `awsApply`
|
|
7
|
+
* speaks the CloudFormation Query protocol over `fetch`, honours an endpoint
|
|
8
|
+
* override, and is injectable for tests. This module is that same transport
|
|
9
|
+
* pointed at the two APIs the read path needs:
|
|
10
|
+
*
|
|
11
|
+
* - **CloudFormation Query** (form-encoded POST, XML back) — the stack reads
|
|
12
|
+
* `describeResources` and the deep pass both start from.
|
|
13
|
+
* - **Cloud Control** (AWS JSON 1.0, `X-Amz-Target: CloudApiService.*`) — the
|
|
14
|
+
* property-level reads (#1015).
|
|
15
|
+
*
|
|
16
|
+
* Both take the endpoint the same way the applier does, so `chant emulator` /
|
|
17
|
+
* behold `--local` keep working by construction rather than by each observer
|
|
18
|
+
* remembering to inject `--endpoint-url`.
|
|
19
|
+
*
|
|
20
|
+
* ## Signing
|
|
21
|
+
*
|
|
22
|
+
* Requests are unsigned, exactly like `awsApply`'s. That is what makes the
|
|
23
|
+
* emulator-first lanes work with no credential plumbing, and it is the reason
|
|
24
|
+
* this is scoped to the Floci lanes (#1198) rather than announced as a
|
|
25
|
+
* real-cloud read path: real AWS rejects an unsigned request. The CLI path
|
|
26
|
+
* remains available for a signed read until SigV4 lands here.
|
|
27
|
+
*/
|
|
28
|
+
/** Injectable HTTP, mirroring `AwsHttp` in the applier so tests avoid the network. */
|
|
29
|
+
export type AwsReadHttp = (url: string, init: {
|
|
30
|
+
headers: Record<string, string>;
|
|
31
|
+
body: string;
|
|
32
|
+
}, signal?: AbortSignal) => Promise<{
|
|
33
|
+
status: number;
|
|
34
|
+
text: string;
|
|
35
|
+
}>;
|
|
36
|
+
/** A failed read, carrying enough to classify it without parsing prose. */
|
|
37
|
+
export declare class AwsReadError extends Error {
|
|
38
|
+
readonly status: number;
|
|
39
|
+
/** The API's own error code (`ValidationError`, `UnsupportedOperation`, …) when it sent one. */
|
|
40
|
+
readonly code?: string | undefined;
|
|
41
|
+
constructor(message: string, status: number,
|
|
42
|
+
/** The API's own error code (`ValidationError`, `UnsupportedOperation`, …) when it sent one. */
|
|
43
|
+
code?: string | undefined);
|
|
44
|
+
}
|
|
45
|
+
export interface AwsReadClientOptions {
|
|
46
|
+
/** Endpoint override (Floci `http://localhost:4566`). Omit for real AWS hosts. */
|
|
47
|
+
endpoint?: string;
|
|
48
|
+
/** Region for the real-AWS host and the Query `Version` context. */
|
|
49
|
+
region?: string;
|
|
50
|
+
http?: AwsReadHttp;
|
|
51
|
+
signal?: AbortSignal;
|
|
52
|
+
}
|
|
53
|
+
/** Service host for `service`, honouring an endpoint override. */
|
|
54
|
+
export declare function serviceUrl(service: string, endpoint?: string, region?: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* The `<Tag>text</Tag>` pairs of one XML fragment, as a flat record. Repeated
|
|
57
|
+
* tags keep the first occurrence, which is what a `<member>` body wants —
|
|
58
|
+
* nested lists inside a member are not modelled, because nothing the read path
|
|
59
|
+
* needs from `DescribeStackResources` / `DescribeStacks` is nested that deep.
|
|
60
|
+
*/
|
|
61
|
+
export declare function xmlLeaves(fragment: string): Record<string, string>;
|
|
62
|
+
/**
|
|
63
|
+
* Every `<member>…</member>` under `listTag`, each flattened by
|
|
64
|
+
* {@link xmlLeaves}. The Query protocol renders a list as repeated `<member>`
|
|
65
|
+
* elements, and `xmlField` in the applier deliberately does not handle them —
|
|
66
|
+
* it was written for scalar status fields.
|
|
67
|
+
*/
|
|
68
|
+
export declare function xmlMembers(xml: string, listTag: string): Array<Record<string, string>>;
|
|
69
|
+
/** `<Error><Code>…</Code><Message>…</Message></Error>`, when the response carries one. */
|
|
70
|
+
export declare function xmlError(xml: string): {
|
|
71
|
+
code?: string;
|
|
72
|
+
message?: string;
|
|
73
|
+
} | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* One CloudFormation Query call. Returns the raw XML; throws
|
|
76
|
+
* {@link AwsReadError} for a non-2xx or an `<Error>` body, so a caller
|
|
77
|
+
* classifies a typed failure instead of matching on stderr.
|
|
78
|
+
*/
|
|
79
|
+
export declare function cfnQuery(action: string, params: Record<string, string>, options?: AwsReadClientOptions): Promise<string>;
|
|
80
|
+
/** One stack resource, as `DescribeStackResources` reports it. */
|
|
81
|
+
export interface StackResource {
|
|
82
|
+
logicalId: string;
|
|
83
|
+
type: string;
|
|
84
|
+
physicalId?: string;
|
|
85
|
+
status?: string;
|
|
86
|
+
timestamp?: string;
|
|
87
|
+
}
|
|
88
|
+
/** `DescribeStackResources` for one stack, mapped off the Query XML. */
|
|
89
|
+
export declare function describeStackResources(stackName: string, options?: AwsReadClientOptions): Promise<StackResource[]>;
|
|
90
|
+
/** `DescribeStacks` outputs for one stack, as `key → value`. */
|
|
91
|
+
export declare function describeStackOutputs(stackName: string, options?: AwsReadClientOptions): Promise<Record<string, string>>;
|
|
92
|
+
/** One live resource, as Cloud Control describes it. */
|
|
93
|
+
export interface CloudControlDescription {
|
|
94
|
+
identifier: string;
|
|
95
|
+
properties: Record<string, unknown>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Cloud Control returns a resource model as a JSON *string* inside the
|
|
99
|
+
* envelope, so every description unwraps twice. Returns null when either level
|
|
100
|
+
* does not parse to an object — an unparseable body is a failed read, not an
|
|
101
|
+
* empty resource.
|
|
102
|
+
*/
|
|
103
|
+
export declare function parseResourceDescription(raw: unknown): CloudControlDescription | null;
|
|
104
|
+
/** `GetResource` — the full live model for one identifier. */
|
|
105
|
+
export declare function getResource(typeName: string, identifier: string, options?: AwsReadClientOptions): Promise<CloudControlDescription | null>;
|
|
106
|
+
/** `ListResources` — every live resource of one type, paginated to exhaustion. */
|
|
107
|
+
export declare function listResources(typeName: string, options?: AwsReadClientOptions): Promise<CloudControlDescription[]>;
|
|
108
|
+
//# sourceMappingURL=read-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-client.d.ts","sourceRoot":"","sources":["../../src/api/read-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/codegen/docs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0EH;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/codegen/docs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0EH;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2jCjF"}
|
|
@@ -23,8 +23,8 @@ export type LambdaFunctionResult = {
|
|
|
23
23
|
export declare const LambdaFunction: import("@intentius/chant").CompositeDefinition<LambdaFunctionProps, LambdaFunctionResult>;
|
|
24
24
|
export declare const LambdaNode: import("@intentius/chant").CompositeDefinition<{
|
|
25
25
|
name: string | ReturnType<typeof Sub>;
|
|
26
|
-
Policies?: InstanceType<typeof Role_Policy>[] | undefined;
|
|
27
26
|
Code: ConstructorParameters<typeof Function>[0]["Code"];
|
|
27
|
+
Policies?: InstanceType<typeof Role_Policy>[] | undefined;
|
|
28
28
|
Environment?: ConstructorParameters<typeof Function>[0]["Environment"];
|
|
29
29
|
VpcConfig?: ConstructorParameters<typeof Function_VpcConfig>[0] | undefined;
|
|
30
30
|
MemorySize?: number | undefined;
|
|
@@ -39,8 +39,8 @@ export declare const LambdaNode: import("@intentius/chant").CompositeDefinition<
|
|
|
39
39
|
}, LambdaFunctionResult>;
|
|
40
40
|
export declare const LambdaPython: import("@intentius/chant").CompositeDefinition<{
|
|
41
41
|
name: string | ReturnType<typeof Sub>;
|
|
42
|
-
Policies?: InstanceType<typeof Role_Policy>[] | undefined;
|
|
43
42
|
Code: ConstructorParameters<typeof Function>[0]["Code"];
|
|
43
|
+
Policies?: InstanceType<typeof Role_Policy>[] | undefined;
|
|
44
44
|
Environment?: ConstructorParameters<typeof Function>[0]["Environment"];
|
|
45
45
|
VpcConfig?: ConstructorParameters<typeof Function_VpcConfig>[0] | undefined;
|
|
46
46
|
MemorySize?: number | undefined;
|
|
@@ -56,8 +56,8 @@ export declare const LambdaPython: import("@intentius/chant").CompositeDefinitio
|
|
|
56
56
|
/** @deprecated Use `LambdaNode` instead */
|
|
57
57
|
export declare const NodeLambda: import("@intentius/chant").CompositeDefinition<{
|
|
58
58
|
name: string | ReturnType<typeof Sub>;
|
|
59
|
-
Policies?: InstanceType<typeof Role_Policy>[] | undefined;
|
|
60
59
|
Code: ConstructorParameters<typeof Function>[0]["Code"];
|
|
60
|
+
Policies?: InstanceType<typeof Role_Policy>[] | undefined;
|
|
61
61
|
Environment?: ConstructorParameters<typeof Function>[0]["Environment"];
|
|
62
62
|
VpcConfig?: ConstructorParameters<typeof Function_VpcConfig>[0] | undefined;
|
|
63
63
|
MemorySize?: number | undefined;
|
|
@@ -73,8 +73,8 @@ export declare const NodeLambda: import("@intentius/chant").CompositeDefinition<
|
|
|
73
73
|
/** @deprecated Use `LambdaPython` instead */
|
|
74
74
|
export declare const PythonLambda: import("@intentius/chant").CompositeDefinition<{
|
|
75
75
|
name: string | ReturnType<typeof Sub>;
|
|
76
|
-
Policies?: InstanceType<typeof Role_Policy>[] | undefined;
|
|
77
76
|
Code: ConstructorParameters<typeof Function>[0]["Code"];
|
|
77
|
+
Policies?: InstanceType<typeof Role_Policy>[] | undefined;
|
|
78
78
|
Environment?: ConstructorParameters<typeof Function>[0]["Environment"];
|
|
79
79
|
VpcConfig?: ConstructorParameters<typeof Function_VpcConfig>[0] | undefined;
|
|
80
80
|
MemorySize?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda-function.d.ts","sourceRoot":"","sources":["../../src/composites/lambda-function.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAkBpC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACvE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC,EAAE,CAAC;IAC9C,SAAS,CAAC,EAAE,qBAAqB,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3D,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,YAAY,CAAC,OAAO,IAAI,CAAC,CAAC;IAChC,IAAI,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,cAAc,2FA6BP,CAAC;AAErB,eAAO,MAAM,UAAU;UApDf,MAAM,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"lambda-function.d.ts","sourceRoot":"","sources":["../../src/composites/lambda-function.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAkBpC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACvE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC,EAAE,CAAC;IAC9C,SAAS,CAAC,EAAE,qBAAqB,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3D,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,YAAY,CAAC,OAAO,IAAI,CAAC,CAAC;IAChC,IAAI,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,cAAc,2FA6BP,CAAC;AAErB,eAAO,MAAM,UAAU;UApDf,MAAM,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC;UAG/B,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;eAK5C,YAAY,CAAC,OAAO,WAAW,CAAC,EAAE;kBAF/B,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;gBAG1D,qBAAqB,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;iBAJlD,MAAM;cADT,MAAM;wBAGI,MAAM,EAAE;eAGjB;QACT,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3D;;;wBA0CD,CAAC;AAEH,eAAO,MAAM,YAAY;UAzDjB,MAAM,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC;UAG/B,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;eAK5C,YAAY,CAAC,OAAO,WAAW,CAAC,EAAE;kBAF/B,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;gBAG1D,qBAAqB,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;iBAJlD,MAAM;cADT,MAAM;wBAGI,MAAM,EAAE;eAGjB;QACT,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3D;;;wBA+CD,CAAC;AAEH,2CAA2C;AAC3C,eAAO,MAAM,UAAU;UA/Df,MAAM,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC;UAG/B,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;eAK5C,YAAY,CAAC,OAAO,WAAW,CAAC,EAAE;kBAF/B,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;gBAG1D,qBAAqB,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;iBAJlD,MAAM;cADT,MAAM;wBAGI,MAAM,EAAE;eAGjB;QACT,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3D;;;wBAkDiC,CAAC;AACrC,6CAA6C;AAC7C,eAAO,MAAM,YAAY;UAjEjB,MAAM,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC;UAG/B,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;eAK5C,YAAY,CAAC,OAAO,WAAW,CAAC,EAAE;kBAF/B,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;gBAG1D,qBAAqB,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;iBAJlD,MAAM;cADT,MAAM;wBAGI,MAAM,EAAE;eAGjB;QACT,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3D;;;wBAoDqC,CAAC"}
|
package/dist/deep-observe.d.ts
CHANGED
|
@@ -16,27 +16,80 @@
|
|
|
16
16
|
* `describe-stack-resources` already reports per logical id, so the results
|
|
17
17
|
* line up with the same IR node ids `live-attrs.ts` relies on.
|
|
18
18
|
*
|
|
19
|
-
* ##
|
|
19
|
+
* ## One reader, several sources (#1269)
|
|
20
20
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
21
|
+
* Cloud Control is the default source, not the only one. It has the property
|
|
22
|
+
* this reader wants most — it returns the *CloudFormation resource model*, so
|
|
23
|
+
* its payload lines up with the declared side without translation — but its
|
|
24
|
+
* coverage is not the same as the provider's. A security group read through
|
|
25
|
+
* Cloud Control comes back as identity and a description; read through
|
|
26
|
+
* `ec2 describe-security-groups` it comes back with every ingress and egress
|
|
27
|
+
* rule, which is the property people actually edit out of band.
|
|
28
|
+
*
|
|
29
|
+
* So each type names its source in {@link DEEP_SOURCES}, and a source that is
|
|
30
|
+
* not Cloud Control supplies a `toModel` that maps the provider's shape onto
|
|
31
|
+
* the CloudFormation one. Translation is the price of the richer read, and it
|
|
32
|
+
* belongs next to the type it translates rather than inside the diff.
|
|
33
|
+
*
|
|
34
|
+
* A declared resource of a type with no source reports NOT-OBSERVED with
|
|
35
|
+
* `unsupported-kind` — it may well exist, and saying nothing about it is the
|
|
36
|
+
* only honest answer.
|
|
27
37
|
*
|
|
28
38
|
* ## Nothing here talks to real AWS on its own terms
|
|
29
39
|
*
|
|
30
|
-
* Every call goes through the
|
|
31
|
-
*
|
|
32
|
-
* local emulator
|
|
40
|
+
* Every call goes through `./api/read-client.ts` — the applier's own transport,
|
|
41
|
+
* pointed at the read APIs (#1206) — so `AWS_ENDPOINT_URL` redirects the whole
|
|
42
|
+
* reader at a local emulator, with no CLI to spawn and typed failures instead of
|
|
43
|
+
* parsed stderr.
|
|
33
44
|
*/
|
|
34
45
|
import type { DeepNormalizationHooks, DeepObservationResult } from "@intentius/chant/lexicon";
|
|
46
|
+
import { type AwsReadHttp } from "./api/read-client.js";
|
|
47
|
+
/**
|
|
48
|
+
* Where each type's live model comes from.
|
|
49
|
+
*
|
|
50
|
+
* `cloud-control` is addressed by the physical id `describe-stack-resources`
|
|
51
|
+
* already reports, and needs no translation. An `ec2` source names a bulk
|
|
52
|
+
* describe — one call for every id of that type, not one per resource — plus
|
|
53
|
+
* the mapping from the EC2 shape onto the CloudFormation model the declared
|
|
54
|
+
* side is written in.
|
|
55
|
+
*/
|
|
56
|
+
export type DeepSource = {
|
|
57
|
+
via: "cloud-control";
|
|
58
|
+
} | {
|
|
59
|
+
via: "ec2";
|
|
60
|
+
/** Bulk describe argv, minus the ids and the region. */
|
|
61
|
+
argv: string[];
|
|
62
|
+
/** Flag the physical ids are passed under. */
|
|
63
|
+
idFlag: string;
|
|
64
|
+
/** Top-level key of the result array. */
|
|
65
|
+
key: string;
|
|
66
|
+
/** Field on each row carrying the physical id, for the join back. */
|
|
67
|
+
id: string;
|
|
68
|
+
/** EC2 row -> CloudFormation resource model. */
|
|
69
|
+
toModel: (row: Record<string, unknown>) => Record<string, unknown>;
|
|
70
|
+
};
|
|
71
|
+
export declare const DEEP_SOURCES: Record<string, DeepSource>;
|
|
35
72
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
73
|
+
* Types this reader can read live. Derived from {@link DEEP_SOURCES} so the two
|
|
74
|
+
* cannot drift apart — the shape of bug #1280 is about.
|
|
38
75
|
*/
|
|
39
76
|
export declare const DEEP_READABLE_TYPES: ReadonlySet<string>;
|
|
77
|
+
/**
|
|
78
|
+
* `describe-security-groups` -> the `AWS::EC2::SecurityGroup` resource model.
|
|
79
|
+
*
|
|
80
|
+
* The two surfaces disagree about names and about nesting. EC2 says
|
|
81
|
+
* `Description` where the template says `GroupDescription`, and nests rule
|
|
82
|
+
* sources under `IpRanges[]` / `Ipv6Ranges[]` / `UserIdGroupPairs[]` where the
|
|
83
|
+
* template writes one flat rule per source. `toIngressRules` already resolves
|
|
84
|
+
* the nesting for the topology fold (#1273); this reuses it so there is one
|
|
85
|
+
* translation of that shape in the lexicon, not two.
|
|
86
|
+
*
|
|
87
|
+
* Rules are matched by their whole canonical value (the `orderKey` hook below),
|
|
88
|
+
* so a field the template carries and this mapping drops is not a smaller diff —
|
|
89
|
+
* it is every rule reported twice, once absent and once undeclared. That is why
|
|
90
|
+
* a range's own `Description` is carried through.
|
|
91
|
+
*/
|
|
92
|
+
export declare function securityGroupToModel(row: Record<string, unknown>): Record<string, unknown>;
|
|
40
93
|
/**
|
|
41
94
|
* Property names that are server-populated wherever they appear — identifiers
|
|
42
95
|
* the service mints, timestamps it stamps, counters it maintains. Matched on
|
|
@@ -56,6 +109,16 @@ export declare const AWS_READ_ONLY_NAMES: ReadonlySet<string>;
|
|
|
56
109
|
* the property in the diff, so a later change to it still reports.
|
|
57
110
|
*/
|
|
58
111
|
export declare const AWS_SERVICE_DEFAULTS: Record<string, Record<string, unknown>>;
|
|
112
|
+
/**
|
|
113
|
+
* Names the service mints when a template does not supply one (#1269).
|
|
114
|
+
*
|
|
115
|
+
* Unlike {@link AWS_SERVICE_DEFAULTS} there is no fixed value to compare: a
|
|
116
|
+
* CloudFormation-generated security-group name is a different random string on
|
|
117
|
+
* every deploy. Pruned on the live side only, and only where source is silent —
|
|
118
|
+
* a template that names the group keeps the property in the diff, so a later
|
|
119
|
+
* rename still reports.
|
|
120
|
+
*/
|
|
121
|
+
export declare const AWS_GENERATED_NAMES: Record<string, ReadonlySet<string>>;
|
|
59
122
|
/**
|
|
60
123
|
* The aws lexicon's noise rules. The three classes the epic names for AWS —
|
|
61
124
|
* server-populated fields, unstable ordering (tags, policy statements), and
|
|
@@ -63,18 +126,11 @@ export declare const AWS_SERVICE_DEFAULTS: Record<string, Record<string, unknown
|
|
|
63
126
|
* rule that hides drift.
|
|
64
127
|
*/
|
|
65
128
|
export declare const awsDeepNormalizationHooks: DeepNormalizationHooks;
|
|
66
|
-
/** One live resource as
|
|
129
|
+
/** One live resource as Cloud Control returns it. Exported for tests. */
|
|
67
130
|
export interface CloudControlResource {
|
|
68
131
|
identifier: string;
|
|
69
132
|
properties: Record<string, unknown>;
|
|
70
133
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Parse a `cloudcontrol get-resource` payload. Cloud Control returns the model
|
|
73
|
-
* as a JSON *string* inside the envelope, so this unwraps twice. Returns null
|
|
74
|
-
* for anything that does not parse to an object — an unparseable body is a
|
|
75
|
-
* failed read, not an empty resource.
|
|
76
|
-
*/
|
|
77
|
-
export declare function parseCloudControlResource(stdout: string): CloudControlResource | null;
|
|
78
134
|
/** True when the live property tree carries chant's ownership marker tag. */
|
|
79
135
|
export declare function hasOwnershipMarker(properties: Record<string, unknown>): boolean;
|
|
80
136
|
export interface AwsDeepObserveOptions {
|
|
@@ -91,16 +147,21 @@ export interface AwsDeepObserveOptions {
|
|
|
91
147
|
* silently records no properties for them. */
|
|
92
148
|
region?: string;
|
|
93
149
|
owned?: boolean;
|
|
150
|
+
/** Injectable transport, mirroring `awsApply`'s `http` — tests reach the reader without a network. */
|
|
151
|
+
http?: AwsReadHttp;
|
|
94
152
|
}
|
|
95
153
|
/**
|
|
96
154
|
* Read the live property tree for each declared entity via Cloud Control.
|
|
97
155
|
*
|
|
98
|
-
* Two reads per run plus one per readable resource: `
|
|
99
|
-
* resolves logical id → (type, physical id), then `
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
156
|
+
* Two reads per run plus one per readable resource: `DescribeStackResources`
|
|
157
|
+
* resolves logical id → (type, physical id), then `GetResource` fetches each
|
|
158
|
+
* model. The first read's failure modes are the thin path's, verbatim — a stack
|
|
159
|
+
* that does not exist yet is a real absence (nothing is deployed, so there are
|
|
160
|
+
* no properties to drift), anything else is a hole for every declared entity.
|
|
161
|
+
*
|
|
162
|
+
* The per-resource reads run concurrently (#1201/#1206). They were serial when
|
|
163
|
+
* each one was a process spawn, which made a deep snapshot of a large stack
|
|
164
|
+
* cost N round trips end to end.
|
|
104
165
|
*/
|
|
105
166
|
export declare function observeResourcesDeepAws(options: AwsDeepObserveOptions): Promise<DeepObservationResult>;
|
|
106
167
|
//# sourceMappingURL=deep-observe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-observe.d.ts","sourceRoot":"","sources":["../src/deep-observe.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"deep-observe.d.ts","sourceRoot":"","sources":["../src/deep-observe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EAGV,sBAAsB,EACtB,qBAAqB,EAItB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAK3B;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,GAAG,EAAE,eAAe,CAAA;CAAE,GACxB;IACE,GAAG,EAAE,KAAK,CAAC;IACX,wDAAwD;IACxD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpE,CAAC;AAEN,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAenD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAsC,CAAC;AAE3F;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAe1F;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAkBlD,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBxE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAEnE,CAAC;AAkBF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,EAAE,sBAiEvC,CAAC;AAMF,yEAAyE;AACzE,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAmED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAI/E;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;kDAG8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sGAAsG;IACtG,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,CAqIhC"}
|
package/dist/dependencies.d.ts
CHANGED
|
@@ -22,12 +22,15 @@ interface RawIpPermission {
|
|
|
22
22
|
ToPort?: number;
|
|
23
23
|
IpRanges?: Array<{
|
|
24
24
|
CidrIp?: string;
|
|
25
|
+
Description?: string;
|
|
25
26
|
}>;
|
|
26
27
|
Ipv6Ranges?: Array<{
|
|
27
28
|
CidrIpv6?: string;
|
|
29
|
+
Description?: string;
|
|
28
30
|
}>;
|
|
29
31
|
UserIdGroupPairs?: Array<{
|
|
30
32
|
GroupId?: string;
|
|
33
|
+
Description?: string;
|
|
31
34
|
}>;
|
|
32
35
|
}
|
|
33
36
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAU,MAAM,0BAA0B,CAAC;AAKhG,uEAAuE;AACvE,UAAU,eAAe;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAU,MAAM,0BAA0B,CAAC;AAKhG,uEAAuE;AACvE,UAAU,eAAe;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwB7F;AASD;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA6OjC"}
|
|
@@ -1353,6 +1353,7 @@ export declare const ServiceNetworkServiceAssociation: new (props: Record<string
|
|
|
1353
1353
|
export declare const ServiceNetworkVpcAssociation: new (props: Record<string, unknown>, attributes?: Record<string, unknown>) => import("packages/core/src").Declarable & Record<string, string>;
|
|
1354
1354
|
export declare const ServicePrincipalName: new (props: Record<string, unknown>, attributes?: Record<string, unknown>) => import("packages/core/src").Declarable & Record<string, string>;
|
|
1355
1355
|
export declare const ServiceProfile: new (props: Record<string, unknown>, attributes?: Record<string, unknown>) => import("packages/core/src").Declarable & Record<string, string>;
|
|
1356
|
+
export declare const ServiceSetting: new (props: Record<string, unknown>, attributes?: Record<string, unknown>) => import("packages/core/src").Declarable & Record<string, string>;
|
|
1356
1357
|
export declare const ServiceTemplate: new (props: Record<string, unknown>, attributes?: Record<string, unknown>) => import("packages/core/src").Declarable & Record<string, string>;
|
|
1357
1358
|
export declare const SESConfigurationSet: new (props: Record<string, unknown>, attributes?: Record<string, unknown>) => import("packages/core/src").Declarable & Record<string, string>;
|
|
1358
1359
|
export declare const SESConfigurationSetEventDestination: new (props: Record<string, unknown>, attributes?: Record<string, unknown>) => import("packages/core/src").Declarable & Record<string, string>;
|