@hashgraphonline/standards-sdk 0.1.160 → 0.1.161

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 (293) hide show
  1. package/dist/cjs/hcs-14/resolvers/registry.d.ts +18 -1
  2. package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
  3. package/dist/cjs/hcs-14/resolvers/types.d.ts +17 -0
  4. package/dist/cjs/hcs-14/resolvers/types.d.ts.map +1 -1
  5. package/dist/cjs/hcs-14/sdk.d.ts +24 -13
  6. package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
  7. package/dist/cjs/standards-sdk.cjs +3 -3
  8. package/dist/cjs/standards-sdk.cjs.map +1 -1
  9. package/dist/es/hcs-14/resolvers/registry.d.ts +18 -1
  10. package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
  11. package/dist/es/hcs-14/resolvers/types.d.ts +17 -0
  12. package/dist/es/hcs-14/resolvers/types.d.ts.map +1 -1
  13. package/dist/es/hcs-14/sdk.d.ts +24 -13
  14. package/dist/es/hcs-14/sdk.d.ts.map +1 -1
  15. package/dist/es/standards-sdk.es.js +94 -90
  16. package/dist/es/standards-sdk.es.js.map +1 -1
  17. package/dist/es/standards-sdk.es100.js +138 -42
  18. package/dist/es/standards-sdk.es100.js.map +1 -1
  19. package/dist/es/standards-sdk.es101.js +43 -259
  20. package/dist/es/standards-sdk.es101.js.map +1 -1
  21. package/dist/es/standards-sdk.es102.js +245 -82
  22. package/dist/es/standards-sdk.es102.js.map +1 -1
  23. package/dist/es/standards-sdk.es103.js +50 -49
  24. package/dist/es/standards-sdk.es103.js.map +1 -1
  25. package/dist/es/standards-sdk.es104.js +100 -29
  26. package/dist/es/standards-sdk.es104.js.map +1 -1
  27. package/dist/es/standards-sdk.es105.js +27 -229
  28. package/dist/es/standards-sdk.es105.js.map +1 -1
  29. package/dist/es/standards-sdk.es106.js +228 -109
  30. package/dist/es/standards-sdk.es106.js.map +1 -1
  31. package/dist/es/standards-sdk.es107.js +94 -15
  32. package/dist/es/standards-sdk.es107.js.map +1 -1
  33. package/dist/es/standards-sdk.es108.js +30 -80
  34. package/dist/es/standards-sdk.es108.js.map +1 -1
  35. package/dist/es/standards-sdk.es109.js +80 -27
  36. package/dist/es/standards-sdk.es109.js.map +1 -1
  37. package/dist/es/standards-sdk.es11.js +1 -1
  38. package/dist/es/standards-sdk.es110.js +27 -248
  39. package/dist/es/standards-sdk.es110.js.map +1 -1
  40. package/dist/es/standards-sdk.es111.js +246 -472
  41. package/dist/es/standards-sdk.es111.js.map +1 -1
  42. package/dist/es/standards-sdk.es112.js +458 -85
  43. package/dist/es/standards-sdk.es112.js.map +1 -1
  44. package/dist/es/standards-sdk.es113.js +96 -151
  45. package/dist/es/standards-sdk.es113.js.map +1 -1
  46. package/dist/es/standards-sdk.es114.js +155 -29
  47. package/dist/es/standards-sdk.es114.js.map +1 -1
  48. package/dist/es/standards-sdk.es115.js +26 -4
  49. package/dist/es/standards-sdk.es115.js.map +1 -1
  50. package/dist/es/standards-sdk.es116.js +10 -140
  51. package/dist/es/standards-sdk.es116.js.map +1 -1
  52. package/dist/es/standards-sdk.es117.js +140 -27
  53. package/dist/es/standards-sdk.es117.js.map +1 -1
  54. package/dist/es/standards-sdk.es118.js +27 -20
  55. package/dist/es/standards-sdk.es118.js.map +1 -1
  56. package/dist/es/standards-sdk.es119.js +18 -156
  57. package/dist/es/standards-sdk.es119.js.map +1 -1
  58. package/dist/es/standards-sdk.es12.js +1 -1
  59. package/dist/es/standards-sdk.es120.js +148 -191
  60. package/dist/es/standards-sdk.es120.js.map +1 -1
  61. package/dist/es/standards-sdk.es121.js +160 -747
  62. package/dist/es/standards-sdk.es121.js.map +1 -1
  63. package/dist/es/standards-sdk.es122.js +786 -9
  64. package/dist/es/standards-sdk.es122.js.map +1 -1
  65. package/dist/es/standards-sdk.es123.js +13 -567
  66. package/dist/es/standards-sdk.es123.js.map +1 -1
  67. package/dist/es/standards-sdk.es124.js +541 -576
  68. package/dist/es/standards-sdk.es124.js.map +1 -1
  69. package/dist/es/standards-sdk.es125.js +601 -12
  70. package/dist/es/standards-sdk.es125.js.map +1 -1
  71. package/dist/es/standards-sdk.es126.js +13 -2
  72. package/dist/es/standards-sdk.es126.js.map +1 -1
  73. package/dist/es/standards-sdk.es127.js +2 -87
  74. package/dist/es/standards-sdk.es127.js.map +1 -1
  75. package/dist/es/standards-sdk.es128.js +84 -37
  76. package/dist/es/standards-sdk.es128.js.map +1 -1
  77. package/dist/es/standards-sdk.es129.js +40 -2
  78. package/dist/es/standards-sdk.es129.js.map +1 -1
  79. package/dist/es/standards-sdk.es13.js +1 -1
  80. package/dist/es/standards-sdk.es130.js +2 -235
  81. package/dist/es/standards-sdk.es130.js.map +1 -1
  82. package/dist/es/standards-sdk.es131.js +204 -1109
  83. package/dist/es/standards-sdk.es131.js.map +1 -1
  84. package/dist/es/standards-sdk.es132.js +1059 -225
  85. package/dist/es/standards-sdk.es132.js.map +1 -1
  86. package/dist/es/standards-sdk.es133.js +303 -419
  87. package/dist/es/standards-sdk.es133.js.map +1 -1
  88. package/dist/es/standards-sdk.es134.js +418 -351
  89. package/dist/es/standards-sdk.es134.js.map +1 -1
  90. package/dist/es/standards-sdk.es135.js +347 -1108
  91. package/dist/es/standards-sdk.es135.js.map +1 -1
  92. package/dist/es/standards-sdk.es136.js +1088 -180
  93. package/dist/es/standards-sdk.es136.js.map +1 -1
  94. package/dist/es/standards-sdk.es137.js +153 -1512
  95. package/dist/es/standards-sdk.es137.js.map +1 -1
  96. package/dist/es/standards-sdk.es138.js +1567 -1255
  97. package/dist/es/standards-sdk.es138.js.map +1 -1
  98. package/dist/es/standards-sdk.es139.js +1255 -17
  99. package/dist/es/standards-sdk.es139.js.map +1 -1
  100. package/dist/es/standards-sdk.es14.js +1 -1
  101. package/dist/es/standards-sdk.es140.js +15 -85
  102. package/dist/es/standards-sdk.es140.js.map +1 -1
  103. package/dist/es/standards-sdk.es141.js +77 -71
  104. package/dist/es/standards-sdk.es141.js.map +1 -1
  105. package/dist/es/standards-sdk.es142.js +79 -891
  106. package/dist/es/standards-sdk.es142.js.map +1 -1
  107. package/dist/es/standards-sdk.es143.js +886 -53
  108. package/dist/es/standards-sdk.es143.js.map +1 -1
  109. package/dist/es/standards-sdk.es144.js +53 -152
  110. package/dist/es/standards-sdk.es144.js.map +1 -1
  111. package/dist/es/standards-sdk.es145.js +159 -7
  112. package/dist/es/standards-sdk.es145.js.map +1 -1
  113. package/dist/es/standards-sdk.es146.js +7 -86
  114. package/dist/es/standards-sdk.es146.js.map +1 -1
  115. package/dist/es/standards-sdk.es147.js +65 -44
  116. package/dist/es/standards-sdk.es147.js.map +1 -1
  117. package/dist/es/standards-sdk.es148.js +65 -30
  118. package/dist/es/standards-sdk.es148.js.map +1 -1
  119. package/dist/es/standards-sdk.es149.js +30 -34
  120. package/dist/es/standards-sdk.es149.js.map +1 -1
  121. package/dist/es/standards-sdk.es15.js +1 -1
  122. package/dist/es/standards-sdk.es150.js +34 -41
  123. package/dist/es/standards-sdk.es150.js.map +1 -1
  124. package/dist/es/standards-sdk.es151.js +45 -138
  125. package/dist/es/standards-sdk.es151.js.map +1 -1
  126. package/dist/es/standards-sdk.es152.js +133 -37
  127. package/dist/es/standards-sdk.es152.js.map +1 -1
  128. package/dist/es/standards-sdk.es153.js +34 -12474
  129. package/dist/es/standards-sdk.es153.js.map +1 -1
  130. package/dist/es/standards-sdk.es154.js +12444 -134
  131. package/dist/es/standards-sdk.es154.js.map +1 -1
  132. package/dist/es/standards-sdk.es155.js +13 -318
  133. package/dist/es/standards-sdk.es155.js.map +1 -1
  134. package/dist/es/standards-sdk.es156.js +55 -345
  135. package/dist/es/standards-sdk.es156.js.map +1 -1
  136. package/dist/es/standards-sdk.es157.js +68 -437
  137. package/dist/es/standards-sdk.es157.js.map +1 -1
  138. package/dist/es/standards-sdk.es158.js +71 -321
  139. package/dist/es/standards-sdk.es158.js.map +1 -1
  140. package/dist/es/standards-sdk.es159.js +63 -66
  141. package/dist/es/standards-sdk.es159.js.map +1 -1
  142. package/dist/es/standards-sdk.es16.js +5 -5
  143. package/dist/es/standards-sdk.es160.js +168 -13
  144. package/dist/es/standards-sdk.es160.js.map +1 -1
  145. package/dist/es/standards-sdk.es161.js +312 -232
  146. package/dist/es/standards-sdk.es161.js.map +1 -1
  147. package/dist/es/standards-sdk.es162.js +345 -55
  148. package/dist/es/standards-sdk.es162.js.map +1 -1
  149. package/dist/es/standards-sdk.es163.js +437 -68
  150. package/dist/es/standards-sdk.es163.js.map +1 -1
  151. package/dist/es/standards-sdk.es164.js +321 -71
  152. package/dist/es/standards-sdk.es164.js.map +1 -1
  153. package/dist/es/standards-sdk.es165.js +66 -63
  154. package/dist/es/standards-sdk.es165.js.map +1 -1
  155. package/dist/es/standards-sdk.es166.js +220 -150
  156. package/dist/es/standards-sdk.es166.js.map +1 -1
  157. package/dist/es/standards-sdk.es167.js +152 -202
  158. package/dist/es/standards-sdk.es167.js.map +1 -1
  159. package/dist/es/standards-sdk.es168.js +206 -223
  160. package/dist/es/standards-sdk.es168.js.map +1 -1
  161. package/dist/es/standards-sdk.es169.js +227 -107
  162. package/dist/es/standards-sdk.es169.js.map +1 -1
  163. package/dist/es/standards-sdk.es170.js +98 -105
  164. package/dist/es/standards-sdk.es170.js.map +1 -1
  165. package/dist/es/standards-sdk.es171.js +105 -140
  166. package/dist/es/standards-sdk.es171.js.map +1 -1
  167. package/dist/es/standards-sdk.es172.js +140 -164
  168. package/dist/es/standards-sdk.es172.js.map +1 -1
  169. package/dist/es/standards-sdk.es173.js +165 -119
  170. package/dist/es/standards-sdk.es173.js.map +1 -1
  171. package/dist/es/standards-sdk.es174.js +111 -303
  172. package/dist/es/standards-sdk.es174.js.map +1 -1
  173. package/dist/es/standards-sdk.es175.js +297 -225
  174. package/dist/es/standards-sdk.es175.js.map +1 -1
  175. package/dist/es/standards-sdk.es176.js +253 -110
  176. package/dist/es/standards-sdk.es176.js.map +1 -1
  177. package/dist/es/standards-sdk.es177.js +119 -0
  178. package/dist/es/standards-sdk.es177.js.map +1 -0
  179. package/dist/es/standards-sdk.es18.js +12 -12
  180. package/dist/es/standards-sdk.es19.js +9 -9
  181. package/dist/es/standards-sdk.es2.js +2 -2
  182. package/dist/es/standards-sdk.es20.js +1 -1
  183. package/dist/es/standards-sdk.es21.js +1 -1
  184. package/dist/es/standards-sdk.es22.js +1 -1
  185. package/dist/es/standards-sdk.es23.js +1 -1
  186. package/dist/es/standards-sdk.es24.js +1 -1
  187. package/dist/es/standards-sdk.es25.js +1 -1
  188. package/dist/es/standards-sdk.es26.js +1 -1
  189. package/dist/es/standards-sdk.es27.js +12 -12
  190. package/dist/es/standards-sdk.es30.js +2 -2
  191. package/dist/es/standards-sdk.es31.js +4 -4
  192. package/dist/es/standards-sdk.es32.js +1 -1
  193. package/dist/es/standards-sdk.es35.js +6 -6
  194. package/dist/es/standards-sdk.es36.js +4 -4
  195. package/dist/es/standards-sdk.es37.js +2 -2
  196. package/dist/es/standards-sdk.es38.js +2 -2
  197. package/dist/es/standards-sdk.es39.js +1 -1
  198. package/dist/es/standards-sdk.es4.js +2 -2
  199. package/dist/es/standards-sdk.es40.js +1 -1
  200. package/dist/es/standards-sdk.es41.js +2 -2
  201. package/dist/es/standards-sdk.es46.js +1 -1
  202. package/dist/es/standards-sdk.es5.js +2 -2
  203. package/dist/es/standards-sdk.es51.js +1 -1
  204. package/dist/es/standards-sdk.es53.js +1 -1
  205. package/dist/es/standards-sdk.es56.js +2 -2
  206. package/dist/es/standards-sdk.es58.js +11 -236
  207. package/dist/es/standards-sdk.es58.js.map +1 -1
  208. package/dist/es/standards-sdk.es59.js +321 -35
  209. package/dist/es/standards-sdk.es59.js.map +1 -1
  210. package/dist/es/standards-sdk.es6.js +2 -2
  211. package/dist/es/standards-sdk.es60.js +32 -101
  212. package/dist/es/standards-sdk.es60.js.map +1 -1
  213. package/dist/es/standards-sdk.es61.js +86 -156
  214. package/dist/es/standards-sdk.es61.js.map +1 -1
  215. package/dist/es/standards-sdk.es62.js +112 -153
  216. package/dist/es/standards-sdk.es62.js.map +1 -1
  217. package/dist/es/standards-sdk.es63.js +179 -87
  218. package/dist/es/standards-sdk.es63.js.map +1 -1
  219. package/dist/es/standards-sdk.es64.js +124 -40
  220. package/dist/es/standards-sdk.es64.js.map +1 -1
  221. package/dist/es/standards-sdk.es65.js +41 -251
  222. package/dist/es/standards-sdk.es65.js.map +1 -1
  223. package/dist/es/standards-sdk.es66.js +257 -24
  224. package/dist/es/standards-sdk.es66.js.map +1 -1
  225. package/dist/es/standards-sdk.es67.js +25 -87
  226. package/dist/es/standards-sdk.es67.js.map +1 -1
  227. package/dist/es/standards-sdk.es68.js +95 -3
  228. package/dist/es/standards-sdk.es68.js.map +1 -1
  229. package/dist/es/standards-sdk.es69.js +3 -100
  230. package/dist/es/standards-sdk.es69.js.map +1 -1
  231. package/dist/es/standards-sdk.es7.js +1 -1
  232. package/dist/es/standards-sdk.es70.js +62 -61
  233. package/dist/es/standards-sdk.es70.js.map +1 -1
  234. package/dist/es/standards-sdk.es71.js +98 -17
  235. package/dist/es/standards-sdk.es71.js.map +1 -1
  236. package/dist/es/standards-sdk.es72.js +19 -77
  237. package/dist/es/standards-sdk.es72.js.map +1 -1
  238. package/dist/es/standards-sdk.es73.js +77 -458
  239. package/dist/es/standards-sdk.es73.js.map +1 -1
  240. package/dist/es/standards-sdk.es74.js +240 -106
  241. package/dist/es/standards-sdk.es74.js.map +1 -1
  242. package/dist/es/standards-sdk.es75.js +286 -170
  243. package/dist/es/standards-sdk.es75.js.map +1 -1
  244. package/dist/es/standards-sdk.es76.js +207 -71
  245. package/dist/es/standards-sdk.es76.js.map +1 -1
  246. package/dist/es/standards-sdk.es77.js +72 -71
  247. package/dist/es/standards-sdk.es77.js.map +1 -1
  248. package/dist/es/standards-sdk.es78.js +71 -143
  249. package/dist/es/standards-sdk.es78.js.map +1 -1
  250. package/dist/es/standards-sdk.es79.js +136 -62
  251. package/dist/es/standards-sdk.es79.js.map +1 -1
  252. package/dist/es/standards-sdk.es80.js +45 -380
  253. package/dist/es/standards-sdk.es80.js.map +1 -1
  254. package/dist/es/standards-sdk.es81.js +130 -222
  255. package/dist/es/standards-sdk.es81.js.map +1 -1
  256. package/dist/es/standards-sdk.es82.js +444 -313
  257. package/dist/es/standards-sdk.es82.js.map +1 -1
  258. package/dist/es/standards-sdk.es83.js +364 -88
  259. package/dist/es/standards-sdk.es83.js.map +1 -1
  260. package/dist/es/standards-sdk.es84.js +89 -125
  261. package/dist/es/standards-sdk.es84.js.map +1 -1
  262. package/dist/es/standards-sdk.es85.js +125 -8
  263. package/dist/es/standards-sdk.es85.js.map +1 -1
  264. package/dist/es/standards-sdk.es86.js +6 -45
  265. package/dist/es/standards-sdk.es86.js.map +1 -1
  266. package/dist/es/standards-sdk.es87.js +44 -98
  267. package/dist/es/standards-sdk.es87.js.map +1 -1
  268. package/dist/es/standards-sdk.es88.js +84 -331
  269. package/dist/es/standards-sdk.es88.js.map +1 -1
  270. package/dist/es/standards-sdk.es89.js +160 -93
  271. package/dist/es/standards-sdk.es89.js.map +1 -1
  272. package/dist/es/standards-sdk.es9.js +2 -2
  273. package/dist/es/standards-sdk.es90.js +275 -55
  274. package/dist/es/standards-sdk.es90.js.map +1 -1
  275. package/dist/es/standards-sdk.es91.js +55 -43
  276. package/dist/es/standards-sdk.es91.js.map +1 -1
  277. package/dist/es/standards-sdk.es92.js +44 -145
  278. package/dist/es/standards-sdk.es92.js.map +1 -1
  279. package/dist/es/standards-sdk.es93.js +113 -30
  280. package/dist/es/standards-sdk.es93.js.map +1 -1
  281. package/dist/es/standards-sdk.es94.js +59 -22
  282. package/dist/es/standards-sdk.es94.js.map +1 -1
  283. package/dist/es/standards-sdk.es95.js +28 -23
  284. package/dist/es/standards-sdk.es95.js.map +1 -1
  285. package/dist/es/standards-sdk.es96.js +23 -238
  286. package/dist/es/standards-sdk.es96.js.map +1 -1
  287. package/dist/es/standards-sdk.es97.js +225 -267
  288. package/dist/es/standards-sdk.es97.js.map +1 -1
  289. package/dist/es/standards-sdk.es98.js +220 -95
  290. package/dist/es/standards-sdk.es98.js.map +1 -1
  291. package/dist/es/standards-sdk.es99.js +136 -124
  292. package/dist/es/standards-sdk.es99.js.map +1 -1
  293. package/package.json +4 -1
@@ -1,104 +1,50 @@
1
- import { HederaMirrorNode } from "./standards-sdk.es137.js";
2
- import { Logger } from "./standards-sdk.es116.js";
3
- import { HCS21ValidationError } from "./standards-sdk.es85.js";
4
- import { HCS21_PROTOCOL, adapterDeclarationSchema, HCS21_SAFE_MESSAGE_BYTES, HCS21_MAX_MESSAGE_BYTES } from "./standards-sdk.es84.js";
5
- class HCS21BaseClient {
6
- constructor(params) {
7
- this.network = params.network;
8
- this.logger = params.logger || new Logger({ level: "info", module: "HCS-21" });
9
- this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {
10
- customUrl: params.mirrorNodeUrl
11
- });
1
+ import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es153.js";
2
+ import { HCS21TopicType, HCS21MetadataPointerPattern, HCS21_SAFE_MESSAGE_BYTES, HCS21_MAX_MESSAGE_BYTES } from "./standards-sdk.es85.js";
3
+ import { HCS21ValidationError } from "./standards-sdk.es86.js";
4
+ function buildHcs21RegistryMemo(params) {
5
+ const indexed = params.indexed ?? 0;
6
+ const topicType = params.type ?? HCS21TopicType.ADAPTER_REGISTRY;
7
+ if (params.metaTopicId && !HCS21MetadataPointerPattern.test(params.metaTopicId)) {
8
+ throw new HCS21ValidationError(
9
+ "Meta value must be a short pointer (topic ID, HRL, IPFS, Arweave, OCI, or HTTPS)",
10
+ "invalid_payload"
11
+ );
12
12
  }
13
- buildDeclaration(params) {
14
- const declaration = {
15
- p: HCS21_PROTOCOL,
16
- op: params.op,
17
- adapter_id: params.adapterId,
18
- entity: params.entity,
19
- package: params.adapterPackage,
20
- manifest: params.manifest,
21
- ...params.manifestSequence ? { manifest_sequence: params.manifestSequence } : {},
22
- config: params.config,
23
- state_model: params.stateModel,
24
- signature: params.signature
25
- };
26
- return this.validateDeclaration(declaration);
27
- }
28
- validateDeclaration(input) {
29
- try {
30
- const payload = typeof input === "string" ? JSON.parse(input) : input;
31
- const parsed = adapterDeclarationSchema.parse(
32
- payload
33
- );
34
- this.assertSizeLimit(parsed);
35
- return parsed;
36
- } catch (error) {
37
- const message = error instanceof Error ? error.message : "Invalid adapter declaration";
38
- throw new HCS21ValidationError(message, "invalid_payload");
39
- }
40
- }
41
- async fetchDeclarations(topicId, options) {
42
- const rawMessages = await this.mirrorNode.getTopicMessages(topicId, {
43
- limit: options?.limit,
44
- order: options?.order
45
- });
46
- const envelopes = [];
47
- for (const message of rawMessages) {
48
- if (message.p !== HCS21_PROTOCOL) {
49
- continue;
50
- }
51
- try {
52
- const declaration = this.validateDeclaration(message);
53
- envelopes.push({
54
- declaration,
55
- consensusTimestamp: message.consensus_timestamp,
56
- sequenceNumber: message.sequence_number,
57
- payer: message.payer
58
- });
59
- } catch (error) {
60
- const detail = error instanceof Error ? error.message : "unknown error";
61
- this.logger.warn(`Skipping invalid HCS-21 message: ${detail}`);
62
- }
63
- }
64
- return envelopes;
65
- }
66
- async fetchCategoryEntries(topicId) {
67
- const rawMessages = await this.mirrorNode.getTopicMessages(topicId);
68
- const entries = [];
69
- for (const message of rawMessages) {
70
- if (message.p !== "hcs-2" || message.op !== "register") {
71
- continue;
72
- }
73
- if (!message.t_id || typeof message.t_id !== "string") {
74
- continue;
75
- }
76
- const memo = typeof message.m === "string" ? message.m : void 0;
77
- const adapterId = memo?.startsWith("adapter:") ? memo.slice("adapter:".length) : memo;
78
- entries.push({
79
- adapterId: adapterId ?? message.t_id,
80
- adapterTopicId: message.t_id,
81
- metadata: message.metadata,
82
- memo,
83
- payer: message.payer,
84
- sequenceNumber: Number(message.sequence_number ?? 0),
85
- consensusTimestamp: message.consensus_timestamp
86
- });
87
- }
88
- return entries;
89
- }
90
- assertSizeLimit(payload) {
91
- const json = JSON.stringify(payload);
92
- const bytes = Buffer.byteLength(json, "utf8");
93
- if (bytes > HCS21_SAFE_MESSAGE_BYTES) {
94
- throw new HCS21ValidationError(
95
- `HCS-21 payload exceeds safe limit of ${HCS21_SAFE_MESSAGE_BYTES} bytes (${bytes}); Hedera cap is ${HCS21_MAX_MESSAGE_BYTES}`,
96
- "size_exceeded"
97
- );
98
- }
13
+ const metaSegment = params.metaTopicId ? `:${params.metaTopicId}` : "";
14
+ return `hcs-21:${indexed}:${params.ttl}:${topicType}${metaSegment}`;
15
+ }
16
+ function buildHcs21CreateRegistryTx(params) {
17
+ const memo = buildHcs21RegistryMemo({
18
+ ttl: params.ttl,
19
+ indexed: params.indexed,
20
+ type: params.type,
21
+ metaTopicId: params.metaTopicId
22
+ });
23
+ return buildTopicCreateTx({
24
+ memo,
25
+ adminKey: params.adminKey,
26
+ submitKey: params.submitKey,
27
+ operatorPublicKey: params.operatorPublicKey
28
+ });
29
+ }
30
+ function buildHcs21MessageTx(params) {
31
+ const json = JSON.stringify(params.declaration);
32
+ const bytes = Buffer.byteLength(json, "utf8");
33
+ if (bytes > HCS21_SAFE_MESSAGE_BYTES) {
34
+ throw new HCS21ValidationError(
35
+ `HCS-21 payload exceeds safe limit of ${HCS21_SAFE_MESSAGE_BYTES} bytes (${bytes}); Hedera cap is ${HCS21_MAX_MESSAGE_BYTES}`,
36
+ "size_exceeded"
37
+ );
99
38
  }
39
+ return buildMessageTx({
40
+ topicId: params.topicId,
41
+ message: JSON.stringify(params.declaration),
42
+ transactionMemo: params.transactionMemo
43
+ });
100
44
  }
101
45
  export {
102
- HCS21BaseClient
46
+ buildHcs21CreateRegistryTx,
47
+ buildHcs21MessageTx,
48
+ buildHcs21RegistryMemo
103
49
  };
104
50
  //# sourceMappingURL=standards-sdk.es87.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es87.js","sources":["../../src/hcs-21/base-client.ts"],"sourcesContent":["import { HederaMirrorNode } from '../services/mirror-node';\nimport { ILogger, Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport { HCS21ValidationError } from './errors';\nimport {\n AdapterDeclaration,\n AdapterDeclarationEnvelope,\n AdapterPackage,\n HCS21_MAX_MESSAGE_BYTES,\n HCS21_SAFE_MESSAGE_BYTES,\n HCS21Operation,\n HCS21_PROTOCOL,\n AdapterConfigContext,\n adapterDeclarationSchema,\n AdapterCategoryEntry,\n HCS21TopicType,\n} from './types';\n\nexport interface BuildDeclarationParams {\n op: HCS21Operation;\n adapterId: string;\n entity: string;\n adapterPackage: AdapterPackage;\n manifest: string;\n manifestSequence?: number;\n config: AdapterConfigContext;\n stateModel?: string;\n signature?: string;\n}\n\nexport interface FetchDeclarationsOptions {\n limit?: number;\n order?: 'asc' | 'desc';\n}\n\nexport class HCS21BaseClient {\n protected readonly network: NetworkType;\n protected readonly logger: ILogger;\n protected readonly mirrorNode: HederaMirrorNode;\n\n constructor(params: {\n network: NetworkType;\n logger?: ILogger;\n mirrorNodeUrl?: string;\n }) {\n this.network = params.network;\n this.logger =\n params.logger || new Logger({ level: 'info', module: 'HCS-21' });\n this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {\n customUrl: params.mirrorNodeUrl,\n });\n }\n\n buildDeclaration(params: BuildDeclarationParams): AdapterDeclaration {\n const declaration: AdapterDeclaration = {\n p: HCS21_PROTOCOL,\n op: params.op,\n adapter_id: params.adapterId,\n entity: params.entity,\n package: params.adapterPackage,\n manifest: params.manifest,\n ...(params.manifestSequence\n ? { manifest_sequence: params.manifestSequence }\n : {}),\n config: params.config,\n state_model: params.stateModel,\n signature: params.signature,\n };\n\n return this.validateDeclaration(declaration);\n }\n\n validateDeclaration(input: unknown): AdapterDeclaration {\n try {\n const payload = typeof input === 'string' ? JSON.parse(input) : input;\n const parsed = adapterDeclarationSchema.parse(\n payload,\n ) as AdapterDeclaration;\n this.assertSizeLimit(parsed);\n return parsed;\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Invalid adapter declaration';\n throw new HCS21ValidationError(message, 'invalid_payload');\n }\n }\n\n async fetchDeclarations(\n topicId: string,\n options?: FetchDeclarationsOptions,\n ): Promise<AdapterDeclarationEnvelope[]> {\n const rawMessages = await this.mirrorNode.getTopicMessages(topicId, {\n limit: options?.limit,\n order: options?.order,\n });\n\n const envelopes: AdapterDeclarationEnvelope[] = [];\n\n for (const message of rawMessages) {\n if (message.p !== HCS21_PROTOCOL) {\n continue;\n }\n\n try {\n const declaration = this.validateDeclaration(message);\n envelopes.push({\n declaration,\n consensusTimestamp: message.consensus_timestamp,\n sequenceNumber: message.sequence_number,\n payer: message.payer,\n });\n } catch (error) {\n const detail = error instanceof Error ? error.message : 'unknown error';\n this.logger.warn(`Skipping invalid HCS-21 message: ${detail}`);\n }\n }\n\n return envelopes;\n }\n\n async fetchCategoryEntries(topicId: string): Promise<AdapterCategoryEntry[]> {\n const rawMessages = await this.mirrorNode.getTopicMessages(topicId);\n const entries: AdapterCategoryEntry[] = [];\n\n for (const message of rawMessages) {\n if (message.p !== 'hcs-2' || message.op !== 'register') {\n continue;\n }\n if (!message.t_id || typeof message.t_id !== 'string') {\n continue;\n }\n const memo = typeof message.m === 'string' ? message.m : undefined;\n const adapterId = memo?.startsWith('adapter:')\n ? memo.slice('adapter:'.length)\n : memo;\n entries.push({\n adapterId: adapterId ?? message.t_id,\n adapterTopicId: message.t_id,\n metadata: message.metadata,\n memo,\n payer: message.payer,\n sequenceNumber: Number(message.sequence_number ?? 0),\n consensusTimestamp: message.consensus_timestamp,\n });\n }\n\n return entries;\n }\n\n protected assertSizeLimit(payload: AdapterDeclaration): void {\n const json = JSON.stringify(payload);\n const bytes = Buffer.byteLength(json, 'utf8');\n if (bytes > HCS21_SAFE_MESSAGE_BYTES) {\n throw new HCS21ValidationError(\n `HCS-21 payload exceeds safe limit of ${HCS21_SAFE_MESSAGE_BYTES} bytes (${bytes}); Hedera cap is ${HCS21_MAX_MESSAGE_BYTES}`,\n 'size_exceeded',\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es87.js","sources":["../../src/hcs-21/tx.ts"],"sourcesContent":["import {\n PublicKey,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n} from '@hashgraph/sdk';\nimport {\n buildTopicCreateTx,\n buildMessageTx,\n MaybeKey,\n} from '../common/tx/tx-utils';\nimport {\n HCS21TopicType,\n AdapterDeclaration,\n HCS21MetadataPointerPattern,\n HCS21_SAFE_MESSAGE_BYTES,\n HCS21_MAX_MESSAGE_BYTES,\n} from './types';\nimport { HCS21ValidationError } from './errors';\n\nexport function buildHcs21RegistryMemo(params: {\n ttl: number;\n indexed?: 0 | 1;\n type?: HCS21TopicType;\n metaTopicId?: string;\n}): string {\n const indexed = params.indexed ?? 0;\n const topicType = params.type ?? HCS21TopicType.ADAPTER_REGISTRY;\n\n if (\n params.metaTopicId &&\n !HCS21MetadataPointerPattern.test(params.metaTopicId)\n ) {\n throw new HCS21ValidationError(\n 'Meta value must be a short pointer (topic ID, HRL, IPFS, Arweave, OCI, or HTTPS)',\n 'invalid_payload',\n );\n }\n\n const metaSegment = params.metaTopicId ? `:${params.metaTopicId}` : '';\n return `hcs-21:${indexed}:${params.ttl}:${topicType}${metaSegment}`;\n}\n\nexport function buildHcs21CreateRegistryTx(params: {\n ttl: number;\n indexed?: 0 | 1;\n type?: HCS21TopicType;\n metaTopicId?: string;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n operatorPublicKey?: PublicKey;\n}): TopicCreateTransaction {\n const memo = buildHcs21RegistryMemo({\n ttl: params.ttl,\n indexed: params.indexed,\n type: params.type,\n metaTopicId: params.metaTopicId,\n });\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs21MessageTx(params: {\n topicId: string;\n declaration: AdapterDeclaration;\n transactionMemo?: string;\n}): TopicMessageSubmitTransaction {\n const json = JSON.stringify(params.declaration);\n const bytes = Buffer.byteLength(json, 'utf8');\n if (bytes > HCS21_SAFE_MESSAGE_BYTES) {\n throw new HCS21ValidationError(\n `HCS-21 payload exceeds safe limit of ${HCS21_SAFE_MESSAGE_BYTES} bytes (${bytes}); Hedera cap is ${HCS21_MAX_MESSAGE_BYTES}`,\n 'size_exceeded',\n );\n }\n return buildMessageTx({\n topicId: params.topicId,\n message: JSON.stringify(params.declaration),\n transactionMemo: params.transactionMemo,\n });\n}\n"],"names":[],"mappings":";;;AAmBO,SAAS,uBAAuB,QAK5B;AACT,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,YAAY,OAAO,QAAQ,eAAe;AAEhD,MACE,OAAO,eACP,CAAC,4BAA4B,KAAK,OAAO,WAAW,GACpD;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,cAAc,OAAO,cAAc,IAAI,OAAO,WAAW,KAAK;AACpE,SAAO,UAAU,OAAO,IAAI,OAAO,GAAG,IAAI,SAAS,GAAG,WAAW;AACnE;AAEO,SAAS,2BAA2B,QAQhB;AACzB,QAAM,OAAO,uBAAuB;AAAA,IAClC,KAAK,OAAO;AAAA,IACZ,SAAS,OAAO;AAAA,IAChB,MAAM,OAAO;AAAA,IACb,aAAa,OAAO;AAAA,EAAA,CACrB;AACD,SAAO,mBAAmB;AAAA,IACxB;AAAA,IACA,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,mBAAmB,OAAO;AAAA,EAAA,CAC3B;AACH;AAEO,SAAS,oBAAoB,QAIF;AAChC,QAAM,OAAO,KAAK,UAAU,OAAO,WAAW;AAC9C,QAAM,QAAQ,OAAO,WAAW,MAAM,MAAM;AAC5C,MAAI,QAAQ,0BAA0B;AACpC,UAAM,IAAI;AAAA,MACR,wCAAwC,wBAAwB,WAAW,KAAK,oBAAoB,uBAAuB;AAAA,MAC3H;AAAA,IAAA;AAAA,EAEJ;AACA,SAAO,eAAe;AAAA,IACpB,SAAS,OAAO;AAAA,IAChB,SAAS,KAAK,UAAU,OAAO,WAAW;AAAA,IAC1C,iBAAiB,OAAO;AAAA,EAAA,CACzB;AACH;"}
@@ -1,351 +1,104 @@
1
- import { Client, Status } from "@hashgraph/sdk";
2
- import { createNodeOperatorContext } from "./standards-sdk.es151.js";
3
- import { Logger } from "./standards-sdk.es116.js";
4
- import { HCS21BaseClient } from "./standards-sdk.es87.js";
5
- import { metadataDocumentSchema, HCS21TopicType, HCS21ManifestPointerPattern } from "./standards-sdk.es84.js";
6
- import { buildHcs21CreateRegistryTx, buildHcs21MessageTx } from "./standards-sdk.es86.js";
7
- import { buildHcs2CreateRegistryTx, buildHcs2RegisterTx } from "./standards-sdk.es76.js";
8
- import { HCS2RegistryType } from "./standards-sdk.es72.js";
9
- import { HCS21ValidationError } from "./standards-sdk.es85.js";
10
- import { inscribe } from "./standards-sdk.es135.js";
11
- import { getTopicId } from "./standards-sdk.es125.js";
12
- class HCS21Client extends HCS21BaseClient {
13
- constructor(config) {
14
- const logger = config.logger || new Logger({ level: config.logLevel || "info", module: "HCS-21" });
15
- super({
16
- network: config.network,
17
- logger,
18
- mirrorNodeUrl: config.mirrorNodeUrl
1
+ import { HederaMirrorNode } from "./standards-sdk.es138.js";
2
+ import { Logger } from "./standards-sdk.es117.js";
3
+ import { HCS21ValidationError } from "./standards-sdk.es86.js";
4
+ import { HCS21_PROTOCOL, adapterDeclarationSchema, HCS21_SAFE_MESSAGE_BYTES, HCS21_MAX_MESSAGE_BYTES } from "./standards-sdk.es85.js";
5
+ class HCS21BaseClient {
6
+ constructor(params) {
7
+ this.network = params.network;
8
+ this.logger = params.logger || new Logger({ level: "info", module: "HCS-21" });
9
+ this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {
10
+ customUrl: params.mirrorNodeUrl
19
11
  });
20
- const baseClient = config.network === "mainnet" ? Client.forMainnet() : Client.forTestnet();
21
- this.operatorCtx = createNodeOperatorContext({
22
- network: config.network,
23
- operatorId: config.operatorId,
24
- operatorKey: config.operatorKey,
25
- keyType: config.keyType,
26
- mirrorNode: this.mirrorNode,
27
- logger: this.logger,
28
- client: baseClient
29
- });
30
- void this.operatorCtx.ensureInitialized();
31
- this.client = this.operatorCtx.client;
32
12
  }
33
- async inscribeMetadata(params) {
34
- await this.operatorCtx.ensureInitialized();
35
- const metadataPayload = metadataDocumentSchema.parse(params.document);
36
- const metadataJson = JSON.stringify(metadataPayload, null, 2);
37
- const buffer = Buffer.from(metadataJson, "utf8");
38
- const connectionMode = params.inscriptionOptions?.connectionMode ?? (params.inscriptionOptions?.websocket === false ? "http" : "auto");
39
- const inscriptionOptions = {
40
- waitForConfirmation: true,
41
- connectionMode,
42
- websocket: params.inscriptionOptions?.websocket ?? false,
43
- ...params.inscriptionOptions || {},
44
- metadata: {
45
- ...params.inscriptionOptions?.metadata || {},
46
- ...metadataPayload
47
- }
48
- };
49
- const inscription = await inscribe(
50
- {
51
- type: "buffer",
52
- buffer,
53
- fileName: params.fileName || `hcs21-adapter-manifest-${Date.now()}.json`,
54
- mimeType: "application/json"
55
- },
56
- {
57
- accountId: this.operatorCtx.operatorId.toString(),
58
- privateKey: this.operatorCtx.operatorKey,
59
- network: this.network
60
- },
61
- inscriptionOptions
62
- );
63
- if (!inscription.confirmed || !inscription.inscription) {
64
- throw new HCS21ValidationError(
65
- "Failed to inscribe HCS-21 metadata",
66
- "invalid_payload"
67
- );
68
- }
69
- const topicId = inscription.inscription.jsonTopicId || inscription.inscription.topic_id || getTopicId(inscription.inscription);
70
- if (!topicId) {
71
- throw new HCS21ValidationError(
72
- "Metadata inscription did not return a topic ID",
73
- "invalid_payload"
74
- );
75
- }
76
- const rawSequence = inscription.inscription.sequence_number ?? inscription.inscription.sequenceNumber;
77
- const pointerResult = await this.resolveManifestPointer(
78
- topicId,
79
- rawSequence
80
- );
81
- const declarationManifestSequence = inscription.result?.manifest_sequence;
82
- const resultDetails = inscription.result && "jobId" in inscription.result ? {
83
- jobId: inscription.result.jobId,
84
- transactionId: inscription.result.transactionId,
85
- totalCostHbar: inscription.costSummary?.totalCostHbar,
86
- costBreakdown: inscription.costSummary?.breakdown
87
- } : {};
88
- return {
89
- pointer: pointerResult.pointer,
90
- topicId,
91
- sequenceNumber: pointerResult.sequenceNumber,
92
- manifestSequence: declarationManifestSequence || pointerResult.sequenceNumber,
93
- ...resultDetails
13
+ buildDeclaration(params) {
14
+ const declaration = {
15
+ p: HCS21_PROTOCOL,
16
+ op: params.op,
17
+ adapter_id: params.adapterId,
18
+ entity: params.entity,
19
+ package: params.adapterPackage,
20
+ manifest: params.manifest,
21
+ ...params.manifestSequence ? { manifest_sequence: params.manifestSequence } : {},
22
+ config: params.config,
23
+ state_model: params.stateModel,
24
+ signature: params.signature
94
25
  };
26
+ return this.validateDeclaration(declaration);
95
27
  }
96
- async createRegistryTopic(params) {
97
- await this.operatorCtx.ensureInitialized();
98
- const tx = buildHcs21CreateRegistryTx({
99
- ttl: params.ttl,
100
- indexed: params.indexed,
101
- type: params.type,
102
- metaTopicId: params.metaTopicId,
103
- adminKey: params.adminKey,
104
- submitKey: params.submitKey,
105
- operatorPublicKey: this.operatorCtx.operatorKey.publicKey
106
- });
107
- if (params.transactionMemo) {
108
- tx.setTransactionMemo(params.transactionMemo);
109
- }
110
- const response = await tx.execute(this.client);
111
- const receipt = await response.getReceipt(this.client);
112
- if (receipt.status !== Status.Success || !receipt.topicId) {
113
- throw new HCS21ValidationError(
114
- "Failed to create HCS-21 registry topic",
115
- "invalid_payload"
116
- );
117
- }
118
- return receipt.topicId.toString();
119
- }
120
- async createAdapterVersionPointerTopic(params) {
121
- await this.operatorCtx.ensureInitialized();
122
- const tx = buildHcs2CreateRegistryTx({
123
- registryType: HCS2RegistryType.NON_INDEXED,
124
- ttl: params.ttl,
125
- adminKey: params.adminKey,
126
- submitKey: params.submitKey,
127
- memoOverride: params.memoOverride,
128
- operatorPublicKey: this.operatorCtx.operatorKey.publicKey
129
- });
130
- if (params.transactionMemo) {
131
- tx.setTransactionMemo(params.transactionMemo);
132
- }
133
- const response = await tx.execute(this.client);
134
- const receipt = await response.getReceipt(this.client);
135
- if (receipt.status !== Status.Success || !receipt.topicId) {
136
- throw new HCS21ValidationError(
137
- "Failed to create HCS-2 registry version topic",
138
- "invalid_payload"
139
- );
140
- }
141
- return receipt.topicId.toString();
142
- }
143
- async createRegistryDiscoveryTopic(params) {
144
- await this.operatorCtx.ensureInitialized();
145
- const tx = buildHcs2CreateRegistryTx({
146
- registryType: HCS2RegistryType.INDEXED,
147
- ttl: params.ttl,
148
- adminKey: params.adminKey,
149
- submitKey: params.submitKey,
150
- memoOverride: params.memoOverride,
151
- operatorPublicKey: this.operatorCtx.operatorKey.publicKey
152
- });
153
- if (params.transactionMemo) {
154
- tx.setTransactionMemo(params.transactionMemo);
155
- }
156
- const response = await tx.execute(this.client);
157
- const receipt = await response.getReceipt(this.client);
158
- if (receipt.status !== Status.Success || !receipt.topicId) {
159
- throw new HCS21ValidationError(
160
- "Failed to create registry-of-registries topic",
161
- "invalid_payload"
162
- );
163
- }
164
- return receipt.topicId.toString();
165
- }
166
- async createAdapterCategoryTopic(params) {
167
- await this.operatorCtx.ensureInitialized();
168
- const tx = buildHcs21CreateRegistryTx({
169
- ttl: params.ttl,
170
- indexed: params.indexed ?? 0,
171
- type: HCS21TopicType.ADAPTER_CATEGORY,
172
- metaTopicId: params.metaTopicId,
173
- adminKey: params.adminKey,
174
- submitKey: params.submitKey,
175
- operatorPublicKey: this.operatorCtx.operatorKey.publicKey
176
- });
177
- if (params.transactionMemo) {
178
- tx.setTransactionMemo(params.transactionMemo);
179
- }
180
- const response = await tx.execute(this.client);
181
- const receipt = await response.getReceipt(this.client);
182
- if (receipt.status !== Status.Success || !receipt.topicId) {
183
- throw new HCS21ValidationError(
184
- "Failed to create adapter category topic",
185
- "invalid_payload"
28
+ validateDeclaration(input) {
29
+ try {
30
+ const payload = typeof input === "string" ? JSON.parse(input) : input;
31
+ const parsed = adapterDeclarationSchema.parse(
32
+ payload
186
33
  );
34
+ this.assertSizeLimit(parsed);
35
+ return parsed;
36
+ } catch (error) {
37
+ const message = error instanceof Error ? error.message : "Invalid adapter declaration";
38
+ throw new HCS21ValidationError(message, "invalid_payload");
187
39
  }
188
- return receipt.topicId.toString();
189
- }
190
- /**
191
- * Publish a pointer from a version topic to the active declaration topic.
192
- * Version pointer messages carry no metadata.
193
- */
194
- async publishVersionPointer(params) {
195
- await this.operatorCtx.ensureInitialized();
196
- const tx = buildHcs2RegisterTx({
197
- registryTopicId: params.versionTopicId,
198
- targetTopicId: params.declarationTopicId,
199
- memo: params.memo,
200
- analyticsMemo: params.transactionMemo
201
- });
202
- const response = await tx.execute(this.client);
203
- const receipt = await response.getReceipt(this.client);
204
- if (receipt.status !== Status.Success) {
205
- throw new HCS21ValidationError(
206
- "Failed to publish registry version pointer",
207
- "invalid_payload"
208
- );
209
- }
210
- return {
211
- sequenceNumber: receipt.topicSequenceNumber?.toNumber(),
212
- transactionId: response.transactionId.toString()
213
- };
214
40
  }
215
- async resolveVersionPointer(versionTopicId) {
216
- const [latest] = await this.mirrorNode.getTopicMessages(versionTopicId, {
217
- limit: 1,
218
- order: "desc"
41
+ async fetchDeclarations(topicId, options) {
42
+ const rawMessages = await this.mirrorNode.getTopicMessages(topicId, {
43
+ limit: options?.limit,
44
+ order: options?.order
219
45
  });
220
- if (!latest) {
221
- throw new HCS21ValidationError(
222
- "Version pointer topic has no messages",
223
- "invalid_payload"
224
- );
225
- }
226
- const declarationTopicId = latest.t_id;
227
- if (typeof declarationTopicId !== "string" || declarationTopicId.length === 0) {
228
- throw new HCS21ValidationError(
229
- "Version pointer topic does not include a declaration topic ID (`t_id`)",
230
- "invalid_payload"
231
- );
232
- }
233
- const rawSequence = typeof latest.sequence_number === "number" ? latest.sequence_number : Number(latest.sequence_number);
234
- const sequenceNumber = Number.isFinite(rawSequence) ? rawSequence : 0;
235
- return {
236
- versionTopicId,
237
- declarationTopicId,
238
- sequenceNumber,
239
- payer: latest.payer,
240
- memo: latest.m,
241
- op: latest.op
242
- };
243
- }
244
- async registerCategoryTopic(params) {
245
- await this.operatorCtx.ensureInitialized();
246
- const tx = buildHcs2RegisterTx({
247
- registryTopicId: params.discoveryTopicId,
248
- targetTopicId: params.categoryTopicId,
249
- metadata: params.metadata,
250
- memo: params.memo,
251
- analyticsMemo: params.transactionMemo
252
- });
253
- const response = await tx.execute(this.client);
254
- const receipt = await response.getReceipt(this.client);
255
- if (receipt.status !== Status.Success) {
256
- throw new HCS21ValidationError(
257
- "Failed to register adapter category topic",
258
- "invalid_payload"
259
- );
260
- }
261
- return {
262
- sequenceNumber: receipt.topicSequenceNumber?.toNumber(),
263
- transactionId: response.transactionId.toString()
264
- };
265
- }
266
- async publishCategoryEntry(params) {
267
- await this.operatorCtx.ensureInitialized();
268
- const memo = params.memo ?? `adapter:${params.adapterId}`;
269
- const tx = buildHcs2RegisterTx({
270
- registryTopicId: params.categoryTopicId,
271
- targetTopicId: params.versionTopicId,
272
- metadata: params.metadata,
273
- memo,
274
- analyticsMemo: params.transactionMemo
275
- });
276
- const response = await tx.execute(this.client);
277
- const receipt = await response.getReceipt(this.client);
278
- if (receipt.status !== Status.Success) {
279
- throw new HCS21ValidationError(
280
- "Failed to publish adapter category entry",
281
- "invalid_payload"
282
- );
283
- }
284
- return {
285
- sequenceNumber: receipt.topicSequenceNumber?.toNumber(),
286
- transactionId: response.transactionId.toString()
287
- };
288
- }
289
- async publishDeclaration(params) {
290
- await this.operatorCtx.ensureInitialized();
291
- const declaration = this.normalizeDeclarationInput(params.declaration);
292
- const tx = buildHcs21MessageTx({
293
- topicId: params.topicId,
294
- declaration,
295
- transactionMemo: params.transactionMemo
296
- });
297
- const response = await tx.execute(this.client);
298
- const receipt = await response.getReceipt(this.client);
299
- if (receipt.status !== Status.Success) {
300
- throw new HCS21ValidationError(
301
- "Failed to submit HCS-21 declaration",
302
- "invalid_payload"
303
- );
304
- }
305
- return {
306
- sequenceNumber: receipt.topicSequenceNumber?.toNumber(),
307
- transactionId: response.transactionId.toString()
308
- };
309
- }
310
- normalizeDeclarationInput(declaration) {
311
- if ("p" in declaration) {
312
- return this.validateDeclaration(declaration);
46
+ const envelopes = [];
47
+ for (const message of rawMessages) {
48
+ if (message.p !== HCS21_PROTOCOL) {
49
+ continue;
50
+ }
51
+ try {
52
+ const declaration = this.validateDeclaration(message);
53
+ envelopes.push({
54
+ declaration,
55
+ consensusTimestamp: message.consensus_timestamp,
56
+ sequenceNumber: message.sequence_number,
57
+ payer: message.payer
58
+ });
59
+ } catch (error) {
60
+ const detail = error instanceof Error ? error.message : "unknown error";
61
+ this.logger.warn(`Skipping invalid HCS-21 message: ${detail}`);
62
+ }
313
63
  }
314
- return this.buildDeclaration(declaration);
64
+ return envelopes;
315
65
  }
316
- async resolveManifestPointer(topicId, sequence) {
317
- const numericSequence = typeof sequence === "string" ? Number(sequence) : sequence;
318
- let resolvedSequence = typeof numericSequence === "number" && Number.isFinite(numericSequence) ? numericSequence : void 0;
319
- if (!resolvedSequence) {
320
- const [latest] = await this.mirrorNode.getTopicMessages(topicId, {
321
- limit: 1,
322
- order: "desc"
323
- });
324
- if (!latest || !latest.sequence_number) {
325
- throw new HCS21ValidationError(
326
- "Unable to resolve manifest sequence number",
327
- "invalid_payload"
328
- );
66
+ async fetchCategoryEntries(topicId) {
67
+ const rawMessages = await this.mirrorNode.getTopicMessages(topicId);
68
+ const entries = [];
69
+ for (const message of rawMessages) {
70
+ if (message.p !== "hcs-2" || message.op !== "register") {
71
+ continue;
329
72
  }
330
- resolvedSequence = Number(latest.sequence_number);
331
- }
332
- if (!Number.isFinite(resolvedSequence)) {
333
- throw new HCS21ValidationError(
334
- "Invalid manifest sequence number",
335
- "invalid_payload"
336
- );
73
+ if (!message.t_id || typeof message.t_id !== "string") {
74
+ continue;
75
+ }
76
+ const memo = typeof message.m === "string" ? message.m : void 0;
77
+ const adapterId = memo?.startsWith("adapter:") ? memo.slice("adapter:".length) : memo;
78
+ entries.push({
79
+ adapterId: adapterId ?? message.t_id,
80
+ adapterTopicId: message.t_id,
81
+ metadata: message.metadata,
82
+ memo,
83
+ payer: message.payer,
84
+ sequenceNumber: Number(message.sequence_number ?? 0),
85
+ consensusTimestamp: message.consensus_timestamp
86
+ });
337
87
  }
338
- const pointer = `hcs://1/${topicId}`;
339
- if (!HCS21ManifestPointerPattern.test(pointer)) {
88
+ return entries;
89
+ }
90
+ assertSizeLimit(payload) {
91
+ const json = JSON.stringify(payload);
92
+ const bytes = Buffer.byteLength(json, "utf8");
93
+ if (bytes > HCS21_SAFE_MESSAGE_BYTES) {
340
94
  throw new HCS21ValidationError(
341
- "Manifest pointer format is invalid",
342
- "invalid_payload"
95
+ `HCS-21 payload exceeds safe limit of ${HCS21_SAFE_MESSAGE_BYTES} bytes (${bytes}); Hedera cap is ${HCS21_MAX_MESSAGE_BYTES}`,
96
+ "size_exceeded"
343
97
  );
344
98
  }
345
- return { pointer, sequenceNumber: resolvedSequence };
346
99
  }
347
100
  }
348
101
  export {
349
- HCS21Client
102
+ HCS21BaseClient
350
103
  };
351
104
  //# sourceMappingURL=standards-sdk.es88.js.map