@dbx-tools/appkit-lakebox 0.9.154 → 0.9.158

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/user.js CHANGED
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * @module
11
11
  */
12
- import { hash } from "@dbx-tools/shared-core";
12
+ import { fnvHashWithOptions } from "@dbx-tools/shared-core";
13
13
  /** Platform account that owns the persistent volume and the SSH session. */
14
14
  export const LAKEBOX_AGENT_USER = "sandbox-agent";
15
15
  /** Persistent home mounted by the platform. Only this path survives a restart. */
@@ -68,9 +68,9 @@ export function isLakeboxUserHash(value) {
68
68
  return /^[0-9a-v]{7}$/.test(value);
69
69
  }
70
70
  function digestText(...values) {
71
- return hash.fnvHashWithOptions({ length: 7, alphabet: HASH_ALPHABET }, ...values);
71
+ return fnvHashWithOptions({ length: 7, alphabet: HASH_ALPHABET }, ...values);
72
72
  }
73
73
  function digestValue(...values) {
74
74
  return Number.parseInt(digestText(...values), 32);
75
75
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHOUMsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQztBQUNsRCxrRkFBa0Y7QUFDbEYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxrQkFBa0IsRUFBRSxDQUFDO0FBQ2hFLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLGtCQUFrQixhQUFhLENBQUM7QUFDckUsNkRBQTZEO0FBQzdELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsa0JBQWtCLFFBQVEsQ0FBQztBQUNoRSxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxrQkFBa0IsVUFBVSxDQUFDO0FBQ3BFLG1FQUFtRTtBQUNuRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUM7QUFFL0MsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDdEMsZ0NBQWdDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztBQUN4Qyw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLHFGQUFxRjtBQUNyRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUFFekMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQy9CLE1BQU0sYUFBYSxHQUFHLGtDQUFrQyxDQUFDO0FBRXpELDJEQUEyRDtBQUMzRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsUUFBZ0I7SUFDdkQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pELElBQUksQ0FBQyxVQUFVO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0lBQ3BGLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxRQUFnQixFQUFFLFdBQW1CO0lBQy9ELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxjQUFjLEVBQUUsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNoRixNQUFNLElBQUksR0FBRyxHQUFHLFdBQVcsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUN6QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJO1FBQ0osR0FBRyxFQUFFLGVBQWUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7UUFDakYsSUFBSSxFQUFFLFNBQVMsSUFBSSxFQUFFO1FBQ3JCLFdBQVcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRTtLQUM5RCxDQUFDO0FBQ0osQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxNQUFNLFVBQVUscUJBQXFCLENBQUMsUUFBZ0I7SUFDcEQsT0FBTyxHQUFHLGtCQUFrQixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFFRCx3REFBd0Q7QUFDeEQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsV0FBbUI7SUFDdEUsT0FBTyxDQUNMLGdCQUFnQixHQUFHLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FDN0YsQ0FBQztBQUNKLENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWE7SUFDN0MsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxHQUFHLE1BQWdCO0lBQ3JDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNwRixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsR0FBRyxNQUFnQjtJQUN0QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGV0ZXJtaW5pc3RpYyBMYWtlYm94IHVzZXIgYW5kIHNlcnZpY2UtcG9ydCBkZXJpdmF0aW9uLlxuICpcbiAqIE9uZSBGTlYtMWEgaGFzaCBvZiB0aGUgYXV0aGVudGljYXRlZCBpZGVudGl0eSBpcyB0aGUgb25seSByb3V0aW5nIGtleS4gSXRcbiAqIHNlbGVjdHMgdGhlIExpbnV4IGFjY291bnQsIFVJRCwgcGVyc2lzdGVudCBob21lLCBBcHBLaXQgcm91dGUgc2VnbWVudCwgYW5kLFxuICogd2l0aCBhIHNlcnZpY2UgbmFtZSwgdGhlIGxvb3BiYWNrIHNlcnZpY2UgcG9ydC4gTm90aGluZyBoZXJlIGlzIHBlcnNpc3RlZDpcbiAqIGV2ZXJ5IGNhbGxlciByZWNvbXB1dGVzIHRoZSBzYW1lIHZhbHVlcywgYW5kIGNvbGxpc2lvbnMgZmFpbCBjbG9zZWQgd2hlcmVcbiAqIHRoZXkgYXJlIG9ic2VydmVkLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBoYXNoIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgTGFrZWJveFVzZXIgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbGFrZWJveFwiO1xuXG4vKiogUGxhdGZvcm0gYWNjb3VudCB0aGF0IG93bnMgdGhlIHBlcnNpc3RlbnQgdm9sdW1lIGFuZCB0aGUgU1NIIHNlc3Npb24uICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9BR0VOVF9VU0VSID0gXCJzYW5kYm94LWFnZW50XCI7XG4vKiogUGVyc2lzdGVudCBob21lIG1vdW50ZWQgYnkgdGhlIHBsYXRmb3JtLiBPbmx5IHRoaXMgcGF0aCBzdXJ2aXZlcyBhIHJlc3RhcnQuICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9BR0VOVF9IT01FID0gYC9ob21lLyR7TEFLRUJPWF9BR0VOVF9VU0VSfWA7XG4vKiogUm9vdCBvZiBwYWNrYWdlLW93bmVkIHBlcnNpc3RlbnQgc3RhdGUuICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9TVEFURV9ST09UID0gYCR7TEFLRUJPWF9BR0VOVF9IT01FfS8uZGJ4LXRvb2xzYDtcbi8qKiBQZXJzaXN0ZW50IGJhY2tpbmcgZGlyZWN0b3JpZXMgZm9yIExha2Vib3ggdXNlciBob21lcy4gKi9cbmV4cG9ydCBjb25zdCBMQUtFQk9YX1VTRVJTX1JPT1QgPSBgJHtMQUtFQk9YX1NUQVRFX1JPT1R9L3VzZXJzYDtcbi8qKiBTaGFyZWQgcmVhZC1vbmx5IHJ1bnRpbWUgYmluYXJpZXMsIHN1Y2ggYXMgdGhlIGNvbnRhaW5lciBidW5kbGUgYW5kIHR0eWQuICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9SVU5USU1FX1JPT1QgPSBgJHtMQUtFQk9YX1NUQVRFX1JPT1R9L3J1bnRpbWVgO1xuLyoqIFBlci1ib290IHJ1bnRpbWUgc3RhdGUgcm9vdDsgcmVzZXQgd2l0aCB0aGUgcm9vdCBmaWxlc3lzdGVtLiAqL1xuZXhwb3J0IGNvbnN0IExBS0VCT1hfUlVOX1JPT1QgPSBcIi9ydW4vbGFrZWJveFwiO1xuXG4vKiogRmlyc3QgZGVyaXZlZCBMaW51eCBVSUQuIFRoZSBwZXJzaXN0ZW50IGlkbWFwcGVkIHZvbHVtZSBzdG9yZXMgVUlEcyBiZWxvdyA2NTUzNi4gKi9cbmV4cG9ydCBjb25zdCBMQUtFQk9YX1VJRF9NSU4gPSAyMF8wMDA7XG4vKiogTnVtYmVyIG9mIGRlcml2YWJsZSBVSURzLiAqL1xuZXhwb3J0IGNvbnN0IExBS0VCT1hfVUlEX0NPVU5UID0gNDBfMDAwO1xuLyoqIEZpcnN0IGRlcml2ZWQgc2VydmljZSBwb3J0LiBQbGF0Zm9ybSBsaXN0ZW5lcnMgc3RheSBiZWxvdyB0aGlzIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0IExBS0VCT1hfUE9SVF9NSU4gPSAyMF8wMDA7XG4vKiogTnVtYmVyIG9mIGRlcml2YWJsZSBzZXJ2aWNlIHBvcnRzOyB0aGUga2VybmVsIGVwaGVtZXJhbCByYW5nZSBzdGFydHMgYXQgMzI3NjguICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9QT1JUX0NPVU5UID0gMTJfMDAwO1xuXG5jb25zdCBVU0VSX1BSRUZJWCA9IFwibGFrZWJveC1cIjtcbmNvbnN0IEhBU0hfQUxQSEFCRVQgPSBcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2XCI7XG5cbi8qKiBOb3JtYWxpemVzIGFuIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgYmVmb3JlIGhhc2hpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplTGFrZWJveElkZW50aXR5KGlkZW50aXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gaWRlbnRpdHkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghbm9ybWFsaXplZCkgdGhyb3cgbmV3IEVycm9yKFwiTGFrZWJveCB1c2VycyByZXF1aXJlIGFuIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHlcIik7XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIERlcml2ZXMgdGhlIExha2Vib3ggYWNjb3VudCBmb3Igb25lIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuXG4gKlxuICogQHBhcmFtIHJvdXRlUHJlZml4IC0gQXBwS2l0IHJvb3QgZm9yIHVzZXIgc2VydmljZSByb3V0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYWtlYm94VXNlcihpZGVudGl0eTogc3RyaW5nLCByb3V0ZVByZWZpeDogc3RyaW5nKTogTGFrZWJveFVzZXIge1xuICBjb25zdCB1c2VySGFzaCA9IGRpZ2VzdFRleHQoXCJsYWtlYm94LXVzZXJcIiwgbm9ybWFsaXplTGFrZWJveElkZW50aXR5KGlkZW50aXR5KSk7XG4gIGNvbnN0IG5hbWUgPSBgJHtVU0VSX1BSRUZJWH0ke3VzZXJIYXNofWA7XG4gIHJldHVybiB7XG4gICAgaGFzaDogdXNlckhhc2gsXG4gICAgbmFtZSxcbiAgICB1aWQ6IExBS0VCT1hfVUlEX01JTiArIChkaWdlc3RWYWx1ZShcImxha2Vib3gtdWlkXCIsIHVzZXJIYXNoKSAlIExBS0VCT1hfVUlEX0NPVU5UKSxcbiAgICBob21lOiBgL2hvbWUvJHtuYW1lfWAsXG4gICAgcm91dGVQcmVmaXg6IGAke3JvdXRlUHJlZml4LnJlcGxhY2UoL1xcLyskLywgXCJcIil9LyR7dXNlckhhc2h9YCxcbiAgfTtcbn1cblxuLyoqIFJldHVybnMgdGhlIHBlcnNpc3RlbnQgYmFja2luZyBkaXJlY3RvcnkgZm9yIGEgdXNlciBoYXNoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxha2Vib3hQZXJzaXN0ZW50SG9tZSh1c2VySGFzaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke0xBS0VCT1hfVVNFUlNfUk9PVH0vJHt1c2VySGFzaH1gO1xufVxuXG4vKiogRGVyaXZlcyB0aGUgbG9vcGJhY2sgcG9ydCBmb3Igb25lIHVzZXIncyBzZXJ2aWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxha2Vib3hTZXJ2aWNlUG9ydCh1c2VySGFzaDogc3RyaW5nLCBzZXJ2aWNlTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIChcbiAgICBMQUtFQk9YX1BPUlRfTUlOICsgKGRpZ2VzdFZhbHVlKFwibGFrZWJveC1wb3J0XCIsIHVzZXJIYXNoLCBzZXJ2aWNlTmFtZSkgJSBMQUtFQk9YX1BPUlRfQ09VTlQpXG4gICk7XG59XG5cbi8qKiBSZXR1cm5zIHdoZXRoZXIgYSByb3V0ZSBzZWdtZW50IGhhcyB0aGUgc2hhcGUgb2YgYSB1c2VyIGhhc2guICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYWtlYm94VXNlckhhc2godmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15bMC05YS12XXs3fSQvLnRlc3QodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBkaWdlc3RUZXh0KC4uLnZhbHVlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gaGFzaC5mbnZIYXNoV2l0aE9wdGlvbnMoeyBsZW5ndGg6IDcsIGFscGhhYmV0OiBIQVNIX0FMUEhBQkVUIH0sIC4uLnZhbHVlcyk7XG59XG5cbmZ1bmN0aW9uIGRpZ2VzdFZhbHVlKC4uLnZhbHVlczogc3RyaW5nW10pOiBudW1iZXIge1xuICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KGRpZ2VzdFRleHQoLi4udmFsdWVzKSwgMzIpO1xufVxuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc1RCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDO0FBQ2xELGtGQUFrRjtBQUNsRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLGtCQUFrQixFQUFFLENBQUM7QUFDaEUsOENBQThDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsa0JBQWtCLGFBQWEsQ0FBQztBQUNyRSw2REFBNkQ7QUFDN0QsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxrQkFBa0IsUUFBUSxDQUFDO0FBQ2hFLGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLGtCQUFrQixVQUFVLENBQUM7QUFDcEUsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztBQUUvQyx1RkFBdUY7QUFDdkYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUN0QyxnQ0FBZ0M7QUFDaEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFDdkMscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQUV6QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUM7QUFDL0IsTUFBTSxhQUFhLEdBQUcsa0NBQWtDLENBQUM7QUFFekQsMkRBQTJEO0FBQzNELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxRQUFnQjtJQUN2RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakQsSUFBSSxDQUFDLFVBQVU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFDcEYsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLFFBQWdCLEVBQUUsV0FBbUI7SUFDL0QsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sSUFBSSxHQUFHLEdBQUcsV0FBVyxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ3pDLE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUk7UUFDSixHQUFHLEVBQUUsZUFBZSxHQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztRQUNqRixJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUU7UUFDckIsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFO0tBQzlELENBQUM7QUFDSixDQUFDO0FBRUQsZ0VBQWdFO0FBQ2hFLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLEdBQUcsa0JBQWtCLElBQUksUUFBUSxFQUFFLENBQUM7QUFDN0MsQ0FBQztBQUVELHdEQUF3RDtBQUN4RCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxXQUFtQjtJQUN0RSxPQUFPLENBQ0wsZ0JBQWdCLEdBQUcsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUM3RixDQUFDO0FBQ0osQ0FBQztBQUVELG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBYTtJQUM3QyxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQUcsTUFBZ0I7SUFDckMsT0FBTyxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQUcsTUFBZ0I7SUFDdEMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERldGVybWluaXN0aWMgTGFrZWJveCB1c2VyIGFuZCBzZXJ2aWNlLXBvcnQgZGVyaXZhdGlvbi5cbiAqXG4gKiBPbmUgRk5WLTFhIGhhc2ggb2YgdGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgaXMgdGhlIG9ubHkgcm91dGluZyBrZXkuIEl0XG4gKiBzZWxlY3RzIHRoZSBMaW51eCBhY2NvdW50LCBVSUQsIHBlcnNpc3RlbnQgaG9tZSwgQXBwS2l0IHJvdXRlIHNlZ21lbnQsIGFuZCxcbiAqIHdpdGggYSBzZXJ2aWNlIG5hbWUsIHRoZSBsb29wYmFjayBzZXJ2aWNlIHBvcnQuIE5vdGhpbmcgaGVyZSBpcyBwZXJzaXN0ZWQ6XG4gKiBldmVyeSBjYWxsZXIgcmVjb21wdXRlcyB0aGUgc2FtZSB2YWx1ZXMsIGFuZCBjb2xsaXNpb25zIGZhaWwgY2xvc2VkIHdoZXJlXG4gKiB0aGV5IGFyZSBvYnNlcnZlZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZm52SGFzaFdpdGhPcHRpb25zIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgTGFrZWJveFVzZXIgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbGFrZWJveFwiO1xuXG4vKiogUGxhdGZvcm0gYWNjb3VudCB0aGF0IG93bnMgdGhlIHBlcnNpc3RlbnQgdm9sdW1lIGFuZCB0aGUgU1NIIHNlc3Npb24uICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9BR0VOVF9VU0VSID0gXCJzYW5kYm94LWFnZW50XCI7XG4vKiogUGVyc2lzdGVudCBob21lIG1vdW50ZWQgYnkgdGhlIHBsYXRmb3JtLiBPbmx5IHRoaXMgcGF0aCBzdXJ2aXZlcyBhIHJlc3RhcnQuICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9BR0VOVF9IT01FID0gYC9ob21lLyR7TEFLRUJPWF9BR0VOVF9VU0VSfWA7XG4vKiogUm9vdCBvZiBwYWNrYWdlLW93bmVkIHBlcnNpc3RlbnQgc3RhdGUuICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9TVEFURV9ST09UID0gYCR7TEFLRUJPWF9BR0VOVF9IT01FfS8uZGJ4LXRvb2xzYDtcbi8qKiBQZXJzaXN0ZW50IGJhY2tpbmcgZGlyZWN0b3JpZXMgZm9yIExha2Vib3ggdXNlciBob21lcy4gKi9cbmV4cG9ydCBjb25zdCBMQUtFQk9YX1VTRVJTX1JPT1QgPSBgJHtMQUtFQk9YX1NUQVRFX1JPT1R9L3VzZXJzYDtcbi8qKiBTaGFyZWQgcmVhZC1vbmx5IHJ1bnRpbWUgYmluYXJpZXMsIHN1Y2ggYXMgdGhlIGNvbnRhaW5lciBidW5kbGUgYW5kIHR0eWQuICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9SVU5USU1FX1JPT1QgPSBgJHtMQUtFQk9YX1NUQVRFX1JPT1R9L3J1bnRpbWVgO1xuLyoqIFBlci1ib290IHJ1bnRpbWUgc3RhdGUgcm9vdDsgcmVzZXQgd2l0aCB0aGUgcm9vdCBmaWxlc3lzdGVtLiAqL1xuZXhwb3J0IGNvbnN0IExBS0VCT1hfUlVOX1JPT1QgPSBcIi9ydW4vbGFrZWJveFwiO1xuXG4vKiogRmlyc3QgZGVyaXZlZCBMaW51eCBVSUQuIFRoZSBwZXJzaXN0ZW50IGlkbWFwcGVkIHZvbHVtZSBzdG9yZXMgVUlEcyBiZWxvdyA2NTUzNi4gKi9cbmV4cG9ydCBjb25zdCBMQUtFQk9YX1VJRF9NSU4gPSAyMF8wMDA7XG4vKiogTnVtYmVyIG9mIGRlcml2YWJsZSBVSURzLiAqL1xuZXhwb3J0IGNvbnN0IExBS0VCT1hfVUlEX0NPVU5UID0gNDBfMDAwO1xuLyoqIEZpcnN0IGRlcml2ZWQgc2VydmljZSBwb3J0LiBQbGF0Zm9ybSBsaXN0ZW5lcnMgc3RheSBiZWxvdyB0aGlzIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0IExBS0VCT1hfUE9SVF9NSU4gPSAyMF8wMDA7XG4vKiogTnVtYmVyIG9mIGRlcml2YWJsZSBzZXJ2aWNlIHBvcnRzOyB0aGUga2VybmVsIGVwaGVtZXJhbCByYW5nZSBzdGFydHMgYXQgMzI3NjguICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9QT1JUX0NPVU5UID0gMTJfMDAwO1xuXG5jb25zdCBVU0VSX1BSRUZJWCA9IFwibGFrZWJveC1cIjtcbmNvbnN0IEhBU0hfQUxQSEFCRVQgPSBcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2XCI7XG5cbi8qKiBOb3JtYWxpemVzIGFuIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgYmVmb3JlIGhhc2hpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplTGFrZWJveElkZW50aXR5KGlkZW50aXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gaWRlbnRpdHkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghbm9ybWFsaXplZCkgdGhyb3cgbmV3IEVycm9yKFwiTGFrZWJveCB1c2VycyByZXF1aXJlIGFuIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHlcIik7XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIERlcml2ZXMgdGhlIExha2Vib3ggYWNjb3VudCBmb3Igb25lIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuXG4gKlxuICogQHBhcmFtIHJvdXRlUHJlZml4IC0gQXBwS2l0IHJvb3QgZm9yIHVzZXIgc2VydmljZSByb3V0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYWtlYm94VXNlcihpZGVudGl0eTogc3RyaW5nLCByb3V0ZVByZWZpeDogc3RyaW5nKTogTGFrZWJveFVzZXIge1xuICBjb25zdCB1c2VySGFzaCA9IGRpZ2VzdFRleHQoXCJsYWtlYm94LXVzZXJcIiwgbm9ybWFsaXplTGFrZWJveElkZW50aXR5KGlkZW50aXR5KSk7XG4gIGNvbnN0IG5hbWUgPSBgJHtVU0VSX1BSRUZJWH0ke3VzZXJIYXNofWA7XG4gIHJldHVybiB7XG4gICAgaGFzaDogdXNlckhhc2gsXG4gICAgbmFtZSxcbiAgICB1aWQ6IExBS0VCT1hfVUlEX01JTiArIChkaWdlc3RWYWx1ZShcImxha2Vib3gtdWlkXCIsIHVzZXJIYXNoKSAlIExBS0VCT1hfVUlEX0NPVU5UKSxcbiAgICBob21lOiBgL2hvbWUvJHtuYW1lfWAsXG4gICAgcm91dGVQcmVmaXg6IGAke3JvdXRlUHJlZml4LnJlcGxhY2UoL1xcLyskLywgXCJcIil9LyR7dXNlckhhc2h9YCxcbiAgfTtcbn1cblxuLyoqIFJldHVybnMgdGhlIHBlcnNpc3RlbnQgYmFja2luZyBkaXJlY3RvcnkgZm9yIGEgdXNlciBoYXNoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxha2Vib3hQZXJzaXN0ZW50SG9tZSh1c2VySGFzaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke0xBS0VCT1hfVVNFUlNfUk9PVH0vJHt1c2VySGFzaH1gO1xufVxuXG4vKiogRGVyaXZlcyB0aGUgbG9vcGJhY2sgcG9ydCBmb3Igb25lIHVzZXIncyBzZXJ2aWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxha2Vib3hTZXJ2aWNlUG9ydCh1c2VySGFzaDogc3RyaW5nLCBzZXJ2aWNlTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIChcbiAgICBMQUtFQk9YX1BPUlRfTUlOICsgKGRpZ2VzdFZhbHVlKFwibGFrZWJveC1wb3J0XCIsIHVzZXJIYXNoLCBzZXJ2aWNlTmFtZSkgJSBMQUtFQk9YX1BPUlRfQ09VTlQpXG4gICk7XG59XG5cbi8qKiBSZXR1cm5zIHdoZXRoZXIgYSByb3V0ZSBzZWdtZW50IGhhcyB0aGUgc2hhcGUgb2YgYSB1c2VyIGhhc2guICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYWtlYm94VXNlckhhc2godmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15bMC05YS12XXs3fSQvLnRlc3QodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBkaWdlc3RUZXh0KC4uLnZhbHVlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gZm52SGFzaFdpdGhPcHRpb25zKHsgbGVuZ3RoOiA3LCBhbHBoYWJldDogSEFTSF9BTFBIQUJFVCB9LCAuLi52YWx1ZXMpO1xufVxuXG5mdW5jdGlvbiBkaWdlc3RWYWx1ZSguLi52YWx1ZXM6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgcmV0dXJuIE51bWJlci5wYXJzZUludChkaWdlc3RUZXh0KC4uLnZhbHVlcyksIDMyKTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -19,7 +19,7 @@
19
19
  "projen": "projen"
20
20
  },
21
21
  "devDependencies": {
22
- "@dbx-tools/auth": "^0.9.154",
22
+ "@dbx-tools/auth": "^0.9.158",
23
23
  "@types/express": "^5.0.5",
24
24
  "@types/json-schema": "^7",
25
25
  "@types/node": "^24.6.0",
@@ -29,14 +29,14 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@databricks/appkit": "0.81.0",
32
- "@dbx-tools/appkit": "^0.9.154",
33
- "@dbx-tools/appkit-mastra": "^0.9.154",
34
- "@dbx-tools/core": "^0.9.154",
35
- "@dbx-tools/lakebox": "^0.9.154",
36
- "@dbx-tools/postgres": "^0.9.154",
37
- "@dbx-tools/shared-core": "^0.9.154",
38
- "@dbx-tools/shared-lakebox": "^0.9.154",
39
- "@dbx-tools/ui": "^0.9.154",
32
+ "@dbx-tools/appkit": "^0.9.158",
33
+ "@dbx-tools/appkit-mastra": "^0.9.158",
34
+ "@dbx-tools/core": "^0.9.158",
35
+ "@dbx-tools/lakebox": "^0.9.158",
36
+ "@dbx-tools/postgres": "^0.9.158",
37
+ "@dbx-tools/shared-core": "^0.9.158",
38
+ "@dbx-tools/shared-lakebox": "^0.9.158",
39
+ "@dbx-tools/ui": "^0.9.158",
40
40
  "@mastra/core": "1.71.0",
41
41
  "http-proxy-3": "^1.23.1",
42
42
  "zod": "4.3.6"
@@ -52,54 +52,10 @@
52
52
  "types": "./lib/index.d.ts",
53
53
  "default": "./lib/index.js"
54
54
  },
55
- "./config": {
56
- "types": "./lib/src/config.d.ts",
57
- "default": "./lib/src/config.js"
58
- },
59
- "./desktop": {
60
- "types": "./lib/src/desktop.d.ts",
61
- "default": "./lib/src/desktop.js"
62
- },
63
- "./metrics": {
64
- "types": "./lib/src/metrics.d.ts",
65
- "default": "./lib/src/metrics.js"
66
- },
67
- "./plugin": {
68
- "types": "./lib/src/plugin.d.ts",
69
- "default": "./lib/src/plugin.js"
70
- },
71
- "./routes": {
72
- "types": "./lib/src/routes.d.ts",
73
- "default": "./lib/src/routes.js"
74
- },
75
- "./runtime": {
76
- "types": "./lib/src/runtime.d.ts",
77
- "default": "./lib/src/runtime.js"
78
- },
79
- "./services": {
80
- "types": "./lib/src/services.d.ts",
81
- "default": "./lib/src/services.js"
82
- },
83
- "./skills": {
84
- "types": "./lib/src/skills.d.ts",
85
- "default": "./lib/src/skills.js"
86
- },
87
- "./user": {
88
- "types": "./lib/src/user.d.ts",
89
- "default": "./lib/src/user.js"
90
- },
91
- "./workspace": {
92
- "types": "./lib/src/workspace.d.ts",
93
- "default": "./lib/src/workspace.js"
94
- },
95
- "./*": {
96
- "types": "./lib/src/*/index.d.ts",
97
- "default": "./lib/src/*/index.js"
98
- },
99
55
  "./package.json": "./package.json"
100
56
  }
101
57
  },
102
- "version": "0.9.154",
58
+ "version": "0.9.158",
103
59
  "types": "./lib/index.d.ts",
104
60
  "dbxToolsConfig": {
105
61
  "tags": [
@@ -112,54 +68,10 @@
112
68
  "types": "./lib/index.d.ts",
113
69
  "default": "./lib/index.js"
114
70
  },
115
- "./config": {
116
- "types": "./lib/src/config.d.ts",
117
- "default": "./lib/src/config.js"
118
- },
119
- "./desktop": {
120
- "types": "./lib/src/desktop.d.ts",
121
- "default": "./lib/src/desktop.js"
122
- },
123
- "./metrics": {
124
- "types": "./lib/src/metrics.d.ts",
125
- "default": "./lib/src/metrics.js"
126
- },
127
- "./plugin": {
128
- "types": "./lib/src/plugin.d.ts",
129
- "default": "./lib/src/plugin.js"
130
- },
131
- "./routes": {
132
- "types": "./lib/src/routes.d.ts",
133
- "default": "./lib/src/routes.js"
134
- },
135
- "./runtime": {
136
- "types": "./lib/src/runtime.d.ts",
137
- "default": "./lib/src/runtime.js"
138
- },
139
- "./services": {
140
- "types": "./lib/src/services.d.ts",
141
- "default": "./lib/src/services.js"
142
- },
143
- "./skills": {
144
- "types": "./lib/src/skills.d.ts",
145
- "default": "./lib/src/skills.js"
146
- },
147
- "./user": {
148
- "types": "./lib/src/user.d.ts",
149
- "default": "./lib/src/user.js"
150
- },
151
- "./workspace": {
152
- "types": "./lib/src/workspace.d.ts",
153
- "default": "./lib/src/workspace.js"
154
- },
155
- "./*": {
156
- "types": "./lib/src/*/index.d.ts",
157
- "default": "./lib/src/*/index.js"
158
- },
159
71
  "./package.json": "./package.json"
160
72
  },
161
73
  "files": [
162
- "index.ts",
74
+ "index*.ts",
163
75
  "src",
164
76
  "skills",
165
77
  "scripts",
@@ -1,5 +1,5 @@
1
1
  import { CacheManager } from "@databricks/appkit";
2
- import { LakeboxApiError, type LakeboxEntry } from "@dbx-tools/lakebox/rest";
2
+ import { LakeboxApiError, type LakeboxEntry } from "@dbx-tools/lakebox";
3
3
  import { withAdvisoryLock, type PgPoolLike } from "@dbx-tools/postgres";
4
4
  import { log } from "@dbx-tools/shared-core";
5
5
  import { z } from "zod";
@@ -1,5 +1,5 @@
1
1
  import { CacheManager } from "@databricks/appkit";
2
- import { errorUtils, log } from "@dbx-tools/shared-core";
2
+ import { log, toError } from "@dbx-tools/shared-core";
3
3
  import { z } from "zod";
4
4
  import { LakeboxControllerDefinitionSchema, type LakeboxControllerService } from "./services.ts";
5
5
 
@@ -52,7 +52,7 @@ export class LakeboxServiceSnapshots {
52
52
  logger.warn("unable to read cached service snapshot", {
53
53
  lakeboxId,
54
54
  userHash,
55
- error: errorUtils.toError(error),
55
+ error: toError(error),
56
56
  });
57
57
  }
58
58
  return undefined;
@@ -73,7 +73,7 @@ export class LakeboxServiceSnapshots {
73
73
  logger.warn("unable to cache service snapshot", {
74
74
  lakeboxId,
75
75
  userHash,
76
- error: errorUtils.toError(error),
76
+ error: toError(error),
77
77
  });
78
78
  }
79
79
  }
package/src/config.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { basename } from "node:path";
2
2
  import type { BasePluginConfig } from "@databricks/appkit";
3
- import { configUtils, projectUtils } from "@dbx-tools/core";
4
- import { Ssh2PatchModeSchema, SshTransportModeSchema } from "@dbx-tools/lakebox/transport";
3
+ import { configUtils, string, ENV_ONLY, positiveInt, root } from "@dbx-tools/core";
4
+ import { Ssh2PatchModeSchema, SshTransportModeSchema } from "@dbx-tools/lakebox";
5
5
  import { LAKEBOX_DEFAULT_ROUTE_PREFIX } from "@dbx-tools/shared-lakebox";
6
6
  import { z } from "zod";
7
7
 
@@ -118,11 +118,11 @@ export function resolveLakeboxPluginConfig(
118
118
  return LakeboxPluginConfigSchema.parse({
119
119
  ...serializable,
120
120
  application:
121
- configUtils.string(application, APPLICATION_CONFIG_KEY) ??
122
- configUtils.string(undefined, "DATABRICKS_APP_NAME", configUtils.ENV_ONLY) ??
123
- basename(projectUtils.root() ?? process.cwd()),
124
- idleTimeoutSeconds: configUtils.positiveInt(idleTimeoutSeconds, IDLE_TIMEOUT_CONFIG_KEY, 3_600),
125
- sshTransport: configUtils.string(sshTransport, SSH_TRANSPORT_CONFIG_KEY),
126
- ssh2Patch: configUtils.string(ssh2Patch, SSH2_PATCH_CONFIG_KEY),
121
+ string(application, APPLICATION_CONFIG_KEY) ??
122
+ string(undefined, "DATABRICKS_APP_NAME", ENV_ONLY) ??
123
+ basename(root() ?? process.cwd()),
124
+ idleTimeoutSeconds: positiveInt(idleTimeoutSeconds, IDLE_TIMEOUT_CONFIG_KEY, 3_600),
125
+ sshTransport: string(sshTransport, SSH_TRANSPORT_CONFIG_KEY),
126
+ ssh2Patch: string(ssh2Patch, SSH2_PATCH_CONFIG_KEY),
127
127
  });
128
128
  }
package/src/desktop.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { brandUtils } from "@dbx-tools/shared-core";
2
- import { dbxToolsAssetDataUrls, dbxToolsAssetSvg } from "@dbx-tools/ui/branding/assets";
1
+ import { defaultBrandContext } from "@dbx-tools/shared-core";
2
+ import { dbxToolsAssetDataUrls, dbxToolsAssetSvg } from "@dbx-tools/ui/branding/generated";
3
3
 
4
- const BRAND = brandUtils.defaultBrandContext;
4
+ const BRAND = defaultBrandContext;
5
5
  const BRAND_COLORS = BRAND.colors;
6
6
  const WALLPAPER_LOGO = dbxToolsAssetSvg.logoDark.replace(
7
7
  "<svg ",
package/src/metrics.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from "node:events";
2
- import { errorUtils, log } from "@dbx-tools/shared-core";
2
+ import { log, toError } from "@dbx-tools/shared-core";
3
3
  import type { LakeboxMetricsSnapshot } from "@dbx-tools/shared-lakebox";
4
4
 
5
5
  const logger = log.logger("appkit-lakebox:metrics");
@@ -88,7 +88,7 @@ export class LakeboxMetrics extends EventEmitter<LakeboxMetricsEvents> {
88
88
  this.record(counters, true);
89
89
  } catch (error) {
90
90
  if (!signal.aborted) {
91
- logger.debug("Lakebox metrics sample failed", { error: errorUtils.toError(error) });
91
+ logger.debug("Lakebox metrics sample failed", { error: toError(error) });
92
92
  }
93
93
  }
94
94
  if (signal.aborted) return;
package/src/plugin.ts CHANGED
@@ -14,16 +14,16 @@ import {
14
14
  type ToolRegistry,
15
15
  } from "@databricks/appkit/beta";
16
16
  import {
17
- USER_EMAIL_HEADER,
18
- USER_ID_HEADER,
19
- appkit,
20
- lakebaseResolver,
21
- pluginRegistry,
22
- toolkitEntries,
23
- toolOperations,
24
17
  ToolRegistryPlugin,
25
18
  type AgentToolExecutionContext,
19
+ tryGetExecutionContext,
20
+ captureServicePrincipalPool,
21
+ require,
22
+ entries,
23
+ defineOperations,
24
+ toolRegistryFromOperations,
26
25
  } from "@dbx-tools/appkit";
26
+ import { USER_ID_HEADER, USER_EMAIL_HEADER } from "@dbx-tools/shared-core";
27
27
  import {
28
28
  createLakeboxServiceOperationSchema,
29
29
  executeLakeboxCommandOperationSchema,
@@ -109,8 +109,8 @@ export class AppKitLakeboxPlugin extends ToolRegistryPlugin<LakeboxPluginConfig>
109
109
 
110
110
  override async setup(): Promise<void> {
111
111
  this.context?.onLifecycle("setup:complete", async () => {
112
- const pool = lakebaseResolver.captureServicePrincipalPool(
113
- pluginRegistry.require(this.context, lakebase, "appkit-lakebox").exports().pool,
112
+ const pool = captureServicePrincipalPool(
113
+ require(this.context, lakebase, "appkit-lakebox").exports().pool,
114
114
  );
115
115
  this.runtime.initialize(
116
116
  createWorkspaceClient().config,
@@ -202,7 +202,7 @@ export class AppKitLakeboxPlugin extends ToolRegistryPlugin<LakeboxPluginConfig>
202
202
 
203
203
  /** Returns selected AppKit toolkit entries backed by this plugin's agent tools. */
204
204
  toolkit(options?: ToolkitOptions): Record<string, ToolkitEntry> {
205
- return toolkitEntries.entries(LAKEBOX_PLUGIN_NAME, this.getAgentTools(), {
205
+ return entries(LAKEBOX_PLUGIN_NAME, this.getAgentTools(), {
206
206
  ...options,
207
207
  prefix: options?.prefix ?? "",
208
208
  });
@@ -263,7 +263,7 @@ export class AppKitLakeboxPlugin extends ToolRegistryPlugin<LakeboxPluginConfig>
263
263
  operations(identity?: string, origin?: string) {
264
264
  const user = () => identity ?? this.executionIdentity();
265
265
  const presentService = (value: LakeboxService) => omitLog(withServiceOrigin(value, origin));
266
- return toolOperations.defineOperations({
266
+ return defineOperations({
267
267
  get_lakebox: {
268
268
  schema: getLakeboxOperationSchema,
269
269
  execute: async (_input, signal) => {
@@ -313,11 +313,11 @@ export class AppKitLakeboxPlugin extends ToolRegistryPlugin<LakeboxPluginConfig>
313
313
  }
314
314
 
315
315
  private createToolRegistry(identity?: string, origin?: string): ToolRegistry {
316
- return toolOperations.toolRegistryFromOperations(this.operations(identity, origin));
316
+ return toolRegistryFromOperations(this.operations(identity, origin));
317
317
  }
318
318
 
319
319
  private executionIdentity(): string {
320
- const context = appkit.tryGetExecutionContext();
320
+ const context = tryGetExecutionContext();
321
321
  if (!context) throw new Error("Lakebox tools require an AppKit execution context");
322
322
  return "userId" in context ? context.userId : context.serviceUserId;
323
323
  }
package/src/routes.ts CHANGED
@@ -1,9 +1,14 @@
1
1
  import type { IncomingHttpHeaders, IncomingMessage, ServerResponse } from "node:http";
2
2
  import { createServer, type Server, type Socket } from "node:net";
3
3
  import { type Duplex, PassThrough, Readable } from "node:stream";
4
- import { ACCESS_TOKEN_HEADER, USER_EMAIL_HEADER, USER_ID_HEADER } from "@dbx-tools/appkit";
5
- import type { SshSession } from "@dbx-tools/lakebox/session";
6
- import { errorUtils, log } from "@dbx-tools/shared-core";
4
+ import type { SshSession } from "@dbx-tools/lakebox";
5
+ import {
6
+ log,
7
+ toError,
8
+ ACCESS_TOKEN_HEADER,
9
+ USER_EMAIL_HEADER,
10
+ USER_ID_HEADER,
11
+ } from "@dbx-tools/shared-core";
7
12
  import type { LakeboxUser } from "@dbx-tools/shared-lakebox";
8
13
  import type { NextFunction, Request, Response } from "express";
9
14
  import ProxyModule from "http-proxy-3";
@@ -274,7 +279,9 @@ async function closeBridge(bridge: Bridge): Promise<void> {
274
279
  }
275
280
 
276
281
  function stripIdentityHeaders(request: IncomingMessage): void {
277
- for (const name of [ACCESS_TOKEN_HEADER, "authorization", "cookie"]) delete request.headers[name];
282
+ for (const name of [ACCESS_TOKEN_HEADER, "authorization", "cookie"]) {
283
+ delete request.headers[name];
284
+ }
278
285
  }
279
286
 
280
287
  function sendLoadingResponse(
@@ -358,7 +365,7 @@ async function injectHtmlHead(
358
365
  response.end(body);
359
366
  } catch (error) {
360
367
  logger.warn("Lakebox route HTML injection failed", {
361
- error: errorUtils.toError(error),
368
+ error: toError(error),
362
369
  });
363
370
  if (!response.headersSent) response.writeHead(502);
364
371
  response.end("Lakebox route unavailable");
@@ -468,7 +475,7 @@ function bridgeSocket(
468
475
  clearReadyTimeout();
469
476
  if (!timedOut && !socket.destroyed) {
470
477
  logger.warn("Lakebox route forwarding channel failed", {
471
- error: errorUtils.toError(error),
478
+ error: toError(error),
472
479
  });
473
480
  socket.end("HTTP/1.1 502 Bad Gateway\r\nConnection: close\r\nContent-Length: 0\r\n\r\n");
474
481
  }
package/src/runtime.ts CHANGED
@@ -1,22 +1,23 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import type { IncomingHttpHeaders } from "node:http";
3
- import { exec } from "@dbx-tools/core";
4
- import { SshKeyStore } from "@dbx-tools/lakebox/key-store";
3
+ import { onParentTerminationSignal } from "@dbx-tools/core";
5
4
  import {
5
+ SshKeyStore,
6
6
  ensureLakeboxRunning,
7
7
  ensureLakeboxStopped,
8
8
  lakeboxIdleTimeoutSeconds,
9
9
  normalizeLakeboxStatus,
10
- } from "@dbx-tools/lakebox/lifecycle";
10
+ SshCommand,
11
+ SshSession,
12
+ } from "@dbx-tools/lakebox";
11
13
  import {
12
14
  isLakeboxUnavailable,
13
15
  LakeboxApiError,
14
16
  LakeboxClient,
15
17
  type LakeboxAuth,
16
18
  type LakeboxEntry,
17
- } from "@dbx-tools/lakebox/rest";
18
- import { SshCommand, SshSession } from "@dbx-tools/lakebox/session";
19
- import { errorUtils, log } from "@dbx-tools/shared-core";
19
+ } from "@dbx-tools/lakebox";
20
+ import { log, toError } from "@dbx-tools/shared-core";
20
21
  import {
21
22
  LAKEBOX_BUILT_IN_SERVICES,
22
23
  lakeboxBuiltInServiceNameSchema,
@@ -147,9 +148,7 @@ export class LakeboxRuntime {
147
148
  (signal) => this.readMetrics(signal),
148
149
  config.metricsIntervalSeconds * 1_000,
149
150
  );
150
- this.stopParentTerminationSignal = exec.onParentTerminationSignal(() =>
151
- this.routes.beginShutdown(),
152
- );
151
+ this.stopParentTerminationSignal = onParentTerminationSignal(() => this.routes.beginShutdown());
153
152
  }
154
153
 
155
154
  /**
@@ -414,7 +413,7 @@ export class LakeboxRuntime {
414
413
  );
415
414
  } catch (error) {
416
415
  if (!isLakeboxUnavailable(error)) {
417
- logger.warn("legacy Lakebox cleanup failed", { error: errorUtils.toError(error) });
416
+ logger.warn("legacy Lakebox cleanup failed", { error: toError(error) });
418
417
  }
419
418
  }
420
419
  if (!pool) return;
@@ -429,7 +428,7 @@ export class LakeboxRuntime {
429
428
  logger.info("dropped legacy Lakebox ownership schema", { schema });
430
429
  }
431
430
  } catch (error) {
432
- logger.warn("legacy ownership schema cleanup failed", { error: errorUtils.toError(error) });
431
+ logger.warn("legacy ownership schema cleanup failed", { error: toError(error) });
433
432
  }
434
433
  }
435
434
 
@@ -661,7 +660,7 @@ export class LakeboxRuntime {
661
660
  if (this.shutdownController.signal.aborted) return;
662
661
  logger.warn("Lakebox service restore failed", {
663
662
  user: hash,
664
- error: errorUtils.toError(error),
663
+ error: toError(error),
665
664
  });
666
665
  }
667
666
  }
@@ -867,7 +866,7 @@ export class LakeboxRuntime {
867
866
  private wake(action: () => Promise<unknown>): void {
868
867
  if (this.waking) return;
869
868
  this.waking = action()
870
- .catch((error) => logger.warn("Lakebox wake failed", { error: errorUtils.toError(error) }))
869
+ .catch((error) => logger.warn("Lakebox wake failed", { error: toError(error) }))
871
870
  .finally(() => {
872
871
  this.waking = undefined;
873
872
  });
package/src/services.ts CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  type LakeboxService,
8
8
  type LakeboxUser,
9
9
  } from "@dbx-tools/shared-lakebox";
10
- import { lakeboxServicePath } from "@dbx-tools/shared-lakebox/client";
10
+ import { lakeboxServicePath } from "@dbx-tools/shared-lakebox";
11
11
  import { z } from "zod";
12
12
  import { desktopEnvironment, desktopHtmlHead, desktopOpenUrl } from "./desktop.ts";
13
13
  import { LAKEBOX_RUNTIME_ROOT, lakeboxServicePort } from "./user.ts";
package/src/user.ts CHANGED
@@ -10,7 +10,7 @@
10
10
  * @module
11
11
  */
12
12
 
13
- import { hash } from "@dbx-tools/shared-core";
13
+ import { fnvHashWithOptions } from "@dbx-tools/shared-core";
14
14
  import type { LakeboxUser } from "@dbx-tools/shared-lakebox";
15
15
 
16
16
  /** Platform account that owns the persistent volume and the SSH session. */
@@ -80,7 +80,7 @@ export function isLakeboxUserHash(value: string): boolean {
80
80
  }
81
81
 
82
82
  function digestText(...values: string[]): string {
83
- return hash.fnvHashWithOptions({ length: 7, alphabet: HASH_ALPHABET }, ...values);
83
+ return fnvHashWithOptions({ length: 7, alphabet: HASH_ALPHABET }, ...values);
84
84
  }
85
85
 
86
86
  function digestValue(...values: string[]): number {