@distrohelena/canton-explorer 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/.env.example +9 -0
  2. package/LICENSE +184 -0
  3. package/README.md +63 -0
  4. package/bin/canton-explorer.js +68 -0
  5. package/config/nodes.example.json +35 -0
  6. package/dist/public/assets/index-NfJYgVwb.css +1 -0
  7. package/dist/public/assets/index-ybPCCjei.js +1 -0
  8. package/dist/public/cantonexplorer.png +0 -0
  9. package/dist/public/favicon.svg +1 -0
  10. package/dist/public/icons.svg +24 -0
  11. package/dist/public/index.html +14 -0
  12. package/dist/scripts/list-local-parties.d.ts +1 -0
  13. package/dist/scripts/list-local-parties.js +64 -0
  14. package/dist/scripts/list-local-parties.js.map +1 -0
  15. package/dist/src/api/nodes.controller.d.ts +181 -0
  16. package/dist/src/api/nodes.controller.js +873 -0
  17. package/dist/src/api/nodes.controller.js.map +1 -0
  18. package/dist/src/app-bootstrap.d.ts +22 -0
  19. package/dist/src/app-bootstrap.js +52 -0
  20. package/dist/src/app-bootstrap.js.map +1 -0
  21. package/dist/src/app.module.d.ts +2 -0
  22. package/dist/src/app.module.js +48 -0
  23. package/dist/src/app.module.js.map +1 -0
  24. package/dist/src/cache/node-cache.service.d.ts +54 -0
  25. package/dist/src/cache/node-cache.service.js +154 -0
  26. package/dist/src/cache/node-cache.service.js.map +1 -0
  27. package/dist/src/config/node-config.schema.d.ts +100 -0
  28. package/dist/src/config/node-config.schema.js +83 -0
  29. package/dist/src/config/node-config.schema.js.map +1 -0
  30. package/dist/src/config/node-config.service.d.ts +7 -0
  31. package/dist/src/config/node-config.service.js +36 -0
  32. package/dist/src/config/node-config.service.js.map +1 -0
  33. package/dist/src/domain/node-health.d.ts +9 -0
  34. package/dist/src/domain/node-health.js +16 -0
  35. package/dist/src/domain/node-health.js.map +1 -0
  36. package/dist/src/domain/node.types.d.ts +563 -0
  37. package/dist/src/domain/node.types.js +3 -0
  38. package/dist/src/domain/node.types.js.map +1 -0
  39. package/dist/src/grpc/grpc-client.factory.d.ts +297 -0
  40. package/dist/src/grpc/grpc-client.factory.js +67 -0
  41. package/dist/src/grpc/grpc-client.factory.js.map +1 -0
  42. package/dist/src/grpc/grpc-error.util.d.ts +7 -0
  43. package/dist/src/grpc/grpc-error.util.js +31 -0
  44. package/dist/src/grpc/grpc-error.util.js.map +1 -0
  45. package/dist/src/grpc/grpc-operations.service.d.ts +96 -0
  46. package/dist/src/grpc/grpc-operations.service.js +844 -0
  47. package/dist/src/grpc/grpc-operations.service.js.map +1 -0
  48. package/dist/src/grpc/shared-secret-jwt.d.ts +6 -0
  49. package/dist/src/grpc/shared-secret-jwt.js +22 -0
  50. package/dist/src/grpc/shared-secret-jwt.js.map +1 -0
  51. package/dist/src/main.d.ts +1 -0
  52. package/dist/src/main.js +6 -0
  53. package/dist/src/main.js.map +1 -0
  54. package/dist/src/namespaces/namespace-fingerprint.service.d.ts +22 -0
  55. package/dist/src/namespaces/namespace-fingerprint.service.js +125 -0
  56. package/dist/src/namespaces/namespace-fingerprint.service.js.map +1 -0
  57. package/dist/src/orchestrator/node-poller.service.d.ts +26 -0
  58. package/dist/src/orchestrator/node-poller.service.js +224 -0
  59. package/dist/src/orchestrator/node-poller.service.js.map +1 -0
  60. package/dist/src/packages/daml-decoder.types.d.ts +69 -0
  61. package/dist/src/packages/daml-decoder.types.js +3 -0
  62. package/dist/src/packages/daml-decoder.types.js.map +1 -0
  63. package/dist/src/packages/daml-lf-archive-v2.descriptor.pb +0 -0
  64. package/dist/src/packages/daml-lf-archive.descriptor.pb +0 -0
  65. package/dist/src/packages/daml-lf-loader.d.ts +3 -0
  66. package/dist/src/packages/daml-lf-loader.js +51 -0
  67. package/dist/src/packages/daml-lf-loader.js.map +1 -0
  68. package/dist/src/packages/daml-lf-raw.util.d.ts +12 -0
  69. package/dist/src/packages/daml-lf-raw.util.js +117 -0
  70. package/dist/src/packages/daml-lf-raw.util.js.map +1 -0
  71. package/dist/src/packages/daml-lf-value.descriptor.pb +0 -0
  72. package/dist/src/packages/daml-value-decoder.service.d.ts +39 -0
  73. package/dist/src/packages/daml-value-decoder.service.js +463 -0
  74. package/dist/src/packages/daml-value-decoder.service.js.map +1 -0
  75. package/dist/src/packages/package-cache.service.d.ts +53 -0
  76. package/dist/src/packages/package-cache.service.js +288 -0
  77. package/dist/src/packages/package-cache.service.js.map +1 -0
  78. package/dist/src/packages/package-registry.service.d.ts +44 -0
  79. package/dist/src/packages/package-registry.service.js +625 -0
  80. package/dist/src/packages/package-registry.service.js.map +1 -0
  81. package/dist/src/packages/package-sync.service.d.ts +22 -0
  82. package/dist/src/packages/package-sync.service.js +129 -0
  83. package/dist/src/packages/package-sync.service.js.map +1 -0
  84. package/dist/src/packages/pqs-package.service.d.ts +9 -0
  85. package/dist/src/packages/pqs-package.service.js +118 -0
  86. package/dist/src/packages/pqs-package.service.js.map +1 -0
  87. package/dist/src/pqs/pqs-client.factory.d.ts +7 -0
  88. package/dist/src/pqs/pqs-client.factory.js +37 -0
  89. package/dist/src/pqs/pqs-client.factory.js.map +1 -0
  90. package/dist/src/pqs/pqs-summary.service.d.ts +229 -0
  91. package/dist/src/pqs/pqs-summary.service.js +4652 -0
  92. package/dist/src/pqs/pqs-summary.service.js.map +1 -0
  93. package/dist/tsconfig.build.tsbuildinfo +1 -0
  94. package/package.json +97 -0
@@ -0,0 +1,873 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.NodesController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const node_cache_service_1 = require("../cache/node-cache.service");
18
+ const node_config_service_1 = require("../config/node-config.service");
19
+ const grpc_error_util_1 = require("../grpc/grpc-error.util");
20
+ const grpc_operations_service_1 = require("../grpc/grpc-operations.service");
21
+ const namespace_fingerprint_service_1 = require("../namespaces/namespace-fingerprint.service");
22
+ const pqs_summary_service_1 = require("../pqs/pqs-summary.service");
23
+ let NodesController = class NodesController {
24
+ cacheService;
25
+ configService;
26
+ grpcOperationsService;
27
+ namespaceFingerprintService;
28
+ pqsSummaryService;
29
+ constructor(cacheService, configService, grpcOperationsService, namespaceFingerprintService, pqsSummaryService) {
30
+ this.cacheService = cacheService;
31
+ this.configService = configService;
32
+ this.grpcOperationsService = grpcOperationsService;
33
+ this.namespaceFingerprintService = namespaceFingerprintService;
34
+ this.pqsSummaryService = pqsSummaryService;
35
+ }
36
+ listNodes() {
37
+ return this.cacheService.list();
38
+ }
39
+ listActivityHistory(days) {
40
+ const parsedDays = days ? Number.parseInt(days, 10) : undefined;
41
+ return this.cacheService.listActivityHistory(parsedDays && Number.isFinite(parsedDays) && parsedDays > 0 ? parsedDays : undefined);
42
+ }
43
+ listGlobalRecentUpdates(limit, before, after, party, template, partyMode, mode, hideSplice) {
44
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
45
+ return this.pqsSummaryService.fetchGlobalRecentUpdates(this.configService.list(), Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25, {
46
+ before,
47
+ after,
48
+ parties: Array.isArray(party) ? party : party ? [party] : undefined,
49
+ templates: Array.isArray(template) ? template : template ? [template] : undefined,
50
+ partyMode: partyMode ?? mode,
51
+ hideSplice: hideSplice === 'true' || hideSplice === '1' ? true : undefined,
52
+ });
53
+ }
54
+ listGlobalContracts(limit, before, after, party, template, partyMode, mode, hideSplice) {
55
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
56
+ return this.pqsSummaryService.fetchGlobalContracts(this.configService.list(), Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25, {
57
+ before,
58
+ after,
59
+ parties: Array.isArray(party) ? party : party ? [party] : undefined,
60
+ templates: Array.isArray(template) ? template : template ? [template] : undefined,
61
+ partyMode: partyMode ?? mode,
62
+ hideSplice: hideSplice === 'true' || hideSplice === '1' ? true : undefined,
63
+ });
64
+ }
65
+ listTokens(limit, before, after, name, excludeName, issuer) {
66
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
67
+ return this.pqsSummaryService.fetchTokens(this.configService.list(), Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25, {
68
+ before,
69
+ after,
70
+ names: Array.isArray(name) ? name : name ? [name] : undefined,
71
+ excludeNames: Array.isArray(excludeName)
72
+ ? excludeName
73
+ : excludeName
74
+ ? [excludeName]
75
+ : undefined,
76
+ issuers: Array.isArray(issuer) ? issuer : issuer ? [issuer] : undefined,
77
+ });
78
+ }
79
+ listTokenTransfers(limit, before, after, fromParty, toParty, amountGt, amountLt) {
80
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
81
+ return this.pqsSummaryService.fetchLatestTokenTransfers(this.configService.list(), Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25, {
82
+ before,
83
+ after,
84
+ fromParties: Array.isArray(fromParty) ? fromParty : fromParty ? [fromParty] : undefined,
85
+ toParties: Array.isArray(toParty) ? toParty : toParty ? [toParty] : undefined,
86
+ amountGt,
87
+ amountLt,
88
+ });
89
+ }
90
+ async getTokenTransferDetail(updateId) {
91
+ try {
92
+ return await this.pqsSummaryService.fetchTokenTransferDetail(this.configService.list(), updateId);
93
+ }
94
+ catch (error) {
95
+ if (error instanceof Error && error.message === 'Token transfer not found') {
96
+ throw new common_1.NotFoundException(`Unknown token transfer: ${updateId}`);
97
+ }
98
+ throw error;
99
+ }
100
+ }
101
+ async listTransfersByToken(tokenId, limit, before, after, fromParty, toParty, amountGt, amountLt) {
102
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
103
+ try {
104
+ return await this.pqsSummaryService.fetchTokenTransfers(this.configService.list(), tokenId, Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25, {
105
+ before,
106
+ after,
107
+ fromParties: Array.isArray(fromParty) ? fromParty : fromParty ? [fromParty] : undefined,
108
+ toParties: Array.isArray(toParty) ? toParty : toParty ? [toParty] : undefined,
109
+ amountGt,
110
+ amountLt,
111
+ });
112
+ }
113
+ catch (error) {
114
+ if (error instanceof Error && error.message === 'Token not found') {
115
+ throw new common_1.NotFoundException(`Unknown token: ${tokenId}`);
116
+ }
117
+ throw error;
118
+ }
119
+ }
120
+ async getTokenDetail(tokenId) {
121
+ try {
122
+ return await this.pqsSummaryService.fetchTokenDetail(this.configService.list(), tokenId);
123
+ }
124
+ catch (error) {
125
+ if (error instanceof Error && error.message === 'Token not found') {
126
+ throw new common_1.NotFoundException(`Unknown token: ${tokenId}`);
127
+ }
128
+ throw error;
129
+ }
130
+ }
131
+ async listTokenHolders(tokenId, limit, before, after) {
132
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
133
+ try {
134
+ return await this.pqsSummaryService.fetchTokenHolders(this.configService.list(), tokenId, Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25, {
135
+ before,
136
+ after,
137
+ });
138
+ }
139
+ catch (error) {
140
+ if (error instanceof Error && error.message === 'Token not found') {
141
+ throw new common_1.NotFoundException(`Unknown token: ${tokenId}`);
142
+ }
143
+ throw error;
144
+ }
145
+ }
146
+ search(query) {
147
+ return this.pqsSummaryService.search(query ?? '');
148
+ }
149
+ getNode(id) {
150
+ const node = this.cacheService.get(id);
151
+ if (!node) {
152
+ throw new common_1.NotFoundException(`Unknown node: ${id}`);
153
+ }
154
+ return node;
155
+ }
156
+ async listNodePackages(id) {
157
+ const node = this.getNodeConfig(id);
158
+ return this.pqsSummaryService.fetchNodePackages(node);
159
+ }
160
+ async listNodeTemplates(id) {
161
+ const node = this.getNodeConfig(id);
162
+ return this.pqsSummaryService.fetchNodeTemplates(node);
163
+ }
164
+ async getNodeParticipantStatus(id) {
165
+ const node = this.getNodeConfig(id);
166
+ return this.buildParticipantStatusEntry(node);
167
+ }
168
+ async listNodeContracts(id, limit, before, after, party, template, partyMode, mode, hideSplice) {
169
+ const node = this.getNodeConfig(id);
170
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
171
+ return this.pqsSummaryService.fetchNodeContracts(node, {
172
+ limit: Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25,
173
+ before,
174
+ after,
175
+ parties: Array.isArray(party) ? party : party ? [party] : undefined,
176
+ templates: Array.isArray(template) ? template : template ? [template] : undefined,
177
+ partyMode: partyMode ?? mode,
178
+ hideSplice: hideSplice === 'true' || hideSplice === '1' ? true : undefined,
179
+ });
180
+ }
181
+ async listNodeActiveParties(id) {
182
+ const node = this.getNodeConfig(id);
183
+ const response = await this.pqsSummaryService.fetchActiveParties([node]);
184
+ return response.nodes[0];
185
+ }
186
+ async listNodeLocalParties(id) {
187
+ const node = this.getNodeConfig(id);
188
+ return this.buildLocalPartiesEntry(node);
189
+ }
190
+ async listNodePartyFingerprints(id, limit, before, after, publicKey, encoding, keyFormat, keyType) {
191
+ const node = this.getNodeConfig(id);
192
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 10;
193
+ return this.buildPartyFingerprintsEntry(node, {
194
+ limit: Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 10,
195
+ before,
196
+ after,
197
+ namespacePublicKey: publicKey,
198
+ namespaceEncoding: encoding,
199
+ namespaceKeyFormat: keyFormat,
200
+ namespaceKeyType: keyType,
201
+ });
202
+ }
203
+ async listNodeUpdates(id, limit, before, after, party, template, partyMode, mode, hideSplice) {
204
+ const node = this.getNodeConfig(id);
205
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
206
+ return this.pqsSummaryService.fetchRecentUpdates(node, {
207
+ limit: Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25,
208
+ before,
209
+ after,
210
+ parties: Array.isArray(party) ? party : party ? [party] : undefined,
211
+ templates: Array.isArray(template) ? template : template ? [template] : undefined,
212
+ partyMode: partyMode ?? mode,
213
+ hideSplice: hideSplice === 'true' || hideSplice === '1' ? true : undefined,
214
+ });
215
+ }
216
+ async getNodeUpdateDetail(id, updateId) {
217
+ const node = this.getNodeConfig(id);
218
+ try {
219
+ return await this.pqsSummaryService.fetchUpdateDetail(node, updateId);
220
+ }
221
+ catch (error) {
222
+ if (error instanceof Error && error.message === 'Update not found') {
223
+ throw new common_1.NotFoundException(`Unknown update: ${updateId}`);
224
+ }
225
+ throw error;
226
+ }
227
+ }
228
+ async getNodeContractDetail(id, contractId) {
229
+ const node = this.getNodeConfig(id);
230
+ try {
231
+ return await this.pqsSummaryService.fetchContractDetail(node, contractId);
232
+ }
233
+ catch (error) {
234
+ if (error instanceof Error && error.message === 'Contract not found') {
235
+ throw new common_1.NotFoundException(`Unknown contract: ${contractId}`);
236
+ }
237
+ throw error;
238
+ }
239
+ }
240
+ async listActiveParties() {
241
+ return this.pqsSummaryService.fetchActiveParties(this.configService.list());
242
+ }
243
+ async listTemplates() {
244
+ return this.pqsSummaryService.fetchTemplates();
245
+ }
246
+ async listLocalParties() {
247
+ const nodes = await Promise.all(this.configService.list().map(async (node) => this.buildLocalPartiesEntry(node)));
248
+ return { nodes };
249
+ }
250
+ async listPartyFingerprints(limit, before, after, publicKey, encoding, keyFormat, keyType) {
251
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 10;
252
+ return this.buildGlobalPartyFingerprintsEntry(this.configService.list(), {
253
+ limit: Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 10,
254
+ before,
255
+ after,
256
+ namespacePublicKey: publicKey,
257
+ namespaceEncoding: encoding,
258
+ namespaceKeyFormat: keyFormat,
259
+ namespaceKeyType: keyType,
260
+ });
261
+ }
262
+ async getPartyDetail(partyId) {
263
+ try {
264
+ return await this.pqsSummaryService.fetchPartyDetail(this.configService.list(), partyId);
265
+ }
266
+ catch (error) {
267
+ if (error instanceof Error && error.message === 'Party not found') {
268
+ throw new common_1.NotFoundException(`Unknown party: ${partyId}`);
269
+ }
270
+ throw error;
271
+ }
272
+ }
273
+ async getNamespaceDetail(namespaceId) {
274
+ try {
275
+ return await this.pqsSummaryService.fetchNamespaceDetail(this.configService.list(), namespaceId);
276
+ }
277
+ catch (error) {
278
+ if (error instanceof Error && error.message === 'Namespace not found') {
279
+ throw new common_1.NotFoundException(`Unknown namespace: ${namespaceId}`);
280
+ }
281
+ throw error;
282
+ }
283
+ }
284
+ async listNamespaceParties(namespaceId, limit, before, after) {
285
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
286
+ try {
287
+ return await this.pqsSummaryService.fetchNamespaceParties(this.configService.list(), namespaceId, {
288
+ limit: Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25,
289
+ before,
290
+ after,
291
+ });
292
+ }
293
+ catch (error) {
294
+ if (error instanceof Error && error.message === 'Namespace not found') {
295
+ throw new common_1.NotFoundException(`Unknown namespace: ${namespaceId}`);
296
+ }
297
+ throw error;
298
+ }
299
+ }
300
+ async listPartyUpdates(partyId, limit, before, after, template, partyMode, mode, hideSplice) {
301
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
302
+ return this.pqsSummaryService.fetchPartyUpdates(this.configService.list(), partyId, {
303
+ limit: Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25,
304
+ before,
305
+ after,
306
+ templates: Array.isArray(template) ? template : template ? [template] : undefined,
307
+ partyMode: partyMode ?? mode,
308
+ hideSplice: hideSplice === 'true' || hideSplice === '1' ? true : undefined,
309
+ });
310
+ }
311
+ async listPartyContracts(partyId, limit, before, after, template, hideSplice) {
312
+ const parsedLimit = limit ? Number.parseInt(limit, 10) : 25;
313
+ return this.pqsSummaryService.fetchPartyContracts(this.configService.list(), partyId, {
314
+ limit: Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 25,
315
+ before,
316
+ after,
317
+ templates: Array.isArray(template) ? template : template ? [template] : undefined,
318
+ hideSplice: hideSplice === 'true' || hideSplice === '1' ? true : undefined,
319
+ });
320
+ }
321
+ async listPackagesByName(packageName) {
322
+ try {
323
+ return await this.pqsSummaryService.fetchPackagesByName(packageName);
324
+ }
325
+ catch (error) {
326
+ if (error instanceof Error && error.message === 'Package family not found') {
327
+ throw new common_1.NotFoundException(`Unknown package name: ${packageName}`);
328
+ }
329
+ throw error;
330
+ }
331
+ }
332
+ async getPackageDetail(packageId) {
333
+ try {
334
+ return await this.pqsSummaryService.fetchPackageDetail(packageId);
335
+ }
336
+ catch (error) {
337
+ if (error instanceof Error && error.message === 'Package not found') {
338
+ throw new common_1.NotFoundException(`Unknown package: ${packageId}`);
339
+ }
340
+ throw error;
341
+ }
342
+ }
343
+ listLedgers() {
344
+ return this.cacheService.list().map((node) => node.ledgerSummary);
345
+ }
346
+ getNodeConfig(id) {
347
+ const node = this.configService.list().find((candidate) => candidate.id === id);
348
+ if (!node) {
349
+ throw new common_1.NotFoundException(`Unknown node: ${id}`);
350
+ }
351
+ return node;
352
+ }
353
+ async buildLocalPartiesEntry(node) {
354
+ if (node.mode !== 'pqs_with_grpc') {
355
+ return {
356
+ nodeId: node.id,
357
+ label: node.label,
358
+ mode: node.mode,
359
+ parties: [],
360
+ localPartiesStatus: 'grpc_not_configured',
361
+ localPartiesError: null,
362
+ localPartiesErrorCode: null,
363
+ localPartiesErrorDetails: null,
364
+ localPartiesErrorTid: null,
365
+ };
366
+ }
367
+ try {
368
+ return {
369
+ nodeId: node.id,
370
+ label: node.label,
371
+ mode: node.mode,
372
+ parties: await this.grpcOperationsService.listLocalParties(node),
373
+ localPartiesStatus: 'ok',
374
+ localPartiesError: null,
375
+ localPartiesErrorCode: null,
376
+ localPartiesErrorDetails: null,
377
+ localPartiesErrorTid: null,
378
+ };
379
+ }
380
+ catch (error) {
381
+ const grpcError = (0, grpc_error_util_1.describeGrpcError)(error);
382
+ return {
383
+ nodeId: node.id,
384
+ label: node.label,
385
+ mode: node.mode,
386
+ parties: [],
387
+ localPartiesStatus: 'grpc_error',
388
+ localPartiesError: grpcError.message,
389
+ localPartiesErrorCode: grpcError.code,
390
+ localPartiesErrorDetails: grpcError.details,
391
+ localPartiesErrorTid: grpcError.tid,
392
+ };
393
+ }
394
+ }
395
+ async buildParticipantStatusEntry(node) {
396
+ if (node.mode !== 'pqs_with_grpc') {
397
+ return {
398
+ nodeId: node.id,
399
+ label: node.label,
400
+ mode: node.mode,
401
+ participantStatusStatus: 'grpc_not_configured',
402
+ participantStatus: null,
403
+ notInitialized: null,
404
+ participantStatusError: null,
405
+ participantStatusErrorCode: null,
406
+ participantStatusErrorDetails: null,
407
+ participantStatusErrorTid: null,
408
+ };
409
+ }
410
+ try {
411
+ const result = await this.grpcOperationsService.fetchParticipantStatus(node);
412
+ return {
413
+ nodeId: node.id,
414
+ label: node.label,
415
+ mode: node.mode,
416
+ participantStatusStatus: result.participantStatus ? 'ok' : 'not_initialized',
417
+ participantStatus: result.participantStatus,
418
+ notInitialized: result.notInitialized,
419
+ participantStatusError: null,
420
+ participantStatusErrorCode: null,
421
+ participantStatusErrorDetails: null,
422
+ participantStatusErrorTid: null,
423
+ };
424
+ }
425
+ catch (error) {
426
+ const grpcError = (0, grpc_error_util_1.describeGrpcError)(error);
427
+ return {
428
+ nodeId: node.id,
429
+ label: node.label,
430
+ mode: node.mode,
431
+ participantStatusStatus: 'grpc_error',
432
+ participantStatus: null,
433
+ notInitialized: null,
434
+ participantStatusError: grpcError.message,
435
+ participantStatusErrorCode: grpcError.code,
436
+ participantStatusErrorDetails: grpcError.details,
437
+ participantStatusErrorTid: grpcError.tid,
438
+ };
439
+ }
440
+ }
441
+ async buildPartyFingerprintsEntry(node, options) {
442
+ const exactFingerprint = await this.resolveNamespaceFilter(options);
443
+ if (node.mode === 'pqs_with_grpc') {
444
+ try {
445
+ const fingerprints = await this.grpcOperationsService.listKnownPartyFingerprints(node);
446
+ return {
447
+ nodeId: node.id,
448
+ label: node.label,
449
+ mode: node.mode,
450
+ source: 'grpc',
451
+ ...this.paginateFingerprints(this.filterFingerprints(fingerprints, exactFingerprint), options),
452
+ };
453
+ }
454
+ catch {
455
+ }
456
+ }
457
+ const response = await this.pqsSummaryService.fetchActiveParties([node]);
458
+ const parties = response.nodes[0]?.parties ?? [];
459
+ return {
460
+ nodeId: node.id,
461
+ label: node.label,
462
+ mode: node.mode,
463
+ source: 'pqs',
464
+ ...this.paginateFingerprints(this.filterFingerprints(this.extractFingerprintsFromParties(parties), exactFingerprint), options),
465
+ };
466
+ }
467
+ async buildGlobalPartyFingerprintsEntry(nodes, options) {
468
+ const exactFingerprint = await this.resolveNamespaceFilter(options);
469
+ const canUseGrpcForAll = nodes.every((node) => node.mode === 'pqs_with_grpc');
470
+ if (canUseGrpcForAll) {
471
+ try {
472
+ const fingerprints = Array.from(new Set((await Promise.all(nodes.map((node) => this.grpcOperationsService.listKnownPartyFingerprints(node)))).flat())).sort((left, right) => left.localeCompare(right));
473
+ return {
474
+ source: 'grpc',
475
+ ...this.paginateFingerprints(this.filterFingerprints(fingerprints, exactFingerprint), options),
476
+ };
477
+ }
478
+ catch {
479
+ }
480
+ }
481
+ const response = await this.pqsSummaryService.fetchActiveParties(nodes);
482
+ const fingerprints = Array.from(new Set(response.nodes.flatMap((node) => this.extractFingerprintsFromParties(node.parties)))).sort((left, right) => left.localeCompare(right));
483
+ return {
484
+ source: 'pqs',
485
+ ...this.paginateFingerprints(this.filterFingerprints(fingerprints, exactFingerprint), options),
486
+ };
487
+ }
488
+ extractFingerprintsFromParties(parties) {
489
+ return Array.from(new Set(parties
490
+ .map((partyId) => {
491
+ const separatorIndex = partyId.indexOf('::');
492
+ if (separatorIndex === -1) {
493
+ return partyId.trim();
494
+ }
495
+ return partyId.slice(separatorIndex + 2).trim();
496
+ })
497
+ .filter((fingerprint) => fingerprint.length > 0))).sort((left, right) => left.localeCompare(right));
498
+ }
499
+ paginateFingerprints(fingerprints, options) {
500
+ const sortedFingerprints = Array.from(new Set(fingerprints)).sort((left, right) => left.localeCompare(right));
501
+ const limit = Math.max(1, options.limit);
502
+ if (options.after) {
503
+ const endIndex = sortedFingerprints.findIndex((value) => value === options.after);
504
+ const normalizedEndIndex = endIndex >= 0 ? endIndex : sortedFingerprints.length;
505
+ const startIndex = Math.max(0, normalizedEndIndex - limit);
506
+ const page = sortedFingerprints.slice(startIndex, normalizedEndIndex);
507
+ return {
508
+ limit,
509
+ nextBefore: normalizedEndIndex < sortedFingerprints.length && page.length > 0
510
+ ? page[page.length - 1]
511
+ : null,
512
+ nextAfter: startIndex > 0 && page.length > 0 ? page[0] : null,
513
+ fingerprints: page,
514
+ };
515
+ }
516
+ const startIndex = options.before
517
+ ? (() => {
518
+ const index = sortedFingerprints.findIndex((value) => value === options.before);
519
+ return index >= 0 ? index + 1 : 0;
520
+ })()
521
+ : 0;
522
+ const page = sortedFingerprints.slice(startIndex, startIndex + limit);
523
+ return {
524
+ limit,
525
+ nextBefore: startIndex + limit < sortedFingerprints.length && page.length > 0
526
+ ? page[page.length - 1]
527
+ : null,
528
+ nextAfter: startIndex > 0 && page.length > 0 ? page[0] : null,
529
+ fingerprints: page,
530
+ };
531
+ }
532
+ async resolveNamespaceFilter(options) {
533
+ if (!options.namespacePublicKey?.trim()) {
534
+ return null;
535
+ }
536
+ return this.namespaceFingerprintService.computeFromInput({
537
+ publicKey: options.namespacePublicKey,
538
+ encoding: options.namespaceEncoding,
539
+ keyFormat: options.namespaceKeyFormat,
540
+ keyType: options.namespaceKeyType,
541
+ });
542
+ }
543
+ filterFingerprints(fingerprints, exactFingerprint) {
544
+ if (!exactFingerprint) {
545
+ return fingerprints;
546
+ }
547
+ return fingerprints.filter((fingerprint) => fingerprint === exactFingerprint);
548
+ }
549
+ };
550
+ exports.NodesController = NodesController;
551
+ __decorate([
552
+ (0, common_1.Get)('/nodes'),
553
+ __metadata("design:type", Function),
554
+ __metadata("design:paramtypes", []),
555
+ __metadata("design:returntype", void 0)
556
+ ], NodesController.prototype, "listNodes", null);
557
+ __decorate([
558
+ (0, common_1.Get)('/nodes/activity-history'),
559
+ __param(0, (0, common_1.Query)('days')),
560
+ __metadata("design:type", Function),
561
+ __metadata("design:paramtypes", [String]),
562
+ __metadata("design:returntype", void 0)
563
+ ], NodesController.prototype, "listActivityHistory", null);
564
+ __decorate([
565
+ (0, common_1.Get)('/updates'),
566
+ __param(0, (0, common_1.Query)('limit')),
567
+ __param(1, (0, common_1.Query)('before')),
568
+ __param(2, (0, common_1.Query)('after')),
569
+ __param(3, (0, common_1.Query)('party')),
570
+ __param(4, (0, common_1.Query)('template')),
571
+ __param(5, (0, common_1.Query)('partyMode')),
572
+ __param(6, (0, common_1.Query)('mode')),
573
+ __param(7, (0, common_1.Query)('hideSplice')),
574
+ __metadata("design:type", Function),
575
+ __metadata("design:paramtypes", [String, String, String, Object, Object, String, String, String]),
576
+ __metadata("design:returntype", void 0)
577
+ ], NodesController.prototype, "listGlobalRecentUpdates", null);
578
+ __decorate([
579
+ (0, common_1.Get)('/contracts'),
580
+ __param(0, (0, common_1.Query)('limit')),
581
+ __param(1, (0, common_1.Query)('before')),
582
+ __param(2, (0, common_1.Query)('after')),
583
+ __param(3, (0, common_1.Query)('party')),
584
+ __param(4, (0, common_1.Query)('template')),
585
+ __param(5, (0, common_1.Query)('partyMode')),
586
+ __param(6, (0, common_1.Query)('mode')),
587
+ __param(7, (0, common_1.Query)('hideSplice')),
588
+ __metadata("design:type", Function),
589
+ __metadata("design:paramtypes", [String, String, String, Object, Object, String, String, String]),
590
+ __metadata("design:returntype", void 0)
591
+ ], NodesController.prototype, "listGlobalContracts", null);
592
+ __decorate([
593
+ (0, common_1.Get)('/tokens'),
594
+ __param(0, (0, common_1.Query)('limit')),
595
+ __param(1, (0, common_1.Query)('before')),
596
+ __param(2, (0, common_1.Query)('after')),
597
+ __param(3, (0, common_1.Query)('name')),
598
+ __param(4, (0, common_1.Query)('excludeName')),
599
+ __param(5, (0, common_1.Query)('issuer')),
600
+ __metadata("design:type", Function),
601
+ __metadata("design:paramtypes", [String, String, String, Object, Object, Object]),
602
+ __metadata("design:returntype", void 0)
603
+ ], NodesController.prototype, "listTokens", null);
604
+ __decorate([
605
+ (0, common_1.Get)('/tokens/transfers'),
606
+ __param(0, (0, common_1.Query)('limit')),
607
+ __param(1, (0, common_1.Query)('before')),
608
+ __param(2, (0, common_1.Query)('after')),
609
+ __param(3, (0, common_1.Query)('fromParty')),
610
+ __param(4, (0, common_1.Query)('toParty')),
611
+ __param(5, (0, common_1.Query)('amountGt')),
612
+ __param(6, (0, common_1.Query)('amountLt')),
613
+ __metadata("design:type", Function),
614
+ __metadata("design:paramtypes", [String, String, String, Object, Object, String, String]),
615
+ __metadata("design:returntype", void 0)
616
+ ], NodesController.prototype, "listTokenTransfers", null);
617
+ __decorate([
618
+ (0, common_1.Get)('/tokens/transfers/:updateId'),
619
+ __param(0, (0, common_1.Param)('updateId')),
620
+ __metadata("design:type", Function),
621
+ __metadata("design:paramtypes", [String]),
622
+ __metadata("design:returntype", Promise)
623
+ ], NodesController.prototype, "getTokenTransferDetail", null);
624
+ __decorate([
625
+ (0, common_1.Get)('/tokens/:tokenId/transfers'),
626
+ __param(0, (0, common_1.Param)('tokenId')),
627
+ __param(1, (0, common_1.Query)('limit')),
628
+ __param(2, (0, common_1.Query)('before')),
629
+ __param(3, (0, common_1.Query)('after')),
630
+ __param(4, (0, common_1.Query)('fromParty')),
631
+ __param(5, (0, common_1.Query)('toParty')),
632
+ __param(6, (0, common_1.Query)('amountGt')),
633
+ __param(7, (0, common_1.Query)('amountLt')),
634
+ __metadata("design:type", Function),
635
+ __metadata("design:paramtypes", [String, String, String, String, Object, Object, String, String]),
636
+ __metadata("design:returntype", Promise)
637
+ ], NodesController.prototype, "listTransfersByToken", null);
638
+ __decorate([
639
+ (0, common_1.Get)('/tokens/:tokenId'),
640
+ __param(0, (0, common_1.Param)('tokenId')),
641
+ __metadata("design:type", Function),
642
+ __metadata("design:paramtypes", [String]),
643
+ __metadata("design:returntype", Promise)
644
+ ], NodesController.prototype, "getTokenDetail", null);
645
+ __decorate([
646
+ (0, common_1.Get)('/tokens/:tokenId/holders'),
647
+ __param(0, (0, common_1.Param)('tokenId')),
648
+ __param(1, (0, common_1.Query)('limit')),
649
+ __param(2, (0, common_1.Query)('before')),
650
+ __param(3, (0, common_1.Query)('after')),
651
+ __metadata("design:type", Function),
652
+ __metadata("design:paramtypes", [String, String, String, String]),
653
+ __metadata("design:returntype", Promise)
654
+ ], NodesController.prototype, "listTokenHolders", null);
655
+ __decorate([
656
+ (0, common_1.Get)('/search'),
657
+ __param(0, (0, common_1.Query)('q')),
658
+ __metadata("design:type", Function),
659
+ __metadata("design:paramtypes", [String]),
660
+ __metadata("design:returntype", void 0)
661
+ ], NodesController.prototype, "search", null);
662
+ __decorate([
663
+ (0, common_1.Get)('/nodes/:id'),
664
+ __param(0, (0, common_1.Param)('id')),
665
+ __metadata("design:type", Function),
666
+ __metadata("design:paramtypes", [String]),
667
+ __metadata("design:returntype", void 0)
668
+ ], NodesController.prototype, "getNode", null);
669
+ __decorate([
670
+ (0, common_1.Get)('/nodes/:id/packages'),
671
+ __param(0, (0, common_1.Param)('id')),
672
+ __metadata("design:type", Function),
673
+ __metadata("design:paramtypes", [String]),
674
+ __metadata("design:returntype", Promise)
675
+ ], NodesController.prototype, "listNodePackages", null);
676
+ __decorate([
677
+ (0, common_1.Get)('/nodes/:id/templates'),
678
+ __param(0, (0, common_1.Param)('id')),
679
+ __metadata("design:type", Function),
680
+ __metadata("design:paramtypes", [String]),
681
+ __metadata("design:returntype", Promise)
682
+ ], NodesController.prototype, "listNodeTemplates", null);
683
+ __decorate([
684
+ (0, common_1.Get)('/nodes/:id/participant-status'),
685
+ __param(0, (0, common_1.Param)('id')),
686
+ __metadata("design:type", Function),
687
+ __metadata("design:paramtypes", [String]),
688
+ __metadata("design:returntype", Promise)
689
+ ], NodesController.prototype, "getNodeParticipantStatus", null);
690
+ __decorate([
691
+ (0, common_1.Get)('/nodes/:id/contracts'),
692
+ __param(0, (0, common_1.Param)('id')),
693
+ __param(1, (0, common_1.Query)('limit')),
694
+ __param(2, (0, common_1.Query)('before')),
695
+ __param(3, (0, common_1.Query)('after')),
696
+ __param(4, (0, common_1.Query)('party')),
697
+ __param(5, (0, common_1.Query)('template')),
698
+ __param(6, (0, common_1.Query)('partyMode')),
699
+ __param(7, (0, common_1.Query)('mode')),
700
+ __param(8, (0, common_1.Query)('hideSplice')),
701
+ __metadata("design:type", Function),
702
+ __metadata("design:paramtypes", [String, String, String, String, Object, Object, String, String, String]),
703
+ __metadata("design:returntype", Promise)
704
+ ], NodesController.prototype, "listNodeContracts", null);
705
+ __decorate([
706
+ (0, common_1.Get)('/nodes/:id/parties'),
707
+ __param(0, (0, common_1.Param)('id')),
708
+ __metadata("design:type", Function),
709
+ __metadata("design:paramtypes", [String]),
710
+ __metadata("design:returntype", Promise)
711
+ ], NodesController.prototype, "listNodeActiveParties", null);
712
+ __decorate([
713
+ (0, common_1.Get)('/nodes/:id/parties/local'),
714
+ __param(0, (0, common_1.Param)('id')),
715
+ __metadata("design:type", Function),
716
+ __metadata("design:paramtypes", [String]),
717
+ __metadata("design:returntype", Promise)
718
+ ], NodesController.prototype, "listNodeLocalParties", null);
719
+ __decorate([
720
+ (0, common_1.Get)('/nodes/:id/parties/fingerprints'),
721
+ __param(0, (0, common_1.Param)('id')),
722
+ __param(1, (0, common_1.Query)('limit')),
723
+ __param(2, (0, common_1.Query)('before')),
724
+ __param(3, (0, common_1.Query)('after')),
725
+ __param(4, (0, common_1.Query)('publicKey')),
726
+ __param(5, (0, common_1.Query)('encoding')),
727
+ __param(6, (0, common_1.Query)('keyFormat')),
728
+ __param(7, (0, common_1.Query)('keyType')),
729
+ __metadata("design:type", Function),
730
+ __metadata("design:paramtypes", [String, String, String, String, String, String, String, String]),
731
+ __metadata("design:returntype", Promise)
732
+ ], NodesController.prototype, "listNodePartyFingerprints", null);
733
+ __decorate([
734
+ (0, common_1.Get)('/nodes/:id/updates'),
735
+ __param(0, (0, common_1.Param)('id')),
736
+ __param(1, (0, common_1.Query)('limit')),
737
+ __param(2, (0, common_1.Query)('before')),
738
+ __param(3, (0, common_1.Query)('after')),
739
+ __param(4, (0, common_1.Query)('party')),
740
+ __param(5, (0, common_1.Query)('template')),
741
+ __param(6, (0, common_1.Query)('partyMode')),
742
+ __param(7, (0, common_1.Query)('mode')),
743
+ __param(8, (0, common_1.Query)('hideSplice')),
744
+ __metadata("design:type", Function),
745
+ __metadata("design:paramtypes", [String, String, String, String, Object, Object, String, String, String]),
746
+ __metadata("design:returntype", Promise)
747
+ ], NodesController.prototype, "listNodeUpdates", null);
748
+ __decorate([
749
+ (0, common_1.Get)('/nodes/:id/updates/:updateId'),
750
+ __param(0, (0, common_1.Param)('id')),
751
+ __param(1, (0, common_1.Param)('updateId')),
752
+ __metadata("design:type", Function),
753
+ __metadata("design:paramtypes", [String, String]),
754
+ __metadata("design:returntype", Promise)
755
+ ], NodesController.prototype, "getNodeUpdateDetail", null);
756
+ __decorate([
757
+ (0, common_1.Get)('/nodes/:id/contracts/:contractId'),
758
+ __param(0, (0, common_1.Param)('id')),
759
+ __param(1, (0, common_1.Param)('contractId')),
760
+ __metadata("design:type", Function),
761
+ __metadata("design:paramtypes", [String, String]),
762
+ __metadata("design:returntype", Promise)
763
+ ], NodesController.prototype, "getNodeContractDetail", null);
764
+ __decorate([
765
+ (0, common_1.Get)('/parties'),
766
+ __metadata("design:type", Function),
767
+ __metadata("design:paramtypes", []),
768
+ __metadata("design:returntype", Promise)
769
+ ], NodesController.prototype, "listActiveParties", null);
770
+ __decorate([
771
+ (0, common_1.Get)('/templates'),
772
+ __metadata("design:type", Function),
773
+ __metadata("design:paramtypes", []),
774
+ __metadata("design:returntype", Promise)
775
+ ], NodesController.prototype, "listTemplates", null);
776
+ __decorate([
777
+ (0, common_1.Get)('/parties/local'),
778
+ __metadata("design:type", Function),
779
+ __metadata("design:paramtypes", []),
780
+ __metadata("design:returntype", Promise)
781
+ ], NodesController.prototype, "listLocalParties", null);
782
+ __decorate([
783
+ (0, common_1.Get)('/parties/fingerprints'),
784
+ __param(0, (0, common_1.Query)('limit')),
785
+ __param(1, (0, common_1.Query)('before')),
786
+ __param(2, (0, common_1.Query)('after')),
787
+ __param(3, (0, common_1.Query)('publicKey')),
788
+ __param(4, (0, common_1.Query)('encoding')),
789
+ __param(5, (0, common_1.Query)('keyFormat')),
790
+ __param(6, (0, common_1.Query)('keyType')),
791
+ __metadata("design:type", Function),
792
+ __metadata("design:paramtypes", [String, String, String, String, String, String, String]),
793
+ __metadata("design:returntype", Promise)
794
+ ], NodesController.prototype, "listPartyFingerprints", null);
795
+ __decorate([
796
+ (0, common_1.Get)('/parties/:partyId'),
797
+ __param(0, (0, common_1.Param)('partyId')),
798
+ __metadata("design:type", Function),
799
+ __metadata("design:paramtypes", [String]),
800
+ __metadata("design:returntype", Promise)
801
+ ], NodesController.prototype, "getPartyDetail", null);
802
+ __decorate([
803
+ (0, common_1.Get)('/namespaces/:namespaceId'),
804
+ __param(0, (0, common_1.Param)('namespaceId')),
805
+ __metadata("design:type", Function),
806
+ __metadata("design:paramtypes", [String]),
807
+ __metadata("design:returntype", Promise)
808
+ ], NodesController.prototype, "getNamespaceDetail", null);
809
+ __decorate([
810
+ (0, common_1.Get)('/namespaces/:namespaceId/parties'),
811
+ __param(0, (0, common_1.Param)('namespaceId')),
812
+ __param(1, (0, common_1.Query)('limit')),
813
+ __param(2, (0, common_1.Query)('before')),
814
+ __param(3, (0, common_1.Query)('after')),
815
+ __metadata("design:type", Function),
816
+ __metadata("design:paramtypes", [String, String, String, String]),
817
+ __metadata("design:returntype", Promise)
818
+ ], NodesController.prototype, "listNamespaceParties", null);
819
+ __decorate([
820
+ (0, common_1.Get)('/parties/:partyId/updates'),
821
+ __param(0, (0, common_1.Param)('partyId')),
822
+ __param(1, (0, common_1.Query)('limit')),
823
+ __param(2, (0, common_1.Query)('before')),
824
+ __param(3, (0, common_1.Query)('after')),
825
+ __param(4, (0, common_1.Query)('template')),
826
+ __param(5, (0, common_1.Query)('partyMode')),
827
+ __param(6, (0, common_1.Query)('mode')),
828
+ __param(7, (0, common_1.Query)('hideSplice')),
829
+ __metadata("design:type", Function),
830
+ __metadata("design:paramtypes", [String, String, String, String, Object, String, String, String]),
831
+ __metadata("design:returntype", Promise)
832
+ ], NodesController.prototype, "listPartyUpdates", null);
833
+ __decorate([
834
+ (0, common_1.Get)('/parties/:partyId/contracts'),
835
+ __param(0, (0, common_1.Param)('partyId')),
836
+ __param(1, (0, common_1.Query)('limit')),
837
+ __param(2, (0, common_1.Query)('before')),
838
+ __param(3, (0, common_1.Query)('after')),
839
+ __param(4, (0, common_1.Query)('template')),
840
+ __param(5, (0, common_1.Query)('hideSplice')),
841
+ __metadata("design:type", Function),
842
+ __metadata("design:paramtypes", [String, String, String, String, Object, String]),
843
+ __metadata("design:returntype", Promise)
844
+ ], NodesController.prototype, "listPartyContracts", null);
845
+ __decorate([
846
+ (0, common_1.Get)('/packages/by-name/:packageName'),
847
+ __param(0, (0, common_1.Param)('packageName')),
848
+ __metadata("design:type", Function),
849
+ __metadata("design:paramtypes", [String]),
850
+ __metadata("design:returntype", Promise)
851
+ ], NodesController.prototype, "listPackagesByName", null);
852
+ __decorate([
853
+ (0, common_1.Get)('/packages/:packageId'),
854
+ __param(0, (0, common_1.Param)('packageId')),
855
+ __metadata("design:type", Function),
856
+ __metadata("design:paramtypes", [String]),
857
+ __metadata("design:returntype", Promise)
858
+ ], NodesController.prototype, "getPackageDetail", null);
859
+ __decorate([
860
+ (0, common_1.Get)('/ledgers'),
861
+ __metadata("design:type", Function),
862
+ __metadata("design:paramtypes", []),
863
+ __metadata("design:returntype", void 0)
864
+ ], NodesController.prototype, "listLedgers", null);
865
+ exports.NodesController = NodesController = __decorate([
866
+ (0, common_1.Controller)('/api'),
867
+ __metadata("design:paramtypes", [node_cache_service_1.NodeCacheService,
868
+ node_config_service_1.NodeConfigService,
869
+ grpc_operations_service_1.GrpcOperationsService,
870
+ namespace_fingerprint_service_1.NamespaceFingerprintService,
871
+ pqs_summary_service_1.PqsSummaryService])
872
+ ], NodesController);
873
+ //# sourceMappingURL=nodes.controller.js.map