@powerhousedao/analytics-engine-core 0.3.2 → 0.5.0

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.
@@ -4,7 +4,7 @@ export type AnalyticsSeriesQuery = {
4
4
  start: DateTime | null;
5
5
  end: DateTime | null;
6
6
  metrics: string[];
7
- currency: AnalyticsPath;
7
+ currency?: AnalyticsPath;
8
8
  select: Record<string, AnalyticsPath[]>;
9
9
  };
10
10
  export type AnalyticsQuery = AnalyticsSeriesQuery & {
@@ -48,15 +48,15 @@ export type CompoundAnalyticsExpression = {
48
48
  inputs: CompoundAnalyticsInputs;
49
49
  operator: CompoundOperator;
50
50
  operand: AnalyticsOperand;
51
- resultCurrency: AnalyticsPath;
51
+ resultCurrency?: AnalyticsPath;
52
52
  };
53
53
  export type CompoundAnalyticsInputs = {
54
54
  metrics: string[];
55
- currency: AnalyticsPath;
55
+ currency?: AnalyticsPath;
56
56
  };
57
57
  export type AnalyticsOperand = {
58
58
  metric: string;
59
- currency: AnalyticsPath;
59
+ currency?: AnalyticsPath;
60
60
  useSum: boolean;
61
61
  };
62
62
  export declare enum CompoundOperator {
@@ -66,12 +66,12 @@ export declare enum CompoundOperator {
66
66
  ScalarDivide = 3
67
67
  }
68
68
  export type MultiCurrencyConversion = {
69
- targetCurrency: AnalyticsPath;
69
+ targetCurrency?: AnalyticsPath;
70
70
  conversions: ConversionMetric[];
71
71
  };
72
72
  export type ConversionMetric = {
73
73
  metric: string;
74
- currency: AnalyticsPath;
74
+ currency?: AnalyticsPath;
75
75
  };
76
76
  export declare enum AnalyticsGranularity {
77
77
  Total = 0,
@@ -51,7 +51,7 @@ export class AnalyticsQueryEngine {
51
51
  async executeMultiCurrency(query, mcc) {
52
52
  const baseQuery = {
53
53
  ...query,
54
- currency: mcc.targetCurrency,
54
+ currency: mcc.targetCurrency ?? query.currency,
55
55
  };
56
56
  let result = await this.execute(baseQuery);
57
57
  for (const conversion of mcc.conversions) {
@@ -112,7 +112,7 @@ export class AnalyticsQueryEngine {
112
112
  const newRow = {
113
113
  dimensions: row.dimensions,
114
114
  metric: row.metric,
115
- unit: resultCurrency.toString(),
115
+ unit: resultCurrency ? resultCurrency.toString() : row.unit,
116
116
  value: this._calculateOutputValue(row.value, operator, operandMap[inputPeriod.period]),
117
117
  sum: -1,
118
118
  };
@@ -139,9 +139,9 @@ export class AnalyticsQueryEngine {
139
139
  const seriesQuery = {
140
140
  start: query.start,
141
141
  end: query.end,
142
- currency: query.currency,
143
142
  select: query.select,
144
143
  metrics: query.metrics,
144
+ currency: query.currency,
145
145
  };
146
146
  return await this._analyticsStore.getMatchingSeries(seriesQuery);
147
147
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsQueryEngine.js","sourceRoot":"","sources":["../src/AnalyticsQueryEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAEL,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAKL,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,OAAO,oBAAoB;IAIZ;IAHF,SAAS,CAAqB;IAE/C,YACmB,eAAgC,EACjD,QAA6B;QADZ,oBAAe,GAAf,eAAe,CAAiB;QAGjD,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,IAAI,4BAA4B,EAAE,CAAC;IAClE,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,KAA6B;QAE7B,IAAI,MAA4B,CAAC;QAEjC,MAAM,WAAW,GAAmB;YAClC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;YACxC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ;SAC3C,CAAC;QAEF,MAAM,YAAY,GAAmB;YACnC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;YACrB,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;YAC1D,OAAO,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1C,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ;SAC5C,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAExD,IACE,CAAC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC,QAAQ,CACpE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAC1B,EACD,CAAC;YACD,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAClC,qBAAqB,EACrB,KAAK,IAAI,EAAE,CACT,MAAM,IAAI,CAAC,oBAAoB,CAC7B,YAAY,EACZ,cAAc,EACd,KAAK,CAAC,UAAU,CAAC,QAAQ,EACzB,KAAK,CAAC,UAAU,CAAC,cAAc,CAChC,CACJ,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAClC,qBAAqB,EACrB,KAAK,IAAI,EAAE,CACT,MAAM,IAAI,CAAC,oBAAoB,CAC7B,YAAY,EACZ,cAAc,EACd,KAAK,CAAC,UAAU,CAAC,QAAQ,EACzB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAC/B,KAAK,CAAC,UAAU,CAAC,cAAc,CAChC,CACJ,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,KAAqB;QACxC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAE5D,MAAM,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,CAC1E,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAC1C,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,EAAE,GAAG,EAAE,CACrE,uBAAuB,CAAC,MAAM,GAAG,CAAC;YAChC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAC7B,uBAAuB,EACvB,UAAU,EACV,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,WAAW,CAClB,CACN,CAAC;QACF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAC/B,KAAqB,EACrB,GAA4B;QAE5B,MAAM,SAAS,GAAmB;YAChC,GAAG,KAAK;YACR,QAAQ,EAAE,GAAG,CAAC,cAAc;SAC7B,CAAC;QACF,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE3C,KAAK,MAAM,UAAU,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,SAAS,GAA2B;gBACxC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE;oBACV,MAAM,EAAE;wBACN,OAAO,EAAE,SAAS,CAAC,OAAO;wBAC1B,QAAQ,EAAE,UAAU,CAAC,QAAQ;qBAC9B;oBACD,QAAQ,EAAE,gBAAgB,CAAC,cAAc;oBACzC,OAAO,EAAE;wBACP,MAAM,EAAE,UAAU,CAAC,MAAM;wBACzB,QAAQ,EAAE,GAAG,CAAC,cAAc;wBAC5B,MAAM,EAAE,IAAI;qBACb;oBACD,cAAc,EAAE,GAAG,CAAC,cAAc;iBACnC;aACF,CAAC;YAEF,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC/D,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CACtC,MAAM,EACN,gBAAgB,EAChB,gBAAgB,CAAC,SAAS,EAC1B,GAAG,CAAC,cAAc,CACnB,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,OAA6B,EAC7B,OAA6B,EAC7B,QAA0B,EAC1B,cAA6B;QAE7B,IACE,CAAC,gBAAgB,CAAC,cAAc,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,QAAQ,CACvE,QAAQ,CACT,EACD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,MAA4B,EAAE,4EAA4E;IAC1G,OAA6B,EAAE,kFAAkF;IACjH,QAA0B,EAAE,6CAA6C;IACzE,aAAsB,EACtB,cAA6B,CAAC,qBAAqB;;QAEnD,IACE,CAAC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC,QAAQ,CACpE,QAAQ,CACT,EACD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QAE5C,KAAK,MAAM,aAAa,IAAI,OAAO,EAAE,CAAC;YACpC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,KAAK,MAAM,WAAW,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,YAAY,GAAwB;gBACxC,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,GAAG,EAAE,WAAW,CAAC,GAAG;gBACpB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACjC,MAAM,MAAM,GAAG;wBACb,UAAU,EAAE,GAAG,CAAC,UAAU;wBAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,IAAI,EAAE,cAAc,CAAC,QAAQ,EAAE;wBAC/B,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAC/B,GAAG,CAAC,KAAK,EACT,QAAQ,EACR,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAC/B;wBACD,GAAG,EAAE,CAAC,CAAC;qBACR,CAAC;oBACF,OAAO,MAAM,CAAC;gBAChB,CAAC,CAAC;aACH,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,qBAAqB,CAC3B,KAAa,EACb,QAA0B,EAC1B,OAAe;QAEf,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,gBAAgB,CAAC,SAAS;gBAC7B,OAAO,KAAK,GAAG,OAAO,CAAC;YACzB,KAAK,gBAAgB,CAAC,cAAc;gBAClC,OAAO,KAAK,GAAG,OAAO,CAAC;YACzB,KAAK,gBAAgB,CAAC,cAAc;gBAClC,OAAO,KAAK,GAAG,OAAO,CAAC;YACzB,KAAK,gBAAgB,CAAC,YAAY;gBAChC,OAAO,KAAK,GAAG,OAAO,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,KAAqB;QAErB,MAAM,WAAW,GAAyB;YACxC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACnE,CAAC;IAEO,UAAU,CAChB,MAAyB,EACzB,IAAmC;QAEnC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,MAAM;YACT,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;SAC/D,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,oBAAoB,CAC1B,YAAiD,EACjD,IAAmC;QAEnC,MAAM,MAAM,GAAiC,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,IAAI,GAAG,KAAK,IAAI,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;qBAChD,QAAQ,CAAC,GAAG,CAAC;qBACb,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC5D,MAAM,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9D,MAAM,CAAC,aAAa,CAAC;oBACnB,YAAY,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtD,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC;CASF"}
1
+ {"version":3,"file":"AnalyticsQueryEngine.js","sourceRoot":"","sources":["../src/AnalyticsQueryEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { AnalyticsPath } from "./AnalyticsPath.js";
2
+ import { AnalyticsUpdateCallback } from "./IAnalyticsStore.js";
3
+ export declare class NotificationError extends Error {
4
+ readonly innerErrors: Error[];
5
+ constructor(errors: Error[]);
6
+ }
7
+ /**
8
+ * Manages subscriptions for analytics paths.
9
+ */
10
+ export declare class AnalyticsSubscriptionManager {
11
+ private _subscriptions;
12
+ /**
13
+ * Subscribe to updates for an analytics path. A subscribed function will be
14
+ * called for:
15
+ *
16
+ * - exact path matches
17
+ * - matching child paths (i.e. an update to /a/b/c will trigger a callback
18
+ * for /a/b/c, /a/b, and /a)
19
+ * - wildcard matches
20
+ *
21
+ * @param path The analytics path to subscribe to.
22
+ * @param callback Function to be called when the path is updated.
23
+ *
24
+ * @returns A function that, when called, unsubscribes from the updates.
25
+ */
26
+ subscribeToPath(path: AnalyticsPath, callback: AnalyticsUpdateCallback): () => void;
27
+ /**
28
+ * Notifies subscribers about updates to paths.
29
+ *
30
+ * @param paths The paths that were updated.
31
+ */
32
+ notifySubscribers(paths: AnalyticsPath[]): void;
33
+ /**
34
+ * Normalizes a path string to ensure consistent comparison.
35
+ */
36
+ private normalizePath;
37
+ /**
38
+ * Checks if a path matches a subscription pattern that may contain wildcards.
39
+ */
40
+ private pathMatchesWildcardPattern;
41
+ /**
42
+ * Gets all path prefixes for a given path.
43
+ *
44
+ * For example, for '/a/b/c' it returns ['/a', '/a/b', '/a/b/c'].
45
+ */
46
+ private getPathPrefixes;
47
+ }
@@ -0,0 +1,161 @@
1
+ export class NotificationError extends Error {
2
+ innerErrors;
3
+ constructor(errors) {
4
+ super(errors.map((e) => e.message).join("\n"));
5
+ this.name = "NotificationError";
6
+ this.innerErrors = errors;
7
+ }
8
+ }
9
+ /**
10
+ * Manages subscriptions for analytics paths.
11
+ */
12
+ export class AnalyticsSubscriptionManager {
13
+ _subscriptions = new Map();
14
+ /**
15
+ * Subscribe to updates for an analytics path. A subscribed function will be
16
+ * called for:
17
+ *
18
+ * - exact path matches
19
+ * - matching child paths (i.e. an update to /a/b/c will trigger a callback
20
+ * for /a/b/c, /a/b, and /a)
21
+ * - wildcard matches
22
+ *
23
+ * @param path The analytics path to subscribe to.
24
+ * @param callback Function to be called when the path is updated.
25
+ *
26
+ * @returns A function that, when called, unsubscribes from the updates.
27
+ */
28
+ subscribeToPath(path, callback) {
29
+ const pathString = this.normalizePath(path.toString("/"));
30
+ if (!this._subscriptions.has(pathString)) {
31
+ this._subscriptions.set(pathString, new Set());
32
+ }
33
+ this._subscriptions.get(pathString).add(callback);
34
+ return () => {
35
+ const callbacks = this._subscriptions.get(pathString);
36
+ if (callbacks) {
37
+ callbacks.delete(callback);
38
+ // only remove the path entry if there are no more callbacks
39
+ if (callbacks.size === 0) {
40
+ this._subscriptions.delete(pathString);
41
+ }
42
+ }
43
+ };
44
+ }
45
+ /**
46
+ * Notifies subscribers about updates to paths.
47
+ *
48
+ * @param paths The paths that were updated.
49
+ */
50
+ notifySubscribers(paths) {
51
+ if (paths.length === 0 || this._subscriptions.size === 0) {
52
+ return;
53
+ }
54
+ const errors = [];
55
+ for (const path of paths) {
56
+ const pathString = this.normalizePath(path.toString("/"));
57
+ const pathPrefixes = this.getPathPrefixes(pathString);
58
+ const matchingSubscriptions = [];
59
+ // add the exact prefix matches
60
+ pathPrefixes
61
+ .filter((prefix) => this._subscriptions.has(prefix))
62
+ .forEach((prefix) => {
63
+ matchingSubscriptions.push({
64
+ prefix,
65
+ callbacks: this._subscriptions.get(prefix),
66
+ });
67
+ });
68
+ // check all wildcard patterns
69
+ for (const [subscriptionPath, callbacks,] of this._subscriptions.entries()) {
70
+ // skip if it's already in the exact matches
71
+ if (pathPrefixes.includes(subscriptionPath)) {
72
+ continue;
73
+ }
74
+ // hceck if this subscription path (which might have wildcards) matches the update path
75
+ if (this.pathMatchesWildcardPattern(pathString, subscriptionPath)) {
76
+ matchingSubscriptions.push({
77
+ prefix: subscriptionPath,
78
+ callbacks,
79
+ });
80
+ }
81
+ }
82
+ if (matchingSubscriptions.length === 0)
83
+ continue;
84
+ // guarantee delivery to all subscribers
85
+ for (const { callbacks } of matchingSubscriptions) {
86
+ for (const callback of callbacks) {
87
+ try {
88
+ callback(path);
89
+ }
90
+ catch (e) {
91
+ errors.push(e);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ if (errors.length > 0) {
97
+ throw new NotificationError(errors);
98
+ }
99
+ }
100
+ /**
101
+ * Normalizes a path string to ensure consistent comparison.
102
+ */
103
+ normalizePath(path) {
104
+ // Handle potential double slashes by first splitting on slashes and rejoining
105
+ const parts = path.split("/").filter((p) => p.length > 0);
106
+ let normalized = "/" + parts.join("/");
107
+ return normalized;
108
+ }
109
+ /**
110
+ * Checks if a path matches a subscription pattern that may contain wildcards.
111
+ */
112
+ pathMatchesWildcardPattern(updatePath, subscriptionPath) {
113
+ // Handle the wildcard segment case
114
+ if (subscriptionPath.includes("*")) {
115
+ const updateSegments = updatePath.split("/").filter((s) => s.length > 0);
116
+ const subscriptionSegments = subscriptionPath
117
+ .split("/")
118
+ .filter((s) => s.length > 0);
119
+ // If subscription is longer than the update path, it can't match
120
+ if (subscriptionSegments.length > updateSegments.length) {
121
+ return false;
122
+ }
123
+ // Compare each segment
124
+ for (let i = 0; i < subscriptionSegments.length; i++) {
125
+ const subSegment = subscriptionSegments[i];
126
+ const updateSegment = updateSegments[i];
127
+ // If segment is * or starts with * (wildcard), it matches anything
128
+ if (subSegment === "*" || subSegment.startsWith("*:")) {
129
+ continue;
130
+ }
131
+ // Otherwise, segments should match exactly
132
+ if (subSegment !== updateSegment) {
133
+ return false;
134
+ }
135
+ }
136
+ return true;
137
+ }
138
+ // If no wildcards, check if subscription is a prefix of the update path
139
+ return (updatePath === subscriptionPath ||
140
+ updatePath.startsWith(subscriptionPath + "/"));
141
+ }
142
+ /**
143
+ * Gets all path prefixes for a given path.
144
+ *
145
+ * For example, for '/a/b/c' it returns ['/a', '/a/b', '/a/b/c'].
146
+ */
147
+ getPathPrefixes(path) {
148
+ const segments = path.split("/").filter((s) => s.length > 0);
149
+ const prefixes = [];
150
+ let currentPath = "";
151
+ for (const segment of segments) {
152
+ currentPath = currentPath ? `${currentPath}/${segment}` : `/${segment}`;
153
+ prefixes.push(currentPath);
154
+ }
155
+ if (prefixes.length === 0 && path === "/") {
156
+ prefixes.push("/");
157
+ }
158
+ return prefixes;
159
+ }
160
+ }
161
+ //# sourceMappingURL=AnalyticsSubscriptionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsSubscriptionManager.js","sourceRoot":"","sources":["../src/AnalyticsSubscriptionManager.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ export type AnalyticsSeriesInput = {
13
13
  dimensions: Record<string, AnalyticsPath>;
14
14
  dimensionMetadata?: Record<string, string>;
15
15
  };
16
+ export type AnalyticsUpdateCallback = (source: AnalyticsPath) => void;
16
17
  export interface IAnalyticsStore {
17
18
  clearSeriesBySource: (source: AnalyticsPath, cleanUpDimensions?: boolean) => Promise<number>;
18
19
  clearEmptyAnalyticsDimensions: () => Promise<number>;
@@ -20,4 +21,5 @@ export interface IAnalyticsStore {
20
21
  addSeriesValue: (input: AnalyticsSeriesInput) => Promise<void>;
21
22
  addSeriesValues: (inputs: AnalyticsSeriesInput[]) => Promise<void>;
22
23
  getDimensions: () => Promise<any>;
24
+ subscribeToSource: (source: AnalyticsPath, callback: AnalyticsUpdateCallback) => () => void;
23
25
  }
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  export type { IAnalyticsProfiler } from "./AnalyticsProfiler.js";
2
2
  export { AnalyticsProfiler, PassthroughAnalyticsProfiler, } from "./AnalyticsProfiler.js";
3
- export type { IAnalyticsStore, AnalyticsSeriesInput, } from "./IAnalyticsStore.js";
3
+ export type { IAnalyticsStore, AnalyticsSeriesInput, AnalyticsUpdateCallback, } from "./IAnalyticsStore.js";
4
4
  export { AnalyticsPath, AnalyticsPathSegment } from "./AnalyticsPath.js";
5
5
  export type { AnalyticsQuery, AnalyticsSeriesQuery, AnalyticsSeries, AnalyticsDimension, } from "./AnalyticsQuery.js";
6
6
  export { AnalyticsGranularity } from "./AnalyticsQuery.js";
7
7
  export { AnalyticsQueryEngine } from "./AnalyticsQueryEngine.js";
8
8
  export type { GroupedPeriodResult, GroupedPeriodResults, } from "./AnalyticsDiscretizer.js";
9
9
  export { AnalyticsSerializerTypes, AnalyticsPeriod, } from "./AnalyticsPeriod.js";
10
+ export * from "./AnalyticsSubscriptionManager.js";
package/dist/index.js CHANGED
@@ -3,4 +3,5 @@ export { AnalyticsPath, AnalyticsPathSegment } from "./AnalyticsPath.js";
3
3
  export { AnalyticsGranularity } from "./AnalyticsQuery.js";
4
4
  export { AnalyticsQueryEngine } from "./AnalyticsQueryEngine.js";
5
5
  export { AnalyticsSerializerTypes, AnalyticsPeriod, } from "./AnalyticsPeriod.js";
6
+ export * from "./AnalyticsSubscriptionManager.js";
6
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAOzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAKjE,OAAO,EACL,wBAAwB,EACxB,eAAe,GAChB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAQhC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAOzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAKjE,OAAO,EACL,wBAAwB,EACxB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,cAAc,mCAAmC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerhousedao/analytics-engine-core",
3
- "version": "0.3.2",
3
+ "version": "0.5.0",
4
4
  "license": "AGPL-3.0-only",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,7 +14,7 @@
14
14
  "scripts": {
15
15
  "dev": "tsc-watch",
16
16
  "build": "rm -rf dist/ && tsc",
17
- "test": "vitest"
17
+ "test": "vitest run"
18
18
  },
19
19
  "dependencies": {
20
20
  "date-fns": "^3.6.0"