@hashgraphonline/standards-sdk 0.1.168 → 0.1.170

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 (276) hide show
  1. package/README.md +1 -0
  2. package/dist/browser/hcs-11/client.d.ts.map +1 -1
  3. package/dist/browser/hcs-21/sdk.d.ts.map +1 -1
  4. package/dist/browser/hcs-27/base-client.d.ts +41 -0
  5. package/dist/browser/hcs-27/base-client.d.ts.map +1 -0
  6. package/dist/browser/hcs-27/index.d.ts +6 -0
  7. package/dist/browser/hcs-27/index.d.ts.map +1 -0
  8. package/dist/browser/hcs-27/memos.d.ts +5 -0
  9. package/dist/browser/hcs-27/memos.d.ts.map +1 -0
  10. package/dist/browser/hcs-27/merkle.d.ts +23 -0
  11. package/dist/browser/hcs-27/merkle.d.ts.map +1 -0
  12. package/dist/browser/hcs-27/sdk.d.ts +23 -0
  13. package/dist/browser/hcs-27/sdk.d.ts.map +1 -0
  14. package/dist/browser/hcs-27/types.d.ts +1611 -0
  15. package/dist/browser/hcs-27/types.d.ts.map +1 -0
  16. package/dist/browser/index.d.ts +1 -0
  17. package/dist/browser/index.d.ts.map +1 -1
  18. package/dist/browser/standards-sdk.browser.js +29 -5
  19. package/dist/browser/standards-sdk.browser.js.map +1 -1
  20. package/dist/browser/utils/key-type-detector.d.ts.map +1 -1
  21. package/dist/cjs/hcs-11/client.d.ts.map +1 -1
  22. package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
  23. package/dist/cjs/hcs-27/base-client.d.ts +41 -0
  24. package/dist/cjs/hcs-27/base-client.d.ts.map +1 -0
  25. package/dist/cjs/hcs-27/index.d.ts +6 -0
  26. package/dist/cjs/hcs-27/index.d.ts.map +1 -0
  27. package/dist/cjs/hcs-27/memos.d.ts +5 -0
  28. package/dist/cjs/hcs-27/memos.d.ts.map +1 -0
  29. package/dist/cjs/hcs-27/merkle.d.ts +23 -0
  30. package/dist/cjs/hcs-27/merkle.d.ts.map +1 -0
  31. package/dist/cjs/hcs-27/sdk.d.ts +23 -0
  32. package/dist/cjs/hcs-27/sdk.d.ts.map +1 -0
  33. package/dist/cjs/hcs-27/types.d.ts +1611 -0
  34. package/dist/cjs/hcs-27/types.d.ts.map +1 -0
  35. package/dist/cjs/index.d.ts +1 -0
  36. package/dist/cjs/index.d.ts.map +1 -1
  37. package/dist/cjs/standards-sdk.cjs +2 -2
  38. package/dist/cjs/standards-sdk.cjs.map +1 -1
  39. package/dist/cjs/utils/key-type-detector.d.ts.map +1 -1
  40. package/dist/es/hcs-11/client.d.ts.map +1 -1
  41. package/dist/es/hcs-21/sdk.d.ts.map +1 -1
  42. package/dist/es/hcs-27/base-client.d.ts +41 -0
  43. package/dist/es/hcs-27/base-client.d.ts.map +1 -0
  44. package/dist/es/hcs-27/index.d.ts +6 -0
  45. package/dist/es/hcs-27/index.d.ts.map +1 -0
  46. package/dist/es/hcs-27/memos.d.ts +5 -0
  47. package/dist/es/hcs-27/memos.d.ts.map +1 -0
  48. package/dist/es/hcs-27/merkle.d.ts +23 -0
  49. package/dist/es/hcs-27/merkle.d.ts.map +1 -0
  50. package/dist/es/hcs-27/sdk.d.ts +23 -0
  51. package/dist/es/hcs-27/sdk.d.ts.map +1 -0
  52. package/dist/es/hcs-27/types.d.ts +1611 -0
  53. package/dist/es/hcs-27/types.d.ts.map +1 -0
  54. package/dist/es/index.d.ts +1 -0
  55. package/dist/es/index.d.ts.map +1 -1
  56. package/dist/es/standards-sdk.es.js +67 -38
  57. package/dist/es/standards-sdk.es.js.map +1 -1
  58. package/dist/es/standards-sdk.es101.js +2 -2
  59. package/dist/es/standards-sdk.es103.js +2 -2
  60. package/dist/es/standards-sdk.es104.js +1 -1
  61. package/dist/es/standards-sdk.es106.js +1 -1
  62. package/dist/es/standards-sdk.es108.js +2 -2
  63. package/dist/es/standards-sdk.es11.js +1 -1
  64. package/dist/es/standards-sdk.es110.js +1 -1
  65. package/dist/es/standards-sdk.es111.js +2 -2
  66. package/dist/es/standards-sdk.es112.js +151 -234
  67. package/dist/es/standards-sdk.es112.js.map +1 -1
  68. package/dist/es/standards-sdk.es113.js +20 -471
  69. package/dist/es/standards-sdk.es113.js.map +1 -1
  70. package/dist/es/standards-sdk.es114.js +263 -104
  71. package/dist/es/standards-sdk.es114.js.map +1 -1
  72. package/dist/es/standards-sdk.es115.js +167 -138
  73. package/dist/es/standards-sdk.es115.js.map +1 -1
  74. package/dist/es/standards-sdk.es116.js +315 -29
  75. package/dist/es/standards-sdk.es116.js.map +1 -1
  76. package/dist/es/standards-sdk.es117.js +250 -10
  77. package/dist/es/standards-sdk.es117.js.map +1 -1
  78. package/dist/es/standards-sdk.es118.js +448 -152
  79. package/dist/es/standards-sdk.es118.js.map +1 -1
  80. package/dist/es/standards-sdk.es119.js +101 -25
  81. package/dist/es/standards-sdk.es119.js.map +1 -1
  82. package/dist/es/standards-sdk.es12.js +1 -1
  83. package/dist/es/standards-sdk.es120.js +155 -17
  84. package/dist/es/standards-sdk.es120.js.map +1 -1
  85. package/dist/es/standards-sdk.es121.js +29 -155
  86. package/dist/es/standards-sdk.es121.js.map +1 -1
  87. package/dist/es/standards-sdk.es122.js +9 -200
  88. package/dist/es/standards-sdk.es122.js.map +1 -1
  89. package/dist/es/standards-sdk.es123.js +146 -754
  90. package/dist/es/standards-sdk.es123.js.map +1 -1
  91. package/dist/es/standards-sdk.es124.js +27 -11
  92. package/dist/es/standards-sdk.es124.js.map +1 -1
  93. package/dist/es/standards-sdk.es125.js +19 -564
  94. package/dist/es/standards-sdk.es125.js.map +1 -1
  95. package/dist/es/standards-sdk.es126.js +140 -582
  96. package/dist/es/standards-sdk.es126.js.map +1 -1
  97. package/dist/es/standards-sdk.es127.js +202 -12
  98. package/dist/es/standards-sdk.es127.js.map +1 -1
  99. package/dist/es/standards-sdk.es128.js +790 -2
  100. package/dist/es/standards-sdk.es128.js.map +1 -1
  101. package/dist/es/standards-sdk.es129.js +10 -84
  102. package/dist/es/standards-sdk.es129.js.map +1 -1
  103. package/dist/es/standards-sdk.es13.js +1 -1
  104. package/dist/es/standards-sdk.es130.js +567 -40
  105. package/dist/es/standards-sdk.es130.js.map +1 -1
  106. package/dist/es/standards-sdk.es131.js +626 -2
  107. package/dist/es/standards-sdk.es131.js.map +1 -1
  108. package/dist/es/standards-sdk.es132.js +12 -234
  109. package/dist/es/standards-sdk.es132.js.map +1 -1
  110. package/dist/es/standards-sdk.es133.js +2 -1140
  111. package/dist/es/standards-sdk.es133.js.map +1 -1
  112. package/dist/es/standards-sdk.es134.js +73 -292
  113. package/dist/es/standards-sdk.es134.js.map +1 -1
  114. package/dist/es/standards-sdk.es135.js +36 -418
  115. package/dist/es/standards-sdk.es135.js.map +1 -1
  116. package/dist/es/standards-sdk.es136.js +2 -355
  117. package/dist/es/standards-sdk.es136.js.map +1 -1
  118. package/dist/es/standards-sdk.es137.js +198 -1079
  119. package/dist/es/standards-sdk.es137.js.map +1 -1
  120. package/dist/es/standards-sdk.es138.js +1107 -175
  121. package/dist/es/standards-sdk.es138.js.map +1 -1
  122. package/dist/es/standards-sdk.es139.js +218 -1479
  123. package/dist/es/standards-sdk.es139.js.map +1 -1
  124. package/dist/es/standards-sdk.es14.js +1 -1
  125. package/dist/es/standards-sdk.es140.js +422 -1500
  126. package/dist/es/standards-sdk.es140.js.map +1 -1
  127. package/dist/es/standards-sdk.es141.js +351 -13
  128. package/dist/es/standards-sdk.es141.js.map +1 -1
  129. package/dist/es/standards-sdk.es142.js +1102 -73
  130. package/dist/es/standards-sdk.es142.js.map +1 -1
  131. package/dist/es/standards-sdk.es143.js +203 -76
  132. package/dist/es/standards-sdk.es143.js.map +1 -1
  133. package/dist/es/standards-sdk.es144.js +1459 -830
  134. package/dist/es/standards-sdk.es144.js.map +1 -1
  135. package/dist/es/standards-sdk.es145.js +1499 -59
  136. package/dist/es/standards-sdk.es145.js.map +1 -1
  137. package/dist/es/standards-sdk.es146.js +14 -156
  138. package/dist/es/standards-sdk.es146.js.map +1 -1
  139. package/dist/es/standards-sdk.es147.js +87 -7
  140. package/dist/es/standards-sdk.es147.js.map +1 -1
  141. package/dist/es/standards-sdk.es148.js +74 -79
  142. package/dist/es/standards-sdk.es148.js.map +1 -1
  143. package/dist/es/standards-sdk.es149.js +934 -61
  144. package/dist/es/standards-sdk.es149.js.map +1 -1
  145. package/dist/es/standards-sdk.es15.js +1 -1
  146. package/dist/es/standards-sdk.es150.js +60 -30
  147. package/dist/es/standards-sdk.es150.js.map +1 -1
  148. package/dist/es/standards-sdk.es151.js +159 -34
  149. package/dist/es/standards-sdk.es151.js.map +1 -1
  150. package/dist/es/standards-sdk.es152.js +7 -48
  151. package/dist/es/standards-sdk.es152.js.map +1 -1
  152. package/dist/es/standards-sdk.es153.js +70 -122
  153. package/dist/es/standards-sdk.es153.js.map +1 -1
  154. package/dist/es/standards-sdk.es154.js +58 -35
  155. package/dist/es/standards-sdk.es154.js.map +1 -1
  156. package/dist/es/standards-sdk.es155.js +30 -56
  157. package/dist/es/standards-sdk.es155.js.map +1 -1
  158. package/dist/es/standards-sdk.es156.js +34 -84
  159. package/dist/es/standards-sdk.es156.js.map +1 -1
  160. package/dist/es/standards-sdk.es157.js +48 -81
  161. package/dist/es/standards-sdk.es157.js.map +1 -1
  162. package/dist/es/standards-sdk.es158.js +124 -186
  163. package/dist/es/standards-sdk.es158.js.map +1 -1
  164. package/dist/es/standards-sdk.es159.js +34 -12474
  165. package/dist/es/standards-sdk.es159.js.map +1 -1
  166. package/dist/es/standards-sdk.es16.js +5 -5
  167. package/dist/es/standards-sdk.es160.js +12477 -12
  168. package/dist/es/standards-sdk.es160.js.map +1 -1
  169. package/dist/es/standards-sdk.es161.js +51 -68
  170. package/dist/es/standards-sdk.es161.js.map +1 -1
  171. package/dist/es/standards-sdk.es162.js +67 -533
  172. package/dist/es/standards-sdk.es162.js.map +1 -1
  173. package/dist/es/standards-sdk.es163.js +70 -161
  174. package/dist/es/standards-sdk.es163.js.map +1 -1
  175. package/dist/es/standards-sdk.es164.js +187 -309
  176. package/dist/es/standards-sdk.es164.js.map +1 -1
  177. package/dist/es/standards-sdk.es165.js +13 -342
  178. package/dist/es/standards-sdk.es165.js.map +1 -1
  179. package/dist/es/standards-sdk.es166.js +538 -441
  180. package/dist/es/standards-sdk.es166.js.map +1 -1
  181. package/dist/es/standards-sdk.es167.js +142 -301
  182. package/dist/es/standards-sdk.es167.js.map +1 -1
  183. package/dist/es/standards-sdk.es168.js +310 -64
  184. package/dist/es/standards-sdk.es168.js.map +1 -1
  185. package/dist/es/standards-sdk.es169.js +332 -158
  186. package/dist/es/standards-sdk.es169.js.map +1 -1
  187. package/dist/es/standards-sdk.es170.js +441 -210
  188. package/dist/es/standards-sdk.es170.js.map +1 -1
  189. package/dist/es/standards-sdk.es171.js +314 -222
  190. package/dist/es/standards-sdk.es171.js.map +1 -1
  191. package/dist/es/standards-sdk.es172.js +65 -108
  192. package/dist/es/standards-sdk.es172.js.map +1 -1
  193. package/dist/es/standards-sdk.es173.js +61 -114
  194. package/dist/es/standards-sdk.es173.js.map +1 -1
  195. package/dist/es/standards-sdk.es174.js +151 -140
  196. package/dist/es/standards-sdk.es174.js.map +1 -1
  197. package/dist/es/standards-sdk.es175.js +193 -156
  198. package/dist/es/standards-sdk.es175.js.map +1 -1
  199. package/dist/es/standards-sdk.es176.js +221 -121
  200. package/dist/es/standards-sdk.es176.js.map +1 -1
  201. package/dist/es/standards-sdk.es177.js +81 -293
  202. package/dist/es/standards-sdk.es177.js.map +1 -1
  203. package/dist/es/standards-sdk.es178.js +114 -247
  204. package/dist/es/standards-sdk.es178.js.map +1 -1
  205. package/dist/es/standards-sdk.es179.js +119 -110
  206. package/dist/es/standards-sdk.es179.js.map +1 -1
  207. package/dist/es/standards-sdk.es18.js +12 -12
  208. package/dist/es/standards-sdk.es180.js +188 -0
  209. package/dist/es/standards-sdk.es180.js.map +1 -0
  210. package/dist/es/standards-sdk.es181.js +142 -0
  211. package/dist/es/standards-sdk.es181.js.map +1 -0
  212. package/dist/es/standards-sdk.es182.js +334 -0
  213. package/dist/es/standards-sdk.es182.js.map +1 -0
  214. package/dist/es/standards-sdk.es183.js +262 -0
  215. package/dist/es/standards-sdk.es183.js.map +1 -0
  216. package/dist/es/standards-sdk.es184.js +155 -0
  217. package/dist/es/standards-sdk.es184.js.map +1 -0
  218. package/dist/es/standards-sdk.es19.js +9 -9
  219. package/dist/es/standards-sdk.es2.js +2 -2
  220. package/dist/es/standards-sdk.es20.js +1 -1
  221. package/dist/es/standards-sdk.es21.js +1 -1
  222. package/dist/es/standards-sdk.es22.js +1 -1
  223. package/dist/es/standards-sdk.es23.js +1 -1
  224. package/dist/es/standards-sdk.es24.js +1 -1
  225. package/dist/es/standards-sdk.es25.js +1 -1
  226. package/dist/es/standards-sdk.es26.js +1 -1
  227. package/dist/es/standards-sdk.es27.js +12 -12
  228. package/dist/es/standards-sdk.es27.js.map +1 -1
  229. package/dist/es/standards-sdk.es30.js +2 -2
  230. package/dist/es/standards-sdk.es31.js +4 -4
  231. package/dist/es/standards-sdk.es32.js +1 -1
  232. package/dist/es/standards-sdk.es35.js +6 -6
  233. package/dist/es/standards-sdk.es36.js +4 -4
  234. package/dist/es/standards-sdk.es37.js +2 -2
  235. package/dist/es/standards-sdk.es38.js +2 -2
  236. package/dist/es/standards-sdk.es39.js +1 -1
  237. package/dist/es/standards-sdk.es4.js +2 -2
  238. package/dist/es/standards-sdk.es40.js +1 -1
  239. package/dist/es/standards-sdk.es41.js +2 -2
  240. package/dist/es/standards-sdk.es46.js +1 -1
  241. package/dist/es/standards-sdk.es5.js +2 -2
  242. package/dist/es/standards-sdk.es51.js +1 -1
  243. package/dist/es/standards-sdk.es53.js +1 -1
  244. package/dist/es/standards-sdk.es56.js +2 -2
  245. package/dist/es/standards-sdk.es59.js +1 -1
  246. package/dist/es/standards-sdk.es6.js +2 -2
  247. package/dist/es/standards-sdk.es60.js +1 -1
  248. package/dist/es/standards-sdk.es62.js +1 -1
  249. package/dist/es/standards-sdk.es63.js +2 -2
  250. package/dist/es/standards-sdk.es64.js +1 -1
  251. package/dist/es/standards-sdk.es65.js +1 -1
  252. package/dist/es/standards-sdk.es66.js +1 -1
  253. package/dist/es/standards-sdk.es67.js +7 -7
  254. package/dist/es/standards-sdk.es69.js +1 -1
  255. package/dist/es/standards-sdk.es7.js +1 -1
  256. package/dist/es/standards-sdk.es71.js +2 -2
  257. package/dist/es/standards-sdk.es72.js +3 -3
  258. package/dist/es/standards-sdk.es75.js +5 -5
  259. package/dist/es/standards-sdk.es76.js +3 -3
  260. package/dist/es/standards-sdk.es77.js +2 -2
  261. package/dist/es/standards-sdk.es78.js +1 -1
  262. package/dist/es/standards-sdk.es81.js +2 -2
  263. package/dist/es/standards-sdk.es83.js +2 -2
  264. package/dist/es/standards-sdk.es84.js +4 -4
  265. package/dist/es/standards-sdk.es85.js +1 -1
  266. package/dist/es/standards-sdk.es88.js +1 -1
  267. package/dist/es/standards-sdk.es89.js +2 -2
  268. package/dist/es/standards-sdk.es9.js +2 -2
  269. package/dist/es/standards-sdk.es90.js +4 -4
  270. package/dist/es/standards-sdk.es90.js.map +1 -1
  271. package/dist/es/standards-sdk.es94.js +3 -3
  272. package/dist/es/standards-sdk.es96.js +2 -2
  273. package/dist/es/standards-sdk.es98.js +1 -1
  274. package/dist/es/standards-sdk.es99.js +3 -3
  275. package/dist/es/utils/key-type-detector.d.ts.map +1 -1
  276. package/package.json +1 -1
@@ -1,37 +1,323 @@
1
- import { getSkillVerificationStatus } from "./standards-sdk.es162.js";
2
- import { HCS26BaseClient } from "./standards-sdk.es115.js";
3
- function mapVerification(status) {
4
- const pendingRequest = status.pendingRequest ?? void 0;
5
- return {
6
- name: status.name,
7
- verified: status.verified,
8
- previouslyVerified: status.previouslyVerified,
9
- ...pendingRequest ? { pendingRequest } : {}
10
- };
11
- }
12
- function createRegistryBrokerVerificationProvider(client) {
13
- return {
14
- async getSkillVerificationStatus(params) {
15
- const status = await getSkillVerificationStatus(client, {
16
- name: params.name
1
+ import { AccountId, Client, TopicCreateTransaction, TopicId, TopicMessageSubmitTransaction, PublicKey, KeyList, PrivateKey } from "@hashgraph/sdk";
2
+ import { randomUUID, createHash } from "crypto";
3
+ import { InscriptionSDK } from "./standards-sdk.es160.js";
4
+ import { createNodeOperatorContext } from "./standards-sdk.es158.js";
5
+ import { inscribe } from "./standards-sdk.es142.js";
6
+ import { getTopicId } from "./standards-sdk.es132.js";
7
+ import { HCS27BaseClient } from "./standards-sdk.es115.js";
8
+ import { toHCS27CheckpointMetadata, hcs27CheckpointMetadataSchema, hcs27CheckpointMessageSchema } from "./standards-sdk.es112.js";
9
+ const MAX_PAYLOAD_BYTES = 1024;
10
+ class HCS27Client extends HCS27BaseClient {
11
+ constructor(config) {
12
+ super(config);
13
+ this.topicSubmitKeySigners = /* @__PURE__ */ new Map();
14
+ this.operatorId = typeof config.operatorId === "string" ? AccountId.fromString(config.operatorId) : config.operatorId;
15
+ let resolvedClient = config.client;
16
+ if (!resolvedClient) {
17
+ if (config.network === "mainnet") {
18
+ resolvedClient = Client.forMainnet();
19
+ } else {
20
+ resolvedClient = Client.forTestnet();
21
+ }
22
+ }
23
+ this.operatorCtx = createNodeOperatorContext({
24
+ network: this.network,
25
+ operatorId: this.operatorId,
26
+ operatorKey: config.operatorKey,
27
+ keyType: config.keyType,
28
+ mirrorNode: this.mirrorNode,
29
+ logger: this.logger,
30
+ client: resolvedClient
31
+ });
32
+ this.client = this.operatorCtx.client;
33
+ }
34
+ getKeyType() {
35
+ return this.operatorCtx.keyType;
36
+ }
37
+ async createCheckpointTopic(options = {}) {
38
+ await this.operatorCtx.ensureInitialized();
39
+ const transaction = new TopicCreateTransaction().setTopicMemo(
40
+ this.buildTopicMemo(options.ttl)
41
+ );
42
+ const adminKeyMaterial = this.resolveTopicKeyMaterial(options.adminKey);
43
+ this.assertSignableTopicKey(options.adminKey, adminKeyMaterial, "adminKey");
44
+ if (adminKeyMaterial.publicKey) {
45
+ transaction.setAdminKey(adminKeyMaterial.publicKey);
46
+ }
47
+ const submitKeyMaterial = this.resolveTopicKeyMaterial(options.submitKey);
48
+ this.assertSignableTopicKey(
49
+ options.submitKey,
50
+ submitKeyMaterial,
51
+ "submitKey"
52
+ );
53
+ if (submitKeyMaterial.publicKey) {
54
+ transaction.setSubmitKey(submitKeyMaterial.publicKey);
55
+ }
56
+ if (options.transactionMemo?.trim()) {
57
+ transaction.setTransactionMemo(options.transactionMemo.trim());
58
+ }
59
+ let response;
60
+ if (adminKeyMaterial.signer || submitKeyMaterial.signer) {
61
+ const frozenTransaction = await transaction.freezeWith(this.client);
62
+ let signedTransaction = frozenTransaction;
63
+ if (adminKeyMaterial.signer) {
64
+ signedTransaction = await signedTransaction.sign(
65
+ adminKeyMaterial.signer
66
+ );
67
+ }
68
+ if (submitKeyMaterial.signer) {
69
+ signedTransaction = await signedTransaction.sign(
70
+ submitKeyMaterial.signer
71
+ );
72
+ }
73
+ response = await signedTransaction.execute(this.client);
74
+ } else {
75
+ response = await transaction.execute(this.client);
76
+ }
77
+ const receipt = await response.getReceipt(this.client);
78
+ if (!receipt.topicId) {
79
+ throw new Error("Failed to create checkpoint topic: topicId empty");
80
+ }
81
+ if (submitKeyMaterial.signer) {
82
+ this.topicSubmitKeySigners.set(
83
+ receipt.topicId.toString(),
84
+ submitKeyMaterial.signer
85
+ );
86
+ }
87
+ return {
88
+ topicId: receipt.topicId.toString(),
89
+ transactionId: response.transactionId.toString()
90
+ };
91
+ }
92
+ async publishCheckpoint(topicId, metadata, messageMemo, transactionMemo) {
93
+ await this.operatorCtx.ensureInitialized();
94
+ const normalizedTopicId = TopicId.fromString(topicId).toString();
95
+ const parsedMetadata = toHCS27CheckpointMetadata(
96
+ hcs27CheckpointMetadataSchema.parse(metadata)
97
+ );
98
+ const { message, inlineResolvedMetadata } = await this.prepareCheckpointPayload(parsedMetadata, messageMemo);
99
+ if (typeof message.metadata === "string" && inlineResolvedMetadata) {
100
+ await this.validateCheckpointMessage(message, async (reference) => {
101
+ if (reference === message.metadata) {
102
+ return inlineResolvedMetadata;
103
+ }
104
+ return this.resolveHCS1Reference(reference);
17
105
  });
18
- return mapVerification(status);
106
+ } else {
107
+ await this.validateCheckpointMessage(message);
19
108
  }
20
- };
21
- }
22
- class HCS26Client extends HCS26BaseClient {
23
- constructor(config) {
24
- const provider = config.verificationProvider ?? (config.registryBrokerClient ? createRegistryBrokerVerificationProvider(config.registryBrokerClient) : void 0);
25
- super({
26
- network: config.network,
27
- logger: config.logger,
28
- mirrorNode: config.mirrorNode,
29
- verificationProvider: provider
109
+ const transaction = new TopicMessageSubmitTransaction().setTopicId(TopicId.fromString(normalizedTopicId)).setMessage(JSON.stringify(message)).setTransactionMemo(
110
+ transactionMemo?.trim() || this.buildTransactionMemo()
111
+ );
112
+ const submitKeySigner = this.topicSubmitKeySigners.get(normalizedTopicId);
113
+ const response = submitKeySigner ? await (await transaction.freezeWith(this.client)).sign(submitKeySigner).then((signedTransaction) => signedTransaction.execute(this.client)) : await transaction.execute(this.client);
114
+ const receipt = await response.getReceipt(this.client);
115
+ return {
116
+ transactionId: response.transactionId.toString(),
117
+ sequenceNumber: this.parseSequenceNumber(receipt.topicSequenceNumber),
118
+ receipt
119
+ };
120
+ }
121
+ registerTopicSubmitKey(topicId, submitKey) {
122
+ const submitKeyMaterial = this.resolveTopicKeyMaterial(submitKey);
123
+ if (!submitKeyMaterial.signer) {
124
+ throw new Error(
125
+ "submitKey must include a private key so the client can sign private-topic submissions"
126
+ );
127
+ }
128
+ this.topicSubmitKeySigners.set(
129
+ TopicId.fromString(topicId).toString(),
130
+ submitKeyMaterial.signer
131
+ );
132
+ }
133
+ resolveTopicKeyMaterial(input) {
134
+ if (input === void 0 || input === false) {
135
+ return {};
136
+ }
137
+ if (input instanceof PublicKey || input instanceof KeyList) {
138
+ return { publicKey: input };
139
+ }
140
+ if (input instanceof PrivateKey) {
141
+ return { publicKey: input.publicKey, signer: input };
142
+ }
143
+ if (typeof input === "boolean") {
144
+ return input ? { publicKey: this.operatorCtx.operatorKey.publicKey } : {};
145
+ }
146
+ if (typeof input === "string") {
147
+ if (input.trim().length === 0) {
148
+ throw new Error("topic key string cannot be empty");
149
+ }
150
+ try {
151
+ return { publicKey: PublicKey.fromString(input) };
152
+ } catch (publicKeyError) {
153
+ try {
154
+ const signer = PrivateKey.fromString(input);
155
+ return { publicKey: signer.publicKey, signer };
156
+ } catch (privateKeyError) {
157
+ throw new Error(
158
+ `Failed to parse topic key as PublicKey or PrivateKey: ${String(
159
+ publicKeyError
160
+ )}; ${String(privateKeyError)}`
161
+ );
162
+ }
163
+ }
164
+ }
165
+ return {};
166
+ }
167
+ assertSignableTopicKey(input, material, fieldName) {
168
+ if (!input || typeof input === "boolean" || material.signer) {
169
+ return;
170
+ }
171
+ if (material.publicKey && !this.operatorCanSignTopicKey(material.publicKey)) {
172
+ throw new Error(
173
+ `${fieldName} must include a private key or use true to reuse the operator key`
174
+ );
175
+ }
176
+ }
177
+ operatorCanSignTopicKey(publicKey) {
178
+ if (publicKey instanceof PublicKey) {
179
+ return this.operatorCtx.operatorKey.publicKey.equals(publicKey);
180
+ }
181
+ return this.operatorCanSignKeyList(publicKey);
182
+ }
183
+ operatorCanSignKeyList(keyList) {
184
+ const keys = keyList.toArray();
185
+ const threshold = keyList.threshold ?? keys.length;
186
+ if (threshold > 1 || keys.length === 0) {
187
+ return false;
188
+ }
189
+ return keys.some((key) => {
190
+ if (key instanceof PublicKey) {
191
+ return this.operatorCtx.operatorKey.publicKey.equals(key);
192
+ }
193
+ if (key instanceof KeyList) {
194
+ return this.operatorCanSignKeyList(key);
195
+ }
196
+ return false;
197
+ });
198
+ }
199
+ parseSequenceNumber(value) {
200
+ const parsed = BigInt(value.toString());
201
+ if (parsed > BigInt(Number.MAX_SAFE_INTEGER)) {
202
+ throw new Error(
203
+ "topicSequenceNumber exceeds Number.MAX_SAFE_INTEGER and cannot be represented safely"
204
+ );
205
+ }
206
+ return Number(parsed);
207
+ }
208
+ async prepareCheckpointPayload(metadata, messageMemo) {
209
+ const normalizedMemo = messageMemo?.trim();
210
+ if (normalizedMemo && normalizedMemo.length > 299) {
211
+ throw new Error(
212
+ "messageMemo must be 299 characters or fewer for HCS-27 checkpoints"
213
+ );
214
+ }
215
+ const inlineMessage = {
216
+ p: "hcs-27",
217
+ op: "register",
218
+ metadata,
219
+ ...normalizedMemo ? { m: normalizedMemo } : {}
220
+ };
221
+ const inlinePayload = JSON.stringify(inlineMessage);
222
+ if (Buffer.byteLength(inlinePayload, "utf8") <= MAX_PAYLOAD_BYTES) {
223
+ return { message: inlineMessage };
224
+ }
225
+ const metadataBytes = Buffer.from(JSON.stringify(metadata), "utf8");
226
+ const digest = this.sha256Base64Url(metadataBytes);
227
+ hcs27CheckpointMessageSchema.parse({
228
+ p: "hcs-27",
229
+ op: "register",
230
+ metadata: "hcs://1/18446744073709551615.18446744073709551615.18446744073709551615",
231
+ metadata_digest: {
232
+ alg: "sha-256",
233
+ b64u: digest
234
+ },
235
+ ...normalizedMemo ? { m: normalizedMemo } : {}
236
+ });
237
+ const maxReferencePayload = JSON.stringify({
238
+ p: "hcs-27",
239
+ op: "register",
240
+ metadata: "hcs://1/18446744073709551615.18446744073709551615.18446744073709551615",
241
+ metadata_digest: {
242
+ alg: "sha-256",
243
+ b64u: digest
244
+ },
245
+ ...normalizedMemo ? { m: normalizedMemo } : {}
30
246
  });
247
+ if (Buffer.byteLength(maxReferencePayload, "utf8") > MAX_PAYLOAD_BYTES) {
248
+ throw new Error(
249
+ `checkpoint overflow pointer message exceeds ${MAX_PAYLOAD_BYTES} bytes`
250
+ );
251
+ }
252
+ const reference = await this.publishMetadataHCS1(metadataBytes);
253
+ const overflowMessage = {
254
+ p: "hcs-27",
255
+ op: "register",
256
+ metadata: reference,
257
+ metadata_digest: {
258
+ alg: "sha-256",
259
+ b64u: digest
260
+ },
261
+ ...normalizedMemo ? { m: normalizedMemo } : {}
262
+ };
263
+ const overflowPayload = JSON.stringify(overflowMessage);
264
+ if (Buffer.byteLength(overflowPayload, "utf8") > MAX_PAYLOAD_BYTES) {
265
+ throw new Error(
266
+ `checkpoint overflow pointer message still exceeds ${MAX_PAYLOAD_BYTES} bytes`
267
+ );
268
+ }
269
+ return {
270
+ message: overflowMessage,
271
+ inlineResolvedMetadata: metadataBytes
272
+ };
273
+ }
274
+ async publishMetadataHCS1(metadataBytes) {
275
+ if (this.network !== "testnet" && this.network !== "mainnet") {
276
+ throw new Error(
277
+ `HCS-1 metadata publication is only supported on testnet and mainnet, got ${this.network}`
278
+ );
279
+ }
280
+ const authOptions = {
281
+ accountId: this.operatorId.toString(),
282
+ privateKey: this.operatorCtx.operatorKey,
283
+ network: this.network
284
+ };
285
+ if (!this.inscriptionSDK) {
286
+ this.inscriptionSDK = await InscriptionSDK.createWithAuth({
287
+ type: "server",
288
+ ...authOptions
289
+ });
290
+ }
291
+ const response = await inscribe(
292
+ {
293
+ type: "buffer",
294
+ buffer: metadataBytes,
295
+ fileName: `hcs27-checkpoint-${randomUUID()}.json`,
296
+ mimeType: "application/json"
297
+ },
298
+ authOptions,
299
+ {
300
+ mode: "file",
301
+ fileStandard: "hcs-1",
302
+ waitForConfirmation: true,
303
+ waitMaxAttempts: 120,
304
+ waitIntervalMs: 2e3
305
+ },
306
+ this.inscriptionSDK
307
+ );
308
+ const topicId = getTopicId(response.inscription);
309
+ if (!topicId) {
310
+ throw new Error(
311
+ "Failed to inscribe overflow HCS-27 metadata: no topic ID returned"
312
+ );
313
+ }
314
+ return `hcs://1/${topicId}`;
315
+ }
316
+ sha256Base64Url(payload) {
317
+ return createHash("sha256").update(payload).digest("base64url");
31
318
  }
32
319
  }
33
320
  export {
34
- HCS26Client,
35
- createRegistryBrokerVerificationProvider
321
+ HCS27Client
36
322
  };
37
323
  //# sourceMappingURL=standards-sdk.es116.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es116.js","sources":["../../src/hcs-26/sdk.ts"],"sourcesContent":["import type { RegistryBrokerClient } from '../services/registry-broker/client/base-client';\nimport { getSkillVerificationStatus } from '../services/registry-broker/client/skills';\nimport type { SkillVerificationStatusResponse } from '../services/registry-broker/types';\nimport {\n HCS26BaseClient,\n type HCS26ClientConfig,\n type HCS26SkillVerificationProvider,\n type HCS26SkillVerificationStatus,\n} from './base-client';\n\nexport interface SDKHCS26ClientConfig extends HCS26ClientConfig {\n registryBrokerClient?: RegistryBrokerClient;\n}\n\nfunction mapVerification(\n status: SkillVerificationStatusResponse,\n): HCS26SkillVerificationStatus {\n const pendingRequest = status.pendingRequest ?? undefined;\n return {\n name: status.name,\n verified: status.verified,\n previouslyVerified: status.previouslyVerified,\n ...(pendingRequest ? { pendingRequest } : {}),\n };\n}\n\nexport function createRegistryBrokerVerificationProvider(\n client: RegistryBrokerClient,\n): HCS26SkillVerificationProvider {\n return {\n async getSkillVerificationStatus(params: { name: string }) {\n const status = await getSkillVerificationStatus(client, {\n name: params.name,\n });\n return mapVerification(status);\n },\n };\n}\n\nexport class HCS26Client extends HCS26BaseClient {\n constructor(config: SDKHCS26ClientConfig) {\n const provider =\n config.verificationProvider ??\n (config.registryBrokerClient\n ? createRegistryBrokerVerificationProvider(config.registryBrokerClient)\n : undefined);\n\n super({\n network: config.network,\n logger: config.logger,\n mirrorNode: config.mirrorNode,\n verificationProvider: provider,\n });\n }\n}\n"],"names":[],"mappings":";;AAcA,SAAS,gBACP,QAC8B;AAC9B,QAAM,iBAAiB,OAAO,kBAAkB;AAChD,SAAO;AAAA,IACL,MAAM,OAAO;AAAA,IACb,UAAU,OAAO;AAAA,IACjB,oBAAoB,OAAO;AAAA,IAC3B,GAAI,iBAAiB,EAAE,mBAAmB,CAAA;AAAA,EAAC;AAE/C;AAEO,SAAS,yCACd,QACgC;AAChC,SAAO;AAAA,IACL,MAAM,2BAA2B,QAA0B;AACzD,YAAM,SAAS,MAAM,2BAA2B,QAAQ;AAAA,QACtD,MAAM,OAAO;AAAA,MAAA,CACd;AACD,aAAO,gBAAgB,MAAM;AAAA,IAC/B;AAAA,EAAA;AAEJ;AAEO,MAAM,oBAAoB,gBAAgB;AAAA,EAC/C,YAAY,QAA8B;AACxC,UAAM,WACJ,OAAO,yBACN,OAAO,uBACJ,yCAAyC,OAAO,oBAAoB,IACpE;AAEN,UAAM;AAAA,MACJ,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf,YAAY,OAAO;AAAA,MACnB,sBAAsB;AAAA,IAAA,CACvB;AAAA,EACH;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es116.js","sources":["../../src/hcs-27/sdk.ts"],"sourcesContent":["import {\n AccountId,\n Client,\n KeyList,\n PrivateKey,\n PublicKey,\n TopicCreateTransaction,\n TopicId,\n TopicMessageSubmitTransaction,\n} from '@hashgraph/sdk';\nimport { createHash, randomUUID } from 'crypto';\nimport { InscriptionSDK } from '@kiloscribe/inscription-sdk';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport { inscribe } from '../inscribe/inscriber';\nimport { getTopicId } from '../utils/topic-id-utils';\nimport { HCS27BaseClient } from './base-client';\nimport {\n hcs27CheckpointMetadataSchema,\n hcs27CheckpointMessageSchema,\n type HCS27CheckpointMessage,\n type HCS27CheckpointMetadata,\n type HCS27CreateCheckpointTopicOptions,\n type HCS27CreateCheckpointTopicResult,\n type HCS27PublishCheckpointResult,\n type HCS27TopicKey,\n type SDKHCS27ClientConfig,\n toHCS27CheckpointMetadata,\n} from './types';\n\nconst MAX_PAYLOAD_BYTES = 1024;\n\nexport class HCS27Client extends HCS27BaseClient {\n private readonly client: Client;\n private readonly operatorId: AccountId;\n private readonly operatorCtx: NodeOperatorContext;\n private inscriptionSDK?: InscriptionSDK;\n private readonly topicSubmitKeySigners = new Map<string, PrivateKey>();\n\n constructor(config: SDKHCS27ClientConfig) {\n super(config);\n this.operatorId =\n typeof config.operatorId === 'string'\n ? AccountId.fromString(config.operatorId)\n : config.operatorId;\n\n let resolvedClient = config.client;\n if (!resolvedClient) {\n if (config.network === 'mainnet') {\n resolvedClient = Client.forMainnet();\n } else {\n resolvedClient = Client.forTestnet();\n }\n }\n\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: resolvedClient,\n });\n this.client = this.operatorCtx.client;\n }\n\n getKeyType(): 'ed25519' | 'ecdsa' {\n return this.operatorCtx.keyType;\n }\n\n async createCheckpointTopic(\n options: HCS27CreateCheckpointTopicOptions = {},\n ): Promise<HCS27CreateCheckpointTopicResult> {\n await this.operatorCtx.ensureInitialized();\n\n const transaction = new TopicCreateTransaction().setTopicMemo(\n this.buildTopicMemo(options.ttl),\n );\n\n const adminKeyMaterial = this.resolveTopicKeyMaterial(options.adminKey);\n this.assertSignableTopicKey(options.adminKey, adminKeyMaterial, 'adminKey');\n if (adminKeyMaterial.publicKey) {\n transaction.setAdminKey(adminKeyMaterial.publicKey);\n }\n\n const submitKeyMaterial = this.resolveTopicKeyMaterial(options.submitKey);\n this.assertSignableTopicKey(\n options.submitKey,\n submitKeyMaterial,\n 'submitKey',\n );\n if (submitKeyMaterial.publicKey) {\n transaction.setSubmitKey(submitKeyMaterial.publicKey);\n }\n\n if (options.transactionMemo?.trim()) {\n transaction.setTransactionMemo(options.transactionMemo.trim());\n }\n\n let response;\n if (adminKeyMaterial.signer || submitKeyMaterial.signer) {\n const frozenTransaction = await transaction.freezeWith(this.client);\n let signedTransaction = frozenTransaction;\n if (adminKeyMaterial.signer) {\n signedTransaction = await signedTransaction.sign(\n adminKeyMaterial.signer,\n );\n }\n if (submitKeyMaterial.signer) {\n signedTransaction = await signedTransaction.sign(\n submitKeyMaterial.signer,\n );\n }\n response = await signedTransaction.execute(this.client);\n } else {\n response = await transaction.execute(this.client);\n }\n const receipt = await response.getReceipt(this.client);\n if (!receipt.topicId) {\n throw new Error('Failed to create checkpoint topic: topicId empty');\n }\n if (submitKeyMaterial.signer) {\n this.topicSubmitKeySigners.set(\n receipt.topicId.toString(),\n submitKeyMaterial.signer,\n );\n }\n\n return {\n topicId: receipt.topicId.toString(),\n transactionId: response.transactionId.toString(),\n };\n }\n\n async publishCheckpoint(\n topicId: string,\n metadata: HCS27CheckpointMetadata,\n messageMemo?: string,\n transactionMemo?: string,\n ): Promise<HCS27PublishCheckpointResult> {\n await this.operatorCtx.ensureInitialized();\n const normalizedTopicId = TopicId.fromString(topicId).toString();\n const parsedMetadata = toHCS27CheckpointMetadata(\n hcs27CheckpointMetadataSchema.parse(metadata),\n );\n const { message, inlineResolvedMetadata } =\n await this.prepareCheckpointPayload(parsedMetadata, messageMemo);\n\n if (typeof message.metadata === 'string' && inlineResolvedMetadata) {\n await this.validateCheckpointMessage(message, async reference => {\n if (reference === message.metadata) {\n return inlineResolvedMetadata;\n }\n return this.resolveHCS1Reference(reference);\n });\n } else {\n await this.validateCheckpointMessage(message);\n }\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(normalizedTopicId))\n .setMessage(JSON.stringify(message))\n .setTransactionMemo(\n transactionMemo?.trim() || this.buildTransactionMemo(),\n );\n const submitKeySigner = this.topicSubmitKeySigners.get(normalizedTopicId);\n const response = submitKeySigner\n ? await (await transaction.freezeWith(this.client))\n .sign(submitKeySigner)\n .then(signedTransaction => signedTransaction.execute(this.client))\n : await transaction.execute(this.client);\n\n const receipt = await response.getReceipt(this.client);\n\n return {\n transactionId: response.transactionId.toString(),\n sequenceNumber: this.parseSequenceNumber(receipt.topicSequenceNumber),\n receipt,\n };\n }\n\n registerTopicSubmitKey(topicId: string, submitKey: HCS27TopicKey): void {\n const submitKeyMaterial = this.resolveTopicKeyMaterial(submitKey);\n if (!submitKeyMaterial.signer) {\n throw new Error(\n 'submitKey must include a private key so the client can sign private-topic submissions',\n );\n }\n this.topicSubmitKeySigners.set(\n TopicId.fromString(topicId).toString(),\n submitKeyMaterial.signer,\n );\n }\n\n private resolveTopicKeyMaterial(input?: HCS27TopicKey): {\n publicKey?: PublicKey | KeyList;\n signer?: PrivateKey;\n } {\n if (input === undefined || input === false) {\n return {};\n }\n if (input instanceof PublicKey || input instanceof KeyList) {\n return { publicKey: input };\n }\n if (input instanceof PrivateKey) {\n return { publicKey: input.publicKey, signer: input };\n }\n if (typeof input === 'boolean') {\n return input ? { publicKey: this.operatorCtx.operatorKey.publicKey } : {};\n }\n if (typeof input === 'string') {\n if (input.trim().length === 0) {\n throw new Error('topic key string cannot be empty');\n }\n try {\n return { publicKey: PublicKey.fromString(input) };\n } catch (publicKeyError) {\n try {\n const signer = PrivateKey.fromString(input);\n return { publicKey: signer.publicKey, signer };\n } catch (privateKeyError) {\n throw new Error(\n `Failed to parse topic key as PublicKey or PrivateKey: ${String(\n publicKeyError,\n )}; ${String(privateKeyError)}`,\n );\n }\n }\n }\n return {};\n }\n\n private assertSignableTopicKey(\n input: HCS27TopicKey | undefined,\n material: { publicKey?: PublicKey | KeyList; signer?: PrivateKey },\n fieldName: 'adminKey' | 'submitKey',\n ): void {\n if (!input || typeof input === 'boolean' || material.signer) {\n return;\n }\n if (\n material.publicKey &&\n !this.operatorCanSignTopicKey(material.publicKey)\n ) {\n throw new Error(\n `${fieldName} must include a private key or use true to reuse the operator key`,\n );\n }\n }\n\n private operatorCanSignTopicKey(publicKey: PublicKey | KeyList): boolean {\n if (publicKey instanceof PublicKey) {\n return this.operatorCtx.operatorKey.publicKey.equals(publicKey);\n }\n return this.operatorCanSignKeyList(publicKey);\n }\n\n private operatorCanSignKeyList(keyList: KeyList): boolean {\n const keys = keyList.toArray();\n const threshold = keyList.threshold ?? keys.length;\n if (threshold > 1 || keys.length === 0) {\n return false;\n }\n\n return keys.some(key => {\n if (key instanceof PublicKey) {\n return this.operatorCtx.operatorKey.publicKey.equals(key);\n }\n if (key instanceof KeyList) {\n return this.operatorCanSignKeyList(key);\n }\n return false;\n });\n }\n\n private parseSequenceNumber(\n value: { toString(): string } | number | bigint | string,\n ): number {\n const parsed = BigInt(value.toString());\n if (parsed > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error(\n 'topicSequenceNumber exceeds Number.MAX_SAFE_INTEGER and cannot be represented safely',\n );\n }\n return Number(parsed);\n }\n\n private async prepareCheckpointPayload(\n metadata: HCS27CheckpointMetadata,\n messageMemo?: string,\n ): Promise<{\n message: HCS27CheckpointMessage;\n inlineResolvedMetadata?: Buffer;\n }> {\n const normalizedMemo = messageMemo?.trim();\n if (normalizedMemo && normalizedMemo.length > 299) {\n throw new Error(\n 'messageMemo must be 299 characters or fewer for HCS-27 checkpoints',\n );\n }\n\n const inlineMessage: HCS27CheckpointMessage = {\n p: 'hcs-27',\n op: 'register',\n metadata,\n ...(normalizedMemo ? { m: normalizedMemo } : {}),\n };\n const inlinePayload = JSON.stringify(inlineMessage);\n if (Buffer.byteLength(inlinePayload, 'utf8') <= MAX_PAYLOAD_BYTES) {\n return { message: inlineMessage };\n }\n\n const metadataBytes = Buffer.from(JSON.stringify(metadata), 'utf8');\n const digest = this.sha256Base64Url(metadataBytes);\n hcs27CheckpointMessageSchema.parse({\n p: 'hcs-27',\n op: 'register',\n metadata:\n 'hcs://1/18446744073709551615.18446744073709551615.18446744073709551615',\n metadata_digest: {\n alg: 'sha-256',\n b64u: digest,\n },\n ...(normalizedMemo ? { m: normalizedMemo } : {}),\n });\n\n const maxReferencePayload = JSON.stringify({\n p: 'hcs-27',\n op: 'register',\n metadata:\n 'hcs://1/18446744073709551615.18446744073709551615.18446744073709551615',\n metadata_digest: {\n alg: 'sha-256',\n b64u: digest,\n },\n ...(normalizedMemo ? { m: normalizedMemo } : {}),\n });\n if (Buffer.byteLength(maxReferencePayload, 'utf8') > MAX_PAYLOAD_BYTES) {\n throw new Error(\n `checkpoint overflow pointer message exceeds ${MAX_PAYLOAD_BYTES} bytes`,\n );\n }\n\n const reference = await this.publishMetadataHCS1(metadataBytes);\n const overflowMessage: HCS27CheckpointMessage = {\n p: 'hcs-27',\n op: 'register',\n metadata: reference,\n metadata_digest: {\n alg: 'sha-256',\n b64u: digest,\n },\n ...(normalizedMemo ? { m: normalizedMemo } : {}),\n };\n const overflowPayload = JSON.stringify(overflowMessage);\n if (Buffer.byteLength(overflowPayload, 'utf8') > MAX_PAYLOAD_BYTES) {\n throw new Error(\n `checkpoint overflow pointer message still exceeds ${MAX_PAYLOAD_BYTES} bytes`,\n );\n }\n\n return {\n message: overflowMessage,\n inlineResolvedMetadata: metadataBytes,\n };\n }\n\n private async publishMetadataHCS1(metadataBytes: Buffer): Promise<string> {\n if (this.network !== 'testnet' && this.network !== 'mainnet') {\n throw new Error(\n `HCS-1 metadata publication is only supported on testnet and mainnet, got ${this.network}`,\n );\n }\n\n const authOptions = {\n accountId: this.operatorId.toString(),\n privateKey: this.operatorCtx.operatorKey,\n network: this.network,\n };\n\n if (!this.inscriptionSDK) {\n this.inscriptionSDK = await InscriptionSDK.createWithAuth({\n type: 'server',\n ...authOptions,\n });\n }\n\n const response = await inscribe(\n {\n type: 'buffer',\n buffer: metadataBytes,\n fileName: `hcs27-checkpoint-${randomUUID()}.json`,\n mimeType: 'application/json',\n },\n authOptions,\n {\n mode: 'file',\n fileStandard: 'hcs-1',\n waitForConfirmation: true,\n waitMaxAttempts: 120,\n waitIntervalMs: 2000,\n },\n this.inscriptionSDK,\n );\n\n const topicId = getTopicId(response.inscription);\n if (!topicId) {\n throw new Error(\n 'Failed to inscribe overflow HCS-27 metadata: no topic ID returned',\n );\n }\n\n return `hcs://1/${topicId}`;\n }\n\n private sha256Base64Url(payload: Buffer): string {\n return createHash('sha256').update(payload).digest('base64url');\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,15 +1,255 @@
1
- import { HCS26BaseClient } from "./standards-sdk.es115.js";
2
- class HCS26BrowserClient extends HCS26BaseClient {
3
- constructor(config) {
4
- super({
5
- network: config.network,
6
- logger: config.logger,
7
- mirrorNode: config.mirrorNode,
8
- verificationProvider: config.verificationProvider
9
- });
1
+ import { z } from "zod";
2
+ const HCS26_PROTOCOL = "hcs-26";
3
+ const hcs26TopicTypeEnumSchema = z.union([
4
+ z.literal(0),
5
+ // discovery
6
+ z.literal(1),
7
+ // version
8
+ z.literal(2)
9
+ // reputation (optional)
10
+ ]);
11
+ const hcs26OperationEnumSchema = z.union([
12
+ z.literal(0),
13
+ // register
14
+ z.literal(1),
15
+ // update
16
+ z.literal(2),
17
+ // delete
18
+ z.literal(3)
19
+ // migrate
20
+ ]);
21
+ const topicIdSchema = z.string().regex(/^[0-9]+\.[0-9]+\.[0-9]+$/);
22
+ const hcs1HrlSchema = z.string().regex(/^hcs:\/\/1\/[0-9]+\.[0-9]+\.[0-9]+$/);
23
+ const decentralizedAssetUriSchema = z.string().regex(
24
+ /^(hcs:\/\/1\/[0-9]+\.[0-9]+\.[0-9]+|ipfs:\/\/\S+|ar:\/\/\S+|ord:\/\/\S+)$/
25
+ );
26
+ const semverSchema = z.string().regex(
27
+ /^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/
28
+ );
29
+ function validateNormalizedRelativePath(pathRaw) {
30
+ const path = pathRaw.trim();
31
+ if (!path) {
32
+ throw new Error("Path must be non-empty");
33
+ }
34
+ if (path.startsWith("/")) {
35
+ throw new Error("Path must be relative");
36
+ }
37
+ if (path.includes("\\")) {
38
+ throw new Error('Path must use "/" separators');
39
+ }
40
+ const segments = path.split("/");
41
+ for (const segment of segments) {
42
+ if (!segment || segment === "." || segment === "..") {
43
+ throw new Error(
44
+ 'Path must be normalized (no ".", "..", or empty segments)'
45
+ );
46
+ }
10
47
  }
11
48
  }
49
+ const hcs1HrlOptionalSchema = z.string().regex(/^hcs:\/\/1\/[0-9]+\.[0-9]+\.[0-9]+$/).optional();
50
+ const discoveryMetadataAuthorSchema = z.union([
51
+ z.string().min(1),
52
+ z.object({
53
+ name: z.string().min(1),
54
+ contact: z.string().min(1).optional(),
55
+ url: z.string().url().optional()
56
+ }).passthrough()
57
+ ]);
58
+ const hcs26DiscoveryMetadataSchema = z.object({
59
+ name: z.string().min(1),
60
+ description: z.string().min(1),
61
+ author: discoveryMetadataAuthorSchema,
62
+ license: z.string().min(1),
63
+ tags: z.array(
64
+ z.union([
65
+ z.number().int().positive(),
66
+ z.string().regex(/^(0|[1-9]\d*)$/).transform((value) => Number.parseInt(value, 10))
67
+ ])
68
+ ).optional(),
69
+ homepage: z.string().url().optional(),
70
+ icon: z.union([z.string().url(), decentralizedAssetUriSchema]).optional(),
71
+ icon_hcs1: hcs1HrlOptionalSchema,
72
+ languages: z.array(z.string().min(1)).optional(),
73
+ capabilities: z.array(z.string().min(1)).optional(),
74
+ repo: z.string().url().optional(),
75
+ commit: z.string().regex(/^[0-9a-f]{7,64}$/i, "commit must be a git commit SHA").optional()
76
+ }).passthrough();
77
+ const hcs26DiscoveryMetadataPatchSchema = hcs26DiscoveryMetadataSchema.partial().passthrough();
78
+ const hcs26DiscoveryRegisterSchema = z.object({
79
+ p: z.literal(HCS26_PROTOCOL),
80
+ op: z.literal("register"),
81
+ t_id: topicIdSchema,
82
+ account_id: z.string().min(1),
83
+ metadata: z.union([hcs26DiscoveryMetadataSchema, hcs1HrlSchema]),
84
+ m: z.string().max(500).optional(),
85
+ sequence_number: z.number().int().optional()
86
+ }).passthrough();
87
+ const hcs26DiscoveryRegisterLegacySchema = z.object({
88
+ p: z.literal(HCS26_PROTOCOL),
89
+ op: z.literal("register"),
90
+ version_registry: topicIdSchema,
91
+ publisher: z.string().min(1),
92
+ metadata: z.union([hcs26DiscoveryMetadataSchema, hcs1HrlSchema]),
93
+ m: z.string().max(500).optional(),
94
+ sequence_number: z.number().int().optional()
95
+ }).passthrough();
96
+ const hcs26DiscoveryUpdateSchema = z.object({
97
+ p: z.literal(HCS26_PROTOCOL),
98
+ op: z.literal("update"),
99
+ uid: z.string().min(1),
100
+ account_id: z.string().min(1).optional(),
101
+ metadata: z.union([hcs26DiscoveryMetadataPatchSchema, hcs1HrlSchema]).optional(),
102
+ m: z.string().max(500).optional(),
103
+ sequence_number: z.number().int().optional()
104
+ }).passthrough();
105
+ const hcs26DiscoveryUpdateLegacySchema = z.object({
106
+ p: z.literal(HCS26_PROTOCOL),
107
+ op: z.literal("update"),
108
+ uid: z.string().min(1),
109
+ publisher: z.string().min(1).optional(),
110
+ metadata: z.union([hcs26DiscoveryMetadataPatchSchema, hcs1HrlSchema]).optional(),
111
+ m: z.string().max(500).optional(),
112
+ sequence_number: z.number().int().optional()
113
+ }).passthrough();
114
+ const hcs26DiscoveryDeleteSchema = z.object({
115
+ p: z.literal(HCS26_PROTOCOL),
116
+ op: z.literal("delete"),
117
+ uid: z.string().min(1),
118
+ m: z.string().max(500).optional(),
119
+ sequence_number: z.number().int().optional()
120
+ }).passthrough();
121
+ const hcs26DiscoveryMigrateSchema = z.object({
122
+ p: z.literal(HCS26_PROTOCOL),
123
+ op: z.literal("migrate"),
124
+ m: z.string().max(500).optional(),
125
+ sequence_number: z.number().int().optional()
126
+ }).passthrough();
127
+ const checksumSchema = z.string().regex(/^sha256:[0-9a-f]{64}$/);
128
+ const hcs26VersionRegisterSchema = z.object({
129
+ p: z.literal(HCS26_PROTOCOL),
130
+ op: z.literal("register"),
131
+ skill_uid: z.number().int().positive(),
132
+ version: semverSchema,
133
+ t_id: topicIdSchema,
134
+ checksum: checksumSchema.optional(),
135
+ status: z.enum(["active", "deprecated", "yanked"]).optional(),
136
+ m: z.string().max(500).optional(),
137
+ sequence_number: z.number().int().optional()
138
+ }).passthrough();
139
+ const hcs26VersionRegisterLegacySchema = z.object({
140
+ p: z.literal(HCS26_PROTOCOL),
141
+ op: z.literal("register"),
142
+ skill_uid: z.number().int().positive(),
143
+ version: semverSchema,
144
+ manifest_hcs1: hcs1HrlSchema,
145
+ checksum: checksumSchema.optional(),
146
+ status: z.enum(["active", "deprecated", "yanked"]).optional(),
147
+ m: z.string().max(500).optional(),
148
+ sequence_number: z.number().int().optional()
149
+ }).passthrough();
150
+ const hcs26VersionUpdateSchema = z.object({
151
+ p: z.literal(HCS26_PROTOCOL),
152
+ op: z.literal("update"),
153
+ uid: z.string().min(1),
154
+ status: z.enum(["active", "deprecated", "yanked"]).optional(),
155
+ m: z.string().max(500).optional(),
156
+ sequence_number: z.number().int().optional()
157
+ }).passthrough();
158
+ const hcs26VersionDeleteSchema = z.object({
159
+ p: z.literal(HCS26_PROTOCOL),
160
+ op: z.literal("delete"),
161
+ uid: z.string().min(1),
162
+ m: z.string().max(500).optional(),
163
+ sequence_number: z.number().int().optional()
164
+ }).passthrough();
165
+ const hcs26VersionMigrateSchema = z.object({
166
+ p: z.literal(HCS26_PROTOCOL),
167
+ op: z.literal("migrate"),
168
+ m: z.string().max(500).optional(),
169
+ sequence_number: z.number().int().optional()
170
+ }).passthrough();
171
+ const hcs26ManifestFileSchema = z.object({
172
+ path: z.string().min(1).superRefine((value, ctx) => {
173
+ try {
174
+ validateNormalizedRelativePath(value);
175
+ } catch (error) {
176
+ const message = error instanceof Error ? error.message : String(error);
177
+ ctx.addIssue({ code: z.ZodIssueCode.custom, message });
178
+ }
179
+ }),
180
+ hrl: hcs1HrlSchema,
181
+ sha256: z.string().regex(/^[0-9a-f]{64}$/),
182
+ mime: z.string().min(1)
183
+ }).passthrough();
184
+ const hcs26SkillManifestSchema = z.object({
185
+ name: z.string().min(1),
186
+ description: z.string().min(1),
187
+ version: semverSchema,
188
+ license: z.string().min(1),
189
+ author: discoveryMetadataAuthorSchema,
190
+ tags: z.array(
191
+ z.union([
192
+ z.number().int().positive(),
193
+ z.string().regex(/^(0|[1-9]\d*)$/).transform((value) => Number.parseInt(value, 10))
194
+ ])
195
+ ).optional(),
196
+ homepage: z.string().url().optional(),
197
+ languages: z.array(z.string().min(1)).optional(),
198
+ repo: z.string().url().optional(),
199
+ commit: z.string().regex(/^[0-9a-f]{7,64}$/i, "commit must be a git commit SHA").optional(),
200
+ entrypoints: z.array(
201
+ z.object({
202
+ path: z.string().min(1),
203
+ language: z.string().min(1),
204
+ args: z.array(z.string()).optional()
205
+ }).passthrough()
206
+ ).optional(),
207
+ files: z.array(hcs26ManifestFileSchema).min(1)
208
+ }).passthrough().superRefine((value, ctx) => {
209
+ const hasSkillMd = value.files.some((file) => file.path === "SKILL.md");
210
+ if (!hasSkillMd) {
211
+ ctx.addIssue({
212
+ code: z.ZodIssueCode.custom,
213
+ message: 'SKILL.md must be present in the manifest files list with path "SKILL.md".',
214
+ path: ["files"]
215
+ });
216
+ }
217
+ });
218
+ const hcs26DiscoveryMessageSchema = z.union([
219
+ hcs26DiscoveryRegisterSchema,
220
+ hcs26DiscoveryRegisterLegacySchema,
221
+ hcs26DiscoveryUpdateSchema,
222
+ hcs26DiscoveryUpdateLegacySchema,
223
+ hcs26DiscoveryDeleteSchema,
224
+ hcs26DiscoveryMigrateSchema
225
+ ]);
226
+ const hcs26VersionMessageSchema = z.union([
227
+ hcs26VersionRegisterSchema,
228
+ hcs26VersionRegisterLegacySchema,
229
+ hcs26VersionUpdateSchema,
230
+ hcs26VersionDeleteSchema,
231
+ hcs26VersionMigrateSchema
232
+ ]);
12
233
  export {
13
- HCS26BrowserClient
234
+ HCS26_PROTOCOL,
235
+ hcs26DiscoveryDeleteSchema,
236
+ hcs26DiscoveryMessageSchema,
237
+ hcs26DiscoveryMetadataPatchSchema,
238
+ hcs26DiscoveryMetadataSchema,
239
+ hcs26DiscoveryMigrateSchema,
240
+ hcs26DiscoveryRegisterLegacySchema,
241
+ hcs26DiscoveryRegisterSchema,
242
+ hcs26DiscoveryUpdateLegacySchema,
243
+ hcs26DiscoveryUpdateSchema,
244
+ hcs26ManifestFileSchema,
245
+ hcs26OperationEnumSchema,
246
+ hcs26SkillManifestSchema,
247
+ hcs26TopicTypeEnumSchema,
248
+ hcs26VersionDeleteSchema,
249
+ hcs26VersionMessageSchema,
250
+ hcs26VersionMigrateSchema,
251
+ hcs26VersionRegisterLegacySchema,
252
+ hcs26VersionRegisterSchema,
253
+ hcs26VersionUpdateSchema
14
254
  };
15
255
  //# sourceMappingURL=standards-sdk.es117.js.map