construct-hub 0.4.449 → 0.4.451
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 +2 -2
- package/lib/construct-hub.js +1 -1
- package/lib/package-sources/code-artifact.js +1 -1
- package/lib/package-sources/npmjs/couch-changes.lambda-shared.d.ts +6 -0
- package/lib/package-sources/npmjs/couch-changes.lambda-shared.js +46 -11
- package/lib/package-sources/npmjs/npm-js-follower.lambda.bundle/index.js +43 -12
- package/lib/package-sources/npmjs/npm-js-follower.lambda.bundle/index.js.map +3 -3
- package/lib/package-sources/npmjs/npm-js-follower.lambda.js +3 -3
- package/lib/package-sources/npmjs.js +1 -1
- package/lib/package-tag/index.js +3 -3
- package/lib/package-tag-group/index.js +2 -2
- package/lib/preload-file/index.js +1 -1
- package/lib/s3/storage.js +1 -1
- package/lib/spdx-license.js +1 -1
- package/package.json +1 -1
- package/website/asset-manifest.json +33 -33
- package/website/index.html +1 -1
- package/website/static/js/323.87521e0e.chunk.js +2 -0
- package/website/static/js/{323.80d18b4c.chunk.js.map → 323.87521e0e.chunk.js.map} +1 -1
- package/website/static/js/332.febb776f.chunk.js +2 -0
- package/website/static/js/{332.9e0695b5.chunk.js.map → 332.febb776f.chunk.js.map} +1 -1
- package/website/static/js/375.bb76680a.chunk.js +2 -0
- package/website/static/js/{375.30524f64.chunk.js.map → 375.bb76680a.chunk.js.map} +1 -1
- package/website/static/js/421.e7beb2f8.chunk.js +2 -0
- package/website/static/js/{421.ec09e678.chunk.js.map → 421.e7beb2f8.chunk.js.map} +1 -1
- package/website/static/js/451.ab06f604.chunk.js +2 -0
- package/website/static/js/451.ab06f604.chunk.js.map +1 -0
- package/website/static/js/453.13ac0f49.chunk.js +2 -0
- package/website/static/js/{453.098e6dff.chunk.js.map → 453.13ac0f49.chunk.js.map} +1 -1
- package/website/static/js/496.78f7d987.chunk.js +2 -0
- package/website/static/js/496.78f7d987.chunk.js.map +1 -0
- package/website/static/js/516.295cb8e5.chunk.js +2 -0
- package/website/static/js/516.295cb8e5.chunk.js.map +1 -0
- package/website/static/js/591.dd3f55c2.chunk.js +2 -0
- package/website/static/js/{591.cb922910.chunk.js.map → 591.dd3f55c2.chunk.js.map} +1 -1
- package/website/static/js/619.03a83bdc.chunk.js +2 -0
- package/website/static/js/{619.70bb2d55.chunk.js.map → 619.03a83bdc.chunk.js.map} +1 -1
- package/website/static/js/685.03f9f432.chunk.js +3 -0
- package/website/static/js/685.03f9f432.chunk.js.map +1 -0
- package/website/static/js/773.57c57e6c.chunk.js +2 -0
- package/website/static/js/{773.ea0e9610.chunk.js.map → 773.57c57e6c.chunk.js.map} +1 -1
- package/website/static/js/8.75aab01d.chunk.js +3 -0
- package/website/static/js/{8.94165f2d.chunk.js.map → 8.75aab01d.chunk.js.map} +1 -1
- package/website/static/js/857.cad611f6.chunk.js +2 -0
- package/website/static/js/{857.3540b295.chunk.js.map → 857.cad611f6.chunk.js.map} +1 -1
- package/website/static/js/959.e074e3f9.chunk.js +2 -0
- package/website/static/js/{959.cd9d51a2.chunk.js.map → 959.e074e3f9.chunk.js.map} +1 -1
- package/website/static/js/main.c0358172.js +3 -0
- package/website/static/js/main.c0358172.js.map +1 -0
- package/website/static/js/323.80d18b4c.chunk.js +0 -2
- package/website/static/js/332.9e0695b5.chunk.js +0 -2
- package/website/static/js/375.30524f64.chunk.js +0 -2
- package/website/static/js/421.ec09e678.chunk.js +0 -2
- package/website/static/js/451.7c2110db.chunk.js +0 -2
- package/website/static/js/451.7c2110db.chunk.js.map +0 -1
- package/website/static/js/453.098e6dff.chunk.js +0 -2
- package/website/static/js/496.92802c31.chunk.js +0 -2
- package/website/static/js/496.92802c31.chunk.js.map +0 -1
- package/website/static/js/516.34bdea00.chunk.js +0 -2
- package/website/static/js/516.34bdea00.chunk.js.map +0 -1
- package/website/static/js/591.cb922910.chunk.js +0 -2
- package/website/static/js/619.70bb2d55.chunk.js +0 -2
- package/website/static/js/685.58592b70.chunk.js +0 -3
- package/website/static/js/685.58592b70.chunk.js.map +0 -1
- package/website/static/js/773.ea0e9610.chunk.js +0 -2
- package/website/static/js/8.94165f2d.chunk.js +0 -3
- package/website/static/js/857.3540b295.chunk.js +0 -2
- package/website/static/js/959.cd9d51a2.chunk.js +0 -2
- package/website/static/js/main.80cba683.js +0 -3
- package/website/static/js/main.80cba683.js.map +0 -1
- /package/website/static/js/{685.58592b70.chunk.js.LICENSE.txt → 685.03f9f432.chunk.js.LICENSE.txt} +0 -0
- /package/website/static/js/{8.94165f2d.chunk.js.LICENSE.txt → 8.75aab01d.chunk.js.LICENSE.txt} +0 -0
- /package/website/static/js/{main.80cba683.js.LICENSE.txt → main.c0358172.js.LICENSE.txt} +0 -0
package/.jsii
CHANGED
|
@@ -21425,6 +21425,6 @@
|
|
|
21425
21425
|
"symbolId": "src/package-sources/npmjs:NpmJsProps"
|
|
21426
21426
|
}
|
|
21427
21427
|
},
|
|
21428
|
-
"version": "0.4.
|
|
21429
|
-
"fingerprint": "
|
|
21428
|
+
"version": "0.4.451",
|
|
21429
|
+
"fingerprint": "5J71fe+EqhtFNakbqh6GFyO7M83wpHsWehFfFbdrVcc="
|
|
21430
21430
|
}
|
package/lib/construct-hub.js
CHANGED
|
@@ -412,7 +412,7 @@ class ConstructHub extends constructs_1.Construct {
|
|
|
412
412
|
}
|
|
413
413
|
exports.ConstructHub = ConstructHub;
|
|
414
414
|
_a = JSII_RTTI_SYMBOL_1;
|
|
415
|
-
ConstructHub[_a] = { fqn: "construct-hub.ConstructHub", version: "0.4.
|
|
415
|
+
ConstructHub[_a] = { fqn: "construct-hub.ConstructHub", version: "0.4.451" };
|
|
416
416
|
/**
|
|
417
417
|
* How possibly risky operations (such as doc-generation, which requires
|
|
418
418
|
* installing the indexed packages in order to trans-literate sample code) are
|
|
@@ -272,5 +272,5 @@ class CodeArtifact {
|
|
|
272
272
|
}
|
|
273
273
|
exports.CodeArtifact = CodeArtifact;
|
|
274
274
|
_a = JSII_RTTI_SYMBOL_1;
|
|
275
|
-
CodeArtifact[_a] = { fqn: "construct-hub.sources.CodeArtifact", version: "0.4.
|
|
275
|
+
CodeArtifact[_a] = { fqn: "construct-hub.sources.CodeArtifact", version: "0.4.451" };
|
|
276
276
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1hcnRpZmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlLXNvdXJjZXMvY29kZS1hcnRpZmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE4RDtBQUM5RCwrREFPb0M7QUFFcEMsdURBQThDO0FBQzlDLHVFQUFnRTtBQUNoRSxpREFBOEQ7QUFDOUQsdURBQWlEO0FBQ2pELCtDQUFnRTtBQUNoRSxpREFBNkQ7QUFFN0QsNENBS3NCO0FBQ3RCLGtEQUE2QztBQU03QyxvRkFBK0U7QUFDL0Usb0ZBTWdEO0FBQ2hELDJDQUFpRDtBQWNqRDs7O0dBR0c7QUFDSCxNQUFhLFlBQVk7SUFDdkIsWUFBb0MsS0FBd0I7UUFBeEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7SUFBRyxDQUFDO0lBRXpELElBQUksQ0FDVCxLQUFnQixFQUNoQixFQUNFLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsS0FBSyxHQUNvQjtRQUUzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pELE1BQU0sWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUxSSxNQUFNLGNBQWMsR0FBRywwQkFBZ0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ2pCLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsUUFBUSxnQkFBZ0IsRUFBRTtnQkFDM0QsaUJBQWlCLEVBQUUsMEJBQWlCLENB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LEdBQUc7WUFDeEIsR0FBRyxJQUFJO1lBQ1AsYUFBYSxFQUFFO2dCQUNiLENBQUMsZ0RBQXNCLENBQUMsRUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsZUFBZSxJQUFJLGlCQUFHLENBQUMsVUFBVTtnQkFDekQsQ0FBQywrQ0FBcUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWM7Z0JBQzdELENBQUMsbURBQXlCLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRO2FBQzVEO1lBQ0QsVUFBVSwrQ0FBMEI7WUFDcEMsU0FBUyxFQUFFLDJDQUFpQjtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSx5QkFBeUIsQ0FBQyxJQUFvQjtRQUNuRCxPQUFPLElBQUksdUJBQU0sQ0FBQztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzNCLFNBQVMsRUFBRSwwQkFBUyxDQUFDLEdBQUc7WUFDeEIsR0FBRyxJQUFJO1lBQ1AsYUFBYSxFQUFFO2dCQUNiLENBQUMsZ0RBQXNCLENBQUMsRUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsZUFBZSxJQUFJLGlCQUFHLENBQUMsVUFBVTtnQkFDekQsQ0FBQywrQ0FBcUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWM7Z0JBQzdELENBQUMsbURBQXlCLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRO2FBQzVEO1lBQ0QsVUFBVSwrREFBbUM7WUFDN0MsU0FBUyxFQUFFLDJDQUFpQjtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDOztBQWxUSCxvQ0FtVEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcm5Gb3JtYXQsIEF3cywgRHVyYXRpb24sIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICBHcmFwaFdpZGdldCxcbiAgTWV0cmljLFxuICBNZXRyaWNPcHRpb25zLFxuICBTdGF0aXN0aWMsXG4gIFRyZWF0TWlzc2luZ0RhdGEsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IENmblJlcG9zaXRvcnkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWFydGlmYWN0JztcbmltcG9ydCB7IFJ1bGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBUcmFjaW5nIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBCbG9ja1B1YmxpY0FjY2VzcywgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBRdWV1ZSwgUXVldWVFbmNyeXB0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNxcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7XG4gIGNvZGVBcnRpZmFjdFJlcG9zaXRvcnlVcmwsXG4gIGxhbWJkYUZ1bmN0aW9uVXJsLFxuICBsYW1iZGFTZWFyY2hMb2dHcm91cFVybCxcbiAgc3FzUXVldWVVcmwsXG59IGZyb20gJy4uL2RlZXAtbGluayc7XG5pbXBvcnQgeyBmaWxsTWV0cmljIH0gZnJvbSAnLi4vbWV0cmljLXV0aWxzJztcbmltcG9ydCB0eXBlIHtcbiAgSVBhY2thZ2VTb3VyY2UsXG4gIFBhY2thZ2VTb3VyY2VCaW5kT3B0aW9ucyxcbiAgUGFja2FnZVNvdXJjZUJpbmRSZXN1bHQsXG59IGZyb20gJy4uL3BhY2thZ2Utc291cmNlJztcbmltcG9ydCB7IENvZGVBcnRpZmFjdEZvcndhcmRlciB9IGZyb20gJy4vY29kZWFydGlmYWN0L2NvZGUtYXJ0aWZhY3QtZm9yd2FyZGVyJztcbmltcG9ydCB7XG4gIE1FVFJJQ1NfTkFNRVNQQUNFLFxuICBNZXRyaWNOYW1lLFxuICBET01BSU5fTkFNRV9ESU1FTlNJT04sXG4gIERPTUFJTl9PV05FUl9ESU1FTlNJT04sXG4gIFJFUE9TSVRPUllfTkFNRV9ESU1FTlNJT04sXG59IGZyb20gJy4vY29kZWFydGlmYWN0L2NvbnN0YW50cy5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IFMzU3RvcmFnZUZhY3RvcnkgfSBmcm9tICcuLi9zMy9zdG9yYWdlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQXJ0aWZhY3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ29kZUFydGlmYWN0IHJlcG9zaXRvcnkgd2hlcmUgcGFja2FnZXMgYXJlIG9idGFpbmVkIGZyb20uXG4gICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5OiBDZm5SZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IHdoZXJlIHBhY2thZ2VzIHdpbGwgYmUgc3RhZ2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0PzogSUJ1Y2tldDtcbn1cblxuLyoqXG4gKiBBIHBhY2thZ2Ugc291cmNlIHRoYXQgb2J0YWlucyBwYWNrYWdlIGRhdGEgZnJvbSBhbiBucG0gQ29kZUFydGlmYWN0XG4gKiByZXBvc2l0b3J5LlxuICovXG5leHBvcnQgY2xhc3MgQ29kZUFydGlmYWN0IGltcGxlbWVudHMgSVBhY2thZ2VTb3VyY2Uge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogQ29kZUFydGlmYWN0UHJvcHMpIHt9XG5cbiAgcHVibGljIGJpbmQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICB7XG4gICAgICBkZW55TGlzdCxcbiAgICAgIGluZ2VzdGlvbixcbiAgICAgIGxpY2Vuc2VMaXN0LFxuICAgICAgbW9uaXRvcmluZyxcbiAgICAgIG92ZXJ2aWV3RGFzaGJvYXJkLFxuICAgICAgcXVldWUsXG4gICAgfTogUGFja2FnZVNvdXJjZUJpbmRPcHRpb25zXG4gICk6IFBhY2thZ2VTb3VyY2VCaW5kUmVzdWx0IHtcbiAgICBjb25zdCBpZFByZWZpeCA9IHRoaXMucHJvcHMucmVwb3NpdG9yeS5ub2RlLnBhdGg7XG4gICAgY29uc3QgcmVwb3NpdG9yeUlkID0gYCR7dGhpcy5wcm9wcy5yZXBvc2l0b3J5LmF0dHJEb21haW5Pd25lcn06JHt0aGlzLnByb3BzLnJlcG9zaXRvcnkuYXR0ckRvbWFpbk5hbWV9LyR7dGhpcy5wcm9wcy5yZXBvc2l0b3J5LmF0dHJOYW1lfWA7XG5cbiAgICBjb25zdCBzdG9yYWdlRmFjdG9yeSA9IFMzU3RvcmFnZUZhY3RvcnkuZ2V0T3JDcmVhdGUoc2NvcGUpO1xuICAgIGNvbnN0IGJ1Y2tldCA9XG4gICAgICB0aGlzLnByb3BzLmJ1Y2tldCB8fFxuICAgICAgc3RvcmFnZUZhY3RvcnkubmV3QnVja2V0KHNjb3BlLCBgJHtpZFByZWZpeH0vU3RhZ2luZ0J1Y2tldGAsIHtcbiAgICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgICAgbGlmZWN5Y2xlUnVsZXM6IFt7IGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApIH1dLFxuICAgICAgfSk7XG4gICAgYnVja2V0LmdyYW50UmVhZChpbmdlc3Rpb24pO1xuXG4gICAgY29uc3QgZGxxID0gbmV3IFF1ZXVlKHNjb3BlLCBgJHtpZFByZWZpeH0vRExRYCwge1xuICAgICAgZW5jcnlwdGlvbjogUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VELFxuICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDE0KSxcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvcndhcmRlciA9IG5ldyBDb2RlQXJ0aWZhY3RGb3J3YXJkZXIoXG4gICAgICBzY29wZSxcbiAgICAgIGAke2lkUHJlZml4fS9Gb3J3YXJkZXJgLFxuICAgICAge1xuICAgICAgICBkZWFkTGV0dGVyUXVldWU6IGRscSxcbiAgICAgICAgZGVzY3JpcHRpb246IGBbJHtzY29wZS5ub2RlLnBhdGh9L0NvZGVBcnRpZmFjdC8ke3JlcG9zaXRvcnlJZH1dIEhhbmRsZSBDb2RlQXJ0aWZhY3QgRXZlbnRCcmlkZ2UgZXZlbnRzYCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBBV1NfRU1GX0VOVklST05NRU5UOiAnTG9jYWwnLFxuICAgICAgICAgIEJVQ0tFVF9OQU1FOiBidWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICBRVUVVRV9VUkw6IHF1ZXVlLnF1ZXVlVXJsLFxuICAgICAgICB9LFxuICAgICAgICBtZW1vcnlTaXplOiAxMDI0LFxuICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgICAgdHJhY2luZzogVHJhY2luZy5BQ1RJVkUsXG4gICAgICB9XG4gICAgKTtcbiAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUoZm9yd2FyZGVyKTtcbiAgICBkZW55TGlzdD8uZ3JhbnRSZWFkKGZvcndhcmRlcik7XG4gICAgbGljZW5zZUxpc3QuZ3JhbnRSZWFkKGZvcndhcmRlcik7XG4gICAgcXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMoZm9yd2FyZGVyKTtcbiAgICBmb3J3YXJkZXIuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ2NvZGVhcnRpZmFjdDpHZXRQYWNrYWdlVmVyc2lvbkFzc2V0J10sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIFN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgc2VydmljZTogJ2NvZGVhcnRpZmFjdCcsXG4gICAgICAgICAgICByZXNvdXJjZTogJ3BhY2thZ2UnLFxuICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogW1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlcG9zaXRvcnkuYXR0ckRvbWFpbk5hbWUsXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMucmVwb3NpdG9yeS5hdHRyTmFtZSxcbiAgICAgICAgICAgICAgJ25wbScsIC8vIHBhY2thZ2UgZm9ybWF0XG4gICAgICAgICAgICAgICcqJywgLy8gbmFtZXNwYWNlL3BhY2thZ2UtbmFtZVxuICAgICAgICAgICAgXS5qb2luKCcvJyksXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUoc2NvcGUsIGAke2lkUHJlZml4fS9FdmVudEJyaWRnZWAsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBgJHtzY29wZS5ub2RlLnBhdGh9L0NvZGVBcnRpZmFjdC8ke3JlcG9zaXRvcnlJZH0vRXZlbnRCcmlkZ2VgLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MuY29kZWFydGlmYWN0J10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnQ29kZUFydGlmYWN0IFBhY2thZ2UgVmVyc2lvbiBTdGF0ZSBDaGFuZ2UnXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgZG9tYWluT3duZXI6IFt0aGlzLnByb3BzLnJlcG9zaXRvcnkuYXR0ckRvbWFpbk93bmVyXSxcbiAgICAgICAgICBkb21haW5OYW1lOiBbdGhpcy5wcm9wcy5yZXBvc2l0b3J5LmF0dHJEb21haW5OYW1lXSxcbiAgICAgICAgICByZXBvc2l0b3J5TmFtZTogW3RoaXMucHJvcHMucmVwb3NpdG9yeS5hdHRyTmFtZV0sXG4gICAgICAgICAgcGFja2FnZUZvcm1hdDogWyducG0nXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbbmV3IExhbWJkYUZ1bmN0aW9uKGZvcndhcmRlcildLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZmFpbHVyZUFsYXJtID0gZm9yd2FyZGVyXG4gICAgICAubWV0cmljRXJyb3JzKClcbiAgICAgIC5jcmVhdGVBbGFybShzY29wZSwgYCR7aWRQcmVmaXh9L0ZvcndhcmRlci9GYWlsdXJlc2AsIHtcbiAgICAgICAgYWxhcm1OYW1lOiBgJHtzY29wZS5ub2RlLnBhdGh9L0NvZGVBcnRpZmFjdC8ke3JlcG9zaXRvcnlJZH0vRm9yd2FyZGVyYCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgIGBUaGUgQ29kZUFydGlmYWN0IGZvd2FyZGVyIGZvciAke3JlcG9zaXRvcnlJZH0gaXMgZmFpbGluZ2AsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYExpbmsgdG8gdGhlIGxhbWJkYSBmdW5jdGlvbjogJHtsYW1iZGFGdW5jdGlvblVybChmb3J3YXJkZXIpfWAsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDMsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5NSVNTSU5HLFxuICAgICAgfSk7XG4gICAgbW9uaXRvcmluZy5hZGRIaWdoU2V2ZXJpdHlBbGFybShcbiAgICAgIGBDb2RlQXJ0aWZhY3Q6JHt0aGlzLnByb3BzLnJlcG9zaXRvcnkuYXR0ck5hbWV9IEZhaWx1cmVzYCxcbiAgICAgIGZhaWx1cmVBbGFybVxuICAgICk7XG5cbiAgICBjb25zdCBkbHFOb3RFbXB0eUFsYXJtID0gZGxxXG4gICAgICAubWV0cmljQXBwcm94aW1hdGVOdW1iZXJPZk1lc3NhZ2VzVmlzaWJsZSh7XG4gICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIH0pXG4gICAgICAuY3JlYXRlQWxhcm0oc2NvcGUsIGAke2lkUHJlZml4fS9Gb3J3YXJkZXIvRExRTm90RW1wdHlgLCB7XG4gICAgICAgIGFsYXJtTmFtZTogYCR7c2NvcGUubm9kZS5wYXRofS9Db2RlQXJ0aWZhY3QvJHtyZXBvc2l0b3J5SWR9L0RMUU5vdEVtcHR5YCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgIGBUaGUgQ29kZUFydGlmYWN0IGZvd2FyZGVyIGZvciAke3JlcG9zaXRvcnlJZH0gaXMgZmFpbGluZ2AsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYExpbmsgdG8gdGhlIGxhbWJkYSBmdW5jdGlvbjogJHtsYW1iZGFGdW5jdGlvblVybChmb3J3YXJkZXIpfWAsXG4gICAgICAgICAgYExpbmsgdG8gdGhlIGRlYWQgbGV0dGVyIHF1ZXVlOiAke3Nxc1F1ZXVlVXJsKGRscSl9YCxcbiAgICAgICAgXS5qb2luKCcvbicpLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgIH0pO1xuICAgIG1vbml0b3JpbmcuYWRkTG93U2V2ZXJpdHlBbGFybShcbiAgICAgIGBDb2RlQXJ0aWZhY3QvJHtyZXBvc2l0b3J5SWR9IERMUSBOb3QgRW1wdHlgLFxuICAgICAgZGxxTm90RW1wdHlBbGFybVxuICAgICk7XG5cbiAgICBydWxlLm5vZGUuYWRkRGVwZW5kZW5jeShmYWlsdXJlQWxhcm0sIGRscU5vdEVtcHR5QWxhcm0pO1xuXG4gICAgb3ZlcnZpZXdEYXNoYm9hcmQuYWRkRExRTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICBgQ29kZUFydGlmYWN0LyR7cmVwb3NpdG9yeUlkfSBETFFgLFxuICAgICAgZGxxXG4gICAgKTtcbiAgICBvdmVydmlld0Rhc2hib2FyZC5hZGRDb25jdXJyZW50RXhlY3V0aW9uTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICBmb3J3YXJkZXIsXG4gICAgICBgJHtpZFByZWZpeH0vRm9yd2FyZGVyTGFtYmRhYFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogYENvZGVBcnRpZmFjdDogJHtyZXBvc2l0b3J5SWR9YCxcbiAgICAgIGxpbmtzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQ29kZUFydGlmYWN0JyxcbiAgICAgICAgICB1cmw6IGNvZGVBcnRpZmFjdFJlcG9zaXRvcnlVcmwodGhpcy5wcm9wcy5yZXBvc2l0b3J5KSxcbiAgICAgICAgICBwcmltYXJ5OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0ZvcndhcmRlciBGdW5jdGlvbicsXG4gICAgICAgICAgdXJsOiBsYW1iZGFGdW5jdGlvblVybChmb3J3YXJkZXIpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1NlYXJjaCBMb2cgZ3JvdXAnLFxuICAgICAgICAgIHVybDogbGFtYmRhU2VhcmNoTG9nR3JvdXBVcmwoZm9yd2FyZGVyKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdETFEnLFxuICAgICAgICAgIHVybDogc3FzUXVldWVVcmwoZGxxKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBkYXNoYm9hcmRXaWRnZXRzOiBbXG4gICAgICAgIFtcbiAgICAgICAgICBuZXcgR3JhcGhXaWRnZXQoe1xuICAgICAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICAgICAgd2lkdGg6IDEyLFxuICAgICAgICAgICAgdGl0bGU6ICdGdW5jdGlvbiBIZWFsdGgnLFxuICAgICAgICAgICAgbGVmdDogW1xuICAgICAgICAgICAgICBmaWxsTWV0cmljKGZvcndhcmRlci5tZXRyaWNJbnZvY2F0aW9ucyh7IGxhYmVsOiAnSW52b2NhdGlvbnMnIH0pKSxcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyhmb3J3YXJkZXIubWV0cmljRXJyb3JzKHsgbGFiZWw6ICdFcnJvcnMnIH0pKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsZWZ0WUF4aXM6IHsgbWluOiAwIH0sXG4gICAgICAgICAgICByaWdodDogW2ZvcndhcmRlci5tZXRyaWNEdXJhdGlvbih7IGxhYmVsOiAnRHVyYXRpb24nIH0pXSxcbiAgICAgICAgICAgIHJpZ2h0WUF4aXM6IHsgbWluOiAwIH0sXG4gICAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5ldyBHcmFwaFdpZGdldCh7XG4gICAgICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgICAgICB3aWR0aDogMTIsXG4gICAgICAgICAgICB0aXRsZTogJ0RlYWQgTGV0dGVyIFF1ZXVlJyxcbiAgICAgICAgICAgIGxlZnQ6IFtcbiAgICAgICAgICAgICAgZGxxLm1ldHJpY0FwcHJveGltYXRlTnVtYmVyT2ZNZXNzYWdlc1Zpc2libGUoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnVmlzaWJsZSBNZXNzYWdlcycsXG4gICAgICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZGxxLm1ldHJpY0FwcHJveGltYXRlTnVtYmVyT2ZNZXNzYWdlc05vdFZpc2libGUoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnSGlkZGVuIE1lc3NhZ2VzJyxcbiAgICAgICAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGxlZnRZQXhpczogeyBtaW46IDAgfSxcbiAgICAgICAgICAgIHJpZ2h0OiBbXG4gICAgICAgICAgICAgIGRscS5tZXRyaWNBcHByb3hpbWF0ZUFnZU9mT2xkZXN0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdPbGRlc3QgTWVzc2FnZSBBZ2UnLFxuICAgICAgICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmlnaHRZQXhpczogeyBtaW46IDAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgIG5ldyBHcmFwaFdpZGdldCh7XG4gICAgICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgICAgICB3aWR0aDogMTIsXG4gICAgICAgICAgICB0aXRsZTogJ1F1YWxpdHkgTWV0cmljcycsXG4gICAgICAgICAgICBsZWZ0OiBbXG4gICAgICAgICAgICAgIGZpbGxNZXRyaWMoXG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNOb3RKc2lpRW5hYmxlZENvdW50KHsgbGFiZWw6ICdOb3QgYSBqc2lpIHBhY2thZ2UnIH0pLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyhcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY0luZWxpZ2libGVMaWNlbnNlKHsgbGFiZWw6ICdJbmVsaWdpYmxlIExpY2Vuc2UnIH0pLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyhcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY0RlbnlMaXN0ZWRDb3VudCh7IGxhYmVsOiAnRGVueSBMaXN0ZWQnIH0pLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZmlsbE1ldHJpYyhcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY0RlbGV0ZWRDb3VudCh7IGxhYmVsOiAnRGVsZXRpb24gRXZlbnRzJyB9KSxcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbGVmdFlBeGlzOiB7IG1pbjogMCB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb3VudCBvZiBwYWNrYWdlIHZlcnNpb25zIHRoYXQgd2VyZSBpZ25vcmVkIGR1ZSB0byBiZWluZyBpbiB0aGUgZGVueSBsaXN0LlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0RlbnlMaXN0ZWRDb3VudChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgW0RPTUFJTl9PV05FUl9ESU1FTlNJT05dOiB0aGlzLnByb3BzLnJlcG9zaXRvcnkuYXR0ckRvbWFpbk93bmVyLFxuICAgICAgICBbRE9NQUlOX05BTUVfRElNRU5TSU9OXTogdGhpcy5wcm9wcy5yZXBvc2l0b3J5LmF0dHJEb21haW5OYW1lLFxuICAgICAgICBbUkVQT1NJVE9SWV9OQU1FX0RJTUVOU0lPTl06IHRoaXMucHJvcHMucmVwb3NpdG9yeS5hdHRyTmFtZSxcbiAgICAgIH0sXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLkRFTllfTElTVEVEX0NPVU5ULFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHBhY2thZ2UgdmVyc2lvbnMgdGhhdCB3ZXJlIGlnbm9yZWQgZHVlIHRvIHVzaW5nIGFuIGluZWxvaWdpYmxlIGxpY2Vuc2UuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljSW5lbGlnaWJsZUxpY2Vuc2Uob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFtET01BSU5fT1dORVJfRElNRU5TSU9OXTpcbiAgICAgICAgICB0aGlzLnByb3BzLnJlcG9zaXRvcnkuYXR0ckRvbWFpbk93bmVyID8/IEF3cy5BQ0NPVU5UX0lELFxuICAgICAgICBbRE9NQUlOX05BTUVfRElNRU5TSU9OXTogdGhpcy5wcm9wcy5yZXBvc2l0b3J5LmF0dHJEb21haW5OYW1lLFxuICAgICAgICBbUkVQT1NJVE9SWV9OQU1FX0RJTUVOU0lPTl06IHRoaXMucHJvcHMucmVwb3NpdG9yeS5hdHRyTmFtZSxcbiAgICAgIH0sXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLklORUxJR0lCTEVfTElDRU5TRSxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBwYWNrYWdlIHZlcnNpb25zIHRoYXQgd2VyZSBkZWxldGVkIGZyb20gQ29kZUFydGlmYWN0ICh0aG9zZSBldmVudHMgYXJlIG5vdFxuICAgKiBoYW5kbGVkIGN1cnJlbnRseSkuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRGVsZXRlZENvdW50KG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5TVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBbRE9NQUlOX09XTkVSX0RJTUVOU0lPTl06XG4gICAgICAgICAgdGhpcy5wcm9wcy5yZXBvc2l0b3J5LmF0dHJEb21haW5Pd25lciA/PyBBd3MuQUNDT1VOVF9JRCxcbiAgICAgICAgW0RPTUFJTl9OQU1FX0RJTUVOU0lPTl06IHRoaXMucHJvcHMucmVwb3NpdG9yeS5hdHRyRG9tYWluTmFtZSxcbiAgICAgICAgW1JFUE9TSVRPUllfTkFNRV9ESU1FTlNJT05dOiB0aGlzLnByb3BzLnJlcG9zaXRvcnkuYXR0ck5hbWUsXG4gICAgICB9LFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5ERUxFVEVEX0NPVU5ULFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHBhY2thZ2UgdmVyc2lvbnMgdGhhdCBkbyBub3QgaGF2ZSBhIGpzaWkgYXNzZW1ibHkgaW4gdGhlIHBhY2thZ2UuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTm90SnNpaUVuYWJsZWRDb3VudChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgW0RPTUFJTl9PV05FUl9ESU1FTlNJT05dOlxuICAgICAgICAgIHRoaXMucHJvcHMucmVwb3NpdG9yeS5hdHRyRG9tYWluT3duZXIgPz8gQXdzLkFDQ09VTlRfSUQsXG4gICAgICAgIFtET01BSU5fTkFNRV9ESU1FTlNJT05dOiB0aGlzLnByb3BzLnJlcG9zaXRvcnkuYXR0ckRvbWFpbk5hbWUsXG4gICAgICAgIFtSRVBPU0lUT1JZX05BTUVfRElNRU5TSU9OXTogdGhpcy5wcm9wcy5yZXBvc2l0b3J5LmF0dHJOYW1lLFxuICAgICAgfSxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuTk9UX0pTSUlfRU5BQkxFRF9DT1VOVCxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -27,6 +27,12 @@ export declare class CouchChanges extends EventEmitter {
|
|
|
27
27
|
changes(since: string | number, opts?: {
|
|
28
28
|
readonly batchSize?: number;
|
|
29
29
|
}): Promise<DatabaseChanges>;
|
|
30
|
+
/**
|
|
31
|
+
* Fetch the metadata associated with a change. The change comes associated with a revision number,
|
|
32
|
+
* which can be compared to the revision number of the metadata to determine if the replica is
|
|
33
|
+
* lagging behind the changes stream. If so, we retry until the replica is up-to-date or until
|
|
34
|
+
* 30 seconds elapsed after which we return the potentially stale metadata.
|
|
35
|
+
*/
|
|
30
36
|
private fetchAndFilterMetadata;
|
|
31
37
|
private fetchAndFilterAllMetadata;
|
|
32
38
|
/**
|
|
@@ -11,6 +11,7 @@ const REQUEST_DEADLINE_MS = 30000;
|
|
|
11
11
|
const REQUEST_ATTEMPT_TIMEOUT_MS = 5000;
|
|
12
12
|
const DEFAULT_BATCH_SIZE = 100;
|
|
13
13
|
const MAX_CONNS_PER_HOST = 100;
|
|
14
|
+
const MAX_PACKAGE_SERVER_LAG_MS = 30000; // 30 seconds
|
|
14
15
|
/**
|
|
15
16
|
* A utility class that helps with traversing CouchDB database changes streams
|
|
16
17
|
* in a promise-based, page-by-page manner.
|
|
@@ -62,26 +63,52 @@ class CouchChanges extends events_1.EventEmitter {
|
|
|
62
63
|
totalCount: result.results.length,
|
|
63
64
|
};
|
|
64
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Fetch the metadata associated with a change. The change comes associated with a revision number,
|
|
68
|
+
* which can be compared to the revision number of the metadata to determine if the replica is
|
|
69
|
+
* lagging behind the changes stream. If so, we retry until the replica is up-to-date or until
|
|
70
|
+
* 30 seconds elapsed after which we return the potentially stale metadata.
|
|
71
|
+
*/
|
|
65
72
|
async fetchAndFilterMetadata(change) {
|
|
66
73
|
// Filter out deleted packages or null ids
|
|
67
74
|
if (change.deleted || !change.id) {
|
|
68
75
|
console.log(`Skipping ${change.id}: deleted or null id`);
|
|
69
76
|
return;
|
|
70
77
|
}
|
|
78
|
+
const latestChangesRev = getMaxSequentialRevision(change);
|
|
71
79
|
const metadataUrl = new url_1.URL(change.id, NPM_REGISTRY_URL);
|
|
72
80
|
console.log(`Fetching metadata for ${change.id}: ${metadataUrl}`);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
// Retry configuration
|
|
82
|
+
const baseDelay = 1000; // 1 second
|
|
83
|
+
const maxDelay = 8000; // 8 seconds max
|
|
84
|
+
let attempt = 0;
|
|
85
|
+
const startTime = Date.now();
|
|
86
|
+
while (Date.now() - startTime < MAX_PACKAGE_SERVER_LAG_MS) {
|
|
87
|
+
try {
|
|
88
|
+
const meta = await this.https('get', metadataUrl);
|
|
89
|
+
const latestReplicaRev = parseSequentialRevision(meta._rev);
|
|
90
|
+
change.doc = meta; // add metadata to the change object
|
|
91
|
+
// Happy path: replica is up-to-date
|
|
92
|
+
if (latestReplicaRev >= latestChangesRev) {
|
|
93
|
+
return change;
|
|
94
|
+
}
|
|
95
|
+
// Unhappy path: replica is behind. Calculate delay and retry
|
|
96
|
+
const delay = Math.floor(Math.random() * Math.min(baseDelay * Math.pow(2, attempt), maxDelay));
|
|
97
|
+
console.log(`${change.id}: package _rev ${latestReplicaRev} < expected replication rev ${latestChangesRev}, retrying in ${delay} ms`);
|
|
98
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
99
|
+
attempt++;
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
if (e.message?.includes('HTTP 404')) {
|
|
103
|
+
console.log(`Skipping ${change.id} because of HTTP 404 (Not Found) error`);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
throw e;
|
|
82
107
|
}
|
|
83
|
-
throw e;
|
|
84
108
|
}
|
|
109
|
+
// Timeout reached, proceed with stale data
|
|
110
|
+
console.log(`Timeout reached for ${change.id}, replica may be stale`);
|
|
111
|
+
return change;
|
|
85
112
|
}
|
|
86
113
|
async fetchAndFilterAllMetadata(changes) {
|
|
87
114
|
return (await Promise.all(changes.map((change) => this.fetchAndFilterMetadata(change)))).filter((change) => change !== undefined);
|
|
@@ -180,9 +207,17 @@ function isRetryableError(e) {
|
|
|
180
207
|
async function sleep(ms) {
|
|
181
208
|
return new Promise((ok) => setTimeout(ok, ms));
|
|
182
209
|
}
|
|
210
|
+
function parseSequentialRevision(rev) {
|
|
211
|
+
return parseInt(rev.split('-')[0]);
|
|
212
|
+
}
|
|
213
|
+
function getMaxSequentialRevision(change) {
|
|
214
|
+
return Math.max(...change.changes
|
|
215
|
+
.map(change => parseSequentialRevision(change.rev))
|
|
216
|
+
.filter(num => !isNaN(num)));
|
|
217
|
+
}
|
|
183
218
|
function gunzip(readable) {
|
|
184
219
|
const gz = (0, zlib_1.createGunzip)();
|
|
185
220
|
readable.pipe(gz, { end: true });
|
|
186
221
|
return gz;
|
|
187
222
|
}
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291Y2gtY2hhbmdlcy5sYW1iZGEtc2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhY2thZ2Utc291cmNlcy9ucG1qcy9jb3VjaC1jaGFuZ2VzLmxhbWJkYS1zaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXNDO0FBRXRDLGlDQUF1RDtBQUN2RCxxREFBNkM7QUFFN0MsNkJBQTBCO0FBQzFCLCtCQUFvQztBQUVwQyxNQUFNLGdCQUFnQixHQUFHLDZCQUE2QixDQUFDO0FBRXZELE1BQU0sbUJBQW1CLEdBQUcsS0FBTSxDQUFDO0FBRW5DLE1BQU0sMEJBQTBCLEdBQUcsSUFBSyxDQUFDO0FBRXpDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBRS9CLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBRS9COzs7R0FHRztBQUNILE1BQWEsWUFBYSxTQUFRLHFCQUFZO0lBSzVDOzs7T0FHRztJQUNILFlBQW1CLE9BQWUsRUFBRSxRQUFnQjtRQUNsRCxLQUFLLEVBQUUsQ0FBQztRQUNSLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksYUFBSyxDQUFDO1lBQ3JCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsY0FBYyxFQUFFLElBQUs7WUFDckIsVUFBVSxFQUFFLGtCQUFrQjtZQUU5QixvRUFBb0U7WUFDcEUsbUNBQW1DO1lBQ25DLE9BQU8sRUFBRSxLQUFNO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxTQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUk7UUFDZixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQVEsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLEtBQUssQ0FBQyxPQUFPLENBQ2xCLEtBQXNCLEVBQ3RCLElBQXNDO1FBRXRDLE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxTQUFTLElBQUksa0JBQWtCLENBQUM7UUFFeEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxTQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFELFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV2RCxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQVEsQ0FBQztRQUU1RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRSxPQUFPO1lBQ0wsUUFBUTtZQUNSLGlCQUFpQixFQUFFLE9BQU87WUFDMUIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTTtTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxNQUFzQjtRQUN6RCwwQ0FBMEM7UUFDMUMsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxNQUFNLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3pELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxTQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLE1BQU0sQ0FBQyxFQUFFLEtBQUssV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVsRSxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsb0NBQW9DO1lBQ3ZELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FDVCxZQUFZLE1BQU0sQ0FBQyxFQUFFLHdDQUF3QyxDQUM5RCxDQUFDO2dCQUNGLE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUIsQ0FDckMsT0FBeUI7UUFFekIsT0FBTyxDQUNMLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDN0QsQ0FDRixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBNEIsRUFBRSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSyxLQUFLLENBQUMsS0FBSyxDQUNqQixNQUFzQixFQUN0QixHQUFRLEVBQ1IsSUFBaUM7UUFFakMsTUFBTSxPQUFPLEdBQXdCO1lBQ25DLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsaUJBQWlCLEVBQUUsTUFBTTtZQUN6Qix3QkFBd0IsRUFBRSxNQUFNLEVBQUUsb0ZBQW9GO1NBQ3ZILENBQUM7UUFDRixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO1FBQy9DLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBbUI7WUFDckMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE9BQU87WUFDUCxNQUFNO1lBQ04sSUFBSSxFQUFFLEdBQUc7WUFDVCxVQUFVLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDeEIsdUNBQXVDO1lBQ3ZDLE9BQU8sRUFBRSwwQkFBMEI7U0FDcEMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztRQUNsRCxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDbkIsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQzNCLE1BQU0sSUFBSSxjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDdkQsQ0FBQztnQkFFRCx3R0FBd0c7Z0JBQ3hHLElBQUksR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDbEQsTUFBTSxJQUFJLGNBQWMsQ0FDdEIsUUFBUSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FDOUMsQ0FBQztnQkFDSixDQUFDO2dCQUVELDZCQUE2QjtnQkFDN0IsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztnQkFDakUsQ0FBQztnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUNULGFBQWEsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEdBQUcsWUFDdEMsR0FBRyxDQUFDLFVBQ04sS0FBSyxHQUFHLENBQUMsYUFBYSxHQUFHLENBQzFCLENBQUM7Z0JBRUYsT0FBTyxNQUFNLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO2dCQUNoQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsRCxNQUFNLENBQUMsQ0FBQztnQkFDVixDQUFDO2dCQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBRXBELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFoTEQsb0NBZ0xDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGNBQWMsQ0FDckIsR0FBUSxFQUNSLE9BQXVCLEVBQ3ZCLElBQThCO0lBRTlCLE9BQU8sSUFBSSxPQUFPLENBQWtCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUEsZUFBTyxFQUFDLEdBQUcsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNyQixHQUFHLENBQUMsT0FBTyxDQUNULElBQUksY0FBYyxDQUNoQixpQkFBaUIsT0FBTyxDQUFDLE9BQU8sc0JBQXNCLENBQ3ZELENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FDdkIsR0FBb0I7SUFFcEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV0QixNQUFNLFlBQVksR0FDaEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFFakUsT0FBTyxJQUFBLGdCQUFJLEVBQUMsWUFBWSxDQUFDO2FBQ3RCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQWEsQ0FBQyxDQUFDO2FBQ25DLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxjQUFlLFNBQVEsS0FBSztDQUFHO0FBRXJDLFNBQVMsZ0JBQWdCLENBQUMsQ0FBUTtJQUNoQyxPQUFPLENBQUMsWUFBWSxjQUFjLElBQUssQ0FBUyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUM7QUFDekUsQ0FBQztBQUVELEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUM3QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQWtFRCxTQUFTLE1BQU0sQ0FBQyxRQUFrQjtJQUNoQyxNQUFNLEVBQUUsR0FBRyxJQUFBLG1CQUFZLEdBQUUsQ0FBQztJQUMxQixRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UsIE91dGdvaW5nSHR0cEhlYWRlcnMgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IEFnZW50LCByZXF1ZXN0LCBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJ2h0dHBzJztcbmltcG9ydCB7IGpzb24gfSBmcm9tICdub2RlOnN0cmVhbS9jb25zdW1lcnMnO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IGNyZWF0ZUd1bnppcCB9IGZyb20gJ3psaWInO1xuXG5jb25zdCBOUE1fUkVHSVNUUllfVVJMID0gJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyc7XG5cbmNvbnN0IFJFUVVFU1RfREVBRExJTkVfTVMgPSAzMF8wMDA7XG5cbmNvbnN0IFJFUVVFU1RfQVRURU1QVF9USU1FT1VUX01TID0gNV8wMDA7XG5cbmNvbnN0IERFRkFVTFRfQkFUQ0hfU0laRSA9IDEwMDtcblxuY29uc3QgTUFYX0NPTk5TX1BFUl9IT1NUID0gMTAwO1xuXG4vKipcbiAqIEEgdXRpbGl0eSBjbGFzcyB0aGF0IGhlbHBzIHdpdGggdHJhdmVyc2luZyBDb3VjaERCIGRhdGFiYXNlIGNoYW5nZXMgc3RyZWFtc1xuICogaW4gYSBwcm9taXNlLWJhc2VkLCBwYWdlLWJ5LXBhZ2UgbWFubmVyLlxuICovXG5leHBvcnQgY2xhc3MgQ291Y2hDaGFuZ2VzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhZ2VudDogQWdlbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZVVybDogVVJMO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFiYXNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBiYXNlVXJsICB0aGUgQ291Y2hEQiBlbmRwb2ludCBVUkwuXG4gICAqIEBwYXJhbSBkYXRhYmFzZSB0aGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZm9yIHdoaWNoIGNoYW5nZXMgYXJlIGZldGNoZWQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoYmFzZVVybDogc3RyaW5nLCBkYXRhYmFzZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBTZXR0aW5nIHVwIGZvciBrZWVwLWFsaXZlIGNvbm5lY3Rpb25zLlxuICAgIHRoaXMuYWdlbnQgPSBuZXcgQWdlbnQoe1xuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAga2VlcEFsaXZlTXNlY3M6IDVfMDAwLFxuICAgICAgbWF4U29ja2V0czogTUFYX0NPTk5TX1BFUl9IT1NULFxuXG4gICAgICAvLyBUaGlzIHRpbWVvdXQgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcmVxdWVzdCB0aW1lb3V0LCBhbmQgaXMgaGVyZSB0b1xuICAgICAgLy8gcHJldmVudCBzdGFsbGVkL2lkbGUgY29ubmVjdGlvbnNcbiAgICAgIHRpbWVvdXQ6IDYwXzAwMCxcbiAgICB9KTtcbiAgICB0aGlzLmJhc2VVcmwgPSBuZXcgVVJMKGJhc2VVcmwpO1xuICAgIHRoaXMuZGF0YWJhc2UgPSBkYXRhYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBzdW1tYXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbmZvKCk6IFByb21pc2U8RGF0YWJhc2VJbmZvcz4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5odHRwcygnZ2V0JywgdGhpcy5iYXNlVXJsKSkgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGFpbnMgYSBiYXRjaCBvZiBjaGFuZ2VzIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2luY2UgICAgIHRoZSBzZXF1ZW5jZSB2YWx1ZSBzaW5jZSB3aGVuIGhpc3Rvcnkgc2hvdWxkIGJlIGZldGNoZWQuXG4gICAqIEBwYXJhbSBiYXRjaFNpemUgdGhlIG1heGltdW0gYW1vdW50IG9mIGNoYW5nZXMgdG8gcmV0dXJuIGluIGEgc2luZ2xlIHBhZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgcGFnZSBvZiBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoYW5nZXMoXG4gICAgc2luY2U6IHN0cmluZyB8IG51bWJlcixcbiAgICBvcHRzPzogeyByZWFkb25seSBiYXRjaFNpemU/OiBudW1iZXIgfVxuICApOiBQcm9taXNlPERhdGFiYXNlQ2hhbmdlcz4ge1xuICAgIGNvbnN0IGJhdGNoU2l6ZSA9IG9wdHM/LmJhdGNoU2l6ZSA/PyBERUZBVUxUX0JBVENIX1NJWkU7XG5cbiAgICBjb25zdCBjaGFuZ2VzVXJsID0gbmV3IFVSTCh0aGlzLmRhdGFiYXNlLCB0aGlzLmJhc2VVcmwpO1xuICAgIGNoYW5nZXNVcmwuc2VhcmNoUGFyYW1zLnNldCgnbGltaXQnLCBiYXRjaFNpemUudG9GaXhlZCgpKTtcbiAgICBjaGFuZ2VzVXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3NpbmNlJywgc2luY2UudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgdGhpcy5odHRwcygnZ2V0JywgY2hhbmdlc1VybCkpIGFzIGFueTtcblxuICAgIGNvbnN0IGxhc3Rfc2VxID0gcmVzdWx0Lmxhc3Rfc2VxO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmZldGNoQW5kRmlsdGVyQWxsTWV0YWRhdGEocmVzdWx0LnJlc3VsdHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhc3Rfc2VxLFxuICAgICAgYWN0aW9uYWJsZVJlc3VsdHM6IHJlc3VsdHMsXG4gICAgICB0b3RhbENvdW50OiByZXN1bHQucmVzdWx0cy5sZW5ndGgsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hBbmRGaWx0ZXJNZXRhZGF0YShjaGFuZ2U6IERhdGFiYXNlQ2hhbmdlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBkZWxldGVkIHBhY2thZ2VzIG9yIG51bGwgaWRzXG4gICAgaWYgKGNoYW5nZS5kZWxldGVkIHx8ICFjaGFuZ2UuaWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyAke2NoYW5nZS5pZH06IGRlbGV0ZWQgb3IgbnVsbCBpZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGFkYXRhVXJsID0gbmV3IFVSTChjaGFuZ2UuaWQsIE5QTV9SRUdJU1RSWV9VUkwpO1xuICAgIGNvbnNvbGUubG9nKGBGZXRjaGluZyBtZXRhZGF0YSBmb3IgJHtjaGFuZ2UuaWR9OiAke21ldGFkYXRhVXJsfWApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGEgPSBhd2FpdCB0aGlzLmh0dHBzKCdnZXQnLCBtZXRhZGF0YVVybCk7XG4gICAgICBjaGFuZ2UuZG9jID0gbWV0YTsgLy8gYWRkIG1ldGFkYXRhIHRvIHRoZSBjaGFuZ2Ugb2JqZWN0XG4gICAgICByZXR1cm4gY2hhbmdlO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUubWVzc2FnZT8uaW5jbHVkZXMoJ0hUVFAgNDA0JykpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFNraXBwaW5nICR7Y2hhbmdlLmlkfSBiZWNhdXNlIG9mIEhUVFAgNDA0IChOb3QgRm91bmQpIGVycm9yYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hBbmRGaWx0ZXJBbGxNZXRhZGF0YShcbiAgICBjaGFuZ2VzOiBEYXRhYmFzZUNoYW5nZVtdXG4gICk6IFByb21pc2U8RGF0YWJhc2VDaGFuZ2VbXT4ge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgY2hhbmdlcy5tYXAoKGNoYW5nZSkgPT4gdGhpcy5mZXRjaEFuZEZpbHRlck1ldGFkYXRhKGNoYW5nZSkpXG4gICAgICApXG4gICAgKS5maWx0ZXIoKGNoYW5nZSk6IGNoYW5nZSBpcyBEYXRhYmFzZUNoYW5nZSA9PiBjaGFuZ2UgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYW4gSFRUUHMgcmVxdWVzdCB1c2luZyB0aGUgcHJvdmlkZWQgbWV0aG9kLCB1cmwsIGFuZCBvcHRpb25hbGx5IHBheWxvYWQuIFRoaXMgZnVuY3Rpb25cbiAgICogcHJvcGVybHkgaGFuZGxlcyBpbnB1dCB0aGF0IGlzIHJlY2VpdmVkIHdpdGggYENvbnRlbnQtVHlwZTogZ3ppcGAgYW5kIGF1dG9tYXRpY2FsbHkgcmV0cmllc1xuICAgKiB0eXBpY2FsIHRyYW5zaWVudCBlcnJvcnMgKEhUVFAgNVhYLCBFQ09OTlJFU0VULCBldGMuLi4pIHdpdGggbGluZWFyIGJhY2stb2ZmIGFuZCBubyBtYXhpbXVtXG4gICAqIHJldHJ5IGNvdW50ICh0aGlzIGlzIHVzZWQgaW4gTGFtYmRhIGZ1bmN0aW9ucywgd2hpY2ggZGUtZmFjdG8gY2FwcyB0aGUgYW1vdW50IG9mIGF0dGVtcHRzXG4gICAqIHRoYXQgd2lsbCBiZSBtYWRlIGR1ZSB0byB0aGUgZnVuY3Rpb24gdGltZSBvdXQpLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0aG9kIHRoZSBIVFRQIG1ldGhvZCB1c2VkIGZvciB0aGUgcmVxdWVzdCAoZS5nOiAnZ2V0JywgJ3Bvc3QnLCAuLi4pLlxuICAgKiBAcGFyYW0gdXJsICAgIHRoZSBVUkwgdG8gcmVxdWVzdC5cbiAgICogQHBhcmFtIGJvZHkgICBhbiBvcHRpb25hbCBIVFRQIHJlcXVlc3QgcGF5bG9hZCwgd2hpY2ggd2lsbCBiZSBKU09OLWVuY29kZWQuXG4gICAqXG4gICAqIEBwYXJhbSBhdHRlbXB0IHRoZSByZXF1ZXN0IGF0dGVtcHQgbnVtYmVyICh1c2VkIHRvIGRldGVybWluZSBiYWNrLW9mZiAvIHJldHJ5KS5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIEpTT04tZGVjb2RlZCByZXNwb25zZSBib2R5LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBodHRwcyhcbiAgICBtZXRob2Q6ICdnZXQnIHwgJ3Bvc3QnLFxuICAgIHVybDogVVJMLFxuICAgIGJvZHk/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfVxuICApOiBQcm9taXNlPHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9PiB7XG4gICAgY29uc3QgaGVhZGVyczogT3V0Z29pbmdIdHRwSGVhZGVycyA9IHtcbiAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJyxcbiAgICAgICducG0tcmVwbGljYXRpb24tb3B0LWluJzogJ3RydWUnLCAvLyBjYW4gYmUgZGVsZXRlZCBhZnRlciBNYXkgMjk6IGh0dHBzOi8vZ2l0aHViLmNvbS9vcmdzL2NvbW11bml0eS9kaXNjdXNzaW9ucy8xNTI1MTVcbiAgICB9O1xuICAgIGlmIChib2R5KSB7XG4gICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICBhZ2VudDogdGhpcy5hZ2VudCxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICBwb3J0OiA0NDMsXG4gICAgICBzZXJ2ZXJuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICAvLyBUaGlzIGp1c3QgbGVhZHMgdG8gYSAndGltZW91dCcgZXZlbnRcbiAgICAgIHRpbWVvdXQ6IFJFUVVFU1RfQVRURU1QVF9USU1FT1VUX01TLFxuICAgIH07XG5cbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBSRVFVRVNUX0RFQURMSU5FX01TO1xuICAgIGxldCBtYXhEZWxheSA9IDEwMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmVxdWVzdFByb21pc2UodXJsLCByZXF1ZXN0T3B0aW9ucywgYm9keSk7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJldHJ5YWJsZUVycm9yKCdObyBzdGF0dXMgY29kZSBhdmFpbGFibGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlcnZlciBlcnJvcnMuIFdlIGNhbid0IGtub3cgd2hldGhlciB0aGVzZSBhcmUgcmVhbGx5IHJldHJ5YWJsZSBidXQgd2UgdXN1YWxseSBwcmV0ZW5kIHRoYXQgdGhleSBhcmUuXG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA+PSA1MDAgJiYgcmVzLnN0YXR1c0NvZGUgPCA2MDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmV0cnlhYmxlRXJyb3IoXG4gICAgICAgICAgICBgSFRUUCAke3Jlcy5zdGF0dXNDb2RlfSAke3Jlcy5zdGF0dXNNZXNzYWdlfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVybWFuZW50IChjbGllbnQpIGVycm9yczpcbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID49IDQwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDUwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlcy5zdGF0dXNDb2RlfSAke3Jlcy5zdGF0dXNNZXNzYWdlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFJlc3BvbnNlOiAke21ldGhvZC50b1VwcGVyQ2FzZSgpfSAke3VybH0gPT4gSFRUUCAke1xuICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGVcbiAgICAgICAgICB9ICgke3Jlcy5zdGF0dXNNZXNzYWdlfSlgXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRSZXNwb25zZUpzb24ocmVzKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSA+IGRlYWRsaW5lIHx8ICFpc1JldHJ5YWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtSRVRSWUFCTEVdICR7bWV0aG9kfSAke3VybH06ICR7ZX1gKTtcblxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtYXhEZWxheSkpO1xuICAgICAgICBtYXhEZWxheSAqPSAyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgUHJvbWlzaWZpZWQgdmVyc2lvbiBvZiBgaHR0cHMucmVxdWVzdCgpYCB0aGF0IGFsc28gaGFuZGxlcyB0aW1lb3V0IGV2ZW50c1xuICovXG5mdW5jdGlvbiByZXF1ZXN0UHJvbWlzZShcbiAgdXJsOiBVUkwsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLFxuICBib2R5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbikge1xuICByZXR1cm4gbmV3IFByb21pc2U8SW5jb21pbmdNZXNzYWdlPigob2ssIGtvKSA9PiB7XG4gICAgY29uc3QgcmVxID0gcmVxdWVzdCh1cmwsIG9wdGlvbnMgPz8ge30sIG9rKTtcbiAgICByZXEub24oJ2Vycm9yJywga28pO1xuICAgIHJlcS5vbigndGltZW91dCcsICgpID0+IHtcbiAgICAgIHJlcS5kZXN0cm95KFxuICAgICAgICBuZXcgUmV0cnlhYmxlRXJyb3IoXG4gICAgICAgICAgYFRpbWVvdXQgYWZ0ZXIgJHtvcHRpb25zLnRpbWVvdXR9bXMsIGFib3J0aW5nIHJlcXVlc3RgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmVxLmVuZChib2R5ICYmIEpTT04uc3RyaW5naWZ5KGJvZHksIG51bGwsIDIpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRSZXNwb25zZUpzb24oXG4gIHJlczogSW5jb21pbmdNZXNzYWdlXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2ssIGtvKSA9PiB7XG4gICAgcmVzLm9uY2UoJ2Vycm9yJywga28pO1xuXG4gICAgY29uc3QgcGxhaW5QYXlsb2FkID1cbiAgICAgIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPT09ICdnemlwJyA/IGd1bnppcChyZXMpIDogcmVzO1xuXG4gICAgcmV0dXJuIGpzb24ocGxhaW5QYXlsb2FkKVxuICAgICAgLnRoZW4oKHBhcnNlZCkgPT4gb2socGFyc2VkIGFzIGFueSkpXG4gICAgICAuY2F0Y2goKGVycikgPT4ga28oZXJyKSk7XG4gIH0pO1xufVxuXG5jbGFzcyBSZXRyeWFibGVFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmZ1bmN0aW9uIGlzUmV0cnlhYmxlRXJyb3IoZTogRXJyb3IpOiBib29sZWFuIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBSZXRyeWFibGVFcnJvciB8fCAoZSBhcyBhbnkpLmNvZGUgPT09ICdFQ09OTlJFU0VUJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKG9rKSA9PiBzZXRUaW1lb3V0KG9rLCBtcykpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGUgbGFzdCBzZXF1ZW5jZSBJRCBmcm9tIHRoaXMgY2hhbmdlIHNldC4gVGhpcyBpcyB0aGUgdmFsdWUgdGhhdCBzaG91bGQgYmVcbiAgICogcGFzc2VkIHRvIHRoZSBzdWJzZXF1ZW50IGAuY2hhbmdlc2AgY2FsbCB0byBmZXRjaCB0aGUgbmV4dCBwYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdF9zZXE6IHN0cmluZyB8IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFjdGlvbmFibGUgY2hhbmdlcyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgYmF0Y2guXG4gICAqIFRoaXMgaGFzIGRlbGV0ZWQgYW5kIHVucmVhY2hhYmxlIHBhY2thZ2VzIHJlbW92ZWQuXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25hYmxlUmVzdWx0czogcmVhZG9ubHkgRGF0YWJhc2VDaGFuZ2VbXTtcblxuICAvKipcbiAgICogVGhlIHRvdGFsIGNvdW50IG9mIGNoYW5nZXMgaW4gdGhpcyBiYXRjaC4gVGhpcyBpbmNsdWRlcyB1bnByb2Nlc3NhYmxlIGNoYW5nZXMuXG4gICAqIDAgaW5kaWNhdGVzIHdlIGFyZSB1cCB0byBkYXRlIHdpdGggXCJub3dcIi5cbiAgICovXG4gIHJlYWRvbmx5IHRvdGFsQ291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIHJldmlzaW9ucyB0byB0aGUgb2JqZWN0IHRoYXQgd2VyZSByZXNvbHZlZCBhcyBwYXJ0IG9mIHRoaXNcbiAgICogY2hhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlczogUmVhZG9ubHlBcnJheTx7IHJlYWRvbmx5IHJldjogc3RyaW5nIH0+O1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGRvY3VtZW50IHRoYXQgaGFzIGNoYW5nZWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VxdWVuY2UgSUQgZm9yIHRoaXMgY2hhbmdlIGluIHRoZSBzdHJlYW0uIEl0IG1heSBub3QgYmUgcHJlc2VudCBmb3JcbiAgICogYWxsIChvciBhbnkpIGVudHJpZXMgaW4gdGhlIHJlc3VsdC5cbiAgICovXG4gIHJlYWRvbmx5IHNlcT86IHN0cmluZyB8IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGNoYW5nZSBjb3JyZXNwb25kcyB0byB0aGlzIGRvY3VtZW50IGJlaW5nIGRlbGV0ZWQuXG4gICAqL1xuICByZWFkb25seSBkZWxldGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCB0aGUgcmVzb2x2ZWQgZG9jdW1lbnQgYWZ0ZXIgdGhlIGNoYW5nZSBoYXMgYmVlbiBhcHBsaWVkLlxuICAgKi9cbiAgZG9jPzogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VJbmZvcyB7XG4gIHJlYWRvbmx5IGRiX25hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGlza19mb3JtYXRfdmVyc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBkb2NfY291bnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgZG9jX2RlbF9jb3VudDogbnVtYmVyO1xuICByZWFkb25seSBpbnN0YW5jZV9zdGFydF90aW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHB1cmdlX3NlcTogc3RyaW5nIHwgbnVtYmVyO1xuICByZWFkb25seSBzaXplczoge1xuICAgIHJlYWRvbmx5IGFjdGl2ZTogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGV4dGVybmFsOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZmlsZTogbnVtYmVyO1xuICB9O1xuICByZWFkb25seSB1cGRhdGVfc2VxOiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGd1bnppcChyZWFkYWJsZTogUmVhZGFibGUpOiBSZWFkYWJsZSB7XG4gIGNvbnN0IGd6ID0gY3JlYXRlR3VuemlwKCk7XG4gIHJlYWRhYmxlLnBpcGUoZ3osIHsgZW5kOiB0cnVlIH0pO1xuICByZXR1cm4gZ3o7XG59XG4iXX0=
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291Y2gtY2hhbmdlcy5sYW1iZGEtc2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhY2thZ2Utc291cmNlcy9ucG1qcy9jb3VjaC1jaGFuZ2VzLmxhbWJkYS1zaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXNDO0FBRXRDLGlDQUF1RDtBQUN2RCxxREFBNkM7QUFFN0MsNkJBQTBCO0FBQzFCLCtCQUFvQztBQUVwQyxNQUFNLGdCQUFnQixHQUFHLDZCQUE2QixDQUFDO0FBRXZELE1BQU0sbUJBQW1CLEdBQUcsS0FBTSxDQUFDO0FBRW5DLE1BQU0sMEJBQTBCLEdBQUcsSUFBSyxDQUFDO0FBRXpDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBRS9CLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBRS9CLE1BQU0seUJBQXlCLEdBQUcsS0FBTSxDQUFDLENBQUMsYUFBYTtBQUV2RDs7O0dBR0c7QUFDSCxNQUFhLFlBQWEsU0FBUSxxQkFBWTtJQUs1Qzs7O09BR0c7SUFDSCxZQUFtQixPQUFlLEVBQUUsUUFBZ0I7UUFDbEQsS0FBSyxFQUFFLENBQUM7UUFDUix5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQUssQ0FBQztZQUNyQixTQUFTLEVBQUUsSUFBSTtZQUNmLGNBQWMsRUFBRSxJQUFLO1lBQ3JCLFVBQVUsRUFBRSxrQkFBa0I7WUFFOUIsb0VBQW9FO1lBQ3BFLG1DQUFtQztZQUNuQyxPQUFPLEVBQUUsS0FBTTtTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksU0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FB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QUM3QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsR0FBVztJQUMxQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsTUFBc0I7SUFDdEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU87U0FDOUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzVCLENBQUM7QUFDSixDQUFDO0FBa0VELFNBQVMsTUFBTSxDQUFDLFFBQWtCO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLElBQUEsbUJBQVksR0FBRSxDQUFDO0lBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakMsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSwgT3V0Z29pbmdIdHRwSGVhZGVycyB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IHsgQWdlbnQsIHJlcXVlc3QsIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHsganNvbiB9IGZyb20gJ25vZGU6c3RyZWFtL2NvbnN1bWVycyc7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgY3JlYXRlR3VuemlwIH0gZnJvbSAnemxpYic7XG5cbmNvbnN0IE5QTV9SRUdJU1RSWV9VUkwgPSAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJztcblxuY29uc3QgUkVRVUVTVF9ERUFETElORV9NUyA9IDMwXzAwMDtcblxuY29uc3QgUkVRVUVTVF9BVFRFTVBUX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuY29uc3QgREVGQVVMVF9CQVRDSF9TSVpFID0gMTAwO1xuXG5jb25zdCBNQVhfQ09OTlNfUEVSX0hPU1QgPSAxMDA7XG5cbmNvbnN0IE1BWF9QQUNLQUdFX1NFUlZFUl9MQUdfTVMgPSAzMF8wMDA7IC8vIDMwIHNlY29uZHNcblxuLyoqXG4gKiBBIHV0aWxpdHkgY2xhc3MgdGhhdCBoZWxwcyB3aXRoIHRyYXZlcnNpbmcgQ291Y2hEQiBkYXRhYmFzZSBjaGFuZ2VzIHN0cmVhbXNcbiAqIGluIGEgcHJvbWlzZS1iYXNlZCwgcGFnZS1ieS1wYWdlIG1hbm5lci5cbiAqL1xuZXhwb3J0IGNsYXNzIENvdWNoQ2hhbmdlcyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWdlbnQ6IEFnZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IFVSTDtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhYmFzZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gYmFzZVVybCAgdGhlIENvdWNoREIgZW5kcG9pbnQgVVJMLlxuICAgKiBAcGFyYW0gZGF0YWJhc2UgdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGZvciB3aGljaCBjaGFuZ2VzIGFyZSBmZXRjaGVkLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGJhc2VVcmw6IHN0cmluZywgZGF0YWJhc2U6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gU2V0dGluZyB1cCBmb3Iga2VlcC1hbGl2ZSBjb25uZWN0aW9ucy5cbiAgICB0aGlzLmFnZW50ID0gbmV3IEFnZW50KHtcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgIGtlZXBBbGl2ZU1zZWNzOiA1XzAwMCxcbiAgICAgIG1heFNvY2tldHM6IE1BWF9DT05OU19QRVJfSE9TVCxcblxuICAgICAgLy8gVGhpcyB0aW1lb3V0IGlzIHNlcGFyYXRlIGZyb20gdGhlIHJlcXVlc3QgdGltZW91dCwgYW5kIGlzIGhlcmUgdG9cbiAgICAgIC8vIHByZXZlbnQgc3RhbGxlZC9pZGxlIGNvbm5lY3Rpb25zXG4gICAgICB0aW1lb3V0OiA2MF8wMDAsXG4gICAgfSk7XG4gICAgdGhpcy5iYXNlVXJsID0gbmV3IFVSTChiYXNlVXJsKTtcbiAgICB0aGlzLmRhdGFiYXNlID0gZGF0YWJhc2U7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgc3VtbWFyeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5mbygpOiBQcm9taXNlPERhdGFiYXNlSW5mb3M+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaHR0cHMoJ2dldCcsIHRoaXMuYmFzZVVybCkpIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRhaW5zIGEgYmF0Y2ggb2YgY2hhbmdlcyBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICpcbiAgICogQHBhcmFtIHNpbmNlICAgICB0aGUgc2VxdWVuY2UgdmFsdWUgc2luY2Ugd2hlbiBoaXN0b3J5IHNob3VsZCBiZSBmZXRjaGVkLlxuICAgKiBAcGFyYW0gYmF0Y2hTaXplIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjaGFuZ2VzIHRvIHJldHVybiBpbiBhIHNpbmdsZSBwYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIHBhZ2Ugb2YgY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VzKFxuICAgIHNpbmNlOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgb3B0cz86IHsgcmVhZG9ubHkgYmF0Y2hTaXplPzogbnVtYmVyIH1cbiAgKTogUHJvbWlzZTxEYXRhYmFzZUNoYW5nZXM+IHtcbiAgICBjb25zdCBiYXRjaFNpemUgPSBvcHRzPy5iYXRjaFNpemUgPz8gREVGQVVMVF9CQVRDSF9TSVpFO1xuXG4gICAgY29uc3QgY2hhbmdlc1VybCA9IG5ldyBVUkwodGhpcy5kYXRhYmFzZSwgdGhpcy5iYXNlVXJsKTtcbiAgICBjaGFuZ2VzVXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2xpbWl0JywgYmF0Y2hTaXplLnRvRml4ZWQoKSk7XG4gICAgY2hhbmdlc1VybC5zZWFyY2hQYXJhbXMuc2V0KCdzaW5jZScsIHNpbmNlLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHRoaXMuaHR0cHMoJ2dldCcsIGNoYW5nZXNVcmwpKSBhcyBhbnk7XG5cbiAgICBjb25zdCBsYXN0X3NlcSA9IHJlc3VsdC5sYXN0X3NlcTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5mZXRjaEFuZEZpbHRlckFsbE1ldGFkYXRhKHJlc3VsdC5yZXN1bHRzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYXN0X3NlcSxcbiAgICAgIGFjdGlvbmFibGVSZXN1bHRzOiByZXN1bHRzLFxuICAgICAgdG90YWxDb3VudDogcmVzdWx0LnJlc3VsdHMubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGNoYW5nZS4gVGhlIGNoYW5nZSBjb21lcyBhc3NvY2lhdGVkIHdpdGggYSByZXZpc2lvbiBudW1iZXIsXG4gICAqIHdoaWNoIGNhbiBiZSBjb21wYXJlZCB0byB0aGUgcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBtZXRhZGF0YSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlcGxpY2EgaXNcbiAgICogbGFnZ2luZyBiZWhpbmQgdGhlIGNoYW5nZXMgc3RyZWFtLiBJZiBzbywgd2UgcmV0cnkgdW50aWwgdGhlIHJlcGxpY2EgaXMgdXAtdG8tZGF0ZSBvciB1bnRpbFxuICAgKiAzMCBzZWNvbmRzIGVsYXBzZWQgYWZ0ZXIgd2hpY2ggd2UgcmV0dXJuIHRoZSBwb3RlbnRpYWxseSBzdGFsZSBtZXRhZGF0YS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hBbmRGaWx0ZXJNZXRhZGF0YShjaGFuZ2U6IERhdGFiYXNlQ2hhbmdlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBkZWxldGVkIHBhY2thZ2VzIG9yIG51bGwgaWRzXG4gICAgaWYgKGNoYW5nZS5kZWxldGVkIHx8ICFjaGFuZ2UuaWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyAke2NoYW5nZS5pZH06IGRlbGV0ZWQgb3IgbnVsbCBpZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxhdGVzdENoYW5nZXNSZXYgPSBnZXRNYXhTZXF1ZW50aWFsUmV2aXNpb24oY2hhbmdlKTtcbiAgICBjb25zdCBtZXRhZGF0YVVybCA9IG5ldyBVUkwoY2hhbmdlLmlkLCBOUE1fUkVHSVNUUllfVVJMKTtcbiAgICBjb25zb2xlLmxvZyhgRmV0Y2hpbmcgbWV0YWRhdGEgZm9yICR7Y2hhbmdlLmlkfTogJHttZXRhZGF0YVVybH1gKTtcblxuICAgIC8vIFJldHJ5IGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBiYXNlRGVsYXkgPSAxXzAwMDsgLy8gMSBzZWNvbmRcbiAgICBjb25zdCBtYXhEZWxheSA9IDhfMDAwOyAvLyA4IHNlY29uZHMgbWF4XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICB3aGlsZShEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgTUFYX1BBQ0tBR0VfU0VSVkVSX0xBR19NUykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWV0YSA9IGF3YWl0IHRoaXMuaHR0cHMoJ2dldCcsIG1ldGFkYXRhVXJsKTtcbiAgICAgICAgY29uc3QgbGF0ZXN0UmVwbGljYVJldiA9IHBhcnNlU2VxdWVudGlhbFJldmlzaW9uKG1ldGEuX3JldiBhcyBzdHJpbmcpO1xuXG4gICAgICAgIGNoYW5nZS5kb2MgPSBtZXRhOyAvLyBhZGQgbWV0YWRhdGEgdG8gdGhlIGNoYW5nZSBvYmplY3RcblxuICAgICAgICAvLyBIYXBweSBwYXRoOiByZXBsaWNhIGlzIHVwLXRvLWRhdGVcbiAgICAgICAgaWYgKGxhdGVzdFJlcGxpY2FSZXYgPj0gbGF0ZXN0Q2hhbmdlc1Jldikge1xuICAgICAgICAgIHJldHVybiBjaGFuZ2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVbmhhcHB5IHBhdGg6IHJlcGxpY2EgaXMgYmVoaW5kLiBDYWxjdWxhdGUgZGVsYXkgYW5kIHJldHJ5XG4gICAgICAgIGNvbnN0IGRlbGF5ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTWF0aC5taW4oYmFzZURlbGF5ICogTWF0aC5wb3coMiwgYXR0ZW1wdCksIG1heERlbGF5KSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2NoYW5nZS5pZH06IHBhY2thZ2UgX3JldiAke2xhdGVzdFJlcGxpY2FSZXZ9IDwgZXhwZWN0ZWQgcmVwbGljYXRpb24gcmV2ICR7bGF0ZXN0Q2hhbmdlc1Jldn0sIHJldHJ5aW5nIGluICR7ZGVsYXl9IG1zYCk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheSkpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgaWYgKGUubWVzc2FnZT8uaW5jbHVkZXMoJ0hUVFAgNDA0JykpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBTa2lwcGluZyAke2NoYW5nZS5pZH0gYmVjYXVzZSBvZiBIVFRQIDQwNCAoTm90IEZvdW5kKSBlcnJvcmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRpbWVvdXQgcmVhY2hlZCwgcHJvY2VlZCB3aXRoIHN0YWxlIGRhdGFcbiAgICBjb25zb2xlLmxvZyhgVGltZW91dCByZWFjaGVkIGZvciAke2NoYW5nZS5pZH0sIHJlcGxpY2EgbWF5IGJlIHN0YWxlYCk7XG4gICAgcmV0dXJuIGNoYW5nZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hBbmRGaWx0ZXJBbGxNZXRhZGF0YShcbiAgICBjaGFuZ2VzOiBEYXRhYmFzZUNoYW5nZVtdXG4gICk6IFByb21pc2U8RGF0YWJhc2VDaGFuZ2VbXT4ge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgY2hhbmdlcy5tYXAoKGNoYW5nZSkgPT4gdGhpcy5mZXRjaEFuZEZpbHRlck1ldGFkYXRhKGNoYW5nZSkpXG4gICAgICApXG4gICAgKS5maWx0ZXIoKGNoYW5nZSk6IGNoYW5nZSBpcyBEYXRhYmFzZUNoYW5nZSA9PiBjaGFuZ2UgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYW4gSFRUUHMgcmVxdWVzdCB1c2luZyB0aGUgcHJvdmlkZWQgbWV0aG9kLCB1cmwsIGFuZCBvcHRpb25hbGx5IHBheWxvYWQuIFRoaXMgZnVuY3Rpb25cbiAgICogcHJvcGVybHkgaGFuZGxlcyBpbnB1dCB0aGF0IGlzIHJlY2VpdmVkIHdpdGggYENvbnRlbnQtVHlwZTogZ3ppcGAgYW5kIGF1dG9tYXRpY2FsbHkgcmV0cmllc1xuICAgKiB0eXBpY2FsIHRyYW5zaWVudCBlcnJvcnMgKEhUVFAgNVhYLCBFQ09OTlJFU0VULCBldGMuLi4pIHdpdGggbGluZWFyIGJhY2stb2ZmIGFuZCBubyBtYXhpbXVtXG4gICAqIHJldHJ5IGNvdW50ICh0aGlzIGlzIHVzZWQgaW4gTGFtYmRhIGZ1bmN0aW9ucywgd2hpY2ggZGUtZmFjdG8gY2FwcyB0aGUgYW1vdW50IG9mIGF0dGVtcHRzXG4gICAqIHRoYXQgd2lsbCBiZSBtYWRlIGR1ZSB0byB0aGUgZnVuY3Rpb24gdGltZSBvdXQpLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0aG9kIHRoZSBIVFRQIG1ldGhvZCB1c2VkIGZvciB0aGUgcmVxdWVzdCAoZS5nOiAnZ2V0JywgJ3Bvc3QnLCAuLi4pLlxuICAgKiBAcGFyYW0gdXJsICAgIHRoZSBVUkwgdG8gcmVxdWVzdC5cbiAgICogQHBhcmFtIGJvZHkgICBhbiBvcHRpb25hbCBIVFRQIHJlcXVlc3QgcGF5bG9hZCwgd2hpY2ggd2lsbCBiZSBKU09OLWVuY29kZWQuXG4gICAqXG4gICAqIEBwYXJhbSBhdHRlbXB0IHRoZSByZXF1ZXN0IGF0dGVtcHQgbnVtYmVyICh1c2VkIHRvIGRldGVybWluZSBiYWNrLW9mZiAvIHJldHJ5KS5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIEpTT04tZGVjb2RlZCByZXNwb25zZSBib2R5LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBodHRwcyhcbiAgICBtZXRob2Q6ICdnZXQnIHwgJ3Bvc3QnLFxuICAgIHVybDogVVJMLFxuICAgIGJvZHk/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfVxuICApOiBQcm9taXNlPHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9PiB7XG4gICAgY29uc3QgaGVhZGVyczogT3V0Z29pbmdIdHRwSGVhZGVycyA9IHtcbiAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJyxcbiAgICAgICducG0tcmVwbGljYXRpb24tb3B0LWluJzogJ3RydWUnLCAvLyBjYW4gYmUgZGVsZXRlZCBhZnRlciBNYXkgMjk6IGh0dHBzOi8vZ2l0aHViLmNvbS9vcmdzL2NvbW11bml0eS9kaXNjdXNzaW9ucy8xNTI1MTVcbiAgICB9O1xuICAgIGlmIChib2R5KSB7XG4gICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICBhZ2VudDogdGhpcy5hZ2VudCxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICBwb3J0OiA0NDMsXG4gICAgICBzZXJ2ZXJuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICAvLyBUaGlzIGp1c3QgbGVhZHMgdG8gYSAndGltZW91dCcgZXZlbnRcbiAgICAgIHRpbWVvdXQ6IFJFUVVFU1RfQVRURU1QVF9USU1FT1VUX01TLFxuICAgIH07XG5cbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBSRVFVRVNUX0RFQURMSU5FX01TO1xuICAgIGxldCBtYXhEZWxheSA9IDEwMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmVxdWVzdFByb21pc2UodXJsLCByZXF1ZXN0T3B0aW9ucywgYm9keSk7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJldHJ5YWJsZUVycm9yKCdObyBzdGF0dXMgY29kZSBhdmFpbGFibGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlcnZlciBlcnJvcnMuIFdlIGNhbid0IGtub3cgd2hldGhlciB0aGVzZSBhcmUgcmVhbGx5IHJldHJ5YWJsZSBidXQgd2UgdXN1YWxseSBwcmV0ZW5kIHRoYXQgdGhleSBhcmUuXG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA+PSA1MDAgJiYgcmVzLnN0YXR1c0NvZGUgPCA2MDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmV0cnlhYmxlRXJyb3IoXG4gICAgICAgICAgICBgSFRUUCAke3Jlcy5zdGF0dXNDb2RlfSAke3Jlcy5zdGF0dXNNZXNzYWdlfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVybWFuZW50IChjbGllbnQpIGVycm9yczpcbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID49IDQwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDUwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlcy5zdGF0dXNDb2RlfSAke3Jlcy5zdGF0dXNNZXNzYWdlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFJlc3BvbnNlOiAke21ldGhvZC50b1VwcGVyQ2FzZSgpfSAke3VybH0gPT4gSFRUUCAke1xuICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGVcbiAgICAgICAgICB9ICgke3Jlcy5zdGF0dXNNZXNzYWdlfSlgXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRSZXNwb25zZUpzb24ocmVzKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSA+IGRlYWRsaW5lIHx8ICFpc1JldHJ5YWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtSRVRSWUFCTEVdICR7bWV0aG9kfSAke3VybH06ICR7ZX1gKTtcblxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtYXhEZWxheSkpO1xuICAgICAgICBtYXhEZWxheSAqPSAyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgUHJvbWlzaWZpZWQgdmVyc2lvbiBvZiBgaHR0cHMucmVxdWVzdCgpYCB0aGF0IGFsc28gaGFuZGxlcyB0aW1lb3V0IGV2ZW50c1xuICovXG5mdW5jdGlvbiByZXF1ZXN0UHJvbWlzZShcbiAgdXJsOiBVUkwsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLFxuICBib2R5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbikge1xuICByZXR1cm4gbmV3IFByb21pc2U8SW5jb21pbmdNZXNzYWdlPigob2ssIGtvKSA9PiB7XG4gICAgY29uc3QgcmVxID0gcmVxdWVzdCh1cmwsIG9wdGlvbnMgPz8ge30sIG9rKTtcbiAgICByZXEub24oJ2Vycm9yJywga28pO1xuICAgIHJlcS5vbigndGltZW91dCcsICgpID0+IHtcbiAgICAgIHJlcS5kZXN0cm95KFxuICAgICAgICBuZXcgUmV0cnlhYmxlRXJyb3IoXG4gICAgICAgICAgYFRpbWVvdXQgYWZ0ZXIgJHtvcHRpb25zLnRpbWVvdXR9bXMsIGFib3J0aW5nIHJlcXVlc3RgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmVxLmVuZChib2R5ICYmIEpTT04uc3RyaW5naWZ5KGJvZHksIG51bGwsIDIpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRSZXNwb25zZUpzb24oXG4gIHJlczogSW5jb21pbmdNZXNzYWdlXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2ssIGtvKSA9PiB7XG4gICAgcmVzLm9uY2UoJ2Vycm9yJywga28pO1xuXG4gICAgY29uc3QgcGxhaW5QYXlsb2FkID1cbiAgICAgIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPT09ICdnemlwJyA/IGd1bnppcChyZXMpIDogcmVzO1xuXG4gICAgcmV0dXJuIGpzb24ocGxhaW5QYXlsb2FkKVxuICAgICAgLnRoZW4oKHBhcnNlZCkgPT4gb2socGFyc2VkIGFzIGFueSkpXG4gICAgICAuY2F0Y2goKGVycikgPT4ga28oZXJyKSk7XG4gIH0pO1xufVxuXG5jbGFzcyBSZXRyeWFibGVFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmZ1bmN0aW9uIGlzUmV0cnlhYmxlRXJyb3IoZTogRXJyb3IpOiBib29sZWFuIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBSZXRyeWFibGVFcnJvciB8fCAoZSBhcyBhbnkpLmNvZGUgPT09ICdFQ09OTlJFU0VUJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKG9rKSA9PiBzZXRUaW1lb3V0KG9rLCBtcykpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNlcXVlbnRpYWxSZXZpc2lvbihyZXY6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBwYXJzZUludChyZXYuc3BsaXQoJy0nKVswXSk7XG59XG5cbmZ1bmN0aW9uIGdldE1heFNlcXVlbnRpYWxSZXZpc2lvbihjaGFuZ2U6IERhdGFiYXNlQ2hhbmdlKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KC4uLmNoYW5nZS5jaGFuZ2VzXG4gICAgLm1hcChjaGFuZ2UgPT4gcGFyc2VTZXF1ZW50aWFsUmV2aXNpb24oY2hhbmdlLnJldikpXG4gICAgLmZpbHRlcihudW0gPT4gIWlzTmFOKG51bSkpXG4gICk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VDaGFuZ2VzIHtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IHNlcXVlbmNlIElEIGZyb20gdGhpcyBjaGFuZ2Ugc2V0LiBUaGlzIGlzIHRoZSB2YWx1ZSB0aGF0IHNob3VsZCBiZVxuICAgKiBwYXNzZWQgdG8gdGhlIHN1YnNlcXVlbnQgYC5jaGFuZ2VzYCBjYWxsIHRvIGZldGNoIHRoZSBuZXh0IHBhZ2UuXG4gICAqL1xuICByZWFkb25seSBsYXN0X3NlcTogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uYWJsZSBjaGFuZ2VzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBiYXRjaC5cbiAgICogVGhpcyBoYXMgZGVsZXRlZCBhbmQgdW5yZWFjaGFibGUgcGFja2FnZXMgcmVtb3ZlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbmFibGVSZXN1bHRzOiByZWFkb25seSBEYXRhYmFzZUNoYW5nZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgY291bnQgb2YgY2hhbmdlcyBpbiB0aGlzIGJhdGNoLiBUaGlzIGluY2x1ZGVzIHVucHJvY2Vzc2FibGUgY2hhbmdlcy5cbiAgICogMCBpbmRpY2F0ZXMgd2UgYXJlIHVwIHRvIGRhdGUgd2l0aCBcIm5vd1wiLlxuICAgKi9cbiAgcmVhZG9ubHkgdG90YWxDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgcmV2aXNpb25zIHRvIHRoZSBvYmplY3QgdGhhdCB3ZXJlIHJlc29sdmVkIGFzIHBhcnQgb2YgdGhpc1xuICAgKiBjaGFuZ2UuXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VzOiBSZWFkb25seUFycmF5PHsgcmVhZG9ubHkgcmV2OiBzdHJpbmcgfT47XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgZG9jdW1lbnQgdGhhdCBoYXMgY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXF1ZW5jZSBJRCBmb3IgdGhpcyBjaGFuZ2UgaW4gdGhlIHN0cmVhbS4gSXQgbWF5IG5vdCBiZSBwcmVzZW50IGZvclxuICAgKiBhbGwgKG9yIGFueSkgZW50cmllcyBpbiB0aGUgcmVzdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2VxPzogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgY2hhbmdlIGNvcnJlc3BvbmRzIHRvIHRoaXMgZG9jdW1lbnQgYmVpbmcgZGVsZXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHByZXNlbnQsIHRoZSByZXNvbHZlZCBkb2N1bWVudCBhZnRlciB0aGUgY2hhbmdlIGhhcyBiZWVuIGFwcGxpZWQuXG4gICAqL1xuICBkb2M/OiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUluZm9zIHtcbiAgcmVhZG9ubHkgZGJfbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBkaXNrX2Zvcm1hdF92ZXJzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGRvY19jb3VudDogbnVtYmVyO1xuICByZWFkb25seSBkb2NfZGVsX2NvdW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IGluc3RhbmNlX3N0YXJ0X3RpbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcHVyZ2Vfc2VxOiBzdHJpbmcgfCBudW1iZXI7XG4gIHJlYWRvbmx5IHNpemVzOiB7XG4gICAgcmVhZG9ubHkgYWN0aXZlOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZXh0ZXJuYWw6IG51bWJlcjtcbiAgICByZWFkb25seSBmaWxlOiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IHVwZGF0ZV9zZXE6IHN0cmluZyB8IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZ3VuemlwKHJlYWRhYmxlOiBSZWFkYWJsZSk6IFJlYWRhYmxlIHtcbiAgY29uc3QgZ3ogPSBjcmVhdGVHdW56aXAoKTtcbiAgcmVhZGFibGUucGlwZShneiwgeyBlbmQ6IHRydWUgfSk7XG4gIHJldHVybiBnejtcbn1cbiJdfQ==
|
|
@@ -63442,6 +63442,7 @@ var REQUEST_DEADLINE_MS = 3e4;
|
|
|
63442
63442
|
var REQUEST_ATTEMPT_TIMEOUT_MS = 5e3;
|
|
63443
63443
|
var DEFAULT_BATCH_SIZE = 100;
|
|
63444
63444
|
var MAX_CONNS_PER_HOST = 100;
|
|
63445
|
+
var MAX_PACKAGE_SERVER_LAG_MS = 3e4;
|
|
63445
63446
|
var CouchChanges = class extends import_events.EventEmitter {
|
|
63446
63447
|
/**
|
|
63447
63448
|
* @param baseUrl the CouchDB endpoint URL.
|
|
@@ -63488,26 +63489,48 @@ var CouchChanges = class extends import_events.EventEmitter {
|
|
|
63488
63489
|
totalCount: result.results.length
|
|
63489
63490
|
};
|
|
63490
63491
|
}
|
|
63492
|
+
/**
|
|
63493
|
+
* Fetch the metadata associated with a change. The change comes associated with a revision number,
|
|
63494
|
+
* which can be compared to the revision number of the metadata to determine if the replica is
|
|
63495
|
+
* lagging behind the changes stream. If so, we retry until the replica is up-to-date or until
|
|
63496
|
+
* 30 seconds elapsed after which we return the potentially stale metadata.
|
|
63497
|
+
*/
|
|
63491
63498
|
async fetchAndFilterMetadata(change) {
|
|
63492
63499
|
if (change.deleted || !change.id) {
|
|
63493
63500
|
console.log(`Skipping ${change.id}: deleted or null id`);
|
|
63494
63501
|
return;
|
|
63495
63502
|
}
|
|
63503
|
+
const latestChangesRev = getMaxSequentialRevision(change);
|
|
63496
63504
|
const metadataUrl = new import_url.URL(change.id, NPM_REGISTRY_URL);
|
|
63497
63505
|
console.log(`Fetching metadata for ${change.id}: ${metadataUrl}`);
|
|
63498
|
-
|
|
63499
|
-
|
|
63500
|
-
|
|
63501
|
-
|
|
63502
|
-
|
|
63503
|
-
|
|
63504
|
-
|
|
63505
|
-
|
|
63506
|
-
|
|
63507
|
-
|
|
63506
|
+
const baseDelay = 1e3;
|
|
63507
|
+
const maxDelay = 8e3;
|
|
63508
|
+
let attempt = 0;
|
|
63509
|
+
const startTime = Date.now();
|
|
63510
|
+
while (Date.now() - startTime < MAX_PACKAGE_SERVER_LAG_MS) {
|
|
63511
|
+
try {
|
|
63512
|
+
const meta = await this.https("get", metadataUrl);
|
|
63513
|
+
const latestReplicaRev = parseSequentialRevision(meta._rev);
|
|
63514
|
+
change.doc = meta;
|
|
63515
|
+
if (latestReplicaRev >= latestChangesRev) {
|
|
63516
|
+
return change;
|
|
63517
|
+
}
|
|
63518
|
+
const delay = Math.floor(Math.random() * Math.min(baseDelay * Math.pow(2, attempt), maxDelay));
|
|
63519
|
+
console.log(`${change.id}: package _rev ${latestReplicaRev} < expected replication rev ${latestChangesRev}, retrying in ${delay} ms`);
|
|
63520
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
63521
|
+
attempt++;
|
|
63522
|
+
} catch (e4) {
|
|
63523
|
+
if (e4.message?.includes("HTTP 404")) {
|
|
63524
|
+
console.log(
|
|
63525
|
+
`Skipping ${change.id} because of HTTP 404 (Not Found) error`
|
|
63526
|
+
);
|
|
63527
|
+
return;
|
|
63528
|
+
}
|
|
63529
|
+
throw e4;
|
|
63508
63530
|
}
|
|
63509
|
-
throw e4;
|
|
63510
63531
|
}
|
|
63532
|
+
console.log(`Timeout reached for ${change.id}, replica may be stale`);
|
|
63533
|
+
return change;
|
|
63511
63534
|
}
|
|
63512
63535
|
async fetchAndFilterAllMetadata(changes) {
|
|
63513
63536
|
return (await Promise.all(
|
|
@@ -63608,6 +63631,14 @@ function isRetryableError(e4) {
|
|
|
63608
63631
|
async function sleep(ms) {
|
|
63609
63632
|
return new Promise((ok) => setTimeout(ok, ms));
|
|
63610
63633
|
}
|
|
63634
|
+
function parseSequentialRevision(rev) {
|
|
63635
|
+
return parseInt(rev.split("-")[0]);
|
|
63636
|
+
}
|
|
63637
|
+
function getMaxSequentialRevision(change) {
|
|
63638
|
+
return Math.max(
|
|
63639
|
+
...change.changes.map((change2) => parseSequentialRevision(change2.rev)).filter((num) => !isNaN(num))
|
|
63640
|
+
);
|
|
63641
|
+
}
|
|
63611
63642
|
function gunzip(readable) {
|
|
63612
63643
|
const gz = (0, import_zlib.createGunzip)();
|
|
63613
63644
|
readable.pipe(gz, { end: true });
|
|
@@ -63823,7 +63854,7 @@ async function handler(event, context) {
|
|
|
63823
63854
|
} = await loadFollowerPosition(stagingBucket, npm);
|
|
63824
63855
|
let writeKnownVersionsFile = didLoadVersionsFromLegacy;
|
|
63825
63856
|
let updatedMarker = initialMarker;
|
|
63826
|
-
let maxBatchProcessingTime =
|
|
63857
|
+
let maxBatchProcessingTime = 6e4;
|
|
63827
63858
|
let shouldContinue = true;
|
|
63828
63859
|
do {
|
|
63829
63860
|
await (0, import_aws_embedded_metrics.metricScope)((metrics) => async () => {
|