@databricks/sdk-core 0.0.0-dev → 0.1.0-dev.1

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.
Files changed (163) hide show
  1. package/README.md +11 -1
  2. package/dist/api/execute.d.ts +12 -0
  3. package/dist/api/execute.d.ts.map +1 -0
  4. package/dist/api/execute.js +77 -0
  5. package/dist/api/execute.js.map +1 -0
  6. package/dist/api/index.d.ts +12 -0
  7. package/dist/api/index.d.ts.map +1 -0
  8. package/dist/api/index.js +8 -0
  9. package/dist/api/index.js.map +1 -0
  10. package/dist/api/limiter.d.ts +9 -0
  11. package/dist/api/limiter.d.ts.map +1 -0
  12. package/dist/api/limiter.js +2 -0
  13. package/dist/api/limiter.js.map +1 -0
  14. package/dist/api/options.d.ts +22 -0
  15. package/dist/api/options.d.ts.map +1 -0
  16. package/dist/api/options.js +2 -0
  17. package/dist/api/options.js.map +1 -0
  18. package/dist/api/retrier.d.ts +58 -0
  19. package/dist/api/retrier.d.ts.map +1 -0
  20. package/dist/api/retrier.js +70 -0
  21. package/dist/api/retrier.js.map +1 -0
  22. package/dist/apierror/apierror.d.ts +53 -0
  23. package/dist/apierror/apierror.d.ts.map +1 -0
  24. package/dist/apierror/apierror.js +217 -0
  25. package/dist/apierror/apierror.js.map +1 -0
  26. package/dist/apierror/codes/codes.d.ts +140 -0
  27. package/dist/apierror/codes/codes.d.ts.map +1 -0
  28. package/dist/apierror/codes/codes.js +167 -0
  29. package/dist/apierror/codes/codes.js.map +1 -0
  30. package/dist/apierror/codes/index.d.ts +7 -0
  31. package/dist/apierror/codes/index.d.ts.map +1 -0
  32. package/dist/apierror/codes/index.js +7 -0
  33. package/dist/apierror/codes/index.js.map +1 -0
  34. package/dist/apierror/details.d.ts +177 -0
  35. package/dist/apierror/details.d.ts.map +1 -0
  36. package/dist/apierror/details.js +250 -0
  37. package/dist/apierror/details.js.map +1 -0
  38. package/dist/apierror/index.d.ts +8 -0
  39. package/dist/apierror/index.d.ts.map +1 -0
  40. package/dist/apierror/index.js +7 -0
  41. package/dist/apierror/index.js.map +1 -0
  42. package/dist/clientinfo/agent.d.ts +56 -0
  43. package/dist/clientinfo/agent.d.ts.map +1 -0
  44. package/dist/clientinfo/agent.js +120 -0
  45. package/dist/clientinfo/agent.js.map +1 -0
  46. package/dist/clientinfo/base.d.ts +39 -0
  47. package/dist/clientinfo/base.d.ts.map +1 -0
  48. package/dist/clientinfo/base.js +61 -0
  49. package/dist/clientinfo/base.js.map +1 -0
  50. package/dist/clientinfo/clientinfo.d.ts +61 -0
  51. package/dist/clientinfo/clientinfo.d.ts.map +1 -0
  52. package/dist/clientinfo/clientinfo.js +96 -0
  53. package/dist/clientinfo/clientinfo.js.map +1 -0
  54. package/dist/clientinfo/default.browser.d.ts +17 -0
  55. package/dist/clientinfo/default.browser.d.ts.map +1 -0
  56. package/dist/clientinfo/default.browser.js +20 -0
  57. package/dist/clientinfo/default.browser.js.map +1 -0
  58. package/dist/clientinfo/default.d.ts +14 -0
  59. package/dist/clientinfo/default.d.ts.map +1 -0
  60. package/dist/clientinfo/default.js +104 -0
  61. package/dist/clientinfo/default.js.map +1 -0
  62. package/dist/clientinfo/index.browser.d.ts +5 -0
  63. package/dist/clientinfo/index.browser.d.ts.map +1 -0
  64. package/dist/clientinfo/index.browser.js +4 -0
  65. package/dist/clientinfo/index.browser.js.map +1 -0
  66. package/dist/clientinfo/index.d.ts +5 -0
  67. package/dist/clientinfo/index.d.ts.map +1 -0
  68. package/dist/clientinfo/index.js +4 -0
  69. package/dist/clientinfo/index.js.map +1 -0
  70. package/dist/http/http.d.ts +40 -0
  71. package/dist/http/http.d.ts.map +1 -0
  72. package/dist/http/http.js +37 -0
  73. package/dist/http/http.js.map +1 -0
  74. package/dist/http/index.d.ts +8 -0
  75. package/dist/http/index.d.ts.map +1 -0
  76. package/dist/http/index.js +7 -0
  77. package/dist/http/index.js.map +1 -0
  78. package/dist/index.d.ts +6 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +7 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/logger/index.d.ts +8 -0
  83. package/dist/logger/index.d.ts.map +1 -0
  84. package/dist/logger/index.js +7 -0
  85. package/dist/logger/index.js.map +1 -0
  86. package/dist/logger/logger.d.ts +49 -0
  87. package/dist/logger/logger.d.ts.map +1 -0
  88. package/dist/logger/logger.js +65 -0
  89. package/dist/logger/logger.js.map +1 -0
  90. package/dist/profiles/errors.d.ts +17 -0
  91. package/dist/profiles/errors.d.ts.map +1 -0
  92. package/dist/profiles/errors.js +19 -0
  93. package/dist/profiles/errors.js.map +1 -0
  94. package/dist/profiles/index.browser.d.ts +10 -0
  95. package/dist/profiles/index.browser.d.ts.map +1 -0
  96. package/dist/profiles/index.browser.js +8 -0
  97. package/dist/profiles/index.browser.js.map +1 -0
  98. package/dist/profiles/index.d.ts +15 -0
  99. package/dist/profiles/index.d.ts.map +1 -0
  100. package/dist/profiles/index.js +13 -0
  101. package/dist/profiles/index.js.map +1 -0
  102. package/dist/profiles/ini.d.ts +36 -0
  103. package/dist/profiles/ini.d.ts.map +1 -0
  104. package/dist/profiles/ini.js +113 -0
  105. package/dist/profiles/ini.js.map +1 -0
  106. package/dist/profiles/profile.d.ts +131 -0
  107. package/dist/profiles/profile.d.ts.map +1 -0
  108. package/dist/profiles/profile.js +307 -0
  109. package/dist/profiles/profile.js.map +1 -0
  110. package/dist/profiles/resolve.d.ts +29 -0
  111. package/dist/profiles/resolve.d.ts.map +1 -0
  112. package/dist/profiles/resolve.js +206 -0
  113. package/dist/profiles/resolve.js.map +1 -0
  114. package/dist/profiles/secret.d.ts +25 -0
  115. package/dist/profiles/secret.d.ts.map +1 -0
  116. package/dist/profiles/secret.js +38 -0
  117. package/dist/profiles/secret.js.map +1 -0
  118. package/dist/wkt/fieldmask.d.ts +32 -0
  119. package/dist/wkt/fieldmask.d.ts.map +1 -0
  120. package/dist/wkt/fieldmask.js +68 -0
  121. package/dist/wkt/fieldmask.js.map +1 -0
  122. package/dist/wkt/index.d.ts +4 -0
  123. package/dist/wkt/index.d.ts.map +1 -0
  124. package/dist/wkt/index.js +2 -0
  125. package/dist/wkt/index.js.map +1 -0
  126. package/dist/wkt/value.d.ts +13 -0
  127. package/dist/wkt/value.d.ts.map +1 -0
  128. package/dist/wkt/value.js +2 -0
  129. package/dist/wkt/value.js.map +1 -0
  130. package/package.json +80 -4
  131. package/src/api/execute.ts +102 -0
  132. package/src/api/index.ts +12 -0
  133. package/src/api/limiter.ts +8 -0
  134. package/src/api/options.ts +22 -0
  135. package/src/api/retrier.ts +108 -0
  136. package/src/apierror/apierror.ts +253 -0
  137. package/src/apierror/codes/codes.ts +189 -0
  138. package/src/apierror/codes/index.ts +7 -0
  139. package/src/apierror/details.ts +459 -0
  140. package/src/apierror/index.ts +24 -0
  141. package/src/clientinfo/agent.ts +131 -0
  142. package/src/clientinfo/base.ts +72 -0
  143. package/src/clientinfo/clientinfo.ts +129 -0
  144. package/src/clientinfo/default.browser.ts +24 -0
  145. package/src/clientinfo/default.ts +128 -0
  146. package/src/clientinfo/index.browser.ts +4 -0
  147. package/src/clientinfo/index.ts +4 -0
  148. package/src/http/http.ts +75 -0
  149. package/src/http/index.ts +8 -0
  150. package/src/index.ts +5 -0
  151. package/src/logger/index.ts +8 -0
  152. package/src/logger/logger.ts +99 -0
  153. package/src/profiles/errors.ts +28 -0
  154. package/src/profiles/index.browser.ts +10 -0
  155. package/src/profiles/index.ts +15 -0
  156. package/src/profiles/ini.ts +126 -0
  157. package/src/profiles/profile.ts +467 -0
  158. package/src/profiles/resolve.ts +251 -0
  159. package/src/profiles/secret.ts +40 -0
  160. package/src/wkt/fieldmask.ts +89 -0
  161. package/src/wkt/index.ts +3 -0
  162. package/src/wkt/value.ts +19 -0
  163. package/index.js +0 -1
package/README.md CHANGED
@@ -1 +1,11 @@
1
- This is a placeholder release used to enable OIDC trusted publishing. Real code lands in a later version.
1
+ # Databricks SDK Core for JavaScript
2
+
3
+ > [!WARNING]
4
+ > ## PREVIEW - NOT FOR PRODUCTION USE
5
+ >
6
+ > **This SDK is in preview and is subject to change without notice.**
7
+ >
8
+ > - **Do NOT use in production environments**
9
+ > - **Breaking changes may occur at any time**
10
+ > - **APIs are experimental and unstable**
11
+ > - **Use for development and testing only**
@@ -0,0 +1,12 @@
1
+ import type { Options } from './options';
2
+ /** Call represents a call to a Databricks API. */
3
+ export type Call = (signal?: AbortSignal) => Promise<void>;
4
+ /**
5
+ * Sleeps for the given duration. It is mostly equivalent to setTimeout, but
6
+ * can be interrupted by the AbortSignal if the signal aborts before the
7
+ * duration elapses.
8
+ */
9
+ export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
10
+ /** Makes a call to a Databricks API using the given options. */
11
+ export declare function execute(signal: AbortSignal | undefined, call: Call, options?: Options): Promise<void>;
12
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/api/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAGvC,kDAAkD;AAClD,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAO3D;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBrE;AAKD,gEAAgE;AAChE,wBAAsB,OAAO,CAC3B,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,77 @@
1
+ // Coerces an unknown value to an Error instance.
2
+ function toError(value) {
3
+ return value instanceof Error ? value : new Error(String(value));
4
+ }
5
+ /**
6
+ * Sleeps for the given duration. It is mostly equivalent to setTimeout, but
7
+ * can be interrupted by the AbortSignal if the signal aborts before the
8
+ * duration elapses.
9
+ */
10
+ export function sleep(ms, signal) {
11
+ return new Promise((resolve, reject) => {
12
+ if (signal?.aborted === true) {
13
+ reject(toError(signal.reason));
14
+ return;
15
+ }
16
+ if (signal === undefined) {
17
+ setTimeout(resolve, ms);
18
+ return;
19
+ }
20
+ const onAbort = () => {
21
+ clearTimeout(timer);
22
+ reject(toError(signal.reason));
23
+ };
24
+ const timer = setTimeout(() => {
25
+ signal.removeEventListener('abort', onAbort);
26
+ resolve();
27
+ }, ms);
28
+ signal.addEventListener('abort', onAbort, { once: true });
29
+ });
30
+ }
31
+ /** Makes a call to a Databricks API using the given options. */
32
+ export async function execute(signal, call, options) {
33
+ const opts = { ...options };
34
+ return executeImpl(signal, call, opts, sleep);
35
+ }
36
+ /**
37
+ * The actual implementation of execute. Its purpose is to ease testing by
38
+ * providing a convenient way to mock the sleeping logic.
39
+ */
40
+ async function executeImpl(signal, apiCall, opts, sleep) {
41
+ // Optionally combine the signal with a timeout signal. If the signal
42
+ // already has a deadline, that deadline is updated to the minimum of the
43
+ // signal's deadline and the timeout.
44
+ if (opts.timeout !== undefined && opts.timeout > 0) {
45
+ const timeoutSignal = AbortSignal.timeout(opts.timeout);
46
+ signal = signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
47
+ }
48
+ // Get a new retrier for this specific execution. This is instantiated
49
+ // lazily if and when the first call execution returns an error.
50
+ let retrier;
51
+ for (;;) {
52
+ if (opts.rateLimiter) {
53
+ await opts.rateLimiter.wait(signal);
54
+ }
55
+ try {
56
+ await apiCall(signal);
57
+ return; // Nothing to retry.
58
+ }
59
+ catch (err) {
60
+ const error = toError(err);
61
+ if (retrier === undefined) {
62
+ if (opts.retrier) {
63
+ retrier = opts.retrier(); // Lazily instantiate the retrier.
64
+ }
65
+ if (retrier === undefined) {
66
+ throw error; // No retrier == no retry.
67
+ }
68
+ }
69
+ const delay = retrier.isRetriable(error);
70
+ if (delay === undefined) {
71
+ throw error; // Not retriable.
72
+ }
73
+ await sleep(delay, signal);
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/api/execute.ts"],"names":[],"mappings":"AAMA,iDAAiD;AACjD,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IACpD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC;AAKD,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAA+B,EAC/B,IAAU,EACV,OAAiB;IAEjB,MAAM,IAAI,GAAY,EAAC,GAAG,OAAO,EAAC,CAAC;IACnC,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,WAAW,CACxB,MAA+B,EAC/B,OAAa,EACb,IAAa,EACb,KAAc;IAEd,qEAAqE;IACrE,yEAAyE;IACzE,qCAAqC;IACrC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAC7E,CAAC;IAED,sEAAsE;IACtE,gEAAgE;IAChE,IAAI,OAA4B,CAAC;IAEjC,SAAS,CAAC;QACR,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YACtB,OAAO,CAAC,oBAAoB;QAC9B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAE3B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,kCAAkC;gBAC9D,CAAC;gBACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,MAAM,KAAK,CAAC,CAAC,0BAA0B;gBACzC,CAAC;YACH,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,KAAK,CAAC,CAAC,iBAAiB;YAChC,CAAC;YAED,MAAM,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Databricks API client utilities.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export { execute } from './execute';
7
+ export type { Call } from './execute';
8
+ export type { Limiter } from './limiter';
9
+ export type { Options } from './options';
10
+ export { BackoffPolicy, retryOn } from './retrier';
11
+ export type { BackoffPolicyOptions, Retrier } from './retrier';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,YAAY,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AACpC,YAAY,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AACvC,YAAY,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC;AACjD,YAAY,EAAC,oBAAoB,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Databricks API client utilities.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export { execute } from './execute';
7
+ export { BackoffPolicy, retryOn } from './retrier';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAIlC,OAAO,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Limiter is anything that can wait. It is typically used to implement
3
+ * client-side rate limiting. Implementations of this interface must be
4
+ * safe to call concurrently.
5
+ */
6
+ export interface Limiter {
7
+ wait(signal?: AbortSignal): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limiter.d.ts","sourceRoot":"","sources":["../../src/api/limiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limiter.js","sourceRoot":"","sources":["../../src/api/limiter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import type { Limiter } from './limiter';
2
+ import type { Retrier } from './retrier';
3
+ /** Options to control the behavior of an API call. */
4
+ export interface Options {
5
+ /**
6
+ * Provides a new Retrier to be used to execute a Call. The function is
7
+ * called for each Call and must be safe to call concurrently. The retrier
8
+ * must be fresh within the context of an execute call (e.g. no need to
9
+ * reset a BackoffPolicy).
10
+ */
11
+ retrier?: (() => Retrier) | undefined;
12
+ /** The rate limiter used to potentially rate limit the API call. */
13
+ rateLimiter?: Limiter | undefined;
14
+ /**
15
+ * Timeout duration in milliseconds. If the signal already has a deadline,
16
+ * that deadline is updated to the minimum of the signal's deadline and the
17
+ * timeout. The timeout covers the whole Call execution; it is not a timeout
18
+ * for each intermediary API call.
19
+ */
20
+ timeout?: number | undefined;
21
+ }
22
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/api/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAEvC,sDAAsD;AACtD,MAAM,WAAW,OAAO;IACtB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,SAAS,CAAC;IACtC,oEAAoE;IACpE,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/api/options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ /** Options for configuring a {@link BackoffPolicy}. */
2
+ export interface BackoffPolicyOptions {
3
+ /** Initial delay in milliseconds; defaults to 1000. */
4
+ initial?: number;
5
+ /** Maximum delay in milliseconds; defaults to 60000. */
6
+ maximum?: number;
7
+ /**
8
+ * Factor by which the delay is multiplied after each retry. The value must
9
+ * be greater or equal to 1. If not, it defaults to 2.
10
+ */
11
+ factor?: number;
12
+ }
13
+ export declare const rand: {
14
+ int(n: number): number;
15
+ };
16
+ /**
17
+ * BackoffPolicy implements an exponential backoff policy. The delay between
18
+ * retries is randomly computed between 0 and the "exponential delay" as
19
+ * recommended in [Exponential Backoff And Jitter]. The retry delay starts from
20
+ * initial and grows exponentially by factor at every retry. The maximum retry
21
+ * delay is capped by maximum.
22
+ *
23
+ * There is no parameter to limit the number of retries. This is intended as
24
+ * such logic should be implemented upstream (e.g. in a Retrier).
25
+ *
26
+ * [Exponential Backoff And Jitter]: https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/
27
+ */
28
+ export declare class BackoffPolicy {
29
+ /** Initial delay in milliseconds. */
30
+ readonly initial: number;
31
+ /** Maximum delay in milliseconds. */
32
+ readonly maximum: number;
33
+ /** Factor by which the delay is multiplied after each retry. */
34
+ readonly factor: number;
35
+ private current;
36
+ constructor(options?: BackoffPolicyOptions);
37
+ /** Returns a random delay in [0, current] and grows the current delay. */
38
+ delay(): number;
39
+ }
40
+ /** Retrier defines a retry behavior. */
41
+ export interface Retrier {
42
+ /**
43
+ * Returns the delay in milliseconds before the next retry, or undefined if
44
+ * the error is not retriable. Implementations should assume that the given
45
+ * error is never undefined.
46
+ */
47
+ isRetriable(err: Error): number | undefined;
48
+ }
49
+ /**
50
+ * Returns a Retrier that retries based on the isRetriable predicate and relies
51
+ * on an internal backoff policy to decide how long to wait between retries.
52
+ *
53
+ * Important: the retrier has its own backoff policy which cannot be trivially
54
+ * reset by design. Users who need to reset the backoff policy should rather
55
+ * create a new retrier.
56
+ */
57
+ export declare function retryOn(options: BackoffPolicyOptions, isRetriable: (err: Error) => boolean): Retrier;
58
+ //# sourceMappingURL=retrier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrier.d.ts","sourceRoot":"","sources":["../../src/api/retrier.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAGD,eAAO,MAAM,IAAI;WAER,MAAM,GAAG,MAAM;CAGvB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IACxB,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAGxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,oBAAoB;IAgB1C,0EAA0E;IAC1E,KAAK,IAAI,MAAM;CAShB;AAED,wCAAwC;AACxC,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,oBAAoB,EAC7B,WAAW,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,GACnC,OAAO,CAUT"}
@@ -0,0 +1,70 @@
1
+ // Random number generation, wrapped in an object for testability.
2
+ export const rand = {
3
+ // Returns a random integer in [0, n).
4
+ int(n) {
5
+ return Math.floor(Math.random() * n);
6
+ },
7
+ };
8
+ /**
9
+ * BackoffPolicy implements an exponential backoff policy. The delay between
10
+ * retries is randomly computed between 0 and the "exponential delay" as
11
+ * recommended in [Exponential Backoff And Jitter]. The retry delay starts from
12
+ * initial and grows exponentially by factor at every retry. The maximum retry
13
+ * delay is capped by maximum.
14
+ *
15
+ * There is no parameter to limit the number of retries. This is intended as
16
+ * such logic should be implemented upstream (e.g. in a Retrier).
17
+ *
18
+ * [Exponential Backoff And Jitter]: https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/
19
+ */
20
+ export class BackoffPolicy {
21
+ /** Initial delay in milliseconds. */
22
+ initial;
23
+ /** Maximum delay in milliseconds. */
24
+ maximum;
25
+ /** Factor by which the delay is multiplied after each retry. */
26
+ factor;
27
+ // Current delay before the next retry.
28
+ current;
29
+ constructor(options) {
30
+ let initial = options?.initial ?? 1000; // Default initial delay of 1 second.
31
+ const maximum = options?.maximum ?? 60000; // Default maximum delay of 60 seconds.
32
+ if (initial > maximum) {
33
+ // Initial cannot be greater than maximum.
34
+ initial = maximum;
35
+ }
36
+ this.initial = initial;
37
+ this.maximum = maximum;
38
+ this.factor =
39
+ options?.factor !== undefined && options.factor >= 1 ? options.factor : 2;
40
+ this.current = this.initial;
41
+ }
42
+ /** Returns a random delay in [0, current] and grows the current delay. */
43
+ delay() {
44
+ // Random duration in the range [0, this.current].
45
+ const d = rand.int(this.current + 1);
46
+ // Grow delay for the next call.
47
+ this.current = Math.min(this.current * this.factor, this.maximum);
48
+ return d;
49
+ }
50
+ }
51
+ /**
52
+ * Returns a Retrier that retries based on the isRetriable predicate and relies
53
+ * on an internal backoff policy to decide how long to wait between retries.
54
+ *
55
+ * Important: the retrier has its own backoff policy which cannot be trivially
56
+ * reset by design. Users who need to reset the backoff policy should rather
57
+ * create a new retrier.
58
+ */
59
+ export function retryOn(options, isRetriable) {
60
+ const bp = new BackoffPolicy(options);
61
+ return {
62
+ isRetriable(err) {
63
+ if (!isRetriable(err)) {
64
+ return undefined;
65
+ }
66
+ return bp.delay();
67
+ },
68
+ };
69
+ }
70
+ //# sourceMappingURL=retrier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrier.js","sourceRoot":"","sources":["../../src/api/retrier.ts"],"names":[],"mappings":"AAeA,kEAAkE;AAClE,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,sCAAsC;IACtC,GAAG,CAAC,CAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,aAAa;IACxB,qCAAqC;IAC5B,OAAO,CAAS;IAEzB,qCAAqC;IAC5B,OAAO,CAAS;IAEzB,gEAAgE;IACvD,MAAM,CAAS;IAExB,uCAAuC;IAC/B,OAAO,CAAS;IAExB,YAAY,OAA8B;QACxC,IAAI,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,qCAAqC;QAC7E,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC,uCAAuC;QAElF,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;YACtB,0CAA0C;YAC1C,OAAO,GAAG,OAAO,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM;YACT,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,0EAA0E;IAC1E,KAAK;QACH,kDAAkD;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAErC,gCAAgC;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAElE,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAYD;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CACrB,OAA6B,EAC7B,WAAoC;IAEpC,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO;QACL,WAAW,CAAC,GAAU;YACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { Code } from './codes';
2
+ import type { ErrorDetails } from './details';
3
+ interface APIErrorOptions {
4
+ code: Code;
5
+ message: string;
6
+ details: ErrorDetails;
7
+ httpStatusCode?: number | undefined;
8
+ httpHeader?: Headers | undefined;
9
+ httpBody?: Uint8Array | undefined;
10
+ cause?: unknown;
11
+ }
12
+ /** APIError is a transport-agnostic error representing a Databricks API error. */
13
+ export declare class APIError extends Error {
14
+ /** The canonical error code of the error. */
15
+ readonly code: Code;
16
+ /**
17
+ * The structured error details of the error. This is left empty if the
18
+ * error response is not a standard Databricks API error.
19
+ */
20
+ readonly details: ErrorDetails;
21
+ private readonly httpErr?;
22
+ /**
23
+ * Do not use this constructor directly. Use {@link APIError.fromHttpError}
24
+ * instead. This constructor is only meant for internal and testing use.
25
+ * TODO: Make this constructor private.
26
+ *
27
+ * @private
28
+ */
29
+ constructor(options: APIErrorOptions);
30
+ /**
31
+ * HTTPStatusCode returns the APIError's HTTP status code. If the APIError
32
+ * is not an HTTP error, it returns -1.
33
+ */
34
+ get httpStatusCode(): number;
35
+ /**
36
+ * HTTPHeader returns the APIError's HTTP headers. If the APIError is not
37
+ * an HTTP error, it returns undefined.
38
+ */
39
+ get httpHeader(): Headers | undefined;
40
+ /**
41
+ * HTTPBody returns the APIError's HTTP body. If the APIError is not an HTTP
42
+ * error, it returns undefined.
43
+ */
44
+ get httpBody(): Uint8Array | undefined;
45
+ /**
46
+ * Parses an HTTP error response into an APIError. Returns undefined if the
47
+ * status code is 2xx.
48
+ */
49
+ static fromHttpError(statusCode: number, header: Headers | undefined, body: Uint8Array | undefined): APIError | undefined;
50
+ }
51
+ export declare function toCode(httpCode: number): Code;
52
+ export {};
53
+ //# sourceMappingURL=apierror.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apierror.d.ts","sourceRoot":"","sources":["../../src/apierror/apierror.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,IAAI,EAAiB,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AA8B5C,UAAU,eAAe;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,kFAAkF;AAClF,qBAAa,QAAS,SAAQ,KAAK;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAG/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAIvB;IAEF;;;;;;OAMG;gBACS,OAAO,EAAE,eAAe;IAcpC;;;OAGG;IACH,IAAI,cAAc,IAAI,MAAM,CAK3B;IAED;;;OAGG;IACH,IAAI,UAAU,IAAI,OAAO,GAAG,SAAS,CAKpC;IAED;;;OAGG;IACH,IAAI,QAAQ,IAAI,UAAU,GAAG,SAAS,CAKrC;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa,CAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,IAAI,EAAE,UAAU,GAAG,SAAS,GAC3B,QAAQ,GAAG,SAAS;CAmFxB;AAGD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CA2C7C"}
@@ -0,0 +1,217 @@
1
+ import { z } from 'zod';
2
+ import { Code, codeFromString } from './codes';
3
+ import { parseErrorDetails } from './details';
4
+ // Reusable schema fragment for nullish string fields.
5
+ const nullishString = z
6
+ .string()
7
+ .nullish()
8
+ .transform(v => v ?? '');
9
+ // Zod schema for parsing the JSON error response body. The schema is lenient
10
+ // to handle the various Databricks API error formats (standard, legacy, SCIM).
11
+ const errorResponseSchema = z.object({
12
+ message: nullishString,
13
+ details: z
14
+ .array(z.unknown())
15
+ .nullish()
16
+ .transform(v => v ?? []),
17
+ // Some Databricks APIs incorrectly return the HTTP status code as an
18
+ // integer rather than the actual error code as a string.
19
+ error_code: z.unknown().optional(),
20
+ // Legacy Databricks APIs (e.g. version 1.2 and earlier) used "error"
21
+ // instead of "message".
22
+ error: nullishString,
23
+ // SCIM error fields (RFC7644 section 3.7.3).
24
+ // The "status" field is intentionally omitted; it duplicates HTTP status.
25
+ detail: nullishString,
26
+ scimType: nullishString,
27
+ });
28
+ /** APIError is a transport-agnostic error representing a Databricks API error. */
29
+ export class APIError extends Error {
30
+ /** The canonical error code of the error. */
31
+ code;
32
+ /**
33
+ * The structured error details of the error. This is left empty if the
34
+ * error response is not a standard Databricks API error.
35
+ */
36
+ details;
37
+ // The raw HTTP error details, undefined if this is not an HTTP error.
38
+ httpErr;
39
+ /**
40
+ * Do not use this constructor directly. Use {@link APIError.fromHttpError}
41
+ * instead. This constructor is only meant for internal and testing use.
42
+ * TODO: Make this constructor private.
43
+ *
44
+ * @private
45
+ */
46
+ constructor(options) {
47
+ super(options.message, { cause: options.cause });
48
+ this.name = 'APIError';
49
+ this.code = options.code;
50
+ this.details = options.details;
51
+ if (options.httpStatusCode !== undefined) {
52
+ this.httpErr = {
53
+ statusCode: options.httpStatusCode,
54
+ header: options.httpHeader,
55
+ body: options.httpBody,
56
+ };
57
+ }
58
+ }
59
+ /**
60
+ * HTTPStatusCode returns the APIError's HTTP status code. If the APIError
61
+ * is not an HTTP error, it returns -1.
62
+ */
63
+ get httpStatusCode() {
64
+ if (this.httpErr === undefined) {
65
+ return -1;
66
+ }
67
+ return this.httpErr.statusCode;
68
+ }
69
+ /**
70
+ * HTTPHeader returns the APIError's HTTP headers. If the APIError is not
71
+ * an HTTP error, it returns undefined.
72
+ */
73
+ get httpHeader() {
74
+ if (this.httpErr === undefined) {
75
+ return undefined;
76
+ }
77
+ return this.httpErr.header;
78
+ }
79
+ /**
80
+ * HTTPBody returns the APIError's HTTP body. If the APIError is not an HTTP
81
+ * error, it returns undefined.
82
+ */
83
+ get httpBody() {
84
+ if (this.httpErr === undefined) {
85
+ return undefined;
86
+ }
87
+ return this.httpErr.body;
88
+ }
89
+ /**
90
+ * Parses an HTTP error response into an APIError. Returns undefined if the
91
+ * status code is 2xx.
92
+ */
93
+ static fromHttpError(statusCode, header, body) {
94
+ if (statusCode >= 200 && statusCode < 300) {
95
+ return undefined;
96
+ }
97
+ const emptyDetails = { unknownDetails: [] };
98
+ if (body === undefined || body.length === 0) {
99
+ return new APIError({
100
+ code: toCode(statusCode),
101
+ message: '',
102
+ details: emptyDetails,
103
+ httpStatusCode: statusCode,
104
+ httpHeader: header,
105
+ httpBody: body,
106
+ });
107
+ }
108
+ // Decode the body to a string for JSON parsing.
109
+ let parsed;
110
+ try {
111
+ parsed = JSON.parse(new TextDecoder().decode(body));
112
+ }
113
+ catch (e) {
114
+ // The JSON error is simply swallowed, this typically happens when the
115
+ // error does not come directly from a Databricks API. A typical example
116
+ // is when the error is returned by a proxy.
117
+ return new APIError({
118
+ code: toCode(statusCode),
119
+ message: '',
120
+ details: emptyDetails,
121
+ httpStatusCode: statusCode,
122
+ httpHeader: header,
123
+ httpBody: body,
124
+ cause: e instanceof Error ? e : undefined,
125
+ });
126
+ }
127
+ const result = errorResponseSchema.safeParse(parsed);
128
+ if (!result.success) {
129
+ return new APIError({
130
+ code: toCode(statusCode),
131
+ message: '',
132
+ details: emptyDetails,
133
+ httpStatusCode: statusCode,
134
+ httpHeader: header,
135
+ httpBody: body,
136
+ cause: result.error,
137
+ });
138
+ }
139
+ const errResp = result.data;
140
+ // Error codes may be missing or be an integer (legacy APIs). In such
141
+ // cases, defer to the HTTP status code to infer the closest canonical
142
+ // error code.
143
+ let errorCode;
144
+ if (typeof errResp.error_code === 'string') {
145
+ errorCode = codeFromString(errResp.error_code);
146
+ }
147
+ else {
148
+ errorCode = toCode(statusCode);
149
+ }
150
+ // Determine the error message from available fields.
151
+ let errorMessage = '';
152
+ if (errResp.message !== '') {
153
+ errorMessage = errResp.message;
154
+ }
155
+ else if (errResp.error !== '') {
156
+ errorMessage = errResp.error;
157
+ }
158
+ else if (errResp.detail !== '') {
159
+ errorMessage = errResp.detail;
160
+ }
161
+ else if (errResp.scimType !== '') {
162
+ errorMessage = errResp.scimType;
163
+ }
164
+ return new APIError({
165
+ code: errorCode,
166
+ message: errorMessage,
167
+ details: parseErrorDetails(errResp.details),
168
+ httpStatusCode: statusCode,
169
+ httpHeader: header,
170
+ httpBody: body,
171
+ });
172
+ }
173
+ }
174
+ // Maps an HTTP status code to the closest canonical error code.
175
+ export function toCode(httpCode) {
176
+ // Canonical mappings.
177
+ switch (httpCode) {
178
+ case 200:
179
+ return Code.OK;
180
+ case 400:
181
+ return Code.INVALID_ARGUMENT;
182
+ case 401:
183
+ return Code.UNAUTHENTICATED;
184
+ case 403:
185
+ return Code.PERMISSION_DENIED;
186
+ case 404:
187
+ return Code.NOT_FOUND;
188
+ case 409:
189
+ return Code.ABORTED;
190
+ case 416:
191
+ return Code.OUT_OF_RANGE;
192
+ case 429:
193
+ return Code.RESOURCE_EXHAUSTED;
194
+ case 501:
195
+ return Code.UNIMPLEMENTED;
196
+ case 503:
197
+ return Code.UNAVAILABLE;
198
+ case 504:
199
+ return Code.DEADLINE_EXCEEDED;
200
+ default:
201
+ break;
202
+ }
203
+ // Fallback for status codes without a direct canonical mapping.
204
+ if (httpCode >= 200 && httpCode < 300) {
205
+ return Code.OK;
206
+ }
207
+ if (httpCode >= 400 && httpCode < 500) {
208
+ // Most non-canonical 4xx status codes are state related and map
209
+ // to the definition of FailedPrecondition.
210
+ return Code.FAILED_PRECONDITION;
211
+ }
212
+ if (httpCode >= 500 && httpCode < 600) {
213
+ return Code.INTERNAL;
214
+ }
215
+ return Code.UNKNOWN;
216
+ }
217
+ //# sourceMappingURL=apierror.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apierror.js","sourceRoot":"","sources":["../../src/apierror/apierror.ts"],"names":[],"mappings":"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"}