@hashgraphonline/standards-sdk 0.0.53 → 0.0.55

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 (156) hide show
  1. package/dist/es/hcs-10/base-client.d.ts +1 -0
  2. package/dist/es/hcs-10/base-client.d.ts.map +1 -1
  3. package/dist/es/hcs-10/browser.d.ts +1 -1
  4. package/dist/es/hcs-10/browser.d.ts.map +1 -1
  5. package/dist/es/hcs-10/sdk.d.ts +1 -1
  6. package/dist/es/hcs-10/sdk.d.ts.map +1 -1
  7. package/dist/es/standards-sdk.es10.js +5 -4
  8. package/dist/es/standards-sdk.es10.js.map +1 -1
  9. package/dist/es/standards-sdk.es101.js +1 -1
  10. package/dist/es/standards-sdk.es103.js +1 -1
  11. package/dist/es/standards-sdk.es104.js +3 -3
  12. package/dist/es/standards-sdk.es105.js +3 -3
  13. package/dist/es/standards-sdk.es113.js +1 -1
  14. package/dist/es/standards-sdk.es16.js +1 -1
  15. package/dist/es/standards-sdk.es17.js +2 -2
  16. package/dist/es/standards-sdk.es20.js +1 -1
  17. package/dist/es/standards-sdk.es22.js +10 -10
  18. package/dist/es/standards-sdk.es23.js +2 -2
  19. package/dist/es/standards-sdk.es24.js +6627 -36
  20. package/dist/es/standards-sdk.es24.js.map +1 -1
  21. package/dist/es/standards-sdk.es25.js +36 -48
  22. package/dist/es/standards-sdk.es25.js.map +1 -1
  23. package/dist/es/standards-sdk.es26.js +21 -6600
  24. package/dist/es/standards-sdk.es26.js.map +1 -1
  25. package/dist/es/standards-sdk.es28.js +87 -405
  26. package/dist/es/standards-sdk.es28.js.map +1 -1
  27. package/dist/es/standards-sdk.es29.js +2 -2
  28. package/dist/es/standards-sdk.es30.js +15 -119
  29. package/dist/es/standards-sdk.es30.js.map +1 -1
  30. package/dist/es/standards-sdk.es31.js +397 -89
  31. package/dist/es/standards-sdk.es31.js.map +1 -1
  32. package/dist/es/standards-sdk.es32.js +2282 -2
  33. package/dist/es/standards-sdk.es32.js.map +1 -1
  34. package/dist/es/standards-sdk.es33.js +163 -15
  35. package/dist/es/standards-sdk.es33.js.map +1 -1
  36. package/dist/es/standards-sdk.es34.js +397 -387
  37. package/dist/es/standards-sdk.es34.js.map +1 -1
  38. package/dist/es/standards-sdk.es35.js +2 -2282
  39. package/dist/es/standards-sdk.es35.js.map +1 -1
  40. package/dist/es/standards-sdk.es36.js +111 -155
  41. package/dist/es/standards-sdk.es36.js.map +1 -1
  42. package/dist/es/standards-sdk.es37.js +2 -4
  43. package/dist/es/standards-sdk.es37.js.map +1 -1
  44. package/dist/es/standards-sdk.es38.js +4 -2
  45. package/dist/es/standards-sdk.es38.js.map +1 -1
  46. package/dist/es/standards-sdk.es39.js +195 -3
  47. package/dist/es/standards-sdk.es39.js.map +1 -1
  48. package/dist/es/standards-sdk.es40.js +406 -163
  49. package/dist/es/standards-sdk.es40.js.map +1 -1
  50. package/dist/es/standards-sdk.es41.js +19 -432
  51. package/dist/es/standards-sdk.es41.js.map +1 -1
  52. package/dist/es/standards-sdk.es42.js +130 -16
  53. package/dist/es/standards-sdk.es42.js.map +1 -1
  54. package/dist/es/standards-sdk.es43.js +10 -131
  55. package/dist/es/standards-sdk.es43.js.map +1 -1
  56. package/dist/es/standards-sdk.es44.js +22 -11
  57. package/dist/es/standards-sdk.es44.js.map +1 -1
  58. package/dist/es/standards-sdk.es45.js +22 -22
  59. package/dist/es/standards-sdk.es45.js.map +1 -1
  60. package/dist/es/standards-sdk.es46.js +13 -21
  61. package/dist/es/standards-sdk.es46.js.map +1 -1
  62. package/dist/es/standards-sdk.es47.js +36 -13
  63. package/dist/es/standards-sdk.es47.js.map +1 -1
  64. package/dist/es/standards-sdk.es48.js +10 -36
  65. package/dist/es/standards-sdk.es48.js.map +1 -1
  66. package/dist/es/standards-sdk.es49.js +53 -10
  67. package/dist/es/standards-sdk.es49.js.map +1 -1
  68. package/dist/es/standards-sdk.es5.js +4 -3
  69. package/dist/es/standards-sdk.es5.js.map +1 -1
  70. package/dist/es/standards-sdk.es50.js +1275 -47
  71. package/dist/es/standards-sdk.es50.js.map +1 -1
  72. package/dist/es/standards-sdk.es51.js +120 -1261
  73. package/dist/es/standards-sdk.es51.js.map +1 -1
  74. package/dist/es/standards-sdk.es52.js +73 -130
  75. package/dist/es/standards-sdk.es52.js.map +1 -1
  76. package/dist/es/standards-sdk.es53.js +69 -76
  77. package/dist/es/standards-sdk.es53.js.map +1 -1
  78. package/dist/es/standards-sdk.es54.js +26 -78
  79. package/dist/es/standards-sdk.es54.js.map +1 -1
  80. package/dist/es/standards-sdk.es55.js +5 -31
  81. package/dist/es/standards-sdk.es55.js.map +1 -1
  82. package/dist/es/standards-sdk.es56.js +158 -5
  83. package/dist/es/standards-sdk.es56.js.map +1 -1
  84. package/dist/es/standards-sdk.es57.js +22 -158
  85. package/dist/es/standards-sdk.es57.js.map +1 -1
  86. package/dist/es/standards-sdk.es58.js +789 -19
  87. package/dist/es/standards-sdk.es58.js.map +1 -1
  88. package/dist/es/standards-sdk.es59.js +166 -785
  89. package/dist/es/standards-sdk.es59.js.map +1 -1
  90. package/dist/es/standards-sdk.es60.js +131 -162
  91. package/dist/es/standards-sdk.es60.js.map +1 -1
  92. package/dist/es/standards-sdk.es61.js +3 -143
  93. package/dist/es/standards-sdk.es61.js.map +1 -1
  94. package/dist/es/standards-sdk.es62.js +16 -359
  95. package/dist/es/standards-sdk.es62.js.map +1 -1
  96. package/dist/es/standards-sdk.es63.js +26 -5
  97. package/dist/es/standards-sdk.es63.js.map +1 -1
  98. package/dist/es/standards-sdk.es64.js +24 -177
  99. package/dist/es/standards-sdk.es64.js.map +1 -1
  100. package/dist/es/standards-sdk.es65.js +36 -79
  101. package/dist/es/standards-sdk.es65.js.map +1 -1
  102. package/dist/es/standards-sdk.es66.js +349 -99
  103. package/dist/es/standards-sdk.es66.js.map +1 -1
  104. package/dist/es/standards-sdk.es67.js +5 -51
  105. package/dist/es/standards-sdk.es67.js.map +1 -1
  106. package/dist/es/standards-sdk.es68.js +177 -8
  107. package/dist/es/standards-sdk.es68.js.map +1 -1
  108. package/dist/es/standards-sdk.es69.js +71 -87
  109. package/dist/es/standards-sdk.es69.js.map +1 -1
  110. package/dist/es/standards-sdk.es70.js +113 -3
  111. package/dist/es/standards-sdk.es70.js.map +1 -1
  112. package/dist/es/standards-sdk.es71.js +52 -2
  113. package/dist/es/standards-sdk.es71.js.map +1 -1
  114. package/dist/es/standards-sdk.es72.js +9 -112
  115. package/dist/es/standards-sdk.es72.js.map +1 -1
  116. package/dist/es/standards-sdk.es73.js +92 -69
  117. package/dist/es/standards-sdk.es73.js.map +1 -1
  118. package/dist/es/standards-sdk.es74.js +3 -5
  119. package/dist/es/standards-sdk.es74.js.map +1 -1
  120. package/dist/es/standards-sdk.es75.js +2 -5
  121. package/dist/es/standards-sdk.es75.js.map +1 -1
  122. package/dist/es/standards-sdk.es76.js +94 -202
  123. package/dist/es/standards-sdk.es76.js.map +1 -1
  124. package/dist/es/standards-sdk.es77.js +71 -55
  125. package/dist/es/standards-sdk.es77.js.map +1 -1
  126. package/dist/es/standards-sdk.es78.js +6 -69
  127. package/dist/es/standards-sdk.es78.js.map +1 -1
  128. package/dist/es/standards-sdk.es79.js +4 -20
  129. package/dist/es/standards-sdk.es79.js.map +1 -1
  130. package/dist/es/standards-sdk.es8.js +13 -2
  131. package/dist/es/standards-sdk.es8.js.map +1 -1
  132. package/dist/es/standards-sdk.es80.js +216 -22
  133. package/dist/es/standards-sdk.es80.js.map +1 -1
  134. package/dist/es/standards-sdk.es81.js +57 -25
  135. package/dist/es/standards-sdk.es81.js.map +1 -1
  136. package/dist/es/standards-sdk.es82.js +69 -38
  137. package/dist/es/standards-sdk.es82.js.map +1 -1
  138. package/dist/es/standards-sdk.es83.js +1 -1
  139. package/dist/es/standards-sdk.es84.js +1 -1
  140. package/dist/es/standards-sdk.es85.js +5 -5
  141. package/dist/es/standards-sdk.es87.js +2 -2
  142. package/dist/es/standards-sdk.es89.js +2 -2
  143. package/dist/es/standards-sdk.es91.js +1 -1
  144. package/dist/es/standards-sdk.es93.js +4 -4
  145. package/dist/es/standards-sdk.es94.js +3 -3
  146. package/dist/es/standards-sdk.es97.js +1 -1
  147. package/dist/es/standards-sdk.es98.js +3 -3
  148. package/dist/umd/hcs-10/base-client.d.ts +1 -0
  149. package/dist/umd/hcs-10/base-client.d.ts.map +1 -1
  150. package/dist/umd/hcs-10/browser.d.ts +1 -1
  151. package/dist/umd/hcs-10/browser.d.ts.map +1 -1
  152. package/dist/umd/hcs-10/sdk.d.ts +1 -1
  153. package/dist/umd/hcs-10/sdk.d.ts.map +1 -1
  154. package/dist/umd/standards-sdk.umd.js +1 -1
  155. package/dist/umd/standards-sdk.umd.js.map +1 -1
  156. package/package.json +1 -1
@@ -1,47 +1,21 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { Typed } from "./standards-sdk.es59.js";
5
- import { Coder, WordSize } from "./standards-sdk.es41.js";
6
- import { defineProperties } from "./standards-sdk.es55.js";
7
- import { getBigInt, mask, toTwos, fromTwos } from "./standards-sdk.es57.js";
8
- const BN_0 = BigInt(0);
9
- const BN_1 = BigInt(1);
10
- const BN_MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
11
- class NumberCoder extends Coder {
12
- constructor(size, signed, localName) {
13
- const name = (signed ? "int" : "uint") + size * 8;
14
- super(name, name, localName, false);
15
- __publicField(this, "size");
16
- __publicField(this, "signed");
17
- defineProperties(this, { size, signed }, { size: "number", signed: "boolean" });
1
+ import { toUtf8Bytes, toUtf8String } from "./standards-sdk.es60.js";
2
+ import { Typed } from "./standards-sdk.es58.js";
3
+ import { DynamicBytesCoder } from "./standards-sdk.es44.js";
4
+ class StringCoder extends DynamicBytesCoder {
5
+ constructor(localName) {
6
+ super("string", localName);
18
7
  }
19
8
  defaultValue() {
20
- return 0;
9
+ return "";
21
10
  }
22
11
  encode(writer, _value) {
23
- let value = getBigInt(Typed.dereference(_value, this.type));
24
- let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);
25
- if (this.signed) {
26
- let bounds = mask(maxUintValue, this.size * 8 - 1);
27
- if (value > bounds || value < -(bounds + BN_1)) {
28
- this._throwError("value out-of-bounds", _value);
29
- }
30
- value = toTwos(value, 8 * WordSize);
31
- } else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {
32
- this._throwError("value out-of-bounds", _value);
33
- }
34
- return writer.writeValue(value);
12
+ return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, "string")));
35
13
  }
36
14
  decode(reader) {
37
- let value = mask(reader.readValue(), this.size * 8);
38
- if (this.signed) {
39
- value = fromTwos(value, this.size * 8);
40
- }
41
- return value;
15
+ return toUtf8String(super.decode(reader));
42
16
  }
43
17
  }
44
18
  export {
45
- NumberCoder
19
+ StringCoder
46
20
  };
47
21
  //# sourceMappingURL=standards-sdk.es48.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es48.js","sources":["../../node_modules/ethers/lib.esm/abi/coders/number.js"],"sourcesContent":["import { defineProperties, fromTwos, getBigInt, mask, toTwos } from \"../../utils/index.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n/**\n * @_ignore\n */\nexport class NumberCoder extends Coder {\n size;\n signed;\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n defineProperties(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n }\n defaultValue() {\n return 0;\n }\n encode(writer, _value) {\n let value = getBigInt(Typed.dereference(_value, this.type));\n // Check bounds are safe for encoding\n let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n if (this.signed) {\n let bounds = mask(maxUintValue, (this.size * 8) - 1);\n if (value > bounds || value < -(bounds + BN_1)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n value = toTwos(value, 8 * WordSize);\n }\n else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n let value = mask(reader.readValue(), this.size * 8);\n if (this.signed) {\n value = fromTwos(value, this.size * 8);\n }\n return value;\n }\n}\n//# sourceMappingURL=number.js.map"],"names":[],"mappings":";;;;;;;AAGA,MAAM,OAAO,OAAO,CAAC;AACrB,MAAM,OAAO,OAAO,CAAC;AACrB,MAAM,iBAAiB,OAAO,oEAAoE;AAI3F,MAAM,oBAAoB,MAAM;AAAA,EAGnC,YAAY,MAAM,QAAQ,WAAW;AACjC,UAAM,QAAS,SAAS,QAAQ,UAAW,OAAO;AAClD,UAAM,MAAM,MAAM,WAAW,KAAK;AAJtC;AACA;AAII,qBAAiB,MAAM,EAAE,MAAM,OAAM,GAAI,EAAE,MAAM,UAAU,QAAQ,WAAW;AAAA,EACtF;AAAA,EACI,eAAe;AACX,WAAO;AAAA,EACf;AAAA,EACI,OAAO,QAAQ,QAAQ;AACnB,QAAI,QAAQ,UAAU,MAAM,YAAY,QAAQ,KAAK,IAAI,CAAC;AAE1D,QAAI,eAAe,KAAK,gBAAgB,WAAW,CAAC;AACpD,QAAI,KAAK,QAAQ;AACb,UAAI,SAAS,KAAK,cAAe,KAAK,OAAO,IAAK,CAAC;AACnD,UAAI,QAAQ,UAAU,QAAQ,EAAE,SAAS,OAAO;AAC5C,aAAK,YAAY,uBAAuB,MAAM;AAAA,MAC9D;AACY,cAAQ,OAAO,OAAO,IAAI,QAAQ;AAAA,IAC9C,WACiB,QAAQ,QAAQ,QAAQ,KAAK,cAAc,KAAK,OAAO,CAAC,GAAG;AAChE,WAAK,YAAY,uBAAuB,MAAM;AAAA,IAC1D;AACQ,WAAO,OAAO,WAAW,KAAK;AAAA,EACtC;AAAA,EACI,OAAO,QAAQ;AACX,QAAI,QAAQ,KAAK,OAAO,UAAS,GAAI,KAAK,OAAO,CAAC;AAClD,QAAI,KAAK,QAAQ;AACb,cAAQ,SAAS,OAAO,KAAK,OAAO,CAAC;AAAA,IACjD;AACQ,WAAO;AAAA,EACf;AACA;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"standards-sdk.es48.js","sources":["../../node_modules/ethers/lib.esm/abi/coders/string.js"],"sourcesContent":["import { toUtf8Bytes, toUtf8String } from \"../../utils/utf8.js\";\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\n/**\n * @_ignore\n */\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, _value) {\n return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map"],"names":[],"mappings":";;;AAMO,MAAM,oBAAoB,kBAAkB;AAAA,EAC/C,YAAY,WAAW;AACnB,UAAM,UAAU,SAAS;AAAA,EACjC;AAAA,EACI,eAAe;AACX,WAAO;AAAA,EACf;AAAA,EACI,OAAO,QAAQ,QAAQ;AACnB,WAAO,MAAM,OAAO,QAAQ,YAAY,MAAM,YAAY,QAAQ,QAAQ,CAAC,CAAC;AAAA,EACpF;AAAA,EACI,OAAO,QAAQ;AACX,WAAO,aAAa,MAAM,OAAO,MAAM,CAAC;AAAA,EAChD;AACA;","x_google_ignoreList":[0]}
@@ -1,21 +1,64 @@
1
- import { toUtf8Bytes, toUtf8String } from "./standards-sdk.es61.js";
2
- import { Typed } from "./standards-sdk.es59.js";
3
- import { DynamicBytesCoder } from "./standards-sdk.es45.js";
4
- class StringCoder extends DynamicBytesCoder {
5
- constructor(localName) {
6
- super("string", localName);
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ import { defineProperties } from "./standards-sdk.es54.js";
5
+ import { Typed } from "./standards-sdk.es58.js";
6
+ import { Coder } from "./standards-sdk.es40.js";
7
+ import { pack, unpack } from "./standards-sdk.es42.js";
8
+ class TupleCoder extends Coder {
9
+ constructor(coders, localName) {
10
+ let dynamic = false;
11
+ const types = [];
12
+ coders.forEach((coder) => {
13
+ if (coder.dynamic) {
14
+ dynamic = true;
15
+ }
16
+ types.push(coder.type);
17
+ });
18
+ const type = "tuple(" + types.join(",") + ")";
19
+ super("tuple", type, localName, dynamic);
20
+ __publicField(this, "coders");
21
+ defineProperties(this, { coders: Object.freeze(coders.slice()) });
7
22
  }
8
23
  defaultValue() {
9
- return "";
24
+ const values = [];
25
+ this.coders.forEach((coder) => {
26
+ values.push(coder.defaultValue());
27
+ });
28
+ const uniqueNames = this.coders.reduce((accum, coder) => {
29
+ const name = coder.localName;
30
+ if (name) {
31
+ if (!accum[name]) {
32
+ accum[name] = 0;
33
+ }
34
+ accum[name]++;
35
+ }
36
+ return accum;
37
+ }, {});
38
+ this.coders.forEach((coder, index) => {
39
+ let name = coder.localName;
40
+ if (!name || uniqueNames[name] !== 1) {
41
+ return;
42
+ }
43
+ if (name === "length") {
44
+ name = "_length";
45
+ }
46
+ if (values[name] != null) {
47
+ return;
48
+ }
49
+ values[name] = values[index];
50
+ });
51
+ return Object.freeze(values);
10
52
  }
11
53
  encode(writer, _value) {
12
- return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, "string")));
54
+ const value = Typed.dereference(_value, "tuple");
55
+ return pack(writer, this.coders, value);
13
56
  }
14
57
  decode(reader) {
15
- return toUtf8String(super.decode(reader));
58
+ return unpack(reader, this.coders);
16
59
  }
17
60
  }
18
61
  export {
19
- StringCoder
62
+ TupleCoder
20
63
  };
21
64
  //# sourceMappingURL=standards-sdk.es49.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es49.js","sources":["../../node_modules/ethers/lib.esm/abi/coders/string.js"],"sourcesContent":["import { toUtf8Bytes, toUtf8String } from \"../../utils/utf8.js\";\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\n/**\n * @_ignore\n */\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, _value) {\n return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map"],"names":[],"mappings":";;;AAMO,MAAM,oBAAoB,kBAAkB;AAAA,EAC/C,YAAY,WAAW;AACnB,UAAM,UAAU,SAAS;AAAA,EACjC;AAAA,EACI,eAAe;AACX,WAAO;AAAA,EACf;AAAA,EACI,OAAO,QAAQ,QAAQ;AACnB,WAAO,MAAM,OAAO,QAAQ,YAAY,MAAM,YAAY,QAAQ,QAAQ,CAAC,CAAC;AAAA,EACpF;AAAA,EACI,OAAO,QAAQ;AACX,WAAO,aAAa,MAAM,OAAO,MAAM,CAAC;AAAA,EAChD;AACA;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"standards-sdk.es49.js","sources":["../../node_modules/ethers/lib.esm/abi/coders/tuple.js"],"sourcesContent":["import { defineProperties } from \"../../utils/properties.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nimport { pack, unpack } from \"./array.js\";\n/**\n * @_ignore\n */\nexport class TupleCoder extends Coder {\n coders;\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n defineProperties(this, { coders: Object.freeze(coders.slice()) });\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"tuple\");\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return unpack(reader, this.coders);\n }\n}\n//# sourceMappingURL=tuple.js.map"],"names":[],"mappings":";;;;;;;AAOO,MAAM,mBAAmB,MAAM;AAAA,EAElC,YAAY,QAAQ,WAAW;AAC3B,QAAI,UAAU;AACd,UAAM,QAAQ,CAAE;AAChB,WAAO,QAAQ,CAAC,UAAU;AACtB,UAAI,MAAM,SAAS;AACf,kBAAU;AAAA,MAC1B;AACY,YAAM,KAAK,MAAM,IAAI;AAAA,IACjC,CAAS;AACD,UAAM,OAAQ,WAAW,MAAM,KAAK,GAAG,IAAI;AAC3C,UAAM,SAAS,MAAM,WAAW,OAAO;AAX3C;AAYI,qBAAiB,MAAM,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAO,CAAA,GAAG;AAAA,EACxE;AAAA,EACI,eAAe;AACX,UAAM,SAAS,CAAE;AACjB,SAAK,OAAO,QAAQ,CAAC,UAAU;AAC3B,aAAO,KAAK,MAAM,cAAc;AAAA,IAC5C,CAAS;AAED,UAAM,cAAc,KAAK,OAAO,OAAO,CAAC,OAAO,UAAU;AACrD,YAAM,OAAO,MAAM;AACnB,UAAI,MAAM;AACN,YAAI,CAAC,MAAM,IAAI,GAAG;AACd,gBAAM,IAAI,IAAI;AAAA,QAClC;AACgB,cAAM,IAAI;AAAA,MAC1B;AACY,aAAO;AAAA,IACV,GAAE,EAAE;AAEL,SAAK,OAAO,QAAQ,CAAC,OAAO,UAAU;AAClC,UAAI,OAAO,MAAM;AACjB,UAAI,CAAC,QAAQ,YAAY,IAAI,MAAM,GAAG;AAClC;AAAA,MAChB;AACY,UAAI,SAAS,UAAU;AACnB,eAAO;AAAA,MACvB;AACY,UAAI,OAAO,IAAI,KAAK,MAAM;AACtB;AAAA,MAChB;AACY,aAAO,IAAI,IAAI,OAAO,KAAK;AAAA,IACvC,CAAS;AACD,WAAO,OAAO,OAAO,MAAM;AAAA,EACnC;AAAA,EACI,OAAO,QAAQ,QAAQ;AACnB,UAAM,QAAQ,MAAM,YAAY,QAAQ,OAAO;AAC/C,WAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK;AAAA,EAC9C;AAAA,EACI,OAAO,QAAQ;AACX,WAAO,OAAO,QAAQ,KAAK,MAAM;AAAA,EACzC;AACA;","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
1
  import Buffer from "./standards-sdk.es19.js";
2
2
  import { Client, PrivateKey, AccountCreateTransaction, Hbar, CustomFixedFee, AccountId, KeyList, TopicCreateTransaction, PublicKey, TopicMessageSubmitTransaction, TopicId, Transaction } from "@hashgraph/sdk";
3
3
  import { AccountCreationError, TopicCreationError, ConnectionConfirmationError, PayloadSizeError } from "./standards-sdk.es6.js";
4
- import { InscriptionSDK } from "./standards-sdk.es26.js";
4
+ import { InscriptionSDK } from "./standards-sdk.es24.js";
5
5
  import { Logger } from "./standards-sdk.es13.js";
6
6
  import { HCS10BaseClient, Hcs10MemoType } from "./standards-sdk.es8.js";
7
7
  import { m as mimeTypesExports } from "./standards-sdk.es20.js";
@@ -419,11 +419,12 @@ class HCS10Client extends HCS10BaseClient {
419
419
  }
420
420
  return sequenceNumber;
421
421
  }
422
- async sendMessage(connectionTopicId, operatorId, data, memo, submitKey) {
422
+ async sendMessage(connectionTopicId, data, memo, submitKey) {
423
423
  const submissionCheck = await this.canSubmitToTopic(
424
424
  connectionTopicId,
425
425
  this.client.operatorAccountId?.toString() || ""
426
426
  );
427
+ const operatorId = await this.getOperatorId();
427
428
  const payload = {
428
429
  p: "hcs-10",
429
430
  op: "message",
@@ -460,7 +461,7 @@ class HCS10Client extends HCS10BaseClient {
460
461
  }
461
462
  }
462
463
  this.logger.info("Submitting message to connection topic", payload);
463
- await this.submitPayload(
464
+ return await this.submitPayload(
464
465
  connectionTopicId,
465
466
  payload,
466
467
  submitKey,
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es5.js","sources":["../../src/hcs-10/sdk.ts"],"sourcesContent":["import {\n Client,\n AccountCreateTransaction,\n PrivateKey,\n Hbar,\n KeyList,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TopicId,\n Transaction,\n TransactionResponse,\n TransactionReceipt,\n PublicKey,\n AccountId,\n CustomFixedFee,\n} from '@hashgraph/sdk';\nimport {\n PayloadSizeError,\n AccountCreationError,\n TopicCreationError,\n ConnectionConfirmationError,\n} from './errors';\nimport {\n InscriptionSDK,\n RetrievedInscriptionResult,\n} from '@kiloscribe/inscription-sdk';\nimport { Logger, LogLevel } from '../utils/logger';\nimport { HCS10BaseClient } from './base-client';\nimport * as mime from 'mime-types';\nimport {\n HCSClientConfig,\n AgentConfig,\n CreateAccountResponse,\n CreateAgentResponse,\n InscribePfpResponse,\n StoreHCS11ProfileResponse,\n AgentRegistrationResult,\n HandleConnectionRequestResponse,\n WaitForConnectionConfirmationResponse,\n GetAccountAndSignerResponse,\n InboundTopicType,\n TopicFeeConfig,\n FeeConfigBuilderInterface,\n AgentCreationState,\n} from './types';\nimport { HCS11Client } from '../hcs-11';\nimport { AgentBuilder } from './agent-builder';\nimport { accountIdsToExemptKeys } from '../utils/topic-fee-utils';\nimport { Hcs10MemoType } from './base-client';\n\nexport { InboundTopicType } from './types';\nexport { FeeConfigBuilder } from './fee-config-builder';\n\nexport interface AgentMetadata {\n type: 'autonomous' | 'manual';\n model?: string;\n socials?: {\n twitter?: string;\n discord?: string;\n github?: string;\n website?: string;\n x?: string;\n linkedin?: string;\n youtube?: string;\n telegram?: string;\n };\n creator?: string;\n properties?: Record<string, any>;\n}\n\n/**\n * Progress report data for registration operations\n */\nexport interface RegistrationProgressData {\n stage: 'preparing' | 'submitting' | 'confirming' | 'verifying' | 'completed';\n message: string;\n progressPercent?: number;\n details?: Record<string, any>;\n}\n\n/**\n * Progress callback function type for registration operations\n */\nexport type RegistrationProgressCallback = (\n data: RegistrationProgressData\n) => void;\n\nexport class HCS10Client extends HCS10BaseClient {\n private client: Client;\n private operatorPrivateKey: PrivateKey;\n protected declare network: string;\n protected declare logger: Logger;\n protected guardedRegistryBaseUrl: string;\n private hcs11Client: HCS11Client;\n\n constructor(config: HCSClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n prettyPrint: config.prettyPrint,\n feeAmount: config.feeAmount,\n });\n this.client =\n config.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n this.operatorPrivateKey = PrivateKey.fromString(config.operatorPrivateKey);\n this.network = config.network;\n this.client.setOperator(\n config.operatorId,\n this.operatorPrivateKey.toString()\n );\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-SDK',\n });\n this.guardedRegistryBaseUrl =\n config.guardedRegistryBaseUrl || 'https://moonscape.tech';\n\n this.hcs11Client = new HCS11Client({\n network: config.network,\n auth: {\n operatorId: config.operatorId,\n privateKey: config.operatorPrivateKey,\n },\n logLevel: config.logLevel,\n });\n }\n\n public getClient() {\n return this.client;\n }\n\n /**\n * Creates a new Hedera account\n * @returns Object with account ID and private key\n */\n async createAccount(): Promise<CreateAccountResponse> {\n this.logger.info('Creating new account');\n const newKey = PrivateKey.generate();\n\n const accountTransaction = new AccountCreateTransaction()\n .setKey(newKey.publicKey)\n .setInitialBalance(new Hbar(10));\n\n this.logger.debug('Executing account creation transaction');\n const accountResponse = await accountTransaction.execute(this.client);\n const accountReceipt = await accountResponse.getReceipt(this.client);\n const newAccountId = accountReceipt.accountId;\n\n if (!newAccountId) {\n this.logger.error('Account creation failed: accountId is null');\n throw new AccountCreationError(\n 'Failed to create account: accountId is null'\n );\n }\n\n this.logger.info(\n `Account created successfully: ${newAccountId.toString()}`\n );\n return {\n accountId: newAccountId.toString(),\n privateKey: newKey.toString(),\n };\n }\n\n /**\n * Creates an inbound topic for an agent\n * @param accountId The account ID associated with the inbound topic\n * @param topicType Type of inbound topic (public, controlled, or fee-based)\n * @param ttl Optional Time-To-Live for the topic memo, defaults to 60\n * @param feeConfigBuilder Optional fee configuration builder for fee-based topics\n * @returns The topic ID of the created inbound topic\n */\n async createInboundTopic(\n accountId: string,\n topicType: InboundTopicType,\n ttl: number = 60,\n feeConfigBuilder?: FeeConfigBuilderInterface\n ): Promise<string> {\n const memo = this._generateHcs10Memo(Hcs10MemoType.INBOUND, {\n accountId,\n ttl,\n });\n\n let submitKey: boolean | PublicKey | KeyList | undefined;\n let feeConfig: TopicFeeConfig | undefined;\n\n switch (topicType) {\n case InboundTopicType.PUBLIC:\n submitKey = false;\n break;\n case InboundTopicType.CONTROLLED:\n submitKey = true;\n break;\n case InboundTopicType.FEE_BASED:\n submitKey = true;\n if (!feeConfigBuilder) {\n throw new Error(\n 'Fee configuration builder is required for fee-based topics'\n );\n }\n feeConfig = feeConfigBuilder.build();\n break;\n default:\n throw new Error(`Unsupported inbound topic type: ${topicType}`);\n }\n\n return this.createTopic(memo, true, submitKey, feeConfig);\n }\n\n /**\n * Creates a new agent with inbound and outbound topics\n * @param builder The agent builder object\n * @param ttl Optional Time-To-Live for the topic memos, defaults to 60\n * @returns Object with topic IDs\n */\n async createAgent(\n builder: AgentBuilder,\n ttl: number = 60\n ): Promise<CreateAgentResponse> {\n const config = builder.build();\n const outboundMemo = this._generateHcs10Memo(Hcs10MemoType.OUTBOUND, {\n ttl,\n });\n const outboundTopicId = await this.createTopic(outboundMemo, true, true);\n this.logger.info(`Created new outbound topic ID: ${outboundTopicId}`);\n\n const accountId = this.client.operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n const inboundTopicId = await this.createInboundTopic(\n accountId,\n config.inboundTopicType,\n ttl,\n config.inboundTopicType === InboundTopicType.FEE_BASED\n ? config.feeConfig\n : undefined\n );\n\n let pfpTopicId = config.existingPfpTopicId || '';\n\n if (!pfpTopicId && config.pfpBuffer && config.pfpBuffer.length > 0) {\n this.logger.info('Inscribing new profile picture');\n const pfpResult = await this.inscribePfp(\n config.pfpBuffer,\n config.pfpFileName\n );\n pfpTopicId = pfpResult.pfpTopicId;\n this.logger.info(\n `Profile picture inscribed with topic ID: ${pfpTopicId}`\n );\n } else if (config.existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${config.existingPfpTopicId}`\n );\n }\n\n const profileResult = await this.storeHCS11Profile(\n config.name,\n config.description,\n inboundTopicId,\n outboundTopicId,\n config.capabilities,\n config.metadata,\n config.pfpBuffer && config.pfpBuffer.length > 0\n ? config.pfpBuffer\n : undefined,\n config.pfpFileName,\n config.existingPfpTopicId\n );\n const profileTopicId = profileResult.profileTopicId;\n this.logger.info(`Profile stored with topic ID: ${profileTopicId}`);\n\n return {\n inboundTopicId,\n outboundTopicId,\n pfpTopicId,\n profileTopicId,\n };\n }\n\n /**\n * Inscribes a profile picture to Hedera\n * @param buffer Profile picture buffer\n * @param fileName Filename\n * @returns Response with topic ID and transaction ID\n */\n async inscribePfp(\n buffer: Buffer,\n fileName: string\n ): Promise<InscribePfpResponse> {\n try {\n this.logger.info('Inscribing profile picture using HCS-11 client');\n\n const imageResult = await this.hcs11Client.inscribeImage(\n buffer,\n fileName\n );\n\n if (!imageResult.success) {\n this.logger.error(\n `Failed to inscribe profile picture: ${imageResult.error}`\n );\n throw new Error(\n imageResult?.error || 'Failed to inscribe profile picture'\n );\n }\n\n this.logger.info(\n `Successfully inscribed profile picture with topic ID: ${imageResult.imageTopicId}`\n );\n return {\n pfpTopicId: imageResult.imageTopicId,\n transactionId: imageResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error inscribing profile picture: ${error.message}`);\n return {\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n /**\n * Stores an HCS-11 profile for an agent\n * @param agentName Agent name\n * @param agentDescription Agent description\n * @param inboundTopicId Inbound topic ID\n * @param outboundTopicId Outbound topic ID\n * @param capabilities Agent capability tags\n * @param metadata Additional metadata\n * @param pfpBuffer Optional profile picture buffer\n * @param pfpFileName Optional profile picture filename\n * @returns Response with topic IDs and transaction ID\n */\n async storeHCS11Profile(\n agentName: string,\n agentDescription: string,\n inboundTopicId: string,\n outboundTopicId: string,\n capabilities: number[] = [],\n metadata: AgentMetadata,\n pfpBuffer?: Buffer,\n pfpFileName?: string,\n existingPfpTopicId?: string\n ): Promise<StoreHCS11ProfileResponse> {\n try {\n let pfpTopicId = existingPfpTopicId || '';\n\n if (!pfpTopicId && pfpBuffer && pfpFileName) {\n this.logger.info('Inscribing profile picture for HCS-11 profile');\n const pfpResult = await this.inscribePfp(pfpBuffer, pfpFileName);\n if (!pfpResult.success) {\n this.logger.error(\n 'Failed to inscribe profile picture, continuing without PFP'\n );\n } else {\n pfpTopicId = pfpResult.pfpTopicId;\n }\n } else if (existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${existingPfpTopicId} for HCS-11 profile`\n );\n }\n\n const agentType = this.hcs11Client.getAgentTypeFromMetadata({\n type: metadata.type || 'autonomous',\n } as AgentMetadata);\n\n const formattedSocials = metadata.socials\n ? Object.entries(metadata.socials)\n .filter(([_, handle]) => handle)\n .map(([platform, handle]) => ({\n platform: platform === 'x' ? 'twitter' : platform,\n handle,\n }))\n : undefined;\n\n const profile = this.hcs11Client.createAIAgentProfile(\n agentName,\n agentType,\n capabilities,\n metadata.model || 'unknown',\n {\n alias: agentName.toLowerCase().replace(/\\s+/g, '_'),\n bio: agentDescription,\n profileImage: pfpTopicId ? `hcs://1/${pfpTopicId}` : undefined,\n socials: formattedSocials,\n properties: metadata.properties,\n inboundTopicId,\n outboundTopicId,\n creator: metadata.creator,\n }\n );\n\n const profileResult = await this.hcs11Client.createAndInscribeProfile(\n profile,\n true\n );\n\n if (!profileResult.success) {\n this.logger.error(`Failed to inscribe profile: ${profileResult.error}`);\n throw new Error(profileResult.error || 'Failed to inscribe profile');\n }\n\n this.logger.info(\n `Profile inscribed with topic ID: ${profileResult.profileTopicId}, transaction ID: ${profileResult.transactionId}`\n );\n\n return {\n profileTopicId: profileResult.profileTopicId,\n pfpTopicId,\n transactionId: profileResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error storing HCS-11 profile: ${error.message}`);\n return {\n profileTopicId: '',\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n private async setupFees(\n transaction: TopicCreateTransaction,\n feeConfig: TopicFeeConfig,\n additionalExemptAccounts: string[] = []\n ): Promise<void> {\n if (!this.client.operatorPublicKey) {\n return;\n }\n\n this.logger.info('Setting up topic with custom fees');\n\n const customFee = new CustomFixedFee()\n .setAmount(Number(feeConfig.feeAmount.amount))\n .setFeeCollectorAccountId(\n AccountId.fromString(feeConfig.feeCollectorAccountId)\n );\n\n let exemptAccountIds = [\n ...(feeConfig.exemptAccounts || []),\n ...additionalExemptAccounts,\n ];\n\n console.log('exemptAccountIds', exemptAccountIds);\n\n if (exemptAccountIds.length > 0) {\n const uniqueExemptAccountIds = Array.from(new Set(exemptAccountIds));\n const filteredExemptAccounts = uniqueExemptAccountIds.filter(\n (account) => account !== this.client.operatorAccountId?.toString()\n );\n\n let exemptKeys: PublicKey[] = [];\n if (filteredExemptAccounts.length > 0) {\n try {\n exemptKeys = await accountIdsToExemptKeys(\n filteredExemptAccounts,\n this.network,\n this.logger\n );\n } catch (error) {\n this.logger.warn(\n `Error getting exempt keys: ${error}, continuing without exempt keys`\n );\n }\n }\n\n if (exemptKeys.length > 0) {\n transaction.setFeeExemptKeys(exemptKeys);\n }\n }\n\n transaction\n .setFeeScheduleKey(this.client.operatorPublicKey)\n .setCustomFees([customFee]);\n }\n\n /**\n * Handles a connection request from another account\n * @param inboundTopicId Inbound topic ID\n * @param requestingAccountId Requesting account ID\n * @param connectionRequestId Connection request ID\n * @param connectionFeeConfig Optional fee configuration for the connection topic\n * @param ttl Optional ttl parameter with default\n * @returns Response with connection details\n */\n async handleConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n connectionRequestId: number,\n connectionFeeConfig?: FeeConfigBuilderInterface,\n ttl: number = 60\n ): Promise<HandleConnectionRequestResponse> {\n const memo = this._generateHcs10Memo(Hcs10MemoType.CONNECTION, {\n ttl,\n inboundTopicId,\n connectionId: connectionRequestId,\n });\n this.logger.info(\n `Handling connection request ${connectionRequestId} from ${requestingAccountId}`\n );\n\n const accountId = this.getClient().operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n let requesterKey = await this.mirrorNode.getPublicKey(requestingAccountId);\n const accountKey = await this.mirrorNode.getPublicKey(accountId);\n\n if (!accountKey) {\n throw new Error('Failed to retrieve public key');\n }\n\n const thresholdKey = new KeyList([accountKey, requesterKey], 1);\n\n let connectionTopicId: string;\n\n try {\n if (connectionFeeConfig) {\n const feeConfig = connectionFeeConfig.build();\n const modifiedFeeConfig = {\n ...feeConfig,\n exemptAccounts: [...(feeConfig.exemptAccounts || [])],\n };\n\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey,\n modifiedFeeConfig\n );\n } else {\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey\n );\n }\n\n this.logger.info(`Created new connection topic ID: ${connectionTopicId}`);\n } catch (error) {\n this.logger.error(`Failed to create connection topic: ${error}`);\n throw new TopicCreationError(\n `Failed to create connection topic: ${error}`\n );\n }\n\n const operatorId = `${inboundTopicId}@${accountId}`;\n\n const confirmedConnectionSequenceNumber = await this.confirmConnection(\n inboundTopicId,\n connectionTopicId,\n requestingAccountId,\n connectionRequestId,\n operatorId,\n 'Connection accepted. Looking forward to collaborating!'\n );\n\n return {\n connectionTopicId,\n confirmedConnectionSequenceNumber,\n operatorId,\n };\n }\n\n async confirmConnection(\n inboundTopicId: string,\n connectionTopicId: string,\n connectedAccountId: string,\n connectionId: number,\n operatorId: string,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<number> {\n this.logger.info(`Confirming connection with ID ${connectionId}`);\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: connectionTopicId,\n connected_account_id: connectedAccountId,\n operator_id: operatorId,\n connection_id: connectionId,\n m: memo,\n };\n\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n const result = await this.submitPayload(\n inboundTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n\n const sequenceNumber = result.topicSequenceNumber?.toNumber();\n\n if (!sequenceNumber) {\n throw new ConnectionConfirmationError(\n 'Failed to confirm connection: sequence number is null'\n );\n }\n\n return sequenceNumber;\n }\n\n async sendMessage(\n connectionTopicId: string,\n operatorId: string,\n data: string,\n memo?: string,\n submitKey?: PrivateKey\n ): Promise<void> {\n const submissionCheck = await this.canSubmitToTopic(\n connectionTopicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n const payload = {\n p: 'hcs-10',\n op: 'message',\n operator_id: operatorId,\n data,\n m: memo,\n };\n\n const payloadString = JSON.stringify(payload);\n const isLargePayload = Buffer.from(payloadString).length > 1000;\n\n if (isLargePayload) {\n this.logger.info(\n 'Message payload exceeds 1000 bytes, storing via inscription'\n );\n try {\n const contentBuffer = Buffer.from(data);\n const fileName = `message-${Date.now()}.json`;\n const inscriptionResult = await this.inscribeFile(\n contentBuffer,\n fileName\n );\n\n if (inscriptionResult?.topic_id) {\n payload.data = `hcs://1/${inscriptionResult.topic_id}`;\n this.logger.info(\n `Large message inscribed with topic ID: ${inscriptionResult.topic_id}`\n );\n } else {\n throw new Error('Failed to inscribe large message content');\n }\n } catch (error) {\n this.logger.error('Error inscribing large message:', error);\n throw new Error(\n `Failed to handle large message: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n\n this.logger.info('Submitting message to connection topic', payload);\n await this.submitPayload(\n connectionTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n }\n\n async createTopic(\n memo: string,\n adminKey?: boolean | PublicKey | KeyList,\n submitKey?: boolean | PublicKey | KeyList,\n feeConfig?: TopicFeeConfig\n ): Promise<string> {\n this.logger.info('Creating topic');\n const transaction = new TopicCreateTransaction().setTopicMemo(memo);\n\n if (adminKey) {\n if (\n typeof adminKey === 'boolean' &&\n adminKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setAdminKey(this.client.operatorPublicKey);\n transaction.setAutoRenewAccountId(this.client.operatorAccountId!);\n } else if (adminKey instanceof PublicKey || adminKey instanceof KeyList) {\n transaction.setAdminKey(adminKey);\n if (this.client.operatorAccountId) {\n transaction.setAutoRenewAccountId(this.client.operatorAccountId);\n }\n }\n }\n\n if (submitKey) {\n if (\n typeof submitKey === 'boolean' &&\n submitKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setSubmitKey(this.client.operatorPublicKey);\n } else if (\n submitKey instanceof PublicKey ||\n submitKey instanceof KeyList\n ) {\n transaction.setSubmitKey(submitKey);\n }\n }\n\n if (feeConfig) {\n await this.setupFees(transaction, feeConfig);\n }\n\n this.logger.debug('Executing topic creation transaction');\n const txResponse = await transaction.execute(this.client);\n const receipt = await txResponse.getReceipt(this.client);\n\n if (!receipt.topicId) {\n this.logger.error('Failed to create topic: topicId is null');\n throw new Error('Failed to create topic: topicId is null');\n }\n\n const topicId = receipt.topicId.toString();\n return topicId;\n }\n\n public async submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n requiresFee: boolean = false\n ): Promise<TransactionReceipt> {\n const message =\n typeof payload === 'string' ? payload : JSON.stringify(payload);\n\n const payloadSizeInBytes = Buffer.byteLength(message, 'utf8');\n if (payloadSizeInBytes > 1000) {\n throw new PayloadSizeError(\n 'Payload size exceeds 1000 bytes limit',\n payloadSizeInBytes\n );\n }\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(topicId))\n .setMessage(message);\n\n if (requiresFee) {\n this.logger.info(\n 'Topic requires fee payment, setting max transaction fee'\n );\n transaction.setMaxTransactionFee(new Hbar(this.feeAmount));\n transaction.setTransactionMemo('HIP-991 Fee Payment');\n }\n\n let transactionResponse: TransactionResponse;\n if (submitKey) {\n transaction.freezeWith(this.client);\n const signedTransaction = await transaction.sign(submitKey);\n transactionResponse = await signedTransaction.execute(this.client);\n } else {\n transactionResponse = await transaction.execute(this.client);\n }\n\n const receipt = await transactionResponse.getReceipt(this.client);\n if (!receipt) {\n this.logger.error('Failed to submit message: receipt is null');\n throw new Error('Failed to submit message: receipt is null');\n }\n this.logger.info('Message submitted successfully');\n return receipt;\n }\n\n async submitConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n operatorId: string,\n memo: string\n ): Promise<TransactionReceipt> {\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n requestingAccountId\n );\n\n if (!submissionCheck.canSubmit) {\n throw new Error(`Cannot submit to topic: ${submissionCheck.reason}`);\n }\n\n const connectionRequestMessage = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: operatorId,\n memo: memo,\n };\n\n const requiresFee = submissionCheck.requiresFee;\n const response = await this.submitPayload(\n inboundTopicId,\n connectionRequestMessage,\n undefined,\n requiresFee\n );\n\n this.logger.info(\n `Submitted connection request to topic ID: ${inboundTopicId}`\n );\n\n const outboundTopic = await this.retrieveOutboundConnectTopic(\n requestingAccountId\n );\n\n const responseSequenceNumber = response.topicSequenceNumber?.toNumber();\n\n if (!responseSequenceNumber) {\n throw new Error('Failed to get response sequence number');\n }\n\n await this.submitPayload(\n outboundTopic.outboundTopic,\n {\n ...connectionRequestMessage,\n outbound_topic_id: outboundTopic.outboundTopic,\n connection_request_id: responseSequenceNumber,\n },\n this.operatorPrivateKey\n );\n\n return response;\n }\n\n async inscribeFile(\n buffer: Buffer,\n fileName: string\n ): Promise<RetrievedInscriptionResult> {\n this.logger.info('Inscribing file');\n if (!this.client.operatorAccountId) {\n this.logger.error('Operator account ID is not set');\n throw new Error('Operator account ID is not set');\n }\n\n if (!this.operatorPrivateKey) {\n this.logger.error('Operator private key is not set');\n throw new Error('Operator private key is not set');\n }\n\n const mimeType = mime.lookup(fileName) || 'application/octet-stream';\n\n const sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n });\n\n const result = await sdk.inscribeAndExecute(\n {\n file: {\n type: 'base64',\n base64: buffer.toString('base64'),\n fileName,\n mimeType,\n },\n holderId: this.client.operatorAccountId.toString(),\n mode: 'file',\n network: this.network as 'testnet' | 'mainnet',\n },\n {\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n }\n );\n\n if (!result.transactionId || !result.jobId) {\n this.logger.error('Failed to inscribe, no transaction ID or job ID.');\n throw new Error('Failed to inscribe, no transaction ID or job ID.');\n }\n\n if (result.transactionId && result.jobId) {\n this.logger.info(\n `Transaction ID: ${result.transactionId}, Job ID: ${result.jobId}`\n );\n }\n\n const status = await sdk.waitForInscription(result.jobId, 30, 4000, true);\n return status;\n }\n\n /**\n * Waits for confirmation of a connection request\n * @param inboundTopicId Inbound topic ID\n * @param connectionRequestId Connection request ID\n * @param maxAttempts Maximum number of attempts\n * @param delayMs Delay between attempts in milliseconds\n * @returns Connection confirmation details\n */\n async waitForConnectionConfirmation(\n inboundTopicId: string,\n connectionRequestId: number,\n maxAttempts = 60,\n delayMs = 2000\n ): Promise<WaitForConnectionConfirmationResponse> {\n this.logger.info(\n `Waiting for connection confirmation on inbound topic ${inboundTopicId} for request ID ${connectionRequestId}`\n );\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n this.logger.info(\n `Attempt ${attempt + 1}/${maxAttempts} to find connection confirmation`\n );\n const messages = await this.mirrorNode.getTopicMessages(inboundTopicId);\n\n const connectionCreatedMessages = messages.filter(\n (m) => m.op === 'connection_created'\n );\n\n this.logger.info(\n `Found ${connectionCreatedMessages.length} connection_created messages`\n );\n\n if (connectionCreatedMessages.length > 0) {\n for (const message of connectionCreatedMessages) {\n if (Number(message.connection_id) === Number(connectionRequestId)) {\n this.logger.info('Connection confirmation found');\n return {\n connectionTopicId: message.connection_topic_id,\n sequence_number: Number(message.sequence_number),\n confirmedBy: message.operator_id,\n memo: message.m,\n };\n }\n }\n }\n\n if (attempt < maxAttempts - 1) {\n this.logger.info(\n `No matching confirmation found, waiting ${delayMs}ms before retrying...`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw new Error(\n `Connection confirmation not found after ${maxAttempts} attempts for request ID ${connectionRequestId}`\n );\n }\n\n getAccountAndSigner(): GetAccountAndSignerResponse {\n return {\n accountId: this.client.operatorAccountId!.toString()!,\n signer: this.operatorPrivateKey,\n };\n }\n\n /**\n * Creates and registers an agent with a Guarded registry.\n *\n * This function performs the following steps:\n * 1. Creates a new account if no existing account is provided.\n * 2. Initializes an HCS10 client with the new account.\n * 3. Creates an agent on the client.\n * 4. Registers the agent with the Hashgraph Online Guarded Registry.\n *\n * @param builder The agent builder object\n * @param options Optional configuration including progress callback and state management\n * @returns Agent registration result\n */\n async createAndRegisterAgent(\n builder: AgentBuilder,\n options?: {\n baseUrl?: string;\n progressCallback?: RegistrationProgressCallback;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n const config = builder.build();\n const progressCallback = options?.progressCallback;\n const baseUrl = options?.baseUrl || this.guardedRegistryBaseUrl;\n let state = options?.existingState || undefined;\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing agent registration',\n progressPercent: 10,\n details: { state },\n });\n }\n\n const account = config.existingAccount || (await this.createAccount());\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Created account or using existing account',\n progressPercent: 20,\n details: { state, account },\n });\n }\n\n const agentClient = new HCS10Client({\n network: config.network,\n operatorId: account.accountId,\n operatorPrivateKey: account.privateKey,\n operatorPublicKey: PrivateKey.fromString(\n account.privateKey\n ).publicKey.toString(),\n logLevel: 'info' as LogLevel,\n guardedRegistryBaseUrl: baseUrl,\n });\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Initialized agent client',\n progressPercent: 30,\n details: { state },\n });\n }\n\n const { outboundTopicId, inboundTopicId, pfpTopicId, profileTopicId } =\n await agentClient.createAgent(builder);\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Created agent with topics and profile',\n progressPercent: 60,\n details: {\n state,\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n },\n });\n }\n\n const operatorId = `${inboundTopicId}@${account.accountId}`;\n\n const registrationResult =\n await agentClient.registerAgentWithGuardedRegistry(\n account.accountId,\n config.network,\n {\n progressCallback: (data) => {\n const adjustedPercent = 60 + (data.progressPercent || 0) * 0.4;\n if (progressCallback) {\n progressCallback({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: {\n ...data.details,\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n operatorId,\n state: data.details?.state || state,\n },\n });\n }\n },\n existingState: state,\n }\n );\n\n if (!registrationResult.success) {\n return registrationResult;\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'completed',\n message: 'Agent creation and registration complete',\n progressPercent: 100,\n details: {\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n operatorId,\n state: registrationResult.state,\n },\n });\n }\n\n return {\n ...registrationResult,\n metadata: {\n accountId: account.accountId,\n privateKey: account.privateKey,\n operatorId,\n inboundTopicId,\n outboundTopicId,\n profileTopicId,\n pfpTopicId,\n },\n };\n } catch (error: any) {\n this.logger.error(\n `Failed to create and register agent: ${error.message}`\n );\n return {\n error: error.message,\n success: false,\n };\n }\n }\n\n /**\n * Registers an agent with the guarded registry\n * @param accountId Account ID to register\n * @param inboundTopicId Inbound topic ID for the agent\n * @param network Network type ('mainnet' or 'testnet')\n * @param options Optional configuration including progress callback and confirmation settings\n * @returns Registration result\n */\n async registerAgentWithGuardedRegistry(\n accountId: string,\n network: string = this.network,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n maxAttempts?: number;\n delayMs?: number;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n this.logger.info('Registering agent with guarded registry');\n\n const maxAttempts = options?.maxAttempts ?? 60;\n const delayMs = options?.delayMs ?? 2000;\n const progressCallback = options?.progressCallback;\n let state =\n options?.existingState ||\n ({\n currentStage: 'registration',\n completedPercentage: 0,\n createdResources: [],\n } as AgentCreationState);\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing agent registration',\n progressPercent: 10,\n details: {\n state,\n },\n });\n }\n\n const registrationResult = await this.executeRegistration(\n accountId,\n network,\n this.guardedRegistryBaseUrl,\n this.logger\n );\n\n if (!registrationResult.success) {\n return {\n ...registrationResult,\n state,\n };\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Submitting registration to registry',\n progressPercent: 30,\n details: {\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n if (registrationResult.transaction) {\n const transaction = Transaction.fromBytes(\n Buffer.from(registrationResult.transaction, 'base64')\n );\n\n this.logger.info(`Processing registration transaction`);\n await transaction.execute(this.client);\n this.logger.info(`Successfully processed registration transaction`);\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'confirming',\n message: 'Confirming registration transaction',\n progressPercent: 60,\n details: {\n accountId,\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n const confirmed = await this.waitForRegistrationConfirmation(\n registrationResult.transactionId!,\n network,\n this.guardedRegistryBaseUrl,\n maxAttempts,\n delayMs,\n this.logger\n );\n\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n if (!state.createdResources) {\n state.createdResources = [];\n }\n if (registrationResult.transactionId) {\n state.createdResources.push(\n `registration:${registrationResult.transactionId}`\n );\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'completed',\n message: 'Agent registration complete',\n progressPercent: 100,\n details: {\n confirmed,\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n return {\n ...registrationResult,\n confirmed,\n state,\n };\n } catch (error: any) {\n this.logger.error(`Failed to register agent: ${error.message}`);\n return {\n error: error.message,\n success: false,\n };\n }\n }\n\n /**\n * Registers an agent with the guarded registry. Should be called by a registry.\n * @param registryTopicId - The topic ID of the guarded registry.\n * @param accountId - The account ID of the agent\n * @param inboundTopicId - The topic ID of the inbound topic\n * @param memo - The memo of the agent\n * @param submitKey - The submit key of the agent\n */\n async registerAgent(\n registryTopicId: string,\n accountId: string,\n inboundTopicId: string,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<void> {\n this.logger.info('Registering agent');\n const payload = {\n p: 'hcs-10',\n op: 'register',\n account_id: accountId,\n inbound_topic_id: inboundTopicId,\n m: memo,\n };\n\n await this.submitPayload(registryTopicId, payload, submitKey);\n }\n\n async getInboundTopicType(topicId: string): Promise<InboundTopicType> {\n try {\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n\n if (!topicInfo) {\n throw new Error('Topic does not exist');\n }\n\n const hasSubmitKey = topicInfo.submit_key && topicInfo.submit_key.key;\n\n if (!hasSubmitKey) {\n return InboundTopicType.PUBLIC;\n }\n\n const hasFeeScheduleKey =\n topicInfo.fee_schedule_key && topicInfo.fee_schedule_key.key;\n\n if (hasFeeScheduleKey && topicInfo.custom_fees) {\n const customFees = topicInfo.custom_fees;\n\n if (\n customFees &&\n customFees.fixed_fees &&\n customFees.fixed_fees.length > 0\n ) {\n this.logger.info(\n `Topic ${topicId} is fee-based with ${customFees.fixed_fees.length} custom fees`\n );\n return InboundTopicType.FEE_BASED;\n }\n }\n\n return InboundTopicType.CONTROLLED;\n } catch (error: any) {\n this.logger.error(`Error determining topic type: ${error.message}`);\n throw new Error(`Failed to determine topic type: ${error.message}`);\n }\n }\n\n getNetwork(): string {\n return this.network;\n }\n\n getLogger(): Logger {\n return this.logger;\n }\n}\n"],"names":["mime.lookup"],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es5.js","sources":["../../src/hcs-10/sdk.ts"],"sourcesContent":["import {\n Client,\n AccountCreateTransaction,\n PrivateKey,\n Hbar,\n KeyList,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n TopicId,\n Transaction,\n TransactionResponse,\n TransactionReceipt,\n PublicKey,\n AccountId,\n CustomFixedFee,\n} from '@hashgraph/sdk';\nimport {\n PayloadSizeError,\n AccountCreationError,\n TopicCreationError,\n ConnectionConfirmationError,\n} from './errors';\nimport {\n InscriptionSDK,\n RetrievedInscriptionResult,\n} from '@kiloscribe/inscription-sdk';\nimport { Logger, LogLevel } from '../utils/logger';\nimport { HCS10BaseClient } from './base-client';\nimport * as mime from 'mime-types';\nimport {\n HCSClientConfig,\n AgentConfig,\n CreateAccountResponse,\n CreateAgentResponse,\n InscribePfpResponse,\n StoreHCS11ProfileResponse,\n AgentRegistrationResult,\n HandleConnectionRequestResponse,\n WaitForConnectionConfirmationResponse,\n GetAccountAndSignerResponse,\n InboundTopicType,\n TopicFeeConfig,\n FeeConfigBuilderInterface,\n AgentCreationState,\n} from './types';\nimport { HCS11Client } from '../hcs-11';\nimport { AgentBuilder } from './agent-builder';\nimport { accountIdsToExemptKeys } from '../utils/topic-fee-utils';\nimport { Hcs10MemoType } from './base-client';\n\nexport { InboundTopicType } from './types';\nexport { FeeConfigBuilder } from './fee-config-builder';\n\nexport interface AgentMetadata {\n type: 'autonomous' | 'manual';\n model?: string;\n socials?: {\n twitter?: string;\n discord?: string;\n github?: string;\n website?: string;\n x?: string;\n linkedin?: string;\n youtube?: string;\n telegram?: string;\n };\n creator?: string;\n properties?: Record<string, any>;\n}\n\n/**\n * Progress report data for registration operations\n */\nexport interface RegistrationProgressData {\n stage: 'preparing' | 'submitting' | 'confirming' | 'verifying' | 'completed';\n message: string;\n progressPercent?: number;\n details?: Record<string, any>;\n}\n\n/**\n * Progress callback function type for registration operations\n */\nexport type RegistrationProgressCallback = (\n data: RegistrationProgressData\n) => void;\n\nexport class HCS10Client extends HCS10BaseClient {\n private client: Client;\n private operatorPrivateKey: PrivateKey;\n protected declare network: string;\n protected declare logger: Logger;\n protected guardedRegistryBaseUrl: string;\n private hcs11Client: HCS11Client;\n\n constructor(config: HCSClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n prettyPrint: config.prettyPrint,\n feeAmount: config.feeAmount,\n });\n this.client =\n config.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();\n this.operatorPrivateKey = PrivateKey.fromString(config.operatorPrivateKey);\n this.network = config.network;\n this.client.setOperator(\n config.operatorId,\n this.operatorPrivateKey.toString()\n );\n this.logger = Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-SDK',\n });\n this.guardedRegistryBaseUrl =\n config.guardedRegistryBaseUrl || 'https://moonscape.tech';\n\n this.hcs11Client = new HCS11Client({\n network: config.network,\n auth: {\n operatorId: config.operatorId,\n privateKey: config.operatorPrivateKey,\n },\n logLevel: config.logLevel,\n });\n }\n\n public getClient() {\n return this.client;\n }\n\n /**\n * Creates a new Hedera account\n * @returns Object with account ID and private key\n */\n async createAccount(): Promise<CreateAccountResponse> {\n this.logger.info('Creating new account');\n const newKey = PrivateKey.generate();\n\n const accountTransaction = new AccountCreateTransaction()\n .setKey(newKey.publicKey)\n .setInitialBalance(new Hbar(10));\n\n this.logger.debug('Executing account creation transaction');\n const accountResponse = await accountTransaction.execute(this.client);\n const accountReceipt = await accountResponse.getReceipt(this.client);\n const newAccountId = accountReceipt.accountId;\n\n if (!newAccountId) {\n this.logger.error('Account creation failed: accountId is null');\n throw new AccountCreationError(\n 'Failed to create account: accountId is null'\n );\n }\n\n this.logger.info(\n `Account created successfully: ${newAccountId.toString()}`\n );\n return {\n accountId: newAccountId.toString(),\n privateKey: newKey.toString(),\n };\n }\n\n /**\n * Creates an inbound topic for an agent\n * @param accountId The account ID associated with the inbound topic\n * @param topicType Type of inbound topic (public, controlled, or fee-based)\n * @param ttl Optional Time-To-Live for the topic memo, defaults to 60\n * @param feeConfigBuilder Optional fee configuration builder for fee-based topics\n * @returns The topic ID of the created inbound topic\n */\n async createInboundTopic(\n accountId: string,\n topicType: InboundTopicType,\n ttl: number = 60,\n feeConfigBuilder?: FeeConfigBuilderInterface\n ): Promise<string> {\n const memo = this._generateHcs10Memo(Hcs10MemoType.INBOUND, {\n accountId,\n ttl,\n });\n\n let submitKey: boolean | PublicKey | KeyList | undefined;\n let feeConfig: TopicFeeConfig | undefined;\n\n switch (topicType) {\n case InboundTopicType.PUBLIC:\n submitKey = false;\n break;\n case InboundTopicType.CONTROLLED:\n submitKey = true;\n break;\n case InboundTopicType.FEE_BASED:\n submitKey = true;\n if (!feeConfigBuilder) {\n throw new Error(\n 'Fee configuration builder is required for fee-based topics'\n );\n }\n feeConfig = feeConfigBuilder.build();\n break;\n default:\n throw new Error(`Unsupported inbound topic type: ${topicType}`);\n }\n\n return this.createTopic(memo, true, submitKey, feeConfig);\n }\n\n /**\n * Creates a new agent with inbound and outbound topics\n * @param builder The agent builder object\n * @param ttl Optional Time-To-Live for the topic memos, defaults to 60\n * @returns Object with topic IDs\n */\n async createAgent(\n builder: AgentBuilder,\n ttl: number = 60\n ): Promise<CreateAgentResponse> {\n const config = builder.build();\n const outboundMemo = this._generateHcs10Memo(Hcs10MemoType.OUTBOUND, {\n ttl,\n });\n const outboundTopicId = await this.createTopic(outboundMemo, true, true);\n this.logger.info(`Created new outbound topic ID: ${outboundTopicId}`);\n\n const accountId = this.client.operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n const inboundTopicId = await this.createInboundTopic(\n accountId,\n config.inboundTopicType,\n ttl,\n config.inboundTopicType === InboundTopicType.FEE_BASED\n ? config.feeConfig\n : undefined\n );\n\n let pfpTopicId = config.existingPfpTopicId || '';\n\n if (!pfpTopicId && config.pfpBuffer && config.pfpBuffer.length > 0) {\n this.logger.info('Inscribing new profile picture');\n const pfpResult = await this.inscribePfp(\n config.pfpBuffer,\n config.pfpFileName\n );\n pfpTopicId = pfpResult.pfpTopicId;\n this.logger.info(\n `Profile picture inscribed with topic ID: ${pfpTopicId}`\n );\n } else if (config.existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${config.existingPfpTopicId}`\n );\n }\n\n const profileResult = await this.storeHCS11Profile(\n config.name,\n config.description,\n inboundTopicId,\n outboundTopicId,\n config.capabilities,\n config.metadata,\n config.pfpBuffer && config.pfpBuffer.length > 0\n ? config.pfpBuffer\n : undefined,\n config.pfpFileName,\n config.existingPfpTopicId\n );\n const profileTopicId = profileResult.profileTopicId;\n this.logger.info(`Profile stored with topic ID: ${profileTopicId}`);\n\n return {\n inboundTopicId,\n outboundTopicId,\n pfpTopicId,\n profileTopicId,\n };\n }\n\n /**\n * Inscribes a profile picture to Hedera\n * @param buffer Profile picture buffer\n * @param fileName Filename\n * @returns Response with topic ID and transaction ID\n */\n async inscribePfp(\n buffer: Buffer,\n fileName: string\n ): Promise<InscribePfpResponse> {\n try {\n this.logger.info('Inscribing profile picture using HCS-11 client');\n\n const imageResult = await this.hcs11Client.inscribeImage(\n buffer,\n fileName\n );\n\n if (!imageResult.success) {\n this.logger.error(\n `Failed to inscribe profile picture: ${imageResult.error}`\n );\n throw new Error(\n imageResult?.error || 'Failed to inscribe profile picture'\n );\n }\n\n this.logger.info(\n `Successfully inscribed profile picture with topic ID: ${imageResult.imageTopicId}`\n );\n return {\n pfpTopicId: imageResult.imageTopicId,\n transactionId: imageResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error inscribing profile picture: ${error.message}`);\n return {\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n /**\n * Stores an HCS-11 profile for an agent\n * @param agentName Agent name\n * @param agentDescription Agent description\n * @param inboundTopicId Inbound topic ID\n * @param outboundTopicId Outbound topic ID\n * @param capabilities Agent capability tags\n * @param metadata Additional metadata\n * @param pfpBuffer Optional profile picture buffer\n * @param pfpFileName Optional profile picture filename\n * @returns Response with topic IDs and transaction ID\n */\n async storeHCS11Profile(\n agentName: string,\n agentDescription: string,\n inboundTopicId: string,\n outboundTopicId: string,\n capabilities: number[] = [],\n metadata: AgentMetadata,\n pfpBuffer?: Buffer,\n pfpFileName?: string,\n existingPfpTopicId?: string\n ): Promise<StoreHCS11ProfileResponse> {\n try {\n let pfpTopicId = existingPfpTopicId || '';\n\n if (!pfpTopicId && pfpBuffer && pfpFileName) {\n this.logger.info('Inscribing profile picture for HCS-11 profile');\n const pfpResult = await this.inscribePfp(pfpBuffer, pfpFileName);\n if (!pfpResult.success) {\n this.logger.error(\n 'Failed to inscribe profile picture, continuing without PFP'\n );\n } else {\n pfpTopicId = pfpResult.pfpTopicId;\n }\n } else if (existingPfpTopicId) {\n this.logger.info(\n `Using existing profile picture with topic ID: ${existingPfpTopicId} for HCS-11 profile`\n );\n }\n\n const agentType = this.hcs11Client.getAgentTypeFromMetadata({\n type: metadata.type || 'autonomous',\n } as AgentMetadata);\n\n const formattedSocials = metadata.socials\n ? Object.entries(metadata.socials)\n .filter(([_, handle]) => handle)\n .map(([platform, handle]) => ({\n platform: platform === 'x' ? 'twitter' : platform,\n handle,\n }))\n : undefined;\n\n const profile = this.hcs11Client.createAIAgentProfile(\n agentName,\n agentType,\n capabilities,\n metadata.model || 'unknown',\n {\n alias: agentName.toLowerCase().replace(/\\s+/g, '_'),\n bio: agentDescription,\n profileImage: pfpTopicId ? `hcs://1/${pfpTopicId}` : undefined,\n socials: formattedSocials,\n properties: metadata.properties,\n inboundTopicId,\n outboundTopicId,\n creator: metadata.creator,\n }\n );\n\n const profileResult = await this.hcs11Client.createAndInscribeProfile(\n profile,\n true\n );\n\n if (!profileResult.success) {\n this.logger.error(`Failed to inscribe profile: ${profileResult.error}`);\n throw new Error(profileResult.error || 'Failed to inscribe profile');\n }\n\n this.logger.info(\n `Profile inscribed with topic ID: ${profileResult.profileTopicId}, transaction ID: ${profileResult.transactionId}`\n );\n\n return {\n profileTopicId: profileResult.profileTopicId,\n pfpTopicId,\n transactionId: profileResult.transactionId,\n success: true,\n };\n } catch (error: any) {\n this.logger.error(`Error storing HCS-11 profile: ${error.message}`);\n return {\n profileTopicId: '',\n pfpTopicId: '',\n transactionId: '',\n success: false,\n error: error.message,\n };\n }\n }\n\n private async setupFees(\n transaction: TopicCreateTransaction,\n feeConfig: TopicFeeConfig,\n additionalExemptAccounts: string[] = []\n ): Promise<void> {\n if (!this.client.operatorPublicKey) {\n return;\n }\n\n this.logger.info('Setting up topic with custom fees');\n\n const customFee = new CustomFixedFee()\n .setAmount(Number(feeConfig.feeAmount.amount))\n .setFeeCollectorAccountId(\n AccountId.fromString(feeConfig.feeCollectorAccountId)\n );\n\n let exemptAccountIds = [\n ...(feeConfig.exemptAccounts || []),\n ...additionalExemptAccounts,\n ];\n\n console.log('exemptAccountIds', exemptAccountIds);\n\n if (exemptAccountIds.length > 0) {\n const uniqueExemptAccountIds = Array.from(new Set(exemptAccountIds));\n const filteredExemptAccounts = uniqueExemptAccountIds.filter(\n (account) => account !== this.client.operatorAccountId?.toString()\n );\n\n let exemptKeys: PublicKey[] = [];\n if (filteredExemptAccounts.length > 0) {\n try {\n exemptKeys = await accountIdsToExemptKeys(\n filteredExemptAccounts,\n this.network,\n this.logger\n );\n } catch (error) {\n this.logger.warn(\n `Error getting exempt keys: ${error}, continuing without exempt keys`\n );\n }\n }\n\n if (exemptKeys.length > 0) {\n transaction.setFeeExemptKeys(exemptKeys);\n }\n }\n\n transaction\n .setFeeScheduleKey(this.client.operatorPublicKey)\n .setCustomFees([customFee]);\n }\n\n /**\n * Handles a connection request from another account\n * @param inboundTopicId Inbound topic ID\n * @param requestingAccountId Requesting account ID\n * @param connectionRequestId Connection request ID\n * @param connectionFeeConfig Optional fee configuration for the connection topic\n * @param ttl Optional ttl parameter with default\n * @returns Response with connection details\n */\n async handleConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n connectionRequestId: number,\n connectionFeeConfig?: FeeConfigBuilderInterface,\n ttl: number = 60\n ): Promise<HandleConnectionRequestResponse> {\n const memo = this._generateHcs10Memo(Hcs10MemoType.CONNECTION, {\n ttl,\n inboundTopicId,\n connectionId: connectionRequestId,\n });\n this.logger.info(\n `Handling connection request ${connectionRequestId} from ${requestingAccountId}`\n );\n\n const accountId = this.getClient().operatorAccountId?.toString();\n if (!accountId) {\n throw new Error('Failed to retrieve operator account ID');\n }\n\n let requesterKey = await this.mirrorNode.getPublicKey(requestingAccountId);\n const accountKey = await this.mirrorNode.getPublicKey(accountId);\n\n if (!accountKey) {\n throw new Error('Failed to retrieve public key');\n }\n\n const thresholdKey = new KeyList([accountKey, requesterKey], 1);\n\n let connectionTopicId: string;\n\n try {\n if (connectionFeeConfig) {\n const feeConfig = connectionFeeConfig.build();\n const modifiedFeeConfig = {\n ...feeConfig,\n exemptAccounts: [...(feeConfig.exemptAccounts || [])],\n };\n\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey,\n modifiedFeeConfig\n );\n } else {\n connectionTopicId = await this.createTopic(\n memo,\n thresholdKey,\n thresholdKey\n );\n }\n\n this.logger.info(`Created new connection topic ID: ${connectionTopicId}`);\n } catch (error) {\n this.logger.error(`Failed to create connection topic: ${error}`);\n throw new TopicCreationError(\n `Failed to create connection topic: ${error}`\n );\n }\n\n const operatorId = `${inboundTopicId}@${accountId}`;\n\n const confirmedConnectionSequenceNumber = await this.confirmConnection(\n inboundTopicId,\n connectionTopicId,\n requestingAccountId,\n connectionRequestId,\n operatorId,\n 'Connection accepted. Looking forward to collaborating!'\n );\n\n return {\n connectionTopicId,\n confirmedConnectionSequenceNumber,\n operatorId,\n };\n }\n\n async confirmConnection(\n inboundTopicId: string,\n connectionTopicId: string,\n connectedAccountId: string,\n connectionId: number,\n operatorId: string,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<number> {\n this.logger.info(`Confirming connection with ID ${connectionId}`);\n const payload = {\n p: 'hcs-10',\n op: 'connection_created',\n connection_topic_id: connectionTopicId,\n connected_account_id: connectedAccountId,\n operator_id: operatorId,\n connection_id: connectionId,\n m: memo,\n };\n\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n const result = await this.submitPayload(\n inboundTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n\n const sequenceNumber = result.topicSequenceNumber?.toNumber();\n\n if (!sequenceNumber) {\n throw new ConnectionConfirmationError(\n 'Failed to confirm connection: sequence number is null'\n );\n }\n\n return sequenceNumber;\n }\n\n async sendMessage(\n connectionTopicId: string,\n data: string,\n memo?: string,\n submitKey?: PrivateKey\n ): Promise<TransactionReceipt> {\n const submissionCheck = await this.canSubmitToTopic(\n connectionTopicId,\n this.client.operatorAccountId?.toString() || ''\n );\n\n const operatorId = await this.getOperatorId();\n\n const payload = {\n p: 'hcs-10',\n op: 'message',\n operator_id: operatorId,\n data,\n m: memo,\n };\n\n const payloadString = JSON.stringify(payload);\n const isLargePayload = Buffer.from(payloadString).length > 1000;\n\n if (isLargePayload) {\n this.logger.info(\n 'Message payload exceeds 1000 bytes, storing via inscription'\n );\n try {\n const contentBuffer = Buffer.from(data);\n const fileName = `message-${Date.now()}.json`;\n const inscriptionResult = await this.inscribeFile(\n contentBuffer,\n fileName\n );\n\n if (inscriptionResult?.topic_id) {\n payload.data = `hcs://1/${inscriptionResult.topic_id}`;\n this.logger.info(\n `Large message inscribed with topic ID: ${inscriptionResult.topic_id}`\n );\n } else {\n throw new Error('Failed to inscribe large message content');\n }\n } catch (error) {\n this.logger.error('Error inscribing large message:', error);\n throw new Error(\n `Failed to handle large message: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n\n this.logger.info('Submitting message to connection topic', payload);\n return await this.submitPayload(\n connectionTopicId,\n payload,\n submitKey,\n submissionCheck.requiresFee\n );\n }\n\n async createTopic(\n memo: string,\n adminKey?: boolean | PublicKey | KeyList,\n submitKey?: boolean | PublicKey | KeyList,\n feeConfig?: TopicFeeConfig\n ): Promise<string> {\n this.logger.info('Creating topic');\n const transaction = new TopicCreateTransaction().setTopicMemo(memo);\n\n if (adminKey) {\n if (\n typeof adminKey === 'boolean' &&\n adminKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setAdminKey(this.client.operatorPublicKey);\n transaction.setAutoRenewAccountId(this.client.operatorAccountId!);\n } else if (adminKey instanceof PublicKey || adminKey instanceof KeyList) {\n transaction.setAdminKey(adminKey);\n if (this.client.operatorAccountId) {\n transaction.setAutoRenewAccountId(this.client.operatorAccountId);\n }\n }\n }\n\n if (submitKey) {\n if (\n typeof submitKey === 'boolean' &&\n submitKey &&\n this.client.operatorPublicKey\n ) {\n transaction.setSubmitKey(this.client.operatorPublicKey);\n } else if (\n submitKey instanceof PublicKey ||\n submitKey instanceof KeyList\n ) {\n transaction.setSubmitKey(submitKey);\n }\n }\n\n if (feeConfig) {\n await this.setupFees(transaction, feeConfig);\n }\n\n this.logger.debug('Executing topic creation transaction');\n const txResponse = await transaction.execute(this.client);\n const receipt = await txResponse.getReceipt(this.client);\n\n if (!receipt.topicId) {\n this.logger.error('Failed to create topic: topicId is null');\n throw new Error('Failed to create topic: topicId is null');\n }\n\n const topicId = receipt.topicId.toString();\n return topicId;\n }\n\n public async submitPayload(\n topicId: string,\n payload: object | string,\n submitKey?: PrivateKey,\n requiresFee: boolean = false\n ): Promise<TransactionReceipt> {\n const message =\n typeof payload === 'string' ? payload : JSON.stringify(payload);\n\n const payloadSizeInBytes = Buffer.byteLength(message, 'utf8');\n if (payloadSizeInBytes > 1000) {\n throw new PayloadSizeError(\n 'Payload size exceeds 1000 bytes limit',\n payloadSizeInBytes\n );\n }\n\n const transaction = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(topicId))\n .setMessage(message);\n\n if (requiresFee) {\n this.logger.info(\n 'Topic requires fee payment, setting max transaction fee'\n );\n transaction.setMaxTransactionFee(new Hbar(this.feeAmount));\n transaction.setTransactionMemo('HIP-991 Fee Payment');\n }\n\n let transactionResponse: TransactionResponse;\n if (submitKey) {\n transaction.freezeWith(this.client);\n const signedTransaction = await transaction.sign(submitKey);\n transactionResponse = await signedTransaction.execute(this.client);\n } else {\n transactionResponse = await transaction.execute(this.client);\n }\n\n const receipt = await transactionResponse.getReceipt(this.client);\n if (!receipt) {\n this.logger.error('Failed to submit message: receipt is null');\n throw new Error('Failed to submit message: receipt is null');\n }\n this.logger.info('Message submitted successfully');\n return receipt;\n }\n\n async submitConnectionRequest(\n inboundTopicId: string,\n requestingAccountId: string,\n operatorId: string,\n memo: string\n ): Promise<TransactionReceipt> {\n const submissionCheck = await this.canSubmitToTopic(\n inboundTopicId,\n requestingAccountId\n );\n\n if (!submissionCheck.canSubmit) {\n throw new Error(`Cannot submit to topic: ${submissionCheck.reason}`);\n }\n\n const connectionRequestMessage = {\n p: 'hcs-10',\n op: 'connection_request',\n operator_id: operatorId,\n memo: memo,\n };\n\n const requiresFee = submissionCheck.requiresFee;\n const response = await this.submitPayload(\n inboundTopicId,\n connectionRequestMessage,\n undefined,\n requiresFee\n );\n\n this.logger.info(\n `Submitted connection request to topic ID: ${inboundTopicId}`\n );\n\n const outboundTopic = await this.retrieveOutboundConnectTopic(\n requestingAccountId\n );\n\n const responseSequenceNumber = response.topicSequenceNumber?.toNumber();\n\n if (!responseSequenceNumber) {\n throw new Error('Failed to get response sequence number');\n }\n\n await this.submitPayload(\n outboundTopic.outboundTopic,\n {\n ...connectionRequestMessage,\n outbound_topic_id: outboundTopic.outboundTopic,\n connection_request_id: responseSequenceNumber,\n },\n this.operatorPrivateKey\n );\n\n return response;\n }\n\n async inscribeFile(\n buffer: Buffer,\n fileName: string\n ): Promise<RetrievedInscriptionResult> {\n this.logger.info('Inscribing file');\n if (!this.client.operatorAccountId) {\n this.logger.error('Operator account ID is not set');\n throw new Error('Operator account ID is not set');\n }\n\n if (!this.operatorPrivateKey) {\n this.logger.error('Operator private key is not set');\n throw new Error('Operator private key is not set');\n }\n\n const mimeType = mime.lookup(fileName) || 'application/octet-stream';\n\n const sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n });\n\n const result = await sdk.inscribeAndExecute(\n {\n file: {\n type: 'base64',\n base64: buffer.toString('base64'),\n fileName,\n mimeType,\n },\n holderId: this.client.operatorAccountId.toString(),\n mode: 'file',\n network: this.network as 'testnet' | 'mainnet',\n },\n {\n accountId: this.client.operatorAccountId.toString(),\n privateKey: this.operatorPrivateKey.toString(),\n network: this.network as 'testnet' | 'mainnet',\n }\n );\n\n if (!result.transactionId || !result.jobId) {\n this.logger.error('Failed to inscribe, no transaction ID or job ID.');\n throw new Error('Failed to inscribe, no transaction ID or job ID.');\n }\n\n if (result.transactionId && result.jobId) {\n this.logger.info(\n `Transaction ID: ${result.transactionId}, Job ID: ${result.jobId}`\n );\n }\n\n const status = await sdk.waitForInscription(result.jobId, 30, 4000, true);\n return status;\n }\n\n /**\n * Waits for confirmation of a connection request\n * @param inboundTopicId Inbound topic ID\n * @param connectionRequestId Connection request ID\n * @param maxAttempts Maximum number of attempts\n * @param delayMs Delay between attempts in milliseconds\n * @returns Connection confirmation details\n */\n async waitForConnectionConfirmation(\n inboundTopicId: string,\n connectionRequestId: number,\n maxAttempts = 60,\n delayMs = 2000\n ): Promise<WaitForConnectionConfirmationResponse> {\n this.logger.info(\n `Waiting for connection confirmation on inbound topic ${inboundTopicId} for request ID ${connectionRequestId}`\n );\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n this.logger.info(\n `Attempt ${attempt + 1}/${maxAttempts} to find connection confirmation`\n );\n const messages = await this.mirrorNode.getTopicMessages(inboundTopicId);\n\n const connectionCreatedMessages = messages.filter(\n (m) => m.op === 'connection_created'\n );\n\n this.logger.info(\n `Found ${connectionCreatedMessages.length} connection_created messages`\n );\n\n if (connectionCreatedMessages.length > 0) {\n for (const message of connectionCreatedMessages) {\n if (Number(message.connection_id) === Number(connectionRequestId)) {\n this.logger.info('Connection confirmation found');\n return {\n connectionTopicId: message.connection_topic_id,\n sequence_number: Number(message.sequence_number),\n confirmedBy: message.operator_id,\n memo: message.m,\n };\n }\n }\n }\n\n if (attempt < maxAttempts - 1) {\n this.logger.info(\n `No matching confirmation found, waiting ${delayMs}ms before retrying...`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw new Error(\n `Connection confirmation not found after ${maxAttempts} attempts for request ID ${connectionRequestId}`\n );\n }\n\n getAccountAndSigner(): GetAccountAndSignerResponse {\n return {\n accountId: this.client.operatorAccountId!.toString()!,\n signer: this.operatorPrivateKey,\n };\n }\n\n /**\n * Creates and registers an agent with a Guarded registry.\n *\n * This function performs the following steps:\n * 1. Creates a new account if no existing account is provided.\n * 2. Initializes an HCS10 client with the new account.\n * 3. Creates an agent on the client.\n * 4. Registers the agent with the Hashgraph Online Guarded Registry.\n *\n * @param builder The agent builder object\n * @param options Optional configuration including progress callback and state management\n * @returns Agent registration result\n */\n async createAndRegisterAgent(\n builder: AgentBuilder,\n options?: {\n baseUrl?: string;\n progressCallback?: RegistrationProgressCallback;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n const config = builder.build();\n const progressCallback = options?.progressCallback;\n const baseUrl = options?.baseUrl || this.guardedRegistryBaseUrl;\n let state = options?.existingState || undefined;\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing agent registration',\n progressPercent: 10,\n details: { state },\n });\n }\n\n const account = config.existingAccount || (await this.createAccount());\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Created account or using existing account',\n progressPercent: 20,\n details: { state, account },\n });\n }\n\n const agentClient = new HCS10Client({\n network: config.network,\n operatorId: account.accountId,\n operatorPrivateKey: account.privateKey,\n operatorPublicKey: PrivateKey.fromString(\n account.privateKey\n ).publicKey.toString(),\n logLevel: 'info' as LogLevel,\n guardedRegistryBaseUrl: baseUrl,\n });\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Initialized agent client',\n progressPercent: 30,\n details: { state },\n });\n }\n\n const { outboundTopicId, inboundTopicId, pfpTopicId, profileTopicId } =\n await agentClient.createAgent(builder);\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Created agent with topics and profile',\n progressPercent: 60,\n details: {\n state,\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n },\n });\n }\n\n const operatorId = `${inboundTopicId}@${account.accountId}`;\n\n const registrationResult =\n await agentClient.registerAgentWithGuardedRegistry(\n account.accountId,\n config.network,\n {\n progressCallback: (data) => {\n const adjustedPercent = 60 + (data.progressPercent || 0) * 0.4;\n if (progressCallback) {\n progressCallback({\n stage: data.stage,\n message: data.message,\n progressPercent: adjustedPercent,\n details: {\n ...data.details,\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n operatorId,\n state: data.details?.state || state,\n },\n });\n }\n },\n existingState: state,\n }\n );\n\n if (!registrationResult.success) {\n return registrationResult;\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'completed',\n message: 'Agent creation and registration complete',\n progressPercent: 100,\n details: {\n outboundTopicId,\n inboundTopicId,\n pfpTopicId,\n profileTopicId,\n operatorId,\n state: registrationResult.state,\n },\n });\n }\n\n return {\n ...registrationResult,\n metadata: {\n accountId: account.accountId,\n privateKey: account.privateKey,\n operatorId,\n inboundTopicId,\n outboundTopicId,\n profileTopicId,\n pfpTopicId,\n },\n };\n } catch (error: any) {\n this.logger.error(\n `Failed to create and register agent: ${error.message}`\n );\n return {\n error: error.message,\n success: false,\n };\n }\n }\n\n /**\n * Registers an agent with the guarded registry\n * @param accountId Account ID to register\n * @param inboundTopicId Inbound topic ID for the agent\n * @param network Network type ('mainnet' or 'testnet')\n * @param options Optional configuration including progress callback and confirmation settings\n * @returns Registration result\n */\n async registerAgentWithGuardedRegistry(\n accountId: string,\n network: string = this.network,\n options?: {\n progressCallback?: RegistrationProgressCallback;\n maxAttempts?: number;\n delayMs?: number;\n existingState?: AgentCreationState;\n }\n ): Promise<AgentRegistrationResult> {\n try {\n this.logger.info('Registering agent with guarded registry');\n\n const maxAttempts = options?.maxAttempts ?? 60;\n const delayMs = options?.delayMs ?? 2000;\n const progressCallback = options?.progressCallback;\n let state =\n options?.existingState ||\n ({\n currentStage: 'registration',\n completedPercentage: 0,\n createdResources: [],\n } as AgentCreationState);\n\n if (progressCallback) {\n progressCallback({\n stage: 'preparing',\n message: 'Preparing agent registration',\n progressPercent: 10,\n details: {\n state,\n },\n });\n }\n\n const registrationResult = await this.executeRegistration(\n accountId,\n network,\n this.guardedRegistryBaseUrl,\n this.logger\n );\n\n if (!registrationResult.success) {\n return {\n ...registrationResult,\n state,\n };\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'submitting',\n message: 'Submitting registration to registry',\n progressPercent: 30,\n details: {\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n if (registrationResult.transaction) {\n const transaction = Transaction.fromBytes(\n Buffer.from(registrationResult.transaction, 'base64')\n );\n\n this.logger.info(`Processing registration transaction`);\n await transaction.execute(this.client);\n this.logger.info(`Successfully processed registration transaction`);\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'confirming',\n message: 'Confirming registration transaction',\n progressPercent: 60,\n details: {\n accountId,\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n const confirmed = await this.waitForRegistrationConfirmation(\n registrationResult.transactionId!,\n network,\n this.guardedRegistryBaseUrl,\n maxAttempts,\n delayMs,\n this.logger\n );\n\n state.currentStage = 'complete';\n state.completedPercentage = 100;\n if (!state.createdResources) {\n state.createdResources = [];\n }\n if (registrationResult.transactionId) {\n state.createdResources.push(\n `registration:${registrationResult.transactionId}`\n );\n }\n\n if (progressCallback) {\n progressCallback({\n stage: 'completed',\n message: 'Agent registration complete',\n progressPercent: 100,\n details: {\n confirmed,\n transactionId: registrationResult.transactionId,\n state,\n },\n });\n }\n\n return {\n ...registrationResult,\n confirmed,\n state,\n };\n } catch (error: any) {\n this.logger.error(`Failed to register agent: ${error.message}`);\n return {\n error: error.message,\n success: false,\n };\n }\n }\n\n /**\n * Registers an agent with the guarded registry. Should be called by a registry.\n * @param registryTopicId - The topic ID of the guarded registry.\n * @param accountId - The account ID of the agent\n * @param inboundTopicId - The topic ID of the inbound topic\n * @param memo - The memo of the agent\n * @param submitKey - The submit key of the agent\n */\n async registerAgent(\n registryTopicId: string,\n accountId: string,\n inboundTopicId: string,\n memo: string,\n submitKey?: PrivateKey\n ): Promise<void> {\n this.logger.info('Registering agent');\n const payload = {\n p: 'hcs-10',\n op: 'register',\n account_id: accountId,\n inbound_topic_id: inboundTopicId,\n m: memo,\n };\n\n await this.submitPayload(registryTopicId, payload, submitKey);\n }\n\n async getInboundTopicType(topicId: string): Promise<InboundTopicType> {\n try {\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n\n if (!topicInfo) {\n throw new Error('Topic does not exist');\n }\n\n const hasSubmitKey = topicInfo.submit_key && topicInfo.submit_key.key;\n\n if (!hasSubmitKey) {\n return InboundTopicType.PUBLIC;\n }\n\n const hasFeeScheduleKey =\n topicInfo.fee_schedule_key && topicInfo.fee_schedule_key.key;\n\n if (hasFeeScheduleKey && topicInfo.custom_fees) {\n const customFees = topicInfo.custom_fees;\n\n if (\n customFees &&\n customFees.fixed_fees &&\n customFees.fixed_fees.length > 0\n ) {\n this.logger.info(\n `Topic ${topicId} is fee-based with ${customFees.fixed_fees.length} custom fees`\n );\n return InboundTopicType.FEE_BASED;\n }\n }\n\n return InboundTopicType.CONTROLLED;\n } catch (error: any) {\n this.logger.error(`Error determining topic type: ${error.message}`);\n throw new Error(`Failed to determine topic type: ${error.message}`);\n }\n }\n\n getNetwork(): string {\n return this.network;\n }\n\n getLogger(): Logger {\n return this.logger;\n }\n}\n"],"names":["mime.lookup"],"mappings":"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"}