aws-cdk 2.1142.0 → 2.1144.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.
Files changed (35) hide show
  1. package/README.md +20 -1
  2. package/THIRD_PARTY_LICENSES +22 -22
  3. package/build-info.json +2 -2
  4. package/db.json.gz +0 -0
  5. package/lib/api-private-error.d.ts +1 -0
  6. package/lib/api-private-error.js +9 -0
  7. package/lib/cli/cdk-toolkit.d.ts +8 -0
  8. package/lib/cli/cdk-toolkit.js +2 -3
  9. package/lib/cli/cli-config.js +3 -2
  10. package/lib/cli/cli-type-registry.json +5 -1
  11. package/lib/cli/cli.js +54 -20
  12. package/lib/cli/convert-to-user-input.js +3 -1
  13. package/lib/cli/debug-handles.d.ts +52 -0
  14. package/lib/cli/debug-handles.js +347 -0
  15. package/lib/cli/io-host/cli-io-host.d.ts +21 -2
  16. package/lib/cli/io-host/cli-io-host.js +9 -8
  17. package/lib/cli/parse-command-line-arguments.js +7 -2
  18. package/lib/cli/proxy-agent.d.ts +55 -4
  19. package/lib/cli/proxy-agent.js +71 -33
  20. package/lib/cli/telemetry/post-telemetry.d.ts +31 -0
  21. package/lib/cli/telemetry/post-telemetry.js +76 -0
  22. package/lib/cli/telemetry/sender-bundle.d.ts +1 -0
  23. package/lib/cli/telemetry/sender-bundle.js +32542 -0
  24. package/lib/cli/telemetry/sender.d.ts +50 -0
  25. package/lib/cli/telemetry/sender.js +103 -0
  26. package/lib/cli/telemetry/sink/subprocess-sink.d.ts +77 -0
  27. package/lib/cli/telemetry/sink/subprocess-sink.js +209 -0
  28. package/lib/cli/user-input.d.ts +7 -1
  29. package/lib/cli/user-input.js +1 -1
  30. package/lib/index.js +3331 -2535
  31. package/lib/index_bg.wasm +0 -0
  32. package/lib/init-templates/.init-version.json +1 -1
  33. package/package.json +11 -11
  34. package/lib/cli/telemetry/sink/endpoint-sink.d.ts +0 -44
  35. package/lib/cli/telemetry/sink/endpoint-sink.js +0 -108
@@ -35,9 +35,11 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.ProxyAgentProvider = void 0;
37
37
  exports.validateProxyAddress = validateProxyAddress;
38
- const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
38
+ exports.normalizeNetworkSetting = normalizeNetworkSetting;
39
+ const path = __importStar(require("node:path"));
39
40
  const fs = __importStar(require("fs-extra"));
40
41
  const proxy_agent_1 = require("proxy-agent");
42
+ const api_private_error_1 = require("../api-private-error");
41
43
  /**
42
44
  * Validate a proxy address up front.
43
45
  *
@@ -52,51 +54,87 @@ function validateProxyAddress(proxyAddress) {
52
54
  protocol = new URL(proxyAddress).protocol.replace(/:$/, '');
53
55
  }
54
56
  catch {
55
- throw new toolkit_lib_1.ToolkitError('InvalidProxyAddress', `Invalid proxy address '${proxyAddress}': it must be a URL that includes a protocol, e.g. 'http://${proxyAddress}'.`);
57
+ throw new api_private_error_1.ToolkitError('InvalidProxyAddress', `Invalid proxy address '${proxyAddress}': it must be a URL that includes a protocol, e.g. 'http://${proxyAddress}'.`);
56
58
  }
57
59
  if (!(protocol in proxy_agent_1.proxies)) {
58
- throw new toolkit_lib_1.ToolkitError('InvalidProxyAddress', `Unsupported protocol '${protocol}' in proxy address '${proxyAddress}'. Supported protocols are: ${Object.keys(proxy_agent_1.proxies).join(', ')}.`);
60
+ throw new api_private_error_1.ToolkitError('InvalidProxyAddress', `Unsupported protocol '${protocol}' in proxy address '${proxyAddress}'. Supported protocols are: ${Object.keys(proxy_agent_1.proxies).join(', ')}.`);
59
61
  }
60
62
  }
63
+ /**
64
+ * Coerce a raw network setting into a value the rest of the CLI can rely on.
65
+ *
66
+ * `Settings.get()` is untyped and surfaces an unset `--proxy` or `--ca-bundle-path` as either
67
+ * `undefined` or an empty array, depending on how it was parsed. An empty STRING is a different
68
+ * thing: `--proxy ''` means "go direct, ignore the proxy environment variables", so it has to survive
69
+ * normalization. Anything that is not a string counts as unconfigured, which is what makes the
70
+ * environment the fallback.
71
+ *
72
+ * Applied at the point these settings enter typed code, for two reasons. An empty array is truthy, so
73
+ * it slips past every `if (value)` guard downstream and then fails somewhere unhelpful --
74
+ * `path.resolve([])` throws a `TypeError` that the CA-bundle resolver swallows, silently discarding
75
+ * the bundle. And both values now cross a process boundary into the detached telemetry sender, which
76
+ * has no access to the settings to re-derive them.
77
+ */
78
+ function normalizeNetworkSetting(raw) {
79
+ return typeof raw === 'string' ? raw : undefined;
80
+ }
61
81
  class ProxyAgentProvider {
62
82
  ioHelper;
63
83
  constructor(ioHelper) {
64
84
  this.ioHelper = ioHelper;
65
85
  }
66
86
  async create(options) {
67
- // Only validate when an actual proxy address was configured. When `--proxy`
68
- // is not given the setting is unset (and can surface at runtime as an empty
69
- // string or empty array), in which case we skip validation and let
70
- // ProxyAgent fall back to environment-variable detection.
71
- if (typeof options.proxyAddress === 'string' && options.proxyAddress.length > 0) {
72
- validateProxyAddress(options.proxyAddress);
87
+ const proxyAddress = normalizeNetworkSetting(options.proxyAddress);
88
+ // Only a non-empty address is a proxy to validate. An empty one is a configured "go direct".
89
+ if (proxyAddress) {
90
+ validateProxyAddress(proxyAddress);
73
91
  }
74
- // Force it to use the proxy provided through the command line.
75
- // Otherwise, let the ProxyAgent auto-detect the proxy using environment variables.
76
- const getProxyForUrl = options.proxyAddress != null
77
- ? () => Promise.resolve(options.proxyAddress)
92
+ // Force it to use the proxy provided through the command line -- including an empty one, which
93
+ // `proxy-agent` reads as "no proxy for this URL". Only an unconfigured proxy falls through to
94
+ // ProxyAgent's own environment-variable detection.
95
+ const getProxyForUrl = proxyAddress !== undefined
96
+ ? () => Promise.resolve(proxyAddress)
78
97
  : undefined;
79
- return new proxy_agent_1.ProxyAgent({
80
- ca: await this.tryGetCACert(options.caBundlePath),
81
- getProxyForUrl,
82
- });
98
+ const caBundlePath = await this.resolveCABundlePath(normalizeNetworkSetting(options.caBundlePath));
99
+ return {
100
+ agent: new proxy_agent_1.ProxyAgent({
101
+ ca: await this.tryReadCABundle(caBundlePath),
102
+ getProxyForUrl,
103
+ }),
104
+ caBundlePath,
105
+ };
83
106
  }
84
- async tryGetCACert(bundlePath) {
85
- const path = bundlePath || this.caBundlePathFromEnvironment();
86
- if (path) {
87
- await this.ioHelper.defaults.debug(`Using CA bundle path: ${path}`);
88
- try {
89
- if (!fs.pathExistsSync(path)) {
90
- return undefined;
91
- }
92
- return fs.readFileSync(path, { encoding: 'utf-8' });
93
- }
94
- catch (e) {
95
- await this.ioHelper.defaults.debug(String(e));
96
- return undefined;
97
- }
107
+ /**
108
+ * Resolve the configured CA bundle to an absolute path, or undefined if there isn't a usable one.
109
+ *
110
+ * Absolute because the path is handed to the detached sender, which runs from a different cwd.
111
+ */
112
+ async resolveCABundlePath(bundlePath) {
113
+ const configured = bundlePath || this.caBundlePathFromEnvironment();
114
+ if (!configured) {
115
+ return undefined;
116
+ }
117
+ try {
118
+ const resolved = path.resolve(configured);
119
+ await this.ioHelper.defaults.debug(`Using CA bundle path: ${resolved}`);
120
+ return fs.pathExistsSync(resolved) ? resolved : undefined;
121
+ }
122
+ catch (e) {
123
+ await this.ioHelper.defaults.debug(String(e));
124
+ return undefined;
125
+ }
126
+ }
127
+ async tryReadCABundle(bundlePath) {
128
+ if (!bundlePath) {
129
+ return undefined;
130
+ }
131
+ try {
132
+ return fs.readFileSync(bundlePath, { encoding: 'utf-8' });
133
+ }
134
+ catch (e) {
135
+ await this.ioHelper.defaults.debug(String(e));
136
+ return undefined;
98
137
  }
99
- return undefined;
100
138
  }
101
139
  /**
102
140
  * Find and return a CA certificate bundle path to be passed into the SDK.
@@ -112,4 +150,4 @@ class ProxyAgentProvider {
112
150
  }
113
151
  }
114
152
  exports.ProxyAgentProvider = ProxyAgentProvider;
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHktYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcm94eS1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhQSxvREFpQkM7QUE5QkQsc0RBQW9EO0FBQ3BELDZDQUErQjtBQUMvQiw2Q0FBa0Q7QUFHbEQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLFlBQW9CO0lBQ3ZELElBQUksUUFBZ0IsQ0FBQztJQUNyQixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sSUFBSSwwQkFBWSxDQUNwQixxQkFBcUIsRUFDckIsMEJBQTBCLFlBQVksOERBQThELFlBQVksSUFBSSxDQUNySCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxxQkFBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksMEJBQVksQ0FDcEIscUJBQXFCLEVBQ3JCLHlCQUF5QixRQUFRLHVCQUF1QixZQUFZLCtCQUErQixNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDdEksQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBcUJELE1BQWEsa0JBQWtCO0lBQ1osUUFBUSxDQUFXO0lBRXBDLFlBQW1CLFFBQWtCO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQTBCO1FBQzVDLDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsbUVBQW1FO1FBQ25FLDBEQUEwRDtRQUMxRCxJQUFJLE9BQU8sT0FBTyxDQUFDLFlBQVksS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEYsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCwrREFBK0Q7UUFDL0QsbUZBQW1GO1FBQ25GLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSTtZQUNqRCxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBYSxDQUFDO1lBQzlDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxPQUFPLElBQUksd0JBQVUsQ0FBQztZQUNwQixFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDakQsY0FBYztTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQW1CO1FBQzVDLE1BQU0sSUFBSSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUM5RCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMseUJBQXlCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzdCLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMkJBQTJCO1FBQ2pDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBekRELGdEQXlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IFByb3h5QWdlbnQsIHByb3hpZXMgfSBmcm9tICdwcm94eS1hZ2VudCc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vYXBpLXByaXZhdGUnO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgcHJveHkgYWRkcmVzcyB1cCBmcm9udC5cbiAqXG4gKiBgcHJveHktYWdlbnRgIG9ubHkgcmVqZWN0cyBhbiBhZGRyZXNzIHdpdGggYSBtaXNzaW5nIG9yIHVuc3VwcG9ydGVkIHByb3RvY29sXG4gKiBsYXppbHksIG9uIHRoZSBmaXJzdCByZXF1ZXN0LCBzbyB3aXRob3V0IGAtdnZ2YCB0aGUgQ0xJIGFwcGVhcnMgdG8gaGFuZyBvclxuICogZmFpbHMgbGF0ZXIgd2l0aCBhIG1pc2xlYWRpbmcgZXJyb3IgKGUuZy4gbWlzc2luZyBjcmVkZW50aWFscykuIEZhaWwgZmFzdFxuICogaGVyZSB3aXRoIGFuIGFjdGlvbmFibGUgbWVzc2FnZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcm94eUFkZHJlc3MocHJveHlBZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgbGV0IHByb3RvY29sOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgcHJvdG9jb2wgPSBuZXcgVVJMKHByb3h5QWRkcmVzcykucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJyk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAnSW52YWxpZFByb3h5QWRkcmVzcycsXG4gICAgICBgSW52YWxpZCBwcm94eSBhZGRyZXNzICcke3Byb3h5QWRkcmVzc30nOiBpdCBtdXN0IGJlIGEgVVJMIHRoYXQgaW5jbHVkZXMgYSBwcm90b2NvbCwgZS5nLiAnaHR0cDovLyR7cHJveHlBZGRyZXNzfScuYCxcbiAgICApO1xuICB9XG5cbiAgaWYgKCEocHJvdG9jb2wgaW4gcHJveGllcykpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgJ0ludmFsaWRQcm94eUFkZHJlc3MnLFxuICAgICAgYFVuc3VwcG9ydGVkIHByb3RvY29sICcke3Byb3RvY29sfScgaW4gcHJveHkgYWRkcmVzcyAnJHtwcm94eUFkZHJlc3N9Jy4gU3VwcG9ydGVkIHByb3RvY29scyBhcmU6ICR7T2JqZWN0LmtleXMocHJveGllcykuam9pbignLCAnKX0uYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcHJveHktYWdlbnQgU0RLc1xuICovXG5pbnRlcmZhY2UgUHJveHlBZ2VudE9wdGlvbnMge1xuICAvKipcbiAgICogUHJveHkgYWRkcmVzcyB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gcHJveHlcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5QWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwYXRoIHRvIGEgY2VydGlmaWNhdGUgYnVuZGxlIHRoYXQgY29udGFpbnMgYSBjZXJ0IHRvIGJlIHRydXN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGNlcnRpZmljYXRlIGJ1bmRsZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FCdW5kbGVQYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUHJveHlBZ2VudFByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGlvSGVscGVyOiBJb0hlbHBlcikge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBpb0hlbHBlcjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGUob3B0aW9uczogUHJveHlBZ2VudE9wdGlvbnMpIHtcbiAgICAvLyBPbmx5IHZhbGlkYXRlIHdoZW4gYW4gYWN0dWFsIHByb3h5IGFkZHJlc3Mgd2FzIGNvbmZpZ3VyZWQuIFdoZW4gYC0tcHJveHlgXG4gICAgLy8gaXMgbm90IGdpdmVuIHRoZSBzZXR0aW5nIGlzIHVuc2V0IChhbmQgY2FuIHN1cmZhY2UgYXQgcnVudGltZSBhcyBhbiBlbXB0eVxuICAgIC8vIHN0cmluZyBvciBlbXB0eSBhcnJheSksIGluIHdoaWNoIGNhc2Ugd2Ugc2tpcCB2YWxpZGF0aW9uIGFuZCBsZXRcbiAgICAvLyBQcm94eUFnZW50IGZhbGwgYmFjayB0byBlbnZpcm9ubWVudC12YXJpYWJsZSBkZXRlY3Rpb24uXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3h5QWRkcmVzcyA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5wcm94eUFkZHJlc3MubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGVQcm94eUFkZHJlc3Mob3B0aW9ucy5wcm94eUFkZHJlc3MpO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIGl0IHRvIHVzZSB0aGUgcHJveHkgcHJvdmlkZWQgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lLlxuICAgIC8vIE90aGVyd2lzZSwgbGV0IHRoZSBQcm94eUFnZW50IGF1dG8tZGV0ZWN0IHRoZSBwcm94eSB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgY29uc3QgZ2V0UHJveHlGb3JVcmwgPSBvcHRpb25zLnByb3h5QWRkcmVzcyAhPSBudWxsXG4gICAgICA/ICgpID0+IFByb21pc2UucmVzb2x2ZShvcHRpb25zLnByb3h5QWRkcmVzcyEpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBuZXcgUHJveHlBZ2VudCh7XG4gICAgICBjYTogYXdhaXQgdGhpcy50cnlHZXRDQUNlcnQob3B0aW9ucy5jYUJ1bmRsZVBhdGgpLFxuICAgICAgZ2V0UHJveHlGb3JVcmwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyeUdldENBQ2VydChidW5kbGVQYXRoPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcGF0aCA9IGJ1bmRsZVBhdGggfHwgdGhpcy5jYUJ1bmRsZVBhdGhGcm9tRW52aXJvbm1lbnQoKTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgVXNpbmcgQ0EgYnVuZGxlIHBhdGg6ICR7cGF0aH1gKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZnMucGF0aEV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKFN0cmluZyhlKSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbmQgcmV0dXJuIGEgQ0EgY2VydGlmaWNhdGUgYnVuZGxlIHBhdGggdG8gYmUgcGFzc2VkIGludG8gdGhlIFNESy5cbiAgICovXG4gIHByaXZhdGUgY2FCdW5kbGVQYXRoRnJvbUVudmlyb25tZW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb2Nlc3MuZW52LmF3c19jYV9idW5kbGUpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5hd3NfY2FfYnVuZGxlO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuQVdTX0NBX0JVTkRMRSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LkFXU19DQV9CVU5ETEU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHktYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcm94eS1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhQSxvREFpQkM7QUFpQkQsMERBRUM7QUFqREQsZ0RBQWtDO0FBQ2xDLDZDQUErQjtBQUMvQiw2Q0FBa0Q7QUFDbEQsNERBQW9EO0FBRXBEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxZQUFvQjtJQUN2RCxJQUFJLFFBQWdCLENBQUM7SUFDckIsSUFBSSxDQUFDO1FBQ0gsUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxNQUFNLElBQUksZ0NBQVksQ0FDcEIscUJBQXFCLEVBQ3JCLDBCQUEwQixZQUFZLDhEQUE4RCxZQUFZLElBQUksQ0FDckgsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUkscUJBQU8sQ0FBQyxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLGdDQUFZLENBQ3BCLHFCQUFxQixFQUNyQix5QkFBeUIsUUFBUSx1QkFBdUIsWUFBWSwrQkFBK0IsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ3RJLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsR0FBWTtJQUNsRCxPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDbkQsQ0FBQztBQXNERCxNQUFhLGtCQUFrQjtJQUNaLFFBQVEsQ0FBd0I7SUFFakQs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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBQcm94eUFnZW50LCBwcm94aWVzIH0gZnJvbSAncHJveHktYWdlbnQnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vYXBpLXByaXZhdGUtZXJyb3InO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgcHJveHkgYWRkcmVzcyB1cCBmcm9udC5cbiAqXG4gKiBgcHJveHktYWdlbnRgIG9ubHkgcmVqZWN0cyBhbiBhZGRyZXNzIHdpdGggYSBtaXNzaW5nIG9yIHVuc3VwcG9ydGVkIHByb3RvY29sXG4gKiBsYXppbHksIG9uIHRoZSBmaXJzdCByZXF1ZXN0LCBzbyB3aXRob3V0IGAtdnZ2YCB0aGUgQ0xJIGFwcGVhcnMgdG8gaGFuZyBvclxuICogZmFpbHMgbGF0ZXIgd2l0aCBhIG1pc2xlYWRpbmcgZXJyb3IgKGUuZy4gbWlzc2luZyBjcmVkZW50aWFscykuIEZhaWwgZmFzdFxuICogaGVyZSB3aXRoIGFuIGFjdGlvbmFibGUgbWVzc2FnZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcm94eUFkZHJlc3MocHJveHlBZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgbGV0IHByb3RvY29sOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgcHJvdG9jb2wgPSBuZXcgVVJMKHByb3h5QWRkcmVzcykucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJyk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAnSW52YWxpZFByb3h5QWRkcmVzcycsXG4gICAgICBgSW52YWxpZCBwcm94eSBhZGRyZXNzICcke3Byb3h5QWRkcmVzc30nOiBpdCBtdXN0IGJlIGEgVVJMIHRoYXQgaW5jbHVkZXMgYSBwcm90b2NvbCwgZS5nLiAnaHR0cDovLyR7cHJveHlBZGRyZXNzfScuYCxcbiAgICApO1xuICB9XG5cbiAgaWYgKCEocHJvdG9jb2wgaW4gcHJveGllcykpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgJ0ludmFsaWRQcm94eUFkZHJlc3MnLFxuICAgICAgYFVuc3VwcG9ydGVkIHByb3RvY29sICcke3Byb3RvY29sfScgaW4gcHJveHkgYWRkcmVzcyAnJHtwcm94eUFkZHJlc3N9Jy4gU3VwcG9ydGVkIHByb3RvY29scyBhcmU6ICR7T2JqZWN0LmtleXMocHJveGllcykuam9pbignLCAnKX0uYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQ29lcmNlIGEgcmF3IG5ldHdvcmsgc2V0dGluZyBpbnRvIGEgdmFsdWUgdGhlIHJlc3Qgb2YgdGhlIENMSSBjYW4gcmVseSBvbi5cbiAqXG4gKiBgU2V0dGluZ3MuZ2V0KClgIGlzIHVudHlwZWQgYW5kIHN1cmZhY2VzIGFuIHVuc2V0IGAtLXByb3h5YCBvciBgLS1jYS1idW5kbGUtcGF0aGAgYXMgZWl0aGVyXG4gKiBgdW5kZWZpbmVkYCBvciBhbiBlbXB0eSBhcnJheSwgZGVwZW5kaW5nIG9uIGhvdyBpdCB3YXMgcGFyc2VkLiBBbiBlbXB0eSBTVFJJTkcgaXMgYSBkaWZmZXJlbnRcbiAqIHRoaW5nOiBgLS1wcm94eSAnJ2AgbWVhbnMgXCJnbyBkaXJlY3QsIGlnbm9yZSB0aGUgcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGVzXCIsIHNvIGl0IGhhcyB0byBzdXJ2aXZlXG4gKiBub3JtYWxpemF0aW9uLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBhIHN0cmluZyBjb3VudHMgYXMgdW5jb25maWd1cmVkLCB3aGljaCBpcyB3aGF0IG1ha2VzIHRoZVxuICogZW52aXJvbm1lbnQgdGhlIGZhbGxiYWNrLlxuICpcbiAqIEFwcGxpZWQgYXQgdGhlIHBvaW50IHRoZXNlIHNldHRpbmdzIGVudGVyIHR5cGVkIGNvZGUsIGZvciB0d28gcmVhc29ucy4gQW4gZW1wdHkgYXJyYXkgaXMgdHJ1dGh5LCBzb1xuICogaXQgc2xpcHMgcGFzdCBldmVyeSBgaWYgKHZhbHVlKWAgZ3VhcmQgZG93bnN0cmVhbSBhbmQgdGhlbiBmYWlscyBzb21ld2hlcmUgdW5oZWxwZnVsIC0tXG4gKiBgcGF0aC5yZXNvbHZlKFtdKWAgdGhyb3dzIGEgYFR5cGVFcnJvcmAgdGhhdCB0aGUgQ0EtYnVuZGxlIHJlc29sdmVyIHN3YWxsb3dzLCBzaWxlbnRseSBkaXNjYXJkaW5nXG4gKiB0aGUgYnVuZGxlLiBBbmQgYm90aCB2YWx1ZXMgbm93IGNyb3NzIGEgcHJvY2VzcyBib3VuZGFyeSBpbnRvIHRoZSBkZXRhY2hlZCB0ZWxlbWV0cnkgc2VuZGVyLCB3aGljaFxuICogaGFzIG5vIGFjY2VzcyB0byB0aGUgc2V0dGluZ3MgdG8gcmUtZGVyaXZlIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVOZXR3b3JrU2V0dGluZyhyYXc6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyByYXcgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcHJveHktYWdlbnQgU0RLc1xuICovXG5pbnRlcmZhY2UgUHJveHlBZ2VudE9wdGlvbnMge1xuICAvKipcbiAgICogUHJveHkgYWRkcmVzcyB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gcHJveHlcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5QWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwYXRoIHRvIGEgY2VydGlmaWNhdGUgYnVuZGxlIHRoYXQgY29udGFpbnMgYSBjZXJ0IHRvIGJlIHRydXN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGNlcnRpZmljYXRlIGJ1bmRsZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FCdW5kbGVQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwcm94eSBjb25maWd1cmF0aW9uIHJlc29sdmVkIGZvciB0aGlzIGludm9jYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRQcm94eUFnZW50IHtcbiAgLyoqXG4gICAqIFRoZSBhZ2VudCB0byBwYXNzIHRvIGFueXRoaW5nIG1ha2luZyBIVFRQUyByZXF1ZXN0cyBpbiB0aGlzIHByb2Nlc3MuXG4gICAqL1xuICByZWFkb25seSBhZ2VudDogUHJveHlBZ2VudDtcblxuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byB0aGUgcmVzb2x2ZWQgQ0EgYnVuZGxlLCBpZiBvbmUgd2FzIGNvbmZpZ3VyZWQgYW5kIGV4aXN0cyBvbiBkaXNrLlxuICAgKlxuICAgKiBFeHBvc2VkIGJlY2F1c2UgYGFnZW50YCBjYW5ub3QgY3Jvc3MgYSBwcm9jZXNzIGJvdW5kYXJ5OiB0aGUgZGV0YWNoZWQgdGVsZW1ldHJ5IHNlbmRlciBidWlsZHMgaXRzXG4gICAqIG93biBhbmQgbmVlZHMgdG8gYmUgdG9sZCB3aGljaCBidW5kbGUgdG8gdHJ1c3QuIFRoZSBwYXRoIHRyYXZlbHMgcmF0aGVyIHRoYW4gdGhlIGJ5dGVzLCBiZWNhdXNlIGFcbiAgICogc3lzdGVtIGJ1bmRsZSBpcyByb3V0aW5lbHkgfjE5MEtCLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIENBIGJ1bmRsZSB3YXMgY29uZmlndXJlZCwgb3IgdGhlIGNvbmZpZ3VyZWQgb25lIGRvZXMgbm90IGV4aXN0XG4gICAqL1xuICByZWFkb25seSBjYUJ1bmRsZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBhcnQgb2YgYElvSGVscGVyYCB0aGF0IHByb3h5IHJlc29sdXRpb24gbmVlZHMuXG4gKlxuICogU3RydWN0dXJhbCBzbyB0aGUgZGV0YWNoZWQgdGVsZW1ldHJ5IHNlbmRlciwgd2hpY2ggaGFzIG5vIElvSG9zdCwgY2FuIHBhc3MgYSB3cml0ZXIgdGhhdCBnb2VzIHRvXG4gKiBzdGRlcnIgaW5zdGVhZC4gQSBmdWxsIGBJb0hlbHBlcmAgc2F0aXNmaWVzIHRoaXMgYXMtaXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlBZ2VudERpYWdub3N0aWNzIHtcbiAgcmVhZG9ubHkgZGVmYXVsdHM6IHtcbiAgICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgUHJveHlBZ2VudFByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogUHJveHlBZ2VudERpYWdub3N0aWNzO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihpb0hlbHBlcjogUHJveHlBZ2VudERpYWdub3N0aWNzKSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZShvcHRpb25zOiBQcm94eUFnZW50T3B0aW9ucyk6IFByb21pc2U8UmVzb2x2ZWRQcm94eUFnZW50PiB7XG4gICAgY29uc3QgcHJveHlBZGRyZXNzID0gbm9ybWFsaXplTmV0d29ya1NldHRpbmcob3B0aW9ucy5wcm94eUFkZHJlc3MpO1xuXG4gICAgLy8gT25seSBhIG5vbi1lbXB0eSBhZGRyZXNzIGlzIGEgcHJveHkgdG8gdmFsaWRhdGUuIEFuIGVtcHR5IG9uZSBpcyBhIGNvbmZpZ3VyZWQgXCJnbyBkaXJlY3RcIi5cbiAgICBpZiAocHJveHlBZGRyZXNzKSB7XG4gICAgICB2YWxpZGF0ZVByb3h5QWRkcmVzcyhwcm94eUFkZHJlc3MpO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIGl0IHRvIHVzZSB0aGUgcHJveHkgcHJvdmlkZWQgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lIC0tIGluY2x1ZGluZyBhbiBlbXB0eSBvbmUsIHdoaWNoXG4gICAgLy8gYHByb3h5LWFnZW50YCByZWFkcyBhcyBcIm5vIHByb3h5IGZvciB0aGlzIFVSTFwiLiBPbmx5IGFuIHVuY29uZmlndXJlZCBwcm94eSBmYWxscyB0aHJvdWdoIHRvXG4gICAgLy8gUHJveHlBZ2VudCdzIG93biBlbnZpcm9ubWVudC12YXJpYWJsZSBkZXRlY3Rpb24uXG4gICAgY29uc3QgZ2V0UHJveHlGb3JVcmwgPSBwcm94eUFkZHJlc3MgIT09IHVuZGVmaW5lZFxuICAgICAgPyAoKSA9PiBQcm9taXNlLnJlc29sdmUocHJveHlBZGRyZXNzKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjYUJ1bmRsZVBhdGggPSBhd2FpdCB0aGlzLnJlc29sdmVDQUJ1bmRsZVBhdGgobm9ybWFsaXplTmV0d29ya1NldHRpbmcob3B0aW9ucy5jYUJ1bmRsZVBhdGgpKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhZ2VudDogbmV3IFByb3h5QWdlbnQoe1xuICAgICAgICBjYTogYXdhaXQgdGhpcy50cnlSZWFkQ0FCdW5kbGUoY2FCdW5kbGVQYXRoKSxcbiAgICAgICAgZ2V0UHJveHlGb3JVcmwsXG4gICAgICB9KSxcbiAgICAgIGNhQnVuZGxlUGF0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGNvbmZpZ3VyZWQgQ0EgYnVuZGxlIHRvIGFuIGFic29sdXRlIHBhdGgsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpc24ndCBhIHVzYWJsZSBvbmUuXG4gICAqXG4gICAqIEFic29sdXRlIGJlY2F1c2UgdGhlIHBhdGggaXMgaGFuZGVkIHRvIHRoZSBkZXRhY2hlZCBzZW5kZXIsIHdoaWNoIHJ1bnMgZnJvbSBhIGRpZmZlcmVudCBjd2QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc29sdmVDQUJ1bmRsZVBhdGgoYnVuZGxlUGF0aD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgY29uZmlndXJlZCA9IGJ1bmRsZVBhdGggfHwgdGhpcy5jYUJ1bmRsZVBhdGhGcm9tRW52aXJvbm1lbnQoKTtcbiAgICBpZiAoIWNvbmZpZ3VyZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKGNvbmZpZ3VyZWQpO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgVXNpbmcgQ0EgYnVuZGxlIHBhdGg6ICR7cmVzb2x2ZWR9YCk7XG4gICAgICByZXR1cm4gZnMucGF0aEV4aXN0c1N5bmMocmVzb2x2ZWQpID8gcmVzb2x2ZWQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKFN0cmluZyhlKSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5UmVhZENBQnVuZGxlKGJ1bmRsZVBhdGg/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghYnVuZGxlUGF0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoYnVuZGxlUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoU3RyaW5nKGUpKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW5kIHJldHVybiBhIENBIGNlcnRpZmljYXRlIGJ1bmRsZSBwYXRoIHRvIGJlIHBhc3NlZCBpbnRvIHRoZSBTREsuXG4gICAqL1xuICBwcml2YXRlIGNhQnVuZGxlUGF0aEZyb21FbnZpcm9ubWVudCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9jZXNzLmVudi5hd3NfY2FfYnVuZGxlKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuYXdzX2NhX2J1bmRsZTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52LkFXU19DQV9CVU5ETEUpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5BV1NfQ0FfQlVORExFO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import type { IncomingMessage } from 'http';
2
+ import type { Agent } from 'https';
3
+ import type { TelemetrySchema } from './schema';
4
+ /**
5
+ * A batch of telemetry events, as the endpoint expects to receive it.
6
+ */
7
+ export interface TelemetryBatch {
8
+ readonly events: TelemetrySchema[];
9
+ }
10
+ /**
11
+ * Options for a single delivery attempt.
12
+ */
13
+ export interface PostTelemetryOptions {
14
+ /**
15
+ * Agent to make the request through, carrying proxy and CA configuration.
16
+ *
17
+ * @default - Node's default agent, i.e. a direct connection
18
+ */
19
+ readonly agent?: Agent;
20
+ /**
21
+ * Abort the attempt if the request has not completed within this many milliseconds.
22
+ */
23
+ readonly timeoutMs: number;
24
+ }
25
+ /**
26
+ * POST a batch of telemetry events, resolving with the endpoint's response.
27
+ *
28
+ * Rejects if the connection fails or the timeout expires, but NOT on an unsuccessful status code --
29
+ * inspect `statusCode` for that.
30
+ */
31
+ export declare function postTelemetry(url: URL, batch: TelemetryBatch, options: PostTelemetryOptions): Promise<IncomingMessage>;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.postTelemetry = postTelemetry;
37
+ const https_1 = require("https");
38
+ const tls = __importStar(require("tls"));
39
+ const api_private_error_1 = require("../../api-private-error");
40
+ /**
41
+ * POST a batch of telemetry events, resolving with the endpoint's response.
42
+ *
43
+ * Rejects if the connection fails or the timeout expires, but NOT on an unsuccessful status code --
44
+ * inspect `statusCode` for that.
45
+ */
46
+ function postTelemetry(url, batch, options) {
47
+ return new Promise((ok, ko) => {
48
+ const payload = JSON.stringify(batch);
49
+ const req = (0, https_1.request)({
50
+ hostname: url.hostname,
51
+ port: url.port || null,
52
+ path: url.pathname + url.search,
53
+ method: 'POST',
54
+ headers: {
55
+ 'content-type': 'application/json',
56
+ 'content-length': Buffer.byteLength(payload),
57
+ // The only caller makes one request and exits, so a keep-alive socket left in the agent's
58
+ // pool would just be something else holding the process open.
59
+ 'connection': 'close',
60
+ },
61
+ agent: options.agent,
62
+ timeout: options.timeoutMs,
63
+ // Always pin identity to the destination host. `https-proxy-agent` does the TLS upgrade itself
64
+ // without passing that host to `tls.connect`, so for an IP-literal endpoint Node has nothing to
65
+ // match against and skips the check entirely -- naming the host explicitly closes that hole and
66
+ // pins to the endpoint rather than to whatever the proxy presents.
67
+ checkServerIdentity: (_host, cert) => tls.checkServerIdentity(url.hostname, cert),
68
+ }, ok);
69
+ req.on('error', ko);
70
+ req.on('timeout', () => {
71
+ req.destroy(new api_private_error_1.ToolkitError('RequestTimeout', `Timeout after ${options.timeoutMs}ms, aborting request`));
72
+ });
73
+ req.end(payload);
74
+ });
75
+ }
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC10ZWxlbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwb3N0LXRlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFDQSxzQ0FvQ0M7QUF2RUQsaUNBQWdDO0FBQ2hDLHlDQUEyQjtBQUUzQiwrREFBdUQ7QUEwQnZEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsYUFBYSxDQUMzQixHQUFRLEVBQ1IsS0FBcUIsRUFDckIsT0FBNkI7SUFFN0IsT0FBTyxJQUFJLE9BQU8sQ0FBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFBLGVBQU8sRUFBQztZQUNsQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDdEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSTtZQUN0QixJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTTtZQUMvQixNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDNUMsMEZBQTBGO2dCQUMxRiw4REFBOEQ7Z0JBQzlELFlBQVksRUFBRSxPQUFPO2FBQ3RCO1lBQ0QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUztZQUMxQiwrRkFBK0Y7WUFDL0YsZ0dBQWdHO1lBQ2hHLGdHQUFnRztZQUNoRyxtRUFBbUU7WUFDbkUsbUJBQW1CLEVBQUUsQ0FBQyxLQUFhLEVBQUUsSUFBeUIsRUFBRSxFQUFFLENBQ2hFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztTQUM5QyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ3JCLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxnQ0FBWSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixPQUFPLENBQUMsU0FBUyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7UUFDNUcsQ0FBQyxDQUFDLENBQUM7UUFFSCxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW5jb21pbmdNZXNzYWdlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgdHlwZSB7IEFnZW50IH0gZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gJ2h0dHBzJztcbmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnO1xuaW1wb3J0IHR5cGUgeyBUZWxlbWV0cnlTY2hlbWEgfSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi9hcGktcHJpdmF0ZS1lcnJvcic7XG5cbi8qKlxuICogQSBiYXRjaCBvZiB0ZWxlbWV0cnkgZXZlbnRzLCBhcyB0aGUgZW5kcG9pbnQgZXhwZWN0cyB0byByZWNlaXZlIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbGVtZXRyeUJhdGNoIHtcbiAgcmVhZG9ubHkgZXZlbnRzOiBUZWxlbWV0cnlTY2hlbWFbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIHNpbmdsZSBkZWxpdmVyeSBhdHRlbXB0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RUZWxlbWV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFnZW50IHRvIG1ha2UgdGhlIHJlcXVlc3QgdGhyb3VnaCwgY2FycnlpbmcgcHJveHkgYW5kIENBIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9kZSdzIGRlZmF1bHQgYWdlbnQsIGkuZS4gYSBkaXJlY3QgY29ubmVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYWdlbnQ/OiBBZ2VudDtcblxuICAvKipcbiAgICogQWJvcnQgdGhlIGF0dGVtcHQgaWYgdGhlIHJlcXVlc3QgaGFzIG5vdCBjb21wbGV0ZWQgd2l0aGluIHRoaXMgbWFueSBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0TXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQT1NUIGEgYmF0Y2ggb2YgdGVsZW1ldHJ5IGV2ZW50cywgcmVzb2x2aW5nIHdpdGggdGhlIGVuZHBvaW50J3MgcmVzcG9uc2UuXG4gKlxuICogUmVqZWN0cyBpZiB0aGUgY29ubmVjdGlvbiBmYWlscyBvciB0aGUgdGltZW91dCBleHBpcmVzLCBidXQgTk9UIG9uIGFuIHVuc3VjY2Vzc2Z1bCBzdGF0dXMgY29kZSAtLVxuICogaW5zcGVjdCBgc3RhdHVzQ29kZWAgZm9yIHRoYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3N0VGVsZW1ldHJ5KFxuICB1cmw6IFVSTCxcbiAgYmF0Y2g6IFRlbGVtZXRyeUJhdGNoLFxuICBvcHRpb25zOiBQb3N0VGVsZW1ldHJ5T3B0aW9ucyxcbik6IFByb21pc2U8SW5jb21pbmdNZXNzYWdlPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxJbmNvbWluZ01lc3NhZ2U+KChvaywga28pID0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoYmF0Y2gpO1xuICAgIGNvbnN0IHJlcSA9IHJlcXVlc3Qoe1xuICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHVybC5wb3J0IHx8IG51bGwsXG4gICAgICBwYXRoOiB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdjb250ZW50LWxlbmd0aCc6IEJ1ZmZlci5ieXRlTGVuZ3RoKHBheWxvYWQpLFxuICAgICAgICAvLyBUaGUgb25seSBjYWxsZXIgbWFrZXMgb25lIHJlcXVlc3QgYW5kIGV4aXRzLCBzbyBhIGtlZXAtYWxpdmUgc29ja2V0IGxlZnQgaW4gdGhlIGFnZW50J3NcbiAgICAgICAgLy8gcG9vbCB3b3VsZCBqdXN0IGJlIHNvbWV0aGluZyBlbHNlIGhvbGRpbmcgdGhlIHByb2Nlc3Mgb3Blbi5cbiAgICAgICAgJ2Nvbm5lY3Rpb24nOiAnY2xvc2UnLFxuICAgICAgfSxcbiAgICAgIGFnZW50OiBvcHRpb25zLmFnZW50LFxuICAgICAgdGltZW91dDogb3B0aW9ucy50aW1lb3V0TXMsXG4gICAgICAvLyBBbHdheXMgcGluIGlkZW50aXR5IHRvIHRoZSBkZXN0aW5hdGlvbiBob3N0LiBgaHR0cHMtcHJveHktYWdlbnRgIGRvZXMgdGhlIFRMUyB1cGdyYWRlIGl0c2VsZlxuICAgICAgLy8gd2l0aG91dCBwYXNzaW5nIHRoYXQgaG9zdCB0byBgdGxzLmNvbm5lY3RgLCBzbyBmb3IgYW4gSVAtbGl0ZXJhbCBlbmRwb2ludCBOb2RlIGhhcyBub3RoaW5nIHRvXG4gICAgICAvLyBtYXRjaCBhZ2FpbnN0IGFuZCBza2lwcyB0aGUgY2hlY2sgZW50aXJlbHkgLS0gbmFtaW5nIHRoZSBob3N0IGV4cGxpY2l0bHkgY2xvc2VzIHRoYXQgaG9sZSBhbmRcbiAgICAgIC8vIHBpbnMgdG8gdGhlIGVuZHBvaW50IHJhdGhlciB0aGFuIHRvIHdoYXRldmVyIHRoZSBwcm94eSBwcmVzZW50cy5cbiAgICAgIGNoZWNrU2VydmVySWRlbnRpdHk6IChfaG9zdDogc3RyaW5nLCBjZXJ0OiB0bHMuUGVlckNlcnRpZmljYXRlKSA9PlxuICAgICAgICB0bHMuY2hlY2tTZXJ2ZXJJZGVudGl0eSh1cmwuaG9zdG5hbWUsIGNlcnQpLFxuICAgIH0sIG9rKTtcblxuICAgIHJlcS5vbignZXJyb3InLCBrbyk7XG4gICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgcmVxLmRlc3Ryb3kobmV3IFRvb2xraXRFcnJvcignUmVxdWVzdFRpbWVvdXQnLCBgVGltZW91dCBhZnRlciAke29wdGlvbnMudGltZW91dE1zfW1zLCBhYm9ydGluZyByZXF1ZXN0YCkpO1xuICAgIH0pO1xuXG4gICAgcmVxLmVuZChwYXlsb2FkKTtcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};