eoapi-cdk 10.1.1 → 10.2.5
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/.jsii +132 -117
- package/lib/bastion-host/index.js +1 -1
- package/lib/database/PgBouncer.d.ts +1 -0
- package/lib/database/PgBouncer.js +30 -1
- package/lib/database/index.d.ts +42 -3
- package/lib/database/index.js +48 -8
- package/lib/database/lambda/package.json +2 -1
- package/lib/database/lambda/pgbouncer-health-check/health-check.sh +135 -0
- package/lib/database/lambda/pgbouncer-health-check/index.d.ts +2 -0
- package/lib/database/lambda/pgbouncer-health-check/index.js +221 -0
- package/lib/database/pgbouncer-setup.sh +127 -12
- package/lib/ingestor-api/index.js +8 -6
- package/lib/lambda-api-gateway/index.js +1 -1
- package/lib/lambda-api-gateway-private/index.js +1 -1
- package/lib/stac-api/index.js +8 -6
- package/lib/stac-auth-proxy/index.js +7 -5
- package/lib/stac-browser/index.js +1 -1
- package/lib/stac-loader/index.js +7 -5
- package/lib/stactools-item-generator/index.js +1 -1
- package/lib/tipg-api/index.js +8 -6
- package/lib/titiler-pgstac-api/index.js +8 -6
- package/lib/utils/index.d.ts +10 -0
- package/lib/utils/index.js +21 -1
- package/package.json +9 -9
|
@@ -158,5 +158,5 @@ class BastionHost extends constructs_1.Construct {
|
|
|
158
158
|
}
|
|
159
159
|
exports.BastionHost = BastionHost;
|
|
160
160
|
_a = JSII_RTTI_SYMBOL_1;
|
|
161
|
-
BastionHost[_a] = { fqn: "eoapi-cdk.BastionHost", version: "10.
|
|
161
|
+
BastionHost[_a] = { fqn: "eoapi-cdk.BastionHost", version: "10.2.5" };
|
|
162
162
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQU1xQjtBQUNyQiwyQ0FBdUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpR0c7QUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUztJQUd4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNyRCxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUscUJBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2pELFlBQVksRUFBRSxHQUFHLFNBQVMsZUFBZTtZQUN6QyxZQUFZLEVBQUUscUJBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUMvQixxQkFBRyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFDckMscUJBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN0QjtZQUNELFlBQVksRUFBRSxxQkFBRyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0MsVUFBVSxFQUFFLHFCQUFHLENBQUMscUJBQXFCLENBQUMsY0FBYztnQkFDcEQsT0FBTyxFQUFFLHFCQUFHLENBQUMsa0JBQWtCLENBQUMsTUFBTTthQUN2QyxDQUFDO1lBQ0YsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLHlCQUF5QixFQUFFLElBQUk7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CO1FBQ3BCLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLHFCQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7Z0JBQ3BDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQy9CLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFDdEMscUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUNsQixvQ0FBb0MsQ0FDckMsQ0FBQztRQUVGLGtDQUFrQztRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ2pDLHFCQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDbkIscUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQ2pDLFlBQVksQ0FDYixDQUFDO1FBQ0osQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSxxQkFBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixPQUFPLEVBQUU7Z0JBQ1AsZUFBZTtnQkFDZiwrQkFBK0I7Z0JBQy9CLGVBQWU7YUFDaEI7WUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ3hDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDL0IsVUFBVSxFQUFFLEdBQUcsU0FBUyxjQUFjO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDL0MsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1lBQ3JDLFVBQVUsRUFBRSxHQUFHLFNBQVMscUJBQXFCO1NBQzlDLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsaUNBQWlDLEVBQUU7WUFDckQsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCO1lBQzFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsa0JBQWtCO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBekVILGtDQTBFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFN0YWNrLFxuICBhd3NfZWMyIGFzIGVjMixcbiAgYXdzX2lhbSBhcyBpYW0sXG4gIGF3c19yZHMgYXMgcmRzLFxuICBDZm5PdXRwdXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBUaGUgZGF0YWJhc2UgaXMgbG9jYXRlZCBpbiBhbiBpc29sYXRlZCBzdWJuZXQsIG1lYW5pbmcgdGhhdCBpdCBpcyBub3QgYWNjZXNzaWJsZSBmcm9tIHRoZSBwdWJsaWMgaW50ZXJuZXQuIEFzIHN1Y2gsIHRvIGludGVyYWN0IHdpdGggdGhlIGRhdGFiYXNlIGRpcmVjdGx5LCBhIHVzZXIgbXVzdCB0dW5uZWwgdGhyb3VnaCBhIGJhc3Rpb24gaG9zdC5cbiAqXG4gKiAjIyMgQ29uZmlndXJpbmdcbiAqXG4gKiBUaGlzIGNvZGViYXNlIGNvbnRyb2xzIF93aG9fIGlzIGFsbG93ZWQgdG8gY29ubmVjdCB0byB0aGUgYmFzdGlvbiBob3N0LiBUaGlzIHJlcXVpcmVzIHR3byBzdGVwczpcbiAqXG4gKiAxLiBBZGRpbmcgdGhlIElQIGFkZHJlc3MgZnJvbSB3aGljaCB5b3UgYXJlIGNvbm5lY3RpbmcgdG8gdGhlIGBpcHY0QWxsb3dsaXN0YCBhcnJheVxuICogMS4gQ3JlYXRpbmcgYSBiYXN0aW9uIGhvc3Qgc3lzdGVtIHVzZXIgYnkgYWRkaW5nIHRoZSB1c2VyJ3MgY29uZmlndXJhdGlvbiBpbmZvcm0gdG8gYHVzZXJkYXRhLnlhbWxgXG4gKlxuICogIyMjIyBBZGRpbmcgYW4gSVAgYWRkcmVzcyB0byB0aGUgYGlwdjRBbGxvd2xpc3RgIGFycmF5XG4gKlxuICogVGhlIGBCYXN0aW9uSG9zdGAgY29uc3RydWN0IHRha2VzIGluIGFuIGBpcHY0QWxsb3dsaXN0YCBhcnJheSBhcyBhbiBhcmd1bWVudC4gRmluZCB5b3VyIElQIGFkZHJlc3MgKGVnIGBjdXJsIGFwaS5pcGlmeS5vcmdgKSBhbmQgYWRkIHRoYXQgdG8gdGhlIGFycmF5IGFsb25nIHdpdGggdGhlIHRyYWlsaW5nIENJRFIgYmxvY2sgKGxpa2VseSBgLzMyYCB0byBpbmRpY2F0ZSB0aGF0IHlvdSBhcmUgYWRkaW5nIGEgc2luZ2xlIElQIGFkZHJlc3MpLlxuICpcbiAqICMjIyMgQ3JlYXRpbmcgYSB1c2VyIHZpYSBgdXNlcmRhdGEueWFtbGBcbiAqXG4gKiBBZGQgYW4gZW50cnkgdG8gdGhlIGB1c2Vyc2AgYXJyYXkgd2l0aCBhIHVzZXJuYW1lIChsaWtlbHkgbWF0Y2hpbmcgeW91ciBsb2NhbCBzeXN0ZW1zIHVzZXJuYW1lLCB3aGljaCB5b3UgY2FuIGdldCBieSBydW5uaW5nIHRoZSBgd2hvYW1pYCBjb21tYW5kIGluIHlvdXIgdGVybWluYWwpIGFuZCBhIHB1YmxpYyBrZXkgKGxpa2VseSB5b3VyIGRlZmF1bHQgcHVibGljIGtleSwgd2hpY2ggeW91IGNhbiBnZXQgYnkgcnVubmluZyBgY2F0IH4vLnNzaC9pZF8qLnB1YmAgaW4geW91ciB0ZXJtaW5hbCkuXG4gKlxuICogIyMjIyBUaXBzICYgVHJpY2tzIHdoZW4gdXNpbmcgdGhlIEJhc3Rpb24gSG9zdFxuICpcbiAqICoqQ29ubmVjdGluZyB0byBSRFMgSW5zdGFuY2UgdmlhIFNTTSoqXG4gKlxuICogYGBgc2hcbiAqIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCAkSU5TVEFOQ0VfSUQgXFxcbiAqIC0tZG9jdW1lbnQtbmFtZSBBV1MtU3RhcnRQb3J0Rm9yd2FyZGluZ1Nlc3Npb25Ub1JlbW90ZUhvc3QgXFxcbiAqIC0tcGFyYW1ldGVycyAne1xuICogXCJob3N0XCI6IFtcbiAqIFwiZXhhbXBsZS1kYi5jNWFiY2RlZmdoaWoudXMtd2VzdC0yLnJkcy5hbWF6b25hd3MuY29tXCJcbiAqIF0sXG4gKiBcInBvcnROdW1iZXJcIjogW1xuICogXCI1NDMyXCJcbiAqIF0sXG4gKiBcImxvY2FsUG9ydE51bWJlclwiOiBbXG4gKiBcIjk5OTlcIlxuICogXVxuICogfScgXFxcbiAqIC0tcHJvZmlsZSAkQVdTX1BST0ZJTEVcbiAqIGBgYFxuICpcbiAqIGBgYHNoXG4gKiBwc3FsIC1oIGxvY2FsaG9zdCAtcCA5OTk5ICMgY29udGludWUgYWRkaW5nIHVzZXJuYW1lICgtVSkgYW5kIGRiICgtZCkgaGVyZS4uLlxuICogYGBgXG4gKlxuICogQ29ubmVjdCBkaXJlY3RseSB0byBCYXN0aW9uIEhvc3Q6XG4gKlxuICogYGBgc2hcbiAqIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCAkSU5TVEFOQ0VfSUQgLS1wcm9maWxlICRBV1NfUFJPRklMRVxuICogYGBgXG4gKlxuICogKipTZXR0aW5nIHVwIGFuIFNTSCB0dW5uZWwqKlxuICpcbiAqIEluIHlvdXIgYH4vLnNzaC9jb25maWdgIGZpbGUsIGFkZCBhbiBlbnRyeSBsaWtlOlxuICpcbiAqIGBgYFxuICogSG9zdCBkYi10dW5uZWxcbiAqIEhvc3RuYW1lIHt0aGUtYmFzdGlvbi1ob3N0LWFkZHJlc3N9XG4gKiBMb2NhbEZvcndhcmQgOTk5OSB7dGhlLWRiLWhvc3RuYW1lfTo1NDMyXG4gKiBgYGBcbiAqXG4gKiBUaGVuIGEgdHVubmVsIGNhbiBiZSBvcGVuZWQgdmlhOlxuICpcbiAqIGBgYFxuICogc3NoIC1OIGRiLXR1bm5lbFxuICogYGBgXG4gKlxuICogQW5kIGEgY29ubmVjdGlvbiB0byB0aGUgREIgY2FuIGJlIG1hZGUgdmlhOlxuICpcbiAqIGBgYFxuICogcHNxbCAtaCAxMjcuMC4wLjEgLXAgOTk5OSAtVSB7dXNlcm5hbWV9IC1kIHtkYXRhYmFzZX1cbiAqIGBgYFxuICpcbiAqICoqSGFuZGxpbmcgYFJFTU9URSBIT1NUIElERU5USUZJQ0FUSU9OIEhBUyBDSEFOR0VEIWAgZXJyb3IqKlxuICpcbiAqIElmIHlvdSd2ZSByZWRlcGxveWVkIGEgYmFzdGlvbiBob3N0IHRoYXQgeW91J3ZlIHByZXZpb3VzbHkgY29ubmVjdGVkIHRvLCB5b3UgbWF5IHNlZSBhbiBlcnJvciBsaWtlOlxuICpcbiAqIGBgYFxuICogQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBcbiAqIEAgICAgV0FSTklORzogUkVNT1RFIEhPU1QgSURFTlRJRklDQVRJT04gSEFTIENIQU5HRUQhICAgICBAXG4gKiBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFxuICogSVQgSVMgUE9TU0lCTEUgVEhBVCBTT01FT05FIElTIERPSU5HIFNPTUVUSElORyBOQVNUWSFcbiAqIFNvbWVvbmUgY291bGQgYmUgZWF2ZXNkcm9wcGluZyBvbiB5b3UgcmlnaHQgbm93IChtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2spIVxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGEgaG9zdCBrZXkgaGFzIGp1c3QgYmVlbiBjaGFuZ2VkLlxuICogVGhlIGZpbmdlcnByaW50IGZvciB0aGUgRUNEU0Ega2V5IHNlbnQgYnkgdGhlIHJlbW90ZSBob3N0IGlzXG4gKiBTSEEyNTY6bVBueEFPWFRwYjA2UEZnSTFRYzhUTVEyZTliN2dvVTh5Mk5kUzVoeklyOC5cbiAqIFBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IuXG4gKiBBZGQgY29ycmVjdCBob3N0IGtleSBpbiAvVXNlcnMvdXNlcm5hbWUvLnNzaC9rbm93bl9ob3N0cyB0byBnZXQgcmlkIG9mIHRoaXMgbWVzc2FnZS5cbiAqIE9mZmVuZGluZyBFQ0RTQSBrZXkgaW4gL1VzZXJzL3VzZXJuYW1lLy5zc2gva25vd25faG9zdHM6MjhcbiAqIEVDRFNBIGhvc3Qga2V5IGZvciBlYzItMTItMzQtNTYtNzg5LnVzLXdlc3QtMi5jb21wdXRlLmFtYXpvbmF3cy5jb20gaGFzIGNoYW5nZWQgYW5kIHlvdSBoYXZlIHJlcXVlc3RlZCBzdHJpY3QgY2hlY2tpbmcuXG4gKiBIb3N0IGtleSB2ZXJpZmljYXRpb24gZmFpbGVkLlxuICogYGBgXG4gKlxuICogVGhpcyBpcyBkdWUgdG8gdGhlIHNlcnZlcidzIGZpbmdlcnByaW50IGNoYW5naW5nLiBXZSBjYW4gc2NydWIgdGhlIGZpbmdlcnByaW50IGZyb20gb3VyIHN5c3RlbSB3aXRoIGEgY29tbWFuZCBsaWtlOlxuICpcbiAqIGBgYFxuICogc3NoLWtleWdlbiAtUiAxMi4zNC41Ni43ODlcbiAqIGBgYFxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc3Rpb25Ib3N0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgaW5zdGFuY2U6IGVjMi5JbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzdGlvbkhvc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB7IHN0YWNrTmFtZSB9ID0gU3RhY2sub2YodGhpcyk7XG5cbiAgICAvLyBCdWlsZCBlYzIgaW5zdGFuY2VcbiAgICB0aGlzLmluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCBcImJhc3Rpb24taG9zdFwiLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDIH0sXG4gICAgICBpbnN0YW5jZU5hbWU6IGAke3N0YWNrTmFtZX0gYmFzdGlvbiBob3N0YCxcbiAgICAgIGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZS5vZihcbiAgICAgICAgZWMyLkluc3RhbmNlQ2xhc3MuQlVSU1RBQkxFNF9HUkFWSVRPTixcbiAgICAgICAgZWMyLkluc3RhbmNlU2l6ZS5OQU5PXG4gICAgICApLFxuICAgICAgbWFjaGluZUltYWdlOiBlYzIuTWFjaGluZUltYWdlLmxhdGVzdEFtYXpvbkxpbnV4KHtcbiAgICAgICAgZ2VuZXJhdGlvbjogZWMyLkFtYXpvbkxpbnV4R2VuZXJhdGlvbi5BTUFaT05fTElOVVhfMixcbiAgICAgICAgY3B1VHlwZTogZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5BUk1fNjQsXG4gICAgICB9KSxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIHVzZXJEYXRhQ2F1c2VzUmVwbGFjZW1lbnQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBBc3NpZ24gZWxhc3RpYyBJUFxuICAgIGlmIChwcm9wcy5jcmVhdGVFbGFzdGljSXAgPz8gdHJ1ZSkge1xuICAgICAgbmV3IGVjMi5DZm5FSVAodGhpcywgXCJJUFwiLCB7XG4gICAgICAgIGluc3RhbmNlSWQ6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgdGFnczogW3sga2V5OiBcIk5hbWVcIiwgdmFsdWU6IHN0YWNrTmFtZSB9XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFsbG93IGJhc3Rpb24gaG9zdCB0byBjb25uZWN0IHRvIGRiXG4gICAgdGhpcy5pbnN0YW5jZS5jb25uZWN0aW9ucy5hbGxvd1RvKFxuICAgICAgcHJvcHMuZGIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHNbMF0sXG4gICAgICBlYzIuUG9ydC50Y3AoNTQzMiksXG4gICAgICBcIkFsbG93IGNvbm5lY3Rpb24gZnJvbSBiYXN0aW9uIGhvc3RcIlxuICAgICk7XG5cbiAgICAvLyBBbGxvdyBJUCBhY2Nlc3MgdG8gYmFzdGlvbiBob3N0XG4gICAgZm9yIChjb25zdCBpcHY0IG9mIHByb3BzLmlwdjRBbGxvd2xpc3QpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2UuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgICBlYzIuUGVlci5pcHY0KGlwdjQpLFxuICAgICAgICBlYzIuUG9ydC50Y3AocHJvcHMuc3NoUG9ydCB8fCAyMiksXG4gICAgICAgIFwiU1NIIEFjY2Vzc1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEludGVncmF0ZSB3aXRoIFNTTVxuICAgIHRoaXMuaW5zdGFuY2UuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJzc21tZXNzYWdlczoqXCIsXG4gICAgICAgICAgXCJzc206VXBkYXRlSW5zdGFuY2VJbmZvcm1hdGlvblwiLFxuICAgICAgICAgIFwiZWMybWVzc2FnZXM6KlwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaW5zdGFuY2UtaWQtb3V0cHV0XCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9LWluc3RhbmNlLWlkYCxcbiAgICB9KTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaW5zdGFuY2UtcHVibGljLWlwLW91dHB1dFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0lwLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfS1pbnN0YW5jZS1wdWJsaWMtaXBgLFxuICAgIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJpbnN0YW5jZS1wdWJsaWMtZG5zLW5hbWUtb3V0cHV0XCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlUHVibGljRG5zTmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0tcHVibGljLWRucy1uYW1lYCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc3Rpb25Ib3N0UHJvcHMge1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICByZWFkb25seSBkYjogcmRzLklEYXRhYmFzZUluc3RhbmNlO1xuICByZWFkb25seSB1c2VyRGF0YTogZWMyLlVzZXJEYXRhO1xuICByZWFkb25seSBpcHY0QWxsb3dsaXN0OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgc3NoUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgYW4gZWxhc3RpYyBJUCBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhlIGJhc3Rpb24gaG9zdC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUVsYXN0aWNJcD86IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -46,6 +46,7 @@ export declare class PgBouncer extends Construct {
|
|
|
46
46
|
readonly pgbouncerSecret: secretsmanager.Secret;
|
|
47
47
|
readonly securityGroup: ec2.SecurityGroup;
|
|
48
48
|
readonly secretUpdateComplete: CustomResource;
|
|
49
|
+
readonly healthCheck: CustomResource;
|
|
49
50
|
private getDefaultPgbouncerConfig;
|
|
50
51
|
constructor(scope: Construct, id: string, props: PgBouncerProps);
|
|
51
52
|
private loadUserDataScript;
|
|
@@ -116,6 +116,35 @@ class PgBouncer extends constructs_1.Construct {
|
|
|
116
116
|
: this.instance.instancePrivateIp,
|
|
117
117
|
},
|
|
118
118
|
});
|
|
119
|
+
// Add health check custom resource
|
|
120
|
+
const healthCheckFunction = new aws_cdk_lib_1.aws_lambda.Function(this, "HealthCheckFunction", {
|
|
121
|
+
runtime: aws_cdk_lib_1.aws_lambda.Runtime.NODEJS_20_X,
|
|
122
|
+
handler: "index.handler",
|
|
123
|
+
timeout: aws_cdk_lib_1.Duration.minutes(10),
|
|
124
|
+
code: aws_cdk_lib_1.aws_lambda.Code.fromAsset(path.join(__dirname, "lambda/pgbouncer-health-check")),
|
|
125
|
+
description: "PgBouncer health check function",
|
|
126
|
+
});
|
|
127
|
+
// Grant SSM permissions for health check
|
|
128
|
+
healthCheckFunction.addToRolePolicy(new aws_cdk_lib_1.aws_iam.PolicyStatement({
|
|
129
|
+
actions: [
|
|
130
|
+
"ssm:SendCommand",
|
|
131
|
+
"ssm:GetCommandInvocation",
|
|
132
|
+
"ssm:DescribeInstanceInformation",
|
|
133
|
+
"ssm:ListCommandInvocations",
|
|
134
|
+
],
|
|
135
|
+
resources: ["*"],
|
|
136
|
+
}));
|
|
137
|
+
this.healthCheck = new aws_cdk_lib_1.CustomResource(this, "PgBouncerHealthCheck", {
|
|
138
|
+
serviceToken: healthCheckFunction.functionArn,
|
|
139
|
+
properties: {
|
|
140
|
+
InstanceId: this.instance.instanceId,
|
|
141
|
+
// Add timestamp to force re-execution on stack updates
|
|
142
|
+
Timestamp: new Date().toISOString(),
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
// Ensure health check runs after instance is created but before secret update
|
|
146
|
+
this.healthCheck.node.addDependency(this.instance);
|
|
147
|
+
this.secretUpdateComplete.node.addDependency(this.healthCheck);
|
|
119
148
|
}
|
|
120
149
|
loadUserDataScript(pgBouncerConfig, database) {
|
|
121
150
|
const userDataScript = aws_cdk_lib_1.aws_ec2.UserData.forLinux();
|
|
@@ -131,4 +160,4 @@ class PgBouncer extends constructs_1.Construct {
|
|
|
131
160
|
}
|
|
132
161
|
}
|
|
133
162
|
exports.PgBouncer = PgBouncer;
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGdCb3VuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUGdCb3VuY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQU9xQjtBQUNyQiwyQ0FBdUM7QUFFdkMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQW9EN0IsTUFBYSxTQUFVLFNBQVEsc0JBQVM7SUFNdEMsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSxnRkFBZ0Y7SUFDaEYsa0NBQWtDO0lBRTFCLHlCQUF5QixDQUMvQixnQkFBd0I7UUFFeEIsNEVBQTRFO1FBQzVFLGdFQUFnRTtRQUNoRSxPQUFPO1lBQ0wsUUFBUSxFQUFFLGFBQWE7WUFDdkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLENBQUM7WUFDbEIsV0FBVyxFQUFFLENBQUM7WUFDZCxlQUFlLEVBQUUsQ0FBQztZQUNsQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLEVBQUU7WUFDdkMsa0JBQWtCLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRTtTQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixrQ0FBa0M7UUFFbEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzNELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDdkIsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxNQUFNLGVBQWUsR0FBbUM7WUFDdEQsR0FBRyxzQkFBc0I7WUFDekIsR0FBRyxLQUFLLENBQUMsZUFBZTtTQUN6QixDQUFDO1FBRUYscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUM5QyxXQUFXLEVBQ1QsdUVBQXVFO1lBQ3pFLFNBQVMsRUFBRSxJQUFJLHFCQUFHLENB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LGNBQWMsR0FBRyxxQkFBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUvQywwREFBMEQ7UUFDMUQsY0FBYyxDQUFDLFdBQVcsQ0FDeEIscUJBQXFCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUN2RCxpQkFBaUIsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUMvQyxvQkFBb0IsR0FBRyxlQUFlLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFDckQsMEJBQTBCLEdBQUcsZUFBZSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQ2hFLDRCQUE0QixHQUFHLGVBQWUsQ0FBQyxlQUFlLEdBQUcsR0FBRyxFQUNwRSx3QkFBd0IsR0FBRyxlQUFlLENBQUMsV0FBVyxHQUFHLEdBQUcsRUFDNUQsNEJBQTRCLEdBQUcsZUFBZSxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQ3BFLCtCQUErQjtZQUM3QixlQUFlLENBQUMsa0JBQWtCO1lBQ2xDLEdBQUcsRUFDTCw2QkFBNkIsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUN0RSwrQkFBK0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUMzRSxDQUFDO1FBRUYsMEJBQTBCO1FBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDaEUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFakQsY0FBYyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuQyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUEvTEQsOEJBK0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXdzX2VjMiBhcyBlYzIsXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3NfbGFtYmRhIGFzIGxhbWJkYSxcbiAgYXdzX3NlY3JldHNtYW5hZ2VyIGFzIHNlY3JldHNtYW5hZ2VyLFxuICBDdXN0b21SZXNvdXJjZSxcbiAgU3RhY2ssXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbi8vIHVzZWQgdG8gcG9wdWxhdGUgcGdib3VuY2VyIGNvbmZpZzpcbi8vIHNlZSBodHRwczovL3d3dy5wZ2JvdW5jZXIub3JnL2NvbmZpZy5odG1sIGZvciBkZXRhaWxzXG5leHBvcnQgaW50ZXJmYWNlIFBnQm91bmNlckNvbmZpZ1Byb3BzIHtcbiAgcG9vbE1vZGU/OiBcInRyYW5zYWN0aW9uXCIgfCBcInNlc3Npb25cIiB8IFwic3RhdGVtZW50XCI7XG4gIG1heENsaWVudENvbm4/OiBudW1iZXI7XG4gIGRlZmF1bHRQb29sU2l6ZT86IG51bWJlcjtcbiAgbWluUG9vbFNpemU/OiBudW1iZXI7XG4gIHJlc2VydmVQb29sU2l6ZT86IG51bWJlcjtcbiAgcmVzZXJ2ZVBvb2xUaW1lb3V0PzogbnVtYmVyO1xuICBtYXhEYkNvbm5lY3Rpb25zPzogbnVtYmVyO1xuICBtYXhVc2VyQ29ubmVjdGlvbnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGdCb3VuY2VyUHJvcHMge1xuICAvKipcbiAgICogVlBDIHRvIGRlcGxveSBQZ0JvdW5jZXIgaW50b1xuICAgKi9cbiAgdnBjOiBlYzIuSVZwYztcblxuICAvKipcbiAgICogVGhlIFJEUyBpbnN0YW5jZSB0byBjb25uZWN0IHRvXG4gICAqL1xuICBkYXRhYmFzZToge1xuICAgIGNvbm5lY3Rpb25zOiBlYzIuQ29ubmVjdGlvbnM7XG4gICAgc2VjcmV0OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGNvbm5lY3Rpb25zIHNldHRpbmcgZm9yIHRoZSBkYXRhYmFzZS5cbiAgICogUGdCb3VuY2VyIHdpbGwgdXNlIDEwIGZld2VyIHRoYW4gdGhpcyB2YWx1ZS5cbiAgICovXG4gIGRiTWF4Q29ubmVjdGlvbnM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkZXBsb3kgaW4gcHVibGljIHN1Ym5ldFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXNlUHVibGljU3VibmV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGdCb3VuY2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKi9cbiAgcGdCb3VuY2VyQ29uZmlnPzogUGdCb3VuY2VyQ29uZmlnUHJvcHM7XG5cbiAgLyoqXG4gICAqIEVDMiBpbnN0YW5jZSBvcHRpb25zXG4gICAqL1xuICBpbnN0YW5jZVByb3BzPzogUGFydGlhbDxlYzIuSW5zdGFuY2VQcm9wcz47XG59XG5cbmV4cG9ydCBjbGFzcyBQZ0JvdW5jZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2U6IGVjMi5JbnN0YW5jZTtcbiAgcHVibGljIHJlYWRvbmx5IHBnYm91bmNlclNlY3JldDogc2VjcmV0c21hbmFnZXIuU2VjcmV0O1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjdXJpdHlHcm91cDogZWMyLlNlY3VyaXR5R3JvdXA7XG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXRVcGRhdGVDb21wbGV0ZTogQ3VzdG9tUmVzb3VyY2U7XG5cbiAgLy8gVGhlIG1heF9jb25uZWN0aW9ucyBwYXJhbWV0ZXIgaW4gUGdCb3VuY2VyIGRldGVybWluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mXG4gIC8vIGNvbm5lY3Rpb25zIHRvIG9wZW4gb24gdGhlIGFjdHVhbCBkYXRhYmFzZSBpbnN0YW5jZS4gV2Ugd2FudCB0aGF0IG51bWJlciB0b1xuICAvLyBiZSBzbGlnaHRseSBzbWFsbGVyIHRoYW4gdGhlIGFjdHVhbCBtYXhfY29ubmVjdGlvbnMgdmFsdWUgb24gdGhlIFJEUyBpbnN0YW5jZVxuICAvLyBzbyB3ZSBwZXJmb3JtIHRoaXMgY2FsY3VsYXRpb24uXG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UGdib3VuY2VyQ29uZmlnKFxuICAgIGRiTWF4Q29ubmVjdGlvbnM6IG51bWJlclxuICApOiBSZXF1aXJlZDxQZ0JvdW5jZXJDb25maWdQcm9wcz4ge1xuICAgIC8vIG1heERiQ29ubmVjdGlvbnMgKGFuZCBtYXhVc2VyQ29ubmVjdGlvbnMpIGFyZSB0aGUgb25seSBzZXR0aW5ncyB0aGF0IG5lZWRcbiAgICAvLyB0byBiZSByZXNwb25zaXZlIHRvIHRoZSBkYXRhYmFzZSBzaXplL21heF9jb25uZWN0aW9ucyBzZXR0aW5nXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvb2xNb2RlOiBcInRyYW5zYWN0aW9uXCIsXG4gICAgICBtYXhDbGllbnRDb25uOiAxMDAwLFxuICAgICAgZGVmYXVsdFBvb2xTaXplOiA1LFxuICAgICAgbWluUG9vbFNpemU6IDAsXG4gICAgICByZXNlcnZlUG9vbFNpemU6IDUsXG4gICAgICByZXNlcnZlUG9vbFRpbWVvdXQ6IDUsXG4gICAgICBtYXhEYkNvbm5lY3Rpb25zOiBkYk1heENvbm5lY3Rpb25zIC0gMTAsXG4gICAgICBtYXhVc2VyQ29ubmVjdGlvbnM6IGRiTWF4Q29ubmVjdGlvbnMgLSAxMCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBnQm91bmNlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIFNldCBkZWZhdWx0cyBmb3Igb3B0aW9uYWwgcHJvcHNcblxuICAgIGNvbnN0IGRlZmF1bHRQZ2JvdW5jZXJDb25maWcgPSB0aGlzLmdldERlZmF1bHRQZ2JvdW5jZXJDb25maWcoXG4gICAgICBwcm9wcy5kYk1heENvbm5lY3Rpb25zXG4gICAgKTtcblxuICAgIC8vIE1lcmdlIHByb3ZpZGVkIGNvbmZpZyB3aXRoIGRlZmF1bHRzXG4gICAgY29uc3QgcGdCb3VuY2VyQ29uZmlnOiBSZXF1aXJlZDxQZ0JvdW5jZXJDb25maWdQcm9wcz4gPSB7XG4gICAgICAuLi5kZWZhdWx0UGdib3VuY2VyQ29uZmlnLFxuICAgICAgLi4ucHJvcHMucGdCb3VuY2VyQ29uZmlnLFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgcm9sZSBmb3IgUGdCb3VuY2VyIGluc3RhbmNlIHRvIGVuYWJsZSB3cml0aW5nIHRvIENsb3VkV2F0Y2hcbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiSW5zdGFuY2VSb2xlXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcInBnYm91bmNlciBpbnN0YW5jZSByb2xlIHdpdGggU3lzdGVtcyBNYW5hZ2VyICsgQ2xvdWRXYXRjaCBwZXJtaXNzaW9uc1wiLFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlXCJcbiAgICAgICAgKSxcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwiQ2xvdWRXYXRjaEFnZW50U2VydmVyUG9saWN5XCJcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgcG9saWN5IHRvIGFsbG93IHJlYWRpbmcgUkRTIGNyZWRlbnRpYWxzIGZyb20gU2VjcmV0cyBNYW5hZ2VyXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wic2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWVcIl0sXG4gICAgICAgIHJlc291cmNlczogW3Byb3BzLmRhdGFiYXNlLnNlY3JldC5zZWNyZXRBcm5dLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGEgc2VjdXJpdHkgZ3JvdXAgYW5kIGFsbG93IGNvbm5lY3Rpb25zIGZyb20gdGhlIExhbWJkYSBJUCByYW5nZXMgZm9yIHRoaXMgcmVnaW9uXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIFwiUGdCb3VuY2VyU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNlY3VyaXR5IGdyb3VwIGZvciBQZ0JvdW5jZXIgaW5zdGFuY2VcIixcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgUGdCb3VuY2VyIGluc3RhbmNlXG4gICAgY29uc3QgZGVmYXVsdEluc3RhbmNlQ29uZmlnOiBPbWl0PGVjMi5JbnN0YW5jZVByb3BzLCBcInZwY1wiPiA9IHtcbiAgICAgIGluc3RhbmNlTmFtZTogXCJwZ2JvdW5jZXJcIixcbiAgICAgIGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZS5vZihcbiAgICAgICAgZWMyLkluc3RhbmNlQ2xhc3MuVDMsXG4gICAgICAgIGVjMi5JbnN0YW5jZVNpemUuTUlDUk9cbiAgICAgICksXG4gICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgIHN1Ym5ldFR5cGU6IHByb3BzLnVzZVB1YmxpY1N1Ym5ldFxuICAgICAgICAgID8gZWMyLlN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgICAgOiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTLFxuICAgICAgfSxcbiAgICAgIG1hY2hpbmVJbWFnZTogZWMyLk1hY2hpbmVJbWFnZS5mcm9tU3NtUGFyYW1ldGVyKFxuICAgICAgICBcIi9hd3Mvc2VydmljZS9jYW5vbmljYWwvdWJ1bnR1L3NlcnZlci9ub2JsZS9zdGFibGUvY3VycmVudC9hbWQ2NC9odm0vZWJzLWdwMy9hbWktaWRcIixcbiAgICAgICAgeyBvczogZWMyLk9wZXJhdGluZ1N5c3RlbVR5cGUuTElOVVggfVxuICAgICAgKSxcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IGVjMi5CbG9ja0RldmljZVZvbHVtZS5lYnMoMjAsIHtcbiAgICAgICAgICAgIHZvbHVtZVR5cGU6IGVjMi5FYnNEZXZpY2VWb2x1bWVUeXBlLkdQMyxcbiAgICAgICAgICAgIGVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU9uVGVybWluYXRpb246IHRydWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcm9sZSxcbiAgICAgIHNlY3VyaXR5R3JvdXA6IHRoaXMuc2VjdXJpdHlHcm91cCxcbiAgICAgIHVzZXJEYXRhOiB0aGlzLmxvYWRVc2VyRGF0YVNjcmlwdChwZ0JvdW5jZXJDb25maWcsIHByb3BzLmRhdGFiYXNlKSxcbiAgICAgIHVzZXJEYXRhQ2F1c2VzUmVwbGFjZW1lbnQ6IHRydWUsXG4gICAgICBhc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3M6IHByb3BzLnVzZVB1YmxpY1N1Ym5ldCxcbiAgICB9O1xuXG4gICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBlYzIuSW5zdGFuY2UodGhpcywgXCJJbnN0YW5jZVwiLCB7XG4gICAgICAuLi5kZWZhdWx0SW5zdGFuY2VDb25maWcsXG4gICAgICAuLi5wcm9wcy5pbnN0YW5jZVByb3BzLFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgfSk7XG5cbiAgICAvLyBBbGxvdyBQZ0JvdW5jZXIgdG8gY29ubmVjdCB0byBSRFNcbiAgICBwcm9wcy5kYXRhYmFzZS5jb25uZWN0aW9ucy5hbGxvd0Zyb20oXG4gICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgZWMyLlBvcnQudGNwKDU0MzIpLFxuICAgICAgXCJBbGxvdyBQZ0JvdW5jZXIgdG8gY29ubmVjdCB0byBSRFNcIlxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgc2VjcmV0IGZvciBwZ2JvdW5jZXIgY29ubmVjdGlvbiBjcmVkZW50aWFsc1xuICAgIHRoaXMucGdib3VuY2VyU2VjcmV0ID0gbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCBcIlBnQm91bmNlclNlY3JldFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJDb25uZWN0aW9uIGluZm9ybWF0aW9uIGZvciBQZ0JvdW5jZXIgaW5zdGFuY2VcIixcbiAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgIGdlbmVyYXRlU3RyaW5nS2V5OiBcImR1bW15XCIsXG4gICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBcInt9XCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgdGhlIHJvbGUgcGVybWlzc2lvbiB0byByZWFkIHRoZSBuZXcgc2VjcmV0XG4gICAgdGhpcy5wZ2JvdW5jZXJTZWNyZXQuZ3JhbnRSZWFkKHJvbGUpO1xuXG4gICAgLy8gVXBkYXRlIHBnYm91bmNlclNlY3JldCB0byBjb250YWluIHBnc3RhY1NlY3JldCB2YWx1ZXMgYnV0IHdpdGggbmV3IHZhbHVlIGZvciBob3N0XG4gICAgY29uc3Qgc2VjcmV0VXBkYXRlckZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCBcIlNlY3JldFVwZGF0ZXJGdW5jdGlvblwiLCB7XG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImxhbWJkYS9wZ2JvdW5jZXItc2VjcmV0LXVwZGF0ZXJcIilcbiAgICAgICksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBTT1VSQ0VfU0VDUkVUX0FSTjogcHJvcHMuZGF0YWJhc2Uuc2VjcmV0LnNlY3JldEFybixcbiAgICAgICAgVEFSR0VUX1NFQ1JFVF9BUk46IHRoaXMucGdib3VuY2VyU2VjcmV0LnNlY3JldEFybixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBwcm9wcy5kYXRhYmFzZS5zZWNyZXQuZ3JhbnRSZWFkKHNlY3JldFVwZGF0ZXJGbik7XG4gICAgdGhpcy5wZ2JvdW5jZXJTZWNyZXQuZ3JhbnRXcml0ZShzZWNyZXRVcGRhdGVyRm4pO1xuXG4gICAgdGhpcy5zZWNyZXRVcGRhdGVDb21wbGV0ZSA9IG5ldyBDdXN0b21SZXNvdXJjZShcbiAgICAgIHRoaXMsXG4gICAgICBcInBnYm91bmNlclNlY3JldEJvb3RzdHJhcHBlclwiLFxuICAgICAge1xuICAgICAgICBzZXJ2aWNlVG9rZW46IHNlY3JldFVwZGF0ZXJGbi5mdW5jdGlvbkFybixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGluc3RhbmNlSXA6IHByb3BzLnVzZVB1YmxpY1N1Ym5ldFxuICAgICAgICAgICAgPyB0aGlzLmluc3RhbmNlLmluc3RhbmNlUHVibGljSXBcbiAgICAgICAgICAgIDogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVByaXZhdGVJcCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkVXNlckRhdGFTY3JpcHQoXG4gICAgcGdCb3VuY2VyQ29uZmlnOiBSZXF1aXJlZDxOb25OdWxsYWJsZTxQZ0JvdW5jZXJQcm9wc1tcInBnQm91bmNlckNvbmZpZ1wiXT4+LFxuICAgIGRhdGFiYXNlOiB7IHNlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldCB9XG4gICk6IGVjMi5Vc2VyRGF0YSB7XG4gICAgY29uc3QgdXNlckRhdGFTY3JpcHQgPSBlYzIuVXNlckRhdGEuZm9yTGludXgoKTtcblxuICAgIC8vIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbiAgICB1c2VyRGF0YVNjcmlwdC5hZGRDb21tYW5kcyhcbiAgICAgICdleHBvcnQgU0VDUkVUX0FSTj1cIicgKyBkYXRhYmFzZS5zZWNyZXQuc2VjcmV0QXJuICsgJ1wiJyxcbiAgICAgICdleHBvcnQgUkVHSU9OPVwiJyArIFN0YWNrLm9mKHRoaXMpLnJlZ2lvbiArICdcIicsXG4gICAgICAnZXhwb3J0IFBPT0xfTU9ERT1cIicgKyBwZ0JvdW5jZXJDb25maWcucG9vbE1vZGUgKyAnXCInLFxuICAgICAgJ2V4cG9ydCBNQVhfQ0xJRU5UX0NPTk49XCInICsgcGdCb3VuY2VyQ29uZmlnLm1heENsaWVudENvbm4gKyAnXCInLFxuICAgICAgJ2V4cG9ydCBERUZBVUxUX1BPT0xfU0laRT1cIicgKyBwZ0JvdW5jZXJDb25maWcuZGVmYXVsdFBvb2xTaXplICsgJ1wiJyxcbiAgICAgICdleHBvcnQgTUlOX1BPT0xfU0laRT1cIicgKyBwZ0JvdW5jZXJDb25maWcubWluUG9vbFNpemUgKyAnXCInLFxuICAgICAgJ2V4cG9ydCBSRVNFUlZFX1BPT0xfU0laRT1cIicgKyBwZ0JvdW5jZXJDb25maWcucmVzZXJ2ZVBvb2xTaXplICsgJ1wiJyxcbiAgICAgICdleHBvcnQgUkVTRVJWRV9QT09MX1RJTUVPVVQ9XCInICtcbiAgICAgICAgcGdCb3VuY2VyQ29uZmlnLnJlc2VydmVQb29sVGltZW91dCArXG4gICAgICAgICdcIicsXG4gICAgICAnZXhwb3J0IE1BWF9EQl9DT05ORUNUSU9OUz1cIicgKyBwZ0JvdW5jZXJDb25maWcubWF4RGJDb25uZWN0aW9ucyArICdcIicsXG4gICAgICAnZXhwb3J0IE1BWF9VU0VSX0NPTk5FQ1RJT05TPVwiJyArIHBnQm91bmNlckNvbmZpZy5tYXhVc2VyQ29ubmVjdGlvbnMgKyAnXCInXG4gICAgKTtcblxuICAgIC8vIExvYWQgdGhlIHN0YXJ0dXAgc2NyaXB0XG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi9wZ2JvdW5jZXItc2V0dXAuc2hcIik7XG4gICAgbGV0IHNjcmlwdCA9IGZzLnJlYWRGaWxlU3luYyhzY3JpcHRQYXRoLCBcInV0ZjhcIik7XG5cbiAgICB1c2VyRGF0YVNjcmlwdC5hZGRDb21tYW5kcyhzY3JpcHQpO1xuXG4gICAgcmV0dXJuIHVzZXJEYXRhU2NyaXB0O1xuICB9XG59XG4iXX0=
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGdCb3VuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUGdCb3VuY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQVFxQjtBQUNyQiwyQ0FBdUM7QUFFdkMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQW9EN0IsTUFBYSxTQUFVLFNBQVEsc0JBQVM7SUFPdEMsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSxnRkFBZ0Y7SUFDaEYsa0NBQWtDO0lBRTFCLHlCQUF5QixDQUMvQixnQkFBd0I7UUFFeEIsNEVBQTRFO1FBQzVFLGdFQUFnRTtRQUNoRSxPQUFPO1lBQ0wsUUFBUSxFQUFFLGFBQWE7WUFDdkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLENBQUM7WUFDbEIsV0FBVyxFQUFFLENBQUM7WUFDZCxlQUFlLEVBQUUsQ0FBQztZQUNsQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLEVBQUU7WUFDdkMsa0JBQWtCLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRTtTQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixrQ0FBa0M7UUFFbEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzNELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDdkIsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxNQUFNLGVBQWUsR0FBbUM7WUFDdEQsR0FBRyxzQkFBc0I7WUFDekIsR0FBRyxLQUFLLENBQUMsZUFBZTtTQUN6QixDQUFDO1FBRUYscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUM5QyxXQUFXLEVBQ1QsdUVBQXVFO1lBQ3pFLFNBQVMsRUFBRSxJQUFJLHFCQUFHLENB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QUE0QztRQUU1QyxNQUFNLGNBQWMsR0FBRyxxQkFBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUvQywwREFBMEQ7UUFDMUQsY0FBYyxDQUFDLFdBQVcsQ0FDeEIscUJBQXFCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUN2RCxpQkFBaUIsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUMvQyxvQkFBb0IsR0FBRyxlQUFlLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFDckQsMEJBQTBCLEdBQUcsZUFBZSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQ2hFLDRCQUE0QixHQUFHLGVBQWUsQ0FBQyxlQUFlLEdBQUcsR0FBRyxFQUNwRSx3QkFBd0IsR0FBRyxlQUFlLENBQUMsV0FBVyxHQUFHLEdBQUcsRUFDNUQsNEJBQTRCLEdBQUcsZUFBZSxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQ3BFLCtCQUErQjtZQUM3QixlQUFlLENBQUMsa0JBQWtCO1lBQ2xDLEdBQUcsRUFDTCw2QkFBNkIsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUN0RSwrQkFBK0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUMzRSxDQUFDO1FBRUYsMEJBQTBCO1FBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDaEUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFakQsY0FBYyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuQyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUF6T0QsOEJBeU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXdzX2VjMiBhcyBlYzIsXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3NfbGFtYmRhIGFzIGxhbWJkYSxcbiAgYXdzX3NlY3JldHNtYW5hZ2VyIGFzIHNlY3JldHNtYW5hZ2VyLFxuICBDdXN0b21SZXNvdXJjZSxcbiAgRHVyYXRpb24sXG4gIFN0YWNrLFxufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG4vLyB1c2VkIHRvIHBvcHVsYXRlIHBnYm91bmNlciBjb25maWc6XG4vLyBzZWUgaHR0cHM6Ly93d3cucGdib3VuY2VyLm9yZy9jb25maWcuaHRtbCBmb3IgZGV0YWlsc1xuZXhwb3J0IGludGVyZmFjZSBQZ0JvdW5jZXJDb25maWdQcm9wcyB7XG4gIHBvb2xNb2RlPzogXCJ0cmFuc2FjdGlvblwiIHwgXCJzZXNzaW9uXCIgfCBcInN0YXRlbWVudFwiO1xuICBtYXhDbGllbnRDb25uPzogbnVtYmVyO1xuICBkZWZhdWx0UG9vbFNpemU/OiBudW1iZXI7XG4gIG1pblBvb2xTaXplPzogbnVtYmVyO1xuICByZXNlcnZlUG9vbFNpemU/OiBudW1iZXI7XG4gIHJlc2VydmVQb29sVGltZW91dD86IG51bWJlcjtcbiAgbWF4RGJDb25uZWN0aW9ucz86IG51bWJlcjtcbiAgbWF4VXNlckNvbm5lY3Rpb25zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBnQm91bmNlclByb3BzIHtcbiAgLyoqXG4gICAqIFZQQyB0byBkZXBsb3kgUGdCb3VuY2VyIGludG9cbiAgICovXG4gIHZwYzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFRoZSBSRFMgaW5zdGFuY2UgdG8gY29ubmVjdCB0b1xuICAgKi9cbiAgZGF0YWJhc2U6IHtcbiAgICBjb25uZWN0aW9uczogZWMyLkNvbm5lY3Rpb25zO1xuICAgIHNlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldDtcbiAgfTtcblxuICAvKipcbiAgICogTWF4aW11bSBjb25uZWN0aW9ucyBzZXR0aW5nIGZvciB0aGUgZGF0YWJhc2UuXG4gICAqIFBnQm91bmNlciB3aWxsIHVzZSAxMCBmZXdlciB0aGFuIHRoaXMgdmFsdWUuXG4gICAqL1xuICBkYk1heENvbm5lY3Rpb25zOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVwbG95IGluIHB1YmxpYyBzdWJuZXRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHVzZVB1YmxpY1N1Ym5ldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBnQm91bmNlciBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICovXG4gIHBnQm91bmNlckNvbmZpZz86IFBnQm91bmNlckNvbmZpZ1Byb3BzO1xuXG4gIC8qKlxuICAgKiBFQzIgaW5zdGFuY2Ugb3B0aW9uc1xuICAgKi9cbiAgaW5zdGFuY2VQcm9wcz86IFBhcnRpYWw8ZWMyLkluc3RhbmNlUHJvcHM+O1xufVxuXG5leHBvcnQgY2xhc3MgUGdCb3VuY2VyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlOiBlYzIuSW5zdGFuY2U7XG4gIHB1YmxpYyByZWFkb25seSBwZ2JvdW5jZXJTZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLlNlY3JldDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA6IGVjMi5TZWN1cml0eUdyb3VwO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0VXBkYXRlQ29tcGxldGU6IEN1c3RvbVJlc291cmNlO1xuICBwdWJsaWMgcmVhZG9ubHkgaGVhbHRoQ2hlY2s6IEN1c3RvbVJlc291cmNlO1xuXG4gIC8vIFRoZSBtYXhfY29ubmVjdGlvbnMgcGFyYW1ldGVyIGluIFBnQm91bmNlciBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZlxuICAvLyBjb25uZWN0aW9ucyB0byBvcGVuIG9uIHRoZSBhY3R1YWwgZGF0YWJhc2UgaW5zdGFuY2UuIFdlIHdhbnQgdGhhdCBudW1iZXIgdG9cbiAgLy8gYmUgc2xpZ2h0bHkgc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgbWF4X2Nvbm5lY3Rpb25zIHZhbHVlIG9uIHRoZSBSRFMgaW5zdGFuY2VcbiAgLy8gc28gd2UgcGVyZm9ybSB0aGlzIGNhbGN1bGF0aW9uLlxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFBnYm91bmNlckNvbmZpZyhcbiAgICBkYk1heENvbm5lY3Rpb25zOiBudW1iZXJcbiAgKTogUmVxdWlyZWQ8UGdCb3VuY2VyQ29uZmlnUHJvcHM+IHtcbiAgICAvLyBtYXhEYkNvbm5lY3Rpb25zIChhbmQgbWF4VXNlckNvbm5lY3Rpb25zKSBhcmUgdGhlIG9ubHkgc2V0dGluZ3MgdGhhdCBuZWVkXG4gICAgLy8gdG8gYmUgcmVzcG9uc2l2ZSB0byB0aGUgZGF0YWJhc2Ugc2l6ZS9tYXhfY29ubmVjdGlvbnMgc2V0dGluZ1xuICAgIHJldHVybiB7XG4gICAgICBwb29sTW9kZTogXCJ0cmFuc2FjdGlvblwiLFxuICAgICAgbWF4Q2xpZW50Q29ubjogMTAwMCxcbiAgICAgIGRlZmF1bHRQb29sU2l6ZTogNSxcbiAgICAgIG1pblBvb2xTaXplOiAwLFxuICAgICAgcmVzZXJ2ZVBvb2xTaXplOiA1LFxuICAgICAgcmVzZXJ2ZVBvb2xUaW1lb3V0OiA1LFxuICAgICAgbWF4RGJDb25uZWN0aW9uczogZGJNYXhDb25uZWN0aW9ucyAtIDEwLFxuICAgICAgbWF4VXNlckNvbm5lY3Rpb25zOiBkYk1heENvbm5lY3Rpb25zIC0gMTAsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQZ0JvdW5jZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdHMgZm9yIG9wdGlvbmFsIHByb3BzXG5cbiAgICBjb25zdCBkZWZhdWx0UGdib3VuY2VyQ29uZmlnID0gdGhpcy5nZXREZWZhdWx0UGdib3VuY2VyQ29uZmlnKFxuICAgICAgcHJvcHMuZGJNYXhDb25uZWN0aW9uc1xuICAgICk7XG5cbiAgICAvLyBNZXJnZSBwcm92aWRlZCBjb25maWcgd2l0aCBkZWZhdWx0c1xuICAgIGNvbnN0IHBnQm91bmNlckNvbmZpZzogUmVxdWlyZWQ8UGdCb3VuY2VyQ29uZmlnUHJvcHM+ID0ge1xuICAgICAgLi4uZGVmYXVsdFBnYm91bmNlckNvbmZpZyxcbiAgICAgIC4uLnByb3BzLnBnQm91bmNlckNvbmZpZyxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIHJvbGUgZm9yIFBnQm91bmNlciBpbnN0YW5jZSB0byBlbmFibGUgd3JpdGluZyB0byBDbG91ZFdhdGNoXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkluc3RhbmNlUm9sZVwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJwZ2JvdW5jZXIgaW5zdGFuY2Ugcm9sZSB3aXRoIFN5c3RlbXMgTWFuYWdlciArIENsb3VkV2F0Y2ggcGVybWlzc2lvbnNcIixcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwiQW1hem9uU1NNTWFuYWdlZEluc3RhbmNlQ29yZVwiXG4gICAgICAgICksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICBcIkNsb3VkV2F0Y2hBZ2VudFNlcnZlclBvbGljeVwiXG4gICAgICAgICksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIHBvbGljeSB0byBhbGxvdyByZWFkaW5nIFJEUyBjcmVkZW50aWFscyBmcm9tIFNlY3JldHMgTWFuYWdlclxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInNlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtwcm9wcy5kYXRhYmFzZS5zZWNyZXQuc2VjcmV0QXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhIHNlY3VyaXR5IGdyb3VwIGFuZCBhbGxvdyBjb25uZWN0aW9ucyBmcm9tIHRoZSBMYW1iZGEgSVAgcmFuZ2VzIGZvciB0aGlzIHJlZ2lvblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIlBnQm91bmNlclNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTZWN1cml0eSBncm91cCBmb3IgUGdCb3VuY2VyIGluc3RhbmNlXCIsXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIFBnQm91bmNlciBpbnN0YW5jZVxuICAgIGNvbnN0IGRlZmF1bHRJbnN0YW5jZUNvbmZpZzogT21pdDxlYzIuSW5zdGFuY2VQcm9wcywgXCJ2cGNcIj4gPSB7XG4gICAgICBpbnN0YW5jZU5hbWU6IFwicGdib3VuY2VyXCIsXG4gICAgICBpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGUub2YoXG4gICAgICAgIGVjMi5JbnN0YW5jZUNsYXNzLlQzLFxuICAgICAgICBlYzIuSW5zdGFuY2VTaXplLk1JQ1JPXG4gICAgICApLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlOiBwcm9wcy51c2VQdWJsaWNTdWJuZXRcbiAgICAgICAgICA/IGVjMi5TdWJuZXRUeXBlLlBVQkxJQ1xuICAgICAgICAgIDogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICAgIH0sXG4gICAgICBtYWNoaW5lSW1hZ2U6IGVjMi5NYWNoaW5lSW1hZ2UuZnJvbVNzbVBhcmFtZXRlcihcbiAgICAgICAgXCIvYXdzL3NlcnZpY2UvY2Fub25pY2FsL3VidW50dS9zZXJ2ZXIvbm9ibGUvc3RhYmxlL2N1cnJlbnQvYW1kNjQvaHZtL2Vicy1ncDMvYW1pLWlkXCIsXG4gICAgICAgIHsgb3M6IGVjMi5PcGVyYXRpbmdTeXN0ZW1UeXBlLkxJTlVYIH1cbiAgICAgICksXG4gICAgICBibG9ja0RldmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRldmljZU5hbWU6IFwiL2Rldi94dmRhXCIsXG4gICAgICAgICAgdm9sdW1lOiBlYzIuQmxvY2tEZXZpY2VWb2x1bWUuZWJzKDIwLCB7XG4gICAgICAgICAgICB2b2x1bWVUeXBlOiBlYzIuRWJzRGV2aWNlVm9sdW1lVHlwZS5HUDMsXG4gICAgICAgICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVPblRlcm1pbmF0aW9uOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHJvbGUsXG4gICAgICBzZWN1cml0eUdyb3VwOiB0aGlzLnNlY3VyaXR5R3JvdXAsXG4gICAgICB1c2VyRGF0YTogdGhpcy5sb2FkVXNlckRhdGFTY3JpcHQocGdCb3VuY2VyQ29uZmlnLCBwcm9wcy5kYXRhYmFzZSksXG4gICAgICB1c2VyRGF0YUNhdXNlc1JlcGxhY2VtZW50OiB0cnVlLFxuICAgICAgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOiBwcm9wcy51c2VQdWJsaWNTdWJuZXQsXG4gICAgfTtcblxuICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgZWMyLkluc3RhbmNlKHRoaXMsIFwiSW5zdGFuY2VcIiwge1xuICAgICAgLi4uZGVmYXVsdEluc3RhbmNlQ29uZmlnLFxuICAgICAgLi4ucHJvcHMuaW5zdGFuY2VQcm9wcyxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgIH0pO1xuXG4gICAgLy8gQWxsb3cgUGdCb3VuY2VyIHRvIGNvbm5lY3QgdG8gUkRTXG4gICAgcHJvcHMuZGF0YWJhc2UuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgdGhpcy5pbnN0YW5jZSxcbiAgICAgIGVjMi5Qb3J0LnRjcCg1NDMyKSxcbiAgICAgIFwiQWxsb3cgUGdCb3VuY2VyIHRvIGNvbm5lY3QgdG8gUkRTXCJcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHNlY3JldCBmb3IgcGdib3VuY2VyIGNvbm5lY3Rpb24gY3JlZGVudGlhbHNcbiAgICB0aGlzLnBnYm91bmNlclNlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgXCJQZ0JvdW5jZXJTZWNyZXRcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiQ29ubmVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgUGdCb3VuY2VyIGluc3RhbmNlXCIsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogXCJkdW1teVwiLFxuICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogXCJ7fVwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IHRoZSByb2xlIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgbmV3IHNlY3JldFxuICAgIHRoaXMucGdib3VuY2VyU2VjcmV0LmdyYW50UmVhZChyb2xlKTtcblxuICAgIC8vIFVwZGF0ZSBwZ2JvdW5jZXJTZWNyZXQgdG8gY29udGFpbiBwZ3N0YWNTZWNyZXQgdmFsdWVzIGJ1dCB3aXRoIG5ldyB2YWx1ZSBmb3IgaG9zdFxuICAgIGNvbnN0IHNlY3JldFVwZGF0ZXJGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgXCJTZWNyZXRVcGRhdGVyRnVuY3Rpb25cIiwge1xuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCJsYW1iZGEvcGdib3VuY2VyLXNlY3JldC11cGRhdGVyXCIpXG4gICAgICApLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU09VUkNFX1NFQ1JFVF9BUk46IHByb3BzLmRhdGFiYXNlLnNlY3JldC5zZWNyZXRBcm4sXG4gICAgICAgIFRBUkdFVF9TRUNSRVRfQVJOOiB0aGlzLnBnYm91bmNlclNlY3JldC5zZWNyZXRBcm4sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcHJvcHMuZGF0YWJhc2Uuc2VjcmV0LmdyYW50UmVhZChzZWNyZXRVcGRhdGVyRm4pO1xuICAgIHRoaXMucGdib3VuY2VyU2VjcmV0LmdyYW50V3JpdGUoc2VjcmV0VXBkYXRlckZuKTtcblxuICAgIHRoaXMuc2VjcmV0VXBkYXRlQ29tcGxldGUgPSBuZXcgQ3VzdG9tUmVzb3VyY2UoXG4gICAgICB0aGlzLFxuICAgICAgXCJwZ2JvdW5jZXJTZWNyZXRCb290c3RyYXBwZXJcIixcbiAgICAgIHtcbiAgICAgICAgc2VydmljZVRva2VuOiBzZWNyZXRVcGRhdGVyRm4uZnVuY3Rpb25Bcm4sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBpbnN0YW5jZUlwOiBwcm9wcy51c2VQdWJsaWNTdWJuZXRcbiAgICAgICAgICAgID8gdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0lwXG4gICAgICAgICAgICA6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VQcml2YXRlSXAsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEFkZCBoZWFsdGggY2hlY2sgY3VzdG9tIHJlc291cmNlXG4gICAgY29uc3QgaGVhbHRoQ2hlY2tGdW5jdGlvbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJIZWFsdGhDaGVja0Z1bmN0aW9uXCIsXG4gICAgICB7XG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxMCksXG4gICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChcbiAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImxhbWJkYS9wZ2JvdW5jZXItaGVhbHRoLWNoZWNrXCIpXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlBnQm91bmNlciBoZWFsdGggY2hlY2sgZnVuY3Rpb25cIixcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gR3JhbnQgU1NNIHBlcm1pc3Npb25zIGZvciBoZWFsdGggY2hlY2tcbiAgICBoZWFsdGhDaGVja0Z1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwic3NtOlNlbmRDb21tYW5kXCIsXG4gICAgICAgICAgXCJzc206R2V0Q29tbWFuZEludm9jYXRpb25cIixcbiAgICAgICAgICBcInNzbTpEZXNjcmliZUluc3RhbmNlSW5mb3JtYXRpb25cIixcbiAgICAgICAgICBcInNzbTpMaXN0Q29tbWFuZEludm9jYXRpb25zXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaGVhbHRoQ2hlY2sgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJQZ0JvdW5jZXJIZWFsdGhDaGVja1wiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IGhlYWx0aENoZWNrRnVuY3Rpb24uZnVuY3Rpb25Bcm4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIEluc3RhbmNlSWQ6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgLy8gQWRkIHRpbWVzdGFtcCB0byBmb3JjZSByZS1leGVjdXRpb24gb24gc3RhY2sgdXBkYXRlc1xuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFbnN1cmUgaGVhbHRoIGNoZWNrIHJ1bnMgYWZ0ZXIgaW5zdGFuY2UgaXMgY3JlYXRlZCBidXQgYmVmb3JlIHNlY3JldCB1cGRhdGVcbiAgICB0aGlzLmhlYWx0aENoZWNrLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmluc3RhbmNlKTtcbiAgICB0aGlzLnNlY3JldFVwZGF0ZUNvbXBsZXRlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmhlYWx0aENoZWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFVzZXJEYXRhU2NyaXB0KFxuICAgIHBnQm91bmNlckNvbmZpZzogUmVxdWlyZWQ8Tm9uTnVsbGFibGU8UGdCb3VuY2VyUHJvcHNbXCJwZ0JvdW5jZXJDb25maWdcIl0+PixcbiAgICBkYXRhYmFzZTogeyBzZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLklTZWNyZXQgfVxuICApOiBlYzIuVXNlckRhdGEge1xuICAgIGNvbnN0IHVzZXJEYXRhU2NyaXB0ID0gZWMyLlVzZXJEYXRhLmZvckxpbnV4KCk7XG5cbiAgICAvLyBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4gICAgdXNlckRhdGFTY3JpcHQuYWRkQ29tbWFuZHMoXG4gICAgICAnZXhwb3J0IFNFQ1JFVF9BUk49XCInICsgZGF0YWJhc2Uuc2VjcmV0LnNlY3JldEFybiArICdcIicsXG4gICAgICAnZXhwb3J0IFJFR0lPTj1cIicgKyBTdGFjay5vZih0aGlzKS5yZWdpb24gKyAnXCInLFxuICAgICAgJ2V4cG9ydCBQT09MX01PREU9XCInICsgcGdCb3VuY2VyQ29uZmlnLnBvb2xNb2RlICsgJ1wiJyxcbiAgICAgICdleHBvcnQgTUFYX0NMSUVOVF9DT05OPVwiJyArIHBnQm91bmNlckNvbmZpZy5tYXhDbGllbnRDb25uICsgJ1wiJyxcbiAgICAgICdleHBvcnQgREVGQVVMVF9QT09MX1NJWkU9XCInICsgcGdCb3VuY2VyQ29uZmlnLmRlZmF1bHRQb29sU2l6ZSArICdcIicsXG4gICAgICAnZXhwb3J0IE1JTl9QT09MX1NJWkU9XCInICsgcGdCb3VuY2VyQ29uZmlnLm1pblBvb2xTaXplICsgJ1wiJyxcbiAgICAgICdleHBvcnQgUkVTRVJWRV9QT09MX1NJWkU9XCInICsgcGdCb3VuY2VyQ29uZmlnLnJlc2VydmVQb29sU2l6ZSArICdcIicsXG4gICAgICAnZXhwb3J0IFJFU0VSVkVfUE9PTF9USU1FT1VUPVwiJyArXG4gICAgICAgIHBnQm91bmNlckNvbmZpZy5yZXNlcnZlUG9vbFRpbWVvdXQgK1xuICAgICAgICAnXCInLFxuICAgICAgJ2V4cG9ydCBNQVhfREJfQ09OTkVDVElPTlM9XCInICsgcGdCb3VuY2VyQ29uZmlnLm1heERiQ29ubmVjdGlvbnMgKyAnXCInLFxuICAgICAgJ2V4cG9ydCBNQVhfVVNFUl9DT05ORUNUSU9OUz1cIicgKyBwZ0JvdW5jZXJDb25maWcubWF4VXNlckNvbm5lY3Rpb25zICsgJ1wiJ1xuICAgICk7XG5cbiAgICAvLyBMb2FkIHRoZSBzdGFydHVwIHNjcmlwdFxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4vcGdib3VuY2VyLXNldHVwLnNoXCIpO1xuICAgIGxldCBzY3JpcHQgPSBmcy5yZWFkRmlsZVN5bmMoc2NyaXB0UGF0aCwgXCJ1dGY4XCIpO1xuXG4gICAgdXNlckRhdGFTY3JpcHQuYWRkQ29tbWFuZHMoc2NyaXB0KTtcblxuICAgIHJldHVybiB1c2VyRGF0YVNjcmlwdDtcbiAgfVxufVxuIl19
|
package/lib/database/index.d.ts
CHANGED
|
@@ -2,9 +2,47 @@ import { CustomResource, aws_ec2 as ec2, aws_rds as rds, aws_secretsmanager as s
|
|
|
2
2
|
import { Construct } from "constructs";
|
|
3
3
|
import { CustomLambdaFunctionProps } from "../utils";
|
|
4
4
|
/**
|
|
5
|
-
* An RDS instance with pgSTAC installed
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* An RDS instance with pgSTAC installed and PgBouncer connection pooling.
|
|
6
|
+
*
|
|
7
|
+
* This construct creates an optimized pgSTAC database setup that includes:
|
|
8
|
+
* - RDS PostgreSQL instance with pgSTAC extension
|
|
9
|
+
* - PgBouncer connection pooler (enabled by default)
|
|
10
|
+
* - Automated health monitoring system
|
|
11
|
+
* - Optimized database parameters for the selected instance type
|
|
12
|
+
*
|
|
13
|
+
* ## Connection Pooling with PgBouncer
|
|
14
|
+
*
|
|
15
|
+
* By default, this construct deploys PgBouncer as a connection pooler running on
|
|
16
|
+
* a dedicated EC2 instance. PgBouncer provides several benefits:
|
|
17
|
+
*
|
|
18
|
+
* - **Connection Management**: Pools and reuses database connections to reduce overhead
|
|
19
|
+
* - **Performance**: Optimizes connection handling for high-traffic applications
|
|
20
|
+
* - **Scalability**: Allows more concurrent connections than the RDS instance alone
|
|
21
|
+
* - **Health Monitoring**: Includes comprehensive health checks to ensure availability
|
|
22
|
+
*
|
|
23
|
+
* ### PgBouncer Configuration
|
|
24
|
+
* - Pool mode: Transaction-level pooling (default)
|
|
25
|
+
* - Maximum client connections: 1000
|
|
26
|
+
* - Default pool size: 20 connections per database/user combination
|
|
27
|
+
* - Instance type: t3.micro EC2 instance
|
|
28
|
+
*
|
|
29
|
+
* ### Health Check System
|
|
30
|
+
* The construct includes an automated health check system that validates:
|
|
31
|
+
* - PgBouncer service is running and listening on port 5432
|
|
32
|
+
* - Connection tests to ensure accessibility
|
|
33
|
+
* - Cloud-init setup completion before validation
|
|
34
|
+
* - Detailed diagnostics for troubleshooting
|
|
35
|
+
*
|
|
36
|
+
* ### Connection Details
|
|
37
|
+
* When PgBouncer is enabled, applications connect through the PgBouncer instance
|
|
38
|
+
* rather than directly to RDS. The `pgstacSecret` contains connection information
|
|
39
|
+
* pointing to PgBouncer, and the `connectionTarget` property refers to the
|
|
40
|
+
* PgBouncer EC2 instance.
|
|
41
|
+
*
|
|
42
|
+
* To disable PgBouncer and connect directly to RDS, set `addPgbouncer: false`.
|
|
43
|
+
*
|
|
44
|
+
* This is a wrapper around the `rds.DatabaseInstance` higher-level construct
|
|
45
|
+
* making use of the BootstrapPgStac construct.
|
|
8
46
|
*/
|
|
9
47
|
export declare class PgStacDatabase extends Construct {
|
|
10
48
|
db: rds.DatabaseInstance;
|
|
@@ -14,6 +52,7 @@ export declare class PgStacDatabase extends Construct {
|
|
|
14
52
|
readonly connectionTarget: rds.IDatabaseInstance | ec2.Instance;
|
|
15
53
|
readonly securityGroup?: ec2.SecurityGroup;
|
|
16
54
|
readonly secretBootstrapper?: CustomResource;
|
|
55
|
+
readonly pgbouncerHealthCheck?: CustomResource;
|
|
17
56
|
constructor(scope: Construct, id: string, props: PgStacDatabaseProps);
|
|
18
57
|
getParameters(instanceType: string, parameters: PgStacDatabaseProps["parameters"]): DatabaseParameters;
|
|
19
58
|
}
|
package/lib/database/index.js
CHANGED
|
@@ -16,9 +16,47 @@ function hasVpc(instance) {
|
|
|
16
16
|
return instance.vpc !== undefined;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* An RDS instance with pgSTAC installed
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* An RDS instance with pgSTAC installed and PgBouncer connection pooling.
|
|
20
|
+
*
|
|
21
|
+
* This construct creates an optimized pgSTAC database setup that includes:
|
|
22
|
+
* - RDS PostgreSQL instance with pgSTAC extension
|
|
23
|
+
* - PgBouncer connection pooler (enabled by default)
|
|
24
|
+
* - Automated health monitoring system
|
|
25
|
+
* - Optimized database parameters for the selected instance type
|
|
26
|
+
*
|
|
27
|
+
* ## Connection Pooling with PgBouncer
|
|
28
|
+
*
|
|
29
|
+
* By default, this construct deploys PgBouncer as a connection pooler running on
|
|
30
|
+
* a dedicated EC2 instance. PgBouncer provides several benefits:
|
|
31
|
+
*
|
|
32
|
+
* - **Connection Management**: Pools and reuses database connections to reduce overhead
|
|
33
|
+
* - **Performance**: Optimizes connection handling for high-traffic applications
|
|
34
|
+
* - **Scalability**: Allows more concurrent connections than the RDS instance alone
|
|
35
|
+
* - **Health Monitoring**: Includes comprehensive health checks to ensure availability
|
|
36
|
+
*
|
|
37
|
+
* ### PgBouncer Configuration
|
|
38
|
+
* - Pool mode: Transaction-level pooling (default)
|
|
39
|
+
* - Maximum client connections: 1000
|
|
40
|
+
* - Default pool size: 20 connections per database/user combination
|
|
41
|
+
* - Instance type: t3.micro EC2 instance
|
|
42
|
+
*
|
|
43
|
+
* ### Health Check System
|
|
44
|
+
* The construct includes an automated health check system that validates:
|
|
45
|
+
* - PgBouncer service is running and listening on port 5432
|
|
46
|
+
* - Connection tests to ensure accessibility
|
|
47
|
+
* - Cloud-init setup completion before validation
|
|
48
|
+
* - Detailed diagnostics for troubleshooting
|
|
49
|
+
*
|
|
50
|
+
* ### Connection Details
|
|
51
|
+
* When PgBouncer is enabled, applications connect through the PgBouncer instance
|
|
52
|
+
* rather than directly to RDS. The `pgstacSecret` contains connection information
|
|
53
|
+
* pointing to PgBouncer, and the `connectionTarget` property refers to the
|
|
54
|
+
* PgBouncer EC2 instance.
|
|
55
|
+
*
|
|
56
|
+
* To disable PgBouncer and connect directly to RDS, set `addPgbouncer: false`.
|
|
57
|
+
*
|
|
58
|
+
* This is a wrapper around the `rds.DatabaseInstance` higher-level construct
|
|
59
|
+
* making use of the BootstrapPgStac construct.
|
|
22
60
|
*/
|
|
23
61
|
class PgStacDatabase extends constructs_1.Construct {
|
|
24
62
|
constructor(scope, id, props) {
|
|
@@ -45,6 +83,7 @@ class PgStacDatabase extends constructs_1.Construct {
|
|
|
45
83
|
...props,
|
|
46
84
|
});
|
|
47
85
|
this.pgstacVersion = props.pgstacVersion || utils_1.DEFAULT_PGSTAC_VERSION;
|
|
86
|
+
const { code: userCode, ...otherLambdaOptions } = props.bootstrapperLambdaFunctionOptions || {};
|
|
48
87
|
const handler = new aws_cdk_lib_1.aws_lambda.Function(this, "lambda", {
|
|
49
88
|
// defaults
|
|
50
89
|
runtime: aws_cdk_lib_1.aws_lambda.Runtime.PYTHON_3_12,
|
|
@@ -52,7 +91,7 @@ class PgStacDatabase extends constructs_1.Construct {
|
|
|
52
91
|
memorySize: 128,
|
|
53
92
|
logRetention: aws_cdk_lib_1.aws_logs.RetentionDays.ONE_WEEK,
|
|
54
93
|
timeout: aws_cdk_lib_1.Duration.minutes(2),
|
|
55
|
-
code:
|
|
94
|
+
code: (0, utils_1.resolveLambdaCode)(userCode, __dirname, {
|
|
56
95
|
file: "bootstrapper_runtime/Dockerfile",
|
|
57
96
|
buildArgs: {
|
|
58
97
|
PYTHON_VERSION: "3.12",
|
|
@@ -62,7 +101,7 @@ class PgStacDatabase extends constructs_1.Construct {
|
|
|
62
101
|
vpc: hasVpc(this.db) ? this.db.vpc : props.vpc,
|
|
63
102
|
allowPublicSubnet: true,
|
|
64
103
|
// overwrites defaults with user-provided configurable properties,
|
|
65
|
-
...
|
|
104
|
+
...otherLambdaOptions,
|
|
66
105
|
});
|
|
67
106
|
this.pgstacSecret = new aws_cdk_lib_1.aws_secretsmanager.Secret(this, "bootstrappersecret", {
|
|
68
107
|
secretName: [
|
|
@@ -98,7 +137,7 @@ class PgStacDatabase extends constructs_1.Construct {
|
|
|
98
137
|
customResourceProperties["new_user_secret_arn"] =
|
|
99
138
|
this.pgstacSecret.secretArn;
|
|
100
139
|
// if props.lambdaFunctionOptions doesn't have 'code' defined, update pgstac_version (needed for default runtime)
|
|
101
|
-
if (!
|
|
140
|
+
if (!userCode) {
|
|
102
141
|
customResourceProperties["pgstac_version"] = this.pgstacVersion;
|
|
103
142
|
}
|
|
104
143
|
// add timestamp to properties to ensure the Lambda gets re-executed on each deploy
|
|
@@ -142,6 +181,7 @@ class PgStacDatabase extends constructs_1.Construct {
|
|
|
142
181
|
this.connectionTarget = this._pgBouncerServer.instance;
|
|
143
182
|
this.securityGroup = this._pgBouncerServer.securityGroup;
|
|
144
183
|
this.secretBootstrapper = this._pgBouncerServer.secretUpdateComplete;
|
|
184
|
+
this.pgbouncerHealthCheck = this._pgBouncerServer.healthCheck;
|
|
145
185
|
}
|
|
146
186
|
else {
|
|
147
187
|
this.connectionTarget = this.db;
|
|
@@ -181,5 +221,5 @@ class PgStacDatabase extends constructs_1.Construct {
|
|
|
181
221
|
}
|
|
182
222
|
exports.PgStacDatabase = PgStacDatabase;
|
|
183
223
|
_a = JSII_RTTI_SYMBOL_1;
|
|
184
|
-
PgStacDatabase[_a] = { fqn: "eoapi-cdk.PgStacDatabase", version: "10.
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQVVxQjtBQUNyQiwyQ0FBdUM7QUFDdkMsb0NBQTZFO0FBQzdFLDJDQUF3QztBQUV4QyxNQUFNLGFBQWEsR0FBMkIsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFaEYsSUFBSSwwQkFBMEIsR0FBMkI7SUFDdkQsT0FBTyxFQUFFLE9BQU87SUFDaEIsWUFBWSxFQUFFLE1BQU07Q0FDckIsQ0FBQztBQUVGLFNBQVMsTUFBTSxDQUNiLFFBQXNEO0lBRXRELE9BQVEsUUFBaUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDO0FBQzlELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFVM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDMUMsS0FBSyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxVQUFVLEVBQzVDLEtBQUssQ0FBQyxVQUFVLENBQ2pCLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLHFCQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNwRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsVUFBVSxFQUFFO2dCQUNWLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxjQUFjO2dCQUNqRCxjQUFjLEVBQUUsaUJBQWlCLENBQUMsYUFBYTtnQkFDL0Msb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsa0JBQWtCO2dCQUMxRCxRQUFRLEVBQUUsaUJBQWlCLENBQUMsT0FBTztnQkFDbkMsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsa0JBQWtCO2dCQUMxRCx5QkFBeUIsRUFBRSxp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QkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQztRQUU1RCxNQUFNLFdBQVcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQy9CLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN0QixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7UUFFM0IsT0FBTztZQUNMLGNBQWMsRUFBRSxHQUFHLGNBQWMsRUFBRTtZQUNuQyxhQUFhLEVBQUUsR0FBRyxhQUFhLEdBQUcsQ0FBQyxFQUFFLEVBQUUsNEJBQTRCO1lBQ25FLGtCQUFrQixFQUFFLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsNEJBQTRCO1lBQzdFLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRTtZQUNyQixrQkFBa0IsRUFBRSxHQUFHLGtCQUFrQixFQUFFO1lBQzNDLHNCQUFzQixFQUFFLE1BQU07WUFDOUIsV0FBVyxFQUFFLEdBQUcsV0FBVyxHQUFHLENBQUMsRUFBRSxFQUFFLDRCQUE0QjtZQUMvRCxXQUFXLEVBQUUsR0FBRyxXQUFXLEVBQUU7WUFDN0IsY0FBYyxFQUFFLEdBQUcsY0FBYyxFQUFFO1NBQ3BDLENBQUM7SUFDSixDQUFDOztBQXJNSCx3Q0FzTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDdXN0b21SZXNvdXJjZSxcbiAgRHVyYXRpb24sXG4gIFJlbW92YWxQb2xpY3ksXG4gIFN0YWNrLFxuICBhd3NfbGFtYmRhLFxuICBhd3NfbG9ncyxcbiAgYXdzX2VjMiBhcyBlYzIsXG4gIGF3c19yZHMgYXMgcmRzLFxuICBhd3Nfc2VjcmV0c21hbmFnZXIgYXMgc2VjcmV0c21hbmFnZXIsXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEN1c3RvbUxhbWJkYUZ1bmN0aW9uUHJvcHMsIERFRkFVTFRfUEdTVEFDX1ZFUlNJT04gfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFBnQm91bmNlciB9IGZyb20gXCIuL1BnQm91bmNlclwiO1xuXG5jb25zdCBpbnN0YW5jZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0gcmVxdWlyZShcIi4vaW5zdGFuY2UtbWVtb3J5Lmpzb25cIik7XG5cbmxldCBkZWZhdWx0UGdTVEFDQ3VzdG9tT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHtcbiAgY29udGV4dDogXCJGQUxTRVwiLFxuICBtb3NhaWNfaW5kZXg6IFwiVFJVRVwiLFxufTtcblxuZnVuY3Rpb24gaGFzVnBjKFxuICBpbnN0YW5jZTogcmRzLkRhdGFiYXNlSW5zdGFuY2UgfCByZHMuSURhdGFiYXNlSW5zdGFuY2Vcbik6IGluc3RhbmNlIGlzIHJkcy5EYXRhYmFzZUluc3RhbmNlIHtcbiAgcmV0dXJuIChpbnN0YW5jZSBhcyByZHMuRGF0YWJhc2VJbnN0YW5jZSkudnBjICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQW4gUkRTIGluc3RhbmNlIHdpdGggcGdTVEFDIGluc3RhbGxlZC4gVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZVxuICogYHJkcy5EYXRhYmFzZUluc3RhbmNlYCBoaWdoZXItbGV2ZWwgY29uc3RydWN0IG1ha2luZyB1c2VcbiAqIG9mIHRoZSBCb290c3RyYXBQZ1N0YWMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgUGdTdGFjRGF0YWJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBkYjogcmRzLkRhdGFiYXNlSW5zdGFuY2U7XG4gIHBnc3RhY1NlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldDtcbiAgcHJpdmF0ZSBfcGdCb3VuY2VyU2VydmVyPzogUGdCb3VuY2VyO1xuXG4gIHB1YmxpYyByZWFkb25seSBwZ3N0YWNWZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uVGFyZ2V0OiByZHMuSURhdGFiYXNlSW5zdGFuY2UgfCBlYzIuSW5zdGFuY2U7XG4gIHB1YmxpYyByZWFkb25seSBzZWN1cml0eUdyb3VwPzogZWMyLlNlY3VyaXR5R3JvdXA7XG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXRCb290c3RyYXBwZXI/OiBDdXN0b21SZXNvdXJjZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGdTdGFjRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGFyYW1ldGVycyA9IHRoaXMuZ2V0UGFyYW1ldGVycyhcbiAgICAgIHByb3BzLmluc3RhbmNlVHlwZT8udG9TdHJpbmcoKSB8fCBcIm01LmxhcmdlXCIsXG4gICAgICBwcm9wcy5wYXJhbWV0ZXJzXG4gICAgKTtcbiAgICBjb25zdCBwYXJhbWV0ZXJHcm91cCA9IG5ldyByZHMuUGFyYW1ldGVyR3JvdXAodGhpcywgXCJwYXJhbWV0ZXJHcm91cFwiLCB7XG4gICAgICBlbmdpbmU6IHByb3BzLmVuZ2luZSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgbWF4X2Nvbm5lY3Rpb25zOiBkZWZhdWx0UGFyYW1ldGVycy5tYXhDb25uZWN0aW9ucyxcbiAgICAgICAgc2hhcmVkX2J1ZmZlcnM6IGRlZmF1bHRQYXJhbWV0ZXJzLnNoYXJlZEJ1ZmZlcnMsXG4gICAgICAgIGVmZmVjdGl2ZV9jYWNoZV9zaXplOiBkZWZhdWx0UGFyYW1ldGVycy5lZmZlY3RpdmVDYWNoZVNpemUsXG4gICAgICAgIHdvcmtfbWVtOiBkZWZhdWx0UGFyYW1ldGVycy53b3JrTWVtLFxuICAgICAgICBtYWludGVuYW5jZV93b3JrX21lbTogZGVmYXVsdFBhcmFtZXRlcnMubWFpbnRlbmFuY2VXb3JrTWVtLFxuICAgICAgICBtYXhfbG9ja3NfcGVyX3RyYW5zYWN0aW9uOiBkZWZhdWx0UGFyYW1ldGVycy5tYXhMb2Nrc1BlclRyYW5zYWN0aW9uLFxuICAgICAgICB0ZW1wX2J1ZmZlcnM6IGRlZmF1bHRQYXJhbWV0ZXJzLnRlbXBCdWZmZXJzLFxuICAgICAgICBzZXFfcGFnZV9jb3N0OiBkZWZhdWx0UGFyYW1ldGVycy5zZXFQYWdlQ29zdCxcbiAgICAgICAgcmFuZG9tX3BhZ2VfY29zdDogZGVmYXVsdFBhcmFtZXRlcnMucmFuZG9tUGFnZUNvc3QsXG4gICAgICAgIC4uLnByb3BzLnBhcmFtZXRlcnMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5kYiA9IG5ldyByZHMuRGF0YWJhc2VJbnN0YW5jZSh0aGlzLCBcImRiXCIsIHtcbiAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogU3RhY2sub2YodGhpcykuc3RhY2tOYW1lLFxuICAgICAgcGFyYW1ldGVyR3JvdXAsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcblxuICAgIHRoaXMucGdzdGFjVmVyc2lvbiA9IHByb3BzLnBnc3RhY1ZlcnNpb24gfHwgREVGQVVMVF9QR1NUQUNfVkVSU0lPTjtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgYXdzX2xhbWJkYS5GdW5jdGlvbih0aGlzLCBcImxhbWJkYVwiLCB7XG4gICAgICAvLyBkZWZhdWx0c1xuICAgICAgcnVudGltZTogYXdzX2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyLFxuICAgICAgaGFuZGxlcjogXCJoYW5kbGVyLmhhbmRsZXJcIixcbiAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgIGxvZ1JldGVudGlvbjogYXdzX2xvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICBjb2RlOiBhd3NfbGFtYmRhLkNvZGUuZnJvbURvY2tlckJ1aWxkKF9fZGlybmFtZSwge1xuICAgICAgICBmaWxlOiBcImJvb3RzdHJhcHBlcl9ydW50aW1lL0RvY2tlcmZpbGVcIixcbiAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgUFlUSE9OX1ZFUlNJT046IFwiMy4xMlwiLFxuICAgICAgICAgIFBHU1RBQ19WRVJTSU9OOiB0aGlzLnBnc3RhY1ZlcnNpb24sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIHZwYzogaGFzVnBjKHRoaXMuZGIpID8gdGhpcy5kYi52cGMgOiBwcm9wcy52cGMsXG4gICAgICBhbGxvd1B1YmxpY1N1Ym5ldDogdHJ1ZSxcbiAgICAgIC8vIG92ZXJ3cml0ZXMgZGVmYXVsdHMgd2l0aCB1c2VyLXByb3ZpZGVkIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0aWVzLFxuICAgICAgLi4ucHJvcHMuYm9vdHN0cmFwcGVyTGFtYmRhRnVuY3Rpb25PcHRpb25zLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wZ3N0YWNTZWNyZXQgPSBuZXcgc2VjcmV0c21hbmFnZXIuU2VjcmV0KHRoaXMsIFwiYm9vdHN0cmFwcGVyc2VjcmV0XCIsIHtcbiAgICAgIHNlY3JldE5hbWU6IFtcbiAgICAgICAgcHJvcHMuc2VjcmV0c1ByZWZpeCB8fCBcInBnc3RhY1wiLFxuICAgICAgICBpZCxcbiAgICAgICAgdGhpcy5ub2RlLmFkZHIuc2xpY2UoLTgpLFxuICAgICAgXS5qb2luKFwiL1wiKSxcbiAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZGJuYW1lOiBwcm9wcy5wZ3N0YWNEYk5hbWUgfHwgXCJwZ3N0YWNcIixcbiAgICAgICAgICBlbmdpbmU6IFwicG9zdGdyZXNcIixcbiAgICAgICAgICBwb3J0OiA1NDMyLFxuICAgICAgICAgIGhvc3Q6IHRoaXMuZGIuaW5zdGFuY2VFbmRwb2ludC5ob3N0bmFtZSxcbiAgICAgICAgICB1c2VybmFtZTogcHJvcHMucGdzdGFjVXNlcm5hbWUgfHwgXCJwZ3N0YWNfdXNlclwiLFxuICAgICAgICB9KSxcbiAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwicGFzc3dvcmRcIixcbiAgICAgICAgZXhjbHVkZVB1bmN0dWF0aW9uOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUGdTVEFDIGRhdGFiYXNlIGJvb3RzdHJhcHBlZCBieSAke1xuICAgICAgICBTdGFjay5vZih0aGlzKS5zdGFja05hbWVcbiAgICAgIH1gLFxuICAgIH0pO1xuXG4gICAgLy8gQWxsb3cgbGFtYmRhIHRvLi4uXG4gICAgLy8gcmVhZCBuZXcgdXNlciBzZWNyZXRcbiAgICB0aGlzLnBnc3RhY1NlY3JldC5ncmFudFJlYWQoaGFuZGxlcik7XG4gICAgLy8gcmVhZCBkYXRhYmFzZSBzZWNyZXRcbiAgICB0aGlzLmRiLnNlY3JldCEuZ3JhbnRSZWFkKGhhbmRsZXIpO1xuICAgIC8vIGNvbm5lY3QgdG8gZGF0YWJhc2VcbiAgICB0aGlzLmRiLmNvbm5lY3Rpb25zLmFsbG93RnJvbShoYW5kbGVyLCBlYzIuUG9ydC50Y3AoNTQzMikpO1xuXG4gICAgbGV0IGN1c3RvbVJlc291cmNlUHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9XG4gICAgICBwcm9wcy5jdXN0b21SZXNvdXJjZVByb3BlcnRpZXNcbiAgICAgICAgPyB7IC4uLmRlZmF1bHRQZ1NUQUNDdXN0b21PcHRpb25zLCAuLi5wcm9wcy5jdXN0b21SZXNvdXJjZVByb3BlcnRpZXMgfVxuICAgICAgICA6IGRlZmF1bHRQZ1NUQUNDdXN0b21PcHRpb25zO1xuXG4gICAgLy8gdXBkYXRlIHByb3BlcnRpZXNcbiAgICBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXNbXCJjb25uX3NlY3JldF9hcm5cIl0gPSB0aGlzLmRiLnNlY3JldCEuc2VjcmV0QXJuO1xuICAgIGN1c3RvbVJlc291cmNlUHJvcGVydGllc1tcIm5ld191c2VyX3NlY3JldF9hcm5cIl0gPVxuICAgICAgdGhpcy5wZ3N0YWNTZWNyZXQuc2VjcmV0QXJuO1xuXG4gICAgLy8gaWYgcHJvcHMubGFtYmRhRnVuY3Rpb25PcHRpb25zIGRvZXNuJ3QgaGF2ZSAnY29kZScgZGVmaW5lZCwgdXBkYXRlIHBnc3RhY192ZXJzaW9uIChuZWVkZWQgZm9yIGRlZmF1bHQgcnVudGltZSlcbiAgICBpZiAoIXByb3BzLmJvb3RzdHJhcHBlckxhbWJkYUZ1bmN0aW9uT3B0aW9ucz8uY29kZSkge1xuICAgICAgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzW1wicGdzdGFjX3ZlcnNpb25cIl0gPSB0aGlzLnBnc3RhY1ZlcnNpb247XG4gICAgfVxuXG4gICAgLy8gYWRkIHRpbWVzdGFtcCB0byBwcm9wZXJ0aWVzIHRvIGVuc3VyZSB0aGUgTGFtYmRhIGdldHMgcmUtZXhlY3V0ZWQgb24gZWFjaCBkZXBsb3lcbiAgICBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXNbXCJ0aW1lc3RhbXBcIl0gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICBjb25zdCBib290c3RyYXBwZXIgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJib290c3RyYXBwZXJcIiwge1xuICAgICAgc2VydmljZVRva2VuOiBoYW5kbGVyLmZ1bmN0aW9uQXJuLFxuICAgICAgcHJvcGVydGllczogY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5SRVRBSU4sIC8vIFRoaXMgcmV0YWlucyB0aGUgY3VzdG9tIHJlc291cmNlICh3aGljaCBkb2Vzbid0IHJlYWxseSBleGlzdCksIG5vdCB0aGUgZGF0YWJhc2VcbiAgICB9KTtcblxuICAgIC8vIFBnQm91bmNlcjogY29ubmVjdGlvbiBwb29sZXJjdXN0b21yZXNvdXJjZSB0cmlnZ2VyIG9uIHJlZGVwbG95XG4gICAgY29uc3QgZGVmYXVsdFBnYm91bmNlckluc3RhbmNlUHJvcHM6IFBhcnRpYWw8ZWMyLkluc3RhbmNlUHJvcHM+ID0ge1xuICAgICAgaW5zdGFuY2VOYW1lOiBgJHtTdGFjay5vZih0aGlzKS5zdGFja05hbWV9LXBnYm91bmNlcmAsXG4gICAgICBpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGUub2YoXG4gICAgICAgIGVjMi5JbnN0YW5jZUNsYXNzLlQzLFxuICAgICAgICBlYzIuSW5zdGFuY2VTaXplLk1JQ1JPXG4gICAgICApLFxuICAgIH07XG4gICAgY29uc3QgYWRkUGdib3VuY2VyID0gcHJvcHMuYWRkUGdib3VuY2VyID8/IHRydWU7XG4gICAgaWYgKGFkZFBnYm91bmNlcikge1xuICAgICAgdGhpcy5fcGdCb3VuY2VyU2VydmVyID0gbmV3IFBnQm91bmNlcih0aGlzLCBcInBnYm91bmNlclwiLCB7XG4gICAgICAgIGluc3RhbmNlUHJvcHM6IHtcbiAgICAgICAgICAuLi5kZWZhdWx0UGdib3VuY2VySW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICAuLi5wcm9wcy5wZ2JvdW5jZXJJbnN0YW5jZVByb3BzLFxuICAgICAgICB9LFxuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgZGF0YWJhc2U6IHtcbiAgICAgICAgICBjb25uZWN0aW9uczogdGhpcy5kYi5jb25uZWN0aW9ucyxcbiAgICAgICAgICBzZWNyZXQ6IHRoaXMucGdzdGFjU2VjcmV0LFxuICAgICAgICB9LFxuICAgICAgICBkYk1heENvbm5lY3Rpb25zOiBwYXJzZUludChkZWZhdWx0UGFyYW1ldGVycy5tYXhDb25uZWN0aW9ucyksXG4gICAgICAgIHVzZVB1YmxpY1N1Ym5ldDpcbiAgICAgICAgICAhcHJvcHMudnBjU3VibmV0cyB8fFxuICAgICAgICAgIHByb3BzLnZwY1N1Ym5ldHMuc3VibmV0VHlwZSA9PT0gZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgICBwZ0JvdW5jZXJDb25maWc6IHtcbiAgICAgICAgICBwb29sTW9kZTogXCJ0cmFuc2FjdGlvblwiLFxuICAgICAgICAgIG1heENsaWVudENvbm46IDEwMDAsXG4gICAgICAgICAgZGVmYXVsdFBvb2xTaXplOiAyMCxcbiAgICAgICAgICBtaW5Qb29sU2l6ZTogMTAsXG4gICAgICAgICAgcmVzZXJ2ZVBvb2xTaXplOiA1LFxuICAgICAgICAgIHJlc2VydmVQb29sVGltZW91dDogNSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIubm9kZS5hZGREZXBlbmRlbmN5KGJvb3RzdHJhcHBlcik7XG5cbiAgICAgIHRoaXMucGdzdGFjU2VjcmV0ID0gdGhpcy5fcGdCb3VuY2VyU2VydmVyLnBnYm91bmNlclNlY3JldDtcbiAgICAgIHRoaXMuY29ubmVjdGlvblRhcmdldCA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5pbnN0YW5jZTtcbiAgICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5zZWN1cml0eUdyb3VwO1xuICAgICAgdGhpcy5zZWNyZXRCb290c3RyYXBwZXIgPSB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIuc2VjcmV0VXBkYXRlQ29tcGxldGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvblRhcmdldCA9IHRoaXMuZGI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFBhcmFtZXRlcnMoXG4gICAgaW5zdGFuY2VUeXBlOiBzdHJpbmcsXG4gICAgcGFyYW1ldGVyczogUGdTdGFjRGF0YWJhc2VQcm9wc1tcInBhcmFtZXRlcnNcIl1cbiAgKTogRGF0YWJhc2VQYXJhbWV0ZXJzIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jbGkvaXNzdWVzLzEyNzkjaXNzdWVjb21tZW50LTkwOTMxODIzNlxuICAgIGNvbnN0IG1lbW9yeV9pbl9rYiA9IGluc3RhbmNlU2l6ZXNbaW5zdGFuY2VUeXBlXSAqIDEwMjQ7XG5cbiAgICAvLyBJdCdzIG9ubHkgbmVjZXNzYXJ5IHRvIGNvbnNpZGVyIHBhc3NlZCBpbiBwYXJhbWV0ZXJzIGZvciBhbnkgdmFsdWUgdGhhdCB1c2VkIHRvXG4gICAgLy8gZGVyaXZlIHN1YnNlcXVlbnQgdmFsdWVzLiBWYWx1ZXMgdGhhdCBkb24ndCBoYXZlIGRlcGVuZGVuY2llcyB3aWxsIGJlIG92ZXJyaWRlblxuICAgIC8vIHdoZW4gd2UgdW5wYWNrIHRoZSBwYXNzZWQtaW4gdXNlciBwYXJhbWV0ZXJzXG4gICAgY29uc3QgbWF4Q29ubmVjdGlvbnMgPSBwYXJhbWV0ZXJzPy5tYXhDb25uZWN0aW9uc1xuICAgICAgPyBOdW1iZXIucGFyc2VJbnQocGFyYW1ldGVycy5tYXhDb25uZWN0aW9ucylcbiAgICAgIDogLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfTGltaXRzLmh0bWwjUkRTX0xpbWl0cy5NYXhDb25uZWN0aW9uc1xuICAgICAgICBNYXRoLm1pbihNYXRoLnJvdW5kKChtZW1vcnlfaW5fa2IgKiAxMDI0KSAvIDk1MzEzOTIpLCA1MDAwKTtcbiAgICBjb25zdCBzaGFyZWRCdWZmZXJzID0gcGFyYW1ldGVycz8uc2hhcmVkQnVmZXJzXG4gICAgICA/IE51bWJlci5wYXJzZUludChwYXJhbWV0ZXJzLnNoYXJlZEJ1ZmVycylcbiAgICAgIDogTWF0aC5yb3VuZCgwLjI1ICogbWVtb3J5X2luX2tiKTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZUNhY2hlU2l6ZSA9IE1hdGgucm91bmQoMC43NSAqIG1lbW9yeV9pbl9rYik7XG4gICAgY29uc3Qgd29ya01lbSA9IE1hdGguZmxvb3Ioc2hhcmVkQnVmZmVycyAvIG1heENvbm5lY3Rpb25zKTtcbiAgICBjb25zdCBtYWludGVuYW5jZVdvcmtNZW0gPSBNYXRoLnJvdW5kKDAuMjUgKiBzaGFyZWRCdWZmZXJzKTtcblxuICAgIGNvbnN0IHRlbXBCdWZmZXJzID0gMTI4ICogMTAyNDtcbiAgICBjb25zdCBzZXFQYWdlQ29zdCA9IDE7XG4gICAgY29uc3QgcmFuZG9tUGFnZUNvc3QgPSAxLjE7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWF4Q29ubmVjdGlvbnM6IGAke21heENvbm5lY3Rpb25zfWAsXG4gICAgICBzaGFyZWRCdWZmZXJzOiBgJHtzaGFyZWRCdWZmZXJzIC8gOH1gLCAvLyBSZXByZXNlbnRlZCBpbiA4a2IgYmxvY2tzXG4gICAgICBlZmZlY3RpdmVDYWNoZVNpemU6IGAke2VmZmVjdGl2ZUNhY2hlU2l6ZSAvIDh9YCwgLy8gUmVwcmVzZW50ZWQgaW4gOGtiIGJsb2Nrc1xuICAgICAgd29ya01lbTogYCR7d29ya01lbX1gLFxuICAgICAgbWFpbnRlbmFuY2VXb3JrTWVtOiBgJHttYWludGVuYW5jZVdvcmtNZW19YCxcbiAgICAgIG1heExvY2tzUGVyVHJhbnNhY3Rpb246IFwiMTAyNFwiLFxuICAgICAgdGVtcEJ1ZmZlcnM6IGAke3RlbXBCdWZmZXJzIC8gOH1gLCAvLyBSZXByZXNlbnRlZCBpbiA4a2IgYmxvY2tzXG4gICAgICBzZXFQYWdlQ29zdDogYCR7c2VxUGFnZUNvc3R9YCxcbiAgICAgIHJhbmRvbVBhZ2VDb3N0OiBgJHtyYW5kb21QYWdlQ29zdH1gLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZ1N0YWNEYXRhYmFzZVByb3BzIGV4dGVuZHMgcmRzLkRhdGFiYXNlSW5zdGFuY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIGRhdGFiYXNlIHRoYXQgaXMgdG8gYmUgY3JlYXRlZCBhbmQgb250byB3aGljaCBwZ1NUQUMgd2lsbCBiZSBpbnN0YWxsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHBnc3RhY1xuICAgKi9cbiAgcmVhZG9ubHkgcGdzdGFjRGJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHBnc3RhYyB0byBpbnN0YWxsIG9uIHRoZSBkYXRhYmFzZVxuICAgKlxuICAgKiBAZGVmYXVsdCAwLjguNVxuICAgKi9cbiAgcmVhZG9ubHkgcGdzdGFjVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUHJlZml4IHRvIGFzc2lnbiB0byB0aGUgZ2VuZXJhdGVkIGBzZWNyZXRzX21hbmFnZXIuU2VjcmV0YFxuICAgKlxuICAgKiBAZGVmYXVsdCBwZ3N0YWNcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHNQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdXNlciB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkIGZvciBjb25uZWN0aW5nIHRvIHRoZSBwZ1NUQUMgZGF0YWJhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHBnc3RhY191c2VyXG4gICAqL1xuICByZWFkb25seSBwZ3N0YWNVc2VybmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkIHBnYm91bmNlciBpbnN0YW5jZSBmb3IgbWFuYWdpbmcgdHJhZmZpYyB0byB0aGUgcGdTVEFDIGRhdGFiYXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFkZFBnYm91bmNlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByb3BlcnRpZXMgZm9yIHRoZSBwZ2JvdW5jZXIgZWMyIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmaW5lZCBpbiB0aGUgY29uc3RydWN0XG4gICAqL1xuICByZWFkb25seSBwZ2JvdW5jZXJJbnN0YW5jZVByb3BzPzogZWMyLkluc3RhbmNlUHJvcHMgfCBhbnk7XG5cbiAgLyoqXG4gICAqIExhbWJkYSBmdW5jdGlvbiBDdXN0b20gUmVzb3VyY2UgcHJvcGVydGllcy4gQSBjdXN0b20gcmVzb3VyY2UgcHJvcGVydHkgaXMgZ29pbmcgdG8gYmUgY3JlYXRlZFxuICAgKiB0byB0cmlnZ2VyIHRoZSBib29zdHJhcHBpbmcgbGFtYmRhIGZ1bmN0aW9uLiBUaGlzIHBhcmFtZXRlciBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIHByb3BlcnRpZXNcbiAgICogb24gdG9wIG9mIHRoZSBkZWZhdWx0cyBvbmVzLlxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzPzoge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbGFtYmRhIGZ1bmN0aW9uIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmaW5lZCBpbiB0aGUgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgYm9vdHN0cmFwcGVyTGFtYmRhRnVuY3Rpb25PcHRpb25zPzogQ3VzdG9tTGFtYmRhRnVuY3Rpb25Qcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZVBhcmFtZXRlcnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBMRUFTVCh7REJJbnN0YW5jZUNsYXNzTWVtb3J5Lzk1MzEzOTJ9LCA1MDAwKVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q29ubmVjdGlvbnM6IHN0cmluZztcblxuICAvKipcbiAgICogTm90ZTogVGhpcyB2YWx1ZSBpcyBtZWFzdXJlZCBpbiA4S0IgYmxvY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAne0RCSW5zdGFuY2VDbGFzc01lbW9yeS8zMjc2OH0nIDI1JSBvZiBpbnN0YW5jZSBtZW1vcnksIGllIGB7KERCSW5zdGFuY2VDbGFzc01lbW9yeS8oMTAyNCo4KSkgKiAwLjI1fWBcbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlZEJ1ZmZlcnM6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSA3NSUgb2YgaW5zdGFuY2UgbWVtb3J5XG4gICAqL1xuICByZWFkb25seSBlZmZlY3RpdmVDYWNoZVNpemU6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSBzaGFyZWQgYnVmZmVycyBkaXZpZGVkIGJ5IG1heCBjb25uZWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya01lbTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIDI1JSBvZiBzaGFyZWQgYnVmZmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgbWFpbnRlbmFuY2VXb3JrTWVtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IDEwMjRcbiAgICovXG4gIHJlYWRvbmx5IG1heExvY2tzUGVyVHJhbnNhY3Rpb246IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMTMxMTcyICgxMjggKiAxMDI0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGVtcEJ1ZmZlcnM6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgc2VxUGFnZUNvc3Q6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMS4xXG4gICAqL1xuICByZWFkb25seSByYW5kb21QYWdlQ29zdDogc3RyaW5nO1xufVxuIl19
|
|
224
|
+
PgStacDatabase[_a] = { fqn: "eoapi-cdk.PgStacDatabase", version: "10.2.5" };
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQVVxQjtBQUNyQiwyQ0FBdUM7QUFDdkMsb0NBSWtCO0FBQ2xCLDJDQUF3QztBQUV4QyxNQUFNLGFBQWEsR0FBMkIsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFaEYsSUFBSSwwQkFBMEIsR0FBMkI7SUFDdkQsT0FBTyxFQUFFLE9BQU87SUFDaEIsWUFBWSxFQUFFLE1BQU07Q0FDckIsQ0FBQztBQUVGLFNBQVMsTUFBTSxDQUNiLFFBQXNEO0lBRXRELE9BQVEsUUFBaUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDO0FBQzlELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFXM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDMUMsS0FBSyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxVQUFVLEVBQzVDLEtBQUssQ0FBQyxVQUFVLENBQ2pCLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLHFCQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNwRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsVUFBVSxFQUFFO2dCQUNWLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxjQUFjO2dCQUNqRCxjQUFjLEVBQUUsaUJBQWlCLENBQUMsYUFBYTtnQkFDL0Msb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsa0JBQWtCO2dCQUMxRCxRQUFRLEVBQUUsaUJBQWlCLENBQUMsT0FBTztnQkFDbkMsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsa0JBQWtCO2dCQUMxRCx5QkFBeUIsRUFBRSxpQkFBaUIsQ0FBQyxzQkFBc0I7Z0JBQ25FLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxXQUFXO2dCQUMzQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsV0FBVztnQkFDNUMsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsY0FBYztnQkFDbEQsR0FBRyxLQUFLLENBQUMsVUFBVTthQUNwQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxxQkFBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDN0Msa0JBQWtCLEVBQUUsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUztZQUM1QyxjQUFjO1lBQ2QsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxJQUFJLDhCQUFzQixDQUFDO1FBRW5FLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsR0FDN0MsS0FBSyxDQUFDLGlDQUFpQyxJQUFJLEVBQUUsQ0FBQztRQUVoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHdCQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDdEQsV0FBVztZQUNYLE9BQU8sRUFBRSx3QkFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ3ZDLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsVUFBVSxFQUFFLEdBQUc7WUFDZixZQUFZLEVBQUUsc0JBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUTtZQUM3QyxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksRUFBRSxJQUFBLHlCQUFpQixFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUU7Z0JBQzNDLElBQUksRUFBRSxpQ0FBaUM7Z0JBQ3ZDLFNBQVMsRUFBRTtvQkFDVCxjQUFjLEVBQUUsTUFBTTtvQkFDdEIsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhO2lCQUNuQzthQUNGLENBQUM7WUFDRixHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQzlDLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsa0VBQWtFO1lBQ2xFLEdBQUcsa0JBQWtCO1NBQ3RCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxnQ0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDeEUsVUFBVSxFQUFFO2dCQUNWLEtBQUssQ0FBQyxhQUFhLElBQUksUUFBUTtnQkFDL0IsRUFBRTtnQkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ1gsb0JBQW9CLEVBQUU7Z0JBQ3BCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25DLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLFFBQVE7b0JBQ3RDLE1BQU0sRUFBRSxVQUFVO29CQUNsQixJQUFJLEVBQUUsSUFBSTtvQkFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRO29CQUN2QyxRQUFRLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxhQUFhO2lCQUNoRCxDQUFDO2dCQUNGLGlCQUFpQixFQUFFLFVBQVU7Z0JBQzdCLGtCQUFrQixFQUFFLElBQUk7YUFDekI7WUFDRCxXQUFXLEVBQUUsbUNBQ1gsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FDakIsRUFBRTtTQUNILENBQUMsQ0FBQztRQUVILHFCQUFxQjtRQUNyQix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxxQkFBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUzRCxJQUFJLHdCQUF3QixHQUMxQixLQUFLLENBQUMsd0JBQXdCO1lBQzVCLENBQUMsQ0FBQyxFQUFFLEdBQUcsMEJBQTBCLEVBQUUsR0FBRyxLQUFLLENBQUMsd0JBQXdCLEVBQUU7WUFDdEUsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO1FBRWpDLG9CQUFvQjtRQUNwQix3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTyxDQUFDLFNBQVMsQ0FBQztRQUN4RSx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQztZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUU5QixpSEFBaUg7UUFDakgsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2Qsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ2xFLENBQUM7UUFFRCxtRkFBbUY7UUFDbkYsd0JBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqRSxNQUFNLFlBQVksR0FBRyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUM1RCxZQUFZLEVBQUUsT0FBTyxDQUFDLFdBQVc7WUFDakMsVUFBVSxFQUFFLHdCQUF3QjtZQUNwQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxNQUFNLEVBQUUsa0ZBQWtGO1NBQ3hILENBQUMsQ0FBQztRQUVILGlFQUFpRTtRQUNqRSxNQUFNLDZCQUE2QixHQUErQjtZQUNoRSxZQUFZLEVBQUUsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVk7WUFDckQsWUFBWSxFQUFFLHFCQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FDL0IscUJBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUNwQixxQkFBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQ3ZCO1NBQ0YsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO1FBQ2hELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUkscUJBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUN2RCxhQUFhLEVBQUU7b0JBQ2IsR0FBRyw2QkFBNkI7b0JBQ2hDLEdBQUcsS0FBSyxDQUFDLHNCQUFzQjtpQkFDaEM7Z0JBQ0QsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2dCQUNkLFFBQVEsRUFBRTtvQkFDUixXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXO29CQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVk7aUJBQzFCO2dCQUNELGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzVELGVBQWUsRUFDYixDQUFDLEtBQUssQ0FBQyxVQUFVO29CQUNqQixLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxxQkFBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNO2dCQUN2RCxlQUFlLEVBQUU7b0JBQ2YsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLGFBQWEsRUFBRSxJQUFJO29CQUNuQixlQUFlLEVBQUUsRUFBRTtvQkFDbkIsV0FBVyxFQUFFLEVBQUU7b0JBQ2YsZUFBZSxFQUFFLENBQUM7b0JBQ2xCLGtCQUFrQixFQUFFLENBQUM7aUJBQ3RCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDO1lBQzFELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztZQUN6RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1lBQ3JFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1FBQ2hFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFTSxhQUFhLENBQ2xCLFlBQW9CLEVBQ3BCLFVBQTZDO1FBRTdDLG9FQUFvRTtRQUNwRSxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBRXhELGtGQUFrRjtRQUNsRixrRkFBa0Y7UUFDbEYsK0NBQStDO1FBQy9DLE1BQU0sY0FBYyxHQUFHLFVBQVUsRUFBRSxjQUFjO1lBQy9DLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7WUFDNUMsQ0FBQyxDQUFDLG9HQUFvRztnQkFDcEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sYUFBYSxHQUFHLFVBQVUsRUFBRSxZQUFZO1lBQzVDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBRXBDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDM0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQztRQUU1RCxNQUFNLFdBQVcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQy9CLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN0QixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7UUFFM0IsT0FBTztZQUNMLGNBQWMsRUFBRSxHQUFHLGNBQWMsRUFBRTtZQUNuQyxhQUFhLEVBQUUsR0FBRyxhQUFhLEdBQUcsQ0FBQyxFQUFFLEVBQUUsNEJBQTRCO1lBQ25FLGtCQUFrQixFQUFFLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsNEJBQTRCO1lBQzdFLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRTtZQUNyQixrQkFBa0IsRUFBRSxHQUFHLGtCQUFrQixFQUFFO1lBQzNDLHNCQUFzQixFQUFFLE1BQU07WUFDOUIsV0FBVyxFQUFFLEdBQUcsV0FBVyxHQUFHLENBQUMsRUFBRSxFQUFFLDRCQUE0QjtZQUMvRCxXQUFXLEVBQUUsR0FBRyxXQUFXLEVBQUU7WUFDN0IsY0FBYyxFQUFFLEdBQUcsY0FBYyxFQUFFO1NBQ3BDLENBQUM7SUFDSixDQUFDOztBQTFNSCx3Q0EyTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDdXN0b21SZXNvdXJjZSxcbiAgRHVyYXRpb24sXG4gIFJlbW92YWxQb2xpY3ksXG4gIFN0YWNrLFxuICBhd3NfbGFtYmRhLFxuICBhd3NfbG9ncyxcbiAgYXdzX2VjMiBhcyBlYzIsXG4gIGF3c19yZHMgYXMgcmRzLFxuICBhd3Nfc2VjcmV0c21hbmFnZXIgYXMgc2VjcmV0c21hbmFnZXIsXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIEN1c3RvbUxhbWJkYUZ1bmN0aW9uUHJvcHMsXG4gIERFRkFVTFRfUEdTVEFDX1ZFUlNJT04sXG4gIHJlc29sdmVMYW1iZGFDb2RlLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFBnQm91bmNlciB9IGZyb20gXCIuL1BnQm91bmNlclwiO1xuXG5jb25zdCBpbnN0YW5jZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0gcmVxdWlyZShcIi4vaW5zdGFuY2UtbWVtb3J5Lmpzb25cIik7XG5cbmxldCBkZWZhdWx0UGdTVEFDQ3VzdG9tT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHtcbiAgY29udGV4dDogXCJGQUxTRVwiLFxuICBtb3NhaWNfaW5kZXg6IFwiVFJVRVwiLFxufTtcblxuZnVuY3Rpb24gaGFzVnBjKFxuICBpbnN0YW5jZTogcmRzLkRhdGFiYXNlSW5zdGFuY2UgfCByZHMuSURhdGFiYXNlSW5zdGFuY2Vcbik6IGluc3RhbmNlIGlzIHJkcy5EYXRhYmFzZUluc3RhbmNlIHtcbiAgcmV0dXJuIChpbnN0YW5jZSBhcyByZHMuRGF0YWJhc2VJbnN0YW5jZSkudnBjICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQW4gUkRTIGluc3RhbmNlIHdpdGggcGdTVEFDIGluc3RhbGxlZCBhbmQgUGdCb3VuY2VyIGNvbm5lY3Rpb24gcG9vbGluZy5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzIGFuIG9wdGltaXplZCBwZ1NUQUMgZGF0YWJhc2Ugc2V0dXAgdGhhdCBpbmNsdWRlczpcbiAqIC0gUkRTIFBvc3RncmVTUUwgaW5zdGFuY2Ugd2l0aCBwZ1NUQUMgZXh0ZW5zaW9uXG4gKiAtIFBnQm91bmNlciBjb25uZWN0aW9uIHBvb2xlciAoZW5hYmxlZCBieSBkZWZhdWx0KVxuICogLSBBdXRvbWF0ZWQgaGVhbHRoIG1vbml0b3Jpbmcgc3lzdGVtXG4gKiAtIE9wdGltaXplZCBkYXRhYmFzZSBwYXJhbWV0ZXJzIGZvciB0aGUgc2VsZWN0ZWQgaW5zdGFuY2UgdHlwZVxuICpcbiAqICMjIENvbm5lY3Rpb24gUG9vbGluZyB3aXRoIFBnQm91bmNlclxuICpcbiAqIEJ5IGRlZmF1bHQsIHRoaXMgY29uc3RydWN0IGRlcGxveXMgUGdCb3VuY2VyIGFzIGEgY29ubmVjdGlvbiBwb29sZXIgcnVubmluZyBvblxuICogYSBkZWRpY2F0ZWQgRUMyIGluc3RhbmNlLiBQZ0JvdW5jZXIgcHJvdmlkZXMgc2V2ZXJhbCBiZW5lZml0czpcbiAqXG4gKiAtICoqQ29ubmVjdGlvbiBNYW5hZ2VtZW50Kio6IFBvb2xzIGFuZCByZXVzZXMgZGF0YWJhc2UgY29ubmVjdGlvbnMgdG8gcmVkdWNlIG92ZXJoZWFkXG4gKiAtICoqUGVyZm9ybWFuY2UqKjogT3B0aW1pemVzIGNvbm5lY3Rpb24gaGFuZGxpbmcgZm9yIGhpZ2gtdHJhZmZpYyBhcHBsaWNhdGlvbnNcbiAqIC0gKipTY2FsYWJpbGl0eSoqOiBBbGxvd3MgbW9yZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zIHRoYW4gdGhlIFJEUyBpbnN0YW5jZSBhbG9uZVxuICogLSAqKkhlYWx0aCBNb25pdG9yaW5nKio6IEluY2x1ZGVzIGNvbXByZWhlbnNpdmUgaGVhbHRoIGNoZWNrcyB0byBlbnN1cmUgYXZhaWxhYmlsaXR5XG4gKlxuICogIyMjIFBnQm91bmNlciBDb25maWd1cmF0aW9uXG4gKiAtIFBvb2wgbW9kZTogVHJhbnNhY3Rpb24tbGV2ZWwgcG9vbGluZyAoZGVmYXVsdClcbiAqIC0gTWF4aW11bSBjbGllbnQgY29ubmVjdGlvbnM6IDEwMDBcbiAqIC0gRGVmYXVsdCBwb29sIHNpemU6IDIwIGNvbm5lY3Rpb25zIHBlciBkYXRhYmFzZS91c2VyIGNvbWJpbmF0aW9uXG4gKiAtIEluc3RhbmNlIHR5cGU6IHQzLm1pY3JvIEVDMiBpbnN0YW5jZVxuICpcbiAqICMjIyBIZWFsdGggQ2hlY2sgU3lzdGVtXG4gKiBUaGUgY29uc3RydWN0IGluY2x1ZGVzIGFuIGF1dG9tYXRlZCBoZWFsdGggY2hlY2sgc3lzdGVtIHRoYXQgdmFsaWRhdGVzOlxuICogLSBQZ0JvdW5jZXIgc2VydmljZSBpcyBydW5uaW5nIGFuZCBsaXN0ZW5pbmcgb24gcG9ydCA1NDMyXG4gKiAtIENvbm5lY3Rpb24gdGVzdHMgdG8gZW5zdXJlIGFjY2Vzc2liaWxpdHlcbiAqIC0gQ2xvdWQtaW5pdCBzZXR1cCBjb21wbGV0aW9uIGJlZm9yZSB2YWxpZGF0aW9uXG4gKiAtIERldGFpbGVkIGRpYWdub3N0aWNzIGZvciB0cm91Ymxlc2hvb3RpbmdcbiAqXG4gKiAjIyMgQ29ubmVjdGlvbiBEZXRhaWxzXG4gKiBXaGVuIFBnQm91bmNlciBpcyBlbmFibGVkLCBhcHBsaWNhdGlvbnMgY29ubmVjdCB0aHJvdWdoIHRoZSBQZ0JvdW5jZXIgaW5zdGFuY2VcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHRvIFJEUy4gVGhlIGBwZ3N0YWNTZWNyZXRgIGNvbnRhaW5zIGNvbm5lY3Rpb24gaW5mb3JtYXRpb25cbiAqIHBvaW50aW5nIHRvIFBnQm91bmNlciwgYW5kIHRoZSBgY29ubmVjdGlvblRhcmdldGAgcHJvcGVydHkgcmVmZXJzIHRvIHRoZVxuICogUGdCb3VuY2VyIEVDMiBpbnN0YW5jZS5cbiAqXG4gKiBUbyBkaXNhYmxlIFBnQm91bmNlciBhbmQgY29ubmVjdCBkaXJlY3RseSB0byBSRFMsIHNldCBgYWRkUGdib3VuY2VyOiBmYWxzZWAuXG4gKlxuICogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBgcmRzLkRhdGFiYXNlSW5zdGFuY2VgIGhpZ2hlci1sZXZlbCBjb25zdHJ1Y3RcbiAqIG1ha2luZyB1c2Ugb2YgdGhlIEJvb3RzdHJhcFBnU3RhYyBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBQZ1N0YWNEYXRhYmFzZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGRiOiByZHMuRGF0YWJhc2VJbnN0YW5jZTtcbiAgcGdzdGFjU2VjcmV0OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuICBwcml2YXRlIF9wZ0JvdW5jZXJTZXJ2ZXI/OiBQZ0JvdW5jZXI7XG5cbiAgcHVibGljIHJlYWRvbmx5IHBnc3RhY1ZlcnNpb246IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25UYXJnZXQ6IHJkcy5JRGF0YWJhc2VJbnN0YW5jZSB8IGVjMi5JbnN0YW5jZTtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBlYzIuU2VjdXJpdHlHcm91cDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldEJvb3RzdHJhcHBlcj86IEN1c3RvbVJlc291cmNlO1xuICBwdWJsaWMgcmVhZG9ubHkgcGdib3VuY2VySGVhbHRoQ2hlY2s/OiBDdXN0b21SZXNvdXJjZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGdTdGFjRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGFyYW1ldGVycyA9IHRoaXMuZ2V0UGFyYW1ldGVycyhcbiAgICAgIHByb3BzLmluc3RhbmNlVHlwZT8udG9TdHJpbmcoKSB8fCBcIm01LmxhcmdlXCIsXG4gICAgICBwcm9wcy5wYXJhbWV0ZXJzXG4gICAgKTtcbiAgICBjb25zdCBwYXJhbWV0ZXJHcm91cCA9IG5ldyByZHMuUGFyYW1ldGVyR3JvdXAodGhpcywgXCJwYXJhbWV0ZXJHcm91cFwiLCB7XG4gICAgICBlbmdpbmU6IHByb3BzLmVuZ2luZSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgbWF4X2Nvbm5lY3Rpb25zOiBkZWZhdWx0UGFyYW1ldGVycy5tYXhDb25uZWN0aW9ucyxcbiAgICAgICAgc2hhcmVkX2J1ZmZlcnM6IGRlZmF1bHRQYXJhbWV0ZXJzLnNoYXJlZEJ1ZmZlcnMsXG4gICAgICAgIGVmZmVjdGl2ZV9jYWNoZV9zaXplOiBkZWZhdWx0UGFyYW1ldGVycy5lZmZlY3RpdmVDYWNoZVNpemUsXG4gICAgICAgIHdvcmtfbWVtOiBkZWZhdWx0UGFyYW1ldGVycy53b3JrTWVtLFxuICAgICAgICBtYWludGVuYW5jZV93b3JrX21lbTogZGVmYXVsdFBhcmFtZXRlcnMubWFpbnRlbmFuY2VXb3JrTWVtLFxuICAgICAgICBtYXhfbG9ja3NfcGVyX3RyYW5zYWN0aW9uOiBkZWZhdWx0UGFyYW1ldGVycy5tYXhMb2Nrc1BlclRyYW5zYWN0aW9uLFxuICAgICAgICB0ZW1wX2J1ZmZlcnM6IGRlZmF1bHRQYXJhbWV0ZXJzLnRlbXBCdWZmZXJzLFxuICAgICAgICBzZXFfcGFnZV9jb3N0OiBkZWZhdWx0UGFyYW1ldGVycy5zZXFQYWdlQ29zdCxcbiAgICAgICAgcmFuZG9tX3BhZ2VfY29zdDogZGVmYXVsdFBhcmFtZXRlcnMucmFuZG9tUGFnZUNvc3QsXG4gICAgICAgIC4uLnByb3BzLnBhcmFtZXRlcnMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5kYiA9IG5ldyByZHMuRGF0YWJhc2VJbnN0YW5jZSh0aGlzLCBcImRiXCIsIHtcbiAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogU3RhY2sub2YodGhpcykuc3RhY2tOYW1lLFxuICAgICAgcGFyYW1ldGVyR3JvdXAsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcblxuICAgIHRoaXMucGdzdGFjVmVyc2lvbiA9IHByb3BzLnBnc3RhY1ZlcnNpb24gfHwgREVGQVVMVF9QR1NUQUNfVkVSU0lPTjtcblxuICAgIGNvbnN0IHsgY29kZTogdXNlckNvZGUsIC4uLm90aGVyTGFtYmRhT3B0aW9ucyB9ID1cbiAgICAgIHByb3BzLmJvb3RzdHJhcHBlckxhbWJkYUZ1bmN0aW9uT3B0aW9ucyB8fCB7fTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgYXdzX2xhbWJkYS5GdW5jdGlvbih0aGlzLCBcImxhbWJkYVwiLCB7XG4gICAgICAvLyBkZWZhdWx0c1xuICAgICAgcnVudGltZTogYXdzX2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyLFxuICAgICAgaGFuZGxlcjogXCJoYW5kbGVyLmhhbmRsZXJcIixcbiAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgIGxvZ1JldGVudGlvbjogYXdzX2xvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICBjb2RlOiByZXNvbHZlTGFtYmRhQ29kZSh1c2VyQ29kZSwgX19kaXJuYW1lLCB7XG4gICAgICAgIGZpbGU6IFwiYm9vdHN0cmFwcGVyX3J1bnRpbWUvRG9ja2VyZmlsZVwiLFxuICAgICAgICBidWlsZEFyZ3M6IHtcbiAgICAgICAgICBQWVRIT05fVkVSU0lPTjogXCIzLjEyXCIsXG4gICAgICAgICAgUEdTVEFDX1ZFUlNJT046IHRoaXMucGdzdGFjVmVyc2lvbixcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgdnBjOiBoYXNWcGModGhpcy5kYikgPyB0aGlzLmRiLnZwYyA6IHByb3BzLnZwYyxcbiAgICAgIGFsbG93UHVibGljU3VibmV0OiB0cnVlLFxuICAgICAgLy8gb3ZlcndyaXRlcyBkZWZhdWx0cyB3aXRoIHVzZXItcHJvdmlkZWQgY29uZmlndXJhYmxlIHByb3BlcnRpZXMsXG4gICAgICAuLi5vdGhlckxhbWJkYU9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBnc3RhY1NlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgXCJib290c3RyYXBwZXJzZWNyZXRcIiwge1xuICAgICAgc2VjcmV0TmFtZTogW1xuICAgICAgICBwcm9wcy5zZWNyZXRzUHJlZml4IHx8IFwicGdzdGFjXCIsXG4gICAgICAgIGlkLFxuICAgICAgICB0aGlzLm5vZGUuYWRkci5zbGljZSgtOCksXG4gICAgICBdLmpvaW4oXCIvXCIpLFxuICAgICAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IHtcbiAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBkYm5hbWU6IHByb3BzLnBnc3RhY0RiTmFtZSB8fCBcInBnc3RhY1wiLFxuICAgICAgICAgIGVuZ2luZTogXCJwb3N0Z3Jlc1wiLFxuICAgICAgICAgIHBvcnQ6IDU0MzIsXG4gICAgICAgICAgaG9zdDogdGhpcy5kYi5pbnN0YW5jZUVuZHBvaW50Lmhvc3RuYW1lLFxuICAgICAgICAgIHVzZXJuYW1lOiBwcm9wcy5wZ3N0YWNVc2VybmFtZSB8fCBcInBnc3RhY191c2VyXCIsXG4gICAgICAgIH0pLFxuICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogXCJwYXNzd29yZFwiLFxuICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IGBQZ1NUQUMgZGF0YWJhc2UgYm9vdHN0cmFwcGVkIGJ5ICR7XG4gICAgICAgIFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZVxuICAgICAgfWAsXG4gICAgfSk7XG5cbiAgICAvLyBBbGxvdyBsYW1iZGEgdG8uLi5cbiAgICAvLyByZWFkIG5ldyB1c2VyIHNlY3JldFxuICAgIHRoaXMucGdzdGFjU2VjcmV0LmdyYW50UmVhZChoYW5kbGVyKTtcbiAgICAvLyByZWFkIGRhdGFiYXNlIHNlY3JldFxuICAgIHRoaXMuZGIuc2VjcmV0IS5ncmFudFJlYWQoaGFuZGxlcik7XG4gICAgLy8gY29ubmVjdCB0byBkYXRhYmFzZVxuICAgIHRoaXMuZGIuY29ubmVjdGlvbnMuYWxsb3dGcm9tKGhhbmRsZXIsIGVjMi5Qb3J0LnRjcCg1NDMyKSk7XG5cbiAgICBsZXQgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID1cbiAgICAgIHByb3BzLmN1c3RvbVJlc291cmNlUHJvcGVydGllc1xuICAgICAgICA/IHsgLi4uZGVmYXVsdFBnU1RBQ0N1c3RvbU9wdGlvbnMsIC4uLnByb3BzLmN1c3RvbVJlc291cmNlUHJvcGVydGllcyB9XG4gICAgICAgIDogZGVmYXVsdFBnU1RBQ0N1c3RvbU9wdGlvbnM7XG5cbiAgICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICAgIGN1c3RvbVJlc291cmNlUHJvcGVydGllc1tcImNvbm5fc2VjcmV0X2FyblwiXSA9IHRoaXMuZGIuc2VjcmV0IS5zZWNyZXRBcm47XG4gICAgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzW1wibmV3X3VzZXJfc2VjcmV0X2FyblwiXSA9XG4gICAgICB0aGlzLnBnc3RhY1NlY3JldC5zZWNyZXRBcm47XG5cbiAgICAvLyBpZiBwcm9wcy5sYW1iZGFGdW5jdGlvbk9wdGlvbnMgZG9lc24ndCBoYXZlICdjb2RlJyBkZWZpbmVkLCB1cGRhdGUgcGdzdGFjX3ZlcnNpb24gKG5lZWRlZCBmb3IgZGVmYXVsdCBydW50aW1lKVxuICAgIGlmICghdXNlckNvZGUpIHtcbiAgICAgIGN1c3RvbVJlc291cmNlUHJvcGVydGllc1tcInBnc3RhY192ZXJzaW9uXCJdID0gdGhpcy5wZ3N0YWNWZXJzaW9uO1xuICAgIH1cblxuICAgIC8vIGFkZCB0aW1lc3RhbXAgdG8gcHJvcGVydGllcyB0byBlbnN1cmUgdGhlIExhbWJkYSBnZXRzIHJlLWV4ZWN1dGVkIG9uIGVhY2ggZGVwbG95XG4gICAgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzW1widGltZXN0YW1wXCJdID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgY29uc3QgYm9vdHN0cmFwcGVyID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiYm9vdHN0cmFwcGVyXCIsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogaGFuZGxlci5mdW5jdGlvbkFybixcbiAgICAgIHByb3BlcnRpZXM6IGN1c3RvbVJlc291cmNlUHJvcGVydGllcyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLCAvLyBUaGlzIHJldGFpbnMgdGhlIGN1c3RvbSByZXNvdXJjZSAod2hpY2ggZG9lc24ndCByZWFsbHkgZXhpc3QpLCBub3QgdGhlIGRhdGFiYXNlXG4gICAgfSk7XG5cbiAgICAvLyBQZ0JvdW5jZXI6IGNvbm5lY3Rpb24gcG9vbGVyY3VzdG9tcmVzb3VyY2UgdHJpZ2dlciBvbiByZWRlcGxveVxuICAgIGNvbnN0IGRlZmF1bHRQZ2JvdW5jZXJJbnN0YW5jZVByb3BzOiBQYXJ0aWFsPGVjMi5JbnN0YW5jZVByb3BzPiA9IHtcbiAgICAgIGluc3RhbmNlTmFtZTogYCR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfS1wZ2JvdW5jZXJgLFxuICAgICAgaW5zdGFuY2VUeXBlOiBlYzIuSW5zdGFuY2VUeXBlLm9mKFxuICAgICAgICBlYzIuSW5zdGFuY2VDbGFzcy5UMyxcbiAgICAgICAgZWMyLkluc3RhbmNlU2l6ZS5NSUNST1xuICAgICAgKSxcbiAgICB9O1xuICAgIGNvbnN0IGFkZFBnYm91bmNlciA9IHByb3BzLmFkZFBnYm91bmNlciA/PyB0cnVlO1xuICAgIGlmIChhZGRQZ2JvdW5jZXIpIHtcbiAgICAgIHRoaXMuX3BnQm91bmNlclNlcnZlciA9IG5ldyBQZ0JvdW5jZXIodGhpcywgXCJwZ2JvdW5jZXJcIiwge1xuICAgICAgICBpbnN0YW5jZVByb3BzOiB7XG4gICAgICAgICAgLi4uZGVmYXVsdFBnYm91bmNlckluc3RhbmNlUHJvcHMsXG4gICAgICAgICAgLi4ucHJvcHMucGdib3VuY2VySW5zdGFuY2VQcm9wcyxcbiAgICAgICAgfSxcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIGRhdGFiYXNlOiB7XG4gICAgICAgICAgY29ubmVjdGlvbnM6IHRoaXMuZGIuY29ubmVjdGlvbnMsXG4gICAgICAgICAgc2VjcmV0OiB0aGlzLnBnc3RhY1NlY3JldCxcbiAgICAgICAgfSxcbiAgICAgICAgZGJNYXhDb25uZWN0aW9uczogcGFyc2VJbnQoZGVmYXVsdFBhcmFtZXRlcnMubWF4Q29ubmVjdGlvbnMpLFxuICAgICAgICB1c2VQdWJsaWNTdWJuZXQ6XG4gICAgICAgICAgIXByb3BzLnZwY1N1Ym5ldHMgfHxcbiAgICAgICAgICBwcm9wcy52cGNTdWJuZXRzLnN1Ym5ldFR5cGUgPT09IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyxcbiAgICAgICAgcGdCb3VuY2VyQ29uZmlnOiB7XG4gICAgICAgICAgcG9vbE1vZGU6IFwidHJhbnNhY3Rpb25cIixcbiAgICAgICAgICBtYXhDbGllbnRDb25uOiAxMDAwLFxuICAgICAgICAgIGRlZmF1bHRQb29sU2l6ZTogMjAsXG4gICAgICAgICAgbWluUG9vbFNpemU6IDEwLFxuICAgICAgICAgIHJlc2VydmVQb29sU2l6ZTogNSxcbiAgICAgICAgICByZXNlcnZlUG9vbFRpbWVvdXQ6IDUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fcGdCb3VuY2VyU2VydmVyLm5vZGUuYWRkRGVwZW5kZW5jeShib290c3RyYXBwZXIpO1xuXG4gICAgICB0aGlzLnBnc3RhY1NlY3JldCA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5wZ2JvdW5jZXJTZWNyZXQ7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25UYXJnZXQgPSB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIuaW5zdGFuY2U7XG4gICAgICB0aGlzLnNlY3VyaXR5R3JvdXAgPSB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIuc2VjdXJpdHlHcm91cDtcbiAgICAgIHRoaXMuc2VjcmV0Qm9vdHN0cmFwcGVyID0gdGhpcy5fcGdCb3VuY2VyU2VydmVyLnNlY3JldFVwZGF0ZUNvbXBsZXRlO1xuICAgICAgdGhpcy5wZ2JvdW5jZXJIZWFsdGhDaGVjayA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5oZWFsdGhDaGVjaztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25uZWN0aW9uVGFyZ2V0ID0gdGhpcy5kYjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFyYW1ldGVycyhcbiAgICBpbnN0YW5jZVR5cGU6IHN0cmluZyxcbiAgICBwYXJhbWV0ZXJzOiBQZ1N0YWNEYXRhYmFzZVByb3BzW1wicGFyYW1ldGVyc1wiXVxuICApOiBEYXRhYmFzZVBhcmFtZXRlcnMge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNsaS9pc3N1ZXMvMTI3OSNpc3N1ZWNvbW1lbnQtOTA5MzE4MjM2XG4gICAgY29uc3QgbWVtb3J5X2luX2tiID0gaW5zdGFuY2VTaXplc1tpbnN0YW5jZVR5cGVdICogMTAyNDtcblxuICAgIC8vIEl0J3Mgb25seSBuZWNlc3NhcnkgdG8gY29uc2lkZXIgcGFzc2VkIGluIHBhcmFtZXRlcnMgZm9yIGFueSB2YWx1ZSB0aGF0IHVzZWQgdG9cbiAgICAvLyBkZXJpdmUgc3Vic2VxdWVudCB2YWx1ZXMuIFZhbHVlcyB0aGF0IGRvbid0IGhhdmUgZGVwZW5kZW5jaWVzIHdpbGwgYmUgb3ZlcnJpZGVuXG4gICAgLy8gd2hlbiB3ZSB1bnBhY2sgdGhlIHBhc3NlZC1pbiB1c2VyIHBhcmFtZXRlcnNcbiAgICBjb25zdCBtYXhDb25uZWN0aW9ucyA9IHBhcmFtZXRlcnM/Lm1heENvbm5lY3Rpb25zXG4gICAgICA/IE51bWJlci5wYXJzZUludChwYXJhbWV0ZXJzLm1heENvbm5lY3Rpb25zKVxuICAgICAgOiAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9MaW1pdHMuaHRtbCNSRFNfTGltaXRzLk1heENvbm5lY3Rpb25zXG4gICAgICAgIE1hdGgubWluKE1hdGgucm91bmQoKG1lbW9yeV9pbl9rYiAqIDEwMjQpIC8gOTUzMTM5MiksIDUwMDApO1xuICAgIGNvbnN0IHNoYXJlZEJ1ZmZlcnMgPSBwYXJhbWV0ZXJzPy5zaGFyZWRCdWZlcnNcbiAgICAgID8gTnVtYmVyLnBhcnNlSW50KHBhcmFtZXRlcnMuc2hhcmVkQnVmZXJzKVxuICAgICAgOiBNYXRoLnJvdW5kKDAuMjUgKiBtZW1vcnlfaW5fa2IpO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlQ2FjaGVTaXplID0gTWF0aC5yb3VuZCgwLjc1ICogbWVtb3J5X2luX2tiKTtcbiAgICBjb25zdCB3b3JrTWVtID0gTWF0aC5mbG9vcihzaGFyZWRCdWZmZXJzIC8gbWF4Q29ubmVjdGlvbnMpO1xuICAgIGNvbnN0IG1haW50ZW5hbmNlV29ya01lbSA9IE1hdGgucm91bmQoMC4yNSAqIHNoYXJlZEJ1ZmZlcnMpO1xuXG4gICAgY29uc3QgdGVtcEJ1ZmZlcnMgPSAxMjggKiAxMDI0O1xuICAgIGNvbnN0IHNlcVBhZ2VDb3N0ID0gMTtcbiAgICBjb25zdCByYW5kb21QYWdlQ29zdCA9IDEuMTtcblxuICAgIHJldHVybiB7XG4gICAgICBtYXhDb25uZWN0aW9uczogYCR7bWF4Q29ubmVjdGlvbnN9YCxcbiAgICAgIHNoYXJlZEJ1ZmZlcnM6IGAke3NoYXJlZEJ1ZmZlcnMgLyA4fWAsIC8vIFJlcHJlc2VudGVkIGluIDhrYiBibG9ja3NcbiAgICAgIGVmZmVjdGl2ZUNhY2hlU2l6ZTogYCR7ZWZmZWN0aXZlQ2FjaGVTaXplIC8gOH1gLCAvLyBSZXByZXNlbnRlZCBpbiA4a2IgYmxvY2tzXG4gICAgICB3b3JrTWVtOiBgJHt3b3JrTWVtfWAsXG4gICAgICBtYWludGVuYW5jZVdvcmtNZW06IGAke21haW50ZW5hbmNlV29ya01lbX1gLFxuICAgICAgbWF4TG9ja3NQZXJUcmFuc2FjdGlvbjogXCIxMDI0XCIsXG4gICAgICB0ZW1wQnVmZmVyczogYCR7dGVtcEJ1ZmZlcnMgLyA4fWAsIC8vIFJlcHJlc2VudGVkIGluIDhrYiBibG9ja3NcbiAgICAgIHNlcVBhZ2VDb3N0OiBgJHtzZXFQYWdlQ29zdH1gLFxuICAgICAgcmFuZG9tUGFnZUNvc3Q6IGAke3JhbmRvbVBhZ2VDb3N0fWAsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBnU3RhY0RhdGFiYXNlUHJvcHMgZXh0ZW5kcyByZHMuRGF0YWJhc2VJbnN0YW5jZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgZGF0YWJhc2UgdGhhdCBpcyB0byBiZSBjcmVhdGVkIGFuZCBvbnRvIHdoaWNoIHBnU1RBQyB3aWxsIGJlIGluc3RhbGxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgcGdzdGFjXG4gICAqL1xuICByZWFkb25seSBwZ3N0YWNEYk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgcGdzdGFjIHRvIGluc3RhbGwgb24gdGhlIGRhdGFiYXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IDAuOC41XG4gICAqL1xuICByZWFkb25seSBwZ3N0YWNWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmVmaXggdG8gYXNzaWduIHRvIHRoZSBnZW5lcmF0ZWQgYHNlY3JldHNfbWFuYWdlci5TZWNyZXRgXG4gICAqXG4gICAqIEBkZWZhdWx0IHBnc3RhY1xuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0c1ByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB1c2VyIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIHBnU1RBQyBkYXRhYmFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgcGdzdGFjX3VzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBnc3RhY1VzZXJuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGQgcGdib3VuY2VyIGluc3RhbmNlIGZvciBtYW5hZ2luZyB0cmFmZmljIHRvIHRoZSBwZ1NUQUMgZGF0YWJhc2VcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkUGdib3VuY2VyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJvcGVydGllcyBmb3IgdGhlIHBnYm91bmNlciBlYzIgaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3RcbiAgICovXG4gIHJlYWRvbmx5IHBnYm91bmNlckluc3RhbmNlUHJvcHM/OiBlYzIuSW5zdGFuY2VQcm9wcyB8IGFueTtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9uIEN1c3RvbSBSZXNvdXJjZSBwcm9wZXJ0aWVzLiBBIGN1c3RvbSByZXNvdXJjZSBwcm9wZXJ0eSBpcyBnb2luZyB0byBiZSBjcmVhdGVkXG4gICAqIHRvIHRyaWdnZXIgdGhlIGJvb3N0cmFwcGluZyBsYW1iZGEgZnVuY3Rpb24uIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgKiBvbiB0b3Agb2YgdGhlIGRlZmF1bHRzIG9uZXMuXG4gICAqXG4gICAqL1xuICByZWFkb25seSBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsYW1iZGEgZnVuY3Rpb24gcHJvcGVydGllcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBwZXJMYW1iZGFGdW5jdGlvbk9wdGlvbnM/OiBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlUGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIExFQVNUKHtEQkluc3RhbmNlQ2xhc3NNZW1vcnkvOTUzMTM5Mn0sIDUwMDApXG4gICAqL1xuICByZWFkb25seSBtYXhDb25uZWN0aW9uczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIHZhbHVlIGlzIG1lYXN1cmVkIGluIDhLQiBibG9ja3MuXG4gICAqXG4gICAqIEBkZWZhdWx0ICd7REJJbnN0YW5jZUNsYXNzTWVtb3J5LzMyNzY4fScgMjUlIG9mIGluc3RhbmNlIG1lbW9yeSwgaWUgYHsoREJJbnN0YW5jZUNsYXNzTWVtb3J5LygxMDI0KjgpKSAqIDAuMjV9YFxuICAgKi9cbiAgcmVhZG9ubHkgc2hhcmVkQnVmZmVyczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIDc1JSBvZiBpbnN0YW5jZSBtZW1vcnlcbiAgICovXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZUNhY2hlU2l6ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIHNoYXJlZCBidWZmZXJzIGRpdmlkZWQgYnkgbWF4IGNvbm5lY3Rpb25zXG4gICAqL1xuICByZWFkb25seSB3b3JrTWVtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gMjUlIG9mIHNoYXJlZCBidWZmZXJzXG4gICAqL1xuICByZWFkb25seSBtYWludGVuYW5jZVdvcmtNZW06IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMTAyNFxuICAgKi9cbiAgcmVhZG9ubHkgbWF4TG9ja3NQZXJUcmFuc2FjdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAxMzExNzIgKDEyOCAqIDEwMjQpXG4gICAqL1xuICByZWFkb25seSB0ZW1wQnVmZmVyczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBzZXFQYWdlQ29zdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAxLjFcbiAgICovXG4gIHJlYWRvbmx5IHJhbmRvbVBhZ2VDb3N0OiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
"name": "pgbouncer-secret-updater",
|
|
3
3
|
"version": "1.0.0",
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"@aws-sdk/client-secrets-manager": "^3.0.0"
|
|
5
|
+
"@aws-sdk/client-secrets-manager": "^3.0.0",
|
|
6
|
+
"@aws-sdk/client-ssm": "^3.0.0"
|
|
6
7
|
},
|
|
7
8
|
"devDependencies": {
|
|
8
9
|
"@types/aws-lambda": "^8.10.0",
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
echo '=== PGBOUNCER HEALTH CHECK START ==='
|
|
5
|
+
echo 'Health check started at:' $(date)
|
|
6
|
+
echo ''
|
|
7
|
+
|
|
8
|
+
# Wait for cloud-init to complete before checking pgbouncer
|
|
9
|
+
echo '=== WAITING: Cloud-init completion check ==='
|
|
10
|
+
MAX_WAIT=300 # 5 minutes max wait
|
|
11
|
+
WAIT_COUNT=0
|
|
12
|
+
while [ $WAIT_COUNT -lt $MAX_WAIT ]; do
|
|
13
|
+
if command -v cloud-init >/dev/null 2>&1; then
|
|
14
|
+
CLOUD_INIT_STATUS=$(cloud-init status --format=json 2>/dev/null | grep '"status":' | sed 's/.*"status": *"\([^"]*\)".*/\1/' 2>/dev/null)
|
|
15
|
+
echo "Cloud-init status: $CLOUD_INIT_STATUS (waited ${WAIT_COUNT}s)"
|
|
16
|
+
if [ "$CLOUD_INIT_STATUS" = "done" ]; then
|
|
17
|
+
echo 'SUCCESS: Cloud-init has completed'
|
|
18
|
+
break
|
|
19
|
+
elif [ "$CLOUD_INIT_STATUS" = "error" ]; then
|
|
20
|
+
echo 'CLOUD-INIT SETUP FAILED:'
|
|
21
|
+
cloud-init status --long 2>&1 || true
|
|
22
|
+
echo ''
|
|
23
|
+
echo 'Setup script errors:'
|
|
24
|
+
tail -n 20 /var/log/cloud-init-output.log 2>&1 || echo 'Could not read setup logs'
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
else
|
|
28
|
+
echo 'Cloud-init command not available, assuming setup is complete'
|
|
29
|
+
break
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
if [ $WAIT_COUNT -eq 0 ]; then
|
|
33
|
+
echo 'Cloud-init is still running, waiting for completion...'
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
sleep 10
|
|
37
|
+
WAIT_COUNT=$((WAIT_COUNT + 10))
|
|
38
|
+
done
|
|
39
|
+
|
|
40
|
+
if [ $WAIT_COUNT -ge $MAX_WAIT ]; then
|
|
41
|
+
echo 'WARNING: Timed out waiting for cloud-init to complete after 10 minutes'
|
|
42
|
+
echo 'Current cloud-init status:'
|
|
43
|
+
cloud-init status --long || true
|
|
44
|
+
echo 'Proceeding with health check anyway...'
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
echo 'Cloud-init wait complete, now checking pgbouncer...'
|
|
48
|
+
echo ''
|
|
49
|
+
|
|
50
|
+
# Critical check: Verify pgbouncer service is active
|
|
51
|
+
echo '=== CRITICAL: PgBouncer service status ==='
|
|
52
|
+
if systemctl is-active --quiet pgbouncer; then
|
|
53
|
+
echo 'SUCCESS: PgBouncer service is active'
|
|
54
|
+
systemctl status pgbouncer --no-pager --lines=5
|
|
55
|
+
else
|
|
56
|
+
echo 'FAILURE: PgBouncer service is NOT active'
|
|
57
|
+
echo 'Service status:'
|
|
58
|
+
systemctl status pgbouncer --no-pager --lines=10 || echo 'Could not get service status'
|
|
59
|
+
echo 'Service is-active result:' $(systemctl is-active pgbouncer)
|
|
60
|
+
echo 'Service is-enabled result:' $(systemctl is-enabled pgbouncer)
|
|
61
|
+
echo 'Last 20 lines of pgbouncer systemd logs:'
|
|
62
|
+
journalctl -u pgbouncer --no-pager -n 20 || echo 'Could not get pgbouncer logs'
|
|
63
|
+
echo ''
|
|
64
|
+
echo '=== SETUP DIAGNOSTICS: Cloud-init output log ==='
|
|
65
|
+
if [ -f /var/log/cloud-init-output.log ]; then
|
|
66
|
+
echo 'Last 50 lines of cloud-init-output.log to help diagnose setup issues:'
|
|
67
|
+
tail -n 50 /var/log/cloud-init-output.log
|
|
68
|
+
else
|
|
69
|
+
echo 'Cloud-init-output.log not found'
|
|
70
|
+
fi
|
|
71
|
+
echo ''
|
|
72
|
+
echo '=== SETUP DIAGNOSTICS: Cloud-init status ==='
|
|
73
|
+
if command -v cloud-init >/dev/null 2>&1; then
|
|
74
|
+
cloud-init status --long || echo 'Could not get cloud-init status'
|
|
75
|
+
else
|
|
76
|
+
echo 'cloud-init command not available'
|
|
77
|
+
fi
|
|
78
|
+
exit 1
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Critical check: Verify pgbouncer is listening on port 5432
|
|
82
|
+
echo '=== CRITICAL: Network listening check ==='
|
|
83
|
+
if ss -tlnp | grep -q ':5432.*pgbouncer' || netstat -tlnp 2>/dev/null | grep -q ':5432.*pgbouncer'; then
|
|
84
|
+
echo 'SUCCESS: PgBouncer is listening on port 5432'
|
|
85
|
+
ss -tlnp | grep :5432 | head -3 2>/dev/null || netstat -tlnp 2>/dev/null | grep :5432 | head -3
|
|
86
|
+
else
|
|
87
|
+
echo 'FAILURE: PgBouncer is NOT listening on port 5432'
|
|
88
|
+
echo 'All processes listening on 5432:'
|
|
89
|
+
ss -tlnp | grep :5432 2>/dev/null || netstat -tlnp 2>/dev/null | grep :5432 || echo 'No processes listening on port 5432'
|
|
90
|
+
echo 'All pgbouncer processes:'
|
|
91
|
+
ps aux | grep pgbouncer | grep -v grep || echo 'No pgbouncer processes running'
|
|
92
|
+
exit 1
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
# Critical check: Test TCP connection to pgbouncer
|
|
96
|
+
echo '=== CRITICAL: Connection test ==='
|
|
97
|
+
if timeout 10 bash -c "</dev/tcp/localhost/5432"; then
|
|
98
|
+
echo 'SUCCESS: TCP connection to localhost:5432 successful'
|
|
99
|
+
else
|
|
100
|
+
echo 'FAILURE: TCP connection to localhost:5432 failed'
|
|
101
|
+
echo 'Connection test failed - pgbouncer may not be responding'
|
|
102
|
+
exit 1
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
# Detailed diagnostics (only if basic checks pass)
|
|
106
|
+
echo '=== DIAGNOSTICS: Additional information ==='
|
|
107
|
+
echo 'System uptime:' $(uptime)
|
|
108
|
+
|
|
109
|
+
# Check pgbouncer configuration
|
|
110
|
+
if [ -f /etc/pgbouncer/pgbouncer.ini ]; then
|
|
111
|
+
echo 'PgBouncer config exists:'
|
|
112
|
+
ls -la /etc/pgbouncer/pgbouncer.ini
|
|
113
|
+
echo 'Key config settings:'
|
|
114
|
+
grep -E '^(listen_|pool_mode|max_|default_pool_size)' /etc/pgbouncer/pgbouncer.ini | head -10
|
|
115
|
+
else
|
|
116
|
+
echo 'WARNING: PgBouncer config not found'
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
# Check pgbouncer logs for recent activity
|
|
120
|
+
if [ -f /var/log/pgbouncer/pgbouncer.log ]; then
|
|
121
|
+
echo 'Recent pgbouncer log entries (last 10 lines):'
|
|
122
|
+
tail -n 10 /var/log/pgbouncer/pgbouncer.log
|
|
123
|
+
else
|
|
124
|
+
echo 'PgBouncer log not found'
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
# Check if setup is still running (should be done by now)
|
|
128
|
+
if pgrep -af cloud-init > /dev/null || pgrep -af 'pgbouncer.*setup' > /dev/null; then
|
|
129
|
+
echo 'WARNING: Setup processes still running - this may indicate setup incomplete'
|
|
130
|
+
ps aux | grep -E '(cloud-init|setup)' | grep -v grep || true
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
echo '=== SUCCESS: All critical checks passed ==='
|
|
134
|
+
echo 'PgBouncer is running and accessible on port 5432'
|
|
135
|
+
echo 'Health check completed at:' $(date)
|