@hashgraphonline/standards-sdk 0.1.171 → 0.1.172

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 (158) hide show
  1. package/dist/browser/services/registry-broker/client/base-client.d.ts +3 -2
  2. package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
  3. package/dist/browser/services/registry-broker/client/search.d.ts +2 -1
  4. package/dist/browser/services/registry-broker/client/search.d.ts.map +1 -1
  5. package/dist/browser/services/registry-broker/client.d.ts +1 -0
  6. package/dist/browser/services/registry-broker/client.d.ts.map +1 -1
  7. package/dist/browser/services/registry-broker/schemas.d.ts +17723 -58
  8. package/dist/browser/services/registry-broker/schemas.d.ts.map +1 -1
  9. package/dist/browser/services/registry-broker/types.d.ts +36 -1
  10. package/dist/browser/services/registry-broker/types.d.ts.map +1 -1
  11. package/dist/browser/standards-sdk.browser.js +64 -1
  12. package/dist/browser/standards-sdk.browser.js.map +1 -1
  13. package/dist/cjs/services/registry-broker/client/base-client.d.ts +3 -2
  14. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  15. package/dist/cjs/services/registry-broker/client/search.d.ts +2 -1
  16. package/dist/cjs/services/registry-broker/client/search.d.ts.map +1 -1
  17. package/dist/cjs/services/registry-broker/client.d.ts +1 -0
  18. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  19. package/dist/cjs/services/registry-broker/schemas.d.ts +17814 -149
  20. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  21. package/dist/cjs/services/registry-broker/types.d.ts +36 -1
  22. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  23. package/dist/cjs/standards-sdk.cjs +3 -3
  24. package/dist/cjs/standards-sdk.cjs.map +1 -1
  25. package/dist/es/services/registry-broker/client/base-client.d.ts +3 -2
  26. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  27. package/dist/es/services/registry-broker/client/search.d.ts +2 -1
  28. package/dist/es/services/registry-broker/client/search.d.ts.map +1 -1
  29. package/dist/es/services/registry-broker/client.d.ts +1 -0
  30. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  31. package/dist/es/services/registry-broker/schemas.d.ts +17814 -149
  32. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  33. package/dist/es/services/registry-broker/types.d.ts +36 -1
  34. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  35. package/dist/es/standards-sdk.es.js +20 -9
  36. package/dist/es/standards-sdk.es.js.map +1 -1
  37. package/dist/es/standards-sdk.es104.js +1 -1
  38. package/dist/es/standards-sdk.es106.js +1 -1
  39. package/dist/es/standards-sdk.es108.js +1 -1
  40. package/dist/es/standards-sdk.es11.js +1 -1
  41. package/dist/es/standards-sdk.es110.js +1 -1
  42. package/dist/es/standards-sdk.es116.js +2 -2
  43. package/dist/es/standards-sdk.es12.js +1 -1
  44. package/dist/es/standards-sdk.es121.js +1 -1
  45. package/dist/es/standards-sdk.es127.js +1 -1
  46. package/dist/es/standards-sdk.es128.js +5 -5
  47. package/dist/es/standards-sdk.es138.js +1 -1
  48. package/dist/es/standards-sdk.es139.js +1 -1
  49. package/dist/es/standards-sdk.es140.js +5 -5
  50. package/dist/es/standards-sdk.es142.js +2 -2
  51. package/dist/es/standards-sdk.es143.js +1 -1
  52. package/dist/es/standards-sdk.es145.js +65 -1
  53. package/dist/es/standards-sdk.es145.js.map +1 -1
  54. package/dist/es/standards-sdk.es147.js +250 -78
  55. package/dist/es/standards-sdk.es147.js.map +1 -1
  56. package/dist/es/standards-sdk.es148.js +77 -71
  57. package/dist/es/standards-sdk.es148.js.map +1 -1
  58. package/dist/es/standards-sdk.es149.js +79 -936
  59. package/dist/es/standards-sdk.es149.js.map +1 -1
  60. package/dist/es/standards-sdk.es150.js +934 -53
  61. package/dist/es/standards-sdk.es150.js.map +1 -1
  62. package/dist/es/standards-sdk.es151.js +53 -152
  63. package/dist/es/standards-sdk.es151.js.map +1 -1
  64. package/dist/es/standards-sdk.es152.js +159 -7
  65. package/dist/es/standards-sdk.es152.js.map +1 -1
  66. package/dist/es/standards-sdk.es153.js +7 -86
  67. package/dist/es/standards-sdk.es153.js.map +1 -1
  68. package/dist/es/standards-sdk.es154.js +64 -43
  69. package/dist/es/standards-sdk.es154.js.map +1 -1
  70. package/dist/es/standards-sdk.es155.js +65 -30
  71. package/dist/es/standards-sdk.es155.js.map +1 -1
  72. package/dist/es/standards-sdk.es156.js +30 -34
  73. package/dist/es/standards-sdk.es156.js.map +1 -1
  74. package/dist/es/standards-sdk.es157.js +34 -48
  75. package/dist/es/standards-sdk.es157.js.map +1 -1
  76. package/dist/es/standards-sdk.es158.js +48 -138
  77. package/dist/es/standards-sdk.es158.js.map +1 -1
  78. package/dist/es/standards-sdk.es159.js +133 -37
  79. package/dist/es/standards-sdk.es159.js.map +1 -1
  80. package/dist/es/standards-sdk.es16.js +1 -1
  81. package/dist/es/standards-sdk.es160.js +34 -12474
  82. package/dist/es/standards-sdk.es160.js.map +1 -1
  83. package/dist/es/standards-sdk.es161.js +12413 -481
  84. package/dist/es/standards-sdk.es161.js.map +1 -1
  85. package/dist/es/standards-sdk.es162.js +51 -68
  86. package/dist/es/standards-sdk.es162.js.map +1 -1
  87. package/dist/es/standards-sdk.es163.js +76 -48
  88. package/dist/es/standards-sdk.es163.js.map +1 -1
  89. package/dist/es/standards-sdk.es164.js +66 -69
  90. package/dist/es/standards-sdk.es164.js.map +1 -1
  91. package/dist/es/standards-sdk.es165.js +180 -61
  92. package/dist/es/standards-sdk.es165.js.map +1 -1
  93. package/dist/es/standards-sdk.es166.js +14 -197
  94. package/dist/es/standards-sdk.es166.js.map +1 -1
  95. package/dist/es/standards-sdk.es167.js +71 -15
  96. package/dist/es/standards-sdk.es167.js.map +1 -1
  97. package/dist/es/standards-sdk.es168.js +538 -160
  98. package/dist/es/standards-sdk.es168.js.map +1 -1
  99. package/dist/es/standards-sdk.es169.js +139 -289
  100. package/dist/es/standards-sdk.es169.js.map +1 -1
  101. package/dist/es/standards-sdk.es170.js +274 -298
  102. package/dist/es/standards-sdk.es170.js.map +1 -1
  103. package/dist/es/standards-sdk.es171.js +262 -369
  104. package/dist/es/standards-sdk.es171.js.map +1 -1
  105. package/dist/es/standards-sdk.es172.js +316 -194
  106. package/dist/es/standards-sdk.es172.js.map +1 -1
  107. package/dist/es/standards-sdk.es173.js +319 -64
  108. package/dist/es/standards-sdk.es173.js.map +1 -1
  109. package/dist/es/standards-sdk.es174.js +61 -157
  110. package/dist/es/standards-sdk.es174.js.map +1 -1
  111. package/dist/es/standards-sdk.es175.js +152 -202
  112. package/dist/es/standards-sdk.es175.js.map +1 -1
  113. package/dist/es/standards-sdk.es176.js +219 -223
  114. package/dist/es/standards-sdk.es176.js.map +1 -1
  115. package/dist/es/standards-sdk.es177.js +227 -107
  116. package/dist/es/standards-sdk.es177.js.map +1 -1
  117. package/dist/es/standards-sdk.es178.js +98 -105
  118. package/dist/es/standards-sdk.es178.js.map +1 -1
  119. package/dist/es/standards-sdk.es179.js +105 -140
  120. package/dist/es/standards-sdk.es179.js.map +1 -1
  121. package/dist/es/standards-sdk.es18.js +4 -4
  122. package/dist/es/standards-sdk.es180.js +2 -2
  123. package/dist/es/standards-sdk.es182.js +1 -1
  124. package/dist/es/standards-sdk.es19.js +2 -2
  125. package/dist/es/standards-sdk.es22.js +1 -1
  126. package/dist/es/standards-sdk.es27.js +4 -4
  127. package/dist/es/standards-sdk.es30.js +1 -1
  128. package/dist/es/standards-sdk.es31.js +1 -1
  129. package/dist/es/standards-sdk.es35.js +2 -2
  130. package/dist/es/standards-sdk.es36.js +3 -3
  131. package/dist/es/standards-sdk.es37.js +1 -1
  132. package/dist/es/standards-sdk.es4.js +1 -1
  133. package/dist/es/standards-sdk.es53.js +1 -1
  134. package/dist/es/standards-sdk.es56.js +1 -1
  135. package/dist/es/standards-sdk.es59.js +1 -1
  136. package/dist/es/standards-sdk.es60.js +1 -1
  137. package/dist/es/standards-sdk.es62.js +1 -1
  138. package/dist/es/standards-sdk.es63.js +2 -2
  139. package/dist/es/standards-sdk.es64.js +1 -1
  140. package/dist/es/standards-sdk.es65.js +1 -1
  141. package/dist/es/standards-sdk.es66.js +1 -1
  142. package/dist/es/standards-sdk.es67.js +2 -2
  143. package/dist/es/standards-sdk.es69.js +1 -1
  144. package/dist/es/standards-sdk.es7.js +1 -1
  145. package/dist/es/standards-sdk.es71.js +1 -1
  146. package/dist/es/standards-sdk.es72.js +2 -2
  147. package/dist/es/standards-sdk.es75.js +3 -3
  148. package/dist/es/standards-sdk.es76.js +1 -1
  149. package/dist/es/standards-sdk.es78.js +1 -1
  150. package/dist/es/standards-sdk.es83.js +1 -1
  151. package/dist/es/standards-sdk.es84.js +1 -1
  152. package/dist/es/standards-sdk.es85.js +1 -1
  153. package/dist/es/standards-sdk.es88.js +1 -1
  154. package/dist/es/standards-sdk.es90.js +1 -1
  155. package/dist/es/standards-sdk.es94.js +3 -3
  156. package/dist/es/standards-sdk.es98.js +1 -1
  157. package/dist/es/standards-sdk.es99.js +1 -1
  158. package/package.json +1 -1
@@ -1,90 +1,262 @@
1
- const normalise = (value) => value.trim().toLowerCase();
2
- const HEDERA_NETWORK_ALIASES = /* @__PURE__ */ new Map([
3
- ["hedera:mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
4
- ["mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
5
- ["hedera-mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
6
- ["hedera_mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
7
- ["hedera:testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }],
8
- ["testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }],
9
- ["hedera-testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }],
10
- ["hedera_testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }]
11
- ]);
12
- const EVM_NETWORK_CHAIN_IDS = {
13
- abstract: 2741,
14
- "abstract-testnet": 11124,
15
- base: 8453,
16
- "base-sepolia": 84532,
17
- avalanche: 43114,
18
- "avalanche-fuji": 43113,
19
- iotex: 4689,
20
- sei: 1329,
21
- "sei-testnet": 1328,
22
- polygon: 137,
23
- "polygon-amoy": 80002,
24
- peaq: 3338
25
- };
26
- const CHAIN_ID_TO_ALIAS = new Map(
27
- Object.entries(EVM_NETWORK_CHAIN_IDS).map(([alias, id]) => [id, alias])
28
- );
29
- const parseChainId = (value) => {
30
- if (/^eip155:\d+$/i.test(value)) {
31
- return Number.parseInt(value.split(":")[1], 10);
1
+ import { dashboardStatsResponseSchema, registrationProgressResponseSchema, registrationQuoteResponseSchema, uaidConnectionStatusSchema, resolveResponseSchema, registerAgentResponseSchema, uaidValidationResponseSchema } from "./standards-sdk.es145.js";
2
+ import { purchaseCreditsWithHbar } from "./standards-sdk.es179.js";
3
+ import { serialiseAgentRegistrationRequest, DEFAULT_PROGRESS_INTERVAL_MS, DEFAULT_PROGRESS_TIMEOUT_MS, createAbortError, MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS } from "./standards-sdk.es177.js";
4
+ import { RegistryBrokerError } from "./standards-sdk.es146.js";
5
+ async function performRegisterAgent(client, payload) {
6
+ const raw = await client.requestJson("/register", {
7
+ method: "POST",
8
+ body: serialiseAgentRegistrationRequest(payload),
9
+ headers: { "content-type": "application/json" }
10
+ });
11
+ return client.parseWithSchema(
12
+ raw,
13
+ registerAgentResponseSchema,
14
+ "register agent response"
15
+ );
16
+ }
17
+ function calculateHbarAmount(creditsToPurchase, creditsPerHbar) {
18
+ if (creditsPerHbar <= 0) {
19
+ throw new Error("creditsPerHbar must be positive");
32
20
  }
33
- if (/^\d+$/.test(value)) {
34
- return Number.parseInt(value, 10);
21
+ if (creditsToPurchase <= 0) {
22
+ throw new Error("creditsToPurchase must be positive");
35
23
  }
36
- return void 0;
37
- };
38
- const normaliseEvmNetwork = (value) => {
39
- const trimmed = normalise(value);
40
- let chainId = parseChainId(trimmed);
41
- let alias;
42
- if (chainId === void 0) {
43
- const mapped = EVM_NETWORK_CHAIN_IDS[trimmed];
44
- if (mapped !== void 0) {
45
- chainId = mapped;
46
- alias = trimmed;
24
+ const rawHbar = creditsToPurchase / creditsPerHbar;
25
+ const tinybars = Math.ceil(rawHbar * 1e8);
26
+ return tinybars / 1e8;
27
+ }
28
+ function resolveCreditsToPurchase(shortfallCredits) {
29
+ if (!Number.isFinite(shortfallCredits) || shortfallCredits <= 0) {
30
+ return 0;
31
+ }
32
+ return Math.max(
33
+ Math.ceil(shortfallCredits),
34
+ MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS
35
+ );
36
+ }
37
+ async function ensureCreditsForRegistration(client, payload, autoTopUp) {
38
+ const details = autoTopUp ?? null;
39
+ if (!details) {
40
+ return;
41
+ }
42
+ if (!details.accountId || !details.accountId.trim()) {
43
+ throw new Error("autoTopUp.accountId is required");
44
+ }
45
+ if (!details.privateKey || !details.privateKey.trim()) {
46
+ throw new Error("autoTopUp.privateKey is required");
47
+ }
48
+ for (let attempt = 0; attempt < 3; attempt += 1) {
49
+ const quote = await getRegistrationQuote(client, payload);
50
+ const shortfall = quote.shortfallCredits ?? 0;
51
+ if (shortfall <= 0) {
52
+ return;
53
+ }
54
+ const creditsToPurchase = resolveCreditsToPurchase(shortfall);
55
+ if (creditsToPurchase <= 0) {
56
+ return;
47
57
  }
48
- } else if (CHAIN_ID_TO_ALIAS.has(chainId)) {
49
- alias = CHAIN_ID_TO_ALIAS.get(chainId);
58
+ const creditsPerHbar = quote.creditsPerHbar ?? null;
59
+ if (!creditsPerHbar || creditsPerHbar <= 0) {
60
+ throw new Error("Unable to determine credits per HBAR for auto top-up");
61
+ }
62
+ const hbarAmount = calculateHbarAmount(creditsToPurchase, creditsPerHbar);
63
+ await purchaseCreditsWithHbar(client, {
64
+ accountId: details.accountId.trim(),
65
+ privateKey: details.privateKey.trim(),
66
+ hbarAmount,
67
+ memo: details.memo ?? "Registry Broker auto top-up",
68
+ metadata: {
69
+ shortfallCredits: shortfall,
70
+ requiredCredits: quote.requiredCredits,
71
+ purchasedCredits: creditsToPurchase
72
+ }
73
+ });
50
74
  }
51
- if (chainId === void 0) {
52
- throw new Error(
53
- 'Unsupported EVM ledger network. Provide an alias like "base-sepolia" or a canonical eip155:<chainId> string.'
54
- );
75
+ const finalQuote = await getRegistrationQuote(client, payload);
76
+ if ((finalQuote.shortfallCredits ?? 0) > 0) {
77
+ throw new Error("Unable to purchase sufficient credits for registration");
55
78
  }
56
- return {
57
- canonical: `eip155:${chainId}`,
58
- kind: "evm",
59
- chainId,
60
- legacyName: alias
61
- };
62
- };
63
- const normaliseHederaNetwork = (value) => {
64
- const trimmed = normalise(value);
65
- const mapping = HEDERA_NETWORK_ALIASES.get(trimmed);
66
- if (!mapping) {
67
- throw new Error(
68
- 'Unsupported Hedera network. Use hedera:mainnet or hedera:testnet (legacy "mainnet"/"testnet" also accepted).'
79
+ }
80
+ async function resolveUaid(client, uaid) {
81
+ const raw = await client.requestJson(
82
+ `/resolve/${encodeURIComponent(uaid)}`,
83
+ {
84
+ method: "GET"
85
+ }
86
+ );
87
+ return client.parseWithSchema(
88
+ raw,
89
+ resolveResponseSchema,
90
+ "resolve UAID response"
91
+ );
92
+ }
93
+ async function registerAgent(client, payload, options) {
94
+ const autoTopUp = options?.autoTopUp ?? client.registrationAutoTopUp;
95
+ if (!autoTopUp) {
96
+ return performRegisterAgent(client, payload);
97
+ }
98
+ await ensureCreditsForRegistration(client, payload, autoTopUp);
99
+ let retried = false;
100
+ while (true) {
101
+ try {
102
+ return await performRegisterAgent(client, payload);
103
+ } catch (error) {
104
+ const shortfall = client.extractInsufficientCreditsDetails(error);
105
+ if (shortfall && !retried) {
106
+ await ensureCreditsForRegistration(client, payload, autoTopUp);
107
+ retried = true;
108
+ continue;
109
+ }
110
+ throw error;
111
+ }
112
+ }
113
+ }
114
+ async function getRegistrationQuote(client, payload) {
115
+ const raw = await client.requestJson("/register/quote", {
116
+ method: "POST",
117
+ body: serialiseAgentRegistrationRequest(payload),
118
+ headers: { "content-type": "application/json" }
119
+ });
120
+ return client.parseWithSchema(
121
+ raw,
122
+ registrationQuoteResponseSchema,
123
+ "registration quote response"
124
+ );
125
+ }
126
+ async function updateAgent(client, uaid, payload) {
127
+ const raw = await client.requestJson(
128
+ `/register/${encodeURIComponent(uaid)}`,
129
+ {
130
+ method: "PUT",
131
+ body: serialiseAgentRegistrationRequest(payload),
132
+ headers: { "content-type": "application/json" }
133
+ }
134
+ );
135
+ return client.parseWithSchema(
136
+ raw,
137
+ registerAgentResponseSchema,
138
+ "update agent response"
139
+ );
140
+ }
141
+ async function getRegistrationProgress(client, attemptId) {
142
+ const normalisedAttemptId = attemptId.trim();
143
+ if (!normalisedAttemptId) {
144
+ throw new Error("attemptId is required");
145
+ }
146
+ try {
147
+ const raw = await client.requestJson(
148
+ `/register/progress/${encodeURIComponent(normalisedAttemptId)}`,
149
+ { method: "GET" }
69
150
  );
151
+ const parsed = client.parseWithSchema(
152
+ raw,
153
+ registrationProgressResponseSchema,
154
+ "registration progress response"
155
+ );
156
+ return parsed.progress;
157
+ } catch (error) {
158
+ if (error instanceof RegistryBrokerError && error.status === 404) {
159
+ return null;
160
+ }
161
+ throw error;
70
162
  }
71
- return {
72
- canonical: mapping.canonical,
73
- kind: "hedera",
74
- hederaNetwork: mapping.hederaNetwork
75
- };
76
- };
77
- const canonicalizeLedgerNetwork = (network) => {
78
- if (typeof network !== "string" || network.trim().length === 0) {
79
- throw new Error("Ledger network is required.");
163
+ }
164
+ async function waitForRegistrationCompletion(client, attemptId, options = {}) {
165
+ const normalisedAttemptId = attemptId.trim();
166
+ if (!normalisedAttemptId) {
167
+ throw new Error("attemptId is required");
80
168
  }
81
- const trimmed = normalise(network);
82
- if (trimmed.startsWith("hedera:") || trimmed.includes("hedera-") || trimmed.includes("hedera_") || trimmed === "mainnet" || trimmed === "testnet") {
83
- return normaliseHederaNetwork(trimmed);
169
+ const interval = Math.max(
170
+ 250,
171
+ options.intervalMs ?? DEFAULT_PROGRESS_INTERVAL_MS
172
+ );
173
+ const timeoutMs = options.timeoutMs ?? DEFAULT_PROGRESS_TIMEOUT_MS;
174
+ const throwOnFailure = options.throwOnFailure ?? true;
175
+ const signal = options.signal;
176
+ const startedAt = Date.now();
177
+ while (true) {
178
+ if (signal?.aborted) {
179
+ throw createAbortError();
180
+ }
181
+ const progress = await client.getRegistrationProgress(normalisedAttemptId);
182
+ if (progress) {
183
+ options.onProgress?.(progress);
184
+ if (progress.status === "completed") {
185
+ return progress;
186
+ }
187
+ if (progress.status === "partial" || progress.status === "failed") {
188
+ if (throwOnFailure) {
189
+ throw new RegistryBrokerError(
190
+ "Registration did not complete successfully",
191
+ {
192
+ status: 409,
193
+ statusText: progress.status,
194
+ body: progress
195
+ }
196
+ );
197
+ }
198
+ return progress;
199
+ }
200
+ }
201
+ if (Date.now() - startedAt >= timeoutMs) {
202
+ throw new Error(
203
+ `Registration progress polling timed out after ${timeoutMs}ms`
204
+ );
205
+ }
206
+ await client.delay(interval, signal);
84
207
  }
85
- return normaliseEvmNetwork(trimmed);
86
- };
208
+ }
209
+ async function validateUaid(client, uaid) {
210
+ const raw = await client.requestJson(
211
+ `/uaids/validate/${encodeURIComponent(uaid)}`,
212
+ {
213
+ method: "GET"
214
+ }
215
+ );
216
+ return client.parseWithSchema(
217
+ raw,
218
+ uaidValidationResponseSchema,
219
+ "UAID validation response"
220
+ );
221
+ }
222
+ async function getUaidConnectionStatus(client, uaid) {
223
+ const raw = await client.requestJson(
224
+ `/uaids/connections/${encodeURIComponent(uaid)}/status`,
225
+ {
226
+ method: "GET"
227
+ }
228
+ );
229
+ return client.parseWithSchema(
230
+ raw,
231
+ uaidConnectionStatusSchema,
232
+ "UAID connection status"
233
+ );
234
+ }
235
+ async function closeUaidConnection(client, uaid) {
236
+ await client.request(`/uaids/connections/${encodeURIComponent(uaid)}`, {
237
+ method: "DELETE"
238
+ });
239
+ }
240
+ async function dashboardStats(client) {
241
+ const raw = await client.requestJson("/dashboard/stats", {
242
+ method: "GET"
243
+ });
244
+ return client.parseWithSchema(
245
+ raw,
246
+ dashboardStatsResponseSchema,
247
+ "dashboard stats response"
248
+ );
249
+ }
87
250
  export {
88
- canonicalizeLedgerNetwork
251
+ closeUaidConnection,
252
+ dashboardStats,
253
+ getRegistrationProgress,
254
+ getRegistrationQuote,
255
+ getUaidConnectionStatus,
256
+ registerAgent,
257
+ resolveUaid,
258
+ updateAgent,
259
+ validateUaid,
260
+ waitForRegistrationCompletion
89
261
  };
90
262
  //# sourceMappingURL=standards-sdk.es147.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es147.js","sources":["../../src/services/registry-broker/ledger-network.ts"],"sourcesContent":["type HederaNetwork = 'mainnet' | 'testnet';\ntype LedgerNetworkKind = 'hedera' | 'evm';\n\nexport interface CanonicalLedgerNetwork {\n canonical: string;\n kind: LedgerNetworkKind;\n hederaNetwork?: HederaNetwork;\n chainId?: number;\n legacyName?: string;\n}\n\nconst normalise = (value: string): string => value.trim().toLowerCase();\n\nconst HEDERA_NETWORK_ALIASES = new Map<\n string,\n { canonical: `hedera:${HederaNetwork}`; hederaNetwork: HederaNetwork }\n>([\n ['hedera:mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['hedera-mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['hedera_mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['hedera:testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n ['testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n ['hedera-testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n ['hedera_testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n]);\n\nconst EVM_NETWORK_CHAIN_IDS: Record<string, number> = {\n abstract: 2741,\n 'abstract-testnet': 11124,\n base: 8453,\n 'base-sepolia': 84532,\n avalanche: 43114,\n 'avalanche-fuji': 43113,\n iotex: 4689,\n sei: 1329,\n 'sei-testnet': 1328,\n polygon: 137,\n 'polygon-amoy': 80002,\n peaq: 3338,\n};\n\nconst CHAIN_ID_TO_ALIAS = new Map<number, string>(\n Object.entries(EVM_NETWORK_CHAIN_IDS).map(([alias, id]) => [id, alias]),\n);\n\nconst parseChainId = (value: string): number | undefined => {\n if (/^eip155:\\d+$/i.test(value)) {\n return Number.parseInt(value.split(':')[1]!, 10);\n }\n if (/^\\d+$/.test(value)) {\n return Number.parseInt(value, 10);\n }\n return undefined;\n};\n\nconst normaliseEvmNetwork = (value: string): CanonicalLedgerNetwork => {\n const trimmed = normalise(value);\n let chainId = parseChainId(trimmed);\n let alias: string | undefined;\n\n if (chainId === undefined) {\n const mapped = EVM_NETWORK_CHAIN_IDS[trimmed];\n if (mapped !== undefined) {\n chainId = mapped;\n alias = trimmed;\n }\n } else if (CHAIN_ID_TO_ALIAS.has(chainId)) {\n alias = CHAIN_ID_TO_ALIAS.get(chainId);\n }\n\n if (chainId === undefined) {\n throw new Error(\n 'Unsupported EVM ledger network. Provide an alias like \"base-sepolia\" or a canonical eip155:<chainId> string.',\n );\n }\n\n return {\n canonical: `eip155:${chainId}`,\n kind: 'evm',\n chainId,\n legacyName: alias,\n };\n};\n\nconst normaliseHederaNetwork = (value: string): CanonicalLedgerNetwork => {\n const trimmed = normalise(value);\n const mapping = HEDERA_NETWORK_ALIASES.get(trimmed);\n if (!mapping) {\n throw new Error(\n 'Unsupported Hedera network. Use hedera:mainnet or hedera:testnet (legacy \"mainnet\"/\"testnet\" also accepted).',\n );\n }\n return {\n canonical: mapping.canonical,\n kind: 'hedera',\n hederaNetwork: mapping.hederaNetwork,\n };\n};\n\nexport const canonicalizeLedgerNetwork = (\n network: string,\n): CanonicalLedgerNetwork => {\n if (typeof network !== 'string' || network.trim().length === 0) {\n throw new Error('Ledger network is required.');\n }\n const trimmed = normalise(network);\n if (\n trimmed.startsWith('hedera:') ||\n trimmed.includes('hedera-') ||\n trimmed.includes('hedera_') ||\n trimmed === 'mainnet' ||\n trimmed === 'testnet'\n ) {\n return normaliseHederaNetwork(trimmed);\n }\n return normaliseEvmNetwork(trimmed);\n};\n"],"names":[],"mappings":"AAWA,MAAM,YAAY,CAAC,UAA0B,MAAM,KAAA,EAAO,YAAA;AAE1D,MAAM,6CAA6B,IAGjC;AAAA,EACA,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,WAAW,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EACrE,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,WAAW,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EACrE,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAC9E,CAAC;AAED,MAAM,wBAAgD;AAAA,EACpD,UAAU;AAAA,EACV,oBAAoB;AAAA,EACpB,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,OAAO;AAAA,EACP,KAAK;AAAA,EACL,eAAe;AAAA,EACf,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,MAAM;AACR;AAEA,MAAM,oBAAoB,IAAI;AAAA,EAC5B,OAAO,QAAQ,qBAAqB,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC;AACxE;AAEA,MAAM,eAAe,CAAC,UAAsC;AAC1D,MAAI,gBAAgB,KAAK,KAAK,GAAG;AAC/B,WAAO,OAAO,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,GAAI,EAAE;AAAA,EACjD;AACA,MAAI,QAAQ,KAAK,KAAK,GAAG;AACvB,WAAO,OAAO,SAAS,OAAO,EAAE;AAAA,EAClC;AACA,SAAO;AACT;AAEA,MAAM,sBAAsB,CAAC,UAA0C;AACrE,QAAM,UAAU,UAAU,KAAK;AAC/B,MAAI,UAAU,aAAa,OAAO;AAClC,MAAI;AAEJ,MAAI,YAAY,QAAW;AACzB,UAAM,SAAS,sBAAsB,OAAO;AAC5C,QAAI,WAAW,QAAW;AACxB,gBAAU;AACV,cAAQ;AAAA,IACV;AAAA,EACF,WAAW,kBAAkB,IAAI,OAAO,GAAG;AACzC,YAAQ,kBAAkB,IAAI,OAAO;AAAA,EACvC;AAEA,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,SAAO;AAAA,IACL,WAAW,UAAU,OAAO;AAAA,IAC5B,MAAM;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EAAA;AAEhB;AAEA,MAAM,yBAAyB,CAAC,UAA0C;AACxE,QAAM,UAAU,UAAU,KAAK;AAC/B,QAAM,UAAU,uBAAuB,IAAI,OAAO;AAClD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AACA,SAAO;AAAA,IACL,WAAW,QAAQ;AAAA,IACnB,MAAM;AAAA,IACN,eAAe,QAAQ;AAAA,EAAA;AAE3B;AAEO,MAAM,4BAA4B,CACvC,YAC2B;AAC3B,MAAI,OAAO,YAAY,YAAY,QAAQ,KAAA,EAAO,WAAW,GAAG;AAC9D,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACA,QAAM,UAAU,UAAU,OAAO;AACjC,MACE,QAAQ,WAAW,SAAS,KAC5B,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,SAAS,KAC1B,YAAY,aACZ,YAAY,WACZ;AACA,WAAO,uBAAuB,OAAO;AAAA,EACvC;AACA,SAAO,oBAAoB,OAAO;AACpC;"}
1
+ {"version":3,"file":"standards-sdk.es147.js","sources":["../../src/services/registry-broker/client/agents.ts"],"sourcesContent":["import type {\n AgentRegistrationRequest,\n DashboardStatsResponse,\n JsonValue,\n RegisterAgentOptions,\n RegisterAgentQuoteResponse,\n RegisterAgentResponse,\n RegistrationProgressRecord,\n RegistrationProgressWaitOptions,\n ResolvedAgentResponse,\n UaidConnectionStatus,\n UaidValidationResponse,\n} from '../types';\nimport {\n dashboardStatsResponseSchema,\n registerAgentResponseSchema,\n registrationProgressResponseSchema,\n registrationQuoteResponseSchema,\n resolveResponseSchema,\n uaidConnectionStatusSchema,\n uaidValidationResponseSchema,\n} from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\nimport { purchaseCreditsWithHbar } from './credits';\nimport {\n createAbortError,\n DEFAULT_PROGRESS_INTERVAL_MS,\n DEFAULT_PROGRESS_TIMEOUT_MS,\n MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS,\n serialiseAgentRegistrationRequest,\n} from './utils';\nimport { RegistryBrokerError } from './errors';\n\nasync function performRegisterAgent(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentResponse> {\n const raw = await client.requestJson<JsonValue>('/register', {\n method: 'POST',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n });\n return client.parseWithSchema(\n raw,\n registerAgentResponseSchema,\n 'register agent response',\n );\n}\n\nfunction calculateHbarAmount(\n creditsToPurchase: number,\n creditsPerHbar: number,\n): number {\n if (creditsPerHbar <= 0) {\n throw new Error('creditsPerHbar must be positive');\n }\n if (creditsToPurchase <= 0) {\n throw new Error('creditsToPurchase must be positive');\n }\n const rawHbar = creditsToPurchase / creditsPerHbar;\n const tinybars = Math.ceil(rawHbar * 1e8);\n return tinybars / 1e8;\n}\n\nfunction resolveCreditsToPurchase(shortfallCredits: number): number {\n if (!Number.isFinite(shortfallCredits) || shortfallCredits <= 0) {\n return 0;\n }\n return Math.max(\n Math.ceil(shortfallCredits),\n MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS,\n );\n}\n\nasync function ensureCreditsForRegistration(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n autoTopUp: RegisterAgentOptions['autoTopUp'],\n): Promise<void> {\n const details = autoTopUp ?? null;\n if (!details) {\n return;\n }\n\n if (!details.accountId || !details.accountId.trim()) {\n throw new Error('autoTopUp.accountId is required');\n }\n\n if (!details.privateKey || !details.privateKey.trim()) {\n throw new Error('autoTopUp.privateKey is required');\n }\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n const quote = await getRegistrationQuote(client, payload);\n const shortfall = quote.shortfallCredits ?? 0;\n if (shortfall <= 0) {\n return;\n }\n const creditsToPurchase = resolveCreditsToPurchase(shortfall);\n if (creditsToPurchase <= 0) {\n return;\n }\n\n const creditsPerHbar = quote.creditsPerHbar ?? null;\n if (!creditsPerHbar || creditsPerHbar <= 0) {\n throw new Error('Unable to determine credits per HBAR for auto top-up');\n }\n\n const hbarAmount = calculateHbarAmount(creditsToPurchase, creditsPerHbar);\n\n await purchaseCreditsWithHbar(client, {\n accountId: details.accountId.trim(),\n privateKey: details.privateKey.trim(),\n hbarAmount,\n memo: details.memo ?? 'Registry Broker auto top-up',\n metadata: {\n shortfallCredits: shortfall,\n requiredCredits: quote.requiredCredits,\n purchasedCredits: creditsToPurchase,\n },\n });\n }\n\n const finalQuote = await getRegistrationQuote(client, payload);\n if ((finalQuote.shortfallCredits ?? 0) > 0) {\n throw new Error('Unable to purchase sufficient credits for registration');\n }\n}\n\nexport async function resolveUaid(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<ResolvedAgentResponse> {\n const raw = await client.requestJson<JsonValue>(\n `/resolve/${encodeURIComponent(uaid)}`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n resolveResponseSchema,\n 'resolve UAID response',\n );\n}\n\nexport async function registerAgent(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n options?: RegisterAgentOptions,\n): Promise<RegisterAgentResponse> {\n const autoTopUp = options?.autoTopUp ?? client.registrationAutoTopUp;\n\n if (!autoTopUp) {\n return performRegisterAgent(client, payload);\n }\n\n await ensureCreditsForRegistration(client, payload, autoTopUp);\n\n let retried = false;\n while (true) {\n try {\n return await performRegisterAgent(client, payload);\n } catch (error) {\n const shortfall = client.extractInsufficientCreditsDetails(error);\n if (shortfall && !retried) {\n await ensureCreditsForRegistration(client, payload, autoTopUp);\n retried = true;\n continue;\n }\n throw error;\n }\n }\n}\n\nexport async function getRegistrationQuote(\n client: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentQuoteResponse> {\n const raw = await client.requestJson<JsonValue>('/register/quote', {\n method: 'POST',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n });\n\n return client.parseWithSchema(\n raw,\n registrationQuoteResponseSchema,\n 'registration quote response',\n );\n}\n\nexport async function updateAgent(\n client: RegistryBrokerClient,\n uaid: string,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentResponse> {\n const raw = await client.requestJson<JsonValue>(\n `/register/${encodeURIComponent(uaid)}`,\n {\n method: 'PUT',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n },\n );\n\n return client.parseWithSchema(\n raw,\n registerAgentResponseSchema,\n 'update agent response',\n );\n}\n\nexport async function getRegistrationProgress(\n client: RegistryBrokerClient,\n attemptId: string,\n): Promise<RegistrationProgressRecord | null> {\n const normalisedAttemptId = attemptId.trim();\n if (!normalisedAttemptId) {\n throw new Error('attemptId is required');\n }\n\n try {\n const raw = await client.requestJson<JsonValue>(\n `/register/progress/${encodeURIComponent(normalisedAttemptId)}`,\n { method: 'GET' },\n );\n\n const parsed = client.parseWithSchema(\n raw,\n registrationProgressResponseSchema,\n 'registration progress response',\n );\n\n return parsed.progress;\n } catch (error) {\n if (error instanceof RegistryBrokerError && error.status === 404) {\n return null;\n }\n throw error;\n }\n}\n\nexport async function waitForRegistrationCompletion(\n client: RegistryBrokerClient,\n attemptId: string,\n options: RegistrationProgressWaitOptions = {},\n): Promise<RegistrationProgressRecord> {\n const normalisedAttemptId = attemptId.trim();\n if (!normalisedAttemptId) {\n throw new Error('attemptId is required');\n }\n\n const interval = Math.max(\n 250,\n options.intervalMs ?? DEFAULT_PROGRESS_INTERVAL_MS,\n );\n const timeoutMs = options.timeoutMs ?? DEFAULT_PROGRESS_TIMEOUT_MS;\n const throwOnFailure = options.throwOnFailure ?? true;\n const signal = options.signal;\n const startedAt = Date.now();\n\n while (true) {\n if (signal?.aborted) {\n throw createAbortError();\n }\n\n const progress = await client.getRegistrationProgress(normalisedAttemptId);\n\n if (progress) {\n options.onProgress?.(progress);\n\n if (progress.status === 'completed') {\n return progress;\n }\n\n if (progress.status === 'partial' || progress.status === 'failed') {\n if (throwOnFailure) {\n throw new RegistryBrokerError(\n 'Registration did not complete successfully',\n {\n status: 409,\n statusText: progress.status,\n body: progress,\n },\n );\n }\n return progress;\n }\n }\n\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(\n `Registration progress polling timed out after ${timeoutMs}ms`,\n );\n }\n\n await client.delay(interval, signal);\n }\n}\n\nexport async function validateUaid(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<UaidValidationResponse> {\n const raw = await client.requestJson<JsonValue>(\n `/uaids/validate/${encodeURIComponent(uaid)}`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n uaidValidationResponseSchema,\n 'UAID validation response',\n );\n}\n\nexport async function getUaidConnectionStatus(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<UaidConnectionStatus> {\n const raw = await client.requestJson<JsonValue>(\n `/uaids/connections/${encodeURIComponent(uaid)}/status`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n uaidConnectionStatusSchema,\n 'UAID connection status',\n );\n}\n\nexport async function closeUaidConnection(\n client: RegistryBrokerClient,\n uaid: string,\n): Promise<void> {\n await client.request(`/uaids/connections/${encodeURIComponent(uaid)}`, {\n method: 'DELETE',\n });\n}\n\nexport async function dashboardStats(\n client: RegistryBrokerClient,\n): Promise<DashboardStatsResponse> {\n const raw = await client.requestJson<JsonValue>('/dashboard/stats', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n dashboardStatsResponseSchema,\n 'dashboard stats response',\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,84 +1,90 @@
1
- import { optionalImportSync, optionalImport } from "./standards-sdk.es164.js";
2
- const unsupported = (method) => new Error(`${method} is not supported by the in-memory signer`);
3
- let cachedSdk = null;
4
- const loadHashgraphSdk = () => {
5
- if (cachedSdk) {
6
- return cachedSdk;
1
+ const normalise = (value) => value.trim().toLowerCase();
2
+ const HEDERA_NETWORK_ALIASES = /* @__PURE__ */ new Map([
3
+ ["hedera:mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
4
+ ["mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
5
+ ["hedera-mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
6
+ ["hedera_mainnet", { canonical: "hedera:mainnet", hederaNetwork: "mainnet" }],
7
+ ["hedera:testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }],
8
+ ["testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }],
9
+ ["hedera-testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }],
10
+ ["hedera_testnet", { canonical: "hedera:testnet", hederaNetwork: "testnet" }]
11
+ ]);
12
+ const EVM_NETWORK_CHAIN_IDS = {
13
+ abstract: 2741,
14
+ "abstract-testnet": 11124,
15
+ base: 8453,
16
+ "base-sepolia": 84532,
17
+ avalanche: 43114,
18
+ "avalanche-fuji": 43113,
19
+ iotex: 4689,
20
+ sei: 1329,
21
+ "sei-testnet": 1328,
22
+ polygon: 137,
23
+ "polygon-amoy": 80002,
24
+ peaq: 3338
25
+ };
26
+ const CHAIN_ID_TO_ALIAS = new Map(
27
+ Object.entries(EVM_NETWORK_CHAIN_IDS).map(([alias, id]) => [id, alias])
28
+ );
29
+ const parseChainId = (value) => {
30
+ if (/^eip155:\d+$/i.test(value)) {
31
+ return Number.parseInt(value.split(":")[1], 10);
7
32
  }
8
- const resolved = optionalImportSync("@hashgraph/sdk");
9
- if (resolved) {
10
- cachedSdk = resolved;
11
- return resolved;
33
+ if (/^\d+$/.test(value)) {
34
+ return Number.parseInt(value, 10);
12
35
  }
13
- const message = "@hashgraph/sdk is required for ledger signing. Install it as a dependency to enable createPrivateKeySigner.";
14
- throw new Error(message);
36
+ return void 0;
15
37
  };
16
- const loadHashgraphSdkAsync = async () => {
17
- if (cachedSdk) {
18
- return cachedSdk;
38
+ const normaliseEvmNetwork = (value) => {
39
+ const trimmed = normalise(value);
40
+ let chainId = parseChainId(trimmed);
41
+ let alias;
42
+ if (chainId === void 0) {
43
+ const mapped = EVM_NETWORK_CHAIN_IDS[trimmed];
44
+ if (mapped !== void 0) {
45
+ chainId = mapped;
46
+ alias = trimmed;
47
+ }
48
+ } else if (CHAIN_ID_TO_ALIAS.has(chainId)) {
49
+ alias = CHAIN_ID_TO_ALIAS.get(chainId);
19
50
  }
20
- const resolved = await optionalImport("@hashgraph/sdk");
21
- if (resolved) {
22
- cachedSdk = resolved;
23
- return resolved;
51
+ if (chainId === void 0) {
52
+ throw new Error(
53
+ 'Unsupported EVM ledger network. Provide an alias like "base-sepolia" or a canonical eip155:<chainId> string.'
54
+ );
24
55
  }
25
- const message = "@hashgraph/sdk is required for ledger signing. Install it as a dependency to enable createPrivateKeySigner.";
26
- throw new Error(message);
56
+ return {
57
+ canonical: `eip155:${chainId}`,
58
+ kind: "evm",
59
+ chainId,
60
+ legacyName: alias
61
+ };
27
62
  };
28
- const buildSigner = (sdk, options) => {
29
- const { AccountId, LedgerId, PrivateKey, SignerSignature } = sdk;
30
- if (!options.privateKey) {
31
- throw new Error("privateKey is required to create a ledger signer.");
32
- }
33
- if (!options.accountId) {
34
- throw new Error("accountId is required to create a ledger signer.");
63
+ const normaliseHederaNetwork = (value) => {
64
+ const trimmed = normalise(value);
65
+ const mapping = HEDERA_NETWORK_ALIASES.get(trimmed);
66
+ if (!mapping) {
67
+ throw new Error(
68
+ 'Unsupported Hedera network. Use hedera:mainnet or hedera:testnet (legacy "mainnet"/"testnet" also accepted).'
69
+ );
35
70
  }
36
- const accountId = AccountId.fromString(options.accountId);
37
- const privateKey = PrivateKey.fromString(options.privateKey);
38
- const ledgerId = LedgerId.fromString(options.network);
39
71
  return {
40
- getLedgerId: () => ledgerId,
41
- getAccountId: () => accountId,
42
- getAccountKey: () => privateKey.publicKey,
43
- getNetwork: () => ({}),
44
- getMirrorNetwork: () => [],
45
- sign: async (messages) => Promise.all(
46
- messages.map(async (message) => {
47
- const signature = await privateKey.sign(message);
48
- return new SignerSignature({
49
- publicKey: privateKey.publicKey,
50
- signature,
51
- accountId
52
- });
53
- })
54
- ),
55
- getAccountBalance: async () => {
56
- throw unsupported("getAccountBalance");
57
- },
58
- getAccountInfo: async () => {
59
- throw unsupported("getAccountInfo");
60
- },
61
- getAccountRecords: async () => {
62
- throw unsupported("getAccountRecords");
63
- },
64
- signTransaction: async (_) => {
65
- throw unsupported("signTransaction");
66
- },
67
- checkTransaction: async (_) => {
68
- throw unsupported("checkTransaction");
69
- },
70
- populateTransaction: async (_) => {
71
- throw unsupported("populateTransaction");
72
- },
73
- call: async (_request) => {
74
- throw unsupported("call");
75
- }
72
+ canonical: mapping.canonical,
73
+ kind: "hedera",
74
+ hederaNetwork: mapping.hederaNetwork
76
75
  };
77
76
  };
78
- const createPrivateKeySigner = (options) => buildSigner(loadHashgraphSdk(), options);
79
- const createPrivateKeySignerAsync = async (options) => buildSigner(await loadHashgraphSdkAsync(), options);
77
+ const canonicalizeLedgerNetwork = (network) => {
78
+ if (typeof network !== "string" || network.trim().length === 0) {
79
+ throw new Error("Ledger network is required.");
80
+ }
81
+ const trimmed = normalise(network);
82
+ if (trimmed.startsWith("hedera:") || trimmed.includes("hedera-") || trimmed.includes("hedera_") || trimmed === "mainnet" || trimmed === "testnet") {
83
+ return normaliseHederaNetwork(trimmed);
84
+ }
85
+ return normaliseEvmNetwork(trimmed);
86
+ };
80
87
  export {
81
- createPrivateKeySigner,
82
- createPrivateKeySignerAsync
88
+ canonicalizeLedgerNetwork
83
89
  };
84
90
  //# sourceMappingURL=standards-sdk.es148.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es148.js","sources":["../../src/services/registry-broker/private-key-signer.ts"],"sourcesContent":["import type {\n Signer,\n AccountBalance,\n AccountInfo,\n Transaction,\n TransactionRecord,\n SignerSignature,\n} from '@hashgraph/sdk';\nimport { optionalImport, optionalImportSync } from '../../utils/dynamic-import';\n\nconst unsupported = (method: string): Error =>\n new Error(`${method} is not supported by the in-memory signer`);\n\nexport interface PrivateKeySignerOptions {\n accountId: string;\n privateKey: string;\n network: 'mainnet' | 'testnet';\n}\n\ntype HashgraphSdk = typeof import('@hashgraph/sdk');\n\nlet cachedSdk: HashgraphSdk | null = null;\n\nconst loadHashgraphSdk = (): HashgraphSdk => {\n if (cachedSdk) {\n return cachedSdk;\n }\n const resolved = optionalImportSync<HashgraphSdk>('@hashgraph/sdk');\n if (resolved) {\n cachedSdk = resolved;\n return resolved;\n }\n\n const message =\n '@hashgraph/sdk is required for ledger signing. Install it as a dependency to enable createPrivateKeySigner.';\n throw new Error(message);\n};\n\nconst loadHashgraphSdkAsync = async (): Promise<HashgraphSdk> => {\n if (cachedSdk) {\n return cachedSdk;\n }\n const resolved = await optionalImport<HashgraphSdk>('@hashgraph/sdk');\n if (resolved) {\n cachedSdk = resolved;\n return resolved;\n }\n const message =\n '@hashgraph/sdk is required for ledger signing. Install it as a dependency to enable createPrivateKeySigner.';\n throw new Error(message);\n};\n\nconst buildSigner = (\n sdk: HashgraphSdk,\n options: PrivateKeySignerOptions,\n): Signer => {\n const { AccountId, LedgerId, PrivateKey, SignerSignature } = sdk;\n if (!options.privateKey) {\n throw new Error('privateKey is required to create a ledger signer.');\n }\n if (!options.accountId) {\n throw new Error('accountId is required to create a ledger signer.');\n }\n const accountId = AccountId.fromString(options.accountId);\n const privateKey = PrivateKey.fromString(options.privateKey);\n const ledgerId = LedgerId.fromString(options.network);\n\n return {\n getLedgerId: () => ledgerId,\n getAccountId: () => accountId,\n getAccountKey: () => privateKey.publicKey,\n getNetwork: () => ({}),\n getMirrorNetwork: () => [],\n sign: async (messages: Uint8Array[]): Promise<SignerSignature[]> =>\n Promise.all(\n messages.map(async message => {\n const signature = await privateKey.sign(message);\n return new SignerSignature({\n publicKey: privateKey.publicKey,\n signature,\n accountId,\n });\n }),\n ),\n getAccountBalance: async (): Promise<AccountBalance> => {\n throw unsupported('getAccountBalance');\n },\n getAccountInfo: async (): Promise<AccountInfo> => {\n throw unsupported('getAccountInfo');\n },\n getAccountRecords: async (): Promise<TransactionRecord[]> => {\n throw unsupported('getAccountRecords');\n },\n signTransaction: async <T extends Transaction>(_: T): Promise<T> => {\n throw unsupported('signTransaction');\n },\n checkTransaction: async <T extends Transaction>(_: T): Promise<T> => {\n throw unsupported('checkTransaction');\n },\n populateTransaction: async <T extends Transaction>(_: T): Promise<T> => {\n throw unsupported('populateTransaction');\n },\n call: async <RequestT, ResponseT, OutputT>(\n _request: unknown,\n ): Promise<OutputT> => {\n throw unsupported('call');\n },\n };\n};\n\nexport const createPrivateKeySigner = (\n options: PrivateKeySignerOptions,\n): Signer => buildSigner(loadHashgraphSdk(), options);\n\nexport const createPrivateKeySignerAsync = async (\n options: PrivateKeySignerOptions,\n): Promise<Signer> => buildSigner(await loadHashgraphSdkAsync(), options);\n"],"names":[],"mappings":";AAUA,MAAM,cAAc,CAAC,WACnB,IAAI,MAAM,GAAG,MAAM,2CAA2C;AAUhE,IAAI,YAAiC;AAErC,MAAM,mBAAmB,MAAoB;AAC3C,MAAI,WAAW;AACb,WAAO;AAAA,EACT;AACA,QAAM,WAAW,mBAAiC,gBAAgB;AAClE,MAAI,UAAU;AACZ,gBAAY;AACZ,WAAO;AAAA,EACT;AAEA,QAAM,UACJ;AACF,QAAM,IAAI,MAAM,OAAO;AACzB;AAEA,MAAM,wBAAwB,YAAmC;AAC/D,MAAI,WAAW;AACb,WAAO;AAAA,EACT;AACA,QAAM,WAAW,MAAM,eAA6B,gBAAgB;AACpE,MAAI,UAAU;AACZ,gBAAY;AACZ,WAAO;AAAA,EACT;AACA,QAAM,UACJ;AACF,QAAM,IAAI,MAAM,OAAO;AACzB;AAEA,MAAM,cAAc,CAClB,KACA,YACW;AACX,QAAM,EAAE,WAAW,UAAU,YAAY,oBAAoB;AAC7D,MAAI,CAAC,QAAQ,YAAY;AACvB,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,MAAI,CAAC,QAAQ,WAAW;AACtB,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AACA,QAAM,YAAY,UAAU,WAAW,QAAQ,SAAS;AACxD,QAAM,aAAa,WAAW,WAAW,QAAQ,UAAU;AAC3D,QAAM,WAAW,SAAS,WAAW,QAAQ,OAAO;AAEpD,SAAO;AAAA,IACL,aAAa,MAAM;AAAA,IACnB,cAAc,MAAM;AAAA,IACpB,eAAe,MAAM,WAAW;AAAA,IAChC,YAAY,OAAO,CAAA;AAAA,IACnB,kBAAkB,MAAM,CAAA;AAAA,IACxB,MAAM,OAAO,aACX,QAAQ;AAAA,MACN,SAAS,IAAI,OAAM,YAAW;AAC5B,cAAM,YAAY,MAAM,WAAW,KAAK,OAAO;AAC/C,eAAO,IAAI,gBAAgB;AAAA,UACzB,WAAW,WAAW;AAAA,UACtB;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MACH,CAAC;AAAA,IAAA;AAAA,IAEL,mBAAmB,YAAqC;AACtD,YAAM,YAAY,mBAAmB;AAAA,IACvC;AAAA,IACA,gBAAgB,YAAkC;AAChD,YAAM,YAAY,gBAAgB;AAAA,IACpC;AAAA,IACA,mBAAmB,YAA0C;AAC3D,YAAM,YAAY,mBAAmB;AAAA,IACvC;AAAA,IACA,iBAAiB,OAA8B,MAAqB;AAClE,YAAM,YAAY,iBAAiB;AAAA,IACrC;AAAA,IACA,kBAAkB,OAA8B,MAAqB;AACnE,YAAM,YAAY,kBAAkB;AAAA,IACtC;AAAA,IACA,qBAAqB,OAA8B,MAAqB;AACtE,YAAM,YAAY,qBAAqB;AAAA,IACzC;AAAA,IACA,MAAM,OACJ,aACqB;AACrB,YAAM,YAAY,MAAM;AAAA,IAC1B;AAAA,EAAA;AAEJ;AAEO,MAAM,yBAAyB,CACpC,YACW,YAAY,iBAAA,GAAoB,OAAO;AAE7C,MAAM,8BAA8B,OACzC,YACoB,YAAY,MAAM,sBAAA,GAAyB,OAAO;"}
1
+ {"version":3,"file":"standards-sdk.es148.js","sources":["../../src/services/registry-broker/ledger-network.ts"],"sourcesContent":["type HederaNetwork = 'mainnet' | 'testnet';\ntype LedgerNetworkKind = 'hedera' | 'evm';\n\nexport interface CanonicalLedgerNetwork {\n canonical: string;\n kind: LedgerNetworkKind;\n hederaNetwork?: HederaNetwork;\n chainId?: number;\n legacyName?: string;\n}\n\nconst normalise = (value: string): string => value.trim().toLowerCase();\n\nconst HEDERA_NETWORK_ALIASES = new Map<\n string,\n { canonical: `hedera:${HederaNetwork}`; hederaNetwork: HederaNetwork }\n>([\n ['hedera:mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['hedera-mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['hedera_mainnet', { canonical: 'hedera:mainnet', hederaNetwork: 'mainnet' }],\n ['hedera:testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n ['testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n ['hedera-testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n ['hedera_testnet', { canonical: 'hedera:testnet', hederaNetwork: 'testnet' }],\n]);\n\nconst EVM_NETWORK_CHAIN_IDS: Record<string, number> = {\n abstract: 2741,\n 'abstract-testnet': 11124,\n base: 8453,\n 'base-sepolia': 84532,\n avalanche: 43114,\n 'avalanche-fuji': 43113,\n iotex: 4689,\n sei: 1329,\n 'sei-testnet': 1328,\n polygon: 137,\n 'polygon-amoy': 80002,\n peaq: 3338,\n};\n\nconst CHAIN_ID_TO_ALIAS = new Map<number, string>(\n Object.entries(EVM_NETWORK_CHAIN_IDS).map(([alias, id]) => [id, alias]),\n);\n\nconst parseChainId = (value: string): number | undefined => {\n if (/^eip155:\\d+$/i.test(value)) {\n return Number.parseInt(value.split(':')[1]!, 10);\n }\n if (/^\\d+$/.test(value)) {\n return Number.parseInt(value, 10);\n }\n return undefined;\n};\n\nconst normaliseEvmNetwork = (value: string): CanonicalLedgerNetwork => {\n const trimmed = normalise(value);\n let chainId = parseChainId(trimmed);\n let alias: string | undefined;\n\n if (chainId === undefined) {\n const mapped = EVM_NETWORK_CHAIN_IDS[trimmed];\n if (mapped !== undefined) {\n chainId = mapped;\n alias = trimmed;\n }\n } else if (CHAIN_ID_TO_ALIAS.has(chainId)) {\n alias = CHAIN_ID_TO_ALIAS.get(chainId);\n }\n\n if (chainId === undefined) {\n throw new Error(\n 'Unsupported EVM ledger network. Provide an alias like \"base-sepolia\" or a canonical eip155:<chainId> string.',\n );\n }\n\n return {\n canonical: `eip155:${chainId}`,\n kind: 'evm',\n chainId,\n legacyName: alias,\n };\n};\n\nconst normaliseHederaNetwork = (value: string): CanonicalLedgerNetwork => {\n const trimmed = normalise(value);\n const mapping = HEDERA_NETWORK_ALIASES.get(trimmed);\n if (!mapping) {\n throw new Error(\n 'Unsupported Hedera network. Use hedera:mainnet or hedera:testnet (legacy \"mainnet\"/\"testnet\" also accepted).',\n );\n }\n return {\n canonical: mapping.canonical,\n kind: 'hedera',\n hederaNetwork: mapping.hederaNetwork,\n };\n};\n\nexport const canonicalizeLedgerNetwork = (\n network: string,\n): CanonicalLedgerNetwork => {\n if (typeof network !== 'string' || network.trim().length === 0) {\n throw new Error('Ledger network is required.');\n }\n const trimmed = normalise(network);\n if (\n trimmed.startsWith('hedera:') ||\n trimmed.includes('hedera-') ||\n trimmed.includes('hedera_') ||\n trimmed === 'mainnet' ||\n trimmed === 'testnet'\n ) {\n return normaliseHederaNetwork(trimmed);\n }\n return normaliseEvmNetwork(trimmed);\n};\n"],"names":[],"mappings":"AAWA,MAAM,YAAY,CAAC,UAA0B,MAAM,KAAA,EAAO,YAAA;AAE1D,MAAM,6CAA6B,IAGjC;AAAA,EACA,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,WAAW,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EACrE,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,WAAW,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EACrE,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAAA,EAC5E,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,eAAe,WAAW;AAC9E,CAAC;AAED,MAAM,wBAAgD;AAAA,EACpD,UAAU;AAAA,EACV,oBAAoB;AAAA,EACpB,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,OAAO;AAAA,EACP,KAAK;AAAA,EACL,eAAe;AAAA,EACf,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,MAAM;AACR;AAEA,MAAM,oBAAoB,IAAI;AAAA,EAC5B,OAAO,QAAQ,qBAAqB,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC;AACxE;AAEA,MAAM,eAAe,CAAC,UAAsC;AAC1D,MAAI,gBAAgB,KAAK,KAAK,GAAG;AAC/B,WAAO,OAAO,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,GAAI,EAAE;AAAA,EACjD;AACA,MAAI,QAAQ,KAAK,KAAK,GAAG;AACvB,WAAO,OAAO,SAAS,OAAO,EAAE;AAAA,EAClC;AACA,SAAO;AACT;AAEA,MAAM,sBAAsB,CAAC,UAA0C;AACrE,QAAM,UAAU,UAAU,KAAK;AAC/B,MAAI,UAAU,aAAa,OAAO;AAClC,MAAI;AAEJ,MAAI,YAAY,QAAW;AACzB,UAAM,SAAS,sBAAsB,OAAO;AAC5C,QAAI,WAAW,QAAW;AACxB,gBAAU;AACV,cAAQ;AAAA,IACV;AAAA,EACF,WAAW,kBAAkB,IAAI,OAAO,GAAG;AACzC,YAAQ,kBAAkB,IAAI,OAAO;AAAA,EACvC;AAEA,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,SAAO;AAAA,IACL,WAAW,UAAU,OAAO;AAAA,IAC5B,MAAM;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EAAA;AAEhB;AAEA,MAAM,yBAAyB,CAAC,UAA0C;AACxE,QAAM,UAAU,UAAU,KAAK;AAC/B,QAAM,UAAU,uBAAuB,IAAI,OAAO;AAClD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AACA,SAAO;AAAA,IACL,WAAW,QAAQ;AAAA,IACnB,MAAM;AAAA,IACN,eAAe,QAAQ;AAAA,EAAA;AAE3B;AAEO,MAAM,4BAA4B,CACvC,YAC2B;AAC3B,MAAI,OAAO,YAAY,YAAY,QAAQ,KAAA,EAAO,WAAW,GAAG;AAC9D,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACA,QAAM,UAAU,UAAU,OAAO;AACjC,MACE,QAAQ,WAAW,SAAS,KAC5B,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,SAAS,KAC1B,YAAY,aACZ,YAAY,WACZ;AACA,WAAO,uBAAuB,OAAO;AAAA,EACvC;AACA,SAAO,oBAAoB,OAAO;AACpC;"}