@hashgraphonline/standards-sdk 0.1.157 → 0.1.159

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 (275) hide show
  1. package/dist/cjs/hcs-12/validation/schemas.d.ts +2 -2
  2. package/dist/cjs/hcs-17/types.d.ts +4 -4
  3. package/dist/cjs/hcs-2/types.d.ts +20 -20
  4. package/dist/cjs/hcs-20/types.d.ts +8 -8
  5. package/dist/cjs/hcs-26/base-client.d.ts +83 -0
  6. package/dist/cjs/hcs-26/base-client.d.ts.map +1 -0
  7. package/dist/cjs/hcs-26/browser.d.ts +11 -0
  8. package/dist/cjs/hcs-26/browser.d.ts.map +1 -0
  9. package/dist/cjs/hcs-26/index.d.ts +7 -0
  10. package/dist/cjs/hcs-26/index.d.ts.map +1 -0
  11. package/dist/cjs/hcs-26/memos.d.ts +28 -0
  12. package/dist/cjs/hcs-26/memos.d.ts.map +1 -0
  13. package/dist/cjs/hcs-26/resolver.d.ts +60 -0
  14. package/dist/cjs/hcs-26/resolver.d.ts.map +1 -0
  15. package/dist/cjs/hcs-26/sdk.d.ts +10 -0
  16. package/dist/cjs/hcs-26/sdk.d.ts.map +1 -0
  17. package/dist/cjs/hcs-26/types.d.ts +2752 -0
  18. package/dist/cjs/hcs-26/types.d.ts.map +1 -0
  19. package/dist/cjs/index.d.ts +1 -0
  20. package/dist/cjs/index.d.ts.map +1 -1
  21. package/dist/cjs/inscribe/inscriber.d.ts +1 -1
  22. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  23. package/dist/cjs/inscribe/inscription-cost.d.ts +12 -0
  24. package/dist/cjs/inscribe/inscription-cost.d.ts.map +1 -0
  25. package/dist/cjs/inscribe/types.d.ts +5 -1
  26. package/dist/cjs/inscribe/types.d.ts.map +1 -1
  27. package/dist/cjs/services/registry-broker/client/base-client.d.ts +19 -1
  28. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  29. package/dist/cjs/services/registry-broker/client/skills.d.ts +20 -1
  30. package/dist/cjs/services/registry-broker/client/skills.d.ts.map +1 -1
  31. package/dist/cjs/services/registry-broker/schemas.d.ts +2515 -86
  32. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  33. package/dist/cjs/services/registry-broker/types.d.ts +21 -3
  34. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  35. package/dist/cjs/services/types.d.ts +2 -1
  36. package/dist/cjs/services/types.d.ts.map +1 -1
  37. package/dist/cjs/standards-sdk.cjs +2 -2
  38. package/dist/cjs/standards-sdk.cjs.map +1 -1
  39. package/dist/cjs/utils/crypto-abstraction.d.ts.map +1 -1
  40. package/dist/es/hcs-12/validation/schemas.d.ts +2 -2
  41. package/dist/es/hcs-17/types.d.ts +4 -4
  42. package/dist/es/hcs-2/types.d.ts +20 -20
  43. package/dist/es/hcs-20/types.d.ts +8 -8
  44. package/dist/es/hcs-26/base-client.d.ts +83 -0
  45. package/dist/es/hcs-26/base-client.d.ts.map +1 -0
  46. package/dist/es/hcs-26/browser.d.ts +11 -0
  47. package/dist/es/hcs-26/browser.d.ts.map +1 -0
  48. package/dist/es/hcs-26/index.d.ts +7 -0
  49. package/dist/es/hcs-26/index.d.ts.map +1 -0
  50. package/dist/es/hcs-26/memos.d.ts +28 -0
  51. package/dist/es/hcs-26/memos.d.ts.map +1 -0
  52. package/dist/es/hcs-26/resolver.d.ts +60 -0
  53. package/dist/es/hcs-26/resolver.d.ts.map +1 -0
  54. package/dist/es/hcs-26/sdk.d.ts +10 -0
  55. package/dist/es/hcs-26/sdk.d.ts.map +1 -0
  56. package/dist/es/hcs-26/types.d.ts +2752 -0
  57. package/dist/es/hcs-26/types.d.ts.map +1 -0
  58. package/dist/es/index.d.ts +1 -0
  59. package/dist/es/index.d.ts.map +1 -1
  60. package/dist/es/inscribe/inscriber.d.ts +1 -1
  61. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  62. package/dist/es/inscribe/inscription-cost.d.ts +12 -0
  63. package/dist/es/inscribe/inscription-cost.d.ts.map +1 -0
  64. package/dist/es/inscribe/types.d.ts +5 -1
  65. package/dist/es/inscribe/types.d.ts.map +1 -1
  66. package/dist/es/services/registry-broker/client/base-client.d.ts +19 -1
  67. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  68. package/dist/es/services/registry-broker/client/skills.d.ts +20 -1
  69. package/dist/es/services/registry-broker/client/skills.d.ts.map +1 -1
  70. package/dist/es/services/registry-broker/schemas.d.ts +2515 -86
  71. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  72. package/dist/es/services/registry-broker/types.d.ts +21 -3
  73. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  74. package/dist/es/services/types.d.ts +2 -1
  75. package/dist/es/services/types.d.ts.map +1 -1
  76. package/dist/es/standards-sdk.es.js +70 -32
  77. package/dist/es/standards-sdk.es.js.map +1 -1
  78. package/dist/es/standards-sdk.es101.js +2 -2
  79. package/dist/es/standards-sdk.es103.js +1 -1
  80. package/dist/es/standards-sdk.es104.js +2 -2
  81. package/dist/es/standards-sdk.es105.js +247 -137
  82. package/dist/es/standards-sdk.es105.js.map +1 -1
  83. package/dist/es/standards-sdk.es106.js +477 -28
  84. package/dist/es/standards-sdk.es106.js.map +1 -1
  85. package/dist/es/standards-sdk.es107.js +103 -20
  86. package/dist/es/standards-sdk.es107.js.map +1 -1
  87. package/dist/es/standards-sdk.es108.js +141 -141
  88. package/dist/es/standards-sdk.es108.js.map +1 -1
  89. package/dist/es/standards-sdk.es109.js +31 -200
  90. package/dist/es/standards-sdk.es109.js.map +1 -1
  91. package/dist/es/standards-sdk.es11.js +1 -1
  92. package/dist/es/standards-sdk.es110.js +9 -787
  93. package/dist/es/standards-sdk.es110.js.map +1 -1
  94. package/dist/es/standards-sdk.es111.js +140 -11
  95. package/dist/es/standards-sdk.es111.js.map +1 -1
  96. package/dist/es/standards-sdk.es112.js +29 -567
  97. package/dist/es/standards-sdk.es112.js.map +1 -1
  98. package/dist/es/standards-sdk.es113.js +17 -597
  99. package/dist/es/standards-sdk.es113.js.map +1 -1
  100. package/dist/es/standards-sdk.es114.js +159 -12
  101. package/dist/es/standards-sdk.es114.js.map +1 -1
  102. package/dist/es/standards-sdk.es115.js +203 -2
  103. package/dist/es/standards-sdk.es115.js.map +1 -1
  104. package/dist/es/standards-sdk.es116.js +774 -71
  105. package/dist/es/standards-sdk.es116.js.map +1 -1
  106. package/dist/es/standards-sdk.es117.js +11 -38
  107. package/dist/es/standards-sdk.es117.js.map +1 -1
  108. package/dist/es/standards-sdk.es118.js +567 -2
  109. package/dist/es/standards-sdk.es118.js.map +1 -1
  110. package/dist/es/standards-sdk.es119.js +576 -205
  111. package/dist/es/standards-sdk.es119.js.map +1 -1
  112. package/dist/es/standards-sdk.es12.js +1 -1
  113. package/dist/es/standards-sdk.es120.js +12 -1139
  114. package/dist/es/standards-sdk.es120.js.map +1 -1
  115. package/dist/es/standards-sdk.es121.js +2 -306
  116. package/dist/es/standards-sdk.es121.js.map +1 -1
  117. package/dist/es/standards-sdk.es122.js +83 -418
  118. package/dist/es/standards-sdk.es122.js.map +1 -1
  119. package/dist/es/standards-sdk.es123.js +36 -351
  120. package/dist/es/standards-sdk.es123.js.map +1 -1
  121. package/dist/es/standards-sdk.es124.js +2 -1117
  122. package/dist/es/standards-sdk.es124.js.map +1 -1
  123. package/dist/es/standards-sdk.es125.js +215 -188
  124. package/dist/es/standards-sdk.es125.js.map +1 -1
  125. package/dist/es/standards-sdk.es126.js +1055 -1482
  126. package/dist/es/standards-sdk.es126.js.map +1 -1
  127. package/dist/es/standards-sdk.es127.js +306 -1138
  128. package/dist/es/standards-sdk.es127.js.map +1 -1
  129. package/dist/es/standards-sdk.es128.js +419 -14
  130. package/dist/es/standards-sdk.es128.js.map +1 -1
  131. package/dist/es/standards-sdk.es129.js +350 -82
  132. package/dist/es/standards-sdk.es129.js.map +1 -1
  133. package/dist/es/standards-sdk.es13.js +1 -1
  134. package/dist/es/standards-sdk.es130.js +1107 -72
  135. package/dist/es/standards-sdk.es130.js.map +1 -1
  136. package/dist/es/standards-sdk.es131.js +181 -845
  137. package/dist/es/standards-sdk.es131.js.map +1 -1
  138. package/dist/es/standards-sdk.es132.js +1558 -51
  139. package/dist/es/standards-sdk.es132.js.map +1 -1
  140. package/dist/es/standards-sdk.es133.js +1236 -159
  141. package/dist/es/standards-sdk.es133.js.map +1 -1
  142. package/dist/es/standards-sdk.es134.js +17 -7
  143. package/dist/es/standards-sdk.es134.js.map +1 -1
  144. package/dist/es/standards-sdk.es135.js +79 -78
  145. package/dist/es/standards-sdk.es135.js.map +1 -1
  146. package/dist/es/standards-sdk.es136.js +75 -59
  147. package/dist/es/standards-sdk.es136.js.map +1 -1
  148. package/dist/es/standards-sdk.es137.js +893 -30
  149. package/dist/es/standards-sdk.es137.js.map +1 -1
  150. package/dist/es/standards-sdk.es138.js +60 -34
  151. package/dist/es/standards-sdk.es138.js.map +1 -1
  152. package/dist/es/standards-sdk.es139.js +159 -28
  153. package/dist/es/standards-sdk.es139.js.map +1 -1
  154. package/dist/es/standards-sdk.es14.js +1 -1
  155. package/dist/es/standards-sdk.es140.js +7 -138
  156. package/dist/es/standards-sdk.es140.js.map +1 -1
  157. package/dist/es/standards-sdk.es141.js +80 -36
  158. package/dist/es/standards-sdk.es141.js.map +1 -1
  159. package/dist/es/standards-sdk.es142.js +58 -49
  160. package/dist/es/standards-sdk.es142.js.map +1 -1
  161. package/dist/es/standards-sdk.es143.js +30 -84
  162. package/dist/es/standards-sdk.es143.js.map +1 -1
  163. package/dist/es/standards-sdk.es144.js +34 -12320
  164. package/dist/es/standards-sdk.es144.js.map +1 -1
  165. package/dist/es/standards-sdk.es145.js +28 -17
  166. package/dist/es/standards-sdk.es145.js.map +1 -1
  167. package/dist/es/standards-sdk.es146.js +118 -152
  168. package/dist/es/standards-sdk.es146.js.map +1 -1
  169. package/dist/es/standards-sdk.es147.js +34 -314
  170. package/dist/es/standards-sdk.es147.js.map +1 -1
  171. package/dist/es/standards-sdk.es148.js +12426 -290
  172. package/dist/es/standards-sdk.es148.js.map +1 -1
  173. package/dist/es/standards-sdk.es149.js +231 -442
  174. package/dist/es/standards-sdk.es149.js.map +1 -1
  175. package/dist/es/standards-sdk.es15.js +1 -1
  176. package/dist/es/standards-sdk.es150.js +142 -301
  177. package/dist/es/standards-sdk.es150.js.map +1 -1
  178. package/dist/es/standards-sdk.es151.js +310 -64
  179. package/dist/es/standards-sdk.es151.js.map +1 -1
  180. package/dist/es/standards-sdk.es152.js +332 -158
  181. package/dist/es/standards-sdk.es152.js.map +1 -1
  182. package/dist/es/standards-sdk.es153.js +441 -210
  183. package/dist/es/standards-sdk.es153.js.map +1 -1
  184. package/dist/es/standards-sdk.es154.js +314 -222
  185. package/dist/es/standards-sdk.es154.js.map +1 -1
  186. package/dist/es/standards-sdk.es155.js +65 -108
  187. package/dist/es/standards-sdk.es155.js.map +1 -1
  188. package/dist/es/standards-sdk.es156.js +14 -123
  189. package/dist/es/standards-sdk.es156.js.map +1 -1
  190. package/dist/es/standards-sdk.es157.js +60 -148
  191. package/dist/es/standards-sdk.es157.js.map +1 -1
  192. package/dist/es/standards-sdk.es158.js +47 -176
  193. package/dist/es/standards-sdk.es158.js.map +1 -1
  194. package/dist/es/standards-sdk.es159.js +65 -120
  195. package/dist/es/standards-sdk.es159.js.map +1 -1
  196. package/dist/es/standards-sdk.es16.js +5 -5
  197. package/dist/es/standards-sdk.es160.js +147 -306
  198. package/dist/es/standards-sdk.es160.js.map +1 -1
  199. package/dist/es/standards-sdk.es161.js +205 -242
  200. package/dist/es/standards-sdk.es161.js.map +1 -1
  201. package/dist/es/standards-sdk.es162.js +233 -110
  202. package/dist/es/standards-sdk.es162.js.map +1 -1
  203. package/dist/es/standards-sdk.es163.js +84 -78
  204. package/dist/es/standards-sdk.es163.js.map +1 -1
  205. package/dist/es/standards-sdk.es164.js +129 -0
  206. package/dist/es/standards-sdk.es164.js.map +1 -0
  207. package/dist/es/standards-sdk.es165.js +164 -0
  208. package/dist/es/standards-sdk.es165.js.map +1 -0
  209. package/dist/es/standards-sdk.es166.js +188 -0
  210. package/dist/es/standards-sdk.es166.js.map +1 -0
  211. package/dist/es/standards-sdk.es167.js +142 -0
  212. package/dist/es/standards-sdk.es167.js.map +1 -0
  213. package/dist/es/standards-sdk.es168.js +334 -0
  214. package/dist/es/standards-sdk.es168.js.map +1 -0
  215. package/dist/es/standards-sdk.es169.js +262 -0
  216. package/dist/es/standards-sdk.es169.js.map +1 -0
  217. package/dist/es/standards-sdk.es170.js +119 -0
  218. package/dist/es/standards-sdk.es170.js.map +1 -0
  219. package/dist/es/standards-sdk.es18.js +12 -12
  220. package/dist/es/standards-sdk.es19.js +9 -9
  221. package/dist/es/standards-sdk.es2.js +2 -2
  222. package/dist/es/standards-sdk.es20.js +1 -1
  223. package/dist/es/standards-sdk.es21.js +1 -1
  224. package/dist/es/standards-sdk.es22.js +1 -1
  225. package/dist/es/standards-sdk.es23.js +1 -1
  226. package/dist/es/standards-sdk.es24.js +1 -1
  227. package/dist/es/standards-sdk.es25.js +1 -1
  228. package/dist/es/standards-sdk.es26.js +1 -1
  229. package/dist/es/standards-sdk.es27.js +12 -12
  230. package/dist/es/standards-sdk.es30.js +2 -2
  231. package/dist/es/standards-sdk.es31.js +4 -4
  232. package/dist/es/standards-sdk.es32.js +1 -1
  233. package/dist/es/standards-sdk.es35.js +6 -6
  234. package/dist/es/standards-sdk.es36.js +4 -4
  235. package/dist/es/standards-sdk.es37.js +2 -2
  236. package/dist/es/standards-sdk.es38.js +2 -2
  237. package/dist/es/standards-sdk.es39.js +1 -1
  238. package/dist/es/standards-sdk.es4.js +2 -2
  239. package/dist/es/standards-sdk.es40.js +1 -1
  240. package/dist/es/standards-sdk.es41.js +2 -2
  241. package/dist/es/standards-sdk.es46.js +1 -1
  242. package/dist/es/standards-sdk.es5.js +2 -2
  243. package/dist/es/standards-sdk.es51.js +1 -1
  244. package/dist/es/standards-sdk.es53.js +1 -1
  245. package/dist/es/standards-sdk.es56.js +2 -2
  246. package/dist/es/standards-sdk.es58.js +1 -1
  247. package/dist/es/standards-sdk.es59.js +1 -1
  248. package/dist/es/standards-sdk.es6.js +2 -2
  249. package/dist/es/standards-sdk.es60.js +7 -7
  250. package/dist/es/standards-sdk.es62.js +1 -1
  251. package/dist/es/standards-sdk.es64.js +2 -2
  252. package/dist/es/standards-sdk.es65.js +3 -3
  253. package/dist/es/standards-sdk.es68.js +2 -2
  254. package/dist/es/standards-sdk.es69.js +3 -3
  255. package/dist/es/standards-sdk.es7.js +1 -1
  256. package/dist/es/standards-sdk.es70.js +2 -2
  257. package/dist/es/standards-sdk.es71.js +1 -1
  258. package/dist/es/standards-sdk.es74.js +2 -2
  259. package/dist/es/standards-sdk.es76.js +2 -2
  260. package/dist/es/standards-sdk.es77.js +4 -4
  261. package/dist/es/standards-sdk.es78.js +1 -1
  262. package/dist/es/standards-sdk.es81.js +1 -1
  263. package/dist/es/standards-sdk.es82.js +2 -2
  264. package/dist/es/standards-sdk.es83.js +4 -4
  265. package/dist/es/standards-sdk.es87.js +3 -3
  266. package/dist/es/standards-sdk.es89.js +2 -2
  267. package/dist/es/standards-sdk.es9.js +2 -2
  268. package/dist/es/standards-sdk.es91.js +1 -1
  269. package/dist/es/standards-sdk.es92.js +3 -3
  270. package/dist/es/standards-sdk.es94.js +2 -2
  271. package/dist/es/standards-sdk.es96.js +2 -2
  272. package/dist/es/standards-sdk.es97.js +1 -1
  273. package/dist/es/standards-sdk.es99.js +1 -1
  274. package/dist/es/utils/crypto-abstraction.d.ts.map +1 -1
  275. package/package.json +5 -4
@@ -1,164 +1,76 @@
1
- import { resolveResponseSchema, registrationQuoteResponseSchema, registerAgentResponseSchema, registrationProgressResponseSchema, uaidValidationResponseSchema, uaidConnectionStatusSchema, dashboardStatsResponseSchema } from "./standards-sdk.es127.js";
2
- import { serialiseAgentRegistrationRequest, DEFAULT_PROGRESS_INTERVAL_MS, DEFAULT_PROGRESS_TIMEOUT_MS, createAbortError } from "./standards-sdk.es154.js";
3
- import { RegistryBrokerError } from "./standards-sdk.es128.js";
4
- async function resolveUaid(client, uaid) {
5
- const raw = await client.requestJson(
6
- `/resolve/${encodeURIComponent(uaid)}`,
7
- {
8
- method: "GET"
9
- }
10
- );
11
- return client.parseWithSchema(
12
- raw,
13
- resolveResponseSchema,
14
- "resolve UAID response"
15
- );
1
+ import BigNumber from "bignumber.js";
2
+ const TINYBAR_DIVISOR = 1e8;
3
+ function safePositiveTransfers(transfers) {
4
+ if (!Array.isArray(transfers)) {
5
+ return [];
6
+ }
7
+ return transfers.filter(
8
+ (transfer) => typeof transfer.amount === "number" && transfer.amount > 0
9
+ ).map((transfer) => ({
10
+ account: transfer.account,
11
+ amountTinybar: transfer.amount
12
+ }));
16
13
  }
17
- async function getRegistrationQuote(client, payload) {
18
- const raw = await client.requestJson("/register/quote", {
19
- method: "POST",
20
- body: serialiseAgentRegistrationRequest(payload),
21
- headers: { "content-type": "application/json" }
22
- });
23
- return client.parseWithSchema(
24
- raw,
25
- registrationQuoteResponseSchema,
26
- "registration quote response"
14
+ function resolvePayerDebitTinybar(transfers, payerAccountId) {
15
+ if (!Array.isArray(transfers)) {
16
+ return null;
17
+ }
18
+ const payerDebit = transfers.find(
19
+ (transfer) => transfer.account === payerAccountId && typeof transfer.amount === "number" && transfer.amount < 0
27
20
  );
21
+ if (!payerDebit || typeof payerDebit.amount !== "number") {
22
+ return null;
23
+ }
24
+ return Math.abs(payerDebit.amount);
28
25
  }
29
- async function updateAgent(client, uaid, payload) {
30
- const raw = await client.requestJson(
31
- `/register/${encodeURIComponent(uaid)}`,
32
- {
33
- method: "PUT",
34
- body: serialiseAgentRegistrationRequest(payload),
35
- headers: { "content-type": "application/json" }
36
- }
37
- );
38
- return client.parseWithSchema(
39
- raw,
40
- registerAgentResponseSchema,
41
- "update agent response"
42
- );
26
+ function toHbarString(tinybar) {
27
+ return new BigNumber(tinybar).dividedBy(TINYBAR_DIVISOR).toFixed();
43
28
  }
44
- async function getRegistrationProgress(client, attemptId) {
45
- const normalisedAttemptId = attemptId.trim();
46
- if (!normalisedAttemptId) {
47
- throw new Error("attemptId is required");
29
+ function fallbackFeeTinybar(chargedTxFee) {
30
+ if (typeof chargedTxFee !== "number" || !Number.isFinite(chargedTxFee)) {
31
+ return null;
48
32
  }
49
- try {
50
- const raw = await client.requestJson(
51
- `/register/progress/${encodeURIComponent(normalisedAttemptId)}`,
52
- { method: "GET" }
53
- );
54
- const parsed = client.parseWithSchema(
55
- raw,
56
- registrationProgressResponseSchema,
57
- "registration progress response"
58
- );
59
- return parsed.progress;
60
- } catch (error) {
61
- if (error instanceof RegistryBrokerError && error.status === 404) {
62
- return null;
63
- }
64
- throw error;
33
+ if (chargedTxFee <= 0) {
34
+ return null;
65
35
  }
36
+ return chargedTxFee;
66
37
  }
67
- async function waitForRegistrationCompletion(client, attemptId, options = {}) {
68
- const normalisedAttemptId = attemptId.trim();
69
- if (!normalisedAttemptId) {
70
- throw new Error("attemptId is required");
71
- }
72
- const interval = Math.max(
73
- 250,
74
- options.intervalMs ?? DEFAULT_PROGRESS_INTERVAL_MS
38
+ function computeInscriptionCostSummary(params) {
39
+ const { txn, payerAccountId } = params;
40
+ const positiveTransfers = safePositiveTransfers(txn.transfers);
41
+ const payerDebitTinybar = resolvePayerDebitTinybar(
42
+ txn.transfers,
43
+ payerAccountId
75
44
  );
76
- const timeoutMs = options.timeoutMs ?? DEFAULT_PROGRESS_TIMEOUT_MS;
77
- const throwOnFailure = options.throwOnFailure ?? true;
78
- const signal = options.signal;
79
- const startedAt = Date.now();
80
- while (true) {
81
- if (signal?.aborted) {
82
- throw createAbortError();
83
- }
84
- const progress = await client.getRegistrationProgress(normalisedAttemptId);
85
- if (progress) {
86
- options.onProgress?.(progress);
87
- if (progress.status === "completed") {
88
- return progress;
89
- }
90
- if (progress.status === "partial" || progress.status === "failed") {
91
- if (throwOnFailure) {
92
- throw new RegistryBrokerError(
93
- "Registration did not complete successfully",
94
- {
95
- status: 409,
96
- statusText: progress.status,
97
- body: progress
98
- }
99
- );
100
- }
101
- return progress;
102
- }
103
- }
104
- if (Date.now() - startedAt >= timeoutMs) {
105
- throw new Error(
106
- `Registration progress polling timed out after ${timeoutMs}ms`
107
- );
108
- }
109
- await client.delay(interval, signal);
45
+ const transferOutflowTinybar = payerDebitTinybar ?? positiveTransfers.reduce((sum, t) => sum + t.amountTinybar, 0);
46
+ const chargedFeeTinybar = fallbackFeeTinybar(txn.charged_tx_fee);
47
+ const resolvedTotalTinybar = transferOutflowTinybar > 0 ? transferOutflowTinybar : chargedFeeTinybar;
48
+ if (!resolvedTotalTinybar || resolvedTotalTinybar <= 0) {
49
+ return null;
110
50
  }
111
- }
112
- async function validateUaid(client, uaid) {
113
- const raw = await client.requestJson(
114
- `/uaids/validate/${encodeURIComponent(uaid)}`,
51
+ const totalCostHbar = toHbarString(resolvedTotalTinybar);
52
+ const breakdownTransfers = positiveTransfers.length > 0 ? positiveTransfers.map((transfer) => ({
53
+ to: transfer.account,
54
+ amount: toHbarString(transfer.amountTinybar),
55
+ description: `HBAR transfer from ${payerAccountId}`
56
+ })) : [
115
57
  {
116
- method: "GET"
58
+ to: "Hedera network",
59
+ amount: totalCostHbar,
60
+ description: `Transaction fee debited from ${payerAccountId}`
117
61
  }
118
- );
119
- return client.parseWithSchema(
120
- raw,
121
- uaidValidationResponseSchema,
122
- "UAID validation response"
123
- );
124
- }
125
- async function getUaidConnectionStatus(client, uaid) {
126
- const raw = await client.requestJson(
127
- `/uaids/connections/${encodeURIComponent(uaid)}/status`,
128
- {
129
- method: "GET"
62
+ ];
63
+ return {
64
+ totalTinybar: resolvedTotalTinybar,
65
+ summary: {
66
+ totalCostHbar,
67
+ breakdown: {
68
+ transfers: breakdownTransfers
69
+ }
130
70
  }
131
- );
132
- return client.parseWithSchema(
133
- raw,
134
- uaidConnectionStatusSchema,
135
- "UAID connection status"
136
- );
137
- }
138
- async function closeUaidConnection(client, uaid) {
139
- await client.request(`/uaids/connections/${encodeURIComponent(uaid)}`, {
140
- method: "DELETE"
141
- });
142
- }
143
- async function dashboardStats(client) {
144
- const raw = await client.requestJson("/dashboard/stats", {
145
- method: "GET"
146
- });
147
- return client.parseWithSchema(
148
- raw,
149
- dashboardStatsResponseSchema,
150
- "dashboard stats response"
151
- );
71
+ };
152
72
  }
153
73
  export {
154
- closeUaidConnection,
155
- dashboardStats,
156
- getRegistrationProgress,
157
- getRegistrationQuote,
158
- getUaidConnectionStatus,
159
- resolveUaid,
160
- updateAgent,
161
- validateUaid,
162
- waitForRegistrationCompletion
74
+ computeInscriptionCostSummary
163
75
  };
164
76
  //# sourceMappingURL=standards-sdk.es157.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es157.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
+ {"version":3,"file":"standards-sdk.es157.js","sources":["../../src/inscribe/inscription-cost.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\nimport { Transaction } from '../services/types';\nimport { QuoteResult, InscriptionCostSummary } from './types';\n\nconst TINYBAR_DIVISOR = 100000000;\n\ntype MirrorNodeTransactionLike = Pick<\n Transaction,\n 'charged_tx_fee' | 'transfers'\n>;\n\ntype CostTransfer = QuoteResult['breakdown']['transfers'][number];\n\nfunction safePositiveTransfers(\n transfers: Transaction['transfers'] | undefined,\n): Array<{ account: string; amountTinybar: number }> {\n if (!Array.isArray(transfers)) {\n return [];\n }\n\n return transfers\n .filter(\n transfer => typeof transfer.amount === 'number' && transfer.amount > 0,\n )\n .map(transfer => ({\n account: transfer.account,\n amountTinybar: transfer.amount,\n }));\n}\n\nfunction resolvePayerDebitTinybar(\n transfers: Transaction['transfers'] | undefined,\n payerAccountId: string,\n): number | null {\n if (!Array.isArray(transfers)) {\n return null;\n }\n\n const payerDebit = transfers.find(\n transfer =>\n transfer.account === payerAccountId &&\n typeof transfer.amount === 'number' &&\n transfer.amount < 0,\n );\n\n if (!payerDebit || typeof payerDebit.amount !== 'number') {\n return null;\n }\n\n return Math.abs(payerDebit.amount);\n}\n\nfunction toHbarString(tinybar: number): string {\n return new BigNumber(tinybar).dividedBy(TINYBAR_DIVISOR).toFixed();\n}\n\nfunction fallbackFeeTinybar(chargedTxFee: unknown): number | null {\n if (typeof chargedTxFee !== 'number' || !Number.isFinite(chargedTxFee)) {\n return null;\n }\n if (chargedTxFee <= 0) {\n return null;\n }\n return chargedTxFee;\n}\n\nexport function computeInscriptionCostSummary(params: {\n txn: MirrorNodeTransactionLike;\n payerAccountId: string;\n}): { summary: InscriptionCostSummary; totalTinybar: number } | null {\n const { txn, payerAccountId } = params;\n\n const positiveTransfers = safePositiveTransfers(txn.transfers);\n const payerDebitTinybar = resolvePayerDebitTinybar(\n txn.transfers,\n payerAccountId,\n );\n\n const transferOutflowTinybar =\n payerDebitTinybar ??\n positiveTransfers.reduce((sum, t) => sum + t.amountTinybar, 0);\n const chargedFeeTinybar = fallbackFeeTinybar(txn.charged_tx_fee);\n\n const resolvedTotalTinybar =\n transferOutflowTinybar > 0 ? transferOutflowTinybar : chargedFeeTinybar;\n\n if (!resolvedTotalTinybar || resolvedTotalTinybar <= 0) {\n return null;\n }\n\n const totalCostHbar = toHbarString(resolvedTotalTinybar);\n\n const breakdownTransfers: CostTransfer[] =\n positiveTransfers.length > 0\n ? positiveTransfers.map(transfer => ({\n to: transfer.account,\n amount: toHbarString(transfer.amountTinybar),\n description: `HBAR transfer from ${payerAccountId}`,\n }))\n : [\n {\n to: 'Hedera network',\n amount: totalCostHbar,\n description: `Transaction fee debited from ${payerAccountId}`,\n },\n ];\n\n return {\n totalTinybar: resolvedTotalTinybar,\n summary: {\n totalCostHbar,\n breakdown: {\n transfers: breakdownTransfers,\n },\n },\n };\n}\n"],"names":[],"mappings":";AAIA,MAAM,kBAAkB;AASxB,SAAS,sBACP,WACmD;AACnD,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,WAAO,CAAA;AAAA,EACT;AAEA,SAAO,UACJ;AAAA,IACC,cAAY,OAAO,SAAS,WAAW,YAAY,SAAS,SAAS;AAAA,EAAA,EAEtE,IAAI,CAAA,cAAa;AAAA,IAChB,SAAS,SAAS;AAAA,IAClB,eAAe,SAAS;AAAA,EAAA,EACxB;AACN;AAEA,SAAS,yBACP,WACA,gBACe;AACf,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,UAAU;AAAA,IAC3B,CAAA,aACE,SAAS,YAAY,kBACrB,OAAO,SAAS,WAAW,YAC3B,SAAS,SAAS;AAAA,EAAA;AAGtB,MAAI,CAAC,cAAc,OAAO,WAAW,WAAW,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,IAAI,WAAW,MAAM;AACnC;AAEA,SAAS,aAAa,SAAyB;AAC7C,SAAO,IAAI,UAAU,OAAO,EAAE,UAAU,eAAe,EAAE,QAAA;AAC3D;AAEA,SAAS,mBAAmB,cAAsC;AAChE,MAAI,OAAO,iBAAiB,YAAY,CAAC,OAAO,SAAS,YAAY,GAAG;AACtE,WAAO;AAAA,EACT;AACA,MAAI,gBAAgB,GAAG;AACrB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,8BAA8B,QAGuB;AACnE,QAAM,EAAE,KAAK,eAAA,IAAmB;AAEhC,QAAM,oBAAoB,sBAAsB,IAAI,SAAS;AAC7D,QAAM,oBAAoB;AAAA,IACxB,IAAI;AAAA,IACJ;AAAA,EAAA;AAGF,QAAM,yBACJ,qBACA,kBAAkB,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,eAAe,CAAC;AAC/D,QAAM,oBAAoB,mBAAmB,IAAI,cAAc;AAE/D,QAAM,uBACJ,yBAAyB,IAAI,yBAAyB;AAExD,MAAI,CAAC,wBAAwB,wBAAwB,GAAG;AACtD,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,aAAa,oBAAoB;AAEvD,QAAM,qBACJ,kBAAkB,SAAS,IACvB,kBAAkB,IAAI,CAAA,cAAa;AAAA,IACjC,IAAI,SAAS;AAAA,IACb,QAAQ,aAAa,SAAS,aAAa;AAAA,IAC3C,aAAa,sBAAsB,cAAc;AAAA,EAAA,EACjD,IACF;AAAA,IACE;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa,gCAAgC,cAAc;AAAA,IAAA;AAAA,EAC7D;AAGR,SAAO;AAAA,IACL,cAAc;AAAA,IACd,SAAS;AAAA,MACP;AAAA,MACA,WAAW;AAAA,QACT,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,EACF;AAEJ;"}
@@ -1,188 +1,59 @@
1
- import { Buffer } from "buffer";
2
- import { ledgerChallengeResponseSchema, ledgerVerifyResponseSchema } from "./standards-sdk.es127.js";
3
- import { canonicalizeLedgerNetwork } from "./standards-sdk.es129.js";
4
- import { createPrivateKeySignerAsync } from "./standards-sdk.es130.js";
5
- async function loadViemAccount(privateKey) {
6
- try {
7
- const viem = await import("viem/accounts");
8
- return viem.privateKeyToAccount(privateKey);
9
- } catch (error) {
10
- const err = new Error(
11
- 'EVM ledger authentication requires the optional dependency "viem". Install it to use evmPrivateKey flows.'
12
- );
13
- err.cause = error;
14
- throw err;
15
- }
16
- }
17
- async function resolveLedgerAuthSignature(message, options) {
18
- if (typeof options.sign === "function") {
19
- const result = await options.sign(message);
20
- if (!result || typeof result.signature !== "string" || result.signature.length === 0) {
21
- throw new Error("Custom ledger signer failed to produce a signature.");
1
+ const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
2
+ const BASE = 58;
3
+ function base58Encode(bytes) {
4
+ if (bytes.length === 0) return "";
5
+ let zeros = 0;
6
+ while (zeros < bytes.length && bytes[zeros] === 0) zeros++;
7
+ if (zeros === bytes.length) return "1".repeat(zeros);
8
+ const digits = [0];
9
+ for (let i = zeros; i < bytes.length; i++) {
10
+ let carry = bytes[i];
11
+ for (let j = 0; j < digits.length; j++) {
12
+ const val = (digits[j] << 8) + carry;
13
+ digits[j] = val % BASE;
14
+ carry = val / BASE | 0;
22
15
  }
23
- return result;
24
- }
25
- if (!options.signer || typeof options.signer.sign !== "function") {
26
- throw new Error(
27
- "Ledger authentication requires a Hedera Signer or custom sign function."
28
- );
29
- }
30
- const payload = Buffer.from(message, "utf8");
31
- const signatures = await options.signer.sign([payload]);
32
- const signatureEntry = signatures?.[0];
33
- if (!signatureEntry) {
34
- throw new Error("Signer did not return any signatures.");
35
- }
36
- let derivedPublicKey;
37
- if (signatureEntry.publicKey) {
38
- derivedPublicKey = signatureEntry.publicKey.toString();
39
- } else if (typeof options.signer.getAccountKey === "function") {
40
- const accountKey = await options.signer.getAccountKey();
41
- if (accountKey && typeof accountKey.toString === "function") {
42
- derivedPublicKey = accountKey.toString();
43
- }
44
- }
45
- return {
46
- signature: Buffer.from(signatureEntry.signature).toString("base64"),
47
- signatureKind: "raw",
48
- publicKey: derivedPublicKey
49
- };
50
- }
51
- async function createLedgerChallenge(client, payload) {
52
- const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);
53
- const network = resolvedNetwork.kind === "hedera" ? resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical : resolvedNetwork.canonical;
54
- const raw = await client.requestJson("/auth/ledger/challenge", {
55
- method: "POST",
56
- headers: { "content-type": "application/json" },
57
- body: {
58
- accountId: payload.accountId,
59
- network
16
+ while (carry > 0) {
17
+ digits.push(carry % BASE);
18
+ carry = carry / BASE | 0;
60
19
  }
61
- });
62
- return client.parseWithSchema(
63
- raw,
64
- ledgerChallengeResponseSchema,
65
- "ledger challenge response"
66
- );
67
- }
68
- async function verifyLedgerChallenge(client, payload) {
69
- const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);
70
- const network = resolvedNetwork.kind === "hedera" ? resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical : resolvedNetwork.canonical;
71
- const body = {
72
- challengeId: payload.challengeId,
73
- accountId: payload.accountId,
74
- network,
75
- signature: payload.signature
76
- };
77
- if (payload.signatureKind) {
78
- body.signatureKind = payload.signatureKind;
79
- }
80
- if (payload.publicKey) {
81
- body.publicKey = payload.publicKey;
82
- }
83
- if (typeof payload.expiresInMinutes === "number") {
84
- body.expiresInMinutes = payload.expiresInMinutes;
85
20
  }
86
- const raw = await client.requestJson("/auth/ledger/verify", {
87
- method: "POST",
88
- headers: { "content-type": "application/json" },
89
- body
90
- });
91
- const result = client.parseWithSchema(
92
- raw,
93
- ledgerVerifyResponseSchema,
94
- "ledger verification response"
95
- );
96
- client.setLedgerApiKey(result.key);
21
+ let result = "";
22
+ for (let i = 0; i < zeros; i++) result += "1";
23
+ for (let i = digits.length - 1; i >= 0; i--) result += ALPHABET[digits[i]];
97
24
  return result;
98
25
  }
99
- async function authenticateWithLedger(client, options) {
100
- const challenge = await client.createLedgerChallenge({
101
- accountId: options.accountId,
102
- network: options.network
103
- });
104
- const signed = await resolveLedgerAuthSignature(challenge.message, options);
105
- const verification = await client.verifyLedgerChallenge({
106
- challengeId: challenge.challengeId,
107
- accountId: options.accountId,
108
- network: options.network,
109
- signature: signed.signature,
110
- signatureKind: signed.signatureKind,
111
- publicKey: signed.publicKey,
112
- expiresInMinutes: options.expiresInMinutes
113
- });
114
- return verification;
115
- }
116
- async function authenticateWithLedgerCredentials(client, options) {
117
- const {
118
- accountId,
119
- network,
120
- signer,
121
- sign,
122
- hederaPrivateKey,
123
- evmPrivateKey,
124
- expiresInMinutes,
125
- setAccountHeader = true,
126
- label,
127
- logger
128
- } = options;
129
- const resolvedNetwork = canonicalizeLedgerNetwork(network);
130
- const labelSuffix = label ? ` for ${label}` : "";
131
- const networkPayload = resolvedNetwork.canonical;
132
- const authOptions = {
133
- accountId,
134
- network: networkPayload,
135
- expiresInMinutes
136
- };
137
- if (sign) {
138
- authOptions.sign = sign;
139
- } else if (signer) {
140
- authOptions.signer = signer;
141
- } else if (hederaPrivateKey) {
142
- if (resolvedNetwork.kind !== "hedera" || !resolvedNetwork.hederaNetwork) {
143
- throw new Error(
144
- "hederaPrivateKey can only be used with hedera:mainnet or hedera:testnet networks."
145
- );
26
+ function base58Decode(text) {
27
+ if (text.length === 0) return new Uint8Array(0);
28
+ let zeros = 0;
29
+ while (zeros < text.length && text[zeros] === "1") zeros++;
30
+ const b256 = [];
31
+ for (let i = zeros; i < text.length; i++) {
32
+ const ch = text[i];
33
+ const val = ALPHABET.indexOf(ch);
34
+ if (val === -1) throw new Error("Invalid Base58 character");
35
+ let carry = val;
36
+ for (let j = 0; j < b256.length; j++) {
37
+ const x = b256[j] * BASE + carry;
38
+ b256[j] = x & 255;
39
+ carry = x >> 8;
146
40
  }
147
- authOptions.signer = await createPrivateKeySignerAsync({
148
- accountId,
149
- privateKey: hederaPrivateKey,
150
- network: resolvedNetwork.hederaNetwork
151
- });
152
- } else if (evmPrivateKey) {
153
- if (resolvedNetwork.kind !== "evm") {
154
- throw new Error(
155
- "evmPrivateKey can only be used with CAIP-2 EVM networks (eip155:<chainId>)."
156
- );
41
+ while (carry > 0) {
42
+ b256.push(carry & 255);
43
+ carry >>= 8;
157
44
  }
158
- const formattedKey = evmPrivateKey.startsWith("0x") ? evmPrivateKey : `0x${evmPrivateKey}`;
159
- const account = await loadViemAccount(formattedKey);
160
- authOptions.sign = async (message) => ({
161
- signature: await account.signMessage({ message }),
162
- signatureKind: "evm",
163
- publicKey: account.publicKey
164
- });
165
- } else {
166
- throw new Error(
167
- "Provide a signer, sign function, hederaPrivateKey, or evmPrivateKey to authenticate with the ledger."
168
- );
169
- }
170
- logger?.info?.(
171
- `Authenticating ledger account ${accountId} (${resolvedNetwork.canonical})${labelSuffix}...`
172
- );
173
- const verification = await client.authenticateWithLedger(authOptions);
174
- if (setAccountHeader) {
175
- client.setDefaultHeader("x-account-id", verification.accountId);
176
45
  }
177
- logger?.info?.(
178
- `Ledger authentication complete${labelSuffix}. Issued key prefix: ${verification.apiKey.prefix}…${verification.apiKey.lastFour}`
179
- );
180
- return verification;
46
+ for (let i = 0; i < zeros; i++) b256.push(0);
47
+ b256.reverse();
48
+ return Uint8Array.from(b256);
49
+ }
50
+ function multibaseB58btcDecode(zText) {
51
+ if (!zText.startsWith("z")) throw new Error("Invalid multibase base58btc");
52
+ return base58Decode(zText.slice(1));
181
53
  }
182
54
  export {
183
- authenticateWithLedger,
184
- authenticateWithLedgerCredentials,
185
- createLedgerChallenge,
186
- verifyLedgerChallenge
55
+ base58Decode,
56
+ base58Encode,
57
+ multibaseB58btcDecode
187
58
  };
188
59
  //# sourceMappingURL=standards-sdk.es158.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es158.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 type { RegistryBrokerClient } from './base-client';\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\nexport async function createLedgerChallenge(\n client: 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 client.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 client.parseWithSchema(\n raw,\n ledgerChallengeResponseSchema,\n 'ledger challenge response',\n );\n}\n\nexport async function verifyLedgerChallenge(\n client: 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 client.requestJson<JsonValue>('/auth/ledger/verify', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body,\n });\n\n const result = client.parseWithSchema(\n raw,\n ledgerVerifyResponseSchema,\n 'ledger verification response',\n );\n\n client.setLedgerApiKey(result.key);\n return result;\n}\n\nexport async function authenticateWithLedger(\n client: RegistryBrokerClient,\n options: LedgerAuthenticationOptions,\n): Promise<LedgerVerifyResponse> {\n const challenge = await client.createLedgerChallenge({\n accountId: options.accountId,\n network: options.network,\n });\n const signed = await resolveLedgerAuthSignature(challenge.message, options);\n const verification = await client.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\nexport async function authenticateWithLedgerCredentials(\n client: 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 client.authenticateWithLedger(authOptions);\n if (setAccountHeader) {\n client.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":";;;;AAqBA,eAAe,gBAAgB,YAG5B;AACD,MAAI;AACF,UAAM,OAAO,MAAM,OAAO,eAAe;AACzC,WAAO,KAAK,oBAAoB,UAAU;AAAA,EAC5C,SAAS,OAAO;AACd,UAAM,MAAM,IAAI;AAAA,MACd;AAAA,IAAA;AAED,QAA4B,QAAQ;AACrC,UAAM;AAAA,EACR;AACF;AAEA,eAAe,2BACb,SACA,SAC2C;AAC3C,MAAI,OAAO,QAAQ,SAAS,YAAY;AACtC,UAAM,SAAS,MAAM,QAAQ,KAAK,OAAO;AACzC,QACE,CAAC,UACD,OAAO,OAAO,cAAc,YAC5B,OAAO,UAAU,WAAW,GAC5B;AACA,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AACA,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ,UAAU,OAAO,QAAQ,OAAO,SAAS,YAAY;AAChE,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,UAAU,OAAO,KAAK,SAAS,MAAM;AAC3C,QAAM,aAAgC,MAAM,QAAQ,OAAO,KAAK,CAAC,OAAO,CAAC;AACzE,QAAM,iBAAiB,aAAa,CAAC;AACrC,MAAI,CAAC,gBAAgB;AACnB,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AAEA,MAAI;AACJ,MAAI,eAAe,WAAW;AAC5B,uBAAmB,eAAe,UAAU,SAAA;AAAA,EAC9C,WAAW,OAAO,QAAQ,OAAO,kBAAkB,YAAY;AAC7D,UAAM,aAAa,MAAM,QAAQ,OAAO,cAAA;AACxC,QAAI,cAAc,OAAO,WAAW,aAAa,YAAY;AAC3D,yBAAmB,WAAW,SAAA;AAAA,IAChC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,WAAW,OAAO,KAAK,eAAe,SAAS,EAAE,SAAS,QAAQ;AAAA,IAClE,eAAe;AAAA,IACf,WAAW;AAAA,EAAA;AAEf;AAEA,eAAsB,sBACpB,QACA,SACkC;AAClC,QAAM,kBAAkB,0BAA0B,QAAQ,OAAO;AACjE,QAAM,UACJ,gBAAgB,SAAS,WACpB,gBAAgB,iBAAiB,gBAAgB,YAClD,gBAAgB;AACtB,QAAM,MAAM,MAAM,OAAO,YAAuB,0BAA0B;AAAA,IACxE,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAC3B,MAAM;AAAA,MACJ,WAAW,QAAQ;AAAA,MACnB;AAAA,IAAA;AAAA,EACF,CACD;AAED,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,sBACpB,QACA,SAC+B;AAC/B,QAAM,kBAAkB,0BAA0B,QAAQ,OAAO;AACjE,QAAM,UACJ,gBAAgB,SAAS,WACpB,gBAAgB,iBAAiB,gBAAgB,YAClD,gBAAgB;AACtB,QAAM,OAAmB;AAAA,IACvB,aAAa,QAAQ;AAAA,IACrB,WAAW,QAAQ;AAAA,IACnB;AAAA,IACA,WAAW,QAAQ;AAAA,EAAA;AAGrB,MAAI,QAAQ,eAAe;AACzB,SAAK,gBAAgB,QAAQ;AAAA,EAC/B;AACA,MAAI,QAAQ,WAAW;AACrB,SAAK,YAAY,QAAQ;AAAA,EAC3B;AACA,MAAI,OAAO,QAAQ,qBAAqB,UAAU;AAChD,SAAK,mBAAmB,QAAQ;AAAA,EAClC;AAEA,QAAM,MAAM,MAAM,OAAO,YAAuB,uBAAuB;AAAA,IACrE,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAC3B;AAAA,EAAA,CACD;AAED,QAAM,SAAS,OAAO;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,SAAO,gBAAgB,OAAO,GAAG;AACjC,SAAO;AACT;AAEA,eAAsB,uBACpB,QACA,SAC+B;AAC/B,QAAM,YAAY,MAAM,OAAO,sBAAsB;AAAA,IACnD,WAAW,QAAQ;AAAA,IACnB,SAAS,QAAQ;AAAA,EAAA,CAClB;AACD,QAAM,SAAS,MAAM,2BAA2B,UAAU,SAAS,OAAO;AAC1E,QAAM,eAAe,MAAM,OAAO,sBAAsB;AAAA,IACtD,aAAa,UAAU;AAAA,IACvB,WAAW,QAAQ;AAAA,IACnB,SAAS,QAAQ;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,eAAe,OAAO;AAAA,IACtB,WAAW,OAAO;AAAA,IAClB,kBAAkB,QAAQ;AAAA,EAAA,CAC3B;AACD,SAAO;AACT;AAEA,eAAsB,kCACpB,QACA,SAC+B;AAC/B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,kBAAkB,0BAA0B,OAAO;AACzD,QAAM,cAAc,QAAQ,QAAQ,KAAK,KAAK;AAE9C,QAAM,iBAAiB,gBAAgB;AAEvC,QAAM,cAA2C;AAAA,IAC/C;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EAAA;AAGF,MAAI,MAAM;AACR,gBAAY,OAAO;AAAA,EACrB,WAAW,QAAQ;AACjB,gBAAY,SAAS;AAAA,EACvB,WAAW,kBAAkB;AAC3B,QAAI,gBAAgB,SAAS,YAAY,CAAC,gBAAgB,eAAe;AACvE,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AACA,gBAAY,SAAS,MAAM,4BAA4B;AAAA,MACrD;AAAA,MACA,YAAY;AAAA,MACZ,SAAS,gBAAgB;AAAA,IAAA,CAC1B;AAAA,EACH,WAAW,eAAe;AACxB,QAAI,gBAAgB,SAAS,OAAO;AAClC,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,eAAe,cAAc,WAAW,IAAI,IAC7C,gBACA,KAAK,aAAa;AACvB,UAAM,UAAU,MAAM,gBAAgB,YAAY;AAClD,gBAAY,OAAO,OAAM,aAAY;AAAA,MACnC,WAAW,MAAM,QAAQ,YAAY,EAAE,SAAS;AAAA,MAChD,eAAe;AAAA,MACf,WAAW,QAAQ;AAAA,IAAA;AAAA,EAEvB,OAAO;AACL,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,UAAQ;AAAA,IACN,iCAAiC,SAAS,KAAK,gBAAgB,SAAS,IAAI,WAAW;AAAA,EAAA;AAEzF,QAAM,eAAe,MAAM,OAAO,uBAAuB,WAAW;AACpE,MAAI,kBAAkB;AACpB,WAAO,iBAAiB,gBAAgB,aAAa,SAAS;AAAA,EAChE;AACA,UAAQ;AAAA,IACN,iCAAiC,WAAW,wBAAwB,aAAa,OAAO,MAAM,IAAI,aAAa,OAAO,QAAQ;AAAA,EAAA;AAEhI,SAAO;AACT;"}
1
+ {"version":3,"file":"standards-sdk.es158.js","sources":["../../src/hcs-14/base58.ts"],"sourcesContent":["/**\n * Minimal Base58 encoder/decoder (Bitcoin alphabet) with no external dependencies.\n */\n\nconst ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nconst BASE = 58;\n\nfunction countLeadingZeros(bytes: Uint8Array): number {\n let zeros = 0;\n for (let i = 0; i < bytes.length && bytes[i] === 0; i++) {\n zeros++;\n }\n return zeros;\n}\n\nexport function base58Encode(bytes: Uint8Array): string {\n if (bytes.length === 0) return '';\n\n let zeros = 0;\n while (zeros < bytes.length && bytes[zeros] === 0) zeros++;\n\n if (zeros === bytes.length) return '1'.repeat(zeros);\n\n const digits: number[] = [0];\n for (let i = zeros; i < bytes.length; i++) {\n let carry = bytes[i];\n for (let j = 0; j < digits.length; j++) {\n const val = (digits[j] << 8) + carry;\n digits[j] = val % BASE;\n carry = (val / BASE) | 0;\n }\n while (carry > 0) {\n digits.push(carry % BASE);\n carry = (carry / BASE) | 0;\n }\n }\n\n let result = '';\n for (let i = 0; i < zeros; i++) result += '1';\n for (let i = digits.length - 1; i >= 0; i--) result += ALPHABET[digits[i]];\n return result;\n}\n\nexport function base58Decode(text: string): Uint8Array {\n if (text.length === 0) return new Uint8Array(0);\n\n let zeros = 0;\n while (zeros < text.length && text[zeros] === '1') zeros++;\n\n const b256: number[] = [];\n for (let i = zeros; i < text.length; i++) {\n const ch = text[i];\n const val = ALPHABET.indexOf(ch);\n if (val === -1) throw new Error('Invalid Base58 character');\n\n let carry = val;\n for (let j = 0; j < b256.length; j++) {\n const x = b256[j] * BASE + carry;\n b256[j] = x & 0xff;\n carry = x >> 8;\n }\n while (carry > 0) {\n b256.push(carry & 0xff);\n carry >>= 8;\n }\n }\n\n for (let i = 0; i < zeros; i++) b256.push(0);\n b256.reverse();\n return Uint8Array.from(b256);\n}\n\nexport function multibaseB58btcDecode(zText: string): Uint8Array {\n if (!zText.startsWith('z')) throw new Error('Invalid multibase base58btc');\n return base58Decode(zText.slice(1));\n}\n"],"names":[],"mappings":"AAIA,MAAM,WAAW;AACjB,MAAM,OAAO;AAUN,SAAS,aAAa,OAA2B;AACtD,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,MAAI,QAAQ;AACZ,SAAO,QAAQ,MAAM,UAAU,MAAM,KAAK,MAAM,EAAG;AAEnD,MAAI,UAAU,MAAM,OAAQ,QAAO,IAAI,OAAO,KAAK;AAEnD,QAAM,SAAmB,CAAC,CAAC;AAC3B,WAAS,IAAI,OAAO,IAAI,MAAM,QAAQ,KAAK;AACzC,QAAI,QAAQ,MAAM,CAAC;AACnB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,OAAO,OAAO,CAAC,KAAK,KAAK;AAC/B,aAAO,CAAC,IAAI,MAAM;AAClB,cAAS,MAAM,OAAQ;AAAA,IACzB;AACA,WAAO,QAAQ,GAAG;AAChB,aAAO,KAAK,QAAQ,IAAI;AACxB,cAAS,QAAQ,OAAQ;AAAA,IAC3B;AAAA,EACF;AAEA,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,OAAO,IAAK,WAAU;AAC1C,WAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,IAAK,WAAU,SAAS,OAAO,CAAC,CAAC;AACzE,SAAO;AACT;AAEO,SAAS,aAAa,MAA0B;AACrD,MAAI,KAAK,WAAW,EAAG,QAAO,IAAI,WAAW,CAAC;AAE9C,MAAI,QAAQ;AACZ,SAAO,QAAQ,KAAK,UAAU,KAAK,KAAK,MAAM,IAAK;AAEnD,QAAM,OAAiB,CAAA;AACvB,WAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,KAAK;AACxC,UAAM,KAAK,KAAK,CAAC;AACjB,UAAM,MAAM,SAAS,QAAQ,EAAE;AAC/B,QAAI,QAAQ,GAAI,OAAM,IAAI,MAAM,0BAA0B;AAE1D,QAAI,QAAQ;AACZ,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,IAAI,KAAK,CAAC,IAAI,OAAO;AAC3B,WAAK,CAAC,IAAI,IAAI;AACd,cAAQ,KAAK;AAAA,IACf;AACA,WAAO,QAAQ,GAAG;AAChB,WAAK,KAAK,QAAQ,GAAI;AACtB,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,WAAS,IAAI,GAAG,IAAI,OAAO,IAAK,MAAK,KAAK,CAAC;AAC3C,OAAK,QAAA;AACL,SAAO,WAAW,KAAK,IAAI;AAC7B;AAEO,SAAS,sBAAsB,OAA2B;AAC/D,MAAI,CAAC,MAAM,WAAW,GAAG,EAAG,OAAM,IAAI,MAAM,6BAA6B;AACzE,SAAO,aAAa,MAAM,MAAM,CAAC,CAAC;AACpC;"}