@hashgraphonline/standards-sdk 0.1.146-chore-jsr-improvements.canary.01d3174.92 → 0.1.146-chore-jsr-improvements.canary.9940b30.94

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 (165) hide show
  1. package/dist/cjs/services/registry-broker/client/adapters.d.ts +4 -19
  2. package/dist/cjs/services/registry-broker/client/adapters.d.ts.map +1 -1
  3. package/dist/cjs/services/registry-broker/client/agents.d.ts +4 -15
  4. package/dist/cjs/services/registry-broker/client/agents.d.ts.map +1 -1
  5. package/dist/cjs/services/registry-broker/client/base-client.d.ts +51 -1
  6. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  7. package/dist/cjs/services/registry-broker/client/chat-history.d.ts +4 -22
  8. package/dist/cjs/services/registry-broker/client/chat-history.d.ts.map +1 -1
  9. package/dist/cjs/services/registry-broker/client/chat.d.ts +4 -32
  10. package/dist/cjs/services/registry-broker/client/chat.d.ts.map +1 -1
  11. package/dist/cjs/services/registry-broker/client/credits.d.ts +4 -39
  12. package/dist/cjs/services/registry-broker/client/credits.d.ts.map +1 -1
  13. package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts +4 -34
  14. package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -1
  15. package/dist/cjs/services/registry-broker/client/encryption.d.ts +4 -32
  16. package/dist/cjs/services/registry-broker/client/encryption.d.ts.map +1 -1
  17. package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts +4 -9
  18. package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts.map +1 -1
  19. package/dist/cjs/services/registry-broker/client.d.ts +4 -0
  20. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  21. package/dist/cjs/standards-sdk.cjs +3 -3
  22. package/dist/cjs/standards-sdk.cjs.map +1 -1
  23. package/dist/es/services/registry-broker/client/adapters.d.ts +4 -19
  24. package/dist/es/services/registry-broker/client/adapters.d.ts.map +1 -1
  25. package/dist/es/services/registry-broker/client/agents.d.ts +4 -15
  26. package/dist/es/services/registry-broker/client/agents.d.ts.map +1 -1
  27. package/dist/es/services/registry-broker/client/base-client.d.ts +51 -1
  28. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  29. package/dist/es/services/registry-broker/client/chat-history.d.ts +4 -22
  30. package/dist/es/services/registry-broker/client/chat-history.d.ts.map +1 -1
  31. package/dist/es/services/registry-broker/client/chat.d.ts +4 -32
  32. package/dist/es/services/registry-broker/client/chat.d.ts.map +1 -1
  33. package/dist/es/services/registry-broker/client/credits.d.ts +4 -39
  34. package/dist/es/services/registry-broker/client/credits.d.ts.map +1 -1
  35. package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts +4 -34
  36. package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -1
  37. package/dist/es/services/registry-broker/client/encryption.d.ts +4 -32
  38. package/dist/es/services/registry-broker/client/encryption.d.ts.map +1 -1
  39. package/dist/es/services/registry-broker/client/ledger-auth.d.ts +4 -9
  40. package/dist/es/services/registry-broker/client/ledger-auth.d.ts.map +1 -1
  41. package/dist/es/services/registry-broker/client.d.ts +4 -0
  42. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  43. package/dist/es/standards-sdk.es.js +9 -16
  44. package/dist/es/standards-sdk.es.js.map +1 -1
  45. package/dist/es/standards-sdk.es101.js +1 -1
  46. package/dist/es/standards-sdk.es103.js +1 -1
  47. package/dist/es/standards-sdk.es109.js +2 -9
  48. package/dist/es/standards-sdk.es109.js.map +1 -1
  49. package/dist/es/standards-sdk.es11.js +1 -1
  50. package/dist/es/standards-sdk.es110.js +5 -5
  51. package/dist/es/standards-sdk.es12.js +1 -1
  52. package/dist/es/standards-sdk.es120.js +1 -1
  53. package/dist/es/standards-sdk.es121.js +1 -1
  54. package/dist/es/standards-sdk.es122.js +5 -5
  55. package/dist/es/standards-sdk.es124.js +1 -1
  56. package/dist/es/standards-sdk.es125.js +1 -1
  57. package/dist/es/standards-sdk.es127.js +624 -155
  58. package/dist/es/standards-sdk.es127.js.map +1 -1
  59. package/dist/es/standards-sdk.es128.js +16 -103
  60. package/dist/es/standards-sdk.es128.js.map +1 -1
  61. package/dist/es/standards-sdk.es129.js +72 -112
  62. package/dist/es/standards-sdk.es129.js.map +1 -1
  63. package/dist/es/standards-sdk.es130.js +75 -235
  64. package/dist/es/standards-sdk.es130.js.map +1 -1
  65. package/dist/es/standards-sdk.es131.js +53 -173
  66. package/dist/es/standards-sdk.es131.js.map +1 -1
  67. package/dist/es/standards-sdk.es132.js +156 -119
  68. package/dist/es/standards-sdk.es132.js.map +1 -1
  69. package/dist/es/standards-sdk.es133.js +8 -327
  70. package/dist/es/standards-sdk.es133.js.map +1 -1
  71. package/dist/es/standards-sdk.es134.js +74 -613
  72. package/dist/es/standards-sdk.es134.js.map +1 -1
  73. package/dist/es/standards-sdk.es135.js +61 -13
  74. package/dist/es/standards-sdk.es135.js.map +1 -1
  75. package/dist/es/standards-sdk.es136.js +30 -81
  76. package/dist/es/standards-sdk.es136.js.map +1 -1
  77. package/dist/es/standards-sdk.es137.js +34 -87
  78. package/dist/es/standards-sdk.es137.js.map +1 -1
  79. package/dist/es/standards-sdk.es138.js +28 -60
  80. package/dist/es/standards-sdk.es138.js.map +1 -1
  81. package/dist/es/standards-sdk.es139.js +121 -142
  82. package/dist/es/standards-sdk.es139.js.map +1 -1
  83. package/dist/es/standards-sdk.es140.js +42 -7
  84. package/dist/es/standards-sdk.es140.js.map +1 -1
  85. package/dist/es/standards-sdk.es141.js +933 -86
  86. package/dist/es/standards-sdk.es141.js.map +1 -1
  87. package/dist/es/standards-sdk.es142.js +12267 -43
  88. package/dist/es/standards-sdk.es142.js.map +1 -1
  89. package/dist/es/standards-sdk.es143.js +17 -30
  90. package/dist/es/standards-sdk.es143.js.map +1 -1
  91. package/dist/es/standards-sdk.es144.js +56 -34
  92. package/dist/es/standards-sdk.es144.js.map +1 -1
  93. package/dist/es/standards-sdk.es145.js +84 -28
  94. package/dist/es/standards-sdk.es145.js.map +1 -1
  95. package/dist/es/standards-sdk.es146.js +152 -118
  96. package/dist/es/standards-sdk.es146.js.map +1 -1
  97. package/dist/es/standards-sdk.es147.js +314 -34
  98. package/dist/es/standards-sdk.es147.js.map +1 -1
  99. package/dist/es/standards-sdk.es148.js +342 -13
  100. package/dist/es/standards-sdk.es148.js.map +1 -1
  101. package/dist/es/standards-sdk.es149.js +395 -12231
  102. package/dist/es/standards-sdk.es149.js.map +1 -1
  103. package/dist/es/standards-sdk.es150.js +331 -959
  104. package/dist/es/standards-sdk.es150.js.map +1 -1
  105. package/dist/es/standards-sdk.es151.js +69 -49
  106. package/dist/es/standards-sdk.es151.js.map +1 -1
  107. package/dist/es/standards-sdk.es152.js +121 -66
  108. package/dist/es/standards-sdk.es152.js.map +1 -1
  109. package/dist/es/standards-sdk.es16.js +2 -9
  110. package/dist/es/standards-sdk.es16.js.map +1 -1
  111. package/dist/es/standards-sdk.es18.js +5 -12
  112. package/dist/es/standards-sdk.es18.js.map +1 -1
  113. package/dist/es/standards-sdk.es19.js +3 -10
  114. package/dist/es/standards-sdk.es19.js.map +1 -1
  115. package/dist/es/standards-sdk.es22.js +1 -1
  116. package/dist/es/standards-sdk.es27.js +5 -12
  117. package/dist/es/standards-sdk.es27.js.map +1 -1
  118. package/dist/es/standards-sdk.es30.js +1 -1
  119. package/dist/es/standards-sdk.es31.js +1 -1
  120. package/dist/es/standards-sdk.es35.js +3 -10
  121. package/dist/es/standards-sdk.es35.js.map +1 -1
  122. package/dist/es/standards-sdk.es36.js +3 -3
  123. package/dist/es/standards-sdk.es37.js +1 -1
  124. package/dist/es/standards-sdk.es4.js +1 -1
  125. package/dist/es/standards-sdk.es53.js +1 -1
  126. package/dist/es/standards-sdk.es56.js +1 -1
  127. package/dist/es/standards-sdk.es58.js +1 -1
  128. package/dist/es/standards-sdk.es59.js +1 -1
  129. package/dist/es/standards-sdk.es60.js +3 -10
  130. package/dist/es/standards-sdk.es60.js.map +1 -1
  131. package/dist/es/standards-sdk.es62.js +1 -1
  132. package/dist/es/standards-sdk.es64.js +1 -1
  133. package/dist/es/standards-sdk.es65.js +2 -2
  134. package/dist/es/standards-sdk.es68.js +2 -2
  135. package/dist/es/standards-sdk.es69.js +1 -1
  136. package/dist/es/standards-sdk.es7.js +1 -1
  137. package/dist/es/standards-sdk.es71.js +1 -1
  138. package/dist/es/standards-sdk.es76.js +1 -1
  139. package/dist/es/standards-sdk.es77.js +2 -9
  140. package/dist/es/standards-sdk.es77.js.map +1 -1
  141. package/dist/es/standards-sdk.es78.js +1 -1
  142. package/dist/es/standards-sdk.es81.js +1 -1
  143. package/dist/es/standards-sdk.es83.js +1 -1
  144. package/dist/es/standards-sdk.es87.js +3 -3
  145. package/dist/es/standards-sdk.es91.js +1 -1
  146. package/dist/es/standards-sdk.es92.js +1 -1
  147. package/dist/es/standards-sdk.es97.js +1 -1
  148. package/dist/es/standards-sdk.es99.js +1 -1
  149. package/package.json +1 -1
  150. package/dist/es/standards-sdk.es153.js +0 -175
  151. package/dist/es/standards-sdk.es153.js.map +0 -1
  152. package/dist/es/standards-sdk.es154.js +0 -325
  153. package/dist/es/standards-sdk.es154.js.map +0 -1
  154. package/dist/es/standards-sdk.es155.js +0 -349
  155. package/dist/es/standards-sdk.es155.js.map +0 -1
  156. package/dist/es/standards-sdk.es156.js +0 -456
  157. package/dist/es/standards-sdk.es156.js.map +0 -1
  158. package/dist/es/standards-sdk.es157.js +0 -334
  159. package/dist/es/standards-sdk.es157.js.map +0 -1
  160. package/dist/es/standards-sdk.es158.js +0 -79
  161. package/dist/es/standards-sdk.es158.js.map +0 -1
  162. package/dist/es/standards-sdk.es159.js +0 -242
  163. package/dist/es/standards-sdk.es159.js.map +0 -1
  164. package/dist/es/standards-sdk.es160.js +0 -247
  165. package/dist/es/standards-sdk.es160.js.map +0 -1
@@ -1,250 +1,90 @@
1
- import { resolveResponseSchema, registrationQuoteResponseSchema, registerAgentResponseSchema, registrationProgressResponseSchema, uaidValidationResponseSchema, uaidConnectionStatusSchema, dashboardStatsResponseSchema } from "./standards-sdk.es150.js";
2
- import { RegistryBrokerClient } from "./standards-sdk.es134.js";
3
- import { serialiseAgentRegistrationRequest, DEFAULT_PROGRESS_INTERVAL_MS, DEFAULT_PROGRESS_TIMEOUT_MS, createAbortError, MINIMUM_REGISTRATION_AUTO_TOP_UP_CREDITS } from "./standards-sdk.es159.js";
4
- import { RegistryBrokerError } from "./standards-sdk.es135.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");
20
- }
21
- if (creditsToPurchase <= 0) {
22
- throw new Error("creditsToPurchase must be positive");
23
- }
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 client.getRegistrationQuote(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;
57
- }
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 client.purchaseCreditsWithHbar({
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
- });
74
- }
75
- const finalQuote = await client.getRegistrationQuote(payload);
76
- if ((finalQuote.shortfallCredits ?? 0) > 0) {
77
- throw new Error("Unable to purchase sufficient credits for registration");
78
- }
79
- }
80
- RegistryBrokerClient.prototype.resolveUaid = async function(uaid) {
81
- const raw = await this.requestJson(
82
- `/resolve/${encodeURIComponent(uaid)}`,
83
- {
84
- method: "GET"
85
- }
86
- );
87
- return this.parseWithSchema(
88
- raw,
89
- resolveResponseSchema,
90
- "resolve UAID response"
91
- );
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
92
25
  };
93
- RegistryBrokerClient.prototype.registerAgent = async function(payload, options) {
94
- const autoTopUp = options?.autoTopUp ?? this.registrationAutoTopUp;
95
- if (!autoTopUp) {
96
- return performRegisterAgent(this, payload);
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);
97
32
  }
98
- await ensureCreditsForRegistration(this, payload, autoTopUp);
99
- let retried = false;
100
- while (true) {
101
- try {
102
- return await performRegisterAgent(this, payload);
103
- } catch (error) {
104
- const shortfall = this.extractInsufficientCreditsDetails(error);
105
- if (shortfall && !retried) {
106
- await ensureCreditsForRegistration(this, payload, autoTopUp);
107
- retried = true;
108
- continue;
109
- }
110
- throw error;
111
- }
33
+ if (/^\d+$/.test(value)) {
34
+ return Number.parseInt(value, 10);
112
35
  }
36
+ return void 0;
113
37
  };
114
- RegistryBrokerClient.prototype.getRegistrationQuote = async function(payload) {
115
- const raw = await this.requestJson("/register/quote", {
116
- method: "POST",
117
- body: serialiseAgentRegistrationRequest(payload),
118
- headers: { "content-type": "application/json" }
119
- });
120
- return this.parseWithSchema(
121
- raw,
122
- registrationQuoteResponseSchema,
123
- "registration quote response"
124
- );
125
- };
126
- RegistryBrokerClient.prototype.updateAgent = async function(uaid, payload) {
127
- const raw = await this.requestJson(
128
- `/register/${encodeURIComponent(uaid)}`,
129
- {
130
- method: "PUT",
131
- body: serialiseAgentRegistrationRequest(payload),
132
- headers: { "content-type": "application/json" }
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;
133
47
  }
134
- );
135
- return this.parseWithSchema(
136
- raw,
137
- registerAgentResponseSchema,
138
- "update agent response"
139
- );
140
- };
141
- RegistryBrokerClient.prototype.getRegistrationProgress = async function(attemptId) {
142
- const normalisedAttemptId = attemptId.trim();
143
- if (!normalisedAttemptId) {
144
- throw new Error("attemptId is required");
48
+ } else if (CHAIN_ID_TO_ALIAS.has(chainId)) {
49
+ alias = CHAIN_ID_TO_ALIAS.get(chainId);
145
50
  }
146
- try {
147
- const raw = await this.requestJson(
148
- `/register/progress/${encodeURIComponent(normalisedAttemptId)}`,
149
- { method: "GET" }
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.'
150
54
  );
151
- const parsed = this.parseWithSchema(
152
- raw,
153
- registrationProgressResponseSchema,
154
- "registration progress response"
55
+ }
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).'
155
69
  );
156
- return parsed.progress;
157
- } catch (error) {
158
- if (error instanceof RegistryBrokerError && error.status === 404) {
159
- return null;
160
- }
161
- throw error;
162
70
  }
71
+ return {
72
+ canonical: mapping.canonical,
73
+ kind: "hedera",
74
+ hederaNetwork: mapping.hederaNetwork
75
+ };
163
76
  };
164
- RegistryBrokerClient.prototype.waitForRegistrationCompletion = async function(attemptId, options = {}) {
165
- const normalisedAttemptId = attemptId.trim();
166
- if (!normalisedAttemptId) {
167
- throw new Error("attemptId is required");
77
+ const canonicalizeLedgerNetwork = (network) => {
78
+ if (typeof network !== "string" || network.trim().length === 0) {
79
+ throw new Error("Ledger network is required.");
168
80
  }
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 this.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 this.delay(interval, signal);
81
+ const trimmed = normalise(network);
82
+ if (trimmed.startsWith("hedera:") || trimmed.includes("hedera-") || trimmed.includes("hedera_") || trimmed === "mainnet" || trimmed === "testnet") {
83
+ return normaliseHederaNetwork(trimmed);
207
84
  }
85
+ return normaliseEvmNetwork(trimmed);
208
86
  };
209
- RegistryBrokerClient.prototype.validateUaid = async function(uaid) {
210
- const raw = await this.requestJson(
211
- `/uaids/validate/${encodeURIComponent(uaid)}`,
212
- {
213
- method: "GET"
214
- }
215
- );
216
- return this.parseWithSchema(
217
- raw,
218
- uaidValidationResponseSchema,
219
- "UAID validation response"
220
- );
221
- };
222
- RegistryBrokerClient.prototype.getUaidConnectionStatus = async function(uaid) {
223
- const raw = await this.requestJson(
224
- `/uaids/connections/${encodeURIComponent(uaid)}/status`,
225
- {
226
- method: "GET"
227
- }
228
- );
229
- return this.parseWithSchema(
230
- raw,
231
- uaidConnectionStatusSchema,
232
- "UAID connection status"
233
- );
234
- };
235
- RegistryBrokerClient.prototype.closeUaidConnection = async function(uaid) {
236
- await this.request(`/uaids/connections/${encodeURIComponent(uaid)}`, {
237
- method: "DELETE"
238
- });
239
- };
240
- RegistryBrokerClient.prototype.dashboardStats = async function() {
241
- const raw = await this.requestJson("/dashboard/stats", {
242
- method: "GET"
243
- });
244
- return this.parseWithSchema(
245
- raw,
246
- dashboardStatsResponseSchema,
247
- "dashboard stats response"
248
- );
87
+ export {
88
+ canonicalizeLedgerNetwork
249
89
  };
250
90
  //# sourceMappingURL=standards-sdk.es130.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es130.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 { RegistryBrokerClient } from './base-client';\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\ndeclare module './base-client' {\n interface RegistryBrokerClient {\n resolveUaid(uaid: string): Promise<ResolvedAgentResponse>;\n registerAgent(\n payload: AgentRegistrationRequest,\n options?: RegisterAgentOptions,\n ): Promise<RegisterAgentResponse>;\n getRegistrationQuote(\n payload: AgentRegistrationRequest,\n ): Promise<RegisterAgentQuoteResponse>;\n updateAgent(\n uaid: string,\n payload: AgentRegistrationRequest,\n ): Promise<RegisterAgentResponse>;\n getRegistrationProgress(\n attemptId: string,\n ): Promise<RegistrationProgressRecord | null>;\n waitForRegistrationCompletion(\n attemptId: string,\n options?: RegistrationProgressWaitOptions,\n ): Promise<RegistrationProgressRecord>;\n validateUaid(uaid: string): Promise<UaidValidationResponse>;\n getUaidConnectionStatus(uaid: string): Promise<UaidConnectionStatus>;\n closeUaidConnection(uaid: string): Promise<void>;\n dashboardStats(): Promise<DashboardStatsResponse>;\n }\n}\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 client.getRegistrationQuote(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 client.purchaseCreditsWithHbar({\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 client.getRegistrationQuote(payload);\n if ((finalQuote.shortfallCredits ?? 0) > 0) {\n throw new Error('Unable to purchase sufficient credits for registration');\n }\n}\n\nRegistryBrokerClient.prototype.resolveUaid = async function (\n this: RegistryBrokerClient,\n uaid: string,\n): Promise<ResolvedAgentResponse> {\n const raw = await this.requestJson<JsonValue>(\n `/resolve/${encodeURIComponent(uaid)}`,\n {\n method: 'GET',\n },\n );\n return this.parseWithSchema(\n raw,\n resolveResponseSchema,\n 'resolve UAID response',\n );\n};\n\nRegistryBrokerClient.prototype.registerAgent = async function (\n this: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n options?: RegisterAgentOptions,\n): Promise<RegisterAgentResponse> {\n const autoTopUp = options?.autoTopUp ?? this.registrationAutoTopUp;\n\n if (!autoTopUp) {\n return performRegisterAgent(this, payload);\n }\n\n await ensureCreditsForRegistration(this, payload, autoTopUp);\n\n let retried = false;\n while (true) {\n try {\n return await performRegisterAgent(this, payload);\n } catch (error) {\n const shortfall = this.extractInsufficientCreditsDetails(error);\n if (shortfall && !retried) {\n await ensureCreditsForRegistration(this, payload, autoTopUp);\n retried = true;\n continue;\n }\n throw error;\n }\n }\n};\n\nRegistryBrokerClient.prototype.getRegistrationQuote = async function (\n this: RegistryBrokerClient,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentQuoteResponse> {\n const raw = await this.requestJson<JsonValue>('/register/quote', {\n method: 'POST',\n body: serialiseAgentRegistrationRequest(payload),\n headers: { 'content-type': 'application/json' },\n });\n\n return this.parseWithSchema(\n raw,\n registrationQuoteResponseSchema,\n 'registration quote response',\n );\n};\n\nRegistryBrokerClient.prototype.updateAgent = async function (\n this: RegistryBrokerClient,\n uaid: string,\n payload: AgentRegistrationRequest,\n): Promise<RegisterAgentResponse> {\n const raw = await this.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 this.parseWithSchema(\n raw,\n registerAgentResponseSchema,\n 'update agent response',\n );\n};\n\nRegistryBrokerClient.prototype.getRegistrationProgress = async function (\n this: 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 this.requestJson<JsonValue>(\n `/register/progress/${encodeURIComponent(normalisedAttemptId)}`,\n { method: 'GET' },\n );\n\n const parsed = this.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\nRegistryBrokerClient.prototype.waitForRegistrationCompletion = async function (\n this: 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 this.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 this.delay(interval, signal);\n }\n};\n\nRegistryBrokerClient.prototype.validateUaid = async function (\n this: RegistryBrokerClient,\n uaid: string,\n): Promise<UaidValidationResponse> {\n const raw = await this.requestJson<JsonValue>(\n `/uaids/validate/${encodeURIComponent(uaid)}`,\n {\n method: 'GET',\n },\n );\n return this.parseWithSchema(\n raw,\n uaidValidationResponseSchema,\n 'UAID validation response',\n );\n};\n\nRegistryBrokerClient.prototype.getUaidConnectionStatus = async function (\n this: RegistryBrokerClient,\n uaid: string,\n): Promise<UaidConnectionStatus> {\n const raw = await this.requestJson<JsonValue>(\n `/uaids/connections/${encodeURIComponent(uaid)}/status`,\n {\n method: 'GET',\n },\n );\n return this.parseWithSchema(\n raw,\n uaidConnectionStatusSchema,\n 'UAID connection status',\n );\n};\n\nRegistryBrokerClient.prototype.closeUaidConnection = async function (\n this: RegistryBrokerClient,\n uaid: string,\n): Promise<void> {\n await this.request(`/uaids/connections/${encodeURIComponent(uaid)}`, {\n method: 'DELETE',\n });\n};\n\nRegistryBrokerClient.prototype.dashboardStats = async function (\n this: RegistryBrokerClient,\n): Promise<DashboardStatsResponse> {\n const raw = await this.requestJson<JsonValue>('/dashboard/stats', {\n method: 'GET',\n });\n return this.parseWithSchema(\n raw,\n dashboardStatsResponseSchema,\n 'dashboard stats response',\n );\n};\n"],"names":[],"mappings":";;;;AA4DA,eAAe,qBACb,QACA,SACgC;AAChC,QAAM,MAAM,MAAM,OAAO,YAAuB,aAAa;AAAA,IAC3D,QAAQ;AAAA,IACR,MAAM,kCAAkC,OAAO;AAAA,IAC/C,SAAS,EAAE,gBAAgB,mBAAA;AAAA,EAAmB,CAC/C;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,SAAS,oBACP,mBACA,gBACQ;AACR,MAAI,kBAAkB,GAAG;AACvB,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AACA,MAAI,qBAAqB,GAAG;AAC1B,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AACA,QAAM,UAAU,oBAAoB;AACpC,QAAM,WAAW,KAAK,KAAK,UAAU,GAAG;AACxC,SAAO,WAAW;AACpB;AAEA,SAAS,yBAAyB,kBAAkC;AAClE,MAAI,CAAC,OAAO,SAAS,gBAAgB,KAAK,oBAAoB,GAAG;AAC/D,WAAO;AAAA,EACT;AACA,SAAO,KAAK;AAAA,IACV,KAAK,KAAK,gBAAgB;AAAA,IAC1B;AAAA,EAAA;AAEJ;AAEA,eAAe,6BACb,QACA,SACA,WACe;AACf,QAAM,UAAU,aAAa;AAC7B,MAAI,CAAC,SAAS;AACZ;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ,aAAa,CAAC,QAAQ,UAAU,QAAQ;AACnD,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AAEA,MAAI,CAAC,QAAQ,cAAc,CAAC,QAAQ,WAAW,QAAQ;AACrD,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AAEA,WAAS,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG;AAC/C,UAAM,QAAQ,MAAM,OAAO,qBAAqB,OAAO;AACvD,UAAM,YAAY,MAAM,oBAAoB;AAC5C,QAAI,aAAa,GAAG;AAClB;AAAA,IACF;AACA,UAAM,oBAAoB,yBAAyB,SAAS;AAC5D,QAAI,qBAAqB,GAAG;AAC1B;AAAA,IACF;AAEA,UAAM,iBAAiB,MAAM,kBAAkB;AAC/C,QAAI,CAAC,kBAAkB,kBAAkB,GAAG;AAC1C,YAAM,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAEA,UAAM,aAAa,oBAAoB,mBAAmB,cAAc;AAExE,UAAM,OAAO,wBAAwB;AAAA,MACnC,WAAW,QAAQ,UAAU,KAAA;AAAA,MAC7B,YAAY,QAAQ,WAAW,KAAA;AAAA,MAC/B;AAAA,MACA,MAAM,QAAQ,QAAQ;AAAA,MACtB,UAAU;AAAA,QACR,kBAAkB;AAAA,QAClB,iBAAiB,MAAM;AAAA,QACvB,kBAAkB;AAAA,MAAA;AAAA,IACpB,CACD;AAAA,EACH;AAEA,QAAM,aAAa,MAAM,OAAO,qBAAqB,OAAO;AAC5D,OAAK,WAAW,oBAAoB,KAAK,GAAG;AAC1C,UAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AACF;AAEA,qBAAqB,UAAU,cAAc,eAE3C,MACgC;AAChC,QAAM,MAAM,MAAM,KAAK;AAAA,IACrB,YAAY,mBAAmB,IAAI,CAAC;AAAA,IACpC;AAAA,MACE,QAAQ;AAAA,IAAA;AAAA,EACV;AAEF,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,qBAAqB,UAAU,gBAAgB,eAE7C,SACA,SACgC;AAChC,QAAM,YAAY,SAAS,aAAa,KAAK;AAE7C,MAAI,CAAC,WAAW;AACd,WAAO,qBAAqB,MAAM,OAAO;AAAA,EAC3C;AAEA,QAAM,6BAA6B,MAAM,SAAS,SAAS;AAE3D,MAAI,UAAU;AACd,SAAO,MAAM;AACX,QAAI;AACF,aAAO,MAAM,qBAAqB,MAAM,OAAO;AAAA,IACjD,SAAS,OAAO;AACd,YAAM,YAAY,KAAK,kCAAkC,KAAK;AAC9D,UAAI,aAAa,CAAC,SAAS;AACzB,cAAM,6BAA6B,MAAM,SAAS,SAAS;AAC3D,kBAAU;AACV;AAAA,MACF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,qBAAqB,UAAU,uBAAuB,eAEpD,SACqC;AACrC,QAAM,MAAM,MAAM,KAAK,YAAuB,mBAAmB;AAAA,IAC/D,QAAQ;AAAA,IACR,MAAM,kCAAkC,OAAO;AAAA,IAC/C,SAAS,EAAE,gBAAgB,mBAAA;AAAA,EAAmB,CAC/C;AAED,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,qBAAqB,UAAU,cAAc,eAE3C,MACA,SACgC;AAChC,QAAM,MAAM,MAAM,KAAK;AAAA,IACrB,aAAa,mBAAmB,IAAI,CAAC;AAAA,IACrC;AAAA,MACE,QAAQ;AAAA,MACR,MAAM,kCAAkC,OAAO;AAAA,MAC/C,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAAmB;AAAA,EAChD;AAGF,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,qBAAqB,UAAU,0BAA0B,eAEvD,WAC4C;AAC5C,QAAM,sBAAsB,UAAU,KAAA;AACtC,MAAI,CAAC,qBAAqB;AACxB,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AAEA,MAAI;AACF,UAAM,MAAM,MAAM,KAAK;AAAA,MACrB,sBAAsB,mBAAmB,mBAAmB,CAAC;AAAA,MAC7D,EAAE,QAAQ,MAAA;AAAA,IAAM;AAGlB,UAAM,SAAS,KAAK;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAGF,WAAO,OAAO;AAAA,EAChB,SAAS,OAAO;AACd,QAAI,iBAAiB,uBAAuB,MAAM,WAAW,KAAK;AAChE,aAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACF;AAEA,qBAAqB,UAAU,gCAAgC,eAE7D,WACA,UAA2C,CAAA,GACN;AACrC,QAAM,sBAAsB,UAAU,KAAA;AACtC,MAAI,CAAC,qBAAqB;AACxB,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AAEA,QAAM,WAAW,KAAK;AAAA,IACpB;AAAA,IACA,QAAQ,cAAc;AAAA,EAAA;AAExB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,iBAAiB,QAAQ,kBAAkB;AACjD,QAAM,SAAS,QAAQ;AACvB,QAAM,YAAY,KAAK,IAAA;AAEvB,SAAO,MAAM;AACX,QAAI,QAAQ,SAAS;AACnB,YAAM,iBAAA;AAAA,IACR;AAEA,UAAM,WAAW,MAAM,KAAK,wBAAwB,mBAAmB;AAEvE,QAAI,UAAU;AACZ,cAAQ,aAAa,QAAQ;AAE7B,UAAI,SAAS,WAAW,aAAa;AACnC,eAAO;AAAA,MACT;AAEA,UAAI,SAAS,WAAW,aAAa,SAAS,WAAW,UAAU;AACjE,YAAI,gBAAgB;AAClB,gBAAM,IAAI;AAAA,YACR;AAAA,YACA;AAAA,cACE,QAAQ;AAAA,cACR,YAAY,SAAS;AAAA,cACrB,MAAM;AAAA,YAAA;AAAA,UACR;AAAA,QAEJ;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,KAAK,QAAQ,aAAa,WAAW;AACvC,YAAM,IAAI;AAAA,QACR,iDAAiD,SAAS;AAAA,MAAA;AAAA,IAE9D;AAEA,UAAM,KAAK,MAAM,UAAU,MAAM;AAAA,EACnC;AACF;AAEA,qBAAqB,UAAU,eAAe,eAE5C,MACiC;AACjC,QAAM,MAAM,MAAM,KAAK;AAAA,IACrB,mBAAmB,mBAAmB,IAAI,CAAC;AAAA,IAC3C;AAAA,MACE,QAAQ;AAAA,IAAA;AAAA,EACV;AAEF,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,qBAAqB,UAAU,0BAA0B,eAEvD,MAC+B;AAC/B,QAAM,MAAM,MAAM,KAAK;AAAA,IACrB,sBAAsB,mBAAmB,IAAI,CAAC;AAAA,IAC9C;AAAA,MACE,QAAQ;AAAA,IAAA;AAAA,EACV;AAEF,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,qBAAqB,UAAU,sBAAsB,eAEnD,MACe;AACf,QAAM,KAAK,QAAQ,sBAAsB,mBAAmB,IAAI,CAAC,IAAI;AAAA,IACnE,QAAQ;AAAA,EAAA,CACT;AACH;AAEA,qBAAqB,UAAU,iBAAiB,iBAEb;AACjC,QAAM,MAAM,MAAM,KAAK,YAAuB,oBAAoB;AAAA,IAChE,QAAQ;AAAA,EAAA,CACT;AACD,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"standards-sdk.es130.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,183 +1,63 @@
1
- import { Buffer } from "buffer";
2
- import { ledgerChallengeResponseSchema, ledgerVerifyResponseSchema } from "./standards-sdk.es150.js";
3
- import { canonicalizeLedgerNetwork } from "./standards-sdk.es137.js";
4
- import { createPrivateKeySignerAsync } from "./standards-sdk.es136.js";
5
- import { RegistryBrokerClient } from "./standards-sdk.es134.js";
6
- async function loadViemAccount(privateKey) {
7
- try {
8
- const viem = await import("viem/accounts");
9
- return viem.privateKeyToAccount(privateKey);
10
- } catch (error) {
11
- const err = new Error(
12
- 'EVM ledger authentication requires the optional dependency "viem". Install it to use evmPrivateKey flows.'
13
- );
14
- err.cause = error;
15
- throw err;
1
+ const HOL_CHAT_PROTOCOL_ID = "hol-chat";
2
+ const isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
3
+ const isHolChatOp = (value) => {
4
+ if (!isRecord(value)) {
5
+ return false;
16
6
  }
17
- }
18
- async function resolveLedgerAuthSignature(message, options) {
19
- if (typeof options.sign === "function") {
20
- const result = await options.sign(message);
21
- if (!result || typeof result.signature !== "string" || result.signature.length === 0) {
22
- throw new Error("Custom ledger signer failed to produce a signature.");
23
- }
24
- return result;
7
+ if (value.p !== HOL_CHAT_PROTOCOL_ID) {
8
+ return false;
25
9
  }
26
- if (!options.signer || typeof options.signer.sign !== "function") {
27
- throw new Error(
28
- "Ledger authentication requires a Hedera Signer or custom sign function."
29
- );
10
+ if (typeof value.request_id !== "string" || value.request_id.trim().length === 0) {
11
+ return false;
30
12
  }
31
- const payload = Buffer.from(message, "utf8");
32
- const signatures = await options.signer.sign([payload]);
33
- const signatureEntry = signatures?.[0];
34
- if (!signatureEntry) {
35
- throw new Error("Signer did not return any signatures.");
13
+ const op = value.op;
14
+ if (op !== "payment_request" && op !== "payment_approve" && op !== "payment_decline" && op !== "payment_result" && op !== "job_status") {
15
+ return false;
36
16
  }
37
- let derivedPublicKey;
38
- if (signatureEntry.publicKey) {
39
- derivedPublicKey = signatureEntry.publicKey.toString();
40
- } else if (typeof options.signer.getAccountKey === "function") {
41
- const accountKey = await options.signer.getAccountKey();
42
- if (accountKey && typeof accountKey.toString === "function") {
43
- derivedPublicKey = accountKey.toString();
17
+ return true;
18
+ };
19
+ const parseHolChatOps = (ops) => {
20
+ if (!Array.isArray(ops)) {
21
+ return [];
22
+ }
23
+ return ops.filter(isHolChatOp).map((op) => {
24
+ const next = {
25
+ p: HOL_CHAT_PROTOCOL_ID,
26
+ op: op.op,
27
+ request_id: op.request_id.trim()
28
+ };
29
+ if (typeof op.m === "string" && op.m.trim().length > 0) {
30
+ next.m = op.m.trim();
44
31
  }
45
- }
46
- return {
47
- signature: Buffer.from(signatureEntry.signature).toString("base64"),
48
- signatureKind: "raw",
49
- publicKey: derivedPublicKey
50
- };
51
- }
52
- RegistryBrokerClient.prototype.createLedgerChallenge = async function(payload) {
53
- const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);
54
- const network = resolvedNetwork.kind === "hedera" ? resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical : resolvedNetwork.canonical;
55
- const raw = await this.requestJson("/auth/ledger/challenge", {
56
- method: "POST",
57
- headers: { "content-type": "application/json" },
58
- body: {
59
- accountId: payload.accountId,
60
- network
32
+ if (isRecord(op.data)) {
33
+ next.data = { ...op.data };
61
34
  }
35
+ return next;
62
36
  });
63
- return this.parseWithSchema(
64
- raw,
65
- ledgerChallengeResponseSchema,
66
- "ledger challenge response"
67
- );
68
- };
69
- RegistryBrokerClient.prototype.verifyLedgerChallenge = async function(payload) {
70
- const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);
71
- const network = resolvedNetwork.kind === "hedera" ? resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical : resolvedNetwork.canonical;
72
- const body = {
73
- challengeId: payload.challengeId,
74
- accountId: payload.accountId,
75
- network,
76
- signature: payload.signature
77
- };
78
- if (payload.signatureKind) {
79
- body.signatureKind = payload.signatureKind;
80
- }
81
- if (payload.publicKey) {
82
- body.publicKey = payload.publicKey;
83
- }
84
- if (typeof payload.expiresInMinutes === "number") {
85
- body.expiresInMinutes = payload.expiresInMinutes;
86
- }
87
- const raw = await this.requestJson("/auth/ledger/verify", {
88
- method: "POST",
89
- headers: { "content-type": "application/json" },
90
- body
91
- });
92
- const result = this.parseWithSchema(
93
- raw,
94
- ledgerVerifyResponseSchema,
95
- "ledger verification response"
96
- );
97
- this.setLedgerApiKey(result.key);
98
- return result;
99
37
  };
100
- RegistryBrokerClient.prototype.authenticateWithLedger = async function(options) {
101
- const challenge = await this.createLedgerChallenge({
102
- accountId: options.accountId,
103
- network: options.network
104
- });
105
- const signed = await resolveLedgerAuthSignature(challenge.message, options);
106
- const verification = await this.verifyLedgerChallenge({
107
- challengeId: challenge.challengeId,
108
- accountId: options.accountId,
109
- network: options.network,
110
- signature: signed.signature,
111
- signatureKind: signed.signatureKind,
112
- publicKey: signed.publicKey,
113
- expiresInMinutes: options.expiresInMinutes
114
- });
115
- return verification;
116
- };
117
- RegistryBrokerClient.prototype.authenticateWithLedgerCredentials = async function(options) {
118
- const {
119
- accountId,
120
- network,
121
- signer,
122
- sign,
123
- hederaPrivateKey,
124
- evmPrivateKey,
125
- expiresInMinutes,
126
- setAccountHeader = true,
127
- label,
128
- logger
129
- } = options;
130
- const resolvedNetwork = canonicalizeLedgerNetwork(network);
131
- const labelSuffix = label ? ` for ${label}` : "";
132
- const networkPayload = resolvedNetwork.canonical;
133
- const authOptions = {
134
- accountId,
135
- network: networkPayload,
136
- expiresInMinutes
137
- };
138
- if (sign) {
139
- authOptions.sign = sign;
140
- } else if (signer) {
141
- authOptions.signer = signer;
142
- } else if (hederaPrivateKey) {
143
- if (resolvedNetwork.kind !== "hedera" || !resolvedNetwork.hederaNetwork) {
144
- throw new Error(
145
- "hederaPrivateKey can only be used with hedera:mainnet or hedera:testnet networks."
146
- );
147
- }
148
- authOptions.signer = await createPrivateKeySignerAsync({
149
- accountId,
150
- privateKey: hederaPrivateKey,
151
- network: resolvedNetwork.hederaNetwork
152
- });
153
- } else if (evmPrivateKey) {
154
- if (resolvedNetwork.kind !== "evm") {
155
- throw new Error(
156
- "evmPrivateKey can only be used with CAIP-2 EVM networks (eip155:<chainId>)."
157
- );
158
- }
159
- const formattedKey = evmPrivateKey.startsWith("0x") ? evmPrivateKey : `0x${evmPrivateKey}`;
160
- const account = await loadViemAccount(formattedKey);
161
- authOptions.sign = async (message) => ({
162
- signature: await account.signMessage({ message }),
163
- signatureKind: "evm",
164
- publicKey: account.publicKey
165
- });
166
- } else {
167
- throw new Error(
168
- "Provide a signer, sign function, hederaPrivateKey, or evmPrivateKey to authenticate with the ledger."
169
- );
170
- }
171
- logger?.info?.(
172
- `Authenticating ledger account ${accountId} (${resolvedNetwork.canonical})${labelSuffix}...`
173
- );
174
- const verification = await this.authenticateWithLedger(authOptions);
175
- if (setAccountHeader) {
176
- this.setDefaultHeader("x-account-id", verification.accountId);
177
- }
178
- logger?.info?.(
179
- `Ledger authentication complete${labelSuffix}. Issued key prefix: ${verification.apiKey.prefix}…${verification.apiKey.lastFour}`
180
- );
181
- return verification;
38
+ const buildPaymentApproveMessage = (input) => JSON.stringify({
39
+ p: HOL_CHAT_PROTOCOL_ID,
40
+ op: "payment_approve",
41
+ request_id: input.requestId,
42
+ data: { job_id: input.jobId }
43
+ });
44
+ const buildPaymentDeclineMessage = (input) => JSON.stringify({
45
+ p: HOL_CHAT_PROTOCOL_ID,
46
+ op: "payment_decline",
47
+ request_id: input.requestId
48
+ });
49
+ const buildJobStatusMessage = (input) => JSON.stringify({
50
+ p: HOL_CHAT_PROTOCOL_ID,
51
+ op: "job_status",
52
+ request_id: input.requestId,
53
+ data: { job_id: input.jobId }
54
+ });
55
+ export {
56
+ HOL_CHAT_PROTOCOL_ID,
57
+ buildJobStatusMessage,
58
+ buildPaymentApproveMessage,
59
+ buildPaymentDeclineMessage,
60
+ isHolChatOp,
61
+ parseHolChatOps
182
62
  };
183
63
  //# sourceMappingURL=standards-sdk.es131.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es131.js","sources":["../../src/services/registry-broker/client/ledger-auth.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport type { SignerSignature } from '@hashgraph/sdk';\nimport type {\n JsonObject,\n JsonValue,\n LedgerAuthenticationOptions,\n LedgerAuthenticationSignerResult,\n LedgerChallengeRequest,\n LedgerChallengeResponse,\n LedgerCredentialAuthOptions,\n LedgerVerifyRequest,\n LedgerVerifyResponse,\n} from '../types';\nimport {\n ledgerChallengeResponseSchema,\n ledgerVerifyResponseSchema,\n} from '../schemas';\nimport { canonicalizeLedgerNetwork } from '../ledger-network';\nimport { createPrivateKeySignerAsync } from '../private-key-signer';\nimport { RegistryBrokerClient } from './base-client';\n\ndeclare module './base-client' {\n interface RegistryBrokerClient {\n createLedgerChallenge(\n payload: LedgerChallengeRequest,\n ): Promise<LedgerChallengeResponse>;\n verifyLedgerChallenge(\n payload: LedgerVerifyRequest,\n ): Promise<LedgerVerifyResponse>;\n authenticateWithLedger(\n options: LedgerAuthenticationOptions,\n ): Promise<LedgerVerifyResponse>;\n authenticateWithLedgerCredentials(\n options: LedgerCredentialAuthOptions,\n ): Promise<LedgerVerifyResponse>;\n }\n}\n\nasync function loadViemAccount(privateKey: `0x${string}`): Promise<{\n publicKey: string;\n signMessage: (input: { message: string }) => Promise<string>;\n}> {\n try {\n const viem = await import('viem/accounts');\n return viem.privateKeyToAccount(privateKey);\n } catch (error) {\n const err = new Error(\n 'EVM ledger authentication requires the optional dependency \"viem\". Install it to use evmPrivateKey flows.',\n );\n (err as { cause?: unknown }).cause = error;\n throw err;\n }\n}\n\nasync function resolveLedgerAuthSignature(\n message: string,\n options: LedgerAuthenticationOptions,\n): Promise<LedgerAuthenticationSignerResult> {\n if (typeof options.sign === 'function') {\n const result = await options.sign(message);\n if (\n !result ||\n typeof result.signature !== 'string' ||\n result.signature.length === 0\n ) {\n throw new Error('Custom ledger signer failed to produce a signature.');\n }\n return result;\n }\n\n if (!options.signer || typeof options.signer.sign !== 'function') {\n throw new Error(\n 'Ledger authentication requires a Hedera Signer or custom sign function.',\n );\n }\n\n const payload = Buffer.from(message, 'utf8');\n const signatures: SignerSignature[] = await options.signer.sign([payload]);\n const signatureEntry = signatures?.[0];\n if (!signatureEntry) {\n throw new Error('Signer did not return any signatures.');\n }\n\n let derivedPublicKey: string | undefined;\n if (signatureEntry.publicKey) {\n derivedPublicKey = signatureEntry.publicKey.toString();\n } else if (typeof options.signer.getAccountKey === 'function') {\n const accountKey = await options.signer.getAccountKey();\n if (accountKey && typeof accountKey.toString === 'function') {\n derivedPublicKey = accountKey.toString();\n }\n }\n\n return {\n signature: Buffer.from(signatureEntry.signature).toString('base64'),\n signatureKind: 'raw',\n publicKey: derivedPublicKey,\n };\n}\n\nRegistryBrokerClient.prototype.createLedgerChallenge = async function (\n this: RegistryBrokerClient,\n payload: LedgerChallengeRequest,\n): Promise<LedgerChallengeResponse> {\n const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);\n const network =\n resolvedNetwork.kind === 'hedera'\n ? (resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical)\n : resolvedNetwork.canonical;\n const raw = await this.requestJson<JsonValue>('/auth/ledger/challenge', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: {\n accountId: payload.accountId,\n network,\n },\n });\n\n return this.parseWithSchema(\n raw,\n ledgerChallengeResponseSchema,\n 'ledger challenge response',\n );\n};\n\nRegistryBrokerClient.prototype.verifyLedgerChallenge = async function (\n this: RegistryBrokerClient,\n payload: LedgerVerifyRequest,\n): Promise<LedgerVerifyResponse> {\n const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);\n const network =\n resolvedNetwork.kind === 'hedera'\n ? (resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical)\n : resolvedNetwork.canonical;\n const body: JsonObject = {\n challengeId: payload.challengeId,\n accountId: payload.accountId,\n network,\n signature: payload.signature,\n };\n\n if (payload.signatureKind) {\n body.signatureKind = payload.signatureKind;\n }\n if (payload.publicKey) {\n body.publicKey = payload.publicKey;\n }\n if (typeof payload.expiresInMinutes === 'number') {\n body.expiresInMinutes = payload.expiresInMinutes;\n }\n\n const raw = await this.requestJson<JsonValue>('/auth/ledger/verify', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body,\n });\n\n const result = this.parseWithSchema(\n raw,\n ledgerVerifyResponseSchema,\n 'ledger verification response',\n );\n\n this.setLedgerApiKey(result.key);\n return result;\n};\n\nRegistryBrokerClient.prototype.authenticateWithLedger = async function (\n this: RegistryBrokerClient,\n options: LedgerAuthenticationOptions,\n): Promise<LedgerVerifyResponse> {\n const challenge = await this.createLedgerChallenge({\n accountId: options.accountId,\n network: options.network,\n });\n const signed = await resolveLedgerAuthSignature(challenge.message, options);\n const verification = await this.verifyLedgerChallenge({\n challengeId: challenge.challengeId,\n accountId: options.accountId,\n network: options.network,\n signature: signed.signature,\n signatureKind: signed.signatureKind,\n publicKey: signed.publicKey,\n expiresInMinutes: options.expiresInMinutes,\n });\n return verification;\n};\n\nRegistryBrokerClient.prototype.authenticateWithLedgerCredentials =\n async function (\n this: RegistryBrokerClient,\n options: LedgerCredentialAuthOptions,\n ): Promise<LedgerVerifyResponse> {\n const {\n accountId,\n network,\n signer,\n sign,\n hederaPrivateKey,\n evmPrivateKey,\n expiresInMinutes,\n setAccountHeader = true,\n label,\n logger,\n } = options;\n\n const resolvedNetwork = canonicalizeLedgerNetwork(network);\n const labelSuffix = label ? ` for ${label}` : '';\n\n const networkPayload = resolvedNetwork.canonical;\n\n const authOptions: LedgerAuthenticationOptions = {\n accountId,\n network: networkPayload,\n expiresInMinutes,\n };\n\n if (sign) {\n authOptions.sign = sign;\n } else if (signer) {\n authOptions.signer = signer;\n } else if (hederaPrivateKey) {\n if (resolvedNetwork.kind !== 'hedera' || !resolvedNetwork.hederaNetwork) {\n throw new Error(\n 'hederaPrivateKey can only be used with hedera:mainnet or hedera:testnet networks.',\n );\n }\n authOptions.signer = await createPrivateKeySignerAsync({\n accountId,\n privateKey: hederaPrivateKey,\n network: resolvedNetwork.hederaNetwork,\n });\n } else if (evmPrivateKey) {\n if (resolvedNetwork.kind !== 'evm') {\n throw new Error(\n 'evmPrivateKey can only be used with CAIP-2 EVM networks (eip155:<chainId>).',\n );\n }\n const formattedKey = evmPrivateKey.startsWith('0x')\n ? (evmPrivateKey as `0x${string}`)\n : (`0x${evmPrivateKey}` as `0x${string}`);\n const account = await loadViemAccount(formattedKey);\n authOptions.sign = async message => ({\n signature: await account.signMessage({ message }),\n signatureKind: 'evm',\n publicKey: account.publicKey,\n });\n } else {\n throw new Error(\n 'Provide a signer, sign function, hederaPrivateKey, or evmPrivateKey to authenticate with the ledger.',\n );\n }\n\n logger?.info?.(\n `Authenticating ledger account ${accountId} (${resolvedNetwork.canonical})${labelSuffix}...`,\n );\n const verification = await this.authenticateWithLedger(authOptions);\n if (setAccountHeader) {\n this.setDefaultHeader('x-account-id', verification.accountId);\n }\n logger?.info?.(\n `Ledger authentication complete${labelSuffix}. Issued key prefix: ${verification.apiKey.prefix}…${verification.apiKey.lastFour}`,\n );\n return verification;\n };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es131.js","sources":["../../src/services/registry-broker/hol-chat-ops.ts"],"sourcesContent":["export const HOL_CHAT_PROTOCOL_ID = 'hol-chat' as const;\n\nexport type HolChatOpName =\n | 'payment_request'\n | 'payment_approve'\n | 'payment_decline'\n | 'payment_result'\n | 'job_status';\n\nexport interface HolChatOpBase {\n p: typeof HOL_CHAT_PROTOCOL_ID;\n op: HolChatOpName;\n request_id: string;\n m?: string;\n data?: Record<string, unknown>;\n}\n\nexport type HolChatOp = HolChatOpBase;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n\nexport const isHolChatOp = (value: unknown): value is HolChatOp => {\n if (!isRecord(value)) {\n return false;\n }\n if (value.p !== HOL_CHAT_PROTOCOL_ID) {\n return false;\n }\n if (\n typeof value.request_id !== 'string' ||\n value.request_id.trim().length === 0\n ) {\n return false;\n }\n const op = value.op;\n if (\n op !== 'payment_request' &&\n op !== 'payment_approve' &&\n op !== 'payment_decline' &&\n op !== 'payment_result' &&\n op !== 'job_status'\n ) {\n return false;\n }\n return true;\n};\n\nexport const parseHolChatOps = (ops: unknown): HolChatOp[] => {\n if (!Array.isArray(ops)) {\n return [];\n }\n return ops.filter(isHolChatOp).map(op => {\n const next: HolChatOp = {\n p: HOL_CHAT_PROTOCOL_ID,\n op: op.op,\n request_id: op.request_id.trim(),\n };\n if (typeof op.m === 'string' && op.m.trim().length > 0) {\n next.m = op.m.trim();\n }\n if (isRecord(op.data)) {\n next.data = { ...op.data };\n }\n return next;\n });\n};\n\nexport const buildPaymentApproveMessage = (input: {\n requestId: string;\n jobId: number;\n}): string =>\n JSON.stringify({\n p: HOL_CHAT_PROTOCOL_ID,\n op: 'payment_approve',\n request_id: input.requestId,\n data: { job_id: input.jobId },\n });\n\nexport const buildPaymentDeclineMessage = (input: {\n requestId: string;\n}): string =>\n JSON.stringify({\n p: HOL_CHAT_PROTOCOL_ID,\n op: 'payment_decline',\n request_id: input.requestId,\n });\n\nexport const buildJobStatusMessage = (input: {\n requestId: string;\n jobId: number;\n}): string =>\n JSON.stringify({\n p: HOL_CHAT_PROTOCOL_ID,\n op: 'job_status',\n request_id: input.requestId,\n data: { job_id: input.jobId },\n });\n"],"names":[],"mappings":"AAAO,MAAM,uBAAuB;AAmBpC,MAAM,WAAW,CAAC,UAChB,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAE9D,MAAM,cAAc,CAAC,UAAuC;AACjE,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AACA,MAAI,MAAM,MAAM,sBAAsB;AACpC,WAAO;AAAA,EACT;AACA,MACE,OAAO,MAAM,eAAe,YAC5B,MAAM,WAAW,KAAA,EAAO,WAAW,GACnC;AACA,WAAO;AAAA,EACT;AACA,QAAM,KAAK,MAAM;AACjB,MACE,OAAO,qBACP,OAAO,qBACP,OAAO,qBACP,OAAO,oBACP,OAAO,cACP;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,MAAM,kBAAkB,CAAC,QAA8B;AAC5D,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACvB,WAAO,CAAA;AAAA,EACT;AACA,SAAO,IAAI,OAAO,WAAW,EAAE,IAAI,CAAA,OAAM;AACvC,UAAM,OAAkB;AAAA,MACtB,GAAG;AAAA,MACH,IAAI,GAAG;AAAA,MACP,YAAY,GAAG,WAAW,KAAA;AAAA,IAAK;AAEjC,QAAI,OAAO,GAAG,MAAM,YAAY,GAAG,EAAE,KAAA,EAAO,SAAS,GAAG;AACtD,WAAK,IAAI,GAAG,EAAE,KAAA;AAAA,IAChB;AACA,QAAI,SAAS,GAAG,IAAI,GAAG;AACrB,WAAK,OAAO,EAAE,GAAG,GAAG,KAAA;AAAA,IACtB;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAEO,MAAM,6BAA6B,CAAC,UAIzC,KAAK,UAAU;AAAA,EACb,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,YAAY,MAAM;AAAA,EAClB,MAAM,EAAE,QAAQ,MAAM,MAAA;AACxB,CAAC;AAEI,MAAM,6BAA6B,CAAC,UAGzC,KAAK,UAAU;AAAA,EACb,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,YAAY,MAAM;AACpB,CAAC;AAEI,MAAM,wBAAwB,CAAC,UAIpC,KAAK,UAAU;AAAA,EACb,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,YAAY,MAAM;AAAA,EAClB,MAAM,EAAE,QAAQ,MAAM,MAAA;AACxB,CAAC;"}