@stellar/stellar-sdk 16.0.0 → 16.1.0

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 (182) hide show
  1. package/README.md +2 -2
  2. package/dist/stellar-sdk-axios.js +5608 -4598
  3. package/dist/stellar-sdk-axios.js.map +1 -1
  4. package/dist/stellar-sdk-axios.min.js +12 -11
  5. package/dist/stellar-sdk-axios.min.js.map +1 -1
  6. package/dist/stellar-sdk.js +3902 -3434
  7. package/dist/stellar-sdk.js.map +1 -1
  8. package/dist/stellar-sdk.min.js +17 -17
  9. package/dist/stellar-sdk.min.js.map +1 -1
  10. package/lib/axios/cjs/base/auth.js +107 -0
  11. package/lib/axios/cjs/base/auth.js.map +1 -1
  12. package/lib/axios/cjs/base/keypair.js +39 -0
  13. package/lib/axios/cjs/base/keypair.js.map +1 -1
  14. package/lib/axios/cjs/base/scval.js +34 -0
  15. package/lib/axios/cjs/base/scval.js.map +1 -1
  16. package/lib/axios/cjs/bindings/config.js +1 -1
  17. package/lib/axios/cjs/cli/index.js +1 -1
  18. package/lib/axios/cjs/cli/index.js.map +1 -1
  19. package/lib/axios/cjs/contract/assembled_transaction.js +8 -7
  20. package/lib/axios/cjs/contract/assembled_transaction.js.map +1 -1
  21. package/lib/axios/cjs/contract/client.js +56 -3
  22. package/lib/axios/cjs/contract/client.js.map +1 -1
  23. package/lib/axios/cjs/contract/spec.js +7 -3
  24. package/lib/axios/cjs/contract/spec.js.map +1 -1
  25. package/lib/axios/cjs/errors/transaction_failed.js +62 -0
  26. package/lib/axios/cjs/errors/transaction_failed.js.map +1 -0
  27. package/lib/axios/cjs/errors/wrap_http_error.js +20 -0
  28. package/lib/axios/cjs/errors/wrap_http_error.js.map +1 -0
  29. package/lib/axios/cjs/federation/server.js +14 -15
  30. package/lib/axios/cjs/federation/server.js.map +1 -1
  31. package/lib/axios/cjs/horizon/call_builder.js +20 -0
  32. package/lib/axios/cjs/horizon/call_builder.js.map +1 -1
  33. package/lib/axios/cjs/horizon/horizon_api.js +5 -0
  34. package/lib/axios/cjs/horizon/horizon_api.js.map +1 -1
  35. package/lib/axios/cjs/horizon/horizon_axios_client.js +1 -1
  36. package/lib/axios/cjs/horizon/server.js +20 -26
  37. package/lib/axios/cjs/horizon/server.js.map +1 -1
  38. package/lib/axios/cjs/horizon/trade_aggregation_call_builder.js +20 -0
  39. package/lib/axios/cjs/horizon/trade_aggregation_call_builder.js.map +1 -1
  40. package/lib/axios/cjs/index.js +4 -0
  41. package/lib/axios/cjs/index.js.map +1 -1
  42. package/lib/axios/cjs/rpc/api.js.map +1 -1
  43. package/lib/axios/cjs/rpc/axios.js +1 -1
  44. package/lib/axios/cjs/rpc/server.js +163 -8
  45. package/lib/axios/cjs/rpc/server.js.map +1 -1
  46. package/lib/axios/esm/base/auth.d.ts +141 -0
  47. package/lib/axios/esm/base/auth.js +106 -1
  48. package/lib/axios/esm/base/auth.js.map +1 -1
  49. package/lib/axios/esm/base/index.d.ts +2 -2
  50. package/lib/axios/esm/base/keypair.d.ts +27 -0
  51. package/lib/axios/esm/base/keypair.js +39 -0
  52. package/lib/axios/esm/base/keypair.js.map +1 -1
  53. package/lib/axios/esm/base/scval.d.ts +4 -0
  54. package/lib/axios/esm/base/scval.js +34 -0
  55. package/lib/axios/esm/base/scval.js.map +1 -1
  56. package/lib/axios/esm/bindings/config.js +1 -1
  57. package/lib/axios/esm/cli/index.js +1 -1
  58. package/lib/axios/esm/cli/index.js.map +1 -1
  59. package/lib/axios/esm/contract/assembled_transaction.d.ts +1 -1
  60. package/lib/axios/esm/contract/assembled_transaction.js +9 -8
  61. package/lib/axios/esm/contract/assembled_transaction.js.map +1 -1
  62. package/lib/axios/esm/contract/client.d.ts +49 -3
  63. package/lib/axios/esm/contract/client.js +56 -3
  64. package/lib/axios/esm/contract/client.js.map +1 -1
  65. package/lib/axios/esm/contract/spec.js +7 -3
  66. package/lib/axios/esm/contract/spec.js.map +1 -1
  67. package/lib/axios/esm/errors/index.d.ts +1 -0
  68. package/lib/axios/esm/errors/transaction_failed.d.ts +55 -0
  69. package/lib/axios/esm/errors/transaction_failed.js +60 -0
  70. package/lib/axios/esm/errors/transaction_failed.js.map +1 -0
  71. package/lib/axios/esm/errors/wrap_http_error.d.ts +20 -0
  72. package/lib/axios/esm/errors/wrap_http_error.js +18 -0
  73. package/lib/axios/esm/errors/wrap_http_error.js.map +1 -0
  74. package/lib/axios/esm/federation/server.js +14 -15
  75. package/lib/axios/esm/federation/server.js.map +1 -1
  76. package/lib/axios/esm/horizon/call_builder.js +20 -0
  77. package/lib/axios/esm/horizon/call_builder.js.map +1 -1
  78. package/lib/axios/esm/horizon/horizon_api.d.ts +12 -1
  79. package/lib/axios/esm/horizon/horizon_api.js +5 -0
  80. package/lib/axios/esm/horizon/horizon_api.js.map +1 -1
  81. package/lib/axios/esm/horizon/horizon_axios_client.js +1 -1
  82. package/lib/axios/esm/horizon/server.d.ts +10 -4
  83. package/lib/axios/esm/horizon/server.js +20 -26
  84. package/lib/axios/esm/horizon/server.js.map +1 -1
  85. package/lib/axios/esm/horizon/trade_aggregation_call_builder.js +20 -0
  86. package/lib/axios/esm/horizon/trade_aggregation_call_builder.js.map +1 -1
  87. package/lib/axios/esm/index.js +2 -1
  88. package/lib/axios/esm/index.js.map +1 -1
  89. package/lib/axios/esm/node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/package.json +3 -0
  90. package/lib/axios/esm/rpc/api.d.ts +21 -0
  91. package/lib/axios/esm/rpc/api.js.map +1 -1
  92. package/lib/axios/esm/rpc/axios.js +1 -1
  93. package/lib/axios/esm/rpc/server.d.ts +104 -1
  94. package/lib/axios/esm/rpc/server.js +163 -8
  95. package/lib/axios/esm/rpc/server.js.map +1 -1
  96. package/lib/cjs/base/auth.js +107 -0
  97. package/lib/cjs/base/auth.js.map +1 -1
  98. package/lib/cjs/base/keypair.js +39 -0
  99. package/lib/cjs/base/keypair.js.map +1 -1
  100. package/lib/cjs/base/scval.js +34 -0
  101. package/lib/cjs/base/scval.js.map +1 -1
  102. package/lib/cjs/bindings/config.js +1 -1
  103. package/lib/cjs/cli/index.js +1 -1
  104. package/lib/cjs/cli/index.js.map +1 -1
  105. package/lib/cjs/contract/assembled_transaction.js +8 -7
  106. package/lib/cjs/contract/assembled_transaction.js.map +1 -1
  107. package/lib/cjs/contract/client.js +56 -3
  108. package/lib/cjs/contract/client.js.map +1 -1
  109. package/lib/cjs/contract/spec.js +7 -3
  110. package/lib/cjs/contract/spec.js.map +1 -1
  111. package/lib/cjs/errors/transaction_failed.js +62 -0
  112. package/lib/cjs/errors/transaction_failed.js.map +1 -0
  113. package/lib/cjs/errors/wrap_http_error.js +20 -0
  114. package/lib/cjs/errors/wrap_http_error.js.map +1 -0
  115. package/lib/cjs/federation/server.js +14 -15
  116. package/lib/cjs/federation/server.js.map +1 -1
  117. package/lib/cjs/horizon/call_builder.js +20 -0
  118. package/lib/cjs/horizon/call_builder.js.map +1 -1
  119. package/lib/cjs/horizon/horizon_api.js +5 -0
  120. package/lib/cjs/horizon/horizon_api.js.map +1 -1
  121. package/lib/cjs/horizon/horizon_axios_client.js +1 -1
  122. package/lib/cjs/horizon/server.js +20 -26
  123. package/lib/cjs/horizon/server.js.map +1 -1
  124. package/lib/cjs/horizon/trade_aggregation_call_builder.js +20 -0
  125. package/lib/cjs/horizon/trade_aggregation_call_builder.js.map +1 -1
  126. package/lib/cjs/index.js +4 -0
  127. package/lib/cjs/index.js.map +1 -1
  128. package/lib/cjs/rpc/api.js.map +1 -1
  129. package/lib/cjs/rpc/axios.js +1 -1
  130. package/lib/cjs/rpc/server.js +163 -8
  131. package/lib/cjs/rpc/server.js.map +1 -1
  132. package/lib/esm/base/auth.d.ts +141 -0
  133. package/lib/esm/base/auth.js +106 -1
  134. package/lib/esm/base/auth.js.map +1 -1
  135. package/lib/esm/base/index.d.ts +2 -2
  136. package/lib/esm/base/keypair.d.ts +27 -0
  137. package/lib/esm/base/keypair.js +39 -0
  138. package/lib/esm/base/keypair.js.map +1 -1
  139. package/lib/esm/base/scval.d.ts +4 -0
  140. package/lib/esm/base/scval.js +34 -0
  141. package/lib/esm/base/scval.js.map +1 -1
  142. package/lib/esm/bindings/config.js +1 -1
  143. package/lib/esm/cli/index.js +1 -1
  144. package/lib/esm/cli/index.js.map +1 -1
  145. package/lib/esm/contract/assembled_transaction.d.ts +1 -1
  146. package/lib/esm/contract/assembled_transaction.js +9 -8
  147. package/lib/esm/contract/assembled_transaction.js.map +1 -1
  148. package/lib/esm/contract/client.d.ts +49 -3
  149. package/lib/esm/contract/client.js +56 -3
  150. package/lib/esm/contract/client.js.map +1 -1
  151. package/lib/esm/contract/spec.js +7 -3
  152. package/lib/esm/contract/spec.js.map +1 -1
  153. package/lib/esm/errors/index.d.ts +1 -0
  154. package/lib/esm/errors/transaction_failed.d.ts +55 -0
  155. package/lib/esm/errors/transaction_failed.js +60 -0
  156. package/lib/esm/errors/transaction_failed.js.map +1 -0
  157. package/lib/esm/errors/wrap_http_error.d.ts +20 -0
  158. package/lib/esm/errors/wrap_http_error.js +18 -0
  159. package/lib/esm/errors/wrap_http_error.js.map +1 -0
  160. package/lib/esm/federation/server.js +14 -15
  161. package/lib/esm/federation/server.js.map +1 -1
  162. package/lib/esm/horizon/call_builder.js +20 -0
  163. package/lib/esm/horizon/call_builder.js.map +1 -1
  164. package/lib/esm/horizon/horizon_api.d.ts +12 -1
  165. package/lib/esm/horizon/horizon_api.js +5 -0
  166. package/lib/esm/horizon/horizon_api.js.map +1 -1
  167. package/lib/esm/horizon/horizon_axios_client.js +1 -1
  168. package/lib/esm/horizon/server.d.ts +10 -4
  169. package/lib/esm/horizon/server.js +20 -26
  170. package/lib/esm/horizon/server.js.map +1 -1
  171. package/lib/esm/horizon/trade_aggregation_call_builder.js +20 -0
  172. package/lib/esm/horizon/trade_aggregation_call_builder.js.map +1 -1
  173. package/lib/esm/index.js +2 -1
  174. package/lib/esm/index.js.map +1 -1
  175. package/lib/esm/node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/package.json +3 -0
  176. package/lib/esm/rpc/api.d.ts +21 -0
  177. package/lib/esm/rpc/api.js.map +1 -1
  178. package/lib/esm/rpc/axios.js +1 -1
  179. package/lib/esm/rpc/server.d.ts +104 -1
  180. package/lib/esm/rpc/server.js +163 -8
  181. package/lib/esm/rpc/server.js.map +1 -1
  182. package/package.json +27 -30
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+
3
+ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/int.js');
4
+ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/hyper.js');
5
+ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-int.js');
6
+ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-hyper.js');
7
+ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/xdr-type.js');
8
+ require('buffer');
9
+ var curr_generated = require('../base/generated/curr_generated.js');
10
+ require('@noble/hashes/sha2.js');
11
+ require('../base/signing.js');
12
+ require('../base/keypair.js');
13
+ require('base32.js');
14
+ require('../base/util/continued_fraction.js');
15
+ require('../base/util/bignumber.js');
16
+ require('../base/transaction_builder.js');
17
+ require('../base/muxed_account.js');
18
+ require('../base/scval.js');
19
+ require('../base/numbers/uint128.js');
20
+ require('../base/numbers/uint256.js');
21
+ require('../base/numbers/int128.js');
22
+ require('../base/numbers/int256.js');
23
+ var bad_response = require('./bad_response.js');
24
+
25
+ class TransactionFailedError extends bad_response.BadResponseError {
26
+ /**
27
+ * Returns the transaction- and operation-level result codes reported by
28
+ * Horizon, e.g. `{ transaction: "tx_failed", operations: ["op_underfunded"] }`.
29
+ *
30
+ * Horizon omits `operations` when the transaction failed a
31
+ * transaction-level check (e.g. `tx_bad_seq`) and no operations were
32
+ * evaluated; this accessor normalizes that to an empty array.
33
+ *
34
+ * @returns The `result_codes` object from the response's `extras`.
35
+ */
36
+ getResultCodes() {
37
+ const { transaction, operations = [] } = this.extras().result_codes;
38
+ return { transaction, operations };
39
+ }
40
+ /**
41
+ * Decodes and returns the {@link xdr.TransactionResult} from the response's
42
+ * `extras.result_xdr`, providing structured access to per-operation results.
43
+ *
44
+ * @returns The decoded transaction result, or `null` if the response did not
45
+ * include a `result_xdr`.
46
+ * @throws If the server returned a `result_xdr` that is not valid base64-encoded
47
+ * {@link xdr.TransactionResult} XDR.
48
+ */
49
+ getTransactionResult() {
50
+ const resultXdr = this.extras().result_xdr;
51
+ if (!resultXdr) {
52
+ return null;
53
+ }
54
+ return curr_generated.default.TransactionResult.fromXDR(resultXdr, "base64");
55
+ }
56
+ extras() {
57
+ return this.response.data.extras;
58
+ }
59
+ }
60
+
61
+ exports.TransactionFailedError = TransactionFailedError;
62
+ //# sourceMappingURL=transaction_failed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction_failed.js","sources":["../../../../src/errors/transaction_failed.ts"],"sourcesContent":["import { xdr } from \"../base/index.js\";\nimport { HorizonApi } from \"../horizon/horizon_api.js\";\nimport { BadResponseError } from \"./bad_response.js\";\n\n/**\n * TransactionFailedError is raised when a transaction submitted to Horizon\n * is rejected with a `transaction_failed` error response (HTTP 400). It\n * provides convenient accessors for the result codes and the decoded\n * {@link xdr.TransactionResult}, which are otherwise nested deep inside the\n * raw Horizon response.\n *\n * @example\n * ```js\n * try {\n * await server.submitTransaction(tx);\n * } catch (err) {\n * if (err instanceof TransactionFailedError) {\n * const { transaction, operations } = err.getResultCodes();\n * console.log(transaction); // e.g. \"tx_failed\"\n * console.log(operations); // e.g. [\"op_underfunded\"]\n * console.log(err.getTransactionResult()?.result().switch().name);\n * }\n * }\n * ```\n *\n * @param message - Human-readable error message.\n * @param response - Response details, received from the Horizon server, whose\n * `data` field contains a `transaction_failed` error response with `extras`.\n */\nexport class TransactionFailedError extends BadResponseError {\n /**\n * Returns the transaction- and operation-level result codes reported by\n * Horizon, e.g. `{ transaction: \"tx_failed\", operations: [\"op_underfunded\"] }`.\n *\n * Horizon omits `operations` when the transaction failed a\n * transaction-level check (e.g. `tx_bad_seq`) and no operations were\n * evaluated; this accessor normalizes that to an empty array.\n *\n * @returns The `result_codes` object from the response's `extras`.\n */\n public getResultCodes(): {\n transaction: HorizonApi.TransactionFailedResultCodes;\n operations: string[];\n } {\n const { transaction, operations = [] } = this.extras().result_codes;\n return { transaction, operations };\n }\n\n /**\n * Decodes and returns the {@link xdr.TransactionResult} from the response's\n * `extras.result_xdr`, providing structured access to per-operation results.\n *\n * @returns The decoded transaction result, or `null` if the response did not\n * include a `result_xdr`.\n * @throws If the server returned a `result_xdr` that is not valid base64-encoded\n * {@link xdr.TransactionResult} XDR.\n */\n public getTransactionResult(): xdr.TransactionResult | null {\n const resultXdr = this.extras().result_xdr;\n if (!resultXdr) {\n return null;\n }\n return xdr.TransactionResult.fromXDR(resultXdr, \"base64\");\n }\n\n private extras(): HorizonApi.TransactionFailedExtras {\n return (\n this.response.data as HorizonApi.ErrorResponseData.TransactionFailed\n ).extras;\n }\n}\n"],"names":["BadResponseError","xdr"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA6BO,MAAM,+BAA+BA,6BAAA,CAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWpD,cAAA,GAGL;AACA,IAAA,MAAM,EAAE,aAAa,UAAA,GAAa,IAAG,GAAI,IAAA,CAAK,QAAO,CAAE,YAAA;AACvD,IAAA,OAAO,EAAE,aAAa,UAAA,EAAW;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWO,oBAAA,GAAqD;AAC1D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,EAAO,CAAE,UAAA;AAChC,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAOC,sBAAA,CAAI,iBAAA,CAAkB,OAAA,CAAQ,SAAA,EAAW,QAAQ,CAAA;AAAA,EAC1D;AAAA,EAEQ,MAAA,GAA6C;AACnD,IAAA,OACE,IAAA,CAAK,SAAS,IAAA,CACd,MAAA;AAAA,EACJ;AACF;;;;"}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ function wrapHttpError(error, wrap) {
4
+ const response = error?.response ?? error;
5
+ if (response && typeof response.status === "number") {
6
+ const wrapped = wrap({
7
+ data: response.data,
8
+ status: response.status,
9
+ statusText: response.statusText
10
+ });
11
+ if (error instanceof Error) {
12
+ wrapped.cause = error;
13
+ }
14
+ return wrapped;
15
+ }
16
+ return error instanceof Error ? error : new Error(String(error));
17
+ }
18
+
19
+ exports.wrapHttpError = wrapHttpError;
20
+ //# sourceMappingURL=wrap_http_error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap_http_error.js","sources":["../../../../src/errors/wrap_http_error.ts"],"sourcesContent":["import { NetworkError } from \"./network.js\";\n\n/**\n * Normalizes a rejection from the HTTP client into an SDK error. HTTP-level\n * failures from the http client are Error instances carrying a `.response`,\n * so an instanceof check alone would leak them through raw.\n *\n * If the rejection carries an HTTP response (directly or via `.response`),\n * `wrap` is called with the normalized response details to build the SDK\n * error, and the original error is kept reachable via `cause`. Otherwise the\n * original error is returned as-is (coerced to an `Error` if needed).\n *\n * @param error - The rejection value from the HTTP client.\n * @param wrap - Builds the SDK error from the normalized response details.\n * @returns The SDK error, or the original error if it was not HTTP-level.\n */\nexport function wrapHttpError(\n error: any,\n wrap: (details: {\n data: any;\n status: number;\n statusText: string;\n }) => NetworkError,\n): Error {\n const response = error?.response ?? error;\n if (response && typeof response.status === \"number\") {\n const wrapped = wrap({\n data: response.data,\n status: response.status,\n statusText: response.statusText,\n });\n // keep the underlying http client error (headers, config, etc.) reachable\n if (error instanceof Error) {\n wrapped.cause = error;\n }\n return wrapped;\n }\n return error instanceof Error ? error : new Error(String(error));\n}\n"],"names":[],"mappings":";;AAgBO,SAAS,aAAA,CACd,OACA,IAAA,EAKO;AACP,EAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,KAAA;AACpC,EAAA,IAAI,QAAA,IAAY,OAAO,QAAA,CAAS,MAAA,KAAW,QAAA,EAAU;AACnD,IAAA,MAAM,UAAU,IAAA,CAAK;AAAA,MACnB,MAAM,QAAA,CAAS,IAAA;AAAA,MACf,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS;AAAA,KACtB,CAAA;AAED,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAAA,IAClB;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE;;;;"}
@@ -22,6 +22,7 @@ require('../base/numbers/int128.js');
22
22
  require('../base/numbers/int256.js');
23
23
  var config = require('../config.js');
24
24
  var bad_response = require('../errors/bad_response.js');
25
+ var wrap_http_error = require('../errors/wrap_http_error.js');
25
26
  var index = require('../stellartoml/index.js');
26
27
  var utils = require('./utils.js');
27
28
  var axiosClient = require('../http-client/axios-client.js');
@@ -203,23 +204,21 @@ class FederationServer {
203
204
  throw new Error("memo value should be of type string");
204
205
  }
205
206
  return response.data;
206
- }).catch((response) => {
207
- if (response instanceof Error) {
208
- if (response.message.match(/^maxContentLength size/)) {
209
- throw new Error(
210
- `federation response exceeds allowed size of ${FEDERATION_RESPONSE_MAX_SIZE}`
211
- );
212
- } else {
213
- return Promise.reject(response);
214
- }
215
- } else {
216
- return Promise.reject(
217
- new bad_response.BadResponseError(
218
- `Server query failed. Server responded: ${response.status} ${response.statusText}`,
219
- response.data
220
- )
207
+ }).catch((error) => {
208
+ if (error instanceof Error && error.message.match(/^maxContentLength size/)) {
209
+ throw new Error(
210
+ `federation response exceeds allowed size of ${FEDERATION_RESPONSE_MAX_SIZE}`
221
211
  );
222
212
  }
213
+ return Promise.reject(
214
+ wrap_http_error.wrapHttpError(
215
+ error,
216
+ (details) => new bad_response.BadResponseError(
217
+ `Server query failed. Server responded: ${details.status} ${details.statusText}`,
218
+ details
219
+ )
220
+ )
221
+ );
223
222
  });
224
223
  }
225
224
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sources":["../../../../src/federation/server.ts"],"sourcesContent":["import { StrKey } from \"../base/index.js\";\n\nimport { Config } from \"../config.js\";\nimport { BadResponseError } from \"../errors/index.js\";\nimport { Resolver } from \"../stellartoml/index.js\";\n\nimport type { Api } from \"./api.js\";\nimport { httpClient } from \"../http-client/index.js\";\nimport { validateDomain } from \"./utils.js\";\n\n/**\n * The maximum size of response from a federation server\n * @defaultValue 102400\n */\nexport const FEDERATION_RESPONSE_MAX_SIZE: number = 100 * 1024;\n\n/**\n * Federation.Server handles a network connection to a\n * [federation server](https://developers.stellar.org/docs/learn/encyclopedia/federation)\n * instance and exposes an interface for requests to that instance.\n *\n * @param serverURL - The federation server URL (ex. `https://acme.com/federation`).\n * @param domain - Domain this server represents\n * @param opts - (optional) Options object\n * @returns */\nexport class FederationServer {\n /**\n * The federation server URL (ex. `https://acme.com/federation`).\n */\n private readonly serverURL: URL; // TODO: public or private? readonly?\n\n /**\n * Domain this server represents.\n */\n private readonly domain: string; // TODO: public or private? readonly?\n\n /**\n * Allow a timeout, default: 0. Allows user to avoid nasty lag due to TOML resolve issue.\n */\n private readonly timeout: number; // TODO: public or private? readonly?\n\n /**\n * A helper method for handling user inputs that contain `destination` value.\n * It accepts two types of values:\n *\n * * For Stellar address (ex. `bob*stellar.org`) it splits Stellar address and then tries to find information about\n * federation server in `stellar.toml` file for a given domain. It returns a `Promise` which resolves if federation\n * server exists and user has been found and rejects in all other cases.\n * * For Account ID (ex. `GB5XVAABEQMY63WTHDQ5RXADGYF345VWMNPTN2GFUDZT57D57ZQTJ7PS`) it returns a `Promise` which\n * resolves if Account ID is valid and rejects in all other cases. Please note that this method does not check\n * if the account actually exists in a ledger.\n *\n * @example\n * ```ts\n * StellarSdk.FederationServer.resolve('bob*stellar.org')\n * .then(federationRecord => {\n * // {\n * // account_id: 'GB5XVAABEQMY63WTHDQ5RXADGYF345VWMNPTN2GFUDZT57D57ZQTJ7PS',\n * // memo_type: 'id',\n * // memo: 100\n * // }\n * });\n * ```\n *\n * @see <a href=\"https://developers.stellar.org/docs/learn/encyclopedia/federation\" target=\"_blank\">Federation doc</a>\n * @see <a href=\"https://developers.stellar.org/docs/issuing-assets/publishing-asset-info\" target=\"_blank\">Stellar.toml doc</a>\n * @param value - Stellar Address (ex. `bob*stellar.org`)\n * @param opts - (optional) Options object\n * @returns A promise that resolves to the federation record\n * @throws Will throw an error if the provided account ID is not a valid Ed25519 public key.\n */\n public static async resolve(\n value: string,\n opts: Api.Options = {},\n ): Promise<Api.Record> {\n // Check if `value` is in account ID format\n if (value.indexOf(\"*\") < 0) {\n if (!StrKey.isValidEd25519PublicKey(value)) {\n return Promise.reject(new Error(\"Invalid Account ID\"));\n }\n return Promise.resolve({ account_id: value });\n }\n\n const addressParts = value.split(\"*\");\n const [, domain] = addressParts;\n\n if (addressParts.length !== 2 || !domain) {\n return Promise.reject(new Error(\"Invalid Stellar address\"));\n }\n\n const federationServer = await FederationServer.createForDomain(\n domain,\n opts,\n );\n return federationServer.resolveAddress(value);\n }\n\n /**\n * Creates a `FederationServer` instance based on information from\n * [stellar.toml](https://developers.stellar.org/docs/issuing-assets/publishing-asset-info)\n * file for a given domain.\n *\n * If `stellar.toml` file does not exist for a given domain or it does not\n * contain information about a federation server Promise will reject.\n *\n * @example\n * ```ts\n * StellarSdk.FederationServer.createForDomain('acme.com')\n * .then(federationServer => {\n * // federationServer.resolveAddress('bob').then(...)\n * })\n * .catch(error => {\n * // stellar.toml does not exist or it does not contain information about federation server.\n * });\n * ```\n *\n * @see <a href=\"https://developers.stellar.org/docs/issuing-assets/publishing-asset-info\" target=\"_blank\">Stellar.toml doc</a>\n * @param domain - Domain to get federation server for\n * @param opts - (optional) Options object\n * @returns A promise that resolves to the federation record\n * @throws Will throw an error if the domain's stellar.toml file does not contain a federation server field.\n */\n public static async createForDomain(\n domain: string,\n opts: Api.Options = {},\n ): Promise<FederationServer> {\n validateDomain(domain);\n const tomlObject = await Resolver.resolve(domain, opts);\n if (!tomlObject.FEDERATION_SERVER) {\n return Promise.reject(\n new Error(\"stellar.toml does not contain FEDERATION_SERVER field\"),\n );\n }\n return new FederationServer(tomlObject.FEDERATION_SERVER, domain, opts);\n }\n\n public constructor(\n serverURL: string,\n domain: string,\n opts: Api.Options = {},\n ) {\n this.serverURL = new URL(serverURL);\n this.domain = domain;\n validateDomain(domain);\n\n const allowHttp =\n typeof opts.allowHttp === \"undefined\"\n ? Config.isAllowHttp()\n : opts.allowHttp;\n\n this.timeout =\n typeof opts.timeout === \"undefined\" ? Config.getTimeout() : opts.timeout;\n\n if (this.serverURL.protocol !== \"https:\" && !allowHttp) {\n throw new Error(\"Cannot connect to insecure federation server\");\n }\n }\n\n /**\n * Get the federation record if the user was found for a given Stellar address\n * @see <a href=\"https://developers.stellar.org/docs/encyclopedia/federation\" target=\"_blank\">Federation doc</a>\n * @param address - Stellar address (ex. `bob*stellar.org`). If `FederationServer` was instantiated with `domain` param only username (ex. `bob`) can be passed.\n * @returns A promise that resolves to the federation record\n * @throws Will throw an error if the federated address does not contain a domain, or if the server object was not instantiated with a `domain` parameter\n */\n public async resolveAddress(address: string): Promise<Api.Record> {\n let stellarAddress = address;\n if (address.indexOf(\"*\") < 0) {\n if (!this.domain) {\n return Promise.reject(\n new Error(\n \"Unknown domain. Make sure `address` contains a domain (ex. `bob*stellar.org`) or pass `domain` parameter when instantiating the server object.\",\n ),\n );\n }\n stellarAddress = `${address}*${this.domain}`;\n }\n const url = new URL(this.serverURL);\n url.search = \"\";\n url.searchParams.set(\"type\", \"name\");\n url.searchParams.set(\"q\", stellarAddress);\n return this._sendRequest(url);\n }\n\n /**\n * Given an account ID, get their federation record if the user was found\n * @see <a href=\"https://developers.stellar.org/docs/encyclopedia/federation\" target=\"_blank\">Federation doc</a>\n * @param accountId - Account ID (ex. `GBYNR2QJXLBCBTRN44MRORCMI4YO7FZPFBCNOKTOBCAAFC7KC3LNPRYS`)\n * @returns A promise that resolves to the federation record\n * @throws Will throw an error if the federation server returns an invalid memo value.\n * @throws Will throw an error if the federation server's response exceeds the allowed maximum size.\n * @throws Will throw an error if the server query fails with an improper response.\n */\n public async resolveAccountId(accountId: string): Promise<Api.Record> {\n const url = new URL(this.serverURL);\n url.search = \"\";\n url.searchParams.set(\"type\", \"id\");\n url.searchParams.set(\"q\", accountId);\n return this._sendRequest(url);\n }\n\n /**\n * Given a transactionId, get the federation record if the sender of the transaction was found\n * @see <a href=\"https://developers.stellar.org/docs/glossary/federation/\" target=\"_blank\">Federation doc</a>\n * @param transactionId - Transaction ID (ex. `3389e9f0f1a65f19736cacf544c2e825313e8447f569233bb8db39aa607c8889`)\n * @returns A promise that resolves to the federation record\n * @throws Will throw an error if the federation server returns an invalid memo value.\n * @throws Will throw an error if the federation server's response exceeds the allowed maximum size.\n * @throws Will throw an error if the server query fails with an improper response.\n */\n public async resolveTransactionId(\n transactionId: string,\n ): Promise<Api.Record> {\n const url = new URL(this.serverURL);\n url.search = \"\";\n url.searchParams.set(\"type\", \"txid\");\n url.searchParams.set(\"q\", transactionId);\n return this._sendRequest(url);\n }\n\n private async _sendRequest(url: URL) {\n const timeout = this.timeout;\n\n return httpClient\n .get(url.toString(), {\n maxContentLength: FEDERATION_RESPONSE_MAX_SIZE,\n timeout,\n })\n .then((response) => {\n if (\n typeof response.data.memo !== \"undefined\" &&\n typeof response.data.memo !== \"string\"\n ) {\n throw new Error(\"memo value should be of type string\");\n }\n return response.data;\n })\n .catch((response) => {\n if (response instanceof Error) {\n if (response.message.match(/^maxContentLength size/)) {\n throw new Error(\n `federation response exceeds allowed size of ${FEDERATION_RESPONSE_MAX_SIZE}`,\n );\n } else {\n return Promise.reject(response);\n }\n } else {\n return Promise.reject(\n new BadResponseError(\n `Server query failed. Server responded: ${response.status} ${response.statusText}`,\n response.data,\n ),\n );\n }\n });\n }\n}\n"],"names":["StrKey","validateDomain","Resolver","Config","httpClient","BadResponseError"],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sources":["../../../../src/federation/server.ts"],"sourcesContent":["import { StrKey } from \"../base/index.js\";\n\nimport { Config } from \"../config.js\";\nimport { BadResponseError } from \"../errors/index.js\";\nimport { wrapHttpError } from \"../errors/wrap_http_error.js\";\nimport { Resolver } from \"../stellartoml/index.js\";\n\nimport type { Api } from \"./api.js\";\nimport { httpClient } from \"../http-client/index.js\";\nimport { validateDomain } from \"./utils.js\";\n\n/**\n * The maximum size of response from a federation server\n * @defaultValue 102400\n */\nexport const FEDERATION_RESPONSE_MAX_SIZE: number = 100 * 1024;\n\n/**\n * Federation.Server handles a network connection to a\n * [federation server](https://developers.stellar.org/docs/learn/encyclopedia/federation)\n * instance and exposes an interface for requests to that instance.\n *\n * @param serverURL - The federation server URL (ex. `https://acme.com/federation`).\n * @param domain - Domain this server represents\n * @param opts - (optional) Options object\n * @returns */\nexport class FederationServer {\n /**\n * The federation server URL (ex. `https://acme.com/federation`).\n */\n private readonly serverURL: URL; // TODO: public or private? readonly?\n\n /**\n * Domain this server represents.\n */\n private readonly domain: string; // TODO: public or private? readonly?\n\n /**\n * Allow a timeout, default: 0. Allows user to avoid nasty lag due to TOML resolve issue.\n */\n private readonly timeout: number; // TODO: public or private? readonly?\n\n /**\n * A helper method for handling user inputs that contain `destination` value.\n * It accepts two types of values:\n *\n * * For Stellar address (ex. `bob*stellar.org`) it splits Stellar address and then tries to find information about\n * federation server in `stellar.toml` file for a given domain. It returns a `Promise` which resolves if federation\n * server exists and user has been found and rejects in all other cases.\n * * For Account ID (ex. `GB5XVAABEQMY63WTHDQ5RXADGYF345VWMNPTN2GFUDZT57D57ZQTJ7PS`) it returns a `Promise` which\n * resolves if Account ID is valid and rejects in all other cases. Please note that this method does not check\n * if the account actually exists in a ledger.\n *\n * @example\n * ```ts\n * StellarSdk.FederationServer.resolve('bob*stellar.org')\n * .then(federationRecord => {\n * // {\n * // account_id: 'GB5XVAABEQMY63WTHDQ5RXADGYF345VWMNPTN2GFUDZT57D57ZQTJ7PS',\n * // memo_type: 'id',\n * // memo: 100\n * // }\n * });\n * ```\n *\n * @see <a href=\"https://developers.stellar.org/docs/learn/encyclopedia/federation\" target=\"_blank\">Federation doc</a>\n * @see <a href=\"https://developers.stellar.org/docs/issuing-assets/publishing-asset-info\" target=\"_blank\">Stellar.toml doc</a>\n * @param value - Stellar Address (ex. `bob*stellar.org`)\n * @param opts - (optional) Options object\n * @returns A promise that resolves to the federation record\n * @throws Will throw an error if the provided account ID is not a valid Ed25519 public key.\n */\n public static async resolve(\n value: string,\n opts: Api.Options = {},\n ): Promise<Api.Record> {\n // Check if `value` is in account ID format\n if (value.indexOf(\"*\") < 0) {\n if (!StrKey.isValidEd25519PublicKey(value)) {\n return Promise.reject(new Error(\"Invalid Account ID\"));\n }\n return Promise.resolve({ account_id: value });\n }\n\n const addressParts = value.split(\"*\");\n const [, domain] = addressParts;\n\n if (addressParts.length !== 2 || !domain) {\n return Promise.reject(new Error(\"Invalid Stellar address\"));\n }\n\n const federationServer = await FederationServer.createForDomain(\n domain,\n opts,\n );\n return federationServer.resolveAddress(value);\n }\n\n /**\n * Creates a `FederationServer` instance based on information from\n * [stellar.toml](https://developers.stellar.org/docs/issuing-assets/publishing-asset-info)\n * file for a given domain.\n *\n * If `stellar.toml` file does not exist for a given domain or it does not\n * contain information about a federation server Promise will reject.\n *\n * @example\n * ```ts\n * StellarSdk.FederationServer.createForDomain('acme.com')\n * .then(federationServer => {\n * // federationServer.resolveAddress('bob').then(...)\n * })\n * .catch(error => {\n * // stellar.toml does not exist or it does not contain information about federation server.\n * });\n * ```\n *\n * @see <a href=\"https://developers.stellar.org/docs/issuing-assets/publishing-asset-info\" target=\"_blank\">Stellar.toml doc</a>\n * @param domain - Domain to get federation server for\n * @param opts - (optional) Options object\n * @returns A promise that resolves to the federation record\n * @throws Will throw an error if the domain's stellar.toml file does not contain a federation server field.\n */\n public static async createForDomain(\n domain: string,\n opts: Api.Options = {},\n ): Promise<FederationServer> {\n validateDomain(domain);\n const tomlObject = await Resolver.resolve(domain, opts);\n if (!tomlObject.FEDERATION_SERVER) {\n return Promise.reject(\n new Error(\"stellar.toml does not contain FEDERATION_SERVER field\"),\n );\n }\n return new FederationServer(tomlObject.FEDERATION_SERVER, domain, opts);\n }\n\n public constructor(\n serverURL: string,\n domain: string,\n opts: Api.Options = {},\n ) {\n this.serverURL = new URL(serverURL);\n this.domain = domain;\n validateDomain(domain);\n\n const allowHttp =\n typeof opts.allowHttp === \"undefined\"\n ? Config.isAllowHttp()\n : opts.allowHttp;\n\n this.timeout =\n typeof opts.timeout === \"undefined\" ? Config.getTimeout() : opts.timeout;\n\n if (this.serverURL.protocol !== \"https:\" && !allowHttp) {\n throw new Error(\"Cannot connect to insecure federation server\");\n }\n }\n\n /**\n * Get the federation record if the user was found for a given Stellar address\n * @see <a href=\"https://developers.stellar.org/docs/encyclopedia/federation\" target=\"_blank\">Federation doc</a>\n * @param address - Stellar address (ex. `bob*stellar.org`). If `FederationServer` was instantiated with `domain` param only username (ex. `bob`) can be passed.\n * @returns A promise that resolves to the federation record\n * @throws Will throw an error if the federated address does not contain a domain, or if the server object was not instantiated with a `domain` parameter\n */\n public async resolveAddress(address: string): Promise<Api.Record> {\n let stellarAddress = address;\n if (address.indexOf(\"*\") < 0) {\n if (!this.domain) {\n return Promise.reject(\n new Error(\n \"Unknown domain. Make sure `address` contains a domain (ex. `bob*stellar.org`) or pass `domain` parameter when instantiating the server object.\",\n ),\n );\n }\n stellarAddress = `${address}*${this.domain}`;\n }\n const url = new URL(this.serverURL);\n url.search = \"\";\n url.searchParams.set(\"type\", \"name\");\n url.searchParams.set(\"q\", stellarAddress);\n return this._sendRequest(url);\n }\n\n /**\n * Given an account ID, get their federation record if the user was found\n * @see <a href=\"https://developers.stellar.org/docs/encyclopedia/federation\" target=\"_blank\">Federation doc</a>\n * @param accountId - Account ID (ex. `GBYNR2QJXLBCBTRN44MRORCMI4YO7FZPFBCNOKTOBCAAFC7KC3LNPRYS`)\n * @returns A promise that resolves to the federation record\n * @throws Will throw an error if the federation server returns an invalid memo value.\n * @throws Will throw an error if the federation server's response exceeds the allowed maximum size.\n * @throws Will throw an error if the server query fails with an improper response.\n */\n public async resolveAccountId(accountId: string): Promise<Api.Record> {\n const url = new URL(this.serverURL);\n url.search = \"\";\n url.searchParams.set(\"type\", \"id\");\n url.searchParams.set(\"q\", accountId);\n return this._sendRequest(url);\n }\n\n /**\n * Given a transactionId, get the federation record if the sender of the transaction was found\n * @see <a href=\"https://developers.stellar.org/docs/glossary/federation/\" target=\"_blank\">Federation doc</a>\n * @param transactionId - Transaction ID (ex. `3389e9f0f1a65f19736cacf544c2e825313e8447f569233bb8db39aa607c8889`)\n * @returns A promise that resolves to the federation record\n * @throws Will throw an error if the federation server returns an invalid memo value.\n * @throws Will throw an error if the federation server's response exceeds the allowed maximum size.\n * @throws Will throw an error if the server query fails with an improper response.\n */\n public async resolveTransactionId(\n transactionId: string,\n ): Promise<Api.Record> {\n const url = new URL(this.serverURL);\n url.search = \"\";\n url.searchParams.set(\"type\", \"txid\");\n url.searchParams.set(\"q\", transactionId);\n return this._sendRequest(url);\n }\n\n private async _sendRequest(url: URL) {\n const timeout = this.timeout;\n\n return httpClient\n .get(url.toString(), {\n maxContentLength: FEDERATION_RESPONSE_MAX_SIZE,\n timeout,\n })\n .then((response) => {\n if (\n typeof response.data.memo !== \"undefined\" &&\n typeof response.data.memo !== \"string\"\n ) {\n throw new Error(\"memo value should be of type string\");\n }\n return response.data;\n })\n .catch((error) => {\n if (\n error instanceof Error &&\n error.message.match(/^maxContentLength size/)\n ) {\n throw new Error(\n `federation response exceeds allowed size of ${FEDERATION_RESPONSE_MAX_SIZE}`,\n );\n }\n return Promise.reject(\n wrapHttpError(\n error,\n (details) =>\n new BadResponseError(\n `Server query failed. Server responded: ${details.status} ${details.statusText}`,\n details,\n ),\n ),\n );\n });\n }\n}\n"],"names":["StrKey","validateDomain","Resolver","Config","httpClient","wrapHttpError","BadResponseError"],"mappings":"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"}
@@ -4,6 +4,26 @@ var eventsource = require('eventsource');
4
4
  var network = require('../errors/network.js');
5
5
  var not_found = require('../errors/not_found.js');
6
6
  var bad_request = require('../errors/bad_request.js');
7
+ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/int.js');
8
+ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/hyper.js');
9
+ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-int.js');
10
+ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-hyper.js');
11
+ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/xdr-type.js');
12
+ require('buffer');
13
+ require('../base/generated/curr_generated.js');
14
+ require('@noble/hashes/sha2.js');
15
+ require('../base/signing.js');
16
+ require('../base/keypair.js');
17
+ require('base32.js');
18
+ require('../base/util/continued_fraction.js');
19
+ require('../base/util/bignumber.js');
20
+ require('../base/transaction_builder.js');
21
+ require('../base/muxed_account.js');
22
+ require('../base/scval.js');
23
+ require('../base/numbers/uint128.js');
24
+ require('../base/numbers/uint256.js');
25
+ require('../base/numbers/int128.js');
26
+ require('../base/numbers/int256.js');
7
27
  var horizon_axios_client = require('./horizon_axios_client.js');
8
28
  var url = require('../utils/url.js');
9
29
 
@@ -1 +1 @@
1
- {"version":3,"file":"call_builder.js","sources":["../../../../src/horizon/call_builder.ts"],"sourcesContent":["import { EventSource } from \"eventsource\";\n\nimport {\n BadRequestError,\n NetworkError,\n NotFoundError,\n} from \"../errors/index.js\";\nimport { HorizonApi } from \"./horizon_api.js\";\nimport { version } from \"./horizon_axios_client.js\";\nimport type { HttpClient } from \"../http-client/index.js\";\nimport { ServerApi } from \"./server_api.js\";\nimport type { Server } from \"../federation/index.js\";\nimport { expandUriTemplate } from \"../utils/url.js\";\n\n// Resources which can be included in the Horizon response via the `join`\n// query-param.\nconst JOINABLE = [\"transaction\"];\n\nexport interface EventSourceOptions<T> {\n onmessage?: (\n value: T extends ServerApi.CollectionPage<infer U> ? U : T,\n ) => void;\n onerror?: (event: MessageEvent) => void;\n reconnectTimeout?: number;\n}\n\n/**\n * Creates a new {@link CallBuilder} pointed to server defined by serverUrl.\n *\n * This is an **abstract** class. Do not create this object directly, use {@link Server} class.\n * @param serverUrl - URL of Horizon server\n */\nexport class CallBuilder<\n T extends\n | HorizonApi.FeeStatsResponse\n | HorizonApi.BaseResponse\n | HorizonApi.RootResponse\n | ServerApi.CollectionPage<HorizonApi.BaseResponse>,\n> {\n protected url: URL;\n\n public filter: string[][];\n\n protected originalSegments: string[];\n\n protected neighborRoot: string;\n\n protected httpClient: HttpClient;\n\n constructor(\n serverUrl: URL,\n httpClient: HttpClient,\n neighborRoot: string = \"\",\n ) {\n this.url = new URL(serverUrl);\n this.filter = [];\n\n this.originalSegments = this.url.pathname\n .split(\"/\")\n .filter((s) => s.length > 0);\n this.neighborRoot = neighborRoot;\n this.httpClient = httpClient;\n }\n\n protected setPath(...segments: string[]): void {\n const endpointSegments = segments.flatMap((segment) =>\n segment.split(\"/\").filter((s) => s.length > 0),\n );\n this.url.pathname = this.originalSegments\n .concat(endpointSegments)\n .join(\"/\");\n }\n\n /**\n * Triggers a HTTP request using this builder's current configuration.\n * @returns a Promise that resolves to the server's response.\n */\n public call(): Promise<T> {\n this.checkFilter();\n return this._sendNormalRequest(this.url).then((r) =>\n this._parseResponse(r),\n );\n }\n //// TODO: Migrate to async, BUT that's a change in behavior and tests \"rejects two filters\" will fail.\n //// It's because async will check within promise, which makes more sense when using awaits instead of Promises.\n // public async call(): Promise<T> {\n // this.checkFilter();\n // const r = await this._sendNormalRequest(this.url);\n // return this._parseResponse(r);\n // }\n //// /* actually equals */\n //// public call(): Promise<T> {\n //// return Promise.resolve().then(() => {\n //// this.checkFilter();\n //// return this._sendNormalRequest(this.url)\n //// }).then((r) => {\n //// this._parseResponse(r)\n //// });\n //// }\n\n /**\n * Creates an EventSource that listens for incoming messages from the server. To stop listening for new\n * events call the function returned by this method.\n * @see [Horizon Response Format](https://developers.stellar.org/api/introduction/response-format/)\n * @see [MDN EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource)\n * @param options - (optional) EventSource options.\n * - `onmessage` (optional): Callback function to handle incoming messages.\n * - `onerror` (optional): Callback function to handle errors.\n * - `reconnectTimeout` (optional): Custom stream connection timeout in ms, default is 15 seconds.\n * @returns Close function. Run to close the connection and stop listening for new events.\n */\n public stream(\n options: EventSourceOptions<\n T extends ServerApi.CollectionPage<infer U> ? U : T\n > = {},\n ): () => void {\n this.checkFilter();\n\n const streamUrl = new URL(this.url);\n streamUrl.searchParams.set(\"X-Client-Name\", \"js-stellar-sdk\");\n streamUrl.searchParams.set(\"X-Client-Version\", version);\n\n // Extract custom app headers from httpClient defaults and add as query params\n // (EventSource doesn't support custom headers, so we use query params)\n const { headers } = this.httpClient.defaults;\n if (headers) {\n const headerNames = [\"X-App-Name\", \"X-App-Version\"];\n headerNames.forEach((name) => {\n let value: string | undefined;\n if (headers instanceof Headers) {\n value = headers.get(name) ?? undefined;\n } else if (Array.isArray(headers)) {\n const entry = headers.find(([key]) => key === name);\n value = entry?.[1];\n } else {\n value = headers[name];\n }\n if (value) {\n streamUrl.searchParams.set(name, value);\n }\n });\n }\n\n // EventSource object\n let es: EventSource;\n // timeout is the id of the timeout to be triggered if there were no new messages\n // in the last 15 seconds. The timeout is reset when a new message arrive.\n // It prevents closing EventSource object in case of 504 errors as `readyState`\n // property is not reliable.\n let timeout: ReturnType<typeof setTimeout>;\n\n const createTimeout = () => {\n timeout = setTimeout(\n () => {\n es?.close();\n\n es = createEventSource();\n },\n options.reconnectTimeout || 15 * 1000,\n );\n };\n\n const createEventSource = (): EventSource => {\n try {\n es = new EventSource(streamUrl.toString());\n } catch (err) {\n if (options.onerror) {\n options.onerror(err as MessageEvent);\n }\n }\n\n createTimeout();\n if (!es) {\n return es;\n }\n\n // when receiving the close message from Horizon we should close the\n // connection and recreate the event source (basically retrying forever)\n let closed = false;\n const onClose = () => {\n if (closed) {\n return;\n }\n\n clearTimeout(timeout);\n\n es.close();\n createEventSource();\n closed = true;\n };\n\n const onMessage = (message: any) => {\n if (message.type === \"close\") {\n onClose();\n return;\n }\n\n const result = message.data\n ? this._parseRecord(JSON.parse(message.data))\n : message;\n if (result.paging_token) {\n streamUrl.searchParams.set(\"cursor\", result.paging_token);\n }\n clearTimeout(timeout);\n createTimeout();\n if (typeof options.onmessage !== \"undefined\") {\n options.onmessage(result);\n }\n };\n\n const onError = (error: any) => {\n if (options.onerror) {\n options.onerror(error as MessageEvent);\n }\n };\n\n if (es.addEventListener) {\n es.addEventListener(\"message\", onMessage.bind(this));\n es.addEventListener(\"error\", onError.bind(this));\n es.addEventListener(\"close\", onClose.bind(this));\n } else {\n es.onmessage = onMessage.bind(this);\n es.onerror = onError.bind(this);\n }\n\n return es;\n };\n\n createEventSource();\n return () => {\n clearTimeout(timeout);\n es?.close();\n };\n }\n\n /**\n * Sets `cursor` parameter for the current call. Returns the CallBuilder object on which this method has been called.\n * @see [Paging](https://developers.stellar.org/api/introduction/pagination/)\n * @param cursor - A cursor is a value that points to a specific location in a collection of resources.\n * @returns current CallBuilder instance\n */\n public cursor(cursor: string): this {\n this.url.searchParams.set(\"cursor\", cursor);\n return this;\n }\n\n /**\n * Sets `limit` parameter for the current call. Returns the CallBuilder object on which this method has been called.\n * @see [Paging](https://developers.stellar.org/api/introduction/pagination/)\n * @param recordsNumber - Number of records the server should return.\n * @returns current CallBuilder instance\n */\n public limit(recordsNumber: number): this {\n this.url.searchParams.set(\"limit\", recordsNumber.toString());\n return this;\n }\n\n /**\n * Sets `order` parameter for the current call. Returns the CallBuilder object on which this method has been called.\n * @param direction - Sort direction\n * @returns current CallBuilder instance\n */\n public order(direction: \"asc\" | \"desc\"): this {\n this.url.searchParams.set(\"order\", direction);\n return this;\n }\n\n /**\n * Sets `join` parameter for the current call. The `join` parameter\n * includes the requested resource in the response. Currently, the\n * only valid value for the parameter is `transactions` and is only\n * supported on the operations and payments endpoints. The response\n * will include a `transaction` field for each operation in the\n * response.\n *\n * @param include - join Records to be included in the response.\n * @returns current CallBuilder instance.\n */\n public join(include: \"transactions\"): this {\n this.url.searchParams.set(\"join\", include);\n return this;\n }\n\n /**\n * A helper method to craft queries to \"neighbor\" endpoints.\n *\n * For example, we have an `/effects` suffix endpoint on many different\n * \"root\" endpoints, such as `/transactions/:id` and `/accounts/:id`. So,\n * it's helpful to be able to conveniently create queries to the\n * `/accounts/:id/effects` endpoint:\n *\n * `this.forEndpoint(\"accounts\", accountId)`.\n *\n * @param endpoint - neighbor endpoint in question, like /operations\n * @param param - filter parameter, like an operation ID\n *\n * @returns this CallBuilder instance\n */\n protected forEndpoint(endpoint: string, param: string): this {\n if (this.neighborRoot === \"\") {\n throw new Error(\"Invalid usage: neighborRoot not set in constructor\");\n }\n this.filter.push([endpoint, param, this.neighborRoot]);\n return this;\n }\n\n /**\n * @hidden\n * @returns */\n private checkFilter(): void {\n if (this.filter.length >= 2) {\n throw new BadRequestError(\"Too many filters specified\", this.filter);\n }\n\n if (this.filter.length === 1) {\n // append filters to original segments\n const newSegment = this.originalSegments.concat(this.filter[0]);\n this.url.pathname = newSegment.join(\"/\");\n }\n }\n\n /**\n * Convert a link object to a function that fetches that link.\n * @hidden\n * @param link - A link object\n * - `href`: the URI of the link\n * - `templated` (optional): Whether the link is templated\n * @returns A function that requests the link\n */\n private _requestFnForLink(\n link: HorizonApi.ResponseLink,\n ): (opts?: any) => any {\n return async (opts: any = {}) => {\n let uri;\n\n if (link.templated) {\n uri = new URL(expandUriTemplate(link.href, opts), this.url);\n } else {\n uri = new URL(link.href, this.url);\n }\n\n const r = await this._sendNormalRequest(uri);\n return this._parseResponse(r);\n };\n }\n\n /**\n * Given the json response, find and convert each link into a function that\n * calls that link.\n * @hidden\n * @param json - JSON response\n * @returns JSON response with string links replaced with functions\n */\n private _parseRecord(json: any): any {\n if (!json._links) {\n return json;\n }\n Object.keys(json._links).forEach((key) => {\n const n = json._links[key];\n let included = false;\n // If the key with the link name already exists, create a copy\n if (typeof json[key] !== \"undefined\") {\n json[`${key}_attr`] = json[key];\n included = true;\n }\n\n /*\n If the resource can be side-loaded using `join` query-param then don't\n try to load from the server. We need to whitelist the keys which are\n joinable, since there are other keys like `ledger` which is included in\n some payloads, but doesn't represent the ledger resource, in that\n scenario we want to make the call to the server using the URL from links.\n */\n if (included && JOINABLE.indexOf(key) >= 0) {\n const record = this._parseRecord(json[key]);\n // Maintain a promise based API so the behavior is the same whether you\n // are loading from the server or in-memory (via join).\n // eslint-disable-next-line @typescript-eslint/require-await\n json[key] = async () => record;\n } else {\n json[key] = this._requestFnForLink(n as HorizonApi.ResponseLink);\n }\n });\n return json;\n }\n\n private async _sendNormalRequest(initialUrl: URL) {\n const url = new URL(initialUrl);\n\n // Always use the configured server's authority and protocol.\n // Horizon returns absolute URLs in _links that would bypass reverse proxies.\n url.protocol = this.url.protocol;\n url.host = this.url.host;\n\n return this.httpClient\n .get(url.toString())\n .then((response) => response.data)\n .catch(this._handleNetworkError);\n }\n\n /**\n * @hidden\n * @param json - Response object\n * @returns Extended response\n */\n private _parseResponse(json: any) {\n if (json._embedded && json._embedded.records) {\n return this._toCollectionPage(json);\n }\n return this._parseRecord(json);\n }\n\n /**\n * @hidden\n * @param json - Response object\n * @returns Extended response object\n */\n private _toCollectionPage(json: any): any {\n for (let i = 0; i < json._embedded.records.length; i += 1) {\n json._embedded.records[i] = this._parseRecord(json._embedded.records[i]);\n }\n return {\n records: json._embedded.records,\n next: async () => {\n const r = await this._sendNormalRequest(\n new URL(json._links.next.href, this.url),\n );\n return this._toCollectionPage(r);\n },\n prev: async () => {\n const r = await this._sendNormalRequest(\n new URL(json._links.prev.href, this.url),\n );\n return this._toCollectionPage(r);\n },\n };\n }\n\n /**\n * @hidden\n * @param error - Network error object\n * @returns Promise that rejects with a human-readable error\n */\n private async _handleNetworkError(error: NetworkError): Promise<void> {\n if (error.response && error.response.status) {\n switch (error.response.status) {\n case 404:\n return Promise.reject(\n new NotFoundError(\n error.response.statusText ?? \"Not Found\",\n error.response.data,\n ),\n );\n default:\n return Promise.reject(\n new NetworkError(\n error.response.statusText ?? \"Unknown\",\n error.response.data,\n ),\n );\n }\n } else {\n return Promise.reject(new Error(error.message));\n }\n }\n}\n"],"names":["version","EventSource","BadRequestError","expandUriTemplate","NotFoundError","NetworkError"],"mappings":"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"}
1
+ {"version":3,"file":"call_builder.js","sources":["../../../../src/horizon/call_builder.ts"],"sourcesContent":["import { EventSource } from \"eventsource\";\n\nimport {\n BadRequestError,\n NetworkError,\n NotFoundError,\n} from \"../errors/index.js\";\nimport { HorizonApi } from \"./horizon_api.js\";\nimport { version } from \"./horizon_axios_client.js\";\nimport type { HttpClient } from \"../http-client/index.js\";\nimport { ServerApi } from \"./server_api.js\";\nimport type { Server } from \"../federation/index.js\";\nimport { expandUriTemplate } from \"../utils/url.js\";\n\n// Resources which can be included in the Horizon response via the `join`\n// query-param.\nconst JOINABLE = [\"transaction\"];\n\nexport interface EventSourceOptions<T> {\n onmessage?: (\n value: T extends ServerApi.CollectionPage<infer U> ? U : T,\n ) => void;\n onerror?: (event: MessageEvent) => void;\n reconnectTimeout?: number;\n}\n\n/**\n * Creates a new {@link CallBuilder} pointed to server defined by serverUrl.\n *\n * This is an **abstract** class. Do not create this object directly, use {@link Server} class.\n * @param serverUrl - URL of Horizon server\n */\nexport class CallBuilder<\n T extends\n | HorizonApi.FeeStatsResponse\n | HorizonApi.BaseResponse\n | HorizonApi.RootResponse\n | ServerApi.CollectionPage<HorizonApi.BaseResponse>,\n> {\n protected url: URL;\n\n public filter: string[][];\n\n protected originalSegments: string[];\n\n protected neighborRoot: string;\n\n protected httpClient: HttpClient;\n\n constructor(\n serverUrl: URL,\n httpClient: HttpClient,\n neighborRoot: string = \"\",\n ) {\n this.url = new URL(serverUrl);\n this.filter = [];\n\n this.originalSegments = this.url.pathname\n .split(\"/\")\n .filter((s) => s.length > 0);\n this.neighborRoot = neighborRoot;\n this.httpClient = httpClient;\n }\n\n protected setPath(...segments: string[]): void {\n const endpointSegments = segments.flatMap((segment) =>\n segment.split(\"/\").filter((s) => s.length > 0),\n );\n this.url.pathname = this.originalSegments\n .concat(endpointSegments)\n .join(\"/\");\n }\n\n /**\n * Triggers a HTTP request using this builder's current configuration.\n * @returns a Promise that resolves to the server's response.\n */\n public call(): Promise<T> {\n this.checkFilter();\n return this._sendNormalRequest(this.url).then((r) =>\n this._parseResponse(r),\n );\n }\n //// TODO: Migrate to async, BUT that's a change in behavior and tests \"rejects two filters\" will fail.\n //// It's because async will check within promise, which makes more sense when using awaits instead of Promises.\n // public async call(): Promise<T> {\n // this.checkFilter();\n // const r = await this._sendNormalRequest(this.url);\n // return this._parseResponse(r);\n // }\n //// /* actually equals */\n //// public call(): Promise<T> {\n //// return Promise.resolve().then(() => {\n //// this.checkFilter();\n //// return this._sendNormalRequest(this.url)\n //// }).then((r) => {\n //// this._parseResponse(r)\n //// });\n //// }\n\n /**\n * Creates an EventSource that listens for incoming messages from the server. To stop listening for new\n * events call the function returned by this method.\n * @see [Horizon Response Format](https://developers.stellar.org/api/introduction/response-format/)\n * @see [MDN EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource)\n * @param options - (optional) EventSource options.\n * - `onmessage` (optional): Callback function to handle incoming messages.\n * - `onerror` (optional): Callback function to handle errors.\n * - `reconnectTimeout` (optional): Custom stream connection timeout in ms, default is 15 seconds.\n * @returns Close function. Run to close the connection and stop listening for new events.\n */\n public stream(\n options: EventSourceOptions<\n T extends ServerApi.CollectionPage<infer U> ? U : T\n > = {},\n ): () => void {\n this.checkFilter();\n\n const streamUrl = new URL(this.url);\n streamUrl.searchParams.set(\"X-Client-Name\", \"js-stellar-sdk\");\n streamUrl.searchParams.set(\"X-Client-Version\", version);\n\n // Extract custom app headers from httpClient defaults and add as query params\n // (EventSource doesn't support custom headers, so we use query params)\n const { headers } = this.httpClient.defaults;\n if (headers) {\n const headerNames = [\"X-App-Name\", \"X-App-Version\"];\n headerNames.forEach((name) => {\n let value: string | undefined;\n if (headers instanceof Headers) {\n value = headers.get(name) ?? undefined;\n } else if (Array.isArray(headers)) {\n const entry = headers.find(([key]) => key === name);\n value = entry?.[1];\n } else {\n value = headers[name];\n }\n if (value) {\n streamUrl.searchParams.set(name, value);\n }\n });\n }\n\n // EventSource object\n let es: EventSource;\n // timeout is the id of the timeout to be triggered if there were no new messages\n // in the last 15 seconds. The timeout is reset when a new message arrive.\n // It prevents closing EventSource object in case of 504 errors as `readyState`\n // property is not reliable.\n let timeout: ReturnType<typeof setTimeout>;\n\n const createTimeout = () => {\n timeout = setTimeout(\n () => {\n es?.close();\n\n es = createEventSource();\n },\n options.reconnectTimeout || 15 * 1000,\n );\n };\n\n const createEventSource = (): EventSource => {\n try {\n es = new EventSource(streamUrl.toString());\n } catch (err) {\n if (options.onerror) {\n options.onerror(err as MessageEvent);\n }\n }\n\n createTimeout();\n if (!es) {\n return es;\n }\n\n // when receiving the close message from Horizon we should close the\n // connection and recreate the event source (basically retrying forever)\n let closed = false;\n const onClose = () => {\n if (closed) {\n return;\n }\n\n clearTimeout(timeout);\n\n es.close();\n createEventSource();\n closed = true;\n };\n\n const onMessage = (message: any) => {\n if (message.type === \"close\") {\n onClose();\n return;\n }\n\n const result = message.data\n ? this._parseRecord(JSON.parse(message.data))\n : message;\n if (result.paging_token) {\n streamUrl.searchParams.set(\"cursor\", result.paging_token);\n }\n clearTimeout(timeout);\n createTimeout();\n if (typeof options.onmessage !== \"undefined\") {\n options.onmessage(result);\n }\n };\n\n const onError = (error: any) => {\n if (options.onerror) {\n options.onerror(error as MessageEvent);\n }\n };\n\n if (es.addEventListener) {\n es.addEventListener(\"message\", onMessage.bind(this));\n es.addEventListener(\"error\", onError.bind(this));\n es.addEventListener(\"close\", onClose.bind(this));\n } else {\n es.onmessage = onMessage.bind(this);\n es.onerror = onError.bind(this);\n }\n\n return es;\n };\n\n createEventSource();\n return () => {\n clearTimeout(timeout);\n es?.close();\n };\n }\n\n /**\n * Sets `cursor` parameter for the current call. Returns the CallBuilder object on which this method has been called.\n * @see [Paging](https://developers.stellar.org/api/introduction/pagination/)\n * @param cursor - A cursor is a value that points to a specific location in a collection of resources.\n * @returns current CallBuilder instance\n */\n public cursor(cursor: string): this {\n this.url.searchParams.set(\"cursor\", cursor);\n return this;\n }\n\n /**\n * Sets `limit` parameter for the current call. Returns the CallBuilder object on which this method has been called.\n * @see [Paging](https://developers.stellar.org/api/introduction/pagination/)\n * @param recordsNumber - Number of records the server should return.\n * @returns current CallBuilder instance\n */\n public limit(recordsNumber: number): this {\n this.url.searchParams.set(\"limit\", recordsNumber.toString());\n return this;\n }\n\n /**\n * Sets `order` parameter for the current call. Returns the CallBuilder object on which this method has been called.\n * @param direction - Sort direction\n * @returns current CallBuilder instance\n */\n public order(direction: \"asc\" | \"desc\"): this {\n this.url.searchParams.set(\"order\", direction);\n return this;\n }\n\n /**\n * Sets `join` parameter for the current call. The `join` parameter\n * includes the requested resource in the response. Currently, the\n * only valid value for the parameter is `transactions` and is only\n * supported on the operations and payments endpoints. The response\n * will include a `transaction` field for each operation in the\n * response.\n *\n * @param include - join Records to be included in the response.\n * @returns current CallBuilder instance.\n */\n public join(include: \"transactions\"): this {\n this.url.searchParams.set(\"join\", include);\n return this;\n }\n\n /**\n * A helper method to craft queries to \"neighbor\" endpoints.\n *\n * For example, we have an `/effects` suffix endpoint on many different\n * \"root\" endpoints, such as `/transactions/:id` and `/accounts/:id`. So,\n * it's helpful to be able to conveniently create queries to the\n * `/accounts/:id/effects` endpoint:\n *\n * `this.forEndpoint(\"accounts\", accountId)`.\n *\n * @param endpoint - neighbor endpoint in question, like /operations\n * @param param - filter parameter, like an operation ID\n *\n * @returns this CallBuilder instance\n */\n protected forEndpoint(endpoint: string, param: string): this {\n if (this.neighborRoot === \"\") {\n throw new Error(\"Invalid usage: neighborRoot not set in constructor\");\n }\n this.filter.push([endpoint, param, this.neighborRoot]);\n return this;\n }\n\n /**\n * @hidden\n * @returns */\n private checkFilter(): void {\n if (this.filter.length >= 2) {\n throw new BadRequestError(\"Too many filters specified\", this.filter);\n }\n\n if (this.filter.length === 1) {\n // append filters to original segments\n const newSegment = this.originalSegments.concat(this.filter[0]);\n this.url.pathname = newSegment.join(\"/\");\n }\n }\n\n /**\n * Convert a link object to a function that fetches that link.\n * @hidden\n * @param link - A link object\n * - `href`: the URI of the link\n * - `templated` (optional): Whether the link is templated\n * @returns A function that requests the link\n */\n private _requestFnForLink(\n link: HorizonApi.ResponseLink,\n ): (opts?: any) => any {\n return async (opts: any = {}) => {\n let uri;\n\n if (link.templated) {\n uri = new URL(expandUriTemplate(link.href, opts), this.url);\n } else {\n uri = new URL(link.href, this.url);\n }\n\n const r = await this._sendNormalRequest(uri);\n return this._parseResponse(r);\n };\n }\n\n /**\n * Given the json response, find and convert each link into a function that\n * calls that link.\n * @hidden\n * @param json - JSON response\n * @returns JSON response with string links replaced with functions\n */\n private _parseRecord(json: any): any {\n if (!json._links) {\n return json;\n }\n Object.keys(json._links).forEach((key) => {\n const n = json._links[key];\n let included = false;\n // If the key with the link name already exists, create a copy\n if (typeof json[key] !== \"undefined\") {\n json[`${key}_attr`] = json[key];\n included = true;\n }\n\n /*\n If the resource can be side-loaded using `join` query-param then don't\n try to load from the server. We need to whitelist the keys which are\n joinable, since there are other keys like `ledger` which is included in\n some payloads, but doesn't represent the ledger resource, in that\n scenario we want to make the call to the server using the URL from links.\n */\n if (included && JOINABLE.indexOf(key) >= 0) {\n const record = this._parseRecord(json[key]);\n // Maintain a promise based API so the behavior is the same whether you\n // are loading from the server or in-memory (via join).\n // eslint-disable-next-line @typescript-eslint/require-await\n json[key] = async () => record;\n } else {\n json[key] = this._requestFnForLink(n as HorizonApi.ResponseLink);\n }\n });\n return json;\n }\n\n private async _sendNormalRequest(initialUrl: URL) {\n const url = new URL(initialUrl);\n\n // Always use the configured server's authority and protocol.\n // Horizon returns absolute URLs in _links that would bypass reverse proxies.\n url.protocol = this.url.protocol;\n url.host = this.url.host;\n\n return this.httpClient\n .get(url.toString())\n .then((response) => response.data)\n .catch(this._handleNetworkError);\n }\n\n /**\n * @hidden\n * @param json - Response object\n * @returns Extended response\n */\n private _parseResponse(json: any) {\n if (json._embedded && json._embedded.records) {\n return this._toCollectionPage(json);\n }\n return this._parseRecord(json);\n }\n\n /**\n * @hidden\n * @param json - Response object\n * @returns Extended response object\n */\n private _toCollectionPage(json: any): any {\n for (let i = 0; i < json._embedded.records.length; i += 1) {\n json._embedded.records[i] = this._parseRecord(json._embedded.records[i]);\n }\n return {\n records: json._embedded.records,\n next: async () => {\n const r = await this._sendNormalRequest(\n new URL(json._links.next.href, this.url),\n );\n return this._toCollectionPage(r);\n },\n prev: async () => {\n const r = await this._sendNormalRequest(\n new URL(json._links.prev.href, this.url),\n );\n return this._toCollectionPage(r);\n },\n };\n }\n\n /**\n * @hidden\n * @param error - Network error object\n * @returns Promise that rejects with a human-readable error\n */\n private async _handleNetworkError(error: NetworkError): Promise<void> {\n if (error.response && error.response.status) {\n switch (error.response.status) {\n case 404:\n return Promise.reject(\n new NotFoundError(\n error.response.statusText ?? \"Not Found\",\n error.response.data,\n ),\n );\n default:\n return Promise.reject(\n new NetworkError(\n error.response.statusText ?? \"Unknown\",\n error.response.data,\n ),\n );\n }\n } else {\n return Promise.reject(new Error(error.message));\n }\n }\n}\n"],"names":["version","EventSource","BadRequestError","expandUriTemplate","NotFoundError","NetworkError"],"mappings":"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"}
@@ -79,6 +79,11 @@ exports.HorizonApi = void 0;
79
79
  TransactionFailedResultCodes2["TX_NO_SOURCE_ACCOUNT"] = "tx_no_source_account";
80
80
  TransactionFailedResultCodes2["TX_INSUFFICIENT_FEE"] = "tx_insufficient_fee";
81
81
  TransactionFailedResultCodes2["TX_INTERNAL_ERROR"] = "tx_internal_error";
82
+ TransactionFailedResultCodes2["TX_BAD_SPONSORSHIP"] = "tx_bad_sponsorship";
83
+ TransactionFailedResultCodes2["TX_BAD_MIN_SEQ_AGE_OR_GAP"] = "tx_bad_min_seq_age_or_gap";
84
+ TransactionFailedResultCodes2["TX_MALFORMED"] = "tx_malformed";
85
+ TransactionFailedResultCodes2["TX_SOROBAN_INVALID"] = "tx_soroban_invalid";
86
+ TransactionFailedResultCodes2["TX_FROZEN_KEY_ACCESSED"] = "tx_frozen_key_accessed";
82
87
  })(HorizonApi2.TransactionFailedResultCodes || (HorizonApi2.TransactionFailedResultCodes = {}));
83
88
  })(exports.HorizonApi || (exports.HorizonApi = {}));
84
89
  //# sourceMappingURL=horizon_api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"horizon_api.js","sources":["../../../../src/horizon/horizon_api.ts"],"sourcesContent":["import type { AssetType, MemoType } from \"../base/index.js\";\n\n/* tslint:disable-next-line:no-namespace */\nexport namespace HorizonApi {\n export interface ResponseLink {\n href: string;\n templated?: boolean;\n }\n export interface BaseResponse<T extends string = never> {\n _links: { [key in T | \"self\"]: ResponseLink };\n }\n\n export interface SubmitTransactionResponse {\n hash: string;\n ledger: number;\n successful: boolean;\n envelope_xdr: string;\n result_xdr: string;\n result_meta_xdr: string;\n paging_token: string;\n }\n\n export interface SubmitAsyncTransactionResponse {\n hash: string;\n tx_status: string;\n error_result_xdr: string;\n }\n\n export interface FeeBumpTransactionResponse {\n hash: string;\n signatures: string[];\n }\n\n export interface InnerTransactionResponse {\n hash: string;\n signatures: string[];\n max_fee: string;\n }\n\n export interface TransactionPreconditions {\n timebounds?: {\n min_time: string;\n max_time: string;\n };\n ledgerbounds?: {\n min_ledger: number;\n max_ledger: number;\n };\n min_account_sequence?: string;\n min_account_sequence_age?: string;\n min_account_sequence_ledger_gap?: number;\n extra_signers?: string[];\n }\n\n export interface TransactionResponse\n extends\n SubmitTransactionResponse,\n BaseResponse<\n | \"account\"\n | \"ledger\"\n | \"operations\"\n | \"effects\"\n | \"succeeds\"\n | \"precedes\"\n > {\n created_at: string;\n fee_meta_xdr: string;\n fee_charged: number | string;\n max_fee: number | string;\n id: string;\n memo_type: MemoType;\n memo?: string;\n memo_bytes?: string;\n operation_count: number;\n paging_token: string;\n signatures: string[];\n source_account: string;\n source_account_sequence: string;\n fee_account: string;\n inner_transaction?: InnerTransactionResponse;\n fee_bump_transaction?: FeeBumpTransactionResponse;\n preconditions?: TransactionPreconditions;\n }\n\n export interface BalanceLineNative {\n balance: string;\n asset_type: AssetType.native;\n buying_liabilities: string;\n selling_liabilities: string;\n }\n export interface BalanceLineLiquidityPool {\n liquidity_pool_id: string;\n asset_type: AssetType.liquidityPoolShares;\n balance: string;\n limit: string;\n last_modified_ledger: number;\n is_authorized: boolean;\n is_authorized_to_maintain_liabilities: boolean;\n is_clawback_enabled: boolean;\n sponsor?: string;\n }\n export interface BalanceLineAsset<\n T extends AssetType.credit4 | AssetType.credit12 =\n | AssetType.credit4\n | AssetType.credit12,\n > {\n balance: string;\n limit: string;\n asset_type: T;\n asset_code: string;\n asset_issuer: string;\n buying_liabilities: string;\n selling_liabilities: string;\n last_modified_ledger: number;\n is_authorized: boolean;\n is_authorized_to_maintain_liabilities: boolean;\n is_clawback_enabled: boolean;\n sponsor?: string;\n }\n export type BalanceLine<T extends AssetType = AssetType> =\n T extends AssetType.native\n ? BalanceLineNative\n : T extends AssetType.credit4 | AssetType.credit12\n ? BalanceLineAsset<T>\n : T extends AssetType.liquidityPoolShares\n ? BalanceLineLiquidityPool\n : BalanceLineNative | BalanceLineAsset | BalanceLineLiquidityPool;\n\n export interface AssetAccounts {\n authorized: number;\n authorized_to_maintain_liabilities: number;\n unauthorized: number;\n }\n export interface AssetBalances {\n authorized: string;\n authorized_to_maintain_liabilities: string;\n unauthorized: string;\n }\n\n export interface PriceR {\n numerator: number;\n denominator: number;\n }\n\n export interface PriceRShorthand {\n n: number;\n d: number;\n }\n\n export interface AccountThresholds {\n low_threshold: number;\n med_threshold: number;\n high_threshold: number;\n }\n export interface Flags {\n auth_immutable: boolean;\n auth_required: boolean;\n auth_revocable: boolean;\n auth_clawback_enabled: boolean;\n }\n export interface AccountSigner {\n key: string;\n weight: number;\n type: string;\n sponsor?: string;\n }\n export interface AccountResponse extends BaseResponse<\n | \"transactions\"\n | \"operations\"\n | \"payments\"\n | \"effects\"\n | \"offers\"\n | \"trades\"\n | \"data\"\n > {\n id: string;\n paging_token: string;\n account_id: string;\n sequence: string;\n sequence_ledger?: number;\n sequence_time?: string;\n subentry_count: number;\n thresholds: AccountThresholds;\n last_modified_ledger: number;\n last_modified_time: string;\n flags: Flags;\n balances: BalanceLine[];\n signers: AccountSigner[];\n data: {\n [key: string]: string;\n };\n sponsor?: string;\n num_sponsoring: number;\n num_sponsored: number;\n }\n\n export enum LiquidityPoolType {\n constantProduct = \"constant_product\",\n }\n\n export enum OperationResponseType {\n createAccount = \"create_account\",\n payment = \"payment\",\n pathPayment = \"path_payment_strict_receive\",\n createPassiveOffer = \"create_passive_sell_offer\",\n manageOffer = \"manage_sell_offer\",\n setOptions = \"set_options\",\n changeTrust = \"change_trust\",\n allowTrust = \"allow_trust\",\n accountMerge = \"account_merge\",\n inflation = \"inflation\",\n manageData = \"manage_data\",\n bumpSequence = \"bump_sequence\",\n manageBuyOffer = \"manage_buy_offer\",\n pathPaymentStrictSend = \"path_payment_strict_send\",\n createClaimableBalance = \"create_claimable_balance\",\n claimClaimableBalance = \"claim_claimable_balance\",\n beginSponsoringFutureReserves = \"begin_sponsoring_future_reserves\",\n endSponsoringFutureReserves = \"end_sponsoring_future_reserves\",\n revokeSponsorship = \"revoke_sponsorship\",\n clawback = \"clawback\",\n clawbackClaimableBalance = \"clawback_claimable_balance\",\n setTrustLineFlags = \"set_trust_line_flags\",\n liquidityPoolDeposit = \"liquidity_pool_deposit\",\n liquidityPoolWithdraw = \"liquidity_pool_withdraw\",\n invokeHostFunction = \"invoke_host_function\",\n bumpFootprintExpiration = \"bump_footprint_expiration\",\n restoreFootprint = \"restore_footprint\",\n }\n export enum OperationResponseTypeI {\n createAccount = 0,\n payment = 1,\n pathPayment = 2,\n createPassiveOffer = 3,\n manageOffer = 4,\n setOptions = 5,\n changeTrust = 6,\n allowTrust = 7,\n accountMerge = 8,\n inflation = 9,\n manageData = 10,\n bumpSequence = 11,\n manageBuyOffer = 12,\n pathPaymentStrictSend = 13,\n createClaimableBalance = 14,\n claimClaimableBalance = 15,\n beginSponsoringFutureReserves = 16,\n endSponsoringFutureReserves = 17,\n revokeSponsorship = 18,\n clawback = 19,\n clawbackClaimableBalance = 20,\n setTrustLineFlags = 21,\n liquidityPoolDeposit = 22,\n liquidityPoolWithdraw = 23,\n invokeHostFunction = 24,\n bumpFootprintExpiration = 25,\n restoreFootprint = 26,\n }\n export interface BaseOperationResponse<\n T extends OperationResponseType = OperationResponseType,\n TI extends OperationResponseTypeI = OperationResponseTypeI,\n > extends BaseResponse<\"succeeds\" | \"precedes\" | \"effects\" | \"transaction\"> {\n id: string;\n paging_token: string;\n source_account: string;\n type: T;\n type_i: TI;\n created_at: string;\n transaction_hash: string;\n transaction_successful: boolean;\n }\n export interface CreateAccountOperationResponse extends BaseOperationResponse<\n OperationResponseType.createAccount,\n OperationResponseTypeI.createAccount\n > {\n account: string;\n funder: string;\n starting_balance: string;\n }\n export interface PaymentOperationResponse extends BaseOperationResponse<\n OperationResponseType.payment,\n OperationResponseTypeI.payment\n > {\n from: string;\n to: string;\n asset_type: AssetType;\n asset_code?: string;\n asset_issuer?: string;\n amount: string;\n to_muxed?: string;\n to_muxed_id?: string;\n }\n export interface PathPaymentOperationResponse extends BaseOperationResponse<\n OperationResponseType.pathPayment,\n OperationResponseTypeI.pathPayment\n > {\n amount: string;\n asset_code?: string;\n asset_issuer?: string;\n asset_type: AssetType;\n from: string;\n path: Array<{\n asset_code: string;\n asset_issuer: string;\n asset_type: AssetType;\n }>;\n source_amount: string;\n source_asset_code?: string;\n source_asset_issuer?: string;\n source_asset_type: AssetType;\n source_max: string;\n to: string;\n }\n export interface PathPaymentStrictSendOperationResponse extends BaseOperationResponse<\n OperationResponseType.pathPaymentStrictSend,\n OperationResponseTypeI.pathPaymentStrictSend\n > {\n amount: string;\n asset_code?: string;\n asset_issuer?: string;\n asset_type: AssetType;\n destination_min: string;\n from: string;\n path: Array<{\n asset_code: string;\n asset_issuer: string;\n asset_type: AssetType;\n }>;\n source_amount: string;\n source_asset_code?: string;\n source_asset_issuer?: string;\n source_asset_type: AssetType;\n to: string;\n }\n export interface ManageOfferOperationResponse extends BaseOperationResponse<\n OperationResponseType.manageOffer,\n OperationResponseTypeI.manageOffer\n > {\n offer_id: number | string;\n amount: string;\n buying_asset_type: AssetType;\n buying_asset_code?: string;\n buying_asset_issuer?: string;\n price: string;\n price_r: PriceR;\n selling_asset_type: AssetType;\n selling_asset_code?: string;\n selling_asset_issuer?: string;\n }\n export interface PassiveOfferOperationResponse extends BaseOperationResponse<\n OperationResponseType.createPassiveOffer,\n OperationResponseTypeI.createPassiveOffer\n > {\n offer_id: number | string;\n amount: string;\n buying_asset_type: AssetType;\n buying_asset_code?: string;\n buying_asset_issuer?: string;\n price: string;\n price_r: PriceR;\n selling_asset_type: AssetType;\n selling_asset_code?: string;\n selling_asset_issuer?: string;\n }\n export interface SetOptionsOperationResponse extends BaseOperationResponse<\n OperationResponseType.setOptions,\n OperationResponseTypeI.setOptions\n > {\n signer_key?: string;\n signer_weight?: number;\n master_key_weight?: number;\n low_threshold?: number;\n med_threshold?: number;\n high_threshold?: number;\n home_domain?: string;\n set_flags: Array<1 | 2 | 4>;\n set_flags_s: Array<\n | \"auth_required_flag\"\n | \"auth_revocable_flag\"\n | \"auth_clawback_enabled_flag\"\n >;\n clear_flags: Array<1 | 2 | 4>;\n clear_flags_s: Array<\n | \"auth_required_flag\"\n | \"auth_revocable_flag\"\n | \"auth_clawback_enabled_flag\"\n >;\n }\n export interface ChangeTrustOperationResponse extends BaseOperationResponse<\n OperationResponseType.changeTrust,\n OperationResponseTypeI.changeTrust\n > {\n asset_type:\n | AssetType.credit4\n | AssetType.credit12\n | AssetType.liquidityPoolShares;\n asset_code?: string;\n asset_issuer?: string;\n liquidity_pool_id?: string;\n trustee?: string;\n trustor: string;\n limit: string;\n }\n export interface AllowTrustOperationResponse extends BaseOperationResponse<\n OperationResponseType.allowTrust,\n OperationResponseTypeI.allowTrust\n > {\n asset_type: AssetType;\n asset_code: string;\n asset_issuer: string;\n authorize: boolean;\n authorize_to_maintain_liabilities: boolean;\n trustee: string;\n trustor: string;\n }\n export interface AccountMergeOperationResponse extends BaseOperationResponse<\n OperationResponseType.accountMerge,\n OperationResponseTypeI.accountMerge\n > {\n into: string;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- empty interface names a public API response type\n export interface InflationOperationResponse extends BaseOperationResponse<\n OperationResponseType.inflation,\n OperationResponseTypeI.inflation\n > {}\n export interface ManageDataOperationResponse extends BaseOperationResponse<\n OperationResponseType.manageData,\n OperationResponseTypeI.manageData\n > {\n name: string;\n value: Buffer;\n }\n export interface BumpSequenceOperationResponse extends BaseOperationResponse<\n OperationResponseType.bumpSequence,\n OperationResponseTypeI.bumpSequence\n > {\n bump_to: string;\n }\n export interface Predicate {\n and?: Predicate[];\n or?: Predicate[];\n not?: Predicate;\n abs_before?: string;\n rel_before?: string;\n }\n\n export interface Claimant {\n destination: string;\n predicate: Predicate;\n }\n\n export interface CreateClaimableBalanceOperationResponse extends BaseOperationResponse<\n OperationResponseType.createClaimableBalance,\n OperationResponseTypeI.createClaimableBalance\n > {\n asset: string;\n amount: string;\n sponsor: string;\n claimants: Claimant[];\n }\n\n export interface ClaimClaimableBalanceOperationResponse extends BaseOperationResponse<\n OperationResponseType.claimClaimableBalance,\n OperationResponseTypeI.claimClaimableBalance\n > {\n balance_id: string;\n claimant: string;\n }\n\n export interface BeginSponsoringFutureReservesOperationResponse extends BaseOperationResponse<\n OperationResponseType.beginSponsoringFutureReserves,\n OperationResponseTypeI.beginSponsoringFutureReserves\n > {\n sponsored_id: string;\n }\n\n export interface EndSponsoringFutureReservesOperationResponse extends BaseOperationResponse<\n OperationResponseType.endSponsoringFutureReserves,\n OperationResponseTypeI.endSponsoringFutureReserves\n > {\n begin_sponsor: string;\n }\n\n export interface RevokeSponsorshipOperationResponse extends BaseOperationResponse<\n OperationResponseType.revokeSponsorship,\n OperationResponseTypeI.revokeSponsorship\n > {\n account_id?: string;\n claimable_balance_id?: string;\n data_account_id?: string;\n data_name?: string;\n offer_id?: string;\n trustline_account_id?: string;\n trustline_asset?: string;\n trustline_liquidity_pool_id?: string;\n signer_account_id?: string;\n signer_key?: string;\n }\n\n export interface ClawbackOperationResponse extends BaseOperationResponse<\n OperationResponseType.clawback,\n OperationResponseTypeI.clawback\n > {\n asset_type: AssetType;\n asset_code: string;\n asset_issuer: string;\n from: string;\n amount: string;\n }\n\n export interface ClawbackClaimableBalanceOperationResponse extends BaseOperationResponse<\n OperationResponseType.clawbackClaimableBalance,\n OperationResponseTypeI.clawbackClaimableBalance\n > {\n balance_id: string;\n }\n\n export interface SetTrustLineFlagsOperationResponse extends BaseOperationResponse<\n OperationResponseType.setTrustLineFlags,\n OperationResponseTypeI.setTrustLineFlags\n > {\n asset_type: AssetType;\n asset_code: string;\n asset_issuer: string;\n trustor: string;\n set_flags: Array<1 | 2 | 4>;\n clear_flags: Array<1 | 2 | 4>;\n }\n export interface Reserve {\n asset: string;\n amount: string;\n }\n export interface DepositLiquidityOperationResponse extends BaseOperationResponse<\n OperationResponseType.liquidityPoolDeposit,\n OperationResponseTypeI.liquidityPoolDeposit\n > {\n liquidity_pool_id: string;\n reserves_max: Reserve[];\n min_price: string;\n min_price_r: PriceRShorthand;\n max_price: string;\n max_price_r: PriceRShorthand;\n reserves_deposited: Reserve[];\n shares_received: string;\n }\n export interface WithdrawLiquidityOperationResponse extends BaseOperationResponse<\n OperationResponseType.liquidityPoolWithdraw,\n OperationResponseTypeI.liquidityPoolWithdraw\n > {\n liquidity_pool_id: string;\n reserves_min: Reserve[];\n shares: string;\n reserves_received: Reserve[];\n }\n\n export interface BalanceChange {\n asset_type: string;\n asset_code?: string;\n asset_issuer?: string;\n\n type: string;\n from: string;\n to: string;\n amount: string;\n destination_muxed_id?: string;\n }\n\n export interface InvokeHostFunctionOperationResponse extends BaseOperationResponse<\n OperationResponseType.invokeHostFunction,\n OperationResponseTypeI.invokeHostFunction\n > {\n function: string;\n parameters: {\n value: string;\n type: string;\n }[];\n address: string;\n salt: string;\n asset_balance_changes: BalanceChange[];\n }\n\n export interface BumpFootprintExpirationOperationResponse extends BaseOperationResponse<\n OperationResponseType.bumpFootprintExpiration,\n OperationResponseTypeI.bumpFootprintExpiration\n > {\n ledgers_to_expire: number;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- empty interface names a public API response type\n export interface RestoreFootprintOperationResponse extends BaseOperationResponse<\n OperationResponseType.restoreFootprint,\n OperationResponseTypeI.restoreFootprint\n > {}\n\n export interface ResponseCollection<T extends BaseResponse = BaseResponse> {\n _links: {\n self: ResponseLink;\n next: ResponseLink;\n prev: ResponseLink;\n };\n _embedded: {\n records: T[];\n };\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- empty interface names a public API response type\n export interface TransactionResponseCollection extends ResponseCollection<TransactionResponse> {}\n\n export interface FeeDistribution {\n max: string;\n min: string;\n mode: string;\n p10: string;\n p20: string;\n p30: string;\n p40: string;\n p50: string;\n p60: string;\n p70: string;\n p80: string;\n p90: string;\n p95: string;\n p99: string;\n }\n export interface FeeStatsResponse {\n last_ledger: string;\n last_ledger_base_fee: string;\n ledger_capacity_usage: string;\n fee_charged: FeeDistribution;\n max_fee: FeeDistribution;\n }\n\n export type ErrorResponseData =\n | ErrorResponseData.RateLimitExceeded\n | ErrorResponseData.InternalServerError\n | ErrorResponseData.TransactionFailed;\n\n export namespace ErrorResponseData {\n export interface Base {\n status: number;\n title: string;\n type: string; // TODO\n details: string; // TODO\n instance: string; // TODO\n }\n\n export interface RateLimitExceeded extends Base {\n status: 429;\n title: \"Rate Limit Exceeded\";\n }\n export interface InternalServerError extends Base {\n status: 500;\n title: \"Internal Server Error\";\n }\n export interface TransactionFailed extends Base {\n status: 400;\n title: \"Transaction Failed\";\n extras: TransactionFailedExtras;\n }\n }\n\n export enum TransactionFailedResultCodes {\n TX_FAILED = \"tx_failed\",\n TX_BAD_SEQ = \"tx_bad_seq\",\n TX_BAD_AUTH = \"tx_bad_auth\",\n TX_BAD_AUTH_EXTRA = \"tx_bad_auth_extra\",\n TX_FEE_BUMP_INNER_SUCCESS = \"tx_fee_bump_inner_success\",\n TX_FEE_BUMP_INNER_FAILED = \"tx_fee_bump_inner_failed\",\n TX_NOT_SUPPORTED = \"tx_not_supported\",\n TX_SUCCESS = \"tx_success\",\n TX_TOO_EARLY = \"tx_too_early\",\n TX_TOO_LATE = \"tx_too_late\",\n TX_MISSING_OPERATION = \"tx_missing_operation\",\n TX_INSUFFICIENT_BALANCE = \"tx_insufficient_balance\",\n TX_NO_SOURCE_ACCOUNT = \"tx_no_source_account\",\n TX_INSUFFICIENT_FEE = \"tx_insufficient_fee\",\n TX_INTERNAL_ERROR = \"tx_internal_error\",\n }\n\n export interface TransactionFailedExtras {\n envelope_xdr: string; // base64\n result_codes: {\n transaction: TransactionFailedResultCodes;\n operations: string[];\n };\n result_xdr: string;\n }\n\n export interface RootResponse {\n horizon_version: string;\n core_version: string;\n ingest_latest_ledger: number;\n history_latest_ledger: number;\n history_latest_ledger_closed_at: string;\n history_elder_ledger: number;\n core_latest_ledger: number;\n network_passphrase: string;\n current_protocol_version: number;\n supported_protocol_version: number;\n core_supported_protocol_version: number;\n }\n}\n"],"names":["HorizonApi","LiquidityPoolType","OperationResponseType","OperationResponseTypeI","TransactionFailedResultCodes"],"mappings":";;AAGiBA;AAAA,CAAV,CAAUA,WAAAA,KAAV;AAiME,EAAA,CAAA,CAAKC,kBAAAA,KAAL;AACL,IAAAA,mBAAA,iBAAA,CAAA,GAAkB,kBAAA;AAAA,EAAA,CAAA,EADRD,WAAAA,CAAA,iBAAA,KAAAA,WAAAA,CAAA,iBAAA,GAAA,EAAA,CAAA,CAAA;AAIL,EAAA,CAAA,CAAKE,sBAAAA,KAAL;AACL,IAAAA,uBAAA,eAAA,CAAA,GAAgB,gBAAA;AAChB,IAAAA,uBAAA,SAAA,CAAA,GAAU,SAAA;AACV,IAAAA,uBAAA,aAAA,CAAA,GAAc,6BAAA;AACd,IAAAA,uBAAA,oBAAA,CAAA,GAAqB,2BAAA;AACrB,IAAAA,uBAAA,aAAA,CAAA,GAAc,mBAAA;AACd,IAAAA,uBAAA,YAAA,CAAA,GAAa,aAAA;AACb,IAAAA,uBAAA,aAAA,CAAA,GAAc,cAAA;AACd,IAAAA,uBAAA,YAAA,CAAA,GAAa,aAAA;AACb,IAAAA,uBAAA,cAAA,CAAA,GAAe,eAAA;AACf,IAAAA,uBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,IAAAA,uBAAA,YAAA,CAAA,GAAa,aAAA;AACb,IAAAA,uBAAA,cAAA,CAAA,GAAe,eAAA;AACf,IAAAA,uBAAA,gBAAA,CAAA,GAAiB,kBAAA;AACjB,IAAAA,uBAAA,uBAAA,CAAA,GAAwB,0BAAA;AACxB,IAAAA,uBAAA,wBAAA,CAAA,GAAyB,0BAAA;AACzB,IAAAA,uBAAA,uBAAA,CAAA,GAAwB,yBAAA;AACxB,IAAAA,uBAAA,+BAAA,CAAA,GAAgC,kCAAA;AAChC,IAAAA,uBAAA,6BAAA,CAAA,GAA8B,gCAAA;AAC9B,IAAAA,uBAAA,mBAAA,CAAA,GAAoB,oBAAA;AACpB,IAAAA,uBAAA,UAAA,CAAA,GAAW,UAAA;AACX,IAAAA,uBAAA,0BAAA,CAAA,GAA2B,4BAAA;AAC3B,IAAAA,uBAAA,mBAAA,CAAA,GAAoB,sBAAA;AACpB,IAAAA,uBAAA,sBAAA,CAAA,GAAuB,wBAAA;AACvB,IAAAA,uBAAA,uBAAA,CAAA,GAAwB,yBAAA;AACxB,IAAAA,uBAAA,oBAAA,CAAA,GAAqB,sBAAA;AACrB,IAAAA,uBAAA,yBAAA,CAAA,GAA0B,2BAAA;AAC1B,IAAAA,uBAAA,kBAAA,CAAA,GAAmB,mBAAA;AAAA,EAAA,CAAA,EA3BTF,WAAAA,CAAA,qBAAA,KAAAA,WAAAA,CAAA,qBAAA,GAAA,EAAA,CAAA,CAAA;AA6BL,EAAA,CAAA,CAAKG,uBAAAA,KAAL;AACL,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,mBAAgB,CAAA,CAAA,GAAhB,eAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,aAAU,CAAA,CAAA,GAAV,SAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,wBAAqB,CAAA,CAAA,GAArB,oBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,gBAAa,CAAA,CAAA,GAAb,YAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,iBAAc,CAAA,CAAA,GAAd,aAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,gBAAa,CAAA,CAAA,GAAb,YAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,kBAAe,CAAA,CAAA,GAAf,cAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,gBAAa,EAAA,CAAA,GAAb,YAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,kBAAe,EAAA,CAAA,GAAf,cAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,oBAAiB,EAAA,CAAA,GAAjB,gBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,2BAAwB,EAAA,CAAA,GAAxB,uBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,4BAAyB,EAAA,CAAA,GAAzB,wBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,2BAAwB,EAAA,CAAA,GAAxB,uBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,mCAAgC,EAAA,CAAA,GAAhC,+BAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,iCAA8B,EAAA,CAAA,GAA9B,6BAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,uBAAoB,EAAA,CAAA,GAApB,mBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,cAAW,EAAA,CAAA,GAAX,UAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,8BAA2B,EAAA,CAAA,GAA3B,0BAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,uBAAoB,EAAA,CAAA,GAApB,mBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,0BAAuB,EAAA,CAAA,GAAvB,sBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,2BAAwB,EAAA,CAAA,GAAxB,uBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,wBAAqB,EAAA,CAAA,GAArB,oBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,6BAA0B,EAAA,CAAA,GAA1B,yBAAA;AACA,IAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,sBAAmB,EAAA,CAAA,GAAnB,kBAAA;AAAA,EAAA,CAAA,EA3BUH,WAAAA,CAAA,sBAAA,KAAAA,WAAAA,CAAA,sBAAA,GAAA,EAAA,CAAA,CAAA;AAgbL,EAAA,CAAA,CAAKI,6BAAAA,KAAL;AACL,IAAAA,8BAAA,WAAA,CAAA,GAAY,WAAA;AACZ,IAAAA,8BAAA,YAAA,CAAA,GAAa,YAAA;AACb,IAAAA,8BAAA,aAAA,CAAA,GAAc,aAAA;AACd,IAAAA,8BAAA,mBAAA,CAAA,GAAoB,mBAAA;AACpB,IAAAA,8BAAA,2BAAA,CAAA,GAA4B,2BAAA;AAC5B,IAAAA,8BAAA,0BAAA,CAAA,GAA2B,0BAAA;AAC3B,IAAAA,8BAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,IAAAA,8BAAA,YAAA,CAAA,GAAa,YAAA;AACb,IAAAA,8BAAA,cAAA,CAAA,GAAe,cAAA;AACf,IAAAA,8BAAA,aAAA,CAAA,GAAc,aAAA;AACd,IAAAA,8BAAA,sBAAA,CAAA,GAAuB,sBAAA;AACvB,IAAAA,8BAAA,yBAAA,CAAA,GAA0B,yBAAA;AAC1B,IAAAA,8BAAA,sBAAA,CAAA,GAAuB,sBAAA;AACvB,IAAAA,8BAAA,qBAAA,CAAA,GAAsB,qBAAA;AACtB,IAAAA,8BAAA,mBAAA,CAAA,GAAoB,mBAAA;AAAA,EAAA,CAAA,EAfVJ,WAAAA,CAAA,4BAAA,KAAAA,WAAAA,CAAA,4BAAA,GAAA,EAAA,CAAA,CAAA;AAAA,CAAA,EAlpBGA,kBAAA,KAAAA,kBAAA,GAAA,EAAA,CAAA,CAAA;;"}
1
+ {"version":3,"file":"horizon_api.js","sources":["../../../../src/horizon/horizon_api.ts"],"sourcesContent":["import type { AssetType, MemoType } from \"../base/index.js\";\n\n/* tslint:disable-next-line:no-namespace */\nexport namespace HorizonApi {\n export interface ResponseLink {\n href: string;\n templated?: boolean;\n }\n export interface BaseResponse<T extends string = never> {\n _links: { [key in T | \"self\"]: ResponseLink };\n }\n\n export interface SubmitTransactionResponse {\n hash: string;\n ledger: number;\n successful: boolean;\n envelope_xdr: string;\n result_xdr: string;\n result_meta_xdr: string;\n paging_token: string;\n }\n\n export interface SubmitAsyncTransactionResponse {\n hash: string;\n tx_status: string;\n error_result_xdr: string;\n }\n\n export interface FeeBumpTransactionResponse {\n hash: string;\n signatures: string[];\n }\n\n export interface InnerTransactionResponse {\n hash: string;\n signatures: string[];\n max_fee: string;\n }\n\n export interface TransactionPreconditions {\n timebounds?: {\n min_time: string;\n max_time: string;\n };\n ledgerbounds?: {\n min_ledger: number;\n max_ledger: number;\n };\n min_account_sequence?: string;\n min_account_sequence_age?: string;\n min_account_sequence_ledger_gap?: number;\n extra_signers?: string[];\n }\n\n export interface TransactionResponse\n extends\n SubmitTransactionResponse,\n BaseResponse<\n | \"account\"\n | \"ledger\"\n | \"operations\"\n | \"effects\"\n | \"succeeds\"\n | \"precedes\"\n > {\n created_at: string;\n fee_meta_xdr: string;\n fee_charged: number | string;\n max_fee: number | string;\n id: string;\n memo_type: MemoType;\n memo?: string;\n memo_bytes?: string;\n operation_count: number;\n paging_token: string;\n signatures: string[];\n source_account: string;\n source_account_sequence: string;\n fee_account: string;\n inner_transaction?: InnerTransactionResponse;\n fee_bump_transaction?: FeeBumpTransactionResponse;\n preconditions?: TransactionPreconditions;\n }\n\n export interface BalanceLineNative {\n balance: string;\n asset_type: AssetType.native;\n buying_liabilities: string;\n selling_liabilities: string;\n }\n export interface BalanceLineLiquidityPool {\n liquidity_pool_id: string;\n asset_type: AssetType.liquidityPoolShares;\n balance: string;\n limit: string;\n last_modified_ledger: number;\n is_authorized: boolean;\n is_authorized_to_maintain_liabilities: boolean;\n is_clawback_enabled: boolean;\n sponsor?: string;\n }\n export interface BalanceLineAsset<\n T extends AssetType.credit4 | AssetType.credit12 =\n | AssetType.credit4\n | AssetType.credit12,\n > {\n balance: string;\n limit: string;\n asset_type: T;\n asset_code: string;\n asset_issuer: string;\n buying_liabilities: string;\n selling_liabilities: string;\n last_modified_ledger: number;\n is_authorized: boolean;\n is_authorized_to_maintain_liabilities: boolean;\n is_clawback_enabled: boolean;\n sponsor?: string;\n }\n export type BalanceLine<T extends AssetType = AssetType> =\n T extends AssetType.native\n ? BalanceLineNative\n : T extends AssetType.credit4 | AssetType.credit12\n ? BalanceLineAsset<T>\n : T extends AssetType.liquidityPoolShares\n ? BalanceLineLiquidityPool\n : BalanceLineNative | BalanceLineAsset | BalanceLineLiquidityPool;\n\n export interface AssetAccounts {\n authorized: number;\n authorized_to_maintain_liabilities: number;\n unauthorized: number;\n }\n export interface AssetBalances {\n authorized: string;\n authorized_to_maintain_liabilities: string;\n unauthorized: string;\n }\n\n export interface PriceR {\n numerator: number;\n denominator: number;\n }\n\n export interface PriceRShorthand {\n n: number;\n d: number;\n }\n\n export interface AccountThresholds {\n low_threshold: number;\n med_threshold: number;\n high_threshold: number;\n }\n export interface Flags {\n auth_immutable: boolean;\n auth_required: boolean;\n auth_revocable: boolean;\n auth_clawback_enabled: boolean;\n }\n export interface AccountSigner {\n key: string;\n weight: number;\n type: string;\n sponsor?: string;\n }\n export interface AccountResponse extends BaseResponse<\n | \"transactions\"\n | \"operations\"\n | \"payments\"\n | \"effects\"\n | \"offers\"\n | \"trades\"\n | \"data\"\n > {\n id: string;\n paging_token: string;\n account_id: string;\n sequence: string;\n sequence_ledger?: number;\n sequence_time?: string;\n subentry_count: number;\n thresholds: AccountThresholds;\n last_modified_ledger: number;\n last_modified_time: string;\n flags: Flags;\n balances: BalanceLine[];\n signers: AccountSigner[];\n data: {\n [key: string]: string;\n };\n sponsor?: string;\n num_sponsoring: number;\n num_sponsored: number;\n }\n\n export enum LiquidityPoolType {\n constantProduct = \"constant_product\",\n }\n\n export enum OperationResponseType {\n createAccount = \"create_account\",\n payment = \"payment\",\n pathPayment = \"path_payment_strict_receive\",\n createPassiveOffer = \"create_passive_sell_offer\",\n manageOffer = \"manage_sell_offer\",\n setOptions = \"set_options\",\n changeTrust = \"change_trust\",\n allowTrust = \"allow_trust\",\n accountMerge = \"account_merge\",\n inflation = \"inflation\",\n manageData = \"manage_data\",\n bumpSequence = \"bump_sequence\",\n manageBuyOffer = \"manage_buy_offer\",\n pathPaymentStrictSend = \"path_payment_strict_send\",\n createClaimableBalance = \"create_claimable_balance\",\n claimClaimableBalance = \"claim_claimable_balance\",\n beginSponsoringFutureReserves = \"begin_sponsoring_future_reserves\",\n endSponsoringFutureReserves = \"end_sponsoring_future_reserves\",\n revokeSponsorship = \"revoke_sponsorship\",\n clawback = \"clawback\",\n clawbackClaimableBalance = \"clawback_claimable_balance\",\n setTrustLineFlags = \"set_trust_line_flags\",\n liquidityPoolDeposit = \"liquidity_pool_deposit\",\n liquidityPoolWithdraw = \"liquidity_pool_withdraw\",\n invokeHostFunction = \"invoke_host_function\",\n bumpFootprintExpiration = \"bump_footprint_expiration\",\n restoreFootprint = \"restore_footprint\",\n }\n export enum OperationResponseTypeI {\n createAccount = 0,\n payment = 1,\n pathPayment = 2,\n createPassiveOffer = 3,\n manageOffer = 4,\n setOptions = 5,\n changeTrust = 6,\n allowTrust = 7,\n accountMerge = 8,\n inflation = 9,\n manageData = 10,\n bumpSequence = 11,\n manageBuyOffer = 12,\n pathPaymentStrictSend = 13,\n createClaimableBalance = 14,\n claimClaimableBalance = 15,\n beginSponsoringFutureReserves = 16,\n endSponsoringFutureReserves = 17,\n revokeSponsorship = 18,\n clawback = 19,\n clawbackClaimableBalance = 20,\n setTrustLineFlags = 21,\n liquidityPoolDeposit = 22,\n liquidityPoolWithdraw = 23,\n invokeHostFunction = 24,\n bumpFootprintExpiration = 25,\n restoreFootprint = 26,\n }\n export interface BaseOperationResponse<\n T extends OperationResponseType = OperationResponseType,\n TI extends OperationResponseTypeI = OperationResponseTypeI,\n > extends BaseResponse<\"succeeds\" | \"precedes\" | \"effects\" | \"transaction\"> {\n id: string;\n paging_token: string;\n source_account: string;\n type: T;\n type_i: TI;\n created_at: string;\n transaction_hash: string;\n transaction_successful: boolean;\n }\n export interface CreateAccountOperationResponse extends BaseOperationResponse<\n OperationResponseType.createAccount,\n OperationResponseTypeI.createAccount\n > {\n account: string;\n funder: string;\n starting_balance: string;\n }\n export interface PaymentOperationResponse extends BaseOperationResponse<\n OperationResponseType.payment,\n OperationResponseTypeI.payment\n > {\n from: string;\n to: string;\n asset_type: AssetType;\n asset_code?: string;\n asset_issuer?: string;\n amount: string;\n to_muxed?: string;\n to_muxed_id?: string;\n }\n export interface PathPaymentOperationResponse extends BaseOperationResponse<\n OperationResponseType.pathPayment,\n OperationResponseTypeI.pathPayment\n > {\n amount: string;\n asset_code?: string;\n asset_issuer?: string;\n asset_type: AssetType;\n from: string;\n path: Array<{\n asset_code: string;\n asset_issuer: string;\n asset_type: AssetType;\n }>;\n source_amount: string;\n source_asset_code?: string;\n source_asset_issuer?: string;\n source_asset_type: AssetType;\n source_max: string;\n to: string;\n }\n export interface PathPaymentStrictSendOperationResponse extends BaseOperationResponse<\n OperationResponseType.pathPaymentStrictSend,\n OperationResponseTypeI.pathPaymentStrictSend\n > {\n amount: string;\n asset_code?: string;\n asset_issuer?: string;\n asset_type: AssetType;\n destination_min: string;\n from: string;\n path: Array<{\n asset_code: string;\n asset_issuer: string;\n asset_type: AssetType;\n }>;\n source_amount: string;\n source_asset_code?: string;\n source_asset_issuer?: string;\n source_asset_type: AssetType;\n to: string;\n }\n export interface ManageOfferOperationResponse extends BaseOperationResponse<\n OperationResponseType.manageOffer,\n OperationResponseTypeI.manageOffer\n > {\n offer_id: number | string;\n amount: string;\n buying_asset_type: AssetType;\n buying_asset_code?: string;\n buying_asset_issuer?: string;\n price: string;\n price_r: PriceR;\n selling_asset_type: AssetType;\n selling_asset_code?: string;\n selling_asset_issuer?: string;\n }\n export interface PassiveOfferOperationResponse extends BaseOperationResponse<\n OperationResponseType.createPassiveOffer,\n OperationResponseTypeI.createPassiveOffer\n > {\n offer_id: number | string;\n amount: string;\n buying_asset_type: AssetType;\n buying_asset_code?: string;\n buying_asset_issuer?: string;\n price: string;\n price_r: PriceR;\n selling_asset_type: AssetType;\n selling_asset_code?: string;\n selling_asset_issuer?: string;\n }\n export interface SetOptionsOperationResponse extends BaseOperationResponse<\n OperationResponseType.setOptions,\n OperationResponseTypeI.setOptions\n > {\n signer_key?: string;\n signer_weight?: number;\n master_key_weight?: number;\n low_threshold?: number;\n med_threshold?: number;\n high_threshold?: number;\n home_domain?: string;\n set_flags: Array<1 | 2 | 4>;\n set_flags_s: Array<\n | \"auth_required_flag\"\n | \"auth_revocable_flag\"\n | \"auth_clawback_enabled_flag\"\n >;\n clear_flags: Array<1 | 2 | 4>;\n clear_flags_s: Array<\n | \"auth_required_flag\"\n | \"auth_revocable_flag\"\n | \"auth_clawback_enabled_flag\"\n >;\n }\n export interface ChangeTrustOperationResponse extends BaseOperationResponse<\n OperationResponseType.changeTrust,\n OperationResponseTypeI.changeTrust\n > {\n asset_type:\n | AssetType.credit4\n | AssetType.credit12\n | AssetType.liquidityPoolShares;\n asset_code?: string;\n asset_issuer?: string;\n liquidity_pool_id?: string;\n trustee?: string;\n trustor: string;\n limit: string;\n }\n export interface AllowTrustOperationResponse extends BaseOperationResponse<\n OperationResponseType.allowTrust,\n OperationResponseTypeI.allowTrust\n > {\n asset_type: AssetType;\n asset_code: string;\n asset_issuer: string;\n authorize: boolean;\n authorize_to_maintain_liabilities: boolean;\n trustee: string;\n trustor: string;\n }\n export interface AccountMergeOperationResponse extends BaseOperationResponse<\n OperationResponseType.accountMerge,\n OperationResponseTypeI.accountMerge\n > {\n into: string;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- empty interface names a public API response type\n export interface InflationOperationResponse extends BaseOperationResponse<\n OperationResponseType.inflation,\n OperationResponseTypeI.inflation\n > {}\n export interface ManageDataOperationResponse extends BaseOperationResponse<\n OperationResponseType.manageData,\n OperationResponseTypeI.manageData\n > {\n name: string;\n value: Buffer;\n }\n export interface BumpSequenceOperationResponse extends BaseOperationResponse<\n OperationResponseType.bumpSequence,\n OperationResponseTypeI.bumpSequence\n > {\n bump_to: string;\n }\n export interface Predicate {\n and?: Predicate[];\n or?: Predicate[];\n not?: Predicate;\n abs_before?: string;\n rel_before?: string;\n }\n\n export interface Claimant {\n destination: string;\n predicate: Predicate;\n }\n\n export interface CreateClaimableBalanceOperationResponse extends BaseOperationResponse<\n OperationResponseType.createClaimableBalance,\n OperationResponseTypeI.createClaimableBalance\n > {\n asset: string;\n amount: string;\n sponsor: string;\n claimants: Claimant[];\n }\n\n export interface ClaimClaimableBalanceOperationResponse extends BaseOperationResponse<\n OperationResponseType.claimClaimableBalance,\n OperationResponseTypeI.claimClaimableBalance\n > {\n balance_id: string;\n claimant: string;\n }\n\n export interface BeginSponsoringFutureReservesOperationResponse extends BaseOperationResponse<\n OperationResponseType.beginSponsoringFutureReserves,\n OperationResponseTypeI.beginSponsoringFutureReserves\n > {\n sponsored_id: string;\n }\n\n export interface EndSponsoringFutureReservesOperationResponse extends BaseOperationResponse<\n OperationResponseType.endSponsoringFutureReserves,\n OperationResponseTypeI.endSponsoringFutureReserves\n > {\n begin_sponsor: string;\n }\n\n export interface RevokeSponsorshipOperationResponse extends BaseOperationResponse<\n OperationResponseType.revokeSponsorship,\n OperationResponseTypeI.revokeSponsorship\n > {\n account_id?: string;\n claimable_balance_id?: string;\n data_account_id?: string;\n data_name?: string;\n offer_id?: string;\n trustline_account_id?: string;\n trustline_asset?: string;\n trustline_liquidity_pool_id?: string;\n signer_account_id?: string;\n signer_key?: string;\n }\n\n export interface ClawbackOperationResponse extends BaseOperationResponse<\n OperationResponseType.clawback,\n OperationResponseTypeI.clawback\n > {\n asset_type: AssetType;\n asset_code: string;\n asset_issuer: string;\n from: string;\n amount: string;\n }\n\n export interface ClawbackClaimableBalanceOperationResponse extends BaseOperationResponse<\n OperationResponseType.clawbackClaimableBalance,\n OperationResponseTypeI.clawbackClaimableBalance\n > {\n balance_id: string;\n }\n\n export interface SetTrustLineFlagsOperationResponse extends BaseOperationResponse<\n OperationResponseType.setTrustLineFlags,\n OperationResponseTypeI.setTrustLineFlags\n > {\n asset_type: AssetType;\n asset_code: string;\n asset_issuer: string;\n trustor: string;\n set_flags: Array<1 | 2 | 4>;\n clear_flags: Array<1 | 2 | 4>;\n }\n export interface Reserve {\n asset: string;\n amount: string;\n }\n export interface DepositLiquidityOperationResponse extends BaseOperationResponse<\n OperationResponseType.liquidityPoolDeposit,\n OperationResponseTypeI.liquidityPoolDeposit\n > {\n liquidity_pool_id: string;\n reserves_max: Reserve[];\n min_price: string;\n min_price_r: PriceRShorthand;\n max_price: string;\n max_price_r: PriceRShorthand;\n reserves_deposited: Reserve[];\n shares_received: string;\n }\n export interface WithdrawLiquidityOperationResponse extends BaseOperationResponse<\n OperationResponseType.liquidityPoolWithdraw,\n OperationResponseTypeI.liquidityPoolWithdraw\n > {\n liquidity_pool_id: string;\n reserves_min: Reserve[];\n shares: string;\n reserves_received: Reserve[];\n }\n\n export interface BalanceChange {\n asset_type: string;\n asset_code?: string;\n asset_issuer?: string;\n\n type: string;\n from: string;\n to: string;\n amount: string;\n destination_muxed_id?: string;\n }\n\n export interface InvokeHostFunctionOperationResponse extends BaseOperationResponse<\n OperationResponseType.invokeHostFunction,\n OperationResponseTypeI.invokeHostFunction\n > {\n function: string;\n parameters: {\n value: string;\n type: string;\n }[];\n address: string;\n salt: string;\n asset_balance_changes: BalanceChange[];\n }\n\n export interface BumpFootprintExpirationOperationResponse extends BaseOperationResponse<\n OperationResponseType.bumpFootprintExpiration,\n OperationResponseTypeI.bumpFootprintExpiration\n > {\n ledgers_to_expire: number;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- empty interface names a public API response type\n export interface RestoreFootprintOperationResponse extends BaseOperationResponse<\n OperationResponseType.restoreFootprint,\n OperationResponseTypeI.restoreFootprint\n > {}\n\n export interface ResponseCollection<T extends BaseResponse = BaseResponse> {\n _links: {\n self: ResponseLink;\n next: ResponseLink;\n prev: ResponseLink;\n };\n _embedded: {\n records: T[];\n };\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- empty interface names a public API response type\n export interface TransactionResponseCollection extends ResponseCollection<TransactionResponse> {}\n\n export interface FeeDistribution {\n max: string;\n min: string;\n mode: string;\n p10: string;\n p20: string;\n p30: string;\n p40: string;\n p50: string;\n p60: string;\n p70: string;\n p80: string;\n p90: string;\n p95: string;\n p99: string;\n }\n export interface FeeStatsResponse {\n last_ledger: string;\n last_ledger_base_fee: string;\n ledger_capacity_usage: string;\n fee_charged: FeeDistribution;\n max_fee: FeeDistribution;\n }\n\n export type ErrorResponseData =\n | ErrorResponseData.RateLimitExceeded\n | ErrorResponseData.InternalServerError\n | ErrorResponseData.TransactionFailed;\n\n export namespace ErrorResponseData {\n export interface Base {\n status: number;\n title: string;\n type: string; // TODO\n details: string; // TODO\n instance: string; // TODO\n }\n\n export interface RateLimitExceeded extends Base {\n status: 429;\n title: \"Rate Limit Exceeded\";\n }\n export interface InternalServerError extends Base {\n status: 500;\n title: \"Internal Server Error\";\n }\n export interface TransactionFailed extends Base {\n status: 400;\n title: \"Transaction Failed\";\n extras: TransactionFailedExtras;\n }\n }\n\n export enum TransactionFailedResultCodes {\n TX_FAILED = \"tx_failed\",\n TX_BAD_SEQ = \"tx_bad_seq\",\n TX_BAD_AUTH = \"tx_bad_auth\",\n TX_BAD_AUTH_EXTRA = \"tx_bad_auth_extra\",\n TX_FEE_BUMP_INNER_SUCCESS = \"tx_fee_bump_inner_success\",\n TX_FEE_BUMP_INNER_FAILED = \"tx_fee_bump_inner_failed\",\n TX_NOT_SUPPORTED = \"tx_not_supported\",\n TX_SUCCESS = \"tx_success\",\n TX_TOO_EARLY = \"tx_too_early\",\n TX_TOO_LATE = \"tx_too_late\",\n TX_MISSING_OPERATION = \"tx_missing_operation\",\n TX_INSUFFICIENT_BALANCE = \"tx_insufficient_balance\",\n TX_NO_SOURCE_ACCOUNT = \"tx_no_source_account\",\n TX_INSUFFICIENT_FEE = \"tx_insufficient_fee\",\n TX_INTERNAL_ERROR = \"tx_internal_error\",\n TX_BAD_SPONSORSHIP = \"tx_bad_sponsorship\",\n TX_BAD_MIN_SEQ_AGE_OR_GAP = \"tx_bad_min_seq_age_or_gap\",\n TX_MALFORMED = \"tx_malformed\",\n TX_SOROBAN_INVALID = \"tx_soroban_invalid\",\n TX_FROZEN_KEY_ACCESSED = \"tx_frozen_key_accessed\",\n }\n\n export interface TransactionFailedExtras {\n envelope_xdr: string; // base64\n result_codes: {\n transaction: TransactionFailedResultCodes;\n /** Omitted by Horizon when the transaction failed a transaction-level\n * check (e.g. `tx_bad_seq`) and no operations were evaluated. Typed as\n * required for backwards compatibility; treat as possibly undefined\n * when reading the raw response, or use\n * `TransactionFailedError.getResultCodes()` which normalizes it.\n * TODO(next major): make this `operations?: string[]`. */\n operations: string[];\n };\n result_xdr: string;\n }\n\n export interface RootResponse {\n horizon_version: string;\n core_version: string;\n ingest_latest_ledger: number;\n history_latest_ledger: number;\n history_latest_ledger_closed_at: string;\n history_elder_ledger: number;\n core_latest_ledger: number;\n network_passphrase: string;\n current_protocol_version: number;\n supported_protocol_version: number;\n core_supported_protocol_version: number;\n }\n}\n"],"names":["HorizonApi","LiquidityPoolType","OperationResponseType","OperationResponseTypeI","TransactionFailedResultCodes"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var axiosClient = require('../http-client/axios-client.js');
4
4
 
5
- const version = "16.0.0";
5
+ const version = "16.1.0";
6
6
  const SERVER_TIME_MAP = {};
7
7
  function toSeconds(ms) {
8
8
  return Math.floor(ms / 1e3);
@@ -26,7 +26,9 @@ var call_builder = require('./call_builder.js');
26
26
  var config = require('../config.js');
27
27
  var not_found = require('../errors/not_found.js');
28
28
  var bad_response = require('../errors/bad_response.js');
29
+ var transaction_failed = require('../errors/transaction_failed.js');
29
30
  var account_requires_memo = require('../errors/account_requires_memo.js');
31
+ var wrap_http_error = require('../errors/wrap_http_error.js');
30
32
  var account_call_builder = require('./account_call_builder.js');
31
33
  var account_response = require('./account_response.js');
32
34
  var assets_call_builder = require('./assets_call_builder.js');
@@ -52,6 +54,12 @@ const ACCOUNT_REQUIRES_MEMO = "MQ==";
52
54
  function getAmountInLumens(amt) {
53
55
  return new bignumber.default(amt).div(STROOPS_IN_LUMEN).toString();
54
56
  }
57
+ function toSubmissionError(error) {
58
+ return wrap_http_error.wrapHttpError(error, (details) => {
59
+ const message = `Transaction submission failed. Server responded: ${details.status} ${details.statusText}`;
60
+ return details.data?.extras?.result_codes ? new transaction_failed.TransactionFailedError(message, details) : new bad_response.BadResponseError(message, details);
61
+ });
62
+ }
55
63
  class HorizonServer {
56
64
  /**
57
65
  * Horizon Server URL (ex. `https://horizon-testnet.stellar.org`)
@@ -280,8 +288,11 @@ class HorizonServer {
280
288
  * - `skipMemoRequiredCheck` (optional): Allow skipping memo
281
289
  * required check, default: `false`. See
282
290
  * [SEP0029](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0029.md).
283
- * @returns Promise that resolves or rejects with response from
284
- * horizon.
291
+ * @returns Promise that resolves with the response from Horizon. Rejects
292
+ * with a {@link TransactionFailedError} when Horizon reports transaction
293
+ * result codes, a {@link BadResponseError} for any other HTTP error
294
+ * response (the underlying client error is preserved as `cause` on both),
295
+ * or the original error for network-level failures.
285
296
  */
286
297
  async submitTransaction(transaction, opts = {
287
298
  skipMemoRequiredCheck: false
@@ -421,17 +432,7 @@ class HorizonServer {
421
432
  ...response.data,
422
433
  offerResults: hasManageOffer ? offerResults : void 0
423
434
  };
424
- }).catch((response) => {
425
- if (response instanceof Error) {
426
- return Promise.reject(response);
427
- }
428
- return Promise.reject(
429
- new bad_response.BadResponseError(
430
- `Transaction submission failed. Server responded: ${response.status} ${response.statusText}`,
431
- response.data
432
- )
433
- );
434
- });
435
+ }).catch((error) => Promise.reject(toSubmissionError(error)));
435
436
  }
436
437
  /**
437
438
  * Submits an asynchronous transaction to the network. Unlike the synchronous version, which blocks
@@ -447,8 +448,11 @@ class HorizonServer {
447
448
  * - `skipMemoRequiredCheck` (optional): Allow skipping memo
448
449
  * required check, default: `false`. See
449
450
  * [SEP0029](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0029.md).
450
- * @returns Promise that resolves or rejects with response from
451
- * horizon.
451
+ * @returns Promise that resolves with the response from Horizon. Rejects
452
+ * with a {@link TransactionFailedError} when Horizon reports transaction
453
+ * result codes, a {@link BadResponseError} for any other HTTP error
454
+ * response (the underlying client error is preserved as `cause` on both),
455
+ * or the original error for network-level failures.
452
456
  */
453
457
  async submitAsyncTransaction(transaction, opts = {
454
458
  skipMemoRequiredCheck: false
@@ -463,17 +467,7 @@ class HorizonServer {
463
467
  url.pathname = url.pathname.split("/").concat(["transactions_async"]).filter((value) => value.length > 0).join("/");
464
468
  return this.httpClient.post(url.toString(), `tx=${tx}`, {
465
469
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
466
- }).then((response) => response.data).catch((response) => {
467
- if (response instanceof Error) {
468
- return Promise.reject(response);
469
- }
470
- return Promise.reject(
471
- new bad_response.BadResponseError(
472
- `Transaction submission failed. Server responded: ${response.status} ${response.statusText}`,
473
- response.data
474
- )
475
- );
476
- });
470
+ }).then((response) => response.data).catch((error) => Promise.reject(toSubmissionError(error)));
477
471
  }
478
472
  /**
479
473
  * @returns New {@link AccountCallBuilder} object configured by a current Horizon server configuration.