@powerhousedao/connect 1.0.17-dev.2 → 1.0.17-dev.3
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/assets/{app-CayLrjAy.js → app-BdUxze73.js} +735 -117
- package/dist/assets/{app-CayLrjAy.js.map → app-BdUxze73.js.map} +1 -1
- package/dist/assets/{app-CDOWlDp2.css → app-b1jkE5Vo.css} +115 -0
- package/dist/assets/{app-loader-DiF8OhX3.css → app-loader-B74nopv_.css} +130 -0
- package/dist/assets/{app-loader-Ej0QwX6c.js → app-loader-BVN3aSFC.js} +9 -5
- package/dist/assets/app-loader-BVN3aSFC.js.map +1 -0
- package/dist/assets/{browser-BfB4Waw5.js → browser-CzAjKVis.js} +4 -5
- package/dist/assets/{browser-BfB4Waw5.js.map → browser-CzAjKVis.js.map} +1 -1
- package/dist/assets/{ccip-DBZNMhmz.js → ccip-CbFWJKu1.js} +4 -4
- package/dist/assets/{ccip-DBZNMhmz.js.map → ccip-CbFWJKu1.js.map} +1 -1
- package/dist/assets/{content-DnXO71l4.js → content-C1JKApwb.js} +1010 -374
- package/dist/assets/content-C1JKApwb.js.map +1 -0
- package/dist/assets/{index-CCSrpy8s.js → index-D1myKexe.js} +4 -4
- package/dist/assets/{index-CCSrpy8s.js.map → index-D1myKexe.js.map} +1 -1
- package/dist/assets/{index-BbMglwKh.js → index-DtwSBKZB.js} +14 -14
- package/dist/assets/index-DtwSBKZB.js.map +1 -0
- package/dist/assets/{index-CU3_V46J.js → index-qIrGoURI.js} +4 -4
- package/dist/assets/{index-CU3_V46J.js.map → index-qIrGoURI.js.map} +1 -1
- package/dist/assets/{main.D0KZAQpb.js → main.DCtGjfg0.js} +2 -2
- package/dist/assets/{main.D0KZAQpb.js.map → main.DCtGjfg0.js.map} +1 -1
- package/dist/assets/reactor-analytics-BUR_Njds.js +15 -0
- package/dist/assets/reactor-analytics-BUR_Njds.js.map +1 -0
- package/dist/assets/{router-BF9pgdRU.js → router-LLmzUc4B.js} +8 -7
- package/dist/assets/{router-BF9pgdRU.js.map → router-LLmzUc4B.js.map} +1 -1
- package/dist/index.html +1 -1
- package/dist/vite-envs.sh +1 -1
- package/package.json +8 -8
- package/dist/assets/AnalyticsProfiler-DD1sT8NE.js +0 -22
- package/dist/assets/AnalyticsProfiler-DD1sT8NE.js.map +0 -1
- package/dist/assets/app-loader-Ej0QwX6c.js.map +0 -1
- package/dist/assets/content-DnXO71l4.js.map +0 -1
- package/dist/assets/index-BbMglwKh.js.map +0 -1
- package/dist/assets/reactor-analytics-BioFquA0.js +0 -605
- package/dist/assets/reactor-analytics-BioFquA0.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["store","_store"],"ignoreList":[],"sources":["../../src/services/crypto/browser.ts","../../src/services/crypto/index.ts","../../src/services/renown/utils.ts","../../src/services/storage/index.ts","../../src/services/storage/browser.ts","../../src/services/renown/browser.ts","../../src/services/renown/index.ts"],"sourcesContent":["import { type JsonWebKeyPairStorage, type JwkKeyPair } from './index.js';\n\nexport class BrowserKeyStorage implements JsonWebKeyPairStorage {\n static #DB_NAME = 'browserKeyDB';\n static #STORE_NAME = 'keyPairs';\n static #KEY = 'keyPair';\n\n #db: Promise<IDBDatabase>;\n constructor() {\n this.#db = new Promise((resolve, reject) => {\n const req = indexedDB.open(BrowserKeyStorage.#DB_NAME, 1);\n req.onupgradeneeded = () => {\n req.result.createObjectStore(BrowserKeyStorage.#STORE_NAME);\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error as Error);\n });\n }\n\n async #useStore(mode: IDBTransactionMode = 'readwrite') {\n const database = await this.#db;\n const transaction = database.transaction(\n BrowserKeyStorage.#STORE_NAME,\n mode,\n );\n const store = transaction.objectStore(BrowserKeyStorage.#STORE_NAME);\n return store;\n }\n\n async saveKeyPair(keyPair: JwkKeyPair) {\n const store = await this.#useStore();\n const request = store.put(keyPair, BrowserKeyStorage.#KEY);\n return new Promise<void>((resolve, reject) => {\n request.onsuccess = () => {\n resolve();\n };\n request.onerror = () => {\n reject(new Error('Failed to save key pair'));\n };\n });\n }\n\n async loadKeyPair(): Promise<JwkKeyPair | undefined> {\n const store = await this.#useStore('readonly');\n const request = store.getAll();\n\n return new Promise<JwkKeyPair | undefined>((resolve, reject) => {\n request.onsuccess = () => {\n const keyPair = request.result.length\n ? (request.result[0] as JwkKeyPair)\n : undefined;\n resolve(keyPair);\n };\n request.onerror = () => {\n reject(new Error('Failed to load key pair'));\n };\n });\n }\n}\n","/* eslint-disable no-unused-private-class-members */\nimport {\n compressedKeyInHexfromRaw,\n encodeDIDfromHexString,\n rawKeyInHexfromUncompressed,\n} from 'did-key-creator';\n\nexport type JwkKeyPair = {\n publicKey: JsonWebKey;\n privateKey: JsonWebKey;\n};\n\nexport interface JsonWebKeyPairStorage {\n loadKeyPair(): Promise<JwkKeyPair | undefined>;\n saveKeyPair(keyPair: JwkKeyPair): Promise<void>;\n}\n\nfunction ab2hex(ab: ArrayBuffer) {\n return Array.prototype.map\n .call(new Uint8Array(ab), (x: number) =>\n ('00' + x.toString(16)).slice(-2),\n )\n .join('');\n}\n\nexport interface IConnectCrypto {\n did: () => Promise<DID>;\n regenerateDid(): Promise<void>;\n sign: (data: Uint8Array) => Promise<Uint8Array>;\n}\n\nexport type DID = `did:key:${string}`;\n\nexport class ConnectCrypto implements IConnectCrypto {\n #subtleCrypto: Promise<SubtleCrypto>;\n #keyPair: CryptoKeyPair | undefined;\n #keyPairStorage: JsonWebKeyPairStorage;\n\n #did: Promise<DID>;\n\n static algorithm: EcKeyAlgorithm = {\n name: 'ECDSA',\n namedCurve: 'P-256',\n };\n\n static signAlgorithm = {\n name: 'ECDSA',\n namedCurve: 'P-256',\n hash: 'SHA-256',\n };\n\n constructor(keyPairStorage: JsonWebKeyPairStorage) {\n this.#keyPairStorage = keyPairStorage;\n\n // Initializes the subtleCrypto module according to the host environment\n this.#subtleCrypto = this.#initCrypto();\n\n this.#did = this.#initialize();\n }\n\n #initCrypto() {\n return new Promise<SubtleCrypto>((resolve, reject) => {\n if (typeof window === 'undefined') {\n import('node:crypto')\n .then(module => {\n resolve(module.webcrypto.subtle as SubtleCrypto);\n })\n .catch(reject);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!window.crypto?.subtle) {\n reject(new Error('Crypto module not available'));\n }\n resolve(window.crypto.subtle);\n }\n });\n }\n\n // loads the key pair from storage or generates a new one if none is stored\n async #initialize() {\n const loadedKeyPair = await this.#keyPairStorage.loadKeyPair();\n if (loadedKeyPair) {\n this.#keyPair = await this.#importKeyPair(loadedKeyPair);\n console.log('Found key pair');\n } else {\n this.#keyPair = await this.#generateECDSAKeyPair();\n console.log('Created key pair');\n await this.#keyPairStorage.saveKeyPair(await this.#exportKeyPair());\n }\n const did = await this.#parseDid();\n console.log('Connect DID:', did);\n return did;\n }\n\n did() {\n return this.#did;\n }\n\n async regenerateDid() {\n this.#keyPair = await this.#generateECDSAKeyPair();\n await this.#keyPairStorage.saveKeyPair(await this.#exportKeyPair());\n }\n\n async #parseDid(): Promise<DID> {\n if (!this.#keyPair) {\n throw new Error('No key pair available');\n }\n\n const subtleCrypto = await this.#subtleCrypto;\n const publicKeyRaw = await subtleCrypto.exportKey(\n 'raw',\n this.#keyPair.publicKey,\n );\n\n const multicodecName = 'p256-pub';\n const rawKey = rawKeyInHexfromUncompressed(ab2hex(publicKeyRaw));\n const compressedKey = compressedKeyInHexfromRaw(rawKey);\n const did = encodeDIDfromHexString(multicodecName, compressedKey);\n return did as DID;\n }\n\n async #generateECDSAKeyPair() {\n const subtleCrypto = await this.#subtleCrypto;\n const keyPair = await subtleCrypto.generateKey(\n ConnectCrypto.algorithm,\n true,\n ['sign', 'verify'],\n );\n return keyPair;\n }\n\n async #exportKeyPair(): Promise<JwkKeyPair> {\n if (!this.#keyPair) {\n throw new Error('No key pair available');\n }\n const subtleCrypto = await this.#subtleCrypto;\n const jwkKeyPair = {\n publicKey: await subtleCrypto.exportKey(\n 'jwk',\n this.#keyPair.publicKey,\n ),\n privateKey: await subtleCrypto.exportKey(\n 'jwk',\n this.#keyPair.privateKey,\n ),\n };\n return jwkKeyPair;\n }\n\n async #importKeyPair(jwkKeyPair: JwkKeyPair): Promise<CryptoKeyPair> {\n const subtleCrypto = await this.#subtleCrypto;\n return {\n publicKey: await subtleCrypto.importKey(\n 'jwk',\n jwkKeyPair.publicKey,\n ConnectCrypto.algorithm,\n true,\n ['verify'],\n ),\n privateKey: await subtleCrypto.importKey(\n 'jwk',\n jwkKeyPair.privateKey,\n ConnectCrypto.algorithm,\n true,\n ['sign'],\n ),\n };\n }\n\n #sign = async (\n ...args: Parameters<SubtleCrypto['sign']>\n ): Promise<ArrayBuffer> => {\n return (await this.#subtleCrypto).sign(...args);\n };\n\n #verify = async (\n ...args: Parameters<SubtleCrypto['verify']>\n ): Promise<boolean> => {\n return (await this.#subtleCrypto).verify(...args);\n };\n\n async sign(data: Uint8Array): Promise<Uint8Array> {\n if (this.#keyPair?.privateKey) {\n const subtleCrypto = await this.#subtleCrypto;\n\n const arrayBuffer = await subtleCrypto.sign(\n ConnectCrypto.signAlgorithm,\n this.#keyPair.privateKey,\n data.buffer as ArrayBuffer,\n );\n\n return new Uint8Array(arrayBuffer);\n } else {\n throw new Error('No private key available');\n }\n }\n}\nexport * from './browser.js';\n// export * from './electron.js';\n","export type PKHDid = {\n networkId: string;\n chainId: number;\n address: `0x${string}`;\n};\n\nexport function parsePkhDid(did: string): PKHDid {\n const parts = did.split(':');\n if (!did.startsWith('did:pkh:') || parts.length !== 5) {\n throw new Error('Invalid pkh did');\n }\n const [, , networkId, chainIdStr, address] = parts;\n\n if (!address.startsWith('0x')) {\n throw new Error(`Invalid address: ${address}`);\n }\n\n const chainId = Number(chainIdStr);\n if (isNaN(chainId)) {\n throw new Error(`Invalid chain id: ${chainIdStr}`);\n }\n\n return {\n chainId,\n networkId,\n address: address as PKHDid['address'],\n };\n}\n","export interface IStorage<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n get<Key extends keyof T>(key: Key): T[Key];\n set<Key extends keyof T>(key: Key, value?: T[Key]): void;\n delete<Key extends keyof T>(key: Key): void;\n}\n\nexport class BaseStorage<\n T extends Record<string, unknown> = Record<string, unknown>,\n> implements IStorage<T>\n{\n #store: IStorage<T>;\n #namespace: string;\n\n protected constructor(store: IStorage<T>, namespace: string) {\n this.#store = store;\n this.#namespace = namespace;\n }\n\n #buildKey<Key extends keyof T>(key: Key): Key {\n return `${this.#namespace}:${key.toString()}` as Key;\n }\n\n get<Key extends keyof T>(key: Key): T[Key] {\n return this.#store.get(this.#buildKey(key));\n }\n set<Key extends keyof T>(key: Key, value?: T[Key] | undefined): void {\n return this.#store.set(this.#buildKey(key), value);\n }\n delete<Key extends keyof T>(key: Key): void {\n return this.#store.delete(this.#buildKey(key));\n }\n}\n","import connectConfig from '#connect-config';\nimport { BaseStorage, type IStorage } from './index.js';\n\nconst store: IStorage = {\n get: function <Key extends string>(key: Key): unknown {\n const value = localStorage.getItem(key);\n if (value) {\n return JSON.parse(value);\n }\n return undefined;\n },\n set: function <Key extends string>(key: Key, value?: unknown): void {\n return value\n ? localStorage.setItem(key, JSON.stringify(value))\n : localStorage.removeItem(key);\n },\n delete: function <Key extends string>(key: Key): void {\n return localStorage.removeItem(key);\n },\n};\n\nexport class BrowserStorage<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends BaseStorage<T> {\n constructor(namespace: string) {\n super(\n store as IStorage<T>,\n `${connectConfig.routerBasename}:${namespace}`,\n );\n }\n}\n","import { Renown } from './index.js';\nimport { BrowserStorage } from '../storage/browser.js';\n\nexport function initRenownBrowser(connectId: string) {\n return new Renown(new BrowserStorage('renown'), connectId);\n}\n","import { logger } from 'document-drive';\nimport type { IStorage } from '../storage/index.js';\nimport { getEnsInfo } from '../viem.js';\nimport { RENOWN_URL } from './constants.js';\nimport {\n type PowerhouseVerifiableCredential,\n type RenownStorage,\n type User,\n} from './types.js';\nimport { parsePkhDid } from './utils.js';\n\nexport * from './browser.js';\nexport * from './constants.js';\nexport * from './types.js';\nexport type {\n PowerhouseVerifiableCredential,\n Unsubscribe,\n User,\n} from './types.js';\nexport * from './utils.js';\n\nexport class Renown {\n #baseUrl: string;\n #store: RenownStorage;\n #connectId: string;\n #eventEmitter = new EventTarget();\n\n constructor(store: IStorage, connectId: string, baseUrl = RENOWN_URL) {\n this.#store = store as RenownStorage;\n this.#connectId = connectId;\n this.#baseUrl = baseUrl;\n\n if (this.user) {\n this.login(this.user.did).catch(() => void 0);\n }\n }\n\n get user() {\n return this.#store.get('user');\n }\n\n #updateUser(user: User | undefined) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n user ? this.#store.set('user', user) : this.#store.delete('user');\n this.#eventEmitter.dispatchEvent(\n new CustomEvent('user', { detail: user }),\n );\n }\n\n set connectId(connectId: string) {\n this.#connectId = connectId;\n const user = this.user;\n\n this.#updateUser(undefined);\n\n // tries to login with new connectId\n if (user) {\n this.login(user.did).catch(e => {\n console.log('User no longer authenticated:', e);\n });\n }\n }\n\n async login(did: string): Promise<User> {\n try {\n const result = parsePkhDid(did);\n\n const credential = await this.#getCredential(\n result.address,\n result.chainId,\n this.#connectId,\n );\n if (!credential) {\n this.#updateUser(undefined);\n throw new Error('Credential not found');\n }\n const user: User = {\n ...result,\n did,\n credential,\n };\n\n getEnsInfo(user.address, user.chainId)\n .then(ens => {\n if (\n this.user?.address === user.address &&\n this.user.chainId === user.chainId\n ) {\n this.#updateUser({ ...this.user, ens });\n }\n })\n .catch(logger.error);\n\n this.#updateUser(user);\n return user;\n } catch (error) {\n logger.error(error);\n this.#updateUser(undefined);\n throw error;\n }\n }\n\n logout() {\n this.#updateUser(undefined);\n }\n\n on(event: 'user', listener: (user: User) => void) {\n const eventListener = ((e: CustomEvent<User>) => {\n listener(e.detail);\n }) as EventListener;\n\n this.#eventEmitter.addEventListener(event, eventListener);\n return () => {\n this.#eventEmitter.removeEventListener(event, eventListener);\n };\n }\n\n async #getCredential(\n address: string,\n chainId: number,\n connectId: string,\n ): Promise<PowerhouseVerifiableCredential | undefined> {\n if (!this.#baseUrl) {\n throw new Error('RENOWN_URL is not set');\n }\n const url = new URL(\n `/api/auth/credential?address=${encodeURIComponent(address)}&chainId=${encodeURIComponent(chainId)}&connectId=${encodeURIComponent(connectId)}`,\n this.#baseUrl,\n );\n const response = await fetch(url, {\n method: 'GET',\n });\n if (response.ok) {\n const result = (await response.json()) as {\n credential: PowerhouseVerifiableCredential;\n };\n return result.credential;\n } else {\n throw new Error('Failed to get credential');\n }\n }\n}\n"],"file":"assets/index-BbMglwKh.js"}
|
|
@@ -1,605 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { jsx } from "react/jsx-runtime";
|
|
5
|
-
import { a3 as AnalyticsGranularity, a4 as DateTime, a5 as Interval, a6 as AnalyticsPath, a7 as CompoundOperator, a8 as QueryClient, a9 as QueryClientProvider, aa as useUnwrappedAnalyticsStore } from "./app-CayLrjAy.js";
|
|
6
|
-
import { P as PassthroughAnalyticsProfiler } from "./AnalyticsProfiler-DD1sT8NE.js";
|
|
7
|
-
import { createContext } from "react";
|
|
8
|
-
import "./main.D0KZAQpb.js";
|
|
9
|
-
import "./app-loader-Ej0QwX6c.js";
|
|
10
|
-
import "react-dom";
|
|
11
|
-
const getPeriodSeriesArray = (range) => {
|
|
12
|
-
const result = [];
|
|
13
|
-
const series = getPeriodSeries(range);
|
|
14
|
-
let next = series.next();
|
|
15
|
-
while (next) {
|
|
16
|
-
result.push(next);
|
|
17
|
-
next = series.next();
|
|
18
|
-
}
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
const getPeriodSeries = (range) => {
|
|
22
|
-
return {
|
|
23
|
-
...range,
|
|
24
|
-
next: _createFactoryFn(range)
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
const _createFactoryFn = (range) => {
|
|
28
|
-
let current = range.start;
|
|
29
|
-
return () => {
|
|
30
|
-
if (current == null) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
let result = null;
|
|
34
|
-
switch (range.granularity) {
|
|
35
|
-
case AnalyticsGranularity.Total:
|
|
36
|
-
result = _nextTotalPeriod(current, range.end);
|
|
37
|
-
break;
|
|
38
|
-
case AnalyticsGranularity.Annual:
|
|
39
|
-
result = _nextAnnualPeriod(current, range.end);
|
|
40
|
-
break;
|
|
41
|
-
case AnalyticsGranularity.SemiAnnual:
|
|
42
|
-
result = _nextSemiAnnualPeriod(current, range.end);
|
|
43
|
-
break;
|
|
44
|
-
case AnalyticsGranularity.Quarterly:
|
|
45
|
-
result = _nextQuarterlyPeriod(current, range.end);
|
|
46
|
-
break;
|
|
47
|
-
case AnalyticsGranularity.Monthly:
|
|
48
|
-
result = _nextMonthlyPeriod(current, range.end);
|
|
49
|
-
break;
|
|
50
|
-
case AnalyticsGranularity.Weekly:
|
|
51
|
-
result = _nextWeeklyPeriod(current, range.end);
|
|
52
|
-
break;
|
|
53
|
-
case AnalyticsGranularity.Daily:
|
|
54
|
-
result = _nextDailyPeriod(current, range.end);
|
|
55
|
-
break;
|
|
56
|
-
case AnalyticsGranularity.Hourly:
|
|
57
|
-
result = _nextHourlyPeriod(current, range.end);
|
|
58
|
-
}
|
|
59
|
-
if (result === null) {
|
|
60
|
-
current = null;
|
|
61
|
-
} else {
|
|
62
|
-
current = result.end.plus({ milliseconds: 1 });
|
|
63
|
-
}
|
|
64
|
-
return result;
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
const _nextTotalPeriod = (nextStart, seriesEnd) => {
|
|
68
|
-
if (seriesEnd <= nextStart) {
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
return {
|
|
72
|
-
period: "total",
|
|
73
|
-
start: nextStart,
|
|
74
|
-
end: seriesEnd
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
const _nextAnnualPeriod = (nextStart, seriesEnd) => {
|
|
78
|
-
if (seriesEnd <= nextStart) {
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
const inputUtc = nextStart.toUTC();
|
|
82
|
-
const oneYearLater = DateTime.utc(inputUtc.year, inputUtc.month, inputUtc.day).plus({ years: 1 });
|
|
83
|
-
return {
|
|
84
|
-
period: "annual",
|
|
85
|
-
start: nextStart,
|
|
86
|
-
end: oneYearLater
|
|
87
|
-
};
|
|
88
|
-
};
|
|
89
|
-
const _nextSemiAnnualPeriod = (nextStart, seriesEnd) => {
|
|
90
|
-
if (seriesEnd <= nextStart) {
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
const midYear = DateTime.utc(nextStart.year, 7, 1);
|
|
94
|
-
const endYear = DateTime.utc(nextStart.year, 12, 31, 23, 59, 59, 999);
|
|
95
|
-
let endDate;
|
|
96
|
-
if (midYear > nextStart) {
|
|
97
|
-
endDate = midYear;
|
|
98
|
-
} else {
|
|
99
|
-
endDate = endYear;
|
|
100
|
-
}
|
|
101
|
-
if (endDate > seriesEnd) {
|
|
102
|
-
endDate = seriesEnd;
|
|
103
|
-
}
|
|
104
|
-
return {
|
|
105
|
-
period: "semiAnnual",
|
|
106
|
-
start: nextStart,
|
|
107
|
-
end: endDate
|
|
108
|
-
};
|
|
109
|
-
};
|
|
110
|
-
const _nextQuarterlyPeriod = (nextStart, seriesEnd) => {
|
|
111
|
-
if (seriesEnd <= nextStart) {
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
let endDate;
|
|
115
|
-
const nextStartUtc = nextStart.toUTC();
|
|
116
|
-
const startMonth = nextStartUtc.month;
|
|
117
|
-
if (startMonth < 3) {
|
|
118
|
-
endDate = DateTime.utc(nextStartUtc.year, 4, 1);
|
|
119
|
-
} else if (startMonth < 6) {
|
|
120
|
-
endDate = DateTime.utc(nextStartUtc.year, 7, 1);
|
|
121
|
-
} else if (startMonth < 9) {
|
|
122
|
-
endDate = DateTime.utc(nextStartUtc.year, 10, 1);
|
|
123
|
-
} else {
|
|
124
|
-
endDate = DateTime.utc(nextStartUtc.year, 12, 31, 23, 59, 59, 999);
|
|
125
|
-
}
|
|
126
|
-
if (endDate > seriesEnd) {
|
|
127
|
-
endDate = seriesEnd;
|
|
128
|
-
}
|
|
129
|
-
return {
|
|
130
|
-
period: "quarterly",
|
|
131
|
-
start: nextStart,
|
|
132
|
-
end: endDate
|
|
133
|
-
};
|
|
134
|
-
};
|
|
135
|
-
const _nextMonthlyPeriod = (nextStart, seriesEnd) => {
|
|
136
|
-
if (seriesEnd <= nextStart) {
|
|
137
|
-
return null;
|
|
138
|
-
}
|
|
139
|
-
const nextStartUtc = nextStart.toUTC();
|
|
140
|
-
let endDate = DateTime.utc(nextStartUtc.year, nextStartUtc.month, nextStartUtc.day).plus({ months: 1 }).startOf("month");
|
|
141
|
-
if (endDate > seriesEnd) {
|
|
142
|
-
if (!nextStart.hasSame(seriesEnd, "month")) {
|
|
143
|
-
endDate = seriesEnd;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return {
|
|
147
|
-
period: "monthly",
|
|
148
|
-
start: nextStart,
|
|
149
|
-
end: endDate
|
|
150
|
-
};
|
|
151
|
-
};
|
|
152
|
-
const _nextWeeklyPeriod = (nextStart, seriesEnd) => {
|
|
153
|
-
if (seriesEnd <= nextStart) {
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
const nextStartUtc = nextStart.toUTC();
|
|
157
|
-
const nextWeekStartUTC = DateTime.utc(nextStartUtc.year, nextStartUtc.month, nextStartUtc.day).plus({ weeks: 1 }).startOf("week");
|
|
158
|
-
if (nextWeekStartUTC > seriesEnd) {
|
|
159
|
-
if (!nextWeekStartUTC.hasSame(seriesEnd, "day")) {
|
|
160
|
-
return {
|
|
161
|
-
period: "weekly",
|
|
162
|
-
start: nextStart,
|
|
163
|
-
end: seriesEnd
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return {
|
|
168
|
-
period: "weekly",
|
|
169
|
-
start: nextStart,
|
|
170
|
-
end: nextWeekStartUTC
|
|
171
|
-
};
|
|
172
|
-
};
|
|
173
|
-
const _nextDailyPeriod = (nextStart, seriesEnd) => {
|
|
174
|
-
if (seriesEnd <= nextStart) {
|
|
175
|
-
return null;
|
|
176
|
-
}
|
|
177
|
-
const nextStartUtc = nextStart.toUTC();
|
|
178
|
-
let endDate = nextStartUtc.plus({ days: 1 }).startOf("day");
|
|
179
|
-
if (endDate > seriesEnd || endDate.hasSame(seriesEnd, "day")) {
|
|
180
|
-
endDate = seriesEnd;
|
|
181
|
-
}
|
|
182
|
-
return {
|
|
183
|
-
period: "daily",
|
|
184
|
-
start: nextStart,
|
|
185
|
-
end: endDate
|
|
186
|
-
};
|
|
187
|
-
};
|
|
188
|
-
const _nextHourlyPeriod = (nextStart, seriesEnd) => {
|
|
189
|
-
if (seriesEnd <= nextStart) {
|
|
190
|
-
return null;
|
|
191
|
-
}
|
|
192
|
-
const startDate = nextStart.toUTC();
|
|
193
|
-
let endDate = startDate.plus({ hours: 1 });
|
|
194
|
-
if (endDate > seriesEnd) {
|
|
195
|
-
if (nextStart.hour !== seriesEnd.hour) {
|
|
196
|
-
endDate = seriesEnd.toUTC();
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
return {
|
|
200
|
-
period: "hourly",
|
|
201
|
-
start: nextStart,
|
|
202
|
-
end: endDate
|
|
203
|
-
};
|
|
204
|
-
};
|
|
205
|
-
const getQuarter = (date) => {
|
|
206
|
-
return Math.floor((date.month - 1) / 3) + 1;
|
|
207
|
-
};
|
|
208
|
-
class AnalyticsDiscretizer {
|
|
209
|
-
static discretize(series, dimensions, start, end, granularity) {
|
|
210
|
-
const index = this._buildIndex(series, dimensions);
|
|
211
|
-
const periods = getPeriodSeriesArray(this._calculateRange(start, end, granularity, series));
|
|
212
|
-
const disretizedResults = this._discretizeNode(index, {}, dimensions, periods);
|
|
213
|
-
const groupedResults = this._groupResultsByPeriod(periods, disretizedResults);
|
|
214
|
-
return groupedResults;
|
|
215
|
-
}
|
|
216
|
-
static _calculateRange(start, end, granularity, results) {
|
|
217
|
-
let calculatedStart = start || null;
|
|
218
|
-
let calculatedEnd = end || null;
|
|
219
|
-
if (calculatedStart == null || calculatedEnd == null) {
|
|
220
|
-
for (const r of results) {
|
|
221
|
-
if (calculatedStart == null) {
|
|
222
|
-
calculatedStart = r.start;
|
|
223
|
-
}
|
|
224
|
-
const endValue = r.end || r.start;
|
|
225
|
-
if (calculatedEnd == null || calculatedEnd < endValue) {
|
|
226
|
-
calculatedEnd = endValue;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
if (calculatedStart == null || calculatedEnd == null) {
|
|
231
|
-
throw new Error("Cannot determine query start and/or end.");
|
|
232
|
-
}
|
|
233
|
-
return {
|
|
234
|
-
start: calculatedStart,
|
|
235
|
-
end: calculatedEnd,
|
|
236
|
-
granularity
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
static _groupResultsByPeriod(periods, dimensionedResults) {
|
|
240
|
-
const result = {};
|
|
241
|
-
for (const p of periods) {
|
|
242
|
-
const id = p.start.toISO() + "-" + p.period;
|
|
243
|
-
const period = AnalyticsDiscretizer._getPeriodString(p);
|
|
244
|
-
result[id] = {
|
|
245
|
-
period,
|
|
246
|
-
start: p.start,
|
|
247
|
-
end: p.end,
|
|
248
|
-
rows: []
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
for (const r of dimensionedResults) {
|
|
252
|
-
for (const period of Object.keys(r.series)) {
|
|
253
|
-
result[period].rows.push({
|
|
254
|
-
dimensions: r.dimensions,
|
|
255
|
-
metric: r.metric,
|
|
256
|
-
unit: r.unit == "__NULL__" ? null : r.unit,
|
|
257
|
-
value: r.series[period].inc,
|
|
258
|
-
sum: r.series[period].sum
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
return Object.values(result);
|
|
263
|
-
}
|
|
264
|
-
static _getPeriodString(p) {
|
|
265
|
-
switch (p.period) {
|
|
266
|
-
case "annual":
|
|
267
|
-
return p.start.year.toString();
|
|
268
|
-
case "semiAnnual":
|
|
269
|
-
return `${p.start.year}/${p.start.month < 7 ? "H1" : "H2"}`;
|
|
270
|
-
case "quarterly":
|
|
271
|
-
return `${p.start.year}/Q${getQuarter(p.start)}`;
|
|
272
|
-
case "monthly":
|
|
273
|
-
const month = p.start.toUTC().month;
|
|
274
|
-
const formattedMonth = month < 10 ? `0${month}` : `${month}`;
|
|
275
|
-
return `${p.start.year}/${formattedMonth}`;
|
|
276
|
-
case "weekly":
|
|
277
|
-
return `${p.start.weekYear}/W${p.start.weekNumber}`;
|
|
278
|
-
case "daily":
|
|
279
|
-
const monthD = p.start.month;
|
|
280
|
-
const day = p.start.day;
|
|
281
|
-
const formattedMonthD = monthD < 10 ? `0${monthD}` : `${monthD}`;
|
|
282
|
-
const formattedDay = day < 10 ? `0${day}` : `${day}`;
|
|
283
|
-
return `${p.start.year}/${formattedMonthD}/${formattedDay}`;
|
|
284
|
-
case "hourly":
|
|
285
|
-
const monthH = p.start.month;
|
|
286
|
-
const dayH = p.start.day;
|
|
287
|
-
const hourH = p.start.hour;
|
|
288
|
-
const formattedMonthH = monthH < 10 ? `0${monthH}` : `${monthH}`;
|
|
289
|
-
const formattedDayH = dayH < 10 ? `0${dayH}` : `${dayH}`;
|
|
290
|
-
const formattedHourH = hourH < 10 ? `0${hourH}` : `${hourH}`;
|
|
291
|
-
return `${p.start.year}/${formattedMonthH}/${formattedDayH}/${formattedHourH}`;
|
|
292
|
-
default:
|
|
293
|
-
return p.period;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
static _discretizeNode(node, dimensionValues, remainingDimensions, periods) {
|
|
297
|
-
const result = [];
|
|
298
|
-
if (remainingDimensions.length > 0) {
|
|
299
|
-
const subdimension = remainingDimensions[0];
|
|
300
|
-
Object.keys(node).forEach((subdimensionValue, index, arr) => {
|
|
301
|
-
const newDimensionValues = { ...dimensionValues };
|
|
302
|
-
newDimensionValues[subdimension] = subdimensionValue;
|
|
303
|
-
result.push(...this._discretizeNode(node[subdimensionValue], newDimensionValues, remainingDimensions.slice(1), periods));
|
|
304
|
-
});
|
|
305
|
-
} else {
|
|
306
|
-
Object.keys(node).forEach((metric) => {
|
|
307
|
-
result.push(...this._discretizeLeaf(node[metric], periods, metric, dimensionValues));
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
return result;
|
|
311
|
-
}
|
|
312
|
-
static _discretizeLeaf(leaf, periods, metric, dimensionValues) {
|
|
313
|
-
const result = [];
|
|
314
|
-
Object.keys(leaf).forEach((unit) => {
|
|
315
|
-
const metaDimensions = {};
|
|
316
|
-
Object.keys(dimensionValues).forEach((k) => {
|
|
317
|
-
metaDimensions[k] = {
|
|
318
|
-
path: leaf[unit][0].dimensions[k],
|
|
319
|
-
icon: leaf[unit][0].dimensions.icon,
|
|
320
|
-
label: leaf[unit][0].dimensions.label,
|
|
321
|
-
description: leaf[unit][0].dimensions.description
|
|
322
|
-
};
|
|
323
|
-
});
|
|
324
|
-
result.push({
|
|
325
|
-
unit,
|
|
326
|
-
metric,
|
|
327
|
-
dimensions: metaDimensions,
|
|
328
|
-
series: this._discretizeSeries(leaf[unit], periods)
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
return result;
|
|
332
|
-
}
|
|
333
|
-
static _discretizeSeries(series, periods) {
|
|
334
|
-
const result = {};
|
|
335
|
-
for (const s of series) {
|
|
336
|
-
let oldSum = this._getValue(s, periods[0].start);
|
|
337
|
-
for (const p of periods) {
|
|
338
|
-
const newSum = this._getValue(s, p.end);
|
|
339
|
-
const id = `${p.start.toISO()}-${p.period}`;
|
|
340
|
-
if (result[id]) {
|
|
341
|
-
result[id].inc += newSum - oldSum;
|
|
342
|
-
result[id].sum += newSum;
|
|
343
|
-
} else {
|
|
344
|
-
result[id] = {
|
|
345
|
-
inc: newSum - oldSum,
|
|
346
|
-
sum: newSum
|
|
347
|
-
};
|
|
348
|
-
}
|
|
349
|
-
oldSum = newSum;
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
return result;
|
|
353
|
-
}
|
|
354
|
-
static _getValue(series, when) {
|
|
355
|
-
switch (series.fn) {
|
|
356
|
-
case "Single":
|
|
357
|
-
return this._getSingleValue(series, when);
|
|
358
|
-
case "DssVest":
|
|
359
|
-
return this._getVestValue(series, when);
|
|
360
|
-
default:
|
|
361
|
-
return 0;
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
static _getSingleValue(series, when) {
|
|
365
|
-
return when >= series.start ? series.value : 0;
|
|
366
|
-
}
|
|
367
|
-
static _getVestValue(series, when) {
|
|
368
|
-
var _a;
|
|
369
|
-
const now = when;
|
|
370
|
-
const start = series.start;
|
|
371
|
-
const end = series.end;
|
|
372
|
-
const cliff = ((_a = series.params) == null ? void 0 : _a.cliff) ? DateTime.fromISO(series.params.cliff) : null;
|
|
373
|
-
if (now < start || cliff && now < cliff) {
|
|
374
|
-
return 0;
|
|
375
|
-
} else if (end && now >= end) {
|
|
376
|
-
return series.value;
|
|
377
|
-
}
|
|
378
|
-
const a = Interval.fromDateTimes(start, now);
|
|
379
|
-
const b = Interval.fromDateTimes(start, end || now);
|
|
380
|
-
return a.length() / b.length() * series.value;
|
|
381
|
-
}
|
|
382
|
-
static _buildIndex(series, dimensions) {
|
|
383
|
-
const result = {};
|
|
384
|
-
const map = {};
|
|
385
|
-
const dimName = dimensions[0] || "";
|
|
386
|
-
for (const s of series) {
|
|
387
|
-
const dimValue = s.dimensions[dimName];
|
|
388
|
-
if (void 0 === map[dimValue]) {
|
|
389
|
-
map[dimValue] = [];
|
|
390
|
-
}
|
|
391
|
-
map[dimValue].push(s);
|
|
392
|
-
}
|
|
393
|
-
if (dimensions.length > 1) {
|
|
394
|
-
const newDimensions = dimensions.slice(1);
|
|
395
|
-
Object.keys(map).forEach((k) => {
|
|
396
|
-
result[k] = this._buildIndex(map[k], newDimensions);
|
|
397
|
-
});
|
|
398
|
-
} else {
|
|
399
|
-
Object.keys(map).forEach((k) => {
|
|
400
|
-
result[k] = this._buildMetricsIndex(map[k]);
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
|
-
return result;
|
|
404
|
-
}
|
|
405
|
-
static _buildMetricsIndex(series) {
|
|
406
|
-
const result = {};
|
|
407
|
-
const map = {};
|
|
408
|
-
for (const s of series) {
|
|
409
|
-
const metric = s.metric;
|
|
410
|
-
if (void 0 === map[metric]) {
|
|
411
|
-
map[metric] = [];
|
|
412
|
-
}
|
|
413
|
-
map[metric].push(s);
|
|
414
|
-
}
|
|
415
|
-
Object.keys(map).forEach((k) => result[k] = this._buildUnitIndex(map[k]));
|
|
416
|
-
return result;
|
|
417
|
-
}
|
|
418
|
-
static _buildUnitIndex(series) {
|
|
419
|
-
const result = {};
|
|
420
|
-
for (const s of series) {
|
|
421
|
-
const unit = s.unit || "__NULL__";
|
|
422
|
-
if (void 0 === result[unit]) {
|
|
423
|
-
result[unit] = [];
|
|
424
|
-
}
|
|
425
|
-
result[unit].push(s);
|
|
426
|
-
}
|
|
427
|
-
return result;
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
class AnalyticsQueryEngine {
|
|
431
|
-
constructor(_analyticsStore, profiler) {
|
|
432
|
-
__publicField(this, "_analyticsStore");
|
|
433
|
-
__publicField(this, "_profiler");
|
|
434
|
-
this._analyticsStore = _analyticsStore;
|
|
435
|
-
this._profiler = profiler ?? new PassthroughAnalyticsProfiler();
|
|
436
|
-
}
|
|
437
|
-
async executeCompound(query) {
|
|
438
|
-
let result;
|
|
439
|
-
const inputsQuery = {
|
|
440
|
-
start: query.start,
|
|
441
|
-
end: query.end,
|
|
442
|
-
granularity: query.granularity,
|
|
443
|
-
lod: query.lod,
|
|
444
|
-
select: query.select,
|
|
445
|
-
metrics: query.expression.inputs.metrics,
|
|
446
|
-
currency: query.expression.inputs.currency
|
|
447
|
-
};
|
|
448
|
-
const operandQuery = {
|
|
449
|
-
start: query.start,
|
|
450
|
-
end: query.end,
|
|
451
|
-
granularity: query.granularity,
|
|
452
|
-
lod: { priceData: 1 },
|
|
453
|
-
select: { priceData: [AnalyticsPath.fromString("atlas")] },
|
|
454
|
-
metrics: [query.expression.operand.metric],
|
|
455
|
-
currency: query.expression.operand.currency
|
|
456
|
-
};
|
|
457
|
-
const inputExecute = await this.execute(inputsQuery);
|
|
458
|
-
const operandExecute = await this.execute(operandQuery);
|
|
459
|
-
if ([CompoundOperator.VectorAdd, CompoundOperator.VectorSubtract].includes(query.expression.operator)) {
|
|
460
|
-
result = await this._profiler.record("ApplyVectorOperator", async () => await this._applyVectorOperator(inputExecute, operandExecute, query.expression.operator, query.expression.resultCurrency));
|
|
461
|
-
} else {
|
|
462
|
-
result = await this._profiler.record("ApplyScalarOperator", async () => await this._applyScalarOperator(inputExecute, operandExecute, query.expression.operator, query.expression.operand.useSum, query.expression.resultCurrency));
|
|
463
|
-
}
|
|
464
|
-
return result;
|
|
465
|
-
}
|
|
466
|
-
async execute(query) {
|
|
467
|
-
const seriesResults = await this._executeSeriesQuery(query);
|
|
468
|
-
const normalizedSeriesResults = this._profiler.recordSync("ApplyLODs", () => this._applyLods(seriesResults, query.lod));
|
|
469
|
-
const dimensions = Object.keys(query.select);
|
|
470
|
-
const discretizedResult = this._profiler.recordSync("Discretize", () => normalizedSeriesResults.length < 1 ? [] : AnalyticsDiscretizer.discretize(normalizedSeriesResults, dimensions, query.start, query.end, query.granularity));
|
|
471
|
-
return discretizedResult;
|
|
472
|
-
}
|
|
473
|
-
async executeMultiCurrency(query, mcc) {
|
|
474
|
-
const baseQuery = {
|
|
475
|
-
...query,
|
|
476
|
-
currency: mcc.targetCurrency
|
|
477
|
-
};
|
|
478
|
-
let result = await this.execute(baseQuery);
|
|
479
|
-
for (const conversion of mcc.conversions) {
|
|
480
|
-
const nextQuery = {
|
|
481
|
-
start: query.start,
|
|
482
|
-
end: query.end,
|
|
483
|
-
granularity: query.granularity,
|
|
484
|
-
lod: query.lod,
|
|
485
|
-
select: query.select,
|
|
486
|
-
expression: {
|
|
487
|
-
inputs: {
|
|
488
|
-
metrics: baseQuery.metrics,
|
|
489
|
-
currency: conversion.currency
|
|
490
|
-
},
|
|
491
|
-
operator: CompoundOperator.ScalarMultiply,
|
|
492
|
-
operand: {
|
|
493
|
-
metric: conversion.metric,
|
|
494
|
-
currency: mcc.targetCurrency,
|
|
495
|
-
useSum: true
|
|
496
|
-
},
|
|
497
|
-
resultCurrency: mcc.targetCurrency
|
|
498
|
-
}
|
|
499
|
-
};
|
|
500
|
-
const executedCompound = await this.executeCompound(nextQuery);
|
|
501
|
-
result = await this._applyVectorOperator(result, executedCompound, CompoundOperator.VectorAdd, mcc.targetCurrency);
|
|
502
|
-
}
|
|
503
|
-
return result;
|
|
504
|
-
}
|
|
505
|
-
async _applyVectorOperator(inputsA, inputsB, operator, resultCurrency) {
|
|
506
|
-
if ([CompoundOperator.ScalarMultiply, CompoundOperator.ScalarDivide].includes(operator)) {
|
|
507
|
-
throw new Error("Invalid operator for vector operation");
|
|
508
|
-
}
|
|
509
|
-
return inputsB;
|
|
510
|
-
}
|
|
511
|
-
async _applyScalarOperator(inputs, operand, operator, useOperandSum, resultCurrency) {
|
|
512
|
-
if ([CompoundOperator.VectorAdd, CompoundOperator.VectorSubtract].includes(operator)) {
|
|
513
|
-
throw new Error("Invalid operator for scalar operation");
|
|
514
|
-
}
|
|
515
|
-
const result = [];
|
|
516
|
-
const operandMap = {};
|
|
517
|
-
const key = useOperandSum ? "sum" : "value";
|
|
518
|
-
for (const operandPeriod of operand) {
|
|
519
|
-
if (operandPeriod.rows.length > 0) {
|
|
520
|
-
operandMap[operandPeriod.period] = operandPeriod.rows[0][key];
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
for (const inputPeriod of inputs) {
|
|
524
|
-
const outputPeriod = {
|
|
525
|
-
period: inputPeriod.period,
|
|
526
|
-
start: inputPeriod.start,
|
|
527
|
-
end: inputPeriod.end,
|
|
528
|
-
rows: inputPeriod.rows.map((row) => {
|
|
529
|
-
const newRow = {
|
|
530
|
-
dimensions: row.dimensions,
|
|
531
|
-
metric: row.metric,
|
|
532
|
-
unit: resultCurrency.toString(),
|
|
533
|
-
value: this._calculateOutputValue(row.value, operator, operandMap[inputPeriod.period]),
|
|
534
|
-
sum: -1
|
|
535
|
-
};
|
|
536
|
-
return newRow;
|
|
537
|
-
})
|
|
538
|
-
};
|
|
539
|
-
result.push(outputPeriod);
|
|
540
|
-
}
|
|
541
|
-
return result;
|
|
542
|
-
}
|
|
543
|
-
_calculateOutputValue(input, operator, operand) {
|
|
544
|
-
switch (operator) {
|
|
545
|
-
case CompoundOperator.VectorAdd:
|
|
546
|
-
return input + operand;
|
|
547
|
-
case CompoundOperator.VectorSubtract:
|
|
548
|
-
return input - operand;
|
|
549
|
-
case CompoundOperator.ScalarMultiply:
|
|
550
|
-
return input * operand;
|
|
551
|
-
case CompoundOperator.ScalarDivide:
|
|
552
|
-
return input / operand;
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
async _executeSeriesQuery(query) {
|
|
556
|
-
const seriesQuery = {
|
|
557
|
-
start: query.start,
|
|
558
|
-
end: query.end,
|
|
559
|
-
currency: query.currency,
|
|
560
|
-
select: query.select,
|
|
561
|
-
metrics: query.metrics
|
|
562
|
-
};
|
|
563
|
-
return await this._analyticsStore.getMatchingSeries(seriesQuery);
|
|
564
|
-
}
|
|
565
|
-
_applyLods(series, lods) {
|
|
566
|
-
return series.map((result) => ({
|
|
567
|
-
...result,
|
|
568
|
-
dimensions: this._applyDimensionsLods(result.dimensions, lods)
|
|
569
|
-
}));
|
|
570
|
-
}
|
|
571
|
-
_applyDimensionsLods(dimensionMap, lods) {
|
|
572
|
-
const result = {};
|
|
573
|
-
for (const [dimension, lod] of Object.entries(lods)) {
|
|
574
|
-
if (lod !== null && dimensionMap[dimension]) {
|
|
575
|
-
result[dimension] = dimensionMap[dimension]["path"].applyLod(lod).toString();
|
|
576
|
-
result["icon"] = dimensionMap[dimension]["icon"].toString();
|
|
577
|
-
result["label"] = dimensionMap[dimension]["label"].toString();
|
|
578
|
-
result["description"] = dimensionMap[dimension]["description"].toString();
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
return result;
|
|
582
|
-
}
|
|
583
|
-
async getDimensions() {
|
|
584
|
-
return await this._analyticsStore.getDimensions();
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
const AnalyticsContext = createContext(null);
|
|
588
|
-
const defaultQueryClient = new QueryClient();
|
|
589
|
-
function AnalyticsProvider({ children, store, queryClient = defaultQueryClient }) {
|
|
590
|
-
const engine = new AnalyticsQueryEngine(store);
|
|
591
|
-
const content = jsx(AnalyticsContext.Provider, { value: { store, engine }, children });
|
|
592
|
-
if (queryClient === false) {
|
|
593
|
-
return content;
|
|
594
|
-
}
|
|
595
|
-
return jsx(QueryClientProvider, { client: queryClient, children: content });
|
|
596
|
-
}
|
|
597
|
-
function ReactorAnalyticsProvider({ children }) {
|
|
598
|
-
const store = useUnwrappedAnalyticsStore();
|
|
599
|
-
return store ? /* @__PURE__ */ jsx(AnalyticsProvider, { store, children }) : children;
|
|
600
|
-
}
|
|
601
|
-
export {
|
|
602
|
-
ReactorAnalyticsProvider,
|
|
603
|
-
ReactorAnalyticsProvider as default
|
|
604
|
-
};
|
|
605
|
-
//# sourceMappingURL=reactor-analytics-BioFquA0.js.map
|