@hashgraphonline/standards-sdk 0.1.187 → 0.1.188

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 (212) hide show
  1. package/dist/browser/services/registry-broker/client/agent-network.d.ts +974 -0
  2. package/dist/browser/services/registry-broker/client/agent-network.d.ts.map +1 -0
  3. package/dist/browser/services/registry-broker/client/base-client.d.ts +4 -0
  4. package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
  5. package/dist/browser/services/registry-broker/client.d.ts +1 -0
  6. package/dist/browser/services/registry-broker/client.d.ts.map +1 -1
  7. package/dist/browser/standards-sdk.browser.js +149 -0
  8. package/dist/browser/standards-sdk.browser.js.map +1 -1
  9. package/dist/browser-root/services/registry-broker/client/agent-network.d.ts +974 -0
  10. package/dist/browser-root/services/registry-broker/client/agent-network.d.ts.map +1 -0
  11. package/dist/browser-root/services/registry-broker/client/base-client.d.ts +4 -0
  12. package/dist/browser-root/services/registry-broker/client/base-client.d.ts.map +1 -1
  13. package/dist/browser-root/services/registry-broker/client.d.ts +1 -0
  14. package/dist/browser-root/services/registry-broker/client.d.ts.map +1 -1
  15. package/dist/browser-root/standards-sdk.root-browser.js +404 -15
  16. package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
  17. package/dist/cjs/services/registry-broker/client/agent-network.d.ts +974 -0
  18. package/dist/cjs/services/registry-broker/client/agent-network.d.ts.map +1 -0
  19. package/dist/cjs/services/registry-broker/client/base-client.d.ts +4 -0
  20. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  21. package/dist/cjs/services/registry-broker/client.d.ts +1 -0
  22. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  23. package/dist/cjs/standards-sdk.cjs +2 -2
  24. package/dist/cjs/standards-sdk.cjs.map +1 -1
  25. package/dist/es/services/registry-broker/client/agent-network.d.ts +974 -0
  26. package/dist/es/services/registry-broker/client/agent-network.d.ts.map +1 -0
  27. package/dist/es/services/registry-broker/client/base-client.d.ts +4 -0
  28. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  29. package/dist/es/services/registry-broker/client.d.ts +1 -0
  30. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  31. package/dist/es/standards-sdk.es.js +50 -27
  32. package/dist/es/standards-sdk.es.js.map +1 -1
  33. package/dist/es/standards-sdk.es104.js +1 -1
  34. package/dist/es/standards-sdk.es106.js +1 -1
  35. package/dist/es/standards-sdk.es108.js +1 -1
  36. package/dist/es/standards-sdk.es11.js +1 -1
  37. package/dist/es/standards-sdk.es110.js +1 -1
  38. package/dist/es/standards-sdk.es116.js +2 -2
  39. package/dist/es/standards-sdk.es12.js +1 -1
  40. package/dist/es/standards-sdk.es120.js +4 -4
  41. package/dist/es/standards-sdk.es121.js +11 -11
  42. package/dist/es/standards-sdk.es126.js +1 -1
  43. package/dist/es/standards-sdk.es132.js +3 -2
  44. package/dist/es/standards-sdk.es132.js.map +1 -1
  45. package/dist/es/standards-sdk.es133.js +5 -5
  46. package/dist/es/standards-sdk.es143.js +1 -1
  47. package/dist/es/standards-sdk.es144.js +1 -1
  48. package/dist/es/standards-sdk.es145.js +5 -5
  49. package/dist/es/standards-sdk.es147.js +3 -3
  50. package/dist/es/standards-sdk.es148.js +1 -1
  51. package/dist/es/standards-sdk.es150.js +24 -15
  52. package/dist/es/standards-sdk.es150.js.map +1 -1
  53. package/dist/es/standards-sdk.es152.js +372 -248
  54. package/dist/es/standards-sdk.es152.js.map +1 -1
  55. package/dist/es/standards-sdk.es153.js +259 -4
  56. package/dist/es/standards-sdk.es153.js.map +1 -1
  57. package/dist/es/standards-sdk.es154.js +4 -81
  58. package/dist/es/standards-sdk.es154.js.map +1 -1
  59. package/dist/es/standards-sdk.es155.js +71 -77
  60. package/dist/es/standards-sdk.es155.js.map +1 -1
  61. package/dist/es/standards-sdk.es156.js +80 -53
  62. package/dist/es/standards-sdk.es156.js.map +1 -1
  63. package/dist/es/standards-sdk.es157.js +59 -2546
  64. package/dist/es/standards-sdk.es157.js.map +1 -1
  65. package/dist/es/standards-sdk.es158.js +2547 -159
  66. package/dist/es/standards-sdk.es158.js.map +1 -1
  67. package/dist/es/standards-sdk.es159.js +159 -7
  68. package/dist/es/standards-sdk.es159.js.map +1 -1
  69. package/dist/es/standards-sdk.es16.js +3 -2
  70. package/dist/es/standards-sdk.es16.js.map +1 -1
  71. package/dist/es/standards-sdk.es160.js +7 -86
  72. package/dist/es/standards-sdk.es160.js.map +1 -1
  73. package/dist/es/standards-sdk.es161.js +64 -43
  74. package/dist/es/standards-sdk.es161.js.map +1 -1
  75. package/dist/es/standards-sdk.es162.js +57 -186
  76. package/dist/es/standards-sdk.es162.js.map +1 -1
  77. package/dist/es/standards-sdk.es163.js +188 -20
  78. package/dist/es/standards-sdk.es163.js.map +1 -1
  79. package/dist/es/standards-sdk.es164.js +22 -54
  80. package/dist/es/standards-sdk.es164.js.map +1 -1
  81. package/dist/es/standards-sdk.es165.js +41 -78
  82. package/dist/es/standards-sdk.es165.js.map +1 -1
  83. package/dist/es/standards-sdk.es166.js +81 -35
  84. package/dist/es/standards-sdk.es166.js.map +1 -1
  85. package/dist/es/standards-sdk.es167.js +36 -191
  86. package/dist/es/standards-sdk.es167.js.map +1 -1
  87. package/dist/es/standards-sdk.es168.js +191 -43
  88. package/dist/es/standards-sdk.es168.js.map +1 -1
  89. package/dist/es/standards-sdk.es169.js +46 -39
  90. package/dist/es/standards-sdk.es169.js.map +1 -1
  91. package/dist/es/standards-sdk.es170.js +37 -44
  92. package/dist/es/standards-sdk.es170.js.map +1 -1
  93. package/dist/es/standards-sdk.es171.js +46 -39
  94. package/dist/es/standards-sdk.es171.js.map +1 -1
  95. package/dist/es/standards-sdk.es172.js +29 -102
  96. package/dist/es/standards-sdk.es172.js.map +1 -1
  97. package/dist/es/standards-sdk.es173.js +104 -36
  98. package/dist/es/standards-sdk.es173.js.map +1 -1
  99. package/dist/es/standards-sdk.es174.js +43 -33
  100. package/dist/es/standards-sdk.es174.js.map +1 -1
  101. package/dist/es/standards-sdk.es175.js +44 -72
  102. package/dist/es/standards-sdk.es175.js.map +1 -1
  103. package/dist/es/standards-sdk.es176.js +65 -61
  104. package/dist/es/standards-sdk.es176.js.map +1 -1
  105. package/dist/es/standards-sdk.es177.js +63 -39
  106. package/dist/es/standards-sdk.es177.js.map +1 -1
  107. package/dist/es/standards-sdk.es178.js +44 -36
  108. package/dist/es/standards-sdk.es178.js.map +1 -1
  109. package/dist/es/standards-sdk.es179.js +36 -30
  110. package/dist/es/standards-sdk.es179.js.map +1 -1
  111. package/dist/es/standards-sdk.es18.js +6 -5
  112. package/dist/es/standards-sdk.es18.js.map +1 -1
  113. package/dist/es/standards-sdk.es180.js +30 -34
  114. package/dist/es/standards-sdk.es180.js.map +1 -1
  115. package/dist/es/standards-sdk.es181.js +34 -48
  116. package/dist/es/standards-sdk.es181.js.map +1 -1
  117. package/dist/es/standards-sdk.es182.js +48 -138
  118. package/dist/es/standards-sdk.es182.js.map +1 -1
  119. package/dist/es/standards-sdk.es183.js +133 -37
  120. package/dist/es/standards-sdk.es183.js.map +1 -1
  121. package/dist/es/standards-sdk.es184.js +34 -12474
  122. package/dist/es/standards-sdk.es184.js.map +1 -1
  123. package/dist/es/standards-sdk.es185.js +12425 -615
  124. package/dist/es/standards-sdk.es185.js.map +1 -1
  125. package/dist/es/standards-sdk.es186.js +47 -102
  126. package/dist/es/standards-sdk.es186.js.map +1 -1
  127. package/dist/es/standards-sdk.es187.js +96 -58
  128. package/dist/es/standards-sdk.es187.js.map +1 -1
  129. package/dist/es/standards-sdk.es188.js +73 -48
  130. package/dist/es/standards-sdk.es188.js.map +1 -1
  131. package/dist/es/standards-sdk.es189.js +180 -61
  132. package/dist/es/standards-sdk.es189.js.map +1 -1
  133. package/dist/es/standards-sdk.es19.js +4 -3
  134. package/dist/es/standards-sdk.es19.js.map +1 -1
  135. package/dist/es/standards-sdk.es190.js +14 -197
  136. package/dist/es/standards-sdk.es190.js.map +1 -1
  137. package/dist/es/standards-sdk.es191.js +658 -158
  138. package/dist/es/standards-sdk.es191.js.map +1 -1
  139. package/dist/es/standards-sdk.es192.js +139 -289
  140. package/dist/es/standards-sdk.es192.js.map +1 -1
  141. package/dist/es/standards-sdk.es193.js +274 -298
  142. package/dist/es/standards-sdk.es193.js.map +1 -1
  143. package/dist/es/standards-sdk.es194.js +262 -369
  144. package/dist/es/standards-sdk.es194.js.map +1 -1
  145. package/dist/es/standards-sdk.es195.js +316 -194
  146. package/dist/es/standards-sdk.es195.js.map +1 -1
  147. package/dist/es/standards-sdk.es196.js +319 -64
  148. package/dist/es/standards-sdk.es196.js.map +1 -1
  149. package/dist/es/standards-sdk.es197.js +74 -15
  150. package/dist/es/standards-sdk.es197.js.map +1 -1
  151. package/dist/es/standards-sdk.es198.js +60 -126
  152. package/dist/es/standards-sdk.es198.js.map +1 -1
  153. package/dist/es/standards-sdk.es199.js +104 -482
  154. package/dist/es/standards-sdk.es199.js.map +1 -1
  155. package/dist/es/standards-sdk.es200.js +480 -222
  156. package/dist/es/standards-sdk.es200.js.map +1 -1
  157. package/dist/es/standards-sdk.es201.js +239 -176
  158. package/dist/es/standards-sdk.es201.js.map +1 -1
  159. package/dist/es/standards-sdk.es202.js +178 -101
  160. package/dist/es/standards-sdk.es202.js.map +1 -1
  161. package/dist/es/standards-sdk.es203.js +75 -108
  162. package/dist/es/standards-sdk.es203.js.map +1 -1
  163. package/dist/es/standards-sdk.es204.js +116 -148
  164. package/dist/es/standards-sdk.es204.js.map +1 -1
  165. package/dist/es/standards-sdk.es205.js +146 -646
  166. package/dist/es/standards-sdk.es205.js.map +1 -1
  167. package/dist/es/standards-sdk.es206.js +661 -162
  168. package/dist/es/standards-sdk.es206.js.map +1 -1
  169. package/dist/es/standards-sdk.es207.js +156 -206
  170. package/dist/es/standards-sdk.es207.js.map +1 -1
  171. package/dist/es/standards-sdk.es208.js +219 -223
  172. package/dist/es/standards-sdk.es208.js.map +1 -1
  173. package/dist/es/standards-sdk.es209.js +242 -0
  174. package/dist/es/standards-sdk.es209.js.map +1 -0
  175. package/dist/es/standards-sdk.es22.js +1 -1
  176. package/dist/es/standards-sdk.es27.js +6 -5
  177. package/dist/es/standards-sdk.es27.js.map +1 -1
  178. package/dist/es/standards-sdk.es30.js +1 -1
  179. package/dist/es/standards-sdk.es31.js +1 -1
  180. package/dist/es/standards-sdk.es35.js +4 -3
  181. package/dist/es/standards-sdk.es35.js.map +1 -1
  182. package/dist/es/standards-sdk.es36.js +3 -3
  183. package/dist/es/standards-sdk.es37.js +1 -1
  184. package/dist/es/standards-sdk.es4.js +1 -1
  185. package/dist/es/standards-sdk.es53.js +1 -1
  186. package/dist/es/standards-sdk.es56.js +1 -1
  187. package/dist/es/standards-sdk.es59.js +1 -1
  188. package/dist/es/standards-sdk.es60.js +1 -1
  189. package/dist/es/standards-sdk.es62.js +1 -1
  190. package/dist/es/standards-sdk.es63.js +2 -2
  191. package/dist/es/standards-sdk.es64.js +1 -1
  192. package/dist/es/standards-sdk.es65.js +1 -1
  193. package/dist/es/standards-sdk.es66.js +1 -1
  194. package/dist/es/standards-sdk.es67.js +4 -3
  195. package/dist/es/standards-sdk.es67.js.map +1 -1
  196. package/dist/es/standards-sdk.es69.js +1 -1
  197. package/dist/es/standards-sdk.es7.js +1 -1
  198. package/dist/es/standards-sdk.es71.js +1 -1
  199. package/dist/es/standards-sdk.es72.js +2 -2
  200. package/dist/es/standards-sdk.es75.js +3 -3
  201. package/dist/es/standards-sdk.es76.js +1 -1
  202. package/dist/es/standards-sdk.es78.js +1 -1
  203. package/dist/es/standards-sdk.es83.js +1 -1
  204. package/dist/es/standards-sdk.es84.js +3 -2
  205. package/dist/es/standards-sdk.es84.js.map +1 -1
  206. package/dist/es/standards-sdk.es85.js +1 -1
  207. package/dist/es/standards-sdk.es88.js +1 -1
  208. package/dist/es/standards-sdk.es90.js +1 -1
  209. package/dist/es/standards-sdk.es94.js +3 -3
  210. package/dist/es/standards-sdk.es98.js +1 -1
  211. package/dist/es/standards-sdk.es99.js +1 -1
  212. package/package.json +1 -1
@@ -1,20 +1,79 @@
1
- import { Logger } from "./standards-sdk.es128.js";
2
- import { HederaMirrorNode } from "./standards-sdk.es149.js";
3
- class HCS5BaseClient {
4
- /**
5
- * Create a new HCS-5 base client
6
- */
7
- constructor(config) {
8
- this.network = config.network;
9
- this.logger = config.logger || Logger.getInstance({
10
- level: config.logLevel || "info",
11
- module: "HCS5Client",
12
- silent: config.silent
13
- });
14
- this.mirrorNode = new HederaMirrorNode(this.network, this.logger);
1
+ import { proto } from "@hashgraph/proto";
2
+ import { ContractId } from "@hashgraph/sdk";
3
+ import { Buffer } from "buffer";
4
+ function parseKey(key) {
5
+ if (!key) {
6
+ return void 0;
15
7
  }
8
+ if (key.contractID) {
9
+ return `ContractID: ${new ContractId(
10
+ key.contractID.shardNum ?? 0,
11
+ key.contractID.realmNum ?? 0,
12
+ key.contractID.contractNum ?? 0
13
+ ).toString()}`;
14
+ }
15
+ if (key.ed25519) {
16
+ return `ED25519: ${Buffer.from(key.ed25519).toString("hex")}`;
17
+ }
18
+ if (key.ECDSASecp256k1) {
19
+ return `ECDSA_secp256k1: ${Buffer.from(key.ECDSASecp256k1).toString(
20
+ "hex"
21
+ )}`;
22
+ }
23
+ if (key?.keyList?.keys?.length > 0) {
24
+ const keys = key.keyList.keys.map((k) => parseKey(k)).filter(Boolean);
25
+ return `KeyList (${keys.length} keys): [${keys.join(", ")}]`;
26
+ }
27
+ if (key?.thresholdKey?.keys?.keys?.length > 0) {
28
+ const keys = key.thresholdKey.keys.keys.map((k) => parseKey(k)).filter(Boolean);
29
+ return `ThresholdKey (${key.thresholdKey.threshold} of ${keys.length}): [${keys.join(", ")}]`;
30
+ }
31
+ if (key.delegatableContractId) {
32
+ return `DelegatableContractID: ${new ContractId(
33
+ key.delegatableContractId.shardNum ?? 0,
34
+ key.delegatableContractId.realmNum ?? 0,
35
+ key.delegatableContractId.contractNum ?? 0
36
+ ).toString()}`;
37
+ }
38
+ if (Object.keys(key).length === 0) {
39
+ return "Empty Key Structure";
40
+ }
41
+ return "Unknown or Unset Key Type";
42
+ }
43
+ function extractTransactionBody(transaction) {
44
+ try {
45
+ const bytes = transaction.toBytes ? transaction.toBytes() : void 0;
46
+ if (!bytes) {
47
+ return null;
48
+ }
49
+ const decoded = proto.TransactionList.decode(bytes);
50
+ if (!decoded.transactionList || decoded.transactionList.length === 0) {
51
+ return null;
52
+ }
53
+ const tx = decoded.transactionList[0];
54
+ if (tx.bodyBytes && tx.bodyBytes.length > 0) {
55
+ return proto.TransactionBody.decode(tx.bodyBytes);
56
+ }
57
+ if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
58
+ const signedTx = proto.SignedTransaction.decode(
59
+ tx.signedTransactionBytes
60
+ );
61
+ if (signedTx.bodyBytes) {
62
+ return proto.TransactionBody.decode(signedTx.bodyBytes);
63
+ }
64
+ }
65
+ return null;
66
+ } catch (error) {
67
+ return null;
68
+ }
69
+ }
70
+ function hasTransactionType(transaction, transactionField) {
71
+ const txBody = extractTransactionBody(transaction);
72
+ return !!(txBody && txBody[transactionField]);
16
73
  }
17
74
  export {
18
- HCS5BaseClient
75
+ extractTransactionBody,
76
+ hasTransactionType,
77
+ parseKey
19
78
  };
20
79
  //# sourceMappingURL=standards-sdk.es197.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es197.js","sources":["../../src/hcs-5/base-client.ts"],"sourcesContent":["import { Logger, ILogger } from '../utils/logger';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { HCS5ClientConfig } from './types';\nimport { NetworkType } from '../utils/types';\n\n/**\n * Base client for HCS-5 operations\n */\nexport abstract class HCS5BaseClient {\n protected logger: ILogger;\n protected mirrorNode: HederaMirrorNode;\n protected network: NetworkType;\n\n /**\n * Create a new HCS-5 base client\n */\n constructor(config: HCS5ClientConfig) {\n this.network = config.network;\n this.logger =\n config.logger ||\n Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS5Client',\n silent: config.silent,\n });\n\n this.mirrorNode = new HederaMirrorNode(this.network, this.logger);\n }\n}\n"],"names":[],"mappings":";;AAQO,MAAe,eAAe;AAAA;AAAA;AAAA;AAAA,EAQnC,YAAY,QAA0B;AACpC,SAAK,UAAU,OAAO;AACtB,SAAK,SACH,OAAO,UACP,OAAO,YAAY;AAAA,MACjB,OAAO,OAAO,YAAY;AAAA,MAC1B,QAAQ;AAAA,MACR,QAAQ,OAAO;AAAA,IAAA,CAChB;AAEH,SAAK,aAAa,IAAI,iBAAiB,KAAK,SAAS,KAAK,MAAM;AAAA,EAClE;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es197.js","sources":["../../src/utils/parsers/parser-utils.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { ContractId, Transaction } from '@hashgraph/sdk';\nimport { Buffer } from 'buffer';\n\nexport function parseKey(\n key: proto.IKey | null | undefined,\n): string | undefined {\n if (!key) {\n return undefined;\n }\n\n if (key.contractID) {\n return `ContractID: ${new ContractId(\n key.contractID.shardNum ?? 0,\n key.contractID.realmNum ?? 0,\n key.contractID.contractNum ?? 0,\n ).toString()}`;\n }\n if (key.ed25519) {\n return `ED25519: ${Buffer.from(key.ed25519).toString('hex')}`;\n }\n if (key.ECDSASecp256k1) {\n return `ECDSA_secp256k1: ${Buffer.from(key.ECDSASecp256k1).toString(\n 'hex',\n )}`;\n }\n if (key?.keyList?.keys?.length > 0) {\n const keys = key.keyList.keys.map(k => parseKey(k)).filter(Boolean);\n return `KeyList (${keys.length} keys): [${keys.join(', ')}]`;\n }\n if (key?.thresholdKey?.keys?.keys?.length > 0) {\n const keys = key.thresholdKey.keys.keys\n .map(k => parseKey(k))\n .filter(Boolean);\n return `ThresholdKey (${key.thresholdKey.threshold} of ${\n keys.length\n }): [${keys.join(', ')}]`;\n }\n if (key.delegatableContractId) {\n return `DelegatableContractID: ${new ContractId(\n key.delegatableContractId.shardNum ?? 0,\n key.delegatableContractId.realmNum ?? 0,\n key.delegatableContractId.contractNum ?? 0,\n ).toString()}`;\n }\n if (Object.keys(key).length === 0) {\n return 'Empty Key Structure';\n }\n\n return 'Unknown or Unset Key Type';\n}\n\n/**\n * Extract TransactionBody from Transaction object using protobuf parsing\n * This replaces fragile constructor name checking with reliable protobuf data\n */\nexport function extractTransactionBody(\n transaction: Transaction,\n): proto.ITransactionBody | null {\n try {\n const bytes = transaction.toBytes ? transaction.toBytes() : undefined;\n if (!bytes) {\n return null;\n }\n\n const decoded = proto.TransactionList.decode(bytes);\n if (!decoded.transactionList || decoded.transactionList.length === 0) {\n return null;\n }\n\n const tx = decoded.transactionList[0];\n\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n return proto.TransactionBody.decode(tx.bodyBytes);\n }\n\n if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {\n const signedTx = proto.SignedTransaction.decode(\n tx.signedTransactionBytes,\n );\n if (signedTx.bodyBytes) {\n return proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n return null;\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Check if transaction has specific transaction type using protobuf data\n * This replaces constructor name checking with reliable protobuf field detection\n */\nexport function hasTransactionType(\n transaction: Transaction,\n transactionField: keyof proto.ITransactionBody,\n): boolean {\n const txBody = extractTransactionBody(transaction);\n return !!(txBody && txBody[transactionField]);\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,SACd,KACoB;AACpB,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,MAAI,IAAI,YAAY;AAClB,WAAO,eAAe,IAAI;AAAA,MACxB,IAAI,WAAW,YAAY;AAAA,MAC3B,IAAI,WAAW,YAAY;AAAA,MAC3B,IAAI,WAAW,eAAe;AAAA,IAAA,EAC9B,UAAU;AAAA,EACd;AACA,MAAI,IAAI,SAAS;AACf,WAAO,YAAY,OAAO,KAAK,IAAI,OAAO,EAAE,SAAS,KAAK,CAAC;AAAA,EAC7D;AACA,MAAI,IAAI,gBAAgB;AACtB,WAAO,oBAAoB,OAAO,KAAK,IAAI,cAAc,EAAE;AAAA,MACzD;AAAA,IAAA,CACD;AAAA,EACH;AACA,MAAI,KAAK,SAAS,MAAM,SAAS,GAAG;AAClC,UAAM,OAAO,IAAI,QAAQ,KAAK,IAAI,CAAA,MAAK,SAAS,CAAC,CAAC,EAAE,OAAO,OAAO;AAClE,WAAO,YAAY,KAAK,MAAM,YAAY,KAAK,KAAK,IAAI,CAAC;AAAA,EAC3D;AACA,MAAI,KAAK,cAAc,MAAM,MAAM,SAAS,GAAG;AAC7C,UAAM,OAAO,IAAI,aAAa,KAAK,KAChC,IAAI,CAAA,MAAK,SAAS,CAAC,CAAC,EACpB,OAAO,OAAO;AACjB,WAAO,iBAAiB,IAAI,aAAa,SAAS,OAChD,KAAK,MACP,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,EACxB;AACA,MAAI,IAAI,uBAAuB;AAC7B,WAAO,0BAA0B,IAAI;AAAA,MACnC,IAAI,sBAAsB,YAAY;AAAA,MACtC,IAAI,sBAAsB,YAAY;AAAA,MACtC,IAAI,sBAAsB,eAAe;AAAA,IAAA,EACzC,UAAU;AAAA,EACd;AACA,MAAI,OAAO,KAAK,GAAG,EAAE,WAAW,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,SAAS,uBACd,aAC+B;AAC/B,MAAI;AACF,UAAM,QAAQ,YAAY,UAAU,YAAY,YAAY;AAC5D,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,MAAM,gBAAgB,OAAO,KAAK;AAClD,QAAI,CAAC,QAAQ,mBAAmB,QAAQ,gBAAgB,WAAW,GAAG;AACpE,aAAO;AAAA,IACT;AAEA,UAAM,KAAK,QAAQ,gBAAgB,CAAC;AAEpC,QAAI,GAAG,aAAa,GAAG,UAAU,SAAS,GAAG;AAC3C,aAAO,MAAM,gBAAgB,OAAO,GAAG,SAAS;AAAA,IAClD;AAEA,QAAI,GAAG,0BAA0B,GAAG,uBAAuB,SAAS,GAAG;AACrE,YAAM,WAAW,MAAM,kBAAkB;AAAA,QACvC,GAAG;AAAA,MAAA;AAEL,UAAI,SAAS,WAAW;AACtB,eAAO,MAAM,gBAAgB,OAAO,SAAS,SAAS;AAAA,MACxD;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACF;AAMO,SAAS,mBACd,aACA,kBACS;AACT,QAAM,SAAS,uBAAuB,WAAW;AACjD,SAAO,CAAC,EAAE,UAAU,OAAO,gBAAgB;AAC7C;"}
@@ -1,142 +1,76 @@
1
- import { Buffer } from "buffer";
2
- import { chatHistorySnapshotResponseSchema } from "./standards-sdk.es157.js";
3
- function identitiesMatch(a, b) {
4
- if (!a && !b) {
5
- return true;
6
- }
7
- if (!a || !b) {
8
- return false;
9
- }
10
- if (a.uaid && b.uaid && a.uaid.toLowerCase() === b.uaid.toLowerCase()) {
11
- return true;
12
- }
13
- if (a.ledgerAccountId && b.ledgerAccountId && a.ledgerAccountId.toLowerCase() === b.ledgerAccountId.toLowerCase()) {
14
- return true;
15
- }
16
- if (a.userId && b.userId && a.userId === b.userId) {
17
- return true;
18
- }
19
- if (a.email && b.email && a.email.toLowerCase() === b.email.toLowerCase()) {
20
- return true;
21
- }
22
- return false;
23
- }
24
- async function fetchHistorySnapshot(conversationContexts, client, sessionId, options) {
25
- if (!sessionId || sessionId.trim().length === 0) {
26
- throw new Error("sessionId is required to fetch chat history");
27
- }
28
- const raw = await client.requestJson(
29
- `/chat/session/${encodeURIComponent(sessionId)}/history`,
30
- {
31
- method: "GET"
32
- }
33
- );
34
- const snapshot = client.parseWithSchema(
35
- raw,
36
- chatHistorySnapshotResponseSchema,
37
- "chat history snapshot response"
38
- );
39
- return attachDecryptedHistory(
40
- conversationContexts,
41
- client,
42
- sessionId,
43
- snapshot,
44
- options
45
- );
1
+ import BigNumber from "bignumber.js";
2
+ const TINYBAR_DIVISOR = 1e8;
3
+ function safePositiveTransfers(transfers) {
4
+ if (!Array.isArray(transfers)) {
5
+ return [];
6
+ }
7
+ return transfers.filter(
8
+ (transfer) => typeof transfer.amount === "number" && transfer.amount > 0
9
+ ).map((transfer) => ({
10
+ account: transfer.account,
11
+ amountTinybar: transfer.amount
12
+ }));
46
13
  }
47
- function attachDecryptedHistory(conversationContexts, client, sessionId, snapshot, options) {
48
- const shouldDecrypt = options?.decrypt !== void 0 ? options.decrypt : client.encryptionOptions?.autoDecryptHistory === true;
49
- if (!shouldDecrypt) {
50
- return snapshot;
51
- }
52
- const requiresContext = snapshot.history.some(
53
- (entry) => Boolean(entry.cipherEnvelope)
54
- );
55
- if (!requiresContext) {
56
- return {
57
- ...snapshot,
58
- decryptedHistory: snapshot.history.map((entry) => ({
59
- entry,
60
- plaintext: entry.content
61
- }))
62
- };
14
+ function resolvePayerDebitTinybar(transfers, payerAccountId) {
15
+ if (!Array.isArray(transfers)) {
16
+ return null;
63
17
  }
64
- const context = resolveDecryptionContext(
65
- conversationContexts,
66
- client,
67
- sessionId,
68
- options
18
+ const payerDebit = transfers.find(
19
+ (transfer) => transfer.account === payerAccountId && typeof transfer.amount === "number" && transfer.amount < 0
69
20
  );
70
- if (!context) {
71
- throw new Error(
72
- "Unable to decrypt chat history: encryption context unavailable"
73
- );
21
+ if (!payerDebit || typeof payerDebit.amount !== "number") {
22
+ return null;
74
23
  }
75
- const decryptedHistory = snapshot.history.map((entry) => ({
76
- entry,
77
- plaintext: decryptHistoryEntryFromContext(client, entry, context)
78
- }));
79
- return { ...snapshot, decryptedHistory };
24
+ return Math.abs(payerDebit.amount);
80
25
  }
81
- function registerConversationContextForEncryption(conversationContexts, context) {
82
- const normalized = {
83
- sessionId: context.sessionId,
84
- sharedSecret: Buffer.from(context.sharedSecret),
85
- identity: context.identity ? { ...context.identity } : void 0
86
- };
87
- const entries = conversationContexts.get(context.sessionId) ?? [];
88
- const existingIndex = entries.findIndex(
89
- (existing) => identitiesMatch(existing.identity, normalized.identity)
90
- );
91
- if (existingIndex >= 0) {
92
- entries[existingIndex] = normalized;
93
- } else {
94
- entries.push(normalized);
95
- }
96
- conversationContexts.set(context.sessionId, entries);
26
+ function toHbarString(tinybar) {
27
+ return new BigNumber(tinybar).dividedBy(TINYBAR_DIVISOR).toFixed();
97
28
  }
98
- function resolveDecryptionContext(conversationContexts, client, sessionId, options) {
99
- if (options?.sharedSecret) {
100
- return {
101
- sessionId,
102
- sharedSecret: client.normalizeSharedSecret(options.sharedSecret),
103
- identity: options.identity
104
- };
105
- }
106
- const contexts = conversationContexts.get(sessionId);
107
- if (!contexts || contexts.length === 0) {
29
+ function fallbackFeeTinybar(chargedTxFee) {
30
+ if (typeof chargedTxFee !== "number" || !Number.isFinite(chargedTxFee)) {
108
31
  return null;
109
32
  }
110
- if (options?.identity) {
111
- const match = contexts.find(
112
- (context) => identitiesMatch(context.identity, options.identity)
113
- );
114
- if (match) {
115
- return match;
116
- }
33
+ if (chargedTxFee <= 0) {
34
+ return null;
117
35
  }
118
- return contexts[0];
36
+ return chargedTxFee;
119
37
  }
120
- function decryptHistoryEntryFromContext(client, entry, context) {
121
- const envelope = entry.cipherEnvelope;
122
- if (!envelope) {
123
- return entry.content;
124
- }
125
- const secret = Buffer.from(context.sharedSecret);
126
- try {
127
- return client.encryption.decryptCipherEnvelope({
128
- envelope,
129
- sharedSecret: secret
130
- });
131
- } catch (_error) {
38
+ function computeInscriptionCostSummary(params) {
39
+ const { txn, payerAccountId } = params;
40
+ const positiveTransfers = safePositiveTransfers(txn.transfers);
41
+ const payerDebitTinybar = resolvePayerDebitTinybar(
42
+ txn.transfers,
43
+ payerAccountId
44
+ );
45
+ const transferOutflowTinybar = payerDebitTinybar ?? positiveTransfers.reduce((sum, t) => sum + t.amountTinybar, 0);
46
+ const chargedFeeTinybar = fallbackFeeTinybar(txn.charged_tx_fee);
47
+ const resolvedTotalTinybar = transferOutflowTinybar > 0 ? transferOutflowTinybar : chargedFeeTinybar;
48
+ if (!resolvedTotalTinybar || resolvedTotalTinybar <= 0) {
132
49
  return null;
133
50
  }
51
+ const totalCostHbar = toHbarString(resolvedTotalTinybar);
52
+ const breakdownTransfers = positiveTransfers.length > 0 ? positiveTransfers.map((transfer) => ({
53
+ to: transfer.account,
54
+ amount: toHbarString(transfer.amountTinybar),
55
+ description: `HBAR transfer from ${payerAccountId}`
56
+ })) : [
57
+ {
58
+ to: "Hedera network",
59
+ amount: totalCostHbar,
60
+ description: `Transaction fee debited from ${payerAccountId}`
61
+ }
62
+ ];
63
+ return {
64
+ totalTinybar: resolvedTotalTinybar,
65
+ summary: {
66
+ totalCostHbar,
67
+ breakdown: {
68
+ transfers: breakdownTransfers
69
+ }
70
+ }
71
+ };
134
72
  }
135
73
  export {
136
- attachDecryptedHistory,
137
- decryptHistoryEntryFromContext,
138
- fetchHistorySnapshot,
139
- registerConversationContextForEncryption,
140
- resolveDecryptionContext
74
+ computeInscriptionCostSummary
141
75
  };
142
76
  //# sourceMappingURL=standards-sdk.es198.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es198.js","sources":["../../src/services/registry-broker/client/chat-history.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport type {\n ChatHistoryEntry,\n ChatHistoryFetchOptions,\n ChatHistorySnapshotResponse,\n ChatHistorySnapshotWithDecryptedEntries,\n JsonValue,\n RecipientIdentity,\n} from '../types';\nimport { chatHistorySnapshotResponseSchema } from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\n\nexport interface ConversationContextInput {\n sessionId: string;\n sharedSecret: Uint8Array | Buffer;\n identity?: RecipientIdentity;\n}\n\nexport interface ConversationContextState {\n sessionId: string;\n sharedSecret: Buffer;\n identity?: RecipientIdentity;\n}\n\nfunction identitiesMatch(\n a?: RecipientIdentity,\n b?: RecipientIdentity,\n): boolean {\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.uaid && b.uaid && a.uaid.toLowerCase() === b.uaid.toLowerCase()) {\n return true;\n }\n if (\n a.ledgerAccountId &&\n b.ledgerAccountId &&\n a.ledgerAccountId.toLowerCase() === b.ledgerAccountId.toLowerCase()\n ) {\n return true;\n }\n if (a.userId && b.userId && a.userId === b.userId) {\n return true;\n }\n if (a.email && b.email && a.email.toLowerCase() === b.email.toLowerCase()) {\n return true;\n }\n return false;\n}\n\nexport async function fetchHistorySnapshot(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n): Promise<ChatHistorySnapshotWithDecryptedEntries> {\n if (!sessionId || sessionId.trim().length === 0) {\n throw new Error('sessionId is required to fetch chat history');\n }\n const raw = await client.requestJson<JsonValue>(\n `/chat/session/${encodeURIComponent(sessionId)}/history`,\n {\n method: 'GET',\n },\n );\n const snapshot = client.parseWithSchema(\n raw,\n chatHistorySnapshotResponseSchema,\n 'chat history snapshot response',\n );\n return attachDecryptedHistory(\n conversationContexts,\n client,\n sessionId,\n snapshot,\n options,\n );\n}\n\nexport function attachDecryptedHistory(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n snapshot: ChatHistorySnapshotResponse,\n options?: ChatHistoryFetchOptions,\n): ChatHistorySnapshotWithDecryptedEntries {\n const shouldDecrypt =\n options?.decrypt !== undefined\n ? options.decrypt\n : client.encryptionOptions?.autoDecryptHistory === true;\n if (!shouldDecrypt) {\n return snapshot;\n }\n const requiresContext = snapshot.history.some(entry =>\n Boolean(entry.cipherEnvelope),\n );\n if (!requiresContext) {\n return {\n ...snapshot,\n decryptedHistory: snapshot.history.map(entry => ({\n entry,\n plaintext: entry.content,\n })),\n };\n }\n const context = resolveDecryptionContext(\n conversationContexts,\n client,\n sessionId,\n options,\n );\n if (!context) {\n throw new Error(\n 'Unable to decrypt chat history: encryption context unavailable',\n );\n }\n const decryptedHistory = snapshot.history.map(entry => ({\n entry,\n plaintext: decryptHistoryEntryFromContext(client, entry, context),\n }));\n return { ...snapshot, decryptedHistory };\n}\n\nexport function registerConversationContextForEncryption(\n conversationContexts: Map<string, ConversationContextState[]>,\n context: ConversationContextInput,\n): void {\n const normalized: ConversationContextState = {\n sessionId: context.sessionId,\n sharedSecret: Buffer.from(context.sharedSecret),\n identity: context.identity ? { ...context.identity } : undefined,\n };\n const entries = conversationContexts.get(context.sessionId) ?? [];\n const existingIndex = entries.findIndex(existing =>\n identitiesMatch(existing.identity, normalized.identity),\n );\n if (existingIndex >= 0) {\n entries[existingIndex] = normalized;\n } else {\n entries.push(normalized);\n }\n conversationContexts.set(context.sessionId, entries);\n}\n\nexport function resolveDecryptionContext(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n): ConversationContextState | null {\n if (options?.sharedSecret) {\n return {\n sessionId,\n sharedSecret: client.normalizeSharedSecret(options.sharedSecret),\n identity: options.identity,\n };\n }\n const contexts = conversationContexts.get(sessionId);\n if (!contexts || contexts.length === 0) {\n return null;\n }\n if (options?.identity) {\n const match = contexts.find(context =>\n identitiesMatch(context.identity, options.identity),\n );\n if (match) {\n return match;\n }\n }\n return contexts[0];\n}\n\nexport function decryptHistoryEntryFromContext(\n client: RegistryBrokerClient,\n entry: ChatHistoryEntry,\n context: ConversationContextState,\n): string | null {\n const envelope = entry.cipherEnvelope;\n if (!envelope) {\n return entry.content;\n }\n const secret = Buffer.from(context.sharedSecret);\n try {\n return client.encryption.decryptCipherEnvelope({\n envelope,\n sharedSecret: secret,\n });\n } catch (_error) {\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es198.js","sources":["../../src/inscribe/inscription-cost.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\nimport { Transaction } from '../services/types';\nimport { QuoteResult, InscriptionCostSummary } from './types';\n\nconst TINYBAR_DIVISOR = 100000000;\n\ntype MirrorNodeTransactionLike = Pick<\n Transaction,\n 'charged_tx_fee' | 'transfers'\n>;\n\ntype CostTransfer = QuoteResult['breakdown']['transfers'][number];\n\nfunction safePositiveTransfers(\n transfers: Transaction['transfers'] | undefined,\n): Array<{ account: string; amountTinybar: number }> {\n if (!Array.isArray(transfers)) {\n return [];\n }\n\n return transfers\n .filter(\n transfer => typeof transfer.amount === 'number' && transfer.amount > 0,\n )\n .map(transfer => ({\n account: transfer.account,\n amountTinybar: transfer.amount,\n }));\n}\n\nfunction resolvePayerDebitTinybar(\n transfers: Transaction['transfers'] | undefined,\n payerAccountId: string,\n): number | null {\n if (!Array.isArray(transfers)) {\n return null;\n }\n\n const payerDebit = transfers.find(\n transfer =>\n transfer.account === payerAccountId &&\n typeof transfer.amount === 'number' &&\n transfer.amount < 0,\n );\n\n if (!payerDebit || typeof payerDebit.amount !== 'number') {\n return null;\n }\n\n return Math.abs(payerDebit.amount);\n}\n\nfunction toHbarString(tinybar: number): string {\n return new BigNumber(tinybar).dividedBy(TINYBAR_DIVISOR).toFixed();\n}\n\nfunction fallbackFeeTinybar(chargedTxFee: unknown): number | null {\n if (typeof chargedTxFee !== 'number' || !Number.isFinite(chargedTxFee)) {\n return null;\n }\n if (chargedTxFee <= 0) {\n return null;\n }\n return chargedTxFee;\n}\n\nexport function computeInscriptionCostSummary(params: {\n txn: MirrorNodeTransactionLike;\n payerAccountId: string;\n}): { summary: InscriptionCostSummary; totalTinybar: number } | null {\n const { txn, payerAccountId } = params;\n\n const positiveTransfers = safePositiveTransfers(txn.transfers);\n const payerDebitTinybar = resolvePayerDebitTinybar(\n txn.transfers,\n payerAccountId,\n );\n\n const transferOutflowTinybar =\n payerDebitTinybar ??\n positiveTransfers.reduce((sum, t) => sum + t.amountTinybar, 0);\n const chargedFeeTinybar = fallbackFeeTinybar(txn.charged_tx_fee);\n\n const resolvedTotalTinybar =\n transferOutflowTinybar > 0 ? transferOutflowTinybar : chargedFeeTinybar;\n\n if (!resolvedTotalTinybar || resolvedTotalTinybar <= 0) {\n return null;\n }\n\n const totalCostHbar = toHbarString(resolvedTotalTinybar);\n\n const breakdownTransfers: CostTransfer[] =\n positiveTransfers.length > 0\n ? positiveTransfers.map(transfer => ({\n to: transfer.account,\n amount: toHbarString(transfer.amountTinybar),\n description: `HBAR transfer from ${payerAccountId}`,\n }))\n : [\n {\n to: 'Hedera network',\n amount: totalCostHbar,\n description: `Transaction fee debited from ${payerAccountId}`,\n },\n ];\n\n return {\n totalTinybar: resolvedTotalTinybar,\n summary: {\n totalCostHbar,\n breakdown: {\n transfers: breakdownTransfers,\n },\n },\n };\n}\n"],"names":[],"mappings":";AAIA,MAAM,kBAAkB;AASxB,SAAS,sBACP,WACmD;AACnD,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,WAAO,CAAA;AAAA,EACT;AAEA,SAAO,UACJ;AAAA,IACC,cAAY,OAAO,SAAS,WAAW,YAAY,SAAS,SAAS;AAAA,EAAA,EAEtE,IAAI,CAAA,cAAa;AAAA,IAChB,SAAS,SAAS;AAAA,IAClB,eAAe,SAAS;AAAA,EAAA,EACxB;AACN;AAEA,SAAS,yBACP,WACA,gBACe;AACf,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,UAAU;AAAA,IAC3B,CAAA,aACE,SAAS,YAAY,kBACrB,OAAO,SAAS,WAAW,YAC3B,SAAS,SAAS;AAAA,EAAA;AAGtB,MAAI,CAAC,cAAc,OAAO,WAAW,WAAW,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,IAAI,WAAW,MAAM;AACnC;AAEA,SAAS,aAAa,SAAyB;AAC7C,SAAO,IAAI,UAAU,OAAO,EAAE,UAAU,eAAe,EAAE,QAAA;AAC3D;AAEA,SAAS,mBAAmB,cAAsC;AAChE,MAAI,OAAO,iBAAiB,YAAY,CAAC,OAAO,SAAS,YAAY,GAAG;AACtE,WAAO;AAAA,EACT;AACA,MAAI,gBAAgB,GAAG;AACrB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,8BAA8B,QAGuB;AACnE,QAAM,EAAE,KAAK,eAAA,IAAmB;AAEhC,QAAM,oBAAoB,sBAAsB,IAAI,SAAS;AAC7D,QAAM,oBAAoB;AAAA,IACxB,IAAI;AAAA,IACJ;AAAA,EAAA;AAGF,QAAM,yBACJ,qBACA,kBAAkB,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,eAAe,CAAC;AAC/D,QAAM,oBAAoB,mBAAmB,IAAI,cAAc;AAE/D,QAAM,uBACJ,yBAAyB,IAAI,yBAAyB;AAExD,MAAI,CAAC,wBAAwB,wBAAwB,GAAG;AACtD,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,aAAa,oBAAoB;AAEvD,QAAM,qBACJ,kBAAkB,SAAS,IACvB,kBAAkB,IAAI,CAAA,cAAa;AAAA,IACjC,IAAI,SAAS;AAAA,IACb,QAAQ,aAAa,SAAS,aAAa;AAAA,IAC3C,aAAa,sBAAsB,cAAc;AAAA,EAAA,EACjD,IACF;AAAA,IACE;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa,gCAAgC,cAAc;AAAA,IAAA;AAAA,EAC7D;AAGR,SAAO;AAAA,IACL,cAAc;AAAA,IACd,SAAS;AAAA,MACP;AAAA,MACA,WAAW;AAAA,QACT,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,EACF;AAEJ;"}