@toon-protocol/connector 2.5.0 → 2.6.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 (92) hide show
  1. package/dist/core/connector-node.d.ts +1 -0
  2. package/dist/core/connector-node.d.ts.map +1 -1
  3. package/dist/core/connector-node.js +13 -1
  4. package/dist/core/connector-node.js.map +1 -1
  5. package/dist/core/packet-handler.d.ts +3 -0
  6. package/dist/core/packet-handler.d.ts.map +1 -1
  7. package/dist/core/packet-handler.js +33 -10
  8. package/dist/core/packet-handler.js.map +1 -1
  9. package/dist/http/admin-api-inventory.d.ts +29 -0
  10. package/dist/http/admin-api-inventory.d.ts.map +1 -0
  11. package/dist/http/admin-api-inventory.js +462 -0
  12. package/dist/http/admin-api-inventory.js.map +1 -0
  13. package/dist/http/admin-api.d.ts +20 -0
  14. package/dist/http/admin-api.d.ts.map +1 -1
  15. package/dist/http/admin-api.js +61 -1
  16. package/dist/http/admin-api.js.map +1 -1
  17. package/dist/http/admin-server.d.ts +2 -0
  18. package/dist/http/admin-server.d.ts.map +1 -1
  19. package/dist/http/admin-server.js +2 -1
  20. package/dist/http/admin-server.js.map +1 -1
  21. package/dist/observability/metrics-registry.d.ts +39 -0
  22. package/dist/observability/metrics-registry.d.ts.map +1 -0
  23. package/dist/observability/metrics-registry.js +151 -0
  24. package/dist/observability/metrics-registry.js.map +1 -0
  25. package/package.json +8 -3
  26. package/dist/config/aptos-env-validator.d.ts +0 -8
  27. package/dist/config/aptos-env-validator.d.ts.map +0 -1
  28. package/dist/config/aptos-env-validator.js +0 -25
  29. package/dist/config/aptos-env-validator.js.map +0 -1
  30. package/dist/explorer-ui/assets/EventDetailPanel-CnSaMk3V.js +0 -6
  31. package/dist/explorer-ui/assets/FilterBar-BEmAzBku.js +0 -26
  32. package/dist/explorer-ui/assets/chevron-right-BUT9VhYe.js +0 -11
  33. package/dist/explorer-ui/assets/index-BZ2INVgy.js +0 -360
  34. package/dist/explorer-ui/assets/index-Cemh6svI.css +0 -1
  35. package/dist/explorer-ui/index.html +0 -14
  36. package/dist/explorer-ui/vite.svg +0 -1
  37. package/dist/security/backends/aws-kms-backend.d.ts +0 -18
  38. package/dist/security/backends/aws-kms-backend.d.ts.map +0 -1
  39. package/dist/security/backends/aws-kms-backend.js +0 -130
  40. package/dist/security/backends/aws-kms-backend.js.map +0 -1
  41. package/dist/security/backends/azure-kv-backend.d.ts +0 -17
  42. package/dist/security/backends/azure-kv-backend.d.ts.map +0 -1
  43. package/dist/security/backends/azure-kv-backend.js +0 -121
  44. package/dist/security/backends/azure-kv-backend.js.map +0 -1
  45. package/dist/security/backends/gcp-kms-backend.d.ts +0 -17
  46. package/dist/security/backends/gcp-kms-backend.d.ts.map +0 -1
  47. package/dist/security/backends/gcp-kms-backend.js +0 -110
  48. package/dist/security/backends/gcp-kms-backend.js.map +0 -1
  49. package/dist/security/backends/hsm-backend.d.ts +0 -18
  50. package/dist/security/backends/hsm-backend.d.ts.map +0 -1
  51. package/dist/security/backends/hsm-backend.js +0 -187
  52. package/dist/security/backends/hsm-backend.js.map +0 -1
  53. package/dist/settlement/aptos-channel-sdk.d.ts +0 -66
  54. package/dist/settlement/aptos-channel-sdk.d.ts.map +0 -1
  55. package/dist/settlement/aptos-channel-sdk.js +0 -274
  56. package/dist/settlement/aptos-channel-sdk.js.map +0 -1
  57. package/dist/settlement/aptos-claim-signer.d.ts +0 -57
  58. package/dist/settlement/aptos-claim-signer.d.ts.map +0 -1
  59. package/dist/settlement/aptos-claim-signer.js +0 -200
  60. package/dist/settlement/aptos-claim-signer.js.map +0 -1
  61. package/dist/settlement/aptos-client.d.ts +0 -99
  62. package/dist/settlement/aptos-client.d.ts.map +0 -1
  63. package/dist/settlement/aptos-client.js +0 -474
  64. package/dist/settlement/aptos-client.js.map +0 -1
  65. package/dist/settlement/xrp-channel-lifecycle.d.ts +0 -41
  66. package/dist/settlement/xrp-channel-lifecycle.d.ts.map +0 -1
  67. package/dist/settlement/xrp-channel-lifecycle.js +0 -142
  68. package/dist/settlement/xrp-channel-lifecycle.js.map +0 -1
  69. package/dist/settlement/xrp-channel-manager.d.ts +0 -59
  70. package/dist/settlement/xrp-channel-manager.d.ts.map +0 -1
  71. package/dist/settlement/xrp-channel-manager.js +0 -160
  72. package/dist/settlement/xrp-channel-manager.js.map +0 -1
  73. package/dist/settlement/xrp-channel-sdk.d.ts +0 -30
  74. package/dist/settlement/xrp-channel-sdk.d.ts.map +0 -1
  75. package/dist/settlement/xrp-channel-sdk.js +0 -164
  76. package/dist/settlement/xrp-channel-sdk.js.map +0 -1
  77. package/dist/settlement/xrp-claim-signer.d.ts +0 -22
  78. package/dist/settlement/xrp-claim-signer.d.ts.map +0 -1
  79. package/dist/settlement/xrp-claim-signer.js +0 -122
  80. package/dist/settlement/xrp-claim-signer.js.map +0 -1
  81. package/dist/settlement/xrpl-client.d.ts +0 -104
  82. package/dist/settlement/xrpl-client.d.ts.map +0 -1
  83. package/dist/settlement/xrpl-client.js +0 -304
  84. package/dist/settlement/xrpl-client.js.map +0 -1
  85. package/dist/test/testnet-config.d.ts +0 -58
  86. package/dist/test/testnet-config.d.ts.map +0 -1
  87. package/dist/test/testnet-config.js +0 -89
  88. package/dist/test/testnet-config.js.map +0 -1
  89. package/dist/utils/xrp-wss-connection-pool.d.ts +0 -8
  90. package/dist/utils/xrp-wss-connection-pool.d.ts.map +0 -1
  91. package/dist/utils/xrp-wss-connection-pool.js +0 -42
  92. package/dist/utils/xrp-wss-connection-pool.js.map +0 -1
@@ -0,0 +1,29 @@
1
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
2
+ export type ServerName = 'AdminServer' | 'HealthServer';
3
+ export type AuthModel = 'X-Api-Key' | 'unauthenticated' | 'ip-allowlist';
4
+ export type CrossSurfaceGroupId = 'peer-existence' | 'packet-counters' | 'channel-state' | 'health-liveness-readiness';
5
+ export interface InventoryEntry {
6
+ path: string;
7
+ method: HttpMethod;
8
+ server: ServerName;
9
+ mountPrefix: string;
10
+ authModel: AuthModel;
11
+ successStatus: number;
12
+ failureModes: Array<{
13
+ status: number;
14
+ description: string;
15
+ condition?: string;
16
+ }>;
17
+ requestContract: string;
18
+ responseContract: string;
19
+ owningModule: string;
20
+ relatedStories: string[];
21
+ crossSurfaceGroupId?: CrossSurfaceGroupId;
22
+ operationalNotes: string;
23
+ }
24
+ export declare const ADMIN_API_INVENTORY: readonly InventoryEntry[];
25
+ export type AdminApiInventoryEntry = (typeof ADMIN_API_INVENTORY)[number];
26
+ export declare function getEntriesByServer(server: ServerName): readonly InventoryEntry[];
27
+ export declare function getEntriesByGroup(groupId: CrossSurfaceGroupId): readonly InventoryEntry[];
28
+ export declare function getEntriesByAuthModel(authModel: AuthModel): readonly InventoryEntry[];
29
+ //# sourceMappingURL=admin-api-inventory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-api-inventory.d.ts","sourceRoot":"","sources":["../../src/http/admin-api-inventory.ts"],"names":[],"mappings":"AAgCA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAKrE,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,cAAc,CAAC;AAYxD,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAMzE,MAAM,MAAM,mBAAmB,GAC3B,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,GACf,2BAA2B,CAAC;AAKhC,MAAM,WAAW,cAAc;IAE7B,IAAI,EAAE,MAAM,CAAC;IAGb,MAAM,EAAE,UAAU,CAAC;IAGnB,MAAM,EAAE,UAAU,CAAC;IAGnB,WAAW,EAAE,MAAM,CAAC;IAGpB,SAAS,EAAE,SAAS,CAAC;IAGrB,aAAa,EAAE,MAAM,CAAC;IAGtB,YAAY,EAAE,KAAK,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IAGH,eAAe,EAAE,MAAM,CAAC;IAGxB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,YAAY,EAAE,MAAM,CAAC;IAGrB,cAAc,EAAE,MAAM,EAAE,CAAC;IAGzB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAG1C,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAeD,eAAO,MAAM,mBAAmB,EAAE,SAAS,cAAc,EA2kB/C,CAAC;AAKX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAK1E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,cAAc,EAAE,CAEhF;AAKD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,cAAc,EAAE,CAEzF;AAKD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,cAAc,EAAE,CAErF"}
@@ -0,0 +1,462 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ADMIN_API_INVENTORY = void 0;
4
+ exports.getEntriesByServer = getEntriesByServer;
5
+ exports.getEntriesByGroup = getEntriesByGroup;
6
+ exports.getEntriesByAuthModel = getEntriesByAuthModel;
7
+ exports.ADMIN_API_INVENTORY = [
8
+ {
9
+ path: '/peers',
10
+ method: 'GET',
11
+ server: 'AdminServer',
12
+ mountPrefix: '/admin',
13
+ authModel: 'X-Api-Key',
14
+ successStatus: 200,
15
+ failureModes: [
16
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
17
+ { status: 403, description: 'IP not in allowlist' },
18
+ ],
19
+ requestContract: 'none',
20
+ responseContract: 'Array<{ id: string; url: string; connected: boolean; settlement?: SettlementPeerConfig }>',
21
+ owningModule: 'http/admin-api.ts',
22
+ relatedStories: ['6.4', '37.1'],
23
+ crossSurfaceGroupId: 'peer-existence',
24
+ operationalNotes: 'Returns live connection status from BTPClientManager. Poll at 1Hz for dashboard.',
25
+ },
26
+ {
27
+ path: '/peers',
28
+ method: 'POST',
29
+ server: 'AdminServer',
30
+ mountPrefix: '/admin',
31
+ authModel: 'X-Api-Key',
32
+ successStatus: 201,
33
+ failureModes: [
34
+ { status: 400, description: 'Invalid request body or missing required fields' },
35
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
36
+ { status: 403, description: 'IP not in allowlist' },
37
+ { status: 409, description: 'Peer ID already exists' },
38
+ ],
39
+ requestContract: 'AddPeerRequest (http/admin-api.ts)',
40
+ responseContract: '{ id: string; connected: boolean }',
41
+ owningModule: 'http/admin-api.ts',
42
+ relatedStories: ['6.4', '37.1'],
43
+ crossSurfaceGroupId: 'peer-existence',
44
+ operationalNotes: 'Automatically establishes BTP connection. Settlement config optional.',
45
+ },
46
+ {
47
+ path: '/peers/:peerId',
48
+ method: 'DELETE',
49
+ server: 'AdminServer',
50
+ mountPrefix: '/admin',
51
+ authModel: 'X-Api-Key',
52
+ successStatus: 204,
53
+ failureModes: [
54
+ { status: 400, description: 'Missing peerId parameter' },
55
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
56
+ { status: 403, description: 'IP not in allowlist' },
57
+ { status: 404, description: 'Peer not found' },
58
+ ],
59
+ requestContract: 'none',
60
+ responseContract: 'none (204 No Content)',
61
+ owningModule: 'http/admin-api.ts',
62
+ relatedStories: ['6.4', '37.1'],
63
+ crossSurfaceGroupId: 'peer-existence',
64
+ operationalNotes: 'Gracefully closes BTP connection before removing peer.',
65
+ },
66
+ {
67
+ path: '/peers/:peerId',
68
+ method: 'PUT',
69
+ server: 'AdminServer',
70
+ mountPrefix: '/admin',
71
+ authModel: 'X-Api-Key',
72
+ successStatus: 200,
73
+ failureModes: [
74
+ { status: 400, description: 'Invalid request body' },
75
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
76
+ { status: 403, description: 'IP not in allowlist' },
77
+ { status: 404, description: 'Peer not found' },
78
+ ],
79
+ requestContract: 'Partial<AddPeerRequest> (http/admin-api.ts)',
80
+ responseContract: '{ id: string; connected: boolean; settlement?: SettlementPeerConfig }',
81
+ owningModule: 'http/admin-api.ts',
82
+ relatedStories: ['6.4'],
83
+ crossSurfaceGroupId: 'peer-existence',
84
+ operationalNotes: 'Partial update - only provided fields are modified.',
85
+ },
86
+ {
87
+ path: '/routes',
88
+ method: 'GET',
89
+ server: 'AdminServer',
90
+ mountPrefix: '/admin',
91
+ authModel: 'X-Api-Key',
92
+ successStatus: 200,
93
+ failureModes: [
94
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
95
+ { status: 403, description: 'IP not in allowlist' },
96
+ ],
97
+ requestContract: 'none',
98
+ responseContract: 'Array<{ prefix: string; nextHop: string; priority: number }>',
99
+ owningModule: 'http/admin-api.ts',
100
+ relatedStories: ['6.4'],
101
+ operationalNotes: 'Returns all routing table entries sorted by priority.',
102
+ },
103
+ {
104
+ path: '/routes',
105
+ method: 'POST',
106
+ server: 'AdminServer',
107
+ mountPrefix: '/admin',
108
+ authModel: 'X-Api-Key',
109
+ successStatus: 201,
110
+ failureModes: [
111
+ {
112
+ status: 400,
113
+ description: 'Invalid request body, missing prefix/nextHop, or invalid ILP address',
114
+ },
115
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
116
+ { status: 403, description: 'IP not in allowlist' },
117
+ { status: 404, description: 'Next hop peer not found' },
118
+ ],
119
+ requestContract: 'AddRouteRequest (http/admin-api.ts)',
120
+ responseContract: '{ prefix: string; nextHop: string; priority: number }',
121
+ owningModule: 'http/admin-api.ts',
122
+ relatedStories: ['6.4'],
123
+ operationalNotes: 'Higher priority routes win ties. Creates peer association.',
124
+ },
125
+ {
126
+ path: '/routes/:prefix(*)',
127
+ method: 'DELETE',
128
+ server: 'AdminServer',
129
+ mountPrefix: '/admin',
130
+ authModel: 'X-Api-Key',
131
+ successStatus: 204,
132
+ failureModes: [
133
+ { status: 400, description: 'Missing prefix parameter' },
134
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
135
+ { status: 403, description: 'IP not in allowlist' },
136
+ { status: 404, description: 'Route not found' },
137
+ ],
138
+ requestContract: 'none',
139
+ responseContract: 'none (204 No Content)',
140
+ owningModule: 'http/admin-api.ts',
141
+ relatedStories: ['6.4'],
142
+ operationalNotes: 'The (*) allows prefixes containing slashes (e.g., g.alice.USD).',
143
+ },
144
+ {
145
+ path: '/channels',
146
+ method: 'GET',
147
+ server: 'AdminServer',
148
+ mountPrefix: '/admin',
149
+ authModel: 'X-Api-Key',
150
+ successStatus: 200,
151
+ failureModes: [
152
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
153
+ { status: 403, description: 'IP not in allowlist' },
154
+ { status: 503, description: 'ChannelManager not configured' },
155
+ ],
156
+ requestContract: 'none',
157
+ responseContract: 'Array<AdminChannelStatus> (settlement/types.ts)',
158
+ owningModule: 'http/admin-api.ts',
159
+ relatedStories: ['32.4', '32.5', '33.5', '34.5'],
160
+ crossSurfaceGroupId: 'channel-state',
161
+ operationalNotes: 'Multi-chain: returns channels across all registered chain providers.',
162
+ },
163
+ {
164
+ path: '/channels',
165
+ method: 'POST',
166
+ server: 'AdminServer',
167
+ mountPrefix: '/admin',
168
+ authModel: 'X-Api-Key',
169
+ successStatus: 201,
170
+ failureModes: [
171
+ { status: 400, description: 'Invalid request body or chain parameters' },
172
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
173
+ { status: 403, description: 'IP not in allowlist' },
174
+ { status: 503, description: 'ChannelManager not configured or chain provider unavailable' },
175
+ ],
176
+ requestContract: '{ peerId: string; initialDeposit: string; chainId?: string }',
177
+ responseContract: '{ channelId: string; txHash?: string; status: AdminChannelStatus }',
178
+ owningModule: 'http/admin-api.ts',
179
+ relatedStories: ['32.4', '33.5', '34.5'],
180
+ crossSurfaceGroupId: 'channel-state',
181
+ operationalNotes: 'ChainId defaults to primary EVM provider if not specified.',
182
+ },
183
+ {
184
+ path: '/channels/:channelId',
185
+ method: 'GET',
186
+ server: 'AdminServer',
187
+ mountPrefix: '/admin',
188
+ authModel: 'X-Api-Key',
189
+ successStatus: 200,
190
+ failureModes: [
191
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
192
+ { status: 403, description: 'IP not in allowlist' },
193
+ { status: 404, description: 'Channel not found' },
194
+ { status: 503, description: 'ChannelManager not configured' },
195
+ ],
196
+ requestContract: 'none',
197
+ responseContract: 'AdminChannelStatus (settlement/types.ts)',
198
+ owningModule: 'http/admin-api.ts',
199
+ relatedStories: ['32.4', '33.5', '34.5'],
200
+ crossSurfaceGroupId: 'channel-state',
201
+ operationalNotes: 'Returns full channel state including on-chain status.',
202
+ },
203
+ {
204
+ path: '/channels/:channelId/claims',
205
+ method: 'GET',
206
+ server: 'AdminServer',
207
+ mountPrefix: '/admin',
208
+ authModel: 'X-Api-Key',
209
+ successStatus: 200,
210
+ failureModes: [
211
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
212
+ { status: 403, description: 'IP not in allowlist' },
213
+ { status: 404, description: 'Channel not found' },
214
+ { status: 503, description: 'ClaimReceiver not configured' },
215
+ ],
216
+ requestContract: 'none',
217
+ responseContract: 'Array<ClaimRecord>',
218
+ owningModule: 'http/admin-api.ts',
219
+ relatedStories: ['32.6', '33.6', '34.6', '34.7'],
220
+ crossSurfaceGroupId: 'channel-state',
221
+ operationalNotes: 'Returns claims received via BTP claim protocol.',
222
+ },
223
+ {
224
+ path: '/channels/:channelId/deposit',
225
+ method: 'POST',
226
+ server: 'AdminServer',
227
+ mountPrefix: '/admin',
228
+ authModel: 'X-Api-Key',
229
+ successStatus: 200,
230
+ failureModes: [
231
+ { status: 400, description: 'Invalid amount or channel state' },
232
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
233
+ { status: 403, description: 'IP not in allowlist' },
234
+ { status: 404, description: 'Channel not found' },
235
+ { status: 503, description: 'ChannelManager not configured' },
236
+ ],
237
+ requestContract: '{ amount: string }',
238
+ responseContract: '{ txHash: string; newBalance: string }',
239
+ owningModule: 'http/admin-api.ts',
240
+ relatedStories: ['32.4', '33.5', '34.5'],
241
+ crossSurfaceGroupId: 'channel-state',
242
+ operationalNotes: 'Amount in wei/nanomina/lamports depending on chain.',
243
+ },
244
+ {
245
+ path: '/channels/:channelId/close',
246
+ method: 'POST',
247
+ server: 'AdminServer',
248
+ mountPrefix: '/admin',
249
+ authModel: 'X-Api-Key',
250
+ successStatus: 200,
251
+ failureModes: [
252
+ { status: 400, description: 'Invalid channel state for close operation' },
253
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
254
+ { status: 403, description: 'IP not in allowlist' },
255
+ { status: 404, description: 'Channel not found' },
256
+ { status: 503, description: 'ChannelManager not configured' },
257
+ ],
258
+ requestContract: 'none (or { force?: boolean } for force-close)',
259
+ responseContract: '{ channelId: string; status: AdminChannelStatus; txHash?: string }',
260
+ owningModule: 'http/admin-api.ts',
261
+ relatedStories: ['32.4', '33.5', '34.5'],
262
+ crossSurfaceGroupId: 'channel-state',
263
+ operationalNotes: 'Starts settlement timeout; partner must claim before timeout expires.',
264
+ },
265
+ {
266
+ path: '/balances/:peerId',
267
+ method: 'GET',
268
+ server: 'AdminServer',
269
+ mountPrefix: '/admin',
270
+ authModel: 'X-Api-Key',
271
+ successStatus: 200,
272
+ failureModes: [
273
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
274
+ { status: 403, description: 'IP not in allowlist' },
275
+ { status: 404, description: 'Peer not found' },
276
+ { status: 503, description: 'AccountManager not configured' },
277
+ ],
278
+ requestContract: 'none',
279
+ responseContract: 'BalanceResponse (http/admin-api.ts)',
280
+ owningModule: 'http/admin-api.ts',
281
+ relatedStories: ['37.1'],
282
+ crossSurfaceGroupId: 'peer-existence',
283
+ operationalNotes: 'Uses btpClientManager.getPeerIds() as authoritative peer set. Returns 404 for unknown peer.',
284
+ },
285
+ {
286
+ path: '/settlement/states',
287
+ method: 'GET',
288
+ server: 'AdminServer',
289
+ mountPrefix: '/admin',
290
+ authModel: 'X-Api-Key',
291
+ successStatus: 200,
292
+ failureModes: [
293
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
294
+ { status: 403, description: 'IP not in allowlist' },
295
+ { status: 503, description: 'SettlementMonitor not configured' },
296
+ ],
297
+ requestContract: 'none',
298
+ responseContract: 'Array<{ peerId: string; state: SettlementState; pendingClaims: number }>',
299
+ owningModule: 'http/admin-api.ts',
300
+ relatedStories: ['32.5'],
301
+ crossSurfaceGroupId: 'channel-state',
302
+ operationalNotes: 'Aggregated settlement view across all chain providers.',
303
+ },
304
+ {
305
+ path: '/ilp/send',
306
+ method: 'POST',
307
+ server: 'AdminServer',
308
+ mountPrefix: '/admin',
309
+ authModel: 'X-Api-Key',
310
+ successStatus: 200,
311
+ failureModes: [
312
+ { status: 400, description: 'Invalid request body or ILP address' },
313
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
314
+ { status: 403, description: 'IP not in allowlist' },
315
+ { status: 503, description: 'Connector not ready or packet sender unavailable' },
316
+ ],
317
+ requestContract: '{ destination: string; amount: string; condition?: string; expiry?: string }',
318
+ responseContract: '{ fulfillment?: string; rejection?: IlpReject }',
319
+ owningModule: 'http/admin-api.ts + http/ilp-send-handler.ts',
320
+ relatedStories: ['6.4'],
321
+ operationalNotes: 'Debug/diagnostic endpoint for manual ILP packet injection.',
322
+ },
323
+ {
324
+ path: '/metrics.json',
325
+ method: 'GET',
326
+ server: 'AdminServer',
327
+ mountPrefix: '/admin',
328
+ authModel: 'X-Api-Key',
329
+ successStatus: 200,
330
+ failureModes: [
331
+ { status: 401, description: 'Missing or invalid X-Api-Key' },
332
+ { status: 403, description: 'IP not in allowlist' },
333
+ { status: 503, description: 'Metrics registry not wired' },
334
+ ],
335
+ requestContract: 'none',
336
+ responseContract: 'AdminMetricsJsonResponse { peers: AdminMetricsJsonPeer[]; ... } (both types exported from http/admin-api.ts)',
337
+ owningModule: 'http/admin-api.ts',
338
+ relatedStories: ['37.2', '37.3'],
339
+ crossSurfaceGroupId: 'packet-counters',
340
+ operationalNotes: 'Cache-Control: no-store. Dashboard polls at 1Hz. Prometheus families: toon_packets_forwarded_total, toon_packets_rejected_total, toon_bytes_sent_total, toon_last_packet_timestamp_seconds.',
341
+ },
342
+ {
343
+ path: '/health',
344
+ method: 'GET',
345
+ server: 'AdminServer',
346
+ mountPrefix: '',
347
+ authModel: 'unauthenticated',
348
+ successStatus: 200,
349
+ failureModes: [],
350
+ requestContract: 'none',
351
+ responseContract: '{ status: "healthy"; service: "admin-api"; nodeId: string; timestamp: string }',
352
+ owningModule: 'http/admin-server.ts',
353
+ relatedStories: ['6.4'],
354
+ crossSurfaceGroupId: 'health-liveness-readiness',
355
+ operationalNotes: 'Mounted at app root BEFORE /admin router. Port 8081. Used by Docker health checks.',
356
+ },
357
+ {
358
+ path: '/metrics',
359
+ method: 'GET',
360
+ server: 'HealthServer',
361
+ mountPrefix: '',
362
+ authModel: 'unauthenticated',
363
+ successStatus: 200,
364
+ failureModes: [{ status: 404, description: 'Metrics middleware not configured' }],
365
+ requestContract: 'none',
366
+ responseContract: 'text/plain (Prometheus exposition format)',
367
+ owningModule: 'http/health-server.ts',
368
+ relatedStories: ['37.2'],
369
+ crossSurfaceGroupId: 'packet-counters',
370
+ operationalNotes: 'Prometheus families: toon_packets_forwarded_total, toon_packets_rejected_total, toon_bytes_sent_total, toon_last_packet_timestamp_seconds. Scraped by monitoring.',
371
+ },
372
+ {
373
+ path: '/health',
374
+ method: 'GET',
375
+ server: 'HealthServer',
376
+ mountPrefix: '',
377
+ authModel: 'unauthenticated',
378
+ successStatus: 200,
379
+ failureModes: [{ status: 503, description: 'Connector unhealthy or starting' }],
380
+ requestContract: 'none',
381
+ responseContract: 'HealthStatus | HealthStatusExtended (http/types.ts)',
382
+ owningModule: 'http/health-server.ts',
383
+ relatedStories: ['12.6'],
384
+ crossSurfaceGroupId: 'health-liveness-readiness',
385
+ operationalNotes: 'Returns 200 for healthy/degraded, 503 for unhealthy/starting. Extended format if extendedProvider configured.',
386
+ },
387
+ {
388
+ path: '/health/live',
389
+ method: 'GET',
390
+ server: 'HealthServer',
391
+ mountPrefix: '',
392
+ authModel: 'unauthenticated',
393
+ successStatus: 200,
394
+ failureModes: [],
395
+ requestContract: 'none',
396
+ responseContract: '{ status: "alive"; timestamp: string }',
397
+ owningModule: 'http/health-server.ts',
398
+ relatedStories: ['12.6'],
399
+ crossSurfaceGroupId: 'health-liveness-readiness',
400
+ operationalNotes: 'Always returns 200 unless process crashed. Kubernetes liveness probe.',
401
+ },
402
+ {
403
+ path: '/health/ready',
404
+ method: 'GET',
405
+ server: 'HealthServer',
406
+ mountPrefix: '',
407
+ authModel: 'unauthenticated',
408
+ successStatus: 200,
409
+ failureModes: [{ status: 503, description: 'Dependencies not ready (e.g., TigerBeetle down)' }],
410
+ requestContract: 'none',
411
+ responseContract: '{ status: "ready"; dependencies: object; timestamp: string }',
412
+ owningModule: 'http/health-server.ts',
413
+ relatedStories: ['12.6'],
414
+ crossSurfaceGroupId: 'health-liveness-readiness',
415
+ operationalNotes: 'Checks TigerBeetle and connector status. Kubernetes readiness probe.',
416
+ },
417
+ {
418
+ path: '/settlement/execute',
419
+ method: 'POST',
420
+ server: 'HealthServer',
421
+ mountPrefix: '',
422
+ authModel: 'unauthenticated',
423
+ successStatus: 200,
424
+ failureModes: [
425
+ { status: 400, description: 'Invalid request body or missing peerId' },
426
+ { status: 404, description: 'Peer not found or no settlement configured' },
427
+ { status: 503, description: 'Settlement infrastructure not available' },
428
+ ],
429
+ requestContract: '{ peerId: string; amount?: string }',
430
+ responseContract: '{ txHash: string; amount: string; tokenId: string }',
431
+ owningModule: 'settlement/settlement-api.ts',
432
+ relatedStories: ['6.7'],
433
+ operationalNotes: 'Inherits HealthServer unauthenticated posture. Auth via authToken in body when settlement API configured.',
434
+ },
435
+ {
436
+ path: '/settlement/status/:peerId',
437
+ method: 'GET',
438
+ server: 'HealthServer',
439
+ mountPrefix: '',
440
+ authModel: 'unauthenticated',
441
+ successStatus: 200,
442
+ failureModes: [
443
+ { status: 404, description: 'Peer not found or no settlement configured' },
444
+ { status: 503, description: 'Settlement infrastructure not available' },
445
+ ],
446
+ requestContract: 'none',
447
+ responseContract: '{ peerId: string; pendingAmount: string; lastSettlement?: string; channelStatus?: string }',
448
+ owningModule: 'settlement/settlement-api.ts',
449
+ relatedStories: ['6.7'],
450
+ operationalNotes: 'Inherits HealthServer unauthenticated posture.',
451
+ },
452
+ ];
453
+ function getEntriesByServer(server) {
454
+ return exports.ADMIN_API_INVENTORY.filter((entry) => entry.server === server);
455
+ }
456
+ function getEntriesByGroup(groupId) {
457
+ return exports.ADMIN_API_INVENTORY.filter((entry) => entry.crossSurfaceGroupId === groupId);
458
+ }
459
+ function getEntriesByAuthModel(authModel) {
460
+ return exports.ADMIN_API_INVENTORY.filter((entry) => entry.authModel === authModel);
461
+ }
462
+ //# sourceMappingURL=admin-api-inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-api-inventory.js","sourceRoot":"","sources":["../../src/http/admin-api-inventory.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import type { AccountManager } from '../settlement/account-manager';
10
10
  import type { SettlementMonitor } from '../settlement/settlement-monitor';
11
11
  import type { ClaimReceiver } from '../settlement/claim-receiver';
12
12
  import type { PacketSenderFn, IsReadyFn } from './ilp-send-handler';
13
+ import type { IlpMetricsRegistry } from '../observability/metrics-registry';
13
14
  export interface AdminAPIConfig {
14
15
  routingTable: RoutingTable;
15
16
  btpClientManager: BTPClientManager;
@@ -27,6 +28,7 @@ export interface AdminAPIConfig {
27
28
  packetSender?: PacketSenderFn;
28
29
  isReady?: IsReadyFn;
29
30
  defaultSettlementTokenId?: string;
31
+ metricsRegistry?: IlpMetricsRegistry;
30
32
  }
31
33
  export interface AddPeerRequest {
32
34
  id: string;
@@ -52,6 +54,24 @@ export interface BalanceResponse {
52
54
  netBalance: string;
53
55
  }>;
54
56
  }
57
+ export interface AdminMetricsJsonPeer {
58
+ peerId: string;
59
+ connected: boolean;
60
+ packetsForwarded: number;
61
+ packetsRejected: number;
62
+ bytesSent: number;
63
+ lastPacketAt: string | null;
64
+ }
65
+ export interface AdminMetricsJsonResponse {
66
+ uptimeSeconds: number;
67
+ aggregate: {
68
+ packetsForwarded: number;
69
+ packetsRejected: number;
70
+ bytesSent: number;
71
+ };
72
+ peers: AdminMetricsJsonPeer[];
73
+ timestamp: string;
74
+ }
55
75
  export interface SettlementStateResponse {
56
76
  peerId: string;
57
77
  tokenId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"admin-api.d.ts","sourceRoot":"","sources":["../../src/http/admin-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-api.d.ts","sourceRoot":"","sources":["../../src/http/admin-api.ts"],"names":[],"mappings":"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"}
@@ -79,7 +79,7 @@ function createIPAllowlistMiddleware(allowedIPs, trustProxy, logger) {
79
79
  async function createAdminRouter(config) {
80
80
  const { default: express } = await (0, optional_require_1.requireOptional)('express', 'HTTP admin/health APIs');
81
81
  const router = express.Router();
82
- const { routingTable, btpClientManager, logger, apiKey, allowedIPs, trustProxy = false, nodeId, settlementPeers, channelManager, paymentChannelSDK, accountManager, settlementMonitor, claimReceiver, packetSender, isReady, defaultSettlementTokenId, } = config;
82
+ const { routingTable, btpClientManager, logger, apiKey, allowedIPs, trustProxy = false, nodeId, settlementPeers, channelManager, paymentChannelSDK, accountManager, settlementMonitor, claimReceiver, packetSender, isReady, defaultSettlementTokenId, metricsRegistry, } = config;
83
83
  const log = logger.child({ component: 'AdminAPI' });
84
84
  router.use(express.json());
85
85
  if (allowedIPs && allowedIPs.length > 0) {
@@ -883,6 +883,15 @@ async function createAdminRouter(config) {
883
883
  }
884
884
  const peerId = req.params.peerId;
885
885
  const tokenId = req.query.tokenId || (defaultSettlementTokenId ?? 'M2M');
886
+ const registeredPeers = btpClientManager.getPeerIds();
887
+ if (!registeredPeers.includes(peerId)) {
888
+ res.status(404).json({
889
+ error: 'Not found',
890
+ peerId,
891
+ message: `Peer '${peerId}' not found`,
892
+ });
893
+ return;
894
+ }
886
895
  const balance = await accountManager.getAccountBalance(peerId, tokenId);
887
896
  const response = {
888
897
  peerId,
@@ -967,6 +976,57 @@ async function createAdminRouter(config) {
967
976
  });
968
977
  const ilpSendHandler = new ilp_send_handler_1.IlpSendHandler(packetSender ?? null, isReady ?? null, log);
969
978
  router.post('/ilp/send', ilpSendHandler.handle.bind(ilpSendHandler));
979
+ router.get('/metrics.json', async (_req, res) => {
980
+ try {
981
+ if (!metricsRegistry) {
982
+ res.status(503).json({
983
+ error: 'Service Unavailable',
984
+ message: 'Metrics not enabled',
985
+ });
986
+ return;
987
+ }
988
+ const livePeerIds = btpClientManager.getPeerIds();
989
+ const peerSnapshots = await metricsRegistry.snapshotPeers();
990
+ const snapshotByPeer = new Map(peerSnapshots.map((s) => [s.peerId, s]));
991
+ const peerStatus = btpClientManager.getPeerStatus();
992
+ const peers = [...livePeerIds].sort().map((peerId) => {
993
+ const snap = snapshotByPeer.get(peerId);
994
+ const lastPacketAt = snap && snap.lastPacketAtUnixSeconds > 0
995
+ ? new Date(snap.lastPacketAtUnixSeconds * 1000).toISOString()
996
+ : null;
997
+ return {
998
+ peerId,
999
+ connected: peerStatus.get(peerId) ?? false,
1000
+ packetsForwarded: snap?.packetsForwarded ?? 0,
1001
+ packetsRejected: snap?.packetsRejected ?? 0,
1002
+ bytesSent: snap?.bytesSent ?? 0,
1003
+ lastPacketAt,
1004
+ };
1005
+ });
1006
+ const aggregate = peers.reduce((acc, p) => ({
1007
+ packetsForwarded: acc.packetsForwarded + p.packetsForwarded,
1008
+ packetsRejected: acc.packetsRejected + p.packetsRejected,
1009
+ bytesSent: acc.bytesSent + p.bytesSent,
1010
+ }), { packetsForwarded: 0, packetsRejected: 0, bytesSent: 0 });
1011
+ res.set('Cache-Control', 'no-store');
1012
+ res.json({
1013
+ uptimeSeconds: Math.floor(process.uptime()),
1014
+ aggregate,
1015
+ peers,
1016
+ timestamp: new Date().toISOString(),
1017
+ });
1018
+ }
1019
+ catch (error) {
1020
+ log.error({
1021
+ event: 'admin_api_metrics_error',
1022
+ error: error instanceof Error ? error.message : String(error),
1023
+ }, 'Failed to generate metrics.json');
1024
+ res.status(500).json({
1025
+ error: 'Internal server error',
1026
+ message: error instanceof Error ? error.message : String(error),
1027
+ });
1028
+ }
1029
+ });
970
1030
  return router;
971
1031
  }
972
1032
  exports.CHAIN_FORMAT_REGEX = /^evm:[a-zA-Z0-9]+:\d+$/;