@xyo-network/react-price-forecast-plugin 2.61.0-rc.3 → 2.61.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/dist/browser/Plugin.d.mts.map +1 -0
  2. package/dist/browser/Plugin.d.ts.map +1 -0
  3. package/dist/browser/Plugin.js +17 -0
  4. package/dist/browser/Plugin.js.map +1 -0
  5. package/dist/browser/components/DetailsBox.d.mts.map +1 -0
  6. package/dist/browser/components/DetailsBox.d.ts.map +1 -0
  7. package/dist/browser/components/DetailsBox.js +42 -0
  8. package/dist/browser/components/DetailsBox.js.map +1 -0
  9. package/dist/browser/components/DetailsBox.stories.js +64 -0
  10. package/dist/browser/components/DetailsBox.stories.js.map +1 -0
  11. package/dist/browser/components/index.d.mts.map +1 -0
  12. package/dist/browser/components/index.d.ts.map +1 -0
  13. package/dist/browser/components/index.js +2 -0
  14. package/dist/browser/components/index.js.map +1 -0
  15. package/dist/browser/index.d.mts.map +1 -0
  16. package/dist/browser/index.d.ts.map +1 -0
  17. package/dist/browser/index.js +3 -0
  18. package/dist/browser/index.js.map +1 -0
  19. package/dist/browser/lib/DataLineStyles.d.mts.map +1 -0
  20. package/dist/browser/lib/DataLineStyles.d.ts.map +1 -0
  21. package/dist/browser/lib/DataLineStyles.js +9 -0
  22. package/dist/browser/lib/DataLineStyles.js.map +1 -0
  23. package/dist/browser/lib/DataPointStyles.d.mts.map +1 -0
  24. package/dist/browser/lib/DataPointStyles.d.ts.map +1 -0
  25. package/dist/browser/lib/DataPointStyles.js +11 -0
  26. package/dist/browser/lib/DataPointStyles.js.map +1 -0
  27. package/dist/browser/lib/ForecastLineChartConfigBuilder.d.mts.map +1 -0
  28. package/dist/browser/lib/ForecastLineChartConfigBuilder.d.ts.map +1 -0
  29. package/dist/browser/lib/ForecastLineChartConfigBuilder.js +129 -0
  30. package/dist/browser/lib/ForecastLineChartConfigBuilder.js.map +1 -0
  31. package/dist/browser/lib/MockSourcePayloads.d.mts.map +1 -0
  32. package/dist/browser/lib/MockSourcePayloads.d.ts.map +1 -0
  33. package/dist/browser/lib/MockSourcePayloads.js +23 -0
  34. package/dist/browser/lib/MockSourcePayloads.js.map +1 -0
  35. package/dist/browser/lib/SourcePayloads.d.mts.map +1 -0
  36. package/dist/browser/lib/SourcePayloads.d.ts.map +1 -0
  37. package/dist/browser/lib/SourcePayloads.js +41 -0
  38. package/dist/browser/lib/SourcePayloads.js.map +1 -0
  39. package/dist/browser/lib/index.d.mts.map +1 -0
  40. package/dist/browser/lib/index.d.ts.map +1 -0
  41. package/dist/browser/lib/index.js +4 -0
  42. package/dist/browser/lib/index.js.map +1 -0
  43. package/dist/node/Plugin.d.mts +3 -0
  44. package/dist/node/Plugin.d.mts.map +1 -0
  45. package/dist/node/Plugin.d.ts +3 -0
  46. package/dist/node/Plugin.d.ts.map +1 -0
  47. package/dist/node/Plugin.js +41 -0
  48. package/dist/node/Plugin.js.map +1 -0
  49. package/dist/node/Plugin.mjs +17 -0
  50. package/dist/node/Plugin.mjs.map +1 -0
  51. package/dist/node/components/DetailsBox.d.mts +9 -0
  52. package/dist/node/components/DetailsBox.d.mts.map +1 -0
  53. package/dist/node/components/DetailsBox.d.ts +9 -0
  54. package/dist/node/components/DetailsBox.d.ts.map +1 -0
  55. package/dist/node/components/DetailsBox.js +56 -0
  56. package/dist/node/components/DetailsBox.js.map +1 -0
  57. package/dist/node/components/DetailsBox.mjs +42 -0
  58. package/dist/node/components/DetailsBox.mjs.map +1 -0
  59. package/dist/node/components/DetailsBox.stories.js +89 -0
  60. package/dist/node/components/DetailsBox.stories.js.map +1 -0
  61. package/dist/node/components/DetailsBox.stories.mjs +64 -0
  62. package/dist/node/components/DetailsBox.stories.mjs.map +1 -0
  63. package/dist/node/components/index.d.mts +2 -0
  64. package/dist/node/components/index.d.mts.map +1 -0
  65. package/dist/node/components/index.d.ts +2 -0
  66. package/dist/node/components/index.d.ts.map +1 -0
  67. package/dist/node/components/index.js +23 -0
  68. package/dist/node/components/index.js.map +1 -0
  69. package/dist/node/components/index.mjs +2 -0
  70. package/dist/node/components/index.mjs.map +1 -0
  71. package/dist/node/index.d.mts +3 -0
  72. package/dist/node/index.d.mts.map +1 -0
  73. package/dist/node/index.d.ts +3 -0
  74. package/dist/node/index.d.ts.map +1 -0
  75. package/dist/node/index.js +25 -0
  76. package/dist/node/index.js.map +1 -0
  77. package/dist/node/index.mjs +3 -0
  78. package/dist/node/index.mjs.map +1 -0
  79. package/dist/node/lib/DataLineStyles.d.mts +5 -0
  80. package/dist/node/lib/DataLineStyles.d.mts.map +1 -0
  81. package/dist/node/lib/DataLineStyles.d.ts +5 -0
  82. package/dist/node/lib/DataLineStyles.d.ts.map +1 -0
  83. package/dist/node/lib/DataLineStyles.js +33 -0
  84. package/dist/node/lib/DataLineStyles.js.map +1 -0
  85. package/dist/node/lib/DataLineStyles.mjs +9 -0
  86. package/dist/node/lib/DataLineStyles.mjs.map +1 -0
  87. package/dist/node/lib/DataPointStyles.d.mts +8 -0
  88. package/dist/node/lib/DataPointStyles.d.mts.map +1 -0
  89. package/dist/node/lib/DataPointStyles.d.ts +8 -0
  90. package/dist/node/lib/DataPointStyles.d.ts.map +1 -0
  91. package/dist/node/lib/DataPointStyles.js +35 -0
  92. package/dist/node/lib/DataPointStyles.js.map +1 -0
  93. package/dist/node/lib/DataPointStyles.mjs +11 -0
  94. package/dist/node/lib/DataPointStyles.mjs.map +1 -0
  95. package/dist/node/lib/ForecastLineChartConfigBuilder.d.mts +47 -0
  96. package/dist/node/lib/ForecastLineChartConfigBuilder.d.mts.map +1 -0
  97. package/dist/node/lib/ForecastLineChartConfigBuilder.d.ts +47 -0
  98. package/dist/node/lib/ForecastLineChartConfigBuilder.d.ts.map +1 -0
  99. package/dist/node/lib/ForecastLineChartConfigBuilder.js +153 -0
  100. package/dist/node/lib/ForecastLineChartConfigBuilder.js.map +1 -0
  101. package/dist/node/lib/ForecastLineChartConfigBuilder.mjs +129 -0
  102. package/dist/node/lib/ForecastLineChartConfigBuilder.mjs.map +1 -0
  103. package/dist/node/lib/MockSourcePayloads.d.mts +18 -0
  104. package/dist/node/lib/MockSourcePayloads.d.mts.map +1 -0
  105. package/dist/node/lib/MockSourcePayloads.d.ts +18 -0
  106. package/dist/node/lib/MockSourcePayloads.d.ts.map +1 -0
  107. package/dist/node/lib/MockSourcePayloads.js +47 -0
  108. package/dist/node/lib/MockSourcePayloads.js.map +1 -0
  109. package/dist/node/lib/MockSourcePayloads.mjs +23 -0
  110. package/dist/node/lib/MockSourcePayloads.mjs.map +1 -0
  111. package/dist/node/lib/SourcePayloads.d.mts +30 -0
  112. package/dist/node/lib/SourcePayloads.d.mts.map +1 -0
  113. package/dist/node/lib/SourcePayloads.d.ts +30 -0
  114. package/dist/node/lib/SourcePayloads.d.ts.map +1 -0
  115. package/dist/node/lib/SourcePayloads.js +65 -0
  116. package/dist/node/lib/SourcePayloads.js.map +1 -0
  117. package/dist/node/lib/SourcePayloads.mjs +41 -0
  118. package/dist/node/lib/SourcePayloads.mjs.map +1 -0
  119. package/dist/node/lib/index.d.mts +4 -0
  120. package/dist/node/lib/index.d.mts.map +1 -0
  121. package/dist/node/lib/index.d.ts +4 -0
  122. package/dist/node/lib/index.d.ts.map +1 -0
  123. package/dist/node/lib/index.js +27 -0
  124. package/dist/node/lib/index.js.map +1 -0
  125. package/dist/node/lib/index.mjs +4 -0
  126. package/dist/node/lib/index.mjs.map +1 -0
  127. package/package.json +21 -21
  128. package/dist/Plugin.d.mts.map +0 -1
  129. package/dist/Plugin.d.ts.map +0 -1
  130. package/dist/components/DetailsBox.d.mts.map +0 -1
  131. package/dist/components/DetailsBox.d.ts.map +0 -1
  132. package/dist/components/DetailsBox.stories.d.mts +0 -6
  133. package/dist/components/DetailsBox.stories.d.mts.map +0 -1
  134. package/dist/components/DetailsBox.stories.d.ts +0 -6
  135. package/dist/components/DetailsBox.stories.d.ts.map +0 -1
  136. package/dist/components/index.d.mts.map +0 -1
  137. package/dist/components/index.d.ts.map +0 -1
  138. package/dist/index.d.mts.map +0 -1
  139. package/dist/index.d.ts.map +0 -1
  140. package/dist/index.js +0 -276
  141. package/dist/index.js.map +0 -1
  142. package/dist/index.mjs +0 -258
  143. package/dist/index.mjs.map +0 -1
  144. package/dist/lib/DataLineStyles.d.mts.map +0 -1
  145. package/dist/lib/DataLineStyles.d.ts.map +0 -1
  146. package/dist/lib/DataPointStyles.d.mts.map +0 -1
  147. package/dist/lib/DataPointStyles.d.ts.map +0 -1
  148. package/dist/lib/ForecastLineChartConfigBuilder.d.mts.map +0 -1
  149. package/dist/lib/ForecastLineChartConfigBuilder.d.ts.map +0 -1
  150. package/dist/lib/MockSourcePayloads.d.mts.map +0 -1
  151. package/dist/lib/MockSourcePayloads.d.ts.map +0 -1
  152. package/dist/lib/SourcePayloads.d.mts.map +0 -1
  153. package/dist/lib/SourcePayloads.d.ts.map +0 -1
  154. package/dist/lib/index.d.mts.map +0 -1
  155. package/dist/lib/index.d.ts.map +0 -1
  156. /package/dist/{Plugin.d.mts → browser/Plugin.d.mts} +0 -0
  157. /package/dist/{Plugin.d.ts → browser/Plugin.d.ts} +0 -0
  158. /package/dist/{components → browser/components}/DetailsBox.d.mts +0 -0
  159. /package/dist/{components → browser/components}/DetailsBox.d.ts +0 -0
  160. /package/dist/{components → browser/components}/index.d.mts +0 -0
  161. /package/dist/{components → browser/components}/index.d.ts +0 -0
  162. /package/dist/{index.d.mts → browser/index.d.mts} +0 -0
  163. /package/dist/{index.d.ts → browser/index.d.ts} +0 -0
  164. /package/dist/{lib → browser/lib}/DataLineStyles.d.mts +0 -0
  165. /package/dist/{lib → browser/lib}/DataLineStyles.d.ts +0 -0
  166. /package/dist/{lib → browser/lib}/DataPointStyles.d.mts +0 -0
  167. /package/dist/{lib → browser/lib}/DataPointStyles.d.ts +0 -0
  168. /package/dist/{lib → browser/lib}/ForecastLineChartConfigBuilder.d.mts +0 -0
  169. /package/dist/{lib → browser/lib}/ForecastLineChartConfigBuilder.d.ts +0 -0
  170. /package/dist/{lib → browser/lib}/MockSourcePayloads.d.mts +0 -0
  171. /package/dist/{lib → browser/lib}/MockSourcePayloads.d.ts +0 -0
  172. /package/dist/{lib → browser/lib}/SourcePayloads.d.mts +0 -0
  173. /package/dist/{lib → browser/lib}/SourcePayloads.d.ts +0 -0
  174. /package/dist/{lib → browser/lib}/index.d.mts +0 -0
  175. /package/dist/{lib → browser/lib}/index.d.ts +0 -0
@@ -0,0 +1,47 @@
1
+ import { Theme } from '@mui/material';
2
+ import { ForecastPayload } from '@xyo-network/diviner-forecasting-model';
3
+ import { ChartData, ChartOptions, LegendOptions, ScaleChartOptions } from 'chart.js';
4
+ import { _DeepPartialObject } from 'chart.js/dist/types/utils';
5
+ interface SourcePayloadConfig {
6
+ fetch: boolean;
7
+ sampleSize?: number;
8
+ }
9
+ interface ThemeColors {
10
+ dataSetColorPrimary: string;
11
+ dataSetColorSecondary: string;
12
+ gridColor: string;
13
+ }
14
+ export declare class ForecastLineChartConfigBuilder {
15
+ private payload?;
16
+ data: ChartData<'line'>;
17
+ options: ChartOptions<'line'>;
18
+ themeColors: ThemeColors | undefined;
19
+ constructor(theme: Theme, payload?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
20
+ schema: "network.xyo.diviner.forecasting.forecast";
21
+ values: import("@xyo-network/diviner-forecasting-model").Forecast[];
22
+ }) | undefined);
23
+ get forecastPayload(): import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
24
+ schema: "network.xyo.diviner.forecasting.forecast";
25
+ values: import("@xyo-network/diviner-forecasting-model").Forecast[];
26
+ };
27
+ static create(theme: Theme, payload?: ForecastPayload, sourcePayloadConfig?: SourcePayloadConfig): Promise<ForecastLineChartConfigBuilder>;
28
+ build(includeSources?: boolean): Promise<this>;
29
+ buildData(includeSources?: boolean): Promise<this>;
30
+ buildOptions(): this;
31
+ refreshValues(): void;
32
+ protected generateLegend(): _DeepPartialObject<LegendOptions<'line'>>;
33
+ protected generateScales(): _DeepPartialObject<ScaleChartOptions<'line'>['scales']>;
34
+ protected generateTitle(): {
35
+ display: boolean;
36
+ text: string;
37
+ };
38
+ protected parseTheme(theme: Theme): {
39
+ dataSetColorPrimary: string;
40
+ dataSetColorSecondary: string;
41
+ gridColor: string;
42
+ };
43
+ private generateDataSetForecastData;
44
+ private generateDataSetSourcePayloads;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=ForecastLineChartConfigBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForecastLineChartConfigBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ForecastLineChartConfigBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,SAAS,EAAgB,YAAY,EAAE,aAAa,EAAS,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAM9D,UAAU,mBAAmB;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,WAAW;IACnB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB;AAWD,qBAAa,8BAA8B;IASvC,OAAO,CAAC,OAAO,CAAC;IARlB,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAEtB;IACD,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAmB;IAChD,WAAW,EAAE,WAAW,GAAG,SAAS,CAAA;gBAGlC,KAAK,EAAE,KAAK,EACJ,OAAO,CAAC;;;kBAAiB;IAKnC,IAAI,eAAe;;;MAMlB;WAEY,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAAE,mBAAmB;IAUhG,KAAK,CAAC,cAAc,CAAC,EAAE,OAAO;IAM9B,SAAS,CAAC,cAAc,CAAC,EAAE,OAAO;IAsBxC,YAAY;IAUZ,aAAa;IAKb,SAAS,CAAC,cAAc,IAAI,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IASrE,SAAS,CAAC,cAAc,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;IAmBnF,SAAS,CAAC,aAAa;;;;IASvB,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK;;;;;IASjC,OAAO,CAAC,2BAA2B;YAWrB,6BAA6B;CAS5C"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ForecastLineChartConfigBuilder_exports = {};
20
+ __export(ForecastLineChartConfigBuilder_exports, {
21
+ ForecastLineChartConfigBuilder: () => ForecastLineChartConfigBuilder
22
+ });
23
+ module.exports = __toCommonJS(ForecastLineChartConfigBuilder_exports);
24
+ var import_DataLineStyles = require("./DataLineStyles");
25
+ var import_DataPointStyles = require("./DataPointStyles");
26
+ var import_SourcePayloads = require("./SourcePayloads");
27
+ const defaultOptions = () => ({
28
+ plugins: {
29
+ legend: {
30
+ position: "top"
31
+ }
32
+ },
33
+ responsive: true
34
+ });
35
+ class ForecastLineChartConfigBuilder {
36
+ constructor(theme, payload) {
37
+ this.payload = payload;
38
+ this.themeColors = this.parseTheme(theme);
39
+ }
40
+ data = {
41
+ datasets: []
42
+ };
43
+ options = defaultOptions();
44
+ themeColors;
45
+ get forecastPayload() {
46
+ if (this.payload) {
47
+ return this.payload;
48
+ } else {
49
+ throw Error("ForecastPayload was not defined");
50
+ }
51
+ }
52
+ static async create(theme, payload, sourcePayloadConfig) {
53
+ const instance = new ForecastLineChartConfigBuilder(theme, payload);
54
+ await instance.build(sourcePayloadConfig?.fetch);
55
+ instance.refreshValues();
56
+ return instance;
57
+ }
58
+ async build(includeSources) {
59
+ this.buildOptions();
60
+ await this.buildData(includeSources);
61
+ return this;
62
+ }
63
+ async buildData(includeSources) {
64
+ const forecastData = this.generateDataSetForecastData();
65
+ const datasets = [forecastData];
66
+ if (includeSources) {
67
+ const sourceData = await this.generateDataSetSourcePayloads();
68
+ datasets.unshift(sourceData);
69
+ const lastSourceDataItem = sourceData.data.at(-1);
70
+ forecastData.data.unshift(lastSourceDataItem);
71
+ }
72
+ this.data = {
73
+ datasets
74
+ };
75
+ return this;
76
+ }
77
+ buildOptions() {
78
+ if (this.options.plugins) {
79
+ this.options.plugins.title = this.generateTitle();
80
+ this.options.plugins.legend = this.generateLegend();
81
+ }
82
+ this.options.scales = this.generateScales();
83
+ return this;
84
+ }
85
+ refreshValues() {
86
+ this.data = { ...this.data };
87
+ this.options = { ...this.options };
88
+ }
89
+ generateLegend() {
90
+ return {
91
+ labels: {
92
+ pointStyle: "circle",
93
+ usePointStyle: true
94
+ }
95
+ };
96
+ }
97
+ generateScales() {
98
+ return {
99
+ x: {
100
+ grid: {
101
+ color: this.themeColors?.gridColor
102
+ },
103
+ time: {
104
+ unit: "minute"
105
+ },
106
+ type: "time"
107
+ },
108
+ y: {
109
+ grid: {
110
+ color: this.themeColors?.gridColor
111
+ }
112
+ }
113
+ };
114
+ }
115
+ generateTitle() {
116
+ return {
117
+ display: true,
118
+ text: `Gas Price Forecaster (GWEI over time from ${this.forecastPayload?.values[0].timestamp ? new Date(this.forecastPayload.values[0].timestamp).toLocaleDateString() : ""})`
119
+ };
120
+ }
121
+ parseTheme(theme) {
122
+ const dark = theme.palette.mode === "dark";
123
+ return {
124
+ dataSetColorPrimary: theme.palette.primary.light,
125
+ dataSetColorSecondary: theme.palette.secondary.light,
126
+ gridColor: dark ? theme.palette.grey[800] : theme.palette.grey[300]
127
+ };
128
+ }
129
+ generateDataSetForecastData() {
130
+ return {
131
+ borderDash: [5],
132
+ borderDashOffset: 0.5,
133
+ data: this.forecastPayload.values.map((price) => ({ x: price.timestamp ?? 0, y: price.value })),
134
+ label: "Forecast Price",
135
+ ...(0, import_DataPointStyles.DataPointStyles)(this.themeColors?.dataSetColorPrimary),
136
+ ...(0, import_DataLineStyles.DataLineStyles)(this.themeColors?.dataSetColorPrimary)
137
+ };
138
+ }
139
+ async generateDataSetSourcePayloads() {
140
+ const { sourcePrices } = await import_SourcePayloads.SourcePayloads.build("feePerGas.medium");
141
+ return {
142
+ data: sourcePrices,
143
+ label: "Source Prices",
144
+ ...(0, import_DataLineStyles.DataLineStyles)(this.themeColors?.dataSetColorSecondary),
145
+ ...(0, import_DataPointStyles.DataPointStyles)(this.themeColors?.dataSetColorSecondary)
146
+ };
147
+ }
148
+ }
149
+ // Annotate the CommonJS export names for ESM import in node:
150
+ 0 && (module.exports = {
151
+ ForecastLineChartConfigBuilder
152
+ });
153
+ //# sourceMappingURL=ForecastLineChartConfigBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/ForecastLineChartConfigBuilder.ts"],"sourcesContent":["import { Theme } from '@mui/material'\nimport { ForecastPayload } from '@xyo-network/diviner-forecasting-model'\nimport { ChartData, ChartDataset, ChartOptions, LegendOptions, Point, ScaleChartOptions } from 'chart.js'\n// eslint-disable-next-line import/no-unresolved\nimport { _DeepPartialObject } from 'chart.js/dist/types/utils'\n\nimport { DataLineStyles } from './DataLineStyles'\nimport { DataPointStyles } from './DataPointStyles'\nimport { SourcePayloads } from './SourcePayloads'\n\ninterface SourcePayloadConfig {\n fetch: boolean\n sampleSize?: number\n}\n\ninterface ThemeColors {\n dataSetColorPrimary: string\n dataSetColorSecondary: string\n gridColor: string\n}\n\nconst defaultOptions: () => ChartOptions<'line'> = () => ({\n plugins: {\n legend: {\n position: 'top' as const,\n },\n },\n responsive: true,\n})\n\nexport class ForecastLineChartConfigBuilder {\n data: ChartData<'line'> = {\n datasets: [],\n }\n options: ChartOptions<'line'> = defaultOptions()\n themeColors: ThemeColors | undefined\n\n constructor(\n theme: Theme,\n private payload?: ForecastPayload,\n ) {\n this.themeColors = this.parseTheme(theme)\n }\n\n get forecastPayload() {\n if (this.payload) {\n return this.payload\n } else {\n throw Error('ForecastPayload was not defined')\n }\n }\n\n static async create(theme: Theme, payload?: ForecastPayload, sourcePayloadConfig?: SourcePayloadConfig) {\n const instance = new ForecastLineChartConfigBuilder(theme, payload)\n\n await instance.build(sourcePayloadConfig?.fetch)\n\n instance.refreshValues()\n\n return instance\n }\n\n async build(includeSources?: boolean) {\n this.buildOptions()\n await this.buildData(includeSources)\n return this\n }\n\n async buildData(includeSources?: boolean) {\n const forecastData = this.generateDataSetForecastData()\n\n const datasets: ChartDataset<'line'>[] = [forecastData]\n\n if (includeSources) {\n // build data from sources in forecastPayload\n const sourceData = await this.generateDataSetSourcePayloads()\n datasets.unshift(sourceData)\n\n // add last source point as first item in prediction to connect the lines\n const lastSourceDataItem = sourceData.data.at(-1) as Point\n forecastData.data.unshift(lastSourceDataItem)\n }\n\n this.data = {\n datasets,\n }\n\n return this\n }\n\n buildOptions() {\n if (this.options.plugins) {\n this.options.plugins.title = this.generateTitle()\n this.options.plugins.legend = this.generateLegend()\n }\n this.options.scales = this.generateScales()\n\n return this\n }\n\n refreshValues() {\n this.data = { ...this.data }\n this.options = { ...this.options }\n }\n\n protected generateLegend(): _DeepPartialObject<LegendOptions<'line'>> {\n return {\n labels: {\n pointStyle: 'circle',\n usePointStyle: true,\n },\n }\n }\n\n protected generateScales(): _DeepPartialObject<ScaleChartOptions<'line'>['scales']> {\n return {\n x: {\n grid: {\n color: this.themeColors?.gridColor,\n },\n time: {\n unit: 'minute',\n },\n type: 'time',\n },\n y: {\n grid: {\n color: this.themeColors?.gridColor,\n },\n },\n }\n }\n\n protected generateTitle() {\n return {\n display: true,\n text: `Gas Price Forecaster (GWEI over time from ${\n this.forecastPayload?.values[0].timestamp ? new Date(this.forecastPayload.values[0].timestamp).toLocaleDateString() : ''\n })`,\n }\n }\n\n protected parseTheme(theme: Theme) {\n const dark = theme.palette.mode === 'dark'\n return {\n dataSetColorPrimary: theme.palette.primary.light,\n dataSetColorSecondary: theme.palette.secondary.light,\n gridColor: dark ? theme.palette.grey[800] : theme.palette.grey[300],\n }\n }\n\n private generateDataSetForecastData(): ChartDataset<'line'> {\n return {\n borderDash: [5],\n borderDashOffset: 0.5,\n data: this.forecastPayload.values.map((price) => ({ x: price.timestamp ?? 0, y: price.value })),\n label: 'Forecast Price',\n ...DataPointStyles(this.themeColors?.dataSetColorPrimary),\n ...DataLineStyles(this.themeColors?.dataSetColorPrimary),\n }\n }\n\n private async generateDataSetSourcePayloads(): Promise<ChartDataset<'line'>> {\n const { sourcePrices } = await SourcePayloads.build('feePerGas.medium')\n return {\n data: sourcePrices,\n label: 'Source Prices',\n ...DataLineStyles(this.themeColors?.dataSetColorSecondary),\n ...DataPointStyles(this.themeColors?.dataSetColorSecondary),\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,129 @@
1
+ import { DataLineStyles } from "./DataLineStyles";
2
+ import { DataPointStyles } from "./DataPointStyles";
3
+ import { SourcePayloads } from "./SourcePayloads";
4
+ const defaultOptions = () => ({
5
+ plugins: {
6
+ legend: {
7
+ position: "top"
8
+ }
9
+ },
10
+ responsive: true
11
+ });
12
+ class ForecastLineChartConfigBuilder {
13
+ constructor(theme, payload) {
14
+ this.payload = payload;
15
+ this.themeColors = this.parseTheme(theme);
16
+ }
17
+ data = {
18
+ datasets: []
19
+ };
20
+ options = defaultOptions();
21
+ themeColors;
22
+ get forecastPayload() {
23
+ if (this.payload) {
24
+ return this.payload;
25
+ } else {
26
+ throw Error("ForecastPayload was not defined");
27
+ }
28
+ }
29
+ static async create(theme, payload, sourcePayloadConfig) {
30
+ const instance = new ForecastLineChartConfigBuilder(theme, payload);
31
+ await instance.build(sourcePayloadConfig?.fetch);
32
+ instance.refreshValues();
33
+ return instance;
34
+ }
35
+ async build(includeSources) {
36
+ this.buildOptions();
37
+ await this.buildData(includeSources);
38
+ return this;
39
+ }
40
+ async buildData(includeSources) {
41
+ const forecastData = this.generateDataSetForecastData();
42
+ const datasets = [forecastData];
43
+ if (includeSources) {
44
+ const sourceData = await this.generateDataSetSourcePayloads();
45
+ datasets.unshift(sourceData);
46
+ const lastSourceDataItem = sourceData.data.at(-1);
47
+ forecastData.data.unshift(lastSourceDataItem);
48
+ }
49
+ this.data = {
50
+ datasets
51
+ };
52
+ return this;
53
+ }
54
+ buildOptions() {
55
+ if (this.options.plugins) {
56
+ this.options.plugins.title = this.generateTitle();
57
+ this.options.plugins.legend = this.generateLegend();
58
+ }
59
+ this.options.scales = this.generateScales();
60
+ return this;
61
+ }
62
+ refreshValues() {
63
+ this.data = { ...this.data };
64
+ this.options = { ...this.options };
65
+ }
66
+ generateLegend() {
67
+ return {
68
+ labels: {
69
+ pointStyle: "circle",
70
+ usePointStyle: true
71
+ }
72
+ };
73
+ }
74
+ generateScales() {
75
+ return {
76
+ x: {
77
+ grid: {
78
+ color: this.themeColors?.gridColor
79
+ },
80
+ time: {
81
+ unit: "minute"
82
+ },
83
+ type: "time"
84
+ },
85
+ y: {
86
+ grid: {
87
+ color: this.themeColors?.gridColor
88
+ }
89
+ }
90
+ };
91
+ }
92
+ generateTitle() {
93
+ return {
94
+ display: true,
95
+ text: `Gas Price Forecaster (GWEI over time from ${this.forecastPayload?.values[0].timestamp ? new Date(this.forecastPayload.values[0].timestamp).toLocaleDateString() : ""})`
96
+ };
97
+ }
98
+ parseTheme(theme) {
99
+ const dark = theme.palette.mode === "dark";
100
+ return {
101
+ dataSetColorPrimary: theme.palette.primary.light,
102
+ dataSetColorSecondary: theme.palette.secondary.light,
103
+ gridColor: dark ? theme.palette.grey[800] : theme.palette.grey[300]
104
+ };
105
+ }
106
+ generateDataSetForecastData() {
107
+ return {
108
+ borderDash: [5],
109
+ borderDashOffset: 0.5,
110
+ data: this.forecastPayload.values.map((price) => ({ x: price.timestamp ?? 0, y: price.value })),
111
+ label: "Forecast Price",
112
+ ...DataPointStyles(this.themeColors?.dataSetColorPrimary),
113
+ ...DataLineStyles(this.themeColors?.dataSetColorPrimary)
114
+ };
115
+ }
116
+ async generateDataSetSourcePayloads() {
117
+ const { sourcePrices } = await SourcePayloads.build("feePerGas.medium");
118
+ return {
119
+ data: sourcePrices,
120
+ label: "Source Prices",
121
+ ...DataLineStyles(this.themeColors?.dataSetColorSecondary),
122
+ ...DataPointStyles(this.themeColors?.dataSetColorSecondary)
123
+ };
124
+ }
125
+ }
126
+ export {
127
+ ForecastLineChartConfigBuilder
128
+ };
129
+ //# sourceMappingURL=ForecastLineChartConfigBuilder.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/ForecastLineChartConfigBuilder.ts"],"sourcesContent":["import { Theme } from '@mui/material'\nimport { ForecastPayload } from '@xyo-network/diviner-forecasting-model'\nimport { ChartData, ChartDataset, ChartOptions, LegendOptions, Point, ScaleChartOptions } from 'chart.js'\n// eslint-disable-next-line import/no-unresolved\nimport { _DeepPartialObject } from 'chart.js/dist/types/utils'\n\nimport { DataLineStyles } from './DataLineStyles'\nimport { DataPointStyles } from './DataPointStyles'\nimport { SourcePayloads } from './SourcePayloads'\n\ninterface SourcePayloadConfig {\n fetch: boolean\n sampleSize?: number\n}\n\ninterface ThemeColors {\n dataSetColorPrimary: string\n dataSetColorSecondary: string\n gridColor: string\n}\n\nconst defaultOptions: () => ChartOptions<'line'> = () => ({\n plugins: {\n legend: {\n position: 'top' as const,\n },\n },\n responsive: true,\n})\n\nexport class ForecastLineChartConfigBuilder {\n data: ChartData<'line'> = {\n datasets: [],\n }\n options: ChartOptions<'line'> = defaultOptions()\n themeColors: ThemeColors | undefined\n\n constructor(\n theme: Theme,\n private payload?: ForecastPayload,\n ) {\n this.themeColors = this.parseTheme(theme)\n }\n\n get forecastPayload() {\n if (this.payload) {\n return this.payload\n } else {\n throw Error('ForecastPayload was not defined')\n }\n }\n\n static async create(theme: Theme, payload?: ForecastPayload, sourcePayloadConfig?: SourcePayloadConfig) {\n const instance = new ForecastLineChartConfigBuilder(theme, payload)\n\n await instance.build(sourcePayloadConfig?.fetch)\n\n instance.refreshValues()\n\n return instance\n }\n\n async build(includeSources?: boolean) {\n this.buildOptions()\n await this.buildData(includeSources)\n return this\n }\n\n async buildData(includeSources?: boolean) {\n const forecastData = this.generateDataSetForecastData()\n\n const datasets: ChartDataset<'line'>[] = [forecastData]\n\n if (includeSources) {\n // build data from sources in forecastPayload\n const sourceData = await this.generateDataSetSourcePayloads()\n datasets.unshift(sourceData)\n\n // add last source point as first item in prediction to connect the lines\n const lastSourceDataItem = sourceData.data.at(-1) as Point\n forecastData.data.unshift(lastSourceDataItem)\n }\n\n this.data = {\n datasets,\n }\n\n return this\n }\n\n buildOptions() {\n if (this.options.plugins) {\n this.options.plugins.title = this.generateTitle()\n this.options.plugins.legend = this.generateLegend()\n }\n this.options.scales = this.generateScales()\n\n return this\n }\n\n refreshValues() {\n this.data = { ...this.data }\n this.options = { ...this.options }\n }\n\n protected generateLegend(): _DeepPartialObject<LegendOptions<'line'>> {\n return {\n labels: {\n pointStyle: 'circle',\n usePointStyle: true,\n },\n }\n }\n\n protected generateScales(): _DeepPartialObject<ScaleChartOptions<'line'>['scales']> {\n return {\n x: {\n grid: {\n color: this.themeColors?.gridColor,\n },\n time: {\n unit: 'minute',\n },\n type: 'time',\n },\n y: {\n grid: {\n color: this.themeColors?.gridColor,\n },\n },\n }\n }\n\n protected generateTitle() {\n return {\n display: true,\n text: `Gas Price Forecaster (GWEI over time from ${\n this.forecastPayload?.values[0].timestamp ? new Date(this.forecastPayload.values[0].timestamp).toLocaleDateString() : ''\n })`,\n }\n }\n\n protected parseTheme(theme: Theme) {\n const dark = theme.palette.mode === 'dark'\n return {\n dataSetColorPrimary: theme.palette.primary.light,\n dataSetColorSecondary: theme.palette.secondary.light,\n gridColor: dark ? theme.palette.grey[800] : theme.palette.grey[300],\n }\n }\n\n private generateDataSetForecastData(): ChartDataset<'line'> {\n return {\n borderDash: [5],\n borderDashOffset: 0.5,\n data: this.forecastPayload.values.map((price) => ({ x: price.timestamp ?? 0, y: price.value })),\n label: 'Forecast Price',\n ...DataPointStyles(this.themeColors?.dataSetColorPrimary),\n ...DataLineStyles(this.themeColors?.dataSetColorPrimary),\n }\n }\n\n private async generateDataSetSourcePayloads(): Promise<ChartDataset<'line'>> {\n const { sourcePrices } = await SourcePayloads.build('feePerGas.medium')\n return {\n data: sourcePrices,\n label: 'Source Prices',\n ...DataLineStyles(this.themeColors?.dataSetColorSecondary),\n ...DataPointStyles(this.themeColors?.dataSetColorSecondary),\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,18 @@
1
+ export declare const MockSourcePayloads: () => {
2
+ baseFee: number;
3
+ feePerGas: {
4
+ high: number;
5
+ low: number;
6
+ medium: number;
7
+ veryHigh: number;
8
+ };
9
+ priorityFeePerGas: {
10
+ high: number;
11
+ low: number;
12
+ medium: number;
13
+ veryHigh: number;
14
+ };
15
+ schema: string;
16
+ timestamp: number;
17
+ }[];
18
+ //# sourceMappingURL=MockSourcePayloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockSourcePayloads.d.ts","sourceRoot":"","sources":["../../../src/lib/MockSourcePayloads.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;GAkB9B,CAAA"}
@@ -0,0 +1,18 @@
1
+ export declare const MockSourcePayloads: () => {
2
+ baseFee: number;
3
+ feePerGas: {
4
+ high: number;
5
+ low: number;
6
+ medium: number;
7
+ veryHigh: number;
8
+ };
9
+ priorityFeePerGas: {
10
+ high: number;
11
+ low: number;
12
+ medium: number;
13
+ veryHigh: number;
14
+ };
15
+ schema: string;
16
+ timestamp: number;
17
+ }[];
18
+ //# sourceMappingURL=MockSourcePayloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockSourcePayloads.d.ts","sourceRoot":"","sources":["../../../src/lib/MockSourcePayloads.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;GAkB9B,CAAA"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var MockSourcePayloads_exports = {};
20
+ __export(MockSourcePayloads_exports, {
21
+ MockSourcePayloads: () => MockSourcePayloads
22
+ });
23
+ module.exports = __toCommonJS(MockSourcePayloads_exports);
24
+ const MockSourcePayloads = () => {
25
+ const tenMin = 6e5;
26
+ return [
27
+ {
28
+ baseFee: 38.90155387825,
29
+ feePerGas: { high: 47.9945864396, low: 39.006868093, medium: 39.306868093, veryHigh: 44.45384380525 },
30
+ priorityFeePerGas: { high: 1.0266666666666666, low: -0.41000000000000003, medium: 0.38, veryHigh: 1.3900000000000001 },
31
+ schema: "network.xyo.blockchain.ethereum.gas",
32
+ timestamp: Date.now() - tenMin
33
+ },
34
+ {
35
+ baseFee: 38.90155387825,
36
+ feePerGas: { high: 47.9945864396, low: 39.006868093, medium: 100, veryHigh: 44.45384380525 },
37
+ priorityFeePerGas: { high: 1.0266666666666666, low: -0.41000000000000003, medium: 0.38, veryHigh: 1.3900000000000001 },
38
+ schema: "network.xyo.blockchain.ethereum.gas",
39
+ timestamp: Date.now()
40
+ }
41
+ ];
42
+ };
43
+ // Annotate the CommonJS export names for ESM import in node:
44
+ 0 && (module.exports = {
45
+ MockSourcePayloads
46
+ });
47
+ //# sourceMappingURL=MockSourcePayloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/MockSourcePayloads.ts"],"sourcesContent":["export const MockSourcePayloads = () => {\n const tenMin = 600000\n return [\n {\n baseFee: 38.90155387825,\n feePerGas: { high: 47.9945864396, low: 39.006868093, medium: 39.306868093, veryHigh: 44.45384380525 },\n priorityFeePerGas: { high: 1.0266666666666666, low: -0.41000000000000003, medium: 0.38, veryHigh: 1.3900000000000001 },\n schema: 'network.xyo.blockchain.ethereum.gas',\n timestamp: Date.now() - tenMin,\n },\n {\n baseFee: 38.90155387825,\n feePerGas: { high: 47.9945864396, low: 39.006868093, medium: 100, veryHigh: 44.45384380525 },\n priorityFeePerGas: { high: 1.0266666666666666, low: -0.41000000000000003, medium: 0.38, veryHigh: 1.3900000000000001 },\n schema: 'network.xyo.blockchain.ethereum.gas',\n timestamp: Date.now(),\n },\n ]\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,qBAAqB,MAAM;AACtC,QAAM,SAAS;AACf,SAAO;AAAA,IACL;AAAA,MACE,SAAS;AAAA,MACT,WAAW,EAAE,MAAM,eAAe,KAAK,cAAc,QAAQ,cAAc,UAAU,eAAe;AAAA,MACpG,mBAAmB,EAAE,MAAM,oBAAoB,KAAK,sBAAsB,QAAQ,MAAM,UAAU,mBAAmB;AAAA,MACrH,QAAQ;AAAA,MACR,WAAW,KAAK,IAAI,IAAI;AAAA,IAC1B;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,WAAW,EAAE,MAAM,eAAe,KAAK,cAAc,QAAQ,KAAK,UAAU,eAAe;AAAA,MAC3F,mBAAmB,EAAE,MAAM,oBAAoB,KAAK,sBAAsB,QAAQ,MAAM,UAAU,mBAAmB;AAAA,MACrH,QAAQ;AAAA,MACR,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,23 @@
1
+ const MockSourcePayloads = () => {
2
+ const tenMin = 6e5;
3
+ return [
4
+ {
5
+ baseFee: 38.90155387825,
6
+ feePerGas: { high: 47.9945864396, low: 39.006868093, medium: 39.306868093, veryHigh: 44.45384380525 },
7
+ priorityFeePerGas: { high: 1.0266666666666666, low: -0.41000000000000003, medium: 0.38, veryHigh: 1.3900000000000001 },
8
+ schema: "network.xyo.blockchain.ethereum.gas",
9
+ timestamp: Date.now() - tenMin
10
+ },
11
+ {
12
+ baseFee: 38.90155387825,
13
+ feePerGas: { high: 47.9945864396, low: 39.006868093, medium: 100, veryHigh: 44.45384380525 },
14
+ priorityFeePerGas: { high: 1.0266666666666666, low: -0.41000000000000003, medium: 0.38, veryHigh: 1.3900000000000001 },
15
+ schema: "network.xyo.blockchain.ethereum.gas",
16
+ timestamp: Date.now()
17
+ }
18
+ ];
19
+ };
20
+ export {
21
+ MockSourcePayloads
22
+ };
23
+ //# sourceMappingURL=MockSourcePayloads.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/MockSourcePayloads.ts"],"sourcesContent":["export const MockSourcePayloads = () => {\n const tenMin = 600000\n return [\n {\n baseFee: 38.90155387825,\n feePerGas: { high: 47.9945864396, low: 39.006868093, medium: 39.306868093, veryHigh: 44.45384380525 },\n priorityFeePerGas: { high: 1.0266666666666666, low: -0.41000000000000003, medium: 0.38, veryHigh: 1.3900000000000001 },\n schema: 'network.xyo.blockchain.ethereum.gas',\n timestamp: Date.now() - tenMin,\n },\n {\n baseFee: 38.90155387825,\n feePerGas: { high: 47.9945864396, low: 39.006868093, medium: 100, veryHigh: 44.45384380525 },\n priorityFeePerGas: { high: 1.0266666666666666, low: -0.41000000000000003, medium: 0.38, veryHigh: 1.3900000000000001 },\n schema: 'network.xyo.blockchain.ethereum.gas',\n timestamp: Date.now(),\n },\n ]\n}\n"],"mappings":"AAAO,MAAM,qBAAqB,MAAM;AACtC,QAAM,SAAS;AACf,SAAO;AAAA,IACL;AAAA,MACE,SAAS;AAAA,MACT,WAAW,EAAE,MAAM,eAAe,KAAK,cAAc,QAAQ,cAAc,UAAU,eAAe;AAAA,MACpG,mBAAmB,EAAE,MAAM,oBAAoB,KAAK,sBAAsB,QAAQ,MAAM,UAAU,mBAAmB;AAAA,MACrH,QAAQ;AAAA,MACR,WAAW,KAAK,IAAI,IAAI;AAAA,IAC1B;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,WAAW,EAAE,MAAM,eAAe,KAAK,cAAc,QAAQ,KAAK,UAAU,eAAe;AAAA,MAC3F,mBAAmB,EAAE,MAAM,oBAAoB,KAAK,sBAAsB,QAAQ,MAAM,UAAU,mBAAmB;AAAA,MACrH,QAAQ;AAAA,MACR,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,30 @@
1
+ import { Payload } from '@xyo-network/payload-model';
2
+ import { Point } from 'chart.js';
3
+ export declare class SourcePayloads {
4
+ sourcePayloads: Payload[];
5
+ sourcePrices: Point[];
6
+ constructor(sourcePayloads: Payload[]);
7
+ get payloads(): ({
8
+ schema: string;
9
+ } & import("@xyo-network/payload-model").PayloadFields)[];
10
+ static build(jsonPath: string): Promise<SourcePayloads>;
11
+ static fetchSourcePayloads(): Promise<{
12
+ baseFee: number;
13
+ feePerGas: {
14
+ high: number;
15
+ low: number;
16
+ medium: number;
17
+ veryHigh: number;
18
+ };
19
+ priorityFeePerGas: {
20
+ high: number;
21
+ low: number;
22
+ medium: number;
23
+ veryHigh: number;
24
+ };
25
+ schema: string;
26
+ timestamp: number;
27
+ }[]>;
28
+ jsonPathTraverser(obj: Payload, path: string[]): any;
29
+ }
30
+ //# sourceMappingURL=SourcePayloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourcePayloads.d.ts","sourceRoot":"","sources":["../../../src/lib/SourcePayloads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAIhC,qBAAa,cAAc;IAGN,cAAc,EAAE,OAAO,EAAE;IAF5C,YAAY,EAAE,KAAK,EAAE,CAAK;gBAEP,cAAc,EAAE,OAAO,EAAE;IAE5C,IAAI,QAAQ;;8DAEX;WAEY,KAAK,CAAC,QAAQ,EAAE,MAAM;WAYtB,mBAAmB;;;;;;;;;;;;;;;;;IAKhC,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;CAe/C"}
@@ -0,0 +1,30 @@
1
+ import { Payload } from '@xyo-network/payload-model';
2
+ import { Point } from 'chart.js';
3
+ export declare class SourcePayloads {
4
+ sourcePayloads: Payload[];
5
+ sourcePrices: Point[];
6
+ constructor(sourcePayloads: Payload[]);
7
+ get payloads(): ({
8
+ schema: string;
9
+ } & import("@xyo-network/payload-model").PayloadFields)[];
10
+ static build(jsonPath: string): Promise<SourcePayloads>;
11
+ static fetchSourcePayloads(): Promise<{
12
+ baseFee: number;
13
+ feePerGas: {
14
+ high: number;
15
+ low: number;
16
+ medium: number;
17
+ veryHigh: number;
18
+ };
19
+ priorityFeePerGas: {
20
+ high: number;
21
+ low: number;
22
+ medium: number;
23
+ veryHigh: number;
24
+ };
25
+ schema: string;
26
+ timestamp: number;
27
+ }[]>;
28
+ jsonPathTraverser(obj: Payload, path: string[]): any;
29
+ }
30
+ //# sourceMappingURL=SourcePayloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourcePayloads.d.ts","sourceRoot":"","sources":["../../../src/lib/SourcePayloads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAIhC,qBAAa,cAAc;IAGN,cAAc,EAAE,OAAO,EAAE;IAF5C,YAAY,EAAE,KAAK,EAAE,CAAK;gBAEP,cAAc,EAAE,OAAO,EAAE;IAE5C,IAAI,QAAQ;;8DAEX;WAEY,KAAK,CAAC,QAAQ,EAAE,MAAM;WAYtB,mBAAmB;;;;;;;;;;;;;;;;;IAKhC,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;CAe/C"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var SourcePayloads_exports = {};
20
+ __export(SourcePayloads_exports, {
21
+ SourcePayloads: () => SourcePayloads
22
+ });
23
+ module.exports = __toCommonJS(SourcePayloads_exports);
24
+ var import_MockSourcePayloads = require("./MockSourcePayloads");
25
+ class SourcePayloads {
26
+ constructor(sourcePayloads) {
27
+ this.sourcePayloads = sourcePayloads;
28
+ }
29
+ sourcePrices = [];
30
+ get payloads() {
31
+ return this.sourcePayloads;
32
+ }
33
+ static async build(jsonPath) {
34
+ const sourcePayloads = await this.fetchSourcePayloads();
35
+ const instance = new this(sourcePayloads);
36
+ const paths = jsonPath.split(".");
37
+ instance.sourcePrices = sourcePayloads.map((payload) => {
38
+ return { x: payload.timestamp, y: instance.jsonPathTraverser(payload, paths) };
39
+ });
40
+ return instance;
41
+ }
42
+ // TODO - fetch from archivist
43
+ static async fetchSourcePayloads() {
44
+ const payloads = await Promise.resolve((0, import_MockSourcePayloads.MockSourcePayloads)());
45
+ return payloads;
46
+ }
47
+ jsonPathTraverser(obj, path) {
48
+ let result = obj;
49
+ for (const key of path) {
50
+ if (key in result) {
51
+ const foundKey = key;
52
+ result = result[foundKey];
53
+ } else {
54
+ result = void 0;
55
+ break;
56
+ }
57
+ }
58
+ return result;
59
+ }
60
+ }
61
+ // Annotate the CommonJS export names for ESM import in node:
62
+ 0 && (module.exports = {
63
+ SourcePayloads
64
+ });
65
+ //# sourceMappingURL=SourcePayloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/SourcePayloads.ts"],"sourcesContent":["import { Payload } from '@xyo-network/payload-model'\nimport { Point } from 'chart.js'\n\nimport { MockSourcePayloads } from './MockSourcePayloads'\n\nexport class SourcePayloads {\n sourcePrices: Point[] = []\n\n constructor(public sourcePayloads: Payload[]) {}\n\n get payloads() {\n return this.sourcePayloads\n }\n\n static async build(jsonPath: string) {\n const sourcePayloads = await this.fetchSourcePayloads()\n const instance = new this(sourcePayloads)\n\n const paths = jsonPath.split('.')\n instance.sourcePrices = sourcePayloads.map((payload) => {\n return { x: payload.timestamp, y: instance.jsonPathTraverser(payload, paths) }\n })\n return instance\n }\n\n // TODO - fetch from archivist\n static async fetchSourcePayloads() {\n const payloads = await Promise.resolve(MockSourcePayloads())\n return payloads\n }\n\n jsonPathTraverser(obj: Payload, path: string[]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let result: any = obj\n for (const key of path) {\n if (key in result) {\n const foundKey = key as keyof typeof result\n result = result[foundKey]\n } else {\n result = undefined\n break\n }\n }\n\n return result\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,gCAAmC;AAE5B,MAAM,eAAe;AAAA,EAG1B,YAAmB,gBAA2B;AAA3B;AAAA,EAA4B;AAAA,EAF/C,eAAwB,CAAC;AAAA,EAIzB,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa,MAAM,UAAkB;AACnC,UAAM,iBAAiB,MAAM,KAAK,oBAAoB;AACtD,UAAM,WAAW,IAAI,KAAK,cAAc;AAExC,UAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,aAAS,eAAe,eAAe,IAAI,CAAC,YAAY;AACtD,aAAO,EAAE,GAAG,QAAQ,WAAW,GAAG,SAAS,kBAAkB,SAAS,KAAK,EAAE;AAAA,IAC/E,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,aAAa,sBAAsB;AACjC,UAAM,WAAW,MAAM,QAAQ,YAAQ,8CAAmB,CAAC;AAC3D,WAAO;AAAA,EACT;AAAA,EAEA,kBAAkB,KAAc,MAAgB;AAE9C,QAAI,SAAc;AAClB,eAAW,OAAO,MAAM;AACtB,UAAI,OAAO,QAAQ;AACjB,cAAM,WAAW;AACjB,iBAAS,OAAO,QAAQ;AAAA,MAC1B,OAAO;AACL,iBAAS;AACT;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}