@rudderstack/integrations-lib 0.1.2 → 0.1.4
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/build/constants.d.ts +3 -0
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +5 -2
- package/build/network/clients/{axios.d.ts → axios_client.d.ts} +1 -1
- package/build/network/clients/axios_client.d.ts.map +1 -0
- package/build/network/clients/axios_client.js +197 -0
- package/build/network/clients/axios_client.test.d.ts +2 -0
- package/build/network/clients/axios_client.test.d.ts.map +1 -0
- package/build/network/clients/axios_client.test.js +231 -0
- package/build/network/factory.js +3 -3
- package/build/network/factory.test.js +4 -4
- package/build/utils/sem.d.ts +21 -1
- package/build/utils/sem.d.ts.map +1 -1
- package/build/utils/sem.js +52 -1
- package/package.json +1 -1
- package/build/network/clients/axios.d.ts.map +0 -1
- package/build/network/clients/axios.js +0 -197
- package/build/network/clients/axios.test.d.ts +0 -2
- package/build/network/clients/axios.test.d.ts.map +0 -1
- package/build/network/clients/axios.test.js +0 -231
package/build/constants.d.ts
CHANGED
|
@@ -93,4 +93,7 @@ export declare const GENERIC_MAPPING_CONFIG: {
|
|
|
93
93
|
zipcode: string[];
|
|
94
94
|
sessionId: string[];
|
|
95
95
|
};
|
|
96
|
+
export declare const MappedToDestinationKey = "context.mappedToDestination";
|
|
97
|
+
export declare const GENERIC_TRUE_VALUES: string[];
|
|
98
|
+
export declare const GENERIC_FALSE_VALUES: string[];
|
|
96
99
|
//# sourceMappingURL=constants.d.ts.map
|
package/build/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDlC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHlC,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDlC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHlC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AAEpE,eAAO,MAAM,mBAAmB,UAA0C,CAAC;AAC3E,eAAO,MAAM,oBAAoB,UAA6C,CAAC"}
|
package/build/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GENERIC_MAPPING_CONFIG = exports.NETWORK_STATUS_ERR_MAP = void 0;
|
|
3
|
+
exports.GENERIC_FALSE_VALUES = exports.GENERIC_TRUE_VALUES = exports.MappedToDestinationKey = exports.GENERIC_MAPPING_CONFIG = exports.NETWORK_STATUS_ERR_MAP = void 0;
|
|
4
4
|
exports.NETWORK_STATUS_ERR_MAP = {
|
|
5
5
|
EACCES: {
|
|
6
6
|
status: 400,
|
|
@@ -177,4 +177,7 @@ exports.GENERIC_MAPPING_CONFIG = {
|
|
|
177
177
|
],
|
|
178
178
|
sessionId: ['session_id', 'context.sessionId'],
|
|
179
179
|
};
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLHNCQUFzQixHQUFHO0lBQ3BDLE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLCtCQUErQjtLQUN6QztJQUNELFVBQVUsRUFBRTtRQUNWLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLHdDQUF3QztLQUNsRDtJQUNELFlBQVksRUFBRTtRQUNaLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLHNDQUFzQztLQUNoRDtJQUNELFVBQVUsRUFBRTtRQUNWLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLDBDQUEwQztLQUNwRDtJQUNELE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLHlCQUF5QjtLQUNuQztJQUNELE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLDRCQUE0QjtLQUN0QztJQUNELE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLDJDQUEyQztLQUNyRDtJQUNELE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLHVDQUF1QztLQUNqRDtJQUNELE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLDhCQUE4QjtLQUN4QztJQUNELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLHFDQUFxQztLQUMvQztJQUNELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLGtDQUFrQztLQUM1QztJQUNELEtBQUssRUFBRTtRQUNMLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLG9DQUFvQztLQUM5QztJQUNELEtBQUss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O0lBRUQsS0FBSyxFQUFFLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDO0lBQy9DLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLHdCQUF3QixDQUFDO0lBQ3JELE1BQU0sRUFBRSxDQUFDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQztJQUNsRCxJQUFJLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSw2QkFBNkIsQ0FBQztJQUU1RCxNQUFNLEVBQUU7UUFDTixlQUFlO1FBQ2YsdUJBQXVCO1FBQ3ZCLGtCQUFrQjtRQUNsQiwwQkFBMEI7UUFDMUIsbUJBQW1CO1FBQ25CLDJCQUEyQjtLQUM1QjtJQUNELE9BQU8sRUFBRTtRQUNQLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixtQkFBbUI7UUFDbkIsb0JBQW9CO1FBQ3BCLG1CQUFtQjtRQUNuQix3QkFBd0I7UUFDeEIseUJBQXlCO1FBQ3pCLG9CQUFvQjtRQUNwQix3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLDRCQUE0QjtRQUM1QiwyQkFBMkI7UUFDM0Isb0JBQW9CO1FBQ3BCLHdCQUF3QjtRQUN4Qix5QkFBeUI7UUFDekIsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQiw0QkFBNEI7UUFDNUIsMkJBQTJCO1FBQzNCLDRCQUE0QjtRQUM1QixnQ0FBZ0M7UUFDaEMsaUNBQWlDO1FBQ2pDLGdDQUFnQztRQUNoQyxtQ0FBbUM7UUFDbkMsb0NBQW9DO1FBQ3BDLG1DQUFtQztLQUNwQztJQUNELFNBQVMsRUFBRSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IE5FVFdPUktfU1RBVFVTX0VSUl9NQVAgPSB7XG4gIEVBQ0NFUzoge1xuICAgIHN0YXR1czogNDAwLFxuICAgIG1lc3NhZ2U6ICdbRUFDQ0VTXSA6OiBQZXJtaXNzaW9uIGRlbmllZCcsXG4gIH0sXG4gIEVBRERSSU5VU0U6IHtcbiAgICBzdGF0dXM6IDQwMCxcbiAgICBtZXNzYWdlOiAnW0VBRERSSU5VU0VdIDo6IEFkZHJlc3MgYWxyZWFkeSBpbiB1c2UnLFxuICB9LFxuICBFQ09OTlJFRlVTRUQ6IHtcbiAgICBzdGF0dXM6IDUwMCxcbiAgICBtZXNzYWdlOiAnW0VDT05OUkVGVVNFRF0gOjogQ29ubmVjdGlvbiByZWZ1c2VkJyxcbiAgfSxcbiAgRUNPTk5SRVNFVDoge1xuICAgIHN0YXR1czogNTAwLFxuICAgIG1lc3NhZ2U6ICdbRUNPTk5SRVNFVF0gOjogQ29ubmVjdGlvbiByZXNldCBieSBwZWVyJyxcbiAgfSxcbiAgRUVYSVNUOiB7XG4gICAgc3RhdHVzOiA0MDAsXG4gICAgbWVzc2FnZTogJ1tFRVhJU1RdIDo6IEZpbGUgZXhpc3RzJyxcbiAgfSxcbiAgRUlTRElSOiB7XG4gICAgc3RhdHVzOiA0MDAsXG4gICAgbWVzc2FnZTogJ1tFRVhJU1RdIDo6IElzIGEgZGlyZWN0b3J5JyxcbiAgfSxcbiAgRU1GSUxFOiB7XG4gICAgc3RhdHVzOiA0MDAsXG4gICAgbWVzc2FnZTogJ1tFTUZJTEVdIDo6IFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtJyxcbiAgfSxcbiAgRU5PRU5UOiB7XG4gICAgc3RhdHVzOiA0MDAsXG4gICAgbWVzc2FnZTogJ1tFTk9FTlRdIDo6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknLFxuICB9LFxuICBFTk9URElSOiB7XG4gICAgc3RhdHVzOiA0MDAsXG4gICAgbWVzc2FnZTogJ1tFTk9URElSXSA6OiBOb3QgYSBkaXJlY3RvcnknLFxuICB9LFxuICBFTk9URU1QVFk6IHtcbiAgICBzdGF0dXM6IDQwMCxcbiAgICBtZXNzYWdlOiAnW0VOT1RFTVBUWV0gOjogRGlyZWN0b3J5IG5vdCBlbXB0eSknLFxuICB9LFxuICBFTk9URk9VTkQ6IHtcbiAgICBzdGF0dXM6IDQwMCxcbiAgICBtZXNzYWdlOiAnW0VOT1RGT1VORF0gOjogRE5TIGxvb2t1cCBmYWlsZWQnLFxuICB9LFxuICBFUEVSTToge1xuICAgIHN0YXR1czogNDAwLFxuICAgIG1lc3NhZ2U6ICdbRVBFUk1dIDo6IE9wZXJhdGlvbiBub3QgcGVybWl0dGVkJyxcbiAgfSxcbiAgRVBJUEU6IHtcbiAgICBzdGF0dXM6IDQwMCxcbiAgICBtZXNzYWdlOiAnW0VQSVBFXSA6OiBCcm9rZW4gcGlwZScsXG4gIH0sXG4gIEVUSU1FRE9VVDoge1xuICAgIHN0YXR1czogNTAwLFxuICAgIG1lc3NhZ2U6ICdbRVRJTUVET1VUXSA6OiBPcGVyYXRpb24gdGltZWQgb3V0JyxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBHRU5FUklDX01BUFBJTkdfQ09ORklHID0ge1xuICBhZGRyZXNzOiBbJ3RyYWl0cy5hZGRyZXNzJywgJ2NvbnRleHQudHJhaXRzLmFkZHJlc3MnXSxcbiAgY3JlYXRlZEF0OiBbJ3RyYWl0cy5jcmVhdGVkQXQnLCAnY29udGV4dC50cmFpdHMuY3JlYXRlZEF0JywgJ3RpbWVzdGFtcCcsICdvcmlnaW5hbFRpbWVzdGFtcCddLFxuICBjcmVhdGVkQXRPbmx5OiBbJ3RyYWl0cy5jcmVhdGVkQXQnLCAnY29udGV4dC50cmFpdHMuY3JlYXRlZEF0J10sXG4gIGVtYWlsOiBbJ3RyYWl0cy5lbWFpbCcsICdjb250ZXh0LnRyYWl0cy5lbWFpbCcsICdwcm9wZXJ0aWVzLmVtYWlsJywgJ2NvbnRleHQuZXh0ZXJuYWxJZC4wLmlkJ10sXG4gIGVtYWlsT25seTogWyd0cmFpdHMuZW1haWwnLCAnY29udGV4dC50cmFpdHMuZW1haWwnLCAncHJvcGVydGllcy5lbWFpbCddLFxuICB0aW1lc3RhbXA6IFsndGltZXN0YW1wJywgJ29yaWdpbmFsVGltZXN0YW1wJ10sXG4gIGhpc3RvcmljYWxUaW1lc3RhbXA6IFsndGltZXN0YW1wJywgJ29yaWdpbmFsVGltZXN0YW1wJ10sXG4gIHRyYWl0czogWyd0cmFpdHMnLCAnY29udGV4dC50cmFpdHMnXSxcbiAgZ3JvdXBJZDogWydncm91cElkJywgJ3RyYWl0cy5ncm91cElkJ10sXG4gIGdyb3VwVHJhaXRzOiBbJ3RyYWl0cycsICdjb250ZXh0LnRyYWl0cyddLFxuICB1c2VySWQ6IFtcbiAgICAndXNlcklkJyxcbiAgICAndHJhaXRzLnVzZXJJZCcsXG4gICAgJ3RyYWl0cy5pZCcsXG4gICAgJ2NvbnRleHQudHJhaXRzLnVzZXJJZCcsXG4gICAgJ2NvbnRleHQudHJhaXRzLmlkJyxcbiAgICAnYW5vbnltb3VzSWQnLFxuICBdLFxuICB1c2VySWRPbmx5OiBbXG4gICAgJ3VzZXJJZCcsXG4gICAgJ3RyYWl0cy51c2VySWQnLFxuICAgICd0cmFpdHMuaWQnLFxuICAgICdjb250ZXh0LnRyYWl0cy51c2VySWQnLFxuICAgICdjb250ZXh0LnRyYWl0cy5pZCcsXG4gIF0sXG4gIG5hbWU6IFsndHJhaXRzLm5hbWUnLCAnY29udGV4dC50cmFpdHMubmFtZSddLFxuICB0aXRsZTogWyd0cmFpdHMudGl0bGUnLCAnY29udGV4dC50cmFpdHMudGl0bGUnXSxcbiAgZmlyc3ROYW1lOiBbXG4gICAgJ3RyYWl0cy5maXJzdE5hbWUnLFxuICAgICd0cmFpdHMuZmlyc3RuYW1lJyxcbiAgICAndHJhaXRzLmZpcnN0X25hbWUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5maXJzdE5hbWUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5maXJzdG5hbWUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5maXJzdF9uYW1lJyxcbiAgXSxcbiAgbGFzdE5hbWU6IFtcbiAgICAndHJhaXRzLmxhc3ROYW1lJyxcbiAgICAndHJhaXRzLmxhc3RuYW1lJyxcbiAgICAndHJhaXRzLmxhc3RfbmFtZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLmxhc3ROYW1lJyxcbiAgICAnY29udGV4dC50cmFpdHMubGFzdG5hbWUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5sYXN0X25hbWUnLFxuICBdLFxuICBtaWRkbGVOYW1lOiBbXG4gICAgJ3RyYWl0cy5taWRkbGVOYW1lJyxcbiAgICAndHJhaXRzLm1pZGRsZU5hbWUnLFxuICAgICd0cmFpdHMubWlkZGxlX25hbWUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5taWRkbGVOYW1lJyxcbiAgICAnY29udGV4dC50cmFpdHMubWlkZGxlTmFtZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLm1pZGRsZV9uYW1lJyxcbiAgXSxcbiAgZ2VuZGVyOiBbJ3RyYWl0cy5nZW5kZXInLCAnY29udGV4dC50cmFpdHMuZ2VuZGVyJ10sXG4gIHBob25lOiBbJ3RyYWl0cy5waG9uZScsICdjb250ZXh0LnRyYWl0cy5waG9uZScsICdwcm9wZXJ0aWVzLnBob25lJ10sXG4gIHBhZ2VUaXRsZTogWydjb250ZXh0LnBhZ2UudGl0bGUnLCAncHJvcGVydGllcy50aXRsZSddLFxuICBwYWdlVXJsOiBbJ2NvbnRleHQucGFnZS51cmwnLCAncHJvcGVydGllcy51cmwnXSxcbiAgcGFnZVBhdGg6IFsnY29udGV4dC5wYWdlLnBhdGgnLCAncHJvcGVydGllcy5wYXRoJ10sXG4gIHdlYnNpdGU6IFsndHJhaXRzLndlYnNpdGUnLCAnY29udGV4dC50cmFpdHMud2Vic2l0ZScsICdwcm9wZXJ0aWVzLndlYnNpdGUnXSxcbiAgR0FwYWdlVXJsOiBbJ3Byb3BlcnRpZXMudXJsJywgJ2NvbnRleHQucGFnZS51cmwnXSxcbiAgR0FwYWdlUmVmOiBbJ3Byb3BlcnRpZXMucmVmZXJyZXInLCAnY29udGV4dC5wYWdlLnJlZmVycmVyJ10sXG4gIEdBcGFnZVRpdGxlOiBbJ3Byb3BlcnRpZXMudGl0bGUnLCAnY29udGV4dC5wYWdlLnRpdGxlJ10sXG4gIEdBcGFnZVNlYXJjaDogWydwcm9wZXJ0aWVzLnNlYXJjaCcsICdjb250ZXh0LnBhZ2Uuc2VhcmNoJ10sXG4gIGJpcnRoZGF5OiBbXG4gICAgJ3RyYWl0cy5iaXJ0aGRheScsXG4gICAgJ2NvbnRleHQudHJhaXRzLmJpcnRoZGF5JyxcbiAgICAndHJhaXRzLmRhdGVPZkJpcnRoJyxcbiAgICAnY29udGV4dC50cmFpdHMuZGF0ZU9mQmlydGgnLFxuICAgICd0cmFpdHMuZGF0ZW9mYmlydGgnLFxuICAgICdjb250ZXh0LmRhdGVvZmJpcnRoJyxcbiAgICAndHJhaXRzLmRvYicsXG4gICAgJ2NvbnRleHQudHJhaXRzLmRvYicsXG4gICAgJ3RyYWl0cy5ET0InLFxuICAgICdjb250ZXh0LnRyYWl0cy5ET0InLFxuICBdLFxuXG4gIHN0YXRlOiBbJ3RyYWl0cy5zdGF0ZScsICdjb250ZXh0LnRyYWl0cy5zdGF0ZSddLFxuICBjb3VudHJ5OiBbJ3RyYWl0cy5jb3VudHJ5JywgJ2NvbnRleHQudHJhaXRzLmNvdW50cnknXSxcbiAgcmVnaW9uOiBbJ3RyYWl0cy5yZWdpb24nLCAnY29udGV4dC50cmFpdHMucmVnaW9uJ10sXG4gIGNpdHk6IFsndHJhaXRzLmFkZHJlc3MuY2l0eScsICdjb250ZXh0LnRyYWl0cy5hZGRyZXNzLmNpdHknXSxcblxuICBhdmF0YXI6IFtcbiAgICAndHJhaXRzLmF2YXRhcicsXG4gICAgJ2NvbnRleHQudHJhaXRzLmF2YXRhcicsXG4gICAgJ3RyYWl0cy5hdmF0YXJVUkwnLFxuICAgICdjb250ZXh0LnRyYWl0cy5hdmF0YXJVUkwnLFxuICAgICd0cmFpdHMuYXZhdGFyX1VSTCcsXG4gICAgJ2NvbnRleHQudHJhaXRzLmF2YXRhcl9VUkwnLFxuICBdLFxuICB6aXBjb2RlOiBbXG4gICAgJ3RyYWl0cy56aXAnLFxuICAgICd0cmFpdHMuemlwY29kZScsXG4gICAgJ3RyYWl0cy56aXBfY29kZScsXG4gICAgJ3RyYWl0cy56aXBDb2RlJyxcbiAgICAndHJhaXRzLnBvc3RhbGNvZGUnLFxuICAgICd0cmFpdHMucG9zdGFsX2NvZGUnLFxuICAgICd0cmFpdHMucG9zdGFsQ29kZScsXG4gICAgJ3RyYWl0cy5hZGRyZXNzLnppcGNvZGUnLFxuICAgICd0cmFpdHMuYWRkcmVzcy56aXBfY29kZScsXG4gICAgJ3RyYWl0cy5hZGRyZXNzLnppcCcsXG4gICAgJ3RyYWl0cy5hZGRyZXNzLnppcENvZGUnLFxuICAgICd0cmFpdHMuYWRkcmVzcy5wb3N0YWxjb2RlJyxcbiAgICAndHJhaXRzLmFkZHJlc3MucG9zdGFsX2NvZGUnLFxuICAgICd0cmFpdHMuYWRkcmVzcy5wb3N0YWxDb2RlJyxcbiAgICAnY29udGV4dC50cmFpdHMuemlwJyxcbiAgICAnY29udGV4dC50cmFpdHMuemlwY29kZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLnppcF9jb2RlJyxcbiAgICAnY29udGV4dC50cmFpdHMuemlwQ29kZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLnBvc3RhbGNvZGUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5wb3N0YWxfY29kZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLnBvc3RhbENvZGUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5hZGRyZXNzLnppcCcsXG4gICAgJ2NvbnRleHQudHJhaXRzLmFkZHJlc3MuemlwY29kZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLmFkZHJlc3MuemlwX2NvZGUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5hZGRyZXNzLnppcENvZGUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5hZGRyZXNzLnBvc3RhbGNvZGUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5hZGRyZXNzLnBvc3RhbF9jb2RlJyxcbiAgICAnY29udGV4dC50cmFpdHMuYWRkcmVzcy5wb3N0YWxDb2RlJyxcbiAgXSxcbiAgc2Vzc2lvbklkOiBbJ3Nlc3Npb25faWQnLCAnY29udGV4dC5zZXNzaW9uSWQnXSxcbn07XG4iXX0=
|
|
180
|
+
exports.MappedToDestinationKey = 'context.mappedToDestination';
|
|
181
|
+
exports.GENERIC_TRUE_VALUES = ['true', 'True', 'TRUE', 't', 'T', '1'];
|
|
182
|
+
exports.GENERIC_FALSE_VALUES = ['false', 'False', 'FALSE', 'f', 'F', '0'];
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLHNCQUFzQixHQUFHO0lBQ3BDLE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLCtCQUErQjtLQUN6QztJQUNELFVBQVUsRUFBRTtRQUNWLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLHdDQUF3QztLQUNsRDtJQUNELFlBQVksRUFBRTtRQUNaLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLHNDQUFzQztLQUNoRDtJQUNELFVBQVUsRUFBRTtRQUNWLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLDBDQUEwQztLQUNwRDtJQUNELE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLHlCQUF5QjtLQUNuQztJQUNELE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLDRCQUE0QjtLQUN0QztJQUNELE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLDJDQUEyQztLQUNyRDtJQUNELE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLHVDQUF1QztLQUNqRDtJQUNELE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLDhCQUE4QjtLQUN4QztJQUNELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLHFDQUFxQztLQUMvQztJQUNELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLGtDQUFrQztLQUM1QztJQUNELEtBQUssRUFBRTtRQUNMLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLG9DQUFvQztLQUM5QztJQUNELEtBQUss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LEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBORVRXT1JLX1NUQVRVU19FUlJfTUFQID0ge1xuICBFQUNDRVM6IHtcbiAgICBzdGF0dXM6IDQwMCxcbiAgICBtZXNzYWdlOiAnW0VBQ0NFU10gOjogUGVybWlzc2lvbiBkZW5pZWQnLFxuICB9LFxuICBFQUREUklOVVNFOiB7XG4gICAgc3RhdHVzOiA0MDAsXG4gICAgbWVzc2FnZTogJ1tFQUREUklOVVNFXSA6OiBBZGRyZXNzIGFscmVhZHkgaW4gdXNlJyxcbiAgfSxcbiAgRUNPTk5SRUZVU0VEOiB7XG4gICAgc3RhdHVzOiA1MDAsXG4gICAgbWVzc2FnZTogJ1tFQ09OTlJFRlVTRURdIDo6IENvbm5lY3Rpb24gcmVmdXNlZCcsXG4gIH0sXG4gIEVDT05OUkVTRVQ6IHtcbiAgICBzdGF0dXM6IDUwMCxcbiAgICBtZXNzYWdlOiAnW0VDT05OUkVTRVRdIDo6IENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcicsXG4gIH0sXG4gIEVFWElTVDoge1xuICAgIHN0YXR1czogNDAwLFxuICAgIG1lc3NhZ2U6ICdbRUVYSVNUXSA6OiBGaWxlIGV4aXN0cycsXG4gIH0sXG4gIEVJU0RJUjoge1xuICAgIHN0YXR1czogNDAwLFxuICAgIG1lc3NhZ2U6ICdbRUVYSVNUXSA6OiBJcyBhIGRpcmVjdG9yeScsXG4gIH0sXG4gIEVNRklMRToge1xuICAgIHN0YXR1czogNDAwLFxuICAgIG1lc3NhZ2U6ICdbRU1GSUxFXSA6OiBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbScsXG4gIH0sXG4gIEVOT0VOVDoge1xuICAgIHN0YXR1czogNDAwLFxuICAgIG1lc3NhZ2U6ICdbRU5PRU5UXSA6OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JyxcbiAgfSxcbiAgRU5PVERJUjoge1xuICAgIHN0YXR1czogNDAwLFxuICAgIG1lc3NhZ2U6ICdbRU5PVERJUl0gOjogTm90IGEgZGlyZWN0b3J5JyxcbiAgfSxcbiAgRU5PVEVNUFRZOiB7XG4gICAgc3RhdHVzOiA0MDAsXG4gICAgbWVzc2FnZTogJ1tFTk9URU1QVFldIDo6IERpcmVjdG9yeSBub3QgZW1wdHkpJyxcbiAgfSxcbiAgRU5PVEZPVU5EOiB7XG4gICAgc3RhdHVzOiA0MDAsXG4gICAgbWVzc2FnZTogJ1tFTk9URk9VTkRdIDo6IEROUyBsb29rdXAgZmFpbGVkJyxcbiAgfSxcbiAgRVBFUk06IHtcbiAgICBzdGF0dXM6IDQwMCxcbiAgICBtZXNzYWdlOiAnW0VQRVJNXSA6OiBPcGVyYXRpb24gbm90IHBlcm1pdHRlZCcsXG4gIH0sXG4gIEVQSVBFOiB7XG4gICAgc3RhdHVzOiA0MDAsXG4gICAgbWVzc2FnZTogJ1tFUElQRV0gOjogQnJva2VuIHBpcGUnLFxuICB9LFxuICBFVElNRURPVVQ6IHtcbiAgICBzdGF0dXM6IDUwMCxcbiAgICBtZXNzYWdlOiAnW0VUSU1FRE9VVF0gOjogT3BlcmF0aW9uIHRpbWVkIG91dCcsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgR0VORVJJQ19NQVBQSU5HX0NPTkZJRyA9IHtcbiAgYWRkcmVzczogWyd0cmFpdHMuYWRkcmVzcycsICdjb250ZXh0LnRyYWl0cy5hZGRyZXNzJ10sXG4gIGNyZWF0ZWRBdDogWyd0cmFpdHMuY3JlYXRlZEF0JywgJ2NvbnRleHQudHJhaXRzLmNyZWF0ZWRBdCcsICd0aW1lc3RhbXAnLCAnb3JpZ2luYWxUaW1lc3RhbXAnXSxcbiAgY3JlYXRlZEF0T25seTogWyd0cmFpdHMuY3JlYXRlZEF0JywgJ2NvbnRleHQudHJhaXRzLmNyZWF0ZWRBdCddLFxuICBlbWFpbDogWyd0cmFpdHMuZW1haWwnLCAnY29udGV4dC50cmFpdHMuZW1haWwnLCAncHJvcGVydGllcy5lbWFpbCcsICdjb250ZXh0LmV4dGVybmFsSWQuMC5pZCddLFxuICBlbWFpbE9ubHk6IFsndHJhaXRzLmVtYWlsJywgJ2NvbnRleHQudHJhaXRzLmVtYWlsJywgJ3Byb3BlcnRpZXMuZW1haWwnXSxcbiAgdGltZXN0YW1wOiBbJ3RpbWVzdGFtcCcsICdvcmlnaW5hbFRpbWVzdGFtcCddLFxuICBoaXN0b3JpY2FsVGltZXN0YW1wOiBbJ3RpbWVzdGFtcCcsICdvcmlnaW5hbFRpbWVzdGFtcCddLFxuICB0cmFpdHM6IFsndHJhaXRzJywgJ2NvbnRleHQudHJhaXRzJ10sXG4gIGdyb3VwSWQ6IFsnZ3JvdXBJZCcsICd0cmFpdHMuZ3JvdXBJZCddLFxuICBncm91cFRyYWl0czogWyd0cmFpdHMnLCAnY29udGV4dC50cmFpdHMnXSxcbiAgdXNlcklkOiBbXG4gICAgJ3VzZXJJZCcsXG4gICAgJ3RyYWl0cy51c2VySWQnLFxuICAgICd0cmFpdHMuaWQnLFxuICAgICdjb250ZXh0LnRyYWl0cy51c2VySWQnLFxuICAgICdjb250ZXh0LnRyYWl0cy5pZCcsXG4gICAgJ2Fub255bW91c0lkJyxcbiAgXSxcbiAgdXNlcklkT25seTogW1xuICAgICd1c2VySWQnLFxuICAgICd0cmFpdHMudXNlcklkJyxcbiAgICAndHJhaXRzLmlkJyxcbiAgICAnY29udGV4dC50cmFpdHMudXNlcklkJyxcbiAgICAnY29udGV4dC50cmFpdHMuaWQnLFxuICBdLFxuICBuYW1lOiBbJ3RyYWl0cy5uYW1lJywgJ2NvbnRleHQudHJhaXRzLm5hbWUnXSxcbiAgdGl0bGU6IFsndHJhaXRzLnRpdGxlJywgJ2NvbnRleHQudHJhaXRzLnRpdGxlJ10sXG4gIGZpcnN0TmFtZTogW1xuICAgICd0cmFpdHMuZmlyc3ROYW1lJyxcbiAgICAndHJhaXRzLmZpcnN0bmFtZScsXG4gICAgJ3RyYWl0cy5maXJzdF9uYW1lJyxcbiAgICAnY29udGV4dC50cmFpdHMuZmlyc3ROYW1lJyxcbiAgICAnY29udGV4dC50cmFpdHMuZmlyc3RuYW1lJyxcbiAgICAnY29udGV4dC50cmFpdHMuZmlyc3RfbmFtZScsXG4gIF0sXG4gIGxhc3ROYW1lOiBbXG4gICAgJ3RyYWl0cy5sYXN0TmFtZScsXG4gICAgJ3RyYWl0cy5sYXN0bmFtZScsXG4gICAgJ3RyYWl0cy5sYXN0X25hbWUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5sYXN0TmFtZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLmxhc3RuYW1lJyxcbiAgICAnY29udGV4dC50cmFpdHMubGFzdF9uYW1lJyxcbiAgXSxcbiAgbWlkZGxlTmFtZTogW1xuICAgICd0cmFpdHMubWlkZGxlTmFtZScsXG4gICAgJ3RyYWl0cy5taWRkbGVOYW1lJyxcbiAgICAndHJhaXRzLm1pZGRsZV9uYW1lJyxcbiAgICAnY29udGV4dC50cmFpdHMubWlkZGxlTmFtZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLm1pZGRsZU5hbWUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5taWRkbGVfbmFtZScsXG4gIF0sXG4gIGdlbmRlcjogWyd0cmFpdHMuZ2VuZGVyJywgJ2NvbnRleHQudHJhaXRzLmdlbmRlciddLFxuICBwaG9uZTogWyd0cmFpdHMucGhvbmUnLCAnY29udGV4dC50cmFpdHMucGhvbmUnLCAncHJvcGVydGllcy5waG9uZSddLFxuICBwYWdlVGl0bGU6IFsnY29udGV4dC5wYWdlLnRpdGxlJywgJ3Byb3BlcnRpZXMudGl0bGUnXSxcbiAgcGFnZVVybDogWydjb250ZXh0LnBhZ2UudXJsJywgJ3Byb3BlcnRpZXMudXJsJ10sXG4gIHBhZ2VQYXRoOiBbJ2NvbnRleHQucGFnZS5wYXRoJywgJ3Byb3BlcnRpZXMucGF0aCddLFxuICB3ZWJzaXRlOiBbJ3RyYWl0cy53ZWJzaXRlJywgJ2NvbnRleHQudHJhaXRzLndlYnNpdGUnLCAncHJvcGVydGllcy53ZWJzaXRlJ10sXG4gIEdBcGFnZVVybDogWydwcm9wZXJ0aWVzLnVybCcsICdjb250ZXh0LnBhZ2UudXJsJ10sXG4gIEdBcGFnZVJlZjogWydwcm9wZXJ0aWVzLnJlZmVycmVyJywgJ2NvbnRleHQucGFnZS5yZWZlcnJlciddLFxuICBHQXBhZ2VUaXRsZTogWydwcm9wZXJ0aWVzLnRpdGxlJywgJ2NvbnRleHQucGFnZS50aXRsZSddLFxuICBHQXBhZ2VTZWFyY2g6IFsncHJvcGVydGllcy5zZWFyY2gnLCAnY29udGV4dC5wYWdlLnNlYXJjaCddLFxuICBiaXJ0aGRheTogW1xuICAgICd0cmFpdHMuYmlydGhkYXknLFxuICAgICdjb250ZXh0LnRyYWl0cy5iaXJ0aGRheScsXG4gICAgJ3RyYWl0cy5kYXRlT2ZCaXJ0aCcsXG4gICAgJ2NvbnRleHQudHJhaXRzLmRhdGVPZkJpcnRoJyxcbiAgICAndHJhaXRzLmRhdGVvZmJpcnRoJyxcbiAgICAnY29udGV4dC5kYXRlb2ZiaXJ0aCcsXG4gICAgJ3RyYWl0cy5kb2InLFxuICAgICdjb250ZXh0LnRyYWl0cy5kb2InLFxuICAgICd0cmFpdHMuRE9CJyxcbiAgICAnY29udGV4dC50cmFpdHMuRE9CJyxcbiAgXSxcblxuICBzdGF0ZTogWyd0cmFpdHMuc3RhdGUnLCAnY29udGV4dC50cmFpdHMuc3RhdGUnXSxcbiAgY291bnRyeTogWyd0cmFpdHMuY291bnRyeScsICdjb250ZXh0LnRyYWl0cy5jb3VudHJ5J10sXG4gIHJlZ2lvbjogWyd0cmFpdHMucmVnaW9uJywgJ2NvbnRleHQudHJhaXRzLnJlZ2lvbiddLFxuICBjaXR5OiBbJ3RyYWl0cy5hZGRyZXNzLmNpdHknLCAnY29udGV4dC50cmFpdHMuYWRkcmVzcy5jaXR5J10sXG5cbiAgYXZhdGFyOiBbXG4gICAgJ3RyYWl0cy5hdmF0YXInLFxuICAgICdjb250ZXh0LnRyYWl0cy5hdmF0YXInLFxuICAgICd0cmFpdHMuYXZhdGFyVVJMJyxcbiAgICAnY29udGV4dC50cmFpdHMuYXZhdGFyVVJMJyxcbiAgICAndHJhaXRzLmF2YXRhcl9VUkwnLFxuICAgICdjb250ZXh0LnRyYWl0cy5hdmF0YXJfVVJMJyxcbiAgXSxcbiAgemlwY29kZTogW1xuICAgICd0cmFpdHMuemlwJyxcbiAgICAndHJhaXRzLnppcGNvZGUnLFxuICAgICd0cmFpdHMuemlwX2NvZGUnLFxuICAgICd0cmFpdHMuemlwQ29kZScsXG4gICAgJ3RyYWl0cy5wb3N0YWxjb2RlJyxcbiAgICAndHJhaXRzLnBvc3RhbF9jb2RlJyxcbiAgICAndHJhaXRzLnBvc3RhbENvZGUnLFxuICAgICd0cmFpdHMuYWRkcmVzcy56aXBjb2RlJyxcbiAgICAndHJhaXRzLmFkZHJlc3MuemlwX2NvZGUnLFxuICAgICd0cmFpdHMuYWRkcmVzcy56aXAnLFxuICAgICd0cmFpdHMuYWRkcmVzcy56aXBDb2RlJyxcbiAgICAndHJhaXRzLmFkZHJlc3MucG9zdGFsY29kZScsXG4gICAgJ3RyYWl0cy5hZGRyZXNzLnBvc3RhbF9jb2RlJyxcbiAgICAndHJhaXRzLmFkZHJlc3MucG9zdGFsQ29kZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLnppcCcsXG4gICAgJ2NvbnRleHQudHJhaXRzLnppcGNvZGUnLFxuICAgICdjb250ZXh0LnRyYWl0cy56aXBfY29kZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLnppcENvZGUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5wb3N0YWxjb2RlJyxcbiAgICAnY29udGV4dC50cmFpdHMucG9zdGFsX2NvZGUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5wb3N0YWxDb2RlJyxcbiAgICAnY29udGV4dC50cmFpdHMuYWRkcmVzcy56aXAnLFxuICAgICdjb250ZXh0LnRyYWl0cy5hZGRyZXNzLnppcGNvZGUnLFxuICAgICdjb250ZXh0LnRyYWl0cy5hZGRyZXNzLnppcF9jb2RlJyxcbiAgICAnY29udGV4dC50cmFpdHMuYWRkcmVzcy56aXBDb2RlJyxcbiAgICAnY29udGV4dC50cmFpdHMuYWRkcmVzcy5wb3N0YWxjb2RlJyxcbiAgICAnY29udGV4dC50cmFpdHMuYWRkcmVzcy5wb3N0YWxfY29kZScsXG4gICAgJ2NvbnRleHQudHJhaXRzLmFkZHJlc3MucG9zdGFsQ29kZScsXG4gIF0sXG4gIHNlc3Npb25JZDogWydzZXNzaW9uX2lkJywgJ2NvbnRleHQuc2Vzc2lvbklkJ10sXG59O1xuXG5leHBvcnQgY29uc3QgTWFwcGVkVG9EZXN0aW5hdGlvbktleSA9ICdjb250ZXh0Lm1hcHBlZFRvRGVzdGluYXRpb24nO1xuXG5leHBvcnQgY29uc3QgR0VORVJJQ19UUlVFX1ZBTFVFUyA9IFsndHJ1ZScsICdUcnVlJywgJ1RSVUUnLCAndCcsICdUJywgJzEnXTtcbmV4cG9ydCBjb25zdCBHRU5FUklDX0ZBTFNFX1ZBTFVFUyA9IFsnZmFsc2UnLCAnRmFsc2UnLCAnRkFMU0UnLCAnZicsICdGJywgJzAnXTsiXX0=
|
|
@@ -35,4 +35,4 @@ export declare class AxiosClient implements HttpClient {
|
|
|
35
35
|
patch<T>(url: string, data?: any, options?: AxiosRequestConfig, responseParser?: ResponseParser<T>): Promise<ApiResponse<T>>;
|
|
36
36
|
delete<T>(url: string, options?: AxiosRequestConfig, responseParser?: ResponseParser<T>): Promise<ApiResponse<T>>;
|
|
37
37
|
}
|
|
38
|
-
//# sourceMappingURL=
|
|
38
|
+
//# sourceMappingURL=axios_client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axios_client.d.ts","sourceRoot":"","sources":["../../../src/network/clients/axios_client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,kBAAkB,EAA6B,MAAM,OAAO,CAAC;AAI7E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGlE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,WAAY,YAAW,UAAU;IAC5C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,OAAO,CAAC,EAAE,kBAAkB;YAoB1B,WAAW;IAoEZ,GAAG,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAWb,IAAI,CAAC,CAAC,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAYb,GAAG,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAYb,KAAK,CAAC,CAAC,EAClB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAYb,MAAM,CAAC,CAAC,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAY3B"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.AxiosClient = void 0;
|
|
30
|
+
const axios_1 = __importStar(require("axios"));
|
|
31
|
+
const http_1 = __importDefault(require("http"));
|
|
32
|
+
const https_1 = __importDefault(require("https"));
|
|
33
|
+
const constants_1 = require("../../constants");
|
|
34
|
+
const utils_1 = require("../../utils");
|
|
35
|
+
/**
|
|
36
|
+
* A wrapper around axios to make http requests
|
|
37
|
+
*
|
|
38
|
+
* @class AxiosClient
|
|
39
|
+
* @classdesc
|
|
40
|
+
* The `AxiosClient` class is a wrapper around the axios library that provides a simplified interface for making HTTP requests. It handles various types of errors and provides a consistent response format.
|
|
41
|
+
*
|
|
42
|
+
* @param {AxiosRequestConfig} options - The default options for the http client
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* const axiosClient = new AxiosClient({ timeout: 1000 * 10 });
|
|
46
|
+
* const response = await axiosClient.post("https://example.com", { foo: "bar" });
|
|
47
|
+
* if (response.type === "success") {
|
|
48
|
+
* console.log(response.statusCode);
|
|
49
|
+
* console.log(response.responseBody);
|
|
50
|
+
* } else if (response.type === "application-error") {
|
|
51
|
+
* console.log(response.statusCode);
|
|
52
|
+
* console.log(response.message);
|
|
53
|
+
* console.log(response.responseBody);
|
|
54
|
+
* } else if (response.type === "client-error") {
|
|
55
|
+
* console.log(response.statusCode);
|
|
56
|
+
* console.log(response.message);
|
|
57
|
+
* }
|
|
58
|
+
*/
|
|
59
|
+
class AxiosClient {
|
|
60
|
+
constructor(options) {
|
|
61
|
+
const defaultOptions = {
|
|
62
|
+
timeout: 1000 * 10,
|
|
63
|
+
// `withCredentials` indicates whether or not cross-site Access-Control requests should be made using credentials
|
|
64
|
+
withCredentials: false,
|
|
65
|
+
// `responseEncoding` indicates encoding to use for decoding responses (Node.js only),
|
|
66
|
+
responseEncoding: 'utf8',
|
|
67
|
+
// `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed,
|
|
68
|
+
maxBodyLength: 1000 * 1000 * 10,
|
|
69
|
+
// `maxRedirects` defines the maximum number of redirects to follow in node.js,
|
|
70
|
+
maxRedirects: 5,
|
|
71
|
+
// `httpAgent` and `httpsAgent` define a custom agent to be used when performing http
|
|
72
|
+
httpAgent: new http_1.default.Agent({ keepAlive: true }),
|
|
73
|
+
// and https requests, respectively, in node.js. This allows options to be added like `keepAlive` that are not enabled by default.
|
|
74
|
+
httpsAgent: new https_1.default.Agent({ keepAlive: true }),
|
|
75
|
+
};
|
|
76
|
+
this.options = { ...defaultOptions, ...options };
|
|
77
|
+
this.instance = axios_1.default.create(this.options);
|
|
78
|
+
}
|
|
79
|
+
async makeRequest(config, responseParser) {
|
|
80
|
+
let output;
|
|
81
|
+
try {
|
|
82
|
+
const requestConfig = config;
|
|
83
|
+
const response = await this.instance.request(requestConfig);
|
|
84
|
+
const { status, data, headers } = response;
|
|
85
|
+
if (responseParser) {
|
|
86
|
+
try {
|
|
87
|
+
const parsedData = responseParser(data);
|
|
88
|
+
output = {
|
|
89
|
+
type: 'success',
|
|
90
|
+
statusCode: status,
|
|
91
|
+
responseBody: parsedData,
|
|
92
|
+
headers,
|
|
93
|
+
};
|
|
94
|
+
return output;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
const unknownError = error;
|
|
98
|
+
return {
|
|
99
|
+
type: 'client-error',
|
|
100
|
+
statusCode: unknownError['status'] || 500,
|
|
101
|
+
message: `Failed to parse response data: ${unknownError.message}`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return { type: 'success', statusCode: status, responseBody: data, headers };
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (error instanceof axios_1.AxiosError) {
|
|
109
|
+
const axiosError = error;
|
|
110
|
+
if (axiosError.response) {
|
|
111
|
+
const { response } = axiosError;
|
|
112
|
+
return {
|
|
113
|
+
type: 'application-error',
|
|
114
|
+
statusCode: response.status,
|
|
115
|
+
message: response.statusText,
|
|
116
|
+
responseBody: response.data,
|
|
117
|
+
headers: response.headers,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (axiosError.code) {
|
|
121
|
+
const resp = constants_1.NETWORK_STATUS_ERR_MAP[axiosError.code];
|
|
122
|
+
if (!resp) {
|
|
123
|
+
return {
|
|
124
|
+
type: 'client-error',
|
|
125
|
+
statusCode: 500,
|
|
126
|
+
message: `Unknown Error:${axiosError.message}`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
type: 'client-error',
|
|
131
|
+
statusCode: resp.status,
|
|
132
|
+
message: resp.message,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const unknownError = error;
|
|
137
|
+
const status = 500;
|
|
138
|
+
const message = unknownError.message || 'Unknown Error';
|
|
139
|
+
return { type: 'client-error', statusCode: status, message };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async get(url, options, responseParser) {
|
|
143
|
+
let config = {
|
|
144
|
+
method: 'get',
|
|
145
|
+
url: url,
|
|
146
|
+
};
|
|
147
|
+
if ((0, utils_1.isNotEmpty)(options)) {
|
|
148
|
+
config = { ...config, ...options };
|
|
149
|
+
}
|
|
150
|
+
return this.makeRequest(config, responseParser);
|
|
151
|
+
}
|
|
152
|
+
async post(url, data, options, responseParser) {
|
|
153
|
+
let config = {
|
|
154
|
+
method: 'post',
|
|
155
|
+
url: url,
|
|
156
|
+
data,
|
|
157
|
+
};
|
|
158
|
+
if ((0, utils_1.isNotEmpty)(options)) {
|
|
159
|
+
config = { ...config, ...options };
|
|
160
|
+
}
|
|
161
|
+
return this.makeRequest(config, responseParser);
|
|
162
|
+
}
|
|
163
|
+
async put(url, data, options, responseParser) {
|
|
164
|
+
let config = {
|
|
165
|
+
method: 'put',
|
|
166
|
+
url: url,
|
|
167
|
+
data,
|
|
168
|
+
};
|
|
169
|
+
if ((0, utils_1.isNotEmpty)(options)) {
|
|
170
|
+
config = { ...config, ...options };
|
|
171
|
+
}
|
|
172
|
+
return this.makeRequest(config, responseParser);
|
|
173
|
+
}
|
|
174
|
+
async patch(url, data, options, responseParser) {
|
|
175
|
+
let config = {
|
|
176
|
+
method: 'patch',
|
|
177
|
+
url: url,
|
|
178
|
+
data,
|
|
179
|
+
};
|
|
180
|
+
if ((0, utils_1.isNotEmpty)(options)) {
|
|
181
|
+
config = { ...config, ...options };
|
|
182
|
+
}
|
|
183
|
+
return this.makeRequest(config, responseParser);
|
|
184
|
+
}
|
|
185
|
+
async delete(url, options, responseParser) {
|
|
186
|
+
let config = {
|
|
187
|
+
method: 'delete',
|
|
188
|
+
url: url,
|
|
189
|
+
};
|
|
190
|
+
if ((0, utils_1.isNotEmpty)(options)) {
|
|
191
|
+
config = { ...config, ...options };
|
|
192
|
+
}
|
|
193
|
+
return this.makeRequest(config, responseParser);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.AxiosClient = AxiosClient;
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpb3NfY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25ldHdvcmsvY2xpZW50cy9heGlvc19jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBNkU7QUFDN0UsZ0RBQXdCO0FBQ3hCLGtEQUEwQjtBQUMxQiwrQ0FBeUQ7QUFFekQsdUNBQXlDO0FBRXpDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsV0FBVztJQUl0QixZQUFZLE9BQTRCO1FBQ3RDLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLEdBQUcsRUFBRTtZQUNsQixpSEFBaUg7WUFDakgsZUFBZSxFQUFFLEtBQUs7WUFDdEIsc0ZBQXNGO1lBQ3RGLGdCQUFnQixFQUFFLE1BQU07WUFDeEIsd0dBQXdHO1lBQ3hHLGFBQWEsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7WUFDL0IsK0VBQStFO1lBQy9FLFlBQVksRUFBRSxDQUFDO1lBQ2YscUZBQXFGO1lBQ3JGLFNBQVMsRUFBRSxJQUFJLGNBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDOUMsa0lBQWtJO1lBQ2xJLFVBQVUsRUFBRSxJQUFJLGVBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDakQsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXLENBQ3ZCLE1BQTBCLEVBQzFCLGNBQWtDO1FBRWxDLElBQUksTUFBc0IsQ0FBQztRQUMz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RyxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztTQUNwQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBSSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQ2pCLEdBQVcsRUFDWCxPQUE0QixFQUM1QixjQUFrQztRQUVsQyxJQUFJLE1BQU0sR0FBdUI7WUFDL0IsTUFBTSxFQUFFLFFBQVE7WUFDaEIsR0FBRyxFQUFFLEdBQUc7U0FDVCxDQUFDO1FBQ0YsSUFBSSxJQUFBLGtCQUFVLEVBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztTQUNwQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBSSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUdGO0FBOUtELGtDQThLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcywgeyBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zRXJyb3IsIEF4aW9zSW5zdGFuY2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgeyBORVRXT1JLX1NUQVRVU19FUlJfTUFQIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBIdHRwQ2xpZW50LCBSZXNwb25zZVBhcnNlciB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOb3RFbXB0eSB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIGF4aW9zIHRvIG1ha2UgaHR0cCByZXF1ZXN0c1xuICpcbiAqIEBjbGFzcyBBeGlvc0NsaWVudFxuICogQGNsYXNzZGVzY1xuICogVGhlIGBBeGlvc0NsaWVudGAgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgYXhpb3MgbGlicmFyeSB0aGF0IHByb3ZpZGVzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgZm9yIG1ha2luZyBIVFRQIHJlcXVlc3RzLiBJdCBoYW5kbGVzIHZhcmlvdXMgdHlwZXMgb2YgZXJyb3JzIGFuZCBwcm92aWRlcyBhIGNvbnNpc3RlbnQgcmVzcG9uc2UgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7QXhpb3NSZXF1ZXN0Q29uZmlnfSBvcHRpb25zIC0gVGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGh0dHAgY2xpZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGF4aW9zQ2xpZW50ID0gbmV3IEF4aW9zQ2xpZW50KHsgdGltZW91dDogMTAwMCAqIDEwIH0pO1xuICogY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0NsaWVudC5wb3N0KFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiLCB7IGZvbzogXCJiYXJcIiB9KTtcbiAqIGlmIChyZXNwb25zZS50eXBlID09PSBcInN1Y2Nlc3NcIikge1xuICogICBjb25zb2xlLmxvZyhyZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAqICAgY29uc29sZS5sb2cocmVzcG9uc2UucmVzcG9uc2VCb2R5KTtcbiAqIH0gZWxzZSBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi1lcnJvclwiKSB7XG4gKiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICogICBjb25zb2xlLmxvZyhyZXNwb25zZS5tZXNzYWdlKTtcbiAqICAgY29uc29sZS5sb2cocmVzcG9uc2UucmVzcG9uc2VCb2R5KTtcbiAqIH0gZWxzZSBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJjbGllbnQtZXJyb3JcIikge1xuICogICBjb25zb2xlLmxvZyhyZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAqICAgY29uc29sZS5sb2cocmVzcG9uc2UubWVzc2FnZSk7XG4gKiB9XG4gKi9cbmV4cG9ydCBjbGFzcyBBeGlvc0NsaWVudCBpbXBsZW1lbnRzIEh0dHBDbGllbnQge1xuICBwcml2YXRlIG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZztcbiAgcHJpdmF0ZSBpbnN0YW5jZTogQXhpb3NJbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICB0aW1lb3V0OiAxMDAwICogMTAsXG4gICAgICAvLyBgd2l0aENyZWRlbnRpYWxzYCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgY3Jvc3Mtc2l0ZSBBY2Nlc3MtQ29udHJvbCByZXF1ZXN0cyBzaG91bGQgYmUgbWFkZSB1c2luZyBjcmVkZW50aWFsc1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICAgIC8vIGByZXNwb25zZUVuY29kaW5nYCBpbmRpY2F0ZXMgZW5jb2RpbmcgdG8gdXNlIGZvciBkZWNvZGluZyByZXNwb25zZXMgKE5vZGUuanMgb25seSksXG4gICAgICByZXNwb25zZUVuY29kaW5nOiAndXRmOCcsXG4gICAgICAvLyBgbWF4Qm9keUxlbmd0aGAgKE5vZGUgb25seSBvcHRpb24pIGRlZmluZXMgdGhlIG1heCBzaXplIG9mIHRoZSBodHRwIHJlcXVlc3QgY29udGVudCBpbiBieXRlcyBhbGxvd2VkLFxuICAgICAgbWF4Qm9keUxlbmd0aDogMTAwMCAqIDEwMDAgKiAxMCxcbiAgICAgIC8vIGBtYXhSZWRpcmVjdHNgIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0cyB0byBmb2xsb3cgaW4gbm9kZS5qcyxcbiAgICAgIG1heFJlZGlyZWN0czogNSxcbiAgICAgIC8vIGBodHRwQWdlbnRgIGFuZCBgaHR0cHNBZ2VudGAgZGVmaW5lIGEgY3VzdG9tIGFnZW50IHRvIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIGh0dHBcbiAgICAgIGh0dHBBZ2VudDogbmV3IGh0dHAuQWdlbnQoeyBrZWVwQWxpdmU6IHRydWUgfSksXG4gICAgICAvLyBhbmQgaHR0cHMgcmVxdWVzdHMsIHJlc3BlY3RpdmVseSwgaW4gbm9kZS5qcy4gVGhpcyBhbGxvd3Mgb3B0aW9ucyB0byBiZSBhZGRlZCBsaWtlIGBrZWVwQWxpdmVgIHRoYXQgYXJlIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuXG4gICAgICBodHRwc0FnZW50OiBuZXcgaHR0cHMuQWdlbnQoeyBrZWVwQWxpdmU6IHRydWUgfSksXG4gICAgfTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgdGhpcy5pbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh0aGlzLm9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtYWtlUmVxdWVzdDxUPihcbiAgICBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyxcbiAgICByZXNwb25zZVBhcnNlcj86IFJlc3BvbnNlUGFyc2VyPFQ+LFxuICApOiBQcm9taXNlPEFwaVJlc3BvbnNlPFQ+PiB7XG4gICAgbGV0IG91dHB1dDogQXBpUmVzcG9uc2U8VD47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RDb25maWcgPSBjb25maWc7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaW5zdGFuY2UucmVxdWVzdChyZXF1ZXN0Q29uZmlnKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzLCBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcblxuICAgICAgaWYgKHJlc3BvbnNlUGFyc2VyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHJlc3BvbnNlUGFyc2VyKGRhdGEpO1xuICAgICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHN0YXR1cyxcbiAgICAgICAgICAgIHJlc3BvbnNlQm9keTogcGFyc2VkRGF0YSxcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHVua25vd25FcnJvciA9IGVycm9yIGFzIEVycm9yO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnY2xpZW50LWVycm9yJyxcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHVua25vd25FcnJvclsnc3RhdHVzJ10gfHwgNTAwLFxuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBwYXJzZSByZXNwb25zZSBkYXRhOiAke3Vua25vd25FcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3N1Y2Nlc3MnLCBzdGF0dXNDb2RlOiBzdGF0dXMsIHJlc3BvbnNlQm9keTogZGF0YSwgaGVhZGVycyB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBeGlvc0Vycm9yKSB7XG4gICAgICAgIGNvbnN0IGF4aW9zRXJyb3IgPSBlcnJvciBhcyBBeGlvc0Vycm9yO1xuICAgICAgICBpZiAoYXhpb3NFcnJvci5yZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGF4aW9zRXJyb3I7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi1lcnJvcicsXG4gICAgICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgcmVzcG9uc2VCb2R5OiByZXNwb25zZS5kYXRhLFxuICAgICAgICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChheGlvc0Vycm9yLmNvZGUpIHtcbiAgICAgICAgICBjb25zdCByZXNwID0gTkVUV09SS19TVEFUVVNfRVJSX01BUFtheGlvc0Vycm9yLmNvZGVdO1xuICAgICAgICAgIGlmICghcmVzcCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2NsaWVudC1lcnJvcicsXG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDUwMCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYFVua25vd24gRXJyb3I6JHtheGlvc0Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnY2xpZW50LWVycm9yJyxcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlc3Auc3RhdHVzLFxuICAgICAgICAgICAgbWVzc2FnZTogcmVzcC5tZXNzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdW5rbm93bkVycm9yID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgICBjb25zdCBzdGF0dXMgPSA1MDA7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdW5rbm93bkVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gRXJyb3InO1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAnY2xpZW50LWVycm9yJywgc3RhdHVzQ29kZTogc3RhdHVzLCBtZXNzYWdlIH07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICAgIHJlc3BvbnNlUGFyc2VyPzogUmVzcG9uc2VQYXJzZXI8VD4sXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBsZXQgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgdXJsOiB1cmwsXG4gICAgfTtcbiAgICBpZiAoaXNOb3RFbXB0eShvcHRpb25zKSkge1xuICAgICAgY29uZmlnID0geyAuLi5jb25maWcsIC4uLm9wdGlvbnMgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3Q8VD4oY29uZmlnLCByZXNwb25zZVBhcnNlcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcG9zdDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogYW55LFxuICAgIG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWcsXG4gICAgcmVzcG9uc2VQYXJzZXI/OiBSZXNwb25zZVBhcnNlcjxUPixcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGxldCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhLFxuICAgIH07XG4gICAgaWYgKGlzTm90RW1wdHkob3B0aW9ucykpIHtcbiAgICAgIGNvbmZpZyA9IHsgLi4uY29uZmlnLCAuLi5vcHRpb25zIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0PFQ+KGNvbmZpZywgcmVzcG9uc2VQYXJzZXIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHB1dDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogYW55LFxuICAgIG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWcsXG4gICAgcmVzcG9uc2VQYXJzZXI/OiBSZXNwb25zZVBhcnNlcjxUPixcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGxldCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ3B1dCcsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGEsXG4gICAgfTtcbiAgICBpZiAoaXNOb3RFbXB0eShvcHRpb25zKSkge1xuICAgICAgY29uZmlnID0geyAuLi5jb25maWcsIC4uLm9wdGlvbnMgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3Q8VD4oY29uZmlnLCByZXNwb25zZVBhcnNlcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGF0Y2g8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IGFueSxcbiAgICBvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICAgIHJlc3BvbnNlUGFyc2VyPzogUmVzcG9uc2VQYXJzZXI8VD4sXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBsZXQgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBtZXRob2Q6ICdwYXRjaCcsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGEsXG4gICAgfTtcbiAgICBpZiAoaXNOb3RFbXB0eShvcHRpb25zKSkge1xuICAgICAgY29uZmlnID0geyAuLi5jb25maWcsIC4uLm9wdGlvbnMgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3Q8VD4oY29uZmlnLCByZXNwb25zZVBhcnNlcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlPFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWcsXG4gICAgcmVzcG9uc2VQYXJzZXI/OiBSZXNwb25zZVBhcnNlcjxUPixcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGxldCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ2RlbGV0ZScsXG4gICAgICB1cmw6IHVybCxcbiAgICB9O1xuICAgIGlmIChpc05vdEVtcHR5KG9wdGlvbnMpKSB7XG4gICAgICBjb25maWcgPSB7IC4uLmNvbmZpZywgLi4ub3B0aW9ucyB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdDxUPihjb25maWcsIHJlc3BvbnNlUGFyc2VyKTtcbiAgfVxuXG4gIC8vIEFkZCBvdGhlciBIVFRQIG1ldGhvZHMgYXMgbmVlZGVkXG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axios_client.test.d.ts","sourceRoot":"","sources":["../../../src/network/clients/axios_client.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const axios_1 = __importDefault(require("axios"));
|
|
7
|
+
const axios_mock_adapter_1 = __importDefault(require("axios-mock-adapter"));
|
|
8
|
+
const axios_client_1 = require("./axios_client"); // Import the AxiosClient class
|
|
9
|
+
// Mock Axios for testing
|
|
10
|
+
jest.mock('axios', () => {
|
|
11
|
+
return {
|
|
12
|
+
...jest.requireActual('axios'),
|
|
13
|
+
create: jest.fn().mockReturnValue(jest.requireActual('axios')),
|
|
14
|
+
};
|
|
15
|
+
});
|
|
16
|
+
// Test cases
|
|
17
|
+
describe('AxiosClient', () => {
|
|
18
|
+
let axiosClient;
|
|
19
|
+
let mockAxios;
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
mockAxios = new axios_mock_adapter_1.default(axios_1.default); // Create a MockAdapter for Axios
|
|
22
|
+
axiosClient = new axios_client_1.AxiosClient(); // Create a new AxiosClient instance for each test
|
|
23
|
+
});
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
mockAxios.restore();
|
|
26
|
+
});
|
|
27
|
+
describe('happy flow tests', () => {
|
|
28
|
+
// Scenario 1: GET request and receive a response
|
|
29
|
+
it('should make a GET request and receive a response', async () => {
|
|
30
|
+
// Mock the GET request using axios-mock-adapter
|
|
31
|
+
mockAxios.onGet('https://example.com').reply(200, 'GET response');
|
|
32
|
+
const response = (await axiosClient.get('https://example.com'));
|
|
33
|
+
expect(response.type).toBe('success');
|
|
34
|
+
expect(response.statusCode).toBe(200);
|
|
35
|
+
expect(response.responseBody).toBe('GET response');
|
|
36
|
+
});
|
|
37
|
+
// Scenario 2: POST request and receive a response
|
|
38
|
+
it('should make a POST request and receive a response', async () => {
|
|
39
|
+
// Mock the axios.post method to return a response
|
|
40
|
+
mockAxios.onPost('https://example.com').reply(201, 'POST response');
|
|
41
|
+
const response = (await axiosClient.post('https://example.com', {
|
|
42
|
+
foo: 'bar',
|
|
43
|
+
}));
|
|
44
|
+
expect(response.type).toBe('success');
|
|
45
|
+
expect(response.statusCode).toBe(201);
|
|
46
|
+
expect(response.responseBody).toBe('POST response');
|
|
47
|
+
});
|
|
48
|
+
// Scenario 3: PUT request and receive a response
|
|
49
|
+
it('should make a PUT request and receive a response', async () => {
|
|
50
|
+
// Mock the axios.put method to return a response
|
|
51
|
+
mockAxios.onPut('https://example.com').reply(204);
|
|
52
|
+
const response = (await axiosClient.put('https://example.com', {
|
|
53
|
+
foo: 'bar',
|
|
54
|
+
}));
|
|
55
|
+
expect(response.type).toBe('success');
|
|
56
|
+
expect(response.statusCode).toBe(204);
|
|
57
|
+
expect(response.responseBody).toBeUndefined(); // No response body for PUT
|
|
58
|
+
});
|
|
59
|
+
// Scenario 4: PATCH request and receive a response
|
|
60
|
+
it('should make a PATCH request and receive a response', async () => {
|
|
61
|
+
// Mock the axios.patch method to return a response
|
|
62
|
+
mockAxios.onPatch('https://example.com').reply(200, 'PATCH response');
|
|
63
|
+
const response = (await axiosClient.patch('https://example.com', {
|
|
64
|
+
foo: 'bar',
|
|
65
|
+
}));
|
|
66
|
+
expect(response.type).toBe('success');
|
|
67
|
+
expect(response.statusCode).toBe(200);
|
|
68
|
+
expect(response.responseBody).toBe('PATCH response');
|
|
69
|
+
});
|
|
70
|
+
// Scenario 5: DELETE request and receive a response
|
|
71
|
+
it('should make a DELETE request and receive a response', async () => {
|
|
72
|
+
// Mock the axios.delete method to return a response
|
|
73
|
+
mockAxios.onDelete('https://example.com').reply(204);
|
|
74
|
+
const response = (await axiosClient.delete('https://example.com'));
|
|
75
|
+
expect(response.type).toBe('success');
|
|
76
|
+
expect(response.statusCode).toBe(204);
|
|
77
|
+
expect(response.responseBody).toBeUndefined(); // No response body for DELETE
|
|
78
|
+
});
|
|
79
|
+
// Scenario 6: GET request with a response parser
|
|
80
|
+
it('should make a GET request with a response parser', async () => {
|
|
81
|
+
// Mock the GET request using axios-mock-adapter
|
|
82
|
+
mockAxios.onGet('https://example.com').reply(200, 'GET response');
|
|
83
|
+
const response = (await axiosClient.get('https://example.com', {}, (data) => {
|
|
84
|
+
return `Parsed ${data}`;
|
|
85
|
+
}));
|
|
86
|
+
expect(response.type).toBe('success');
|
|
87
|
+
expect(response.statusCode).toBe(200);
|
|
88
|
+
expect(response.responseBody).toBe('Parsed GET response');
|
|
89
|
+
});
|
|
90
|
+
// Scenario 7: POST request with a response parser
|
|
91
|
+
it('should make a POST request with a response parser', async () => {
|
|
92
|
+
// Mock the axios.post method to return a response
|
|
93
|
+
mockAxios.onPost('https://example.com').reply(201, 'POST response');
|
|
94
|
+
const response = (await axiosClient.post('https://example.com', {
|
|
95
|
+
foo: 'bar',
|
|
96
|
+
}, {}, (data) => {
|
|
97
|
+
return `Parsed ${data}`;
|
|
98
|
+
}));
|
|
99
|
+
expect(response.type).toBe('success');
|
|
100
|
+
expect(response.statusCode).toBe(201);
|
|
101
|
+
expect(response.responseBody).toBe('Parsed POST response');
|
|
102
|
+
});
|
|
103
|
+
// Scenario 8: PUT request with a response parser
|
|
104
|
+
it('should make a PUT request with a response parser', async () => {
|
|
105
|
+
// Mock the axios.put method to return a response
|
|
106
|
+
mockAxios.onPut('https://example.com').reply(204);
|
|
107
|
+
const response = (await axiosClient.put('https://example.com', {
|
|
108
|
+
foo: 'bar',
|
|
109
|
+
}, {}, (data) => {
|
|
110
|
+
return `Parsed ${data}`;
|
|
111
|
+
}));
|
|
112
|
+
expect(response.type).toBe('success');
|
|
113
|
+
expect(response.statusCode).toBe(204);
|
|
114
|
+
expect(response.responseBody).toBe('Parsed undefined'); // No response body for PUT
|
|
115
|
+
});
|
|
116
|
+
// Scenario 9: PATCH request with a response parser
|
|
117
|
+
it('should make a PATCH request with a response parser', async () => {
|
|
118
|
+
// Mock the axios.patch method to return a response
|
|
119
|
+
mockAxios.onPatch('https://example.com').reply(200, 'PATCH response');
|
|
120
|
+
const response = (await axiosClient.patch('https://example.com', {
|
|
121
|
+
foo: 'bar',
|
|
122
|
+
}, {}, (data) => {
|
|
123
|
+
return `Parsed ${data}`;
|
|
124
|
+
}));
|
|
125
|
+
expect(response.type).toBe('success');
|
|
126
|
+
expect(response.statusCode).toBe(200);
|
|
127
|
+
expect(response.responseBody).toBe('Parsed PATCH response');
|
|
128
|
+
});
|
|
129
|
+
// Scenario 10: DELETE request with a response parser
|
|
130
|
+
it('should make a DELETE request with a response parser', async () => {
|
|
131
|
+
// Mock the axios.delete method to return a response
|
|
132
|
+
mockAxios.onDelete('https://example.com').reply(204);
|
|
133
|
+
const response = (await axiosClient.delete('https://example.com', {}, (data) => {
|
|
134
|
+
return `Parsed ${data}`;
|
|
135
|
+
}));
|
|
136
|
+
expect(response.type).toBe('success');
|
|
137
|
+
expect(response.statusCode).toBe(204);
|
|
138
|
+
expect(response.responseBody).toBe('Parsed undefined'); // No response body for DELETE
|
|
139
|
+
});
|
|
140
|
+
// Scenario 11: GET request with headers
|
|
141
|
+
it('should make a GET request with headers', async () => {
|
|
142
|
+
// Mock the GET request using axios-mock-adapter
|
|
143
|
+
mockAxios.onGet('https://example.com').reply((config) => {
|
|
144
|
+
expect(config.headers['foo']).toEqual('bar');
|
|
145
|
+
return [
|
|
146
|
+
200,
|
|
147
|
+
'GET response',
|
|
148
|
+
{
|
|
149
|
+
Authorization: `Bearer Token`,
|
|
150
|
+
'Content-type': 'application/x-www-form-urlencoded',
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
});
|
|
154
|
+
const response = (await axiosClient.get('https://example.com', {
|
|
155
|
+
headers: { foo: 'bar' },
|
|
156
|
+
}));
|
|
157
|
+
expect(response.type).toBe('success');
|
|
158
|
+
expect(response.statusCode).toBe(200);
|
|
159
|
+
expect(response.responseBody).toBe('GET response');
|
|
160
|
+
});
|
|
161
|
+
// other happy flow tests
|
|
162
|
+
// Scenario 12:
|
|
163
|
+
});
|
|
164
|
+
describe('error flow tests', () => {
|
|
165
|
+
// Scenario 1: GET request and receive a network error
|
|
166
|
+
it('should make a GET request and receive a network error', async () => {
|
|
167
|
+
// Mock the GET request using axios-mock-adapter
|
|
168
|
+
mockAxios.onGet('https://example.com').abortRequest();
|
|
169
|
+
const response = (await axiosClient.get('https://example.com'));
|
|
170
|
+
expect(response.type).toBe('client-error');
|
|
171
|
+
expect(response.statusCode).toBe(500);
|
|
172
|
+
expect(response.message).toBe('Unknown Error:Request aborted');
|
|
173
|
+
});
|
|
174
|
+
// should handle timeout errors
|
|
175
|
+
it('should make a GET request and receive a timeout error', async () => {
|
|
176
|
+
// Mock the GET request using axios-mock-adapter
|
|
177
|
+
mockAxios.onGet('https://example.com').timeout();
|
|
178
|
+
const response = (await axiosClient.get('https://example.com'));
|
|
179
|
+
expect(response.type).toBe('client-error');
|
|
180
|
+
expect(response.statusCode).toBe(500);
|
|
181
|
+
expect(response.message).toBe('Unknown Error:timeout of 0ms exceeded');
|
|
182
|
+
});
|
|
183
|
+
it('should make a GET request and receive a network error', async () => {
|
|
184
|
+
// Mock the GET request using axios-mock-adapter
|
|
185
|
+
mockAxios.onGet('https://example.com').networkError();
|
|
186
|
+
const response = (await axiosClient.get('https://example.com'));
|
|
187
|
+
expect(response.type).toBe('client-error');
|
|
188
|
+
expect(response.statusCode).toBe(500);
|
|
189
|
+
expect(response.message).toBe('Network Error');
|
|
190
|
+
});
|
|
191
|
+
// should handle application errors (4xx)
|
|
192
|
+
it('should make a GET request and receive a 400 error', async () => {
|
|
193
|
+
// Mock the GET request using axios-mock-adapter
|
|
194
|
+
mockAxios.onGet('https://example.com').reply(400, 'Bad Request Received');
|
|
195
|
+
const response = (await axiosClient.get('https://example.com'));
|
|
196
|
+
expect(response.type).toBe('application-error');
|
|
197
|
+
expect(response.statusCode).toBe(400);
|
|
198
|
+
expect(response.responseBody).toBe('Bad Request Received');
|
|
199
|
+
});
|
|
200
|
+
// should handle application errors (5xx)
|
|
201
|
+
it('should make a GET request and receive a 500 error', async () => {
|
|
202
|
+
// Mock the GET request using axios-mock-adapter
|
|
203
|
+
mockAxios.onGet('https://example.com').reply(500, 'Internal Server Error');
|
|
204
|
+
const response = (await axiosClient.get('https://example.com'));
|
|
205
|
+
expect(response.type).toBe('application-error');
|
|
206
|
+
expect(response.statusCode).toBe(500);
|
|
207
|
+
expect(response.responseBody).toBe('Internal Server Error');
|
|
208
|
+
});
|
|
209
|
+
// should handle unexpected errors
|
|
210
|
+
it('should make a GET request and receive an unexpected error', async () => {
|
|
211
|
+
// Mock the GET request using axios-mock-adapter
|
|
212
|
+
mockAxios.onGet('https://example.com').reply(200, 'GET response');
|
|
213
|
+
const response = (await axiosClient.get('https://example.com', {}, (data) => {
|
|
214
|
+
throw new Error('Unexpected Error');
|
|
215
|
+
}));
|
|
216
|
+
expect(response.type).toBe('client-error');
|
|
217
|
+
expect(response.statusCode).toBe(500);
|
|
218
|
+
expect(response.message).toBe('Failed to parse response data: Unexpected Error');
|
|
219
|
+
});
|
|
220
|
+
// should handle empty response body
|
|
221
|
+
it('should make a GET request and receive an empty response body', async () => {
|
|
222
|
+
// Mock the GET request using axios-mock-adapter
|
|
223
|
+
mockAxios.onGet('https://example.com').reply(200);
|
|
224
|
+
const response = (await axiosClient.get('https://example.com'));
|
|
225
|
+
expect(response.type).toBe('success');
|
|
226
|
+
expect(response.statusCode).toBe(200);
|
|
227
|
+
expect(response.responseBody).toBeUndefined();
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpb3NfY2xpZW50LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmV0d29yay9jbGllbnRzL2F4aW9zX2NsaWVudC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLDRFQUE2QztBQUM3QyxpREFBNkMsQ0FBQywrQkFBK0I7QUFPN0UseUJBQXlCO0FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtJQUN0QixPQUFPO1FBQ0wsR0FBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBWTtRQUMxQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQy9ELENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILGFBQWE7QUFDYixRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixJQUFJLFdBQXdCLENBQUM7SUFDN0IsSUFBSSxTQUFTLENBQUM7SUFFZCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsU0FBUyxHQUFHLElBQUksNEJBQVcsQ0FBQyxlQUFLLENBQUMsQ0FBQyxDQUFDLGlDQUFpQztRQUNyRSxXQUFXLEdBQUcsSUFBSSwwQkFBVyxFQUFFLENBQUMsQ0FBQyxrREFBa0Q7SUFDckYsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUNoQyxpREFBaUQ7UUFDakQsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hFLGdEQUFnRDtZQUNoRCxTQUFTLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsS0FBSyxD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QUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztRQUVILG9DQUFvQztRQUNwQyxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUUsZ0RBQWdEO1lBQ2hELFNBQVMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxHQUFHLENBQ3JDLHFCQUFxQixDQUN0QixDQUFrQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBNb2NrQWRhcHRlciBmcm9tICdheGlvcy1tb2NrLWFkYXB0ZXInO1xuaW1wb3J0IHsgQXhpb3NDbGllbnQgfSBmcm9tICcuL2F4aW9zX2NsaWVudCc7IC8vIEltcG9ydCB0aGUgQXhpb3NDbGllbnQgY2xhc3NcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uRXJyb3JBcGlSZXNwb25zZSxcbiAgQ2xpZW50RXJyb3JBcGlSZXNwb25zZSxcbiAgU3VjY2Vzc2Z1bEFwaVJlc3BvbnNlLFxufSBmcm9tICcuL3R5cGVzJztcblxuLy8gTW9jayBBeGlvcyBmb3IgdGVzdGluZ1xuamVzdC5tb2NrKCdheGlvcycsICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi4oamVzdC5yZXF1aXJlQWN0dWFsKCdheGlvcycpIGFzIG9iamVjdCksXG4gICAgY3JlYXRlOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKGplc3QucmVxdWlyZUFjdHVhbCgnYXhpb3MnKSksXG4gIH07XG59KTtcblxuLy8gVGVzdCBjYXNlc1xuZGVzY3JpYmUoJ0F4aW9zQ2xpZW50JywgKCkgPT4ge1xuICBsZXQgYXhpb3NDbGllbnQ6IEF4aW9zQ2xpZW50O1xuICBsZXQgbW9ja0F4aW9zO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG1vY2tBeGlvcyA9IG5ldyBNb2NrQWRhcHRlcihheGlvcyk7IC8vIENyZWF0ZSBhIE1vY2tBZGFwdGVyIGZvciBBeGlvc1xuICAgIGF4aW9zQ2xpZW50ID0gbmV3IEF4aW9zQ2xpZW50KCk7IC8vIENyZWF0ZSBhIG5ldyBBeGlvc0NsaWVudCBpbnN0YW5jZSBmb3IgZWFjaCB0ZXN0XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgbW9ja0F4aW9zLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2hhcHB5IGZsb3cgdGVzdHMnLCAoKSA9PiB7XG4gICAgLy8gU2NlbmFyaW8gMTogR0VUIHJlcXVlc3QgYW5kIHJlY2VpdmUgYSByZXNwb25zZVxuICAgIGl0KCdzaG91bGQgbWFrZSBhIEdFVCByZXF1ZXN0IGFuZCByZWNlaXZlIGEgcmVzcG9uc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBNb2NrIHRoZSBHRVQgcmVxdWVzdCB1c2luZyBheGlvcy1tb2NrLWFkYXB0ZXJcbiAgICAgIG1vY2tBeGlvcy5vbkdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KDIwMCwgJ0dFVCByZXNwb25zZScpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgYXhpb3NDbGllbnQuZ2V0KFxuICAgICAgICAnaHR0cHM6Ly9leGFtcGxlLmNvbScsXG4gICAgICApKSBhcyBTdWNjZXNzZnVsQXBpUmVzcG9uc2U8c3RyaW5nPjtcbiAgICAgIGV4cGVjdChyZXNwb25zZS50eXBlKS50b0JlKCdzdWNjZXNzJyk7XG4gICAgICBleHBlY3QocmVzcG9uc2Uuc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnJlc3BvbnNlQm9keSkudG9CZSgnR0VUIHJlc3BvbnNlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBTY2VuYXJpbyAyOiBQT1NUIHJlcXVlc3QgYW5kIHJlY2VpdmUgYSByZXNwb25zZVxuICAgIGl0KCdzaG91bGQgbWFrZSBhIFBPU1QgcmVxdWVzdCBhbmQgcmVjZWl2ZSBhIHJlc3BvbnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTW9jayB0aGUgYXhpb3MucG9zdCBtZXRob2QgdG8gcmV0dXJuIGEgcmVzcG9uc2VcbiAgICAgIG1vY2tBeGlvcy5vblBvc3QoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKS5yZXBseSgyMDEsICdQT1NUIHJlc3BvbnNlJyk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGF4aW9zQ2xpZW50LnBvc3QoJ2h0dHBzOi8vZXhhbXBsZS5jb20nLCB7XG4gICAgICAgIGZvbzogJ2JhcicsXG4gICAgICB9KSkgYXMgU3VjY2Vzc2Z1bEFwaVJlc3BvbnNlPHN0cmluZz47XG4gICAgICBleHBlY3QocmVzcG9uc2UudHlwZSkudG9CZSgnc3VjY2VzcycpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnN0YXR1c0NvZGUpLnRvQmUoMjAxKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5yZXNwb25zZUJvZHkpLnRvQmUoJ1BPU1QgcmVzcG9uc2UnKTtcbiAgICB9KTtcblxuICAgIC8vIFNjZW5hcmlvIDM6IFBVVCByZXF1ZXN0IGFuZCByZWNlaXZlIGEgcmVzcG9uc2VcbiAgICBpdCgnc2hvdWxkIG1ha2UgYSBQVVQgcmVxdWVzdCBhbmQgcmVjZWl2ZSBhIHJlc3BvbnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTW9jayB0aGUgYXhpb3MucHV0IG1ldGhvZCB0byByZXR1cm4gYSByZXNwb25zZVxuICAgICAgbW9ja0F4aW9zLm9uUHV0KCdodHRwczovL2V4YW1wbGUuY29tJykucmVwbHkoMjA0KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgYXhpb3NDbGllbnQucHV0KCdodHRwczovL2V4YW1wbGUuY29tJywge1xuICAgICAgICBmb286ICdiYXInLFxuICAgICAgfSkpIGFzIFN1Y2Nlc3NmdWxBcGlSZXNwb25zZTxzdHJpbmc+O1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnR5cGUpLnRvQmUoJ3N1Y2Nlc3MnKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5zdGF0dXNDb2RlKS50b0JlKDIwNCk7XG4gICAgICBleHBlY3QocmVzcG9uc2UucmVzcG9uc2VCb2R5KS50b0JlVW5kZWZpbmVkKCk7IC8vIE5vIHJlc3BvbnNlIGJvZHkgZm9yIFBVVFxuICAgIH0pO1xuXG4gICAgLy8gU2NlbmFyaW8gNDogUEFUQ0ggcmVxdWVzdCBhbmQgcmVjZWl2ZSBhIHJlc3BvbnNlXG4gICAgaXQoJ3Nob3VsZCBtYWtlIGEgUEFUQ0ggcmVxdWVzdCBhbmQgcmVjZWl2ZSBhIHJlc3BvbnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTW9jayB0aGUgYXhpb3MucGF0Y2ggbWV0aG9kIHRvIHJldHVybiBhIHJlc3BvbnNlXG4gICAgICBtb2NrQXhpb3Mub25QYXRjaCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KDIwMCwgJ1BBVENIIHJlc3BvbnNlJyk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGF4aW9zQ2xpZW50LnBhdGNoKCdodHRwczovL2V4YW1wbGUuY29tJywge1xuICAgICAgICBmb286ICdiYXInLFxuICAgICAgfSkpIGFzIFN1Y2Nlc3NmdWxBcGlSZXNwb25zZTxzdHJpbmc+O1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnR5cGUpLnRvQmUoJ3N1Y2Nlc3MnKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgICBleHBlY3QocmVzcG9uc2UucmVzcG9uc2VCb2R5KS50b0JlKCdQQVRDSCByZXNwb25zZScpO1xuICAgIH0pO1xuXG4gICAgLy8gU2NlbmFyaW8gNTogREVMRVRFIHJlcXVlc3QgYW5kIHJlY2VpdmUgYSByZXNwb25zZVxuICAgIGl0KCdzaG91bGQgbWFrZSBhIERFTEVURSByZXF1ZXN0IGFuZCByZWNlaXZlIGEgcmVzcG9uc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBNb2NrIHRoZSBheGlvcy5kZWxldGUgbWV0aG9kIHRvIHJldHVybiBhIHJlc3BvbnNlXG4gICAgICBtb2NrQXhpb3Mub25EZWxldGUoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKS5yZXBseSgyMDQpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IChhd2FpdCBheGlvc0NsaWVudC5kZWxldGUoXG4gICAgICAgICdodHRwczovL2V4YW1wbGUuY29tJyxcbiAgICAgICkpIGFzIFN1Y2Nlc3NmdWxBcGlSZXNwb25zZTxzdHJpbmc+O1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnR5cGUpLnRvQmUoJ3N1Y2Nlc3MnKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5zdGF0dXNDb2RlKS50b0JlKDIwNCk7XG4gICAgICBleHBlY3QocmVzcG9uc2UucmVzcG9uc2VCb2R5KS50b0JlVW5kZWZpbmVkKCk7IC8vIE5vIHJlc3BvbnNlIGJvZHkgZm9yIERFTEVURVxuICAgIH0pO1xuXG4gICAgLy8gU2NlbmFyaW8gNjogR0VUIHJlcXVlc3Qgd2l0aCBhIHJlc3BvbnNlIHBhcnNlclxuICAgIGl0KCdzaG91bGQgbWFrZSBhIEdFVCByZXF1ZXN0IHdpdGggYSByZXNwb25zZSBwYXJzZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBNb2NrIHRoZSBHRVQgcmVxdWVzdCB1c2luZyBheGlvcy1tb2NrLWFkYXB0ZXJcbiAgICAgIG1vY2tBeGlvcy5vbkdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KDIwMCwgJ0dFVCByZXNwb25zZScpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IChhd2FpdCBheGlvc0NsaWVudC5nZXQoJ2h0dHBzOi8vZXhhbXBsZS5jb20nLCB7fSwgKGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGBQYXJzZWQgJHtkYXRhfWA7XG4gICAgICB9KSkgYXMgU3VjY2Vzc2Z1bEFwaVJlc3BvbnNlPHN0cmluZz47XG4gICAgICBleHBlY3QocmVzcG9uc2UudHlwZSkudG9CZSgnc3VjY2VzcycpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5yZXNwb25zZUJvZHkpLnRvQmUoJ1BhcnNlZCBHRVQgcmVzcG9uc2UnKTtcbiAgICB9KTtcblxuICAgIC8vIFNjZW5hcmlvIDc6IFBPU1QgcmVxdWVzdCB3aXRoIGEgcmVzcG9uc2UgcGFyc2VyXG4gICAgaXQoJ3Nob3VsZCBtYWtlIGEgUE9TVCByZXF1ZXN0IHdpdGggYSByZXNwb25zZSBwYXJzZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBNb2NrIHRoZSBheGlvcy5wb3N0IG1ldGhvZCB0byByZXR1cm4gYSByZXNwb25zZVxuICAgICAgbW9ja0F4aW9zLm9uUG9zdCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KDIwMSwgJ1BPU1QgcmVzcG9uc2UnKTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgYXhpb3NDbGllbnQucG9zdChcbiAgICAgICAgJ2h0dHBzOi8vZXhhbXBsZS5jb20nLFxuICAgICAgICB7XG4gICAgICAgICAgZm9vOiAnYmFyJyxcbiAgICAgICAgfSxcbiAgICAgICAge30sXG4gICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGBQYXJzZWQgJHtkYXRhfWA7XG4gICAgICAgIH0sXG4gICAgICApKSBhcyBTdWNjZXNzZnVsQXBpUmVzcG9uc2U8c3RyaW5nPjtcbiAgICAgIGV4cGVjdChyZXNwb25zZS50eXBlKS50b0JlKCdzdWNjZXNzJyk7XG4gICAgICBleHBlY3QocmVzcG9uc2Uuc3RhdHVzQ29kZSkudG9CZSgyMDEpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnJlc3BvbnNlQm9keSkudG9CZSgnUGFyc2VkIFBPU1QgcmVzcG9uc2UnKTtcbiAgICB9KTtcblxuICAgIC8vIFNjZW5hcmlvIDg6IFBVVCByZXF1ZXN0IHdpdGggYSByZXNwb25zZSBwYXJzZXJcbiAgICBpdCgnc2hvdWxkIG1ha2UgYSBQVVQgcmVxdWVzdCB3aXRoIGEgcmVzcG9uc2UgcGFyc2VyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTW9jayB0aGUgYXhpb3MucHV0IG1ldGhvZCB0byByZXR1cm4gYSByZXNwb25zZVxuICAgICAgbW9ja0F4aW9zLm9uUHV0KCdodHRwczovL2V4YW1wbGUuY29tJykucmVwbHkoMjA0KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgYXhpb3NDbGllbnQucHV0KFxuICAgICAgICAnaHR0cHM6Ly9leGFtcGxlLmNvbScsXG4gICAgICAgIHtcbiAgICAgICAgICBmb286ICdiYXInLFxuICAgICAgICB9LFxuICAgICAgICB7fSxcbiAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gYFBhcnNlZCAke2RhdGF9YDtcbiAgICAgICAgfSxcbiAgICAgICkpIGFzIFN1Y2Nlc3NmdWxBcGlSZXNwb25zZTxzdHJpbmc+O1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnR5cGUpLnRvQmUoJ3N1Y2Nlc3MnKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5zdGF0dXNDb2RlKS50b0JlKDIwNCk7XG4gICAgICBleHBlY3QocmVzcG9uc2UucmVzcG9uc2VCb2R5KS50b0JlKCdQYXJzZWQgdW5kZWZpbmVkJyk7IC8vIE5vIHJlc3BvbnNlIGJvZHkgZm9yIFBVVFxuICAgIH0pO1xuXG4gICAgLy8gU2NlbmFyaW8gOTogUEFUQ0ggcmVxdWVzdCB3aXRoIGEgcmVzcG9uc2UgcGFyc2VyXG4gICAgaXQoJ3Nob3VsZCBtYWtlIGEgUEFUQ0ggcmVxdWVzdCB3aXRoIGEgcmVzcG9uc2UgcGFyc2VyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTW9jayB0aGUgYXhpb3MucGF0Y2ggbWV0aG9kIHRvIHJldHVybiBhIHJlc3BvbnNlXG4gICAgICBtb2NrQXhpb3Mub25QYXRjaCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KDIwMCwgJ1BBVENIIHJlc3BvbnNlJyk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGF4aW9zQ2xpZW50LnBhdGNoKFxuICAgICAgICAnaHR0cHM6Ly9leGFtcGxlLmNvbScsXG4gICAgICAgIHtcbiAgICAgICAgICBmb286ICdiYXInLFxuICAgICAgICB9LFxuICAgICAgICB7fSxcbiAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gYFBhcnNlZCAke2RhdGF9YDtcbiAgICAgICAgfSxcbiAgICAgICkpIGFzIFN1Y2Nlc3NmdWxBcGlSZXNwb25zZTxzdHJpbmc+O1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnR5cGUpLnRvQmUoJ3N1Y2Nlc3MnKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgICBleHBlY3QocmVzcG9uc2UucmVzcG9uc2VCb2R5KS50b0JlKCdQYXJzZWQgUEFUQ0ggcmVzcG9uc2UnKTtcbiAgICB9KTtcblxuICAgIC8vIFNjZW5hcmlvIDEwOiBERUxFVEUgcmVxdWVzdCB3aXRoIGEgcmVzcG9uc2UgcGFyc2VyXG4gICAgaXQoJ3Nob3VsZCBtYWtlIGEgREVMRVRFIHJlcXVlc3Qgd2l0aCBhIHJlc3BvbnNlIHBhcnNlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE1vY2sgdGhlIGF4aW9zLmRlbGV0ZSBtZXRob2QgdG8gcmV0dXJuIGEgcmVzcG9uc2VcbiAgICAgIG1vY2tBeGlvcy5vbkRlbGV0ZSgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KDIwNCk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGF4aW9zQ2xpZW50LmRlbGV0ZSgnaHR0cHM6Ly9leGFtcGxlLmNvbScsIHt9LCAoZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gYFBhcnNlZCAke2RhdGF9YDtcbiAgICAgIH0pKSBhcyBTdWNjZXNzZnVsQXBpUmVzcG9uc2U8c3RyaW5nPjtcbiAgICAgIGV4cGVjdChyZXNwb25zZS50eXBlKS50b0JlKCdzdWNjZXNzJyk7XG4gICAgICBleHBlY3QocmVzcG9uc2Uuc3RhdHVzQ29kZSkudG9CZSgyMDQpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnJlc3BvbnNlQm9keSkudG9CZSgnUGFyc2VkIHVuZGVmaW5lZCcpOyAvLyBObyByZXNwb25zZSBib2R5IGZvciBERUxFVEVcbiAgICB9KTtcblxuICAgIC8vIFNjZW5hcmlvIDExOiBHRVQgcmVxdWVzdCB3aXRoIGhlYWRlcnNcbiAgICBpdCgnc2hvdWxkIG1ha2UgYSBHRVQgcmVxdWVzdCB3aXRoIGhlYWRlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBNb2NrIHRoZSBHRVQgcmVxdWVzdCB1c2luZyBheGlvcy1tb2NrLWFkYXB0ZXJcbiAgICAgIG1vY2tBeGlvcy5vbkdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KChjb25maWcpID0+IHtcbiAgICAgICAgZXhwZWN0KGNvbmZpZy5oZWFkZXJzWydmb28nXSkudG9FcXVhbCgnYmFyJyk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgMjAwLFxuICAgICAgICAgICdHRVQgcmVzcG9uc2UnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgVG9rZW5gLFxuICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgYXhpb3NDbGllbnQuZ2V0KCdodHRwczovL2V4YW1wbGUuY29tJywge1xuICAgICAgICBoZWFkZXJzOiB7IGZvbzogJ2JhcicgfSxcbiAgICAgIH0pKSBhcyBTdWNjZXNzZnVsQXBpUmVzcG9uc2U8c3RyaW5nPjtcbiAgICAgIGV4cGVjdChyZXNwb25zZS50eXBlKS50b0JlKCdzdWNjZXNzJyk7XG4gICAgICBleHBlY3QocmVzcG9uc2Uuc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnJlc3BvbnNlQm9keSkudG9CZSgnR0VUIHJlc3BvbnNlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBvdGhlciBoYXBweSBmbG93IHRlc3RzXG4gICAgLy8gU2NlbmFyaW8gMTI6XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlcnJvciBmbG93IHRlc3RzJywgKCkgPT4ge1xuICAgIC8vIFNjZW5hcmlvIDE6IEdFVCByZXF1ZXN0IGFuZCByZWNlaXZlIGEgbmV0d29yayBlcnJvclxuICAgIGl0KCdzaG91bGQgbWFrZSBhIEdFVCByZXF1ZXN0IGFuZCByZWNlaXZlIGEgbmV0d29yayBlcnJvcicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE1vY2sgdGhlIEdFVCByZXF1ZXN0IHVzaW5nIGF4aW9zLW1vY2stYWRhcHRlclxuICAgICAgbW9ja0F4aW9zLm9uR2V0KCdodHRwczovL2V4YW1wbGUuY29tJykuYWJvcnRSZXF1ZXN0KCk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGF4aW9zQ2xpZW50LmdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpKSBhcyBDbGllbnRFcnJvckFwaVJlc3BvbnNlO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnR5cGUpLnRvQmUoJ2NsaWVudC1lcnJvcicpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnN0YXR1c0NvZGUpLnRvQmUoNTAwKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5tZXNzYWdlKS50b0JlKCdVbmtub3duIEVycm9yOlJlcXVlc3QgYWJvcnRlZCcpO1xuICAgIH0pO1xuXG4gICAgLy8gc2hvdWxkIGhhbmRsZSB0aW1lb3V0IGVycm9yc1xuICAgIGl0KCdzaG91bGQgbWFrZSBhIEdFVCByZXF1ZXN0IGFuZCByZWNlaXZlIGEgdGltZW91dCBlcnJvcicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE1vY2sgdGhlIEdFVCByZXF1ZXN0IHVzaW5nIGF4aW9zLW1vY2stYWRhcHRlclxuICAgICAgbW9ja0F4aW9zLm9uR2V0KCdodHRwczovL2V4YW1wbGUuY29tJykudGltZW91dCgpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IChhd2FpdCBheGlvc0NsaWVudC5nZXQoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKSkgYXMgQ2xpZW50RXJyb3JBcGlSZXNwb25zZTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS50eXBlKS50b0JlKCdjbGllbnQtZXJyb3InKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgICBleHBlY3QocmVzcG9uc2UubWVzc2FnZSkudG9CZSgnVW5rbm93biBFcnJvcjp0aW1lb3V0IG9mIDBtcyBleGNlZWRlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYWtlIGEgR0VUIHJlcXVlc3QgYW5kIHJlY2VpdmUgYSBuZXR3b3JrIGVycm9yJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTW9jayB0aGUgR0VUIHJlcXVlc3QgdXNpbmcgYXhpb3MtbW9jay1hZGFwdGVyXG4gICAgICBtb2NrQXhpb3Mub25HZXQoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKS5uZXR3b3JrRXJyb3IoKTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgYXhpb3NDbGllbnQuZ2V0KCdodHRwczovL2V4YW1wbGUuY29tJykpIGFzIENsaWVudEVycm9yQXBpUmVzcG9uc2U7XG4gICAgICBleHBlY3QocmVzcG9uc2UudHlwZSkudG9CZSgnY2xpZW50LWVycm9yJyk7XG4gICAgICBleHBlY3QocmVzcG9uc2Uuc3RhdHVzQ29kZSkudG9CZSg1MDApO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLm1lc3NhZ2UpLnRvQmUoJ05ldHdvcmsgRXJyb3InKTtcbiAgICB9KTtcblxuICAgIC8vIHNob3VsZCBoYW5kbGUgYXBwbGljYXRpb24gZXJyb3JzICg0eHgpXG4gICAgaXQoJ3Nob3VsZCBtYWtlIGEgR0VUIHJlcXVlc3QgYW5kIHJlY2VpdmUgYSA0MDAgZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBNb2NrIHRoZSBHRVQgcmVxdWVzdCB1c2luZyBheGlvcy1tb2NrLWFkYXB0ZXJcbiAgICAgIG1vY2tBeGlvcy5vbkdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KDQwMCwgJ0JhZCBSZXF1ZXN0IFJlY2VpdmVkJyk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGF4aW9zQ2xpZW50LmdldChcbiAgICAgICAgJ2h0dHBzOi8vZXhhbXBsZS5jb20nLFxuICAgICAgKSkgYXMgQXBwbGljYXRpb25FcnJvckFwaVJlc3BvbnNlO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnR5cGUpLnRvQmUoJ2FwcGxpY2F0aW9uLWVycm9yJyk7XG4gICAgICBleHBlY3QocmVzcG9uc2Uuc3RhdHVzQ29kZSkudG9CZSg0MDApO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnJlc3BvbnNlQm9keSkudG9CZSgnQmFkIFJlcXVlc3QgUmVjZWl2ZWQnKTtcbiAgICB9KTtcblxuICAgIC8vIHNob3VsZCBoYW5kbGUgYXBwbGljYXRpb24gZXJyb3JzICg1eHgpXG4gICAgaXQoJ3Nob3VsZCBtYWtlIGEgR0VUIHJlcXVlc3QgYW5kIHJlY2VpdmUgYSA1MDAgZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBNb2NrIHRoZSBHRVQgcmVxdWVzdCB1c2luZyBheGlvcy1tb2NrLWFkYXB0ZXJcbiAgICAgIG1vY2tBeGlvcy5vbkdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KDUwMCwgJ0ludGVybmFsIFNlcnZlciBFcnJvcicpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IChhd2FpdCBheGlvc0NsaWVudC5nZXQoXG4gICAgICAgICdodHRwczovL2V4YW1wbGUuY29tJyxcbiAgICAgICkpIGFzIEFwcGxpY2F0aW9uRXJyb3JBcGlSZXNwb25zZTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS50eXBlKS50b0JlKCdhcHBsaWNhdGlvbi1lcnJvcicpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnN0YXR1c0NvZGUpLnRvQmUoNTAwKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5yZXNwb25zZUJvZHkpLnRvQmUoJ0ludGVybmFsIFNlcnZlciBFcnJvcicpO1xuICAgIH0pO1xuXG4gICAgLy8gc2hvdWxkIGhhbmRsZSB1bmV4cGVjdGVkIGVycm9yc1xuICAgIGl0KCdzaG91bGQgbWFrZSBhIEdFVCByZXF1ZXN0IGFuZCByZWNlaXZlIGFuIHVuZXhwZWN0ZWQgZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBNb2NrIHRoZSBHRVQgcmVxdWVzdCB1c2luZyBheGlvcy1tb2NrLWFkYXB0ZXJcbiAgICAgIG1vY2tBeGlvcy5vbkdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KDIwMCwgJ0dFVCByZXNwb25zZScpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IChhd2FpdCBheGlvc0NsaWVudC5nZXQoJ2h0dHBzOi8vZXhhbXBsZS5jb20nLCB7fSwgKGRhdGEpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIEVycm9yJyk7XG4gICAgICB9KSkgYXMgQ2xpZW50RXJyb3JBcGlSZXNwb25zZTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS50eXBlKS50b0JlKCdjbGllbnQtZXJyb3InKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgICBleHBlY3QocmVzcG9uc2UubWVzc2FnZSkudG9CZSgnRmFpbGVkIHRvIHBhcnNlIHJlc3BvbnNlIGRhdGE6IFVuZXhwZWN0ZWQgRXJyb3InKTtcbiAgICB9KTtcblxuICAgIC8vIHNob3VsZCBoYW5kbGUgZW1wdHkgcmVzcG9uc2UgYm9keVxuICAgIGl0KCdzaG91bGQgbWFrZSBhIEdFVCByZXF1ZXN0IGFuZCByZWNlaXZlIGFuIGVtcHR5IHJlc3BvbnNlIGJvZHknLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBNb2NrIHRoZSBHRVQgcmVxdWVzdCB1c2luZyBheGlvcy1tb2NrLWFkYXB0ZXJcbiAgICAgIG1vY2tBeGlvcy5vbkdldCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpLnJlcGx5KDIwMCk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGF4aW9zQ2xpZW50LmdldChcbiAgICAgICAgJ2h0dHBzOi8vZXhhbXBsZS5jb20nLFxuICAgICAgKSkgYXMgU3VjY2Vzc2Z1bEFwaVJlc3BvbnNlPHN0cmluZz47XG4gICAgICBleHBlY3QocmVzcG9uc2UudHlwZSkudG9CZSgnc3VjY2VzcycpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5yZXNwb25zZUJvZHkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|