@hashgraphonline/standards-sdk 0.1.141-canary.3 → 0.1.141-canary.30

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 (251) hide show
  1. package/README.md +13 -1
  2. package/dist/cjs/hcs-16/base-client.d.ts.map +1 -1
  3. package/dist/cjs/hcs-17/types.d.ts.map +1 -1
  4. package/dist/cjs/hcs-20/sdk.d.ts.map +1 -1
  5. package/dist/cjs/hcs-20/types.d.ts +9 -8
  6. package/dist/cjs/hcs-20/types.d.ts.map +1 -1
  7. package/dist/cjs/hcs-21/base-client.d.ts +4 -3
  8. package/dist/cjs/hcs-21/base-client.d.ts.map +1 -1
  9. package/dist/cjs/hcs-21/index.d.ts +1 -0
  10. package/dist/cjs/hcs-21/index.d.ts.map +1 -1
  11. package/dist/cjs/hcs-21/sdk.d.ts +34 -0
  12. package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
  13. package/dist/cjs/hcs-21/tx.d.ts.map +1 -1
  14. package/dist/cjs/hcs-21/types.d.ts +135 -64
  15. package/dist/cjs/hcs-21/types.d.ts.map +1 -1
  16. package/dist/cjs/hcs-21/verify.d.ts +6 -0
  17. package/dist/cjs/hcs-21/verify.d.ts.map +1 -0
  18. package/dist/cjs/inscribe/inscriber.d.ts +1 -0
  19. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  20. package/dist/cjs/inscribe/quote-cache.d.ts.map +1 -1
  21. package/dist/cjs/services/registry-broker/client.d.ts +4 -3
  22. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  23. package/dist/cjs/services/registry-broker/private-key-signer.d.ts.map +1 -1
  24. package/dist/cjs/services/registry-broker/schemas.d.ts +38 -38
  25. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  26. package/dist/cjs/standards-sdk.cjs +2 -2
  27. package/dist/cjs/standards-sdk.cjs.map +1 -1
  28. package/dist/cjs/utils/dynamic-import.d.ts +1 -0
  29. package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
  30. package/dist/es/hcs-16/base-client.d.ts.map +1 -1
  31. package/dist/es/hcs-17/types.d.ts.map +1 -1
  32. package/dist/es/hcs-20/sdk.d.ts.map +1 -1
  33. package/dist/es/hcs-20/types.d.ts +9 -8
  34. package/dist/es/hcs-20/types.d.ts.map +1 -1
  35. package/dist/es/hcs-21/base-client.d.ts +4 -3
  36. package/dist/es/hcs-21/base-client.d.ts.map +1 -1
  37. package/dist/es/hcs-21/index.d.ts +1 -0
  38. package/dist/es/hcs-21/index.d.ts.map +1 -1
  39. package/dist/es/hcs-21/sdk.d.ts +34 -0
  40. package/dist/es/hcs-21/sdk.d.ts.map +1 -1
  41. package/dist/es/hcs-21/tx.d.ts.map +1 -1
  42. package/dist/es/hcs-21/types.d.ts +135 -64
  43. package/dist/es/hcs-21/types.d.ts.map +1 -1
  44. package/dist/es/hcs-21/verify.d.ts +6 -0
  45. package/dist/es/hcs-21/verify.d.ts.map +1 -0
  46. package/dist/es/inscribe/inscriber.d.ts +1 -0
  47. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  48. package/dist/es/inscribe/quote-cache.d.ts.map +1 -1
  49. package/dist/es/services/registry-broker/client.d.ts +4 -3
  50. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  51. package/dist/es/services/registry-broker/private-key-signer.d.ts.map +1 -1
  52. package/dist/es/services/registry-broker/schemas.d.ts +38 -38
  53. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  54. package/dist/es/standards-sdk.es.js +58 -50
  55. package/dist/es/standards-sdk.es.js.map +1 -1
  56. package/dist/es/standards-sdk.es10.js +2 -2
  57. package/dist/es/standards-sdk.es100.js +26 -229
  58. package/dist/es/standards-sdk.es100.js.map +1 -1
  59. package/dist/es/standards-sdk.es101.js +228 -109
  60. package/dist/es/standards-sdk.es101.js.map +1 -1
  61. package/dist/es/standards-sdk.es102.js +94 -15
  62. package/dist/es/standards-sdk.es102.js.map +1 -1
  63. package/dist/es/standards-sdk.es103.js +30 -80
  64. package/dist/es/standards-sdk.es103.js.map +1 -1
  65. package/dist/es/standards-sdk.es104.js +80 -27
  66. package/dist/es/standards-sdk.es104.js.map +1 -1
  67. package/dist/es/standards-sdk.es105.js +25 -136
  68. package/dist/es/standards-sdk.es105.js.map +1 -1
  69. package/dist/es/standards-sdk.es106.js +140 -27
  70. package/dist/es/standards-sdk.es106.js.map +1 -1
  71. package/dist/es/standards-sdk.es107.js +27 -20
  72. package/dist/es/standards-sdk.es107.js.map +1 -1
  73. package/dist/es/standards-sdk.es108.js +18 -156
  74. package/dist/es/standards-sdk.es108.js.map +1 -1
  75. package/dist/es/standards-sdk.es109.js +148 -196
  76. package/dist/es/standards-sdk.es109.js.map +1 -1
  77. package/dist/es/standards-sdk.es110.js +160 -747
  78. package/dist/es/standards-sdk.es110.js.map +1 -1
  79. package/dist/es/standards-sdk.es111.js +786 -9
  80. package/dist/es/standards-sdk.es111.js.map +1 -1
  81. package/dist/es/standards-sdk.es112.js +13 -567
  82. package/dist/es/standards-sdk.es112.js.map +1 -1
  83. package/dist/es/standards-sdk.es113.js +541 -576
  84. package/dist/es/standards-sdk.es113.js.map +1 -1
  85. package/dist/es/standards-sdk.es114.js +601 -12
  86. package/dist/es/standards-sdk.es114.js.map +1 -1
  87. package/dist/es/standards-sdk.es115.js +13 -2
  88. package/dist/es/standards-sdk.es115.js.map +1 -1
  89. package/dist/es/standards-sdk.es116.js +2 -83
  90. package/dist/es/standards-sdk.es116.js.map +1 -1
  91. package/dist/es/standards-sdk.es117.js +80 -36
  92. package/dist/es/standards-sdk.es117.js.map +1 -1
  93. package/dist/es/standards-sdk.es118.js +39 -2
  94. package/dist/es/standards-sdk.es118.js.map +1 -1
  95. package/dist/es/standards-sdk.es119.js +2 -223
  96. package/dist/es/standards-sdk.es119.js.map +1 -1
  97. package/dist/es/standards-sdk.es12.js +1 -1
  98. package/dist/es/standards-sdk.es120.js +193 -1110
  99. package/dist/es/standards-sdk.es120.js.map +1 -1
  100. package/dist/es/standards-sdk.es121.js +1059 -225
  101. package/dist/es/standards-sdk.es121.js.map +1 -1
  102. package/dist/es/standards-sdk.es122.js +303 -419
  103. package/dist/es/standards-sdk.es122.js.map +1 -1
  104. package/dist/es/standards-sdk.es123.js +418 -351
  105. package/dist/es/standards-sdk.es123.js.map +1 -1
  106. package/dist/es/standards-sdk.es124.js +348 -785
  107. package/dist/es/standards-sdk.es124.js.map +1 -1
  108. package/dist/es/standards-sdk.es125.js +766 -182
  109. package/dist/es/standards-sdk.es125.js.map +1 -1
  110. package/dist/es/standards-sdk.es126.js +153 -1512
  111. package/dist/es/standards-sdk.es126.js.map +1 -1
  112. package/dist/es/standards-sdk.es127.js +1373 -1977
  113. package/dist/es/standards-sdk.es127.js.map +1 -1
  114. package/dist/es/standards-sdk.es128.js +2211 -50
  115. package/dist/es/standards-sdk.es128.js.map +1 -1
  116. package/dist/es/standards-sdk.es129.js +59 -79
  117. package/dist/es/standards-sdk.es129.js.map +1 -1
  118. package/dist/es/standards-sdk.es13.js +1 -1
  119. package/dist/es/standards-sdk.es130.js +80 -152
  120. package/dist/es/standards-sdk.es130.js.map +1 -1
  121. package/dist/es/standards-sdk.es131.js +159 -7
  122. package/dist/es/standards-sdk.es131.js.map +1 -1
  123. package/dist/es/standards-sdk.es132.js +7 -86
  124. package/dist/es/standards-sdk.es132.js.map +1 -1
  125. package/dist/es/standards-sdk.es133.js +65 -44
  126. package/dist/es/standards-sdk.es133.js.map +1 -1
  127. package/dist/es/standards-sdk.es134.js +65 -28
  128. package/dist/es/standards-sdk.es134.js.map +1 -1
  129. package/dist/es/standards-sdk.es135.js +69 -125
  130. package/dist/es/standards-sdk.es135.js.map +1 -1
  131. package/dist/es/standards-sdk.es136.js +28 -42
  132. package/dist/es/standards-sdk.es136.js.map +1 -1
  133. package/dist/es/standards-sdk.es137.js +138 -760
  134. package/dist/es/standards-sdk.es137.js.map +1 -1
  135. package/dist/es/standards-sdk.es138.js +36 -50
  136. package/dist/es/standards-sdk.es138.js.map +1 -1
  137. package/dist/es/standards-sdk.es139.js +766 -64
  138. package/dist/es/standards-sdk.es139.js.map +1 -1
  139. package/dist/es/standards-sdk.es14.js +1 -1
  140. package/dist/es/standards-sdk.es141.js +13 -168
  141. package/dist/es/standards-sdk.es141.js.map +1 -1
  142. package/dist/es/standards-sdk.es142.js +55 -321
  143. package/dist/es/standards-sdk.es142.js.map +1 -1
  144. package/dist/es/standards-sdk.es143.js +120 -294
  145. package/dist/es/standards-sdk.es143.js.map +1 -1
  146. package/dist/es/standards-sdk.es144.js +191 -322
  147. package/dist/es/standards-sdk.es144.js.map +1 -1
  148. package/dist/es/standards-sdk.es145.js +294 -279
  149. package/dist/es/standards-sdk.es145.js.map +1 -1
  150. package/dist/es/standards-sdk.es146.js +440 -63
  151. package/dist/es/standards-sdk.es146.js.map +1 -1
  152. package/dist/es/standards-sdk.es147.js +327 -13
  153. package/dist/es/standards-sdk.es147.js.map +1 -1
  154. package/dist/es/standards-sdk.es148.js +79 -0
  155. package/dist/es/standards-sdk.es148.js.map +1 -0
  156. package/dist/es/standards-sdk.es15.js +1 -1
  157. package/dist/es/standards-sdk.es16.js +1 -1
  158. package/dist/es/standards-sdk.es17.js +5 -10
  159. package/dist/es/standards-sdk.es17.js.map +1 -1
  160. package/dist/es/standards-sdk.es19.js +11 -15
  161. package/dist/es/standards-sdk.es19.js.map +1 -1
  162. package/dist/es/standards-sdk.es2.js +26 -72
  163. package/dist/es/standards-sdk.es2.js.map +1 -1
  164. package/dist/es/standards-sdk.es20.js +8 -12
  165. package/dist/es/standards-sdk.es20.js.map +1 -1
  166. package/dist/es/standards-sdk.es21.js +1 -1
  167. package/dist/es/standards-sdk.es22.js +1 -1
  168. package/dist/es/standards-sdk.es23.js +1 -1
  169. package/dist/es/standards-sdk.es24.js +1 -1
  170. package/dist/es/standards-sdk.es25.js +1 -1
  171. package/dist/es/standards-sdk.es26.js +1 -1
  172. package/dist/es/standards-sdk.es27.js +1 -1
  173. package/dist/es/standards-sdk.es28.js +11 -15
  174. package/dist/es/standards-sdk.es28.js.map +1 -1
  175. package/dist/es/standards-sdk.es3.js +2 -2
  176. package/dist/es/standards-sdk.es31.js +1 -1
  177. package/dist/es/standards-sdk.es32.js +3 -3
  178. package/dist/es/standards-sdk.es33.js +1 -1
  179. package/dist/es/standards-sdk.es36.js +6 -11
  180. package/dist/es/standards-sdk.es36.js.map +1 -1
  181. package/dist/es/standards-sdk.es37.js +3 -3
  182. package/dist/es/standards-sdk.es38.js +1 -1
  183. package/dist/es/standards-sdk.es39.js +2 -2
  184. package/dist/es/standards-sdk.es40.js +1 -1
  185. package/dist/es/standards-sdk.es41.js +1 -1
  186. package/dist/es/standards-sdk.es42.js +2 -2
  187. package/dist/es/standards-sdk.es47.js +1 -1
  188. package/dist/es/standards-sdk.es5.js +2 -2
  189. package/dist/es/standards-sdk.es52.js +1 -1
  190. package/dist/es/standards-sdk.es54.js +1 -1
  191. package/dist/es/standards-sdk.es57.js +2 -2
  192. package/dist/es/standards-sdk.es59.js +1 -1
  193. package/dist/es/standards-sdk.es6.js +2 -2
  194. package/dist/es/standards-sdk.es60.js +1 -1
  195. package/dist/es/standards-sdk.es61.js +7 -11
  196. package/dist/es/standards-sdk.es61.js.map +1 -1
  197. package/dist/es/standards-sdk.es63.js +1 -1
  198. package/dist/es/standards-sdk.es65.js +2 -2
  199. package/dist/es/standards-sdk.es66.js +3 -3
  200. package/dist/es/standards-sdk.es69.js +2 -2
  201. package/dist/es/standards-sdk.es7.js +2 -2
  202. package/dist/es/standards-sdk.es70.js +3 -3
  203. package/dist/es/standards-sdk.es71.js +2 -2
  204. package/dist/es/standards-sdk.es72.js +1 -1
  205. package/dist/es/standards-sdk.es73.js.map +1 -1
  206. package/dist/es/standards-sdk.es75.js +2 -2
  207. package/dist/es/standards-sdk.es77.js +5 -3
  208. package/dist/es/standards-sdk.es77.js.map +1 -1
  209. package/dist/es/standards-sdk.es78.js +4 -10
  210. package/dist/es/standards-sdk.es78.js.map +1 -1
  211. package/dist/es/standards-sdk.es79.js +1 -1
  212. package/dist/es/standards-sdk.es8.js +1 -1
  213. package/dist/es/standards-sdk.es80.js +26 -15
  214. package/dist/es/standards-sdk.es80.js.map +1 -1
  215. package/dist/es/standards-sdk.es82.js +12 -4
  216. package/dist/es/standards-sdk.es82.js.map +1 -1
  217. package/dist/es/standards-sdk.es83.js +7 -6
  218. package/dist/es/standards-sdk.es83.js.map +1 -1
  219. package/dist/es/standards-sdk.es84.js +106 -5
  220. package/dist/es/standards-sdk.es84.js.map +1 -1
  221. package/dist/es/standards-sdk.es86.js +55 -21
  222. package/dist/es/standards-sdk.es86.js.map +1 -1
  223. package/dist/es/standards-sdk.es87.js +22 -75
  224. package/dist/es/standards-sdk.es87.js.map +1 -1
  225. package/dist/es/standards-sdk.es88.js +45 -30
  226. package/dist/es/standards-sdk.es88.js.map +1 -1
  227. package/dist/es/standards-sdk.es89.js +57 -22
  228. package/dist/es/standards-sdk.es89.js.map +1 -1
  229. package/dist/es/standards-sdk.es90.js +28 -23
  230. package/dist/es/standards-sdk.es90.js.map +1 -1
  231. package/dist/es/standards-sdk.es91.js +23 -167
  232. package/dist/es/standards-sdk.es91.js.map +1 -1
  233. package/dist/es/standards-sdk.es92.js +158 -119
  234. package/dist/es/standards-sdk.es92.js.map +1 -1
  235. package/dist/es/standards-sdk.es93.js +68 -95
  236. package/dist/es/standards-sdk.es93.js.map +1 -1
  237. package/dist/es/standards-sdk.es94.js +136 -119
  238. package/dist/es/standards-sdk.es94.js.map +1 -1
  239. package/dist/es/standards-sdk.es95.js +139 -39
  240. package/dist/es/standards-sdk.es95.js.map +1 -1
  241. package/dist/es/standards-sdk.es96.js +42 -257
  242. package/dist/es/standards-sdk.es96.js.map +1 -1
  243. package/dist/es/standards-sdk.es97.js +243 -80
  244. package/dist/es/standards-sdk.es97.js.map +1 -1
  245. package/dist/es/standards-sdk.es98.js +47 -48
  246. package/dist/es/standards-sdk.es98.js.map +1 -1
  247. package/dist/es/standards-sdk.es99.js +100 -28
  248. package/dist/es/standards-sdk.es99.js.map +1 -1
  249. package/dist/es/utils/dynamic-import.d.ts +1 -0
  250. package/dist/es/utils/dynamic-import.d.ts.map +1 -1
  251. package/package.json +65 -63
@@ -1,8 +1,10 @@
1
1
  import { z } from "zod";
2
2
  const HCS21_PROTOCOL = "hcs-21";
3
3
  const HCS21_MAX_MESSAGE_BYTES = 1024;
4
- const HCS21ManifestPointerPattern = /^hcs:\/\/1\/0\.0\.\d+\/\d+$/;
4
+ const HCS21_SAFE_MESSAGE_BYTES = 1e3;
5
+ const HCS21ManifestPointerPattern = /^(?:hcs:\/\/1\/0\.0\.\d+(?:\/\d+)?|ipfs:\/\/[a-zA-Z0-9]+|ar:\/\/[a-zA-Z0-9]+|oci:\/\/.+|https?:\/\/.+)$/;
5
6
  const HCS21TopicIdPattern = /^0\.0\.\d+$/;
7
+ const HCS21MetadataPointerPattern = /^(?:0\.0\.\d+|hcs:\/\/1\/0\.0\.\d+(?:\/\d+)?|ipfs:\/\/[a-zA-Z0-9]+|ar:\/\/[a-zA-Z0-9]+|oci:\/\/.+|https?:\/\/.+)$/;
6
8
  var HCS21TopicType = /* @__PURE__ */ ((HCS21TopicType2) => {
7
9
  HCS21TopicType2[HCS21TopicType2["ADAPTER_REGISTRY"] = 0] = "ADAPTER_REGISTRY";
8
10
  HCS21TopicType2[HCS21TopicType2["REGISTRY_OF_REGISTRIES"] = 1] = "REGISTRY_OF_REGISTRIES";
@@ -14,13 +16,14 @@ const adapterPackageSchema = z.object({
14
16
  version: z.string().min(1),
15
17
  integrity: z.string().min(1)
16
18
  });
17
- const floraContextSchema = z.object({
18
- account: z.string().min(1),
19
- threshold: z.string().min(1),
20
- ctopic: z.string().min(1),
21
- ttopic: z.string().min(1),
22
- stopic: z.string().min(1)
23
- });
19
+ const adapterConfigContextSchema = z.object({
20
+ type: z.string().min(1),
21
+ account: z.string().min(1).optional(),
22
+ threshold: z.string().min(1).optional(),
23
+ ctopic: z.string().min(1).optional(),
24
+ ttopic: z.string().min(1).optional(),
25
+ stopic: z.string().min(1).optional()
26
+ }).catchall(z.unknown());
24
27
  const adapterDeclarationSchema = z.object({
25
28
  p: z.literal(HCS21_PROTOCOL),
26
29
  op: z.enum(["register", "update", "delete"]),
@@ -29,17 +32,18 @@ const adapterDeclarationSchema = z.object({
29
32
  package: adapterPackageSchema,
30
33
  manifest: z.string().regex(
31
34
  HCS21ManifestPointerPattern,
32
- "manifest must be an HCS-1 HRL (hcs://1/<topicId>/<sequence>)"
35
+ "manifest must be a resolvable URI (hcs://1/<topicId>[/sequence], ipfs://, ar://, oci://, https://)"
33
36
  ),
34
- flora: floraContextSchema,
35
- state_model: z.string().min(1),
37
+ manifest_sequence: z.number().int().positive().optional(),
38
+ config: adapterConfigContextSchema,
39
+ state_model: z.string().min(1).optional(),
36
40
  signature: z.string().min(1).optional()
37
41
  });
38
42
  const adapterManifestSchema = z.object({
39
43
  meta: z.object({
40
44
  spec_version: z.string().min(1),
41
45
  adapter_version: z.string().min(1),
42
- minimum_flora_version: z.string().min(1),
46
+ minimum_flora_version: z.string().min(1).optional(),
43
47
  generated: z.string().min(1)
44
48
  }),
45
49
  adapter: z.object({
@@ -74,10 +78,15 @@ const adapterManifestSchema = z.object({
74
78
  capabilities: z.object({
75
79
  discovery: z.boolean(),
76
80
  communication: z.boolean(),
77
- protocols: z.array(z.string().min(1))
81
+ protocols: z.array(z.string().min(1)),
82
+ discovery_tags: z.array(z.string().min(1)).optional(),
83
+ communication_channels: z.array(z.string().min(1)).optional(),
84
+ extras: z.record(z.string(), z.unknown()).optional()
78
85
  }),
79
86
  consensus: z.object({
80
- entity_schema: z.string().min(1),
87
+ state_model: z.string().min(1).optional(),
88
+ profile_uri: z.string().min(1).optional(),
89
+ entity_schema: z.string().min(1).optional(),
81
90
  required_fields: z.array(z.string().min(1)),
82
91
  hashing: z.literal("sha384")
83
92
  })
@@ -102,14 +111,16 @@ const metadataDocumentSchema = z.union([
102
111
  ]);
103
112
  export {
104
113
  HCS21ManifestPointerPattern,
114
+ HCS21MetadataPointerPattern,
105
115
  HCS21TopicIdPattern,
106
116
  HCS21TopicType,
107
117
  HCS21_MAX_MESSAGE_BYTES,
108
118
  HCS21_PROTOCOL,
119
+ HCS21_SAFE_MESSAGE_BYTES,
120
+ adapterConfigContextSchema,
109
121
  adapterDeclarationSchema,
110
122
  adapterManifestSchema,
111
123
  adapterPackageSchema,
112
- floraContextSchema,
113
124
  metadataDocumentSchema,
114
125
  registryMetadataSchema
115
126
  };
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es80.js","sources":["../../src/hcs-21/types.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const HCS21_PROTOCOL = 'hcs-21';\nexport const HCS21_MAX_MESSAGE_BYTES = 1024;\nexport const HCS21ManifestPointerPattern = /^hcs:\\/\\/1\\/0\\.0\\.\\d+\\/\\d+$/;\nexport const HCS21TopicIdPattern = /^0\\.0\\.\\d+$/;\n\nexport type HCS21Operation = 'register' | 'update' | 'delete';\n\nexport interface AdapterPackage {\n registry: string;\n name: string;\n version: string;\n integrity: string;\n}\n\nexport interface FloraContext {\n account: string;\n threshold: string;\n ctopic: string;\n ttopic: string;\n stopic: string;\n}\n\nexport interface AdapterDeclaration {\n p: typeof HCS21_PROTOCOL;\n op: HCS21Operation;\n adapter_id: string;\n entity: string;\n package: AdapterPackage;\n manifest: string;\n flora: FloraContext;\n state_model: string;\n signature?: string;\n}\n\nexport interface AdapterDeclarationEnvelope {\n declaration: AdapterDeclaration;\n consensusTimestamp?: string;\n sequenceNumber: number;\n payer?: string;\n}\n\nexport enum HCS21TopicType {\n ADAPTER_REGISTRY = 0,\n REGISTRY_OF_REGISTRIES = 1,\n}\n\nexport interface ManifestPointer {\n pointer: string;\n topicId: string;\n sequenceNumber: number;\n jobId?: string;\n transactionId?: string;\n}\n\nexport const adapterPackageSchema = z.object({\n registry: z.string().min(1),\n name: z.string().min(1),\n version: z.string().min(1),\n integrity: z.string().min(1),\n});\n\nexport const floraContextSchema = z.object({\n account: z.string().min(1),\n threshold: z.string().min(1),\n ctopic: z.string().min(1),\n ttopic: z.string().min(1),\n stopic: z.string().min(1),\n});\n\nexport const adapterDeclarationSchema = z.object({\n p: z.literal(HCS21_PROTOCOL),\n op: z.enum(['register', 'update', 'delete']),\n adapter_id: z.string().min(1),\n entity: z.string().min(1),\n package: adapterPackageSchema,\n manifest: z\n .string()\n .regex(\n HCS21ManifestPointerPattern,\n 'manifest must be an HCS-1 HRL (hcs://1/<topicId>/<sequence>)',\n ),\n flora: floraContextSchema,\n state_model: z.string().min(1),\n signature: z.string().min(1).optional(),\n});\n\nexport const adapterManifestSchema = z.object({\n meta: z.object({\n spec_version: z.string().min(1),\n adapter_version: z.string().min(1),\n minimum_flora_version: z.string().min(1),\n generated: z.string().min(1),\n }),\n adapter: z.object({\n name: z.string().min(1),\n id: z.string().min(1),\n maintainers: z\n .array(\n z.object({\n name: z.string().min(1),\n contact: z.string().min(1),\n }),\n )\n .min(1),\n license: z.string().min(1),\n }),\n package: z.object({\n registry: z.string().min(1),\n dist_tag: z.string().min(1).optional(),\n artifacts: z\n .array(\n z.object({\n url: z.string().min(1),\n digest: z.string().min(1),\n signature: z.string().min(1).optional(),\n }),\n )\n .min(1),\n }),\n runtime: z.object({\n platforms: z.array(z.string().min(1)).min(1),\n primary: z.string().min(1),\n entry: z.string().min(1),\n dependencies: z.array(z.string().min(1)).optional(),\n env: z.array(z.string().min(1)).optional(),\n }),\n capabilities: z.object({\n discovery: z.boolean(),\n communication: z.boolean(),\n protocols: z.array(z.string().min(1)),\n }),\n consensus: z.object({\n entity_schema: z.string().min(1),\n required_fields: z.array(z.string().min(1)),\n hashing: z.literal('sha384'),\n }),\n});\n\nexport const registryMetadataSchema = z.object({\n version: z.string().min(1),\n name: z.string().min(1),\n description: z.string().min(1),\n operator: z.object({\n account: z.string().min(1),\n name: z.string().optional(),\n contact: z.string().optional(),\n }),\n entityTypes: z.array(z.string().min(1)),\n categories: z.array(z.string().min(1)).optional(),\n tags: z.array(z.string().min(1)).optional(),\n links: z.record(z.string().min(1)).optional(),\n});\n\nexport const metadataDocumentSchema = z.union([\n adapterManifestSchema,\n registryMetadataSchema,\n]);\n\nexport type AdapterDeclarationValidation = z.infer<\n typeof adapterDeclarationSchema\n>;\nexport type AdapterManifest = z.infer<typeof adapterManifestSchema>;\nexport type RegistryMetadataRecord = z.infer<typeof registryMetadataSchema>;\nexport type HCS21MetadataDocument = AdapterManifest | RegistryMetadataRecord;\n"],"names":["HCS21TopicType"],"mappings":";AAEO,MAAM,iBAAiB;AACvB,MAAM,0BAA0B;AAChC,MAAM,8BAA8B;AACpC,MAAM,sBAAsB;AAsC5B,IAAK,mCAAAA,oBAAL;AACLA,kBAAAA,gBAAA,sBAAmB,CAAA,IAAnB;AACAA,kBAAAA,gBAAA,4BAAyB,CAAA,IAAzB;AAFU,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAaL,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,UAAU,EAAE,SAAS,IAAI,CAAC;AAAA,EAC1B,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,EACtB,SAAS,EAAE,SAAS,IAAI,CAAC;AAAA,EACzB,WAAW,EAAE,OAAA,EAAS,IAAI,CAAC;AAC7B,CAAC;AAEM,MAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,SAAS,EAAE,SAAS,IAAI,CAAC;AAAA,EACzB,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,EAC3B,QAAQ,EAAE,SAAS,IAAI,CAAC;AAAA,EACxB,QAAQ,EAAE,SAAS,IAAI,CAAC;AAAA,EACxB,QAAQ,EAAE,OAAA,EAAS,IAAI,CAAC;AAC1B,CAAC;AAEM,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,GAAG,EAAE,QAAQ,cAAc;AAAA,EAC3B,IAAI,EAAE,KAAK,CAAC,YAAY,UAAU,QAAQ,CAAC;AAAA,EAC3C,YAAY,EAAE,SAAS,IAAI,CAAC;AAAA,EAC5B,QAAQ,EAAE,SAAS,IAAI,CAAC;AAAA,EACxB,SAAS;AAAA,EACT,UAAU,EACP,OAAA,EACA;AAAA,IACC;AAAA,IACA;AAAA,EAAA;AAAA,EAEJ,OAAO;AAAA,EACP,aAAa,EAAE,SAAS,IAAI,CAAC;AAAA,EAC7B,WAAW,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAC/B,CAAC;AAEM,MAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,MAAM,EAAE,OAAO;AAAA,IACb,cAAc,EAAE,SAAS,IAAI,CAAC;AAAA,IAC9B,iBAAiB,EAAE,SAAS,IAAI,CAAC;AAAA,IACjC,uBAAuB,EAAE,SAAS,IAAI,CAAC;AAAA,IACvC,WAAW,EAAE,OAAA,EAAS,IAAI,CAAC;AAAA,EAAA,CAC5B;AAAA,EACD,SAAS,EAAE,OAAO;AAAA,IAChB,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,IACtB,IAAI,EAAE,SAAS,IAAI,CAAC;AAAA,IACpB,aAAa,EACV;AAAA,MACC,EAAE,OAAO;AAAA,QACP,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,QACtB,SAAS,EAAE,OAAA,EAAS,IAAI,CAAC;AAAA,MAAA,CAC1B;AAAA,IAAA,EAEF,IAAI,CAAC;AAAA,IACR,SAAS,EAAE,OAAA,EAAS,IAAI,CAAC;AAAA,EAAA,CAC1B;AAAA,EACD,SAAS,EAAE,OAAO;AAAA,IAChB,UAAU,EAAE,SAAS,IAAI,CAAC;AAAA,IAC1B,UAAU,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,IAC5B,WAAW,EACR;AAAA,MACC,EAAE,OAAO;AAAA,QACP,KAAK,EAAE,SAAS,IAAI,CAAC;AAAA,QACrB,QAAQ,EAAE,SAAS,IAAI,CAAC;AAAA,QACxB,WAAW,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,MAAS,CACvC;AAAA,IAAA,EAEF,IAAI,CAAC;AAAA,EAAA,CACT;AAAA,EACD,SAAS,EAAE,OAAO;AAAA,IAChB,WAAW,EAAE,MAAM,EAAE,OAAA,EAAS,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AAAA,IAC3C,SAAS,EAAE,SAAS,IAAI,CAAC;AAAA,IACzB,OAAO,EAAE,SAAS,IAAI,CAAC;AAAA,IACvB,cAAc,EAAE,MAAM,EAAE,OAAA,EAAS,IAAI,CAAC,CAAC,EAAE,SAAA;AAAA,IACzC,KAAK,EAAE,MAAM,EAAE,OAAA,EAAS,IAAI,CAAC,CAAC,EAAE,SAAA;AAAA,EAAS,CAC1C;AAAA,EACD,cAAc,EAAE,OAAO;AAAA,IACrB,WAAW,EAAE,QAAA;AAAA,IACb,eAAe,EAAE,QAAA;AAAA,IACjB,WAAW,EAAE,MAAM,EAAE,SAAS,IAAI,CAAC,CAAC;AAAA,EAAA,CACrC;AAAA,EACD,WAAW,EAAE,OAAO;AAAA,IAClB,eAAe,EAAE,SAAS,IAAI,CAAC;AAAA,IAC/B,iBAAiB,EAAE,MAAM,EAAE,SAAS,IAAI,CAAC,CAAC;AAAA,IAC1C,SAAS,EAAE,QAAQ,QAAQ;AAAA,EAAA,CAC5B;AACH,CAAC;AAEM,MAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,SAAS,EAAE,SAAS,IAAI,CAAC;AAAA,EACzB,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,EACtB,aAAa,EAAE,SAAS,IAAI,CAAC;AAAA,EAC7B,UAAU,EAAE,OAAO;AAAA,IACjB,SAAS,EAAE,SAAS,IAAI,CAAC;AAAA,IACzB,MAAM,EAAE,OAAA,EAAS,SAAA;AAAA,IACjB,SAAS,EAAE,OAAA,EAAS,SAAA;AAAA,EAAS,CAC9B;AAAA,EACD,aAAa,EAAE,MAAM,EAAE,SAAS,IAAI,CAAC,CAAC;AAAA,EACtC,YAAY,EAAE,MAAM,EAAE,OAAA,EAAS,IAAI,CAAC,CAAC,EAAE,SAAA;AAAA,EACvC,MAAM,EAAE,MAAM,EAAE,OAAA,EAAS,IAAI,CAAC,CAAC,EAAE,SAAA;AAAA,EACjC,OAAO,EAAE,OAAO,EAAE,OAAA,EAAS,IAAI,CAAC,CAAC,EAAE,SAAA;AACrC,CAAC;AAEM,MAAM,yBAAyB,EAAE,MAAM;AAAA,EAC5C;AAAA,EACA;AACF,CAAC;"}
1
+ {"version":3,"file":"standards-sdk.es80.js","sources":["../../src/hcs-21/types.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const HCS21_PROTOCOL = 'hcs-21';\nexport const HCS21_MAX_MESSAGE_BYTES = 1024;\nexport const HCS21_SAFE_MESSAGE_BYTES = 1000;\nexport const HCS21ManifestPointerPattern =\n /^(?:hcs:\\/\\/1\\/0\\.0\\.\\d+(?:\\/\\d+)?|ipfs:\\/\\/[a-zA-Z0-9]+|ar:\\/\\/[a-zA-Z0-9]+|oci:\\/\\/.+|https?:\\/\\/.+)$/;\nexport const HCS21TopicIdPattern = /^0\\.0\\.\\d+$/;\nexport const HCS21MetadataPointerPattern =\n /^(?:0\\.0\\.\\d+|hcs:\\/\\/1\\/0\\.0\\.\\d+(?:\\/\\d+)?|ipfs:\\/\\/[a-zA-Z0-9]+|ar:\\/\\/[a-zA-Z0-9]+|oci:\\/\\/.+|https?:\\/\\/.+)$/;\n\nexport type HCS21Operation = 'register' | 'update' | 'delete';\n\nexport interface AdapterPackage {\n registry: string;\n name: string;\n version: string;\n integrity: string;\n}\n\nexport interface AdapterConfigContext {\n type: string;\n account?: string;\n threshold?: string;\n ctopic?: string;\n ttopic?: string;\n stopic?: string;\n [key: string]: unknown;\n}\n\nexport interface AdapterDeclaration {\n p: typeof HCS21_PROTOCOL;\n op: HCS21Operation;\n adapter_id: string;\n entity: string;\n package: AdapterPackage;\n manifest: string;\n manifest_sequence?: number;\n config: AdapterConfigContext;\n state_model?: string;\n signature?: string;\n}\n\nexport interface AdapterDeclarationEnvelope {\n declaration: AdapterDeclaration;\n consensusTimestamp?: string;\n sequenceNumber: number;\n payer?: string;\n}\n\nexport enum HCS21TopicType {\n ADAPTER_REGISTRY = 0,\n REGISTRY_OF_REGISTRIES = 1,\n}\n\nexport interface ManifestPointer {\n pointer: string;\n topicId: string;\n sequenceNumber: number;\n manifestSequence?: number;\n jobId?: string;\n transactionId?: string;\n}\n\nexport const adapterPackageSchema = z.object({\n registry: z.string().min(1),\n name: z.string().min(1),\n version: z.string().min(1),\n integrity: z.string().min(1),\n});\n\nexport const adapterConfigContextSchema = z\n .object({\n type: z.string().min(1),\n account: z.string().min(1).optional(),\n threshold: z.string().min(1).optional(),\n ctopic: z.string().min(1).optional(),\n ttopic: z.string().min(1).optional(),\n stopic: z.string().min(1).optional(),\n })\n .catchall(z.unknown());\n\nexport const adapterDeclarationSchema = z.object({\n p: z.literal(HCS21_PROTOCOL),\n op: z.enum(['register', 'update', 'delete']),\n adapter_id: z.string().min(1),\n entity: z.string().min(1),\n package: adapterPackageSchema,\n manifest: z\n .string()\n .regex(\n HCS21ManifestPointerPattern,\n 'manifest must be a resolvable URI (hcs://1/<topicId>[/sequence], ipfs://, ar://, oci://, https://)',\n ),\n manifest_sequence: z.number().int().positive().optional(),\n config: adapterConfigContextSchema,\n state_model: z.string().min(1).optional(),\n signature: z.string().min(1).optional(),\n});\n\nexport const adapterManifestSchema = z.object({\n meta: z.object({\n spec_version: z.string().min(1),\n adapter_version: z.string().min(1),\n minimum_flora_version: z.string().min(1).optional(),\n generated: z.string().min(1),\n }),\n adapter: z.object({\n name: z.string().min(1),\n id: z.string().min(1),\n maintainers: z\n .array(\n z.object({\n name: z.string().min(1),\n contact: z.string().min(1),\n }),\n )\n .min(1),\n license: z.string().min(1),\n }),\n package: z.object({\n registry: z.string().min(1),\n dist_tag: z.string().min(1).optional(),\n artifacts: z\n .array(\n z.object({\n url: z.string().min(1),\n digest: z.string().min(1),\n signature: z.string().min(1).optional(),\n }),\n )\n .min(1),\n }),\n runtime: z.object({\n platforms: z.array(z.string().min(1)).min(1),\n primary: z.string().min(1),\n entry: z.string().min(1),\n dependencies: z.array(z.string().min(1)).optional(),\n env: z.array(z.string().min(1)).optional(),\n }),\n capabilities: z.object({\n discovery: z.boolean(),\n communication: z.boolean(),\n protocols: z.array(z.string().min(1)),\n discovery_tags: z.array(z.string().min(1)).optional(),\n communication_channels: z.array(z.string().min(1)).optional(),\n extras: z.record(z.string(), z.unknown()).optional(),\n }),\n consensus: z.object({\n state_model: z.string().min(1).optional(),\n profile_uri: z.string().min(1).optional(),\n entity_schema: z.string().min(1).optional(),\n required_fields: z.array(z.string().min(1)),\n hashing: z.literal('sha384'),\n }),\n});\n\nexport const registryMetadataSchema = z.object({\n version: z.string().min(1),\n name: z.string().min(1),\n description: z.string().min(1),\n operator: z.object({\n account: z.string().min(1),\n name: z.string().optional(),\n contact: z.string().optional(),\n }),\n entityTypes: z.array(z.string().min(1)),\n categories: z.array(z.string().min(1)).optional(),\n tags: z.array(z.string().min(1)).optional(),\n links: z.record(z.string().min(1)).optional(),\n});\n\nexport const metadataDocumentSchema = z.union([\n adapterManifestSchema,\n registryMetadataSchema,\n]);\n\nexport type AdapterDeclarationValidation = z.infer<\n typeof adapterDeclarationSchema\n>;\nexport type AdapterManifest = z.infer<typeof adapterManifestSchema>;\nexport type RegistryMetadataRecord = z.infer<typeof registryMetadataSchema>;\nexport type HCS21MetadataDocument = AdapterManifest | RegistryMetadataRecord;\n"],"names":["HCS21TopicType"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es136.js";
2
- import { HCS21TopicType, HCS21TopicIdPattern } from "./standards-sdk.es80.js";
1
+ import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es138.js";
2
+ import { HCS21TopicType, HCS21MetadataPointerPattern, HCS21_SAFE_MESSAGE_BYTES, HCS21_MAX_MESSAGE_BYTES } from "./standards-sdk.es80.js";
3
3
  import { HCS21ValidationError } from "./standards-sdk.es81.js";
4
4
  function buildHcs21RegistryMemo(params) {
5
5
  const indexed = params.indexed ?? 0;
6
6
  const topicType = params.type ?? HCS21TopicType.ADAPTER_REGISTRY;
7
- if (params.metaTopicId && !HCS21TopicIdPattern.test(params.metaTopicId)) {
7
+ if (params.metaTopicId && !HCS21MetadataPointerPattern.test(params.metaTopicId)) {
8
8
  throw new HCS21ValidationError(
9
- "Meta topic must be a Hedera topic ID (0.0.x)",
9
+ "Meta value must be a short pointer (topic ID, HRL, IPFS, Arweave, OCI, or HTTPS)",
10
10
  "invalid_payload"
11
11
  );
12
12
  }
@@ -28,6 +28,14 @@ function buildHcs21CreateRegistryTx(params) {
28
28
  });
29
29
  }
30
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
+ );
38
+ }
31
39
  return buildMessageTx({
32
40
  topicId: params.topicId,
33
41
  message: JSON.stringify(params.declaration),
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es82.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 { HCS21TopicType, AdapterDeclaration, HCS21TopicIdPattern } 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 (params.metaTopicId && !HCS21TopicIdPattern.test(params.metaTopicId)) {\n throw new HCS21ValidationError(\n 'Meta topic must be a Hedera topic ID (0.0.x)',\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 return buildMessageTx({\n topicId: params.topicId,\n message: JSON.stringify(params.declaration),\n transactionMemo: params.transactionMemo,\n });\n}\n"],"names":[],"mappings":";;;AAaO,SAAS,uBAAuB,QAK5B;AACT,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,YAAY,OAAO,QAAQ,eAAe;AAEhD,MAAI,OAAO,eAAe,CAAC,oBAAoB,KAAK,OAAO,WAAW,GAAG;AACvE,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,SAAO,eAAe;AAAA,IACpB,SAAS,OAAO;AAAA,IAChB,SAAS,KAAK,UAAU,OAAO,WAAW;AAAA,IAC1C,iBAAiB,OAAO;AAAA,EAAA,CACzB;AACH;"}
1
+ {"version":3,"file":"standards-sdk.es82.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,7 +1,7 @@
1
- import { HederaMirrorNode } from "./standards-sdk.es126.js";
2
- import { Logger } from "./standards-sdk.es105.js";
1
+ import { HederaMirrorNode } from "./standards-sdk.es127.js";
2
+ import { Logger } from "./standards-sdk.es106.js";
3
3
  import { HCS21ValidationError } from "./standards-sdk.es81.js";
4
- import { HCS21_PROTOCOL, adapterDeclarationSchema, HCS21_MAX_MESSAGE_BYTES } from "./standards-sdk.es80.js";
4
+ import { HCS21_PROTOCOL, adapterDeclarationSchema, HCS21_SAFE_MESSAGE_BYTES, HCS21_MAX_MESSAGE_BYTES } from "./standards-sdk.es80.js";
5
5
  class HCS21BaseClient {
6
6
  constructor(params) {
7
7
  this.network = params.network;
@@ -18,7 +18,8 @@ class HCS21BaseClient {
18
18
  entity: params.entity,
19
19
  package: params.adapterPackage,
20
20
  manifest: params.manifest,
21
- flora: params.flora,
21
+ ...params.manifestSequence ? { manifest_sequence: params.manifestSequence } : {},
22
+ config: params.config,
22
23
  state_model: params.stateModel,
23
24
  signature: params.signature
24
25
  };
@@ -65,9 +66,9 @@ class HCS21BaseClient {
65
66
  assertSizeLimit(payload) {
66
67
  const json = JSON.stringify(payload);
67
68
  const bytes = Buffer.byteLength(json, "utf8");
68
- if (bytes > HCS21_MAX_MESSAGE_BYTES) {
69
+ if (bytes > HCS21_SAFE_MESSAGE_BYTES) {
69
70
  throw new HCS21ValidationError(
70
- `HCS-21 payload exceeds 1024 bytes (${bytes})`,
71
+ `HCS-21 payload exceeds safe limit of ${HCS21_SAFE_MESSAGE_BYTES} bytes (${bytes}); Hedera cap is ${HCS21_MAX_MESSAGE_BYTES}`,
71
72
  "size_exceeded"
72
73
  );
73
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es83.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 FloraContext,\n HCS21_MAX_MESSAGE_BYTES,\n HCS21Operation,\n HCS21_PROTOCOL,\n adapterDeclarationSchema,\n} from './types';\n\nexport interface BuildDeclarationParams {\n op: HCS21Operation;\n adapterId: string;\n entity: string;\n adapterPackage: AdapterPackage;\n manifest: string;\n flora: FloraContext;\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 flora: params.flora,\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 protected assertSizeLimit(payload: AdapterDeclaration): void {\n const json = JSON.stringify(payload);\n const bytes = Buffer.byteLength(json, 'utf8');\n if (bytes > HCS21_MAX_MESSAGE_BYTES) {\n throw new HCS21ValidationError(\n `HCS-21 payload exceeds 1024 bytes (${bytes})`,\n 'size_exceeded',\n );\n }\n }\n}\n"],"names":[],"mappings":";;;;AA+BO,MAAM,gBAAgB;AAAA,EAK3B,YAAY,QAIT;AACD,SAAK,UAAU,OAAO;AACtB,SAAK,SACH,OAAO,UAAU,IAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,UAAU;AACjE,SAAK,aAAa,IAAI,iBAAiB,KAAK,SAAS,KAAK,QAAQ;AAAA,MAChE,WAAW,OAAO;AAAA,IAAA,CACnB;AAAA,EACH;AAAA,EAEA,iBAAiB,QAAoD;AACnE,UAAM,cAAkC;AAAA,MACtC,GAAG;AAAA,MACH,IAAI,OAAO;AAAA,MACX,YAAY,OAAO;AAAA,MACnB,QAAQ,OAAO;AAAA,MACf,SAAS,OAAO;AAAA,MAChB,UAAU,OAAO;AAAA,MACjB,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,IAAA;AAGpB,WAAO,KAAK,oBAAoB,WAAW;AAAA,EAC7C;AAAA,EAEA,oBAAoB,OAAoC;AACtD,QAAI;AACF,YAAM,UAAU,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI;AAChE,YAAM,SAAS,yBAAyB;AAAA,QACtC;AAAA,MAAA;AAEF,WAAK,gBAAgB,MAAM;AAC3B,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU;AAC3C,YAAM,IAAI,qBAAqB,SAAS,iBAAiB;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,SACA,SACuC;AACvC,UAAM,cAAc,MAAM,KAAK,WAAW,iBAAiB,SAAS;AAAA,MAClE,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS;AAAA,IAAA,CACjB;AAED,UAAM,YAA0C,CAAA;AAEhD,eAAW,WAAW,aAAa;AACjC,UAAI,QAAQ,MAAM,gBAAgB;AAChC;AAAA,MACF;AAEA,UAAI;AACF,cAAM,cAAc,KAAK,oBAAoB,OAAO;AACpD,kBAAU,KAAK;AAAA,UACb;AAAA,UACA,oBAAoB,QAAQ;AAAA,UAC5B,gBAAgB,QAAQ;AAAA,UACxB,OAAO,QAAQ;AAAA,QAAA,CAChB;AAAA,MACH,SAAS,OAAO;AACd,cAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU;AACxD,aAAK,OAAO,KAAK,oCAAoC,MAAM,EAAE;AAAA,MAC/D;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEU,gBAAgB,SAAmC;AAC3D,UAAM,OAAO,KAAK,UAAU,OAAO;AACnC,UAAM,QAAQ,OAAO,WAAW,MAAM,MAAM;AAC5C,QAAI,QAAQ,yBAAyB;AACnC,YAAM,IAAI;AAAA,QACR,sCAAsC,KAAK;AAAA,QAC3C;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es83.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} 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 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":";;;;AAiCO,MAAM,gBAAgB;AAAA,EAK3B,YAAY,QAIT;AACD,SAAK,UAAU,OAAO;AACtB,SAAK,SACH,OAAO,UAAU,IAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,UAAU;AACjE,SAAK,aAAa,IAAI,iBAAiB,KAAK,SAAS,KAAK,QAAQ;AAAA,MAChE,WAAW,OAAO;AAAA,IAAA,CACnB;AAAA,EACH;AAAA,EAEA,iBAAiB,QAAoD;AACnE,UAAM,cAAkC;AAAA,MACtC,GAAG;AAAA,MACH,IAAI,OAAO;AAAA,MACX,YAAY,OAAO;AAAA,MACnB,QAAQ,OAAO;AAAA,MACf,SAAS,OAAO;AAAA,MAChB,UAAU,OAAO;AAAA,MACjB,GAAI,OAAO,mBACP,EAAE,mBAAmB,OAAO,iBAAA,IAC5B,CAAA;AAAA,MACJ,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,IAAA;AAGpB,WAAO,KAAK,oBAAoB,WAAW;AAAA,EAC7C;AAAA,EAEA,oBAAoB,OAAoC;AACtD,QAAI;AACF,YAAM,UAAU,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI;AAChE,YAAM,SAAS,yBAAyB;AAAA,QACtC;AAAA,MAAA;AAEF,WAAK,gBAAgB,MAAM;AAC3B,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU;AAC3C,YAAM,IAAI,qBAAqB,SAAS,iBAAiB;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,SACA,SACuC;AACvC,UAAM,cAAc,MAAM,KAAK,WAAW,iBAAiB,SAAS;AAAA,MAClE,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS;AAAA,IAAA,CACjB;AAED,UAAM,YAA0C,CAAA;AAEhD,eAAW,WAAW,aAAa;AACjC,UAAI,QAAQ,MAAM,gBAAgB;AAChC;AAAA,MACF;AAEA,UAAI;AACF,cAAM,cAAc,KAAK,oBAAoB,OAAO;AACpD,kBAAU,KAAK;AAAA,UACb;AAAA,UACA,oBAAoB,QAAQ;AAAA,UAC5B,gBAAgB,QAAQ;AAAA,UACxB,OAAO,QAAQ;AAAA,QAAA,CAChB;AAAA,MACH,SAAS,OAAO;AACd,cAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU;AACxD,aAAK,OAAO,KAAK,oCAAoC,MAAM,EAAE;AAAA,MAC/D;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEU,gBAAgB,SAAmC;AAC3D,UAAM,OAAO,KAAK,UAAU,OAAO;AACnC,UAAM,QAAQ,OAAO,WAAW,MAAM,MAAM;AAC5C,QAAI,QAAQ,0BAA0B;AACpC,YAAM,IAAI;AAAA,QACR,wCAAwC,wBAAwB,WAAW,KAAK,oBAAoB,uBAAuB;AAAA,QAC3H;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AACF;"}
@@ -1,12 +1,14 @@
1
1
  import { Client, Status } from "@hashgraph/sdk";
2
- import { createNodeOperatorContext } from "./standards-sdk.es135.js";
3
- import { Logger } from "./standards-sdk.es105.js";
2
+ import { createNodeOperatorContext } from "./standards-sdk.es137.js";
3
+ import { Logger } from "./standards-sdk.es106.js";
4
4
  import { HCS21BaseClient } from "./standards-sdk.es83.js";
5
5
  import { metadataDocumentSchema, HCS21ManifestPointerPattern } from "./standards-sdk.es80.js";
6
6
  import { buildHcs21CreateRegistryTx, buildHcs21MessageTx } from "./standards-sdk.es82.js";
7
+ import { buildHcs2CreateRegistryTx, buildHcs2RegisterTx } from "./standards-sdk.es72.js";
8
+ import { HCS2RegistryType } from "./standards-sdk.es68.js";
7
9
  import { HCS21ValidationError } from "./standards-sdk.es81.js";
8
- import { inscribe } from "./standards-sdk.es124.js";
9
- import { getTopicId } from "./standards-sdk.es114.js";
10
+ import { inscribe } from "./standards-sdk.es125.js";
11
+ import { getTopicId } from "./standards-sdk.es115.js";
10
12
  class HCS21Client extends HCS21BaseClient {
11
13
  constructor(config) {
12
14
  const logger = config.logger || new Logger({ level: config.logLevel || "info", module: "HCS-21" });
@@ -76,6 +78,7 @@ class HCS21Client extends HCS21BaseClient {
76
78
  topicId,
77
79
  rawSequence
78
80
  );
81
+ const declarationManifestSequence = inscription.result?.manifest_sequence;
79
82
  const resultDetails = inscription.result && "jobId" in inscription.result ? {
80
83
  jobId: inscription.result.jobId,
81
84
  transactionId: inscription.result.transactionId
@@ -84,6 +87,7 @@ class HCS21Client extends HCS21BaseClient {
84
87
  pointer: pointerResult.pointer,
85
88
  topicId,
86
89
  sequenceNumber: pointerResult.sequenceNumber,
90
+ manifestSequence: declarationManifestSequence || pointerResult.sequenceNumber,
87
91
  ...resultDetails
88
92
  };
89
93
  }
@@ -111,6 +115,103 @@ class HCS21Client extends HCS21BaseClient {
111
115
  }
112
116
  return receipt.topicId.toString();
113
117
  }
118
+ async createRegistryVersionTopic(params) {
119
+ await this.operatorCtx.ensureInitialized();
120
+ const tx = buildHcs2CreateRegistryTx({
121
+ registryType: HCS2RegistryType.NON_INDEXED,
122
+ ttl: params.ttl,
123
+ adminKey: params.adminKey,
124
+ submitKey: params.submitKey,
125
+ memoOverride: params.memoOverride,
126
+ operatorPublicKey: this.operatorCtx.operatorKey.publicKey
127
+ });
128
+ if (params.transactionMemo) {
129
+ tx.setTransactionMemo(params.transactionMemo);
130
+ }
131
+ const response = await tx.execute(this.client);
132
+ const receipt = await response.getReceipt(this.client);
133
+ if (receipt.status !== Status.Success || !receipt.topicId) {
134
+ throw new HCS21ValidationError(
135
+ "Failed to create HCS-2 registry version topic",
136
+ "invalid_payload"
137
+ );
138
+ }
139
+ return receipt.topicId.toString();
140
+ }
141
+ async publishRegistryVersion(params) {
142
+ await this.operatorCtx.ensureInitialized();
143
+ const tx = buildHcs2RegisterTx({
144
+ registryTopicId: params.versionTopicId,
145
+ targetTopicId: params.registryTopicId,
146
+ metadata: params.metadata,
147
+ memo: params.memo,
148
+ analyticsMemo: params.transactionMemo
149
+ });
150
+ const response = await tx.execute(this.client);
151
+ const receipt = await response.getReceipt(this.client);
152
+ if (receipt.status !== Status.Success) {
153
+ throw new HCS21ValidationError(
154
+ "Failed to publish registry version pointer",
155
+ "invalid_payload"
156
+ );
157
+ }
158
+ return {
159
+ sequenceNumber: receipt.topicSequenceNumber?.toNumber(),
160
+ transactionId: response.transactionId.toString()
161
+ };
162
+ }
163
+ async registerVersionTopic(params) {
164
+ await this.operatorCtx.ensureInitialized();
165
+ const tx = buildHcs2RegisterTx({
166
+ registryTopicId: params.registryOfRegistriesTopicId,
167
+ targetTopicId: params.versionTopicId,
168
+ metadata: params.metadata,
169
+ memo: params.memo,
170
+ analyticsMemo: params.transactionMemo
171
+ });
172
+ const response = await tx.execute(this.client);
173
+ const receipt = await response.getReceipt(this.client);
174
+ if (receipt.status !== Status.Success) {
175
+ throw new HCS21ValidationError(
176
+ "Failed to register version topic in registry-of-registries",
177
+ "invalid_payload"
178
+ );
179
+ }
180
+ return {
181
+ sequenceNumber: receipt.topicSequenceNumber?.toNumber(),
182
+ transactionId: response.transactionId.toString()
183
+ };
184
+ }
185
+ async resolveRegistryPointer(versionTopicId) {
186
+ const [latest] = await this.mirrorNode.getTopicMessages(versionTopicId, {
187
+ limit: 1,
188
+ order: "desc"
189
+ });
190
+ if (!latest) {
191
+ throw new HCS21ValidationError(
192
+ "Version pointer topic has no messages",
193
+ "invalid_payload"
194
+ );
195
+ }
196
+ const registryTopicId = latest.t_id;
197
+ if (typeof registryTopicId !== "string" || registryTopicId.length === 0) {
198
+ throw new HCS21ValidationError(
199
+ "Version pointer topic does not include a target topic ID (`t_id`)",
200
+ "invalid_payload"
201
+ );
202
+ }
203
+ const rawSequence = typeof latest.sequence_number === "number" ? latest.sequence_number : Number(latest.sequence_number);
204
+ const sequenceNumber = Number.isFinite(rawSequence) ? rawSequence : 0;
205
+ return {
206
+ versionTopicId,
207
+ registryTopicId,
208
+ sequenceNumber,
209
+ metadata: latest.metadata,
210
+ payer: latest.payer,
211
+ memo: latest.m,
212
+ op: latest.op
213
+ };
214
+ }
114
215
  async publishDeclaration(params) {
115
216
  await this.operatorCtx.ensureInitialized();
116
217
  const declaration = this.normalizeDeclarationInput(params.declaration);
@@ -160,7 +261,7 @@ class HCS21Client extends HCS21BaseClient {
160
261
  "invalid_payload"
161
262
  );
162
263
  }
163
- const pointer = `hcs://1/${topicId}/${resolvedSequence}`;
264
+ const pointer = `hcs://1/${topicId}`;
164
265
  if (!HCS21ManifestPointerPattern.test(pointer)) {
165
266
  throw new HCS21ValidationError(
166
267
  "Manifest pointer format is invalid",
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es84.js","sources":["../../src/hcs-21/sdk.ts"],"sourcesContent":["import {\n Client,\n PrivateKey,\n Status,\n TopicCreateTransaction,\n} from '@hashgraph/sdk';\nimport {\n createNodeOperatorContext,\n NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport { Logger, ILogger, LogLevel } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport { HCS21BaseClient, BuildDeclarationParams } from './base-client';\nimport {\n AdapterDeclaration,\n HCS21ManifestPointerPattern,\n HCS21MetadataDocument,\n HCS21TopicType,\n ManifestPointer,\n metadataDocumentSchema,\n} from './types';\nimport { buildHcs21CreateRegistryTx, buildHcs21MessageTx } from './tx';\nimport { HCS21ValidationError } from './errors';\nimport { MaybeKey } from '../common/tx/tx-utils';\nimport { inscribe } from '../inscribe/inscriber';\nimport type { InscriptionOptions } from '../inscribe/types';\nimport { getTopicId } from '../utils/topic-id-utils';\n\nexport interface HCS21ClientConfig {\n network: NetworkType;\n operatorId: string;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n logLevel?: LogLevel;\n logger?: ILogger;\n mirrorNodeUrl?: string;\n}\n\nexport interface CreateRegistryTopicParams {\n ttl: number;\n indexed?: 0 | 1;\n type?: HCS21TopicType;\n metaTopicId?: string;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n transactionMemo?: string;\n}\n\nexport interface PublishDeclarationResult {\n sequenceNumber?: number;\n transactionId: string;\n}\n\nexport interface PublishDeclarationParams {\n topicId: string;\n declaration: AdapterDeclaration | BuildDeclarationParams;\n transactionMemo?: string;\n}\n\nexport interface InscribeMetadataParams {\n document: HCS21MetadataDocument;\n fileName?: string;\n inscriptionOptions?: InscriptionOptions;\n}\n\nexport class HCS21Client extends HCS21BaseClient {\n private readonly client: Client;\n private readonly operatorCtx: NodeOperatorContext;\n\n constructor(config: HCS21ClientConfig) {\n const logger =\n config.logger ||\n new Logger({ level: config.logLevel || 'info', module: 'HCS-21' });\n super({\n network: config.network,\n logger,\n mirrorNodeUrl: config.mirrorNodeUrl,\n });\n\n const baseClient =\n config.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n\n this.operatorCtx = createNodeOperatorContext({\n network: config.network,\n operatorId: config.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: baseClient,\n });\n\n void this.operatorCtx.ensureInitialized();\n this.client = this.operatorCtx.client;\n }\n\n async inscribeMetadata(\n params: InscribeMetadataParams,\n ): Promise<ManifestPointer> {\n await this.operatorCtx.ensureInitialized();\n\n const metadataPayload = metadataDocumentSchema.parse(params.document);\n const metadataJson = JSON.stringify(metadataPayload, null, 2);\n const buffer = Buffer.from(metadataJson, 'utf8');\n const connectionMode =\n params.inscriptionOptions?.connectionMode ??\n (params.inscriptionOptions?.websocket === false ? 'http' : 'auto');\n const inscriptionOptions: InscriptionOptions = {\n waitForConfirmation: true,\n connectionMode,\n websocket: params.inscriptionOptions?.websocket ?? false,\n ...(params.inscriptionOptions || {}),\n metadata: {\n ...(params.inscriptionOptions?.metadata || {}),\n ...metadataPayload,\n },\n };\n\n const inscription = await inscribe(\n {\n type: 'buffer',\n buffer,\n fileName: params.fileName || `hcs21-adapter-manifest-${Date.now()}.json`,\n mimeType: 'application/json',\n },\n {\n accountId: this.operatorCtx.operatorId.toString(),\n privateKey: this.operatorCtx.operatorKey,\n network: this.network,\n },\n inscriptionOptions,\n );\n\n if (!inscription.confirmed || !inscription.inscription) {\n throw new HCS21ValidationError(\n 'Failed to inscribe HCS-21 metadata',\n 'invalid_payload',\n );\n }\n\n const topicId =\n (inscription.inscription as { jsonTopicId?: string }).jsonTopicId ||\n (inscription.inscription as { topic_id?: string }).topic_id ||\n getTopicId(inscription.inscription);\n\n if (!topicId) {\n throw new HCS21ValidationError(\n 'Metadata inscription did not return a topic ID',\n 'invalid_payload',\n );\n }\n\n const rawSequence =\n (inscription.inscription as { sequence_number?: number })\n .sequence_number ??\n (inscription.inscription as { sequenceNumber?: number }).sequenceNumber;\n\n const pointerResult = await this.resolveManifestPointer(\n topicId,\n rawSequence,\n );\n\n const resultDetails =\n inscription.result && 'jobId' in inscription.result\n ? {\n jobId: inscription.result.jobId,\n transactionId: inscription.result.transactionId,\n }\n : {};\n\n return {\n pointer: pointerResult.pointer,\n topicId,\n sequenceNumber: pointerResult.sequenceNumber,\n ...resultDetails,\n };\n }\n\n async createRegistryTopic(\n params: CreateRegistryTopicParams,\n ): Promise<string> {\n await this.operatorCtx.ensureInitialized();\n\n const tx: TopicCreateTransaction = buildHcs21CreateRegistryTx({\n ttl: params.ttl,\n indexed: params.indexed,\n type: params.type,\n metaTopicId: params.metaTopicId,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: this.operatorCtx.operatorKey.publicKey,\n });\n\n if (params.transactionMemo) {\n tx.setTransactionMemo(params.transactionMemo);\n }\n\n const response = await tx.execute(this.client);\n const receipt = await response.getReceipt(this.client);\n\n if (receipt.status !== Status.Success || !receipt.topicId) {\n throw new HCS21ValidationError(\n 'Failed to create HCS-21 registry topic',\n 'invalid_payload',\n );\n }\n\n return receipt.topicId.toString();\n }\n\n async publishDeclaration(\n params: PublishDeclarationParams,\n ): Promise<PublishDeclarationResult> {\n await this.operatorCtx.ensureInitialized();\n\n const declaration = this.normalizeDeclarationInput(params.declaration);\n const tx = buildHcs21MessageTx({\n topicId: params.topicId,\n declaration,\n transactionMemo: params.transactionMemo,\n });\n\n const response = await tx.execute(this.client);\n const receipt = await response.getReceipt(this.client);\n\n if (receipt.status !== Status.Success) {\n throw new HCS21ValidationError(\n 'Failed to submit HCS-21 declaration',\n 'invalid_payload',\n );\n }\n\n return {\n sequenceNumber: receipt.topicSequenceNumber?.toNumber(),\n transactionId: response.transactionId.toString(),\n };\n }\n\n private normalizeDeclarationInput(\n declaration: AdapterDeclaration | BuildDeclarationParams,\n ): AdapterDeclaration {\n if ('p' in declaration) {\n return this.validateDeclaration(declaration);\n }\n return this.buildDeclaration(declaration);\n }\n\n private async resolveManifestPointer(\n topicId: string,\n sequence?: number,\n ): Promise<{ pointer: string; sequenceNumber: number }> {\n const numericSequence =\n typeof sequence === 'string' ? Number(sequence) : sequence;\n let resolvedSequence =\n typeof numericSequence === 'number' && Number.isFinite(numericSequence)\n ? numericSequence\n : undefined;\n\n if (!resolvedSequence) {\n const [latest] = await this.mirrorNode.getTopicMessages(topicId, {\n limit: 1,\n order: 'desc',\n });\n\n if (!latest || !latest.sequence_number) {\n throw new HCS21ValidationError(\n 'Unable to resolve manifest sequence number',\n 'invalid_payload',\n );\n }\n\n resolvedSequence = Number(latest.sequence_number);\n }\n\n if (!Number.isFinite(resolvedSequence)) {\n throw new HCS21ValidationError(\n 'Invalid manifest sequence number',\n 'invalid_payload',\n );\n }\n\n const pointer = `hcs://1/${topicId}/${resolvedSequence}`;\n\n if (!HCS21ManifestPointerPattern.test(pointer)) {\n throw new HCS21ValidationError(\n 'Manifest pointer format is invalid',\n 'invalid_payload',\n );\n }\n\n return { pointer, sequenceNumber: resolvedSequence };\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAiEO,MAAM,oBAAoB,gBAAgB;AAAA,EAI/C,YAAY,QAA2B;AACrC,UAAM,SACJ,OAAO,UACP,IAAI,OAAO,EAAE,OAAO,OAAO,YAAY,QAAQ,QAAQ,SAAA,CAAU;AACnE,UAAM;AAAA,MACJ,SAAS,OAAO;AAAA,MAChB;AAAA,MACA,eAAe,OAAO;AAAA,IAAA,CACvB;AAED,UAAM,aACJ,OAAO,YAAY,YAAY,OAAO,WAAA,IAAe,OAAO,WAAA;AAE9D,SAAK,cAAc,0BAA0B;AAAA,MAC3C,SAAS,OAAO;AAAA,MAChB,YAAY,OAAO;AAAA,MACnB,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO;AAAA,MAChB,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,QAAQ;AAAA,IAAA,CACT;AAED,SAAK,KAAK,YAAY,kBAAA;AACtB,SAAK,SAAS,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,MAAM,iBACJ,QAC0B;AAC1B,UAAM,KAAK,YAAY,kBAAA;AAEvB,UAAM,kBAAkB,uBAAuB,MAAM,OAAO,QAAQ;AACpE,UAAM,eAAe,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAC5D,UAAM,SAAS,OAAO,KAAK,cAAc,MAAM;AAC/C,UAAM,iBACJ,OAAO,oBAAoB,mBAC1B,OAAO,oBAAoB,cAAc,QAAQ,SAAS;AAC7D,UAAM,qBAAyC;AAAA,MAC7C,qBAAqB;AAAA,MACrB;AAAA,MACA,WAAW,OAAO,oBAAoB,aAAa;AAAA,MACnD,GAAI,OAAO,sBAAsB,CAAA;AAAA,MACjC,UAAU;AAAA,QACR,GAAI,OAAO,oBAAoB,YAAY,CAAA;AAAA,QAC3C,GAAG;AAAA,MAAA;AAAA,IACL;AAGF,UAAM,cAAc,MAAM;AAAA,MACxB;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA,UAAU,OAAO,YAAY,0BAA0B,KAAK,KAAK;AAAA,QACjE,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,WAAW,KAAK,YAAY,WAAW,SAAA;AAAA,QACvC,YAAY,KAAK,YAAY;AAAA,QAC7B,SAAS,KAAK;AAAA,MAAA;AAAA,MAEhB;AAAA,IAAA;AAGF,QAAI,CAAC,YAAY,aAAa,CAAC,YAAY,aAAa;AACtD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,UACH,YAAY,YAAyC,eACrD,YAAY,YAAsC,YACnD,WAAW,YAAY,WAAW;AAEpC,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,cACH,YAAY,YACV,mBACF,YAAY,YAA4C;AAE3D,UAAM,gBAAgB,MAAM,KAAK;AAAA,MAC/B;AAAA,MACA;AAAA,IAAA;AAGF,UAAM,gBACJ,YAAY,UAAU,WAAW,YAAY,SACzC;AAAA,MACE,OAAO,YAAY,OAAO;AAAA,MAC1B,eAAe,YAAY,OAAO;AAAA,IAAA,IAEpC,CAAA;AAEN,WAAO;AAAA,MACL,SAAS,cAAc;AAAA,MACvB;AAAA,MACA,gBAAgB,cAAc;AAAA,MAC9B,GAAG;AAAA,IAAA;AAAA,EAEP;AAAA,EAEA,MAAM,oBACJ,QACiB;AACjB,UAAM,KAAK,YAAY,kBAAA;AAEvB,UAAM,KAA6B,2BAA2B;AAAA,MAC5D,KAAK,OAAO;AAAA,MACZ,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO;AAAA,MACb,aAAa,OAAO;AAAA,MACpB,UAAU,OAAO;AAAA,MACjB,WAAW,OAAO;AAAA,MAClB,mBAAmB,KAAK,YAAY,YAAY;AAAA,IAAA,CACjD;AAED,QAAI,OAAO,iBAAiB;AAC1B,SAAG,mBAAmB,OAAO,eAAe;AAAA,IAC9C;AAEA,UAAM,WAAW,MAAM,GAAG,QAAQ,KAAK,MAAM;AAC7C,UAAM,UAAU,MAAM,SAAS,WAAW,KAAK,MAAM;AAErD,QAAI,QAAQ,WAAW,OAAO,WAAW,CAAC,QAAQ,SAAS;AACzD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,WAAO,QAAQ,QAAQ,SAAA;AAAA,EACzB;AAAA,EAEA,MAAM,mBACJ,QACmC;AACnC,UAAM,KAAK,YAAY,kBAAA;AAEvB,UAAM,cAAc,KAAK,0BAA0B,OAAO,WAAW;AACrE,UAAM,KAAK,oBAAoB;AAAA,MAC7B,SAAS,OAAO;AAAA,MAChB;AAAA,MACA,iBAAiB,OAAO;AAAA,IAAA,CACzB;AAED,UAAM,WAAW,MAAM,GAAG,QAAQ,KAAK,MAAM;AAC7C,UAAM,UAAU,MAAM,SAAS,WAAW,KAAK,MAAM;AAErD,QAAI,QAAQ,WAAW,OAAO,SAAS;AACrC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,WAAO;AAAA,MACL,gBAAgB,QAAQ,qBAAqB,SAAA;AAAA,MAC7C,eAAe,SAAS,cAAc,SAAA;AAAA,IAAS;AAAA,EAEnD;AAAA,EAEQ,0BACN,aACoB;AACpB,QAAI,OAAO,aAAa;AACtB,aAAO,KAAK,oBAAoB,WAAW;AAAA,IAC7C;AACA,WAAO,KAAK,iBAAiB,WAAW;AAAA,EAC1C;AAAA,EAEA,MAAc,uBACZ,SACA,UACsD;AACtD,UAAM,kBACJ,OAAO,aAAa,WAAW,OAAO,QAAQ,IAAI;AACpD,QAAI,mBACF,OAAO,oBAAoB,YAAY,OAAO,SAAS,eAAe,IAClE,kBACA;AAEN,QAAI,CAAC,kBAAkB;AACrB,YAAM,CAAC,MAAM,IAAI,MAAM,KAAK,WAAW,iBAAiB,SAAS;AAAA,QAC/D,OAAO;AAAA,QACP,OAAO;AAAA,MAAA,CACR;AAED,UAAI,CAAC,UAAU,CAAC,OAAO,iBAAiB;AACtC,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AAEA,yBAAmB,OAAO,OAAO,eAAe;AAAA,IAClD;AAEA,QAAI,CAAC,OAAO,SAAS,gBAAgB,GAAG;AACtC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,UAAM,UAAU,WAAW,OAAO,IAAI,gBAAgB;AAEtD,QAAI,CAAC,4BAA4B,KAAK,OAAO,GAAG;AAC9C,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAEA,WAAO,EAAE,SAAS,gBAAgB,iBAAA;AAAA,EACpC;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es84.js","sources":["../../src/hcs-21/sdk.ts"],"sourcesContent":["import {\n Client,\n PrivateKey,\n Status,\n TopicCreateTransaction,\n} from '@hashgraph/sdk';\nimport {\n createNodeOperatorContext,\n NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport { Logger, ILogger, LogLevel } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport { HCS21BaseClient, BuildDeclarationParams } from './base-client';\nimport {\n AdapterDeclaration,\n HCS21ManifestPointerPattern,\n HCS21MetadataDocument,\n HCS21TopicType,\n ManifestPointer,\n metadataDocumentSchema,\n} from './types';\nimport { buildHcs21CreateRegistryTx, buildHcs21MessageTx } from './tx';\nimport {\n buildHcs2CreateRegistryTx,\n buildHcs2RegisterTx,\n} from '../hcs-2/tx';\nimport { HCS2RegistryType } from '../hcs-2/types';\nimport { HCS21ValidationError } from './errors';\nimport { MaybeKey } from '../common/tx/tx-utils';\nimport { inscribe } from '../inscribe/inscriber';\nimport type { InscriptionOptions } from '../inscribe/types';\nimport { getTopicId } from '../utils/topic-id-utils';\n\nexport interface HCS21ClientConfig {\n network: NetworkType;\n operatorId: string;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n logLevel?: LogLevel;\n logger?: ILogger;\n mirrorNodeUrl?: string;\n}\n\nexport interface CreateRegistryTopicParams {\n ttl: number;\n indexed?: 0 | 1;\n type?: HCS21TopicType;\n metaTopicId?: string;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n transactionMemo?: string;\n}\n\nexport interface PublishDeclarationResult {\n sequenceNumber?: number;\n transactionId: string;\n}\n\nexport interface PublishDeclarationParams {\n topicId: string;\n declaration: AdapterDeclaration | BuildDeclarationParams;\n transactionMemo?: string;\n}\n\nexport interface InscribeMetadataParams {\n document: HCS21MetadataDocument;\n fileName?: string;\n inscriptionOptions?: InscriptionOptions;\n}\n\nexport interface CreateRegistryVersionTopicParams {\n ttl: number;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n transactionMemo?: string;\n memoOverride?: string;\n}\n\nexport interface PublishRegistryVersionParams {\n versionTopicId: string;\n registryTopicId: string;\n metadata?: string;\n memo?: string;\n transactionMemo?: string;\n}\n\nexport interface RegisterVersionTopicParams {\n registryOfRegistriesTopicId: string;\n versionTopicId: string;\n metadata?: string;\n memo?: string;\n transactionMemo?: string;\n}\n\nexport interface RegistryPointerResolution {\n versionTopicId: string;\n registryTopicId: string;\n sequenceNumber: number;\n metadata?: string;\n payer?: string;\n memo?: string;\n op?: string;\n}\n\nexport class HCS21Client extends HCS21BaseClient {\n private readonly client: Client;\n private readonly operatorCtx: NodeOperatorContext;\n\n constructor(config: HCS21ClientConfig) {\n const logger =\n config.logger ||\n new Logger({ level: config.logLevel || 'info', module: 'HCS-21' });\n super({\n network: config.network,\n logger,\n mirrorNodeUrl: config.mirrorNodeUrl,\n });\n\n const baseClient =\n config.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n\n this.operatorCtx = createNodeOperatorContext({\n network: config.network,\n operatorId: config.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: baseClient,\n });\n\n void this.operatorCtx.ensureInitialized();\n this.client = this.operatorCtx.client;\n }\n\n async inscribeMetadata(\n params: InscribeMetadataParams,\n ): Promise<ManifestPointer> {\n await this.operatorCtx.ensureInitialized();\n\n const metadataPayload = metadataDocumentSchema.parse(params.document);\n const metadataJson = JSON.stringify(metadataPayload, null, 2);\n const buffer = Buffer.from(metadataJson, 'utf8');\n const connectionMode =\n params.inscriptionOptions?.connectionMode ??\n (params.inscriptionOptions?.websocket === false ? 'http' : 'auto');\n const inscriptionOptions: InscriptionOptions = {\n waitForConfirmation: true,\n connectionMode,\n websocket: params.inscriptionOptions?.websocket ?? false,\n ...(params.inscriptionOptions || {}),\n metadata: {\n ...(params.inscriptionOptions?.metadata || {}),\n ...metadataPayload,\n },\n };\n\n const inscription = await inscribe(\n {\n type: 'buffer',\n buffer,\n fileName:\n params.fileName || `hcs21-adapter-manifest-${Date.now()}.json`,\n mimeType: 'application/json',\n },\n {\n accountId: this.operatorCtx.operatorId.toString(),\n privateKey: this.operatorCtx.operatorKey,\n network: this.network,\n },\n inscriptionOptions,\n );\n\n if (!inscription.confirmed || !inscription.inscription) {\n throw new HCS21ValidationError(\n 'Failed to inscribe HCS-21 metadata',\n 'invalid_payload',\n );\n }\n\n const topicId =\n (inscription.inscription as { jsonTopicId?: string }).jsonTopicId ||\n (inscription.inscription as { topic_id?: string }).topic_id ||\n getTopicId(inscription.inscription);\n\n if (!topicId) {\n throw new HCS21ValidationError(\n 'Metadata inscription did not return a topic ID',\n 'invalid_payload',\n );\n }\n\n const rawSequence =\n (inscription.inscription as { sequence_number?: number })\n .sequence_number ??\n (inscription.inscription as { sequenceNumber?: number }).sequenceNumber;\n\n const pointerResult = await this.resolveManifestPointer(\n topicId,\n rawSequence,\n );\n\n const declarationManifestSequence = (\n inscription.result as { manifest_sequence?: number }\n )?.manifest_sequence;\n\n const resultDetails =\n inscription.result && 'jobId' in inscription.result\n ? {\n jobId: inscription.result.jobId,\n transactionId: inscription.result.transactionId,\n }\n : {};\n\n return {\n pointer: pointerResult.pointer,\n topicId,\n sequenceNumber: pointerResult.sequenceNumber,\n manifestSequence:\n declarationManifestSequence || pointerResult.sequenceNumber,\n ...resultDetails,\n };\n }\n\n async createRegistryTopic(\n params: CreateRegistryTopicParams,\n ): Promise<string> {\n await this.operatorCtx.ensureInitialized();\n\n const tx: TopicCreateTransaction = buildHcs21CreateRegistryTx({\n ttl: params.ttl,\n indexed: params.indexed,\n type: params.type,\n metaTopicId: params.metaTopicId,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: this.operatorCtx.operatorKey.publicKey,\n });\n\n if (params.transactionMemo) {\n tx.setTransactionMemo(params.transactionMemo);\n }\n\n const response = await tx.execute(this.client);\n const receipt = await response.getReceipt(this.client);\n\n if (receipt.status !== Status.Success || !receipt.topicId) {\n throw new HCS21ValidationError(\n 'Failed to create HCS-21 registry topic',\n 'invalid_payload',\n );\n }\n\n return receipt.topicId.toString();\n }\n\n async createRegistryVersionTopic(\n params: CreateRegistryVersionTopicParams,\n ): Promise<string> {\n await this.operatorCtx.ensureInitialized();\n\n const tx = buildHcs2CreateRegistryTx({\n registryType: HCS2RegistryType.NON_INDEXED,\n ttl: params.ttl,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n memoOverride: params.memoOverride,\n operatorPublicKey: this.operatorCtx.operatorKey.publicKey,\n });\n\n if (params.transactionMemo) {\n tx.setTransactionMemo(params.transactionMemo);\n }\n\n const response = await tx.execute(this.client);\n const receipt = await response.getReceipt(this.client);\n\n if (receipt.status !== Status.Success || !receipt.topicId) {\n throw new HCS21ValidationError(\n 'Failed to create HCS-2 registry version topic',\n 'invalid_payload',\n );\n }\n\n return receipt.topicId.toString();\n }\n\n async publishRegistryVersion(\n params: PublishRegistryVersionParams,\n ): Promise<PublishDeclarationResult> {\n await this.operatorCtx.ensureInitialized();\n\n const tx = buildHcs2RegisterTx({\n registryTopicId: params.versionTopicId,\n targetTopicId: params.registryTopicId,\n metadata: params.metadata,\n memo: params.memo,\n analyticsMemo: params.transactionMemo,\n });\n\n const response = await tx.execute(this.client);\n const receipt = await response.getReceipt(this.client);\n\n if (receipt.status !== Status.Success) {\n throw new HCS21ValidationError(\n 'Failed to publish registry version pointer',\n 'invalid_payload',\n );\n }\n\n return {\n sequenceNumber: receipt.topicSequenceNumber?.toNumber(),\n transactionId: response.transactionId.toString(),\n };\n }\n\n async registerVersionTopic(\n params: RegisterVersionTopicParams,\n ): Promise<PublishDeclarationResult> {\n await this.operatorCtx.ensureInitialized();\n\n const tx = buildHcs2RegisterTx({\n registryTopicId: params.registryOfRegistriesTopicId,\n targetTopicId: params.versionTopicId,\n metadata: params.metadata,\n memo: params.memo,\n analyticsMemo: params.transactionMemo,\n });\n\n const response = await tx.execute(this.client);\n const receipt = await response.getReceipt(this.client);\n\n if (receipt.status !== Status.Success) {\n throw new HCS21ValidationError(\n 'Failed to register version topic in registry-of-registries',\n 'invalid_payload',\n );\n }\n\n return {\n sequenceNumber: receipt.topicSequenceNumber?.toNumber(),\n transactionId: response.transactionId.toString(),\n };\n }\n\n async resolveRegistryPointer(\n versionTopicId: string,\n ): Promise<RegistryPointerResolution> {\n const [latest] = await this.mirrorNode.getTopicMessages(versionTopicId, {\n limit: 1,\n order: 'desc',\n });\n\n if (!latest) {\n throw new HCS21ValidationError(\n 'Version pointer topic has no messages',\n 'invalid_payload',\n );\n }\n\n const registryTopicId = (latest as { t_id?: unknown }).t_id;\n\n if (typeof registryTopicId !== 'string' || registryTopicId.length === 0) {\n throw new HCS21ValidationError(\n 'Version pointer topic does not include a target topic ID (`t_id`)',\n 'invalid_payload',\n );\n }\n\n const rawSequence =\n typeof latest.sequence_number === 'number'\n ? latest.sequence_number\n : Number(latest.sequence_number);\n const sequenceNumber = Number.isFinite(rawSequence) ? rawSequence : 0;\n\n return {\n versionTopicId,\n registryTopicId,\n sequenceNumber,\n metadata: (latest as { metadata?: string }).metadata,\n payer: (latest as { payer?: string }).payer,\n memo: (latest as { m?: string }).m,\n op: (latest as { op?: string }).op,\n };\n }\n\n async publishDeclaration(\n params: PublishDeclarationParams,\n ): Promise<PublishDeclarationResult> {\n await this.operatorCtx.ensureInitialized();\n\n const declaration = this.normalizeDeclarationInput(params.declaration);\n const tx = buildHcs21MessageTx({\n topicId: params.topicId,\n declaration,\n transactionMemo: params.transactionMemo,\n });\n\n const response = await tx.execute(this.client);\n const receipt = await response.getReceipt(this.client);\n\n if (receipt.status !== Status.Success) {\n throw new HCS21ValidationError(\n 'Failed to submit HCS-21 declaration',\n 'invalid_payload',\n );\n }\n\n return {\n sequenceNumber: receipt.topicSequenceNumber?.toNumber(),\n transactionId: response.transactionId.toString(),\n };\n }\n\n private normalizeDeclarationInput(\n declaration: AdapterDeclaration | BuildDeclarationParams,\n ): AdapterDeclaration {\n if ('p' in declaration) {\n return this.validateDeclaration(declaration);\n }\n return this.buildDeclaration(declaration);\n }\n\n private async resolveManifestPointer(\n topicId: string,\n sequence?: number,\n ): Promise<{ pointer: string; sequenceNumber: number }> {\n const numericSequence =\n typeof sequence === 'string' ? Number(sequence) : sequence;\n let resolvedSequence =\n typeof numericSequence === 'number' && Number.isFinite(numericSequence)\n ? numericSequence\n : undefined;\n\n if (!resolvedSequence) {\n const [latest] = await this.mirrorNode.getTopicMessages(topicId, {\n limit: 1,\n order: 'desc',\n });\n\n if (!latest || !latest.sequence_number) {\n throw new HCS21ValidationError(\n 'Unable to resolve manifest sequence number',\n 'invalid_payload',\n );\n }\n\n resolvedSequence = Number(latest.sequence_number);\n }\n\n if (!Number.isFinite(resolvedSequence)) {\n throw new HCS21ValidationError(\n 'Invalid manifest sequence number',\n 'invalid_payload',\n );\n }\n\n const pointer = `hcs://1/${topicId}`;\n\n if (!HCS21ManifestPointerPattern.test(pointer)) {\n throw new HCS21ValidationError(\n 'Manifest pointer format is invalid',\n 'invalid_payload',\n );\n }\n\n return { pointer, sequenceNumber: resolvedSequence };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,30 +1,64 @@
1
- import { AccountCreateTransaction, Hbar } from "@hashgraph/sdk";
2
- function buildHcs15BaseAccountCreateTx(params) {
3
- const tx = new AccountCreateTransaction().setECDSAKeyWithAlias(params.publicKey).setInitialBalance(
4
- params.initialBalance instanceof Hbar ? params.initialBalance : new Hbar(params.initialBalance ?? 1)
5
- );
6
- if (typeof params.maxAutomaticTokenAssociations === "number") {
7
- tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);
1
+ import { PublicKey } from "@hashgraph/sdk";
2
+ import { createHash } from "crypto";
3
+ function sortObject(value) {
4
+ if (Array.isArray(value)) {
5
+ return value.map(sortObject);
8
6
  }
9
- if (params.accountMemo) {
10
- tx.setAccountMemo(params.accountMemo);
7
+ if (value && typeof value === "object") {
8
+ const entries = Object.entries(value).sort(
9
+ ([a], [b]) => a < b ? -1 : a > b ? 1 : 0
10
+ );
11
+ const sorted = {};
12
+ for (const [key, val] of entries) {
13
+ sorted[key] = sortObject(val);
14
+ }
15
+ return sorted;
11
16
  }
12
- return tx;
17
+ return value;
13
18
  }
14
- function buildHcs15PetalAccountCreateTx(params) {
15
- const tx = new AccountCreateTransaction().setKeyWithoutAlias(params.publicKey).setInitialBalance(
16
- params.initialBalance instanceof Hbar ? params.initialBalance : new Hbar(params.initialBalance ?? 1)
17
- );
18
- if (typeof params.maxAutomaticTokenAssociations === "number") {
19
- tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);
19
+ function canonicalize(value) {
20
+ const sorted = sortObject(value);
21
+ return JSON.stringify(sorted);
22
+ }
23
+ function verifyDeclarationSignature(declaration, publisherPublicKey) {
24
+ if (!declaration.signature) {
25
+ return false;
26
+ }
27
+ try {
28
+ const { signature, ...unsigned } = declaration;
29
+ const payload = canonicalize(unsigned);
30
+ const signatureBytes = Buffer.from(signature, "base64");
31
+ const publicKey = PublicKey.fromString(publisherPublicKey);
32
+ return publicKey.verify(Buffer.from(payload, "utf8"), signatureBytes);
33
+ } catch {
34
+ return false;
20
35
  }
21
- if (params.accountMemo) {
22
- tx.setAccountMemo(params.accountMemo);
36
+ }
37
+ function verifyManifestSignature(manifest, signatureBase64, publisherPublicKey) {
38
+ try {
39
+ const payload = canonicalize(manifest);
40
+ const signatureBytes = Buffer.from(signatureBase64, "base64");
41
+ const publicKey = PublicKey.fromString(publisherPublicKey);
42
+ return publicKey.verify(Buffer.from(payload, "utf8"), signatureBytes);
43
+ } catch {
44
+ return false;
23
45
  }
24
- return tx;
46
+ }
47
+ function normalizeDigest(value) {
48
+ return value.replace(/^sha384[-:]?/i, "").trim().toLowerCase();
49
+ }
50
+ function verifyArtifactDigest(artifact, expectedDigest) {
51
+ const hash = createHash("sha384");
52
+ hash.update(artifact);
53
+ const hex = hash.digest("hex").toLowerCase();
54
+ const base64 = Buffer.from(hex, "hex").toString("base64").toLowerCase();
55
+ const expected = normalizeDigest(expectedDigest);
56
+ return expected === hex || expected === base64;
25
57
  }
26
58
  export {
27
- buildHcs15BaseAccountCreateTx,
28
- buildHcs15PetalAccountCreateTx
59
+ canonicalize,
60
+ verifyArtifactDigest,
61
+ verifyDeclarationSignature,
62
+ verifyManifestSignature
29
63
  };
30
64
  //# sourceMappingURL=standards-sdk.es86.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es86.js","sources":["../../src/hcs-15/tx.ts"],"sourcesContent":["import { AccountCreateTransaction, Hbar, PublicKey } from '@hashgraph/sdk';\n\n/**\n * Build AccountCreateTransaction for an HCS-15 base account.\n * Uses an ECDSA public key and sets the EVM alias from it.\n */\nexport function buildHcs15BaseAccountCreateTx(params: {\n publicKey: PublicKey;\n initialBalance?: Hbar | number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n}): AccountCreateTransaction {\n const tx = new AccountCreateTransaction()\n .setECDSAKeyWithAlias(params.publicKey)\n .setInitialBalance(\n params.initialBalance instanceof Hbar\n ? params.initialBalance\n : new Hbar(params.initialBalance ?? 1),\n );\n\n if (typeof params.maxAutomaticTokenAssociations === 'number') {\n tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);\n }\n if (params.accountMemo) {\n tx.setAccountMemo(params.accountMemo);\n }\n return tx;\n}\n\n/**\n * Build AccountCreateTransaction for an HCS-15 Petal account.\n * Reuses the same public key as the base account, without alias.\n */\nexport function buildHcs15PetalAccountCreateTx(params: {\n publicKey: PublicKey;\n initialBalance?: Hbar | number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n}): AccountCreateTransaction {\n const tx = new AccountCreateTransaction()\n .setKeyWithoutAlias(params.publicKey)\n .setInitialBalance(\n params.initialBalance instanceof Hbar\n ? params.initialBalance\n : new Hbar(params.initialBalance ?? 1),\n );\n\n if (typeof params.maxAutomaticTokenAssociations === 'number') {\n tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);\n }\n if (params.accountMemo) {\n tx.setAccountMemo(params.accountMemo);\n }\n return tx;\n}\n"],"names":[],"mappings":";AAMO,SAAS,8BAA8B,QAKjB;AAC3B,QAAM,KAAK,IAAI,yBAAA,EACZ,qBAAqB,OAAO,SAAS,EACrC;AAAA,IACC,OAAO,0BAA0B,OAC7B,OAAO,iBACP,IAAI,KAAK,OAAO,kBAAkB,CAAC;AAAA,EAAA;AAG3C,MAAI,OAAO,OAAO,kCAAkC,UAAU;AAC5D,OAAG,iCAAiC,OAAO,6BAA6B;AAAA,EAC1E;AACA,MAAI,OAAO,aAAa;AACtB,OAAG,eAAe,OAAO,WAAW;AAAA,EACtC;AACA,SAAO;AACT;AAMO,SAAS,+BAA+B,QAKlB;AAC3B,QAAM,KAAK,IAAI,yBAAA,EACZ,mBAAmB,OAAO,SAAS,EACnC;AAAA,IACC,OAAO,0BAA0B,OAC7B,OAAO,iBACP,IAAI,KAAK,OAAO,kBAAkB,CAAC;AAAA,EAAA;AAG3C,MAAI,OAAO,OAAO,kCAAkC,UAAU;AAC5D,OAAG,iCAAiC,OAAO,6BAA6B;AAAA,EAC1E;AACA,MAAI,OAAO,aAAa;AACtB,OAAG,eAAe,OAAO,WAAW;AAAA,EACtC;AACA,SAAO;AACT;"}
1
+ {"version":3,"file":"standards-sdk.es86.js","sources":["../../src/hcs-21/verify.ts"],"sourcesContent":["import { PublicKey } from '@hashgraph/sdk';\nimport { createHash } from 'crypto';\nimport { AdapterDeclaration } from './types';\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nfunction sortObject(value: JsonValue): JsonValue {\n if (Array.isArray(value)) {\n return value.map(sortObject) as JsonValue;\n }\n if (value && typeof value === 'object') {\n const entries = Object.entries(value as Record<string, JsonValue>).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n const sorted: Record<string, JsonValue> = {};\n for (const [key, val] of entries) {\n sorted[key] = sortObject(val);\n }\n return sorted;\n }\n return value;\n}\n\nexport function canonicalize(value: unknown): string {\n const sorted = sortObject(value as JsonValue);\n return JSON.stringify(sorted);\n}\n\nexport function verifyDeclarationSignature(\n declaration: AdapterDeclaration,\n publisherPublicKey: string,\n): boolean {\n if (!declaration.signature) {\n return false;\n }\n try {\n const { signature, ...unsigned } = declaration;\n const payload = canonicalize(unsigned);\n const signatureBytes = Buffer.from(signature, 'base64');\n const publicKey = PublicKey.fromString(publisherPublicKey);\n return publicKey.verify(Buffer.from(payload, 'utf8'), signatureBytes);\n } catch {\n return false;\n }\n}\n\nexport function verifyManifestSignature(\n manifest: unknown,\n signatureBase64: string,\n publisherPublicKey: string,\n): boolean {\n try {\n const payload = canonicalize(manifest as JsonValue);\n const signatureBytes = Buffer.from(signatureBase64, 'base64');\n const publicKey = PublicKey.fromString(publisherPublicKey);\n return publicKey.verify(Buffer.from(payload, 'utf8'), signatureBytes);\n } catch {\n return false;\n }\n}\n\nfunction normalizeDigest(value: string): string {\n return value.replace(/^sha384[-:]?/i, '').trim().toLowerCase();\n}\n\nexport function verifyArtifactDigest(\n artifact: Buffer | Uint8Array,\n expectedDigest: string,\n): boolean {\n const hash = createHash('sha384');\n hash.update(artifact);\n const hex = hash.digest('hex').toLowerCase();\n const base64 = Buffer.from(hex, 'hex').toString('base64').toLowerCase();\n const expected = normalizeDigest(expectedDigest);\n return expected === hex || expected === base64;\n}\n"],"names":[],"mappings":";;AAMA,SAAS,WAAW,OAA6B;AAC/C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,UAAU;AAAA,EAC7B;AACA,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,UAAM,UAAU,OAAO,QAAQ,KAAkC,EAAE;AAAA,MACjE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;AAAA,IAAA;AAE1C,UAAM,SAAoC,CAAA;AAC1C,eAAW,CAAC,KAAK,GAAG,KAAK,SAAS;AAChC,aAAO,GAAG,IAAI,WAAW,GAAG;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,aAAa,OAAwB;AACnD,QAAM,SAAS,WAAW,KAAkB;AAC5C,SAAO,KAAK,UAAU,MAAM;AAC9B;AAEO,SAAS,2BACd,aACA,oBACS;AACT,MAAI,CAAC,YAAY,WAAW;AAC1B,WAAO;AAAA,EACT;AACA,MAAI;AACF,UAAM,EAAE,WAAW,GAAG,SAAA,IAAa;AACnC,UAAM,UAAU,aAAa,QAAQ;AACrC,UAAM,iBAAiB,OAAO,KAAK,WAAW,QAAQ;AACtD,UAAM,YAAY,UAAU,WAAW,kBAAkB;AACzD,WAAO,UAAU,OAAO,OAAO,KAAK,SAAS,MAAM,GAAG,cAAc;AAAA,EACtE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,wBACd,UACA,iBACA,oBACS;AACT,MAAI;AACF,UAAM,UAAU,aAAa,QAAqB;AAClD,UAAM,iBAAiB,OAAO,KAAK,iBAAiB,QAAQ;AAC5D,UAAM,YAAY,UAAU,WAAW,kBAAkB;AACzD,WAAO,UAAU,OAAO,OAAO,KAAK,SAAS,MAAM,GAAG,cAAc;AAAA,EACtE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,gBAAgB,OAAuB;AAC9C,SAAO,MAAM,QAAQ,iBAAiB,EAAE,EAAE,KAAA,EAAO,YAAA;AACnD;AAEO,SAAS,qBACd,UACA,gBACS;AACT,QAAM,OAAO,WAAW,QAAQ;AAChC,OAAK,OAAO,QAAQ;AACpB,QAAM,MAAM,KAAK,OAAO,KAAK,EAAE,YAAA;AAC/B,QAAM,SAAS,OAAO,KAAK,KAAK,KAAK,EAAE,SAAS,QAAQ,EAAE,YAAA;AAC1D,QAAM,WAAW,gBAAgB,cAAc;AAC/C,SAAO,aAAa,OAAO,aAAa;AAC1C;"}