aws-cdk 2.1020.0 → 2.1020.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.
@@ -0,0 +1,45 @@
1
+ import type { Agent } from 'https';
2
+ import type { UrlWithStringQuery } from 'url';
3
+ import type { IIoHost } from '../io-host';
4
+ import type { TelemetrySchema } from './schema';
5
+ import type { ITelemetrySink } from './sink-interface';
6
+ /**
7
+ * Properties for the Endpoint Telemetry Client
8
+ */
9
+ export interface EndpointTelemetrySinkProps {
10
+ /**
11
+ * The external endpoint to hit
12
+ */
13
+ readonly endpoint: UrlWithStringQuery;
14
+ /**
15
+ * Where messages are going to be sent
16
+ */
17
+ readonly ioHost: IIoHost;
18
+ /**
19
+ * The agent responsible for making the network requests.
20
+ *
21
+ * Use this to set up a proxy connection.
22
+ *
23
+ * @default - Uses the shared global node agent
24
+ */
25
+ readonly agent?: Agent;
26
+ }
27
+ /**
28
+ * The telemetry client that hits an external endpoint.
29
+ */
30
+ export declare class EndpointTelemetrySink implements ITelemetrySink {
31
+ private events;
32
+ private endpoint;
33
+ private ioHelper;
34
+ private agent?;
35
+ constructor(props: EndpointTelemetrySinkProps);
36
+ /**
37
+ * Add an event to the collection.
38
+ */
39
+ emit(event: TelemetrySchema): Promise<void>;
40
+ flush(): Promise<void>;
41
+ /**
42
+ * Returns true if telemetry successfully posted, false otherwise.
43
+ */
44
+ private https;
45
+ }
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EndpointTelemetrySink = void 0;
4
+ const https_1 = require("https");
5
+ const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
6
+ const api_private_1 = require("../../api-private");
7
+ const REQUEST_ATTEMPT_TIMEOUT_MS = 500;
8
+ /**
9
+ * The telemetry client that hits an external endpoint.
10
+ */
11
+ class EndpointTelemetrySink {
12
+ constructor(props) {
13
+ this.events = [];
14
+ this.endpoint = props.endpoint;
15
+ this.ioHelper = api_private_1.IoHelper.fromActionAwareIoHost(props.ioHost);
16
+ this.agent = props.agent;
17
+ // Batch events every 30 seconds
18
+ setInterval(() => this.flush(), 30000).unref();
19
+ }
20
+ /**
21
+ * Add an event to the collection.
22
+ */
23
+ async emit(event) {
24
+ try {
25
+ this.events.push(event);
26
+ }
27
+ catch (e) {
28
+ // Never throw errors, just log them via ioHost
29
+ await this.ioHelper.defaults.trace(`Failed to add telemetry event: ${e.message}`);
30
+ }
31
+ }
32
+ async flush() {
33
+ try {
34
+ if (this.events.length === 0) {
35
+ return;
36
+ }
37
+ const res = await this.https(this.endpoint, this.events);
38
+ // Clear the events array after successful output
39
+ if (res) {
40
+ this.events = [];
41
+ }
42
+ }
43
+ catch (e) {
44
+ // Never throw errors, just log them via ioHost
45
+ await this.ioHelper.defaults.trace(`Failed to add telemetry event: ${e.message}`);
46
+ }
47
+ }
48
+ /**
49
+ * Returns true if telemetry successfully posted, false otherwise.
50
+ */
51
+ async https(url, body) {
52
+ try {
53
+ const res = await doRequest(url, body, this.agent);
54
+ // Successfully posted
55
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
56
+ return true;
57
+ }
58
+ await this.ioHelper.defaults.trace(`Telemetry Unsuccessful: POST ${url.hostname}${url.pathname}: ${res.statusCode}:${res.statusMessage}`);
59
+ return false;
60
+ }
61
+ catch (e) {
62
+ await this.ioHelper.defaults.trace(`Telemetry Error: POST ${url.hostname}${url.pathname}: ${JSON.stringify(e)}`);
63
+ return false;
64
+ }
65
+ }
66
+ }
67
+ exports.EndpointTelemetrySink = EndpointTelemetrySink;
68
+ /**
69
+ * A Promisified version of `https.request()`
70
+ */
71
+ function doRequest(url, data, agent) {
72
+ return new Promise((ok, ko) => {
73
+ const payload = JSON.stringify(data);
74
+ const req = (0, https_1.request)({
75
+ hostname: url.hostname,
76
+ port: url.port,
77
+ path: url.pathname,
78
+ method: 'POST',
79
+ headers: {
80
+ 'content-type': 'application/json',
81
+ 'content-length': payload.length,
82
+ },
83
+ agent,
84
+ timeout: REQUEST_ATTEMPT_TIMEOUT_MS,
85
+ }, ok);
86
+ req.on('error', ko);
87
+ req.on('timeout', () => {
88
+ const error = new toolkit_lib_1.ToolkitError(`Timeout after ${REQUEST_ATTEMPT_TIMEOUT_MS}ms, aborting request`);
89
+ req.destroy(error);
90
+ });
91
+ req.end(payload);
92
+ });
93
+ }
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtc2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVuZHBvaW50LXNpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsaUNBQWdDO0FBRWhDLHNEQUFvRDtBQUNwRCxtREFBNkM7QUFLN0MsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUEwQnZDOztHQUVHO0FBQ0gsTUFBYSxxQkFBcUI7SUFNaEMsWUFBbUIsS0FBaUM7UUFMNUMsV0FBTSxHQUFzQixFQUFFLENBQUM7UUFNckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsc0JBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRXpCLGdDQUFnQztRQUNoQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBc0I7UUFDdEMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsK0NBQStDO1lBQy9DLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLElBQUksQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE9B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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJbmNvbWluZ01lc3NhZ2UgfSBmcm9tICdodHRwJztcbmltcG9ydCB0eXBlIHsgQWdlbnQgfSBmcm9tICdodHRwcyc7XG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHR5cGUgeyBVcmxXaXRoU3RyaW5nUXVlcnkgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHsgSW9IZWxwZXIgfSBmcm9tICcuLi8uLi9hcGktcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IElJb0hvc3QgfSBmcm9tICcuLi9pby1ob3N0JztcbmltcG9ydCB0eXBlIHsgVGVsZW1ldHJ5U2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBJVGVsZW1ldHJ5U2luayB9IGZyb20gJy4vc2luay1pbnRlcmZhY2UnO1xuXG5jb25zdCBSRVFVRVNUX0FUVEVNUFRfVElNRU9VVF9NUyA9IDUwMDtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgRW5kcG9pbnQgVGVsZW1ldHJ5IENsaWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuZHBvaW50VGVsZW1ldHJ5U2lua1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBlbmRwb2ludCB0byBoaXRcbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50OiBVcmxXaXRoU3RyaW5nUXVlcnk7XG5cbiAgLyoqXG4gICAqIFdoZXJlIG1lc3NhZ2VzIGFyZSBnb2luZyB0byBiZSBzZW50XG4gICAqL1xuICByZWFkb25seSBpb0hvc3Q6IElJb0hvc3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBhZ2VudCByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBuZXR3b3JrIHJlcXVlc3RzLlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBzZXQgdXAgYSBwcm94eSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZXMgdGhlIHNoYXJlZCBnbG9iYWwgbm9kZSBhZ2VudFxuICAgKi9cbiAgcmVhZG9ubHkgYWdlbnQ/OiBBZ2VudDtcbn1cblxuLyoqXG4gKiBUaGUgdGVsZW1ldHJ5IGNsaWVudCB0aGF0IGhpdHMgYW4gZXh0ZXJuYWwgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFbmRwb2ludFRlbGVtZXRyeVNpbmsgaW1wbGVtZW50cyBJVGVsZW1ldHJ5U2luayB7XG4gIHByaXZhdGUgZXZlbnRzOiBUZWxlbWV0cnlTY2hlbWFbXSA9IFtdO1xuICBwcml2YXRlIGVuZHBvaW50OiBVcmxXaXRoU3RyaW5nUXVlcnk7XG4gIHByaXZhdGUgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIGFnZW50PzogQWdlbnQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzOiBFbmRwb2ludFRlbGVtZXRyeVNpbmtQcm9wcykge1xuICAgIHRoaXMuZW5kcG9pbnQgPSBwcm9wcy5lbmRwb2ludDtcbiAgICB0aGlzLmlvSGVscGVyID0gSW9IZWxwZXIuZnJvbUFjdGlvbkF3YXJlSW9Ib3N0KHByb3BzLmlvSG9zdCk7XG4gICAgdGhpcy5hZ2VudCA9IHByb3BzLmFnZW50O1xuXG4gICAgLy8gQmF0Y2ggZXZlbnRzIGV2ZXJ5IDMwIHNlY29uZHNcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmZsdXNoKCksIDMwMDAwKS51bnJlZigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBldmVudCB0byB0aGUgY29sbGVjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbWl0KGV2ZW50OiBUZWxlbWV0cnlTY2hlbWEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5ldmVudHMucHVzaChldmVudCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBOZXZlciB0aHJvdyBlcnJvcnMsIGp1c3QgbG9nIHRoZW0gdmlhIGlvSG9zdFxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgRmFpbGVkIHRvIGFkZCB0ZWxlbWV0cnkgZXZlbnQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuaHR0cHModGhpcy5lbmRwb2ludCwgdGhpcy5ldmVudHMpO1xuXG4gICAgICAvLyBDbGVhciB0aGUgZXZlbnRzIGFycmF5IGFmdGVyIHN1Y2Nlc3NmdWwgb3V0cHV0XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBOZXZlciB0aHJvdyBlcnJvcnMsIGp1c3QgbG9nIHRoZW0gdmlhIGlvSG9zdFxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgRmFpbGVkIHRvIGFkZCB0ZWxlbWV0cnkgZXZlbnQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGVsZW1ldHJ5IHN1Y2Nlc3NmdWxseSBwb3N0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaHR0cHMoXG4gICAgdXJsOiBVcmxXaXRoU3RyaW5nUXVlcnksXG4gICAgYm9keTogVGVsZW1ldHJ5U2NoZW1hW10sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBkb1JlcXVlc3QodXJsLCBib2R5LCB0aGlzLmFnZW50KTtcblxuICAgICAgLy8gU3VjY2Vzc2Z1bGx5IHBvc3RlZFxuICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICYmIHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgVGVsZW1ldHJ5IFVuc3VjY2Vzc2Z1bDogUE9TVCAke3VybC5ob3N0bmFtZX0ke3VybC5wYXRobmFtZX06ICR7cmVzLnN0YXR1c0NvZGV9OiR7cmVzLnN0YXR1c01lc3NhZ2V9YCk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoYFRlbGVtZXRyeSBFcnJvcjogUE9TVCAke3VybC5ob3N0bmFtZX0ke3VybC5wYXRobmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSBQcm9taXNpZmllZCB2ZXJzaW9uIG9mIGBodHRwcy5yZXF1ZXN0KClgXG4gKi9cbmZ1bmN0aW9uIGRvUmVxdWVzdChcbiAgdXJsOiBVcmxXaXRoU3RyaW5nUXVlcnksXG4gIGRhdGE6IFRlbGVtZXRyeVNjaGVtYVtdLFxuICBhZ2VudD86IEFnZW50LFxuKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxJbmNvbWluZ01lc3NhZ2U+KChvaywga28pID0+IHtcbiAgICBjb25zdCBwYXlsb2FkOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICBjb25zdCByZXEgPSByZXF1ZXN0KHtcbiAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB1cmwucG9ydCxcbiAgICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAnY29udGVudC1sZW5ndGgnOiBwYXlsb2FkLmxlbmd0aCxcbiAgICAgIH0sXG4gICAgICBhZ2VudCxcbiAgICAgIHRpbWVvdXQ6IFJFUVVFU1RfQVRURU1QVF9USU1FT1VUX01TLFxuICAgIH0sIG9rKTtcblxuICAgIHJlcS5vbignZXJyb3InLCBrbyk7XG4gICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVG9vbGtpdEVycm9yKGBUaW1lb3V0IGFmdGVyICR7UkVRVUVTVF9BVFRFTVBUX1RJTUVPVVRfTVN9bXMsIGFib3J0aW5nIHJlcXVlc3RgKTtcbiAgICAgIHJlcS5kZXN0cm95KGVycm9yKTtcbiAgICB9KTtcblxuICAgIHJlcS5lbmQocGF5bG9hZCk7XG4gIH0pO1xufVxuIl19
@@ -0,0 +1,32 @@
1
+ import { type IIoHost } from '@aws-cdk/toolkit-lib';
2
+ import type { TelemetrySchema } from './schema';
3
+ import type { ITelemetrySink } from './sink-interface';
4
+ /**
5
+ * Properties for the FileTelemetryClient
6
+ */
7
+ export interface FileTelemetrySinkProps {
8
+ /**
9
+ * Where messages are going to be sent
10
+ */
11
+ readonly ioHost: IIoHost;
12
+ /**
13
+ * The local file to log telemetry data to.
14
+ */
15
+ readonly logFilePath: string;
16
+ }
17
+ /**
18
+ * A telemetry client that collects events writes them to a file
19
+ */
20
+ export declare class FileTelemetrySink implements ITelemetrySink {
21
+ private ioHelper;
22
+ private logFilePath;
23
+ /**
24
+ * Create a new FileTelemetryClient
25
+ */
26
+ constructor(props: FileTelemetrySinkProps);
27
+ /**
28
+ * Emit an event.
29
+ */
30
+ emit(event: TelemetrySchema): Promise<void>;
31
+ flush(): Promise<void>;
32
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileTelemetrySink = void 0;
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+ const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
7
+ const api_private_1 = require("../../api-private");
8
+ /**
9
+ * A telemetry client that collects events writes them to a file
10
+ */
11
+ class FileTelemetrySink {
12
+ /**
13
+ * Create a new FileTelemetryClient
14
+ */
15
+ constructor(props) {
16
+ this.ioHelper = api_private_1.IoHelper.fromActionAwareIoHost(props.ioHost);
17
+ this.logFilePath = props.logFilePath;
18
+ if (fs.existsSync(this.logFilePath)) {
19
+ throw new toolkit_lib_1.ToolkitError(`Telemetry file already exists at ${this.logFilePath}`);
20
+ }
21
+ // Create the file if necessary
22
+ const directory = path.dirname(this.logFilePath);
23
+ if (!fs.existsSync(directory)) {
24
+ fs.mkdirSync(directory, { recursive: true });
25
+ }
26
+ }
27
+ /**
28
+ * Emit an event.
29
+ */
30
+ async emit(event) {
31
+ try {
32
+ // Format the events as a JSON string with pretty printing
33
+ const output = JSON.stringify(event, null, 2) + '\n';
34
+ // Write to file
35
+ fs.appendFileSync(this.logFilePath, output);
36
+ }
37
+ catch (e) {
38
+ // Never throw errors, just log them via ioHost
39
+ await this.ioHelper.defaults.trace(`Failed to add telemetry event: ${e.message}`);
40
+ }
41
+ }
42
+ async flush() {
43
+ return;
44
+ }
45
+ }
46
+ exports.FileTelemetrySink = FileTelemetrySink;
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zaW5rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmlsZS1zaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0Isc0RBQWtFO0FBR2xFLG1EQUE2QztBQWlCN0M7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQUk1Qjs7T0FFRztJQUNILFlBQVksS0FBNkI7UUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxzQkFBUSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFFckMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSwwQkFBWSxDQUFDLG9DQUFvQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQsK0JBQStCO1FBQy9CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDOUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFzQjtRQUN0QyxJQUFJLENBQUM7WUFDSCwwREFBMEQ7WUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUVyRCxnQkFBZ0I7WUFDaEIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLCtDQUErQztZQUMvQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixPQUFPO0lBQ1QsQ0FBQztDQUNGO0FBekNELDhDQXlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IsIHR5cGUgSUlvSG9zdCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCB0eXBlIHsgVGVsZW1ldHJ5U2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBJVGVsZW1ldHJ5U2luayB9IGZyb20gJy4vc2luay1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW9IZWxwZXIgfSBmcm9tICcuLi8uLi9hcGktcHJpdmF0ZSc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIEZpbGVUZWxlbWV0cnlDbGllbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlVGVsZW1ldHJ5U2lua1Byb3BzIHtcbiAgLyoqXG4gICAqIFdoZXJlIG1lc3NhZ2VzIGFyZSBnb2luZyB0byBiZSBzZW50XG4gICAqL1xuICByZWFkb25seSBpb0hvc3Q6IElJb0hvc3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhbCBmaWxlIHRvIGxvZyB0ZWxlbWV0cnkgZGF0YSB0by5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ0ZpbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSB0ZWxlbWV0cnkgY2xpZW50IHRoYXQgY29sbGVjdHMgZXZlbnRzIHdyaXRlcyB0aGVtIHRvIGEgZmlsZVxuICovXG5leHBvcnQgY2xhc3MgRmlsZVRlbGVtZXRyeVNpbmsgaW1wbGVtZW50cyBJVGVsZW1ldHJ5U2luayB7XG4gIHByaXZhdGUgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIGxvZ0ZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBGaWxlVGVsZW1ldHJ5Q2xpZW50XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRmlsZVRlbGVtZXRyeVNpbmtQcm9wcykge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBJb0hlbHBlci5mcm9tQWN0aW9uQXdhcmVJb0hvc3QocHJvcHMuaW9Ib3N0KTtcbiAgICB0aGlzLmxvZ0ZpbGVQYXRoID0gcHJvcHMubG9nRmlsZVBhdGg7XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyh0aGlzLmxvZ0ZpbGVQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVGVsZW1ldHJ5IGZpbGUgYWxyZWFkeSBleGlzdHMgYXQgJHt0aGlzLmxvZ0ZpbGVQYXRofWApO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgZmlsZSBpZiBuZWNlc3NhcnlcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUodGhpcy5sb2dGaWxlUGF0aCk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGRpcmVjdG9yeSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhkaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGFuIGV2ZW50LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVtaXQoZXZlbnQ6IFRlbGVtZXRyeVNjaGVtYSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBGb3JtYXQgdGhlIGV2ZW50cyBhcyBhIEpTT04gc3RyaW5nIHdpdGggcHJldHR5IHByaW50aW5nXG4gICAgICBjb25zdCBvdXRwdXQgPSBKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMikgKyAnXFxuJztcblxuICAgICAgLy8gV3JpdGUgdG8gZmlsZVxuICAgICAgZnMuYXBwZW5kRmlsZVN5bmModGhpcy5sb2dGaWxlUGF0aCwgb3V0cHV0KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIE5ldmVyIHRocm93IGVycm9ycywganVzdCBsb2cgdGhlbSB2aWEgaW9Ib3N0XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLnRyYWNlKGBGYWlsZWQgdG8gYWRkIHRlbGVtZXRyeSBldmVudDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybjtcbiAgfVxufVxuIl19
@@ -0,0 +1,27 @@
1
+ import type { IIoHost } from '@aws-cdk/toolkit-lib';
2
+ import type { TelemetrySchema } from './schema';
3
+ import type { ITelemetrySink } from './sink-interface';
4
+ /**
5
+ * Properties for the StdoutTelemetryClient
6
+ */
7
+ export interface IoHostTelemetrySinkProps {
8
+ /**
9
+ * Where messages are going to be sent
10
+ */
11
+ readonly ioHost: IIoHost;
12
+ }
13
+ /**
14
+ * A telemetry client that collects events and flushes them to stdout.
15
+ */
16
+ export declare class IoHostTelemetrySink implements ITelemetrySink {
17
+ private ioHelper;
18
+ /**
19
+ * Create a new StdoutTelemetryClient
20
+ */
21
+ constructor(props: IoHostTelemetrySinkProps);
22
+ /**
23
+ * Emit an event
24
+ */
25
+ emit(event: TelemetrySchema): Promise<void>;
26
+ flush(): Promise<void>;
27
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IoHostTelemetrySink = void 0;
4
+ const api_private_1 = require("../../api-private");
5
+ /**
6
+ * A telemetry client that collects events and flushes them to stdout.
7
+ */
8
+ class IoHostTelemetrySink {
9
+ /**
10
+ * Create a new StdoutTelemetryClient
11
+ */
12
+ constructor(props) {
13
+ this.ioHelper = api_private_1.IoHelper.fromActionAwareIoHost(props.ioHost);
14
+ }
15
+ /**
16
+ * Emit an event
17
+ */
18
+ async emit(event) {
19
+ try {
20
+ // Format the events as a JSON string with pretty printing
21
+ const output = JSON.stringify(event, null, 2);
22
+ // Write to IoHost
23
+ await this.ioHelper.defaults.trace(`--- TELEMETRY EVENT ---\n${output}\n-----------------------\n`);
24
+ }
25
+ catch (e) {
26
+ // Never throw errors, just log them via ioHost
27
+ await this.ioHelper.defaults.trace(`Failed to add telemetry event: ${e.message}`);
28
+ }
29
+ }
30
+ async flush() {
31
+ return;
32
+ }
33
+ }
34
+ exports.IoHostTelemetrySink = IoHostTelemetrySink;
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8taG9zdC1zaW5rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW8taG9zdC1zaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLG1EQUE2QztBQVk3Qzs7R0FFRztBQUNILE1BQWEsbUJBQW1CO0lBRzlCOztPQUVHO0lBQ0gsWUFBWSxLQUErQjtRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLHNCQUFRLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBc0I7UUFDdEMsSUFBSSxDQUFDO1lBQ0gsMERBQTBEO1lBQzFELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUU5QyxrQkFBa0I7WUFDbEIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLE1BQU0sNkJBQTZCLENBQUMsQ0FBQztRQUN0RyxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQiwrQ0FBK0M7WUFDL0MsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsT0FBTztJQUNULENBQUM7Q0FDRjtBQTdCRCxrREE2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElJb0hvc3QgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgdHlwZSB7IFRlbGVtZXRyeVNjaGVtYSB9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgSVRlbGVtZXRyeVNpbmsgfSBmcm9tICcuL3NpbmstaW50ZXJmYWNlJztcbmltcG9ydCB7IElvSGVscGVyIH0gZnJvbSAnLi4vLi4vYXBpLXByaXZhdGUnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBTdGRvdXRUZWxlbWV0cnlDbGllbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJb0hvc3RUZWxlbWV0cnlTaW5rUHJvcHMge1xuICAvKipcbiAgICogV2hlcmUgbWVzc2FnZXMgYXJlIGdvaW5nIHRvIGJlIHNlbnRcbiAgICovXG4gIHJlYWRvbmx5IGlvSG9zdDogSUlvSG9zdDtcbn1cblxuLyoqXG4gKiBBIHRlbGVtZXRyeSBjbGllbnQgdGhhdCBjb2xsZWN0cyBldmVudHMgYW5kIGZsdXNoZXMgdGhlbSB0byBzdGRvdXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJb0hvc3RUZWxlbWV0cnlTaW5rIGltcGxlbWVudHMgSVRlbGVtZXRyeVNpbmsge1xuICBwcml2YXRlIGlvSGVscGVyOiBJb0hlbHBlcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFN0ZG91dFRlbGVtZXRyeUNsaWVudFxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IElvSG9zdFRlbGVtZXRyeVNpbmtQcm9wcykge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBJb0hlbHBlci5mcm9tQWN0aW9uQXdhcmVJb0hvc3QocHJvcHMuaW9Ib3N0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGFuIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW1pdChldmVudDogVGVsZW1ldHJ5U2NoZW1hKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZvcm1hdCB0aGUgZXZlbnRzIGFzIGEgSlNPTiBzdHJpbmcgd2l0aCBwcmV0dHkgcHJpbnRpbmdcbiAgICAgIGNvbnN0IG91dHB1dCA9IEpTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKTtcblxuICAgICAgLy8gV3JpdGUgdG8gSW9Ib3N0XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLnRyYWNlKGAtLS0gVEVMRU1FVFJZIEVWRU5UIC0tLVxcbiR7b3V0cHV0fVxcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuYCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBOZXZlciB0aHJvdyBlcnJvcnMsIGp1c3QgbG9nIHRoZW0gdmlhIGlvSG9zdFxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgRmFpbGVkIHRvIGFkZCB0ZWxlbWV0cnkgZXZlbnQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm47XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,62 @@
1
+ interface Identifiers {
2
+ readonly cdkCliVersion: string;
3
+ readonly cdkLibraryVersion?: string;
4
+ readonly telemetryVersion: string;
5
+ readonly sessionId: string;
6
+ readonly eventId: string;
7
+ readonly installationId: string;
8
+ readonly timestamp: string;
9
+ readonly accountId?: string;
10
+ readonly region?: string;
11
+ }
12
+ interface Event {
13
+ readonly state: 'ABORTED' | 'FAILED' | 'SUCCEEDED';
14
+ readonly eventType: string;
15
+ readonly command: {
16
+ readonly path: string[];
17
+ readonly parameters: string[];
18
+ readonly config: {
19
+ [key: string]: any;
20
+ };
21
+ };
22
+ }
23
+ interface Environment {
24
+ readonly os: {
25
+ readonly platform: string;
26
+ readonly release: string;
27
+ };
28
+ readonly ci: boolean;
29
+ readonly nodeVersion: string;
30
+ }
31
+ interface Duration {
32
+ readonly total: number;
33
+ readonly components?: {
34
+ [key: string]: number;
35
+ };
36
+ }
37
+ type Counters = {
38
+ [key: string]: number;
39
+ };
40
+ interface Error {
41
+ readonly name: string;
42
+ readonly message?: string;
43
+ readonly trace?: string;
44
+ readonly logs?: string;
45
+ }
46
+ interface Dependency {
47
+ readonly name: string;
48
+ readonly version: string;
49
+ }
50
+ interface Project {
51
+ readonly dependencies?: Dependency[];
52
+ }
53
+ export interface TelemetrySchema {
54
+ readonly identifiers: Identifiers;
55
+ readonly event: Event;
56
+ readonly environment: Environment;
57
+ readonly project: Project;
58
+ readonly duration: Duration;
59
+ readonly counters?: Counters;
60
+ readonly error?: Error;
61
+ }
62
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgSWRlbnRpZmllcnMge1xuICByZWFkb25seSBjZGtDbGlWZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNka0xpYnJhcnlWZXJzaW9uPzogc3RyaW5nO1xuICByZWFkb25seSB0ZWxlbWV0cnlWZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlc3Npb25JZDogc3RyaW5nO1xuICByZWFkb25seSBldmVudElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluc3RhbGxhdGlvbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpbWVzdGFtcDogc3RyaW5nO1xuICByZWFkb25seSBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEV2ZW50IHtcbiAgcmVhZG9ubHkgc3RhdGU6ICdBQk9SVEVEJyB8ICdGQUlMRUQnIHwgJ1NVQ0NFRURFRCc7XG4gIHJlYWRvbmx5IGV2ZW50VHlwZTogc3RyaW5nO1xuICByZWFkb25seSBjb21tYW5kOiB7XG4gICAgcmVhZG9ubHkgcGF0aDogc3RyaW5nW107XG4gICAgcmVhZG9ubHkgcGFyYW1ldGVyczogc3RyaW5nW107XG4gICAgcmVhZG9ubHkgY29uZmlnOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgRW52aXJvbm1lbnQge1xuICByZWFkb25seSBvczoge1xuICAgIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcmVsZWFzZTogc3RyaW5nO1xuICB9O1xuICByZWFkb25seSBjaTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm9kZVZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIER1cmF0aW9uIHtcbiAgcmVhZG9ubHkgdG90YWw6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29tcG9uZW50cz86IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07XG59XG5cbnR5cGUgQ291bnRlcnMgPSB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9O1xuXG5pbnRlcmZhY2UgRXJyb3Ige1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lc3NhZ2U/OiBzdHJpbmc7IC8vIGFub255bWl6ZWQgc3RhY2sgbWVzc2FnZVxuICByZWFkb25seSB0cmFjZT86IHN0cmluZzsgLy8gYW5vbnltaXplZCBzdGFjayB0cmFjZVxuICByZWFkb25seSBsb2dzPzogc3RyaW5nOyAvLyBhbm9ueW1pemVkIHN0YWNrIGxvZ3Ncbn1cblxuaW50ZXJmYWNlIERlcGVuZGVuY3kge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFByb2plY3Qge1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM/OiBEZXBlbmRlbmN5W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVsZW1ldHJ5U2NoZW1hIHtcbiAgcmVhZG9ubHkgaWRlbnRpZmllcnM6IElkZW50aWZpZXJzO1xuICByZWFkb25seSBldmVudDogRXZlbnQ7XG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgcHJvamVjdDogUHJvamVjdDtcbiAgcmVhZG9ubHkgZHVyYXRpb246IER1cmF0aW9uO1xuICByZWFkb25seSBjb3VudGVycz86IENvdW50ZXJzO1xuICByZWFkb25seSBlcnJvcj86IEVycm9yO1xufVxuIl19
@@ -0,0 +1,18 @@
1
+ import type { TelemetrySchema } from './schema';
2
+ /**
3
+ * All Telemetry Clients are Sinks.
4
+ *
5
+ * A telemtry client receives event data via 'emit'
6
+ * and sends batched events via 'flush'
7
+ */
8
+ export interface ITelemetrySink {
9
+ /**
10
+ * Recieve an event
11
+ */
12
+ emit(event: TelemetrySchema): Promise<void>;
13
+ /**
14
+ * If the implementer of ITelemetrySink batches events,
15
+ * flush sends the data and clears the cache.
16
+ */
17
+ flush(): Promise<void>;
18
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luay1pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzaW5rLWludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUZWxlbWV0cnlTY2hlbWEgfSBmcm9tICcuL3NjaGVtYSc7XG5cbi8qKlxuICogQWxsIFRlbGVtZXRyeSBDbGllbnRzIGFyZSBTaW5rcy5cbiAqXG4gKiBBIHRlbGVtdHJ5IGNsaWVudCByZWNlaXZlcyBldmVudCBkYXRhIHZpYSAnZW1pdCdcbiAqIGFuZCBzZW5kcyBiYXRjaGVkIGV2ZW50cyB2aWEgJ2ZsdXNoJ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElUZWxlbWV0cnlTaW5rIHtcbiAgLyoqXG4gICAqIFJlY2lldmUgYW4gZXZlbnRcbiAgICovXG4gIGVtaXQoZXZlbnQ6IFRlbGVtZXRyeVNjaGVtYSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIElmIHRoZSBpbXBsZW1lbnRlciBvZiBJVGVsZW1ldHJ5U2luayBiYXRjaGVzIGV2ZW50cyxcbiAgICogZmx1c2ggc2VuZHMgdGhlIGRhdGEgYW5kIGNsZWFycyB0aGUgY2FjaGUuXG4gICAqL1xuICBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIl19
package/lib/index.js CHANGED
@@ -3449,7 +3449,7 @@ var require_semver2 = __commonJS({
3449
3449
  // ../@aws-cdk/cloud-assembly-schema/cli-version.json
3450
3450
  var require_cli_version = __commonJS({
3451
3451
  "../@aws-cdk/cloud-assembly-schema/cli-version.json"(exports2, module2) {
3452
- module2.exports = { version: "2.1020.0" };
3452
+ module2.exports = { version: "2.1020.2" };
3453
3453
  }
3454
3454
  });
3455
3455
 
@@ -5401,7 +5401,7 @@ var require_version = __commonJS({
5401
5401
  "../@aws-cdk/cloud-assembly-schema/schema/version.json"(exports2, module2) {
5402
5402
  module2.exports = {
5403
5403
  schemaHash: "4709e40bc5dd6ad7d2bb6c6bd0315c622b7f4aa07ee3af66ff07f9bc77fdf783",
5404
- revision: 44
5404
+ revision: 45
5405
5405
  };
5406
5406
  }
5407
5407
  });
@@ -305413,21 +305413,31 @@ var init_cc_api_provider = __esm({
305413
305413
  */
305414
305414
  async listResources(cc, typeName, propertyMatch, expectedMatchCount) {
305415
305415
  try {
305416
- const result3 = await cc.listResources({
305417
- TypeName: typeName
305418
- });
305419
- const found = (result3.ResourceDescriptions ?? []).map(foundResourceFromCcApi).filter((r3) => {
305420
- return Object.entries(propertyMatch).every(([propPath, expected]) => {
305421
- const actual = findJsonValue(r3.properties, propPath);
305422
- return propertyMatchesFilter(actual, expected);
305416
+ const found = [];
305417
+ let nextToken = void 0;
305418
+ do {
305419
+ const result3 = await cc.listResources({
305420
+ TypeName: typeName,
305421
+ MaxResults: 100,
305422
+ ...nextToken ? { NextToken: nextToken } : {}
305423
305423
  });
305424
- });
305424
+ found.push(
305425
+ ...(result3.ResourceDescriptions ?? []).map(foundResourceFromCcApi).filter((r3) => {
305426
+ return Object.entries(propertyMatch).every(([propPath, expected]) => {
305427
+ const actual = findJsonValue(r3.properties, propPath);
305428
+ return propertyMatchesFilter(actual, expected);
305429
+ });
305430
+ })
305431
+ );
305432
+ nextToken = result3.NextToken;
305433
+ if ((expectedMatchCount === "at-most-one" || expectedMatchCount === "exactly-one") && found.length > 1) {
305434
+ const atLeast = nextToken ? "at least " : "";
305435
+ throw new ContextProviderError(`Found ${atLeast}${found.length} resources matching ${JSON.stringify(propertyMatch)}; expected ${expectedMatchCountText(expectedMatchCount)}. Please narrow the search criteria`);
305436
+ }
305437
+ } while (nextToken);
305425
305438
  if ((expectedMatchCount === "at-least-one" || expectedMatchCount === "exactly-one") && found.length === 0) {
305426
305439
  throw new NoResultsFoundError(`Could not find any resources matching ${JSON.stringify(propertyMatch)}; expected ${expectedMatchCountText(expectedMatchCount)}.`);
305427
305440
  }
305428
- if ((expectedMatchCount === "at-most-one" || expectedMatchCount === "exactly-one") && found.length > 1) {
305429
- throw new ContextProviderError(`Found ${found.length} resources matching ${JSON.stringify(propertyMatch)}; expected ${expectedMatchCountText(expectedMatchCount)}. Please narrow the search criteria`);
305430
- }
305431
305441
  return found;
305432
305442
  } catch (err) {
305433
305443
  if (!ContextProviderError.isContextProviderError(err)) {
package/package.json CHANGED
@@ -78,10 +78,10 @@
78
78
  "typescript": "5.6",
79
79
  "xml-js": "^1.6.11",
80
80
  "@aws-cdk/cdk-assets-lib": "^1.0.0",
81
- "@aws-cdk/cloud-assembly-schema": ">=44.9.0",
81
+ "@aws-cdk/cloud-assembly-schema": ">=45.1.0",
82
82
  "@aws-cdk/cloudformation-diff": "2.182.0",
83
83
  "@aws-cdk/cx-api": "^2.202.0",
84
- "@aws-cdk/toolkit-lib": "^1.2.2",
84
+ "@aws-cdk/toolkit-lib": "^1.2.4",
85
85
  "@aws-sdk/client-appsync": "^3",
86
86
  "@aws-sdk/client-cloudcontrol": "^3",
87
87
  "@aws-sdk/client-cloudformation": "^3",
@@ -145,7 +145,7 @@
145
145
  "publishConfig": {
146
146
  "access": "public"
147
147
  },
148
- "version": "2.1020.0",
148
+ "version": "2.1020.2",
149
149
  "types": "lib/index.d.ts",
150
150
  "exports": {
151
151
  "./package.json": "./package.json",