@hashgraphonline/standards-sdk 0.1.141-canary.12 → 0.1.141-canary.14

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 (202) hide show
  1. package/README.md +3 -1
  2. package/dist/cjs/hcs-21/base-client.d.ts.map +1 -1
  3. package/dist/cjs/hcs-21/index.d.ts +1 -0
  4. package/dist/cjs/hcs-21/index.d.ts.map +1 -1
  5. package/dist/cjs/hcs-21/tx.d.ts.map +1 -1
  6. package/dist/cjs/hcs-21/verify.d.ts +6 -0
  7. package/dist/cjs/hcs-21/verify.d.ts.map +1 -0
  8. package/dist/cjs/services/registry-broker/client.d.ts +4 -3
  9. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  10. package/dist/cjs/standards-sdk.cjs +2 -2
  11. package/dist/cjs/standards-sdk.cjs.map +1 -1
  12. package/dist/es/hcs-21/base-client.d.ts.map +1 -1
  13. package/dist/es/hcs-21/index.d.ts +1 -0
  14. package/dist/es/hcs-21/index.d.ts.map +1 -1
  15. package/dist/es/hcs-21/tx.d.ts.map +1 -1
  16. package/dist/es/hcs-21/verify.d.ts +6 -0
  17. package/dist/es/hcs-21/verify.d.ts.map +1 -0
  18. package/dist/es/services/registry-broker/client.d.ts +4 -3
  19. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  20. package/dist/es/standards-sdk.es.js +53 -48
  21. package/dist/es/standards-sdk.es.js.map +1 -1
  22. package/dist/es/standards-sdk.es10.js +2 -2
  23. package/dist/es/standards-sdk.es100.js +26 -229
  24. package/dist/es/standards-sdk.es100.js.map +1 -1
  25. package/dist/es/standards-sdk.es101.js +228 -109
  26. package/dist/es/standards-sdk.es101.js.map +1 -1
  27. package/dist/es/standards-sdk.es102.js +94 -15
  28. package/dist/es/standards-sdk.es102.js.map +1 -1
  29. package/dist/es/standards-sdk.es103.js +30 -80
  30. package/dist/es/standards-sdk.es103.js.map +1 -1
  31. package/dist/es/standards-sdk.es104.js +80 -27
  32. package/dist/es/standards-sdk.es104.js.map +1 -1
  33. package/dist/es/standards-sdk.es105.js +25 -136
  34. package/dist/es/standards-sdk.es105.js.map +1 -1
  35. package/dist/es/standards-sdk.es106.js +140 -27
  36. package/dist/es/standards-sdk.es106.js.map +1 -1
  37. package/dist/es/standards-sdk.es107.js +27 -20
  38. package/dist/es/standards-sdk.es107.js.map +1 -1
  39. package/dist/es/standards-sdk.es108.js +18 -156
  40. package/dist/es/standards-sdk.es108.js.map +1 -1
  41. package/dist/es/standards-sdk.es109.js +148 -196
  42. package/dist/es/standards-sdk.es109.js.map +1 -1
  43. package/dist/es/standards-sdk.es110.js +161 -747
  44. package/dist/es/standards-sdk.es110.js.map +1 -1
  45. package/dist/es/standards-sdk.es111.js +786 -9
  46. package/dist/es/standards-sdk.es111.js.map +1 -1
  47. package/dist/es/standards-sdk.es112.js +13 -567
  48. package/dist/es/standards-sdk.es112.js.map +1 -1
  49. package/dist/es/standards-sdk.es113.js +541 -576
  50. package/dist/es/standards-sdk.es113.js.map +1 -1
  51. package/dist/es/standards-sdk.es114.js +601 -12
  52. package/dist/es/standards-sdk.es114.js.map +1 -1
  53. package/dist/es/standards-sdk.es115.js +13 -2
  54. package/dist/es/standards-sdk.es115.js.map +1 -1
  55. package/dist/es/standards-sdk.es116.js +2 -83
  56. package/dist/es/standards-sdk.es116.js.map +1 -1
  57. package/dist/es/standards-sdk.es117.js +80 -36
  58. package/dist/es/standards-sdk.es117.js.map +1 -1
  59. package/dist/es/standards-sdk.es118.js +39 -2
  60. package/dist/es/standards-sdk.es118.js.map +1 -1
  61. package/dist/es/standards-sdk.es119.js +2 -223
  62. package/dist/es/standards-sdk.es119.js.map +1 -1
  63. package/dist/es/standards-sdk.es12.js +1 -1
  64. package/dist/es/standards-sdk.es120.js +193 -1110
  65. package/dist/es/standards-sdk.es120.js.map +1 -1
  66. package/dist/es/standards-sdk.es121.js +1059 -225
  67. package/dist/es/standards-sdk.es121.js.map +1 -1
  68. package/dist/es/standards-sdk.es122.js +303 -419
  69. package/dist/es/standards-sdk.es122.js.map +1 -1
  70. package/dist/es/standards-sdk.es123.js +418 -351
  71. package/dist/es/standards-sdk.es123.js.map +1 -1
  72. package/dist/es/standards-sdk.es124.js +348 -818
  73. package/dist/es/standards-sdk.es124.js.map +1 -1
  74. package/dist/es/standards-sdk.es125.js +804 -187
  75. package/dist/es/standards-sdk.es125.js.map +1 -1
  76. package/dist/es/standards-sdk.es126.js +153 -1512
  77. package/dist/es/standards-sdk.es126.js.map +1 -1
  78. package/dist/es/standards-sdk.es127.js +1373 -1987
  79. package/dist/es/standards-sdk.es127.js.map +1 -1
  80. package/dist/es/standards-sdk.es128.js +2216 -65
  81. package/dist/es/standards-sdk.es128.js.map +1 -1
  82. package/dist/es/standards-sdk.es129.js +64 -79
  83. package/dist/es/standards-sdk.es129.js.map +1 -1
  84. package/dist/es/standards-sdk.es13.js +1 -1
  85. package/dist/es/standards-sdk.es130.js +80 -152
  86. package/dist/es/standards-sdk.es130.js.map +1 -1
  87. package/dist/es/standards-sdk.es131.js +159 -7
  88. package/dist/es/standards-sdk.es131.js.map +1 -1
  89. package/dist/es/standards-sdk.es132.js +7 -86
  90. package/dist/es/standards-sdk.es132.js.map +1 -1
  91. package/dist/es/standards-sdk.es133.js +65 -44
  92. package/dist/es/standards-sdk.es133.js.map +1 -1
  93. package/dist/es/standards-sdk.es134.js +65 -28
  94. package/dist/es/standards-sdk.es134.js.map +1 -1
  95. package/dist/es/standards-sdk.es135.js +28 -138
  96. package/dist/es/standards-sdk.es135.js.map +1 -1
  97. package/dist/es/standards-sdk.es136.js +133 -37
  98. package/dist/es/standards-sdk.es136.js.map +1 -1
  99. package/dist/es/standards-sdk.es137.js +34 -12266
  100. package/dist/es/standards-sdk.es137.js.map +1 -1
  101. package/dist/es/standards-sdk.es139.js +12269 -12
  102. package/dist/es/standards-sdk.es139.js.map +1 -1
  103. package/dist/es/standards-sdk.es14.js +1 -1
  104. package/dist/es/standards-sdk.es141.js +1 -1
  105. package/dist/es/standards-sdk.es142.js +13 -168
  106. package/dist/es/standards-sdk.es142.js.map +1 -1
  107. package/dist/es/standards-sdk.es143.js +139 -289
  108. package/dist/es/standards-sdk.es143.js.map +1 -1
  109. package/dist/es/standards-sdk.es144.js +274 -298
  110. package/dist/es/standards-sdk.es144.js.map +1 -1
  111. package/dist/es/standards-sdk.es145.js +262 -369
  112. package/dist/es/standards-sdk.es145.js.map +1 -1
  113. package/dist/es/standards-sdk.es146.js +316 -194
  114. package/dist/es/standards-sdk.es146.js.map +1 -1
  115. package/dist/es/standards-sdk.es147.js +319 -64
  116. package/dist/es/standards-sdk.es147.js.map +1 -1
  117. package/dist/es/standards-sdk.es148.js +79 -0
  118. package/dist/es/standards-sdk.es148.js.map +1 -0
  119. package/dist/es/standards-sdk.es15.js +1 -1
  120. package/dist/es/standards-sdk.es16.js +1 -1
  121. package/dist/es/standards-sdk.es17.js +4 -9
  122. package/dist/es/standards-sdk.es17.js.map +1 -1
  123. package/dist/es/standards-sdk.es19.js +11 -15
  124. package/dist/es/standards-sdk.es19.js.map +1 -1
  125. package/dist/es/standards-sdk.es20.js +8 -12
  126. package/dist/es/standards-sdk.es20.js.map +1 -1
  127. package/dist/es/standards-sdk.es21.js +1 -1
  128. package/dist/es/standards-sdk.es22.js +1 -1
  129. package/dist/es/standards-sdk.es23.js +1 -1
  130. package/dist/es/standards-sdk.es24.js +1 -1
  131. package/dist/es/standards-sdk.es25.js +1 -1
  132. package/dist/es/standards-sdk.es26.js +1 -1
  133. package/dist/es/standards-sdk.es27.js +1 -1
  134. package/dist/es/standards-sdk.es28.js +11 -15
  135. package/dist/es/standards-sdk.es28.js.map +1 -1
  136. package/dist/es/standards-sdk.es3.js +2 -2
  137. package/dist/es/standards-sdk.es31.js +2 -2
  138. package/dist/es/standards-sdk.es32.js +4 -4
  139. package/dist/es/standards-sdk.es33.js +1 -1
  140. package/dist/es/standards-sdk.es36.js +5 -10
  141. package/dist/es/standards-sdk.es36.js.map +1 -1
  142. package/dist/es/standards-sdk.es37.js +4 -4
  143. package/dist/es/standards-sdk.es38.js +2 -2
  144. package/dist/es/standards-sdk.es39.js +2 -2
  145. package/dist/es/standards-sdk.es40.js +1 -1
  146. package/dist/es/standards-sdk.es41.js +1 -1
  147. package/dist/es/standards-sdk.es42.js +2 -2
  148. package/dist/es/standards-sdk.es47.js +1 -1
  149. package/dist/es/standards-sdk.es5.js +2 -2
  150. package/dist/es/standards-sdk.es52.js +1 -1
  151. package/dist/es/standards-sdk.es54.js +1 -1
  152. package/dist/es/standards-sdk.es57.js +1 -1
  153. package/dist/es/standards-sdk.es6.js +2 -2
  154. package/dist/es/standards-sdk.es61.js +6 -10
  155. package/dist/es/standards-sdk.es61.js.map +1 -1
  156. package/dist/es/standards-sdk.es65.js +2 -2
  157. package/dist/es/standards-sdk.es66.js +3 -3
  158. package/dist/es/standards-sdk.es69.js +2 -2
  159. package/dist/es/standards-sdk.es7.js +2 -2
  160. package/dist/es/standards-sdk.es70.js +3 -3
  161. package/dist/es/standards-sdk.es71.js +2 -2
  162. package/dist/es/standards-sdk.es72.js +1 -1
  163. package/dist/es/standards-sdk.es75.js +2 -2
  164. package/dist/es/standards-sdk.es77.js +2 -2
  165. package/dist/es/standards-sdk.es78.js +3 -8
  166. package/dist/es/standards-sdk.es78.js.map +1 -1
  167. package/dist/es/standards-sdk.es79.js +1 -1
  168. package/dist/es/standards-sdk.es8.js +1 -1
  169. package/dist/es/standards-sdk.es82.js +10 -2
  170. package/dist/es/standards-sdk.es82.js.map +1 -1
  171. package/dist/es/standards-sdk.es83.js +5 -5
  172. package/dist/es/standards-sdk.es83.js.map +1 -1
  173. package/dist/es/standards-sdk.es84.js +4 -4
  174. package/dist/es/standards-sdk.es86.js +55 -21
  175. package/dist/es/standards-sdk.es86.js.map +1 -1
  176. package/dist/es/standards-sdk.es87.js +22 -75
  177. package/dist/es/standards-sdk.es87.js.map +1 -1
  178. package/dist/es/standards-sdk.es88.js +45 -30
  179. package/dist/es/standards-sdk.es88.js.map +1 -1
  180. package/dist/es/standards-sdk.es89.js +57 -22
  181. package/dist/es/standards-sdk.es89.js.map +1 -1
  182. package/dist/es/standards-sdk.es90.js +28 -23
  183. package/dist/es/standards-sdk.es90.js.map +1 -1
  184. package/dist/es/standards-sdk.es91.js +23 -167
  185. package/dist/es/standards-sdk.es91.js.map +1 -1
  186. package/dist/es/standards-sdk.es92.js +158 -119
  187. package/dist/es/standards-sdk.es92.js.map +1 -1
  188. package/dist/es/standards-sdk.es93.js +68 -95
  189. package/dist/es/standards-sdk.es93.js.map +1 -1
  190. package/dist/es/standards-sdk.es94.js +136 -119
  191. package/dist/es/standards-sdk.es94.js.map +1 -1
  192. package/dist/es/standards-sdk.es95.js +134 -39
  193. package/dist/es/standards-sdk.es95.js.map +1 -1
  194. package/dist/es/standards-sdk.es96.js +40 -258
  195. package/dist/es/standards-sdk.es96.js.map +1 -1
  196. package/dist/es/standards-sdk.es97.js +243 -80
  197. package/dist/es/standards-sdk.es97.js.map +1 -1
  198. package/dist/es/standards-sdk.es98.js +47 -48
  199. package/dist/es/standards-sdk.es98.js.map +1 -1
  200. package/dist/es/standards-sdk.es99.js +100 -28
  201. package/dist/es/standards-sdk.es99.js.map +1 -1
  202. package/package.json +1 -1
@@ -1,68 +1,89 @@
1
- import { Logger } from "./standards-sdk.es105.js";
2
- const REFERENCE_THRESHOLD = 50 * 1024;
3
- class ContentStoreServiceImpl {
1
+ import { Logger } from "./standards-sdk.es106.js";
2
+ class ContentResolverRegistryImpl {
4
3
  constructor() {
5
- this.contentStore = null;
6
- this.logger = Logger.getInstance({ module: "ContentStoreService" });
4
+ this.resolver = null;
5
+ this.onUnavailableCallbacks = [];
6
+ this.logger = Logger.getInstance({ module: "ContentResolverRegistry" });
7
7
  }
8
8
  static getInstance() {
9
- if (!ContentStoreServiceImpl._instance) {
10
- ContentStoreServiceImpl._instance = new ContentStoreServiceImpl();
9
+ if (!ContentResolverRegistryImpl._instance) {
10
+ ContentResolverRegistryImpl._instance = new ContentResolverRegistryImpl();
11
11
  }
12
- return ContentStoreServiceImpl._instance;
12
+ return ContentResolverRegistryImpl._instance;
13
13
  }
14
14
  /**
15
- * Set the content store instance
15
+ * Register a content resolver (typically called by ContentStoreManager)
16
16
  */
17
- async setInstance(store) {
18
- if (this.contentStore) {
19
- this.logger.warn("Content store already set, replacing");
17
+ register(resolver) {
18
+ if (this.resolver) {
19
+ this.logger.warn("Resolver already registered, replacing existing");
20
20
  }
21
- this.contentStore = store;
22
- this.logger.info("Content store instance set");
21
+ this.resolver = resolver;
22
+ this.logger.info("Content resolver registered");
23
23
  }
24
24
  /**
25
- * Get the content store instance
25
+ * Get the registered content resolver
26
26
  */
27
- getInstance() {
28
- return this.contentStore;
27
+ getResolver() {
28
+ return this.resolver;
29
29
  }
30
30
  /**
31
- * Clear the content store instance
31
+ * Check if a resolver is available
32
32
  */
33
- dispose() {
34
- this.contentStore = null;
35
- this.logger.info("Content store disposed");
33
+ isAvailable() {
34
+ return this.resolver !== null;
36
35
  }
37
36
  /**
38
- * Check if content store is available
37
+ * Unregister the current resolver
39
38
  */
40
- isAvailable() {
41
- return this.contentStore !== null;
39
+ unregister() {
40
+ if (this.resolver) {
41
+ this.resolver = null;
42
+ this.logger.info("Content resolver unregistered");
43
+ this.onUnavailableCallbacks.forEach((callback) => {
44
+ try {
45
+ callback();
46
+ } catch (error) {
47
+ this.logger.error("Error in unavailable callback:", error);
48
+ }
49
+ });
50
+ }
42
51
  }
43
- }
44
- function extractReferenceId(input) {
45
- const trimmed = input.trim();
46
- const exactMatch = trimmed.match(/^content-ref:([a-f0-9]+)$/);
47
- if (exactMatch) {
48
- return exactMatch[1];
52
+ /**
53
+ * Register callback for when resolver becomes unavailable
54
+ */
55
+ onUnavailable(callback) {
56
+ this.onUnavailableCallbacks.push(callback);
57
+ }
58
+ /**
59
+ * Remove unavailable callback
60
+ */
61
+ offUnavailable(callback) {
62
+ const index = this.onUnavailableCallbacks.indexOf(callback);
63
+ if (index !== -1) {
64
+ this.onUnavailableCallbacks.splice(index, 1);
65
+ }
49
66
  }
50
- const embeddedMatch = trimmed.match(/content-ref:([a-f0-9]+)/);
51
- if (embeddedMatch) {
52
- return embeddedMatch[1];
67
+ /**
68
+ * Execute operation with resolver or fallback
69
+ */
70
+ async withResolver(operation, fallback) {
71
+ if (this.resolver) {
72
+ try {
73
+ return await operation(this.resolver);
74
+ } catch (error) {
75
+ this.logger.warn("Resolver operation failed, using fallback:", error);
76
+ return await fallback();
77
+ }
78
+ } else {
79
+ this.logger.warn("No resolver available, using fallback");
80
+ return await fallback();
81
+ }
53
82
  }
54
- return null;
55
- }
56
- function shouldUseReference(content) {
57
- const size = typeof content === "string" ? Buffer.byteLength(content, "utf8") : content.length;
58
- return size > REFERENCE_THRESHOLD;
59
83
  }
60
- const ContentStoreService = ContentStoreServiceImpl.getInstance();
84
+ const ContentResolverRegistry = ContentResolverRegistryImpl.getInstance();
61
85
  export {
62
- ContentStoreService,
63
- ContentStoreServiceImpl,
64
- REFERENCE_THRESHOLD,
65
- extractReferenceId,
66
- shouldUseReference
86
+ ContentResolverRegistry,
87
+ ContentResolverRegistryImpl
67
88
  };
68
89
  //# sourceMappingURL=standards-sdk.es133.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es133.js","sources":["../../src/content-store/ContentStoreService.ts"],"sourcesContent":["/**\n * Content Store Service\n *\n * Provides utility functions for content storage and reference handling.\n */\n\nimport type { ContentStoreInterface } from './types';\nimport { Logger } from '../utils/logger';\n\n/**\n * Maximum content size before using references (50KB)\n */\nexport const REFERENCE_THRESHOLD = 50 * 1024;\n\n/**\n * Content store service for managing large content\n */\nexport class ContentStoreServiceImpl {\n private static _instance: ContentStoreServiceImpl;\n private contentStore: ContentStoreInterface | null = null;\n private logger = Logger.getInstance({ module: 'ContentStoreService' });\n\n static getInstance(): ContentStoreServiceImpl {\n if (!ContentStoreServiceImpl._instance) {\n ContentStoreServiceImpl._instance = new ContentStoreServiceImpl();\n }\n return ContentStoreServiceImpl._instance;\n }\n\n /**\n * Set the content store instance\n */\n async setInstance(store: ContentStoreInterface): Promise<void> {\n if (this.contentStore) {\n this.logger.warn('Content store already set, replacing');\n }\n this.contentStore = store;\n this.logger.info('Content store instance set');\n }\n\n /**\n * Get the content store instance\n */\n getInstance(): ContentStoreInterface | null {\n return this.contentStore;\n }\n\n /**\n * Clear the content store instance\n */\n dispose(): void {\n this.contentStore = null;\n this.logger.info('Content store disposed');\n }\n\n /**\n * Check if content store is available\n */\n isAvailable(): boolean {\n return this.contentStore !== null;\n }\n}\n\n/**\n * Extract reference ID from input string\n */\nexport function extractReferenceId(input: string): string | null {\n const trimmed = input.trim();\n\n const exactMatch = trimmed.match(/^content-ref:([a-f0-9]+)$/);\n if (exactMatch) {\n return exactMatch[1];\n }\n\n const embeddedMatch = trimmed.match(/content-ref:([a-f0-9]+)/);\n if (embeddedMatch) {\n return embeddedMatch[1];\n }\n\n return null;\n}\n\n/**\n * Check if content should use reference based on size\n */\nexport function shouldUseReference(content: string | Buffer): boolean {\n const size =\n typeof content === 'string'\n ? Buffer.byteLength(content, 'utf8')\n : content.length;\n\n return size > REFERENCE_THRESHOLD;\n}\n\nexport const ContentStoreService = ContentStoreServiceImpl.getInstance();\n"],"names":[],"mappings":";AAYO,MAAM,sBAAsB,KAAK;AAKjC,MAAM,wBAAwB;AAAA,EAA9B,cAAA;AAEL,SAAQ,eAA6C;AACrD,SAAQ,SAAS,OAAO,YAAY,EAAE,QAAQ,uBAAuB;AAAA,EAAA;AAAA,EAErE,OAAO,cAAuC;AAC5C,QAAI,CAAC,wBAAwB,WAAW;AACtC,8BAAwB,YAAY,IAAI,wBAAA;AAAA,IAC1C;AACA,WAAO,wBAAwB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,OAA6C;AAC7D,QAAI,KAAK,cAAc;AACrB,WAAK,OAAO,KAAK,sCAAsC;AAAA,IACzD;AACA,SAAK,eAAe;AACpB,SAAK,OAAO,KAAK,4BAA4B;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,cAA4C;AAC1C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,eAAe;AACpB,SAAK,OAAO,KAAK,wBAAwB;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AACF;AAKO,SAAS,mBAAmB,OAA8B;AAC/D,QAAM,UAAU,MAAM,KAAA;AAEtB,QAAM,aAAa,QAAQ,MAAM,2BAA2B;AAC5D,MAAI,YAAY;AACd,WAAO,WAAW,CAAC;AAAA,EACrB;AAEA,QAAM,gBAAgB,QAAQ,MAAM,yBAAyB;AAC7D,MAAI,eAAe;AACjB,WAAO,cAAc,CAAC;AAAA,EACxB;AAEA,SAAO;AACT;AAKO,SAAS,mBAAmB,SAAmC;AACpE,QAAM,OACJ,OAAO,YAAY,WACf,OAAO,WAAW,SAAS,MAAM,IACjC,QAAQ;AAEd,SAAO,OAAO;AAChB;AAEO,MAAM,sBAAsB,wBAAwB,YAAA;"}
1
+ {"version":3,"file":"standards-sdk.es133.js","sources":["../../src/content-store/ContentResolverRegistry.ts"],"sourcesContent":["/**\n * Content Resolver Registry\n *\n * Dependency injection registry for content resolvers.\n * Allows tools to access content resolution without circular dependencies.\n */\n\nimport type { ContentResolverInterface } from './types';\nimport { Logger } from '../utils/logger';\n\nexport class ContentResolverRegistryImpl {\n private static _instance: ContentResolverRegistryImpl;\n private resolver: ContentResolverInterface | null = null;\n private onUnavailableCallbacks: (() => void)[] = [];\n private logger = Logger.getInstance({ module: 'ContentResolverRegistry' });\n\n static getInstance(): ContentResolverRegistryImpl {\n if (!ContentResolverRegistryImpl._instance) {\n ContentResolverRegistryImpl._instance = new ContentResolverRegistryImpl();\n }\n return ContentResolverRegistryImpl._instance;\n }\n\n /**\n * Register a content resolver (typically called by ContentStoreManager)\n */\n register(resolver: ContentResolverInterface): void {\n if (this.resolver) {\n this.logger.warn('Resolver already registered, replacing existing');\n }\n this.resolver = resolver;\n this.logger.info('Content resolver registered');\n }\n\n /**\n * Get the registered content resolver\n */\n getResolver(): ContentResolverInterface | null {\n return this.resolver;\n }\n\n /**\n * Check if a resolver is available\n */\n isAvailable(): boolean {\n return this.resolver !== null;\n }\n\n /**\n * Unregister the current resolver\n */\n unregister(): void {\n if (this.resolver) {\n this.resolver = null;\n this.logger.info('Content resolver unregistered');\n this.onUnavailableCallbacks.forEach(callback => {\n try {\n callback();\n } catch (error) {\n this.logger.error('Error in unavailable callback:', error);\n }\n });\n }\n }\n\n /**\n * Register callback for when resolver becomes unavailable\n */\n onUnavailable(callback: () => void): void {\n this.onUnavailableCallbacks.push(callback);\n }\n\n /**\n * Remove unavailable callback\n */\n offUnavailable(callback: () => void): void {\n const index = this.onUnavailableCallbacks.indexOf(callback);\n if (index !== -1) {\n this.onUnavailableCallbacks.splice(index, 1);\n }\n }\n\n /**\n * Execute operation with resolver or fallback\n */\n async withResolver<T>(\n operation: (resolver: ContentResolverInterface) => Promise<T>,\n fallback: () => Promise<T>,\n ): Promise<T> {\n if (this.resolver) {\n try {\n return await operation(this.resolver);\n } catch (error) {\n this.logger.warn('Resolver operation failed, using fallback:', error);\n return await fallback();\n }\n } else {\n this.logger.warn('No resolver available, using fallback');\n return await fallback();\n }\n }\n}\n\nexport const ContentResolverRegistry =\n ContentResolverRegistryImpl.getInstance();\n"],"names":[],"mappings":";AAUO,MAAM,4BAA4B;AAAA,EAAlC,cAAA;AAEL,SAAQ,WAA4C;AACpD,SAAQ,yBAAyC,CAAA;AACjD,SAAQ,SAAS,OAAO,YAAY,EAAE,QAAQ,2BAA2B;AAAA,EAAA;AAAA,EAEzE,OAAO,cAA2C;AAChD,QAAI,CAAC,4BAA4B,WAAW;AAC1C,kCAA4B,YAAY,IAAI,4BAAA;AAAA,IAC9C;AACA,WAAO,4BAA4B;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,UAA0C;AACjD,QAAI,KAAK,UAAU;AACjB,WAAK,OAAO,KAAK,iDAAiD;AAAA,IACpE;AACA,SAAK,WAAW;AAChB,SAAK,OAAO,KAAK,6BAA6B;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,cAA+C;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,aAAmB;AACjB,QAAI,KAAK,UAAU;AACjB,WAAK,WAAW;AAChB,WAAK,OAAO,KAAK,+BAA+B;AAChD,WAAK,uBAAuB,QAAQ,CAAA,aAAY;AAC9C,YAAI;AACF,mBAAA;AAAA,QACF,SAAS,OAAO;AACd,eAAK,OAAO,MAAM,kCAAkC,KAAK;AAAA,QAC3D;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,UAA4B;AACxC,SAAK,uBAAuB,KAAK,QAAQ;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,UAA4B;AACzC,UAAM,QAAQ,KAAK,uBAAuB,QAAQ,QAAQ;AAC1D,QAAI,UAAU,IAAI;AAChB,WAAK,uBAAuB,OAAO,OAAO,CAAC;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aACJ,WACA,UACY;AACZ,QAAI,KAAK,UAAU;AACjB,UAAI;AACF,eAAO,MAAM,UAAU,KAAK,QAAQ;AAAA,MACtC,SAAS,OAAO;AACd,aAAK,OAAO,KAAK,8CAA8C,KAAK;AACpE,eAAO,MAAM,SAAA;AAAA,MACf;AAAA,IACF,OAAO;AACL,WAAK,OAAO,KAAK,uCAAuC;AACxD,aAAO,MAAM,SAAA;AAAA,IACf;AAAA,EACF;AACF;AAEO,MAAM,0BACX,4BAA4B,YAAA;"}
@@ -1,31 +1,68 @@
1
- import { CanonicalAgentDataSchema, HCS14_PROTOCOL_REGEX } from "./standards-sdk.es55.js";
2
- import { canonicalizeAgentData } from "./standards-sdk.es56.js";
3
- import { createUaid, parseHcs14Did } from "./standards-sdk.es57.js";
4
- import { isEip155Caip10, isHederaCaip10, isHederaNetwork, parseHederaCaip10, toEip155Caip10, toHederaCaip10 } from "./standards-sdk.es58.js";
5
- import { ResolverRegistry, defaultResolverRegistry, registerDefaultResolvers } from "./standards-sdk.es59.js";
6
- import { HieroDidResolver } from "./standards-sdk.es60.js";
7
- import { HCS14Client } from "./standards-sdk.es61.js";
8
- import { IssuerRegistry, defaultIssuerRegistry } from "./standards-sdk.es62.js";
9
- import { HederaHieroIssuer } from "./standards-sdk.es63.js";
1
+ import { Logger } from "./standards-sdk.es106.js";
2
+ const REFERENCE_THRESHOLD = 50 * 1024;
3
+ class ContentStoreServiceImpl {
4
+ constructor() {
5
+ this.contentStore = null;
6
+ this.logger = Logger.getInstance({ module: "ContentStoreService" });
7
+ }
8
+ static getInstance() {
9
+ if (!ContentStoreServiceImpl._instance) {
10
+ ContentStoreServiceImpl._instance = new ContentStoreServiceImpl();
11
+ }
12
+ return ContentStoreServiceImpl._instance;
13
+ }
14
+ /**
15
+ * Set the content store instance
16
+ */
17
+ async setInstance(store) {
18
+ if (this.contentStore) {
19
+ this.logger.warn("Content store already set, replacing");
20
+ }
21
+ this.contentStore = store;
22
+ this.logger.info("Content store instance set");
23
+ }
24
+ /**
25
+ * Get the content store instance
26
+ */
27
+ getInstance() {
28
+ return this.contentStore;
29
+ }
30
+ /**
31
+ * Clear the content store instance
32
+ */
33
+ dispose() {
34
+ this.contentStore = null;
35
+ this.logger.info("Content store disposed");
36
+ }
37
+ /**
38
+ * Check if content store is available
39
+ */
40
+ isAvailable() {
41
+ return this.contentStore !== null;
42
+ }
43
+ }
44
+ function extractReferenceId(input) {
45
+ const trimmed = input.trim();
46
+ const exactMatch = trimmed.match(/^content-ref:([a-f0-9]+)$/);
47
+ if (exactMatch) {
48
+ return exactMatch[1];
49
+ }
50
+ const embeddedMatch = trimmed.match(/content-ref:([a-f0-9]+)/);
51
+ if (embeddedMatch) {
52
+ return embeddedMatch[1];
53
+ }
54
+ return null;
55
+ }
56
+ function shouldUseReference(content) {
57
+ const size = typeof content === "string" ? Buffer.byteLength(content, "utf8") : content.length;
58
+ return size > REFERENCE_THRESHOLD;
59
+ }
60
+ const ContentStoreService = ContentStoreServiceImpl.getInstance();
10
61
  export {
11
- CanonicalAgentDataSchema,
12
- HCS14Client,
13
- HCS14_PROTOCOL_REGEX,
14
- HederaHieroIssuer,
15
- HieroDidResolver,
16
- IssuerRegistry,
17
- ResolverRegistry,
18
- canonicalizeAgentData,
19
- createUaid,
20
- defaultIssuerRegistry,
21
- defaultResolverRegistry,
22
- isEip155Caip10,
23
- isHederaCaip10,
24
- isHederaNetwork,
25
- parseHcs14Did,
26
- parseHederaCaip10,
27
- registerDefaultResolvers,
28
- toEip155Caip10,
29
- toHederaCaip10
62
+ ContentStoreService,
63
+ ContentStoreServiceImpl,
64
+ REFERENCE_THRESHOLD,
65
+ extractReferenceId,
66
+ shouldUseReference
30
67
  };
31
68
  //# sourceMappingURL=standards-sdk.es134.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es134.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
1
+ {"version":3,"file":"standards-sdk.es134.js","sources":["../../src/content-store/ContentStoreService.ts"],"sourcesContent":["/**\n * Content Store Service\n *\n * Provides utility functions for content storage and reference handling.\n */\n\nimport type { ContentStoreInterface } from './types';\nimport { Logger } from '../utils/logger';\n\n/**\n * Maximum content size before using references (50KB)\n */\nexport const REFERENCE_THRESHOLD = 50 * 1024;\n\n/**\n * Content store service for managing large content\n */\nexport class ContentStoreServiceImpl {\n private static _instance: ContentStoreServiceImpl;\n private contentStore: ContentStoreInterface | null = null;\n private logger = Logger.getInstance({ module: 'ContentStoreService' });\n\n static getInstance(): ContentStoreServiceImpl {\n if (!ContentStoreServiceImpl._instance) {\n ContentStoreServiceImpl._instance = new ContentStoreServiceImpl();\n }\n return ContentStoreServiceImpl._instance;\n }\n\n /**\n * Set the content store instance\n */\n async setInstance(store: ContentStoreInterface): Promise<void> {\n if (this.contentStore) {\n this.logger.warn('Content store already set, replacing');\n }\n this.contentStore = store;\n this.logger.info('Content store instance set');\n }\n\n /**\n * Get the content store instance\n */\n getInstance(): ContentStoreInterface | null {\n return this.contentStore;\n }\n\n /**\n * Clear the content store instance\n */\n dispose(): void {\n this.contentStore = null;\n this.logger.info('Content store disposed');\n }\n\n /**\n * Check if content store is available\n */\n isAvailable(): boolean {\n return this.contentStore !== null;\n }\n}\n\n/**\n * Extract reference ID from input string\n */\nexport function extractReferenceId(input: string): string | null {\n const trimmed = input.trim();\n\n const exactMatch = trimmed.match(/^content-ref:([a-f0-9]+)$/);\n if (exactMatch) {\n return exactMatch[1];\n }\n\n const embeddedMatch = trimmed.match(/content-ref:([a-f0-9]+)/);\n if (embeddedMatch) {\n return embeddedMatch[1];\n }\n\n return null;\n}\n\n/**\n * Check if content should use reference based on size\n */\nexport function shouldUseReference(content: string | Buffer): boolean {\n const size =\n typeof content === 'string'\n ? Buffer.byteLength(content, 'utf8')\n : content.length;\n\n return size > REFERENCE_THRESHOLD;\n}\n\nexport const ContentStoreService = ContentStoreServiceImpl.getInstance();\n"],"names":[],"mappings":";AAYO,MAAM,sBAAsB,KAAK;AAKjC,MAAM,wBAAwB;AAAA,EAA9B,cAAA;AAEL,SAAQ,eAA6C;AACrD,SAAQ,SAAS,OAAO,YAAY,EAAE,QAAQ,uBAAuB;AAAA,EAAA;AAAA,EAErE,OAAO,cAAuC;AAC5C,QAAI,CAAC,wBAAwB,WAAW;AACtC,8BAAwB,YAAY,IAAI,wBAAA;AAAA,IAC1C;AACA,WAAO,wBAAwB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,OAA6C;AAC7D,QAAI,KAAK,cAAc;AACrB,WAAK,OAAO,KAAK,sCAAsC;AAAA,IACzD;AACA,SAAK,eAAe;AACpB,SAAK,OAAO,KAAK,4BAA4B;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,cAA4C;AAC1C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,eAAe;AACpB,SAAK,OAAO,KAAK,wBAAwB;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AACF;AAKO,SAAS,mBAAmB,OAA8B;AAC/D,QAAM,UAAU,MAAM,KAAA;AAEtB,QAAM,aAAa,QAAQ,MAAM,2BAA2B;AAC5D,MAAI,YAAY;AACd,WAAO,WAAW,CAAC;AAAA,EACrB;AAEA,QAAM,gBAAgB,QAAQ,MAAM,yBAAyB;AAC7D,MAAI,eAAe;AACjB,WAAO,cAAc,CAAC;AAAA,EACxB;AAEA,SAAO;AACT;AAKO,SAAS,mBAAmB,SAAmC;AACpE,QAAM,OACJ,OAAO,YAAY,WACf,OAAO,WAAW,SAAS,MAAM,IACjC,QAAQ;AAEd,SAAO,OAAO;AAChB;AAEO,MAAM,sBAAsB,wBAAwB,YAAA;"}
@@ -1,141 +1,31 @@
1
- import { AccountId, Client, PrivateKey } from "@hashgraph/sdk";
2
- import { detectKeyTypeFromString } from "./standards-sdk.es113.js";
3
- class NodeOperatorResolver {
4
- constructor(params) {
5
- this.mirror = params.mirrorNode;
6
- this.logger = params.logger;
7
- }
8
- /**
9
- * Best-guess parsing for an operator key without network calls.
10
- * - If PrivateKey: returns immediately with provided or fallback type.
11
- * - If string with explicitType: parse directly.
12
- * - If string without type: detect format; fallback to ECDSA.
13
- */
14
- bestGuessOperatorKey(operatorKeyInput, explicitType) {
15
- if (typeof operatorKeyInput !== "string") {
16
- return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
17
- }
18
- if (explicitType) {
19
- const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
20
- return { keyType: explicitType, privateKey: pk };
21
- }
22
- try {
23
- const detected = detectKeyTypeFromString(operatorKeyInput);
24
- return {
25
- keyType: detected.detectedType,
26
- privateKey: detected.privateKey
27
- };
28
- } catch {
29
- return {
30
- keyType: "ecdsa",
31
- privateKey: PrivateKey.fromStringECDSA(operatorKeyInput)
32
- };
33
- }
34
- }
35
- /**
36
- * Resolve an operator key using Mirror Node for key type when possible.
37
- * - If PrivateKey: return immediately.
38
- * - If explicitType: parse directly.
39
- * - Else: query Mirror Node; fallback to local detection.
40
- */
41
- async resolveOperatorKey(operatorId, operatorKeyInput, explicitType) {
42
- if (typeof operatorKeyInput !== "string") {
43
- return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
44
- }
45
- if (explicitType) {
46
- const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
47
- return { keyType: explicitType, privateKey: pk };
48
- }
49
- const account = typeof operatorId === "string" ? operatorId : operatorId.toString();
50
- try {
51
- const info = await this.mirror.requestAccount(account);
52
- const t = info?.key?._type || "";
53
- const keyType = t.includes("ED25519") ? "ed25519" : "ecdsa";
54
- const privateKey = keyType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
55
- return { keyType, privateKey };
56
- } catch {
57
- this.logger.warn(
58
- "Mirror node key detection failed; using local detection or default ECDSA"
59
- );
60
- return this.bestGuessOperatorKey(operatorKeyInput);
61
- }
62
- }
63
- /**
64
- * Resolve a supply key for the given token using Mirror Node token supply_key._type when possible.
65
- */
66
- async resolveSupplyKey(tokenId, keyInput, fallbackType, explicitType) {
67
- try {
68
- const info = await this.mirror.getTokenInfo(tokenId);
69
- const t = info?.supply_key?._type || "";
70
- if (typeof keyInput !== "string") {
71
- return keyInput;
72
- }
73
- if (explicitType) {
74
- return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
75
- }
76
- if (t.includes("ED25519")) {
77
- return PrivateKey.fromStringED25519(keyInput);
78
- }
79
- if (t.includes("ECDSA")) {
80
- return PrivateKey.fromStringECDSA(keyInput);
81
- }
82
- return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
83
- } catch {
84
- if (typeof keyInput !== "string") {
85
- return keyInput;
86
- }
87
- if (explicitType) {
88
- return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
89
- }
90
- return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
91
- }
92
- }
93
- }
94
- function createNodeOperatorContext(params) {
95
- const operatorId = typeof params.operatorId === "string" ? AccountId.fromString(params.operatorId) : params.operatorId;
96
- const client = params.client ? params.client : params.network === "mainnet" ? Client.forMainnet() : Client.forTestnet();
97
- const resolver = new NodeOperatorResolver({
98
- mirrorNode: params.mirrorNode,
99
- logger: params.logger
100
- });
101
- let currentKeyType;
102
- let currentPrivateKey;
103
- const guess = resolver.bestGuessOperatorKey(
104
- params.operatorKey,
105
- params.keyType
106
- );
107
- currentKeyType = guess.keyType;
108
- currentPrivateKey = guess.privateKey;
109
- client.setOperator(operatorId.toString(), currentPrivateKey);
110
- const initPromise = (async () => {
111
- try {
112
- const resolved = await resolver.resolveOperatorKey(
113
- operatorId,
114
- params.operatorKey,
115
- params.keyType
116
- );
117
- currentKeyType = resolved.keyType;
118
- currentPrivateKey = resolved.privateKey;
119
- client.setOperator(operatorId.toString(), currentPrivateKey);
120
- } catch {
121
- }
122
- })();
123
- return {
124
- client,
125
- operatorId,
126
- get operatorKey() {
127
- return currentPrivateKey;
128
- },
129
- get keyType() {
130
- return currentKeyType;
131
- },
132
- ensureInitialized: async () => {
133
- await initPromise;
134
- }
135
- };
136
- }
1
+ import { CanonicalAgentDataSchema, HCS14_PROTOCOL_REGEX } from "./standards-sdk.es55.js";
2
+ import { canonicalizeAgentData } from "./standards-sdk.es56.js";
3
+ import { createUaid, parseHcs14Did } from "./standards-sdk.es57.js";
4
+ import { isEip155Caip10, isHederaCaip10, isHederaNetwork, parseHederaCaip10, toEip155Caip10, toHederaCaip10 } from "./standards-sdk.es58.js";
5
+ import { ResolverRegistry, defaultResolverRegistry, registerDefaultResolvers } from "./standards-sdk.es59.js";
6
+ import { HieroDidResolver } from "./standards-sdk.es60.js";
7
+ import { HCS14Client } from "./standards-sdk.es61.js";
8
+ import { IssuerRegistry, defaultIssuerRegistry } from "./standards-sdk.es62.js";
9
+ import { HederaHieroIssuer } from "./standards-sdk.es63.js";
137
10
  export {
138
- NodeOperatorResolver,
139
- createNodeOperatorContext
11
+ CanonicalAgentDataSchema,
12
+ HCS14Client,
13
+ HCS14_PROTOCOL_REGEX,
14
+ HederaHieroIssuer,
15
+ HieroDidResolver,
16
+ IssuerRegistry,
17
+ ResolverRegistry,
18
+ canonicalizeAgentData,
19
+ createUaid,
20
+ defaultIssuerRegistry,
21
+ defaultResolverRegistry,
22
+ isEip155Caip10,
23
+ isHederaCaip10,
24
+ isHederaNetwork,
25
+ parseHcs14Did,
26
+ parseHederaCaip10,
27
+ registerDefaultResolvers,
28
+ toEip155Caip10,
29
+ toHederaCaip10
140
30
  };
141
31
  //# sourceMappingURL=standards-sdk.es135.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es135.js","sources":["../../src/common/node-operator-resolver.ts"],"sourcesContent":["import { AccountId, Client, PrivateKey } from '@hashgraph/sdk';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { ILogger } from '../utils/logger';\nimport { detectKeyTypeFromString } from '../utils/key-type-detector';\nimport { NetworkType } from '../utils/types';\n\n/**\n * Resolves operator and supply private keys using Mirror Node as source of truth\n * with format-detection fallbacks for string keys.\n */\nexport class NodeOperatorResolver {\n private readonly mirror: HederaMirrorNode;\n private readonly logger: ILogger;\n\n constructor(params: { mirrorNode: HederaMirrorNode; logger: ILogger }) {\n this.mirror = params.mirrorNode;\n this.logger = params.logger;\n }\n\n /**\n * Best-guess parsing for an operator key without network calls.\n * - If PrivateKey: returns immediately with provided or fallback type.\n * - If string with explicitType: parse directly.\n * - If string without type: detect format; fallback to ECDSA.\n */\n bestGuessOperatorKey(\n operatorKeyInput: string | PrivateKey,\n explicitType?: 'ed25519' | 'ecdsa',\n ): { keyType: 'ed25519' | 'ecdsa'; privateKey: PrivateKey } {\n if (typeof operatorKeyInput !== 'string') {\n return { keyType: explicitType || 'ecdsa', privateKey: operatorKeyInput };\n }\n if (explicitType) {\n const pk =\n explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType: explicitType, privateKey: pk };\n }\n try {\n const detected = detectKeyTypeFromString(operatorKeyInput);\n return {\n keyType: detected.detectedType,\n privateKey: detected.privateKey,\n };\n } catch {\n return {\n keyType: 'ecdsa',\n privateKey: PrivateKey.fromStringECDSA(operatorKeyInput),\n };\n }\n }\n\n /**\n * Resolve an operator key using Mirror Node for key type when possible.\n * - If PrivateKey: return immediately.\n * - If explicitType: parse directly.\n * - Else: query Mirror Node; fallback to local detection.\n */\n async resolveOperatorKey(\n operatorId: string | AccountId,\n operatorKeyInput: string | PrivateKey,\n explicitType?: 'ed25519' | 'ecdsa',\n ): Promise<{ keyType: 'ed25519' | 'ecdsa'; privateKey: PrivateKey }> {\n if (typeof operatorKeyInput !== 'string') {\n return { keyType: explicitType || 'ecdsa', privateKey: operatorKeyInput };\n }\n if (explicitType) {\n const pk =\n explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType: explicitType, privateKey: pk };\n }\n const account =\n typeof operatorId === 'string' ? operatorId : operatorId.toString();\n try {\n const info = await this.mirror.requestAccount(account);\n const t = info?.key?._type || '';\n const keyType: 'ed25519' | 'ecdsa' = t.includes('ED25519')\n ? 'ed25519'\n : 'ecdsa';\n const privateKey =\n keyType === 'ed25519'\n ? PrivateKey.fromStringED25519(operatorKeyInput)\n : PrivateKey.fromStringECDSA(operatorKeyInput);\n return { keyType, privateKey };\n } catch {\n this.logger.warn(\n 'Mirror node key detection failed; using local detection or default ECDSA',\n );\n return this.bestGuessOperatorKey(operatorKeyInput);\n }\n }\n\n /**\n * Resolve a supply key for the given token using Mirror Node token supply_key._type when possible.\n */\n async resolveSupplyKey(\n tokenId: string,\n keyInput: string | PrivateKey,\n fallbackType: 'ed25519' | 'ecdsa',\n explicitType?: 'ed25519' | 'ecdsa',\n ): Promise<PrivateKey> {\n try {\n const info = await this.mirror.getTokenInfo(tokenId);\n const t = info?.supply_key?._type || '';\n if (typeof keyInput !== 'string') {\n return keyInput;\n }\n if (explicitType) {\n return explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n if (t.includes('ED25519')) {\n return PrivateKey.fromStringED25519(keyInput);\n }\n if (t.includes('ECDSA')) {\n return PrivateKey.fromStringECDSA(keyInput);\n }\n return fallbackType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n } catch {\n if (typeof keyInput !== 'string') {\n return keyInput;\n }\n if (explicitType) {\n return explicitType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n return fallbackType === 'ed25519'\n ? PrivateKey.fromStringED25519(keyInput)\n : PrivateKey.fromStringECDSA(keyInput);\n }\n }\n}\n\nexport interface NodeOperatorInitParams {\n network: NetworkType;\n operatorId: string | AccountId;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n mirrorNode: HederaMirrorNode;\n logger: ILogger;\n client?: Client;\n}\n\nexport interface NodeOperatorContext {\n client: Client;\n operatorId: AccountId;\n readonly operatorKey: PrivateKey;\n readonly keyType: 'ed25519' | 'ecdsa';\n ensureInitialized(): Promise<void>;\n}\n\nexport function createNodeOperatorContext(\n params: NodeOperatorInitParams,\n): NodeOperatorContext {\n const operatorId: AccountId =\n typeof params.operatorId === 'string'\n ? AccountId.fromString(params.operatorId)\n : params.operatorId;\n\n const client: Client = params.client\n ? params.client\n : params.network === 'mainnet'\n ? Client.forMainnet()\n : Client.forTestnet();\n\n const resolver = new NodeOperatorResolver({\n mirrorNode: params.mirrorNode,\n logger: params.logger,\n });\n\n let currentKeyType: 'ed25519' | 'ecdsa';\n let currentPrivateKey: PrivateKey;\n\n const guess = resolver.bestGuessOperatorKey(\n params.operatorKey,\n params.keyType,\n );\n currentKeyType = guess.keyType;\n currentPrivateKey = guess.privateKey;\n client.setOperator(operatorId.toString(), currentPrivateKey);\n\n const initPromise = (async () => {\n try {\n const resolved = await resolver.resolveOperatorKey(\n operatorId,\n params.operatorKey,\n params.keyType,\n );\n currentKeyType = resolved.keyType;\n currentPrivateKey = resolved.privateKey;\n client.setOperator(operatorId.toString(), currentPrivateKey);\n } catch {}\n })();\n\n return {\n client,\n operatorId,\n get operatorKey() {\n return currentPrivateKey;\n },\n get keyType() {\n return currentKeyType;\n },\n ensureInitialized: async () => {\n await initPromise;\n },\n };\n}\n"],"names":[],"mappings":";;AAUO,MAAM,qBAAqB;AAAA,EAIhC,YAAY,QAA2D;AACrE,SAAK,SAAS,OAAO;AACrB,SAAK,SAAS,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBACE,kBACA,cAC0D;AAC1D,QAAI,OAAO,qBAAqB,UAAU;AACxC,aAAO,EAAE,SAAS,gBAAgB,SAAS,YAAY,iBAAA;AAAA,IACzD;AACA,QAAI,cAAc;AAChB,YAAM,KACJ,iBAAiB,YACb,WAAW,kBAAkB,gBAAgB,IAC7C,WAAW,gBAAgB,gBAAgB;AACjD,aAAO,EAAE,SAAS,cAAc,YAAY,GAAA;AAAA,IAC9C;AACA,QAAI;AACF,YAAM,WAAW,wBAAwB,gBAAgB;AACzD,aAAO;AAAA,QACL,SAAS,SAAS;AAAA,QAClB,YAAY,SAAS;AAAA,MAAA;AAAA,IAEzB,QAAQ;AACN,aAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY,WAAW,gBAAgB,gBAAgB;AAAA,MAAA;AAAA,IAE3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,mBACJ,YACA,kBACA,cACmE;AACnE,QAAI,OAAO,qBAAqB,UAAU;AACxC,aAAO,EAAE,SAAS,gBAAgB,SAAS,YAAY,iBAAA;AAAA,IACzD;AACA,QAAI,cAAc;AAChB,YAAM,KACJ,iBAAiB,YACb,WAAW,kBAAkB,gBAAgB,IAC7C,WAAW,gBAAgB,gBAAgB;AACjD,aAAO,EAAE,SAAS,cAAc,YAAY,GAAA;AAAA,IAC9C;AACA,UAAM,UACJ,OAAO,eAAe,WAAW,aAAa,WAAW,SAAA;AAC3D,QAAI;AACF,YAAM,OAAO,MAAM,KAAK,OAAO,eAAe,OAAO;AACrD,YAAM,IAAI,MAAM,KAAK,SAAS;AAC9B,YAAM,UAA+B,EAAE,SAAS,SAAS,IACrD,YACA;AACJ,YAAM,aACJ,YAAY,YACR,WAAW,kBAAkB,gBAAgB,IAC7C,WAAW,gBAAgB,gBAAgB;AACjD,aAAO,EAAE,SAAS,WAAA;AAAA,IACpB,QAAQ;AACN,WAAK,OAAO;AAAA,QACV;AAAA,MAAA;AAEF,aAAO,KAAK,qBAAqB,gBAAgB;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBACJ,SACA,UACA,cACA,cACqB;AACrB,QAAI;AACF,YAAM,OAAO,MAAM,KAAK,OAAO,aAAa,OAAO;AACnD,YAAM,IAAI,MAAM,YAAY,SAAS;AACrC,UAAI,OAAO,aAAa,UAAU;AAChC,eAAO;AAAA,MACT;AACA,UAAI,cAAc;AAChB,eAAO,iBAAiB,YACpB,WAAW,kBAAkB,QAAQ,IACrC,WAAW,gBAAgB,QAAQ;AAAA,MACzC;AACA,UAAI,EAAE,SAAS,SAAS,GAAG;AACzB,eAAO,WAAW,kBAAkB,QAAQ;AAAA,MAC9C;AACA,UAAI,EAAE,SAAS,OAAO,GAAG;AACvB,eAAO,WAAW,gBAAgB,QAAQ;AAAA,MAC5C;AACA,aAAO,iBAAiB,YACpB,WAAW,kBAAkB,QAAQ,IACrC,WAAW,gBAAgB,QAAQ;AAAA,IACzC,QAAQ;AACN,UAAI,OAAO,aAAa,UAAU;AAChC,eAAO;AAAA,MACT;AACA,UAAI,cAAc;AAChB,eAAO,iBAAiB,YACpB,WAAW,kBAAkB,QAAQ,IACrC,WAAW,gBAAgB,QAAQ;AAAA,MACzC;AACA,aAAO,iBAAiB,YACpB,WAAW,kBAAkB,QAAQ,IACrC,WAAW,gBAAgB,QAAQ;AAAA,IACzC;AAAA,EACF;AACF;AAoBO,SAAS,0BACd,QACqB;AACrB,QAAM,aACJ,OAAO,OAAO,eAAe,WACzB,UAAU,WAAW,OAAO,UAAU,IACtC,OAAO;AAEb,QAAM,SAAiB,OAAO,SAC1B,OAAO,SACP,OAAO,YAAY,YACjB,OAAO,WAAA,IACP,OAAO,WAAA;AAEb,QAAM,WAAW,IAAI,qBAAqB;AAAA,IACxC,YAAY,OAAO;AAAA,IACnB,QAAQ,OAAO;AAAA,EAAA,CAChB;AAED,MAAI;AACJ,MAAI;AAEJ,QAAM,QAAQ,SAAS;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,EAAA;AAET,mBAAiB,MAAM;AACvB,sBAAoB,MAAM;AAC1B,SAAO,YAAY,WAAW,SAAA,GAAY,iBAAiB;AAE3D,QAAM,eAAe,YAAY;AAC/B,QAAI;AACF,YAAM,WAAW,MAAM,SAAS;AAAA,QAC9B;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,MAAA;AAET,uBAAiB,SAAS;AAC1B,0BAAoB,SAAS;AAC7B,aAAO,YAAY,WAAW,SAAA,GAAY,iBAAiB;AAAA,IAC7D,QAAQ;AAAA,IAAC;AAAA,EACX,GAAA;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,IAAI,cAAc;AAChB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAAA,IACA,mBAAmB,YAAY;AAC7B,YAAM;AAAA,IACR;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"standards-sdk.es135.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -1,45 +1,141 @@
1
- import { TopicMessageSubmitTransaction, TopicId, TopicCreateTransaction, PublicKey, KeyList } from "@hashgraph/sdk";
2
- function encodeHcs2RegistryMemo(indexedFlag, ttl) {
3
- return `hcs-2:${indexedFlag}:${ttl}`;
4
- }
5
- function buildTopicCreateTx(params) {
6
- const { memo, adminKey, submitKey, operatorPublicKey } = params;
7
- const tx = new TopicCreateTransaction().setTopicMemo(memo);
8
- const coerceKey = (k) => {
9
- if (!k) return void 0;
10
- if (k instanceof PublicKey || k instanceof KeyList) return k;
11
- if (typeof k === "boolean") {
12
- return k ? operatorPublicKey : void 0;
13
- }
14
- if (typeof k === "string") {
15
- try {
16
- return PublicKey.fromString(k);
17
- } catch {
18
- return void 0;
19
- }
1
+ import { AccountId, Client, PrivateKey } from "@hashgraph/sdk";
2
+ import { detectKeyTypeFromString } from "./standards-sdk.es114.js";
3
+ class NodeOperatorResolver {
4
+ constructor(params) {
5
+ this.mirror = params.mirrorNode;
6
+ this.logger = params.logger;
7
+ }
8
+ /**
9
+ * Best-guess parsing for an operator key without network calls.
10
+ * - If PrivateKey: returns immediately with provided or fallback type.
11
+ * - If string with explicitType: parse directly.
12
+ * - If string without type: detect format; fallback to ECDSA.
13
+ */
14
+ bestGuessOperatorKey(operatorKeyInput, explicitType) {
15
+ if (typeof operatorKeyInput !== "string") {
16
+ return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
17
+ }
18
+ if (explicitType) {
19
+ const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
20
+ return { keyType: explicitType, privateKey: pk };
21
+ }
22
+ try {
23
+ const detected = detectKeyTypeFromString(operatorKeyInput);
24
+ return {
25
+ keyType: detected.detectedType,
26
+ privateKey: detected.privateKey
27
+ };
28
+ } catch {
29
+ return {
30
+ keyType: "ecdsa",
31
+ privateKey: PrivateKey.fromStringECDSA(operatorKeyInput)
32
+ };
20
33
  }
21
- return void 0;
22
- };
23
- const admin = coerceKey(adminKey);
24
- if (admin) {
25
- tx.setAdminKey(admin);
26
34
  }
27
- const submit = coerceKey(submitKey);
28
- if (submit) {
29
- tx.setSubmitKey(submit);
35
+ /**
36
+ * Resolve an operator key using Mirror Node for key type when possible.
37
+ * - If PrivateKey: return immediately.
38
+ * - If explicitType: parse directly.
39
+ * - Else: query Mirror Node; fallback to local detection.
40
+ */
41
+ async resolveOperatorKey(operatorId, operatorKeyInput, explicitType) {
42
+ if (typeof operatorKeyInput !== "string") {
43
+ return { keyType: explicitType || "ecdsa", privateKey: operatorKeyInput };
44
+ }
45
+ if (explicitType) {
46
+ const pk = explicitType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
47
+ return { keyType: explicitType, privateKey: pk };
48
+ }
49
+ const account = typeof operatorId === "string" ? operatorId : operatorId.toString();
50
+ try {
51
+ const info = await this.mirror.requestAccount(account);
52
+ const t = info?.key?._type || "";
53
+ const keyType = t.includes("ED25519") ? "ed25519" : "ecdsa";
54
+ const privateKey = keyType === "ed25519" ? PrivateKey.fromStringED25519(operatorKeyInput) : PrivateKey.fromStringECDSA(operatorKeyInput);
55
+ return { keyType, privateKey };
56
+ } catch {
57
+ this.logger.warn(
58
+ "Mirror node key detection failed; using local detection or default ECDSA"
59
+ );
60
+ return this.bestGuessOperatorKey(operatorKeyInput);
61
+ }
30
62
  }
31
- return tx;
32
- }
33
- function buildMessageTx(params) {
34
- const tx = new TopicMessageSubmitTransaction().setTopicId(TopicId.fromString(params.topicId)).setMessage(params.message);
35
- if (params.transactionMemo) {
36
- tx.setTransactionMemo(params.transactionMemo);
63
+ /**
64
+ * Resolve a supply key for the given token using Mirror Node token supply_key._type when possible.
65
+ */
66
+ async resolveSupplyKey(tokenId, keyInput, fallbackType, explicitType) {
67
+ try {
68
+ const info = await this.mirror.getTokenInfo(tokenId);
69
+ const t = info?.supply_key?._type || "";
70
+ if (typeof keyInput !== "string") {
71
+ return keyInput;
72
+ }
73
+ if (explicitType) {
74
+ return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
75
+ }
76
+ if (t.includes("ED25519")) {
77
+ return PrivateKey.fromStringED25519(keyInput);
78
+ }
79
+ if (t.includes("ECDSA")) {
80
+ return PrivateKey.fromStringECDSA(keyInput);
81
+ }
82
+ return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
83
+ } catch {
84
+ if (typeof keyInput !== "string") {
85
+ return keyInput;
86
+ }
87
+ if (explicitType) {
88
+ return explicitType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
89
+ }
90
+ return fallbackType === "ed25519" ? PrivateKey.fromStringED25519(keyInput) : PrivateKey.fromStringECDSA(keyInput);
91
+ }
37
92
  }
38
- return tx;
93
+ }
94
+ function createNodeOperatorContext(params) {
95
+ const operatorId = typeof params.operatorId === "string" ? AccountId.fromString(params.operatorId) : params.operatorId;
96
+ const client = params.client ? params.client : params.network === "mainnet" ? Client.forMainnet() : Client.forTestnet();
97
+ const resolver = new NodeOperatorResolver({
98
+ mirrorNode: params.mirrorNode,
99
+ logger: params.logger
100
+ });
101
+ let currentKeyType;
102
+ let currentPrivateKey;
103
+ const guess = resolver.bestGuessOperatorKey(
104
+ params.operatorKey,
105
+ params.keyType
106
+ );
107
+ currentKeyType = guess.keyType;
108
+ currentPrivateKey = guess.privateKey;
109
+ client.setOperator(operatorId.toString(), currentPrivateKey);
110
+ const initPromise = (async () => {
111
+ try {
112
+ const resolved = await resolver.resolveOperatorKey(
113
+ operatorId,
114
+ params.operatorKey,
115
+ params.keyType
116
+ );
117
+ currentKeyType = resolved.keyType;
118
+ currentPrivateKey = resolved.privateKey;
119
+ client.setOperator(operatorId.toString(), currentPrivateKey);
120
+ } catch {
121
+ }
122
+ })();
123
+ return {
124
+ client,
125
+ operatorId,
126
+ get operatorKey() {
127
+ return currentPrivateKey;
128
+ },
129
+ get keyType() {
130
+ return currentKeyType;
131
+ },
132
+ ensureInitialized: async () => {
133
+ await initPromise;
134
+ }
135
+ };
39
136
  }
40
137
  export {
41
- buildMessageTx,
42
- buildTopicCreateTx,
43
- encodeHcs2RegistryMemo
138
+ NodeOperatorResolver,
139
+ createNodeOperatorContext
44
140
  };
45
141
  //# sourceMappingURL=standards-sdk.es136.js.map