@dbx-tools/teams 0.6.46 → 0.6.49
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/lib/src/config.js +10 -35
- package/lib/src/runtime.js +20 -26
- package/package.json +3 -3
- package/src/config.ts +9 -41
- package/src/runtime.ts +19 -25
package/lib/src/config.js
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* @module
|
|
29
29
|
*/
|
|
30
30
|
import { ValidationError } from "@databricks/appkit";
|
|
31
|
-
import {
|
|
31
|
+
import { env, object } from "@dbx-tools/shared-core";
|
|
32
32
|
import { card } from "@dbx-tools/shared-teams";
|
|
33
33
|
/** Dedicated override for the Adaptive Card schema version the builder targets. */
|
|
34
34
|
export const CARD_VERSION_ENV = "TEAMS_CARD_VERSION";
|
|
@@ -103,52 +103,27 @@ export const TEAMS_CONFIG_SCHEMA = {
|
|
|
103
103
|
* valid absolute URL, since that is a deploy-time mistake.
|
|
104
104
|
*/
|
|
105
105
|
export function resolveTeamsConfig(overrides) {
|
|
106
|
-
const cardVersion = string
|
|
107
|
-
|
|
108
|
-
card.ADAPTIVE_CARD_VERSION;
|
|
109
|
-
const webhookUrl = string.trimToNull(overrides?.webhookUrl) ?? string.trimToNull(process.env[WEBHOOK_URL_ENV]);
|
|
106
|
+
const cardVersion = env.string(overrides?.cardVersion, CARD_VERSION_ENV) ?? card.ADAPTIVE_CARD_VERSION;
|
|
107
|
+
const webhookUrl = env.string(overrides?.webhookUrl, WEBHOOK_URL_ENV);
|
|
110
108
|
if (webhookUrl !== null && !isAbsoluteUrl(webhookUrl)) {
|
|
111
109
|
throw ValidationError.invalidValue(WEBHOOK_URL_ENV, webhookUrl, "an absolute https URL for the Teams webhook");
|
|
112
110
|
}
|
|
113
|
-
const agentPlugin = string
|
|
114
|
-
string.trimToNull(process.env[AGENT_PLUGIN_ENV]) ??
|
|
115
|
-
DEFAULT_AGENT_PLUGIN;
|
|
111
|
+
const agentPlugin = env.string(overrides?.agentPlugin, AGENT_PLUGIN_ENV) ?? DEFAULT_AGENT_PLUGIN;
|
|
116
112
|
// Two independent conditions must BOTH hold: the operator asked for it, and
|
|
117
113
|
// this is a development build. Gating on `NODE_ENV` as well means a stray
|
|
118
114
|
// variable in a production environment cannot silently expose the endpoint.
|
|
119
|
-
const requested = overrides?.allowUnauthenticated
|
|
115
|
+
const requested = env.boolean(overrides?.allowUnauthenticated, ALLOW_UNAUTHENTICATED_ENV);
|
|
120
116
|
const allowUnauthenticated = requested === true && process.env.NODE_ENV === "development";
|
|
121
117
|
return {
|
|
122
118
|
cardVersion,
|
|
123
119
|
agentPlugin,
|
|
124
120
|
allowUnauthenticated,
|
|
125
|
-
...(webhookUrl
|
|
126
|
-
...
|
|
127
|
-
...
|
|
128
|
-
...
|
|
121
|
+
...object.optional("webhookUrl", webhookUrl),
|
|
122
|
+
...object.optional("appId", env.string(overrides?.appId, APP_ID_ENVS)),
|
|
123
|
+
...object.optional("appPassword", env.string(overrides?.appPassword, APP_PASSWORD_ENVS)),
|
|
124
|
+
...object.optional("appTenantId", env.string(overrides?.appTenantId, APP_TENANT_ENVS)),
|
|
129
125
|
};
|
|
130
126
|
}
|
|
131
|
-
/**
|
|
132
|
-
* First non-empty value among `names` in the environment, or `null`. Lets a
|
|
133
|
-
* `TEAMS_*` variable win over the `MICROSOFT_APP_*` alias the Bot Framework SDK
|
|
134
|
-
* uses without duplicating the lookup per field.
|
|
135
|
-
*/
|
|
136
|
-
function fromEnv(names) {
|
|
137
|
-
for (const name of names) {
|
|
138
|
-
const value = string.trimToNull(process.env[name]);
|
|
139
|
-
if (value !== null)
|
|
140
|
-
return value;
|
|
141
|
-
}
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* `{ [key]: value }` when `value` is present, otherwise nothing - so an absent
|
|
146
|
-
* optional field stays ABSENT rather than becoming an explicit `undefined`,
|
|
147
|
-
* which `exactOptionalPropertyTypes` rejects.
|
|
148
|
-
*/
|
|
149
|
-
function spread(key, value) {
|
|
150
|
-
return value === null ? undefined : { [key]: value };
|
|
151
|
-
}
|
|
152
127
|
/** Whether `value` parses as an absolute URL. */
|
|
153
128
|
function isAbsoluteUrl(value) {
|
|
154
129
|
try {
|
|
@@ -160,4 +135,4 @@ function isAbsoluteUrl(value) {
|
|
|
160
135
|
return false;
|
|
161
136
|
}
|
|
162
137
|
}
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUVILE9BQU8sRUFBRSxlQUFlLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHL0MsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO0FBRXJELG1FQUFtRTtBQUNuRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLENBQUM7QUFFbkQsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO0FBRXJEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQVUsQ0FBQztBQUV6RSwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSx3QkFBd0IsQ0FBVSxDQUFDO0FBRTNGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLHFCQUFxQixFQUFFLHlCQUF5QixDQUFVLENBQUM7QUFFM0Y7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLDZCQUE2QixDQUFDO0FBRXZFOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztBQW1GN0Msa0ZBQWtGO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFnQjtJQUM5QyxJQUFJLEVBQUUsUUFBUTtJQUNkLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IsVUFB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eEU7UUFDRCxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ2hHLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsT0FBTyxDQUFDLEtBQXdCO0lBQ3ZDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxLQUFLLEtBQUssSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxNQUFNLENBQW1CLEdBQU0sRUFBRSxLQUFvQjtJQUM1RCxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBd0IsQ0FBQztBQUM5RSxDQUFDO0FBRUQsaURBQWlEO0FBQ2pELFNBQVMsYUFBYSxDQUFDLEtBQWE7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsa0NBQWtDO1FBQ2xDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIFRlYW1zIHBsdWdpbjogdGhlIHR5cGVkIHtAbGluayBUZWFtc1BsdWdpbkNvbmZpZ31cbiAqICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0IGNvbmZpZyksIHRoZSBKU09OIFNjaGVtYSB0aGUgbWFuaWZlc3RcbiAqIHB1Ymxpc2hlcyBmb3IgaXQsIGFuZCB7QGxpbmsgcmVzb2x2ZVRlYW1zQ29uZmlnfSB3aGljaCBsYXllcnMgdGhhdCBjb25maWdcbiAqIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGUge0BsaW5rIFJlc29sdmVkVGVhbXNDb25maWd9IHRoZVxuICogcnVudGltZSArIHRvb2xzIHJlYWQuXG4gKlxuICogQnVpbGRpbmcgYSBjYXJkIGlzIGEgcHVyZSB0cmFuc2Zvcm0sIHNvIHRoZSBjb25maWcgaXMgZGVsaWJlcmF0ZWx5IHNtYWxsOlxuICogdGhlIEFkYXB0aXZlIENhcmQgdmVyc2lvbiB0aGUgYnVpbGRlciB0YXJnZXRzLCBhbiBvcHRpb25hbCBUZWFtc1xuICogaW5jb21pbmctd2ViaG9vayBVUkwgYSBkZXBsb3ltZW50IGNhbiB3aXJlIHVwIHRvIGFjdHVhbGx5IFBPU1QgY2FyZHMgdG8gYVxuICogY2hhbm5lbCwgYW5kIHdoaWNoIHNpYmxpbmcgcGx1Z2luIG93bnMgdGhlIGFnZW50cyB0aGUgY29udmVyc2F0aW9uIGVuZHBvaW50XG4gKiBhbnN3ZXJzIHdpdGguXG4gKlxuICogVGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlIHRoZSBBenVyZSBCb3QgcmVnaXN0cmF0aW9uIGEgcmVhbCBUZWFtcyBjaGFubmVsXG4gKiBuZWVkczogYGFwcElkYCAvIGBhcHBQYXNzd29yZGAgKHRoZSBib3QncyBFbnRyYSBhcHBsaWNhdGlvbiBjcmVkZW50aWFscywgdXNlZFxuICogYm90aCB0byB2YWxpZGF0ZSB0aGUgaW5ib3VuZCBKV1QgYXVkaWVuY2UgYW5kIHRvIGZldGNoIHRoZSBvdXRib3VuZCBDb25uZWN0b3JcbiAqIHRva2VuKSBhbmQgYGFwcFRlbmFudElkYCAoc2V0IG9ubHkgZm9yIGEgc2luZ2xlLXRlbmFudCBib3QpLiBXaGVuIG5vIGBhcHBJZGBcbiAqIGlzIGNvbmZpZ3VyZWQgdGhlIGAvbWVzc2FnZXNgIGVuZHBvaW50IHN0YXlzIE1PVU5URUQgYnV0IHJlZnVzZXMgZXZlcnlcbiAqIHJlcXVlc3QsIHNvIGFuIHVuY29uZmlndXJlZCBkZXBsb3ltZW50IGNhbm5vdCBhY2NpZGVudGFsbHkgZXhwb3NlIGFuXG4gKiB1bmF1dGhlbnRpY2F0ZWQgYm90IGVuZHBvaW50LlxuICpcbiAqIEVudiBmYWxsYmFja3M6IGBURUFNU19DQVJEX1ZFUlNJT05gLCBgVEVBTVNfV0VCSE9PS19VUkxgLFxuICogYFRFQU1TX0FHRU5UX1BMVUdJTmAsIGBURUFNU19BUFBfSURgLCBgVEVBTVNfQVBQX1BBU1NXT1JEYCxcbiAqIGBURUFNU19BUFBfVEVOQU5UX0lEYC4gVGhlIGBNSUNST1NPRlRfQVBQXypgIHNwZWxsaW5ncyB0aGUgQm90IEZyYW1ld29yayBTREtcbiAqIHVzZXMgYXJlIGFjY2VwdGVkIGFzIGFsaWFzZXMgc28gYW4gZXhpc3RpbmcgYm90J3MgZW52aXJvbm1lbnQgZHJvcHMgaW5cbiAqIHVuY2hhbmdlZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yLCB0eXBlIEJhc2VQbHVnaW5Db25maWcgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBvYmplY3QsIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBjYXJkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXRlYW1zXCI7XG5pbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE3IH0gZnJvbSBcImpzb24tc2NoZW1hXCI7XG5cbi8qKiBEZWRpY2F0ZWQgb3ZlcnJpZGUgZm9yIHRoZSBBZGFwdGl2ZSBDYXJkIHNjaGVtYSB2ZXJzaW9uIHRoZSBidWlsZGVyIHRhcmdldHMuICovXG5leHBvcnQgY29uc3QgQ0FSRF9WRVJTSU9OX0VOViA9IFwiVEVBTVNfQ0FSRF9WRVJTSU9OXCI7XG5cbi8qKiBFbnZpcm9ubWVudCBuYW1lIGZvciBhbiBvcHRpb25hbCBUZWFtcyBpbmNvbWluZy13ZWJob29rIFVSTC4gKi9cbmV4cG9ydCBjb25zdCBXRUJIT09LX1VSTF9FTlYgPSBcIlRFQU1TX1dFQkhPT0tfVVJMXCI7XG5cbi8qKiBFbnZpcm9ubWVudCBuYW1lIG92ZXJyaWRpbmcgd2hpY2ggc2libGluZyBwbHVnaW4gcHJvdmlkZXMgdGhlIGFnZW50cy4gKi9cbmV4cG9ydCBjb25zdCBBR0VOVF9QTFVHSU5fRU5WID0gXCJURUFNU19BR0VOVF9QTFVHSU5cIjtcblxuLyoqXG4gKiBFbnZpcm9ubWVudCBuYW1lcyBmb3IgdGhlIGJvdCdzIEVudHJhIGFwcCBpZCwgaW4gcHJlY2VkZW5jZSBvcmRlci4gVGhlXG4gKiBgTUlDUk9TT0ZUX0FQUF9JRGAgYWxpYXMgaXMgd2hhdCB0aGUgQm90IEZyYW1ld29yayBTREsgYW5kIHRoZSBBenVyZSBwb3J0YWwnc1xuICogZ2VuZXJhdGVkIHNldHRpbmdzIHVzZSwgc28gYW4gZXhpc3RpbmcgYm90IGRlcGxveW1lbnQgbmVlZHMgbm8gbmV3IHZhcmlhYmxlLlxuICovXG5leHBvcnQgY29uc3QgQVBQX0lEX0VOVlMgPSBbXCJURUFNU19BUFBfSURcIiwgXCJNSUNST1NPRlRfQVBQX0lEXCJdIGFzIGNvbnN0O1xuXG4vKiogRW52aXJvbm1lbnQgbmFtZXMgZm9yIHRoZSBib3QncyBjbGllbnQgc2VjcmV0LCBpbiBwcmVjZWRlbmNlIG9yZGVyLiAqL1xuZXhwb3J0IGNvbnN0IEFQUF9QQVNTV09SRF9FTlZTID0gW1wiVEVBTVNfQVBQX1BBU1NXT1JEXCIsIFwiTUlDUk9TT0ZUX0FQUF9QQVNTV09SRFwiXSBhcyBjb25zdDtcblxuLyoqXG4gKiBFbnZpcm9ubWVudCBuYW1lcyBmb3IgdGhlIGJvdCdzIHRlbmFudCwgaW4gcHJlY2VkZW5jZSBvcmRlci4gU2V0IG9ubHkgZm9yIGFcbiAqIHNpbmdsZS10ZW5hbnQgYm90OyBhIG11bHRpLXRlbmFudCBib3QgbGVhdmVzIGl0IHVuc2V0LlxuICovXG5leHBvcnQgY29uc3QgQVBQX1RFTkFOVF9FTlZTID0gW1wiVEVBTVNfQVBQX1RFTkFOVF9JRFwiLCBcIk1JQ1JPU09GVF9BUFBfVEVOQU5UX0lEXCJdIGFzIGNvbnN0O1xuXG4vKipcbiAqIEVudmlyb25tZW50IG5hbWUgZm9yIHRoZSB1bmF1dGhlbnRpY2F0ZWQtbWVzc2FnaW5nIGVzY2FwZSBoYXRjaC4gTmFtZWRcbiAqIGBURUFNU19BTExPV19VTkFVVEhFTlRJQ0FURURgIChyYXRoZXIgdGhhbiBzb21ldGhpbmcgc29mdGVyIGxpa2UgYFRFQU1TX0RFVmApXG4gKiBzbyB3aGF0IGl0IGRpc2FibGVzIGlzIHVubWlzdGFrYWJsZSBpbiBhIHNoZWxsIGhpc3Rvcnkgb3IgZGVwbG95IG1hbmlmZXN0LlxuICovXG5leHBvcnQgY29uc3QgQUxMT1dfVU5BVVRIRU5USUNBVEVEX0VOViA9IFwiVEVBTVNfQUxMT1dfVU5BVVRIRU5USUNBVEVEXCI7XG5cbi8qKlxuICogRGVmYXVsdCByZWdpc3RlcmVkIG5hbWUgb2YgdGhlIHBsdWdpbiB0aGUgY29udmVyc2F0aW9uIGVuZHBvaW50IGFza3MgZm9yIGFuXG4gKiBhZ2VudC4gYG1hc3RyYWAgaXMgdGhlIG5hbWUgYEBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYWAgcmVnaXN0ZXJzIHVuZGVyLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9BR0VOVF9QTFVHSU4gPSBcIm1hc3RyYVwiO1xuXG4vKiogQXBwS2l0IGNvbmZpZyBhY2NlcHRlZCBieSB0aGUgVGVhbXMgcGx1Z2luLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZWFtc1BsdWdpbkNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcge1xuICAvKipcbiAgICogQWRhcHRpdmUgQ2FyZCBzY2hlbWEgdmVyc2lvbiB0aGUgYnVpbGRlciB0YXJnZXRzLiBEZWZhdWx0cyB0b1xuICAgKiB7QGxpbmsgY2FyZC5BREFQVElWRV9DQVJEX1ZFUlNJT059IChgXCIxLjVcImAsIHdoYXQgVGVhbXMgc3VwcG9ydHMpLiBGYWxsc1xuICAgKiBiYWNrIHRvIGBURUFNU19DQVJEX1ZFUlNJT05gLlxuICAgKi9cbiAgY2FyZFZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBUZWFtcyBpbmNvbWluZy13ZWJob29rIFVSTC4gV2hlbiBzZXQsIHRoZSBwbHVnaW4ncyBgcG9zdENhcmRgXG4gICAqIGV4cG9ydCAvIHJvdXRlIHBvc3RzIHRoZSBjb21waWxlZCBjYXJkIHRvIHRoaXMgY2hhbm5lbDsgd2hlbiB1bnNldCxcbiAgICogcG9zdGluZyBpcyBkaXNhYmxlZCBhbmQgdGhlIHBsdWdpbiBvbmx5IGJ1aWxkcyBjYXJkcyBmb3IgdGhlIFVJIHRvIHJlbmRlci5cbiAgICogRmFsbHMgYmFjayB0byBgVEVBTVNfV0VCSE9PS19VUkxgLlxuICAgKi9cbiAgd2ViaG9va1VybD86IHN0cmluZztcbiAgLyoqXG4gICAqIFJlZ2lzdGVyZWQgbmFtZSBvZiB0aGUgc2libGluZyBwbHVnaW4gd2hvc2UgYWdlbnRzIGFuc3dlciBhIGNvbnZlcnNhdGlvblxuICAgKiB0dXJuLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9BR0VOVF9QTFVHSU59IChgXCJtYXN0cmFcImApOyBzZXQgaXQgd2hlbiB0aGVcbiAgICogTWFzdHJhIHBsdWdpbiBpcyBtb3VudGVkIHVuZGVyIGEgYGNvbmZpZy5uYW1lYCBvdmVycmlkZS4gRmFsbHMgYmFjayB0b1xuICAgKiBgVEVBTVNfQUdFTlRfUExVR0lOYC5cbiAgICovXG4gIGFnZW50UGx1Z2luPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGJvdCdzIEVudHJhIGFwcGxpY2F0aW9uIChjbGllbnQpIGlkIGZyb20gaXRzIEF6dXJlIEJvdCByZWdpc3RyYXRpb24uXG4gICAqIFJlcXVpcmVkIGJlZm9yZSBgUE9TVCAvYXBpL3RlYW1zL21lc3NhZ2VzYCB3aWxsIGFjY2VwdCBhIHJlcXVlc3Q6IGl0IGlzIHRoZVxuICAgKiBhdWRpZW5jZSBhbiBpbmJvdW5kIEJvdCBGcmFtZXdvcmsgdG9rZW4gbXVzdCBjYXJyeSwgYW5kIHRoZSBjbGllbnQgaWQgdXNlZFxuICAgKiB0byBmZXRjaCBhbiBvdXRib3VuZCBDb25uZWN0b3IgdG9rZW4uIEZhbGxzIGJhY2sgdG8gYFRFQU1TX0FQUF9JRGAgL1xuICAgKiBgTUlDUk9TT0ZUX0FQUF9JRGAuXG4gICAqL1xuICBhcHBJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIENsaWVudCBzZWNyZXQgZm9yIHtAbGluayBhcHBJZH0uIE5lZWRlZCB0byBzZW5kIHJlcGxpZXMgdGhyb3VnaCB0aGVcbiAgICogQ29ubmVjdG9yIEFQSTsgd2l0aG91dCBpdCBpbmJvdW5kIGFjdGl2aXRpZXMgc3RpbGwgdmFsaWRhdGUgYnV0IHRoZSBib3RcbiAgICogY2Fubm90IGFuc3dlci4gRmFsbHMgYmFjayB0byBgVEVBTVNfQVBQX1BBU1NXT1JEYCAvXG4gICAqIGBNSUNST1NPRlRfQVBQX1BBU1NXT1JEYC5cbiAgICovXG4gIGFwcFBhc3N3b3JkPzogc3RyaW5nO1xuICAvKipcbiAgICogVGVuYW50IGlkIGZvciBhIFNJTkdMRS10ZW5hbnQgYm90IHJlZ2lzdHJhdGlvbi4gTGVhdmUgdW5zZXQgZm9yIGFcbiAgICogbXVsdGktdGVuYW50IGJvdC4gRmFsbHMgYmFjayB0byBgVEVBTVNfQVBQX1RFTkFOVF9JRGAgL1xuICAgKiBgTUlDUk9TT0ZUX0FQUF9URU5BTlRfSURgLlxuICAgKi9cbiAgYXBwVGVuYW50SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXJ2ZSBgUE9TVCAvbWVzc2FnZXNgIHdpdGggTk8gaW5ib3VuZCB0b2tlbiB2YWxpZGF0aW9uLCBhbmQgcmVwbHkgaW4gdGhlXG4gICAqIEhUVFAgcmVzcG9uc2UgaW5zdGVhZCBvZiB0aHJvdWdoIHRoZSBDb25uZWN0b3IgQVBJLlxuICAgKlxuICAgKiBUaGlzIGV4aXN0cyBzbyB0aGUgbWVzc2FnaW5nIGVuZHBvaW50IGNhbiBiZSBleGVyY2lzZWQgbG9jYWxseSAtIGJ5IHRoZVxuICAgKiBpbi1yZXBvIHByZXZpZXcgY2hhdCwgYSBgY3VybGAsIG9yIHRoZSBCb3QgRnJhbWV3b3JrIEVtdWxhdG9yIC0gd2l0aG91dCBhblxuICAgKiBBenVyZSBCb3QgcmVnaXN0cmF0aW9uLiBJdCByZW1vdmVzIHRoZSBlbmRwb2ludCdzIE9OTFkgdHJ1c3QgYm91bmRhcnk6IGFueVxuICAgKiBjYWxsZXIgdGhhdCBjYW4gcmVhY2ggdGhlIHJvdXRlIGNhbiBkcml2ZSB0aGUgYWdlbnQgYW5kIHJlYWQgaXRzIGFuc3dlcnMuXG4gICAqXG4gICAqIE5ldmVyIGVuYWJsZSBpdCBvbiBhIGRlcGxveW1lbnQgcmVhY2hhYmxlIGZyb20gdGhlIGludGVybmV0LiBJdCBpcyBpZ25vcmVkXG4gICAqIHVubGVzcyBgTk9ERV9FTlZgIGlzIGBkZXZlbG9wbWVudGAgKHNlZSB7QGxpbmsgcmVzb2x2ZVRlYW1zQ29uZmlnfSksIHNvIGFcbiAgICogcHJvZHVjdGlvbiBidWlsZCBjYW5ub3QgYmUgdGFsa2VkIGludG8gaXQgYnkgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgYWxvbmUuXG4gICAqIEZhbGxzIGJhY2sgdG8gYFRFQU1TX0FMTE9XX1VOQVVUSEVOVElDQVRFRGAuXG4gICAqL1xuICBhbGxvd1VuYXV0aGVudGljYXRlZD86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgY29uY3JldGUgY29uZmlnIHRoZSBydW50aW1lIHJlYWRzLCBhZnRlciBjb25maWcgKyBlbnYgcmVzb2x1dGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRUZWFtc0NvbmZpZyB7XG4gIC8qKiBBZGFwdGl2ZSBDYXJkIHNjaGVtYSB2ZXJzaW9uIHRoZSBidWlsZGVyIHN0YW1wcyBvbnRvIGV2ZXJ5IGRvY3VtZW50LiAqL1xuICBjYXJkVmVyc2lvbjogc3RyaW5nO1xuICAvKiogVGVhbXMgaW5jb21pbmctd2ViaG9vayBVUkwsIG9yIGB1bmRlZmluZWRgIHdoZW4gcG9zdGluZyBpcyBkaXNhYmxlZC4gKi9cbiAgd2ViaG9va1VybD86IHN0cmluZztcbiAgLyoqIFJlZ2lzdGVyZWQgbmFtZSBvZiB0aGUgcGx1Z2luIHRoZSBjb252ZXJzYXRpb24gZW5kcG9pbnQgcmVzb2x2ZXMgYWdlbnRzIGZyb20uICovXG4gIGFnZW50UGx1Z2luOiBzdHJpbmc7XG4gIC8qKiBCb3QgYXBwIChjbGllbnQpIGlkLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vIGJvdCByZWdpc3RyYXRpb24gaXMgY29uZmlndXJlZC4gKi9cbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIC8qKiBCb3QgY2xpZW50IHNlY3JldCwgb3IgYHVuZGVmaW5lZGAgd2hlbiByZXBsaWVzIGNhbm5vdCBiZSBzZW50LiAqL1xuICBhcHBQYXNzd29yZD86IHN0cmluZztcbiAgLyoqIFRlbmFudCBpZCBmb3IgYSBzaW5nbGUtdGVuYW50IGJvdCwgb3IgYHVuZGVmaW5lZGAgZm9yIGEgbXVsdGktdGVuYW50IG9uZS4gKi9cbiAgYXBwVGVuYW50SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGBQT1NUIC9tZXNzYWdlc2Agc2VydmVzIHR1cm5zIHdpdGggTk8gdG9rZW4gdmFsaWRhdGlvbi4gU2VlXG4gICAqIHtAbGluayBUZWFtc1BsdWdpbkNvbmZpZy5hbGxvd1VuYXV0aGVudGljYXRlZH0uXG4gICAqL1xuICBhbGxvd1VuYXV0aGVudGljYXRlZDogYm9vbGVhbjtcbn1cblxuLyoqIEpTT04gU2NoZW1hIHB1Ymxpc2hlZCBpbiB0aGUgcGx1Z2luIG1hbmlmZXN0IGZvciB7QGxpbmsgVGVhbXNQbHVnaW5Db25maWd9LiAqL1xuZXhwb3J0IGNvbnN0IFRFQU1TX0NPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBjYXJkVmVyc2lvbjoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgQWRhcHRpdmUgQ2FyZCBzY2hlbWEgdmVyc2lvbiB0aGUgYnVpbGRlciB0YXJnZXRzLiAke0NBUkRfVkVSU0lPTl9FTlZ9IG92ZXJyaWRlcyBpdC5gLFxuICAgIH0sXG4gICAgd2ViaG9va1VybDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgT3B0aW9uYWwgVGVhbXMgaW5jb21pbmctd2ViaG9vayBVUkwgdXNlZCB0byBwb3N0IGNhcmRzLiAke1dFQkhPT0tfVVJMX0VOVn0gb3ZlcnJpZGVzIGl0LmAsXG4gICAgfSxcbiAgICBhZ2VudFBsdWdpbjoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgUmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBzaWJsaW5nIHBsdWdpbiB3aG9zZSBhZ2VudHMgYW5zd2VyIGEgY29udmVyc2F0aW9uIHR1cm4uICR7QUdFTlRfUExVR0lOX0VOVn0gb3ZlcnJpZGVzIGl0LmAsXG4gICAgfSxcbiAgICBhcHBJZDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgRW50cmEgYXBwIChjbGllbnQpIGlkIG9mIHRoZSBBenVyZSBCb3QgcmVnaXN0cmF0aW9uLiBSZXF1aXJlZCBmb3IgdGhlIFRlYW1zIG1lc3NhZ2luZyBlbmRwb2ludC4gJHtBUFBfSURfRU5WU1swXX0gb3ZlcnJpZGVzIGl0LmAsXG4gICAgfSxcbiAgICBhcHBQYXNzd29yZDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgQ2xpZW50IHNlY3JldCBmb3IgdGhlIGJvdCBhcHAgaWQsIHVzZWQgdG8gZmV0Y2ggYW4gb3V0Ym91bmQgQ29ubmVjdG9yIHRva2VuLiAke0FQUF9QQVNTV09SRF9FTlZTWzBdfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFwcFRlbmFudElkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBUZW5hbnQgaWQgZm9yIGEgc2luZ2xlLXRlbmFudCBib3QgcmVnaXN0cmF0aW9uOyB1bnNldCBmb3IgbXVsdGktdGVuYW50LiAke0FQUF9URU5BTlRfRU5WU1swXX0gb3ZlcnJpZGVzIGl0LmAsXG4gICAgfSxcbiAgICBhbGxvd1VuYXV0aGVudGljYXRlZDoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJTZXJ2ZSB0aGUgVGVhbXMgbWVzc2FnaW5nIGVuZHBvaW50IHdpdGggTk8gdG9rZW4gdmFsaWRhdGlvbiwgcmVwbHlpbmcgaW4gXCIgK1xuICAgICAgICBcInRoZSBIVFRQIHJlc3BvbnNlLiBMb2NhbCBkZXZlbG9wbWVudCBvbmx5OyBpZ25vcmVkIHVubGVzcyBOT0RFX0VOViBpcyBcIiArXG4gICAgICAgIGBkZXZlbG9wbWVudC4gJHtBTExPV19VTkFVVEhFTlRJQ0FURURfRU5WfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICB9LFxufTtcblxuLyoqXG4gKiBMYXllciB0aGUgcGx1Z2luIGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlIGNvbmZpZ1xuICogdGhlIHJ1bnRpbWUgdXNlcy4gRmFpbHMgbG91ZGx5IG9uIGEgd2ViaG9vayBVUkwgdGhhdCBpcyBwcmVzZW50IGJ1dCBub3QgYVxuICogdmFsaWQgYWJzb2x1dGUgVVJMLCBzaW5jZSB0aGF0IGlzIGEgZGVwbG95LXRpbWUgbWlzdGFrZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUZWFtc0NvbmZpZyhvdmVycmlkZXM/OiBUZWFtc1BsdWdpbkNvbmZpZyk6IFJlc29sdmVkVGVhbXNDb25maWcge1xuICBjb25zdCBjYXJkVmVyc2lvbiA9XG4gICAgc3RyaW5nLnRyaW1Ub051bGwob3ZlcnJpZGVzPy5jYXJkVmVyc2lvbikgPz9cbiAgICBzdHJpbmcudHJpbVRvTnVsbChwcm9jZXNzLmVudltDQVJEX1ZFUlNJT05fRU5WXSkgPz9cbiAgICBjYXJkLkFEQVBUSVZFX0NBUkRfVkVSU0lPTjtcbiAgY29uc3Qgd2ViaG9va1VybCA9XG4gICAgc3RyaW5nLnRyaW1Ub051bGwob3ZlcnJpZGVzPy53ZWJob29rVXJsKSA/PyBzdHJpbmcudHJpbVRvTnVsbChwcm9jZXNzLmVudltXRUJIT09LX1VSTF9FTlZdKTtcbiAgaWYgKHdlYmhvb2tVcmwgIT09IG51bGwgJiYgIWlzQWJzb2x1dGVVcmwod2ViaG9va1VybCkpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgV0VCSE9PS19VUkxfRU5WLFxuICAgICAgd2ViaG9va1VybCxcbiAgICAgIFwiYW4gYWJzb2x1dGUgaHR0cHMgVVJMIGZvciB0aGUgVGVhbXMgd2ViaG9va1wiLFxuICAgICk7XG4gIH1cbiAgY29uc3QgYWdlbnRQbHVnaW4gPVxuICAgIHN0cmluZy50cmltVG9OdWxsKG92ZXJyaWRlcz8uYWdlbnRQbHVnaW4pID8/XG4gICAgc3RyaW5nLnRyaW1Ub051bGwocHJvY2Vzcy5lbnZbQUdFTlRfUExVR0lOX0VOVl0pID8/XG4gICAgREVGQVVMVF9BR0VOVF9QTFVHSU47XG4gIC8vIFR3byBpbmRlcGVuZGVudCBjb25kaXRpb25zIG11c3QgQk9USCBob2xkOiB0aGUgb3BlcmF0b3IgYXNrZWQgZm9yIGl0LCBhbmRcbiAgLy8gdGhpcyBpcyBhIGRldmVsb3BtZW50IGJ1aWxkLiBHYXRpbmcgb24gYE5PREVfRU5WYCBhcyB3ZWxsIG1lYW5zIGEgc3RyYXlcbiAgLy8gdmFyaWFibGUgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50IGNhbm5vdCBzaWxlbnRseSBleHBvc2UgdGhlIGVuZHBvaW50LlxuICBjb25zdCByZXF1ZXN0ZWQgPVxuICAgIG92ZXJyaWRlcz8uYWxsb3dVbmF1dGhlbnRpY2F0ZWQgPz8gb2JqZWN0LnRvQm9vbGVhbihwcm9jZXNzLmVudltBTExPV19VTkFVVEhFTlRJQ0FURURfRU5WXSk7XG4gIGNvbnN0IGFsbG93VW5hdXRoZW50aWNhdGVkID0gcmVxdWVzdGVkID09PSB0cnVlICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCI7XG4gIHJldHVybiB7XG4gICAgY2FyZFZlcnNpb24sXG4gICAgYWdlbnRQbHVnaW4sXG4gICAgYWxsb3dVbmF1dGhlbnRpY2F0ZWQsXG4gICAgLi4uKHdlYmhvb2tVcmwgIT09IG51bGwgPyB7IHdlYmhvb2tVcmwgfSA6IHt9KSxcbiAgICAuLi5zcHJlYWQoXCJhcHBJZFwiLCBzdHJpbmcudHJpbVRvTnVsbChvdmVycmlkZXM/LmFwcElkKSA/PyBmcm9tRW52KEFQUF9JRF9FTlZTKSksXG4gICAgLi4uc3ByZWFkKFxuICAgICAgXCJhcHBQYXNzd29yZFwiLFxuICAgICAgc3RyaW5nLnRyaW1Ub051bGwob3ZlcnJpZGVzPy5hcHBQYXNzd29yZCkgPz8gZnJvbUVudihBUFBfUEFTU1dPUkRfRU5WUyksXG4gICAgKSxcbiAgICAuLi5zcHJlYWQoXCJhcHBUZW5hbnRJZFwiLCBzdHJpbmcudHJpbVRvTnVsbChvdmVycmlkZXM/LmFwcFRlbmFudElkKSA/PyBmcm9tRW52KEFQUF9URU5BTlRfRU5WUykpLFxuICB9O1xufVxuXG4vKipcbiAqIEZpcnN0IG5vbi1lbXB0eSB2YWx1ZSBhbW9uZyBgbmFtZXNgIGluIHRoZSBlbnZpcm9ubWVudCwgb3IgYG51bGxgLiBMZXRzIGFcbiAqIGBURUFNU18qYCB2YXJpYWJsZSB3aW4gb3ZlciB0aGUgYE1JQ1JPU09GVF9BUFBfKmAgYWxpYXMgdGhlIEJvdCBGcmFtZXdvcmsgU0RLXG4gKiB1c2VzIHdpdGhvdXQgZHVwbGljYXRpbmcgdGhlIGxvb2t1cCBwZXIgZmllbGQuXG4gKi9cbmZ1bmN0aW9uIGZyb21FbnYobmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgIGNvbnN0IHZhbHVlID0gc3RyaW5nLnRyaW1Ub051bGwocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIGB7IFtrZXldOiB2YWx1ZSB9YCB3aGVuIGB2YWx1ZWAgaXMgcHJlc2VudCwgb3RoZXJ3aXNlIG5vdGhpbmcgLSBzbyBhbiBhYnNlbnRcbiAqIG9wdGlvbmFsIGZpZWxkIHN0YXlzIEFCU0VOVCByYXRoZXIgdGhhbiBiZWNvbWluZyBhbiBleHBsaWNpdCBgdW5kZWZpbmVkYCxcbiAqIHdoaWNoIGBleGFjdE9wdGlvbmFsUHJvcGVydHlUeXBlc2AgcmVqZWN0cy5cbiAqL1xuZnVuY3Rpb24gc3ByZWFkPEsgZXh0ZW5kcyBzdHJpbmc+KGtleTogSywgdmFsdWU6IHN0cmluZyB8IG51bGwpOiBSZWNvcmQ8Sywgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6ICh7IFtrZXldOiB2YWx1ZSB9IGFzIFJlY29yZDxLLCBzdHJpbmc+KTtcbn1cblxuLyoqIFdoZXRoZXIgYHZhbHVlYCBwYXJzZXMgYXMgYW4gYWJzb2x1dGUgVVJMLiAqL1xuZnVuY3Rpb24gaXNBYnNvbHV0ZVVybCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ld1xuICAgIG5ldyBVUkwodmFsdWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUVILE9BQU8sRUFBRSxlQUFlLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHL0MsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO0FBRXJELG1FQUFtRTtBQUNuRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLENBQUM7QUFFbkQsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO0FBRXJEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQVUsQ0FBQztBQUV6RSwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSx3QkFBd0IsQ0FBVSxDQUFDO0FBRTNGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLHFCQUFxQixFQUFFLHlCQUF5QixDQUFVLENBQUM7QUFFM0Y7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLDZCQUE2QixDQUFDO0FBRXZFOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztBQW1GN0Msa0ZBQWtGO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFnQjtJQUM5QyxJQUFJLEVBQUUsUUFBUTtJQUNkLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IsVUFB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ZixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgVGVhbXMgcGx1Z2luOiB0aGUgdHlwZWQge0BsaW5rIFRlYW1zUGx1Z2luQ29uZmlnfVxuICogKHRoZSBwbHVnaW4ncyBzbGljZSBvZiBBcHBLaXQgY29uZmlnKSwgdGhlIEpTT04gU2NoZW1hIHRoZSBtYW5pZmVzdFxuICogcHVibGlzaGVzIGZvciBpdCwgYW5kIHtAbGluayByZXNvbHZlVGVhbXNDb25maWd9IHdoaWNoIGxheWVycyB0aGF0IGNvbmZpZ1xuICogb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cyBpbnRvIHRoZSBjb25jcmV0ZSB7QGxpbmsgUmVzb2x2ZWRUZWFtc0NvbmZpZ30gdGhlXG4gKiBydW50aW1lICsgdG9vbHMgcmVhZC5cbiAqXG4gKiBCdWlsZGluZyBhIGNhcmQgaXMgYSBwdXJlIHRyYW5zZm9ybSwgc28gdGhlIGNvbmZpZyBpcyBkZWxpYmVyYXRlbHkgc21hbGw6XG4gKiB0aGUgQWRhcHRpdmUgQ2FyZCB2ZXJzaW9uIHRoZSBidWlsZGVyIHRhcmdldHMsIGFuIG9wdGlvbmFsIFRlYW1zXG4gKiBpbmNvbWluZy13ZWJob29rIFVSTCBhIGRlcGxveW1lbnQgY2FuIHdpcmUgdXAgdG8gYWN0dWFsbHkgUE9TVCBjYXJkcyB0byBhXG4gKiBjaGFubmVsLCBhbmQgd2hpY2ggc2libGluZyBwbHVnaW4gb3ducyB0aGUgYWdlbnRzIHRoZSBjb252ZXJzYXRpb24gZW5kcG9pbnRcbiAqIGFuc3dlcnMgd2l0aC5cbiAqXG4gKiBUaGUgcmVtYWluaW5nIGZpZWxkcyBhcmUgdGhlIEF6dXJlIEJvdCByZWdpc3RyYXRpb24gYSByZWFsIFRlYW1zIGNoYW5uZWxcbiAqIG5lZWRzOiBgYXBwSWRgIC8gYGFwcFBhc3N3b3JkYCAodGhlIGJvdCdzIEVudHJhIGFwcGxpY2F0aW9uIGNyZWRlbnRpYWxzLCB1c2VkXG4gKiBib3RoIHRvIHZhbGlkYXRlIHRoZSBpbmJvdW5kIEpXVCBhdWRpZW5jZSBhbmQgdG8gZmV0Y2ggdGhlIG91dGJvdW5kIENvbm5lY3RvclxuICogdG9rZW4pIGFuZCBgYXBwVGVuYW50SWRgIChzZXQgb25seSBmb3IgYSBzaW5nbGUtdGVuYW50IGJvdCkuIFdoZW4gbm8gYGFwcElkYFxuICogaXMgY29uZmlndXJlZCB0aGUgYC9tZXNzYWdlc2AgZW5kcG9pbnQgc3RheXMgTU9VTlRFRCBidXQgcmVmdXNlcyBldmVyeVxuICogcmVxdWVzdCwgc28gYW4gdW5jb25maWd1cmVkIGRlcGxveW1lbnQgY2Fubm90IGFjY2lkZW50YWxseSBleHBvc2UgYW5cbiAqIHVuYXV0aGVudGljYXRlZCBib3QgZW5kcG9pbnQuXG4gKlxuICogRW52IGZhbGxiYWNrczogYFRFQU1TX0NBUkRfVkVSU0lPTmAsIGBURUFNU19XRUJIT09LX1VSTGAsXG4gKiBgVEVBTVNfQUdFTlRfUExVR0lOYCwgYFRFQU1TX0FQUF9JRGAsIGBURUFNU19BUFBfUEFTU1dPUkRgLFxuICogYFRFQU1TX0FQUF9URU5BTlRfSURgLiBUaGUgYE1JQ1JPU09GVF9BUFBfKmAgc3BlbGxpbmdzIHRoZSBCb3QgRnJhbWV3b3JrIFNES1xuICogdXNlcyBhcmUgYWNjZXB0ZWQgYXMgYWxpYXNlcyBzbyBhbiBleGlzdGluZyBib3QncyBlbnZpcm9ubWVudCBkcm9wcyBpblxuICogdW5jaGFuZ2VkLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIHR5cGUgQmFzZVBsdWdpbkNvbmZpZyB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGVudiwgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGNhcmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtdGVhbXNcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcblxuLyoqIERlZGljYXRlZCBvdmVycmlkZSBmb3IgdGhlIEFkYXB0aXZlIENhcmQgc2NoZW1hIHZlcnNpb24gdGhlIGJ1aWxkZXIgdGFyZ2V0cy4gKi9cbmV4cG9ydCBjb25zdCBDQVJEX1ZFUlNJT05fRU5WID0gXCJURUFNU19DQVJEX1ZFUlNJT05cIjtcblxuLyoqIEVudmlyb25tZW50IG5hbWUgZm9yIGFuIG9wdGlvbmFsIFRlYW1zIGluY29taW5nLXdlYmhvb2sgVVJMLiAqL1xuZXhwb3J0IGNvbnN0IFdFQkhPT0tfVVJMX0VOViA9IFwiVEVBTVNfV0VCSE9PS19VUkxcIjtcblxuLyoqIEVudmlyb25tZW50IG5hbWUgb3ZlcnJpZGluZyB3aGljaCBzaWJsaW5nIHBsdWdpbiBwcm92aWRlcyB0aGUgYWdlbnRzLiAqL1xuZXhwb3J0IGNvbnN0IEFHRU5UX1BMVUdJTl9FTlYgPSBcIlRFQU1TX0FHRU5UX1BMVUdJTlwiO1xuXG4vKipcbiAqIEVudmlyb25tZW50IG5hbWVzIGZvciB0aGUgYm90J3MgRW50cmEgYXBwIGlkLCBpbiBwcmVjZWRlbmNlIG9yZGVyLiBUaGVcbiAqIGBNSUNST1NPRlRfQVBQX0lEYCBhbGlhcyBpcyB3aGF0IHRoZSBCb3QgRnJhbWV3b3JrIFNESyBhbmQgdGhlIEF6dXJlIHBvcnRhbCdzXG4gKiBnZW5lcmF0ZWQgc2V0dGluZ3MgdXNlLCBzbyBhbiBleGlzdGluZyBib3QgZGVwbG95bWVudCBuZWVkcyBubyBuZXcgdmFyaWFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBBUFBfSURfRU5WUyA9IFtcIlRFQU1TX0FQUF9JRFwiLCBcIk1JQ1JPU09GVF9BUFBfSURcIl0gYXMgY29uc3Q7XG5cbi8qKiBFbnZpcm9ubWVudCBuYW1lcyBmb3IgdGhlIGJvdCdzIGNsaWVudCBzZWNyZXQsIGluIHByZWNlZGVuY2Ugb3JkZXIuICovXG5leHBvcnQgY29uc3QgQVBQX1BBU1NXT1JEX0VOVlMgPSBbXCJURUFNU19BUFBfUEFTU1dPUkRcIiwgXCJNSUNST1NPRlRfQVBQX1BBU1NXT1JEXCJdIGFzIGNvbnN0O1xuXG4vKipcbiAqIEVudmlyb25tZW50IG5hbWVzIGZvciB0aGUgYm90J3MgdGVuYW50LCBpbiBwcmVjZWRlbmNlIG9yZGVyLiBTZXQgb25seSBmb3IgYVxuICogc2luZ2xlLXRlbmFudCBib3Q7IGEgbXVsdGktdGVuYW50IGJvdCBsZWF2ZXMgaXQgdW5zZXQuXG4gKi9cbmV4cG9ydCBjb25zdCBBUFBfVEVOQU5UX0VOVlMgPSBbXCJURUFNU19BUFBfVEVOQU5UX0lEXCIsIFwiTUlDUk9TT0ZUX0FQUF9URU5BTlRfSURcIl0gYXMgY29uc3Q7XG5cbi8qKlxuICogRW52aXJvbm1lbnQgbmFtZSBmb3IgdGhlIHVuYXV0aGVudGljYXRlZC1tZXNzYWdpbmcgZXNjYXBlIGhhdGNoLiBOYW1lZFxuICogYFRFQU1TX0FMTE9XX1VOQVVUSEVOVElDQVRFRGAgKHJhdGhlciB0aGFuIHNvbWV0aGluZyBzb2Z0ZXIgbGlrZSBgVEVBTVNfREVWYClcbiAqIHNvIHdoYXQgaXQgZGlzYWJsZXMgaXMgdW5taXN0YWthYmxlIGluIGEgc2hlbGwgaGlzdG9yeSBvciBkZXBsb3kgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBBTExPV19VTkFVVEhFTlRJQ0FURURfRU5WID0gXCJURUFNU19BTExPV19VTkFVVEhFTlRJQ0FURURcIjtcblxuLyoqXG4gKiBEZWZhdWx0IHJlZ2lzdGVyZWQgbmFtZSBvZiB0aGUgcGx1Z2luIHRoZSBjb252ZXJzYXRpb24gZW5kcG9pbnQgYXNrcyBmb3IgYW5cbiAqIGFnZW50LiBgbWFzdHJhYCBpcyB0aGUgbmFtZSBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYCByZWdpc3RlcnMgdW5kZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FHRU5UX1BMVUdJTiA9IFwibWFzdHJhXCI7XG5cbi8qKiBBcHBLaXQgY29uZmlnIGFjY2VwdGVkIGJ5IHRoZSBUZWFtcyBwbHVnaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIFRlYW1zUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBBZGFwdGl2ZSBDYXJkIHNjaGVtYSB2ZXJzaW9uIHRoZSBidWlsZGVyIHRhcmdldHMuIERlZmF1bHRzIHRvXG4gICAqIHtAbGluayBjYXJkLkFEQVBUSVZFX0NBUkRfVkVSU0lPTn0gKGBcIjEuNVwiYCwgd2hhdCBUZWFtcyBzdXBwb3J0cykuIEZhbGxzXG4gICAqIGJhY2sgdG8gYFRFQU1TX0NBUkRfVkVSU0lPTmAuXG4gICAqL1xuICBjYXJkVmVyc2lvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIFRlYW1zIGluY29taW5nLXdlYmhvb2sgVVJMLiBXaGVuIHNldCwgdGhlIHBsdWdpbidzIGBwb3N0Q2FyZGBcbiAgICogZXhwb3J0IC8gcm91dGUgcG9zdHMgdGhlIGNvbXBpbGVkIGNhcmQgdG8gdGhpcyBjaGFubmVsOyB3aGVuIHVuc2V0LFxuICAgKiBwb3N0aW5nIGlzIGRpc2FibGVkIGFuZCB0aGUgcGx1Z2luIG9ubHkgYnVpbGRzIGNhcmRzIGZvciB0aGUgVUkgdG8gcmVuZGVyLlxuICAgKiBGYWxscyBiYWNrIHRvIGBURUFNU19XRUJIT09LX1VSTGAuXG4gICAqL1xuICB3ZWJob29rVXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogUmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBzaWJsaW5nIHBsdWdpbiB3aG9zZSBhZ2VudHMgYW5zd2VyIGEgY29udmVyc2F0aW9uXG4gICAqIHR1cm4uIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0FHRU5UX1BMVUdJTn0gKGBcIm1hc3RyYVwiYCk7IHNldCBpdCB3aGVuIHRoZVxuICAgKiBNYXN0cmEgcGx1Z2luIGlzIG1vdW50ZWQgdW5kZXIgYSBgY29uZmlnLm5hbWVgIG92ZXJyaWRlLiBGYWxscyBiYWNrIHRvXG4gICAqIGBURUFNU19BR0VOVF9QTFVHSU5gLlxuICAgKi9cbiAgYWdlbnRQbHVnaW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYm90J3MgRW50cmEgYXBwbGljYXRpb24gKGNsaWVudCkgaWQgZnJvbSBpdHMgQXp1cmUgQm90IHJlZ2lzdHJhdGlvbi5cbiAgICogUmVxdWlyZWQgYmVmb3JlIGBQT1NUIC9hcGkvdGVhbXMvbWVzc2FnZXNgIHdpbGwgYWNjZXB0IGEgcmVxdWVzdDogaXQgaXMgdGhlXG4gICAqIGF1ZGllbmNlIGFuIGluYm91bmQgQm90IEZyYW1ld29yayB0b2tlbiBtdXN0IGNhcnJ5LCBhbmQgdGhlIGNsaWVudCBpZCB1c2VkXG4gICAqIHRvIGZldGNoIGFuIG91dGJvdW5kIENvbm5lY3RvciB0b2tlbi4gRmFsbHMgYmFjayB0byBgVEVBTVNfQVBQX0lEYCAvXG4gICAqIGBNSUNST1NPRlRfQVBQX0lEYC5cbiAgICovXG4gIGFwcElkPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2xpZW50IHNlY3JldCBmb3Ige0BsaW5rIGFwcElkfS4gTmVlZGVkIHRvIHNlbmQgcmVwbGllcyB0aHJvdWdoIHRoZVxuICAgKiBDb25uZWN0b3IgQVBJOyB3aXRob3V0IGl0IGluYm91bmQgYWN0aXZpdGllcyBzdGlsbCB2YWxpZGF0ZSBidXQgdGhlIGJvdFxuICAgKiBjYW5ub3QgYW5zd2VyLiBGYWxscyBiYWNrIHRvIGBURUFNU19BUFBfUEFTU1dPUkRgIC9cbiAgICogYE1JQ1JPU09GVF9BUFBfUEFTU1dPUkRgLlxuICAgKi9cbiAgYXBwUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUZW5hbnQgaWQgZm9yIGEgU0lOR0xFLXRlbmFudCBib3QgcmVnaXN0cmF0aW9uLiBMZWF2ZSB1bnNldCBmb3IgYVxuICAgKiBtdWx0aS10ZW5hbnQgYm90LiBGYWxscyBiYWNrIHRvIGBURUFNU19BUFBfVEVOQU5UX0lEYCAvXG4gICAqIGBNSUNST1NPRlRfQVBQX1RFTkFOVF9JRGAuXG4gICAqL1xuICBhcHBUZW5hbnRJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFNlcnZlIGBQT1NUIC9tZXNzYWdlc2Agd2l0aCBOTyBpbmJvdW5kIHRva2VuIHZhbGlkYXRpb24sIGFuZCByZXBseSBpbiB0aGVcbiAgICogSFRUUCByZXNwb25zZSBpbnN0ZWFkIG9mIHRocm91Z2ggdGhlIENvbm5lY3RvciBBUEkuXG4gICAqXG4gICAqIFRoaXMgZXhpc3RzIHNvIHRoZSBtZXNzYWdpbmcgZW5kcG9pbnQgY2FuIGJlIGV4ZXJjaXNlZCBsb2NhbGx5IC0gYnkgdGhlXG4gICAqIGluLXJlcG8gcHJldmlldyBjaGF0LCBhIGBjdXJsYCwgb3IgdGhlIEJvdCBGcmFtZXdvcmsgRW11bGF0b3IgLSB3aXRob3V0IGFuXG4gICAqIEF6dXJlIEJvdCByZWdpc3RyYXRpb24uIEl0IHJlbW92ZXMgdGhlIGVuZHBvaW50J3MgT05MWSB0cnVzdCBib3VuZGFyeTogYW55XG4gICAqIGNhbGxlciB0aGF0IGNhbiByZWFjaCB0aGUgcm91dGUgY2FuIGRyaXZlIHRoZSBhZ2VudCBhbmQgcmVhZCBpdHMgYW5zd2Vycy5cbiAgICpcbiAgICogTmV2ZXIgZW5hYmxlIGl0IG9uIGEgZGVwbG95bWVudCByZWFjaGFibGUgZnJvbSB0aGUgaW50ZXJuZXQuIEl0IGlzIGlnbm9yZWRcbiAgICogdW5sZXNzIGBOT0RFX0VOVmAgaXMgYGRldmVsb3BtZW50YCAoc2VlIHtAbGluayByZXNvbHZlVGVhbXNDb25maWd9KSwgc28gYVxuICAgKiBwcm9kdWN0aW9uIGJ1aWxkIGNhbm5vdCBiZSB0YWxrZWQgaW50byBpdCBieSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbG9uZS5cbiAgICogRmFsbHMgYmFjayB0byBgVEVBTVNfQUxMT1dfVU5BVVRIRU5USUNBVEVEYC5cbiAgICovXG4gIGFsbG93VW5hdXRoZW50aWNhdGVkPzogYm9vbGVhbjtcbn1cblxuLyoqIFRoZSBjb25jcmV0ZSBjb25maWcgdGhlIHJ1bnRpbWUgcmVhZHMsIGFmdGVyIGNvbmZpZyArIGVudiByZXNvbHV0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFRlYW1zQ29uZmlnIHtcbiAgLyoqIEFkYXB0aXZlIENhcmQgc2NoZW1hIHZlcnNpb24gdGhlIGJ1aWxkZXIgc3RhbXBzIG9udG8gZXZlcnkgZG9jdW1lbnQuICovXG4gIGNhcmRWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBUZWFtcyBpbmNvbWluZy13ZWJob29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBwb3N0aW5nIGlzIGRpc2FibGVkLiAqL1xuICB3ZWJob29rVXJsPzogc3RyaW5nO1xuICAvKiogUmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBwbHVnaW4gdGhlIGNvbnZlcnNhdGlvbiBlbmRwb2ludCByZXNvbHZlcyBhZ2VudHMgZnJvbS4gKi9cbiAgYWdlbnRQbHVnaW46IHN0cmluZztcbiAgLyoqIEJvdCBhcHAgKGNsaWVudCkgaWQsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gYm90IHJlZ2lzdHJhdGlvbiBpcyBjb25maWd1cmVkLiAqL1xuICBhcHBJZD86IHN0cmluZztcbiAgLyoqIEJvdCBjbGllbnQgc2VjcmV0LCBvciBgdW5kZWZpbmVkYCB3aGVuIHJlcGxpZXMgY2Fubm90IGJlIHNlbnQuICovXG4gIGFwcFBhc3N3b3JkPzogc3RyaW5nO1xuICAvKiogVGVuYW50IGlkIGZvciBhIHNpbmdsZS10ZW5hbnQgYm90LCBvciBgdW5kZWZpbmVkYCBmb3IgYSBtdWx0aS10ZW5hbnQgb25lLiAqL1xuICBhcHBUZW5hbnRJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgYFBPU1QgL21lc3NhZ2VzYCBzZXJ2ZXMgdHVybnMgd2l0aCBOTyB0b2tlbiB2YWxpZGF0aW9uLiBTZWVcbiAgICoge0BsaW5rIFRlYW1zUGx1Z2luQ29uZmlnLmFsbG93VW5hdXRoZW50aWNhdGVkfS5cbiAgICovXG4gIGFsbG93VW5hdXRoZW50aWNhdGVkOiBib29sZWFuO1xufVxuXG4vKiogSlNPTiBTY2hlbWEgcHVibGlzaGVkIGluIHRoZSBwbHVnaW4gbWFuaWZlc3QgZm9yIHtAbGluayBUZWFtc1BsdWdpbkNvbmZpZ30uICovXG5leHBvcnQgY29uc3QgVEVBTVNfQ09ORklHX1NDSEVNQTogSlNPTlNjaGVtYTcgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIsXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgcHJvcGVydGllczoge1xuICAgIGNhcmRWZXJzaW9uOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBBZGFwdGl2ZSBDYXJkIHNjaGVtYSB2ZXJzaW9uIHRoZSBidWlsZGVyIHRhcmdldHMuICR7Q0FSRF9WRVJTSU9OX0VOVn0gb3ZlcnJpZGVzIGl0LmAsXG4gICAgfSxcbiAgICB3ZWJob29rVXJsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBPcHRpb25hbCBUZWFtcyBpbmNvbWluZy13ZWJob29rIFVSTCB1c2VkIHRvIHBvc3QgY2FyZHMuICR7V0VCSE9PS19VUkxfRU5WfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFnZW50UGx1Z2luOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBSZWdpc3RlcmVkIG5hbWUgb2YgdGhlIHNpYmxpbmcgcGx1Z2luIHdob3NlIGFnZW50cyBhbnN3ZXIgYSBjb252ZXJzYXRpb24gdHVybi4gJHtBR0VOVF9QTFVHSU5fRU5WfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFwcElkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBFbnRyYSBhcHAgKGNsaWVudCkgaWQgb2YgdGhlIEF6dXJlIEJvdCByZWdpc3RyYXRpb24uIFJlcXVpcmVkIGZvciB0aGUgVGVhbXMgbWVzc2FnaW5nIGVuZHBvaW50LiAke0FQUF9JRF9FTlZTWzBdfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFwcFBhc3N3b3JkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBDbGllbnQgc2VjcmV0IGZvciB0aGUgYm90IGFwcCBpZCwgdXNlZCB0byBmZXRjaCBhbiBvdXRib3VuZCBDb25uZWN0b3IgdG9rZW4uICR7QVBQX1BBU1NXT1JEX0VOVlNbMF19IG92ZXJyaWRlcyBpdC5gLFxuICAgIH0sXG4gICAgYXBwVGVuYW50SWQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogYFRlbmFudCBpZCBmb3IgYSBzaW5nbGUtdGVuYW50IGJvdCByZWdpc3RyYXRpb247IHVuc2V0IGZvciBtdWx0aS10ZW5hbnQuICR7QVBQX1RFTkFOVF9FTlZTWzBdfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFsbG93VW5hdXRoZW50aWNhdGVkOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlNlcnZlIHRoZSBUZWFtcyBtZXNzYWdpbmcgZW5kcG9pbnQgd2l0aCBOTyB0b2tlbiB2YWxpZGF0aW9uLCByZXBseWluZyBpbiBcIiArXG4gICAgICAgIFwidGhlIEhUVFAgcmVzcG9uc2UuIExvY2FsIGRldmVsb3BtZW50IG9ubHk7IGlnbm9yZWQgdW5sZXNzIE5PREVfRU5WIGlzIFwiICtcbiAgICAgICAgYGRldmVsb3BtZW50LiAke0FMTE9XX1VOQVVUSEVOVElDQVRFRF9FTlZ9IG92ZXJyaWRlcyBpdC5gLFxuICAgIH0sXG4gIH0sXG59O1xuXG4vKipcbiAqIExheWVyIHRoZSBwbHVnaW4gY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGUgY29uZmlnXG4gKiB0aGUgcnVudGltZSB1c2VzLiBGYWlscyBsb3VkbHkgb24gYSB3ZWJob29rIFVSTCB0aGF0IGlzIHByZXNlbnQgYnV0IG5vdCBhXG4gKiB2YWxpZCBhYnNvbHV0ZSBVUkwsIHNpbmNlIHRoYXQgaXMgYSBkZXBsb3ktdGltZSBtaXN0YWtlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRlYW1zQ29uZmlnKG92ZXJyaWRlcz86IFRlYW1zUGx1Z2luQ29uZmlnKTogUmVzb2x2ZWRUZWFtc0NvbmZpZyB7XG4gIGNvbnN0IGNhcmRWZXJzaW9uID1cbiAgICBlbnYuc3RyaW5nKG92ZXJyaWRlcz8uY2FyZFZlcnNpb24sIENBUkRfVkVSU0lPTl9FTlYpID8/IGNhcmQuQURBUFRJVkVfQ0FSRF9WRVJTSU9OO1xuICBjb25zdCB3ZWJob29rVXJsID0gZW52LnN0cmluZyhvdmVycmlkZXM/LndlYmhvb2tVcmwsIFdFQkhPT0tfVVJMX0VOVik7XG4gIGlmICh3ZWJob29rVXJsICE9PSBudWxsICYmICFpc0Fic29sdXRlVXJsKHdlYmhvb2tVcmwpKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFdFQkhPT0tfVVJMX0VOVixcbiAgICAgIHdlYmhvb2tVcmwsXG4gICAgICBcImFuIGFic29sdXRlIGh0dHBzIFVSTCBmb3IgdGhlIFRlYW1zIHdlYmhvb2tcIixcbiAgICApO1xuICB9XG4gIGNvbnN0IGFnZW50UGx1Z2luID0gZW52LnN0cmluZyhvdmVycmlkZXM/LmFnZW50UGx1Z2luLCBBR0VOVF9QTFVHSU5fRU5WKSA/PyBERUZBVUxUX0FHRU5UX1BMVUdJTjtcbiAgLy8gVHdvIGluZGVwZW5kZW50IGNvbmRpdGlvbnMgbXVzdCBCT1RIIGhvbGQ6IHRoZSBvcGVyYXRvciBhc2tlZCBmb3IgaXQsIGFuZFxuICAvLyB0aGlzIGlzIGEgZGV2ZWxvcG1lbnQgYnVpbGQuIEdhdGluZyBvbiBgTk9ERV9FTlZgIGFzIHdlbGwgbWVhbnMgYSBzdHJheVxuICAvLyB2YXJpYWJsZSBpbiBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQgY2Fubm90IHNpbGVudGx5IGV4cG9zZSB0aGUgZW5kcG9pbnQuXG4gIGNvbnN0IHJlcXVlc3RlZCA9IGVudi5ib29sZWFuKG92ZXJyaWRlcz8uYWxsb3dVbmF1dGhlbnRpY2F0ZWQsIEFMTE9XX1VOQVVUSEVOVElDQVRFRF9FTlYpO1xuICBjb25zdCBhbGxvd1VuYXV0aGVudGljYXRlZCA9IHJlcXVlc3RlZCA9PT0gdHJ1ZSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiO1xuICByZXR1cm4ge1xuICAgIGNhcmRWZXJzaW9uLFxuICAgIGFnZW50UGx1Z2luLFxuICAgIGFsbG93VW5hdXRoZW50aWNhdGVkLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcIndlYmhvb2tVcmxcIiwgd2ViaG9va1VybCksXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFwiYXBwSWRcIiwgZW52LnN0cmluZyhvdmVycmlkZXM/LmFwcElkLCBBUFBfSURfRU5WUykpLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcImFwcFBhc3N3b3JkXCIsIGVudi5zdHJpbmcob3ZlcnJpZGVzPy5hcHBQYXNzd29yZCwgQVBQX1BBU1NXT1JEX0VOVlMpKSxcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXCJhcHBUZW5hbnRJZFwiLCBlbnYuc3RyaW5nKG92ZXJyaWRlcz8uYXBwVGVuYW50SWQsIEFQUF9URU5BTlRfRU5WUykpLFxuICB9O1xufVxuXG4vKiogV2hldGhlciBgdmFsdWVgIHBhcnNlcyBhcyBhbiBhYnNvbHV0ZSBVUkwuICovXG5mdW5jdGlvbiBpc0Fic29sdXRlVXJsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3XG4gICAgbmV3IFVSTCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
package/lib/src/runtime.js
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
*
|
|
19
19
|
* @module
|
|
20
20
|
*/
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
21
|
+
import { ExecutionError } from "@databricks/appkit";
|
|
22
|
+
import { execution, log } from "@dbx-tools/shared-core";
|
|
23
23
|
import { buildCardResult } from "./builder.js";
|
|
24
24
|
import { resolveTeamsConfig } from "./config.js";
|
|
25
25
|
import { TEAMS_BUILD_SETTINGS, TEAMS_POST_SETTINGS, } from "./defaults.js";
|
|
@@ -29,18 +29,7 @@ const logger = log.logger("teams/runtime");
|
|
|
29
29
|
* directly, mapping a throw onto the same {@link ExecutionResult} shape so
|
|
30
30
|
* call sites branch on `ok` either way.
|
|
31
31
|
*/
|
|
32
|
-
const directExecute =
|
|
33
|
-
try {
|
|
34
|
-
return { ok: true, data: await fn() };
|
|
35
|
-
}
|
|
36
|
-
catch (err) {
|
|
37
|
-
return {
|
|
38
|
-
ok: false,
|
|
39
|
-
status: err instanceof AppKitError ? err.statusCode : 500,
|
|
40
|
-
message: error.errorMessage(err),
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
};
|
|
32
|
+
const directExecute = execution.directExecutor();
|
|
44
33
|
let runtime;
|
|
45
34
|
/**
|
|
46
35
|
* Return the shared runtime, building it on first use from the supplied config
|
|
@@ -76,18 +65,23 @@ export function resetTeamsRuntime() {
|
|
|
76
65
|
*/
|
|
77
66
|
async function run(operation, settings, fn, signal) {
|
|
78
67
|
const { execute } = getTeamsRuntime();
|
|
79
|
-
|
|
80
|
-
if (result.ok)
|
|
81
|
-
return result.data;
|
|
82
|
-
if (signal?.aborted)
|
|
83
|
-
throw ExecutionError.canceled();
|
|
84
|
-
logger.warn("execution-failed", {
|
|
68
|
+
return execution.run({
|
|
85
69
|
operation,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
70
|
+
settings,
|
|
71
|
+
execute,
|
|
72
|
+
fn,
|
|
73
|
+
signal,
|
|
74
|
+
canceled: ExecutionError.canceled,
|
|
75
|
+
failed: (failure) => {
|
|
76
|
+
logger.warn("execution-failed", {
|
|
77
|
+
operation: failure.operation,
|
|
78
|
+
status: failure.status,
|
|
79
|
+
error: failure.message,
|
|
80
|
+
});
|
|
81
|
+
return new ExecutionError(`teams: ${failure.operation} failed`, {
|
|
82
|
+
context: { operation: failure.operation, status: failure.status },
|
|
83
|
+
});
|
|
84
|
+
},
|
|
91
85
|
});
|
|
92
86
|
}
|
|
93
87
|
/**
|
|
@@ -140,4 +134,4 @@ export async function postCard(cardDocument, signal) {
|
|
|
140
134
|
}
|
|
141
135
|
}, signal);
|
|
142
136
|
}
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7QUFDdkYsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQW9ELE1BQU0sYUFBYSxDQUFDO0FBQ25HLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsbUJBQW1CLEdBRXBCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7QUFrQjNDOzs7O0dBSUc7QUFDSCxNQUFNLGFBQWEsR0FBa0IsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ2hELElBQUksQ0FBQztRQUNILE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixPQUFPO1lBQ0wsRUFBRSxFQUFFLEtBQUs7WUFDVCxNQUFNLEVBQUUsR0FBRyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRztZQUN6RCxPQUFPLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7U0FDakMsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixJQUFJLE9BQWlDLENBQUM7QUFFdEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFNBQTZCO0lBQzNELElB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QUFHLE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUN2QyxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtZQUMvQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNwRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxjQUFjLENBQUMsNEJBQTRCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDdEUsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRTthQUN4RCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxFQUNELE1BQU0sQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIFRlYW1zIHJ1bnRpbWU6IGEgbGF6aWx5LXJlc29sdmVkLCBwcm9jZXNzLXdpZGUgY29uZmlnIHNoYXJlZCBieSB0aGVcbiAqIHBsdWdpbiBhbmQgdGhlIGBjcmVhdGVfdGVhbXNfY2FyZGAgdG9vbCwgc28gYm90aCByZWFkIG9uZSByZXNvbHZlZCBjYXJkXG4gKiB2ZXJzaW9uIC8gd2ViaG9vayBzZXQuIFRoZSBmaXJzdCBjYWxsZXIgKG5vcm1hbGx5IHRoZSBwbHVnaW4gYXQgc2V0dXApXG4gKiBwcmltZXMgaXQgZnJvbSB0aGUgcGx1Z2luJ3MgY29uZmlnOyBsYXRlciBjYWxsZXJzICh0aGUgdG9vbCdzIGBleGVjdXRlYClcbiAqIHJldXNlIGl0LlxuICpcbiAqIFRoZSBydW50aW1lIGFsc28gY2FycmllcyB0aGUge0BsaW5rIFRlYW1zRXhlY3V0b3J9IGV2ZXJ5IG9wZXJhdGlvbiBydW5zXG4gKiB0aHJvdWdoLiBUaGUgcGx1Z2luIGluc3RhbGxzIGl0cyBvd24gYGV4ZWN1dGUoKWAgdGhlcmUgYXQgc2V0dXAsIHdoaWNoIGlzIGhvd1xuICogdGhlIHRvb2wgLSBhIHBsYWluIGZ1bmN0aW9uIHdpdGggbm8gcGx1Z2luIGluc3RhbmNlIGluIHNjb3BlIC0gc3RpbGwgZ2V0c1xuICogQXBwS2l0J3MgY2FjaGUgLyByZXRyeSAvIHRpbWVvdXQgLyB0ZWxlbWV0cnkgY2hhaW4uIFdpdGhvdXQgYSByZWdpc3RlcmVkXG4gKiBwbHVnaW4gKGEgZGlyZWN0IGNhbGwgZnJvbSBhIHNjcmlwdCBvciBhIHRlc3QpIHRoZSBvcGVyYXRpb25zIHN0aWxsIHJ1biwganVzdFxuICogd2l0aG91dCBpbnRlcmNlcHRvcnMuXG4gKlxuICogTGlrZSB0aGUgd2ViLXNlYXJjaCBydW50aW1lIGFuZCB1bmxpa2UgdGhlIGVtYWlsIG9uZSwgdGhlcmUgaXMgbm8gY29ubmVjdGlvblxuICogcG9vbCB0byBob2xkIC0gY2FyZCBidWlsZGluZyBpcyBpbi1wcm9jZXNzIGFuZCBhIHdlYmhvb2sgcG9zdCBpcyBhIHN0YXRlbGVzc1xuICogSFRUUCBjYWxsIC0gc28gdGhlIHJ1bnRpbWUgaG9sZHMgb25seSB0aGUgcmVzb2x2ZWQgY29uZmlnIGFuZCB0aGF0IGV4ZWN1dG9yLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBBcHBLaXRFcnJvciwgRXhlY3V0aW9uRXJyb3IsIHR5cGUgRXhlY3V0aW9uUmVzdWx0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgYXN5bmMsIGVycm9yLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgY2FyZCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC10ZWFtc1wiO1xuaW1wb3J0IHsgYnVpbGRDYXJkUmVzdWx0IH0gZnJvbSBcIi4vYnVpbGRlci50c1wiO1xuaW1wb3J0IHsgcmVzb2x2ZVRlYW1zQ29uZmlnLCB0eXBlIFJlc29sdmVkVGVhbXNDb25maWcsIHR5cGUgVGVhbXNQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7XG4gIFRFQU1TX0JVSUxEX1NFVFRJTkdTLFxuICBURUFNU19QT1NUX1NFVFRJTkdTLFxuICB0eXBlIFRlYW1zRXhlY3V0aW9uU2V0dGluZ3MsXG59IGZyb20gXCIuL2RlZmF1bHRzLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ0ZWFtcy9ydW50aW1lXCIpO1xuXG4vKipcbiAqIFJ1bnMgb25lIG9wZXJhdGlvbiB0aHJvdWdoIEFwcEtpdCdzIGludGVyY2VwdG9yIGNoYWluLiBNYXRjaGVzXG4gKiBgUGx1Z2luLmV4ZWN1dGUoKWAsIHdoaWNoIG5ldmVyIHRocm93czogYSBmYWlsdXJlIGNvbWVzIGJhY2sgYXNcbiAqIGB7IG9rOiBmYWxzZSB9YC5cbiAqL1xuZXhwb3J0IHR5cGUgVGVhbXNFeGVjdXRvciA9IDxUPihcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2V0dGluZ3M6IFRlYW1zRXhlY3V0aW9uU2V0dGluZ3MsXG4pID0+IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0PFQ+PjtcblxuLyoqIFRoZSBzaGFyZWQgcmVzb2x2ZWQgY29uZmlnIHBsdXMgdGhlIGV4ZWN1dG9yIG9wZXJhdGlvbnMgcnVuIHRocm91Z2guICovXG5leHBvcnQgaW50ZXJmYWNlIFRlYW1zUnVudGltZSB7XG4gIGNvbmZpZzogUmVzb2x2ZWRUZWFtc0NvbmZpZztcbiAgZXhlY3V0ZTogVGVhbXNFeGVjdXRvcjtcbn1cblxuLyoqXG4gKiBFeGVjdXRvciB1c2VkIHVudGlsIChvciB1bmxlc3MpIHRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93bjogcnVuIHRoZSBjYWxsXG4gKiBkaXJlY3RseSwgbWFwcGluZyBhIHRocm93IG9udG8gdGhlIHNhbWUge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gc2hhcGUgc29cbiAqIGNhbGwgc2l0ZXMgYnJhbmNoIG9uIGBva2AgZWl0aGVyIHdheS5cbiAqL1xuY29uc3QgZGlyZWN0RXhlY3V0ZTogVGVhbXNFeGVjdXRvciA9IGFzeW5jIChmbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCBkYXRhOiBhd2FpdCBmbigpIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB7XG4gICAgICBvazogZmFsc2UsXG4gICAgICBzdGF0dXM6IGVyciBpbnN0YW5jZW9mIEFwcEtpdEVycm9yID8gZXJyLnN0YXR1c0NvZGUgOiA1MDAsXG4gICAgICBtZXNzYWdlOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9O1xuICB9XG59O1xuXG5sZXQgcnVudGltZTogVGVhbXNSdW50aW1lIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiB0aGUgc2hhcmVkIHJ1bnRpbWUsIGJ1aWxkaW5nIGl0IG9uIGZpcnN0IHVzZSBmcm9tIHRoZSBzdXBwbGllZCBjb25maWdcbiAqIGxheWVyZWQgb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cy4gT3ZlcnJpZGVzIGFyZSBvbmx5IHJlYWQgd2hlbiB0aGUgcnVudGltZVxuICogaXMgZmlyc3QgY3JlYXRlZCwgc28gcHJpbWUgaXQgZnJvbSB0aGUgcGx1Z2luJ3MgY29uZmlnIGF0IHNldHVwOyBzdWJzZXF1ZW50XG4gKiBjYWxscyAodGhlIHRvb2wncyBgZXhlY3V0ZWApIHBhc3Mgbm90aGluZyBhbmQgZ2V0IHRoZSBzYW1lIGluc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVhbXNSdW50aW1lKG92ZXJyaWRlcz86IFRlYW1zUGx1Z2luQ29uZmlnKTogVGVhbXNSdW50aW1lIHtcbiAgaWYgKCFydW50aW1lKSB7XG4gICAgcnVudGltZSA9IHsgY29uZmlnOiByZXNvbHZlVGVhbXNDb25maWcob3ZlcnJpZGVzKSwgZXhlY3V0ZTogZGlyZWN0RXhlY3V0ZSB9O1xuICB9XG4gIHJldHVybiBydW50aW1lO1xufVxuXG4vKipcbiAqIEluc3RhbGwgdGhlIGV4ZWN1dG9yIG9wZXJhdGlvbnMgcnVuIHRocm91Z2guIFRoZSBwbHVnaW4gY2FsbHMgdGhpcyBhdCBzZXR1cFxuICogd2l0aCBpdHMgb3duIGBleGVjdXRlKClgOyBhIHNlY29uZCBjYWxsIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBvbmUsIHNvIGFcbiAqIHJlLXJlZ2lzdGVyZWQgcGx1Z2luIGRvZXMgbm90IGxlYXZlIHRoZSB0b29sIGJvdW5kIHRvIGEgZGVhZCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRlYW1zRXhlY3V0b3IoZXhlY3V0ZTogVGVhbXNFeGVjdXRvcik6IHZvaWQge1xuICBnZXRUZWFtc1J1bnRpbWUoKS5leGVjdXRlID0gZXhlY3V0ZTtcbn1cblxuLyoqIERyb3AgdGhlIG1lbW9pemVkIHJ1bnRpbWUgc28gdGhlIG5leHQge0BsaW5rIGdldFRlYW1zUnVudGltZX0gcmVidWlsZHMgaXQuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRUZWFtc1J1bnRpbWUoKTogdm9pZCB7XG4gIHJ1bnRpbWUgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVuIG9uZSBvcGVyYXRpb24gdGhyb3VnaCB0aGUgc2hhcmVkIGV4ZWN1dG9yIGFuZCB1bndyYXAgaXQuXG4gKlxuICogYGV4ZWN1dGUoKWAgbmV2ZXIgdGhyb3dzLCBzbyBhIGZhaWxlZCBjYWxsIGFycml2ZXMgYXMgYHsgb2s6IGZhbHNlIH1gIHdpdGggYVxuICogc3RhdHVzIHRoZSBpbnRlcmNlcHRvcnMgYWxyZWFkeSBzYW5pdGl6ZWQ7IGl0IGlzIGxvZ2dlZCBoZXJlIGFuZCByZS1yYWlzZWQgYXNcbiAqIGEgc3RhYmxlIHtAbGluayBFeGVjdXRpb25FcnJvcn0gc28gYW4gdXBzdHJlYW0gbWVzc2FnZSBuZXZlciBiZWNvbWVzIHRoZVxuICogY2FsbGVyJ3MgZXJyb3IgdGV4dC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuPFQ+KFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgc2V0dGluZ3M6IFRlYW1zRXhlY3V0aW9uU2V0dGluZ3MsXG4gIGZuOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8VD4sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHsgZXhlY3V0ZSB9ID0gZ2V0VGVhbXNSdW50aW1lKCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGUoXG4gICAgKGV4ZWN1dGVTaWduYWwpID0+IGZuKGFzeW5jLmNvbWJpbmVBYm9ydFNpZ25hbHMoZXhlY3V0ZVNpZ25hbCwgc2lnbmFsKSksXG4gICAgc2V0dGluZ3MsXG4gICk7XG4gIGlmIChyZXN1bHQub2spIHJldHVybiByZXN1bHQuZGF0YTtcbiAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgdGhyb3cgRXhlY3V0aW9uRXJyb3IuY2FuY2VsZWQoKTtcbiAgbG9nZ2VyLndhcm4oXCJleGVjdXRpb24tZmFpbGVkXCIsIHtcbiAgICBvcGVyYXRpb24sXG4gICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgIGVycm9yOiByZXN1bHQubWVzc2FnZSxcbiAgfSk7XG4gIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihgdGVhbXM6ICR7b3BlcmF0aW9ufSBmYWlsZWRgLCB7XG4gICAgY29udGV4dDogeyBvcGVyYXRpb24sIHN0YXR1czogcmVzdWx0LnN0YXR1cyB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgY2FyZCBzcGVjIGludG8gYW4gQWRhcHRpdmUgQ2FyZCBkb2N1bWVudCwgc3RhbXBlZCB3aXRoIHRoZSBydW50aW1lJ3NcbiAqIHJlc29sdmVkIGNhcmQgdmVyc2lvbi4gUnVucyB0aHJvdWdoIHRoZSBzaGFyZWQgZXhlY3V0b3Igc28gYSBidWlsZCBwaWNrcyB1cFxuICogdGhlIGFwcCdzIHRlbGVtZXRyeSAvIHRpbWVvdXQgY2hhaW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENhcmQoXG4gIHNwZWM6IGNhcmQuQ2FyZFNwZWMsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxjYXJkLkNhcmRSZXN1bHQ+IHtcbiAgY29uc3QgeyBjb25maWcgfSA9IGdldFRlYW1zUnVudGltZSgpO1xuICByZXR1cm4gcnVuKFxuICAgIFwiYnVpbGRcIixcbiAgICBURUFNU19CVUlMRF9TRVRUSU5HUyxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZENhcmRSZXN1bHQoc3BlYyk7XG4gICAgICByZXN1bHQuY2FyZC52ZXJzaW9uID0gY29uZmlnLmNhcmRWZXJzaW9uO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHNpZ25hbCxcbiAgKTtcbn1cblxuLyoqXG4gKiBQT1NUIGEgY29tcGlsZWQgQWRhcHRpdmUgQ2FyZCB0byB0aGUgY29uZmlndXJlZCBUZWFtcyBpbmNvbWluZyB3ZWJob29rLFxuICogd3JhcHBlZCBpbiB0aGUgYE1lc3NhZ2VDYXJkYCBhdHRhY2htZW50IGVudmVsb3BlIFRlYW1zIGV4cGVjdHMuIFRocm93cyB3aGVuXG4gKiBubyB3ZWJob29rIGlzIGNvbmZpZ3VyZWQsIHNvIGEgY2FsbGVyIHRoYXQgcmVhY2hlcyBoZXJlIHdpdGhvdXQgb25lIGdldHMgYVxuICogY2xlYXIgZXJyb3IgcmF0aGVyIHRoYW4gYSBzaWxlbnQgbm8tb3AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0Q2FyZChcbiAgY2FyZERvY3VtZW50OiBjYXJkLkFkYXB0aXZlQ2FyZCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBjb25maWcgfSA9IGdldFRlYW1zUnVudGltZSgpO1xuICBjb25zdCB3ZWJob29rVXJsID0gY29uZmlnLndlYmhvb2tVcmw7XG4gIGlmICghd2ViaG9va1VybCkge1xuICAgIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihcInRlYW1zOiBubyB3ZWJob29rIGNvbmZpZ3VyZWRcIiwge1xuICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IFwicG9zdFwiIH0sXG4gICAgfSk7XG4gIH1cbiAgYXdhaXQgcnVuKFxuICAgIFwicG9zdFwiLFxuICAgIFRFQU1TX1BPU1RfU0VUVElOR1MsXG4gICAgYXN5bmMgKGV4ZWN1dGVTaWduYWwpID0+IHtcbiAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgICAgICBhdHRhY2htZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZVwiLFxuICAgICAgICAgICAgY29udGVudDogY2FyZERvY3VtZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh3ZWJob29rVXJsLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgIC4uLihleGVjdXRlU2lnbmFsID8geyBzaWduYWw6IGV4ZWN1dGVTaWduYWwgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoYHRlYW1zOiB3ZWJob29rIHJlc3BvbmRlZCAke3Jlc3BvbnNlLnN0YXR1c31gLCB7XG4gICAgICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IFwicG9zdFwiLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNpZ25hbCxcbiAgKTtcbn1cbiJdfQ==
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFvRCxNQUFNLGFBQWEsQ0FBQztBQUNuRyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG1CQUFtQixHQUVwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBa0IzQzs7OztHQUlHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLGNBQWMsRUFBMEIsQ0FBQztBQUV6RSxJQUFJLE9BQWlDLENBQUM7QUFFdEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFNBQTZCO0lBQzNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRyxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQXNCO0lBQ3JELGVBQWUsRUFBRSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdEMsQ0FBQztBQUVELGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7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QUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFO2FBQ3hELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLEVBQ0QsTUFBTSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgVGVhbXMgcnVudGltZTogYSBsYXppbHktcmVzb2x2ZWQsIHByb2Nlc3Mtd2lkZSBjb25maWcgc2hhcmVkIGJ5IHRoZVxuICogcGx1Z2luIGFuZCB0aGUgYGNyZWF0ZV90ZWFtc19jYXJkYCB0b29sLCBzbyBib3RoIHJlYWQgb25lIHJlc29sdmVkIGNhcmRcbiAqIHZlcnNpb24gLyB3ZWJob29rIHNldC4gVGhlIGZpcnN0IGNhbGxlciAobm9ybWFsbHkgdGhlIHBsdWdpbiBhdCBzZXR1cClcbiAqIHByaW1lcyBpdCBmcm9tIHRoZSBwbHVnaW4ncyBjb25maWc7IGxhdGVyIGNhbGxlcnMgKHRoZSB0b29sJ3MgYGV4ZWN1dGVgKVxuICogcmV1c2UgaXQuXG4gKlxuICogVGhlIHJ1bnRpbWUgYWxzbyBjYXJyaWVzIHRoZSB7QGxpbmsgVGVhbXNFeGVjdXRvcn0gZXZlcnkgb3BlcmF0aW9uIHJ1bnNcbiAqIHRocm91Z2guIFRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93biBgZXhlY3V0ZSgpYCB0aGVyZSBhdCBzZXR1cCwgd2hpY2ggaXMgaG93XG4gKiB0aGUgdG9vbCAtIGEgcGxhaW4gZnVuY3Rpb24gd2l0aCBubyBwbHVnaW4gaW5zdGFuY2UgaW4gc2NvcGUgLSBzdGlsbCBnZXRzXG4gKiBBcHBLaXQncyBjYWNoZSAvIHJldHJ5IC8gdGltZW91dCAvIHRlbGVtZXRyeSBjaGFpbi4gV2l0aG91dCBhIHJlZ2lzdGVyZWRcbiAqIHBsdWdpbiAoYSBkaXJlY3QgY2FsbCBmcm9tIGEgc2NyaXB0IG9yIGEgdGVzdCkgdGhlIG9wZXJhdGlvbnMgc3RpbGwgcnVuLCBqdXN0XG4gKiB3aXRob3V0IGludGVyY2VwdG9ycy5cbiAqXG4gKiBMaWtlIHRoZSB3ZWItc2VhcmNoIHJ1bnRpbWUgYW5kIHVubGlrZSB0aGUgZW1haWwgb25lLCB0aGVyZSBpcyBubyBjb25uZWN0aW9uXG4gKiBwb29sIHRvIGhvbGQgLSBjYXJkIGJ1aWxkaW5nIGlzIGluLXByb2Nlc3MgYW5kIGEgd2ViaG9vayBwb3N0IGlzIGEgc3RhdGVsZXNzXG4gKiBIVFRQIGNhbGwgLSBzbyB0aGUgcnVudGltZSBob2xkcyBvbmx5IHRoZSByZXNvbHZlZCBjb25maWcgYW5kIHRoYXQgZXhlY3V0b3IuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IEV4ZWN1dGlvbkVycm9yLCB0eXBlIEV4ZWN1dGlvblJlc3VsdCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGV4ZWN1dGlvbiwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGNhcmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtdGVhbXNcIjtcbmltcG9ydCB7IGJ1aWxkQ2FyZFJlc3VsdCB9IGZyb20gXCIuL2J1aWxkZXIudHNcIjtcbmltcG9ydCB7IHJlc29sdmVUZWFtc0NvbmZpZywgdHlwZSBSZXNvbHZlZFRlYW1zQ29uZmlnLCB0eXBlIFRlYW1zUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQge1xuICBURUFNU19CVUlMRF9TRVRUSU5HUyxcbiAgVEVBTVNfUE9TVF9TRVRUSU5HUyxcbiAgdHlwZSBUZWFtc0V4ZWN1dGlvblNldHRpbmdzLFxufSBmcm9tIFwiLi9kZWZhdWx0cy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwidGVhbXMvcnVudGltZVwiKTtcblxuLyoqXG4gKiBSdW5zIG9uZSBvcGVyYXRpb24gdGhyb3VnaCBBcHBLaXQncyBpbnRlcmNlcHRvciBjaGFpbi4gTWF0Y2hlc1xuICogYFBsdWdpbi5leGVjdXRlKClgLCB3aGljaCBuZXZlciB0aHJvd3M6IGEgZmFpbHVyZSBjb21lcyBiYWNrIGFzXG4gKiBgeyBvazogZmFsc2UgfWAuXG4gKi9cbmV4cG9ydCB0eXBlIFRlYW1zRXhlY3V0b3IgPSA8VD4oXG4gIGZuOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8VD4sXG4gIHNldHRpbmdzOiBUZWFtc0V4ZWN1dGlvblNldHRpbmdzLFxuKSA9PiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdDxUPj47XG5cbi8qKiBUaGUgc2hhcmVkIHJlc29sdmVkIGNvbmZpZyBwbHVzIHRoZSBleGVjdXRvciBvcGVyYXRpb25zIHJ1biB0aHJvdWdoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZWFtc1J1bnRpbWUge1xuICBjb25maWc6IFJlc29sdmVkVGVhbXNDb25maWc7XG4gIGV4ZWN1dGU6IFRlYW1zRXhlY3V0b3I7XG59XG5cbi8qKlxuICogRXhlY3V0b3IgdXNlZCB1bnRpbCAob3IgdW5sZXNzKSB0aGUgcGx1Z2luIGluc3RhbGxzIGl0cyBvd246IHJ1biB0aGUgY2FsbFxuICogZGlyZWN0bHksIG1hcHBpbmcgYSB0aHJvdyBvbnRvIHRoZSBzYW1lIHtAbGluayBFeGVjdXRpb25SZXN1bHR9IHNoYXBlIHNvXG4gKiBjYWxsIHNpdGVzIGJyYW5jaCBvbiBgb2tgIGVpdGhlciB3YXkuXG4gKi9cbmNvbnN0IGRpcmVjdEV4ZWN1dGUgPSBleGVjdXRpb24uZGlyZWN0RXhlY3V0b3I8VGVhbXNFeGVjdXRpb25TZXR0aW5ncz4oKTtcblxubGV0IHJ1bnRpbWU6IFRlYW1zUnVudGltZSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNoYXJlZCBydW50aW1lLCBidWlsZGluZyBpdCBvbiBmaXJzdCB1c2UgZnJvbSB0aGUgc3VwcGxpZWQgY29uZmlnXG4gKiBsYXllcmVkIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMuIE92ZXJyaWRlcyBhcmUgb25seSByZWFkIHdoZW4gdGhlIHJ1bnRpbWVcbiAqIGlzIGZpcnN0IGNyZWF0ZWQsIHNvIHByaW1lIGl0IGZyb20gdGhlIHBsdWdpbidzIGNvbmZpZyBhdCBzZXR1cDsgc3Vic2VxdWVudFxuICogY2FsbHMgKHRoZSB0b29sJ3MgYGV4ZWN1dGVgKSBwYXNzIG5vdGhpbmcgYW5kIGdldCB0aGUgc2FtZSBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlYW1zUnVudGltZShvdmVycmlkZXM/OiBUZWFtc1BsdWdpbkNvbmZpZyk6IFRlYW1zUnVudGltZSB7XG4gIGlmICghcnVudGltZSkge1xuICAgIHJ1bnRpbWUgPSB7IGNvbmZpZzogcmVzb2x2ZVRlYW1zQ29uZmlnKG92ZXJyaWRlcyksIGV4ZWN1dGU6IGRpcmVjdEV4ZWN1dGUgfTtcbiAgfVxuICByZXR1cm4gcnVudGltZTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIHRoZSBleGVjdXRvciBvcGVyYXRpb25zIHJ1biB0aHJvdWdoLiBUaGUgcGx1Z2luIGNhbGxzIHRoaXMgYXQgc2V0dXBcbiAqIHdpdGggaXRzIG93biBgZXhlY3V0ZSgpYDsgYSBzZWNvbmQgY2FsbCByZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLCBzbyBhXG4gKiByZS1yZWdpc3RlcmVkIHBsdWdpbiBkb2VzIG5vdCBsZWF2ZSB0aGUgdG9vbCBib3VuZCB0byBhIGRlYWQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUZWFtc0V4ZWN1dG9yKGV4ZWN1dGU6IFRlYW1zRXhlY3V0b3IpOiB2b2lkIHtcbiAgZ2V0VGVhbXNSdW50aW1lKCkuZXhlY3V0ZSA9IGV4ZWN1dGU7XG59XG5cbi8qKiBEcm9wIHRoZSBtZW1vaXplZCBydW50aW1lIHNvIHRoZSBuZXh0IHtAbGluayBnZXRUZWFtc1J1bnRpbWV9IHJlYnVpbGRzIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0VGVhbXNSdW50aW1lKCk6IHZvaWQge1xuICBydW50aW1lID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJ1biBvbmUgb3BlcmF0aW9uIHRocm91Z2ggdGhlIHNoYXJlZCBleGVjdXRvciBhbmQgdW53cmFwIGl0LlxuICpcbiAqIGBleGVjdXRlKClgIG5ldmVyIHRocm93cywgc28gYSBmYWlsZWQgY2FsbCBhcnJpdmVzIGFzIGB7IG9rOiBmYWxzZSB9YCB3aXRoIGFcbiAqIHN0YXR1cyB0aGUgaW50ZXJjZXB0b3JzIGFscmVhZHkgc2FuaXRpemVkOyBpdCBpcyBsb2dnZWQgaGVyZSBhbmQgcmUtcmFpc2VkIGFzXG4gKiBhIHN0YWJsZSB7QGxpbmsgRXhlY3V0aW9uRXJyb3J9IHNvIGFuIHVwc3RyZWFtIG1lc3NhZ2UgbmV2ZXIgYmVjb21lcyB0aGVcbiAqIGNhbGxlcidzIGVycm9yIHRleHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bjxUPihcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIHNldHRpbmdzOiBUZWFtc0V4ZWN1dGlvblNldHRpbmdzLFxuICBmbjogKHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPFQ+LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB7IGV4ZWN1dGUgfSA9IGdldFRlYW1zUnVudGltZSgpO1xuICByZXR1cm4gZXhlY3V0aW9uLnJ1bih7XG4gICAgb3BlcmF0aW9uLFxuICAgIHNldHRpbmdzLFxuICAgIGV4ZWN1dGUsXG4gICAgZm4sXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbGVkOiBFeGVjdXRpb25FcnJvci5jYW5jZWxlZCxcbiAgICBmYWlsZWQ6IChmYWlsdXJlKSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcImV4ZWN1dGlvbi1mYWlsZWRcIiwge1xuICAgICAgICBvcGVyYXRpb246IGZhaWx1cmUub3BlcmF0aW9uLFxuICAgICAgICBzdGF0dXM6IGZhaWx1cmUuc3RhdHVzLFxuICAgICAgICBlcnJvcjogZmFpbHVyZS5tZXNzYWdlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEV4ZWN1dGlvbkVycm9yKGB0ZWFtczogJHtmYWlsdXJlLm9wZXJhdGlvbn0gZmFpbGVkYCwge1xuICAgICAgICBjb250ZXh0OiB7IG9wZXJhdGlvbjogZmFpbHVyZS5vcGVyYXRpb24sIHN0YXR1czogZmFpbHVyZS5zdGF0dXMgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBjYXJkIHNwZWMgaW50byBhbiBBZGFwdGl2ZSBDYXJkIGRvY3VtZW50LCBzdGFtcGVkIHdpdGggdGhlIHJ1bnRpbWUnc1xuICogcmVzb2x2ZWQgY2FyZCB2ZXJzaW9uLiBSdW5zIHRocm91Z2ggdGhlIHNoYXJlZCBleGVjdXRvciBzbyBhIGJ1aWxkIHBpY2tzIHVwXG4gKiB0aGUgYXBwJ3MgdGVsZW1ldHJ5IC8gdGltZW91dCBjaGFpbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ2FyZChcbiAgc3BlYzogY2FyZC5DYXJkU3BlYyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPGNhcmQuQ2FyZFJlc3VsdD4ge1xuICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0VGVhbXNSdW50aW1lKCk7XG4gIHJldHVybiBydW4oXG4gICAgXCJidWlsZFwiLFxuICAgIFRFQU1TX0JVSUxEX1NFVFRJTkdTLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkQ2FyZFJlc3VsdChzcGVjKTtcbiAgICAgIHJlc3VsdC5jYXJkLnZlcnNpb24gPSBjb25maWcuY2FyZFZlcnNpb247XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgc2lnbmFsLFxuICApO1xufVxuXG4vKipcbiAqIFBPU1QgYSBjb21waWxlZCBBZGFwdGl2ZSBDYXJkIHRvIHRoZSBjb25maWd1cmVkIFRlYW1zIGluY29taW5nIHdlYmhvb2ssXG4gKiB3cmFwcGVkIGluIHRoZSBgTWVzc2FnZUNhcmRgIGF0dGFjaG1lbnQgZW52ZWxvcGUgVGVhbXMgZXhwZWN0cy4gVGhyb3dzIHdoZW5cbiAqIG5vIHdlYmhvb2sgaXMgY29uZmlndXJlZCwgc28gYSBjYWxsZXIgdGhhdCByZWFjaGVzIGhlcmUgd2l0aG91dCBvbmUgZ2V0cyBhXG4gKiBjbGVhciBlcnJvciByYXRoZXIgdGhhbiBhIHNpbGVudCBuby1vcC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBvc3RDYXJkKFxuICBjYXJkRG9jdW1lbnQ6IGNhcmQuQWRhcHRpdmVDYXJkLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0VGVhbXNSdW50aW1lKCk7XG4gIGNvbnN0IHdlYmhvb2tVcmwgPSBjb25maWcud2ViaG9va1VybDtcbiAgaWYgKCF3ZWJob29rVXJsKSB7XG4gICAgdGhyb3cgbmV3IEV4ZWN1dGlvbkVycm9yKFwidGVhbXM6IG5vIHdlYmhvb2sgY29uZmlndXJlZFwiLCB7XG4gICAgICBjb250ZXh0OiB7IG9wZXJhdGlvbjogXCJwb3N0XCIgfSxcbiAgICB9KTtcbiAgfVxuICBhd2FpdCBydW4oXG4gICAgXCJwb3N0XCIsXG4gICAgVEVBTVNfUE9TVF9TRVRUSU5HUyxcbiAgICBhc3luYyAoZXhlY3V0ZVNpZ25hbCkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgdHlwZTogXCJtZXNzYWdlXCIsXG4gICAgICAgIGF0dGFjaG1lbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLmFkYXB0aXZlXCIsXG4gICAgICAgICAgICBjb250ZW50OiBjYXJkRG9jdW1lbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHdlYmhvb2tVcmwsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgLi4uKGV4ZWN1dGVTaWduYWwgPyB7IHNpZ25hbDogZXhlY3V0ZVNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihgdGVhbXM6IHdlYmhvb2sgcmVzcG9uZGVkICR7cmVzcG9uc2Uuc3RhdHVzfWAsIHtcbiAgICAgICAgICBjb250ZXh0OiB7IG9wZXJhdGlvbjogXCJwb3N0XCIsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2lnbmFsLFxuICApO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@databricks/appkit": "^0.43.0",
|
|
29
|
-
"@dbx-tools/shared-core": "0.6.
|
|
30
|
-
"@dbx-tools/shared-teams": "0.6.
|
|
29
|
+
"@dbx-tools/shared-core": "0.6.49",
|
|
30
|
+
"@dbx-tools/shared-teams": "0.6.49",
|
|
31
31
|
"@mastra/core": "^1.47.0",
|
|
32
32
|
"jose": "^6.2.3",
|
|
33
33
|
"zod": "4.3.6"
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"./package.json": "./package.json"
|
|
47
47
|
}
|
|
48
48
|
},
|
|
49
|
-
"version": "0.6.
|
|
49
|
+
"version": "0.6.49",
|
|
50
50
|
"types": "./lib/index.d.ts",
|
|
51
51
|
"type": "module",
|
|
52
52
|
"exports": {
|
package/src/config.ts
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
31
|
import { ValidationError, type BasePluginConfig } from "@databricks/appkit";
|
|
32
|
-
import {
|
|
32
|
+
import { env, object } from "@dbx-tools/shared-core";
|
|
33
33
|
import { card } from "@dbx-tools/shared-teams";
|
|
34
34
|
import type { JSONSchema7 } from "json-schema";
|
|
35
35
|
|
|
@@ -198,11 +198,8 @@ export const TEAMS_CONFIG_SCHEMA: JSONSchema7 = {
|
|
|
198
198
|
*/
|
|
199
199
|
export function resolveTeamsConfig(overrides?: TeamsPluginConfig): ResolvedTeamsConfig {
|
|
200
200
|
const cardVersion =
|
|
201
|
-
string
|
|
202
|
-
|
|
203
|
-
card.ADAPTIVE_CARD_VERSION;
|
|
204
|
-
const webhookUrl =
|
|
205
|
-
string.trimToNull(overrides?.webhookUrl) ?? string.trimToNull(process.env[WEBHOOK_URL_ENV]);
|
|
201
|
+
env.string(overrides?.cardVersion, CARD_VERSION_ENV) ?? card.ADAPTIVE_CARD_VERSION;
|
|
202
|
+
const webhookUrl = env.string(overrides?.webhookUrl, WEBHOOK_URL_ENV);
|
|
206
203
|
if (webhookUrl !== null && !isAbsoluteUrl(webhookUrl)) {
|
|
207
204
|
throw ValidationError.invalidValue(
|
|
208
205
|
WEBHOOK_URL_ENV,
|
|
@@ -210,52 +207,23 @@ export function resolveTeamsConfig(overrides?: TeamsPluginConfig): ResolvedTeams
|
|
|
210
207
|
"an absolute https URL for the Teams webhook",
|
|
211
208
|
);
|
|
212
209
|
}
|
|
213
|
-
const agentPlugin =
|
|
214
|
-
string.trimToNull(overrides?.agentPlugin) ??
|
|
215
|
-
string.trimToNull(process.env[AGENT_PLUGIN_ENV]) ??
|
|
216
|
-
DEFAULT_AGENT_PLUGIN;
|
|
210
|
+
const agentPlugin = env.string(overrides?.agentPlugin, AGENT_PLUGIN_ENV) ?? DEFAULT_AGENT_PLUGIN;
|
|
217
211
|
// Two independent conditions must BOTH hold: the operator asked for it, and
|
|
218
212
|
// this is a development build. Gating on `NODE_ENV` as well means a stray
|
|
219
213
|
// variable in a production environment cannot silently expose the endpoint.
|
|
220
|
-
const requested =
|
|
221
|
-
overrides?.allowUnauthenticated ?? object.toBoolean(process.env[ALLOW_UNAUTHENTICATED_ENV]);
|
|
214
|
+
const requested = env.boolean(overrides?.allowUnauthenticated, ALLOW_UNAUTHENTICATED_ENV);
|
|
222
215
|
const allowUnauthenticated = requested === true && process.env.NODE_ENV === "development";
|
|
223
216
|
return {
|
|
224
217
|
cardVersion,
|
|
225
218
|
agentPlugin,
|
|
226
219
|
allowUnauthenticated,
|
|
227
|
-
...(webhookUrl
|
|
228
|
-
...
|
|
229
|
-
...
|
|
230
|
-
|
|
231
|
-
string.trimToNull(overrides?.appPassword) ?? fromEnv(APP_PASSWORD_ENVS),
|
|
232
|
-
),
|
|
233
|
-
...spread("appTenantId", string.trimToNull(overrides?.appTenantId) ?? fromEnv(APP_TENANT_ENVS)),
|
|
220
|
+
...object.optional("webhookUrl", webhookUrl),
|
|
221
|
+
...object.optional("appId", env.string(overrides?.appId, APP_ID_ENVS)),
|
|
222
|
+
...object.optional("appPassword", env.string(overrides?.appPassword, APP_PASSWORD_ENVS)),
|
|
223
|
+
...object.optional("appTenantId", env.string(overrides?.appTenantId, APP_TENANT_ENVS)),
|
|
234
224
|
};
|
|
235
225
|
}
|
|
236
226
|
|
|
237
|
-
/**
|
|
238
|
-
* First non-empty value among `names` in the environment, or `null`. Lets a
|
|
239
|
-
* `TEAMS_*` variable win over the `MICROSOFT_APP_*` alias the Bot Framework SDK
|
|
240
|
-
* uses without duplicating the lookup per field.
|
|
241
|
-
*/
|
|
242
|
-
function fromEnv(names: readonly string[]): string | null {
|
|
243
|
-
for (const name of names) {
|
|
244
|
-
const value = string.trimToNull(process.env[name]);
|
|
245
|
-
if (value !== null) return value;
|
|
246
|
-
}
|
|
247
|
-
return null;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* `{ [key]: value }` when `value` is present, otherwise nothing - so an absent
|
|
252
|
-
* optional field stays ABSENT rather than becoming an explicit `undefined`,
|
|
253
|
-
* which `exactOptionalPropertyTypes` rejects.
|
|
254
|
-
*/
|
|
255
|
-
function spread<K extends string>(key: K, value: string | null): Record<K, string> | undefined {
|
|
256
|
-
return value === null ? undefined : ({ [key]: value } as Record<K, string>);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
227
|
/** Whether `value` parses as an absolute URL. */
|
|
260
228
|
function isAbsoluteUrl(value: string): boolean {
|
|
261
229
|
try {
|
package/src/runtime.ts
CHANGED
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
* @module
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
22
|
+
import { ExecutionError, type ExecutionResult } from "@databricks/appkit";
|
|
23
|
+
import { execution, log } from "@dbx-tools/shared-core";
|
|
24
24
|
import { card } from "@dbx-tools/shared-teams";
|
|
25
25
|
import { buildCardResult } from "./builder.ts";
|
|
26
26
|
import { resolveTeamsConfig, type ResolvedTeamsConfig, type TeamsPluginConfig } from "./config.ts";
|
|
@@ -53,17 +53,7 @@ export interface TeamsRuntime {
|
|
|
53
53
|
* directly, mapping a throw onto the same {@link ExecutionResult} shape so
|
|
54
54
|
* call sites branch on `ok` either way.
|
|
55
55
|
*/
|
|
56
|
-
const directExecute
|
|
57
|
-
try {
|
|
58
|
-
return { ok: true, data: await fn() };
|
|
59
|
-
} catch (err) {
|
|
60
|
-
return {
|
|
61
|
-
ok: false,
|
|
62
|
-
status: err instanceof AppKitError ? err.statusCode : 500,
|
|
63
|
-
message: error.errorMessage(err),
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
};
|
|
56
|
+
const directExecute = execution.directExecutor<TeamsExecutionSettings>();
|
|
67
57
|
|
|
68
58
|
let runtime: TeamsRuntime | undefined;
|
|
69
59
|
|
|
@@ -109,19 +99,23 @@ async function run<T>(
|
|
|
109
99
|
signal?: AbortSignal,
|
|
110
100
|
): Promise<T> {
|
|
111
101
|
const { execute } = getTeamsRuntime();
|
|
112
|
-
|
|
113
|
-
(executeSignal) => fn(async.combineAbortSignals(executeSignal, signal)),
|
|
114
|
-
settings,
|
|
115
|
-
);
|
|
116
|
-
if (result.ok) return result.data;
|
|
117
|
-
if (signal?.aborted) throw ExecutionError.canceled();
|
|
118
|
-
logger.warn("execution-failed", {
|
|
102
|
+
return execution.run({
|
|
119
103
|
operation,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
104
|
+
settings,
|
|
105
|
+
execute,
|
|
106
|
+
fn,
|
|
107
|
+
signal,
|
|
108
|
+
canceled: ExecutionError.canceled,
|
|
109
|
+
failed: (failure) => {
|
|
110
|
+
logger.warn("execution-failed", {
|
|
111
|
+
operation: failure.operation,
|
|
112
|
+
status: failure.status,
|
|
113
|
+
error: failure.message,
|
|
114
|
+
});
|
|
115
|
+
return new ExecutionError(`teams: ${failure.operation} failed`, {
|
|
116
|
+
context: { operation: failure.operation, status: failure.status },
|
|
117
|
+
});
|
|
118
|
+
},
|
|
125
119
|
});
|
|
126
120
|
}
|
|
127
121
|
|