@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 CHANGED
@@ -28,7 +28,7 @@
28
28
  * @module
29
29
  */
30
30
  import { ValidationError } from "@databricks/appkit";
31
- import { object, string } from "@dbx-tools/shared-core";
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.trimToNull(overrides?.cardVersion) ??
107
- string.trimToNull(process.env[CARD_VERSION_ENV]) ??
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.trimToNull(overrides?.agentPlugin) ??
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 ?? object.toBoolean(process.env[ALLOW_UNAUTHENTICATED_ENV]);
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 !== null ? { webhookUrl } : {}),
126
- ...spread("appId", string.trimToNull(overrides?.appId) ?? fromEnv(APP_ID_ENVS)),
127
- ...spread("appPassword", string.trimToNull(overrides?.appPassword) ?? fromEnv(APP_PASSWORD_ENVS)),
128
- ...spread("appTenantId", string.trimToNull(overrides?.appTenantId) ?? fromEnv(APP_TENANT_ENVS)),
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
@@ -18,8 +18,8 @@
18
18
  *
19
19
  * @module
20
20
  */
21
- import { AppKitError, ExecutionError } from "@databricks/appkit";
22
- import { async, error, log } from "@dbx-tools/shared-core";
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 = async (fn) => {
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
- const result = await execute((executeSignal) => fn(async.combineAbortSignals(executeSignal, signal)), settings);
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
- status: result.status,
87
- error: result.message,
88
- });
89
- throw new ExecutionError(`teams: ${operation} failed`, {
90
- context: { operation, status: result.status },
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.46",
30
- "@dbx-tools/shared-teams": "0.6.46",
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.46",
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 { object, string } from "@dbx-tools/shared-core";
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.trimToNull(overrides?.cardVersion) ??
202
- string.trimToNull(process.env[CARD_VERSION_ENV]) ??
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 !== null ? { webhookUrl } : {}),
228
- ...spread("appId", string.trimToNull(overrides?.appId) ?? fromEnv(APP_ID_ENVS)),
229
- ...spread(
230
- "appPassword",
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 { AppKitError, ExecutionError, type ExecutionResult } from "@databricks/appkit";
23
- import { async, error, log } from "@dbx-tools/shared-core";
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: TeamsExecutor = async (fn) => {
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
- const result = await execute(
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
- status: result.status,
121
- error: result.message,
122
- });
123
- throw new ExecutionError(`teams: ${operation} failed`, {
124
- context: { operation, status: result.status },
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