@timeback/core 0.1.4 → 0.1.6-beta.20260219190739

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/dist/errors.js CHANGED
@@ -1,20 +1,4 @@
1
- import { createRequire } from "node:module";
2
- var __create = Object.create;
3
- var __getProtoOf = Object.getPrototypeOf;
4
1
  var __defProp = Object.defineProperty;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __toESM = (mod, isNodeMode, target) => {
8
- target = mod != null ? __create(__getProtoOf(mod)) : {};
9
- const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
- for (let key of __getOwnPropNames(mod))
11
- if (!__hasOwnProp.call(to, key))
12
- __defProp(to, key, {
13
- get: () => mod[key],
14
- enumerable: true
15
- });
16
- return to;
17
- };
18
2
  var __export = (target, all) => {
19
3
  for (var name in all)
20
4
  __defProp(target, name, {
@@ -24,7 +8,417 @@ var __export = (target, all) => {
24
8
  set: (newValue) => all[name] = () => newValue
25
9
  });
26
10
  };
27
- var __require = /* @__PURE__ */ createRequire(import.meta.url);
11
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
12
+
13
+ // node:util
14
+ var exports_util = {};
15
+ __export(exports_util, {
16
+ types: () => types,
17
+ promisify: () => promisify,
18
+ log: () => log,
19
+ isUndefined: () => isUndefined,
20
+ isSymbol: () => isSymbol,
21
+ isString: () => isString,
22
+ isRegExp: () => isRegExp,
23
+ isPrimitive: () => isPrimitive,
24
+ isObject: () => isObject,
25
+ isNumber: () => isNumber,
26
+ isNullOrUndefined: () => isNullOrUndefined,
27
+ isNull: () => isNull,
28
+ isFunction: () => isFunction,
29
+ isError: () => isError,
30
+ isDate: () => isDate,
31
+ isBuffer: () => isBuffer,
32
+ isBoolean: () => isBoolean,
33
+ isArray: () => isArray,
34
+ inspect: () => inspect,
35
+ inherits: () => inherits,
36
+ format: () => format,
37
+ deprecate: () => deprecate,
38
+ default: () => util_default,
39
+ debuglog: () => debuglog,
40
+ callbackifyOnRejected: () => callbackifyOnRejected,
41
+ callbackify: () => callbackify,
42
+ _extend: () => _extend,
43
+ TextEncoder: () => TextEncoder,
44
+ TextDecoder: () => TextDecoder
45
+ });
46
+ function format(f, ...args) {
47
+ if (!isString(f)) {
48
+ var objects = [f];
49
+ for (var i = 0;i < args.length; i++)
50
+ objects.push(inspect(args[i]));
51
+ return objects.join(" ");
52
+ }
53
+ var i = 0, len = args.length, str = String(f).replace(formatRegExp, function(x2) {
54
+ if (x2 === "%%")
55
+ return "%";
56
+ if (i >= len)
57
+ return x2;
58
+ switch (x2) {
59
+ case "%s":
60
+ return String(args[i++]);
61
+ case "%d":
62
+ return Number(args[i++]);
63
+ case "%j":
64
+ try {
65
+ return JSON.stringify(args[i++]);
66
+ } catch (_) {
67
+ return "[Circular]";
68
+ }
69
+ default:
70
+ return x2;
71
+ }
72
+ });
73
+ for (var x = args[i];i < len; x = args[++i])
74
+ if (isNull(x) || !isObject(x))
75
+ str += " " + x;
76
+ else
77
+ str += " " + inspect(x);
78
+ return str;
79
+ }
80
+ function deprecate(fn, msg) {
81
+ if (typeof process > "u" || process?.noDeprecation === true)
82
+ return fn;
83
+ var warned = false;
84
+ function deprecated(...args) {
85
+ if (!warned) {
86
+ if (process.throwDeprecation)
87
+ throw Error(msg);
88
+ else if (process.traceDeprecation)
89
+ console.trace(msg);
90
+ else
91
+ console.error(msg);
92
+ warned = true;
93
+ }
94
+ return fn.apply(this, ...args);
95
+ }
96
+ return deprecated;
97
+ }
98
+ function stylizeWithColor(str, styleType) {
99
+ var style = inspect.styles[styleType];
100
+ if (style)
101
+ return "\x1B[" + inspect.colors[style][0] + "m" + str + "\x1B[" + inspect.colors[style][1] + "m";
102
+ else
103
+ return str;
104
+ }
105
+ function stylizeNoColor(str, styleType) {
106
+ return str;
107
+ }
108
+ function arrayToHash(array) {
109
+ var hash = {};
110
+ return array.forEach(function(val, idx) {
111
+ hash[val] = true;
112
+ }), hash;
113
+ }
114
+ function formatValue(ctx, value, recurseTimes) {
115
+ if (ctx.customInspect && value && isFunction(value.inspect) && value.inspect !== inspect && !(value.constructor && value.constructor.prototype === value)) {
116
+ var ret = value.inspect(recurseTimes, ctx);
117
+ if (!isString(ret))
118
+ ret = formatValue(ctx, ret, recurseTimes);
119
+ return ret;
120
+ }
121
+ var primitive = formatPrimitive(ctx, value);
122
+ if (primitive)
123
+ return primitive;
124
+ var keys = Object.keys(value), visibleKeys = arrayToHash(keys);
125
+ if (ctx.showHidden)
126
+ keys = Object.getOwnPropertyNames(value);
127
+ if (isError(value) && (keys.indexOf("message") >= 0 || keys.indexOf("description") >= 0))
128
+ return formatError(value);
129
+ if (keys.length === 0) {
130
+ if (isFunction(value)) {
131
+ var name = value.name ? ": " + value.name : "";
132
+ return ctx.stylize("[Function" + name + "]", "special");
133
+ }
134
+ if (isRegExp(value))
135
+ return ctx.stylize(RegExp.prototype.toString.call(value), "regexp");
136
+ if (isDate(value))
137
+ return ctx.stylize(Date.prototype.toString.call(value), "date");
138
+ if (isError(value))
139
+ return formatError(value);
140
+ }
141
+ var base = "", array = false, braces = ["{", "}"];
142
+ if (isArray(value))
143
+ array = true, braces = ["[", "]"];
144
+ if (isFunction(value)) {
145
+ var n = value.name ? ": " + value.name : "";
146
+ base = " [Function" + n + "]";
147
+ }
148
+ if (isRegExp(value))
149
+ base = " " + RegExp.prototype.toString.call(value);
150
+ if (isDate(value))
151
+ base = " " + Date.prototype.toUTCString.call(value);
152
+ if (isError(value))
153
+ base = " " + formatError(value);
154
+ if (keys.length === 0 && (!array || value.length == 0))
155
+ return braces[0] + base + braces[1];
156
+ if (recurseTimes < 0)
157
+ if (isRegExp(value))
158
+ return ctx.stylize(RegExp.prototype.toString.call(value), "regexp");
159
+ else
160
+ return ctx.stylize("[Object]", "special");
161
+ ctx.seen.push(value);
162
+ var output;
163
+ if (array)
164
+ output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
165
+ else
166
+ output = keys.map(function(key) {
167
+ return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
168
+ });
169
+ return ctx.seen.pop(), reduceToSingleString(output, base, braces);
170
+ }
171
+ function formatPrimitive(ctx, value) {
172
+ if (isUndefined(value))
173
+ return ctx.stylize("undefined", "undefined");
174
+ if (isString(value)) {
175
+ var simple = "'" + JSON.stringify(value).replace(/^"|"$/g, "").replace(/'/g, "\\'").replace(/\\"/g, '"') + "'";
176
+ return ctx.stylize(simple, "string");
177
+ }
178
+ if (isNumber(value))
179
+ return ctx.stylize("" + value, "number");
180
+ if (isBoolean(value))
181
+ return ctx.stylize("" + value, "boolean");
182
+ if (isNull(value))
183
+ return ctx.stylize("null", "null");
184
+ }
185
+ function formatError(value) {
186
+ return "[" + Error.prototype.toString.call(value) + "]";
187
+ }
188
+ function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
189
+ var output = [];
190
+ for (var i = 0, l = value.length;i < l; ++i)
191
+ if (hasOwnProperty(value, String(i)))
192
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true));
193
+ else
194
+ output.push("");
195
+ return keys.forEach(function(key) {
196
+ if (!key.match(/^\d+$/))
197
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true));
198
+ }), output;
199
+ }
200
+ function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
201
+ var name, str, desc;
202
+ if (desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }, desc.get)
203
+ if (desc.set)
204
+ str = ctx.stylize("[Getter/Setter]", "special");
205
+ else
206
+ str = ctx.stylize("[Getter]", "special");
207
+ else if (desc.set)
208
+ str = ctx.stylize("[Setter]", "special");
209
+ if (!hasOwnProperty(visibleKeys, key))
210
+ name = "[" + key + "]";
211
+ if (!str)
212
+ if (ctx.seen.indexOf(desc.value) < 0) {
213
+ if (isNull(recurseTimes))
214
+ str = formatValue(ctx, desc.value, null);
215
+ else
216
+ str = formatValue(ctx, desc.value, recurseTimes - 1);
217
+ if (str.indexOf(`
218
+ `) > -1)
219
+ if (array)
220
+ str = str.split(`
221
+ `).map(function(line) {
222
+ return " " + line;
223
+ }).join(`
224
+ `).slice(2);
225
+ else
226
+ str = `
227
+ ` + str.split(`
228
+ `).map(function(line) {
229
+ return " " + line;
230
+ }).join(`
231
+ `);
232
+ } else
233
+ str = ctx.stylize("[Circular]", "special");
234
+ if (isUndefined(name)) {
235
+ if (array && key.match(/^\d+$/))
236
+ return str;
237
+ if (name = JSON.stringify("" + key), name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/))
238
+ name = name.slice(1, -1), name = ctx.stylize(name, "name");
239
+ else
240
+ name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"), name = ctx.stylize(name, "string");
241
+ }
242
+ return name + ": " + str;
243
+ }
244
+ function reduceToSingleString(output, base, braces) {
245
+ var numLinesEst = 0, length = output.reduce(function(prev, cur) {
246
+ if (numLinesEst++, cur.indexOf(`
247
+ `) >= 0)
248
+ numLinesEst++;
249
+ return prev + cur.replace(/\u001b\[\d\d?m/g, "").length + 1;
250
+ }, 0);
251
+ if (length > 60)
252
+ return braces[0] + (base === "" ? "" : base + `
253
+ `) + " " + output.join(`,
254
+ `) + " " + braces[1];
255
+ return braces[0] + base + " " + output.join(", ") + " " + braces[1];
256
+ }
257
+ function isArray(ar) {
258
+ return Array.isArray(ar);
259
+ }
260
+ function isBoolean(arg) {
261
+ return typeof arg === "boolean";
262
+ }
263
+ function isNull(arg) {
264
+ return arg === null;
265
+ }
266
+ function isNullOrUndefined(arg) {
267
+ return arg == null;
268
+ }
269
+ function isNumber(arg) {
270
+ return typeof arg === "number";
271
+ }
272
+ function isString(arg) {
273
+ return typeof arg === "string";
274
+ }
275
+ function isSymbol(arg) {
276
+ return typeof arg === "symbol";
277
+ }
278
+ function isUndefined(arg) {
279
+ return arg === undefined;
280
+ }
281
+ function isRegExp(re) {
282
+ return isObject(re) && objectToString(re) === "[object RegExp]";
283
+ }
284
+ function isObject(arg) {
285
+ return typeof arg === "object" && arg !== null;
286
+ }
287
+ function isDate(d) {
288
+ return isObject(d) && objectToString(d) === "[object Date]";
289
+ }
290
+ function isError(e) {
291
+ return isObject(e) && (objectToString(e) === "[object Error]" || e instanceof Error);
292
+ }
293
+ function isFunction(arg) {
294
+ return typeof arg === "function";
295
+ }
296
+ function isPrimitive(arg) {
297
+ return arg === null || typeof arg === "boolean" || typeof arg === "number" || typeof arg === "string" || typeof arg === "symbol" || typeof arg > "u";
298
+ }
299
+ function isBuffer(arg) {
300
+ return arg instanceof Buffer;
301
+ }
302
+ function objectToString(o) {
303
+ return Object.prototype.toString.call(o);
304
+ }
305
+ function pad(n) {
306
+ return n < 10 ? "0" + n.toString(10) : n.toString(10);
307
+ }
308
+ function timestamp() {
309
+ var d = new Date, time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(":");
310
+ return [d.getDate(), months[d.getMonth()], time].join(" ");
311
+ }
312
+ function log(...args) {
313
+ console.log("%s - %s", timestamp(), format.apply(null, args));
314
+ }
315
+ function inherits(ctor, superCtor) {
316
+ if (superCtor)
317
+ ctor.super_ = superCtor, ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } });
318
+ }
319
+ function _extend(origin, add) {
320
+ if (!add || !isObject(add))
321
+ return origin;
322
+ var keys = Object.keys(add), i = keys.length;
323
+ while (i--)
324
+ origin[keys[i]] = add[keys[i]];
325
+ return origin;
326
+ }
327
+ function hasOwnProperty(obj, prop) {
328
+ return Object.prototype.hasOwnProperty.call(obj, prop);
329
+ }
330
+ function callbackifyOnRejected(reason, cb) {
331
+ if (!reason) {
332
+ var newReason = Error("Promise was rejected with a falsy value");
333
+ newReason.reason = reason, reason = newReason;
334
+ }
335
+ return cb(reason);
336
+ }
337
+ function callbackify(original) {
338
+ if (typeof original !== "function")
339
+ throw TypeError('The "original" argument must be of type Function');
340
+ function callbackified(...args) {
341
+ var maybeCb = args.pop();
342
+ if (typeof maybeCb !== "function")
343
+ throw TypeError("The last argument must be of type Function");
344
+ var self = this, cb = function(...args2) {
345
+ return maybeCb.apply(self, ...args2);
346
+ };
347
+ original.apply(this, args).then(function(ret) {
348
+ process.nextTick(cb.bind(null, null, ret));
349
+ }, function(rej) {
350
+ process.nextTick(callbackifyOnRejected.bind(null, rej, cb));
351
+ });
352
+ }
353
+ return Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original)), Object.defineProperties(callbackified, Object.getOwnPropertyDescriptors(original)), callbackified;
354
+ }
355
+ var formatRegExp, debuglog, inspect, types = () => {}, months, promisify, TextEncoder, TextDecoder, util_default;
356
+ var init_util = __esm(() => {
357
+ formatRegExp = /%[sdj%]/g;
358
+ debuglog = ((debugs = {}, debugEnvRegex = {}, debugEnv) => ((debugEnv = typeof process < "u" && false) && (debugEnv = debugEnv.replace(/[|\\{}()[\]^$+?.]/g, "\\$&").replace(/\*/g, ".*").replace(/,/g, "$|^").toUpperCase()), debugEnvRegex = new RegExp("^" + debugEnv + "$", "i"), (set) => {
359
+ if (set = set.toUpperCase(), !debugs[set])
360
+ if (debugEnvRegex.test(set))
361
+ debugs[set] = function(...args) {
362
+ console.error("%s: %s", set, pid, format.apply(null, ...args));
363
+ };
364
+ else
365
+ debugs[set] = function() {};
366
+ return debugs[set];
367
+ }))();
368
+ inspect = ((i) => (i.colors = { bold: [1, 22], italic: [3, 23], underline: [4, 24], inverse: [7, 27], white: [37, 39], grey: [90, 39], black: [30, 39], blue: [34, 39], cyan: [36, 39], green: [32, 39], magenta: [35, 39], red: [31, 39], yellow: [33, 39] }, i.styles = { special: "cyan", number: "yellow", boolean: "yellow", undefined: "grey", null: "bold", string: "green", date: "magenta", regexp: "red" }, i.custom = Symbol.for("nodejs.util.inspect.custom"), i))(function(obj, opts, ...rest) {
369
+ var ctx = { seen: [], stylize: stylizeNoColor };
370
+ if (rest.length >= 1)
371
+ ctx.depth = rest[0];
372
+ if (rest.length >= 2)
373
+ ctx.colors = rest[1];
374
+ if (isBoolean(opts))
375
+ ctx.showHidden = opts;
376
+ else if (opts)
377
+ _extend(ctx, opts);
378
+ if (isUndefined(ctx.showHidden))
379
+ ctx.showHidden = false;
380
+ if (isUndefined(ctx.depth))
381
+ ctx.depth = 2;
382
+ if (isUndefined(ctx.colors))
383
+ ctx.colors = false;
384
+ if (ctx.colors)
385
+ ctx.stylize = stylizeWithColor;
386
+ return formatValue(ctx, obj, ctx.depth);
387
+ });
388
+ months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
389
+ promisify = ((x) => (x.custom = Symbol.for("nodejs.util.promisify.custom"), x))(function(original) {
390
+ if (typeof original !== "function")
391
+ throw TypeError('The "original" argument must be of type Function');
392
+ if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {
393
+ var fn = original[kCustomPromisifiedSymbol];
394
+ if (typeof fn !== "function")
395
+ throw TypeError('The "nodejs.util.promisify.custom" argument must be of type Function');
396
+ return Object.defineProperty(fn, kCustomPromisifiedSymbol, { value: fn, enumerable: false, writable: false, configurable: true }), fn;
397
+ }
398
+ function fn(...args) {
399
+ var promiseResolve, promiseReject, promise = new Promise(function(resolve, reject) {
400
+ promiseResolve = resolve, promiseReject = reject;
401
+ });
402
+ args.push(function(err, value) {
403
+ if (err)
404
+ promiseReject(err);
405
+ else
406
+ promiseResolve(value);
407
+ });
408
+ try {
409
+ original.apply(this, args);
410
+ } catch (err) {
411
+ promiseReject(err);
412
+ }
413
+ return promise;
414
+ }
415
+ if (Object.setPrototypeOf(fn, Object.getPrototypeOf(original)), kCustomPromisifiedSymbol)
416
+ Object.defineProperty(fn, kCustomPromisifiedSymbol, { value: fn, enumerable: false, writable: false, configurable: true });
417
+ return Object.defineProperties(fn, Object.getOwnPropertyDescriptors(original));
418
+ });
419
+ ({ TextEncoder, TextDecoder } = globalThis);
420
+ util_default = { TextEncoder, TextDecoder, promisify, log, inherits, _extend, callbackifyOnRejected, callbackify };
421
+ });
28
422
 
29
423
  // ../../internal/constants/src/endpoints.ts
30
424
  var DEFAULT_PLATFORM = "BEYOND_AI";
@@ -180,7 +574,7 @@ function detectEnvironment() {
180
574
  var nodeInspect;
181
575
  if (!isBrowser()) {
182
576
  try {
183
- const util = await import("node:util");
577
+ const util = await Promise.resolve().then(() => (init_util(), exports_util));
184
578
  nodeInspect = util.inspect;
185
579
  } catch {}
186
580
  }
@@ -233,10 +627,10 @@ var terminalFormatter = (entry) => {
233
627
  const consoleMethod = getConsoleMethod(entry.level);
234
628
  const levelUpper = entry.level.toUpperCase().padEnd(5);
235
629
  const isoString = entry.timestamp.toISOString().replace(/\.\d{3}Z$/, "");
236
- const timestamp = `${colors.dim}[${isoString}]${colors.reset}`;
630
+ const timestamp2 = `${colors.dim}[${isoString}]${colors.reset}`;
237
631
  const level = `${levelColor}${levelUpper}${colors.reset}`;
238
632
  const scope = entry.scope ? `${colors.bold}[${entry.scope}]${colors.reset} ` : "";
239
- const prefix = `${timestamp} ${level} ${scope}${entry.message}`;
633
+ const prefix = `${timestamp2} ${level} ${scope}${entry.message}`;
240
634
  if (entry.context && Object.keys(entry.context).length > 0) {
241
635
  consoleMethod(prefix, formatContext(entry.context));
242
636
  } else {
@@ -251,9 +645,9 @@ var LEVEL_PREFIX = {
251
645
  error: "[ERROR]"
252
646
  };
253
647
  function formatContext2(context) {
254
- return Object.entries(context).map(([key, value]) => `${key}=${formatValue(value)}`).join(" ");
648
+ return Object.entries(context).map(([key, value]) => `${key}=${formatValue2(value)}`).join(" ");
255
649
  }
256
- function formatValue(value) {
650
+ function formatValue2(value) {
257
651
  if (typeof value === "string")
258
652
  return value;
259
653
  if (typeof value === "number")
@@ -413,7 +807,7 @@ function isDebug() {
413
807
  return false;
414
808
  }
415
809
  }
416
- var log = createLogger({ scope: "auth", minLevel: isDebug() ? "debug" : "warn" });
810
+ var log2 = createLogger({ scope: "auth", minLevel: isDebug() ? "debug" : "warn" });
417
811
 
418
812
  class TokenManager {
419
813
  config;
@@ -427,11 +821,11 @@ class TokenManager {
427
821
  }
428
822
  async getToken() {
429
823
  if (this.accessToken && Date.now() < this.tokenExpiry) {
430
- log.debug("Using cached token");
824
+ log2.debug("Using cached token");
431
825
  return this.accessToken;
432
826
  }
433
827
  if (this.pendingRequest) {
434
- log.debug("Waiting for in-flight token request");
828
+ log2.debug("Waiting for in-flight token request");
435
829
  return this.pendingRequest;
436
830
  }
437
831
  this.pendingRequest = this.fetchToken();
@@ -442,7 +836,7 @@ class TokenManager {
442
836
  }
443
837
  }
444
838
  async fetchToken() {
445
- log.debug("Fetching new access token...");
839
+ log2.debug("Fetching new access token...");
446
840
  const { clientId, clientSecret } = this.config.credentials;
447
841
  const credentials = btoa(`${clientId}:${clientSecret}`);
448
842
  const start = performance.now();
@@ -456,17 +850,17 @@ class TokenManager {
456
850
  });
457
851
  const duration = Math.round(performance.now() - start);
458
852
  if (!response.ok) {
459
- log.error(`Token request failed: ${response.status} ${response.statusText}`);
853
+ log2.error(`Token request failed: ${response.status} ${response.statusText}`);
460
854
  throw new Error(`Failed to obtain access token: ${response.status} ${response.statusText}`);
461
855
  }
462
856
  const data = await response.json();
463
857
  this.accessToken = data.access_token;
464
858
  this.tokenExpiry = Date.now() + (data.expires_in - 60) * 1000;
465
- log.debug(`Token acquired (${duration}ms, expires in ${data.expires_in}s)`);
859
+ log2.debug(`Token acquired (${duration}ms, expires in ${data.expires_in}s)`);
466
860
  return this.accessToken;
467
861
  }
468
862
  invalidate() {
469
- log.debug("Token invalidated");
863
+ log2.debug("Token invalidated");
470
864
  this.accessToken = null;
471
865
  this.tokenExpiry = 0;
472
866
  }
@@ -490,6 +884,28 @@ var BEYONDAI_PATHS = {
490
884
  },
491
885
  powerpath: {
492
886
  base: "/powerpath"
887
+ },
888
+ clr: {
889
+ credentials: "/ims/clr/v2p0/credentials",
890
+ discovery: "/ims/clr/v2p0/discovery"
891
+ },
892
+ case: {
893
+ base: "/ims/case/v1p1"
894
+ },
895
+ webhooks: {
896
+ webhookList: "/webhooks/",
897
+ webhookGet: "/webhooks/{id}",
898
+ webhookCreate: "/webhooks/",
899
+ webhookUpdate: "/webhooks/{id}",
900
+ webhookDelete: "/webhooks/{id}",
901
+ webhookActivate: "/webhooks/{id}/activate",
902
+ webhookDeactivate: "/webhooks/{id}/deactivate",
903
+ webhookFilterList: "/webhook-filters/",
904
+ webhookFilterGet: "/webhook-filters/{id}",
905
+ webhookFilterCreate: "/webhook-filters/",
906
+ webhookFilterUpdate: "/webhook-filters/{id}",
907
+ webhookFilterDelete: "/webhook-filters/{id}",
908
+ webhookFiltersByWebhook: "/webhook-filters/webhook/{webhookId}"
493
909
  }
494
910
  };
495
911
  var LEARNWITHAI_PATHS = {
@@ -505,8 +921,11 @@ var LEARNWITHAI_PATHS = {
505
921
  gradebook: "/gradebook/1.0",
506
922
  resources: "/resources/1.0"
507
923
  },
924
+ webhooks: null,
508
925
  edubridge: null,
509
- powerpath: null
926
+ powerpath: null,
927
+ clr: null,
928
+ case: null
510
929
  };
511
930
  var PLATFORM_PATHS = {
512
931
  BEYOND_AI: BEYONDAI_PATHS,
@@ -528,8 +947,11 @@ function resolvePathProfiles(pathProfile, customPaths) {
528
947
  return {
529
948
  caliper: customPaths?.caliper ?? basePaths.caliper,
530
949
  oneroster: customPaths?.oneroster ?? basePaths.oneroster,
950
+ webhooks: customPaths?.webhooks ?? basePaths.webhooks,
531
951
  edubridge: customPaths?.edubridge ?? basePaths.edubridge,
532
- powerpath: customPaths?.powerpath ?? basePaths.powerpath
952
+ powerpath: customPaths?.powerpath ?? basePaths.powerpath,
953
+ clr: customPaths?.clr ?? basePaths.clr,
954
+ case: customPaths?.case ?? basePaths.case
533
955
  };
534
956
  }
535
957
 
@@ -569,10 +991,22 @@ class TimebackProvider {
569
991
  baseUrl: platformEndpoints.api[env],
570
992
  authUrl: this.authUrl
571
993
  },
994
+ clr: {
995
+ baseUrl: platformEndpoints.api[env],
996
+ authUrl: this.authUrl
997
+ },
998
+ case: {
999
+ baseUrl: platformEndpoints.api[env],
1000
+ authUrl: this.authUrl
1001
+ },
572
1002
  caliper: {
573
1003
  baseUrl: platformEndpoints.caliper[env],
574
1004
  authUrl: this.authUrl
575
1005
  },
1006
+ webhooks: {
1007
+ baseUrl: platformEndpoints.caliper[env],
1008
+ authUrl: this.authUrl
1009
+ },
576
1010
  qti: {
577
1011
  baseUrl: platformEndpoints.qti[env],
578
1012
  authUrl: this.authUrl
@@ -586,7 +1020,10 @@ class TimebackProvider {
586
1020
  oneroster: { baseUrl: config.baseUrl, authUrl: this.authUrl },
587
1021
  edubridge: { baseUrl: config.baseUrl, authUrl: this.authUrl },
588
1022
  powerpath: { baseUrl: config.baseUrl, authUrl: this.authUrl },
1023
+ clr: { baseUrl: config.baseUrl, authUrl: this.authUrl },
1024
+ case: { baseUrl: config.baseUrl, authUrl: this.authUrl },
589
1025
  caliper: { baseUrl: config.baseUrl, authUrl: this.authUrl },
1026
+ webhooks: { baseUrl: config.baseUrl, authUrl: this.authUrl },
590
1027
  qti: { baseUrl: config.baseUrl, authUrl: this.authUrl }
591
1028
  };
592
1029
  } else if (isServicesConfig(config)) {
@@ -605,10 +1042,19 @@ class TimebackProvider {
605
1042
  } else {
606
1043
  throw new Error("Invalid provider configuration");
607
1044
  }
1045
+ for (const service of Object.keys(this.pathProfiles)) {
1046
+ if (this.pathProfiles[service] === null) {
1047
+ delete this.endpoints[service];
1048
+ }
1049
+ }
608
1050
  }
609
1051
  getEndpoint(service) {
610
1052
  const endpoint = this.endpoints[service];
611
1053
  if (!endpoint) {
1054
+ const pathKey = service;
1055
+ if (pathKey in this.pathProfiles && this.pathProfiles[pathKey] === null) {
1056
+ throw new Error(`Service "${service}" is not supported on ${this.platform ?? "this"} platform.`);
1057
+ }
612
1058
  throw new Error(`Service "${service}" is not configured in this provider`);
613
1059
  }
614
1060
  return endpoint;
@@ -1020,43 +1466,43 @@ function escapeValue(value) {
1020
1466
  }
1021
1467
  return value.replaceAll("'", "''");
1022
1468
  }
1023
- function formatValue2(value) {
1469
+ function formatValue3(value) {
1024
1470
  const escaped = escapeValue(value);
1025
1471
  const needsQuotes = typeof value === "string" || value instanceof Date;
1026
1472
  return needsQuotes ? `'${escaped}'` : escaped;
1027
1473
  }
1028
1474
  function fieldToConditions(field, condition) {
1029
1475
  if (typeof condition === "string" || typeof condition === "number" || typeof condition === "boolean" || condition instanceof Date) {
1030
- return [`${field}=${formatValue2(condition)}`];
1476
+ return [`${field}=${formatValue3(condition)}`];
1031
1477
  }
1032
1478
  if (typeof condition === "object" && condition !== null) {
1033
1479
  const ops = condition;
1034
1480
  const conditions = [];
1035
1481
  if (ops.ne !== undefined) {
1036
- conditions.push(`${field}!=${formatValue2(ops.ne)}`);
1482
+ conditions.push(`${field}!=${formatValue3(ops.ne)}`);
1037
1483
  }
1038
1484
  if (ops.gt !== undefined) {
1039
- conditions.push(`${field}>${formatValue2(ops.gt)}`);
1485
+ conditions.push(`${field}>${formatValue3(ops.gt)}`);
1040
1486
  }
1041
1487
  if (ops.gte !== undefined) {
1042
- conditions.push(`${field}>=${formatValue2(ops.gte)}`);
1488
+ conditions.push(`${field}>=${formatValue3(ops.gte)}`);
1043
1489
  }
1044
1490
  if (ops.lt !== undefined) {
1045
- conditions.push(`${field}<${formatValue2(ops.lt)}`);
1491
+ conditions.push(`${field}<${formatValue3(ops.lt)}`);
1046
1492
  }
1047
1493
  if (ops.lte !== undefined) {
1048
- conditions.push(`${field}<=${formatValue2(ops.lte)}`);
1494
+ conditions.push(`${field}<=${formatValue3(ops.lte)}`);
1049
1495
  }
1050
1496
  if (ops.contains !== undefined) {
1051
- conditions.push(`${field}~${formatValue2(ops.contains)}`);
1497
+ conditions.push(`${field}~${formatValue3(ops.contains)}`);
1052
1498
  }
1053
1499
  if (ops.in !== undefined && ops.in.length > 0) {
1054
- const inConditions = ops.in.map((v) => `${field}=${formatValue2(v)}`);
1500
+ const inConditions = ops.in.map((v) => `${field}=${formatValue3(v)}`);
1055
1501
  const joined = inConditions.join(" OR ");
1056
1502
  conditions.push(inConditions.length > 1 ? `(${joined})` : joined);
1057
1503
  }
1058
1504
  if (ops.notIn !== undefined && ops.notIn.length > 0) {
1059
- const notInConditions = ops.notIn.map((v) => `${field}!=${formatValue2(v)}`);
1505
+ const notInConditions = ops.notIn.map((v) => `${field}!=${formatValue3(v)}`);
1060
1506
  conditions.push(notInConditions.join(" AND "));
1061
1507
  }
1062
1508
  return conditions;