@hashgraphonline/standards-sdk 0.1.136 → 0.1.137-feat-hcs-21.canary.5802d65.32

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 (234) hide show
  1. package/dist/cjs/hcs-21/base-client.d.ts +31 -0
  2. package/dist/cjs/hcs-21/base-client.d.ts.map +1 -0
  3. package/dist/cjs/hcs-21/browser.d.ts +20 -0
  4. package/dist/cjs/hcs-21/browser.d.ts.map +1 -0
  5. package/dist/cjs/hcs-21/errors.d.ts +6 -0
  6. package/dist/cjs/hcs-21/errors.d.ts.map +1 -0
  7. package/dist/cjs/hcs-21/index.d.ts +7 -0
  8. package/dist/cjs/hcs-21/index.d.ts.map +1 -0
  9. package/dist/cjs/hcs-21/sdk.d.ts +48 -0
  10. package/dist/cjs/hcs-21/sdk.d.ts.map +1 -0
  11. package/dist/cjs/hcs-21/tx.d.ts +20 -0
  12. package/dist/cjs/hcs-21/tx.d.ts.map +1 -0
  13. package/dist/cjs/hcs-21/types.d.ts +72 -0
  14. package/dist/cjs/hcs-21/types.d.ts.map +1 -0
  15. package/dist/cjs/index.d.ts +1 -0
  16. package/dist/cjs/index.d.ts.map +1 -1
  17. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  18. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  19. package/dist/cjs/services/types.d.ts +1 -1
  20. package/dist/cjs/services/types.d.ts.map +1 -1
  21. package/dist/cjs/standards-sdk.cjs +1 -1
  22. package/dist/cjs/standards-sdk.cjs.map +1 -1
  23. package/dist/es/hcs-21/base-client.d.ts +31 -0
  24. package/dist/es/hcs-21/base-client.d.ts.map +1 -0
  25. package/dist/es/hcs-21/browser.d.ts +20 -0
  26. package/dist/es/hcs-21/browser.d.ts.map +1 -0
  27. package/dist/es/hcs-21/errors.d.ts +6 -0
  28. package/dist/es/hcs-21/errors.d.ts.map +1 -0
  29. package/dist/es/hcs-21/index.d.ts +7 -0
  30. package/dist/es/hcs-21/index.d.ts.map +1 -0
  31. package/dist/es/hcs-21/sdk.d.ts +48 -0
  32. package/dist/es/hcs-21/sdk.d.ts.map +1 -0
  33. package/dist/es/hcs-21/tx.d.ts +20 -0
  34. package/dist/es/hcs-21/tx.d.ts.map +1 -0
  35. package/dist/es/hcs-21/types.d.ts +72 -0
  36. package/dist/es/hcs-21/types.d.ts.map +1 -0
  37. package/dist/es/index.d.ts +1 -0
  38. package/dist/es/index.d.ts.map +1 -1
  39. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  40. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  41. package/dist/es/services/types.d.ts +1 -1
  42. package/dist/es/services/types.d.ts.map +1 -1
  43. package/dist/es/standards-sdk.es.js +66 -48
  44. package/dist/es/standards-sdk.es.js.map +1 -1
  45. package/dist/es/standards-sdk.es10.js +2 -2
  46. package/dist/es/standards-sdk.es100.js +231 -28
  47. package/dist/es/standards-sdk.es100.js.map +1 -1
  48. package/dist/es/standards-sdk.es101.js +109 -18
  49. package/dist/es/standards-sdk.es101.js.map +1 -1
  50. package/dist/es/standards-sdk.es102.js +32 -158
  51. package/dist/es/standards-sdk.es102.js.map +1 -1
  52. package/dist/es/standards-sdk.es103.js +80 -204
  53. package/dist/es/standards-sdk.es103.js.map +1 -1
  54. package/dist/es/standards-sdk.es104.js +21 -780
  55. package/dist/es/standards-sdk.es104.js.map +1 -1
  56. package/dist/es/standards-sdk.es105.js +140 -11
  57. package/dist/es/standards-sdk.es105.js.map +1 -1
  58. package/dist/es/standards-sdk.es106.js +29 -567
  59. package/dist/es/standards-sdk.es106.js.map +1 -1
  60. package/dist/es/standards-sdk.es107.js +17 -597
  61. package/dist/es/standards-sdk.es107.js.map +1 -1
  62. package/dist/es/standards-sdk.es108.js +159 -12
  63. package/dist/es/standards-sdk.es108.js.map +1 -1
  64. package/dist/es/standards-sdk.es109.js +208 -2
  65. package/dist/es/standards-sdk.es109.js.map +1 -1
  66. package/dist/es/standards-sdk.es110.js +774 -67
  67. package/dist/es/standards-sdk.es110.js.map +1 -1
  68. package/dist/es/standards-sdk.es111.js +11 -37
  69. package/dist/es/standards-sdk.es111.js.map +1 -1
  70. package/dist/es/standards-sdk.es112.js +567 -2
  71. package/dist/es/standards-sdk.es112.js.map +1 -1
  72. package/dist/es/standards-sdk.es113.js +576 -197
  73. package/dist/es/standards-sdk.es113.js.map +1 -1
  74. package/dist/es/standards-sdk.es114.js +12 -1139
  75. package/dist/es/standards-sdk.es114.js.map +1 -1
  76. package/dist/es/standards-sdk.es115.js +2 -306
  77. package/dist/es/standards-sdk.es115.js.map +1 -1
  78. package/dist/es/standards-sdk.es116.js +79 -418
  79. package/dist/es/standards-sdk.es116.js.map +1 -1
  80. package/dist/es/standards-sdk.es117.js +35 -351
  81. package/dist/es/standards-sdk.es117.js.map +1 -1
  82. package/dist/es/standards-sdk.es118.js +2 -761
  83. package/dist/es/standards-sdk.es118.js.map +1 -1
  84. package/dist/es/standards-sdk.es119.js +204 -185
  85. package/dist/es/standards-sdk.es119.js.map +1 -1
  86. package/dist/es/standards-sdk.es12.js +1 -1
  87. package/dist/es/standards-sdk.es120.js +1055 -1482
  88. package/dist/es/standards-sdk.es120.js.map +1 -1
  89. package/dist/es/standards-sdk.es121.js +264 -2046
  90. package/dist/es/standards-sdk.es121.js.map +1 -1
  91. package/dist/es/standards-sdk.es122.js +420 -50
  92. package/dist/es/standards-sdk.es122.js.map +1 -1
  93. package/dist/es/standards-sdk.es123.js +350 -82
  94. package/dist/es/standards-sdk.es123.js.map +1 -1
  95. package/dist/es/standards-sdk.es124.js +741 -139
  96. package/dist/es/standards-sdk.es124.js.map +1 -1
  97. package/dist/es/standards-sdk.es125.js +204 -7
  98. package/dist/es/standards-sdk.es125.js.map +1 -1
  99. package/dist/es/standards-sdk.es126.js +1533 -52
  100. package/dist/es/standards-sdk.es126.js.map +1 -1
  101. package/dist/es/standards-sdk.es127.js +2077 -59
  102. package/dist/es/standards-sdk.es127.js.map +1 -1
  103. package/dist/es/standards-sdk.es128.js +52 -28
  104. package/dist/es/standards-sdk.es128.js.map +1 -1
  105. package/dist/es/standards-sdk.es129.js +80 -131
  106. package/dist/es/standards-sdk.es129.js.map +1 -1
  107. package/dist/es/standards-sdk.es13.js +1 -1
  108. package/dist/es/standards-sdk.es130.js +152 -35
  109. package/dist/es/standards-sdk.es130.js.map +1 -1
  110. package/dist/es/standards-sdk.es131.js +7 -694
  111. package/dist/es/standards-sdk.es131.js.map +1 -1
  112. package/dist/es/standards-sdk.es132.js +53 -12241
  113. package/dist/es/standards-sdk.es132.js.map +1 -1
  114. package/dist/es/standards-sdk.es133.js +61 -13
  115. package/dist/es/standards-sdk.es133.js.map +1 -1
  116. package/dist/es/standards-sdk.es134.js +28 -56
  117. package/dist/es/standards-sdk.es134.js.map +1 -1
  118. package/dist/es/standards-sdk.es135.js +128 -54
  119. package/dist/es/standards-sdk.es135.js.map +1 -1
  120. package/dist/es/standards-sdk.es136.js +38 -168
  121. package/dist/es/standards-sdk.es136.js.map +1 -1
  122. package/dist/es/standards-sdk.es137.js +694 -322
  123. package/dist/es/standards-sdk.es137.js.map +1 -1
  124. package/dist/es/standards-sdk.es138.js +12220 -292
  125. package/dist/es/standards-sdk.es138.js.map +1 -1
  126. package/dist/es/standards-sdk.es139.js +55 -452
  127. package/dist/es/standards-sdk.es139.js.map +1 -1
  128. package/dist/es/standards-sdk.es14.js +1 -1
  129. package/dist/es/standards-sdk.es140.js +52 -319
  130. package/dist/es/standards-sdk.es140.js.map +1 -1
  131. package/dist/es/standards-sdk.es141.js +162 -66
  132. package/dist/es/standards-sdk.es141.js.map +1 -1
  133. package/dist/es/standards-sdk.es142.js +325 -0
  134. package/dist/es/standards-sdk.es142.js.map +1 -0
  135. package/dist/es/standards-sdk.es143.js +349 -0
  136. package/dist/es/standards-sdk.es143.js.map +1 -0
  137. package/dist/es/standards-sdk.es144.js +456 -0
  138. package/dist/es/standards-sdk.es144.js.map +1 -0
  139. package/dist/es/standards-sdk.es145.js +334 -0
  140. package/dist/es/standards-sdk.es145.js.map +1 -0
  141. package/dist/es/standards-sdk.es146.js +79 -0
  142. package/dist/es/standards-sdk.es146.js.map +1 -0
  143. package/dist/es/standards-sdk.es147.js +20 -0
  144. package/dist/es/standards-sdk.es147.js.map +1 -0
  145. package/dist/es/standards-sdk.es15.js +1 -1
  146. package/dist/es/standards-sdk.es16.js +17 -12
  147. package/dist/es/standards-sdk.es16.js.map +1 -1
  148. package/dist/es/standards-sdk.es17.js +5 -5
  149. package/dist/es/standards-sdk.es19.js +12 -12
  150. package/dist/es/standards-sdk.es19.js.map +1 -1
  151. package/dist/es/standards-sdk.es2.js.map +1 -1
  152. package/dist/es/standards-sdk.es20.js +9 -9
  153. package/dist/es/standards-sdk.es21.js +1 -1
  154. package/dist/es/standards-sdk.es22.js +1 -1
  155. package/dist/es/standards-sdk.es23.js +1 -1
  156. package/dist/es/standards-sdk.es24.js +1 -1
  157. package/dist/es/standards-sdk.es25.js +1 -1
  158. package/dist/es/standards-sdk.es26.js +1 -1
  159. package/dist/es/standards-sdk.es27.js +1 -1
  160. package/dist/es/standards-sdk.es28.js +12 -12
  161. package/dist/es/standards-sdk.es3.js +2 -2
  162. package/dist/es/standards-sdk.es31.js +2 -2
  163. package/dist/es/standards-sdk.es32.js +4 -4
  164. package/dist/es/standards-sdk.es33.js +1 -1
  165. package/dist/es/standards-sdk.es36.js +6 -6
  166. package/dist/es/standards-sdk.es37.js +4 -4
  167. package/dist/es/standards-sdk.es38.js +2 -2
  168. package/dist/es/standards-sdk.es39.js +2 -2
  169. package/dist/es/standards-sdk.es40.js +1 -1
  170. package/dist/es/standards-sdk.es41.js +1 -1
  171. package/dist/es/standards-sdk.es42.js +2 -2
  172. package/dist/es/standards-sdk.es47.js +1 -1
  173. package/dist/es/standards-sdk.es5.js +2 -2
  174. package/dist/es/standards-sdk.es52.js +1 -1
  175. package/dist/es/standards-sdk.es54.js +1 -1
  176. package/dist/es/standards-sdk.es57.js +2 -2
  177. package/dist/es/standards-sdk.es59.js +1 -1
  178. package/dist/es/standards-sdk.es6.js +2 -2
  179. package/dist/es/standards-sdk.es60.js +1 -1
  180. package/dist/es/standards-sdk.es61.js +7 -7
  181. package/dist/es/standards-sdk.es63.js +1 -1
  182. package/dist/es/standards-sdk.es65.js +2 -2
  183. package/dist/es/standards-sdk.es66.js +3 -3
  184. package/dist/es/standards-sdk.es69.js +2 -2
  185. package/dist/es/standards-sdk.es7.js +2 -2
  186. package/dist/es/standards-sdk.es70.js +3 -3
  187. package/dist/es/standards-sdk.es71.js +2 -2
  188. package/dist/es/standards-sdk.es72.js +1 -1
  189. package/dist/es/standards-sdk.es75.js +2 -2
  190. package/dist/es/standards-sdk.es77.js +2 -2
  191. package/dist/es/standards-sdk.es78.js +4 -4
  192. package/dist/es/standards-sdk.es79.js +1 -1
  193. package/dist/es/standards-sdk.es8.js +1 -1
  194. package/dist/es/standards-sdk.es80.js +25 -27
  195. package/dist/es/standards-sdk.es80.js.map +1 -1
  196. package/dist/es/standards-sdk.es81.js +6 -78
  197. package/dist/es/standards-sdk.es81.js.map +1 -1
  198. package/dist/es/standards-sdk.es82.js +27 -64
  199. package/dist/es/standards-sdk.es82.js.map +1 -1
  200. package/dist/es/standards-sdk.es83.js +67 -23
  201. package/dist/es/standards-sdk.es83.js.map +1 -1
  202. package/dist/es/standards-sdk.es84.js +165 -23
  203. package/dist/es/standards-sdk.es84.js.map +1 -1
  204. package/dist/es/standards-sdk.es85.js +31 -166
  205. package/dist/es/standards-sdk.es85.js.map +1 -1
  206. package/dist/es/standards-sdk.es86.js +24 -127
  207. package/dist/es/standards-sdk.es86.js.map +1 -1
  208. package/dist/es/standards-sdk.es87.js +65 -142
  209. package/dist/es/standards-sdk.es87.js.map +1 -1
  210. package/dist/es/standards-sdk.es88.js +52 -127
  211. package/dist/es/standards-sdk.es88.js.map +1 -1
  212. package/dist/es/standards-sdk.es89.js +26 -41
  213. package/dist/es/standards-sdk.es89.js.map +1 -1
  214. package/dist/es/standards-sdk.es90.js +23 -261
  215. package/dist/es/standards-sdk.es90.js.map +1 -1
  216. package/dist/es/standards-sdk.es91.js +162 -93
  217. package/dist/es/standards-sdk.es91.js.map +1 -1
  218. package/dist/es/standards-sdk.es92.js +112 -83
  219. package/dist/es/standards-sdk.es92.js.map +1 -1
  220. package/dist/es/standards-sdk.es93.js +156 -28
  221. package/dist/es/standards-sdk.es93.js.map +1 -1
  222. package/dist/es/standards-sdk.es94.js +133 -225
  223. package/dist/es/standards-sdk.es94.js.map +1 -1
  224. package/dist/es/standards-sdk.es95.js +40 -108
  225. package/dist/es/standards-sdk.es95.js.map +1 -1
  226. package/dist/es/standards-sdk.es96.js +253 -24
  227. package/dist/es/standards-sdk.es96.js.map +1 -1
  228. package/dist/es/standards-sdk.es97.js +96 -80
  229. package/dist/es/standards-sdk.es97.js.map +1 -1
  230. package/dist/es/standards-sdk.es98.js +91 -21
  231. package/dist/es/standards-sdk.es98.js.map +1 -1
  232. package/dist/es/standards-sdk.es99.js +28 -141
  233. package/dist/es/standards-sdk.es99.js.map +1 -1
  234. package/package.json +2 -1
@@ -1,30 +1,28 @@
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);
8
- }
9
- if (params.accountMemo) {
10
- tx.setAccountMemo(params.accountMemo);
11
- }
12
- return tx;
13
- }
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);
20
- }
21
- if (params.accountMemo) {
22
- tx.setAccountMemo(params.accountMemo);
23
- }
24
- return tx;
25
- }
1
+ import { z } from "zod";
2
+ const HCS21_PROTOCOL = "hcs-21";
3
+ const HCS21_MAX_MESSAGE_BYTES = 1024;
4
+ const HCS21MetadataPointerPattern = /^hcs:\/\/1\/0\.0\.\d+\/\d+$/;
5
+ var HCS21TopicType = /* @__PURE__ */ ((HCS21TopicType2) => {
6
+ HCS21TopicType2[HCS21TopicType2["REGISTRY"] = 0] = "REGISTRY";
7
+ return HCS21TopicType2;
8
+ })(HCS21TopicType || {});
9
+ const adapterDeclarationSchema = z.object({
10
+ p: z.literal(HCS21_PROTOCOL),
11
+ op: z.enum(["register", "update"]),
12
+ registry: z.enum(["npm", "pypi"]),
13
+ pkg: z.string().min(1),
14
+ name: z.string().min(1),
15
+ kind: z.enum(["web2", "web3"]),
16
+ metadata: z.string().regex(
17
+ HCS21MetadataPointerPattern,
18
+ "metadata must be an HCS-1 HRL (hcs://1/<topicId>/<sequence>)"
19
+ ).optional()
20
+ });
26
21
  export {
27
- buildHcs15BaseAccountCreateTx,
28
- buildHcs15PetalAccountCreateTx
22
+ HCS21MetadataPointerPattern,
23
+ HCS21TopicType,
24
+ HCS21_MAX_MESSAGE_BYTES,
25
+ HCS21_PROTOCOL,
26
+ adapterDeclarationSchema
29
27
  };
30
28
  //# sourceMappingURL=standards-sdk.es80.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es80.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.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;\n\nexport type AdapterPackageRegistry = 'npm' | 'pypi';\nexport type AdapterPlatformKind = 'web2' | 'web3';\nexport type AdapterOperation = 'register' | 'update';\n\nexport const HCS21MetadataPointerPattern = /^hcs:\\/\\/1\\/0\\.0\\.\\d+\\/\\d+$/;\n\nexport interface AdapterDeclaration {\n p: typeof HCS21_PROTOCOL;\n op: AdapterOperation;\n registry: AdapterPackageRegistry;\n pkg: string;\n name: string;\n kind: AdapterPlatformKind;\n metadata?: string;\n}\n\nexport interface AdapterMetadataRecord {\n name: string;\n pkg: string;\n registry: AdapterPackageRegistry;\n kind: AdapterPlatformKind;\n description?: string;\n website?: string;\n source?: string;\n contact?: string;\n capabilities?: string[];\n tags?: string[];\n [key: string]: unknown;\n}\n\nexport interface AdapterMetadataPointer {\n pointer: string;\n topicId: string;\n sequenceNumber: number;\n jobId?: string;\n transactionId?: string;\n}\n\nexport interface AdapterDeclarationEnvelope {\n declaration: AdapterDeclaration;\n consensusTimestamp?: string;\n sequenceNumber: number;\n payer?: string;\n}\n\nexport enum HCS21TopicType {\n REGISTRY = 0,\n}\n\nexport const adapterDeclarationSchema = z.object({\n p: z.literal(HCS21_PROTOCOL),\n op: z.enum(['register', 'update']),\n registry: z.enum(['npm', 'pypi']),\n pkg: z.string().min(1),\n name: z.string().min(1),\n kind: z.enum(['web2', 'web3']),\n metadata: z\n .string()\n .regex(\n HCS21MetadataPointerPattern,\n 'metadata must be an HCS-1 HRL (hcs://1/<topicId>/<sequence>)',\n )\n .optional(),\n});\n\nexport type AdapterDeclarationValidation = z.infer<\n typeof adapterDeclarationSchema\n>;\n"],"names":["HCS21TopicType"],"mappings":";AAEO,MAAM,iBAAiB;AACvB,MAAM,0BAA0B;AAMhC,MAAM,8BAA8B;AAyCpC,IAAK,mCAAAA,oBAAL;AACLA,kBAAAA,gBAAA,cAAW,CAAA,IAAX;AADU,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAIL,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,GAAG,EAAE,QAAQ,cAAc;AAAA,EAC3B,IAAI,EAAE,KAAK,CAAC,YAAY,QAAQ,CAAC;AAAA,EACjC,UAAU,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC;AAAA,EAChC,KAAK,EAAE,SAAS,IAAI,CAAC;AAAA,EACrB,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,EACtB,MAAM,EAAE,KAAK,CAAC,QAAQ,MAAM,CAAC;AAAA,EAC7B,UAAU,EACP,OAAA,EACA;AAAA,IACC;AAAA,IACA;AAAA,EAAA,EAED,SAAA;AACL,CAAC;"}
@@ -1,83 +1,11 @@
1
- import { AccountId, Client, PrivateKey, Hbar } from "@hashgraph/sdk";
2
- import { createNodeOperatorContext } from "./standards-sdk.es129.js";
3
- import { buildHcs15BaseAccountCreateTx, buildHcs15PetalAccountCreateTx } from "./standards-sdk.es80.js";
4
- import { HCS15BaseClient } from "./standards-sdk.es83.js";
5
- class HCS15Client extends HCS15BaseClient {
6
- constructor(config) {
7
- super(config);
8
- this.operatorId = AccountId.fromString(config.operatorId);
9
- this.operatorCtx = createNodeOperatorContext({
10
- network: this.network,
11
- operatorId: this.operatorId,
12
- operatorKey: config.operatorKey,
13
- keyType: config.keyType,
14
- mirrorNode: this.mirrorNode,
15
- logger: this.logger,
16
- client: this.network === "mainnet" ? Client.forMainnet() : Client.forTestnet()
17
- });
18
- this.client = this.operatorCtx.client;
19
- }
20
- getKeyType() {
21
- return this.operatorCtx.keyType;
22
- }
23
- async close() {
24
- try {
25
- this.client.close();
26
- } catch {
27
- }
28
- }
29
- /**
30
- * Create a new base account with a newly generated ECDSA key and EVM alias.
31
- */
32
- async createBaseAccount(options) {
33
- const priv = PrivateKey.generateECDSA();
34
- const pub = priv.publicKey;
35
- const tx = buildHcs15BaseAccountCreateTx({
36
- publicKey: pub,
37
- initialBalance: new Hbar(options?.initialBalance ?? 10),
38
- maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,
39
- accountMemo: options?.accountMemo
40
- });
41
- const resp = await tx.execute(this.client);
42
- const receipt = await resp.getReceipt(this.client);
43
- if (!receipt.accountId) {
44
- throw new Error("HCS-15 BASE_ACCOUNT_CREATE_FAILED");
45
- }
46
- const accountId = receipt.accountId.toString();
47
- const evmAddress = `0x${pub.toEvmAddress()}`;
48
- this.logger.info("Created HCS-15 base account", { accountId, evmAddress });
49
- return {
50
- accountId,
51
- privateKey: priv,
52
- privateKeyHex: priv.toStringRaw(),
53
- publicKey: pub,
54
- evmAddress,
55
- receipt
56
- };
57
- }
58
- /**
59
- * Create a Petal account that reuses the base account ECDSA key (no alias).
60
- */
61
- async createPetalAccount(params) {
62
- const baseKey = typeof params.basePrivateKey === "string" ? PrivateKey.fromStringECDSA(params.basePrivateKey) : params.basePrivateKey;
63
- const pub = baseKey.publicKey;
64
- const tx = buildHcs15PetalAccountCreateTx({
65
- publicKey: pub,
66
- initialBalance: new Hbar(params.initialBalance ?? 1),
67
- maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,
68
- accountMemo: params.accountMemo
69
- });
70
- const resp = await tx.execute(this.client);
71
- const receipt = await resp.getReceipt(this.client);
72
- if (!receipt.accountId) {
73
- throw new Error("HCS-15 PETAL_ACCOUNT_CREATE_FAILED");
74
- }
75
- const accountId = receipt.accountId.toString();
76
- this.logger.info("Created HCS-15 petal account", { accountId });
77
- return { accountId, receipt };
1
+ class HCS21ValidationError extends Error {
2
+ constructor(message, code) {
3
+ super(message);
4
+ this.code = code;
5
+ this.name = "HCS21ValidationError";
78
6
  }
79
7
  }
80
8
  export {
81
- HCS15Client
9
+ HCS21ValidationError
82
10
  };
83
11
  //# sourceMappingURL=standards-sdk.es81.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es81.js","sources":["../../src/hcs-15/sdk.ts"],"sourcesContent":["import {\n AccountId,\n Client,\n Hbar,\n PrivateKey,\n PublicKey,\n TransactionReceipt,\n} from '@hashgraph/sdk';\nimport { NetworkType } from '../utils/types';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport {\n buildHcs15BaseAccountCreateTx,\n buildHcs15PetalAccountCreateTx,\n} from './tx';\nimport type { SDKHCS15ClientConfig } from './types';\nimport { HCS15BaseClient } from './base-client';\n\nexport class HCS15Client extends HCS15BaseClient {\n private readonly operatorCtx: NodeOperatorContext;\n private readonly client: Client;\n private readonly operatorId: AccountId;\n\n constructor(config: SDKHCS15ClientConfig) {\n super(config);\n this.operatorId = AccountId.fromString(config.operatorId);\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client:\n this.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet(),\n });\n this.client = this.operatorCtx.client;\n }\n\n public getKeyType(): 'ed25519' | 'ecdsa' {\n return this.operatorCtx.keyType;\n }\n\n public async close(): Promise<void> {\n try {\n this.client.close();\n } catch {}\n }\n\n /**\n * Create a new base account with a newly generated ECDSA key and EVM alias.\n */\n async createBaseAccount(options?: {\n initialBalance?: number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n }): Promise<{\n accountId: string;\n privateKey: PrivateKey;\n privateKeyHex: string;\n publicKey: PublicKey;\n evmAddress: string;\n receipt: TransactionReceipt;\n }> {\n const priv = PrivateKey.generateECDSA();\n const pub = priv.publicKey;\n const tx = buildHcs15BaseAccountCreateTx({\n publicKey: pub,\n initialBalance: new Hbar(options?.initialBalance ?? 10),\n maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,\n accountMemo: options?.accountMemo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n if (!receipt.accountId) {\n throw new Error('HCS-15 BASE_ACCOUNT_CREATE_FAILED');\n }\n const accountId = receipt.accountId.toString();\n const evmAddress = `0x${pub.toEvmAddress()}`;\n this.logger.info('Created HCS-15 base account', { accountId, evmAddress });\n return {\n accountId,\n privateKey: priv,\n privateKeyHex: priv.toStringRaw(),\n publicKey: pub,\n evmAddress,\n receipt,\n };\n }\n\n /**\n * Create a Petal account that reuses the base account ECDSA key (no alias).\n */\n async createPetalAccount(params: {\n basePrivateKey: string | PrivateKey;\n initialBalance?: number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n }): Promise<{ accountId: string; receipt: TransactionReceipt }> {\n const baseKey =\n typeof params.basePrivateKey === 'string'\n ? PrivateKey.fromStringECDSA(params.basePrivateKey)\n : params.basePrivateKey;\n const pub = baseKey.publicKey;\n const tx = buildHcs15PetalAccountCreateTx({\n publicKey: pub,\n initialBalance: new Hbar(params.initialBalance ?? 1),\n maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,\n accountMemo: params.accountMemo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n if (!receipt.accountId) {\n throw new Error('HCS-15 PETAL_ACCOUNT_CREATE_FAILED');\n }\n const accountId = receipt.accountId.toString();\n this.logger.info('Created HCS-15 petal account', { accountId });\n return { accountId, receipt };\n }\n}\n"],"names":[],"mappings":";;;;AAoBO,MAAM,oBAAoB,gBAAgB;AAAA,EAK/C,YAAY,QAA8B;AACxC,UAAM,MAAM;AACZ,SAAK,aAAa,UAAU,WAAW,OAAO,UAAU;AACxD,SAAK,cAAc,0BAA0B;AAAA,MAC3C,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO;AAAA,MAChB,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,QACE,KAAK,YAAY,YAAY,OAAO,WAAA,IAAe,OAAO,WAAA;AAAA,IAAW,CACxE;AACD,SAAK,SAAS,KAAK,YAAY;AAAA,EACjC;AAAA,EAEO,aAAkC;AACvC,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAEA,MAAa,QAAuB;AAClC,QAAI;AACF,WAAK,OAAO,MAAA;AAAA,IACd,QAAQ;AAAA,IAAC;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,SAWrB;AACD,UAAM,OAAO,WAAW,cAAA;AACxB,UAAM,MAAM,KAAK;AACjB,UAAM,KAAK,8BAA8B;AAAA,MACvC,WAAW;AAAA,MACX,gBAAgB,IAAI,KAAK,SAAS,kBAAkB,EAAE;AAAA,MACtD,+BAA+B,SAAS;AAAA,MACxC,aAAa,SAAS;AAAA,IAAA,CACvB;AACD,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,UAAM,UAAU,MAAM,KAAK,WAAW,KAAK,MAAM;AACjD,QAAI,CAAC,QAAQ,WAAW;AACtB,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AACA,UAAM,YAAY,QAAQ,UAAU,SAAA;AACpC,UAAM,aAAa,KAAK,IAAI,aAAA,CAAc;AAC1C,SAAK,OAAO,KAAK,+BAA+B,EAAE,WAAW,YAAY;AACzE,WAAO;AAAA,MACL;AAAA,MACA,YAAY;AAAA,MACZ,eAAe,KAAK,YAAA;AAAA,MACpB,WAAW;AAAA,MACX;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAmB,QAKuC;AAC9D,UAAM,UACJ,OAAO,OAAO,mBAAmB,WAC7B,WAAW,gBAAgB,OAAO,cAAc,IAChD,OAAO;AACb,UAAM,MAAM,QAAQ;AACpB,UAAM,KAAK,+BAA+B;AAAA,MACxC,WAAW;AAAA,MACX,gBAAgB,IAAI,KAAK,OAAO,kBAAkB,CAAC;AAAA,MACnD,+BAA+B,OAAO;AAAA,MACtC,aAAa,OAAO;AAAA,IAAA,CACrB;AACD,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,UAAM,UAAU,MAAM,KAAK,WAAW,KAAK,MAAM;AACjD,QAAI,CAAC,QAAQ,WAAW;AACtB,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACtD;AACA,UAAM,YAAY,QAAQ,UAAU,SAAA;AACpC,SAAK,OAAO,KAAK,gCAAgC,EAAE,WAAW;AAC9D,WAAO,EAAE,WAAW,QAAA;AAAA,EACtB;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es81.js","sources":["../../src/hcs-21/errors.ts"],"sourcesContent":["export type HCS21ErrorCode =\n | 'size_exceeded'\n | 'invalid_payload'\n | 'missing_signature'\n | 'verification_failed';\n\nexport class HCS21ValidationError extends Error {\n constructor(\n message: string,\n public readonly code: HCS21ErrorCode,\n ) {\n super(message);\n this.name = 'HCS21ValidationError';\n }\n}\n"],"names":[],"mappings":"AAMO,MAAM,6BAA6B,MAAM;AAAA,EAC9C,YACE,SACgB,MAChB;AACA,UAAM,OAAO;AAFG,SAAA,OAAA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;"}
@@ -1,68 +1,31 @@
1
- import { PrivateKey, Hbar } from "@hashgraph/sdk";
2
- import { HCS15BaseClient } from "./standards-sdk.es83.js";
3
- import { buildHcs15BaseAccountCreateTx, buildHcs15PetalAccountCreateTx } from "./standards-sdk.es80.js";
4
- class HCS15BrowserClient extends HCS15BaseClient {
5
- constructor(config) {
6
- super(config);
7
- this.signer = config.signer || config.hwc?.dAppConnector?.signers?.[0];
8
- }
9
- requireSigner() {
10
- if (!this.signer) {
11
- throw new Error("HCS-15 Browser client requires an active DAppSigner");
12
- }
13
- return this.signer;
14
- }
15
- /**
16
- * Create a new base account with a new ECDSA key and EVM alias using a connected wallet signer.
17
- */
18
- async createBaseAccount(options) {
19
- const signer = this.requireSigner();
20
- const priv = PrivateKey.generateECDSA();
21
- const pub = priv.publicKey;
22
- const tx = buildHcs15BaseAccountCreateTx({
23
- publicKey: pub,
24
- initialBalance: new Hbar(options?.initialBalance ?? 10),
25
- maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,
26
- accountMemo: options?.accountMemo
27
- });
28
- const frozen = await tx.freezeWithSigner(signer);
29
- const res = await frozen.executeWithSigner(signer);
30
- const receipt = await res.getReceiptWithSigner(signer);
31
- const accountId = receipt?.accountId?.toString?.();
32
- const evmAddress = `0x${pub.toEvmAddress()}`;
33
- this.logger.info("Created HCS-15 base account (browser)", {
34
- accountId,
35
- evmAddress
36
- });
37
- return {
38
- accountId,
39
- privateKey: priv,
40
- privateKeyHex: priv.toStringRaw(),
41
- publicKey: pub,
42
- evmAddress
43
- };
44
- }
45
- /**
46
- * Create a petal account reusing a base ECDSA key, via wallet signer.
47
- */
48
- async createPetalAccount(params) {
49
- const signer = this.requireSigner();
50
- const baseKey = typeof params.basePrivateKey === "string" ? PrivateKey.fromStringECDSA(params.basePrivateKey) : params.basePrivateKey;
51
- const tx = buildHcs15PetalAccountCreateTx({
52
- publicKey: baseKey.publicKey,
53
- initialBalance: new Hbar(params.initialBalance ?? 1),
54
- maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,
55
- accountMemo: params.accountMemo
56
- });
57
- const frozen = await tx.freezeWithSigner(signer);
58
- const res = await frozen.executeWithSigner(signer);
59
- const receipt = await res.getReceiptWithSigner(signer);
60
- const accountId = receipt?.accountId?.toString?.();
61
- this.logger.info("Created HCS-15 petal account (browser)", { accountId });
62
- return { accountId };
63
- }
1
+ import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es136.js";
2
+ import { HCS21TopicType } from "./standards-sdk.es80.js";
3
+ function buildHcs21RegistryMemo(params) {
4
+ const indexed = params.indexed ?? 0;
5
+ return `hcs-21:${indexed}:${params.ttl}:${HCS21TopicType.REGISTRY}`;
6
+ }
7
+ function buildHcs21CreateRegistryTx(params) {
8
+ const memo = buildHcs21RegistryMemo({
9
+ ttl: params.ttl,
10
+ indexed: params.indexed
11
+ });
12
+ return buildTopicCreateTx({
13
+ memo,
14
+ adminKey: params.adminKey,
15
+ submitKey: params.submitKey,
16
+ operatorPublicKey: params.operatorPublicKey
17
+ });
18
+ }
19
+ function buildHcs21MessageTx(params) {
20
+ return buildMessageTx({
21
+ topicId: params.topicId,
22
+ message: JSON.stringify(params.declaration),
23
+ transactionMemo: params.transactionMemo
24
+ });
64
25
  }
65
26
  export {
66
- HCS15BrowserClient
27
+ buildHcs21CreateRegistryTx,
28
+ buildHcs21MessageTx,
29
+ buildHcs21RegistryMemo
67
30
  };
68
31
  //# sourceMappingURL=standards-sdk.es82.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es82.js","sources":["../../src/hcs-15/browser.ts"],"sourcesContent":["import type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport type {\n PublicKey,\n PrivateKey,\n TransactionResponse,\n} from '@hashgraph/sdk';\nimport { PrivateKey as SDKPrivateKey, Hbar } from '@hashgraph/sdk';\nimport type { BrowserHCS15ClientConfig } from './types';\n\nimport { HCS15BaseClient } from './base-client';\nimport {\n buildHcs15BaseAccountCreateTx,\n buildHcs15PetalAccountCreateTx,\n} from './tx';\n\nexport class HCS15BrowserClient extends HCS15BaseClient {\n private readonly signer?: DAppSigner;\n\n constructor(config: BrowserHCS15ClientConfig) {\n super(config);\n this.signer = config.signer || config.hwc?.dAppConnector?.signers?.[0];\n }\n\n private requireSigner(): DAppSigner {\n if (!this.signer) {\n throw new Error('HCS-15 Browser client requires an active DAppSigner');\n }\n return this.signer as DAppSigner;\n }\n\n /**\n * Create a new base account with a new ECDSA key and EVM alias using a connected wallet signer.\n */\n async createBaseAccount(options?: {\n initialBalance?: number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n }): Promise<{\n accountId?: string;\n privateKey: PrivateKey;\n privateKeyHex: string;\n publicKey: PublicKey;\n evmAddress: string;\n }> {\n const signer = this.requireSigner();\n const priv = SDKPrivateKey.generateECDSA();\n const pub = priv.publicKey;\n const tx = buildHcs15BaseAccountCreateTx({\n publicKey: pub,\n initialBalance: new Hbar(options?.initialBalance ?? 10),\n maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,\n accountMemo: options?.accountMemo,\n });\n const frozen = await tx.freezeWithSigner(signer);\n const res: TransactionResponse = await frozen.executeWithSigner(signer);\n const receipt = await res.getReceiptWithSigner(signer as any);\n const accountId = receipt?.accountId?.toString?.();\n const evmAddress = `0x${pub.toEvmAddress()}`;\n this.logger.info('Created HCS-15 base account (browser)', {\n accountId,\n evmAddress,\n });\n return {\n accountId,\n privateKey: priv,\n privateKeyHex: priv.toStringRaw(),\n publicKey: pub,\n evmAddress,\n };\n }\n\n /**\n * Create a petal account reusing a base ECDSA key, via wallet signer.\n */\n async createPetalAccount(params: {\n basePrivateKey: string | PrivateKey;\n initialBalance?: number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n }): Promise<{ accountId?: string }> {\n const signer = this.requireSigner();\n const baseKey =\n typeof params.basePrivateKey === 'string'\n ? SDKPrivateKey.fromStringECDSA(params.basePrivateKey)\n : params.basePrivateKey;\n const tx = buildHcs15PetalAccountCreateTx({\n publicKey: baseKey.publicKey,\n initialBalance: new Hbar(params.initialBalance ?? 1),\n maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,\n accountMemo: params.accountMemo,\n });\n const frozen = await tx.freezeWithSigner(signer);\n const res: TransactionResponse = await frozen.executeWithSigner(signer);\n const receipt = await res.getReceiptWithSigner(signer as any);\n const accountId = receipt?.accountId?.toString?.();\n this.logger.info('Created HCS-15 petal account (browser)', { accountId });\n return { accountId };\n }\n}\n"],"names":["SDKPrivateKey"],"mappings":";;;AAeO,MAAM,2BAA2B,gBAAgB;AAAA,EAGtD,YAAY,QAAkC;AAC5C,UAAM,MAAM;AACZ,SAAK,SAAS,OAAO,UAAU,OAAO,KAAK,eAAe,UAAU,CAAC;AAAA,EACvE;AAAA,EAEQ,gBAA4B;AAClC,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,SAUrB;AACD,UAAM,SAAS,KAAK,cAAA;AACpB,UAAM,OAAOA,WAAc,cAAA;AAC3B,UAAM,MAAM,KAAK;AACjB,UAAM,KAAK,8BAA8B;AAAA,MACvC,WAAW;AAAA,MACX,gBAAgB,IAAI,KAAK,SAAS,kBAAkB,EAAE;AAAA,MACtD,+BAA+B,SAAS;AAAA,MACxC,aAAa,SAAS;AAAA,IAAA,CACvB;AACD,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,MAA2B,MAAM,OAAO,kBAAkB,MAAM;AACtE,UAAM,UAAU,MAAM,IAAI,qBAAqB,MAAa;AAC5D,UAAM,YAAY,SAAS,WAAW,WAAA;AACtC,UAAM,aAAa,KAAK,IAAI,aAAA,CAAc;AAC1C,SAAK,OAAO,KAAK,yCAAyC;AAAA,MACxD;AAAA,MACA;AAAA,IAAA,CACD;AACD,WAAO;AAAA,MACL;AAAA,MACA,YAAY;AAAA,MACZ,eAAe,KAAK,YAAA;AAAA,MACpB,WAAW;AAAA,MACX;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAmB,QAKW;AAClC,UAAM,SAAS,KAAK,cAAA;AACpB,UAAM,UACJ,OAAO,OAAO,mBAAmB,WAC7BA,WAAc,gBAAgB,OAAO,cAAc,IACnD,OAAO;AACb,UAAM,KAAK,+BAA+B;AAAA,MACxC,WAAW,QAAQ;AAAA,MACnB,gBAAgB,IAAI,KAAK,OAAO,kBAAkB,CAAC;AAAA,MACnD,+BAA+B,OAAO;AAAA,MACtC,aAAa,OAAO;AAAA,IAAA,CACrB;AACD,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,MAA2B,MAAM,OAAO,kBAAkB,MAAM;AACtE,UAAM,UAAU,MAAM,IAAI,qBAAqB,MAAa;AAC5D,UAAM,YAAY,SAAS,WAAW,WAAA;AACtC,SAAK,OAAO,KAAK,0CAA0C,EAAE,WAAW;AACxE,WAAO,EAAE,UAAA;AAAA,EACX;AACF;"}
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 { AdapterDeclaration, HCS21TopicType } from './types';\n\nexport function buildHcs21RegistryMemo(params: {\n ttl: number;\n indexed?: 0 | 1;\n}): string {\n const indexed = params.indexed ?? 0;\n return `hcs-21:${indexed}:${params.ttl}:${HCS21TopicType.REGISTRY}`;\n}\n\nexport function buildHcs21CreateRegistryTx(params: {\n ttl: number;\n indexed?: 0 | 1;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n operatorPublicKey?: PublicKey;\n}): TopicCreateTransaction {\n const memo = buildHcs21RegistryMemo({\n ttl: params.ttl,\n indexed: params.indexed,\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":";;AAYO,SAAS,uBAAuB,QAG5B;AACT,QAAM,UAAU,OAAO,WAAW;AAClC,SAAO,UAAU,OAAO,IAAI,OAAO,GAAG,IAAI,eAAe,QAAQ;AACnE;AAEO,SAAS,2BAA2B,QAMhB;AACzB,QAAM,OAAO,uBAAuB;AAAA,IAClC,KAAK,OAAO;AAAA,IACZ,SAAS,OAAO;AAAA,EAAA,CACjB;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,33 +1,77 @@
1
- import { HederaMirrorNode } from "./standards-sdk.es120.js";
2
- import { Logger } from "./standards-sdk.es99.js";
3
- class HCS15BaseClient {
4
- constructor(config) {
5
- this.network = config.network;
6
- this.logger = config.logger || new Logger({
7
- module: "HCS-15",
8
- level: config.logLevel || "info"
9
- });
1
+ import { HederaMirrorNode } from "./standards-sdk.es126.js";
2
+ import { Logger } from "./standards-sdk.es105.js";
3
+ import { HCS21ValidationError } from "./standards-sdk.es81.js";
4
+ import { HCS21_PROTOCOL, adapterDeclarationSchema, HCS21_MAX_MESSAGE_BYTES } from "./standards-sdk.es80.js";
5
+ class HCS21BaseClient {
6
+ constructor(params) {
7
+ this.network = params.network;
8
+ this.logger = params.logger || new Logger({ level: "info", module: "HCS-21" });
10
9
  this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {
11
- customUrl: config.mirrorNodeUrl
10
+ customUrl: params.mirrorNodeUrl
12
11
  });
13
12
  }
14
- /**
15
- * Verify that a petal account shares the same public key as the base account.
16
- */
17
- async verifyPetalAccount(petalAccountId, baseAccountId) {
13
+ buildDeclaration(params) {
14
+ const declaration = {
15
+ p: HCS21_PROTOCOL,
16
+ op: params.op,
17
+ registry: params.registry,
18
+ pkg: params.pkg,
19
+ name: params.name,
20
+ kind: params.kind,
21
+ metadata: params.metadata
22
+ };
23
+ return this.validateDeclaration(declaration);
24
+ }
25
+ validateDeclaration(input) {
18
26
  try {
19
- const petalInfo = await this.mirrorNode.requestAccount(petalAccountId);
20
- const baseInfo = await this.mirrorNode.requestAccount(baseAccountId);
21
- const petalKey = petalInfo?.key?.key || "";
22
- const baseKey = baseInfo?.key?.key || "";
23
- return petalKey !== "" && petalKey === baseKey;
24
- } catch (e) {
25
- this.logger.warn("verifyPetalAccount failed", { error: String(e) });
26
- return false;
27
+ const payload = typeof input === "string" ? JSON.parse(input) : input;
28
+ const parsed = adapterDeclarationSchema.parse(
29
+ payload
30
+ );
31
+ this.assertSizeLimit(parsed);
32
+ return parsed;
33
+ } catch (error) {
34
+ const message = error instanceof Error ? error.message : "Invalid adapter declaration";
35
+ throw new HCS21ValidationError(message, "invalid_payload");
36
+ }
37
+ }
38
+ async fetchDeclarations(topicId, options) {
39
+ const rawMessages = await this.mirrorNode.getTopicMessages(topicId, {
40
+ limit: options?.limit,
41
+ order: options?.order
42
+ });
43
+ const envelopes = [];
44
+ for (const message of rawMessages) {
45
+ if (message.p !== HCS21_PROTOCOL) {
46
+ continue;
47
+ }
48
+ try {
49
+ const declaration = this.validateDeclaration(message);
50
+ envelopes.push({
51
+ declaration,
52
+ consensusTimestamp: message.consensus_timestamp,
53
+ sequenceNumber: message.sequence_number,
54
+ payer: message.payer
55
+ });
56
+ } catch (error) {
57
+ const detail = error instanceof Error ? error.message : "unknown error";
58
+ this.logger.warn(`Skipping invalid HCS-21 message: ${detail}`);
59
+ }
60
+ }
61
+ return envelopes;
62
+ }
63
+ assertSizeLimit(payload) {
64
+ const json = JSON.stringify(payload);
65
+ const bytes = Buffer.byteLength(json, "utf8");
66
+ if (bytes > HCS21_MAX_MESSAGE_BYTES) {
67
+ throw new HCS21ValidationError(
68
+ `HCS-21 payload exceeds 1024 bytes (${bytes})`,
69
+ "size_exceeded"
70
+ );
27
71
  }
28
72
  }
29
73
  }
30
74
  export {
31
- HCS15BaseClient
75
+ HCS21BaseClient
32
76
  };
33
77
  //# sourceMappingURL=standards-sdk.es83.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es83.js","sources":["../../src/hcs-15/base-client.ts"],"sourcesContent":["import { HederaMirrorNode } from '../services/mirror-node';\nimport { Logger, ILogger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\n\n/**\n * Base client for HCS‑15 shared functionality across Node and Browser clients.\n */\nexport class HCS15BaseClient {\n protected readonly network: NetworkType;\n protected readonly mirrorNode: HederaMirrorNode;\n protected readonly logger: ILogger;\n\n constructor(config: {\n network: NetworkType;\n mirrorNodeUrl?: string;\n logger?: Logger;\n logLevel?: Parameters<Logger['setLogLevel']>[0];\n }) {\n this.network = config.network;\n this.logger =\n config.logger ||\n new Logger({\n module: 'HCS-15',\n level: (config.logLevel as any) || 'info',\n });\n this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {\n customUrl: config.mirrorNodeUrl,\n });\n }\n\n /**\n * Verify that a petal account shares the same public key as the base account.\n */\n public async verifyPetalAccount(\n petalAccountId: string,\n baseAccountId: string,\n ): Promise<boolean> {\n try {\n const petalInfo = await this.mirrorNode.requestAccount(petalAccountId);\n const baseInfo = await this.mirrorNode.requestAccount(baseAccountId);\n const petalKey = petalInfo?.key?.key || '';\n const baseKey = baseInfo?.key?.key || '';\n return petalKey !== '' && petalKey === baseKey;\n } catch (e) {\n this.logger.warn('verifyPetalAccount failed', { error: String(e) });\n return false;\n }\n }\n}\n"],"names":[],"mappings":";;AAOO,MAAM,gBAAgB;AAAA,EAK3B,YAAY,QAKT;AACD,SAAK,UAAU,OAAO;AACtB,SAAK,SACH,OAAO,UACP,IAAI,OAAO;AAAA,MACT,QAAQ;AAAA,MACR,OAAQ,OAAO,YAAoB;AAAA,IAAA,CACpC;AACH,SAAK,aAAa,IAAI,iBAAiB,KAAK,SAAS,KAAK,QAAQ;AAAA,MAChE,WAAW,OAAO;AAAA,IAAA,CACnB;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,mBACX,gBACA,eACkB;AAClB,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,WAAW,eAAe,cAAc;AACrE,YAAM,WAAW,MAAM,KAAK,WAAW,eAAe,aAAa;AACnE,YAAM,WAAW,WAAW,KAAK,OAAO;AACxC,YAAM,UAAU,UAAU,KAAK,OAAO;AACtC,aAAO,aAAa,MAAM,aAAa;AAAA,IACzC,SAAS,GAAG;AACV,WAAK,OAAO,KAAK,6BAA6B,EAAE,OAAO,OAAO,CAAC,GAAG;AAClE,aAAO;AAAA,IACT;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 AdapterOperation,\n AdapterPackageRegistry,\n AdapterPlatformKind,\n HCS21_MAX_MESSAGE_BYTES,\n HCS21_PROTOCOL,\n adapterDeclarationSchema,\n} from './types';\n\nexport interface BuildDeclarationParams {\n op: AdapterOperation;\n registry: AdapterPackageRegistry;\n pkg: string;\n name: string;\n kind: AdapterPlatformKind;\n metadata?: 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 registry: params.registry,\n pkg: params.pkg,\n name: params.name,\n kind: params.kind,\n metadata: params.metadata,\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":";;;;AA6BO,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,UAAU,OAAO;AAAA,MACjB,KAAK,OAAO;AAAA,MACZ,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,UAAU,OAAO;AAAA,IAAA;AAGnB,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,28 +1,170 @@
1
- var FloraTopicType = /* @__PURE__ */ ((FloraTopicType2) => {
2
- FloraTopicType2[FloraTopicType2["COMMUNICATION"] = 0] = "COMMUNICATION";
3
- FloraTopicType2[FloraTopicType2["TRANSACTION"] = 1] = "TRANSACTION";
4
- FloraTopicType2[FloraTopicType2["STATE"] = 2] = "STATE";
5
- return FloraTopicType2;
6
- })(FloraTopicType || {});
7
- var FloraOperation = /* @__PURE__ */ ((FloraOperation2) => {
8
- FloraOperation2["FLORA_CREATED"] = "flora_created";
9
- FloraOperation2["TRANSACTION"] = "transaction";
10
- FloraOperation2["STATE_UPDATE"] = "state_update";
11
- FloraOperation2["FLORA_JOIN_REQUEST"] = "flora_join_request";
12
- FloraOperation2["FLORA_JOIN_VOTE"] = "flora_join_vote";
13
- FloraOperation2["FLORA_JOIN_ACCEPTED"] = "flora_join_accepted";
14
- return FloraOperation2;
15
- })(FloraOperation || {});
16
- class FloraError extends Error {
17
- constructor(message, code) {
18
- super(message);
19
- this.code = code;
20
- this.name = "FloraError";
1
+ import { Client, Status } from "@hashgraph/sdk";
2
+ import { createNodeOperatorContext } from "./standards-sdk.es135.js";
3
+ import { Logger } from "./standards-sdk.es105.js";
4
+ import { HCS21BaseClient } from "./standards-sdk.es83.js";
5
+ import { HCS21MetadataPointerPattern } from "./standards-sdk.es80.js";
6
+ import { buildHcs21CreateRegistryTx, buildHcs21MessageTx } from "./standards-sdk.es82.js";
7
+ import { HCS21ValidationError } from "./standards-sdk.es81.js";
8
+ import { inscribe } from "./standards-sdk.es124.js";
9
+ import { getTopicId } from "./standards-sdk.es114.js";
10
+ class HCS21Client extends HCS21BaseClient {
11
+ constructor(config) {
12
+ const logger = config.logger || new Logger({ level: config.logLevel || "info", module: "HCS-21" });
13
+ super({
14
+ network: config.network,
15
+ logger,
16
+ mirrorNodeUrl: config.mirrorNodeUrl
17
+ });
18
+ const baseClient = config.network === "mainnet" ? Client.forMainnet() : Client.forTestnet();
19
+ this.operatorCtx = createNodeOperatorContext({
20
+ network: config.network,
21
+ operatorId: config.operatorId,
22
+ operatorKey: config.operatorKey,
23
+ keyType: config.keyType,
24
+ mirrorNode: this.mirrorNode,
25
+ logger: this.logger,
26
+ client: baseClient
27
+ });
28
+ void this.operatorCtx.ensureInitialized();
29
+ this.client = this.operatorCtx.client;
30
+ }
31
+ async inscribeMetadata(params) {
32
+ await this.operatorCtx.ensureInitialized();
33
+ const metadataJson = JSON.stringify(params.metadata, null, 2);
34
+ const buffer = Buffer.from(metadataJson, "utf8");
35
+ const inscriptionOptions = {
36
+ waitForConfirmation: true,
37
+ ...params.inscriptionOptions || {},
38
+ metadata: {
39
+ ...params.inscriptionOptions?.metadata || {},
40
+ ...params.metadata
41
+ }
42
+ };
43
+ const inscription = await inscribe(
44
+ {
45
+ type: "buffer",
46
+ buffer,
47
+ fileName: params.fileName || `hcs21-adapter-metadata-${Date.now()}.json`,
48
+ mimeType: "application/json"
49
+ },
50
+ {
51
+ accountId: this.operatorCtx.operatorId.toString(),
52
+ privateKey: this.operatorCtx.operatorKey,
53
+ network: this.network
54
+ },
55
+ inscriptionOptions
56
+ );
57
+ if (!inscription.confirmed || !inscription.inscription) {
58
+ throw new HCS21ValidationError(
59
+ "Failed to inscribe adapter metadata",
60
+ "invalid_payload"
61
+ );
62
+ }
63
+ const topicId = inscription.inscription.jsonTopicId || inscription.inscription.topic_id || getTopicId(inscription.inscription);
64
+ if (!topicId) {
65
+ throw new HCS21ValidationError(
66
+ "Metadata inscription did not return a topic ID",
67
+ "invalid_payload"
68
+ );
69
+ }
70
+ const rawSequence = inscription.inscription.sequence_number ?? inscription.inscription.sequenceNumber;
71
+ const pointerResult = await this.resolveMetadataPointer(
72
+ topicId,
73
+ rawSequence
74
+ );
75
+ const resultDetails = inscription.result && "jobId" in inscription.result ? {
76
+ jobId: inscription.result.jobId,
77
+ transactionId: inscription.result.transactionId
78
+ } : {};
79
+ return {
80
+ pointer: pointerResult.pointer,
81
+ topicId,
82
+ sequenceNumber: pointerResult.sequenceNumber,
83
+ ...resultDetails
84
+ };
85
+ }
86
+ async createRegistryTopic(params) {
87
+ await this.operatorCtx.ensureInitialized();
88
+ const tx = buildHcs21CreateRegistryTx({
89
+ ttl: params.ttl,
90
+ indexed: params.indexed,
91
+ adminKey: params.adminKey,
92
+ submitKey: params.submitKey,
93
+ operatorPublicKey: this.operatorCtx.operatorKey.publicKey
94
+ });
95
+ if (params.transactionMemo) {
96
+ tx.setTransactionMemo(params.transactionMemo);
97
+ }
98
+ const response = await tx.execute(this.client);
99
+ const receipt = await response.getReceipt(this.client);
100
+ if (receipt.status !== Status.Success || !receipt.topicId) {
101
+ throw new HCS21ValidationError(
102
+ "Failed to create HCS-21 registry topic",
103
+ "invalid_payload"
104
+ );
105
+ }
106
+ return receipt.topicId.toString();
107
+ }
108
+ async publishDeclaration(params) {
109
+ await this.operatorCtx.ensureInitialized();
110
+ const declaration = this.normalizeDeclarationInput(params.declaration);
111
+ const tx = buildHcs21MessageTx({
112
+ topicId: params.topicId,
113
+ declaration,
114
+ transactionMemo: params.transactionMemo
115
+ });
116
+ const response = await tx.execute(this.client);
117
+ const receipt = await response.getReceipt(this.client);
118
+ if (receipt.status !== Status.Success) {
119
+ throw new HCS21ValidationError(
120
+ "Failed to submit HCS-21 declaration",
121
+ "invalid_payload"
122
+ );
123
+ }
124
+ return {
125
+ sequenceNumber: receipt.topicSequenceNumber?.toNumber(),
126
+ transactionId: response.transactionId.toString()
127
+ };
128
+ }
129
+ normalizeDeclarationInput(declaration) {
130
+ if ("p" in declaration) {
131
+ return this.validateDeclaration(declaration);
132
+ }
133
+ return this.buildDeclaration(declaration);
134
+ }
135
+ async resolveMetadataPointer(topicId, sequence) {
136
+ const numericSequence = typeof sequence === "string" ? Number(sequence) : sequence;
137
+ let resolvedSequence = typeof numericSequence === "number" && Number.isFinite(numericSequence) ? numericSequence : void 0;
138
+ if (!resolvedSequence) {
139
+ const [latest] = await this.mirrorNode.getTopicMessages(topicId, {
140
+ limit: 1,
141
+ order: "desc"
142
+ });
143
+ if (!latest || !latest.sequence_number) {
144
+ throw new HCS21ValidationError(
145
+ "Unable to resolve metadata sequence number",
146
+ "invalid_payload"
147
+ );
148
+ }
149
+ resolvedSequence = Number(latest.sequence_number);
150
+ }
151
+ if (!Number.isFinite(resolvedSequence)) {
152
+ throw new HCS21ValidationError(
153
+ "Invalid metadata sequence number",
154
+ "invalid_payload"
155
+ );
156
+ }
157
+ const pointer = `hcs://1/${topicId}/${resolvedSequence}`;
158
+ if (!HCS21MetadataPointerPattern.test(pointer)) {
159
+ throw new HCS21ValidationError(
160
+ "Metadata pointer format is invalid",
161
+ "invalid_payload"
162
+ );
163
+ }
164
+ return { pointer, sequenceNumber: resolvedSequence };
21
165
  }
22
166
  }
23
167
  export {
24
- FloraError,
25
- FloraOperation,
26
- FloraTopicType
168
+ HCS21Client
27
169
  };
28
170
  //# sourceMappingURL=standards-sdk.es84.js.map