@dbx-tools/auth 0.9.30 → 0.9.32

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.
@@ -17,9 +17,9 @@ export class TokenLifecycle {
17
17
  logger.debug("created authentication lifecycle", {
18
18
  credential: credentialId(key),
19
19
  storage: store.name(),
20
- refreshBufferSeconds: options.refreshBufferSeconds,
21
- lockTimeoutSeconds: options.lockTimeoutSeconds,
22
- loginTimeoutSeconds: options.loginTimeoutSeconds,
20
+ refreshBufferMs: options.refreshBufferMs,
21
+ lockTimeoutMs: options.lockTimeoutMs,
22
+ loginTimeoutMs: options.loginTimeoutMs,
23
23
  silentProvider: provider.canAuthenticateSilently(),
24
24
  });
25
25
  }
@@ -30,7 +30,7 @@ export class TokenLifecycle {
30
30
  logger.debug("interactive login requested", this.context());
31
31
  return this.withLock(async () => {
32
32
  await this.store.prepareWrite();
33
- const token = validateToken(await this.provider.login(this.options.loginTimeoutSeconds * 1000));
33
+ const token = validateToken(await this.provider.login(this.options.loginTimeoutMs));
34
34
  await this.store.save(this.key, token);
35
35
  logger.debug("interactive login stored credential", {
36
36
  ...this.context(),
@@ -126,7 +126,7 @@ export class TokenLifecycle {
126
126
  if (!login)
127
127
  throw error;
128
128
  logger.debug("falling back to interactive login", this.context());
129
- token = await this.provider.login(this.options.loginTimeoutSeconds * 1000);
129
+ token = await this.provider.login(this.options.loginTimeoutMs);
130
130
  }
131
131
  }
132
132
  else if (this.provider.canAuthenticateSilently()) {
@@ -135,7 +135,7 @@ export class TokenLifecycle {
135
135
  loginFallback: login,
136
136
  });
137
137
  try {
138
- token = await this.provider.authenticate(this.options.loginTimeoutSeconds * 1000);
138
+ token = await this.provider.authenticate(this.options.loginTimeoutMs);
139
139
  }
140
140
  catch (error) {
141
141
  logger.debug("silent credential acquisition failed", {
@@ -146,12 +146,12 @@ export class TokenLifecycle {
146
146
  if (!login)
147
147
  throw error;
148
148
  logger.debug("falling back to interactive login", this.context());
149
- token = await this.provider.login(this.options.loginTimeoutSeconds * 1000);
149
+ token = await this.provider.login(this.options.loginTimeoutMs);
150
150
  }
151
151
  }
152
152
  else if (login) {
153
153
  logger.debug("provider requires interactive login", this.context());
154
- token = await this.provider.login(this.options.loginTimeoutSeconds * 1000);
154
+ token = await this.provider.login(this.options.loginTimeoutMs);
155
155
  }
156
156
  else {
157
157
  throw new AuthError("oauth", "No stored credential is available and interactive login is disabled");
@@ -171,11 +171,15 @@ export class TokenLifecycle {
171
171
  return false;
172
172
  if (!token.expiry)
173
173
  return true;
174
- return (Date.parse(token.expiry) - this.now().getTime() > this.options.refreshBufferSeconds * 1000);
174
+ return (Date.parse(token.expiry) - this.now().getTime() > this.options.refreshBufferMs);
175
175
  }
176
176
  async withLock(action) {
177
177
  logger.debug("waiting for credential lock", this.context());
178
- const lease = await this.store.acquireLock(this.key, this.options.lockTimeoutSeconds * 1000);
178
+ // Omit the timeout (wait indefinitely) unless a positive cap is configured.
179
+ // The holder may run for minutes; the caller owns the overall request budget
180
+ // and the lock is always released when `action` settles (success or error).
181
+ const lockTimeoutMs = this.options.lockTimeoutMs > 0 ? this.options.lockTimeoutMs : undefined;
182
+ const lease = await this.store.acquireLock(this.key, lockTimeoutMs);
179
183
  logger.debug("credential lock acquired", this.context());
180
184
  let failure;
181
185
  try {
@@ -226,4 +230,4 @@ export function validateToken(token, previous) {
226
230
  function isValid(token, now) {
227
231
  return Boolean(token.accessToken) && (!token.expiry || Date.parse(token.expiry) > now.getTime());
228
232
  }
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpZmVjeWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHekYsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXZDLHVGQUF1RjtBQUN2RixNQUFNLE9BQU8sY0FBYztJQUVOO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFMbkIsWUFDbUIsR0FBVyxFQUNYLFFBQXVCLEVBQ3ZCLEtBQXNCLEVBQ3RCLE9BQW9CLEVBQ3BCLE1BQWtCLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO1FBSmxDLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDWCxhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDcEIsUUFBRyxHQUFILEdBQUcsQ0FBK0I7UUFFbkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRTtZQUMvQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUM3QixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNyQixvQkFBb0IsRUFBRSxPQUFPLENBQUMsb0JBQW9CO1lBQ2xELGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxrQkFBa0I7WUFDOUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQjtZQUNoRCxjQUFjLEVBQUUsUUFBUSxDQUFDLHVCQUF1QixFQUFFO1NBQ25ELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFF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RUFBRSxZQUFZO1FBQzFELE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7S0FDaEYsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxLQUFZLEVBQUUsR0FBUztJQUN0QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhFcnJvciB9IGZyb20gXCIuL2Vycm9ycy50c1wiO1xuaW1wb3J0IHsgYXV0aExvZ2dlciwgY3JlZGVudGlhbElkLCBmYWlsdXJlTWV0YWRhdGEsIHRva2VuTWV0YWRhdGEgfSBmcm9tIFwiLi9fbG9nZ2luZy50c1wiO1xuaW1wb3J0IHR5cGUgeyBBY2Nlc3NUb2tlbiwgQXV0aE9wdGlvbnMsIENyZWRlbnRpYWxTdG9yZSwgVG9rZW4sIFRva2VuUHJvdmlkZXIgfSBmcm9tIFwiLi90eXBlcy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBhdXRoTG9nZ2VyKFwibGlmZWN5Y2xlXCIpO1xuXG4vKiogUHJvdmlkZXItbmV1dHJhbCBjaGVjay1sb2NrLWNoZWNrIGF1dGhlbnRpY2F0aW9uIGFuZCBwZXJzaXN0ZW50IHRva2VuIGxpZmVjeWNsZS4gKi9cbmV4cG9ydCBjbGFzcyBUb2tlbkxpZmVjeWNsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlcjogVG9rZW5Qcm92aWRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBDcmVkZW50aWFsU3RvcmUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBBdXRoT3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5vdzogKCkgPT4gRGF0ZSA9ICgpID0+IG5ldyBEYXRlKCksXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZWQgYXV0aGVudGljYXRpb24gbGlmZWN5Y2xlXCIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWxJZChrZXkpLFxuICAgICAgc3RvcmFnZTogc3RvcmUubmFtZSgpLFxuICAgICAgcmVmcmVzaEJ1ZmZlclNlY29uZHM6IG9wdGlvbnMucmVmcmVzaEJ1ZmZlclNlY29uZHMsXG4gICAgICBsb2NrVGltZW91dFNlY29uZHM6IG9wdGlvbnMubG9ja1RpbWVvdXRTZWNvbmRzLFxuICAgICAgbG9naW5UaW1lb3V0U2Vjb25kczogb3B0aW9ucy5sb2dpblRpbWVvdXRTZWNvbmRzLFxuICAgICAgc2lsZW50UHJvdmlkZXI6IHByb3ZpZGVyLmNhbkF1dGhlbnRpY2F0ZVNpbGVudGx5KCksXG4gICAgfSk7XG4gIH1cblxuICBzdG9yZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5uYW1lKCk7XG4gIH1cblxuICBhc3luYyBsb2dpbigpOiBQcm9taXNlPEFjY2Vzc1Rva2VuPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiaW50ZXJhY3RpdmUgbG9naW4gcmVxdWVzdGVkXCIsIHRoaXMuY29udGV4dCgpKTtcbiAgICByZXR1cm4gdGhpcy53aXRoTG9jayhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnN0b3JlLnByZXBhcmVXcml0ZSgpO1xuICAgICAgY29uc3QgdG9rZW4gPSB2YWxpZGF0ZVRva2VuKFxuICAgICAgICBhd2FpdCB0aGlzLnByb3ZpZGVyLmxvZ2luKHRoaXMub3B0aW9ucy5sb2dpblRpbWVvdXRTZWNvbmRzICogMTAwMCksXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5zdG9yZS5zYXZlKHRoaXMua2V5LCB0b2tlbik7XG4gICAgICBsb2dnZXIuZGVidWcoXCJpbnRlcmFjdGl2ZSBsb2dpbiBzdG9yZWQgY3JlZGVudGlhbFwiLCB7XG4gICAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgICB0b2tlbjogdG9rZW5NZXRhZGF0YSh0b2tlbiwgdGhpcy5ub3coKSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwdWJsaWNUb2tlbih0b2tlbik7XG4gICAgfSk7XG4gIH1cblxuICB0b2tlbigpOiBQcm9taXNlPEFjY2Vzc1Rva2VuPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZFRva2VuKGZhbHNlKTtcbiAgfVxuXG4gIHRva2VuT3JMb2dpbigpOiBQcm9taXNlPEFjY2Vzc1Rva2VuPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZFRva2VuKHRydWUpO1xuICB9XG5cbiAgYXN5bmMgdG9rZW5XaXRoTG9naW4obG9naW4/OiBib29sZWFuKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInRva2VuIHJlcXVlc3RlZFwiLCB7IC4uLnRoaXMuY29udGV4dCgpLCBsb2dpbjogbG9naW4gPz8gXCJhdXRvXCIgfSk7XG4gICAgaWYgKGxvZ2luID09PSB0cnVlKSByZXR1cm4gdGhpcy5sb2dpbigpO1xuICAgIGlmIChsb2dpbiA9PT0gZmFsc2UpIHJldHVybiB0aGlzLnRva2VuKCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5PckxvZ2luKCk7XG4gIH1cblxuICBmb3JjZVJlZnJlc2gobG9naW4gPSB0cnVlKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImZvcmNlZCByZWZyZXNoIHJlcXVlc3RlZFwiLCB7IC4uLnRoaXMuY29udGV4dCgpLCBsb2dpbiB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoUmVqZWN0ZWQodW5kZWZpbmVkLCBsb2dpbik7XG4gIH1cblxuICByZWZyZXNoUmVqZWN0ZWRUb2tlbihzdGFsZUFjY2Vzc1Rva2VuOiBzdHJpbmcsIGxvZ2luID0gdHJ1ZSk6IFByb21pc2U8QWNjZXNzVG9rZW4+IHtcbiAgICBsb2dnZXIuZGVidWcoXCJyZWplY3RlZCB0b2tlbiByZWZyZXNoIHJlcXVlc3RlZFwiLCB7IC4uLnRoaXMuY29udGV4dCgpLCBsb2dpbiB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoUmVqZWN0ZWQoc3RhbGVBY2Nlc3NUb2tlbiwgbG9naW4pO1xuICB9XG5cbiAgYXN5bmMgbG9nb3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImxvZ291dCByZXF1ZXN0ZWRcIiwgdGhpcy5jb250ZXh0KCkpO1xuICAgIGF3YWl0IHRoaXMud2l0aExvY2soKCkgPT4gdGhpcy5zdG9yZS5yZW1vdmUodGhpcy5rZXkpKTtcbiAgICBsb2dnZXIuZGVidWcoXCJzdG9yZWQgY3JlZGVudGlhbCByZW1vdmVkXCIsIHRoaXMuY29udGV4dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFRva2VuKGxvZ2luOiBib29sZWFuKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5zdG9yZS5sb2FkKHRoaXMua2V5KTtcbiAgICBjb25zdCByZXVzYWJsZSA9IEJvb2xlYW4oZXhpc3RpbmcgJiYgdGhpcy5jYW5SZXVzZShleGlzdGluZykpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNoZWNrZWQgY3JlZGVudGlhbCBjYWNoZVwiLCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQoKSxcbiAgICAgIGxvZ2luLFxuICAgICAgcmV1c2FibGUsXG4gICAgICB0b2tlbjogdG9rZW5NZXRhZGF0YShleGlzdGluZywgdGhpcy5ub3coKSksXG4gICAgfSk7XG4gICAgaWYgKGV4aXN0aW5nICYmIHJldXNhYmxlKSByZXR1cm4gcHVibGljVG9rZW4oZXhpc3RpbmcpO1xuICAgIHJldHVybiB0aGlzLndpdGhMb2NrKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCB0aGlzLnN0b3JlLmxvYWQodGhpcy5rZXkpO1xuICAgICAgY29uc3QgY3VycmVudFJldXNhYmxlID0gQm9vbGVhbihjdXJyZW50ICYmIHRoaXMuY2FuUmV1c2UoY3VycmVudCkpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmVjaGVja2VkIGNyZWRlbnRpYWwgY2FjaGUgYWZ0ZXIgbG9ja1wiLCB7XG4gICAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgICByZXVzYWJsZTogY3VycmVudFJldXNhYmxlLFxuICAgICAgICB0b2tlbjogdG9rZW5NZXRhZGF0YShjdXJyZW50LCB0aGlzLm5vdygpKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFJldXNhYmxlKSByZXR1cm4gcHVibGljVG9rZW4oY3VycmVudCk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5ldyhjdXJyZW50LCBsb2dpbik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hSZWplY3RlZChcbiAgICBzdGFsZUFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgbG9naW46IGJvb2xlYW4sXG4gICk6IFByb21pc2U8QWNjZXNzVG9rZW4+IHtcbiAgICByZXR1cm4gdGhpcy53aXRoTG9jayhhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5zdG9yZS5sb2FkKHRoaXMua2V5KTtcbiAgICAgIGlmIChcbiAgICAgICAgc3RhbGVBY2Nlc3NUb2tlbiAmJlxuICAgICAgICBjdXJyZW50Py5hY2Nlc3NUb2tlbiAmJlxuICAgICAgICBjdXJyZW50LmFjY2Vzc1Rva2VuICE9PSBzdGFsZUFjY2Vzc1Rva2VuICYmXG4gICAgICAgIGlzVmFsaWQoY3VycmVudCwgdGhpcy5ub3coKSlcbiAgICAgICkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJyZXVzZWQgcmVwbGFjZW1lbnQgZm9yIHJlamVjdGVkIGNyZWRlbnRpYWxcIiwge1xuICAgICAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgICAgIHRva2VuOiB0b2tlbk1ldGFkYXRhKGN1cnJlbnQsIHRoaXMubm93KCkpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHB1YmxpY1Rva2VuKGN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmVuZXcoY3VycmVudCwgbG9naW4pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW5ldyhjdXJyZW50OiBUb2tlbiB8IHVuZGVmaW5lZCwgbG9naW46IGJvb2xlYW4pOiBQcm9taXNlPEFjY2Vzc1Rva2VuPiB7XG4gICAgbGV0IHRva2VuOiBUb2tlbjtcbiAgICBpZiAoY3VycmVudCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmVmcmVzaGluZyBzdG9yZWQgY3JlZGVudGlhbFwiLCB7XG4gICAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgICBsb2dpbkZhbGxiYWNrOiBsb2dpbixcbiAgICAgICAgdG9rZW46IHRva2VuTWV0YWRhdGEoY3VycmVudCwgdGhpcy5ub3coKSksXG4gICAgICB9KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRva2VuID0gYXdhaXQgdGhpcy5wcm92aWRlci5yZWZyZXNoKGN1cnJlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiY3JlZGVudGlhbCByZWZyZXNoIGZhaWxlZFwiLCB7XG4gICAgICAgICAgLi4udGhpcy5jb250ZXh0KCksXG4gICAgICAgICAgbG9naW5GYWxsYmFjazogbG9naW4sXG4gICAgICAgICAgZXJyb3I6IGZhaWx1cmVNZXRhZGF0YShlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWxvZ2luKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiZmFsbGluZyBiYWNrIHRvIGludGVyYWN0aXZlIGxvZ2luXCIsIHRoaXMuY29udGV4dCgpKTtcbiAgICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLnByb3ZpZGVyLmxvZ2luKHRoaXMub3B0aW9ucy5sb2dpblRpbWVvdXRTZWNvbmRzICogMTAwMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3ZpZGVyLmNhbkF1dGhlbnRpY2F0ZVNpbGVudGx5KCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImF0dGVtcHRpbmcgc2lsZW50IGNyZWRlbnRpYWwgYWNxdWlzaXRpb25cIiwge1xuICAgICAgICAuLi50aGlzLmNvbnRleHQoKSxcbiAgICAgICAgbG9naW5GYWxsYmFjazogbG9naW4sXG4gICAgICB9KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRva2VuID0gYXdhaXQgdGhpcy5wcm92aWRlci5hdXRoZW50aWNhdGUodGhpcy5vcHRpb25zLmxvZ2luVGltZW91dFNlY29uZHMgKiAxMDAwKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcInNpbGVudCBjcmVkZW50aWFsIGFjcXVpc2l0aW9uIGZhaWxlZFwiLCB7XG4gICAgICAgICAgLi4udGhpcy5jb250ZXh0KCksXG4gICAgICAgICAgbG9naW5GYWxsYmFjazogbG9naW4sXG4gICAgICAgICAgZXJyb3I6IGZhaWx1cmVNZXRhZGF0YShlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWxvZ2luKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiZmFsbGluZyBiYWNrIHRvIGludGVyYWN0aXZlIGxvZ2luXCIsIHRoaXMuY29udGV4dCgpKTtcbiAgICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLnByb3ZpZGVyLmxvZ2luKHRoaXMub3B0aW9ucy5sb2dpblRpbWVvdXRTZWNvbmRzICogMTAwMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsb2dpbikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicHJvdmlkZXIgcmVxdWlyZXMgaW50ZXJhY3RpdmUgbG9naW5cIiwgdGhpcy5jb250ZXh0KCkpO1xuICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLnByb3ZpZGVyLmxvZ2luKHRoaXMub3B0aW9ucy5sb2dpblRpbWVvdXRTZWNvbmRzICogMTAwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXG4gICAgICAgIFwib2F1dGhcIixcbiAgICAgICAgXCJObyBzdG9yZWQgY3JlZGVudGlhbCBpcyBhdmFpbGFibGUgYW5kIGludGVyYWN0aXZlIGxvZ2luIGlzIGRpc2FibGVkXCIsXG4gICAgICApO1xuICAgIH1cbiAgICB0b2tlbiA9IHZhbGlkYXRlVG9rZW4odG9rZW4sIGN1cnJlbnQpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNyZWRlbnRpYWwgYWNxdWlzaXRpb24gY29tcGxldGVkXCIsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgdG9rZW46IHRva2VuTWV0YWRhdGEodG9rZW4sIHRoaXMubm93KCkpLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuc3RvcmUucHJlcGFyZVdyaXRlKCk7XG4gICAgYXdhaXQgdGhpcy5zdG9yZS5zYXZlKHRoaXMua2V5LCB0b2tlbik7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlZGVudGlhbCBzYXZlZFwiLCB0aGlzLmNvbnRleHQoKSk7XG4gICAgcmV0dXJuIHB1YmxpY1Rva2VuKHRva2VuKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUmV1c2UodG9rZW46IFRva2VuKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpc1ZhbGlkKHRva2VuLCB0aGlzLm5vdygpKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghdG9rZW4uZXhwaXJ5KSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gKFxuICAgICAgRGF0ZS5wYXJzZSh0b2tlbi5leHBpcnkpIC0gdGhpcy5ub3coKS5nZXRUaW1lKCkgPiB0aGlzLm9wdGlvbnMucmVmcmVzaEJ1ZmZlclNlY29uZHMgKiAxMDAwXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2l0aExvY2s8VD4oYWN0aW9uOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFwid2FpdGluZyBmb3IgY3JlZGVudGlhbCBsb2NrXCIsIHRoaXMuY29udGV4dCgpKTtcbiAgICBjb25zdCBsZWFzZSA9IGF3YWl0IHRoaXMuc3RvcmUuYWNxdWlyZUxvY2sodGhpcy5rZXksIHRoaXMub3B0aW9ucy5sb2NrVGltZW91dFNlY29uZHMgKiAxMDAwKTtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVkZW50aWFsIGxvY2sgYWNxdWlyZWRcIiwgdGhpcy5jb250ZXh0KCkpO1xuICAgIGxldCBmYWlsdXJlOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYWN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZhaWx1cmUgPSBlcnJvcjtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JlLnJlbGVhc2VMb2NrKGxlYXNlKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiY3JlZGVudGlhbCBsb2NrIHJlbGVhc2VkXCIsIHRoaXMuY29udGV4dCgpKTtcbiAgICAgIH0gY2F0Y2ggKHJlbGVhc2VFcnJvcikge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJjcmVkZW50aWFsIGxvY2sgcmVsZWFzZSBmYWlsZWRcIiwge1xuICAgICAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgICAgIGVycm9yOiBmYWlsdXJlTWV0YWRhdGEocmVsZWFzZUVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmYWlsdXJlID09PSB1bmRlZmluZWQpIHRocm93IHJlbGVhc2VFcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnRleHQoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7IGNyZWRlbnRpYWw6IGNyZWRlbnRpYWxJZCh0aGlzLmtleSksIHN0b3JhZ2U6IHRoaXMuc3RvcmUubmFtZSgpIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY1Rva2VuKHRva2VuOiBUb2tlbik6IEFjY2Vzc1Rva2VuIHtcbiAgcmV0dXJuIHtcbiAgICBhY2Nlc3NUb2tlbjogdG9rZW4uYWNjZXNzVG9rZW4sXG4gICAgdG9rZW5UeXBlOiB0b2tlbi50b2tlblR5cGUsXG4gICAgLi4uKHRva2VuLmV4cGlyeSA/IHsgZXhwaXJ5OiB0b2tlbi5leHBpcnkgfSA6IHt9KSxcbiAgICBzY29wZXM6IFsuLi50b2tlbi5zY29wZXNdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUb2tlbih0b2tlbjogVG9rZW4sIHByZXZpb3VzPzogVG9rZW4pOiBUb2tlbiB7XG4gIGlmICghdG9rZW4uYWNjZXNzVG9rZW4udHJpbSgpKVxuICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJvYXV0aFwiLCBcIlRva2VuIHJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhbiBhY2Nlc3MgdG9rZW5cIik7XG4gIHJldHVybiB7XG4gICAgYWNjZXNzVG9rZW46IHRva2VuLmFjY2Vzc1Rva2VuLFxuICAgIHRva2VuVHlwZTogdG9rZW4udG9rZW5UeXBlIHx8IFwiQmVhcmVyXCIsXG4gICAgcmVmcmVzaFRva2VuOiB0b2tlbi5yZWZyZXNoVG9rZW4gPz8gcHJldmlvdXM/LnJlZnJlc2hUb2tlbixcbiAgICBleHBpcnk6IHRva2VuLmV4cGlyeSxcbiAgICBzY29wZXM6IHRva2VuLnNjb3Blcy5sZW5ndGggPyBbLi4udG9rZW4uc2NvcGVzXSA6IFsuLi4ocHJldmlvdXM/LnNjb3BlcyA/PyBbXSldLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkKHRva2VuOiBUb2tlbiwgbm93OiBEYXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKHRva2VuLmFjY2Vzc1Rva2VuKSAmJiAoIXRva2VuLmV4cGlyeSB8fCBEYXRlLnBhcnNlKHRva2VuLmV4cGlyeSkgPiBub3cuZ2V0VGltZSgpKTtcbn1cbiJdfQ==
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpZmVjeWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHekYsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXZDLHVGQUF1RjtBQUN2RixNQUFNLE9BQU8sY0FBYztJQUVOO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFMbkIsWUFDbUIsR0FBVyxFQUNYLFFBQXVCLEVBQ3ZCLEtBQXNCLEVBQ3RCLE9BQW9CLEVBQ3BCLE1BQWtCLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO1FBSmxDLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDWCxhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDcEIsUUFBRyxHQUFILEdBQUcsQ0FBK0I7UUFFbkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRTtZQUMvQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUM3QixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNyQixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7WUFDeEMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1lBQ3BDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxjQUFjLEVBQUUsUUFBUSxDQUFDLHVCQUF1QixFQUFFO1NBQ25ELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMs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QVE7UUFDdEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksUUFBUSxFQUFFLFlBQVk7UUFDMUQsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQ3BCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztLQUNoRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEtBQVksRUFBRSxHQUFTO0lBQ3RDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNuRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLnRzXCI7XG5pbXBvcnQgeyBhdXRoTG9nZ2VyLCBjcmVkZW50aWFsSWQsIGZhaWx1cmVNZXRhZGF0YSwgdG9rZW5NZXRhZGF0YSB9IGZyb20gXCIuL19sb2dnaW5nLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFjY2Vzc1Rva2VuLCBBdXRoT3B0aW9ucywgQ3JlZGVudGlhbFN0b3JlLCBUb2tlbiwgVG9rZW5Qcm92aWRlciB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGF1dGhMb2dnZXIoXCJsaWZlY3ljbGVcIik7XG5cbi8qKiBQcm92aWRlci1uZXV0cmFsIGNoZWNrLWxvY2stY2hlY2sgYXV0aGVudGljYXRpb24gYW5kIHBlcnNpc3RlbnQgdG9rZW4gbGlmZWN5Y2xlLiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuTGlmZWN5Y2xlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXk6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3ZpZGVyOiBUb2tlblByb3ZpZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IENyZWRlbnRpYWxTdG9yZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEF1dGhPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbm93OiAoKSA9PiBEYXRlID0gKCkgPT4gbmV3IERhdGUoKSxcbiAgKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRlZCBhdXRoZW50aWNhdGlvbiBsaWZlY3ljbGVcIiwge1xuICAgICAgY3JlZGVudGlhbDogY3JlZGVudGlhbElkKGtleSksXG4gICAgICBzdG9yYWdlOiBzdG9yZS5uYW1lKCksXG4gICAgICByZWZyZXNoQnVmZmVyTXM6IG9wdGlvbnMucmVmcmVzaEJ1ZmZlck1zLFxuICAgICAgbG9ja1RpbWVvdXRNczogb3B0aW9ucy5sb2NrVGltZW91dE1zLFxuICAgICAgbG9naW5UaW1lb3V0TXM6IG9wdGlvbnMubG9naW5UaW1lb3V0TXMsXG4gICAgICBzaWxlbnRQcm92aWRlcjogcHJvdmlkZXIuY2FuQXV0aGVudGljYXRlU2lsZW50bHkoKSxcbiAgICB9KTtcbiAgfVxuXG4gIHN0b3JlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLm5hbWUoKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ2luKCk6IFByb21pc2U8QWNjZXNzVG9rZW4+IHtcbiAgICBsb2dnZXIuZGVidWcoXCJpbnRlcmFjdGl2ZSBsb2dpbiByZXF1ZXN0ZWRcIiwgdGhpcy5jb250ZXh0KCkpO1xuICAgIHJldHVybiB0aGlzLndpdGhMb2NrKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmUucHJlcGFyZVdyaXRlKCk7XG4gICAgICBjb25zdCB0b2tlbiA9IHZhbGlkYXRlVG9rZW4oXG4gICAgICAgIGF3YWl0IHRoaXMucHJvdmlkZXIubG9naW4odGhpcy5vcHRpb25zLmxvZ2luVGltZW91dE1zKSxcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3JlLnNhdmUodGhpcy5rZXksIHRva2VuKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImludGVyYWN0aXZlIGxvZ2luIHN0b3JlZCBjcmVkZW50aWFsXCIsIHtcbiAgICAgICAgLi4udGhpcy5jb250ZXh0KCksXG4gICAgICAgIHRva2VuOiB0b2tlbk1ldGFkYXRhKHRva2VuLCB0aGlzLm5vdygpKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHB1YmxpY1Rva2VuKHRva2VuKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRva2VuKCk6IFByb21pc2U8QWNjZXNzVG9rZW4+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkVG9rZW4oZmFsc2UpO1xuICB9XG5cbiAgdG9rZW5PckxvZ2luKCk6IFByb21pc2U8QWNjZXNzVG9rZW4+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkVG9rZW4odHJ1ZSk7XG4gIH1cblxuICBhc3luYyB0b2tlbldpdGhMb2dpbihsb2dpbj86IGJvb2xlYW4pOiBQcm9taXNlPEFjY2Vzc1Rva2VuPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFwidG9rZW4gcmVxdWVzdGVkXCIsIHsgLi4udGhpcy5jb250ZXh0KCksIGxvZ2luOiBsb2dpbiA/PyBcImF1dG9cIiB9KTtcbiAgICBpZiAobG9naW4gPT09IHRydWUpIHJldHVybiB0aGlzLmxvZ2luKCk7XG4gICAgaWYgKGxvZ2luID09PSBmYWxzZSkgcmV0dXJuIHRoaXMudG9rZW4oKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbk9yTG9naW4oKTtcbiAgfVxuXG4gIGZvcmNlUmVmcmVzaChsb2dpbiA9IHRydWUpOiBQcm9taXNlPEFjY2Vzc1Rva2VuPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZm9yY2VkIHJlZnJlc2ggcmVxdWVzdGVkXCIsIHsgLi4udGhpcy5jb250ZXh0KCksIGxvZ2luIH0pO1xuICAgIHJldHVybiB0aGlzLnJlZnJlc2hSZWplY3RlZCh1bmRlZmluZWQsIGxvZ2luKTtcbiAgfVxuXG4gIHJlZnJlc2hSZWplY3RlZFRva2VuKHN0YWxlQWNjZXNzVG9rZW46IHN0cmluZywgbG9naW4gPSB0cnVlKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInJlamVjdGVkIHRva2VuIHJlZnJlc2ggcmVxdWVzdGVkXCIsIHsgLi4udGhpcy5jb250ZXh0KCksIGxvZ2luIH0pO1xuICAgIHJldHVybiB0aGlzLnJlZnJlc2hSZWplY3RlZChzdGFsZUFjY2Vzc1Rva2VuLCBsb2dpbik7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFwibG9nb3V0IHJlcXVlc3RlZFwiLCB0aGlzLmNvbnRleHQoKSk7XG4gICAgYXdhaXQgdGhpcy53aXRoTG9jaygoKSA9PiB0aGlzLnN0b3JlLnJlbW92ZSh0aGlzLmtleSkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInN0b3JlZCBjcmVkZW50aWFsIHJlbW92ZWRcIiwgdGhpcy5jb250ZXh0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkVG9rZW4obG9naW46IGJvb2xlYW4pOiBQcm9taXNlPEFjY2Vzc1Rva2VuPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnN0b3JlLmxvYWQodGhpcy5rZXkpO1xuICAgIGNvbnN0IHJldXNhYmxlID0gQm9vbGVhbihleGlzdGluZyAmJiB0aGlzLmNhblJldXNlKGV4aXN0aW5nKSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY2hlY2tlZCBjcmVkZW50aWFsIGNhY2hlXCIsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgbG9naW4sXG4gICAgICByZXVzYWJsZSxcbiAgICAgIHRva2VuOiB0b2tlbk1ldGFkYXRhKGV4aXN0aW5nLCB0aGlzLm5vdygpKSxcbiAgICB9KTtcbiAgICBpZiAoZXhpc3RpbmcgJiYgcmV1c2FibGUpIHJldHVybiBwdWJsaWNUb2tlbihleGlzdGluZyk7XG4gICAgcmV0dXJuIHRoaXMud2l0aExvY2soYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHRoaXMuc3RvcmUubG9hZCh0aGlzLmtleSk7XG4gICAgICBjb25zdCBjdXJyZW50UmV1c2FibGUgPSBCb29sZWFuKGN1cnJlbnQgJiYgdGhpcy5jYW5SZXVzZShjdXJyZW50KSk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJyZWNoZWNrZWQgY3JlZGVudGlhbCBjYWNoZSBhZnRlciBsb2NrXCIsIHtcbiAgICAgICAgLi4udGhpcy5jb250ZXh0KCksXG4gICAgICAgIHJldXNhYmxlOiBjdXJyZW50UmV1c2FibGUsXG4gICAgICAgIHRva2VuOiB0b2tlbk1ldGFkYXRhKGN1cnJlbnQsIHRoaXMubm93KCkpLFxuICAgICAgfSk7XG4gICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50UmV1c2FibGUpIHJldHVybiBwdWJsaWNUb2tlbihjdXJyZW50KTtcbiAgICAgIHJldHVybiB0aGlzLnJlbmV3KGN1cnJlbnQsIGxvZ2luKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaFJlamVjdGVkKFxuICAgIHN0YWxlQWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBsb2dpbjogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj4ge1xuICAgIHJldHVybiB0aGlzLndpdGhMb2NrKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCB0aGlzLnN0b3JlLmxvYWQodGhpcy5rZXkpO1xuICAgICAgaWYgKFxuICAgICAgICBzdGFsZUFjY2Vzc1Rva2VuICYmXG4gICAgICAgIGN1cnJlbnQ/LmFjY2Vzc1Rva2VuICYmXG4gICAgICAgIGN1cnJlbnQuYWNjZXNzVG9rZW4gIT09IHN0YWxlQWNjZXNzVG9rZW4gJiZcbiAgICAgICAgaXNWYWxpZChjdXJyZW50LCB0aGlzLm5vdygpKVxuICAgICAgKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcInJldXNlZCByZXBsYWNlbWVudCBmb3IgcmVqZWN0ZWQgY3JlZGVudGlhbFwiLCB7XG4gICAgICAgICAgLi4udGhpcy5jb250ZXh0KCksXG4gICAgICAgICAgdG9rZW46IHRva2VuTWV0YWRhdGEoY3VycmVudCwgdGhpcy5ub3coKSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHVibGljVG9rZW4oY3VycmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yZW5ldyhjdXJyZW50LCBsb2dpbik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbmV3KGN1cnJlbnQ6IFRva2VuIHwgdW5kZWZpbmVkLCBsb2dpbjogYm9vbGVhbik6IFByb21pc2U8QWNjZXNzVG9rZW4+IHtcbiAgICBsZXQgdG9rZW46IFRva2VuO1xuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJyZWZyZXNoaW5nIHN0b3JlZCBjcmVkZW50aWFsXCIsIHtcbiAgICAgICAgLi4udGhpcy5jb250ZXh0KCksXG4gICAgICAgIGxvZ2luRmFsbGJhY2s6IGxvZ2luLFxuICAgICAgICB0b2tlbjogdG9rZW5NZXRhZGF0YShjdXJyZW50LCB0aGlzLm5vdygpKSxcbiAgICAgIH0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLnByb3ZpZGVyLnJlZnJlc2goY3VycmVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJjcmVkZW50aWFsIHJlZnJlc2ggZmFpbGVkXCIsIHtcbiAgICAgICAgICAuLi50aGlzLmNvbnRleHQoKSxcbiAgICAgICAgICBsb2dpbkZhbGxiYWNrOiBsb2dpbixcbiAgICAgICAgICBlcnJvcjogZmFpbHVyZU1ldGFkYXRhKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghbG9naW4pIHRocm93IGVycm9yO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJmYWxsaW5nIGJhY2sgdG8gaW50ZXJhY3RpdmUgbG9naW5cIiwgdGhpcy5jb250ZXh0KCkpO1xuICAgICAgICB0b2tlbiA9IGF3YWl0IHRoaXMucHJvdmlkZXIubG9naW4odGhpcy5vcHRpb25zLmxvZ2luVGltZW91dE1zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvdmlkZXIuY2FuQXV0aGVudGljYXRlU2lsZW50bHkoKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiYXR0ZW1wdGluZyBzaWxlbnQgY3JlZGVudGlhbCBhY3F1aXNpdGlvblwiLCB7XG4gICAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgICBsb2dpbkZhbGxiYWNrOiBsb2dpbixcbiAgICAgIH0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLnByb3ZpZGVyLmF1dGhlbnRpY2F0ZSh0aGlzLm9wdGlvbnMubG9naW5UaW1lb3V0TXMpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwic2lsZW50IGNyZWRlbnRpYWwgYWNxdWlzaXRpb24gZmFpbGVkXCIsIHtcbiAgICAgICAgICAuLi50aGlzLmNvbnRleHQoKSxcbiAgICAgICAgICBsb2dpbkZhbGxiYWNrOiBsb2dpbixcbiAgICAgICAgICBlcnJvcjogZmFpbHVyZU1ldGFkYXRhKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghbG9naW4pIHRocm93IGVycm9yO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJmYWxsaW5nIGJhY2sgdG8gaW50ZXJhY3RpdmUgbG9naW5cIiwgdGhpcy5jb250ZXh0KCkpO1xuICAgICAgICB0b2tlbiA9IGF3YWl0IHRoaXMucHJvdmlkZXIubG9naW4odGhpcy5vcHRpb25zLmxvZ2luVGltZW91dE1zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxvZ2luKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJwcm92aWRlciByZXF1aXJlcyBpbnRlcmFjdGl2ZSBsb2dpblwiLCB0aGlzLmNvbnRleHQoKSk7XG4gICAgICB0b2tlbiA9IGF3YWl0IHRoaXMucHJvdmlkZXIubG9naW4odGhpcy5vcHRpb25zLmxvZ2luVGltZW91dE1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEF1dGhFcnJvcihcbiAgICAgICAgXCJvYXV0aFwiLFxuICAgICAgICBcIk5vIHN0b3JlZCBjcmVkZW50aWFsIGlzIGF2YWlsYWJsZSBhbmQgaW50ZXJhY3RpdmUgbG9naW4gaXMgZGlzYWJsZWRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRva2VuID0gdmFsaWRhdGVUb2tlbih0b2tlbiwgY3VycmVudCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY3JlZGVudGlhbCBhY3F1aXNpdGlvbiBjb21wbGV0ZWRcIiwge1xuICAgICAgLi4udGhpcy5jb250ZXh0KCksXG4gICAgICB0b2tlbjogdG9rZW5NZXRhZGF0YSh0b2tlbiwgdGhpcy5ub3coKSksXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5zdG9yZS5wcmVwYXJlV3JpdGUoKTtcbiAgICBhd2FpdCB0aGlzLnN0b3JlLnNhdmUodGhpcy5rZXksIHRva2VuKTtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVkZW50aWFsIHNhdmVkXCIsIHRoaXMuY29udGV4dCgpKTtcbiAgICByZXR1cm4gcHVibGljVG9rZW4odG9rZW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZXVzZSh0b2tlbjogVG9rZW4pOiBib29sZWFuIHtcbiAgICBpZiAoIWlzVmFsaWQodG9rZW4sIHRoaXMubm93KCkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0b2tlbi5leHBpcnkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAoXG4gICAgICBEYXRlLnBhcnNlKHRva2VuLmV4cGlyeSkgLSB0aGlzLm5vdygpLmdldFRpbWUoKSA+IHRoaXMub3B0aW9ucy5yZWZyZXNoQnVmZmVyTXNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3aXRoTG9jazxUPihhY3Rpb246ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBsb2dnZXIuZGVidWcoXCJ3YWl0aW5nIGZvciBjcmVkZW50aWFsIGxvY2tcIiwgdGhpcy5jb250ZXh0KCkpO1xuICAgIC8vIE9taXQgdGhlIHRpbWVvdXQgKHdhaXQgaW5kZWZpbml0ZWx5KSB1bmxlc3MgYSBwb3NpdGl2ZSBjYXAgaXMgY29uZmlndXJlZC5cbiAgICAvLyBUaGUgaG9sZGVyIG1heSBydW4gZm9yIG1pbnV0ZXM7IHRoZSBjYWxsZXIgb3ducyB0aGUgb3ZlcmFsbCByZXF1ZXN0IGJ1ZGdldFxuICAgIC8vIGFuZCB0aGUgbG9jayBpcyBhbHdheXMgcmVsZWFzZWQgd2hlbiBgYWN0aW9uYCBzZXR0bGVzIChzdWNjZXNzIG9yIGVycm9yKS5cbiAgICBjb25zdCBsb2NrVGltZW91dE1zID0gdGhpcy5vcHRpb25zLmxvY2tUaW1lb3V0TXMgPiAwID8gdGhpcy5vcHRpb25zLmxvY2tUaW1lb3V0TXMgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGVhc2UgPSBhd2FpdCB0aGlzLnN0b3JlLmFjcXVpcmVMb2NrKHRoaXMua2V5LCBsb2NrVGltZW91dE1zKTtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVkZW50aWFsIGxvY2sgYWNxdWlyZWRcIiwgdGhpcy5jb250ZXh0KCkpO1xuICAgIGxldCBmYWlsdXJlOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYWN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZhaWx1cmUgPSBlcnJvcjtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JlLnJlbGVhc2VMb2NrKGxlYXNlKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiY3JlZGVudGlhbCBsb2NrIHJlbGVhc2VkXCIsIHRoaXMuY29udGV4dCgpKTtcbiAgICAgIH0gY2F0Y2ggKHJlbGVhc2VFcnJvcikge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJjcmVkZW50aWFsIGxvY2sgcmVsZWFzZSBmYWlsZWRcIiwge1xuICAgICAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgICAgIGVycm9yOiBmYWlsdXJlTWV0YWRhdGEocmVsZWFzZUVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmYWlsdXJlID09PSB1bmRlZmluZWQpIHRocm93IHJlbGVhc2VFcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnRleHQoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7IGNyZWRlbnRpYWw6IGNyZWRlbnRpYWxJZCh0aGlzLmtleSksIHN0b3JhZ2U6IHRoaXMuc3RvcmUubmFtZSgpIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY1Rva2VuKHRva2VuOiBUb2tlbik6IEFjY2Vzc1Rva2VuIHtcbiAgcmV0dXJuIHtcbiAgICBhY2Nlc3NUb2tlbjogdG9rZW4uYWNjZXNzVG9rZW4sXG4gICAgdG9rZW5UeXBlOiB0b2tlbi50b2tlblR5cGUsXG4gICAgLi4uKHRva2VuLmV4cGlyeSA/IHsgZXhwaXJ5OiB0b2tlbi5leHBpcnkgfSA6IHt9KSxcbiAgICBzY29wZXM6IFsuLi50b2tlbi5zY29wZXNdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUb2tlbih0b2tlbjogVG9rZW4sIHByZXZpb3VzPzogVG9rZW4pOiBUb2tlbiB7XG4gIGlmICghdG9rZW4uYWNjZXNzVG9rZW4udHJpbSgpKVxuICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJvYXV0aFwiLCBcIlRva2VuIHJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhbiBhY2Nlc3MgdG9rZW5cIik7XG4gIHJldHVybiB7XG4gICAgYWNjZXNzVG9rZW46IHRva2VuLmFjY2Vzc1Rva2VuLFxuICAgIHRva2VuVHlwZTogdG9rZW4udG9rZW5UeXBlIHx8IFwiQmVhcmVyXCIsXG4gICAgcmVmcmVzaFRva2VuOiB0b2tlbi5yZWZyZXNoVG9rZW4gPz8gcHJldmlvdXM/LnJlZnJlc2hUb2tlbixcbiAgICBleHBpcnk6IHRva2VuLmV4cGlyeSxcbiAgICBzY29wZXM6IHRva2VuLnNjb3Blcy5sZW5ndGggPyBbLi4udG9rZW4uc2NvcGVzXSA6IFsuLi4ocHJldmlvdXM/LnNjb3BlcyA/PyBbXSldLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkKHRva2VuOiBUb2tlbiwgbm93OiBEYXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKHRva2VuLmFjY2Vzc1Rva2VuKSAmJiAoIXRva2VuLmV4cGlyeSB8fCBEYXRlLnBhcnNlKHRva2VuLmV4cGlyeSkgPiBub3cuZ2V0VGltZSgpKTtcbn1cbiJdfQ==
@@ -1,8 +1,17 @@
1
1
  import type { CredentialStore, LockAdapter, Token } from "./types.ts";
2
- /** Process-local generic lease registry used by the in-memory store. */
2
+ /**
3
+ * Process-local keyed mutex used by the in-memory store.
4
+ *
5
+ * Modeled on `@dbx-tools/core`'s `withProcessLock` coordinator: one holder per
6
+ * key, the rest queue in arrival order, distinct keys proceed concurrently.
7
+ * Waiting is purely promise-based, so a waiter never blocks the event loop and,
8
+ * by default, waits indefinitely - a holder may legitimately run for minutes
9
+ * (e.g. an interactive `databricks auth login` that opens a browser). A finite
10
+ * `timeoutMs` is opt-in for callers that prefer to fail fast.
11
+ */
3
12
  export declare class MemoryLockAdapter implements LockAdapter {
4
13
  #private;
5
- acquire(key: string, timeoutMs: number): Promise<string>;
14
+ acquire(key: string, timeoutMs?: number): Promise<string>;
6
15
  release(lease: string): Promise<void>;
7
16
  }
8
17
  /** Process-local credential store with per-key refresh locks. */
@@ -14,7 +23,7 @@ export declare class MemoryCredentialStore implements CredentialStore {
14
23
  prepareWrite(): Promise<void>;
15
24
  save(key: string, token: Token): Promise<void>;
16
25
  remove(key: string): Promise<void>;
17
- acquireLock(key: string, timeoutMs: number): Promise<string>;
26
+ acquireLock(key: string, timeoutMs?: number): Promise<string>;
18
27
  releaseLock(lease: string): Promise<void>;
19
28
  name(): string;
20
29
  }
@@ -1,44 +1,75 @@
1
1
  import { authLogger, credentialId, tokenMetadata } from "./_logging.js";
2
2
  const logger = authLogger("memory-storage");
3
- /** Process-local generic lease registry used by the in-memory store. */
3
+ /**
4
+ * Process-local keyed mutex used by the in-memory store.
5
+ *
6
+ * Modeled on `@dbx-tools/core`'s `withProcessLock` coordinator: one holder per
7
+ * key, the rest queue in arrival order, distinct keys proceed concurrently.
8
+ * Waiting is purely promise-based, so a waiter never blocks the event loop and,
9
+ * by default, waits indefinitely - a holder may legitimately run for minutes
10
+ * (e.g. an interactive `databricks auth login` that opens a browser). A finite
11
+ * `timeoutMs` is opt-in for callers that prefer to fail fast.
12
+ */
4
13
  export class MemoryLockAdapter {
5
- #tails = new Map();
6
- #leases = new Map();
14
+ #states = new Map();
7
15
  #sequence = 0;
8
- async acquire(key, timeoutMs) {
16
+ acquire(key, timeoutMs) {
9
17
  const credential = credentialId(key);
10
- const previous = this.#tails.get(key) ?? Promise.resolve();
11
- let release;
12
- const current = new Promise((resolve) => {
13
- release = resolve;
14
- });
15
- const tail = previous.then(() => current);
16
- this.#tails.set(key, tail);
17
- try {
18
- logger.debug("waiting for memory lock", { credential, timeoutMs });
19
- await withTimeout(previous, timeoutMs, `Timed out waiting for lock ${key}`);
20
- }
21
- catch (error) {
22
- release();
23
- if (this.#tails.get(key) === tail)
24
- this.#tails.delete(key);
25
- throw error;
18
+ const state = this.#states.get(key);
19
+ if (!state) {
20
+ const lease = this.#nextLease(key);
21
+ this.#states.set(key, { lease, queue: [] });
22
+ logger.debug("memory lock acquired", { credential });
23
+ return Promise.resolve(lease);
26
24
  }
27
- const lease = `${++this.#sequence}:${key}`;
28
- this.#leases.set(lease, () => {
29
- release();
30
- this.#leases.delete(lease);
31
- if (this.#tails.get(key) === tail)
32
- this.#tails.delete(key);
25
+ logger.debug("waiting for memory lock", { credential, timeoutMs });
26
+ return new Promise((resolve, reject) => {
27
+ let timer;
28
+ const waiter = {
29
+ resolve: (lease) => {
30
+ if (timer)
31
+ clearTimeout(timer);
32
+ logger.debug("memory lock acquired", { credential });
33
+ resolve(lease);
34
+ },
35
+ reject: (error) => {
36
+ if (timer)
37
+ clearTimeout(timer);
38
+ reject(error);
39
+ },
40
+ };
41
+ state.queue.push(waiter);
42
+ // A timer is created only for a finite positive budget. Omitted, Infinity,
43
+ // or non-positive all mean "wait forever" - no timer to leak or fire.
44
+ if (timeoutMs !== undefined && Number.isFinite(timeoutMs) && timeoutMs > 0) {
45
+ timer = setTimeout(() => {
46
+ const index = state.queue.indexOf(waiter);
47
+ if (index >= 0)
48
+ state.queue.splice(index, 1);
49
+ waiter.reject(new Error(`Timed out waiting for lock ${key}`));
50
+ }, timeoutMs);
51
+ }
33
52
  });
34
- logger.debug("memory lock acquired", { credential });
35
- return lease;
36
53
  }
37
- async release(lease) {
38
- logger.debug("releasing memory lock", {
39
- credential: credentialId(lease.split(":").slice(1).join(":")),
40
- });
41
- this.#leases.get(lease)?.();
54
+ release(lease) {
55
+ const key = lease.split(":").slice(1).join(":");
56
+ logger.debug("releasing memory lock", { credential: credentialId(key) });
57
+ const state = this.#states.get(key);
58
+ // Ignore a stale release from anyone who no longer owns the key (a timed-out
59
+ // or superseded lease). Honoring it would revoke the lock from the holder.
60
+ if (!state || state.lease !== lease)
61
+ return Promise.resolve();
62
+ const next = state.queue.shift();
63
+ if (!next) {
64
+ this.#states.delete(key);
65
+ return Promise.resolve();
66
+ }
67
+ state.lease = this.#nextLease(key);
68
+ next.resolve(state.lease);
69
+ return Promise.resolve();
70
+ }
71
+ #nextLease(key) {
72
+ return `${++this.#sequence}:${key}`;
42
73
  }
43
74
  }
44
75
  /** Process-local credential store with per-key refresh locks. */
@@ -78,21 +109,4 @@ export class MemoryCredentialStore {
78
109
  return "memory";
79
110
  }
80
111
  }
81
- async function withTimeout(promise, timeoutMs, message) {
82
- if (!Number.isFinite(timeoutMs) || timeoutMs < 0)
83
- throw new TypeError("timeoutMs must be non-negative");
84
- let timeout;
85
- try {
86
- return await Promise.race([
87
- promise,
88
- new Promise((_, reject) => {
89
- timeout = setTimeout(() => reject(new Error(message)), timeoutMs);
90
- }),
91
- ]);
92
- }
93
- finally {
94
- if (timeout)
95
- clearTimeout(timeout);
96
- }
97
- }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUU1Qyx3RUFBd0U7QUFDeEUsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDMUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBQ2pELFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFZCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQVcsRUFBRSxTQUFpQjtRQUMxQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNELElBQUksT0FBb0IsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbkUsTUFBTSxXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSw4QkFBOEIsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDO1lBQ1YsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJO2dCQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDM0IsT0FBTyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUk7Z0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQWE7UUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRTtZQUNwQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5RCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsaUVBQWlFO0FBQ2pFLE1BQU0sT0FBTyxxQkFBcUI7SUFHSDtJQUZwQixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWlCLENBQUM7SUFFNUMsWUFBNkIsUUFBcUIsSUFBSSxpQkFBaUIsRUFBRTtRQUE1QyxVQUFLLEdBQUwsS0FBSyxDQUF1QztJQUFHLENBQUM7SUFFN0UsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFXO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUU7WUFDdkMsVUFBVSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFDN0IsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUM7U0FDNUIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxLQUFtQixDQUFDO0lBRXRDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBVyxFQUFFLEtBQVk7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUU7WUFDdEMsVUFBVSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFDN0IsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUM7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBVztRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXLEVBQUUsU0FBaUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUk7UUFDRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUFFRCxLQUFLLFVBQVUsV0FBVyxDQUFJLE9BQW1CLEVBQUUsU0FBaUIsRUFBRSxPQUFlO0lBQ25GLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxTQUFTLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUN4RCxJQUFJLE9BQWtELENBQUM7SUFDdkQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDeEIsT0FBTztZQUNQLElBQUksT0FBTyxDQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMvQixPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7WUFBUyxDQUFDO1FBQ1QsSUFBSSxPQUFPO1lBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXV0aExvZ2dlciwgY3JlZGVudGlhbElkLCB0b2tlbk1ldGFkYXRhIH0gZnJvbSBcIi4vX2xvZ2dpbmcudHNcIjtcbmltcG9ydCB0eXBlIHsgQ3JlZGVudGlhbFN0b3JlLCBMb2NrQWRhcHRlciwgVG9rZW4gfSBmcm9tIFwiLi90eXBlcy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBhdXRoTG9nZ2VyKFwibWVtb3J5LXN0b3JhZ2VcIik7XG5cbi8qKiBQcm9jZXNzLWxvY2FsIGdlbmVyaWMgbGVhc2UgcmVnaXN0cnkgdXNlZCBieSB0aGUgaW4tbWVtb3J5IHN0b3JlLiAqL1xuZXhwb3J0IGNsYXNzIE1lbW9yeUxvY2tBZGFwdGVyIGltcGxlbWVudHMgTG9ja0FkYXB0ZXIge1xuICByZWFkb25seSAjdGFpbHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4oKTtcbiAgcmVhZG9ubHkgI2xlYXNlcyA9IG5ldyBNYXA8c3RyaW5nLCAoKSA9PiB2b2lkPigpO1xuICAjc2VxdWVuY2UgPSAwO1xuXG4gIGFzeW5jIGFjcXVpcmUoa2V5OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsID0gY3JlZGVudGlhbElkKGtleSk7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLiN0YWlscy5nZXQoa2V5KSA/PyBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBsZXQgcmVsZWFzZSE6ICgpID0+IHZvaWQ7XG4gICAgY29uc3QgY3VycmVudCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICByZWxlYXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgICBjb25zdCB0YWlsID0gcHJldmlvdXMudGhlbigoKSA9PiBjdXJyZW50KTtcbiAgICB0aGlzLiN0YWlscy5zZXQoa2V5LCB0YWlsKTtcbiAgICB0cnkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwid2FpdGluZyBmb3IgbWVtb3J5IGxvY2tcIiwgeyBjcmVkZW50aWFsLCB0aW1lb3V0TXMgfSk7XG4gICAgICBhd2FpdCB3aXRoVGltZW91dChwcmV2aW91cywgdGltZW91dE1zLCBgVGltZWQgb3V0IHdhaXRpbmcgZm9yIGxvY2sgJHtrZXl9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlbGVhc2UoKTtcbiAgICAgIGlmICh0aGlzLiN0YWlscy5nZXQoa2V5KSA9PT0gdGFpbCkgdGhpcy4jdGFpbHMuZGVsZXRlKGtleSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgbGVhc2UgPSBgJHsrK3RoaXMuI3NlcXVlbmNlfToke2tleX1gO1xuICAgIHRoaXMuI2xlYXNlcy5zZXQobGVhc2UsICgpID0+IHtcbiAgICAgIHJlbGVhc2UoKTtcbiAgICAgIHRoaXMuI2xlYXNlcy5kZWxldGUobGVhc2UpO1xuICAgICAgaWYgKHRoaXMuI3RhaWxzLmdldChrZXkpID09PSB0YWlsKSB0aGlzLiN0YWlscy5kZWxldGUoa2V5KTtcbiAgICB9KTtcbiAgICBsb2dnZXIuZGVidWcoXCJtZW1vcnkgbG9jayBhY3F1aXJlZFwiLCB7IGNyZWRlbnRpYWwgfSk7XG4gICAgcmV0dXJuIGxlYXNlO1xuICB9XG5cbiAgYXN5bmMgcmVsZWFzZShsZWFzZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVsZWFzaW5nIG1lbW9yeSBsb2NrXCIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWxJZChsZWFzZS5zcGxpdChcIjpcIikuc2xpY2UoMSkuam9pbihcIjpcIikpLFxuICAgIH0pO1xuICAgIHRoaXMuI2xlYXNlcy5nZXQobGVhc2UpPy4oKTtcbiAgfVxufVxuXG4vKiogUHJvY2Vzcy1sb2NhbCBjcmVkZW50aWFsIHN0b3JlIHdpdGggcGVyLWtleSByZWZyZXNoIGxvY2tzLiAqL1xuZXhwb3J0IGNsYXNzIE1lbW9yeUNyZWRlbnRpYWxTdG9yZSBpbXBsZW1lbnRzIENyZWRlbnRpYWxTdG9yZSB7XG4gIHJlYWRvbmx5ICN0b2tlbnMgPSBuZXcgTWFwPHN0cmluZywgVG9rZW4+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsb2NrczogTG9ja0FkYXB0ZXIgPSBuZXcgTWVtb3J5TG9ja0FkYXB0ZXIoKSkge31cblxuICBhc3luYyBsb2FkKGtleTogc3RyaW5nKTogUHJvbWlzZTxUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy4jdG9rZW5zLmdldChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImxvYWRlZCBtZW1vcnkgY3JlZGVudGlhbFwiLCB7XG4gICAgICBjcmVkZW50aWFsOiBjcmVkZW50aWFsSWQoa2V5KSxcbiAgICAgIHRva2VuOiB0b2tlbk1ldGFkYXRhKHRva2VuKSxcbiAgICB9KTtcbiAgICByZXR1cm4gdG9rZW4gPyBzdHJ1Y3R1cmVkQ2xvbmUodG9rZW4pIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgcHJlcGFyZVdyaXRlKCk6IFByb21pc2U8dm9pZD4ge31cblxuICBhc3luYyBzYXZlKGtleTogc3RyaW5nLCB0b2tlbjogVG9rZW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLiN0b2tlbnMuc2V0KGtleSwgc3RydWN0dXJlZENsb25lKHRva2VuKSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2F2ZWQgbWVtb3J5IGNyZWRlbnRpYWxcIiwge1xuICAgICAgY3JlZGVudGlhbDogY3JlZGVudGlhbElkKGtleSksXG4gICAgICB0b2tlbjogdG9rZW5NZXRhZGF0YSh0b2tlbiksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLiN0b2tlbnMuZGVsZXRlKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVtb3ZlZCBtZW1vcnkgY3JlZGVudGlhbFwiLCB7IGNyZWRlbnRpYWw6IGNyZWRlbnRpYWxJZChrZXkpIH0pO1xuICB9XG5cbiAgYWNxdWlyZUxvY2soa2V5OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5sb2Nrcy5hY3F1aXJlKGtleSwgdGltZW91dE1zKTtcbiAgfVxuXG4gIHJlbGVhc2VMb2NrKGxlYXNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2Nrcy5yZWxlYXNlKGxlYXNlKTtcbiAgfVxuXG4gIG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtZW1vcnlcIjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwcm9taXNlOiBQcm9taXNlPFQ+LCB0aW1lb3V0TXM6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRNcykgfHwgdGltZW91dE1zIDwgMClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwidGltZW91dE1zIG11c3QgYmUgbm9uLW5lZ2F0aXZlXCIpO1xuICBsZXQgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBwcm9taXNlLFxuICAgICAgbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+IHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSksIHRpbWVvdXRNcyk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGltZW91dCkgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG4iXX0=
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQXFCNUM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7SUFDdEQsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVkLE9BQU8sQ0FBQyxHQUFXLEVBQUUsU0FBa0I7UUFDckMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDN0MsSUFBSSxL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QUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF1dGhMb2dnZXIsIGNyZWRlbnRpYWxJZCwgdG9rZW5NZXRhZGF0YSB9IGZyb20gXCIuL19sb2dnaW5nLnRzXCI7XG5pbXBvcnQgdHlwZSB7IENyZWRlbnRpYWxTdG9yZSwgTG9ja0FkYXB0ZXIsIFRva2VuIH0gZnJvbSBcIi4vdHlwZXMudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gYXV0aExvZ2dlcihcIm1lbW9yeS1zdG9yYWdlXCIpO1xuXG4vKiogT25lIHF1ZXVlZCB3YWl0ZXIgZm9yIGEgaGVsZCBrZXk6IHJlc29sdmVkIHdoZW4gcHJvbW90ZWQsIHJlamVjdGVkIG9uIHRpbWVvdXQuICovXG5pbnRlcmZhY2UgTWVtb3J5TG9ja1dhaXRlciB7XG4gIHJlc29sdmU6IChsZWFzZTogc3RyaW5nKSA9PiB2b2lkO1xuICByZWplY3Q6IChlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBBIGtleSdzIGN1cnJlbnQgb3duZXIgbGVhc2UgcGx1cyBpdHMgRklGTyBxdWV1ZSBvZiB3YWl0ZXJzLlxuICpcbiAqIE93bmVyIGFuZCBxdWV1ZSBsaXZlIGluIG9uZSBlbnRyeSBzbyB0aGUga2V5IGlzIG5ldmVyIGhhbGYtcHJlc2VudDogaXQgaXNcbiAqIGRyb3BwZWQgb25seSB3aGVuIGl0IGlzIGJvdGggdW5vd25lZCBhbmQgdW53YW50ZWQuIEEgd2FpdGVyIHRoYXQgdGltZXMgb3V0XG4gKiByZW1vdmVzIG9ubHkgaXRzZWxmIGZyb20gYHF1ZXVlYCBhbmQgbmV2ZXIgZGlzdHVyYnMgYGxlYXNlYCwgc28gYSB0aW1lZC1vdXRcbiAqIHdhaXRlciBjYW4gbm8gbG9uZ2VyIGxldCBhIGxhdGVyIGNhbGxlciBieXBhc3MgdGhlIGFjdGl2ZSBob2xkZXIuXG4gKi9cbmludGVyZmFjZSBNZW1vcnlMb2NrU3RhdGUge1xuICBsZWFzZTogc3RyaW5nO1xuICBxdWV1ZTogTWVtb3J5TG9ja1dhaXRlcltdO1xufVxuXG4vKipcbiAqIFByb2Nlc3MtbG9jYWwga2V5ZWQgbXV0ZXggdXNlZCBieSB0aGUgaW4tbWVtb3J5IHN0b3JlLlxuICpcbiAqIE1vZGVsZWQgb24gYEBkYngtdG9vbHMvY29yZWAncyBgd2l0aFByb2Nlc3NMb2NrYCBjb29yZGluYXRvcjogb25lIGhvbGRlciBwZXJcbiAqIGtleSwgdGhlIHJlc3QgcXVldWUgaW4gYXJyaXZhbCBvcmRlciwgZGlzdGluY3Qga2V5cyBwcm9jZWVkIGNvbmN1cnJlbnRseS5cbiAqIFdhaXRpbmcgaXMgcHVyZWx5IHByb21pc2UtYmFzZWQsIHNvIGEgd2FpdGVyIG5ldmVyIGJsb2NrcyB0aGUgZXZlbnQgbG9vcCBhbmQsXG4gKiBieSBkZWZhdWx0LCB3YWl0cyBpbmRlZmluaXRlbHkgLSBhIGhvbGRlciBtYXkgbGVnaXRpbWF0ZWx5IHJ1biBmb3IgbWludXRlc1xuICogKGUuZy4gYW4gaW50ZXJhY3RpdmUgYGRhdGFicmlja3MgYXV0aCBsb2dpbmAgdGhhdCBvcGVucyBhIGJyb3dzZXIpLiBBIGZpbml0ZVxuICogYHRpbWVvdXRNc2AgaXMgb3B0LWluIGZvciBjYWxsZXJzIHRoYXQgcHJlZmVyIHRvIGZhaWwgZmFzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1lbW9yeUxvY2tBZGFwdGVyIGltcGxlbWVudHMgTG9ja0FkYXB0ZXIge1xuICByZWFkb25seSAjc3RhdGVzID0gbmV3IE1hcDxzdHJpbmcsIE1lbW9yeUxvY2tTdGF0ZT4oKTtcbiAgI3NlcXVlbmNlID0gMDtcblxuICBhY3F1aXJlKGtleTogc3RyaW5nLCB0aW1lb3V0TXM/OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWwgPSBjcmVkZW50aWFsSWQoa2V5KTtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuI3N0YXRlcy5nZXQoa2V5KTtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICBjb25zdCBsZWFzZSA9IHRoaXMuI25leHRMZWFzZShrZXkpO1xuICAgICAgdGhpcy4jc3RhdGVzLnNldChrZXksIHsgbGVhc2UsIHF1ZXVlOiBbXSB9KTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIm1lbW9yeSBsb2NrIGFjcXVpcmVkXCIsIHsgY3JlZGVudGlhbCB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobGVhc2UpO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoXCJ3YWl0aW5nIGZvciBtZW1vcnkgbG9ja1wiLCB7IGNyZWRlbnRpYWwsIHRpbWVvdXRNcyB9KTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgd2FpdGVyOiBNZW1vcnlMb2NrV2FpdGVyID0ge1xuICAgICAgICByZXNvbHZlOiAobGVhc2UpID0+IHtcbiAgICAgICAgICBpZiAodGltZXIpIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFwibWVtb3J5IGxvY2sgYWNxdWlyZWRcIiwgeyBjcmVkZW50aWFsIH0pO1xuICAgICAgICAgIHJlc29sdmUobGVhc2UpO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3Q6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmICh0aW1lcikgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHN0YXRlLnF1ZXVlLnB1c2god2FpdGVyKTtcbiAgICAgIC8vIEEgdGltZXIgaXMgY3JlYXRlZCBvbmx5IGZvciBhIGZpbml0ZSBwb3NpdGl2ZSBidWRnZXQuIE9taXR0ZWQsIEluZmluaXR5LFxuICAgICAgLy8gb3Igbm9uLXBvc2l0aXZlIGFsbCBtZWFuIFwid2FpdCBmb3JldmVyXCIgLSBubyB0aW1lciB0byBsZWFrIG9yIGZpcmUuXG4gICAgICBpZiAodGltZW91dE1zICE9PSB1bmRlZmluZWQgJiYgTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRNcykgJiYgdGltZW91dE1zID4gMCkge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUucXVldWUuaW5kZXhPZih3YWl0ZXIpO1xuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSBzdGF0ZS5xdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHdhaXRlci5yZWplY3QobmV3IEVycm9yKGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgbG9jayAke2tleX1gKSk7XG4gICAgICAgIH0sIHRpbWVvdXRNcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZWxlYXNlKGxlYXNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBrZXkgPSBsZWFzZS5zcGxpdChcIjpcIikuc2xpY2UoMSkuam9pbihcIjpcIik7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVsZWFzaW5nIG1lbW9yeSBsb2NrXCIsIHsgY3JlZGVudGlhbDogY3JlZGVudGlhbElkKGtleSkgfSk7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLiNzdGF0ZXMuZ2V0KGtleSk7XG4gICAgLy8gSWdub3JlIGEgc3RhbGUgcmVsZWFzZSBmcm9tIGFueW9uZSB3aG8gbm8gbG9uZ2VyIG93bnMgdGhlIGtleSAoYSB0aW1lZC1vdXRcbiAgICAvLyBvciBzdXBlcnNlZGVkIGxlYXNlKS4gSG9ub3JpbmcgaXQgd291bGQgcmV2b2tlIHRoZSBsb2NrIGZyb20gdGhlIGhvbGRlci5cbiAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmxlYXNlICE9PSBsZWFzZSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGNvbnN0IG5leHQgPSBzdGF0ZS5xdWV1ZS5zaGlmdCgpO1xuICAgIGlmICghbmV4dCkge1xuICAgICAgdGhpcy4jc3RhdGVzLmRlbGV0ZShrZXkpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBzdGF0ZS5sZWFzZSA9IHRoaXMuI25leHRMZWFzZShrZXkpO1xuICAgIG5leHQucmVzb2x2ZShzdGF0ZS5sZWFzZSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgI25leHRMZWFzZShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAkeysrdGhpcy4jc2VxdWVuY2V9OiR7a2V5fWA7XG4gIH1cbn1cblxuLyoqIFByb2Nlc3MtbG9jYWwgY3JlZGVudGlhbCBzdG9yZSB3aXRoIHBlci1rZXkgcmVmcmVzaCBsb2Nrcy4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlDcmVkZW50aWFsU3RvcmUgaW1wbGVtZW50cyBDcmVkZW50aWFsU3RvcmUge1xuICByZWFkb25seSAjdG9rZW5zID0gbmV3IE1hcDxzdHJpbmcsIFRva2VuPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbG9ja3M6IExvY2tBZGFwdGVyID0gbmV3IE1lbW9yeUxvY2tBZGFwdGVyKCkpIHt9XG5cbiAgYXN5bmMgbG9hZChrZXk6IHN0cmluZyk6IFByb21pc2U8VG9rZW4gfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuI3Rva2Vucy5nZXQoa2V5KTtcbiAgICBsb2dnZXIuZGVidWcoXCJsb2FkZWQgbWVtb3J5IGNyZWRlbnRpYWxcIiwge1xuICAgICAgY3JlZGVudGlhbDogY3JlZGVudGlhbElkKGtleSksXG4gICAgICB0b2tlbjogdG9rZW5NZXRhZGF0YSh0b2tlbiksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRva2VuID8gc3RydWN0dXJlZENsb25lKHRva2VuKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVXcml0ZSgpOiBQcm9taXNlPHZvaWQ+IHt9XG5cbiAgYXN5bmMgc2F2ZShrZXk6IHN0cmluZywgdG9rZW46IFRva2VuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy4jdG9rZW5zLnNldChrZXksIHN0cnVjdHVyZWRDbG9uZSh0b2tlbikpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInNhdmVkIG1lbW9yeSBjcmVkZW50aWFsXCIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWxJZChrZXkpLFxuICAgICAgdG9rZW46IHRva2VuTWV0YWRhdGEodG9rZW4pLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy4jdG9rZW5zLmRlbGV0ZShrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInJlbW92ZWQgbWVtb3J5IGNyZWRlbnRpYWxcIiwgeyBjcmVkZW50aWFsOiBjcmVkZW50aWFsSWQoa2V5KSB9KTtcbiAgfVxuXG4gIGFjcXVpcmVMb2NrKGtleTogc3RyaW5nLCB0aW1lb3V0TXM/OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmxvY2tzLmFjcXVpcmUoa2V5LCB0aW1lb3V0TXMpO1xuICB9XG5cbiAgcmVsZWFzZUxvY2sobGVhc2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmxvY2tzLnJlbGVhc2UobGVhc2UpO1xuICB9XG5cbiAgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1lbW9yeVwiO1xuICB9XG59XG4iXX0=
@@ -38,11 +38,18 @@ export interface AccessToken {
38
38
  expiry?: string;
39
39
  scopes: string[];
40
40
  }
41
- /** Shared lifecycle configuration embedded by every provider. */
41
+ /** Shared lifecycle configuration embedded by every provider. All times in milliseconds. */
42
42
  export interface AuthOptions {
43
- refreshBufferSeconds: number;
44
- lockTimeoutSeconds: number;
45
- loginTimeoutSeconds: number;
43
+ refreshBufferMs: number;
44
+ /**
45
+ * Opt-in cap, in milliseconds, on waiting to acquire the per-credential
46
+ * refresh lock. `0` (the default) means wait indefinitely: a holder may
47
+ * legitimately run for minutes (an interactive login that opens a browser),
48
+ * and the caller owns the overall request budget. Set a positive value to
49
+ * fail fast instead.
50
+ */
51
+ lockTimeoutMs: number;
52
+ loginTimeoutMs: number;
46
53
  }
47
54
  /** Record-style factory retained for straightforward Node/Python bridging. */
48
55
  export declare const AuthOptions: {
@@ -104,7 +111,8 @@ export interface DatabricksProfile extends DatabricksProfileSummary {
104
111
  }
105
112
  /** Cross-language lease adapter; implementations may use files, databases, or FFI. */
106
113
  export interface LockAdapter {
107
- acquire(key: string, timeoutMs: number): Promise<string>;
114
+ /** Acquire the key's lease. Omit `timeoutMs` (or pass `0`) to wait indefinitely. */
115
+ acquire(key: string, timeoutMs?: number): Promise<string>;
108
116
  release(lease: string): Promise<void>;
109
117
  }
110
118
  /** Cross-language credential persistence contract. */
@@ -113,7 +121,7 @@ export interface CredentialStore {
113
121
  prepareWrite(): Promise<void>;
114
122
  save(key: string, token: Token): Promise<void>;
115
123
  remove(key: string): Promise<void>;
116
- acquireLock(key: string, timeoutMs: number): Promise<string>;
124
+ acquireLock(key: string, timeoutMs?: number): Promise<string>;
117
125
  releaseLock(lease: string): Promise<void>;
118
126
  name(): string;
119
127
  }
package/lib/src/types.js CHANGED
@@ -28,9 +28,9 @@ export var FileLayout;
28
28
  FileLayout["PerCredential"] = "per-credential";
29
29
  })(FileLayout || (FileLayout = {}));
30
30
  const AUTH_DEFAULTS = {
31
- refreshBufferSeconds: 300,
32
- lockTimeoutSeconds: 30,
33
- loginTimeoutSeconds: 900,
31
+ refreshBufferMs: 300_000,
32
+ lockTimeoutMs: 0,
33
+ loginTimeoutMs: 900_000,
34
34
  };
35
35
  /** Record-style factory retained for straightforward Node/Python bridging. */
36
36
  export const AuthOptions = {
@@ -64,4 +64,4 @@ export const WORKSPACE_ID_HEADER = "x-databricks-workspace-id";
64
64
  export const AUTH_TYPE_APP_OBO = "app_obo";
65
65
  /** Authentication type for Databricks App service-principal credentials. */
66
66
  export const AUTH_TYPE_APP_SP = "app_sp";
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBTixJQUFZLFFBTVg7QUFORCxXQUFZLFFBQVE7SUFDbEIsNkNBQWlDLENBQUE7SUFDakMsbURBQXVDLENBQUE7SUFDdkMseURBQTZDLENBQUE7SUFDN0MseURBQTZDLENBQUE7SUFDN0MsOENBQWtDLENBQUE7QUFDcEMsQ0FBQyxFQU5XLFFBQVEsS0FBUixRQUFRLFFBTW5CO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sQ0FBTixJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDcEIscUNBQXVCLENBQUE7SUFDdkIsaUNBQW1CLENBQUE7SUFDbkIsaUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUpXLFVBQVUsS0FBVixVQUFVLFFBSXJCO0FBRUQsMkNBQTJDO0FBQzNDLE1BQU0sQ0FBTixJQUFZLE9BSVg7QUFKRCxXQUFZLE9BQU87SUFDakIsd0JBQWEsQ0FBQTtJQUNiLDRCQUFpQixDQUFBO0lBQ2pCLHdCQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsT0FBTyxLQUFQLE9BQU8sUUFJbEI7QUFFRCwrREFBK0Q7QUFDL0QsTUFBTSxDQUFOLElBQVksVUFHWDtBQUhELFdBQVksVUFBVTtJQUNwQiwrQkFBaUIsQ0FBQTtJQUNqQiw4Q0FBZ0MsQ0FBQTtBQUNsQyxDQUFDLEVBSFcsVUFBVSxLQUFWLFVBQVUsUUFHckI7QUEwQkQsTUFBTSxhQUFhLEdBQWdCO0lBQ2pDLG9CQUFvQixFQUFFLEdBQUc7SUFDekIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixtQkFBbUIsRUFBRSxHQUFHO0NBQ3pCLENBQUM7QUFFRiw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLE1BQU0sQ0FBQyxVQUFnQyxFQUFFO1FBQ3ZDLE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFDRCxRQUFRO1FBQ04sT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRixDQUFDO0FBeUNGLG1GQUFtRjtBQUNuRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNuQyxNQUFNLENBQUMsVUFBMEMsRUFBRTtRQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUNELFFBQVE7UUFDTixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRixDQUFDO0FBMERGLGlGQUFpRjtBQUNqRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNsRCxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7QUFDdEQsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLHVDQUF1QyxDQUFDO0FBQzdFLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxlQUFlLENBQUM7QUFDM0QsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBQy9ELCtFQUErRTtBQUMvRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUM7QUFDM0MsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBBdXRoZW50aWNhdGlvbiBzdHJhdGVneSBzZWxlY3RlZCBmcm9tIERhdGFicmlja3MgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBlbnVtIEF1dGhLaW5kIHtcbiAgVXNlclRvTWFjaGluZSA9IFwidXNlci10by1tYWNoaW5lXCIsXG4gIE1hY2hpbmVUb01hY2hpbmUgPSBcIm1hY2hpbmUtdG8tbWFjaGluZVwiLFxuICBQZXJzb25hbEFjY2Vzc1Rva2VuID0gXCJwZXJzb25hbC1hY2Nlc3MtdG9rZW5cIixcbiAgQXBwU2VydmljZVByaW5jaXBhbCA9IFwiYXBwLXNlcnZpY2UtcHJpbmNpcGFsXCIsXG4gIEFwcE9uQmVoYWxmT2YgPSBcImFwcC1vbi1iZWhhbGYtb2ZcIixcbn1cblxuLyoqIFNjb3BlIG9mIHRoZSBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIHRhcmdldC4gKi9cbmV4cG9ydCBlbnVtIFRhcmdldEtpbmQge1xuICBXb3Jrc3BhY2UgPSBcIndvcmtzcGFjZVwiLFxuICBBY2NvdW50ID0gXCJhY2NvdW50XCIsXG4gIFVuaWZpZWQgPSBcInVuaWZpZWRcIixcbn1cblxuLyoqIEJ1aWx0LWluIGNyZWRlbnRpYWwgc3RvcmFnZSBiYWNrZW5kLiAqL1xuZXhwb3J0IGVudW0gU3RvcmFnZSB7XG4gIEF1dG8gPSBcImF1dG9cIixcbiAgTWVtb3J5ID0gXCJtZW1vcnlcIixcbiAgRmlsZSA9IFwiZmlsZVwiLFxufVxuXG4vKiogRmlsZSBvcmdhbml6YXRpb24gdXNlZCBieSBhIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yZS4gKi9cbmV4cG9ydCBlbnVtIEZpbGVMYXlvdXQge1xuICBTaW5nbGUgPSBcInNpbmdsZVwiLFxuICBQZXJDcmVkZW50aWFsID0gXCJwZXItY3JlZGVudGlhbFwiLFxufVxuXG4vKiogU3RvcmVkIE9BdXRoIGNyZWRlbnRpYWwsIGluY2x1ZGluZyByZW5ld2FsIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb2tlbiB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyeT86IHN0cmluZztcbiAgc2NvcGVzOiBzdHJpbmdbXTtcbn1cblxuLyoqIFB1YmxpYyBjcmVkZW50aWFsIHJlc3VsdDsgZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVzIHRoZSByZWZyZXNoIHRva2VuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlbiB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICBleHBpcnk/OiBzdHJpbmc7XG4gIHNjb3Blczogc3RyaW5nW107XG59XG5cbi8qKiBTaGFyZWQgbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb24gZW1iZWRkZWQgYnkgZXZlcnkgcHJvdmlkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhPcHRpb25zIHtcbiAgcmVmcmVzaEJ1ZmZlclNlY29uZHM6IG51bWJlcjtcbiAgbG9ja1RpbWVvdXRTZWNvbmRzOiBudW1iZXI7XG4gIGxvZ2luVGltZW91dFNlY29uZHM6IG51bWJlcjtcbn1cblxuY29uc3QgQVVUSF9ERUZBVUxUUzogQXV0aE9wdGlvbnMgPSB7XG4gIHJlZnJlc2hCdWZmZXJTZWNvbmRzOiAzMDAsXG4gIGxvY2tUaW1lb3V0U2Vjb25kczogMzAsXG4gIGxvZ2luVGltZW91dFNlY29uZHM6IDkwMCxcbn07XG5cbi8qKiBSZWNvcmQtc3R5bGUgZmFjdG9yeSByZXRhaW5lZCBmb3Igc3RyYWlnaHRmb3J3YXJkIE5vZGUvUHl0aG9uIGJyaWRnaW5nLiAqL1xuZXhwb3J0IGNvbnN0IEF1dGhPcHRpb25zID0ge1xuICBjcmVhdGUob3B0aW9uczogUGFydGlhbDxBdXRoT3B0aW9ucz4gPSB7fSk6IEF1dGhPcHRpb25zIHtcbiAgICByZXR1cm4geyAuLi5BVVRIX0RFRkFVTFRTLCAuLi5vcHRpb25zIH07XG4gIH0sXG4gIGRlZmF1bHRzKCk6IFJlYWRvbmx5PEF1dGhPcHRpb25zPiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi5BVVRIX0RFRkFVTFRTIH0pO1xuICB9LFxufTtcblxuLyoqIFNlY3JldC1mcmVlIG1ldGFkYXRhIGRpc2NvdmVyZWQgZnJvbSBvbmUgRGF0YWJyaWNrcyBDTEkgcHJvZmlsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5IHtcbiAgbmFtZTogc3RyaW5nO1xuICBob3N0Pzogc3RyaW5nO1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICB0YXJnZXQ6IFRhcmdldEtpbmQ7XG4gIGF1dGhLaW5kOiBBdXRoS2luZDtcbn1cblxuLyoqIFJlc29sdmVkIERhdGFicmlja3MgaWRlbnRpdHkgYW5kIGFjdGl2ZSBzdG9yYWdlIGJhY2tlbmQuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NBdXRoU3RhdHVzIHtcbiAgcHJvZmlsZTogc3RyaW5nO1xuICBob3N0OiBzdHJpbmc7XG4gIHN0b3JhZ2U6IFN0b3JhZ2U7XG59XG5cbi8qKiBQdWJsaWMgRGF0YWJyaWNrcyBhdXRoZW50aWNhdGlvbiBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzQXV0aE9wdGlvbnMge1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBob3N0Pzogc3RyaW5nO1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICBjb25maWdGaWxlPzogc3RyaW5nO1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgZ3JvdXBJZD86IHN0cmluZztcbiAgYXV0aFR5cGU/OiBzdHJpbmc7XG4gIHNjb3Blcz86IHN0cmluZ1tdO1xuICB0YXJnZXQ/OiBzdHJpbmc7XG4gIGNhY2hlRGlyPzogc3RyaW5nO1xuICBhdXRoPzogQXV0aE9wdGlvbnM7XG4gIHJlcXVlc3RIZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYWNjZXNzVG9rZW5IZWFkZXI/OiBzdHJpbmc7XG4gIGluc3RhbGxDbGlJbkFwcD86IGJvb2xlYW47XG4gIHByZWZlclVzZXJUb01hY2hpbmU6IGJvb2xlYW47XG59XG5cbi8qKiBSZWNvcmQtc3R5bGUgZmFjdG9yeSByZXRhaW5lZCBmb3IgY2FsbGVycyBtaWdyYXRpbmcgZnJvbSBnZW5lcmF0ZWQgYmluZGluZ3MuICovXG5leHBvcnQgY29uc3QgRGF0YWJyaWNrc0F1dGhPcHRpb25zID0ge1xuICBjcmVhdGUob3B0aW9uczogUGFydGlhbDxEYXRhYnJpY2tzQXV0aE9wdGlvbnM+ID0ge30pOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnMge1xuICAgIHJldHVybiB7IHByZWZlclVzZXJUb01hY2hpbmU6IHRydWUsIC4uLm9wdGlvbnMgfTtcbiAgfSxcbiAgZGVmYXVsdHMoKTogUmVhZG9ubHk8RGF0YWJyaWNrc0F1dGhPcHRpb25zPiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBwcmVmZXJVc2VyVG9NYWNoaW5lOiB0cnVlIH0pO1xuICB9LFxufTtcblxuLyoqIFJlc29sdmVkIHByb2ZpbGUgd2l0aCBzZWNyZXRzIHJldGFpbmVkIG9ubHkgZm9yIHByb3ZpZGVyIGNvbnN0cnVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc1Byb2ZpbGUgZXh0ZW5kcyBEYXRhYnJpY2tzUHJvZmlsZVN1bW1hcnkge1xuICBob3N0OiBzdHJpbmc7XG4gIGF1dGhUeXBlPzogc3RyaW5nO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICBncm91cElkPzogc3RyaW5nO1xuICBzY29wZXM6IHN0cmluZ1tdO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBjYWNoZUtleTogc3RyaW5nO1xuICBwcmluY2lwYWw6IHN0cmluZztcbn1cblxuLyoqIENyb3NzLWxhbmd1YWdlIGxlYXNlIGFkYXB0ZXI7IGltcGxlbWVudGF0aW9ucyBtYXkgdXNlIGZpbGVzLCBkYXRhYmFzZXMsIG9yIEZGSS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9ja0FkYXB0ZXIge1xuICBhY3F1aXJlKGtleTogc3RyaW5nLCB0aW1lb3V0TXM6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPjtcbiAgcmVsZWFzZShsZWFzZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqIENyb3NzLWxhbmd1YWdlIGNyZWRlbnRpYWwgcGVyc2lzdGVuY2UgY29udHJhY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxTdG9yZSB7XG4gIGxvYWQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFRva2VuIHwgdW5kZWZpbmVkPjtcbiAgcHJlcGFyZVdyaXRlKCk6IFByb21pc2U8dm9pZD47XG4gIHNhdmUoa2V5OiBzdHJpbmcsIHRva2VuOiBUb2tlbik6IFByb21pc2U8dm9pZD47XG4gIHJlbW92ZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gIGFjcXVpcmVMb2NrKGtleTogc3RyaW5nLCB0aW1lb3V0TXM6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPjtcbiAgcmVsZWFzZUxvY2sobGVhc2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gIG5hbWUoKTogc3RyaW5nO1xufVxuXG4vKiogUHJvdmlkZXItc3BlY2lmaWMgdG9rZW4gYWNxdWlzaXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUHJvdmlkZXIge1xuICBhdXRoZW50aWNhdGUodGltZW91dE1zOiBudW1iZXIpOiBQcm9taXNlPFRva2VuPjtcbiAgbG9naW4odGltZW91dE1zOiBudW1iZXIpOiBQcm9taXNlPFRva2VuPjtcbiAgcmVmcmVzaCh0b2tlbjogVG9rZW4pOiBQcm9taXNlPFRva2VuPjtcbiAgY2FuQXV0aGVudGljYXRlU2lsZW50bHkoKTogYm9vbGVhbjtcbn1cblxuLyoqIFN0YWJsZSBmYWNhZGUgc2hhcmVkIGJ5IE5vZGUsIHRoZSBDTEksIGFuZCBnZW5lcmF0ZWQgbGFuZ3VhZ2UgYmluZGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhDbGllbnQge1xuICBjaGFsbGVuZ2UoKTogUHJvbWlzZTx2b2lkPjtcbiAgdG9rZW4obG9naW4/OiBib29sZWFuKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj47XG4gIGF1dGhlbnRpY2F0ZShsb2dpbj86IGJvb2xlYW4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICBhdXRob3JpemF0aW9uSGVhZGVyRm9yVXJsKHJlcXVlc3RVcmw6IHN0cmluZywgbG9naW4/OiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICByZXF1ZXN0SGVhZGVyc0ZvclVybChyZXF1ZXN0VXJsOiBzdHJpbmcsIGxvZ2luPzogYm9vbGVhbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gIGZvcmNlUmVmcmVzaFRva2VuKGxvZ2luPzogYm9vbGVhbik6IFByb21pc2U8QWNjZXNzVG9rZW4+O1xuICByZWZyZXNoUmVqZWN0ZWRUb2tlbihzdGFsZUFjY2Vzc1Rva2VuOiBzdHJpbmcsIGxvZ2luPzogYm9vbGVhbik6IFByb21pc2U8QWNjZXNzVG9rZW4+O1xuICBsb2dvdXQoKTogUHJvbWlzZTx2b2lkPjtcbiAgc3RhdHVzKCk6IERhdGFicmlja3NBdXRoU3RhdHVzO1xuICBwcmluY2lwYWwoKTogc3RyaW5nO1xuICB3b3Jrc3BhY2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGF1dGhLaW5kKCk6IEF1dGhLaW5kO1xuICBwcm9maWxlKG5hbWU/OiBzdHJpbmcpOiBEYXRhYnJpY2tzUHJvZmlsZVN1bW1hcnk7XG4gIGxpc3RQcm9maWxlcyhyZWZyZXNoPzogYm9vbGVhbik6IERhdGFicmlja3NQcm9maWxlU3VtbWFyeVtdO1xufVxuXG4vKiogUHVibGljIE9BdXRoIGNsaWVudCB1c2VkIGJ5IERhdGFicmlja3MgQ0xJLWNvbXBhdGlibGUgdXNlciBhdXRoZW50aWNhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NMSUVOVF9JRCA9IFwiZGF0YWJyaWNrcy1jbGlcIjtcbi8qKiBEZWZhdWx0IERhdGFicmlja3MgcHJvZmlsZSBjb25maWd1cmF0aW9uIHBhdGguICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT05GSUdfRklMRSA9IFwifi8uZGF0YWJyaWNrc2NmZ1wiO1xuLyoqIERlZmF1bHQgRGF0YWJyaWNrcyBhY2NvdW50IGNvbnNvbGUgb3JpZ2luLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUNDT1VOVFNfSE9TVCA9IFwiaHR0cHM6Ly9hY2NvdW50cy5jbG91ZC5kYXRhYnJpY2tzLmNvbVwiO1xuLyoqIENhbm9uaWNhbCByZXF1ZXN0IGhlYWRlciBjYXJyeWluZyBhIGJlYXJlciBhY2Nlc3MgdG9rZW4uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9BQ0NFU1NfVE9LRU5fSEVBREVSID0gXCJhdXRob3JpemF0aW9uXCI7XG4vKiogQ2Fub25pY2FsIHJlcXVlc3QgaGVhZGVyIGNhcnJ5aW5nIHRoZSByZXNvbHZlZCBEYXRhYnJpY2tzIHdvcmtzcGFjZSBJRC4gKi9cbmV4cG9ydCBjb25zdCBXT1JLU1BBQ0VfSURfSEVBREVSID0gXCJ4LWRhdGFicmlja3Mtd29ya3NwYWNlLWlkXCI7XG4vKiogQXV0aGVudGljYXRpb24gdHlwZSBmb3IgRGF0YWJyaWNrcyBBcHAgb24tYmVoYWxmLW9mIHJlcXVlc3QgY3JlZGVudGlhbHMuICovXG5leHBvcnQgY29uc3QgQVVUSF9UWVBFX0FQUF9PQk8gPSBcImFwcF9vYm9cIjtcbi8qKiBBdXRoZW50aWNhdGlvbiB0eXBlIGZvciBEYXRhYnJpY2tzIEFwcCBzZXJ2aWNlLXByaW5jaXBhbCBjcmVkZW50aWFscy4gKi9cbmV4cG9ydCBjb25zdCBBVVRIX1RZUEVfQVBQX1NQID0gXCJhcHBfc3BcIjtcbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBTixJQUFZLFFBTVg7QUFORCxXQUFZLFFBQVE7SUFDbEIsNkNBQWlDLENBQUE7SUFDakMsbURBQXVDLENBQUE7SUFDdkMseURBQTZDLENBQUE7SUFDN0MseURBQTZDLENBQUE7SUFDN0MsOENBQWtDLENBQUE7QUFDcEMsQ0FBQyxFQU5XLFFBQVEsS0FBUixRQUFRLFFBTW5CO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sQ0FBTixJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDcEIscUNBQXVCLENBQUE7SUFDdkIsaUNBQW1CLENBQUE7SUFDbkIsaUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUpXLFVBQVUsS0FBVixVQUFVLFFBSXJCO0FBRUQsMkNBQTJDO0FBQzNDLE1BQU0sQ0FBTixJQUFZLE9BSVg7QUFKRCxXQUFZLE9BQU87SUFDakIsd0JBQWEsQ0FBQTtJQUNiLDRCQUFpQixDQUFBO0lBQ2pCLHdCQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsT0FBTyxLQUFQLE9BQU8sUUFJbEI7QUFFRCwrREFBK0Q7QUFDL0QsTUFBTSxDQUFOLElBQVksVUFHWDtBQUhELFdBQVksVUFBVTtJQUNwQiwrQkFBaUIsQ0FBQTtJQUNqQiw4Q0FBZ0MsQ0FBQTtBQUNsQyxDQUFDLEVBSFcsVUFBVSxLQUFWLFVBQVUsUUFHckI7QUFpQ0QsTUFBTSxhQUFhLEdBQWdCO0lBQ2pDLGVBQWUsRUFBRSxPQUFPO0lBQ3hCLGFBQWEsRUFBRSxDQUFDO0lBQ2hCLGNBQWMsRUFBRSxPQUFPO0NBQ3hCLENBQUM7QUFFRiw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLE1BQU0sQ0FBQyxVQUFnQyxFQUFFO1FBQ3ZDLE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFDRCxRQUFRO1FBQ04sT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRixDQUFDO0FBeUNGLG1GQUFtRjtBQUNuRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNuQyxNQUFNLENBQUMsVUFBMEMsRUFBRTtRQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUNELFFBQVE7UUFDTixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRixDQUFDO0FBMkRGLGlGQUFpRjtBQUNqRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNsRCxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7QUFDdEQsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLHVDQUF1QyxDQUFDO0FBQzdFLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxlQUFlLENBQUM7QUFDM0QsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBQy9ELCtFQUErRTtBQUMvRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUM7QUFDM0MsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBBdXRoZW50aWNhdGlvbiBzdHJhdGVneSBzZWxlY3RlZCBmcm9tIERhdGFicmlja3MgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBlbnVtIEF1dGhLaW5kIHtcbiAgVXNlclRvTWFjaGluZSA9IFwidXNlci10by1tYWNoaW5lXCIsXG4gIE1hY2hpbmVUb01hY2hpbmUgPSBcIm1hY2hpbmUtdG8tbWFjaGluZVwiLFxuICBQZXJzb25hbEFjY2Vzc1Rva2VuID0gXCJwZXJzb25hbC1hY2Nlc3MtdG9rZW5cIixcbiAgQXBwU2VydmljZVByaW5jaXBhbCA9IFwiYXBwLXNlcnZpY2UtcHJpbmNpcGFsXCIsXG4gIEFwcE9uQmVoYWxmT2YgPSBcImFwcC1vbi1iZWhhbGYtb2ZcIixcbn1cblxuLyoqIFNjb3BlIG9mIHRoZSBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIHRhcmdldC4gKi9cbmV4cG9ydCBlbnVtIFRhcmdldEtpbmQge1xuICBXb3Jrc3BhY2UgPSBcIndvcmtzcGFjZVwiLFxuICBBY2NvdW50ID0gXCJhY2NvdW50XCIsXG4gIFVuaWZpZWQgPSBcInVuaWZpZWRcIixcbn1cblxuLyoqIEJ1aWx0LWluIGNyZWRlbnRpYWwgc3RvcmFnZSBiYWNrZW5kLiAqL1xuZXhwb3J0IGVudW0gU3RvcmFnZSB7XG4gIEF1dG8gPSBcImF1dG9cIixcbiAgTWVtb3J5ID0gXCJtZW1vcnlcIixcbiAgRmlsZSA9IFwiZmlsZVwiLFxufVxuXG4vKiogRmlsZSBvcmdhbml6YXRpb24gdXNlZCBieSBhIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yZS4gKi9cbmV4cG9ydCBlbnVtIEZpbGVMYXlvdXQge1xuICBTaW5nbGUgPSBcInNpbmdsZVwiLFxuICBQZXJDcmVkZW50aWFsID0gXCJwZXItY3JlZGVudGlhbFwiLFxufVxuXG4vKiogU3RvcmVkIE9BdXRoIGNyZWRlbnRpYWwsIGluY2x1ZGluZyByZW5ld2FsIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb2tlbiB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyeT86IHN0cmluZztcbiAgc2NvcGVzOiBzdHJpbmdbXTtcbn1cblxuLyoqIFB1YmxpYyBjcmVkZW50aWFsIHJlc3VsdDsgZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVzIHRoZSByZWZyZXNoIHRva2VuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlbiB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICBleHBpcnk/OiBzdHJpbmc7XG4gIHNjb3Blczogc3RyaW5nW107XG59XG5cbi8qKiBTaGFyZWQgbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb24gZW1iZWRkZWQgYnkgZXZlcnkgcHJvdmlkZXIuIEFsbCB0aW1lcyBpbiBtaWxsaXNlY29uZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhPcHRpb25zIHtcbiAgcmVmcmVzaEJ1ZmZlck1zOiBudW1iZXI7XG4gIC8qKlxuICAgKiBPcHQtaW4gY2FwLCBpbiBtaWxsaXNlY29uZHMsIG9uIHdhaXRpbmcgdG8gYWNxdWlyZSB0aGUgcGVyLWNyZWRlbnRpYWxcbiAgICogcmVmcmVzaCBsb2NrLiBgMGAgKHRoZSBkZWZhdWx0KSBtZWFucyB3YWl0IGluZGVmaW5pdGVseTogYSBob2xkZXIgbWF5XG4gICAqIGxlZ2l0aW1hdGVseSBydW4gZm9yIG1pbnV0ZXMgKGFuIGludGVyYWN0aXZlIGxvZ2luIHRoYXQgb3BlbnMgYSBicm93c2VyKSxcbiAgICogYW5kIHRoZSBjYWxsZXIgb3ducyB0aGUgb3ZlcmFsbCByZXF1ZXN0IGJ1ZGdldC4gU2V0IGEgcG9zaXRpdmUgdmFsdWUgdG9cbiAgICogZmFpbCBmYXN0IGluc3RlYWQuXG4gICAqL1xuICBsb2NrVGltZW91dE1zOiBudW1iZXI7XG4gIGxvZ2luVGltZW91dE1zOiBudW1iZXI7XG59XG5cbmNvbnN0IEFVVEhfREVGQVVMVFM6IEF1dGhPcHRpb25zID0ge1xuICByZWZyZXNoQnVmZmVyTXM6IDMwMF8wMDAsXG4gIGxvY2tUaW1lb3V0TXM6IDAsXG4gIGxvZ2luVGltZW91dE1zOiA5MDBfMDAwLFxufTtcblxuLyoqIFJlY29yZC1zdHlsZSBmYWN0b3J5IHJldGFpbmVkIGZvciBzdHJhaWdodGZvcndhcmQgTm9kZS9QeXRob24gYnJpZGdpbmcuICovXG5leHBvcnQgY29uc3QgQXV0aE9wdGlvbnMgPSB7XG4gIGNyZWF0ZShvcHRpb25zOiBQYXJ0aWFsPEF1dGhPcHRpb25zPiA9IHt9KTogQXV0aE9wdGlvbnMge1xuICAgIHJldHVybiB7IC4uLkFVVEhfREVGQVVMVFMsIC4uLm9wdGlvbnMgfTtcbiAgfSxcbiAgZGVmYXVsdHMoKTogUmVhZG9ubHk8QXV0aE9wdGlvbnM+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLkFVVEhfREVGQVVMVFMgfSk7XG4gIH0sXG59O1xuXG4vKiogU2VjcmV0LWZyZWUgbWV0YWRhdGEgZGlzY292ZXJlZCBmcm9tIG9uZSBEYXRhYnJpY2tzIENMSSBwcm9maWxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzUHJvZmlsZVN1bW1hcnkge1xuICBuYW1lOiBzdHJpbmc7XG4gIGhvc3Q/OiBzdHJpbmc7XG4gIGFjY291bnRJZD86IHN0cmluZztcbiAgd29ya3NwYWNlSWQ/OiBzdHJpbmc7XG4gIHRhcmdldDogVGFyZ2V0S2luZDtcbiAgYXV0aEtpbmQ6IEF1dGhLaW5kO1xufVxuXG4vKiogUmVzb2x2ZWQgRGF0YWJyaWNrcyBpZGVudGl0eSBhbmQgYWN0aXZlIHN0b3JhZ2UgYmFja2VuZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc0F1dGhTdGF0dXMge1xuICBwcm9maWxlOiBzdHJpbmc7XG4gIGhvc3Q6IHN0cmluZztcbiAgc3RvcmFnZTogU3RvcmFnZTtcbn1cblxuLyoqIFB1YmxpYyBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NBdXRoT3B0aW9ucyB7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIGhvc3Q/OiBzdHJpbmc7XG4gIGFjY291bnRJZD86IHN0cmluZztcbiAgd29ya3NwYWNlSWQ/OiBzdHJpbmc7XG4gIGNvbmZpZ0ZpbGU/OiBzdHJpbmc7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBncm91cElkPzogc3RyaW5nO1xuICBhdXRoVHlwZT86IHN0cmluZztcbiAgc2NvcGVzPzogc3RyaW5nW107XG4gIHRhcmdldD86IHN0cmluZztcbiAgY2FjaGVEaXI/OiBzdHJpbmc7XG4gIGF1dGg/OiBBdXRoT3B0aW9ucztcbiAgcmVxdWVzdEhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBhY2Nlc3NUb2tlbkhlYWRlcj86IHN0cmluZztcbiAgaW5zdGFsbENsaUluQXBwPzogYm9vbGVhbjtcbiAgcHJlZmVyVXNlclRvTWFjaGluZTogYm9vbGVhbjtcbn1cblxuLyoqIFJlY29yZC1zdHlsZSBmYWN0b3J5IHJldGFpbmVkIGZvciBjYWxsZXJzIG1pZ3JhdGluZyBmcm9tIGdlbmVyYXRlZCBiaW5kaW5ncy4gKi9cbmV4cG9ydCBjb25zdCBEYXRhYnJpY2tzQXV0aE9wdGlvbnMgPSB7XG4gIGNyZWF0ZShvcHRpb25zOiBQYXJ0aWFsPERhdGFicmlja3NBdXRoT3B0aW9ucz4gPSB7fSk6IERhdGFicmlja3NBdXRoT3B0aW9ucyB7XG4gICAgcmV0dXJuIHsgcHJlZmVyVXNlclRvTWFjaGluZTogdHJ1ZSwgLi4ub3B0aW9ucyB9O1xuICB9LFxuICBkZWZhdWx0cygpOiBSZWFkb25seTxEYXRhYnJpY2tzQXV0aE9wdGlvbnM+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IHByZWZlclVzZXJUb01hY2hpbmU6IHRydWUgfSk7XG4gIH0sXG59O1xuXG4vKiogUmVzb2x2ZWQgcHJvZmlsZSB3aXRoIHNlY3JldHMgcmV0YWluZWQgb25seSBmb3IgcHJvdmlkZXIgY29uc3RydWN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzUHJvZmlsZSBleHRlbmRzIERhdGFicmlja3NQcm9maWxlU3VtbWFyeSB7XG4gIGhvc3Q6IHN0cmluZztcbiAgYXV0aFR5cGU/OiBzdHJpbmc7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIGdyb3VwSWQ/OiBzdHJpbmc7XG4gIHNjb3Blczogc3RyaW5nW107XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIGNhY2hlS2V5OiBzdHJpbmc7XG4gIHByaW5jaXBhbDogc3RyaW5nO1xufVxuXG4vKiogQ3Jvc3MtbGFuZ3VhZ2UgbGVhc2UgYWRhcHRlcjsgaW1wbGVtZW50YXRpb25zIG1heSB1c2UgZmlsZXMsIGRhdGFiYXNlcywgb3IgRkZJLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NrQWRhcHRlciB7XG4gIC8qKiBBY3F1aXJlIHRoZSBrZXkncyBsZWFzZS4gT21pdCBgdGltZW91dE1zYCAob3IgcGFzcyBgMGApIHRvIHdhaXQgaW5kZWZpbml0ZWx5LiAqL1xuICBhY3F1aXJlKGtleTogc3RyaW5nLCB0aW1lb3V0TXM/OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz47XG4gIHJlbGVhc2UobGVhc2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBDcm9zcy1sYW5ndWFnZSBjcmVkZW50aWFsIHBlcnNpc3RlbmNlIGNvbnRyYWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVkZW50aWFsU3RvcmUge1xuICBsb2FkKGtleTogc3RyaW5nKTogUHJvbWlzZTxUb2tlbiB8IHVuZGVmaW5lZD47XG4gIHByZXBhcmVXcml0ZSgpOiBQcm9taXNlPHZvaWQ+O1xuICBzYXZlKGtleTogc3RyaW5nLCB0b2tlbjogVG9rZW4pOiBQcm9taXNlPHZvaWQ+O1xuICByZW1vdmUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICBhY3F1aXJlTG9jayhrZXk6IHN0cmluZywgdGltZW91dE1zPzogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+O1xuICByZWxlYXNlTG9jayhsZWFzZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgbmFtZSgpOiBzdHJpbmc7XG59XG5cbi8qKiBQcm92aWRlci1zcGVjaWZpYyB0b2tlbiBhY3F1aXNpdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5Qcm92aWRlciB7XG4gIGF1dGhlbnRpY2F0ZSh0aW1lb3V0TXM6IG51bWJlcik6IFByb21pc2U8VG9rZW4+O1xuICBsb2dpbih0aW1lb3V0TXM6IG51bWJlcik6IFByb21pc2U8VG9rZW4+O1xuICByZWZyZXNoKHRva2VuOiBUb2tlbik6IFByb21pc2U8VG9rZW4+O1xuICBjYW5BdXRoZW50aWNhdGVTaWxlbnRseSgpOiBib29sZWFuO1xufVxuXG4vKiogU3RhYmxlIGZhY2FkZSBzaGFyZWQgYnkgTm9kZSwgdGhlIENMSSwgYW5kIGdlbmVyYXRlZCBsYW5ndWFnZSBiaW5kaW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENsaWVudCB7XG4gIGNoYWxsZW5nZSgpOiBQcm9taXNlPHZvaWQ+O1xuICB0b2tlbihsb2dpbj86IGJvb2xlYW4pOiBQcm9taXNlPEFjY2Vzc1Rva2VuPjtcbiAgYXV0aGVudGljYXRlKGxvZ2luPzogYm9vbGVhbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gIGF1dGhvcml6YXRpb25IZWFkZXJGb3JVcmwocmVxdWVzdFVybDogc3RyaW5nLCBsb2dpbj86IGJvb2xlYW4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIHJlcXVlc3RIZWFkZXJzRm9yVXJsKHJlcXVlc3RVcmw6IHN0cmluZywgbG9naW4/OiBib29sZWFuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgZm9yY2VSZWZyZXNoVG9rZW4obG9naW4/OiBib29sZWFuKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj47XG4gIHJlZnJlc2hSZWplY3RlZFRva2VuKHN0YWxlQWNjZXNzVG9rZW46IHN0cmluZywgbG9naW4/OiBib29sZWFuKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj47XG4gIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+O1xuICBzdGF0dXMoKTogRGF0YWJyaWNrc0F1dGhTdGF0dXM7XG4gIHByaW5jaXBhbCgpOiBzdHJpbmc7XG4gIHdvcmtzcGFjZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYXV0aEtpbmQoKTogQXV0aEtpbmQ7XG4gIHByb2ZpbGUobmFtZT86IHN0cmluZyk6IERhdGFicmlja3NQcm9maWxlU3VtbWFyeTtcbiAgbGlzdFByb2ZpbGVzKHJlZnJlc2g/OiBib29sZWFuKTogRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5W107XG59XG5cbi8qKiBQdWJsaWMgT0F1dGggY2xpZW50IHVzZWQgYnkgRGF0YWJyaWNrcyBDTEktY29tcGF0aWJsZSB1c2VyIGF1dGhlbnRpY2F0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ0xJRU5UX0lEID0gXCJkYXRhYnJpY2tzLWNsaVwiO1xuLyoqIERlZmF1bHQgRGF0YWJyaWNrcyBwcm9maWxlIGNvbmZpZ3VyYXRpb24gcGF0aC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPTkZJR19GSUxFID0gXCJ+Ly5kYXRhYnJpY2tzY2ZnXCI7XG4vKiogRGVmYXVsdCBEYXRhYnJpY2tzIGFjY291bnQgY29uc29sZSBvcmlnaW4uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9BQ0NPVU5UU19IT1NUID0gXCJodHRwczovL2FjY291bnRzLmNsb3VkLmRhdGFicmlja3MuY29tXCI7XG4vKiogQ2Fub25pY2FsIHJlcXVlc3QgaGVhZGVyIGNhcnJ5aW5nIGEgYmVhcmVyIGFjY2VzcyB0b2tlbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDQ0VTU19UT0tFTl9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbi8qKiBDYW5vbmljYWwgcmVxdWVzdCBoZWFkZXIgY2FycnlpbmcgdGhlIHJlc29sdmVkIERhdGFicmlja3Mgd29ya3NwYWNlIElELiAqL1xuZXhwb3J0IGNvbnN0IFdPUktTUEFDRV9JRF9IRUFERVIgPSBcIngtZGF0YWJyaWNrcy13b3Jrc3BhY2UtaWRcIjtcbi8qKiBBdXRoZW50aWNhdGlvbiB0eXBlIGZvciBEYXRhYnJpY2tzIEFwcCBvbi1iZWhhbGYtb2YgcmVxdWVzdCBjcmVkZW50aWFscy4gKi9cbmV4cG9ydCBjb25zdCBBVVRIX1RZUEVfQVBQX09CTyA9IFwiYXBwX29ib1wiO1xuLyoqIEF1dGhlbnRpY2F0aW9uIHR5cGUgZm9yIERhdGFicmlja3MgQXBwIHNlcnZpY2UtcHJpbmNpcGFsIGNyZWRlbnRpYWxzLiAqL1xuZXhwb3J0IGNvbnN0IEFVVEhfVFlQRV9BUFBfU1AgPSBcImFwcF9zcFwiO1xuIl19
@@ -1 +1 @@
1
- {"root":["../src/_logging.ts","../src/_profile-core.ts","../src/_profile.ts","../src/databricks-auth.ts","../src/databricks-cli.ts","../src/errors.ts","../src/http-client.ts","../src/lifecycle.ts","../src/node-storage.ts","../src/personal-access-token.ts","../src/service-principal.ts","../src/storage.ts","../src/types.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/_logging.ts","../src/_profile-core.ts","../src/_profile.ts","../src/databricks-auth.ts","../src/databricks-cli.ts","../src/errors.ts","../src/file-storage.ts","../src/http-client.ts","../src/lifecycle.ts","../src/personal-access-token.ts","../src/service-principal.ts","../src/storage.ts","../src/types.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -25,8 +25,8 @@
25
25
  "typescript": "^5.9.3"
26
26
  },
27
27
  "dependencies": {
28
- "@dbx-tools/core": "^0.9.30",
29
- "@dbx-tools/shared-core": "^0.9.30",
28
+ "@dbx-tools/core": "^0.9.32",
29
+ "@dbx-tools/shared-core": "^0.9.32",
30
30
  "ini": "^6.0.0",
31
31
  "oauth4webapi": "^3.8.8"
32
32
  },
@@ -44,7 +44,7 @@
44
44
  "./package.json": "./package.json"
45
45
  }
46
46
  },
47
- "version": "0.9.30",
47
+ "version": "0.9.32",
48
48
  "types": "./lib/index.d.ts",
49
49
  "type": "module",
50
50
  "exports": {
@@ -7,7 +7,7 @@ import { authLogger, tokenMetadata } from "./_logging.ts";
7
7
  import { AuthError } from "./errors.ts";
8
8
  import { DatabricksCliProvider, resolveDatabricksCli } from "./databricks-cli.ts";
9
9
  import { publicToken, TokenLifecycle } from "./lifecycle.ts";
10
- import { FileCredentialStore } from "./node-storage.ts";
10
+ import { FileCredentialStore } from "./file-storage.ts";
11
11
  import { DatabricksPersonalAccessTokenProvider } from "./personal-access-token.ts";
12
12
  import {
13
13
  listDatabricksProfiles,
@@ -17,12 +17,12 @@ interface TokenCache {
17
17
  tokens: Record<string, unknown>;
18
18
  }
19
19
 
20
- class NodeFileLocks implements LockAdapter {
20
+ class FileLocks implements LockAdapter {
21
21
  private readonly leases = new Map<string, FileLockLease>();
22
22
 
23
23
  constructor(private readonly lockDirectory: string) {}
24
24
 
25
- async acquire(key: string, timeoutMs: number): Promise<string> {
25
+ async acquire(key: string, timeoutMs?: number): Promise<string> {
26
26
  logger.debug("waiting for file lock", {
27
27
  credential: credentialId(key),
28
28
  timeoutMs,
@@ -55,7 +55,7 @@ export class FileCredentialStore implements CredentialStore {
55
55
  private readonly layout = FileLayout.Single,
56
56
  locks?: LockAdapter,
57
57
  ) {
58
- this.locks = locks ?? new NodeFileLocks(join(root, "locks"));
58
+ this.locks = locks ?? new FileLocks(join(root, "locks"));
59
59
  }
60
60
 
61
61
  async load(key: string): Promise<Token | undefined> {
@@ -103,7 +103,7 @@ export class FileCredentialStore implements CredentialStore {
103
103
  });
104
104
  }
105
105
 
106
- acquireLock(key: string, timeoutMs: number): Promise<string> {
106
+ acquireLock(key: string, timeoutMs?: number): Promise<string> {
107
107
  return this.locks.acquire(
108
108
  this.layout === FileLayout.Single ? `${this.root}:refresh` : `${this.root}:${key}:refresh`,
109
109
  timeoutMs,