@fatehan/tsrp 1.1.14 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/report.js CHANGED
@@ -1,185 +1,130 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.ReportService = void 0;
7
- const report_1 = require("./fatehan/reports/report");
8
40
  const system_io_1 = require("./store/system.io");
9
41
  const system_io_2 = __importDefault(require("./system.io"));
10
42
  class ReportService {
11
- constructor(url, authorization, organizationId) {
43
+ constructor(url, headerProvider) {
12
44
  this.namespace = "com.fatehan.reports.ReportService";
13
45
  this.url = url;
14
- this.headers = {
46
+ this.getDynamicHeaders = headerProvider;
47
+ }
48
+ async _call(methodName, request, encoder, decoder) {
49
+ const dynamicHeaders = await this.getDynamicHeaders();
50
+ const headers = {
15
51
  "Content-Type": "application/octet-stream",
16
52
  Accept: "application/octet-stream",
53
+ ...dynamicHeaders,
17
54
  };
18
- if (authorization) {
19
- this.headers["authorization"] = "Bearer " + authorization;
55
+ const response = await fetch(`${this.url}/${this.namespace}/${methodName}`, {
56
+ method: "POST",
57
+ headers: headers,
58
+ body: new Uint8Array(encoder.encode(request).finish()),
59
+ });
60
+ if (response.ok) {
61
+ const buffer = await response.arrayBuffer();
62
+ return decoder.decode(new Uint8Array(buffer));
20
63
  }
21
- if (organizationId) {
22
- this.headers["organization-id"] = organizationId;
64
+ else {
65
+ const errorText = await response.text();
66
+ throw new Error(`API Error (${response.status}): ${errorText}`);
23
67
  }
24
68
  }
25
- RouteStopReport(request) {
26
- return new Promise(async (resolve, reject) => {
27
- const response = await fetch(`${this.url}/${this.namespace}/RouteStopReport`, {
28
- method: "POST",
29
- headers: this.headers,
30
- body: new Uint8Array(report_1.RouteStopRequest.encode(request).finish()),
31
- });
32
- if (response.ok) {
33
- resolve(report_1.RouteStopResponse.decode(new Uint8Array(await response.arrayBuffer())));
34
- }
35
- else {
36
- reject(await response.text());
37
- }
38
- });
69
+ async RouteStopReport(request) {
70
+ const { RouteStopRequest, RouteStopResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
71
+ return this._call("RouteStopReport", request, RouteStopRequest, RouteStopResponse);
39
72
  }
40
- TripPerformanceReport(request) {
41
- return new Promise(async (resolve, reject) => {
42
- const response = await fetch(`${this.url}/${this.namespace}/TripPerformanceReport`, {
43
- method: "POST",
44
- headers: this.headers,
45
- body: new Uint8Array(report_1.TripPerformanceRequest.encode(request).finish()),
46
- });
47
- if (response.ok) {
48
- resolve(report_1.TripPerformanceResponse.decode(new Uint8Array(await response.arrayBuffer())));
49
- }
50
- else {
51
- reject(await response.text());
52
- }
53
- });
73
+ async TripPerformanceReport(request) {
74
+ const { TripPerformanceRequest, TripPerformanceResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
75
+ return this._call("TripPerformanceReport", request, TripPerformanceRequest, TripPerformanceResponse);
54
76
  }
55
- TripReport(request) {
56
- return new Promise(async (resolve, reject) => {
57
- const response = await fetch(`${this.url}/${this.namespace}/TripReport`, {
58
- method: "POST",
59
- headers: this.headers,
60
- body: new Uint8Array(report_1.TripReportRequest.encode(request).finish()),
61
- });
62
- if (response.ok) {
63
- resolve(report_1.TripReportResponse.decode(new Uint8Array(await response.arrayBuffer())));
64
- }
65
- else {
66
- reject(await response.text());
67
- }
68
- });
77
+ async TripReport(request) {
78
+ const { TripReportRequest, TripReportResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
79
+ return this._call("TripReport", request, TripReportRequest, TripReportResponse);
69
80
  }
70
- RouteReviewReport(request) {
71
- return new Promise(async (resolve, reject) => {
72
- const response = await fetch(`${this.url}/${this.namespace}/RouteReviewReport`, {
73
- method: "POST",
74
- headers: this.headers,
75
- body: new Uint8Array(report_1.RouteReviewRequest.encode(request).finish()),
76
- });
77
- if (response.ok) {
78
- resolve(report_1.RouteReviewResponse.decode(new Uint8Array(await response.arrayBuffer())));
79
- }
80
- else {
81
- reject(await response.text());
82
- }
83
- });
81
+ async RouteReviewReport(request) {
82
+ const { RouteReviewRequest, RouteReviewResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
83
+ return this._call("RouteReviewReport", request, RouteReviewRequest, RouteReviewResponse);
84
84
  }
85
- DashboardIndividual(request) {
86
- return new Promise(async (resolve, reject) => {
87
- const response = await fetch(`${this.url}/${this.namespace}/DashboardIndividual`, {
88
- method: "POST",
89
- headers: this.headers,
90
- body: new Uint8Array(report_1.DashboardIndividualRequest.encode(request).finish()),
91
- });
92
- if (response.ok) {
93
- resolve(report_1.DashboardIndividualResponse.decode(new Uint8Array(await response.arrayBuffer())));
94
- }
95
- else {
96
- reject(await response.text());
97
- }
98
- });
85
+ async DashboardIndividual(request) {
86
+ const { DashboardIndividualRequest, DashboardIndividualResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
87
+ return this._call("DashboardIndividual", request, DashboardIndividualRequest, DashboardIndividualResponse);
99
88
  }
100
- LogReport(request) {
101
- return new Promise(async (resolve, reject) => {
102
- const response = await fetch(`${this.url}/${this.namespace}/LogReport`, {
103
- method: "POST",
104
- headers: this.headers,
105
- body: new Uint8Array(report_1.LogRequest.encode(request).finish()),
106
- });
107
- if (response.ok) {
108
- resolve(report_1.LogResponse.decode(new Uint8Array(await response.arrayBuffer())));
109
- }
110
- else {
111
- reject(await response.text());
112
- }
113
- });
89
+ async LogReport(request) {
90
+ const { LogRequest, LogResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
91
+ return this._call("LogReport", request, LogRequest, LogResponse);
114
92
  }
115
- DataReport(request) {
116
- return new Promise(async (resolve, reject) => {
117
- const response = await fetch(`${this.url}/${this.namespace}/DeviceDataReport`, {
118
- method: "POST",
119
- headers: this.headers,
120
- body: new Uint8Array(report_1.DeviceDataRequest.encode(request).finish()),
121
- });
122
- if (response.ok) {
123
- resolve(report_1.DeviceDataResponse.decode(new Uint8Array(await response.arrayBuffer())));
124
- }
125
- else {
126
- reject(await response.text());
127
- }
128
- });
93
+ async DataReport(request) {
94
+ const { DeviceDataRequest, DeviceDataResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
95
+ return this._call("DeviceDataReport", request, DeviceDataRequest, DeviceDataResponse);
129
96
  }
130
- AreaSummaryReviewReport(request) {
131
- return new Promise(async (resolve, reject) => {
132
- const response = await fetch(`${this.url}/${this.namespace}/AreaSummaryReviewReport`, {
133
- method: "POST",
134
- headers: this.headers,
135
- body: new Uint8Array(report_1.AreaSummaryReviewRequest.encode(request).finish()),
136
- });
137
- if (response.ok) {
138
- resolve(report_1.AreaSummaryReviewResponse.decode(new Uint8Array(await response.arrayBuffer())));
139
- }
140
- else {
141
- reject(await response.text());
142
- }
143
- });
97
+ async AreaSummaryReviewReport(request) {
98
+ const { AreaSummaryReviewRequest, AreaSummaryReviewResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
99
+ return this._call("AreaSummaryReviewReport", request, AreaSummaryReviewRequest, AreaSummaryReviewResponse);
144
100
  }
145
- WorkCycleReport(request) {
146
- return new Promise(async (resolve, reject) => {
147
- const response = await fetch(`${this.url}/${this.namespace}/WorkCycleReport`, {
148
- method: "POST",
149
- headers: this.headers,
150
- body: new Uint8Array(report_1.WorkCycleRequest.encode(request).finish()),
151
- });
152
- if (response.ok) {
153
- resolve(report_1.WorkCycleResponse.decode(new Uint8Array(await response.arrayBuffer())));
154
- }
155
- else {
156
- reject(await response.text());
157
- }
158
- });
101
+ async WorkCycleReport(request) {
102
+ const { WorkCycleRequest, WorkCycleResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
103
+ return this._call("WorkCycleReport", request, WorkCycleRequest, WorkCycleResponse);
159
104
  }
160
- CommandHistoryReport(request) {
161
- return new Promise(async (resolve, reject) => {
162
- const response = await fetch(`${this.url}/${this.namespace}/CommandHistoryReport`, {
163
- method: "POST",
164
- headers: this.headers,
165
- body: new Uint8Array(report_1.CommandHistoryRequest.encode(request).finish()),
166
- });
167
- if (response.ok) {
168
- resolve(report_1.CommandHistoryResponse.decode(new Uint8Array(await response.arrayBuffer())));
169
- }
170
- else {
171
- reject(await response.text());
172
- }
173
- });
105
+ async CommandHistoryReport(request) {
106
+ const { CommandHistoryRequest, CommandHistoryResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
107
+ return this._call("CommandHistoryReport", request, CommandHistoryRequest, CommandHistoryResponse);
108
+ }
109
+ async WorkflowReport(request) {
110
+ const { WorkflowRequest, WorkflowResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
111
+ return this._call("WorkflowReport", request, WorkflowRequest, WorkflowResponse);
174
112
  }
175
113
  async ChartReport(request, responses) {
114
+ const { ChartRequest, ChartResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
115
+ const dynamicHeaders = await this.getDynamicHeaders();
116
+ const headers = {
117
+ "Content-Type": "application/octet-stream",
118
+ Accept: "application/octet-stream",
119
+ ...dynamicHeaders,
120
+ };
176
121
  const res = await fetch(`${this.url}/${this.namespace}/ChartReport`, {
177
122
  method: "POST",
178
- headers: this.headers,
179
- body: new Uint8Array(report_1.ChartRequest.encode(request).finish()),
123
+ headers: headers,
124
+ body: new Uint8Array(ChartRequest.encode(request).finish()),
180
125
  });
181
126
  if (res.body == null) {
182
- console.error("request body is empty");
127
+ console.error("ChartReport response body is null.");
183
128
  return;
184
129
  }
185
130
  const reader = res.body.getReader();
@@ -196,65 +141,38 @@ class ReportService {
196
141
  const msgLen = new DataView(buffer.buffer).getUint32(0);
197
142
  if (buffer.length < 4 + msgLen)
198
143
  break;
199
- responses(report_1.ChartResponse.decode(buffer.slice(4, 4 + msgLen)));
144
+ const message = buffer.slice(4, 4 + msgLen);
145
+ responses(ChartResponse.decode(message));
200
146
  buffer = buffer.slice(4 + msgLen);
201
147
  }
202
148
  }
203
149
  }
204
- SystemIoReport(request) {
205
- return new Promise(async (resolve, reject) => {
206
- let systemIo = (0, system_io_1.getSystemIoCache)();
207
- if (systemIo != null) {
208
- resolve({
209
- cost: 0,
210
- ios: systemIo,
211
- records: systemIo.length,
212
- });
213
- return;
214
- }
215
- const response = await fetch(`${this.url}/${this.namespace}/SystemIoReport`, {
216
- method: "POST",
217
- headers: this.headers,
218
- body: new Uint8Array(report_1.SystemIoRequest.encode(request).finish()),
219
- });
220
- if (response.ok) {
221
- let systemIo = report_1.SystemIoResponse.decode(new Uint8Array(await response.arrayBuffer()));
222
- (0, system_io_1.setSystemIoCache)(systemIo.ios);
223
- resolve(systemIo);
224
- }
225
- else {
226
- reject(await response.text());
227
- }
228
- });
229
- }
230
- WorkflowReport(request) {
231
- return new Promise(async (resolve, reject) => {
232
- const response = await fetch(`${this.url}/${this.namespace}/WorkflowReport`, {
233
- method: "POST",
234
- headers: this.headers,
235
- body: new Uint8Array(report_1.WorkflowRequest.encode(request).finish()),
236
- });
237
- if (response.ok) {
238
- resolve(report_1.WorkflowResponse.decode(new Uint8Array(await response.arrayBuffer())));
239
- }
240
- else {
241
- reject(await response.text());
242
- }
243
- });
150
+ async SystemIoReport(request) {
151
+ const cachedIo = (0, system_io_1.getSystemIoCache)();
152
+ if (cachedIo != null) {
153
+ return { cost: 0, ios: cachedIo, records: cachedIo.length };
154
+ }
155
+ const { SystemIoRequest, SystemIoResponse } = await Promise.resolve().then(() => __importStar(require("./fatehan/reports/report")));
156
+ const response = await this._call("SystemIoReport", request, SystemIoRequest, SystemIoResponse);
157
+ (0, system_io_1.setSystemIoCache)(response.ios);
158
+ return response;
244
159
  }
245
160
  async SystemIoCast(systemIo, deviceIo, data) {
246
- return new Promise(async (resolve) => {
247
- if (systemIo == null) {
248
- let result = await this.SystemIoReport({});
249
- if (result == null || result.ios == null || result.ios.length == 0) {
250
- resolve([]);
251
- return;
252
- }
253
- systemIo = result.ios;
161
+ var _a;
162
+ let ioData = systemIo;
163
+ if (ioData == null) {
164
+ try {
165
+ const result = await this.SystemIoReport({});
166
+ if (!((_a = result === null || result === void 0 ? void 0 : result.ios) === null || _a === void 0 ? void 0 : _a.length))
167
+ return [];
168
+ ioData = result.ios;
169
+ }
170
+ catch (error) {
171
+ console.error("Failed to fetch SystemIoReport in SystemIoCast:", error);
172
+ return [];
254
173
  }
255
- resolve((0, system_io_2.default)(systemIo, deviceIo, data));
256
- return;
257
- });
174
+ }
175
+ return (0, system_io_2.default)(ioData, deviceIo, data);
258
176
  }
259
177
  }
260
178
  exports.ReportService = ReportService;
@@ -0,0 +1,39 @@
1
+ import { AreaSummaryReviewRequest, AreaSummaryReviewResponse, ChartRequest, ChartResponse, CommandHistoryRequest, CommandHistoryResponse, DashboardIndividualRequest, DashboardIndividualResponse, DeviceDataRequest, DeviceDataResponse, LogRequest, LogResponse, RouteReviewRequest, RouteReviewResponse, RouteStopRequest, RouteStopResponse, SystemIoRequest, SystemIoResponse, TripPerformanceRequest, TripPerformanceResponse, TripReportRequest, TripReportResponse, WorkCycleRequest, WorkCycleResponse, WorkflowRequest, WorkflowResponse } from "./fatehan/reports/report";
2
+ import { ShownIo, SystemIo } from "./fatehan/devices/devices";
3
+ import { Data } from "./fatehan/packets/dataModel";
4
+ export type HeaderProvider = () => Promise<HeadersInit> | HeadersInit;
5
+ export declare class ReportService {
6
+ private readonly url;
7
+ private readonly namespace;
8
+ private readonly getDynamicHeaders;
9
+ /**
10
+ * @param url The base URL of the API server.
11
+ * @param headerProvider A function that returns headers to be added to each request.
12
+ */
13
+ constructor(url: string, headerProvider: HeaderProvider);
14
+ private _call;
15
+ RouteStopReport(request: RouteStopRequest): Promise<RouteStopResponse>;
16
+ TripPerformanceReport(request: TripPerformanceRequest): Promise<TripPerformanceResponse>;
17
+ TripReport(request: TripReportRequest): Promise<TripReportResponse>;
18
+ RouteReviewReport(request: RouteReviewRequest): Promise<RouteReviewResponse>;
19
+ DashboardIndividual(request: DashboardIndividualRequest): Promise<DashboardIndividualResponse>;
20
+ LogReport(request: LogRequest): Promise<LogResponse>;
21
+ DataReport(request: DeviceDataRequest): Promise<DeviceDataResponse>;
22
+ AreaSummaryReviewReport(request: AreaSummaryReviewRequest): Promise<AreaSummaryReviewResponse>;
23
+ WorkCycleReport(request: WorkCycleRequest): Promise<WorkCycleResponse>;
24
+ CommandHistoryReport(request: CommandHistoryRequest): Promise<CommandHistoryResponse>;
25
+ WorkflowReport(request: WorkflowRequest): Promise<WorkflowResponse>;
26
+ /**
27
+ * Handles a streaming RPC for chart data.
28
+ */
29
+ ChartReport(request: ChartRequest, responses: (chunk: ChartResponse) => void): Promise<void>;
30
+ /**
31
+ * Fetches System IO data, using a cache first.
32
+ */
33
+ SystemIoReport(request: SystemIoRequest): Promise<SystemIoResponse>;
34
+ /**
35
+ * A helper that uses SystemIoReport internally if needed.
36
+ */
37
+ SystemIoCast(systemIo: SystemIo[] | null, deviceIo: SystemIo[], data: Data): Promise<ShownIo[]>;
38
+ }
39
+ //# sourceMappingURL=report.old.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.old.d.ts","sourceRoot":"","sources":["../src/report.old.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAGnD,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;AAEtE,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+C;IACzE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiB;IAEnD;;;OAGG;gBACS,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc;YAKzC,KAAK;IA8BZ,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAItE,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIxF,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAInE,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI5E,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAI9F,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAIpD,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAInE,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAI9F,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAItE,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIrF,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAM1E;;OAEG;IACU,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI;IA0CzF;;OAEG;IACU,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAWhF;;OAEG;IACU,YAAY,CACrB,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAC3B,QAAQ,EAAE,QAAQ,EAAE,EACpB,IAAI,EAAE,IAAI,GACX,OAAO,CAAC,OAAO,EAAE,CAAC;CAcxB"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ReportService = void 0;
7
+ const report_1 = require("./fatehan/reports/report");
8
+ const system_io_1 = require("./store/system.io");
9
+ const system_io_2 = __importDefault(require("./system.io"));
10
+ class ReportService {
11
+ /**
12
+ * @param url The base URL of the API server.
13
+ * @param headerProvider A function that returns headers to be added to each request.
14
+ */
15
+ constructor(url, headerProvider) {
16
+ this.namespace = "com.fatehan.reports.ReportService";
17
+ this.url = url;
18
+ this.getDynamicHeaders = headerProvider;
19
+ }
20
+ async _call(methodName, request, encoder, decoder) {
21
+ const dynamicHeaders = await this.getDynamicHeaders();
22
+ const headers = {
23
+ "Content-Type": "application/octet-stream",
24
+ Accept: "application/octet-stream",
25
+ ...dynamicHeaders,
26
+ };
27
+ const response = await fetch(`${this.url}/${this.namespace}/${methodName}`, {
28
+ method: "POST",
29
+ headers: headers,
30
+ body: new Uint8Array(encoder.encode(request).finish()),
31
+ });
32
+ if (response.ok) {
33
+ const buffer = await response.arrayBuffer();
34
+ return decoder.decode(new Uint8Array(buffer));
35
+ }
36
+ else {
37
+ const errorText = await response.text();
38
+ throw new Error(`API Error (${response.status}): ${errorText}`);
39
+ }
40
+ }
41
+ // --- Public Unary API Methods ---
42
+ RouteStopReport(request) {
43
+ return this._call("RouteStopReport", request, report_1.RouteStopRequest, report_1.RouteStopResponse);
44
+ }
45
+ TripPerformanceReport(request) {
46
+ return this._call("TripPerformanceReport", request, report_1.TripPerformanceRequest, report_1.TripPerformanceResponse);
47
+ }
48
+ TripReport(request) {
49
+ return this._call("TripReport", request, report_1.TripReportRequest, report_1.TripReportResponse);
50
+ }
51
+ RouteReviewReport(request) {
52
+ return this._call("RouteReviewReport", request, report_1.RouteReviewRequest, report_1.RouteReviewResponse);
53
+ }
54
+ DashboardIndividual(request) {
55
+ return this._call("DashboardIndividual", request, report_1.DashboardIndividualRequest, report_1.DashboardIndividualResponse);
56
+ }
57
+ LogReport(request) {
58
+ return this._call("LogReport", request, report_1.LogRequest, report_1.LogResponse);
59
+ }
60
+ DataReport(request) {
61
+ return this._call("DeviceDataReport", request, report_1.DeviceDataRequest, report_1.DeviceDataResponse);
62
+ }
63
+ AreaSummaryReviewReport(request) {
64
+ return this._call("AreaSummaryReviewReport", request, report_1.AreaSummaryReviewRequest, report_1.AreaSummaryReviewResponse);
65
+ }
66
+ WorkCycleReport(request) {
67
+ return this._call("WorkCycleReport", request, report_1.WorkCycleRequest, report_1.WorkCycleResponse);
68
+ }
69
+ CommandHistoryReport(request) {
70
+ return this._call("CommandHistoryReport", request, report_1.CommandHistoryRequest, report_1.CommandHistoryResponse);
71
+ }
72
+ WorkflowReport(request) {
73
+ return this._call("WorkflowReport", request, report_1.WorkflowRequest, report_1.WorkflowResponse);
74
+ }
75
+ // --- Special Case Methods ---
76
+ /**
77
+ * Handles a streaming RPC for chart data.
78
+ */
79
+ async ChartReport(request, responses) {
80
+ const dynamicHeaders = await this.getDynamicHeaders();
81
+ const headers = {
82
+ "Content-Type": "application/octet-stream",
83
+ Accept: "application/octet-stream",
84
+ ...dynamicHeaders,
85
+ };
86
+ const res = await fetch(`${this.url}/${this.namespace}/ChartReport`, {
87
+ method: "POST",
88
+ headers: headers,
89
+ body: new Uint8Array(report_1.ChartRequest.encode(request).finish()),
90
+ });
91
+ if (res.body == null) {
92
+ console.error("ChartReport response body is null.");
93
+ return;
94
+ }
95
+ const reader = res.body.getReader();
96
+ let buffer = new Uint8Array(0);
97
+ while (true) {
98
+ const { done, value } = await reader.read();
99
+ if (done)
100
+ break;
101
+ const tmp = new Uint8Array(buffer.length + value.length);
102
+ tmp.set(buffer);
103
+ tmp.set(value, buffer.length);
104
+ buffer = tmp;
105
+ while (buffer.length >= 4) {
106
+ const msgLen = new DataView(buffer.buffer).getUint32(0);
107
+ if (buffer.length < 4 + msgLen)
108
+ break;
109
+ const message = buffer.slice(4, 4 + msgLen);
110
+ responses(report_1.ChartResponse.decode(message));
111
+ buffer = buffer.slice(4 + msgLen);
112
+ }
113
+ }
114
+ }
115
+ /**
116
+ * Fetches System IO data, using a cache first.
117
+ */
118
+ async SystemIoReport(request) {
119
+ const cachedIo = (0, system_io_1.getSystemIoCache)();
120
+ if (cachedIo != null) {
121
+ return { cost: 0, ios: cachedIo, records: cachedIo.length };
122
+ }
123
+ const response = await this._call("SystemIoReport", request, report_1.SystemIoRequest, report_1.SystemIoResponse);
124
+ (0, system_io_1.setSystemIoCache)(response.ios);
125
+ return response;
126
+ }
127
+ /**
128
+ * A helper that uses SystemIoReport internally if needed.
129
+ */
130
+ async SystemIoCast(systemIo, deviceIo, data) {
131
+ var _a;
132
+ let ioData = systemIo;
133
+ if (ioData == null) {
134
+ try {
135
+ const result = await this.SystemIoReport({}); // This call is now authenticated
136
+ if (!((_a = result === null || result === void 0 ? void 0 : result.ios) === null || _a === void 0 ? void 0 : _a.length))
137
+ return [];
138
+ ioData = result.ios;
139
+ }
140
+ catch (error) {
141
+ console.error("Failed to fetch SystemIoReport in SystemIoCast:", error);
142
+ return [];
143
+ }
144
+ }
145
+ return (0, system_io_2.default)(ioData, deviceIo, data);
146
+ }
147
+ }
148
+ exports.ReportService = ReportService;