@envive-ai/react-hooks 0.3.19-alpha-marlo-8 → 0.3.19-alpha-marlo-9
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/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/index.d.ts +7 -7
- package/dist/atoms/app/variant.d.cts +6 -6
- package/dist/atoms/app/variant.d.ts +6 -6
- package/dist/atoms/chat/chatState.d.cts +18 -18
- package/dist/atoms/chat/chatState.d.ts +18 -18
- package/dist/atoms/chat/form.d.cts +2 -2
- package/dist/atoms/chat/index.d.cts +3 -3
- package/dist/atoms/chat/index.d.ts +2 -2
- package/dist/atoms/chat/lastMessage.d.cts +2 -2
- package/dist/atoms/chat/lastMessage.d.ts +2 -2
- package/dist/atoms/chat/messageQueue.d.cts +6 -6
- package/dist/atoms/chat/messageQueue.d.ts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
- package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
- package/dist/atoms/chat/replies.d.cts +3 -3
- package/dist/atoms/chat/replies.d.ts +2 -2
- package/dist/atoms/chat/suggestions.d.cts +2 -2
- package/dist/atoms/envive/enviveConfig.d.cts +13 -13
- package/dist/atoms/envive/enviveConfig.d.ts +13 -13
- package/dist/atoms/globalSearch/globalSearch.d.cts +6 -6
- package/dist/atoms/globalSearch/globalSearch.d.ts +6 -6
- package/dist/atoms/org/customerService.d.cts +6 -6
- package/dist/atoms/org/graphqlConfig.d.cts +4 -4
- package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
- package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
- package/dist/atoms/search/chatSearch.d.cts +17 -17
- package/dist/atoms/search/chatSearch.d.ts +17 -17
- package/dist/atoms/search/searchAPI.d.cts +13 -13
- package/dist/atoms/search/searchAPI.d.ts +13 -13
- package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
- package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
- package/dist/contexts/amplitudeContext/amplitudeContext.cjs +9 -3
- package/dist/contexts/amplitudeContext/amplitudeContext.d.cts +2 -1
- package/dist/contexts/amplitudeContext/amplitudeContext.d.ts +2 -1
- package/dist/contexts/amplitudeContext/amplitudeContext.js +9 -3
- package/dist/contexts/enviveContext/enviveContext.cjs +3 -3
- package/dist/contexts/enviveContext/enviveContext.js +3 -3
- package/dist/contexts/enviveContext/types.d.cts +1 -1
- package/dist/contexts/pageContext/types.d.ts +1 -1
- package/dist/contexts/searchContext/searchContext.cjs +1 -1
- package/dist/contexts/searchContext/searchContext.js +1 -1
- package/dist/contexts/types.d.cts +1 -1
- package/dist/contexts/types.d.ts +1 -1
- package/dist/hooks/Search/useSearch.cjs +1 -1
- package/dist/hooks/Search/useSearch.js +1 -1
- package/dist/hooks/Search/useSearchInput.cjs +1 -1
- package/dist/hooks/Search/useSearchInput.js +1 -1
- package/dist/hooks/utils.d.cts +1 -1
- package/dist/services/amplitudeService/amplitudeService.cjs +5 -11
- package/dist/services/amplitudeService/amplitudeService.d.cts +2 -4
- package/dist/services/amplitudeService/amplitudeService.d.ts +2 -4
- package/dist/services/amplitudeService/amplitudeService.js +5 -11
- package/package.json +1 -1
- package/src/contexts/amplitudeContext/amplitudeContext.tsx +5 -2
- package/src/services/amplitudeService/amplitudeService.ts +5 -15
|
@@ -14,16 +14,15 @@ const logger = new logger_default("amplitudeService");
|
|
|
14
14
|
var AmplitudeService = class AmplitudeService {
|
|
15
15
|
constructor(config) {
|
|
16
16
|
this.supplementalDefaultProps = {};
|
|
17
|
-
this._isMockMode = false;
|
|
18
17
|
this.config = config;
|
|
19
18
|
this.initialize();
|
|
20
19
|
}
|
|
20
|
+
get isDummyApiKey() {
|
|
21
|
+
return this.config.amplitudeApiKey === "mock-amplitude-key";
|
|
22
|
+
}
|
|
21
23
|
get isReady() {
|
|
22
24
|
return Boolean(this.config.userId && this.config.featureFlagService && this.config.amplitudeApiKey && this.amplitudeClient);
|
|
23
25
|
}
|
|
24
|
-
get isMockMode() {
|
|
25
|
-
return this._isMockMode;
|
|
26
|
-
}
|
|
27
26
|
getLocalStorageItem(key) {
|
|
28
27
|
if (this.config.getLocalStorageItem) return this.config.getLocalStorageItem(key);
|
|
29
28
|
if (typeof window !== "undefined" && window.localStorage) return window.localStorage.getItem(key);
|
|
@@ -119,10 +118,6 @@ var AmplitudeService = class AmplitudeService {
|
|
|
119
118
|
this.internalEventTrackingEnrichment = enrichment;
|
|
120
119
|
return enrichment;
|
|
121
120
|
}
|
|
122
|
-
static isValidAmplitudeApiKey(apiKey) {
|
|
123
|
-
if (apiKey === "mock-amplitude-key") return false;
|
|
124
|
-
return true;
|
|
125
|
-
}
|
|
126
121
|
initialize() {
|
|
127
122
|
const isReady = Boolean(this.config.userId && this.config.featureFlagService && this.config.amplitudeApiKey);
|
|
128
123
|
if (!isReady) {
|
|
@@ -134,8 +129,7 @@ var AmplitudeService = class AmplitudeService {
|
|
|
134
129
|
});
|
|
135
130
|
return;
|
|
136
131
|
}
|
|
137
|
-
if (
|
|
138
|
-
this._isMockMode = true;
|
|
132
|
+
if (this.isDummyApiKey) {
|
|
139
133
|
logger.logWarn("Dummy API key detected — running in mock mode, no events will be sent to Amplitude.", this.config.amplitudeApiKey);
|
|
140
134
|
return;
|
|
141
135
|
}
|
|
@@ -280,4 +274,4 @@ var AmplitudeService = class AmplitudeService {
|
|
|
280
274
|
|
|
281
275
|
//#endregion
|
|
282
276
|
export { AmplitudeService };
|
|
283
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbIkxvZ2dlciIsImVucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4iLCJlbnJpY2hlZEV2ZW50OiBFdmVudCIsImdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtYnJvd3Nlcic7XG5pbXBvcnQgeyBFdmVudHNEaXNwYXRjaGVyLCBTcGlmZnlFdmVudCB9IGZyb20gJ3NyYy9ldmVudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlS2V5cyB9IGZyb20gJ3NyYy9jb250ZXh0cy9sb2NhbFN0b3JhZ2VDb250ZXh0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB0eXBlIHtcbiAgQnJvd3NlckNsaWVudCxcbiAgRW5yaWNobWVudFBsdWdpbixcbiAgRXZlbnQsXG4gIFNlcnZlclpvbmVUeXBlLFxufSBmcm9tICdAYW1wbGl0dWRlL2FuYWx5dGljcy10eXBlcyc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmltcG9ydCB7IFdpZGdldFR5cGVWMyB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlc1YzJztcbmltcG9ydCB7IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMnO1xuaW1wb3J0IHsgcHJvamVjdFRvR0E0IH0gZnJvbSAnLi4vZ2E0UHJvamVjdGlvblNlcnZpY2UvZ2E0UHJvamVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9IGZyb20gJy4vZXZlbnROYW1lcyc7XG5cbi8vIFJlLWV4cG9ydCBldmVudCBuYW1lcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfTtcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignYW1wbGl0dWRlU2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrRXZlbnRQYXJhbXMge1xuICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lO1xuICBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV2ZW50R3JvdXBzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtcGxpdHVkZVNlcnZpY2VDb25maWcge1xuICB1c2VySWQ6IHN0cmluZztcbiAgYW1wbGl0dWRlQXBpS2V5OiBzdHJpbmc7XG4gIGRhdGFSZXNpZGVuY3k6IHN0cmluZztcbiAgZW52OiBzdHJpbmc7XG4gIGNvbnRleHRTb3VyY2U6IHN0cmluZztcbiAgb3JnU2hvcnROYW1lOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIGZlYXR1cmVGbGFnU2VydmljZTogRmVhdHVyZUZsYWdTZXJ2aWNlO1xuICBvcmdHYUNvbmZpZz86IHVua25vd247XG4gIHNob3c6IGJvb2xlYW47XG4gIGVudml2ZU9uOiBib29sZWFuO1xuICBlbmFibGVkRmVhdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgZ2V0TG9jYWxTdG9yYWdlSXRlbTogbnVsbCB8ICgoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwpO1xufVxuXG5leHBvcnQgY2xhc3MgQW1wbGl0dWRlU2VydmljZSB7XG4gIHByaXZhdGUgYW1wbGl0dWRlQ2xpZW50OiBCcm93c2VyQ2xpZW50IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1cHBsZW1lbnRhbERlZmF1bHRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBwcml2YXRlIGNvbmZpZzogQW1wbGl0dWRlU2VydmljZUNvbmZpZztcblxuICBwcml2YXRlIF9pc01vY2tNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJlxuICAgICAgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmXG4gICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgJiZcbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LFxuICAgICk7XG4gIH1cblxuICBnZXQgaXNNb2NrTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNNb2NrTW9kZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRMb2NhbFN0b3JhZ2VJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ3MoKSk7XG4gICAgY29uc3QgZ2F0ZXNQcm9wcyA9XG4gICAgICBmZWF0dXJlR2F0ZXMubGVuZ3RoID4gMFxuICAgICAgICA/IGZlYXR1cmVHYXRlcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KChhY2MsIFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBpZiAobmFtZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtgZmVhdHVyZV9nYXRlLiR7bmFtZX1gXTogdmFsdWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pXG4gICAgICAgIDoge307XG4gICAgY29uc3QgZXhwZXJpbWVudFByb3BzID0ge307IC8vIE5vIGRpcmVjdCBlcXVpdmFsZW50IGZvciBleHBlcmltZW50cyBpbiBFbnZpdmVDb25maWcgeWV0XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFByb3BzID0ge1xuICAgICAgJ2Vudmlyb25tZW50LmV4ZWN1dGlvbl9jb250ZXh0JzogJ2J1bmRsZScsXG4gICAgICAnZW52aXJvbm1lbnQucGFnZV91cmwnOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfdXNlcl9pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdlbnZpcm9ubWVudC5leGVjdXRpb25fZW52aXJvbm1lbnQnOiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgJ2Vudmlyb25tZW50LmNvbnRleHRfc291cmNlJzogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgICdlbnZpcm9ubWVudC5zYWxlc19hZ2VudF9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5zYWxlc0FnZW50ID8/IGZhbHNlLFxuICAgICAgJ2Vudmlyb25tZW50LnNlYXJjaF9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5zZWFyY2hBZ2VudCA/PyBmYWxzZSxcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfb25fcXVlcnlfcGFyYW0nOiB0aGlzLmNvbmZpZy5lbnZpdmVPbixcbiAgICAgICdlbnZpcm9ubWVudC53aW5kb3dfc2hvdyc6IHRoaXMuY29uZmlnLnNob3csXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LmVudml2ZSxcbiAgICB9O1xuXG4gICAgY29uc3Qgb3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzID0gQW1wbGl0dWRlU2VydmljZS5pc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lKVxuICAgICAgPyB7XG4gICAgICAgIC4uLnRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGdWxsRmxhZ1ZhbHVlcygpLFxuICAgICAgICAuLi5leHBlcmltZW50UHJvcHMsXG4gICAgICAgIC4uLmVudmlyb25tZW50UHJvcHMsXG4gICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgLi4uZ2F0ZXNQcm9wcyxcbiAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzLFxuICAgICAgLi4udGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMsXG4gICAgICBhcHBfaWQ6ICdjb21tZXJjZS1jaGF0LXJlYWN0LWNvbXBvbmVudCcsXG4gICAgICBjaGF0X2lkOiB0aGlzLmdldExvY2FsU3RvcmFnZUl0ZW0oTG9jYWxTdG9yYWdlS2V5cy5DaGF0SWQpLFxuICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgYXBwX3NvdXJjZTogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgIG9yZ19pZDogdGhpcy5jb25maWcub3JnSWQsXG4gICAgICAnb3JnLnNob3J0X25hbWUnOiB0aGlzLmNvbmZpZy5vcmdTaG9ydE5hbWUsXG4gICAgICAndXNlci5pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdjZHAudXNlcl9pZCc6IG51bGwsXG4gICAgICAnY2RwLnByb3ZpZGVyJzogbnVsbCxcbiAgICAgICdldmVudC5zb3VyY2UnOiAnd2ViLWJyb3dzZXInLFxuICAgICAgJ2V2ZW50LnR5cGUnOiAndXNlci1hY3Rpdml0eScsXG4gICAgICAnZXZlbnQuaWQnOiBudWxsLFxuICAgICAgJ2V2ZW50LmNoYW5uZWwnOiAnd2ViJyxcbiAgICAgICdldmVudC50aW1lc3RhbXAnOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBwcml2YXRlIGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcHJlZml4ID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhldmVudFByb3BzKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWNjW2Ake3ByZWZpeH0uJHtrZXl9YF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCgpOiBFbnJpY2htZW50UGx1Z2luIHtcbiAgICBpZiAodGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiA9IHtcbiAgICAgIG5hbWU6ICdwYWdlLXZpZXctdHJhY2tpbmctZW5yaWNobWVudCcsXG4gICAgICB0eXBlOiAnZW5yaWNobWVudCcsXG4gICAgICBzZXR1cDogYXN5bmMgKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGV2ZW50OiBFdmVudCk6IFByb21pc2U8RXZlbnQ+ID0+IHtcbiAgICAgICAgbGV0IGVucmljaGVkRXZlbnQ6IEV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGV2ZW50c1RvRW5yaWNoID0gW1xuICAgICAgICAgICdbQW1wbGl0dWRlXSBQYWdlIFZpZXdlZCcsXG4gICAgICAgICAgYFtTcGlmZnldICR7U3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5CdW5kbGVMb2FkZWR9YCxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoZXZlbnRzVG9FbnJpY2guaW5jbHVkZXMoZXZlbnQuZXZlbnRfdHlwZSkpIHtcbiAgICAgICAgICBjb25zdCBnbG9iYWxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAgICAgICBpZiAodGhpcy5jb25maWcuc2hvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLnNob3cnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5zaG93KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZ2xvYmFsUHJvcGVydGllc1snZ2xvYmFsUHJvcGVydGllcy5lbnYnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5lbnYpO1xuXG4gICAgICAgICAgY29uc3QgZW5hYmxlZEZlYXR1cmVzUHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgdGhpcy5jb25maWc/LmVuYWJsZWRGZWF0dXJlcyA/PyAoe30gYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pLFxuICAgICAgICAgICkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuICAgICAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgIFtgZW5hYmxlZEZlYXR1cmVzLiR7a2V5fWBdOiBgJHt2YWx1ZX1gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdGltaW5nUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICd0aW1pbmcuZW5yaWNoZWRfYXRfbXMnOlxuICAgICAgICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5wZXJmb3JtYW5jZT8ubm93KCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSB7XG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uZXZlbnQuZXZlbnRfcHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudF90eXBlIGFzIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAuLi5nbG9iYWxQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi5lbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aW1pbmdQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIEV2ZW50c0Rpc3BhdGNoZXIuZGlzcGF0Y2goU3BpZmZ5RXZlbnQuQU1QTElUVURFX0VWRU5ULCBlbnJpY2hlZEV2ZW50KTtcblxuICAgICAgICByZXR1cm4gZW5yaWNoZWRFdmVudDtcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgPSBlbnJpY2htZW50O1xuICAgIHJldHVybiBlbnJpY2htZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWxpZEFtcGxpdHVkZUFwaUtleShhcGlLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChhcGlLZXkgPT09ICdtb2NrLWFtcGxpdHVkZS1rZXknKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzUmVhZHkgPSBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmIHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSAmJiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgKTtcblxuICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdBbXBsaXR1ZGVTZXJ2aWNlIGlzIG5vdCByZWFkeScsIHtcbiAgICAgICAgaXNSZWFkeSxcbiAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAgIGhhc0ZlYXR1cmVGbGFnU2VydmljZTogISF0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UsXG4gICAgICAgIGhhc0FtcGxpdHVkZUFwaUtleTogISF0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIUFtcGxpdHVkZVNlcnZpY2UuaXNWYWxpZEFtcGxpdHVkZUFwaUtleSh0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkpKSB7XG4gICAgICB0aGlzLl9pc01vY2tNb2RlID0gdHJ1ZTtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnRHVtbXkgQVBJIGtleSBkZXRlY3RlZCDigJQgcnVubmluZyBpbiBtb2NrIG1vZGUsIG5vIGV2ZW50cyB3aWxsIGJlIHNlbnQgdG8gQW1wbGl0dWRlLicsXG4gICAgICAgIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFtcGxpdHVkZUNsaWVudCkge1xuICAgICAgY29uc3QgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50ID0gY3JlYXRlSW5zdGFuY2UoKTtcblxuICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmFkZCh0aGlzLmdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCkpO1xuICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmluaXQodGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LCB0aGlzLmNvbmZpZy51c2VySWQsIHtcbiAgICAgICAgc2VydmVyWm9uZTogdGhpcy5jb25maWcuZGF0YVJlc2lkZW5jeSBhcyBTZXJ2ZXJab25lVHlwZSxcbiAgICAgICAgdHJhY2tpbmdPcHRpb25zOiB7XG4gICAgICAgICAgaXBBZGRyZXNzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBhdXRvY2FwdHVyZToge1xuICAgICAgICAgIGF0dHJpYnV0aW9uOiB0cnVlLFxuICAgICAgICAgIHBhZ2VWaWV3czoge1xuICAgICAgICAgICAgdHJhY2tIaXN0b3J5Q2hhbmdlczogJ3BhdGhPbmx5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlc3Npb25zOiBmYWxzZSxcbiAgICAgICAgICBmb3JtSW50ZXJhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICBmaWxlRG93bmxvYWRzOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQgPSBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQod2lkZ2V0VHlwZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5GbG9hdGluZ0J1dHRvblYzOlxuICAgICAgICByZXR1cm4gJ2Zsb2F0aW5nX2J1dHRvbic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWMzpcbiAgICAgICAgcmV0dXJuICdlbWJlZGRlZF93aWRnZXQnO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuVGl0bGVkUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlByb21wdENhcm91c2VsVjM6XG4gICAgICAgIHJldHVybiAnc3VnZ2VzdGlvbl9iYXInO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvZHVjdENhcmRWMzpcbiAgICAgICAgcmV0dXJuICdpbWFnZV9wcm9tcHRfY2FyZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRyaWdnZXJMb2NhdGlvbikge1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9URVhUX0ZJRUxEOlxuICAgICAgICByZXR1cm4gJ3Byb21wdF9jYXJkJztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9NUFRfQ0FST1VTRUw6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVElUTEVEX1BST01QVF9DQVJPVVNFTDpcbiAgICAgICAgcmV0dXJuICd0b3BfcmV2aWV3c19zbmlwcGV0JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5UWVBJTkdfQU5JTUFUSU9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9QUklNQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfU0VDT05EQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfVEVYVF9GSUVMRDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1RFWFRfRklFTEQ6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1RFWFRfRklFTEQ6XG4gICAgICAgIHJldHVybiAnY2hhdF9wcmV2aWV3JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX09WRVJMQVk6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9DTE9TRV9CVVRUT046XG4gICAgICAgIHJldHVybiAnaW5fY2hhdCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJpZ2dlckxvY2F0aW9uIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICAvLyBUaGlzIGFsbG93cyB1cyB0byBtYXAgdGhlIGV2ZW50IHByb3BzIHRvIHRoZSBjb3JyZWN0IGZvcm1hdCBmb3IgdGhlIGxlZ2FjeSBhbXBsaXR1ZGUgZXZlbnRzXG4gIHN0YXRpYyBtYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgbWVzc2FnZU1ldGFkYXRhID0gZXZlbnRQcm9wcz8ubWVzc2FnZV9tZXRhZGF0YSA/PyB7fTtcbiAgICBjb25zdCB0cmlnZ2VyTG9jYXRpb24gPVxuICAgICAgbWVzc2FnZU1ldGFkYXRhICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBtZXNzYWdlTWV0YWRhdGEgPT09ICdvYmplY3QnICYmXG4gICAgICAgICd0cmlnZ2VyX2xvY2F0aW9uJyBpbiBtZXNzYWdlTWV0YWRhdGFcbiAgICAgICAgPyBtZXNzYWdlTWV0YWRhdGEudHJpZ2dlcl9sb2NhdGlvblxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChldmVudE5hbWUgPT09IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudEV4cGFuZGVkKSB7XG4gICAgICBjb25zdCBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uID1cbiAgICAgICAgQW1wbGl0dWRlU2VydmljZS5tYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIG1lc3NhZ2VfbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5tZXNzYWdlTWV0YWRhdGEsXG4gICAgICAgICAgdHJpZ2dlcl9sb2NhdGlvbjogbWFwcGVkVHJpZ2dlckxvY2NhdGlvbixcbiAgICAgICAgICBmdWxsX3RyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50VmlzaWJsZSkge1xuICAgICAgY29uc3QgbWFwcGVkV2lkZ2V0VHlwZSA9IEFtcGxpdHVkZVNlcnZpY2UubWFwV2lkZ2V0VHlwZVRvQ2hhdENvbXBvbmVudChcbiAgICAgICAgZXZlbnRQcm9wcz8ud2lkZ2V0X3R5cGUsXG4gICAgICApO1xuICAgICAgY29uc3QgbWFwcGVkVHJpZ2dlckxvY2NhdGlvbiA9XG4gICAgICAgIEFtcGxpdHVkZVNlcnZpY2UubWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBtZXNzYWdlX21ldGFkYXRhOiB7XG4gICAgICAgICAgLi4ubWVzc2FnZU1ldGFkYXRhLFxuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24sXG4gICAgICAgICAgZnVsbF90cmlnZ2VyX2xvY2F0aW9uOiB0cmlnZ2VyTG9jYXRpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGNoYXRfY29tcG9uZW50OiBtYXBwZWRXaWRnZXRUeXBlLFxuICAgICAgICAnY2hhdC5jb21wb25lbnRfdmlzaWJsZSc6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnRQcm9wcyA/PyB7fTtcbiAgfVxuXG4gIHN0YXRpYyBpc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKEVudml2ZU1ldHJpY3NFdmVudE5hbWUpLmluY2x1ZGVzKGV2ZW50TmFtZSBhcyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWNvcmF0ZUV2ZW50TmFtZShldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTogc3RyaW5nIHtcbiAgICBpZiAoQW1wbGl0dWRlU2VydmljZS5pc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lKSkge1xuICAgICAgcmV0dXJuIGBbRW52aXZlXSAke2V2ZW50TmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gYFtTcGlmZnldICR7ZXZlbnROYW1lfWA7XG4gIH1cblxuICBhc3luYyB0cmFja0V2ZW50KHtcbiAgICBldmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcyxcbiAgICBldmVudEdyb3VwcyxcbiAgICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzID0gZmFsc2UsXG4gIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIubG9nRGVidWcoJ1N1Ym1pdHRpbmcgZXZlbnQnLCBldmVudE5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvcmF0ZWRFdmVudE5hbWUgPSBBbXBsaXR1ZGVTZXJ2aWNlLmRlY29yYXRlRXZlbnROYW1lKGV2ZW50TmFtZSk7XG5cbiAgICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ2FtcGxpdHVkZSBjbGllbnQgdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBwZWRFdmVudFByb3BzID0gQW1wbGl0dWRlU2VydmljZS5tYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH0pO1xuXG4gICAgICBjb25zdCBldmVudERhdGEgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUoZXZlbnREYXRhKTtcbiAgICAgIC8vIGNhbGN1bGF0ZSBhIGhhc2ggb2YgdGhlIGV2ZW50IHByb3BlcnRpZXMgdG8gdXNlIGFzIHRoZSBpbnNlcnRfaWQgc28gdGhhdCBkdXBsaWNhdGUgZXZlbnRzXG4gICAgICAvLyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIGJ5IEFtcGxpdHVkZVxuICAgICAgY29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgZGF0YSk7XG4gICAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnNlcnRJZCA9IGhhc2hBcnJheS5tYXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcblxuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKGBhbXBsaXR1ZGUgdHJhY2tpbmcgJHtkZWNvcmF0ZWRFdmVudE5hbWV9YCwgbnVsbCwge1xuICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHByb3BzOiBtYXBwZWRFdmVudFByb3BzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LnRyYWNrKFxuICAgICAgICBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKGV2ZW50TmFtZSksXG4gICAgICAgICAgLi4ubWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgICAuLi4obWFwcGVkRXZlbnRQcm9wc1xuICAgICAgICAgICAgPyB0aGlzLmV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhldmVudE5hbWUsIG1hcHBlZEV2ZW50UHJvcHMpXG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmV2ZW50R3JvdXBzLFxuICAgICAgICAgIGluc2VydF9pZDogY3VycmVudEluc2VydElkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSkgJiYgdGhpcy5jb25maWcub3JnR2FDb25maWcpIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHNGb3JHQTQgPSB7XG4gICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhldmVudE5hbWUpLFxuICAgICAgICAgIC4uLm1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgIH07XG4gICAgICAgIHByb2plY3RUb0dBNChldmVudE5hbWUgYXMgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgbWVyZ2VkUHJvcHNGb3JHQTQpO1xuICAgICAgfSBlbHNlIGlmIChhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzICYmIHRoaXMuY29uZmlnLm9yZ0dhQ29uZmlnKSB7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1ZygnR0EgdHJhY2tpbmcnLCBkZWNvcmF0ZWRFdmVudE5hbWUpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRhdGFMYXllcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55W10pLnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignRXJyb3IgdHJhY2tpbmcgZXZlbnQnLCBlcnIsIHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudFByb3BzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5zdXJlIHRoYXQgc3VwcGxlbWVudGFsIGRlZmF1bHQgcHJvcHMgYXJlIG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBwcm9wc1xuICBzZXRTdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMgPSBwcm9wcztc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
|
|
277
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbIkxvZ2dlciIsImVucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4iLCJlbnJpY2hlZEV2ZW50OiBFdmVudCIsImdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtYnJvd3Nlcic7XG5pbXBvcnQgeyBFdmVudHNEaXNwYXRjaGVyLCBTcGlmZnlFdmVudCB9IGZyb20gJ3NyYy9ldmVudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlS2V5cyB9IGZyb20gJ3NyYy9jb250ZXh0cy9sb2NhbFN0b3JhZ2VDb250ZXh0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB0eXBlIHtcbiAgQnJvd3NlckNsaWVudCxcbiAgRW5yaWNobWVudFBsdWdpbixcbiAgRXZlbnQsXG4gIFNlcnZlclpvbmVUeXBlLFxufSBmcm9tICdAYW1wbGl0dWRlL2FuYWx5dGljcy10eXBlcyc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmltcG9ydCB7IFdpZGdldFR5cGVWMyB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlc1YzJztcbmltcG9ydCB7IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMnO1xuaW1wb3J0IHsgcHJvamVjdFRvR0E0IH0gZnJvbSAnLi4vZ2E0UHJvamVjdGlvblNlcnZpY2UvZ2E0UHJvamVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9IGZyb20gJy4vZXZlbnROYW1lcyc7XG5cbi8vIFJlLWV4cG9ydCBldmVudCBuYW1lcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfTtcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignYW1wbGl0dWRlU2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrRXZlbnRQYXJhbXMge1xuICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lO1xuICBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV2ZW50R3JvdXBzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtcGxpdHVkZVNlcnZpY2VDb25maWcge1xuICB1c2VySWQ6IHN0cmluZztcbiAgYW1wbGl0dWRlQXBpS2V5OiBzdHJpbmc7XG4gIGRhdGFSZXNpZGVuY3k6IHN0cmluZztcbiAgZW52OiBzdHJpbmc7XG4gIGNvbnRleHRTb3VyY2U6IHN0cmluZztcbiAgb3JnU2hvcnROYW1lOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIGZlYXR1cmVGbGFnU2VydmljZTogRmVhdHVyZUZsYWdTZXJ2aWNlO1xuICBvcmdHYUNvbmZpZz86IHVua25vd247XG4gIHNob3c6IGJvb2xlYW47XG4gIGVudml2ZU9uOiBib29sZWFuO1xuICBlbmFibGVkRmVhdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgZ2V0TG9jYWxTdG9yYWdlSXRlbTogbnVsbCB8ICgoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwpO1xufVxuXG5leHBvcnQgY2xhc3MgQW1wbGl0dWRlU2VydmljZSB7XG4gIHByaXZhdGUgYW1wbGl0dWRlQ2xpZW50OiBCcm93c2VyQ2xpZW50IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1cHBsZW1lbnRhbERlZmF1bHRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBwcml2YXRlIGNvbmZpZzogQW1wbGl0dWRlU2VydmljZUNvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBpc0R1bW15QXBpS2V5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgPT09ICdtb2NrLWFtcGxpdHVkZS1rZXknO1xuICB9XG5cbiAgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiZcbiAgICAgIHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSAmJlxuICAgICAgdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5ICYmXG4gICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbFN0b3JhZ2VJdGVtKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmdldExvY2FsU3RvcmFnZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRMb2NhbFN0b3JhZ2VJdGVtKGtleSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYWxTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgZmVhdHVyZUdhdGVzID0gT2JqZWN0LmVudHJpZXModGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZlYXR1cmVGbGFncygpKTtcbiAgICBjb25zdCBnYXRlc1Byb3BzID1cbiAgICAgIGZlYXR1cmVHYXRlcy5sZW5ndGggPiAwXG4gICAgICAgID8gZmVhdHVyZUdhdGVzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oKGFjYywgW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2BmZWF0dXJlX2dhdGUuJHtuYW1lfWBdOiB2YWx1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB7fTtcbiAgICBjb25zdCBleHBlcmltZW50UHJvcHMgPSB7fTsgLy8gTm8gZGlyZWN0IGVxdWl2YWxlbnQgZm9yIGV4cGVyaW1lbnRzIGluIEVudml2ZUNvbmZpZyB5ZXRcblxuICAgIGNvbnN0IGVudmlyb25tZW50UHJvcHMgPSB7XG4gICAgICAnZW52aXJvbm1lbnQuZXhlY3V0aW9uX2NvbnRleHQnOiAnYnVuZGxlJyxcbiAgICAgICdlbnZpcm9ubWVudC5wYWdlX3VybCc6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgJ2Vudmlyb25tZW50LmVudml2ZV91c2VyX2lkJzogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgJ2Vudmlyb25tZW50LmV4ZWN1dGlvbl9lbnZpcm9ubWVudCc6IHRoaXMuY29uZmlnLmVudiB8fCAndW5rbm93bicsXG4gICAgICAnZW52aXJvbm1lbnQuY29udGV4dF9zb3VyY2UnOiB0aGlzLmNvbmZpZy5jb250ZXh0U291cmNlLFxuICAgICAgJ2Vudmlyb25tZW50LnNhbGVzX2FnZW50X2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LnNhbGVzQWdlbnQgPz8gZmFsc2UsXG4gICAgICAnZW52aXJvbm1lbnQuc2VhcmNoX2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LnNlYXJjaEFnZW50ID8/IGZhbHNlLFxuICAgICAgJ2Vudmlyb25tZW50LmVudml2ZV9vbl9xdWVyeV9wYXJhbSc6IHRoaXMuY29uZmlnLmVudml2ZU9uLFxuICAgICAgJ2Vudmlyb25tZW50LndpbmRvd19zaG93JzogdGhpcy5jb25maWcuc2hvdyxcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfZW5hYmxlZCc6IHRoaXMuY29uZmlnLmVuYWJsZWRGZWF0dXJlcz8uZW52aXZlLFxuICAgIH07XG5cbiAgICBjb25zdCBvcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMgPSBBbXBsaXR1ZGVTZXJ2aWNlLmlzVjNFbnZpdmVFdmVudChldmVudE5hbWUpXG4gICAgICA/IHtcbiAgICAgICAgLi4udGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZ1bGxGbGFnVmFsdWVzKCksXG4gICAgICAgIC4uLmV4cGVyaW1lbnRQcm9wcyxcbiAgICAgICAgLi4uZW52aXJvbm1lbnRQcm9wcyxcbiAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAuLi5nYXRlc1Byb3BzLFxuICAgICAgICAuLi5leHBlcmltZW50UHJvcHMsXG4gICAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMsXG4gICAgICAuLi50aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyxcbiAgICAgIGFwcF9pZDogJ2NvbW1lcmNlLWNoYXQtcmVhY3QtY29tcG9uZW50JyxcbiAgICAgIGNoYXRfaWQ6IHRoaXMuZ2V0TG9jYWxTdG9yYWdlSXRlbShMb2NhbFN0b3JhZ2VLZXlzLkNoYXRJZCksXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudiB8fCAndW5rbm93bicsXG4gICAgICBhcHBfc291cmNlOiB0aGlzLmNvbmZpZy5jb250ZXh0U291cmNlLFxuICAgICAgb3JnX2lkOiB0aGlzLmNvbmZpZy5vcmdJZCxcbiAgICAgICdvcmcuc2hvcnRfbmFtZSc6IHRoaXMuY29uZmlnLm9yZ1Nob3J0TmFtZSxcbiAgICAgICd1c2VyLmlkJzogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgJ2NkcC51c2VyX2lkJzogbnVsbCxcbiAgICAgICdjZHAucHJvdmlkZXInOiBudWxsLFxuICAgICAgJ2V2ZW50LnNvdXJjZSc6ICd3ZWItYnJvd3NlcicsXG4gICAgICAnZXZlbnQudHlwZSc6ICd1c2VyLWFjdGl2aXR5JyxcbiAgICAgICdldmVudC5pZCc6IG51bGwsXG4gICAgICAnZXZlbnQuY2hhbm5lbCc6ICd3ZWInLFxuICAgICAgJ2V2ZW50LnRpbWVzdGFtcCc6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByaXZhdGUgZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwcmVmaXggPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGV2ZW50UHJvcHMpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2NbYCR7cHJlZml4fS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCk6IEVucmljaG1lbnRQbHVnaW4ge1xuICAgIGlmICh0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luID0ge1xuICAgICAgbmFtZTogJ3BhZ2Utdmlldy10cmFja2luZy1lbnJpY2htZW50JyxcbiAgICAgIHR5cGU6ICdlbnJpY2htZW50JyxcbiAgICAgIHNldHVwOiBhc3luYyAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxFdmVudD4gPT4ge1xuICAgICAgICBsZXQgZW5yaWNoZWRFdmVudDogRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzVG9FbnJpY2ggPSBbXG4gICAgICAgICAgJ1tBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkJyxcbiAgICAgICAgICBgW1NwaWZmeV0gJHtTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChldmVudHNUb0VucmljaC5pbmNsdWRlcyhldmVudC5ldmVudF90eXBlKSkge1xuICAgICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5zaG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuc2hvdyddID0gU3RyaW5nKHRoaXMuY29uZmlnLnNob3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLmVudiddID0gU3RyaW5nKHRoaXMuY29uZmlnLmVudik7XG5cbiAgICAgICAgICBjb25zdCBlbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZz8uZW5hYmxlZEZlYXR1cmVzID8/ICh7fSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiksXG4gICAgICAgICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgW2BlbmFibGVkRmVhdHVyZXMuJHtrZXl9YF06IGAke3ZhbHVlfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB0aW1pbmdQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgJ3RpbWluZy5lbnJpY2hlZF9hdF9tcyc6XG4gICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnBlcmZvcm1hbmNlPy5ub3coKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IHtcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgZXZlbnRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5ldmVudC5ldmVudF9wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50X3R5cGUgYXMgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC4uLmdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLmVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRpbWluZ1Byb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgRXZlbnRzRGlzcGF0Y2hlci5kaXNwYXRjaChTcGlmZnlFdmVudC5BTVBMSVRVREVfRVZFTlQsIGVucmljaGVkRXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBlbnJpY2hlZEV2ZW50O1xuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCA9IGVucmljaG1lbnQ7XG4gICAgcmV0dXJuIGVucmljaG1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgY29uc3QgaXNSZWFkeSA9IEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiYgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICApO1xuXG4gICAgaWYgKCFpc1JlYWR5KSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ0FtcGxpdHVkZVNlcnZpY2UgaXMgbm90IHJlYWR5Jywge1xuICAgICAgICBpc1JlYWR5LFxuICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICAgaGFzRmVhdHVyZUZsYWdTZXJ2aWNlOiAhIXRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSxcbiAgICAgICAgaGFzQW1wbGl0dWRlQXBpS2V5OiAhIXRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRHVtbXlBcGlLZXkpIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnRHVtbXkgQVBJIGtleSBkZXRlY3RlZCDigJQgcnVubmluZyBpbiBtb2NrIG1vZGUsIG5vIGV2ZW50cyB3aWxsIGJlIHNlbnQgdG8gQW1wbGl0dWRlLicsXG4gICAgICAgIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFtcGxpdHVkZUNsaWVudCkge1xuICAgICAgY29uc3QgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50ID0gY3JlYXRlSW5zdGFuY2UoKTtcblxuICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmFkZCh0aGlzLmdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCkpO1xuICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmluaXQodGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LCB0aGlzLmNvbmZpZy51c2VySWQsIHtcbiAgICAgICAgc2VydmVyWm9uZTogdGhpcy5jb25maWcuZGF0YVJlc2lkZW5jeSBhcyBTZXJ2ZXJab25lVHlwZSxcbiAgICAgICAgdHJhY2tpbmdPcHRpb25zOiB7XG4gICAgICAgICAgaXBBZGRyZXNzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBhdXRvY2FwdHVyZToge1xuICAgICAgICAgIGF0dHJpYnV0aW9uOiB0cnVlLFxuICAgICAgICAgIHBhZ2VWaWV3czoge1xuICAgICAgICAgICAgdHJhY2tIaXN0b3J5Q2hhbmdlczogJ3BhdGhPbmx5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlc3Npb25zOiBmYWxzZSxcbiAgICAgICAgICBmb3JtSW50ZXJhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICBmaWxlRG93bmxvYWRzOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQgPSBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQod2lkZ2V0VHlwZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5GbG9hdGluZ0J1dHRvblYzOlxuICAgICAgICByZXR1cm4gJ2Zsb2F0aW5nX2J1dHRvbic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWMzpcbiAgICAgICAgcmV0dXJuICdlbWJlZGRlZF93aWRnZXQnO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuVGl0bGVkUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlByb21wdENhcm91c2VsVjM6XG4gICAgICAgIHJldHVybiAnc3VnZ2VzdGlvbl9iYXInO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvZHVjdENhcmRWMzpcbiAgICAgICAgcmV0dXJuICdpbWFnZV9wcm9tcHRfY2FyZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRyaWdnZXJMb2NhdGlvbikge1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9URVhUX0ZJRUxEOlxuICAgICAgICByZXR1cm4gJ3Byb21wdF9jYXJkJztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9NUFRfQ0FST1VTRUw6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVElUTEVEX1BST01QVF9DQVJPVVNFTDpcbiAgICAgICAgcmV0dXJuICd0b3BfcmV2aWV3c19zbmlwcGV0JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5UWVBJTkdfQU5JTUFUSU9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9QUklNQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfU0VDT05EQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfVEVYVF9GSUVMRDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1RFWFRfRklFTEQ6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1RFWFRfRklFTEQ6XG4gICAgICAgIHJldHVybiAnY2hhdF9wcmV2aWV3JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX09WRVJMQVk6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9DTE9TRV9CVVRUT046XG4gICAgICAgIHJldHVybiAnaW5fY2hhdCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJpZ2dlckxvY2F0aW9uIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICAvLyBUaGlzIGFsbG93cyB1cyB0byBtYXAgdGhlIGV2ZW50IHByb3BzIHRvIHRoZSBjb3JyZWN0IGZvcm1hdCBmb3IgdGhlIGxlZ2FjeSBhbXBsaXR1ZGUgZXZlbnRzXG4gIHN0YXRpYyBtYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgbWVzc2FnZU1ldGFkYXRhID0gZXZlbnRQcm9wcz8ubWVzc2FnZV9tZXRhZGF0YSA/PyB7fTtcbiAgICBjb25zdCB0cmlnZ2VyTG9jYXRpb24gPVxuICAgICAgbWVzc2FnZU1ldGFkYXRhICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBtZXNzYWdlTWV0YWRhdGEgPT09ICdvYmplY3QnICYmXG4gICAgICAgICd0cmlnZ2VyX2xvY2F0aW9uJyBpbiBtZXNzYWdlTWV0YWRhdGFcbiAgICAgICAgPyBtZXNzYWdlTWV0YWRhdGEudHJpZ2dlcl9sb2NhdGlvblxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChldmVudE5hbWUgPT09IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudEV4cGFuZGVkKSB7XG4gICAgICBjb25zdCBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uID1cbiAgICAgICAgQW1wbGl0dWRlU2VydmljZS5tYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIG1lc3NhZ2VfbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5tZXNzYWdlTWV0YWRhdGEsXG4gICAgICAgICAgdHJpZ2dlcl9sb2NhdGlvbjogbWFwcGVkVHJpZ2dlckxvY2NhdGlvbixcbiAgICAgICAgICBmdWxsX3RyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50VmlzaWJsZSkge1xuICAgICAgY29uc3QgbWFwcGVkV2lkZ2V0VHlwZSA9IEFtcGxpdHVkZVNlcnZpY2UubWFwV2lkZ2V0VHlwZVRvQ2hhdENvbXBvbmVudChcbiAgICAgICAgZXZlbnRQcm9wcz8ud2lkZ2V0X3R5cGUsXG4gICAgICApO1xuICAgICAgY29uc3QgbWFwcGVkVHJpZ2dlckxvY2NhdGlvbiA9XG4gICAgICAgIEFtcGxpdHVkZVNlcnZpY2UubWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBtZXNzYWdlX21ldGFkYXRhOiB7XG4gICAgICAgICAgLi4ubWVzc2FnZU1ldGFkYXRhLFxuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24sXG4gICAgICAgICAgZnVsbF90cmlnZ2VyX2xvY2F0aW9uOiB0cmlnZ2VyTG9jYXRpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGNoYXRfY29tcG9uZW50OiBtYXBwZWRXaWRnZXRUeXBlLFxuICAgICAgICAnY2hhdC5jb21wb25lbnRfdmlzaWJsZSc6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnRQcm9wcyA/PyB7fTtcbiAgfVxuXG4gIHN0YXRpYyBpc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKEVudml2ZU1ldHJpY3NFdmVudE5hbWUpLmluY2x1ZGVzKGV2ZW50TmFtZSBhcyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWNvcmF0ZUV2ZW50TmFtZShldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTogc3RyaW5nIHtcbiAgICBpZiAoQW1wbGl0dWRlU2VydmljZS5pc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lKSkge1xuICAgICAgcmV0dXJuIGBbRW52aXZlXSAke2V2ZW50TmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gYFtTcGlmZnldICR7ZXZlbnROYW1lfWA7XG4gIH1cblxuICBhc3luYyB0cmFja0V2ZW50KHtcbiAgICBldmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcyxcbiAgICBldmVudEdyb3VwcyxcbiAgICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzID0gZmFsc2UsXG4gIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIubG9nRGVidWcoJ1N1Ym1pdHRpbmcgZXZlbnQnLCBldmVudE5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvcmF0ZWRFdmVudE5hbWUgPSBBbXBsaXR1ZGVTZXJ2aWNlLmRlY29yYXRlRXZlbnROYW1lKGV2ZW50TmFtZSk7XG5cbiAgICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ2FtcGxpdHVkZSBjbGllbnQgdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBwZWRFdmVudFByb3BzID0gQW1wbGl0dWRlU2VydmljZS5tYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH0pO1xuXG4gICAgICBjb25zdCBldmVudERhdGEgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUoZXZlbnREYXRhKTtcbiAgICAgIC8vIGNhbGN1bGF0ZSBhIGhhc2ggb2YgdGhlIGV2ZW50IHByb3BlcnRpZXMgdG8gdXNlIGFzIHRoZSBpbnNlcnRfaWQgc28gdGhhdCBkdXBsaWNhdGUgZXZlbnRzXG4gICAgICAvLyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIGJ5IEFtcGxpdHVkZVxuICAgICAgY29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgZGF0YSk7XG4gICAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnNlcnRJZCA9IGhhc2hBcnJheS5tYXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcblxuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKGBhbXBsaXR1ZGUgdHJhY2tpbmcgJHtkZWNvcmF0ZWRFdmVudE5hbWV9YCwgbnVsbCwge1xuICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHByb3BzOiBtYXBwZWRFdmVudFByb3BzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LnRyYWNrKFxuICAgICAgICBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKGV2ZW50TmFtZSksXG4gICAgICAgICAgLi4ubWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgICAuLi4obWFwcGVkRXZlbnRQcm9wc1xuICAgICAgICAgICAgPyB0aGlzLmV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhldmVudE5hbWUsIG1hcHBlZEV2ZW50UHJvcHMpXG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmV2ZW50R3JvdXBzLFxuICAgICAgICAgIGluc2VydF9pZDogY3VycmVudEluc2VydElkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSkgJiYgdGhpcy5jb25maWcub3JnR2FDb25maWcpIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHNGb3JHQTQgPSB7XG4gICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhldmVudE5hbWUpLFxuICAgICAgICAgIC4uLm1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgIH07XG4gICAgICAgIHByb2plY3RUb0dBNChldmVudE5hbWUgYXMgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgbWVyZ2VkUHJvcHNGb3JHQTQpO1xuICAgICAgfSBlbHNlIGlmIChhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzICYmIHRoaXMuY29uZmlnLm9yZ0dhQ29uZmlnKSB7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1ZygnR0EgdHJhY2tpbmcnLCBkZWNvcmF0ZWRFdmVudE5hbWUpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRhdGFMYXllcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55W10pLnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignRXJyb3IgdHJhY2tpbmcgZXZlbnQnLCBlcnIsIHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudFByb3BzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5zdXJlIHRoYXQgc3VwcGxlbWVudGFsIGRlZmF1bHQgcHJvcHMgYXJlIG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBwcm9wc1xuICBzZXRTdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMgPSBwcm9wcztcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFtQkEsTUFBTSxTQUFTLElBQUlBLGVBQU8sbUJBQW1CO0FBeUI3QyxJQUFhLG1CQUFiLE1BQWEsaUJBQWlCO0NBUzVCLFlBQVksUUFBZ0M7a0NBSmdCLEVBQUU7QUFLNUQsT0FBSyxTQUFTO0FBQ2QsT0FBSyxZQUFZOztDQUduQixJQUFJLGdCQUF5QjtBQUMzQixTQUFPLEtBQUssT0FBTyxvQkFBb0I7O0NBR3pDLElBQUksVUFBbUI7QUFDckIsU0FBTyxRQUNMLEtBQUssT0FBTyxVQUNaLEtBQUssT0FBTyxzQkFDWixLQUFLLE9BQU8sbUJBQ1osS0FBSyxnQkFDTjs7Q0FHSCxBQUFRLG9CQUFvQixLQUE0QjtBQUN0RCxNQUFJLEtBQUssT0FBTyxvQkFDZCxRQUFPLEtBQUssT0FBTyxvQkFBb0IsSUFBSTtBQUU3QyxNQUFJLE9BQU8sV0FBVyxlQUFlLE9BQU8sYUFDMUMsUUFBTyxPQUFPLGFBQWEsUUFBUSxJQUFJO0FBRXpDLFNBQU87O0NBR1QsQUFBUSx3QkFDTixXQUN5QjtFQUN6QixNQUFNLGVBQWUsT0FBTyxRQUFRLEtBQUssT0FBTyxtQkFBbUIsaUJBQWlCLENBQUM7RUFDckYsTUFBTSxhQUNKLGFBQWEsU0FBUyxJQUNsQixhQUFhLFFBQWlDLEtBQUssQ0FBQyxNQUFNLFdBQVc7QUFDckUsT0FBSSxRQUFRLFNBQVMsS0FDbkIsUUFBTztJQUFFLEdBQUc7S0FBTSxnQkFBZ0IsU0FBUztJQUFPO0FBRXBELFVBQU87S0FDTixFQUFFLENBQUMsR0FDSixFQUFFO0VBQ1IsTUFBTSxrQkFBa0IsRUFBRTtFQUUxQixNQUFNLG1CQUFtQjtHQUN2QixpQ0FBaUM7R0FDakMsd0JBQXdCLE9BQU8sU0FBUztHQUN4Qyw4QkFBOEIsS0FBSyxPQUFPO0dBQzFDLHFDQUFxQyxLQUFLLE9BQU8sT0FBTztHQUN4RCw4QkFBOEIsS0FBSyxPQUFPO0dBQzFDLG1DQUFtQyxLQUFLLE9BQU8saUJBQWlCLGNBQWM7R0FDOUUsOEJBQThCLEtBQUssT0FBTyxpQkFBaUIsZUFBZTtHQUMxRSxxQ0FBcUMsS0FBSyxPQUFPO0dBQ2pELDJCQUEyQixLQUFLLE9BQU87R0FDdkMsOEJBQThCLEtBQUssT0FBTyxpQkFBaUI7R0FDNUQ7QUFZRCxTQUFPO0dBQ0wsR0FYcUMsaUJBQWlCLGdCQUFnQixVQUFVLEdBQzlFO0lBQ0EsR0FBRyxLQUFLLE9BQU8sbUJBQW1CLG1CQUFtQjtJQUNyRCxHQUFHO0lBQ0gsR0FBRztJQUNKLEdBQ0M7SUFDQSxHQUFHO0lBQ0gsR0FBRztJQUNKO0dBR0QsR0FBRyxLQUFLO0dBQ1IsUUFBUTtHQUNSLFNBQVMsS0FBSyxvQkFBb0IsaUJBQWlCLE9BQU87R0FDMUQsS0FBSyxLQUFLLE9BQU8sT0FBTztHQUN4QixZQUFZLEtBQUssT0FBTztHQUN4QixRQUFRLEtBQUssT0FBTztHQUNwQixrQkFBa0IsS0FBSyxPQUFPO0dBQzlCLFdBQVcsS0FBSyxPQUFPO0dBQ3ZCLGVBQWU7R0FDZixnQkFBZ0I7R0FDaEIsZ0JBQWdCO0dBQ2hCLGNBQWM7R0FDZCxZQUFZO0dBQ1osaUJBQWlCO0dBQ2pCLG1CQUFtQjtHQUNwQjs7Q0FJSCxBQUFRLCtCQUNOLFdBQ0EsWUFDeUI7RUFDekIsTUFBTSxTQUFTLFVBQVUsYUFBYSxDQUFDLFFBQVEsUUFBUSxJQUFJO0FBQzNELFNBQU8sT0FBTyxRQUFRLFdBQVcsQ0FBQyxRQUMvQixLQUFLLENBQUMsS0FBSyxXQUFXO0FBQ3JCLE9BQUksR0FBRyxPQUFPLEdBQUcsU0FBUztBQUMxQixVQUFPO0tBRVQsRUFBRSxDQUNIOztDQUdILEFBQVEsNkJBQStDO0FBQ3JELE1BQUksS0FBSyxvQ0FBb0MsT0FDM0MsUUFBTyxLQUFLO0VBR2QsTUFBTUMsYUFBK0I7R0FDbkMsTUFBTTtHQUNOLE1BQU07R0FDTixPQUFPLFlBQVk7R0FDbkIsU0FBUyxPQUFPLFVBQWlDO0lBQy9DLElBQUlDO0FBT0osUUFMdUIsQ0FDckIsMkJBQ0EsWUFBWSx1QkFBdUIsZUFDcEMsQ0FFa0IsU0FBUyxNQUFNLFdBQVcsRUFBRTtLQUM3QyxNQUFNQyxtQkFBMkMsRUFBRTtBQUVuRCxTQUFJLEtBQUssT0FBTyxRQUFRLEtBQ3RCLGtCQUFpQiwyQkFBMkIsT0FBTyxLQUFLLE9BQU8sS0FBSztBQUV0RSxzQkFBaUIsMEJBQTBCLE9BQU8sS0FBSyxPQUFPLElBQUk7S0FFbEUsTUFBTSw0QkFBNEIsT0FBTyxRQUN2QyxLQUFLLFFBQVEsbUJBQW9CLEVBQUUsQ0FDcEMsQ0FBQyxRQUNDLEtBQUssQ0FBQyxLQUFLLFlBQVk7TUFDdEIsR0FBRztPQUNGLG1CQUFtQixRQUFRLEdBQUc7TUFDaEMsR0FDRCxFQUFFLENBQ0g7S0FFRCxNQUFNLG1CQUFtQixFQUN2Qix5QkFDRSxPQUFPLFdBQVcsY0FBYyxPQUFPLGFBQWEsS0FBSyxHQUFHLFFBQy9EO0FBRUQscUJBQWdCO01BQ2QsR0FBRztNQUNILGtCQUFrQjtPQUNoQixHQUFHLE1BQU07T0FDVCxHQUFHLEtBQUssd0JBQ04sTUFBTSxXQUNQO09BQ0QsR0FBRztPQUNILEdBQUc7T0FDSCxHQUFHO09BQ0o7TUFDRjtVQUVELGlCQUFnQjtBQUdsQixxQkFBaUIsU0FBUyxZQUFZLGlCQUFpQixjQUFjO0FBRXJFLFdBQU87O0dBRVY7QUFDRCxPQUFLLGtDQUFrQztBQUN2QyxTQUFPOztDQUdULEFBQVEsYUFBbUI7RUFDekIsTUFBTSxVQUFVLFFBQ2QsS0FBSyxPQUFPLFVBQVUsS0FBSyxPQUFPLHNCQUFzQixLQUFLLE9BQU8sZ0JBQ3JFO0FBRUQsTUFBSSxDQUFDLFNBQVM7QUFDWixVQUFPLFNBQVMsaUNBQWlDO0lBQy9DO0lBQ0EsUUFBUSxLQUFLLE9BQU87SUFDcEIsdUJBQXVCLENBQUMsQ0FBQyxLQUFLLE9BQU87SUFDckMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLE9BQU87SUFDbkMsQ0FBQztBQUNGOztBQUdGLE1BQUksS0FBSyxlQUFlO0FBQ3RCLFVBQU8sUUFDTCx1RkFDQSxLQUFLLE9BQU8sZ0JBQ2I7QUFDRDs7QUFHRixNQUFJLENBQUMsS0FBSyxpQkFBaUI7R0FDekIsTUFBTUMsMkJBQTBDLGdCQUFnQjtBQUVoRSw0QkFBeUIsSUFBSSxLQUFLLDRCQUE0QixDQUFDO0FBQy9ELDRCQUF5QixLQUFLLEtBQUssT0FBTyxpQkFBaUIsS0FBSyxPQUFPLFFBQVE7SUFDN0UsWUFBWSxLQUFLLE9BQU87SUFDeEIsaUJBQWlCLEVBQ2YsV0FBVyxNQUNaO0lBQ0QsYUFBYTtLQUNYLGFBQWE7S0FDYixXQUFXLEVBQ1QscUJBQXFCLFlBQ3RCO0tBQ0QsVUFBVTtLQUNWLGtCQUFrQjtLQUNsQixlQUFlO0tBQ2hCO0lBQ0YsQ0FBQztBQUNGLFFBQUssa0JBQWtCOzs7Q0FJM0IsT0FBTyw2QkFBNkIsWUFBNkI7QUFDL0QsVUFBUSxZQUFSO0dBQ0UsS0FBSyxhQUFhLGlCQUNoQixRQUFPO0dBQ1QsS0FBSyxhQUFhO0dBQ2xCLEtBQUssYUFBYSxjQUNoQixRQUFPO0dBQ1QsS0FBSyxhQUFhO0dBQ2xCLEtBQUssYUFBYSxpQkFDaEIsUUFBTztHQUNULEtBQUssYUFBYSxjQUNoQixRQUFPO0dBQ1QsUUFDRSxRQUFPOzs7Q0FJYixPQUFPLGtDQUFrQyxpQkFBa0M7QUFDekUsVUFBUSxpQkFBUjtHQUNFLEtBQUssNkJBQTZCO0dBQ2xDLEtBQUssNkJBQTZCLHdCQUNoQyxRQUFPO0dBQ1QsS0FBSyw2QkFBNkI7R0FDbEMsS0FBSyw2QkFBNkIsdUJBQ2hDLFFBQU87R0FDVCxLQUFLLDZCQUE2QjtHQUNsQyxLQUFLLDZCQUE2QjtHQUNsQyxLQUFLLDZCQUE2QjtHQUNsQyxLQUFLLDZCQUE2QjtHQUNsQyxLQUFLLDZCQUE2QjtHQUNsQyxLQUFLLDZCQUE2QjtHQUNsQyxLQUFLLDZCQUE2QjtHQUNsQyxLQUFLLDZCQUE2Qix3QkFDaEMsUUFBTztHQUNULEtBQUssNkJBQTZCO0dBQ2xDLEtBQUssNkJBQTZCLDJCQUNoQyxRQUFPO0dBQ1QsUUFDRSxRQUFPOzs7Q0FLYixPQUFPLGNBQWMsRUFBRSxXQUFXLGNBQXlEO0VBQ3pGLE1BQU0sa0JBQWtCLFlBQVksb0JBQW9CLEVBQUU7RUFDMUQsTUFBTSxrQkFDSixvQkFBb0IsUUFDbEIsT0FBTyxvQkFBb0IsWUFDM0Isc0JBQXNCLGtCQUNwQixnQkFBZ0IsbUJBQ2hCO0FBRU4sTUFBSSxjQUFjLHVCQUF1Qix1QkFBdUI7R0FDOUQsTUFBTSx5QkFDSixpQkFBaUIsa0NBQWtDLGdCQUFnQjtBQUNyRSxVQUFPO0lBQ0wsR0FBRztJQUNILGtCQUFrQjtLQUNoQixHQUFHO0tBQ0gsa0JBQWtCO0tBQ2xCLHVCQUF1QjtLQUN4QjtJQUNGOztBQUdILE1BQUksY0FBYyx1QkFBdUIsc0JBQXNCO0dBQzdELE1BQU0sbUJBQW1CLGlCQUFpQiw2QkFDeEMsWUFBWSxZQUNiO0dBQ0QsTUFBTSx5QkFDSixpQkFBaUIsa0NBQWtDLGdCQUFnQjtBQUNyRSxVQUFPO0lBQ0wsR0FBRztJQUNILGtCQUFrQjtLQUNoQixHQUFHO0tBQ0gsa0JBQWtCO0tBQ2xCLHVCQUF1QjtLQUN4QjtJQUNELGdCQUFnQjtJQUNoQiwwQkFBMEI7SUFDM0I7O0FBRUgsU0FBTyxjQUFjLEVBQUU7O0NBR3pCLE9BQU8sZ0JBQWdCLFdBQXFFO0FBQzFGLFNBQU8sT0FBTyxPQUFPLHVCQUF1QixDQUFDLFNBQVMsVUFBb0M7O0NBRzVGLE9BQU8sa0JBQWtCLFdBQW9FO0FBQzNGLE1BQUksaUJBQWlCLGdCQUFnQixVQUFVLENBQzdDLFFBQU8sWUFBWTtBQUVyQixTQUFPLFlBQVk7O0NBR3JCLE1BQU0sV0FBVyxFQUNmLFdBQ0EsWUFDQSxhQUNBLDRCQUE0QixTQUNNO0FBQ2xDLFNBQU8sU0FBUyxvQkFBb0IsVUFBVTtBQUM5QyxNQUFJO0dBQ0YsTUFBTSxxQkFBcUIsaUJBQWlCLGtCQUFrQixVQUFVO0FBRXhFLE9BQUksQ0FBQyxLQUFLLGlCQUFpQjtBQUN6QixXQUFPLFFBQVEsOEJBQThCLFFBQVcsRUFDdEQsWUFBWSxvQkFDYixDQUFDO0FBQ0Y7O0dBR0YsTUFBTSxtQkFBbUIsaUJBQWlCLGNBQWM7SUFBRTtJQUFXO0lBQVksQ0FBQztHQUVsRixNQUFNLFlBQVksS0FBSyxVQUFVO0lBQy9CO0lBQ0EsWUFBWTtJQUNaLDZCQUFZLElBQUksTUFBTSxFQUFDLGFBQWE7SUFDckMsQ0FBQztHQUVGLE1BQU0sT0FEVSxJQUFJLGFBQWEsQ0FDWixPQUFPLFVBQVU7R0FHdEMsTUFBTSxhQUFhLE1BQU0sT0FBTyxPQUFPLE9BQU8sV0FBVyxLQUFLO0dBRTlELE1BQU0sa0JBRFksTUFBTSxLQUFLLElBQUksV0FBVyxXQUFXLENBQUMsQ0FDdEIsS0FBSSxNQUFLLEVBQUUsU0FBUyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRztBQUVwRixVQUFPLFNBQVMsc0JBQXNCLHNCQUFzQixNQUFNO0lBQ2hFLFlBQVk7SUFDWixPQUFPO0lBQ1IsQ0FBQztBQUVGLFFBQUssZ0JBQWdCLE1BQ25CLG9CQUNBO0lBQ0UsR0FBRyxLQUFLLHdCQUF3QixVQUFVO0lBQzFDLEdBQUc7SUFDSCxHQUFJLG1CQUNBLEtBQUssK0JBQStCLFdBQVcsaUJBQWlCLEdBQ2hFLEVBQUU7SUFDUCxFQUNEO0lBQ0UsR0FBRztJQUNILFdBQVc7SUFDWixDQUNGO0FBRUQsT0FBSSxpQkFBaUIsZ0JBQWdCLFVBQVUsSUFBSSxLQUFLLE9BQU8sWUFLN0QsY0FBYSxXQUphO0lBQ3hCLEdBQUcsS0FBSyx3QkFBd0IsVUFBVTtJQUMxQyxHQUFHO0lBQ0osQ0FDbUU7WUFDM0QsNkJBQTZCLEtBQUssT0FBTyxhQUFhO0FBQy9ELFdBQU8sU0FBUyxlQUFlLG1CQUFtQjtBQUNsRCxRQUFJLE9BQU8sV0FBVyxlQUFlLE9BQU8sVUFFMUMsQ0FBQyxPQUFPLFVBQW9CLEtBQUs7S0FDL0IsT0FBTztLQUNQO0tBQ0QsQ0FBQzs7V0FHQyxLQUFLO0FBQ1osVUFBTyxTQUFTLHdCQUF3QixLQUFLO0lBQzNDO0lBQ0E7SUFDRCxDQUFDOzs7Q0FLTiw0QkFBNEIsT0FBc0M7QUFDaEUsT0FBSywyQkFBMkIifQ==
|
package/package.json
CHANGED
|
@@ -23,6 +23,7 @@ export { EnviveMetricsEventName, SpiffyMetricsEventName };
|
|
|
23
23
|
interface AmplitudeContextType {
|
|
24
24
|
trackEvent: (params: TrackEventParams) => Promise<void>;
|
|
25
25
|
isReady: boolean;
|
|
26
|
+
isMockMode: boolean;
|
|
26
27
|
setSupplementalDefaultProps: (props: Record<string, unknown>) => void;
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -55,6 +56,7 @@ export const AmplitudeProvider: React.FC<{
|
|
|
55
56
|
const [service, setService] = useState<AmplitudeService | null>(null);
|
|
56
57
|
|
|
57
58
|
const isReady = Boolean(userId && service && service.isReady);
|
|
59
|
+
const isMockMode = Boolean(service?.isDummyApiKey);
|
|
58
60
|
|
|
59
61
|
// Create service instance when dependencies are ready
|
|
60
62
|
useEffect(() => {
|
|
@@ -109,16 +111,17 @@ export const AmplitudeProvider: React.FC<{
|
|
|
109
111
|
}
|
|
110
112
|
},
|
|
111
113
|
isReady,
|
|
114
|
+
isMockMode,
|
|
112
115
|
setSupplementalDefaultProps: (props: Record<string, unknown>) => {
|
|
113
116
|
if (service) {
|
|
114
117
|
service.setSupplementalDefaultProps(props);
|
|
115
118
|
}
|
|
116
119
|
},
|
|
117
120
|
}),
|
|
118
|
-
[service, isReady],
|
|
121
|
+
[service, isReady, isMockMode],
|
|
119
122
|
);
|
|
120
123
|
|
|
121
|
-
if (!isReady) {
|
|
124
|
+
if (!isReady && !isMockMode) {
|
|
122
125
|
return null;
|
|
123
126
|
}
|
|
124
127
|
|
|
@@ -51,13 +51,15 @@ export class AmplitudeService {
|
|
|
51
51
|
|
|
52
52
|
private config: AmplitudeServiceConfig;
|
|
53
53
|
|
|
54
|
-
private _isMockMode: boolean = false;
|
|
55
|
-
|
|
56
54
|
constructor(config: AmplitudeServiceConfig) {
|
|
57
55
|
this.config = config;
|
|
58
56
|
this.initialize();
|
|
59
57
|
}
|
|
60
58
|
|
|
59
|
+
get isDummyApiKey(): boolean {
|
|
60
|
+
return this.config.amplitudeApiKey === 'mock-amplitude-key';
|
|
61
|
+
}
|
|
62
|
+
|
|
61
63
|
get isReady(): boolean {
|
|
62
64
|
return Boolean(
|
|
63
65
|
this.config.userId &&
|
|
@@ -67,10 +69,6 @@ export class AmplitudeService {
|
|
|
67
69
|
);
|
|
68
70
|
}
|
|
69
71
|
|
|
70
|
-
get isMockMode(): boolean {
|
|
71
|
-
return this._isMockMode;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
72
|
private getLocalStorageItem(key: string): string | null {
|
|
75
73
|
if (this.config.getLocalStorageItem) {
|
|
76
74
|
return this.config.getLocalStorageItem(key);
|
|
@@ -219,13 +217,6 @@ export class AmplitudeService {
|
|
|
219
217
|
return enrichment;
|
|
220
218
|
}
|
|
221
219
|
|
|
222
|
-
private static isValidAmplitudeApiKey(apiKey: string): boolean {
|
|
223
|
-
if (apiKey === 'mock-amplitude-key') {
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
226
|
-
return true;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
220
|
private initialize(): void {
|
|
230
221
|
const isReady = Boolean(
|
|
231
222
|
this.config.userId && this.config.featureFlagService && this.config.amplitudeApiKey,
|
|
@@ -241,8 +232,7 @@ export class AmplitudeService {
|
|
|
241
232
|
return;
|
|
242
233
|
}
|
|
243
234
|
|
|
244
|
-
if (
|
|
245
|
-
this._isMockMode = true;
|
|
235
|
+
if (this.isDummyApiKey) {
|
|
246
236
|
logger.logWarn(
|
|
247
237
|
'Dummy API key detected — running in mock mode, no events will be sent to Amplitude.',
|
|
248
238
|
this.config.amplitudeApiKey,
|