@ztimson/momentum 1.4.6 → 1.5.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.
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,IAAI,EACJ,kBAAkB,EAClB,iBAAiB,EAEjB,eAAe,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,8BAA8B;AAC9B,MAAM,MAAM,MAAM,GAAG;IACpB,sBAAsB;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC;IACzD,qBAAqB;IACrB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,gBAAgB;IAChB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,sBAAsB;IACtB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,mBAAmB;IACnB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,sBAAsB;IACtB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,mBAAmB;IACnB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,yBAAyB;IACzB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,qBAAqB;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kBAAkB;IAClB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oBAAoB;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,wBAAwB;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB,CAAA;AAED,6BAA6B;AAC7B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,0BAA0B;AAC1B,qBAAa,GAAI,SAAQ,IAAK,YAAW,iBAAiB;IA0B7C,OAAO,CAAC,QAAQ;IAzB5B,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,OAAO,CAA6C;IAC5D,OAAO,CAAC,UAAU,CAAU;IAE5B,IAAI,UAAU,YAGb;IAED,OAAO,CAAC,MAAM,CAAuB;IACrC,wBAAwB;IACxB,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI,CAAwB;IAClD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAW7B;gBAEmB,QAAQ,EAAE,QAAQ;IAUtC,IAAI,kEAAwC;IAC5C,GAAG,4DAAuC;IAC1C,EAAE,0KAAsC;IACxC,IAAI,+IAAwC;IAC5C,WAAW,uCAA+C;IAE1D;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9B;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,eAAe,CAAC,CAAC,CAAC;CAqB3D"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,IAAI,EACJ,kBAAkB,EAClB,iBAAiB,EAEjB,eAAe,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,8BAA8B;AAC9B,MAAM,MAAM,MAAM,GAAG;IACpB,sBAAsB;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC;IACzD,qBAAqB;IACrB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,gBAAgB;IAChB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,sBAAsB;IACtB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,mBAAmB;IACnB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,sBAAsB;IACtB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,mBAAmB;IACnB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,yBAAyB;IACzB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,qBAAqB;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kBAAkB;IAClB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oBAAoB;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,wBAAwB;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB,CAAA;AAED,6BAA6B;AAC7B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,0BAA0B;AAC1B,qBAAa,GAAI,SAAQ,IAAK,YAAW,iBAAiB;IA0B7C,OAAO,CAAC,QAAQ;IAzB5B,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,OAAO,CAA6C;IAC5D,OAAO,CAAC,UAAU,CAAU;IAE5B,IAAI,UAAU,YAGb;IAED,OAAO,CAAC,MAAM,CAAuB;IACrC,wBAAwB;IACxB,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI,CAAwB;IAClD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAW7B;gBAEmB,QAAQ,EAAE,QAAQ;IAUtC,IAAI,kEAAwC;IAC5C,GAAG,4DAAuC;IAC1C,EAAE,0KAAsC;IACxC,IAAI,+IAAwC;IAC5C,WAAW,uCAA+C;IAE1D;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9B;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,eAAe,CAAC,CAAC,CAAC;CA4C3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../src/captcha.ts"],"names":[],"mappings":"AAAA,qBAAa,OAAO;IACnB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAAoF;IAClG,OAAO,CAAC,SAAS,CAAkD;IACnE,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,MAAM,CAAO;IACrB,OAAO,KAAK,KAAK,QAAwB;IACzC,IAAI,KAAK,WAA0B;IAEnC,IAAI,OAAO,IAAI,SAAS,GAAG,OAAO,GAAG,KAAK,CAIzC;;IAsCD,OAAO,CAAC,cAAc;IAStB,MAAM;CAyCN"}
1
+ {"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../src/captcha.ts"],"names":[],"mappings":"AAAA,qBAAa,OAAO;IACnB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAAoF;IAClG,OAAO,CAAC,SAAS,CAAkD;IACnE,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,MAAM,CAAO;IACrB,OAAO,KAAK,KAAK,QAAwB;IACzC,IAAI,KAAK,WAA0B;IAEnC,IAAI,OAAO,IAAI,SAAS,GAAG,OAAO,GAAG,KAAK,CAIzC;;IAsCD,OAAO,CAAC,cAAc;IAStB,MAAM;CAsFN"}
package/dist/client.d.ts CHANGED
@@ -1,6 +1,27 @@
1
1
  import { Momentum } from './momentum';
2
2
  import { PathEventEmitter } from './core';
3
3
  export type Platform = 'windows' | 'android' | 'ios' | 'mac' | 'linux' | 'unknown';
4
+ export type Theme = {
5
+ background: string;
6
+ backgroundContrast: string;
7
+ surface: string;
8
+ border: string;
9
+ text: string;
10
+ muted: string;
11
+ primary: string;
12
+ primaryContrast: string;
13
+ accent: string;
14
+ accentContrast: string;
15
+ info: string;
16
+ success: string;
17
+ warn: string;
18
+ danger: string;
19
+ black: string;
20
+ white: string;
21
+ font: string;
22
+ lighter: string;
23
+ darker: string;
24
+ };
4
25
  /** Handle device settings */
5
26
  export declare class Client extends PathEventEmitter {
6
27
  protected momentum: Momentum;
@@ -34,6 +55,8 @@ export declare class Client extends PathEventEmitter {
34
55
  get platform(): Platform;
35
56
  get storage(): boolean;
36
57
  constructor(momentum: Momentum);
58
+ static theme(setting: any, css: true): string;
59
+ static theme(setting: any, css?: false): Theme;
37
60
  /**
38
61
  * Inject the client theme settings, meta tags & PWA prompt
39
62
  * @param opts Injection options: reload - use cached settings or reload; pwa - disabled auto pwa prompt
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,gBAAgB,EAAM,MAAM,QAAQ,CAAA;AAE5C,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnF,6BAA6B;AAC7B,qBAAa,MAAO,SAAQ,gBAAgB;IAqE/B,SAAS,CAAC,QAAQ,EAAE,QAAQ;IApExC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,eAAe,CAAC,CAAM;IAC9B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,SAAS,IAAI,SAAS,GAAG,OAAO,GAAG,KAAK,CAAiC;IAC7E,IAAI,YAAY,IAAI,MAAM,CAA+B;IAEzD,wBAAwB;IACxB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAYnC;IAEH,oCAAoC;IACpC,IAAI,UAAU,IAAI,OAAO,CAAmC;IAE5D,iCAAiC;IACjC,IAAI,KAAK,IAAI,OAAO,CAA2D;IAE/E,qCAAqC;IACrC,IAAI,UAAU,IAAI,OAAO,CAAgD;IAEzE,4CAA4C;IAC5C,IAAI,UAAU,IAAI,OAAO,CAAyC;IAElE,+BAA+B;IAC/B,IAAI,QAAQ,IAAI,OAAO,CAAyC;IAEhE,iCAAiC;IACjC,IAAI,QAAQ,IAAI,OAAO,CAAuD;IAE9E,OAAO,CAAC,MAAM,CAAC,CAAU;IACzB,uBAAuB;IACvB,IAAI,KAAK,IAAI,OAAO,CAInB;IAED,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,oCAAoC;IACpC,IAAI,QAAQ,IAAI,QAAQ,CAWvB;IAED,IAAI,OAAO,YAAiD;gBAEtC,QAAQ,EAAE,QAAQ;IAyBxC;;;;OAIG;IACG,MAAM,CAAC,IAAI,GAAE;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAM,GAAG,OAAO,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAmG7F;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3C,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAO7C;;;OAGG;IACG,OAAO,CAAC,QAAQ,GAAE,QAAwB;IAwGhD,yCAAyC;IACzC,MAAM;CAUN"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -455,6 +455,9 @@
455
455
  complete = false;
456
456
  /** Await initial loading */
457
457
  loading = new Promise((r) => this._loading = r);
458
+ get size() {
459
+ return this.store.keys().toArray().length;
460
+ }
458
461
  getKey(value) {
459
462
  if (!this.key) throw new Error("No key defined");
460
463
  if (value[this.key] === void 0) throw new Error(`${this.key.toString()} Doesn't exist on ${JSON.stringify(value, null, 2)}`);
@@ -640,6 +643,10 @@
640
643
  const i = Math.floor(Math.log(bytes) / Math.log(k));
641
644
  return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + " " + sizes[i];
642
645
  }
646
+ function kebabCase(str) {
647
+ if (!str) return "";
648
+ return wordSegments(str).map((w) => w.toLowerCase()).join("-");
649
+ }
643
650
  function randomStringBuilder(length, letters = false, numbers = false, symbols = false) {
644
651
  if (!letters && !numbers && !symbols) throw new Error("Must enable at least one: letters, numbers, symbols");
645
652
  return Array(length).fill(null).map(() => {
@@ -657,6 +664,10 @@
657
664
  return c;
658
665
  }).join("");
659
666
  }
667
+ function wordSegments(str) {
668
+ if (!str) return [];
669
+ return str.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").replace(/([0-9]+)([a-zA-Z])/g, "$1 $2").replace(/([a-zA-Z])([0-9]+)/g, "$1 $2").replace(/[_\-\s]+/g, " ").trim().split(/\s+/).filter(Boolean);
670
+ }
660
671
  function dayOfWeek(d) {
661
672
  return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][d];
662
673
  }
@@ -823,6 +834,9 @@
823
834
  async function sleepWhile(fn2, checkInterval = 100) {
824
835
  while (await fn2()) await sleep(checkInterval);
825
836
  }
837
+ function timeUntil(date) {
838
+ return (date instanceof Date ? date.getTime() : date) - (/* @__PURE__ */ new Date()).getTime();
839
+ }
826
840
  class AsyncLock {
827
841
  p = Promise.resolve();
828
842
  run(fn2) {
@@ -2508,8 +2522,31 @@
2508
2522
  options.headers["X-Captcha"] = (+this.momentum.client.captchaScore.toFixed(2)).toString();
2509
2523
  }
2510
2524
  this.pending[key] = super.request({ ...options, credentials: "include" }).then((response) => {
2525
+ function _d(obj, secret) {
2526
+ const xor = secret % 128 || 127;
2527
+ if (typeof obj === "boolean") return Boolean((obj ? 1 : 0) ^ xor & 1);
2528
+ if (typeof obj === "string") {
2529
+ const decrypted = Array.from(obj).map((c) => String.fromCharCode(c.charCodeAt(0) ^ xor)).join("");
2530
+ const num = Number(decrypted);
2531
+ if (!isNaN(num) && decrypted.trim() !== "") return num;
2532
+ const date = new Date(decrypted);
2533
+ if (!isNaN(date.getTime()) && decrypted.includes("T")) return date;
2534
+ return decrypted;
2535
+ }
2536
+ if (Array.isArray(obj)) return obj.map((v) => _d(v, secret));
2537
+ if (typeof obj === "object" && obj !== null) return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, _d(v, secret)]));
2538
+ return obj;
2539
+ }
2540
+ const hasDate = response.headers.get("Access-Control-Expose-Headers");
2541
+ const cacheDate = response.headers.get("date");
2511
2542
  this.emit(`response:${method}`, { request: options, response });
2512
- return options.decode === false ? response : response.data;
2543
+ if (options.decode === false) {
2544
+ return response;
2545
+ } else if (this.sameOrigin ? hasDate : cacheDate) {
2546
+ return _d(response.data, new Date(cacheDate).getTime());
2547
+ } else {
2548
+ return response.data;
2549
+ }
2513
2550
  }).catch((err) => {
2514
2551
  const e = err?.data || err;
2515
2552
  this.emit(`error:${method}`, { request: options, error: e });
@@ -2666,7 +2703,7 @@ Must be either: call, email or sms`);
2666
2703
  password: password?.trim(),
2667
2704
  totp: opts?.totp ? opts.totp.toString() : void 0,
2668
2705
  totpMethod: opts?.totpMethod,
2669
- expire: opts?.expire
2706
+ expire: !!opts?.expire ? opts.expire instanceof Date ? ~~(timeUntil(opts.expire) / 1e3) : opts.expire : void 0
2670
2707
  }, true)
2671
2708
  }).then(async (resp) => {
2672
2709
  if (resp?.token) await this.readSession(resp.token, true);
@@ -2849,37 +2886,73 @@ Must be either: call, email or sms`);
2849
2886
  return ua.length > 20 && ua.length < 1e3;
2850
2887
  }
2851
2888
  update() {
2852
- const totalEvents = this.events.mouse.length + this.events.keys.length + this.events.clicks.length;
2853
- const timeBonus = Math.min((Date.now() - this.start) / 2e4, 0.15);
2854
- const activityBonus = totalEvents > 10 ? 0.15 : totalEvents > 3 ? 0.1 : 0;
2855
- let mouseScore = 0.6;
2856
- if (this.events.mouse.length > 5) {
2857
- const recent = this.events.mouse.slice(-15);
2889
+ if (navigator.webdriver) {
2890
+ this.score = 0;
2891
+ return;
2892
+ }
2893
+ let delta = 0;
2894
+ const elapsed = (Date.now() - this.start) / 1e3;
2895
+ delta += elapsed > 30 ? 0.08 : elapsed > 10 ? 0.04 : elapsed > 3 ? 0.01 : -0.05;
2896
+ if (this.events.mouse.length >= 5) {
2897
+ const recent = this.events.mouse.slice(-20);
2858
2898
  let changes = 0;
2899
+ let maxStraightRun = 0;
2900
+ let currentRun = 0;
2859
2901
  for (let i = 2; i < recent.length; i++) {
2860
2902
  const a1 = Math.atan2(recent[i - 1].y - recent[i - 2].y, recent[i - 1].x - recent[i - 2].x);
2861
2903
  const a2 = Math.atan2(recent[i].y - recent[i - 1].y, recent[i].x - recent[i - 1].x);
2862
- if (Math.abs(a1 - a2) > 0.5) changes++;
2904
+ if (Math.abs(a1 - a2) > 0.3) {
2905
+ changes++;
2906
+ currentRun = 0;
2907
+ } else {
2908
+ currentRun++;
2909
+ maxStraightRun = Math.max(maxStraightRun, currentRun);
2910
+ }
2863
2911
  }
2864
- mouseScore = 0.6 + Math.min(changes / recent.length, 0.3);
2912
+ const entropy = changes / (recent.length - 2);
2913
+ if (entropy > 0.4) delta += 0.12;
2914
+ else if (entropy > 0.2) delta += 0.05;
2915
+ else delta -= 0.08;
2916
+ if (maxStraightRun > 8) delta -= 0.1;
2917
+ } else if (this.events.mouse.length === 0) {
2918
+ delta -= 0.03;
2865
2919
  }
2866
- let velocityScore = 0.7;
2867
- if (this.velocities.length > 5) {
2920
+ if (this.velocities.length >= 5) {
2868
2921
  const avg = this.velocities.reduce((a, b) => a + b, 0) / this.velocities.length;
2869
- if (avg > 0.01) velocityScore = 0.8;
2922
+ const variance = this.velocities.reduce((a, b) => a + Math.pow(b - avg, 2), 0) / this.velocities.length;
2923
+ const stdDev = Math.sqrt(variance);
2924
+ const cv = avg > 0 ? stdDev / avg : 0;
2925
+ if (cv > 0.4) delta += 0.1;
2926
+ else if (cv > 0.15) delta += 0.04;
2927
+ else if (avg > 0) delta -= 0.1;
2870
2928
  }
2871
- let typingScore = 0.7;
2872
- if (this.events.keys.length > 2) {
2929
+ if (this.events.clicks.length > 0) {
2930
+ const lastClick = this.events.clicks[this.events.clicks.length - 1];
2931
+ const mouseBeforeClick = this.events.mouse.some(
2932
+ (m) => m.t < lastClick.t && lastClick.t - m.t < 2e3
2933
+ );
2934
+ delta += mouseBeforeClick ? 0.08 : -0.12;
2935
+ const suspiciousClicks = this.events.clicks.filter(
2936
+ (c) => Number.isInteger(c.x) && Number.isInteger(c.y) && c.x % 10 === 0 && c.y % 10 === 0
2937
+ // rounded coords = likely synthetic
2938
+ ).length;
2939
+ if (suspiciousClicks / this.events.clicks.length > 0.5) delta -= 0.08;
2940
+ }
2941
+ if (this.events.keys.length >= 3) {
2873
2942
  const intervals = [];
2874
2943
  for (let i = 1; i < this.events.keys.length; i++) {
2875
2944
  intervals.push(this.events.keys[i] - this.events.keys[i - 1]);
2876
2945
  }
2877
- const avgInterval = intervals.reduce((a, b) => a + b, 0) / intervals.length;
2878
- if (avgInterval > 50 && avgInterval < 1e3) typingScore = 0.85;
2946
+ const avg = intervals.reduce((a, b) => a + b, 0) / intervals.length;
2947
+ const stdDev = Math.sqrt(intervals.reduce((a, b) => a + Math.pow(b - avg, 2), 0) / intervals.length);
2948
+ if (avg < 20) delta -= 0.15;
2949
+ else if (stdDev < 5) delta -= 0.12;
2950
+ else if (avg < 50) delta -= 0.05;
2951
+ else if (avg < 1e3 && stdDev > 20) delta += 0.1;
2879
2952
  }
2880
- const newScore = 0.6 + mouseScore * 0.25 + velocityScore * 0.2 + typingScore * 0.15 + timeBonus + activityBonus;
2881
- this.score = this.score * 0.8 + newScore * 0.2;
2882
- this.score = Math.max(0.3, Math.min(0.95, this.score));
2953
+ const raw = this.score + delta;
2954
+ this.score = this.score * 0.75 + raw * 0.25;
2955
+ this.score = Math.max(0.05, Math.min(0.95, this.score));
2883
2956
  }
2884
2957
  }
2885
2958
  class Client extends PathEventEmitter {
@@ -2980,6 +3053,42 @@ Must be either: call, email or sms`);
2980
3053
  get storage() {
2981
3054
  return typeof localStorage != "undefined";
2982
3055
  }
3056
+ static theme(setting, css = false) {
3057
+ const t = {
3058
+ background: setting?.background,
3059
+ backgroundContrast: contrast(setting?.background),
3060
+ surface: setting?.darkMode ? "#2e2e2e" : "#ffffff",
3061
+ border: setting?.darkMode ? "#374151" : "#E5E7EB",
3062
+ text: setting?.darkMode ? "#ffffff" : "#000000",
3063
+ muted: setting?.darkMode ? "#cccccc" : "#6c757d",
3064
+ primary: setting?.primary,
3065
+ primaryContrast: contrast(setting?.primary),
3066
+ accent: setting?.accent,
3067
+ accentContrast: contrast(setting?.accent),
3068
+ info: "#6157cc",
3069
+ success: "#65c147",
3070
+ warn: "#d88750",
3071
+ danger: "#bf4f4f",
3072
+ black: "black",
3073
+ white: "white",
3074
+ font: setting?.font,
3075
+ lighter: setting?.darkMode ? "rgba(255, 255, 255, 0.1)" : "rgba(255, 255, 255, 0.05)",
3076
+ darker: setting?.darkMode ? "rgba(0, 0, 0, 0.1)" : "rgba(0, 0, 0, 0.05)"
3077
+ };
3078
+ if (!css) return t;
3079
+ return `:root, :root .theme-${setting?.darkMode ? "dark" : "light"} {
3080
+ ${Object.entries(t).map(([name, value]) => `--theme-${kebabCase(name)}: ${value} !important;`).join("\n")}
3081
+ }
3082
+
3083
+ :root .theme-${!setting?.darkMode ? "dark" : "light"} {
3084
+ --theme-surface: ${!setting?.darkMode ? "#2e2e2e" : "#ffffff"} !important;
3085
+ --theme-border: ${!setting?.darkMode ? "#374151" : "#E5E7EB"} !important;
3086
+ --theme-text: ${!setting?.darkMode ? "#ffffff" : "#000000"} !important;
3087
+ --theme-muted: ${!setting?.darkMode ? "#cccccc" : "#6c757d"} !important;
3088
+ --theme-lighter: ${!setting?.darkMode ? "rgba(255, 255, 255, 0.1)" : "rgba(255, 255, 255, 0.05)"};
3089
+ --theme-darker: ${!setting?.darkMode ? "rgba(0, 0, 0, 0.1)" : "rgba(0, 0, 0, 0.05)"};
3090
+ }`;
3091
+ }
2983
3092
  /**
2984
3093
  * Inject the client theme settings, meta tags & PWA prompt
2985
3094
  * @param opts Injection options: reload - use cached settings or reload; pwa - disabled auto pwa prompt
@@ -3049,18 +3158,7 @@ Must be either: call, email or sms`);
3049
3158
  }
3050
3159
  const style = document.querySelector("style.momentum-theme") || document.createElement("style");
3051
3160
  style.classList.add("momentum-theme");
3052
- style.innerHTML = `
3053
- :root {
3054
- --theme-backdrop: ${settings["theme"]?.background} !important;
3055
- --theme-backdrop-alt: ${settings["theme"]?.darkMode ? "rgba(0, 0, 0, 0.1)" : "rgba(0, 0, 0, 0.05)"} !important;
3056
- --theme-primary: ${settings["theme"]?.primary} !important;
3057
- --theme-accent: ${settings["theme"]?.accent} !important;
3058
- --theme-backdrop-contrast: ${contrast(settings["theme"]?.background)} !important;
3059
- --theme-primary-contrast: ${contrast(settings["theme"]?.primary)} !important;
3060
- --theme-accent-contrast: ${contrast(settings["theme"]?.accent)} !important;
3061
- --theme-font: ${settings["theme"]?.font} !important;
3062
- }
3063
- `;
3161
+ style.innerHTML = Client.theme(settings["theme"] || {}, true);
3064
3162
  if (!style.parentElement) document.head.append(style);
3065
3163
  this.emit(PES`client/inject:c`, this.platform);
3066
3164
  return settings;
@@ -4330,7 +4428,7 @@ ${log}`;
4330
4428
  }
4331
4429
  momentum;
4332
4430
  }
4333
- const version = "1.4.6";
4431
+ const version = "1.5.1";
4334
4432
  class WebRtc extends PathEventEmitter {
4335
4433
  constructor(momentum) {
4336
4434
  super("webrtc");
package/dist/index.mjs CHANGED
@@ -451,6 +451,9 @@ class Cache {
451
451
  complete = false;
452
452
  /** Await initial loading */
453
453
  loading = new Promise((r) => this._loading = r);
454
+ get size() {
455
+ return this.store.keys().toArray().length;
456
+ }
454
457
  getKey(value) {
455
458
  if (!this.key) throw new Error("No key defined");
456
459
  if (value[this.key] === void 0) throw new Error(`${this.key.toString()} Doesn't exist on ${JSON.stringify(value, null, 2)}`);
@@ -636,6 +639,10 @@ function formatBytes(bytes, decimals = 2) {
636
639
  const i = Math.floor(Math.log(bytes) / Math.log(k));
637
640
  return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + " " + sizes[i];
638
641
  }
642
+ function kebabCase(str) {
643
+ if (!str) return "";
644
+ return wordSegments(str).map((w) => w.toLowerCase()).join("-");
645
+ }
639
646
  function randomStringBuilder(length, letters = false, numbers = false, symbols = false) {
640
647
  if (!letters && !numbers && !symbols) throw new Error("Must enable at least one: letters, numbers, symbols");
641
648
  return Array(length).fill(null).map(() => {
@@ -653,6 +660,10 @@ function randomStringBuilder(length, letters = false, numbers = false, symbols =
653
660
  return c;
654
661
  }).join("");
655
662
  }
663
+ function wordSegments(str) {
664
+ if (!str) return [];
665
+ return str.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").replace(/([0-9]+)([a-zA-Z])/g, "$1 $2").replace(/([a-zA-Z])([0-9]+)/g, "$1 $2").replace(/[_\-\s]+/g, " ").trim().split(/\s+/).filter(Boolean);
666
+ }
656
667
  function dayOfWeek(d) {
657
668
  return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][d];
658
669
  }
@@ -819,6 +830,9 @@ function sleep(ms) {
819
830
  async function sleepWhile(fn2, checkInterval = 100) {
820
831
  while (await fn2()) await sleep(checkInterval);
821
832
  }
833
+ function timeUntil(date) {
834
+ return (date instanceof Date ? date.getTime() : date) - (/* @__PURE__ */ new Date()).getTime();
835
+ }
822
836
  class AsyncLock {
823
837
  p = Promise.resolve();
824
838
  run(fn2) {
@@ -2504,8 +2518,31 @@ class Api extends Http {
2504
2518
  options.headers["X-Captcha"] = (+this.momentum.client.captchaScore.toFixed(2)).toString();
2505
2519
  }
2506
2520
  this.pending[key] = super.request({ ...options, credentials: "include" }).then((response) => {
2521
+ function _d(obj, secret) {
2522
+ const xor = secret % 128 || 127;
2523
+ if (typeof obj === "boolean") return Boolean((obj ? 1 : 0) ^ xor & 1);
2524
+ if (typeof obj === "string") {
2525
+ const decrypted = Array.from(obj).map((c) => String.fromCharCode(c.charCodeAt(0) ^ xor)).join("");
2526
+ const num = Number(decrypted);
2527
+ if (!isNaN(num) && decrypted.trim() !== "") return num;
2528
+ const date = new Date(decrypted);
2529
+ if (!isNaN(date.getTime()) && decrypted.includes("T")) return date;
2530
+ return decrypted;
2531
+ }
2532
+ if (Array.isArray(obj)) return obj.map((v) => _d(v, secret));
2533
+ if (typeof obj === "object" && obj !== null) return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, _d(v, secret)]));
2534
+ return obj;
2535
+ }
2536
+ const hasDate = response.headers.get("Access-Control-Expose-Headers");
2537
+ const cacheDate = response.headers.get("date");
2507
2538
  this.emit(`response:${method}`, { request: options, response });
2508
- return options.decode === false ? response : response.data;
2539
+ if (options.decode === false) {
2540
+ return response;
2541
+ } else if (this.sameOrigin ? hasDate : cacheDate) {
2542
+ return _d(response.data, new Date(cacheDate).getTime());
2543
+ } else {
2544
+ return response.data;
2545
+ }
2509
2546
  }).catch((err) => {
2510
2547
  const e = err?.data || err;
2511
2548
  this.emit(`error:${method}`, { request: options, error: e });
@@ -2662,7 +2699,7 @@ Must be either: call, email or sms`);
2662
2699
  password: password?.trim(),
2663
2700
  totp: opts?.totp ? opts.totp.toString() : void 0,
2664
2701
  totpMethod: opts?.totpMethod,
2665
- expire: opts?.expire
2702
+ expire: !!opts?.expire ? opts.expire instanceof Date ? ~~(timeUntil(opts.expire) / 1e3) : opts.expire : void 0
2666
2703
  }, true)
2667
2704
  }).then(async (resp) => {
2668
2705
  if (resp?.token) await this.readSession(resp.token, true);
@@ -2845,37 +2882,73 @@ class Captcha {
2845
2882
  return ua.length > 20 && ua.length < 1e3;
2846
2883
  }
2847
2884
  update() {
2848
- const totalEvents = this.events.mouse.length + this.events.keys.length + this.events.clicks.length;
2849
- const timeBonus = Math.min((Date.now() - this.start) / 2e4, 0.15);
2850
- const activityBonus = totalEvents > 10 ? 0.15 : totalEvents > 3 ? 0.1 : 0;
2851
- let mouseScore = 0.6;
2852
- if (this.events.mouse.length > 5) {
2853
- const recent = this.events.mouse.slice(-15);
2885
+ if (navigator.webdriver) {
2886
+ this.score = 0;
2887
+ return;
2888
+ }
2889
+ let delta = 0;
2890
+ const elapsed = (Date.now() - this.start) / 1e3;
2891
+ delta += elapsed > 30 ? 0.08 : elapsed > 10 ? 0.04 : elapsed > 3 ? 0.01 : -0.05;
2892
+ if (this.events.mouse.length >= 5) {
2893
+ const recent = this.events.mouse.slice(-20);
2854
2894
  let changes = 0;
2895
+ let maxStraightRun = 0;
2896
+ let currentRun = 0;
2855
2897
  for (let i = 2; i < recent.length; i++) {
2856
2898
  const a1 = Math.atan2(recent[i - 1].y - recent[i - 2].y, recent[i - 1].x - recent[i - 2].x);
2857
2899
  const a2 = Math.atan2(recent[i].y - recent[i - 1].y, recent[i].x - recent[i - 1].x);
2858
- if (Math.abs(a1 - a2) > 0.5) changes++;
2900
+ if (Math.abs(a1 - a2) > 0.3) {
2901
+ changes++;
2902
+ currentRun = 0;
2903
+ } else {
2904
+ currentRun++;
2905
+ maxStraightRun = Math.max(maxStraightRun, currentRun);
2906
+ }
2859
2907
  }
2860
- mouseScore = 0.6 + Math.min(changes / recent.length, 0.3);
2908
+ const entropy = changes / (recent.length - 2);
2909
+ if (entropy > 0.4) delta += 0.12;
2910
+ else if (entropy > 0.2) delta += 0.05;
2911
+ else delta -= 0.08;
2912
+ if (maxStraightRun > 8) delta -= 0.1;
2913
+ } else if (this.events.mouse.length === 0) {
2914
+ delta -= 0.03;
2861
2915
  }
2862
- let velocityScore = 0.7;
2863
- if (this.velocities.length > 5) {
2916
+ if (this.velocities.length >= 5) {
2864
2917
  const avg = this.velocities.reduce((a, b) => a + b, 0) / this.velocities.length;
2865
- if (avg > 0.01) velocityScore = 0.8;
2918
+ const variance = this.velocities.reduce((a, b) => a + Math.pow(b - avg, 2), 0) / this.velocities.length;
2919
+ const stdDev = Math.sqrt(variance);
2920
+ const cv = avg > 0 ? stdDev / avg : 0;
2921
+ if (cv > 0.4) delta += 0.1;
2922
+ else if (cv > 0.15) delta += 0.04;
2923
+ else if (avg > 0) delta -= 0.1;
2866
2924
  }
2867
- let typingScore = 0.7;
2868
- if (this.events.keys.length > 2) {
2925
+ if (this.events.clicks.length > 0) {
2926
+ const lastClick = this.events.clicks[this.events.clicks.length - 1];
2927
+ const mouseBeforeClick = this.events.mouse.some(
2928
+ (m) => m.t < lastClick.t && lastClick.t - m.t < 2e3
2929
+ );
2930
+ delta += mouseBeforeClick ? 0.08 : -0.12;
2931
+ const suspiciousClicks = this.events.clicks.filter(
2932
+ (c) => Number.isInteger(c.x) && Number.isInteger(c.y) && c.x % 10 === 0 && c.y % 10 === 0
2933
+ // rounded coords = likely synthetic
2934
+ ).length;
2935
+ if (suspiciousClicks / this.events.clicks.length > 0.5) delta -= 0.08;
2936
+ }
2937
+ if (this.events.keys.length >= 3) {
2869
2938
  const intervals = [];
2870
2939
  for (let i = 1; i < this.events.keys.length; i++) {
2871
2940
  intervals.push(this.events.keys[i] - this.events.keys[i - 1]);
2872
2941
  }
2873
- const avgInterval = intervals.reduce((a, b) => a + b, 0) / intervals.length;
2874
- if (avgInterval > 50 && avgInterval < 1e3) typingScore = 0.85;
2942
+ const avg = intervals.reduce((a, b) => a + b, 0) / intervals.length;
2943
+ const stdDev = Math.sqrt(intervals.reduce((a, b) => a + Math.pow(b - avg, 2), 0) / intervals.length);
2944
+ if (avg < 20) delta -= 0.15;
2945
+ else if (stdDev < 5) delta -= 0.12;
2946
+ else if (avg < 50) delta -= 0.05;
2947
+ else if (avg < 1e3 && stdDev > 20) delta += 0.1;
2875
2948
  }
2876
- const newScore = 0.6 + mouseScore * 0.25 + velocityScore * 0.2 + typingScore * 0.15 + timeBonus + activityBonus;
2877
- this.score = this.score * 0.8 + newScore * 0.2;
2878
- this.score = Math.max(0.3, Math.min(0.95, this.score));
2949
+ const raw = this.score + delta;
2950
+ this.score = this.score * 0.75 + raw * 0.25;
2951
+ this.score = Math.max(0.05, Math.min(0.95, this.score));
2879
2952
  }
2880
2953
  }
2881
2954
  class Client extends PathEventEmitter {
@@ -2976,6 +3049,42 @@ class Client extends PathEventEmitter {
2976
3049
  get storage() {
2977
3050
  return typeof localStorage != "undefined";
2978
3051
  }
3052
+ static theme(setting, css = false) {
3053
+ const t = {
3054
+ background: setting?.background,
3055
+ backgroundContrast: contrast(setting?.background),
3056
+ surface: setting?.darkMode ? "#2e2e2e" : "#ffffff",
3057
+ border: setting?.darkMode ? "#374151" : "#E5E7EB",
3058
+ text: setting?.darkMode ? "#ffffff" : "#000000",
3059
+ muted: setting?.darkMode ? "#cccccc" : "#6c757d",
3060
+ primary: setting?.primary,
3061
+ primaryContrast: contrast(setting?.primary),
3062
+ accent: setting?.accent,
3063
+ accentContrast: contrast(setting?.accent),
3064
+ info: "#6157cc",
3065
+ success: "#65c147",
3066
+ warn: "#d88750",
3067
+ danger: "#bf4f4f",
3068
+ black: "black",
3069
+ white: "white",
3070
+ font: setting?.font,
3071
+ lighter: setting?.darkMode ? "rgba(255, 255, 255, 0.1)" : "rgba(255, 255, 255, 0.05)",
3072
+ darker: setting?.darkMode ? "rgba(0, 0, 0, 0.1)" : "rgba(0, 0, 0, 0.05)"
3073
+ };
3074
+ if (!css) return t;
3075
+ return `:root, :root .theme-${setting?.darkMode ? "dark" : "light"} {
3076
+ ${Object.entries(t).map(([name, value]) => `--theme-${kebabCase(name)}: ${value} !important;`).join("\n")}
3077
+ }
3078
+
3079
+ :root .theme-${!setting?.darkMode ? "dark" : "light"} {
3080
+ --theme-surface: ${!setting?.darkMode ? "#2e2e2e" : "#ffffff"} !important;
3081
+ --theme-border: ${!setting?.darkMode ? "#374151" : "#E5E7EB"} !important;
3082
+ --theme-text: ${!setting?.darkMode ? "#ffffff" : "#000000"} !important;
3083
+ --theme-muted: ${!setting?.darkMode ? "#cccccc" : "#6c757d"} !important;
3084
+ --theme-lighter: ${!setting?.darkMode ? "rgba(255, 255, 255, 0.1)" : "rgba(255, 255, 255, 0.05)"};
3085
+ --theme-darker: ${!setting?.darkMode ? "rgba(0, 0, 0, 0.1)" : "rgba(0, 0, 0, 0.05)"};
3086
+ }`;
3087
+ }
2979
3088
  /**
2980
3089
  * Inject the client theme settings, meta tags & PWA prompt
2981
3090
  * @param opts Injection options: reload - use cached settings or reload; pwa - disabled auto pwa prompt
@@ -3045,18 +3154,7 @@ class Client extends PathEventEmitter {
3045
3154
  }
3046
3155
  const style = document.querySelector("style.momentum-theme") || document.createElement("style");
3047
3156
  style.classList.add("momentum-theme");
3048
- style.innerHTML = `
3049
- :root {
3050
- --theme-backdrop: ${settings["theme"]?.background} !important;
3051
- --theme-backdrop-alt: ${settings["theme"]?.darkMode ? "rgba(0, 0, 0, 0.1)" : "rgba(0, 0, 0, 0.05)"} !important;
3052
- --theme-primary: ${settings["theme"]?.primary} !important;
3053
- --theme-accent: ${settings["theme"]?.accent} !important;
3054
- --theme-backdrop-contrast: ${contrast(settings["theme"]?.background)} !important;
3055
- --theme-primary-contrast: ${contrast(settings["theme"]?.primary)} !important;
3056
- --theme-accent-contrast: ${contrast(settings["theme"]?.accent)} !important;
3057
- --theme-font: ${settings["theme"]?.font} !important;
3058
- }
3059
- `;
3157
+ style.innerHTML = Client.theme(settings["theme"] || {}, true);
3060
3158
  if (!style.parentElement) document.head.append(style);
3061
3159
  this.emit(PES`client/inject:c`, this.platform);
3062
3160
  return settings;
@@ -4326,7 +4424,7 @@ class Static extends Storage {
4326
4424
  }
4327
4425
  momentum;
4328
4426
  }
4329
- const version = "1.4.6";
4427
+ const version = "1.5.1";
4330
4428
  class WebRtc extends PathEventEmitter {
4331
4429
  constructor(momentum) {
4332
4430
  super("webrtc");
package/dist/routes.d.ts CHANGED
@@ -6,6 +6,7 @@ export type Blacklisted = Meta & {
6
6
  cidr: string;
7
7
  };
8
8
  export type RateLimit = Meta & {
9
+ encrypt: boolean | null;
9
10
  match: {
10
11
  path: string | null;
11
12
  cidr: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG;IAC9B,KAAK,EAAE;QACN,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KACpB,CAAC;IACF,QAAQ,EAAE;QACT,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAA;IACD,KAAK,EAAE;QACN,EAAE,EAAE,OAAO,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACrB,CAAA;CACD,CAAA;AAED,qBAAa,SAAU,SAAQ,eAAe,CAAC,WAAW,CAAC;IAC9C,SAAS,CAAC,QAAQ,EAAE,QAAQ;gBAAlB,QAAQ,EAAE,QAAQ;IAIlC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;CAGhE;AAED,qBAAa,WAAY,SAAQ,eAAe,CAAC,SAAS,CAAC;IAC9C,SAAS,CAAC,QAAQ,EAAE,QAAQ;gBAAlB,QAAQ,EAAE,QAAQ;CAGxC;AAED,qBAAa,MAAO,SAAQ,gBAAgB;IAI/B,SAAS,CAAC,QAAQ,EAAE,QAAQ;IAHxC,SAAS,EAAG,SAAS,CAAC;IACtB,WAAW,EAAG,WAAW,CAAC;gBAEJ,QAAQ,EAAE,QAAQ;CAOxC"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG;IAC9B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE;QACN,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KACpB,CAAC;IACF,QAAQ,EAAE;QACT,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAA;IACD,KAAK,EAAE;QACN,EAAE,EAAE,OAAO,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACrB,CAAA;CACD,CAAA;AAED,qBAAa,SAAU,SAAQ,eAAe,CAAC,WAAW,CAAC;IAC9C,SAAS,CAAC,QAAQ,EAAE,QAAQ;gBAAlB,QAAQ,EAAE,QAAQ;IAIlC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;CAGhE;AAED,qBAAa,WAAY,SAAQ,eAAe,CAAC,SAAS,CAAC;IAC9C,SAAS,CAAC,QAAQ,EAAE,QAAQ;gBAAlB,QAAQ,EAAE,QAAQ;CAGxC;AAED,qBAAa,MAAO,SAAQ,gBAAgB;IAI/B,SAAS,CAAC,QAAQ,EAAE,QAAQ;IAHxC,SAAS,EAAG,SAAS,CAAC;IACtB,WAAW,EAAG,WAAW,CAAC;gBAEJ,QAAQ,EAAE,QAAQ;CAOxC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ztimson/momentum",
3
- "version": "1.4.6",
3
+ "version": "1.5.1",
4
4
  "description": "Client library for momentum",
5
5
  "keywords": [
6
6
  "Momentum"
@@ -33,7 +33,7 @@
33
33
  "postbuild": "npm run build:docs && node -e \"const fs=require('fs');fs.cpSync('dist/index.mjs','../server/public/momentum.mjs');fs.cpSync('dist/index.js','../server/public/momentum.js');fs.cpSync('dist/momentum.worker.mjs','../server/public/momentum.worker.mjs')\""
34
34
  },
35
35
  "dependencies": {
36
- "@ztimson/utils": "^0.30.0"
36
+ "@ztimson/utils": "^0.30.2"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^22.5.4",