@fatehan/tsrp 1.1.14 → 1.1.15

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
@@ -7,179 +7,93 @@ exports.ReportService = void 0;
7
7
  const report_1 = require("./fatehan/reports/report");
8
8
  const system_io_1 = require("./store/system.io");
9
9
  const system_io_2 = __importDefault(require("./system.io"));
10
+ /**
11
+ * A service for fetching reports from the com.fatehan.reports.ReportService backend.
12
+ * Implements a dynamic header provider to act as an interceptor for authentication.
13
+ */
10
14
  class ReportService {
11
- constructor(url, authorization, organizationId) {
15
+ /**
16
+ * @param url The base URL of the API server.
17
+ * @param headerProvider A function that returns headers to be added to each request.
18
+ */
19
+ constructor(url, headerProvider) {
12
20
  this.namespace = "com.fatehan.reports.ReportService";
13
21
  this.url = url;
14
- this.headers = {
22
+ this.getDynamicHeaders = headerProvider;
23
+ }
24
+ async _call(methodName, request, encoder, decoder) {
25
+ const dynamicHeaders = await this.getDynamicHeaders();
26
+ const headers = {
15
27
  "Content-Type": "application/octet-stream",
16
28
  Accept: "application/octet-stream",
29
+ ...dynamicHeaders,
17
30
  };
18
- if (authorization) {
19
- this.headers["authorization"] = "Bearer " + authorization;
31
+ const response = await fetch(`${this.url}/${this.namespace}/${methodName}`, {
32
+ method: "POST",
33
+ headers: headers,
34
+ body: new Uint8Array(encoder.encode(request).finish()),
35
+ });
36
+ if (response.ok) {
37
+ const buffer = await response.arrayBuffer();
38
+ return decoder.decode(new Uint8Array(buffer));
20
39
  }
21
- if (organizationId) {
22
- this.headers["organization-id"] = organizationId;
40
+ else {
41
+ const errorText = await response.text();
42
+ throw new Error(`API Error (${response.status}): ${errorText}`);
23
43
  }
24
44
  }
45
+ // --- Public Unary API Methods ---
25
46
  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
- });
47
+ return this._call("RouteStopReport", request, report_1.RouteStopRequest, report_1.RouteStopResponse);
39
48
  }
40
49
  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
- });
50
+ return this._call("TripPerformanceReport", request, report_1.TripPerformanceRequest, report_1.TripPerformanceResponse);
54
51
  }
55
52
  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
- });
53
+ return this._call("TripReport", request, report_1.TripReportRequest, report_1.TripReportResponse);
69
54
  }
70
55
  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
- });
56
+ return this._call("RouteReviewReport", request, report_1.RouteReviewRequest, report_1.RouteReviewResponse);
84
57
  }
85
58
  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
- });
59
+ return this._call("DashboardIndividual", request, report_1.DashboardIndividualRequest, report_1.DashboardIndividualResponse);
99
60
  }
100
61
  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
- });
62
+ return this._call("LogReport", request, report_1.LogRequest, report_1.LogResponse);
114
63
  }
115
64
  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
- });
65
+ return this._call("DeviceDataReport", request, report_1.DeviceDataRequest, report_1.DeviceDataResponse);
129
66
  }
130
67
  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
- });
68
+ return this._call("AreaSummaryReviewReport", request, report_1.AreaSummaryReviewRequest, report_1.AreaSummaryReviewResponse);
144
69
  }
145
70
  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
- });
71
+ return this._call("WorkCycleReport", request, report_1.WorkCycleRequest, report_1.WorkCycleResponse);
159
72
  }
160
73
  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
- });
74
+ return this._call("CommandHistoryReport", request, report_1.CommandHistoryRequest, report_1.CommandHistoryResponse);
174
75
  }
76
+ WorkflowReport(request) {
77
+ return this._call("WorkflowReport", request, report_1.WorkflowRequest, report_1.WorkflowResponse);
78
+ }
79
+ // --- Special Case Methods ---
80
+ /**
81
+ * Handles a streaming RPC for chart data.
82
+ */
175
83
  async ChartReport(request, responses) {
84
+ const dynamicHeaders = await this.getDynamicHeaders();
85
+ const headers = {
86
+ "Content-Type": "application/octet-stream",
87
+ Accept: "application/octet-stream",
88
+ ...dynamicHeaders,
89
+ };
176
90
  const res = await fetch(`${this.url}/${this.namespace}/ChartReport`, {
177
91
  method: "POST",
178
- headers: this.headers,
92
+ headers: headers,
179
93
  body: new Uint8Array(report_1.ChartRequest.encode(request).finish()),
180
94
  });
181
95
  if (res.body == null) {
182
- console.error("request body is empty");
96
+ console.error("ChartReport response body is null.");
183
97
  return;
184
98
  }
185
99
  const reader = res.body.getReader();
@@ -196,65 +110,43 @@ class ReportService {
196
110
  const msgLen = new DataView(buffer.buffer).getUint32(0);
197
111
  if (buffer.length < 4 + msgLen)
198
112
  break;
199
- responses(report_1.ChartResponse.decode(buffer.slice(4, 4 + msgLen)));
113
+ const message = buffer.slice(4, 4 + msgLen);
114
+ responses(report_1.ChartResponse.decode(message));
200
115
  buffer = buffer.slice(4 + msgLen);
201
116
  }
202
117
  }
203
118
  }
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
- });
119
+ /**
120
+ * Fetches System IO data, using a cache first.
121
+ */
122
+ async SystemIoReport(request) {
123
+ const cachedIo = (0, system_io_1.getSystemIoCache)();
124
+ if (cachedIo != null) {
125
+ return { cost: 0, ios: cachedIo, records: cachedIo.length };
126
+ }
127
+ const response = await this._call("SystemIoReport", request, report_1.SystemIoRequest, report_1.SystemIoResponse);
128
+ (0, system_io_1.setSystemIoCache)(response.ios);
129
+ return response;
244
130
  }
131
+ /**
132
+ * A helper that uses SystemIoReport internally if needed.
133
+ */
245
134
  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;
135
+ var _a;
136
+ let ioData = systemIo;
137
+ if (ioData == null) {
138
+ try {
139
+ const result = await this.SystemIoReport({}); // This call is now authenticated
140
+ if (!((_a = result === null || result === void 0 ? void 0 : result.ios) === null || _a === void 0 ? void 0 : _a.length))
141
+ return [];
142
+ ioData = result.ios;
143
+ }
144
+ catch (error) {
145
+ console.error("Failed to fetch SystemIoReport in SystemIoCast:", error);
146
+ return [];
254
147
  }
255
- resolve((0, system_io_2.default)(systemIo, deviceIo, data));
256
- return;
257
- });
148
+ }
149
+ return (0, system_io_2.default)(ioData, deviceIo, data);
258
150
  }
259
151
  }
260
152
  exports.ReportService = ReportService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fatehan/tsrp",
3
- "version": "1.1.14",
3
+ "version": "1.1.15",
4
4
  "description": "fatehan main models",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  "devDependencies": {
29
29
  "@types/google-protobuf": "^3.15.12",
30
30
  "@types/long": "^5.0.0",
31
- "@types/node": "^24.5.0",
31
+ "@types/node": "^24.5.2",
32
32
  "ts-node": "^10.9.2",
33
33
  "ts-proto": "^2.7.7",
34
34
  "typescript": "^5.9.2",