@fuel-ts/account 0.100.2 → 0.100.4

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 (68) hide show
  1. package/dist/account.d.ts +71 -3
  2. package/dist/account.d.ts.map +1 -1
  3. package/dist/index.global.js +1587 -289
  4. package/dist/index.global.js.map +1 -1
  5. package/dist/index.js +2133 -920
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +2041 -831
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/predicate/predicate.d.ts +9 -4
  10. package/dist/predicate/predicate.d.ts.map +1 -1
  11. package/dist/providers/__generated__/operations.d.ts +1183 -87
  12. package/dist/providers/__generated__/operations.d.ts.map +1 -1
  13. package/dist/providers/assemble-tx-helpers.d.ts +39 -0
  14. package/dist/providers/assemble-tx-helpers.d.ts.map +1 -0
  15. package/dist/providers/fuel-graphql-subscriber.d.ts +28 -0
  16. package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
  17. package/dist/providers/index.d.ts +1 -0
  18. package/dist/providers/index.d.ts.map +1 -1
  19. package/dist/providers/provider.d.ts +80 -6
  20. package/dist/providers/provider.d.ts.map +1 -1
  21. package/dist/providers/resource.d.ts +4 -1
  22. package/dist/providers/resource.d.ts.map +1 -1
  23. package/dist/providers/transaction-request/helpers.d.ts +3 -3
  24. package/dist/providers/transaction-request/helpers.d.ts.map +1 -1
  25. package/dist/providers/transaction-request/input.d.ts +2 -0
  26. package/dist/providers/transaction-request/input.d.ts.map +1 -1
  27. package/dist/providers/transaction-request/output.d.ts +6 -0
  28. package/dist/providers/transaction-request/output.d.ts.map +1 -1
  29. package/dist/providers/transaction-request/script-transaction-request.d.ts +11 -0
  30. package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
  31. package/dist/providers/transaction-response/getAllDecodedLogs.d.ts +30 -0
  32. package/dist/providers/transaction-response/getAllDecodedLogs.d.ts.map +1 -0
  33. package/dist/providers/transaction-response/getDecodedLogs.d.ts +20 -1
  34. package/dist/providers/transaction-response/getDecodedLogs.d.ts.map +1 -1
  35. package/dist/providers/transaction-response/index.d.ts +1 -0
  36. package/dist/providers/transaction-response/index.d.ts.map +1 -1
  37. package/dist/providers/transaction-response/transaction-response.d.ts +41 -12
  38. package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
  39. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +12 -1
  40. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
  41. package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
  42. package/dist/providers/transaction-summary/status.d.ts +16 -2
  43. package/dist/providers/transaction-summary/status.d.ts.map +1 -1
  44. package/dist/providers/transaction-summary/types.d.ts +85 -4
  45. package/dist/providers/transaction-summary/types.d.ts.map +1 -1
  46. package/dist/providers/utils/extract-tx-error.d.ts +4 -3
  47. package/dist/providers/utils/extract-tx-error.d.ts.map +1 -1
  48. package/dist/providers/utils/handle-gql-error-message.d.ts.map +1 -1
  49. package/dist/providers/utils/index.d.ts +1 -0
  50. package/dist/providers/utils/index.d.ts.map +1 -1
  51. package/dist/providers/utils/parse-graphql-response.d.ts +12 -0
  52. package/dist/providers/utils/parse-graphql-response.d.ts.map +1 -0
  53. package/dist/providers/utils/serialization.d.ts +9 -0
  54. package/dist/providers/utils/serialization.d.ts.map +1 -1
  55. package/dist/test-utils/launchNode.d.ts.map +1 -1
  56. package/dist/test-utils/setup-test-provider-and-wallets.d.ts.map +1 -1
  57. package/dist/test-utils.global.js +1540 -268
  58. package/dist/test-utils.global.js.map +1 -1
  59. package/dist/test-utils.js +2008 -837
  60. package/dist/test-utils.js.map +1 -1
  61. package/dist/test-utils.mjs +1931 -754
  62. package/dist/test-utils.mjs.map +1 -1
  63. package/dist/utils/deployScriptOrPredicate.d.ts.map +1 -1
  64. package/dist/utils/split-coins-into-batches.d.ts +3 -0
  65. package/dist/utils/split-coins-into-batches.d.ts.map +1 -0
  66. package/package.json +15 -15
  67. package/dist/providers/utils/helpers.d.ts +0 -14
  68. package/dist/providers/utils/helpers.d.ts.map +0 -1
@@ -7970,9 +7970,9 @@
7970
7970
  }
7971
7971
  });
7972
7972
 
7973
- // ../../node_modules/.pnpm/@fuels+vm-asm@0.59.1/node_modules/@fuels/vm-asm/dist/node/index.cjs
7973
+ // ../../node_modules/.pnpm/@fuels+vm-asm@0.60.2/node_modules/@fuels/vm-asm/dist/node/index.cjs
7974
7974
  var require_node = __commonJS({
7975
- "../../node_modules/.pnpm/@fuels+vm-asm@0.59.1/node_modules/@fuels/vm-asm/dist/node/index.cjs"(exports) {
7975
+ "../../node_modules/.pnpm/@fuels+vm-asm@0.60.2/node_modules/@fuels/vm-asm/dist/node/index.cjs"(exports) {
7976
7976
  "use strict";
7977
7977
  var wasm$1;
7978
7978
  var cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: /* @__PURE__ */ __name(() => {
@@ -8711,7 +8711,12 @@
8711
8711
  * r" Get memory address of base asset ID
8712
8712
  */
8713
8713
  BaseAssetId: 6,
8714
- "6": "BaseAssetId"
8714
+ "6": "BaseAssetId",
8715
+ /**
8716
+ * r" Get gas price for block
8717
+ */
8718
+ GetGasPrice: 7,
8719
+ "7": "GetGasPrice"
8715
8720
  });
8716
8721
  var GTFArgs2 = Object.freeze({
8717
8722
  /**
@@ -9043,7 +9048,82 @@
9043
9048
  * r" Set `$rA` to `tx.policies[count_ones(0b11111 & tx.policyTypes) - 1].expiration`
9044
9049
  */
9045
9050
  PolicyExpiration: 1285,
9046
- "1285": "PolicyExpiration"
9051
+ "1285": "PolicyExpiration",
9052
+ /**
9053
+ * r" Set `$rA` to `Memory address of tx.root`
9054
+ */
9055
+ UploadRoot: 1536,
9056
+ "1536": "UploadRoot",
9057
+ /**
9058
+ * r" Set `$rA` to `tx.witnessIndex`
9059
+ */
9060
+ UploadWitnessIndex: 1537,
9061
+ "1537": "UploadWitnessIndex",
9062
+ /**
9063
+ * r" Set `$rA` to `tx.subsectionIndex`
9064
+ */
9065
+ UploadSubsectionIndex: 1538,
9066
+ "1538": "UploadSubsectionIndex",
9067
+ /**
9068
+ * r" Set `$rA` to `tx.subsectionsNumber`
9069
+ */
9070
+ UploadSubsectionsCount: 1539,
9071
+ "1539": "UploadSubsectionsCount",
9072
+ /**
9073
+ * r" Set `$rA` to `tx.proofSetCount`
9074
+ */
9075
+ UploadProofSetCount: 1540,
9076
+ "1540": "UploadProofSetCount",
9077
+ /**
9078
+ * r" Set `$rA` to `Memory address of tx.proofSet[$rB]`
9079
+ */
9080
+ UploadProofSetAtIndex: 1541,
9081
+ "1541": "UploadProofSetAtIndex",
9082
+ /**
9083
+ * r" Set `$rA` to `Memory address of tx.id`
9084
+ */
9085
+ BlobId: 1792,
9086
+ "1792": "BlobId",
9087
+ /**
9088
+ * r" Set `$rA` to `tx.witnessIndex`
9089
+ */
9090
+ BlobWitnessIndex: 1793,
9091
+ "1793": "BlobWitnessIndex",
9092
+ /**
9093
+ * r" Set `$rA` to `Memory address of tx.purpose`
9094
+ */
9095
+ UpgradePurpose: 2048,
9096
+ "2048": "UpgradePurpose",
9097
+ /**
9098
+ * r" Set `$rA` to `tx.inputsCount`
9099
+ */
9100
+ TxInputsCount: 2304,
9101
+ "2304": "TxInputsCount",
9102
+ /**
9103
+ * r" Set `$rA` to `tx.outputsCount`
9104
+ */
9105
+ TxOutputsCount: 2305,
9106
+ "2305": "TxOutputsCount",
9107
+ /**
9108
+ * r" Set `$rA` to `tx.witnessesCount`
9109
+ */
9110
+ TxWitnessesCount: 2306,
9111
+ "2306": "TxWitnessesCount",
9112
+ /**
9113
+ * r" Set `$rA` to `Memory address of tx.inputs[$rB]`
9114
+ */
9115
+ TxInputAtIndex: 2307,
9116
+ "2307": "TxInputAtIndex",
9117
+ /**
9118
+ * r" Set `$rA` to `Memory address of t.outputs[$rB]`
9119
+ */
9120
+ TxOutputAtIndex: 2308,
9121
+ "2308": "TxOutputAtIndex",
9122
+ /**
9123
+ * r" Set `$rA` to `Memory address of tx.witnesses[$rB]`
9124
+ */
9125
+ TxWitnessAtIndex: 2309,
9126
+ "2309": "TxWitnessAtIndex"
9047
9127
  });
9048
9128
  var MathOp = Object.freeze({
9049
9129
  /**
@@ -9399,7 +9479,27 @@
9399
9479
  * r" Given input contract does not exist.
9400
9480
  */
9401
9481
  InputContractDoesNotExist: 60,
9402
- "60": "InputContractDoesNotExist"
9482
+ "60": "InputContractDoesNotExist",
9483
+ /**
9484
+ * r" Storage slot in Create not found
9485
+ */
9486
+ StorageSlotsNotFound: 61,
9487
+ "61": "StorageSlotsNotFound",
9488
+ /**
9489
+ * r" Proof in Upload not found
9490
+ */
9491
+ ProofInUploadNotFound: 62,
9492
+ "62": "ProofInUploadNotFound",
9493
+ /**
9494
+ * r" Invalid purpose type in Upgrade
9495
+ */
9496
+ InvalidUpgradePurposeType: 63,
9497
+ "63": "InvalidUpgradePurposeType",
9498
+ /**
9499
+ * r" Cannot get gas price in predicate
9500
+ */
9501
+ CanNotGetGasPriceInPredicate: 64,
9502
+ "64": "CanNotGetGasPriceInPredicate"
9403
9503
  });
9404
9504
  var ADDFinalization = typeof FinalizationRegistry === "undefined" ? { register: /* @__PURE__ */ __name(() => {
9405
9505
  }, "register"), unregister: /* @__PURE__ */ __name(() => {
@@ -16917,11 +17017,11 @@
16917
17017
  }
16918
17018
  __name(_loadWasmModule, "_loadWasmModule");
16919
17019
  function wasm(imports) {
16920
- return _loadWasmModule(1, null, "AGFzbQEAAAABOgpgA39/fwF/YAF/AX9gBH9/f38Bf2ACf38AYAJ/fwF/YAABf2AFf39/f38Bf2ABfwBgA39/fwBgAAACGAEDd2JnEF9fd2JpbmRnZW5fdGhyb3cAAwOBAv8BAQEDAwMDAwMBAQMDAQEBAwMBAQEEAQMDAwEBAwEBAQQCAQMCAgICAgIDAwMEBAQEBAQEBAEBAQMDAAICBAQEBAQEBAQEBAABAQgDAwQBAQEBAQEBAgcDAQAAAQEDBwcBAwEDAgIBAQEAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBBQEBAQEEAAQBBgICAwMAAgAHAQgEAQQBCQMBAQcBBQUFBQUFBQUFBQUFBQUFBQUFBQMGBgICBAIGBgAACAAEBQMBABEGCQF/AUGAgMAACwe9Td0FBm1lbW9yeQIAFl9fd2JnX2NvbXBhcmVhcmdzX2ZyZWUAEBpfX3diZ19nZXRfY29tcGFyZWFyZ3NfbW9kZQBIGl9fd2JnX3NldF9jb21wYXJlYXJnc19tb2RlADgiX193YmdfZ2V0X2NvbXBhcmVhcmdzX2luZGlyZWN0X3JocwBJIl9fd2JnX3NldF9jb21wYXJlYXJnc19pbmRpcmVjdF9yaHMASxJjb21wYXJlYXJnc190b19pbW0AWBRjb21wYXJlYXJnc19mcm9tX2ltbQAfFV9fd2JnX2dldF9tYXRoYXJnc19vcABIFV9fd2JnX3NldF9tYXRoYXJnc19vcAA5El9fd2JnX211bGFyZ3NfZnJlZQARHl9fd2JnX2dldF9tdWxhcmdzX2luZGlyZWN0X3JocwBIHl9fd2JnX3NldF9tdWxhcmdzX2luZGlyZWN0X3JocwBMEl9fd2JnX2RpdmFyZ3NfZnJlZQAjHl9fd2JnX2dldF9kaXZhcmdzX2luZGlyZWN0X3JocwC7AR5fX3diZ19zZXRfZGl2YXJnc19pbmRpcmVjdF9yaHMAYxtfX3diZ19wYW5pY2luc3RydWN0aW9uX2ZyZWUAFyFwYW5pY2luc3RydWN0aW9uX2Vycm9yX3R5cGVzY3JpcHQATRdwYW5pY2luc3RydWN0aW9uX3JlYXNvbgBbHHBhbmljaW5zdHJ1Y3Rpb25faW5zdHJ1Y3Rpb24AXAxnbV9mcm9tX2FyZ3MA1wENZ3RmX2Zyb21fYXJncwDPAQdnbV9hcmdzAIoBCGd0Zl9hcmdzAGkOd2RjbV9mcm9tX2FyZ3MAOw53ZG9wX2Zyb21fYXJncwA7DndkbWxfZnJvbV9hcmdzADwOd2Rkdl9mcm9tX2FyZ3MAywEJd2RjbV9hcmdzACQJd3FjbV9hcmdzACUJd2RvcF9hcmdzACYJd3FvcF9hcmdzACcJd2RtbF9hcmdzACgJd3FtbF9hcmdzACkJd2Rkdl9hcmdzAGQJd3Fkdl9hcmdzAGUQX193YmdfaW1tMDZfZnJlZQAqEF9fd2JnX2ltbTEyX2ZyZWUAKxBfX3diZ19pbW0xOF9mcmVlACwOX193YmdfYWRkX2ZyZWUAGA9fX3diZ19ub29wX2ZyZWUABxJhZGRfbmV3X3R5cGVzY3JpcHQAWQZhZGRfcmEANQZhZGRfcmIAEgZhZGRfcmMAGgNhZGQAxwEDYW5kAIwBA2RpdgCNAQJlcQCOAQNleHAAjwECZ3QAkAECbHQAkQEEbWxvZwCSAQRtcm9vAJMBBG1vZF8AlAEFbW92ZV8APQNtdWwAlQEDbm90AD4Cb3IAlgEDc2xsAJcBA3NybACYAQNzdWIAmQEDeG9yAJoBBG1sZHYAagNyZXQAvAEEcmV0ZAA/E2Fsb2NfbmV3X3R5cGVzY3JpcHQAYAdhbG9jX3JhACIEYWxvYwC9AQNtY2wAQANtY3AAmwEDbWVxAGsTYmhzaF9uZXdfdHlwZXNjcmlwdAAgBGJoc2gALQRiaGVpAL4BBGJ1cm4AQQRjYWxsAGwDY2NwAG0EY3JvbwBCBGNzaXoAQwJjYgC/AQNsZGMAbgNsb2cAbwRsb2dkAHAEbWludABEBHJ2cnQAwAEEc2N3cQCcAQNzcncAnQEEc3J3cQBxA3N3dwCeAQRzd3dxAHICdHIAnwEDdHJvAHMEZWNrMQCgAQRlY3IxAKEBBGVkMTkAdARrMjU2AKIBBHMyNTYAowEEdGltZQBFE25vb3BfbmV3X3R5cGVzY3JpcHQAwQEEbm9vcADfAQRmbGFnAMIBA2JhbACkAQNqbXAAwwEDam5lAKUBA3NtbwB1E2FkZGlfbmV3X3R5cGVzY3JpcHQAWgphZGRpX2ltbTEyAAkEYWRkaQCmAQRhbmRpAKcBBGRpdmkAqAEEZXhwaQCpAQRtb2RpAKoBBG11bGkAqwEDb3JpAKwBBHNsbGkArQEEc3JsaQCuAQRzdWJpAK8BBHhvcmkAsAEEam5laQCxAQJsYgCyAQJsdwCzAQJzYgC0AQJzdwC1AQRtY3BpALYBEmd0Zl9uZXdfdHlwZXNjcmlwdADRAQNndGYAtwEEbWNsaQAuEWdtX25ld190eXBlc2NyaXB0AEYIZ21faW1tMTgADQJnbQAvBG1vdmkAMARqbnppADEEam1wZgAyE2ptcGJfbmV3X3R5cGVzY3JpcHQAFQRqbXBiADMEam56ZgC4AQRqbnpiALkBBGpuZWYAdgpqbmViX2ltbTA2ADYEam5lYgB3AmppAE4TY2ZlaV9uZXdfdHlwZXNjcmlwdAA3CmNmZWlfaW1tMjQACgRjZmVpAE8EY2ZzaQBQA2NmZQDEAQNjZnMAxQEEcHNobABRBHBzaGgAUgRwb3BsAFMEcG9waABUE3dkY21fbmV3X3R5cGVzY3JpcHQAzAEEd2RjbQB4BHdxY20AeQR3ZG9wAHoEd3FvcAB7BHdkbWwAfAR3cW1sAH0Ed2RkdgB+BHdxZHYAfwR3ZG1kAIABBHdxbWQAgQEEd2RhbQCCAQR3cWFtAIMBBHdkbW0AhAEEd3FtbQCFAQRlY2FsAIYBBGJzaXoANBNibGRkX25ld190eXBlc2NyaXB0AFUHYmxkZF9yZAA2BGJsZGQAhwEEZWNvcACIAQRlcGFyAIkBFl9fd2JnX2luc3RydWN0aW9uX2ZyZWUADBRpbnN0cnVjdGlvbl90b19ieXRlcwAGEGluc3RydWN0aW9uX3NpemUA8QERcmVnaWRfbmV3X2NoZWNrZWQAugEJcmVnaWRfYmFsAOABCnJlZ2lkX2NnYXMA4QEJcmVnaWRfZXJyAOIBCnJlZ2lkX2ZsYWcA4wEIcmVnaWRfZnAA5AEKcmVnaWRfZ2dhcwDlAQhyZWdpZF9ocADmAQhyZWdpZF9pcwDnAQhyZWdpZF9vZgDoAQlyZWdpZF9vbmUA6QEIcmVnaWRfcGMA6gEJcmVnaWRfcmV0AOsBCnJlZ2lkX3JldGwA7AEIcmVnaWRfc3AA7QEJcmVnaWRfc3BwAO4BDnJlZ2lkX3dyaXRhYmxlAO8BCnJlZ2lkX3plcm8A8AEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA2wELcmVnaWRfdG9fdTgA3AESYW5kX25ld190eXBlc2NyaXB0AFkSZGl2X25ld190eXBlc2NyaXB0AFkRZXFfbmV3X3R5cGVzY3JpcHQAWRJleHBfbmV3X3R5cGVzY3JpcHQAWRFndF9uZXdfdHlwZXNjcmlwdABZEWx0X25ld190eXBlc2NyaXB0AFkTbWxvZ19uZXdfdHlwZXNjcmlwdABZE21yb29fbmV3X3R5cGVzY3JpcHQAWRJtb2RfbmV3X3R5cGVzY3JpcHQAWRJtdWxfbmV3X3R5cGVzY3JpcHQAWRFvcl9uZXdfdHlwZXNjcmlwdABZEnNsbF9uZXdfdHlwZXNjcmlwdABZEnNybF9uZXdfdHlwZXNjcmlwdABZEnN1Yl9uZXdfdHlwZXNjcmlwdABZEnhvcl9uZXdfdHlwZXNjcmlwdABZEm1jcF9uZXdfdHlwZXNjcmlwdABZE3Njd3FfbmV3X3R5cGVzY3JpcHQAWRJzcndfbmV3X3R5cGVzY3JpcHQAWRJzd3dfbmV3X3R5cGVzY3JpcHQAWRF0cl9uZXdfdHlwZXNjcmlwdABZE2VjazFfbmV3X3R5cGVzY3JpcHQAWRNlY3IxX25ld190eXBlc2NyaXB0AFkTazI1Nl9uZXdfdHlwZXNjcmlwdABZE3MyNTZfbmV3X3R5cGVzY3JpcHQAWRJiYWxfbmV3X3R5cGVzY3JpcHQAWRJqbmVfbmV3X3R5cGVzY3JpcHQAWRNhbmRpX25ld190eXBlc2NyaXB0AFoTZGl2aV9uZXdfdHlwZXNjcmlwdABaE2V4cGlfbmV3X3R5cGVzY3JpcHQAWhNtb2RpX25ld190eXBlc2NyaXB0AFoTbXVsaV9uZXdfdHlwZXNjcmlwdABaEm9yaV9uZXdfdHlwZXNjcmlwdABaE3NsbGlfbmV3X3R5cGVzY3JpcHQAWhNzcmxpX25ld190eXBlc2NyaXB0AFoTc3ViaV9uZXdfdHlwZXNjcmlwdABaE3hvcmlfbmV3X3R5cGVzY3JpcHQAWhNqbmVpX25ld190eXBlc2NyaXB0AFoRbGJfbmV3X3R5cGVzY3JpcHQAWhFsd19uZXdfdHlwZXNjcmlwdABaEXNiX25ld190eXBlc2NyaXB0AFoRc3dfbmV3X3R5cGVzY3JpcHQAWhNtY3BpX25ld190eXBlc2NyaXB0AFoTam56Zl9uZXdfdHlwZXNjcmlwdABaE2puemJfbmV3X3R5cGVzY3JpcHQAWhFqaV9uZXdfdHlwZXNjcmlwdAA3E2Nmc2lfbmV3X3R5cGVzY3JpcHQANxNwc2hsX25ld190eXBlc2NyaXB0ADcTcHNoaF9uZXdfdHlwZXNjcmlwdAA3E3BvcGxfbmV3X3R5cGVzY3JpcHQANxNwb3BoX25ld190eXBlc2NyaXB0ADcTbW92aV9uZXdfdHlwZXNjcmlwdAAVE21jbGlfbmV3X3R5cGVzY3JpcHQAFRNqbnppX25ld190eXBlc2NyaXB0ABUTam1wZl9uZXdfdHlwZXNjcmlwdAAVEm5vdF9uZXdfdHlwZXNjcmlwdAAgE3JldGRfbmV3X3R5cGVzY3JpcHQAIBNtb3ZlX25ld190eXBlc2NyaXB0ACASbWNsX25ld190eXBlc2NyaXB0ACATYnVybl9uZXdfdHlwZXNjcmlwdAAgE2Nyb29fbmV3X3R5cGVzY3JpcHQAIBNjc2l6X25ld190eXBlc2NyaXB0ACATbWludF9uZXdfdHlwZXNjcmlwdAAgE3RpbWVfbmV3X3R5cGVzY3JpcHQAIBNic2l6X25ld190eXBlc2NyaXB0ACAGcmV0X3JhACIHYmhlaV9yYQAiBWNiX3JhACIHcnZydF9yYQAiB2ZsYWdfcmEAIgZqbXBfcmEAIghqaV9pbW0yNAAKCmNmc2lfaW1tMjQACgZjZmVfcmEAIgZjZnNfcmEAIgpwc2hsX2ltbTI0AAoKcHNoaF9pbW0yNAAKCnBvcGxfaW1tMjQACgpwb3BoX2ltbTI0AAoTbWxkdl9uZXdfdHlwZXNjcmlwdABVEm1lcV9uZXdfdHlwZXNjcmlwdABVEmNjcF9uZXdfdHlwZXNjcmlwdABVEmxvZ19uZXdfdHlwZXNjcmlwdABVE2xvZ2RfbmV3X3R5cGVzY3JpcHQAVRNzcndxX25ld190eXBlc2NyaXB0AFUTc3d3cV9uZXdfdHlwZXNjcmlwdABVEnRyb19uZXdfdHlwZXNjcmlwdABVE2VkMTlfbmV3X3R5cGVzY3JpcHQAVRJzbW9fbmV3X3R5cGVzY3JpcHQAVRJsZGNfbmV3X3R5cGVzY3JpcHQAVRNqbmVmX25ld190eXBlc2NyaXB0AFUTd2RtZF9uZXdfdHlwZXNjcmlwdABVE3dxbWRfbmV3X3R5cGVzY3JpcHQAVRN3ZGFtX25ld190eXBlc2NyaXB0AFUTd3FhbV9uZXdfdHlwZXNjcmlwdABVE3dkbW1fbmV3X3R5cGVzY3JpcHQAVRN3cW1tX25ld190eXBlc2NyaXB0AFUTZWNhbF9uZXdfdHlwZXNjcmlwdABVE2NhbGxfbmV3X3R5cGVzY3JpcHQAVRNlY29wX25ld190eXBlc2NyaXB0AFUTZXBhcl9uZXdfdHlwZXNjcmlwdABVE19fd2JnX21hdGhhcmdzX2ZyZWUAEB9fX3diZ19zZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAEseX193Ymdfc2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAEsfX193YmdfZ2V0X21hdGhhcmdzX2luZGlyZWN0X3JocwBJHl9fd2JnX2dldF9tdWxhcmdzX2luZGlyZWN0X2xocwBJEnJldF9uZXdfdHlwZXNjcmlwdABgE2JoZWlfbmV3X3R5cGVzY3JpcHQAYBFjYl9uZXdfdHlwZXNjcmlwdABgE3J2cnRfbmV3X3R5cGVzY3JpcHQAYBNmbGFnX25ld190eXBlc2NyaXB0AGASam1wX25ld190eXBlc2NyaXB0AGASY2ZlX25ld190eXBlc2NyaXB0AGASY2ZzX25ld190eXBlc2NyaXB0AGAPX193Ymdfam1wZl9mcmVlABgPX193Ymdfc3ViaV9mcmVlABgNX193YmdfamlfZnJlZQAYD19fd2JnX2VjYWxfZnJlZQAYD19fd2JnX3BvcGxfZnJlZQAYDl9fd2JnX2xkY19mcmVlABgPX193Ymdfd2RtbF9mcmVlABgNX193YmdfbHdfZnJlZQAYD19fd2JnX3dxbWxfZnJlZQAYD19fd2JnX2V4cGlfZnJlZQAYD19fd2JnX2puZWZfZnJlZQAYDl9fd2JnX3Nyd19mcmVlABgPX193YmdfYmxkZF9mcmVlABgOX193YmdfbWNwX2ZyZWUAGA9fX3diZ193ZG9wX2ZyZWUAGA9fX3diZ190aW1lX2ZyZWUAGA9fX3diZ19zcndxX2ZyZWUAGA5fX3diZ19jZmVfZnJlZQAYDV9fd2JnX2x0X2ZyZWUAGA9fX3diZ19ydnJ0X2ZyZWUAGA9fX3diZ19kaXZpX2ZyZWUAGA9fX3diZ19tbGR2X2ZyZWUAGA1fX3diZ19sYl9mcmVlABgNX193YmdfY2JfZnJlZQAYDl9fd2JnX2xvZ19mcmVlABgOX193YmdfbWNsX2ZyZWUAGA9fX3diZ193cW1tX2ZyZWUAGA9fX3diZ19zd3dxX2ZyZWUAGA9fX3diZ19idXJuX2ZyZWUAGA5fX3diZ194b3JfZnJlZQAYDl9fd2JnX2V4cF9mcmVlABgPX193Ymdfd3FvcF9mcmVlABgPX193YmdfczI1Nl9mcmVlABgPX193Ymdfd2RhbV9mcmVlABgPX193Ymdfam5lYl9mcmVlABgPX193YmdfbW92aV9mcmVlABgOX193Ymdfam1wX2ZyZWUAGA5fX3diZ19zbW9fZnJlZQAYD19fd2JnX2Joc2hfZnJlZQAYD19fd2JnX211bGlfZnJlZQAYD19fd2JnX21vZGlfZnJlZQAYDl9fd2JnX3Ryb19mcmVlABgPX193Ymdfc2N3cV9mcmVlABgPX193Ymdfd3FjbV9mcmVlABgPX193Ymdfd3FtZF9mcmVlABgPX193YmdfZWNyMV9mcmVlABgNX193Ymdfc3dfZnJlZQAYD19fd2JnX2xvZ2RfZnJlZQAYD19fd2JnX21pbnRfZnJlZQAYD19fd2JnX3dkbWRfZnJlZQAYD19fd2JnX3hvcmlfZnJlZQAYD19fd2JnX2FuZGlfZnJlZQAYD19fd2JnX3NybGlfZnJlZQAYD19fd2JnX2NhbGxfZnJlZQAYD19fd2JnX21vdmVfZnJlZQAYDV9fd2JnX2VxX2ZyZWUAGA9fX3diZ19qbmVpX2ZyZWUAGA9fX3diZ19lZDE5X2ZyZWUAGA9fX3diZ19wc2hoX2ZyZWUAGA5fX3diZ19zbGxfZnJlZQAYD19fd2JnX2FkZGlfZnJlZQAYD19fd2JnX2puemJfZnJlZQAYDl9fd2JnX3N3d19mcmVlABgOX193YmdfY2NwX2ZyZWUAGA9fX3diZ19qbXBiX2ZyZWUAGA9fX3diZ19tbG9nX2ZyZWUAGA9fX3diZ19tY3BpX2ZyZWUAGA1fX3diZ19ndF9mcmVlABgPX193YmdfYnNpel9mcmVlABgPX193Ymdfam56aV9mcmVlABgOX193Ymdfc3ViX2ZyZWUAGA5fX3diZ19kaXZfZnJlZQAYDl9fd2JnX2puZV9mcmVlABgOX193YmdfcmV0X2ZyZWUAGA9fX3diZ19lY29wX2ZyZWUAGA9fX3diZ19yZXRkX2ZyZWUAGA1fX3diZ19vcl9mcmVlABgPX193YmdfY2ZzaV9mcmVlABgPX193YmdfcG9waF9mcmVlABgOX193YmdfYmFsX2ZyZWUAGA9fX3diZ193ZGR2X2ZyZWUAGA9fX3diZ19tcm9vX2ZyZWUAGA9fX3diZ19rMjU2X2ZyZWUAGA1fX3diZ190cl9mcmVlABgOX193YmdfY2ZzX2ZyZWUAGA9fX3diZ193cWFtX2ZyZWUAGA1fX3diZ19zYl9mcmVlABgOX193YmdfZ3RmX2ZyZWUAGA9fX3diZ19qbnpmX2ZyZWUAGA9fX3diZ19mbGFnX2ZyZWUAGA5fX3diZ19tZXFfZnJlZQAYD19fd2JnX2VwYXJfZnJlZQAYD19fd2JnX21jbGlfZnJlZQAYD19fd2JnX3dkY21fZnJlZQAYD19fd2JnX2NmZWlfZnJlZQAYD19fd2JnX2Fsb2NfZnJlZQAYDV9fd2JnX2dtX2ZyZWUAGA9fX3diZ193cWR2X2ZyZWUAGA5fX3diZ19zcmxfZnJlZQAYDl9fd2JnX25vdF9mcmVlABgPX193YmdfY3Npel9mcmVlABgOX193YmdfbW9kX2ZyZWUAGA9fX3diZ193ZG1tX2ZyZWUAGA9fX3diZ19zbGxpX2ZyZWUAGA9fX3diZ19iaGVpX2ZyZWUAGA9fX3diZ19lY2sxX2ZyZWUAGA9fX3diZ19wc2hsX2ZyZWUAGA9fX3diZ19jcm9vX2ZyZWUAGA5fX3diZ19tdWxfZnJlZQAYDl9fd2JnX2FuZF9mcmVlABgOX193Ymdfb3JpX2ZyZWUAGBN3cWR2X25ld190eXBlc2NyaXB0AMwBE3dxbWxfbmV3X3R5cGVzY3JpcHQAzAETd2RtbF9uZXdfdHlwZXNjcmlwdADMARN3cW9wX25ld190eXBlc2NyaXB0AMwBE3dkb3BfbmV3X3R5cGVzY3JpcHQAzAETd3FjbV9uZXdfdHlwZXNjcmlwdADMARN3ZGR2X25ld190eXBlc2NyaXB0AMwBDndxY21fZnJvbV9hcmdzADsKd3Fkdl9pbW0wNgA2CndxbWxfaW1tMDYANgp3ZG1sX2ltbTA2ADYKd3FvcF9pbW0wNgA2Cndkb3BfaW1tMDYANgp3cWNtX2ltbTA2ADYKd2Rkdl9pbW0wNgA2CndkY21faW1tMDYANgpqbmVmX2ltbTA2ADYJbGRjX2ltbTA2ADYOd3Fkdl9mcm9tX2FyZ3MAywEOd3FvcF9mcm9tX2FyZ3MAOwVnbV9yYQA1BWd0X3JjABoFZ3RfcmIAEgVndF9yYQA1BWxiX3JiABIFbGJfcmEANQVsdF9yYwAaBWx0X3JiABIFbHRfcmEANQhsd19pbW0xMgAJBWx3X3JiABIFbHdfcmEANQVvcl9yYwAaBW9yX3JiABIFb3JfcmEANQhzYl9pbW0xMgAJBXNiX3JiABIFc2JfcmEANQhzd19pbW0xMgAJBXN3X3JiABIFc3dfcmEANQV0cl9yYwAaBXRyX3JiABIFdHJfcmEANQVlcV9yYwAaBWVxX3JiABIFZXFfcmEANQZhbmRfcmMAGgZhbmRfcmIAEgZhbmRfcmEANQZiYWxfcmMAGgZiYWxfcmIAEgZiYWxfcmEANQZjY3BfcmMAGgZjY3BfcmIAEgZjY3BfcmEANQZkaXZfcmMAGgZkaXZfcmIAEgZkaXZfcmEANQZleHBfcmMAGgZleHBfcmIAEgZleHBfcmEANQhsYl9pbW0xMgAJBmd0Zl9yYgASBmd0Zl9yYQA1BmpuZV9yYwAaBmpuZV9yYgASBmpuZV9yYQA1BmxkY19yYwAaBmxkY19yYgASBmxkY19yYQA1BmxvZ19yZAA2BmxvZ19yYwAaBmxvZ19yYgASBmxvZ19yYQA1Bm1jbF9yYgASBm1jbF9yYQA1Bm1jcF9yYwAaBm1jcF9yYgASBm1jcF9yYQA1Bm1lcV9yZAA2Bm1lcV9yYwAaBm1lcV9yYgASBm1lcV9yYQA1Bm1vZF9yYwAaBm1vZF9yYgASBm1vZF9yYQA1Bm11bF9yYwAaBm11bF9yYgASBm11bF9yYQA1Bm5vdF9yYgASBm5vdF9yYQA1CW9yaV9pbW0xMgAJBm9yaV9yYgASBm9yaV9yYQA1BnNsbF9yYwAaBnNsbF9yYgASBnNsbF9yYQA1BnNtb19yZAA2BnNtb19yYwAaBnNtb19yYgASBnNtb19yYQA1BnNybF9yYwAaBnNybF9yYgASBnNybF9yYQA1BnNyd19yYwAaBnNyd19yYgASBnNyd19yYQA1BnN1Yl9yYwAaBnN1Yl9yYgASBnN1Yl9yYQA1BnN3d19yYwAaBnN3d19yYgASBnN3d19yYQA1BnRyb19yZAA2BnRyb19yYwAaBnRyb19yYgASBnRyb19yYQA1Bnhvcl9yYwAaBnhvcl9yYgASBnhvcl9yYQA1CWd0Zl9pbW0xMgAJB2FkZGlfcmIAEgdhZGRpX3JhADUKYW5kaV9pbW0xMgAJB2FuZGlfcmIAEgdhbmRpX3JhADUHYmhzaF9yYgASB2Joc2hfcmEANQZjY3BfcmQANgdibGRkX3JjABoHYmxkZF9yYgASB2JsZGRfcmEANQdic2l6X3JiABIHYnNpel9yYQA1B2J1cm5fcmIAEgdidXJuX3JhADUHY2FsbF9yZAA2B2NhbGxfcmMAGgdjYWxsX3JiABIHY2FsbF9yYQA1B2Nyb29fcmIAEgdjcm9vX3JhADUHY3Npel9yYgASB2NzaXpfcmEANQpkaXZpX2ltbTEyAAkHZGl2aV9yYgASB2RpdmlfcmEANQdlY2FsX3JkADYHZWNhbF9yYwAaB2VjYWxfcmIAEgdlY2FsX3JhADUHZWNrMV9yYwAaB2VjazFfcmIAEgdlY2sxX3JhADUHZWNvcF9yZAA2B2Vjb3BfcmMAGgdlY29wX3JiABIHZWNvcF9yYQA1B2VjcjFfcmMAGgdlY3IxX3JiABIHZWNyMV9yYQA1B2VkMTlfcmQANgdlZDE5X3JjABoHZWQxOV9yYgASB2VkMTlfcmEANQdlcGFyX3JkADYHZXBhcl9yYwAaB2VwYXJfcmIAEgdlcGFyX3JhADUKZXhwaV9pbW0xMgAJB2V4cGlfcmIAEgdleHBpX3JhADUKam1wYl9pbW0xOAANB2ptcGJfcmEANQpqbXBmX2ltbTE4AA0Ham1wZl9yYQA1B2puZWJfcmMAGgdqbmViX3JiABIHam5lYl9yYQA1B2puZWZfcmMAGgdqbmVmX3JiABIHam5lZl9yYQA1CmpuZWlfaW1tMTIACQdqbmVpX3JiABIHam5laV9yYQA1CmpuemJfaW1tMTIACQdqbnpiX3JiABIHam56Yl9yYQA1CmpuemZfaW1tMTIACQdqbnpmX3JiABIHam56Zl9yYQA1CmpuemlfaW1tMTgADQdqbnppX3JhADUHazI1Nl9yYwAaB2syNTZfcmIAEgdrMjU2X3JhADUHbG9nZF9yZAA2B2xvZ2RfcmMAGgdsb2dkX3JiABIHbG9nZF9yYQA1Cm1jbGlfaW1tMTgADQdtY2xpX3JhADUKbWNwaV9pbW0xMgAJB21jcGlfcmIAEgdtY3BpX3JhADUHbWludF9yYgASB21pbnRfcmEANQdtbGR2X3JkADYHbWxkdl9yYwAaB21sZHZfcmIAEgdtbGR2X3JhADUHbWxvZ19yYwAaB21sb2dfcmIAEgdtbG9nX3JhADUKbW9kaV9pbW0xMgAJB21vZGlfcmIAEgdtb2RpX3JhADUHbW92ZV9yYgASB21vdmVfcmEANQptb3ZpX2ltbTE4AA0HbW92aV9yYQA1B21yb29fcmMAGgdtcm9vX3JiABIHbXJvb19yYQA1Cm11bGlfaW1tMTIACQdtdWxpX3JiABIHbXVsaV9yYQA1B3JldGRfcmIAEgdyZXRkX3JhADUHczI1Nl9yYwAaB3MyNTZfcmIAEgdzMjU2X3JhADUHc2N3cV9yYwAaB3Njd3FfcmIAEgdzY3dxX3JhADUKc2xsaV9pbW0xMgAJB3NsbGlfcmIAEgdzbGxpX3JhADUKc3JsaV9pbW0xMgAJB3NybGlfcmIAEgdzcmxpX3JhADUHc3J3cV9yZAA2B3Nyd3FfcmMAGgdzcndxX3JiABIHc3J3cV9yYQA1CnN1YmlfaW1tMTIACQdzdWJpX3JiABIHc3ViaV9yYQA1B3N3d3FfcmQANgdzd3dxX3JjABoHc3d3cV9yYgASB3N3d3FfcmEANQd0aW1lX3JiABIHdGltZV9yYQA1B3dkYW1fcmQANgd3ZGFtX3JjABoHd2RhbV9yYgASB3dkYW1fcmEANQd3ZGNtX3JjABoHd2RjbV9yYgASB3dkY21fcmEANQd3ZGR2X3JjABoHd2Rkdl9yYgASB3dkZHZfcmEANQd3ZG1kX3JkADYHd2RtZF9yYwAaB3dkbWRfcmIAEgd3ZG1kX3JhADUHd2RtbF9yYwAaB3dkbWxfcmIAEgd3ZG1sX3JhADUHd2RtbV9yZAA2B3dkbW1fcmMAGgd3ZG1tX3JiABIHd2RtbV9yYQA1B3dkb3BfcmMAGgd3ZG9wX3JiABIHd2RvcF9yYQA1B3dxYW1fcmQANgd3cWFtX3Jj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AAssAQF/QRBBBBDIASIBQoGAgIAQNwIAIAEgAK1C////B4NCIIY3AgggAUEIagskACAAENIBIAAoAgAEQBDZAQALIABBADYCACAAIAFBAEc6AAQLKAAgAxAWIQMgABDJASABEMkBIAIQyQEgAxDQAUEIdEHkAHIQ0wEQZwsoACADEBYhAyAAEMkBIAEQyQEgAhDJASADENABQQh0QeUAchDTARBnCyAAIABBAWsiAEEFTQRAIABBAWoPC0HggsAAQRkQ2gEACykBAX9BEEEEEMgBIgEgADYCDCABQQA2AgggAUKBgICAEDcCACABQQhqCykBAX9BEEEEEMgBIgEgADoADCABQQA2AgggAUKBgICAEDcCACABQQhqCyIAIAIQAiECIAAQyQEgARDJASACEEdBCHRBygByENMBEGcLDwAgACABIAIgA0ESEPMBCw8AIAAgASACIANBGBDzAQsPACAAIAEgAiADQRwQ8wELDwAgACABIAIgA0EdEPMBCw8AIAAgASACIANBIRD0AQsPACAAIAEgAiADQSIQ8wELDwAgACABIAIgA0EjEPMBCw8AIAAgASACIANBKBDzAQsPACAAIAEgAiADQSoQ8wELDwAgACABIAIgA0EsEPMBCw8AIAAgASACIANBLxDzAQsPACAAIAEgAiADQTgQ8wELEAAgACABIAIgA0HTABD0AQsQACAAIAEgAiADQdQAEPQBCxAAIAAgASACIANB3gAQ9AELEAAgACABIAIgA0HfABD0AQsQACAAIAEgAiADQeAAEPQBCxAAIAAgASACIANB4QAQ9AELEAAgACABIAIgA0HiABD0AQsQACAAIAEgAiADQeMAEPQBCxAAIAAgASACIANB5AAQ9AELEAAgACABIAIgA0HlABD0AQsQACAAIAEgAiADQeYAEPMBCxAAIAAgASACIANB5wAQ8wELEAAgACABIAIgA0HoABDzAQsQACAAIAEgAiADQekAEPMBCxAAIAAgASACIANB6gAQ8wELEAAgACABIAIgA0HrABDzAQsQACAAIAEgAiADQewAEPMBCxAAIAAgASACIANB7gAQ8wELEAAgACABIAIgA0HvABDzAQsQACAAIAEgAiADQfAAEPMBCx4AIAEQZiEBIAAQyQEgARDGAUEIdEHMAHIQ0wEQZwsZACAAIAEgAkEgQQAgBBtBEEEAIAMbchAhCw0AIAAgASACQQEQ9QELDQAgACABIAJBAhD1AQsNACAAIAEgAkEDEPUBCw0AIAAgASACQQQQ9QELDQAgACABIAJBBRD1AQsNACAAIAEgAkEGEPUBCw0AIAAgASACQQcQ9QELDQAgACABIAJBCBD1AQsNACAAIAEgAkEJEPUBCw0AIAAgASACQQsQ9QELDQAgACABIAJBDRD1AQsNACAAIAEgAkEOEPUBCw0AIAAgASACQQ8Q9QELDQAgACABIAJBEBD1AQsNACAAIAEgAkEREPUBCw0AIAAgASACQRcQ9QELDQAgACABIAJBJhD1AQsNACAAIAEgAkEnEPUBCw0AIAAgASACQSkQ9QELDQAgACABIAJBKxD1AQsNACAAIAEgAkEtEPUBCw0AIAAgASACQS4Q9QELDQAgACABIAJBMBD1AQsNACAAIAEgAkExEPUBCw0AIAAgASACQTUQ9QELDQAgACABIAJBNxD1AQsNACAAIAEgAkE5EPYBCw0AIAAgASACQToQ9gELDQAgACABIAJBOxD2AQsNACAAIAEgAkE8EPYBCw0AIAAgASACQT0Q9gELDQAgACABIAJBPhD2AQsNACAAIAEgAkE/EPYBCw4AIAAgASACQcAAEPYBCw4AIAAgASACQcEAEPYBCw4AIAAgASACQcIAEPYBCw4AIAAgASACQcMAEPYBCw4AIAAgASACQcQAEPYBCw4AIAAgASACQcUAEPYBCw4AIAAgASACQcYAEPYBCw4AIAAgASACQccAEPYBCw4AIAAgASACQcgAEPYBCw4AIAAgASACQckAEPYBCw4AIAAgASACQcoAEPYBCw4AIAAgASACQdEAEPYBCw4AIAAgASACQdIAEPYBCxcBAX8gAEH/AXFBP00EfyAAEGgFQQALCxsAIAAQ0gEgACgCAEF/RgRAENkBAAsgAC0ABAsJACAAQRMQ9wELCQAgAEEVEPcBCwkAIABBGhD3AQsJACAAQSAQ9wELCQAgAEElEPcBCyIBAX9BEEEEEMgBIgBCADcCCCAAQoGAgIAQNwIAIABBCGoLCQAgAEE0EPcBCwkAIABBNhD3AQsKACAAQdgAEPcBCwoAIABB2QAQ9wELFwAgAUEQdEGAgPwDcSAAQQJ0QfwBcXILGwAgABDJASABEMkBIAIQyQEQOkEIdBDTARBnCxIAIAEgABDVASIABEAgAA8LAAt1AQF/IABB/wFxQcAATwRAIwBBEGsiASQAIAFBIjYCDCABQYCAwAA2AggjAEEgayIAJAAgAEEBNgIEIABB/IbAADYCACAAQgE3AgwgACABQQhqrUKAgICAwACENwMYIAAgAEEYajYCCCAAQbiAwAAQVwALIAALFAAgACABIAJBIEEAIAMbIARyECELFwAgABAbIAEQGyACEBsgAxAWENABEGILFgAgABAbIAEQGyACEBsgAxAbECEQYgsTACAAIAAoAgBBAWs2AgAgARBeCxMAIAAgACgCAEEBazYCACABEF8LEgAgABAbIAEQGyACEAIQRxBiCxEAIAAgASACQSBBACADGxAhCxIAIAAQGyABEBsgAhAdEEcQYgsTACAABEAPC0HcisAAQRsQ2gEACxQBAX9BBEEBEMgBIgEgADYAACABCw0AIAEEQCAAIAEQGQsLgQMBBX9BmY/AAC0AABoCfyAAQQlPBEACQEHN/3tBECAAIABBEE0bIgBrIAFNDQAgAEEQIAFBC2pBeHEgAUELSRsiBGpBDGoQASICRQ0AIAJBCGshAQJAIABBAWsiAyACcUUEQCABIQAMAQsgAkEEayIFKAIAIgZBeHEgAiADakEAIABrcUEIayICIABBACACIAFrQRBNG2oiACABayICayEDIAZBA3EEQCAAIAMgACgCBEEBcXJBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSACIAUoAgBBAXFyQQJyNgIAIAEgAmoiAyADKAIEQQFyNgIEIAEgAhADDAELIAEoAgAhASAAIAM2AgQgACABIAJqNgIACwJAIAAoAgQiAUEDcUUNACABQXhxIgIgBEEQak0NACAAIAQgAUEBcXJBAnI2AgQgACAEaiIBIAIgBGsiBEEDcjYCBCAAIAJqIgIgAigCBEEBcjYCBCABIAQQAwsgAEEIaiEDCyADDAELIAEQAQsLDQAgABDeAUEKdkE/cQsPACAAEBsgARBmEMYBEGILCwAgACMAaiQAIwALDgBB94rAAEHPABDaAQALCQAgACABEAAACwkAIABBP3EQaAsKACAAEBtB/wFxCwgAIABBBBAZCwcAIABBCHQLCQBBMxDTARBnCwYAQQsQaAsGAEEKEGgLBgBBCBBoCwYAQQ8QaAsGAEEGEGgLBgBBCRBoCwYAQQcQ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", imports);
17020
+ return _loadWasmModule(1, null, "AGFzbQEAAAABRwxgA39/fwF/YAF/AX9gBH9/f38Bf2ACf38Bf2ACf38AYAABf2ABfwBgBX9/f39/AX9gA39/fwBgAn5/AX9gBH9/f38AYAAAAhgBA3diZxBfX3diaW5kZ2VuX3Rocm93AAQDigKIAgEDCQEEBAQEBAEEAQQEAQMKAQEEAQQBAQEDAQQEAQEEAQEEAgEBBAICAgICAgQEBAMDAwMDAwMDAgEBBAQABAICAwAAAwMDAwMDAwMDAwABAQQEBAEBAQEBAQECAQYBAQEEBgYBAQEEBAICAQUAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEDAAEHAgIGBAQAAgAGCAMBAwELAwMDBAEBBAYBBQQFBQUFBQUFBQUFBQUFBQUFBQUEBwcCAgMCBwcAAAgAAwQFAXABCAgFAwEAEQYJAX8BQYCAwAALB8FN3QUGbWVtb3J5AgAWX193YmdfY29tcGFyZWFyZ3NfZnJlZQAUGl9fd2JnX2dldF9jb21wYXJlYXJnc19tb2RlAFAaX193Ymdfc2V0X2NvbXBhcmVhcmdzX21vZGUAPCJfX3diZ19nZXRfY29tcGFyZWFyZ3NfaW5kaXJlY3RfcmhzAFEiX193Ymdfc2V0X2NvbXBhcmVhcmdzX2luZGlyZWN0X3JocwBTEmNvbXBhcmVhcmdzX3RvX2ltbQBfFGNvbXBhcmVhcmdzX2Zyb21faW1tABUVX193YmdfZ2V0X21hdGhhcmdzX29wAFAVX193Ymdfc2V0X21hdGhhcmdzX29wAD0SX193YmdfbXVsYXJnc19mcmVlABYeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfcmhzAFAeX193Ymdfc2V0X211bGFyZ3NfaW5kaXJlY3RfcmhzAFQSX193YmdfZGl2YXJnc19mcmVlACceX193YmdfZ2V0X2RpdmFyZ3NfaW5kaXJlY3RfcmhzAMABHl9fd2JnX3NldF9kaXZhcmdzX2luZGlyZWN0X3JocwBpG19fd2JnX3BhbmljaW5zdHJ1Y3Rpb25fZnJlZQAcIXBhbmljaW5zdHJ1Y3Rpb25fZXJyb3JfdHlwZXNjcmlwdABCF3BhbmljaW5zdHJ1Y3Rpb25fcmVhc29uAGAccGFuaWNpbnN0cnVjdGlvbl9pbnN0cnVjdGlvbgBhDGdtX2Zyb21fYXJncwDbAQ1ndGZfZnJvbV9hcmdzANQBB2dtX2FyZ3MAjwEIZ3RmX2FyZ3MAbg53ZGNtX2Zyb21fYXJncwBADndkb3BfZnJvbV9hcmdzAEAOd2RtbF9mcm9tX2FyZ3MAQQ53ZGR2X2Zyb21fYXJncwDPAQl3ZGNtX2FyZ3MAKAl3cWNtX2FyZ3MAKQl3ZG9wX2FyZ3MAKgl3cW9wX2FyZ3MAKwl3ZG1sX2FyZ3MALAl3cW1sX2FyZ3MALQl3ZGR2X2FyZ3MAagl3cWR2X2FyZ3MAaxBfX3diZ19pbW0wNl9mcmVlAC4QX193YmdfaW1tMTJfZnJlZQAvEF9fd2JnX2ltbTE4X2ZyZWUAMA5fX3diZ19hZGRfZnJlZQAdD19fd2JnX25vb3BfZnJlZQAJEmFkZF9uZXdfdHlwZXNjcmlwdABDBmFkZF9yYQA6BmFkZF9yYgAXBmFkZF9yYwAeA2FkZADMAQNhbmQAkQEDZGl2AJIBAmVxAJMBA2V4cACUAQJndACVAQJsdACWAQRtbG9nAJcBBG1yb28AmAEEbW9kXwCZAQVtb3ZlXwBFA211bACaAQNub3QARgJvcgCbAQNzbGwAnAEDc3JsAJ0BA3N1YgCeAQN4b3IAnwEEbWxkdgBvA3JldADBAQRyZXRkAEcTYWxvY19uZXdfdHlwZXNjcmlwdABdB2Fsb2NfcmEAJQRhbG9jAMIBA21jbABIA21jcACgAQNtZXEAcBNiaHNoX25ld190eXBlc2NyaXB0ABoEYmhzaAAxBGJoZWkAwwEEYnVybgBJBGNhbGwAcQNjY3AAcgRjcm9vAEoEY3NpegBLAmNiAMQBA2xkYwBzA2xvZwB0BGxvZ2QAdQRtaW50AEwEcnZydADFAQRzY3dxAKEBA3NydwCiAQRzcndxAHYDc3d3AKMBBHN3d3EAdwJ0cgCkAQN0cm8AeARlY2sxAKUBBGVjcjEApgEEZWQxOQB5BGsyNTYApwEEczI1NgCoAQR0aW1lAE0Tbm9vcF9uZXdfdHlwZXNjcmlwdABtBG5vb3AA5wEEZmxhZwDGAQNiYWwAqQEDam1wAMcBA2puZQCqAQNzbW8AehNhZGRpX25ld190eXBlc2NyaXB0AEQKYWRkaV9pbW0xMgAKBGFkZGkAqwEEYW5kaQCsAQRkaXZpAK0BBGV4cGkArgEEbW9kaQCvAQRtdWxpALABA29yaQCxAQRzbGxpALIBBHNybGkAswEEc3ViaQC0AQR4b3JpALUBBGpuZWkAtgECbGIAtwECbHcAuAECc2IAuQECc3cAugEEbWNwaQC7ARJndGZfbmV3X3R5cGVzY3JpcHQA1gEDZ3RmALwBBG1jbGkAMhFnbV9uZXdfdHlwZXNjcmlwdABOCGdtX2ltbTE4AA8CZ20AMwRtb3ZpADQEam56aQA1BGptcGYANhNqbXBiX25ld190eXBlc2NyaXB0ABAEam1wYgA3BGpuemYAvQEEam56YgC+AQRqbmVmAHsKam5lYl9pbW0wNgA7BGpuZWIAfAJqaQBVE2NmZWlfbmV3X3R5cGVzY3JpcHQAJgpjZmVpX2ltbTI0AAwEY2ZlaQBWBGNmc2kAVwNjZmUAyAEDY2ZzAMkBBHBzaGwAWARwc2hoAFkEcG9wbABaBHBvcGgAWxN3ZGNtX25ld190eXBlc2NyaXB0ANABBHdkY20AfQR3cWNtAH4Ed2RvcAB/BHdxb3AAgAEEd2RtbACBAQR3cW1sAIIBBHdkZHYAgwEEd3FkdgCEAQR3ZG1kAIUBBHdxbWQAhgEEd2RhbQCHAQR3cWFtAIgBBHdkbW0AiQEEd3FtbQCKAQRlY2FsAIsBBGJzaXoAOBNibGRkX25ld190eXBlc2NyaXB0ADkHYmxkZF9yZAA7BGJsZGQAjAEEZWNvcACNAQRlcGFyAI4BFl9fd2JnX2luc3RydWN0aW9uX2ZyZWUADhRpbnN0cnVjdGlvbl90b19ieXRlcwAIEGluc3RydWN0aW9uX3NpemUA+gERcmVnaWRfbmV3X2NoZWNrZWQAvwEJcmVnaWRfYmFsAOkBCnJlZ2lkX2NnYXMA6gEJcmVnaWRfZXJyAOsBCnJlZ2lkX2ZsYWcA7AEIcmVnaWRfZnAA7QEKcmVnaWRfZ2dhcwDuAQhyZWdpZF9ocADvAQhyZWdpZF9pcwDwAQhyZWdpZF9vZgDxAQlyZWdpZF9vbmUA8gEIcmVnaWRfcGMA8wEJcmVnaWRfcmV0APQBCnJlZ2lkX3JldGwA9QEIcmVnaWRfc3AA9gEJcmVnaWRfc3BwAPcBDnJlZ2lkX3dyaXRhYmxlAPgBCnJlZ2lkX3plcm8A+QEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA4gELcmVnaWRfdG9fdTgA4wESYW5kX25ld190eXBlc2NyaXB0AEMSZGl2X25ld190eXBlc2NyaXB0AEMRZXFfbmV3X3R5cGVzY3JpcHQAQxJleHBfbmV3X3R5cGVzY3JpcHQAQxFndF9uZXdfdHlwZXNjcmlwdABDEWx0X25ld190eXBlc2NyaXB0AEMTbWxvZ19uZXdfdHlwZXNjcmlwdABDE21yb29fbmV3X3R5cGVzY3JpcHQAQxJtb2RfbmV3X3R5cGVzY3JpcHQAQxJtdWxfbmV3X3R5cGVzY3JpcHQAQxFvcl9uZXdfdHlwZXNjcmlwdABDEnNsbF9uZXdfdHlwZXNjcmlwdABDEnNybF9uZXdfdHlwZXNjcmlwdABDEnN1Yl9uZXdfdHlwZXNjcmlwdABDEnhvcl9uZXdfdHlwZXNjcmlwdABDEm1jcF9uZXdfdHlwZXNjcmlwdABDE3Njd3FfbmV3X3R5cGVzY3JpcHQAQxJzcndfbmV3X3R5cGVzY3JpcHQAQxJzd3dfbmV3X3R5cGVzY3JpcHQAQxF0cl9uZXdfdHlwZXNjcmlwdABDE2VjazFfbmV3X3R5cGVzY3JpcHQAQxNlY3IxX25ld190eXBlc2NyaXB0AEMTazI1Nl9uZXdfdHlwZXNjcmlwdABDE3MyNTZfbmV3X3R5cGVzY3JpcHQAQxJiYWxfbmV3X3R5cGVzY3JpcHQAQxJqbmVfbmV3X3R5cGVzY3JpcHQAQxNhbmRpX25ld190eXBlc2NyaXB0AEQTZGl2aV9uZXdfdHlwZXNjcmlwdABEE2V4cGlfbmV3X3R5cGVzY3JpcHQARBNtb2RpX25ld190eXBlc2NyaXB0AEQTbXVsaV9uZXdfdHlwZXNjcmlwdABEEm9yaV9uZXdfdHlwZXNjcmlwdABEE3NsbGlfbmV3X3R5cGVzY3JpcHQARBNzcmxpX25ld190eXBlc2NyaXB0AEQTc3ViaV9uZXdfdHlwZXNjcmlwdABEE3hvcmlfbmV3X3R5cGVzY3JpcHQARBNqbmVpX25ld190eXBlc2NyaXB0AEQRbGJfbmV3X3R5cGVzY3JpcHQARBFsd19uZXdfdHlwZXNjcmlwdABEEXNiX25ld190eXBlc2NyaXB0AEQRc3dfbmV3X3R5cGVzY3JpcHQARBNtY3BpX25ld190eXBlc2NyaXB0AEQTam56Zl9uZXdfdHlwZXNjcmlwdABEE2puemJfbmV3X3R5cGVzY3JpcHQARBFqaV9uZXdfdHlwZXNjcmlwdAAmE2Nmc2lfbmV3X3R5cGVzY3JpcHQAJhNwc2hsX25ld190eXBlc2NyaXB0ACYTcHNoaF9uZXdfdHlwZXNjcmlwdAAmE3BvcGxfbmV3X3R5cGVzY3JpcHQAJhNwb3BoX25ld190eXBlc2NyaXB0ACYSbm90X25ld190eXBlc2NyaXB0ABoTcmV0ZF9uZXdfdHlwZXNjcmlwdAAaE21vdmVfbmV3X3R5cGVzY3JpcHQAGhJtY2xfbmV3X3R5cGVzY3JpcHQAGhNidXJuX25ld190eXBlc2NyaXB0ABoTY3Jvb19uZXdfdHlwZXNjcmlwdAAaE2NzaXpfbmV3X3R5cGVzY3JpcHQAGhNtaW50X25ld190eXBlc2NyaXB0ABoTdGltZV9uZXdfdHlwZXNjcmlwdAAaE2JzaXpfbmV3X3R5cGVzY3JpcHQAGhJyZXRfbmV3X3R5cGVzY3JpcHQAXRNiaGVpX25ld190eXBlc2NyaXB0AF0RY2JfbmV3X3R5cGVzY3JpcHQAXRNydnJ0X25ld190eXBlc2NyaXB0AF0TZmxhZ19uZXdfdHlwZXNjcmlwdABdEmptcF9uZXdfdHlwZXNjcmlwdABdEmNmZV9uZXdfdHlwZXNjcmlwdABdEmNmc19uZXdfdHlwZXNjcmlwdABdE21sZHZfbmV3X3R5cGVzY3JpcHQAORJtZXFfbmV3X3R5cGVzY3JpcHQAORJjY3BfbmV3X3R5cGVzY3JpcHQAORJsb2dfbmV3X3R5cGVzY3JpcHQAORNsb2dkX25ld190eXBlc2NyaXB0ADkTc3J3cV9uZXdfdHlwZXNjcmlwdAA5E3N3d3FfbmV3X3R5cGVzY3JpcHQAORJ0cm9fbmV3X3R5cGVzY3JpcHQAORNlZDE5X25ld190eXBlc2NyaXB0ADkSc21vX25ld190eXBlc2NyaXB0ADkSbGRjX25ld190eXBlc2NyaXB0ADkTam5lZl9uZXdfdHlwZXNjcmlwdAA5E3dkbWRfbmV3X3R5cGVzY3JpcHQAORN3cW1kX25ld190eXBlc2NyaXB0ADkTd2RhbV9uZXdfdHlwZXNjcmlwdAA5E3dxYW1fbmV3X3R5cGVzY3JpcHQAORN3ZG1tX25ld190eXBlc2NyaXB0ADkTd3FtbV9uZXdfdHlwZXNjcmlwdAA5E2VjYWxfbmV3X3R5cGVzY3JpcHQAORNjYWxsX25ld190eXBlc2NyaXB0ADkTZWNvcF9uZXdfdHlwZXNjcmlwdAA5E2VwYXJfbmV3X3R5cGVzY3JpcHQAOQZyZXRfcmEAJQdiaGVpX3JhACUFY2JfcmEAJQdydnJ0X3JhACUHZmxhZ19yYQAlBmptcF9yYQAlCGppX2ltbTI0AAwKY2ZzaV9pbW0yNAAMBmNmZV9yYQAlBmNmc19yYQAlCnBzaGxfaW1tMjQADApwc2hoX2ltbTI0AAwKcG9wbF9pbW0yNAAMCnBvcGhfaW1tMjQADBNtb3ZpX25ld190eXBlc2NyaXB0ABATbWNsaV9uZXdfdHlwZXNjcmlwdAAQE2puemlfbmV3X3R5cGVzY3JpcHQAEBNqbXBmX25ld190eXBlc2NyaXB0ABATX193YmdfbWF0aGFyZ3NfZnJlZQAUH19fd2JnX3NldF9tYXRoYXJnc19pbmRpcmVjdF9yaHMAUx5fX3diZ19zZXRfbXVsYXJnc19pbmRpcmVjdF9saHMAUx9fX3diZ19nZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAFEeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAFEPX193YmdfZXhwaV9mcmVlAB0PX193YmdfYmhlaV9mcmVlAB0PX193Ymdfd2RtbF9mcmVlAB0PX193YmdfcHNobF9mcmVlAB0OX193YmdfbG9nX2ZyZWUAHQ5fX3diZ19jY3BfZnJlZQAdD19fd2JnX2VjazFfZnJlZQAdD19fd2JnX2VjcjFfZnJlZQAdDl9fd2JnX3Ntb19mcmVlAB0OX193Ymdfb3JpX2ZyZWUAHQ5fX3diZ190cm9fZnJlZQAdDl9fd2JnX21lcV9mcmVlAB0OX193YmdfY2ZzX2ZyZWUAHQ5fX3diZ19kaXZfZnJlZQAdDV9fd2JnX2x0X2ZyZWUAHQ9fX3diZ19iaHNoX2ZyZWUAHQ1fX3diZ19zYl9mcmVlAB0PX193Ymdfd2RtZF9mcmVlAB0NX193YmdfdHJfZnJlZQAdDl9fd2JnX3hvcl9mcmVlAB0PX193Ymdfam5lYl9mcmVlAB0PX193Ymdfam5lZl9mcmVlAB0PX193YmdfY3Npel9mcmVlAB0PX193YmdfY3Jvb19mcmVlAB0PX193YmdfZGl2aV9mcmVlAB0NX193YmdfZ21fZnJlZQAdD19fd2JnX21vZGlfZnJlZQAdD19fd2JnX3hvcmlfZnJlZQAdDV9fd2JnX2NiX2ZyZWUAHQ9fX3diZ193ZGNtX2ZyZWUAHQ5fX3diZ19qbXBfZnJlZQAdD19fd2JnX3dxYW1fZnJlZQAdDl9fd2JnX2xkY19mcmVlAB0PX193YmdfZWQxOV9mcmVlAB0NX193Ymdfc3dfZnJlZQAdD19fd2JnX3RpbWVfZnJlZQAdD19fd2JnX2Vjb3BfZnJlZQAdD19fd2JnX3Njd3FfZnJlZQAdD19fd2JnX3dxbW1fZnJlZQAdD19fd2JnX3dkYW1fZnJlZQAdDV9fd2JnX2xiX2ZyZWUAHQ1fX3diZ19qaV9mcmVlAB0PX193YmdfazI1Nl9mcmVlAB0PX193YmdfYW5kaV9mcmVlAB0PX193Ymdfam56aV9mcmVlAB0PX193Ymdfc3J3cV9mcmVlAB0OX193Ymdfbm90X2ZyZWUAHQ5fX3diZ19jZmVfZnJlZQAdD19fd2JnX2xvZ2RfZnJlZQAdDl9fd2JnX3Nyd19mcmVlAB0PX193YmdfcnZydF9mcmVlAB0PX193YmdfcHNoaF9mcmVlAB0OX193Ymdfc3JsX2ZyZWUAHQ5fX3diZ19tdWxfZnJlZQAdD19fd2JnX2ZsYWdfZnJlZQAdD19fd2JnX21jcGlfZnJlZQAdDl9fd2JnX21vZF9mcmVlAB0PX193YmdfbW92aV9mcmVlAB0OX193YmdfcmV0X2ZyZWUAHQ9fX3diZ19tcm9vX2ZyZWUAHQ9fX3diZ193cWR2X2ZyZWUAHQ1fX3diZ19sd19mcmVlAB0PX193Ymdfd3FtZF9mcmVlAB0OX193Ymdfc3d3X2ZyZWUAHQ5fX3diZ19ndGZfZnJlZQAdD19fd2JnX3BvcGhfZnJlZQAdDV9fd2JnX29yX2ZyZWUAHQ9fX3diZ19tb3ZlX2ZyZWUAHQ9fX3diZ193ZGR2X2ZyZWUAHQ9fX3diZ19yZXRkX2ZyZWUAHQ5fX3diZ19iYWxfZnJlZQAdD19fd2JnX2FkZGlfZnJlZQAdDl9fd2JnX2FuZF9mcmVlAB0PX193YmdfbWNsaV9mcmVlAB0PX193Ymdfd3FtbF9mcmVlAB0PX193Ymdfc2xsaV9mcmVlAB0PX193Ymdfd2RvcF9mcmVlAB0OX193Ymdfc2xsX2ZyZWUAHQ9fX3diZ19lY2FsX2ZyZWUAHQ9fX3diZ193cWNtX2ZyZWUAHQ9fX3diZ19zd3dxX2ZyZWUAHQ9fX3diZ19tbGR2X2ZyZWUAHQ1fX3diZ19ndF9mcmVlAB0NX193YmdfZXFfZnJlZQAdDl9fd2JnX2puZV9mcmVlAB0PX193Ymdfam5laV9mcmVlAB0PX193Ymdfam1wZl9mcmVlAB0OX193YmdfZXhwX2ZyZWUAHQ9fX3diZ19zMjU2X2ZyZWUAHQ5fX3diZ19zdWJfZnJlZQAdDl9fd2JnX21jcF9mcmVlAB0PX193YmdfZXBhcl9mcmVlAB0PX193YmdfY2ZlaV9mcmVlAB0PX193YmdfY2ZzaV9mcmVlAB0PX193Ymdfam56Zl9mcmVlAB0PX193YmdfbWludF9mcmVlAB0PX193YmdfYnNpel9mcmVlAB0PX193YmdfYnVybl9mcmVlAB0PX193Ymdfd2RtbV9mcmVlAB0PX193Ymdfam1wYl9mcmVlAB0PX193Ymdfc3JsaV9mcmVlAB0PX193Ymdfc3ViaV9mcmVlAB0PX193Ymdfam56Yl9mcmVlAB0PX193YmdfbXVsaV9mcmVlAB0PX193Ymdfd3FvcF9mcmVlAB0PX193YmdfcG9wbF9mcmVlAB0OX193YmdfbWNsX2ZyZWUAHQ9fX3diZ19jYWxsX2ZyZWUAHQ9fX3diZ19tbG9nX2ZyZWUAHQ9fX3diZ19ibGRkX2ZyZWUAHQ9fX3diZ19hbG9jX2ZyZWUAHRN3cWR2X25ld190eXBlc2NyaXB0ANABE3dxbWxfbmV3X3R5cGVzY3JpcHQA0AETd2RtbF9uZXdfdHlwZXNjcmlwdADQARN3cW9wX25ld190eXBlc2NyaXB0ANABE3dkb3BfbmV3X3R5cGVzY3JpcHQA0AETd3FjbV9uZXdfdHlwZXNjcmlwdADQARN3ZGR2X25ld190eXBlc2NyaXB0ANABDndxY21fZnJvbV9hcmdzAEAKd3Fkdl9pbW0wNgA7CndxbWxfaW1tMDYAOwp3ZG1sX2ltbTA2ADsKd3FvcF9pbW0wNgA7Cndkb3BfaW1tMDYAOwp3cWNtX2ltbTA2ADsKd2Rkdl9pbW0wNgA7CndkY21faW1tMDYAOwpqbmVmX2ltbTA2ADsJbGRjX2ltbTA2ADsOd3Fkdl9mcm9tX2FyZ3MAzwEOd3FtbF9mcm9tX2FyZ3MAQQ53cW9wX2Zyb21fYXJncwBABWdtX3JhADoFZ3RfcmMAHgVndF9yYgAXBWd0X3JhADoFbGJfcmIAFwVsYl9yYQA6BWx0X3JjAB4FbHRfcmIAFwVsdF9yYQA6CGx3X2ltbTEyAAoFbHdfcmIAFwVsd19yYQA6BW9yX3JjAB4Fb3JfcmIAFwVvcl9yYQA6CHNiX2ltbTEyAAoFc2JfcmIAFwVzYl9yYQA6CHN3X2ltbTEyAAoFc3dfcmIAFwVzd19yYQA6BXRyX3JjAB4FdHJfcmIAFwV0cl9yYQA6BWVxX3JjAB4FZXFfcmIAFwVlcV9yYQA6BmFuZF9yYwAeBmFuZF9yYgAXBmFuZF9yYQA6BmJhbF9yYwAeBmJhbF9yYgAXBmJhbF9yYQA6BmNjcF9yYwAeBmNjcF9yYgAXBmNjcF9yYQA6BmRpdl9yYwAeBmRpdl9yYgAXBmRpdl9yYQA6BmV4cF9yYwAeBmV4cF9yYgAXBmV4cF9yYQA6CGxiX2ltbTEyAAoGZ3RmX3JiABcGZ3RmX3JhADoGam5lX3JjAB4Gam5lX3JiABcGam5lX3JhADoGbGRjX3JjAB4GbGRjX3JiABcGbGRjX3JhADoGbG9nX3JkADsGbG9nX3JjAB4GbG9nX3JiABcGbG9nX3JhADoGbWNsX3JiABcGbWNsX3JhADoGbWNwX3JjAB4GbWNwX3JiABcGbWNwX3JhADoGbWVxX3JkADsGbWVxX3JjAB4GbWVxX3JiABcGbWVxX3JhADoGbW9kX3JjAB4GbW9kX3JiABcGbW9kX3JhADoGbXVsX3JjAB4GbXVsX3JiABcGbXVsX3JhADoGbm90X3JiABcGbm90X3JhADoJb3JpX2ltbTEyAAoGb3JpX3JiABcGb3JpX3JhADoGc2xsX3JjAB4Gc2xsX3JiABcGc2xsX3JhADoGc21vX3JkADsGc21vX3JjAB4Gc21vX3JiABcGc21vX3JhADoGc3JsX3JjAB4Gc3JsX3JiABcGc3JsX3JhADoGc3J3X3JjAB4Gc3J3X3JiABcGc3J3X3JhADoGc3ViX3JjAB4Gc3ViX3JiABcGc3ViX3JhADoGc3d3X3JjAB4Gc3d3X3JiABcGc3d3X3JhADoGdHJvX3JkADsGdHJvX3JjAB4GdHJvX3JiABcGdHJvX3JhADoGeG9yX3JjAB4GeG9yX3JiABcGeG9yX3JhADoJZ3RmX2ltbTEyAAoHYWRkaV9yYgAXB2FkZGlfcmEAOgphbmRpX2ltbTEyAAoHYW5kaV9yYgAXB2FuZGlfcmEAOgdiaHNoX3JiABcHYmhzaF9yYQA6BmNjcF9yZAA7B2JsZGRfcmMAHgdibGRkX3JiABcHYmxkZF9yYQA6B2JzaXpfcmIAFwdic2l6X3JhADoHYnVybl9yYgAXB2J1cm5fcmEAOgdjYWxsX3JkADsHY2FsbF9yYwAeB2NhbGxfcmIAFwdjYWxsX3JhADoHY3Jvb19yYgAXB2Nyb29fcmEAOgdjc2l6X3JiABcHY3Npel9yYQA6CmRpdmlfaW1tMTIACgdkaXZpX3JiABcHZGl2aV9yYQA6B2VjYWxfcmQAOwdlY2FsX3JjAB4HZWNhbF9yYgAXB2VjYWxfcmEAOgdlY2sxX3JjAB4HZWNrMV9yYgAXB2VjazFfcmEAOgdlY29wX3JkADsHZWNvcF9yYwAeB2Vjb3BfcmIAFwdlY29wX3JhADoHZWNyMV9yYwAeB2VjcjFfcmIAFwdlY3IxX3JhADoHZWQxOV9yZAA7B2VkMTlfcmMAHgdlZDE5X3JiABcHZWQxOV9yYQA6B2VwYXJfcmQAOwdlcGFyX3JjAB4HZXBhcl9yYgAXB2VwYXJfcmEAOgpleHBpX2ltbTEyAAoHZXhwaV9yYgAXB2V4cGlfcmEAOgpqbXBiX2ltbTE4AA8Ham1wYl9yYQA6CmptcGZfaW1tMTgADwdqbXBmX3JhADoHam5lYl9yYwAeB2puZWJfcmIAFwdqbmViX3JhADoHam5lZl9yYwAeB2puZWZfcmIAFwdqbmVmX3JhADoKam5laV9pbW0xMgAKB2puZWlfcmIAFwdqbmVpX3JhADoKam56Yl9pbW0xMgAKB2puemJfcmIAFwdqbnpiX3JhADoKam56Zl9pbW0xMgAKB2puemZfcmIAFwdqbnpmX3JhADoKam56aV9pbW0xOAAPB2puemlfcmEAOgdrMjU2X3JjAB4HazI1Nl9yYgAXB2syNTZfcmEAOgdsb2dkX3JkADsHbG9nZF9yYwAeB2xvZ2RfcmIAFwdsb2dkX3JhADoKbWNsaV9pbW0xOAAPB21jbGlfcmEAOgptY3BpX2ltbTEyAAoHbWNwaV9yYgAXB21jcGlfcmEAOgdtaW50X3JiABcHbWludF9yYQA6B21sZHZfcmQAOwdtbGR2X3JjAB4HbWxkdl9yYgAXB21sZHZfcmEAOgdtbG9nX3JjAB4HbWxvZ19yYgAXB21sb2dfcmEAOgptb2RpX2ltbTEyAAoHbW9kaV9yYgAXB21vZGlfcmEAOgdtb3ZlX3JiABcHbW92ZV9yYQA6Cm1vdmlfaW1tMTgADwdtb3ZpX3JhADoHbXJvb19yYwAeB21yb29fcmIAFwdtcm9vX3JhADoKbXVsaV9pbW0xMgAKB211bGlfcmIAFwdtdWxpX3JhADoHcmV0ZF9yYgAXB3JldGRfcmEAOgdzMjU2X3JjAB4HczI1Nl9yYgAXB3MyNTZfcmEAOgdzY3dxX3JjAB4Hc2N3cV9yYgAXB3Njd3FfcmEAOgpzbGxpX2ltbTEyAAoHc2xsaV9yYgAXB3NsbGlfcmEAOgpzcmxpX2ltbTEyAAoHc3JsaV9yYgAXB3NybGlfcmEAOgdzcndxX3JkADsHc3J3cV9yYwAeB3Nyd3FfcmIAFwdzcndxX3JhADoKc3ViaV9pbW0xMgAKB3N1YmlfcmIAFwdzdWJpX3JhADoHc3d3cV9yZAA7B3N3d3FfcmMAHgdzd3dxX3JiABcHc3d3cV9yYQA6B3RpbWVfcmIAFwd0aW1lX3JhADoHd2RhbV9yZAA7B3dkYW1fcmMAHgd3ZGFtX3JiABcHd2RhbV9yYQA6B3dkY21fcmMAHgd3ZGNtX3JiABcHd2RjbV9yYQA6B3dkZHZfcmMAHgd3ZGR2X3JiABcHd2Rkdl9yYQA6B3dkbWRfcmQAOwd3ZG1kX3JjAB4Hd2RtZF9yYgAXB3dkbWRfcmEAOgd3ZG1sX3JjAB4Hd2RtbF9yYgAXB3dkbWxfcmEAOgd3ZG1tX3JkADsHd2RtbV9yYwAeB3dkbW1fcmIAFwd3ZG1tX3Jh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QQh2QYD+A3EgAUGA/gNxQQh0ckEIdnILTwECfyAAENcBIABBCGsiASABKAIAQQFqIgI2AgACQCACBEAgACgCAEF/Rg0BIAAvAAQgAEEGai0AAEEQdHIQ2gEgARBjEGcPCwALEN0BAAtVAQF/IAAQIiEAQQRBEBDZASIBRQRAAAsgAUKBgICAEDcCACABIABBEHRBgID8B3EgAEEIdkGA/gNxIABBgP4DcUEIdHJBCHZyrUIghjcCCCABQQhqC04BAX8gAUUEQCAAEBsaDwsgABDXASAAQQhrIgEgASgCAEEBayICNgIAAkAgAg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCwsQACAAIAEgAiADQd4AEIICCxAAIAAgASACIANB3wAQggILEAAgACABIAIgA0HgABCCAgsQACAAIAEgAiADQeEAEIICCxAAIAAgASACIANB4gAQgwILEAAgACABIAIgA0HjABCDAgtOAQF/IAFFBEAgABAfGg8LIAAQ1wEgAEEIayIBIAEoAgBBAWsiAjYCAAJAIAINACAAQQRrIgAgACgCAEEBayIANgIAIAANACABQRAQIwsLTgEBfyABRQRAIAAQIRoPCyAAENcBIABBCGsiASABKAIAQQFrIgI2AgACQCACDQAgAEEEayIAIAAoAgBBAWsiADYCACAADQAgAUEQECMLC04BAX8gAUUEQCAAECIaDwsgABDXASAAQQhrIgEgASgCAEEBayICNgIAAkAgAg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCwsPACAAIAFBgICAyAEQhAILDAAgACABQcsAEIUCCwwAIAAgAUHMABCFAgsMACAAIAFBzQAQhQILDAAgACABQc4AEIUCCwwAIAAgAUHPABCFAgsMACAAIAFB0AAQhQILDwAgACABQYCAgOgGEIQCC1MBAX8gABAfIQQgARAfIQEgAhAfIQIgAxAfIQNBBEEQENkBIgBFBEAACyAAQoGAgIAQNwIAIAAgBCABIAIgAxAkrUL///8Hg0IghjcCCCAAQQhqC0UBAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBCIALwAAIABBAmotAABBEHRyENoBIAEoAgggASgCDBDSARBnIAFBEGokAAtLAQF/IwBBEGsiASQAIAFBBGogABAgIAEoAgQi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AUKBgICAEDcCACABIACtQv///weDQiCGNwIIIAFBCGoLMAEBf0EEQRAQ2QEiAUUEQAALIAEgADYCDCABQQA2AgggAUKBgICAEDcCACABQQhqCzABAX9BBEEQENkBIgFFBEAACyABIAA6AAwgAUEANgIIIAFCgYCAgBA3AgAgAUEIagsoACABKAIARQRAIAFBfzYCACAAIAE2AgQgACABQQRqNgIADwsQ3QEACyQAIAAQ1wEgACgCAARAEN0BAAsgAEEANgIAIAAgAUEARzoABAsoACADEBshAyAAEM0BIAEQzQEgAhDNASADENUBQQh0QeQAchDKARBmCygAIAMQGyEDIAAQzQEgARDNASACEM0BIAMQ1QFBCHRB5QByEMoBEGYLIAAgAEEBayIAQQZNBEAgAEEBag8LQeCCwABBGRDhAQALKQEBf0EEQRAQ2QEiAEUEQAALIABCADcCCCAAQoGAgIAQNwIAIABBCGoLIgAgAhAEIQIgABDNASABEM0BIAIQT0EIdEHKAHIQygEQZgsPACAAIAEgAiADQRIQ/AELDwAgACABIAIgA0EYEPwBCw8AIAAgASACIANBHBD8AQsPACAAIAEgAiADQR0Q/AELDwAgACABIAIgA0EhEP0BCw8AIAAgASACIANBIhD8AQsPACAAIAEgAiADQSMQ/AELDwAgACABIAIgA0EoEPwBCw8AIAAgASACIANBKhD8AQsPACAAIAEgAiADQSwQ/AELDwAgACABIAIgA0EvEPwBCw8AIAAgASACIANBOBD8AQsQACAAIAEgAiADQdMAEP0BCxAAIAAgASACIANB1AAQ/QELEAAgACABIAIgA0HeABD9AQsQACAAIAEgAiADQd8AEP0BCxAAIAAgASACIANB4AAQ/QELEAAgACABIAIgA0HhABD9AQsQACAAIAEgAiADQeIAEP0BCxAAIAAgASACIANB4wAQ/QELEAAgACABIAIgA0HkABD9AQsQACAAIAEgAiADQeUAEP0BCxAAIAAgASACIANB5gAQ/AELEAAgACABIAIgA0HnABD8AQsQACAAIAEgAiADQegAEPwBCxAAIAAgASACIANB6QAQ/AELEAAgACABIAIgA0HqABD8AQsQACAAIAEgAiADQesAEPwBCxAAIAAgASACIANB7AAQ/AELEAAgACABIAIgA0HuABD8AQsQACAAIAEgAiADQe8AEPwBCxAAIAAgASACIANB8AAQ/AELHgAgARBsIQEgABDNASABEMsBQQh0QcwAchDKARBmCxkAIAAgASACQSBBACAEG0EQQQAgAxtyECQLDQAgACABIAJBARD+AQsNACAAIAEgAkECEP4BCw0AIAAgASACQQMQ/gELDQAgACABIAJBBBD+AQsNACAAIAEgAkEFEP4BCw0AIAAgASACQQYQ/gELDQAgACABIAJBBxD+AQsNACAAIAEgAkEIEP4BCw0AIAAgASACQQkQ/gELDQAgACABIAJBCxD+AQsNACAAIAEgAkENEP4BCw0AIAAgASACQQ4Q/gELDQAgACABIAJBDxD+AQsNACAAIAEgAkEQEP4BCw0AIAAgASACQREQ/gELDQAgACABIAJBFxD+AQsNACAAIAEgAkEmEP4BCw0AIAAgASACQScQ/gELDQAgACABIAJBKRD+AQsNACAAIAEgAkErEP4BCw0AIAAgASACQS0Q/gELDQAgACABIAJBLhD+AQsNACAAIAEgAkEwEP4BCw0AIAAgASACQTEQ/gELDQAgACABIAJBNRD+AQsNACAAIAEgAkE3EP4BCw0AIAAgASACQTkQ/wELDQAgACABIAJBOhD/AQsNACAAIAEgAkE7EP8BCw0AIAAgASACQTwQ/wELDQAgACABIAJBPRD/AQsNACAAIAEgAkE+EP8BCw0AIAAgASACQT8Q/wELDgAgACABIAJBwAAQ/wELDgAgACABIAJBwQAQ/wELDgAgACABIAJBwgAQ/wELDgAgACABIAJBwwAQ/wELDgAgACABIAJBxAAQ/wELDgAgACABIAJBxQAQ/wELDgAgACABIAJBxgAQ/wELDgAgACABIAJBxwAQ/wELDgAgACABIAJByAAQ/wELDgAgACABIAJByQAQ/wELDgAgACABIAJBygAQ/wELDgAgACABIAJB0QAQ/wELDgAgACABIAJB0gAQ/wELFwEBfyAAQf8BcUE/TQR/IAAQZwVBAAsLGwAgABDXASAAKAIAQX9GBEAQ3QEACyAALQAECwkAIABBExCAAgsJACAAQRUQgAILCQAgAEEaEIACCwkAIABBIBCAAgsJACAAQSUQgAILCQAgAEE0EIACCwkAIABBNhCAAgsKACAAQdgAEIACCwoAIABB2QAQgAILGwEBf0EBQQQQ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", imports);
16921
17021
  }
16922
17022
  __name(wasm, "wasm");
16923
17023
  async function initWasm2() {
16924
- return await __wbg_init(wasm());
17024
+ return await __wbg_init({ module_or_path: wasm() });
16925
17025
  }
16926
17026
  __name(initWasm2, "initWasm");
16927
17027
  initWasm2();
@@ -17187,9 +17287,9 @@
17187
17287
  var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
17188
17288
  function getBuiltinVersions() {
17189
17289
  return {
17190
- FUEL_CORE: "0.41.9",
17191
- FORC: "0.67.0",
17192
- FUELS: "0.100.2"
17290
+ FUEL_CORE: "0.43.1",
17291
+ FORC: "0.68.1",
17292
+ FUELS: "0.100.4"
17193
17293
  };
17194
17294
  }
17195
17295
  __name(getBuiltinVersions, "getBuiltinVersions");
@@ -17342,6 +17442,8 @@ This unreleased fuel-core build may include features and updates not yet support
17342
17442
  ErrorCode2["FUNDS_TOO_LOW"] = "funds-too-low";
17343
17443
  ErrorCode2["MAX_OUTPUTS_EXCEEDED"] = "max-outputs-exceeded";
17344
17444
  ErrorCode2["ASSET_BURN_DETECTED"] = "asset-burn-detected";
17445
+ ErrorCode2["CHANGE_OUTPUT_COLLISION"] = "change-output-collision";
17446
+ ErrorCode2["DUPLICATE_CHANGE_OUTPUT_ACCOUNT"] = "duplicate-change-output-account";
17345
17447
  ErrorCode2["INVALID_RECEIPT_TYPE"] = "invalid-receipt-type";
17346
17448
  ErrorCode2["INVALID_WORD_LIST"] = "invalid-word-list";
17347
17449
  ErrorCode2["INVALID_MNEMONIC"] = "invalid-mnemonic";
@@ -17351,9 +17453,12 @@ This unreleased fuel-core build may include features and updates not yet support
17351
17453
  ErrorCode2["INVALID_PASSWORD"] = "invalid-password";
17352
17454
  ErrorCode2["ACCOUNT_REQUIRED"] = "account-required";
17353
17455
  ErrorCode2["UNLOCKED_WALLET_REQUIRED"] = "unlocked-wallet-required";
17456
+ ErrorCode2["NO_COINS_TO_CONSOLIDATE"] = "no-coins-to-consolidate";
17457
+ ErrorCode2["COINS_ASSET_ID_MISMATCH"] = "coins-asset-id-mismatch";
17354
17458
  ErrorCode2["ASSET_NOT_FOUND"] = "asset-not-found";
17355
17459
  ErrorCode2["NUMBER_TOO_BIG"] = "number-too-big";
17356
17460
  ErrorCode2["ERROR_BUILDING_BLOCK_EXPLORER_URL"] = "error-building-block-explorer-url";
17461
+ ErrorCode2["RPC_CONSISTENCY"] = "rpc-consistency";
17357
17462
  ErrorCode2["VITEPRESS_PLUGIN_ERROR"] = "vitepress-plugin-error";
17358
17463
  ErrorCode2["SCRIPT_REVERTED"] = "script-reverted";
17359
17464
  ErrorCode2["SCRIPT_RETURN_INVALID_TYPE"] = "script-return-invalid-type";
@@ -23248,6 +23353,7 @@ If you are attempting to transform a hex value, please make sure it is being pas
23248
23353
  const poaInstant = poaInstantFlagValue === "true" || poaInstantFlagValue === void 0;
23249
23354
  const nativeExecutorVersion = getFlagValueFromArgs(args, "--native-executor-version") || "0";
23250
23355
  const minGasPrice = getFlagValueFromArgs(args, "--min-gas-price") || "1";
23356
+ const startingGasPrice = getFlagValueFromArgs(args, "--starting-gas-price") || "1";
23251
23357
  const graphQLStartSubstring = "Binding GraphQL provider to";
23252
23358
  const command = fuelCorePath || "fuel-core";
23253
23359
  const ipToUse = ip || "0.0.0.0";
@@ -23289,6 +23395,7 @@ If you are attempting to transform a hex value, please make sure it is being pas
23289
23395
  ["--port", portToUse],
23290
23396
  useInMemoryDb ? ["--db-type", "in-memory"] : ["--db-path", tempDir],
23291
23397
  ["--min-gas-price", minGasPrice],
23398
+ ["--starting-gas-price", startingGasPrice],
23292
23399
  poaInstant ? ["--poa-instant", "true"] : [],
23293
23400
  ["--native-executor-version", nativeExecutorVersion],
23294
23401
  ["--consensus-key", consensusKey],
@@ -28902,18 +29009,84 @@ spurious results.`);
28902
29009
  gql["default"] = gql;
28903
29010
  var lib_default2 = gql;
28904
29011
 
28905
- // src/connectors/utils/promises.ts
28906
- function deferPromise() {
28907
- const defer = {};
28908
- defer.promise = new Promise((resolve, reject) => {
28909
- defer.reject = reject;
28910
- defer.resolve = resolve;
28911
- });
28912
- return defer;
28913
- }
28914
- __name(deferPromise, "deferPromise");
28915
-
28916
29012
  // src/providers/__generated__/operations.ts
29013
+ var InputCoinFragmentDoc = lib_default2`
29014
+ fragment InputCoinFragment on InputCoin {
29015
+ type: __typename
29016
+ utxoId
29017
+ owner
29018
+ amount
29019
+ assetId
29020
+ txPointer
29021
+ coinWitnessIndex: witnessIndex
29022
+ predicateGasUsed
29023
+ predicate
29024
+ predicateData
29025
+ }
29026
+ `;
29027
+ var InputMessageFragmentDoc = lib_default2`
29028
+ fragment InputMessageFragment on InputMessage {
29029
+ type: __typename
29030
+ sender
29031
+ recipient
29032
+ amount
29033
+ nonce
29034
+ messageWitnessIndex: witnessIndex
29035
+ predicateGasUsed
29036
+ data
29037
+ predicate
29038
+ predicateData
29039
+ }
29040
+ `;
29041
+ var InputContractFragmentDoc = lib_default2`
29042
+ fragment InputContractFragment on InputContract {
29043
+ type: __typename
29044
+ utxoId
29045
+ balanceRoot
29046
+ stateRoot
29047
+ txPointer
29048
+ contractId
29049
+ }
29050
+ `;
29051
+ var OutputCoinFragmentDoc = lib_default2`
29052
+ fragment OutputCoinFragment on CoinOutput {
29053
+ type: __typename
29054
+ to
29055
+ amount
29056
+ assetId
29057
+ }
29058
+ `;
29059
+ var OutputContractFragmentDoc = lib_default2`
29060
+ fragment OutputContractFragment on ContractOutput {
29061
+ type: __typename
29062
+ inputIndex
29063
+ balanceRoot
29064
+ stateRoot
29065
+ }
29066
+ `;
29067
+ var OutputChangeFragmentDoc = lib_default2`
29068
+ fragment OutputChangeFragment on ChangeOutput {
29069
+ type: __typename
29070
+ to
29071
+ amount
29072
+ assetId
29073
+ }
29074
+ `;
29075
+ var OutputVariableFragmentDoc = lib_default2`
29076
+ fragment OutputVariableFragment on VariableOutput {
29077
+ type: __typename
29078
+ to
29079
+ amount
29080
+ assetId
29081
+ }
29082
+ `;
29083
+ var OutputContractCreatedFragmentDoc = lib_default2`
29084
+ fragment OutputContractCreatedFragment on ContractCreated {
29085
+ type: __typename
29086
+ contract
29087
+ stateRoot
29088
+ }
29089
+ `;
28917
29090
  var SubmittedStatusFragmentDoc = lib_default2`
28918
29091
  fragment SubmittedStatusFragment on SubmittedStatus {
28919
29092
  type: __typename
@@ -29042,6 +29215,87 @@ spurious results.`);
29042
29215
  reason
29043
29216
  }
29044
29217
  `;
29218
+ var PreconfirmationSuccessStatusFragmentDoc = lib_default2`
29219
+ fragment PreconfirmationSuccessStatusFragment on PreconfirmationSuccessStatus {
29220
+ type: __typename
29221
+ totalGas
29222
+ totalFee
29223
+ resolvedOutputs {
29224
+ utxoId
29225
+ output {
29226
+ type: __typename
29227
+ ... on CoinOutput {
29228
+ to
29229
+ amount
29230
+ assetId
29231
+ }
29232
+ ... on ContractOutput {
29233
+ inputIndex
29234
+ balanceRoot
29235
+ stateRoot
29236
+ }
29237
+ ... on ChangeOutput {
29238
+ to
29239
+ amount
29240
+ assetId
29241
+ }
29242
+ ... on VariableOutput {
29243
+ to
29244
+ amount
29245
+ assetId
29246
+ }
29247
+ ... on ContractCreated {
29248
+ contract
29249
+ stateRoot
29250
+ }
29251
+ }
29252
+ }
29253
+ preconfirmationReceipts: receipts {
29254
+ ...receiptFragment
29255
+ }
29256
+ }
29257
+ ${ReceiptFragmentDoc}`;
29258
+ var PreconfirmationFailureStatusFragmentDoc = lib_default2`
29259
+ fragment PreconfirmationFailureStatusFragment on PreconfirmationFailureStatus {
29260
+ type: __typename
29261
+ reason
29262
+ totalGas
29263
+ totalFee
29264
+ resolvedOutputs {
29265
+ utxoId
29266
+ output {
29267
+ type: __typename
29268
+ ... on CoinOutput {
29269
+ to
29270
+ amount
29271
+ assetId
29272
+ }
29273
+ ... on ContractOutput {
29274
+ inputIndex
29275
+ balanceRoot
29276
+ stateRoot
29277
+ }
29278
+ ... on ChangeOutput {
29279
+ to
29280
+ amount
29281
+ assetId
29282
+ }
29283
+ ... on VariableOutput {
29284
+ to
29285
+ amount
29286
+ assetId
29287
+ }
29288
+ ... on ContractCreated {
29289
+ contract
29290
+ stateRoot
29291
+ }
29292
+ }
29293
+ }
29294
+ preconfirmationReceipts: receipts {
29295
+ ...receiptFragment
29296
+ }
29297
+ }
29298
+ ${ReceiptFragmentDoc}`;
29045
29299
  var TransactionStatusSubscriptionFragmentDoc = lib_default2`
29046
29300
  fragment transactionStatusSubscriptionFragment on TransactionStatus {
29047
29301
  ... on SubmittedStatus {
@@ -29062,12 +29316,20 @@ spurious results.`);
29062
29316
  ... on SqueezedOutStatus {
29063
29317
  ...SqueezedOutStatusFragment
29064
29318
  }
29319
+ ... on PreconfirmationSuccessStatus {
29320
+ ...PreconfirmationSuccessStatusFragment
29321
+ }
29322
+ ... on PreconfirmationFailureStatus {
29323
+ ...PreconfirmationFailureStatusFragment
29324
+ }
29065
29325
  }
29066
29326
  ${SubmittedStatusFragmentDoc}
29067
29327
  ${SuccessStatusWithBlockIdFragmentDoc}
29068
29328
  ${MalleableTransactionFieldsFragmentDoc}
29069
29329
  ${FailureStatusWithBlockIdFragmentDoc}
29070
- ${SqueezedOutStatusFragmentDoc}`;
29330
+ ${SqueezedOutStatusFragmentDoc}
29331
+ ${PreconfirmationSuccessStatusFragmentDoc}
29332
+ ${PreconfirmationFailureStatusFragmentDoc}`;
29071
29333
  var TransactionStatusFragmentDoc = lib_default2`
29072
29334
  fragment transactionStatusFragment on TransactionStatus {
29073
29335
  ... on SubmittedStatus {
@@ -29119,6 +29381,23 @@ ${SqueezedOutStatusFragmentDoc}`;
29119
29381
  }
29120
29382
  }
29121
29383
  ${InputEstimatePredicatesFragmentDoc}`;
29384
+ var DryRunFailureAssembleTxFragmentDoc = lib_default2`
29385
+ fragment dryRunFailureAssembleTxFragment on DryRunFailureStatus {
29386
+ type: __typename
29387
+ reason
29388
+ receipts {
29389
+ ...receiptFragment
29390
+ }
29391
+ }
29392
+ ${ReceiptFragmentDoc}`;
29393
+ var DryRunSuccessAssembleTxFragmentDoc = lib_default2`
29394
+ fragment dryRunSuccessAssembleTxFragment on DryRunSuccessStatus {
29395
+ type: __typename
29396
+ receipts {
29397
+ ...receiptFragment
29398
+ }
29399
+ }
29400
+ ${ReceiptFragmentDoc}`;
29122
29401
  var DryRunFailureStatusFragmentDoc = lib_default2`
29123
29402
  fragment dryRunFailureStatusFragment on DryRunFailureStatus {
29124
29403
  type: __typename
@@ -29475,13 +29754,21 @@ ${NodeInfoFragmentDoc}`;
29475
29754
  ... on SqueezedOutStatus {
29476
29755
  ...SqueezedOutStatusFragment
29477
29756
  }
29757
+ ... on PreconfirmationSuccessStatus {
29758
+ ...PreconfirmationSuccessStatusFragment
29759
+ }
29760
+ ... on PreconfirmationFailureStatus {
29761
+ ...PreconfirmationFailureStatusFragment
29762
+ }
29478
29763
  }
29479
29764
  }
29480
29765
  }
29481
29766
  ${SubmittedStatusFragmentDoc}
29482
29767
  ${SuccessStatusWithBlockIdFragmentDoc}
29483
29768
  ${FailureStatusWithBlockIdFragmentDoc}
29484
- ${SqueezedOutStatusFragmentDoc}`;
29769
+ ${SqueezedOutStatusFragmentDoc}
29770
+ ${PreconfirmationSuccessStatusFragmentDoc}
29771
+ ${PreconfirmationFailureStatusFragmentDoc}`;
29485
29772
  var GetTransactionsDocument = lib_default2`
29486
29773
  query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
29487
29774
  transactions(after: $after, before: $before, first: $first, last: $last) {
@@ -29772,6 +30059,77 @@ ${GetMessageFragmentDoc}`;
29772
30059
  }
29773
30060
  }
29774
30061
  `;
30062
+ var AssembleTxDocument = lib_default2`
30063
+ query assembleTx($tx: HexString!, $blockHorizon: U32!, $requiredBalances: [RequiredBalance!]!, $feeAddressIndex: U16!, $excludeInput: ExcludeInput, $estimatePredicates: Boolean, $reserveGas: U64) {
30064
+ assembleTx(
30065
+ tx: $tx
30066
+ blockHorizon: $blockHorizon
30067
+ requiredBalances: $requiredBalances
30068
+ feeAddressIndex: $feeAddressIndex
30069
+ excludeInput: $excludeInput
30070
+ estimatePredicates: $estimatePredicates
30071
+ reserveGas: $reserveGas
30072
+ ) {
30073
+ transaction {
30074
+ id
30075
+ inputs {
30076
+ ... on InputCoin {
30077
+ ...InputCoinFragment
30078
+ }
30079
+ ... on InputContract {
30080
+ ...InputContractFragment
30081
+ }
30082
+ ... on InputMessage {
30083
+ ...InputMessageFragment
30084
+ }
30085
+ }
30086
+ outputs {
30087
+ ... on CoinOutput {
30088
+ ...OutputCoinFragment
30089
+ }
30090
+ ... on ContractOutput {
30091
+ ...OutputContractFragment
30092
+ }
30093
+ ... on ChangeOutput {
30094
+ ...OutputChangeFragment
30095
+ }
30096
+ ... on VariableOutput {
30097
+ ...OutputVariableFragment
30098
+ }
30099
+ ... on ContractCreated {
30100
+ ...OutputContractCreatedFragment
30101
+ }
30102
+ }
30103
+ policies {
30104
+ tip
30105
+ witnessLimit
30106
+ maturity
30107
+ maxFee
30108
+ }
30109
+ witnesses
30110
+ scriptGasLimit
30111
+ }
30112
+ status {
30113
+ ... on DryRunFailureStatus {
30114
+ ...dryRunFailureAssembleTxFragment
30115
+ }
30116
+ ... on DryRunSuccessStatus {
30117
+ ...dryRunSuccessAssembleTxFragment
30118
+ }
30119
+ }
30120
+ gasPrice
30121
+ }
30122
+ }
30123
+ ${InputCoinFragmentDoc}
30124
+ ${InputContractFragmentDoc}
30125
+ ${InputMessageFragmentDoc}
30126
+ ${OutputCoinFragmentDoc}
30127
+ ${OutputContractFragmentDoc}
30128
+ ${OutputChangeFragmentDoc}
30129
+ ${OutputVariableFragmentDoc}
30130
+ ${OutputContractCreatedFragmentDoc}
30131
+ ${DryRunFailureAssembleTxFragmentDoc}
30132
+ ${DryRunSuccessAssembleTxFragmentDoc}`;
29775
30133
  var DryRunDocument = lib_default2`
29776
30134
  mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
29777
30135
  dryRun(
@@ -29830,15 +30188,22 @@ ${GetMessageFragmentDoc}`;
29830
30188
  }
29831
30189
  `;
29832
30190
  var SubmitAndAwaitStatusDocument = lib_default2`
29833
- subscription submitAndAwaitStatus($encodedTransaction: HexString!) {
29834
- submitAndAwaitStatus(tx: $encodedTransaction) {
30191
+ subscription submitAndAwaitStatus($encodedTransaction: HexString!, $estimatePredicates: Boolean, $includePreConfirmation: Boolean) {
30192
+ submitAndAwaitStatus(
30193
+ tx: $encodedTransaction
30194
+ estimatePredicates: $estimatePredicates
30195
+ includePreconfirmation: $includePreConfirmation
30196
+ ) {
29835
30197
  ...transactionStatusSubscriptionFragment
29836
30198
  }
29837
30199
  }
29838
30200
  ${TransactionStatusSubscriptionFragmentDoc}`;
29839
30201
  var StatusChangeDocument = lib_default2`
29840
- subscription statusChange($transactionId: TransactionId!) {
29841
- statusChange(id: $transactionId) {
30202
+ subscription statusChange($transactionId: TransactionId!, $includePreConfirmation: Boolean) {
30203
+ statusChange(
30204
+ id: $transactionId
30205
+ includePreconfirmation: $includePreConfirmation
30206
+ ) {
29842
30207
  ...transactionStatusSubscriptionFragment
29843
30208
  }
29844
30209
  }
@@ -29941,6 +30306,9 @@ ${GetMessageFragmentDoc}`;
29941
30306
  getAssetDetails(variables, options) {
29942
30307
  return requester(GetAssetDetailsDocument, variables, options);
29943
30308
  },
30309
+ assembleTx(variables, options) {
30310
+ return requester(AssembleTxDocument, variables, options);
30311
+ },
29944
30312
  dryRun(variables, options) {
29945
30313
  return requester(DryRunDocument, variables, options);
29946
30314
  },
@@ -29969,9 +30337,67 @@ ${GetMessageFragmentDoc}`;
29969
30337
  }
29970
30338
  __name(getSdk, "getSdk");
29971
30339
 
30340
+ // src/providers/assemble-tx-helpers.ts
30341
+ var resolveAccountForAssembleTxParams = /* @__PURE__ */ __name((account) => {
30342
+ const assembleTxAccount = {};
30343
+ const accountIsPredicate = "bytes" in account;
30344
+ if (accountIsPredicate) {
30345
+ assembleTxAccount.predicate = {
30346
+ predicate: hexlify(account.bytes),
30347
+ predicateAddress: account.address.toB256(),
30348
+ predicateData: hexlify(account.getPredicateData())
30349
+ };
30350
+ } else {
30351
+ assembleTxAccount.address = account.address.toB256();
30352
+ }
30353
+ return assembleTxAccount;
30354
+ }, "resolveAccountForAssembleTxParams");
30355
+ var setAndValidateGasAndFeeForAssembledTx = /* @__PURE__ */ __name(async (params) => {
30356
+ const { gasPrice, transactionRequest, setGasLimit, setMaxFee, provider } = params;
30357
+ const gasLimitSpecified = isDefined(setGasLimit);
30358
+ const maxFeeSpecified = isDefined(setMaxFee);
30359
+ const isScriptTx = transactionRequest.type === TransactionType.Script;
30360
+ if (gasLimitSpecified && isScriptTx) {
30361
+ const requiredGasLimit = transactionRequest.gasLimit;
30362
+ if (bn(setGasLimit).lt(bn(requiredGasLimit))) {
30363
+ throw new FuelError(
30364
+ ErrorCode.GAS_LIMIT_TOO_LOW,
30365
+ `Gas limit '${setGasLimit}' is lower than the required: '${requiredGasLimit}'.`
30366
+ );
30367
+ }
30368
+ transactionRequest.gasLimit = bn(setGasLimit);
30369
+ }
30370
+ if (maxFeeSpecified) {
30371
+ const requiredMaxFee = transactionRequest.maxFee;
30372
+ if (bn(setMaxFee).lt(requiredMaxFee)) {
30373
+ throw new FuelError(
30374
+ ErrorCode.MAX_FEE_TOO_LOW,
30375
+ `Max fee '${setMaxFee}' is lower than the required: '${requiredMaxFee}'.`
30376
+ );
30377
+ }
30378
+ transactionRequest.maxFee = bn(setMaxFee);
30379
+ }
30380
+ if (gasLimitSpecified && !maxFeeSpecified) {
30381
+ const { maxFee: feeForGasPrice } = await provider.estimateTxGasAndFee({
30382
+ transactionRequest,
30383
+ gasPrice
30384
+ });
30385
+ transactionRequest.maxFee = feeForGasPrice;
30386
+ }
30387
+ return transactionRequest;
30388
+ }, "setAndValidateGasAndFeeForAssembledTx");
30389
+
29972
30390
  // src/providers/utils/handle-gql-error-message.ts
30391
+ var gqlErrorMessage = {
30392
+ RPC_CONSISTENCY: /The required fuel block height is higher than the current block height. Required: \d+, Current: \d+/,
30393
+ NOT_ENOUGH_COINS_MAX_COINS: /the target cannot be met due to no coins available or exceeding the \d+ coin limit./,
30394
+ ASSET_NOT_FOUND: /resource was not found in table/,
30395
+ MULTIPLE_CHANGE_POLICIES: /The asset ([a-fA-F0-9]{64}) has multiple change policies/,
30396
+ DUPLICATE_CHANGE_OUTPUT_ACCOUNT: /required balances contain duplicate \(asset, account\) pair/,
30397
+ INSUFFICIENT_FEE_AMOUNT: /InsufficientFeeAmount { expected: (\d+), provided: (\d+) }/
30398
+ };
29973
30399
  var mapGqlErrorMessage = /* @__PURE__ */ __name((error2) => {
29974
- if (new RegExp("the target cannot be met due to no coins available or exceeding the \\d+ coin limit." /* NOT_ENOUGH_COINS_MAX_COINS */).test(error2.message)) {
30400
+ if (gqlErrorMessage.NOT_ENOUGH_COINS_MAX_COINS.test(error2.message)) {
29975
30401
  return new FuelError(
29976
30402
  ErrorCode.INSUFFICIENT_FUNDS_OR_MAX_COINS,
29977
30403
  `Insufficient funds or too many small value coins. Consider combining UTXOs.`,
@@ -29979,7 +30405,25 @@ ${GetMessageFragmentDoc}`;
29979
30405
  error2
29980
30406
  );
29981
30407
  }
29982
- if (new RegExp("resource was not found in table" /* ASSET_NOT_FOUND */).test(error2.message)) {
30408
+ if (gqlErrorMessage.MULTIPLE_CHANGE_POLICIES.test(error2.message)) {
30409
+ const match = error2.message.match(/asset ([a-fA-F0-9]{64})/);
30410
+ const assetId = match?.[1] || "";
30411
+ return new FuelError(
30412
+ ErrorCode.CHANGE_OUTPUT_COLLISION,
30413
+ `OutputChange address for asset 0x${assetId} differs between transaction request and assembleTx parameters.`,
30414
+ {},
30415
+ error2
30416
+ );
30417
+ }
30418
+ if (gqlErrorMessage.DUPLICATE_CHANGE_OUTPUT_ACCOUNT.test(error2.message)) {
30419
+ return new FuelError(
30420
+ ErrorCode.DUPLICATE_CHANGE_OUTPUT_ACCOUNT,
30421
+ `The parameter 'accountCoinQuantities' of assembleTx contains duplicate entries for the same assetId with different 'changeOutputAccount'.`,
30422
+ {},
30423
+ error2
30424
+ );
30425
+ }
30426
+ if (gqlErrorMessage.ASSET_NOT_FOUND.test(error2.message)) {
29983
30427
  return new FuelError(
29984
30428
  ErrorCode.ASSET_NOT_FOUND,
29985
30429
  `Asset not found for given asset id.`,
@@ -29987,6 +30431,13 @@ ${GetMessageFragmentDoc}`;
29987
30431
  error2
29988
30432
  );
29989
30433
  }
30434
+ if (gqlErrorMessage.RPC_CONSISTENCY.test(error2.message)) {
30435
+ return new FuelError(ErrorCode.RPC_CONSISTENCY, error2.message, {}, error2);
30436
+ }
30437
+ if (gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT.test(error2.message)) {
30438
+ const match = error2.message.match(gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT);
30439
+ return new FuelError(ErrorCode.FUNDS_TOO_LOW, match?.[0] || error2.message, {}, error2);
30440
+ }
29990
30441
  return new FuelError(ErrorCode.INVALID_REQUEST, error2.message, {}, error2);
29991
30442
  }, "mapGqlErrorMessage");
29992
30443
  var mapGqlErrorWithIncompatibleNodeVersion = /* @__PURE__ */ __name((error2, incompatibleNodeVersionMessage) => {
@@ -30019,8 +30470,9 @@ ${incompatibleNodeVersionMessage}`,
30019
30470
 
30020
30471
  // src/providers/fuel-graphql-subscriber.ts
30021
30472
  var FuelGraphqlSubscriber = class _FuelGraphqlSubscriber {
30022
- constructor(stream) {
30473
+ constructor(stream, onEvent) {
30023
30474
  this.stream = stream;
30475
+ this.onEvent = onEvent;
30024
30476
  }
30025
30477
  static {
30026
30478
  __name(this, "FuelGraphqlSubscriber");
@@ -30028,12 +30480,13 @@ ${incompatibleNodeVersionMessage}`,
30028
30480
  static incompatibleNodeVersionMessage = false;
30029
30481
  static textDecoder = new TextDecoder();
30030
30482
  static async create(options) {
30031
- const { url, query, variables, fetchFn } = options;
30483
+ const { url, query, variables, fetchFn, operationName, onEvent } = options;
30032
30484
  const response = await fetchFn(`${url}-sub`, {
30033
30485
  method: "POST",
30034
30486
  body: JSON.stringify({
30035
30487
  query: print(query),
30036
- variables
30488
+ variables,
30489
+ operationName
30037
30490
  }),
30038
30491
  headers: {
30039
30492
  "Content-Type": "application/json",
@@ -30042,39 +30495,71 @@ ${incompatibleNodeVersionMessage}`,
30042
30495
  });
30043
30496
  const [errorReader, resultReader] = response.body.tee().map((stream) => stream.getReader());
30044
30497
  await new _FuelGraphqlSubscriber(errorReader).next();
30045
- return new _FuelGraphqlSubscriber(resultReader);
30498
+ return new _FuelGraphqlSubscriber(resultReader, onEvent);
30046
30499
  }
30047
- events = [];
30048
- parsingLeftover = "";
30049
- async next() {
30500
+ /**
30501
+ * This method will take a stream reader and parse the event from the stream.
30502
+ *
30503
+ * @param reader - The reader of the SSE stream
30504
+ * @param parsingLeftover - The leftover string from parsing the previous event
30505
+ * @returns The event parsed as a full GraphQL response, whether the stream is done and the leftover string after parsing
30506
+ */
30507
+ static async readEvent(reader, parsingLeftover = "") {
30508
+ let text = parsingLeftover;
30509
+ const regex = /data:.*\n\n/g;
30050
30510
  while (true) {
30051
- if (this.events.length > 0) {
30052
- const { data, errors: errors2 } = this.events.shift();
30053
- assertGqlResponseHasNoErrors(errors2, _FuelGraphqlSubscriber.incompatibleNodeVersionMessage);
30054
- return { value: data, done: false };
30055
- }
30056
- const { value, done } = await this.stream.read();
30057
- if (done) {
30058
- return { value, done };
30059
- }
30060
- const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
30061
- if (decoded === "") {
30062
- continue;
30063
- }
30064
- const text = `${this.parsingLeftover}${decoded}`;
30065
- const regex = /data:.*\n\n/g;
30066
30511
  const matches = [...text.matchAll(regex)].flatMap((match) => match);
30067
- matches.forEach((match) => {
30512
+ if (matches.length > 0) {
30068
30513
  try {
30069
- this.events.push(JSON.parse(match.replace(/^data:/, "")));
30514
+ const event = JSON.parse(matches[0].replace(/^data:/, ""));
30515
+ return {
30516
+ event,
30517
+ done: false,
30518
+ parsingLeftover: text.replace(matches[0], "")
30519
+ };
30070
30520
  } catch (e) {
30071
30521
  throw new FuelError(
30072
30522
  ErrorCode.STREAM_PARSING_ERROR,
30073
30523
  `Error while parsing stream data response: ${text}`
30074
30524
  );
30075
30525
  }
30076
- });
30077
- this.parsingLeftover = text.replace(matches.join(), "");
30526
+ }
30527
+ const { value, done } = await reader.read();
30528
+ if (done) {
30529
+ return { event: void 0, done, parsingLeftover: "" };
30530
+ }
30531
+ const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
30532
+ text += decoded;
30533
+ }
30534
+ }
30535
+ events = [];
30536
+ parsingLeftover = "";
30537
+ /**
30538
+ * Gets automatically called when iterating in a `for-await-of` loop.
30539
+ * It can also be called manually.
30540
+ *
30541
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next
30542
+ */
30543
+ async next() {
30544
+ while (true) {
30545
+ const nextEvent = this.events.shift();
30546
+ if (nextEvent) {
30547
+ this.onEvent?.(nextEvent);
30548
+ assertGqlResponseHasNoErrors(
30549
+ nextEvent.errors,
30550
+ _FuelGraphqlSubscriber.incompatibleNodeVersionMessage
30551
+ );
30552
+ return { value: nextEvent.data, done: false };
30553
+ }
30554
+ const { event, done, parsingLeftover } = await _FuelGraphqlSubscriber.readEvent(
30555
+ this.stream,
30556
+ this.parsingLeftover
30557
+ );
30558
+ this.parsingLeftover = parsingLeftover;
30559
+ if (done) {
30560
+ return { value: void 0, done: true };
30561
+ }
30562
+ this.events.push(event);
30078
30563
  }
30079
30564
  }
30080
30565
  /**
@@ -30120,7 +30605,7 @@ ${incompatibleNodeVersionMessage}`,
30120
30605
  case InputType.Contract: {
30121
30606
  return {
30122
30607
  type: InputType.Contract,
30123
- txID: ZeroBytes32,
30608
+ txID: hexlify(value.txID || ZeroBytes32),
30124
30609
  outputIndex: 0,
30125
30610
  balanceRoot: ZeroBytes32,
30126
30611
  stateRoot: ZeroBytes32,
@@ -30191,9 +30676,9 @@ ${incompatibleNodeVersionMessage}`,
30191
30676
  case OutputType.Variable: {
30192
30677
  return {
30193
30678
  type: OutputType.Variable,
30194
- to: ZeroBytes32,
30195
- amount: bn(0),
30196
- assetId: ZeroBytes32
30679
+ to: hexlify(value.to || ZeroBytes32),
30680
+ amount: bn(value.amount),
30681
+ assetId: hexlify(value.assetId || ZeroBytes32)
30197
30682
  };
30198
30683
  }
30199
30684
  case OutputType.ContractCreated: {
@@ -30237,6 +30722,7 @@ ${incompatibleNodeVersionMessage}`,
30237
30722
  "BlobIdAlreadyUploaded",
30238
30723
  "BlobNotFound",
30239
30724
  "BytecodeAlreadyUploaded",
30725
+ "CanNotGetGasPriceInPredicate",
30240
30726
  "ContractIdAlreadyDeployed",
30241
30727
  "ContractInstructionNotAllowed",
30242
30728
  "ContractMaxSize",
@@ -30260,6 +30746,7 @@ ${incompatibleNodeVersionMessage}`,
30260
30746
  "InvalidImmediateValue",
30261
30747
  "InvalidInstruction",
30262
30748
  "InvalidMetadataIdentifier",
30749
+ "InvalidUpgradePurposeType",
30263
30750
  "MalformedCallStructure",
30264
30751
  "MaxStaticContractsReached",
30265
30752
  "MemoryGrowthOverlap",
@@ -30276,8 +30763,10 @@ ${incompatibleNodeVersionMessage}`,
30276
30763
  "PolicyIsNotSet",
30277
30764
  "PolicyNotFound",
30278
30765
  "PredicateReturnedNonOne",
30766
+ "ProofInUploadNotFound",
30279
30767
  "ReservedRegisterNotWritable",
30280
30768
  "Revert",
30769
+ "StorageSlotsNotFound",
30281
30770
  "ThePartIsNotSequentiallyConnected",
30282
30771
  "TooManyReceipts",
30283
30772
  "TooManySlots",
@@ -30631,13 +31120,148 @@ ${incompatibleNodeVersionMessage}`,
30631
31120
  throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);
30632
31121
  }
30633
31122
  }, "deserializeReceipt");
30634
-
30635
- // src/providers/utils/receipts.ts
30636
- var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
30637
- var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
30638
- var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
30639
- (memo, receipt) => {
30640
- if (doesReceiptHaveMissingOutputVariables(receipt)) {
31123
+ var deserializeInput = /* @__PURE__ */ __name((input) => {
31124
+ let parsedInput;
31125
+ switch (input.type) {
31126
+ case "InputCoin":
31127
+ parsedInput = {
31128
+ type: InputType.Coin,
31129
+ id: input.utxoId,
31130
+ amount: bn(input.amount),
31131
+ assetId: input.assetId,
31132
+ owner: input.owner,
31133
+ txPointer: `0x${input.txPointer}`,
31134
+ witnessIndex: Number(input.coinWitnessIndex),
31135
+ predicate: input.predicate,
31136
+ predicateData: input.predicateData,
31137
+ predicateGasUsed: bn(input.predicateGasUsed)
31138
+ };
31139
+ break;
31140
+ case "InputMessage":
31141
+ parsedInput = {
31142
+ type: InputType.Message,
31143
+ nonce: input.nonce,
31144
+ amount: bn(input.amount),
31145
+ recipient: input.recipient,
31146
+ sender: input.sender,
31147
+ data: input.data,
31148
+ witnessIndex: Number(input.messageWitnessIndex),
31149
+ predicate: input.predicate,
31150
+ predicateData: input.predicateData,
31151
+ predicateGasUsed: bn(input.predicateGasUsed)
31152
+ };
31153
+ break;
31154
+ case "InputContract":
31155
+ parsedInput = {
31156
+ type: InputType.Contract,
31157
+ contractId: input.contractId,
31158
+ txPointer: `0x${input.txPointer}`,
31159
+ txID: hexlify(arrayify(input.utxoId).slice(0, 32))
31160
+ };
31161
+ break;
31162
+ default:
31163
+ assertUnreachable(input);
31164
+ }
31165
+ return parsedInput;
31166
+ }, "deserializeInput");
31167
+ var deserializeOutput = /* @__PURE__ */ __name((output) => {
31168
+ let parsedOutput;
31169
+ switch (output.type) {
31170
+ case "CoinOutput":
31171
+ parsedOutput = {
31172
+ type: OutputType.Coin,
31173
+ amount: bn(output.amount),
31174
+ assetId: output.assetId,
31175
+ to: output.to
31176
+ };
31177
+ break;
31178
+ case "ContractOutput":
31179
+ parsedOutput = {
31180
+ type: OutputType.Contract,
31181
+ inputIndex: Number(output.inputIndex)
31182
+ };
31183
+ break;
31184
+ case "ChangeOutput":
31185
+ parsedOutput = {
31186
+ type: OutputType.Change,
31187
+ assetId: output.assetId,
31188
+ to: output.to
31189
+ };
31190
+ break;
31191
+ case "ContractCreated":
31192
+ parsedOutput = {
31193
+ type: OutputType.ContractCreated,
31194
+ stateRoot: output.stateRoot,
31195
+ contractId: output.contract
31196
+ };
31197
+ break;
31198
+ case "VariableOutput":
31199
+ parsedOutput = {
31200
+ type: OutputType.Variable,
31201
+ amount: bn(output.amount),
31202
+ assetId: output.assetId,
31203
+ to: output.to
31204
+ };
31205
+ break;
31206
+ default:
31207
+ assertUnreachable(output);
31208
+ }
31209
+ return parsedOutput;
31210
+ }, "deserializeOutput");
31211
+ var deserializeProcessedTxOutput = /* @__PURE__ */ __name((output) => {
31212
+ let parsedOutput;
31213
+ switch (output.type) {
31214
+ case "CoinOutput":
31215
+ parsedOutput = {
31216
+ type: OutputType.Coin,
31217
+ amount: bn(output.amount),
31218
+ assetId: output.assetId,
31219
+ to: output.to
31220
+ };
31221
+ break;
31222
+ case "ContractOutput":
31223
+ parsedOutput = {
31224
+ type: OutputType.Contract,
31225
+ inputIndex: Number(output.inputIndex),
31226
+ balanceRoot: output.balanceRoot,
31227
+ stateRoot: output.stateRoot
31228
+ };
31229
+ break;
31230
+ case "ChangeOutput":
31231
+ parsedOutput = {
31232
+ type: OutputType.Change,
31233
+ assetId: output.assetId,
31234
+ to: output.to,
31235
+ amount: bn(output.amount)
31236
+ };
31237
+ break;
31238
+ case "ContractCreated":
31239
+ parsedOutput = {
31240
+ type: OutputType.ContractCreated,
31241
+ stateRoot: output.stateRoot,
31242
+ contractId: output.contract
31243
+ };
31244
+ break;
31245
+ case "VariableOutput":
31246
+ parsedOutput = {
31247
+ type: OutputType.Variable,
31248
+ amount: bn(output.amount),
31249
+ assetId: output.assetId,
31250
+ to: output.to
31251
+ };
31252
+ break;
31253
+ default:
31254
+ assertUnreachable(output);
31255
+ }
31256
+ return parsedOutput;
31257
+ }, "deserializeProcessedTxOutput");
31258
+
31259
+ // src/providers/utils/receipts.ts
31260
+ var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
31261
+ var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
31262
+ var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
31263
+ (memo, receipt) => {
31264
+ if (doesReceiptHaveMissingOutputVariables(receipt)) {
30641
31265
  memo.missingOutputVariables.push(receipt);
30642
31266
  }
30643
31267
  if (doesReceiptHaveMissingContractId(receipt)) {
@@ -30894,11 +31518,12 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
30894
31518
  });
30895
31519
  }, "assembleRevertError");
30896
31520
  var extractTxError = /* @__PURE__ */ __name((params) => {
30897
- const { receipts, statusReason, logs } = params;
31521
+ const { receipts, statusReason, logs, groupedLogs } = params;
30898
31522
  const isPanic = receipts.some(({ type: type3 }) => type3 === ReceiptType.Panic);
30899
31523
  const isRevert = receipts.some(({ type: type3 }) => type3 === ReceiptType.Revert);
30900
31524
  const metadata = {
30901
31525
  logs,
31526
+ groupedLogs,
30902
31527
  receipts,
30903
31528
  panic: isPanic,
30904
31529
  revert: isRevert,
@@ -30910,6 +31535,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
30910
31535
  return assembleRevertError(receipts, logs, metadata);
30911
31536
  }, "extractTxError");
30912
31537
 
31538
+ // src/providers/utils/merge-quantities.ts
31539
+ var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
31540
+ const resultMap = {};
31541
+ function addToMap({ amount, assetId }) {
31542
+ if (resultMap[assetId]) {
31543
+ resultMap[assetId] = resultMap[assetId].add(amount);
31544
+ } else {
31545
+ resultMap[assetId] = amount;
31546
+ }
31547
+ }
31548
+ __name(addToMap, "addToMap");
31549
+ coinQuantities.forEach((arr) => arr.forEach(addToMap));
31550
+ return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
31551
+ }, "mergeQuantities");
31552
+
30913
31553
  // src/providers/transaction-request/errors.ts
30914
31554
  var NoWitnessAtIndexError = class extends Error {
30915
31555
  constructor(index) {
@@ -31829,6 +32469,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31829
32469
  * @param account - The account to fund the transaction.
31830
32470
  * @param params - The parameters for the transaction cost.
31831
32471
  * @returns The current instance of the `ScriptTransactionRequest` funded.
32472
+ *
32473
+ * @deprecated Use `provider.assembleTx` instead.
32474
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
31832
32475
  */
31833
32476
  async estimateAndFund(account, { signatureCallback, quantities = [] } = {}) {
31834
32477
  const txCost = await account.getTransactionCost(this, { signatureCallback, quantities });
@@ -31912,6 +32555,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31912
32555
  }
31913
32556
  return this.outputs.length - 1;
31914
32557
  }
32558
+ /**
32559
+ * Adds a variable output to the transaction request.
32560
+ *
32561
+ * @param to - The recipient address as a BytesLike object. Defaults to ZeroBytes32 if not provided.
32562
+ * @param amount - The amount to be transferred as a BigNumberish object. Defaults to 0 if not provided.
32563
+ * @param assetId - The asset ID as a BytesLike object. Defaults to ZeroBytes32 if not provided.
32564
+ */
32565
+ addVariableOutput(to, amount, assetId) {
32566
+ this.pushOutput({
32567
+ type: OutputType.Variable,
32568
+ to,
32569
+ amount,
32570
+ assetId
32571
+ });
32572
+ }
31915
32573
  /**
31916
32574
  * Calculates the maximum gas for the transaction.
31917
32575
  *
@@ -32988,6 +33646,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32988
33646
  return "submitted" /* submitted */;
32989
33647
  case "SqueezedOutStatus":
32990
33648
  return "squeezedout" /* squeezedout */;
33649
+ case "PreconfirmationSuccessStatus":
33650
+ return "preconfirmationSuccess" /* preconfirmationSuccess */;
33651
+ case "PreconfirmationFailureStatus":
33652
+ return "preconfirmationFailure" /* preconfirmationFailure */;
32991
33653
  default:
32992
33654
  throw new FuelError(
32993
33655
  ErrorCode.INVALID_TRANSACTION_STATUS,
@@ -32995,15 +33657,30 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32995
33657
  );
32996
33658
  }
32997
33659
  }, "getTransactionStatusName");
33660
+ var extractResolvedOutputs = /* @__PURE__ */ __name((serializedOutputs) => {
33661
+ const resolvedOutputs = [];
33662
+ serializedOutputs?.forEach(
33663
+ ({ utxoId, output }) => resolvedOutputs.push({
33664
+ utxoId,
33665
+ output: deserializeProcessedTxOutput(output)
33666
+ })
33667
+ );
33668
+ return resolvedOutputs;
33669
+ }, "extractResolvedOutputs");
32998
33670
  var processGraphqlStatus = /* @__PURE__ */ __name((gqlTransactionStatus) => {
32999
33671
  let time;
33000
33672
  let blockId;
33001
33673
  let status;
33002
33674
  let totalFee;
33003
33675
  let totalGas;
33676
+ let receipts;
33677
+ let resolvedOutputs = [];
33678
+ let errorReason;
33004
33679
  let isStatusFailure = false;
33005
33680
  let isStatusSuccess = false;
33006
33681
  let isStatusPending = false;
33682
+ let isStatusPreConfirmationSuccess = false;
33683
+ let isStatusPreConfirmationFailure = false;
33007
33684
  if (gqlTransactionStatus?.type) {
33008
33685
  status = getTransactionStatusName(gqlTransactionStatus.type);
33009
33686
  switch (gqlTransactionStatus.type) {
@@ -33011,6 +33688,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33011
33688
  time = gqlTransactionStatus.time;
33012
33689
  blockId = gqlTransactionStatus.block?.id;
33013
33690
  isStatusSuccess = true;
33691
+ receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
33014
33692
  totalFee = bn(gqlTransactionStatus.totalFee);
33015
33693
  totalGas = bn(gqlTransactionStatus.totalGas);
33016
33694
  break;
@@ -33019,12 +33697,28 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33019
33697
  blockId = gqlTransactionStatus.block?.id;
33020
33698
  isStatusFailure = true;
33021
33699
  totalFee = bn(gqlTransactionStatus.totalFee);
33700
+ receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
33022
33701
  totalGas = bn(gqlTransactionStatus.totalGas);
33023
33702
  break;
33024
33703
  case "SubmittedStatus":
33025
33704
  time = gqlTransactionStatus.time;
33026
33705
  isStatusPending = true;
33027
33706
  break;
33707
+ case "PreconfirmationSuccessStatus":
33708
+ isStatusPreConfirmationSuccess = true;
33709
+ totalFee = bn(gqlTransactionStatus.totalFee);
33710
+ totalGas = bn(gqlTransactionStatus.totalGas);
33711
+ receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
33712
+ resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
33713
+ break;
33714
+ case "PreconfirmationFailureStatus":
33715
+ isStatusPreConfirmationFailure = true;
33716
+ totalFee = bn(gqlTransactionStatus.totalFee);
33717
+ totalGas = bn(gqlTransactionStatus.totalGas);
33718
+ receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
33719
+ resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
33720
+ errorReason = gqlTransactionStatus.reason;
33721
+ break;
33028
33722
  default:
33029
33723
  }
33030
33724
  }
@@ -33034,9 +33728,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33034
33728
  status,
33035
33729
  totalFee,
33036
33730
  totalGas,
33731
+ receipts,
33037
33732
  isStatusFailure,
33038
33733
  isStatusSuccess,
33039
- isStatusPending
33734
+ isStatusPending,
33735
+ isStatusPreConfirmationSuccess,
33736
+ isStatusPreConfirmationFailure,
33737
+ resolvedOutputs,
33738
+ errorReason
33040
33739
  };
33041
33740
  return processedGraphqlStatus;
33042
33741
  }, "processGraphqlStatus");
@@ -33121,9 +33820,85 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33121
33820
  return transactionSummary;
33122
33821
  }
33123
33822
  __name(assembleTransactionSummary, "assembleTransactionSummary");
33823
+ function assemblePreConfirmationTransactionSummary(params) {
33824
+ const { id, gqlTransactionStatus, transactionRequest, baseAssetId, maxInputs, abiMap } = params;
33825
+ let type3;
33826
+ let operations;
33827
+ let gasUsed;
33828
+ let tip;
33829
+ let transaction;
33830
+ let mintedAssets;
33831
+ let burnedAssets;
33832
+ const {
33833
+ isStatusFailure,
33834
+ isStatusSuccess,
33835
+ isStatusPending,
33836
+ status,
33837
+ receipts,
33838
+ resolvedOutputs,
33839
+ errorReason,
33840
+ totalFee,
33841
+ isStatusPreConfirmationFailure,
33842
+ isStatusPreConfirmationSuccess
33843
+ } = processGraphqlStatus(gqlTransactionStatus);
33844
+ if (receipts) {
33845
+ gasUsed = getGasUsedFromReceipts(receipts);
33846
+ mintedAssets = extractMintedAssetsFromReceipts(receipts);
33847
+ burnedAssets = extractBurnedAssetsFromReceipts(receipts);
33848
+ }
33849
+ if (transactionRequest) {
33850
+ transaction = transactionRequest.toTransaction();
33851
+ type3 = getTransactionTypeName(transaction.type);
33852
+ tip = bn(transaction.policies?.find((policy) => policy.type === PolicyType.Tip)?.data);
33853
+ if (receipts) {
33854
+ const rawPayload = hexlify(new TransactionCoder().encode(transaction));
33855
+ operations = getOperations({
33856
+ transactionType: transaction.type,
33857
+ inputs: transaction.inputs || [],
33858
+ outputs: transaction.outputs || [],
33859
+ receipts,
33860
+ rawPayload,
33861
+ abiMap,
33862
+ maxInputs,
33863
+ baseAssetId
33864
+ });
33865
+ }
33866
+ }
33867
+ const transactionSummary = {
33868
+ id,
33869
+ fee: totalFee,
33870
+ type: type3,
33871
+ status,
33872
+ receipts,
33873
+ gasUsed,
33874
+ tip,
33875
+ isStatusPreConfirmationFailure,
33876
+ isStatusPreConfirmationSuccess,
33877
+ isStatusFailure,
33878
+ isStatusSuccess,
33879
+ isStatusPending,
33880
+ ...transaction && {
33881
+ isTypeMint: isTypeMint(transaction.type),
33882
+ isTypeCreate: isTypeCreate(transaction.type),
33883
+ isTypeScript: isTypeScript(transaction.type),
33884
+ isTypeUpgrade: isTypeUpgrade(transaction.type),
33885
+ isTypeUpload: isTypeUpload(transaction.type),
33886
+ isTypeBlob: isTypeBlob(transaction.type)
33887
+ },
33888
+ mintedAssets,
33889
+ burnedAssets,
33890
+ resolvedOutputs,
33891
+ errorReason,
33892
+ transaction,
33893
+ operations
33894
+ };
33895
+ return transactionSummary;
33896
+ }
33897
+ __name(assemblePreConfirmationTransactionSummary, "assemblePreConfirmationTransactionSummary");
33124
33898
 
33125
- // src/providers/transaction-response/getDecodedLogs.ts
33126
- function getDecodedLogs(receipts, mainAbi, externalAbis = {}) {
33899
+ // src/providers/transaction-response/getAllDecodedLogs.ts
33900
+ function getAllDecodedLogs(opts) {
33901
+ const { receipts, mainAbi, externalAbis = {} } = opts;
33127
33902
  let mainContract = "";
33128
33903
  if (mainAbi.programType === "contract") {
33129
33904
  const firstCallReceipt = receipts.find(
@@ -33131,54 +33906,27 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33131
33906
  );
33132
33907
  mainContract = firstCallReceipt.to;
33133
33908
  }
33134
- return receipts.reduce((logs, receipt) => {
33135
- if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {
33136
- const isLogFromMainAbi = receipt.id === ZeroBytes32 || mainContract === receipt.id;
33137
- const isDecodable = isLogFromMainAbi || externalAbis[receipt.id];
33138
- if (isDecodable) {
33139
- const interfaceToUse = isLogFromMainAbi ? new Interface(mainAbi) : new Interface(externalAbis[receipt.id]);
33140
- const data = receipt.type === ReceiptType.Log ? new BigNumberCoder("u64").encode(receipt.ra) : receipt.data;
33141
- const [decodedLog] = interfaceToUse.decodeLog(data, receipt.rb.toString());
33142
- logs.push(decodedLog);
33909
+ return receipts.reduce(
33910
+ ({ logs, groupedLogs }, receipt) => {
33911
+ if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {
33912
+ const isLogFromMainAbi = receipt.id === ZeroBytes32 || mainContract === receipt.id;
33913
+ const isDecodable = isLogFromMainAbi || externalAbis[receipt.id];
33914
+ if (isDecodable) {
33915
+ const interfaceToUse = isLogFromMainAbi ? new Interface(mainAbi) : new Interface(externalAbis[receipt.id]);
33916
+ const data = receipt.type === ReceiptType.Log ? new BigNumberCoder("u64").encode(receipt.ra) : receipt.data;
33917
+ const [decodedLog] = interfaceToUse.decodeLog(data, receipt.rb.toString());
33918
+ logs.push(decodedLog);
33919
+ groupedLogs[receipt.id] = [...groupedLogs[receipt.id] || [], decodedLog];
33920
+ }
33143
33921
  }
33144
- }
33145
- return logs;
33146
- }, []);
33922
+ return { logs, groupedLogs };
33923
+ },
33924
+ { logs: [], groupedLogs: {} }
33925
+ );
33147
33926
  }
33148
- __name(getDecodedLogs, "getDecodedLogs");
33927
+ __name(getAllDecodedLogs, "getAllDecodedLogs");
33149
33928
 
33150
33929
  // src/providers/transaction-response/transaction-response.ts
33151
- function mapGqlOutputsToTxOutputs(outputs) {
33152
- return outputs.map((o) => {
33153
- const obj = "amount" in o ? { ...o, amount: bn(o.amount) } : o;
33154
- switch (obj.type) {
33155
- case "CoinOutput":
33156
- return { ...obj, type: OutputType.Coin };
33157
- case "ContractOutput":
33158
- return {
33159
- ...obj,
33160
- type: OutputType.Contract,
33161
- inputIndex: parseInt(obj.inputIndex, 10)
33162
- };
33163
- case "ChangeOutput":
33164
- return {
33165
- ...obj,
33166
- type: OutputType.Change
33167
- };
33168
- case "VariableOutput":
33169
- return { ...obj, type: OutputType.Variable };
33170
- case "ContractCreated":
33171
- return {
33172
- ...obj,
33173
- type: OutputType.ContractCreated,
33174
- contractId: obj.contract
33175
- };
33176
- default:
33177
- return assertUnreachable(obj);
33178
- }
33179
- });
33180
- }
33181
- __name(mapGqlOutputsToTxOutputs, "mapGqlOutputsToTxOutputs");
33182
33930
  var TransactionResponse = class _TransactionResponse {
33183
33931
  /**
33184
33932
  * Constructor for `TransactionResponse`.
@@ -33188,11 +33936,16 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33188
33936
  */
33189
33937
  constructor(tx, provider, chainId, abis, submitTxSubscription) {
33190
33938
  this.submitTxSubscription = submitTxSubscription;
33191
- this.id = typeof tx === "string" ? tx : tx.getTransactionId(chainId);
33939
+ if (typeof tx === "string") {
33940
+ this.id = tx;
33941
+ } else {
33942
+ this.id = tx.getTransactionId(chainId);
33943
+ this.request = tx;
33944
+ }
33192
33945
  this.provider = provider;
33193
33946
  this.abis = abis;
33194
- this.request = typeof tx === "string" ? void 0 : tx;
33195
33947
  this.waitForResult = this.waitForResult.bind(this);
33948
+ this.waitForPreConfirmation = this.waitForPreConfirmation.bind(this);
33196
33949
  }
33197
33950
  static {
33198
33951
  __name(this, "TransactionResponse");
@@ -33208,6 +33961,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33208
33961
  request;
33209
33962
  status;
33210
33963
  abis;
33964
+ waitingForStreamData = false;
33965
+ statusResolvers = /* @__PURE__ */ new Map();
33966
+ preConfirmationStatus;
33211
33967
  /**
33212
33968
  * Async constructor for `TransactionResponse`. This method can be used to create
33213
33969
  * an instance of `TransactionResponse` and wait for the transaction to be fetched
@@ -33239,29 +33995,38 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33239
33995
  }
33240
33996
  return input;
33241
33997
  });
33242
- tx.outputs = mapGqlOutputsToTxOutputs(status.transaction.outputs);
33243
- if ("receiptsRoot" in status.transaction) {
33998
+ tx.outputs = status.transaction.outputs.map(deserializeProcessedTxOutput);
33999
+ if (status.transaction.receiptsRoot) {
33244
34000
  tx.receiptsRoot = status.transaction.receiptsRoot;
33245
34001
  }
33246
34002
  }
33247
34003
  }
33248
34004
  async getTransaction() {
33249
34005
  if (this.request) {
33250
- const tx = this.request.toTransaction();
33251
- this.applyMalleableSubscriptionFields(tx);
34006
+ const tx2 = this.request.toTransaction();
34007
+ this.applyMalleableSubscriptionFields(tx2);
33252
34008
  return {
33253
- tx,
34009
+ tx: tx2,
33254
34010
  bytes: this.request.toTransactionBytes()
33255
34011
  };
33256
34012
  }
33257
34013
  const gqlTransaction = this.gqlTransaction ?? await this.fetch();
34014
+ const { rawPayload } = gqlTransaction;
34015
+ const bytes = arrayify(rawPayload);
34016
+ const [tx] = new TransactionCoder().decode(bytes, 0);
33258
34017
  return {
33259
- tx: this.decodeTransaction(gqlTransaction),
33260
- bytes: arrayify(gqlTransaction.rawPayload)
34018
+ tx,
34019
+ bytes
33261
34020
  };
33262
34021
  }
34022
+ /**
34023
+ *
34024
+ * NOTE: This method is only called within `getTransactionSummary`, which is invoked after `getTransaction`.
34025
+ * Since `getTransaction` only resolves once the transaction has been processed,
34026
+ * the status at this point is guaranteed to be either `SuccessStatus` or `FailureStatus`.
34027
+ */
33263
34028
  getReceipts() {
33264
- const status = this.status ?? this.gqlTransaction?.status;
34029
+ const status = this.getTransactionStatus();
33265
34030
  switch (status?.type) {
33266
34031
  case "SuccessStatus":
33267
34032
  case "FailureStatus":
@@ -33294,18 +34059,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33294
34059
  this.gqlTransaction = response.transaction;
33295
34060
  return response.transaction;
33296
34061
  }
33297
- /**
33298
- * Decode the raw payload of the transaction.
33299
- *
33300
- * @param transactionWithReceipts - The transaction with receipts object.
33301
- * @returns The decoded transaction.
33302
- */
33303
- decodeTransaction(transactionWithReceipts) {
33304
- return new TransactionCoder().decode(
33305
- arrayify(transactionWithReceipts.rawPayload),
33306
- 0
33307
- )?.[0];
33308
- }
33309
34062
  /**
33310
34063
  * Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will
33311
34064
  * fetch it from the provider
@@ -33316,7 +34069,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33316
34069
  async getTransactionSummary(contractsAbiMap) {
33317
34070
  const { tx: transaction, bytes: transactionBytes } = await this.getTransaction();
33318
34071
  const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = await this.provider.getGasConfig();
33319
- const totalFee = getTotalFeeFromStatus(this.status ?? this.gqlTransaction?.status);
34072
+ const transactionStatus = this.getTransactionStatus();
34073
+ const totalFee = getTotalFeeFromStatus(transactionStatus);
33320
34074
  const gasPrice = totalFee ? bn(0) : await this.provider.getLatestGasPrice();
33321
34075
  const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
33322
34076
  const baseAssetId = await this.provider.getBaseAssetId();
@@ -33325,7 +34079,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33325
34079
  receipts: this.getReceipts(),
33326
34080
  transaction,
33327
34081
  transactionBytes,
33328
- gqlTransactionStatus: this.status ?? this.gqlTransaction?.status,
34082
+ gqlTransactionStatus: transactionStatus,
33329
34083
  gasPerByte,
33330
34084
  gasPriceFactor,
33331
34085
  abiMap: contractsAbiMap,
@@ -33337,29 +34091,92 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33337
34091
  });
33338
34092
  return transactionSummary;
33339
34093
  }
34094
+ async getPreConfirmationTransactionSummary(contractsAbiMap) {
34095
+ const baseAssetId = await this.provider.getBaseAssetId();
34096
+ const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
34097
+ const transactionSummary = assemblePreConfirmationTransactionSummary({
34098
+ id: this.id,
34099
+ gqlTransactionStatus: this.preConfirmationStatus || this.status,
34100
+ baseAssetId,
34101
+ maxInputs,
34102
+ abiMap: contractsAbiMap,
34103
+ transactionRequest: this.request
34104
+ });
34105
+ return transactionSummary;
34106
+ }
34107
+ resolveStatus(type3) {
34108
+ const resolvers = this.statusResolvers.get(type3) || [];
34109
+ resolvers.forEach((resolve) => resolve());
34110
+ this.statusResolvers.delete(type3);
34111
+ }
34112
+ async waitForStatus(type3) {
34113
+ return new Promise((resolve, reject) => {
34114
+ const resolvers = this.statusResolvers.get(type3) || [];
34115
+ resolvers.push(() => {
34116
+ resolve();
34117
+ });
34118
+ this.statusResolvers.set(type3, resolvers);
34119
+ this.waitForStatusChange().catch(reject);
34120
+ });
34121
+ }
34122
+ /**
34123
+ * Waits for the status change of the transaction.
34124
+ * If the transaction is already in a final state, it will return immediately.
34125
+ * If the transaction is not in a final state, it will wait for the status change.
34126
+ * If we are already subscribed to the status change, it will return immediately.
34127
+ */
33340
34128
  async waitForStatusChange() {
33341
- const status = this.gqlTransaction?.status?.type;
33342
- if (status && status !== "SubmittedStatus") {
34129
+ const type3 = this.status?.type;
34130
+ if (type3 && (type3 === "FailureStatus" || type3 === "SuccessStatus")) {
34131
+ this.resolveStatus("preConfirmation");
34132
+ this.resolveStatus("confirmation");
33343
34133
  return;
33344
34134
  }
34135
+ if (this.waitingForStreamData) {
34136
+ return;
34137
+ }
34138
+ this.waitingForStreamData = true;
33345
34139
  const subscription = this.submitTxSubscription ?? await this.provider.operations.statusChange({
33346
- transactionId: this.id
34140
+ transactionId: this.id,
34141
+ includePreConfirmation: true
33347
34142
  });
33348
34143
  for await (const sub of subscription) {
33349
34144
  const statusChange = "statusChange" in sub ? sub.statusChange : sub.submitAndAwaitStatus;
33350
34145
  this.status = statusChange;
33351
34146
  if (statusChange.type === "SqueezedOutStatus") {
33352
- this.unsetResourceCache();
33353
34147
  throw new FuelError(
33354
34148
  ErrorCode.TRANSACTION_SQUEEZED_OUT,
33355
34149
  `Transaction Squeezed Out with reason: ${statusChange.reason}`
33356
34150
  );
33357
34151
  }
33358
- if (statusChange.type !== "SubmittedStatus") {
34152
+ if (statusChange.type === "PreconfirmationSuccessStatus" || statusChange.type === "PreconfirmationFailureStatus") {
34153
+ this.preConfirmationStatus = statusChange;
34154
+ this.resolveStatus("preConfirmation");
34155
+ }
34156
+ if (statusChange.type === "SuccessStatus" || statusChange.type === "FailureStatus") {
34157
+ this.resolveStatus("confirmation");
34158
+ this.resolveStatus("preConfirmation");
34159
+ this.waitingForStreamData = false;
33359
34160
  break;
33360
34161
  }
33361
34162
  }
33362
34163
  }
34164
+ async waitForConfirmationStatuses() {
34165
+ try {
34166
+ await this.waitForStatus("confirmation");
34167
+ } catch (error2) {
34168
+ this.unsetResourceCache();
34169
+ throw error2;
34170
+ }
34171
+ }
34172
+ async waitForPreConfirmationStatuses() {
34173
+ try {
34174
+ await this.waitForStatus("preConfirmation");
34175
+ } catch (error2) {
34176
+ this.unsetResourceCache();
34177
+ throw error2;
34178
+ }
34179
+ }
33363
34180
  /**
33364
34181
  * Assembles the result of a transaction by retrieving the transaction summary,
33365
34182
  * decoding logs (if available), and handling transaction failure.
@@ -33377,37 +34194,69 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33377
34194
  const transactionResult = {
33378
34195
  ...transactionSummary
33379
34196
  };
33380
- let logs = [];
34197
+ let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
33381
34198
  if (this.abis) {
33382
- logs = getDecodedLogs(
33383
- transactionSummary.receipts,
33384
- this.abis.main,
33385
- this.abis.otherContractsAbis
33386
- );
34199
+ ({ logs, groupedLogs } = getAllDecodedLogs({
34200
+ receipts: transactionSummary.receipts,
34201
+ mainAbi: this.abis.main,
34202
+ externalAbis: this.abis.otherContractsAbis
34203
+ }));
33387
34204
  transactionResult.logs = logs;
34205
+ transactionResult.groupedLogs = groupedLogs;
33388
34206
  }
33389
34207
  const { receipts } = transactionResult;
33390
- const status = this.status ?? this.gqlTransaction?.status;
34208
+ const status = this.getTransactionStatus();
33391
34209
  if (status?.type === "FailureStatus") {
33392
34210
  const { reason } = status;
33393
34211
  throw extractTxError({
33394
34212
  receipts,
33395
34213
  statusReason: reason,
33396
- logs
34214
+ logs,
34215
+ groupedLogs
33397
34216
  });
33398
34217
  }
33399
34218
  return transactionResult;
33400
34219
  }
34220
+ async assemblePreConfirmationResult(contractsAbiMap) {
34221
+ const transactionSummary = await this.getPreConfirmationTransactionSummary(contractsAbiMap);
34222
+ const transactionResult = {
34223
+ ...transactionSummary,
34224
+ logs: [],
34225
+ groupedLogs: {}
34226
+ };
34227
+ let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
34228
+ if (this.abis && transactionSummary.receipts) {
34229
+ ({ logs, groupedLogs } = getAllDecodedLogs({
34230
+ receipts: transactionSummary.receipts,
34231
+ mainAbi: this.abis.main,
34232
+ externalAbis: this.abis.otherContractsAbis
34233
+ }));
34234
+ transactionResult.logs = logs;
34235
+ transactionResult.groupedLogs = groupedLogs;
34236
+ }
34237
+ return transactionResult;
34238
+ }
33401
34239
  /**
33402
34240
  * Waits for transaction to complete and returns the result.
33403
34241
  *
33404
34242
  * @returns The completed transaction result
33405
34243
  */
33406
34244
  async waitForResult(contractsAbiMap) {
33407
- await this.waitForStatusChange();
34245
+ await this.waitForConfirmationStatuses();
33408
34246
  this.unsetResourceCache();
33409
34247
  return this.assembleResult(contractsAbiMap);
33410
34248
  }
34249
+ /**
34250
+ * Waits for the transaction's pre-confirmation and returns the result.
34251
+ *
34252
+ * @param contractsAbiMap - The contracts ABI map.
34253
+ * @returns The pre-confirmed transaction result
34254
+ */
34255
+ async waitForPreConfirmation(contractsAbiMap) {
34256
+ await this.waitForPreConfirmationStatuses();
34257
+ this.unsetResourceCache();
34258
+ return this.assemblePreConfirmationResult(contractsAbiMap);
34259
+ }
33411
34260
  /**
33412
34261
  * Waits for transaction to complete and returns the result.
33413
34262
  *
@@ -33419,6 +34268,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33419
34268
  unsetResourceCache() {
33420
34269
  this.provider.cache?.unset(this.id);
33421
34270
  }
34271
+ getTransactionStatus() {
34272
+ return this.status ?? this.gqlTransaction?.status;
34273
+ }
33422
34274
  };
33423
34275
 
33424
34276
  // src/providers/utils/auto-retry-fetch.ts
@@ -33459,21 +34311,22 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33459
34311
  }
33460
34312
  __name(autoRetryFetch, "autoRetryFetch");
33461
34313
 
33462
- // src/providers/utils/helpers.ts
33463
- var adjustResourcesToExclude = /* @__PURE__ */ __name((params) => {
33464
- const { userInput, cached, maxInputs } = params;
33465
- const final = { ...userInput };
33466
- let total = final.utxos.length + final.messages.length;
33467
- if (total >= maxInputs) {
33468
- return final;
33469
- }
33470
- final.utxos = [...final.utxos, ...cached.utxos.slice(0, maxInputs - total)];
33471
- total = final.utxos.length + final.messages.length;
33472
- if (total < maxInputs) {
33473
- final.messages = [...final.messages, ...cached.messages.slice(0, maxInputs - total)];
34314
+ // src/providers/utils/parse-graphql-response.ts
34315
+ var parseGraphqlResponse = /* @__PURE__ */ __name(async (options) => {
34316
+ const { response, isSubscription } = options;
34317
+ let extensions;
34318
+ const responseClone = response.clone();
34319
+ if (isSubscription) {
34320
+ const reader = responseClone.body?.getReader();
34321
+ const { event } = await FuelGraphqlSubscriber.readEvent(reader);
34322
+ extensions = event?.extensions;
34323
+ } else {
34324
+ extensions = (await responseClone.json()).extensions;
33474
34325
  }
33475
- return final;
33476
- }, "adjustResourcesToExclude");
34326
+ return {
34327
+ extensions
34328
+ };
34329
+ }, "parseGraphqlResponse");
33477
34330
 
33478
34331
  // src/providers/utils/validate-pagination-args.ts
33479
34332
  var validatePaginationArgs = /* @__PURE__ */ __name((params) => {
@@ -33518,22 +34371,48 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33518
34371
  var BLOCKS_PAGE_SIZE_LIMIT = 5;
33519
34372
  var DEFAULT_RESOURCE_CACHE_TTL = 2e4;
33520
34373
  var GAS_USED_MODIFIER = 1.2;
34374
+ var WRITE_OPERATIONS = [
34375
+ "submit",
34376
+ "submitAndAwaitStatus",
34377
+ "produceBlocks"
34378
+ ];
33521
34379
  var Provider = class _Provider {
33522
34380
  static {
33523
34381
  __name(this, "Provider");
33524
34382
  }
33525
34383
  operations;
33526
34384
  cache;
33527
- /** @hidden */
33528
- static clearChainAndNodeCaches() {
34385
+ /**
34386
+ * @hidden
34387
+ * @param url - If provided, clears cache only for given url
34388
+ */
34389
+ static clearChainAndNodeCaches(url) {
34390
+ if (url) {
34391
+ delete _Provider.inflightFetchChainAndNodeInfoRequests[url];
34392
+ delete _Provider.chainInfoCache[url];
34393
+ delete _Provider.nodeInfoCache[url];
34394
+ delete _Provider.currentBlockHeightCache[url];
34395
+ return;
34396
+ }
33529
34397
  _Provider.inflightFetchChainAndNodeInfoRequests = {};
33530
34398
  _Provider.nodeInfoCache = {};
33531
34399
  _Provider.chainInfoCache = {};
34400
+ _Provider.currentBlockHeightCache = {};
33532
34401
  }
33533
34402
  /** @hidden */
33534
34403
  url;
33535
34404
  /** @hidden */
33536
34405
  urlWithoutAuth;
34406
+ /**
34407
+ * Governs whether to include the required block height in the request body
34408
+ * for block-sensitive operations like when submitting a transaction.
34409
+ *
34410
+ * This ensures that the operation is executed at the correct block height,
34411
+ * regardless of which node in the network the request is routed to.
34412
+ *
34413
+ * `true` by default.
34414
+ */
34415
+ static ENABLE_RPC_CONSISTENCY = true;
33537
34416
  /** @hidden */
33538
34417
  static inflightFetchChainAndNodeInfoRequests = {};
33539
34418
  /** @hidden */
@@ -33541,6 +34420,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33541
34420
  /** @hidden */
33542
34421
  static nodeInfoCache = {};
33543
34422
  /** @hidden */
34423
+ static currentBlockHeightCache = {};
34424
+ /** @hidden */
33544
34425
  static incompatibleNodeVersionMessage = "";
33545
34426
  /** @hidden */
33546
34427
  consensusParametersTimestamp;
@@ -33552,6 +34433,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33552
34433
  headers: void 0,
33553
34434
  cache: void 0
33554
34435
  };
34436
+ static extractOperationName(body) {
34437
+ return body?.toString().match(/"operationName":"(.+)"/)?.[1];
34438
+ }
34439
+ static isWriteOperation(body) {
34440
+ return WRITE_OPERATIONS.includes(this.extractOperationName(body));
34441
+ }
34442
+ static normalizeUrl(url) {
34443
+ return url.replace(/-sub$/, "");
34444
+ }
34445
+ static hasWriteOperationHappened(url) {
34446
+ return isDefined(_Provider.currentBlockHeightCache[this.normalizeUrl(url)]);
34447
+ }
33555
34448
  /**
33556
34449
  * @hidden
33557
34450
  */
@@ -33569,9 +34462,57 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33569
34462
  if (options.requestMiddleware) {
33570
34463
  fullRequest = await options.requestMiddleware(fullRequest);
33571
34464
  }
33572
- return options.fetch ? options.fetch(url, fullRequest, options) : fetch(url, fullRequest);
34465
+ if (_Provider.ENABLE_RPC_CONSISTENCY && _Provider.hasWriteOperationHappened(url)) {
34466
+ _Provider.applyBlockHeight(fullRequest, url);
34467
+ }
34468
+ return _Provider.fetchAndProcessBlockHeight(url, fullRequest, options);
33573
34469
  }, retryOptions);
33574
34470
  }
34471
+ static applyBlockHeight(request, url) {
34472
+ const normalizedUrl = this.normalizeUrl(url);
34473
+ const currentBlockHeight = _Provider.currentBlockHeightCache[normalizedUrl] ?? 0;
34474
+ request.body = request.body?.toString().replace(/}$/, `,"extensions":{"required_fuel_block_height":${currentBlockHeight}}}`);
34475
+ }
34476
+ static async fetchAndProcessBlockHeight(url, request, options) {
34477
+ const fetchFn = /* @__PURE__ */ __name(() => options.fetch ? options.fetch(url, request, options) : fetch(url, request), "fetchFn");
34478
+ const isWriteOperation = _Provider.isWriteOperation(request.body);
34479
+ if (isWriteOperation && !_Provider.hasWriteOperationHappened(url)) {
34480
+ _Provider.currentBlockHeightCache[_Provider.normalizeUrl(url)] = 0;
34481
+ }
34482
+ let response = await fetchFn();
34483
+ if (!_Provider.ENABLE_RPC_CONSISTENCY) {
34484
+ return response;
34485
+ }
34486
+ const retryOptions = {
34487
+ maxRetries: 5,
34488
+ baseDelay: 500
34489
+ };
34490
+ for (let retriesLeft = retryOptions.maxRetries; retriesLeft > 0; --retriesLeft) {
34491
+ const { extensions } = await parseGraphqlResponse({
34492
+ response,
34493
+ isSubscription: url.endsWith("-sub")
34494
+ });
34495
+ _Provider.setCurrentBlockHeight(url, extensions?.current_fuel_block_height);
34496
+ if (!extensions?.fuel_block_height_precondition_failed) {
34497
+ break;
34498
+ }
34499
+ const retryAttempt = retryOptions.maxRetries - retriesLeft + 1;
34500
+ const sleepTime = getWaitDelay(retryOptions, retryAttempt);
34501
+ await sleep(sleepTime);
34502
+ response = await fetchFn();
34503
+ }
34504
+ return response;
34505
+ }
34506
+ static setCurrentBlockHeight(url, height) {
34507
+ const writeOperationHappened = _Provider.hasWriteOperationHappened(url);
34508
+ if (!isDefined(height) || !writeOperationHappened) {
34509
+ return;
34510
+ }
34511
+ const normalizedUrl = _Provider.normalizeUrl(url);
34512
+ if (height > _Provider.currentBlockHeightCache[normalizedUrl]) {
34513
+ _Provider.currentBlockHeightCache[normalizedUrl] = height;
34514
+ }
34515
+ }
33575
34516
  /**
33576
34517
  * Constructor to initialize a Provider.
33577
34518
  *
@@ -33657,6 +34598,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33657
34598
  * Returns some helpful parameters related to gas fees.
33658
34599
  */
33659
34600
  async getGasConfig() {
34601
+ await this.init();
33660
34602
  const {
33661
34603
  txParameters: { maxGasPerTx },
33662
34604
  predicateParameters: { maxGasPerPredicate },
@@ -33692,39 +34634,52 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33692
34634
  * @returns A promise that resolves to the Chain and NodeInfo.
33693
34635
  */
33694
34636
  async fetchChainAndNodeInfo(ignoreCache = false) {
33695
- let nodeInfo;
33696
- let chain;
33697
- try {
33698
- nodeInfo = _Provider.nodeInfoCache[this.urlWithoutAuth];
33699
- chain = _Provider.chainInfoCache[this.urlWithoutAuth];
33700
- const noCache = !nodeInfo || !chain;
33701
- if (ignoreCache || noCache) {
33702
- throw new Error(`Jumps to the catch block and re-fetch`);
33703
- }
33704
- } catch (_err) {
33705
- const inflightRequest = _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth];
33706
- if (inflightRequest) {
33707
- const now2 = await inflightRequest;
33708
- this.consensusParametersTimestamp = now2;
33709
- return this.fetchChainAndNodeInfo();
33710
- }
33711
- const { promise, resolve } = deferPromise();
33712
- _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth] = promise;
33713
- const data = await this.operations.getChainAndNodeInfo();
33714
- nodeInfo = deserializeNodeInfo(data.nodeInfo);
33715
- chain = deserializeChain(data.chain);
33716
- _Provider.setIncompatibleNodeVersionMessage(nodeInfo);
33717
- _Provider.chainInfoCache[this.urlWithoutAuth] = chain;
33718
- _Provider.nodeInfoCache[this.urlWithoutAuth] = nodeInfo;
33719
- const now = Date.now();
33720
- this.consensusParametersTimestamp = now;
33721
- resolve(now);
33722
- delete _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth];
34637
+ const nodeInfo = _Provider.nodeInfoCache[this.urlWithoutAuth];
34638
+ const chain = _Provider.chainInfoCache[this.urlWithoutAuth];
34639
+ const hasCache = nodeInfo && chain;
34640
+ if (hasCache && !ignoreCache) {
34641
+ return { nodeInfo, chain };
34642
+ }
34643
+ const inflightRequest = _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth];
34644
+ if (inflightRequest) {
34645
+ return inflightRequest.then((data) => {
34646
+ this.consensusParametersTimestamp = data.consensusParametersTimestamp;
34647
+ return {
34648
+ nodeInfo: _Provider.nodeInfoCache[this.urlWithoutAuth],
34649
+ chain: _Provider.chainInfoCache[this.urlWithoutAuth]
34650
+ };
34651
+ });
33723
34652
  }
33724
- return {
33725
- chain,
33726
- nodeInfo
33727
- };
34653
+ const getChainAndNodeInfoFromNetwork = this.operations.getChainAndNodeInfo().then((data) => ({
34654
+ chain: deserializeChain(data.chain),
34655
+ nodeInfo: deserializeNodeInfo(data.nodeInfo),
34656
+ consensusParametersTimestamp: Date.now()
34657
+ })).then((data) => {
34658
+ _Provider.setIncompatibleNodeVersionMessage(data.nodeInfo);
34659
+ _Provider.chainInfoCache[this.urlWithoutAuth] = data.chain;
34660
+ _Provider.nodeInfoCache[this.urlWithoutAuth] = data.nodeInfo;
34661
+ this.consensusParametersTimestamp = data.consensusParametersTimestamp;
34662
+ return data;
34663
+ }).catch((err) => {
34664
+ const error2 = new FuelError(
34665
+ FuelError.CODES.CONNECTION_REFUSED,
34666
+ "Unable to fetch chain and node info from the network",
34667
+ { url: this.urlWithoutAuth },
34668
+ err
34669
+ );
34670
+ error2.cause = { code: "ECONNREFUSED" };
34671
+ throw error2;
34672
+ }).finally(() => {
34673
+ delete _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth];
34674
+ });
34675
+ _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth] = getChainAndNodeInfoFromNetwork;
34676
+ return _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth].then((data) => {
34677
+ this.consensusParametersTimestamp = data.consensusParametersTimestamp;
34678
+ return {
34679
+ nodeInfo: _Provider.nodeInfoCache[this.urlWithoutAuth],
34680
+ chain: _Provider.chainInfoCache[this.urlWithoutAuth]
34681
+ };
34682
+ });
33728
34683
  }
33729
34684
  /**
33730
34685
  * @hidden
@@ -33768,7 +34723,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33768
34723
  url: this.urlWithoutAuth,
33769
34724
  query,
33770
34725
  fetchFn: /* @__PURE__ */ __name((url, requestInit) => fetchFn(url, requestInit, this.options), "fetchFn"),
33771
- variables: vars
34726
+ variables: vars,
34727
+ operationName: opDefinition.name.value,
34728
+ onEvent: /* @__PURE__ */ __name((event) => {
34729
+ _Provider.setCurrentBlockHeight(
34730
+ this.urlWithoutAuth,
34731
+ event.extensions?.current_fuel_block_height
34732
+ );
34733
+ }, "onEvent")
33772
34734
  });
33773
34735
  }
33774
34736
  return gqlClient.request(query, vars);
@@ -33926,7 +34888,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33926
34888
  * @param sendTransactionParams - The provider send transaction parameters (optional).
33927
34889
  * @returns A promise that resolves to the transaction response object.
33928
34890
  */
33929
- async sendTransaction(transactionRequestLike, { estimateTxDependencies = true, enableAssetBurn } = {}) {
34891
+ async sendTransaction(transactionRequestLike, {
34892
+ enableAssetBurn,
34893
+ estimateTxDependencies = true,
34894
+ includePreConfirmation: _includePreConfirmation = true
34895
+ } = {}) {
33930
34896
  const transactionRequest = transactionRequestify(transactionRequestLike);
33931
34897
  validateTransactionForAssetBurn(
33932
34898
  await this.getBaseAssetId(),
@@ -33942,7 +34908,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33942
34908
  if (isTransactionTypeScript(transactionRequest)) {
33943
34909
  abis = transactionRequest.abis;
33944
34910
  }
33945
- const subscription = await this.operations.submitAndAwaitStatus({ encodedTransaction });
34911
+ const subscription = await this.operations.submitAndAwaitStatus({
34912
+ encodedTransaction,
34913
+ includePreConfirmation: true
34914
+ });
33946
34915
  this.#cacheInputs(
33947
34916
  transactionRequest.inputs,
33948
34917
  transactionRequest.getTransactionId(await this.getChainId())
@@ -34294,6 +35263,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34294
35263
  * @param transactionCostParams - The transaction cost parameters (optional).
34295
35264
  *
34296
35265
  * @returns A promise that resolves to the transaction cost object.
35266
+ *
35267
+ * @deprecated Use provider.assembleTx instead
35268
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
34297
35269
  */
34298
35270
  async getTransactionCost(transactionRequestLike, { signatureCallback, gasPrice: gasPriceParam } = {}) {
34299
35271
  const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
@@ -34336,7 +35308,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34336
35308
  }
34337
35309
  ({ rawReceipts, receipts, missingContractIds, outputVariables, dryRunStatus } = await this.estimateTxDependencies(txRequestClone, { gasPrice }));
34338
35310
  if (dryRunStatus && "reason" in dryRunStatus) {
34339
- throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus);
35311
+ throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus.reason);
34340
35312
  }
34341
35313
  const { maxGasPerTx } = await this.getGasConfig();
34342
35314
  const pristineGasUsed = getGasUsedFromReceipts(receipts);
@@ -34369,6 +35341,102 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34369
35341
  transactionSummary
34370
35342
  };
34371
35343
  }
35344
+ /**
35345
+ * Assembles a transaction by completely estimating and funding it.
35346
+ *
35347
+ * @param params - Parameters used to assemble the transaction.
35348
+ *
35349
+ * @returns The assembled transaction request, estimated gas price, and receipts
35350
+ */
35351
+ async assembleTx(params) {
35352
+ const {
35353
+ request,
35354
+ reserveGas,
35355
+ resourcesIdsToIgnore,
35356
+ feePayerAccount,
35357
+ blockHorizon = 10,
35358
+ estimatePredicates = true,
35359
+ accountCoinQuantities = []
35360
+ } = params;
35361
+ const allAddresses = /* @__PURE__ */ new Set();
35362
+ const baseAssetId = await this.getBaseAssetId();
35363
+ let feePayerIndex = -1;
35364
+ let baseAssetChange;
35365
+ const requiredBalances = accountCoinQuantities.map((quantity, index) => {
35366
+ const { amount, assetId, account = feePayerAccount, changeOutputAccount } = quantity;
35367
+ const changeAccountAddress = changeOutputAccount ? changeOutputAccount.address.toB256() : account.address.toB256();
35368
+ allAddresses.add(account.address.toB256());
35369
+ const changePolicy = {
35370
+ change: changeAccountAddress
35371
+ };
35372
+ if (assetId === baseAssetId) {
35373
+ baseAssetChange = changePolicy.change;
35374
+ }
35375
+ if (account.address.equals(feePayerAccount.address)) {
35376
+ feePayerIndex = index;
35377
+ }
35378
+ const requiredBalance = {
35379
+ account: resolveAccountForAssembleTxParams(account),
35380
+ amount: bn(amount).toString(10),
35381
+ assetId,
35382
+ changePolicy
35383
+ };
35384
+ return requiredBalance;
35385
+ });
35386
+ if (feePayerIndex === -1) {
35387
+ allAddresses.add(feePayerAccount.address.toB256());
35388
+ const newLength = requiredBalances.push({
35389
+ account: resolveAccountForAssembleTxParams(feePayerAccount),
35390
+ amount: bn(0).toString(10),
35391
+ // Since the correct fee amount cannot be determined yet, we can use 0
35392
+ assetId: baseAssetId,
35393
+ changePolicy: {
35394
+ change: baseAssetChange || feePayerAccount.address.toB256()
35395
+ }
35396
+ });
35397
+ feePayerIndex = newLength - 1;
35398
+ }
35399
+ const excludeInput = await this.adjustResourcesToIgnoreForAddresses(
35400
+ Array.from(allAddresses),
35401
+ resourcesIdsToIgnore
35402
+ );
35403
+ const {
35404
+ assembleTx: { status, transaction: gqlTransaction, gasPrice }
35405
+ } = await this.operations.assembleTx({
35406
+ tx: hexlify(request.toTransactionBytes()),
35407
+ blockHorizon: String(blockHorizon),
35408
+ feeAddressIndex: String(feePayerIndex),
35409
+ requiredBalances,
35410
+ estimatePredicates,
35411
+ excludeInput,
35412
+ reserveGas: reserveGas ? reserveGas.toString(10) : void 0
35413
+ });
35414
+ if (status.type === "DryRunFailureStatus") {
35415
+ const parsedReceipts = status.receipts.map(deserializeReceipt);
35416
+ throw this.extractDryRunError(request, parsedReceipts, status.reason);
35417
+ }
35418
+ request.witnesses = gqlTransaction.witnesses || request.witnesses;
35419
+ request.inputs = gqlTransaction.inputs?.map(deserializeInput) || request.inputs;
35420
+ request.outputs = gqlTransaction.outputs?.map(deserializeOutput) || request.outputs;
35421
+ if (gqlTransaction.policies?.maxFee) {
35422
+ request.maxFee = bn(gqlTransaction.policies.maxFee);
35423
+ }
35424
+ if (gqlTransaction.scriptGasLimit) {
35425
+ request.gasLimit = bn(gqlTransaction.scriptGasLimit);
35426
+ }
35427
+ const rawReceipts = status.receipts;
35428
+ const chainId = await this.getChainId();
35429
+ request.updateState(chainId, "funded", {
35430
+ gasPrice: gasPrice.toString(),
35431
+ receipts: rawReceipts
35432
+ });
35433
+ return {
35434
+ assembledRequest: request,
35435
+ gasPrice: bn(gasPrice),
35436
+ receipts: status.receipts.map(deserializeReceipt),
35437
+ rawReceipts
35438
+ };
35439
+ }
34372
35440
  /**
34373
35441
  * Returns coins for the given owner.
34374
35442
  *
@@ -34407,30 +35475,15 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34407
35475
  *
34408
35476
  * @param owner - The address to get resources for.
34409
35477
  * @param quantities - The coin quantities to get.
34410
- * @param excludedIds - IDs of excluded resources from the selection (optional).
35478
+ * @param resourcesIdsToIgnore - IDs of excluded resources from the selection (optional).
34411
35479
  * @returns A promise that resolves to the resources.
34412
35480
  */
34413
- async getResourcesToSpend(owner, quantities, excludedIds) {
35481
+ async getResourcesToSpend(owner, quantities, resourcesIdsToIgnore) {
34414
35482
  const ownerAddress = new Address(owner);
34415
- let idsToExclude = {
34416
- messages: excludedIds?.messages?.map((nonce) => hexlify(nonce)) || [],
34417
- utxos: excludedIds?.utxos?.map((id) => hexlify(id)) || []
34418
- };
34419
- if (this.cache) {
34420
- const cached = this.cache.getActiveData(ownerAddress.toB256());
34421
- if (cached.utxos.length || cached.messages.length) {
34422
- const {
34423
- consensusParameters: {
34424
- txParameters: { maxInputs }
34425
- }
34426
- } = await this.getChain();
34427
- idsToExclude = adjustResourcesToExclude({
34428
- userInput: idsToExclude,
34429
- cached,
34430
- maxInputs: maxInputs.toNumber()
34431
- });
34432
- }
34433
- }
35483
+ const excludedIds = await this.adjustResourcesToIgnoreForAddresses(
35484
+ [ownerAddress.b256Address],
35485
+ resourcesIdsToIgnore
35486
+ );
34434
35487
  const coinsQuery = {
34435
35488
  owner: ownerAddress.toB256(),
34436
35489
  queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
@@ -34438,7 +35491,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34438
35491
  amount: (amount.eqn(0) ? bn(1) : amount).toString(10),
34439
35492
  max: maxPerAsset ? maxPerAsset.toString(10) : void 0
34440
35493
  })),
34441
- excludedIds: idsToExclude
35494
+ excludedIds
34442
35495
  };
34443
35496
  const result = await this.operations.getCoinsToSpend(coinsQuery);
34444
35497
  const coins = result.coinsToSpend.flat().map((coin) => {
@@ -35005,20 +36058,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35005
36058
  /**
35006
36059
  * @hidden
35007
36060
  */
35008
- extractDryRunError(transactionRequest, receipts, dryRunStatus) {
35009
- const status = dryRunStatus;
36061
+ extractDryRunError(transactionRequest, receipts, reason) {
35010
36062
  let logs = [];
35011
- if (transactionRequest.abis) {
35012
- logs = getDecodedLogs(
36063
+ let groupedLogs = {};
36064
+ if (transactionRequest.type === TransactionType.Script && transactionRequest.abis) {
36065
+ ({ logs, groupedLogs } = getAllDecodedLogs({
35013
36066
  receipts,
35014
- transactionRequest.abis.main,
35015
- transactionRequest.abis.otherContractsAbis
35016
- );
36067
+ mainAbi: transactionRequest.abis.main,
36068
+ externalAbis: transactionRequest.abis.otherContractsAbis
36069
+ }));
35017
36070
  }
35018
36071
  return extractTxError({
35019
36072
  logs,
36073
+ groupedLogs,
35020
36074
  receipts,
35021
- statusReason: status.reason
36075
+ statusReason: reason
35022
36076
  });
35023
36077
  }
35024
36078
  /**
@@ -35045,6 +36099,45 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35045
36099
  }
35046
36100
  return transactionRequest;
35047
36101
  }
36102
+ /**
36103
+ * @hidden
36104
+ *
36105
+ * This helper adjusts the resources to be excluded for a given set of addresses.
36106
+ * Supporting multiple addresses is important because of the `assembleTx` method,
36107
+ * which may be invoked with different addresses. It handles both messages and UTXOs,
36108
+ * ensuring the total number of inputs does not exceed the maximum allowed by the chain's
36109
+ * consensus parameters. The resources specified in the `resourcesIdsToIgnore` parameter have priority
36110
+ * over those retrieved from the cache.
36111
+ */
36112
+ async adjustResourcesToIgnoreForAddresses(addresses, resourcesIdsToIgnore) {
36113
+ const final = {
36114
+ messages: resourcesIdsToIgnore?.messages?.map((nonce) => hexlify(nonce)) || [],
36115
+ utxos: resourcesIdsToIgnore?.utxos?.map((id) => hexlify(id)) || []
36116
+ };
36117
+ if (this.cache) {
36118
+ const cache2 = this.cache;
36119
+ const allCached = addresses.map((address) => cache2.getActiveData(address));
36120
+ const {
36121
+ consensusParameters: {
36122
+ txParameters: { maxInputs: maxInputsBn }
36123
+ }
36124
+ } = await this.getChain();
36125
+ const maxInputs = maxInputsBn.toNumber();
36126
+ for (let i = 0; i < allCached.length; i++) {
36127
+ let total = final.utxos.length + final.messages.length;
36128
+ if (total >= maxInputs) {
36129
+ break;
36130
+ }
36131
+ final.utxos = [...final.utxos, ...allCached[i].utxos.slice(0, maxInputs - total)];
36132
+ total = final.utxos.length + final.messages.length;
36133
+ if (total >= maxInputs) {
36134
+ break;
36135
+ }
36136
+ final.messages = [...final.messages, ...allCached[i].messages.slice(0, maxInputs - total)];
36137
+ }
36138
+ }
36139
+ return final;
36140
+ }
35048
36141
  };
35049
36142
 
35050
36143
  // src/test-utils/test-asset-id.ts
@@ -35070,21 +36163,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35070
36163
  }
35071
36164
  };
35072
36165
 
35073
- // src/providers/utils/merge-quantities.ts
35074
- var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
35075
- const resultMap = {};
35076
- function addToMap({ amount, assetId }) {
35077
- if (resultMap[assetId]) {
35078
- resultMap[assetId] = resultMap[assetId].add(amount);
35079
- } else {
35080
- resultMap[assetId] = amount;
35081
- }
35082
- }
35083
- __name(addToMap, "addToMap");
35084
- coinQuantities.forEach((arr) => arr.forEach(addToMap));
35085
- return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
35086
- }, "mergeQuantities");
35087
-
35088
36166
  // src/types.ts
35089
36167
  var AbstractAccount = class {
35090
36168
  static {
@@ -35129,6 +36207,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35129
36207
  return { script, scriptData };
35130
36208
  }, "assembleTransferToContractScript");
35131
36209
 
36210
+ // src/utils/split-coins-into-batches.ts
36211
+ var splitCoinsIntoBatches = /* @__PURE__ */ __name((coins, maxBatchLength) => {
36212
+ const batchesNum = Math.ceil(coins.length / maxBatchLength);
36213
+ const batches = [];
36214
+ for (let i = 0; i < batchesNum; i += 1) {
36215
+ const batchStart = i * maxBatchLength;
36216
+ const batchEnd = (i + 1) * maxBatchLength;
36217
+ batches.push(coins.slice(batchStart, batchEnd));
36218
+ }
36219
+ return batches;
36220
+ }, "splitCoinsIntoBatches");
36221
+
35132
36222
  // src/account.ts
35133
36223
  var MAX_FUNDING_ATTEMPTS = 5;
35134
36224
  var Account = class extends AbstractAccount {
@@ -35195,11 +36285,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35195
36285
  * Retrieves resources satisfying the spend query for the account.
35196
36286
  *
35197
36287
  * @param quantities - Quantities of resources to be obtained.
35198
- * @param excludedIds - IDs of resources to be excluded from the query (optional).
36288
+ * @param resourcesIdsToIgnore - IDs of resources to be excluded from the query (optional).
35199
36289
  * @returns A promise that resolves to an array of Resources.
35200
36290
  */
35201
- async getResourcesToSpend(quantities, excludedIds) {
35202
- return this.provider.getResourcesToSpend(this.address, quantities, excludedIds);
36291
+ async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
36292
+ return this.provider.getResourcesToSpend(this.address, quantities, resourcesIdsToIgnore);
35203
36293
  }
35204
36294
  /**
35205
36295
  * Retrieves coins owned by the account.
@@ -35244,6 +36334,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35244
36334
  * @param request - The transaction request to fund.
35245
36335
  * @param params - The estimated transaction parameters.
35246
36336
  * @returns A promise that resolves to the funded transaction request.
36337
+ *
36338
+ * @deprecated Use provider.assembleTx instead
36339
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
35247
36340
  */
35248
36341
  async fund(request, params) {
35249
36342
  const {
@@ -35366,7 +36459,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35366
36459
  amount,
35367
36460
  assetId: assetId || await this.provider.getBaseAssetId()
35368
36461
  });
35369
- request = await this.estimateAndFundTransaction(request, txParams);
36462
+ const { gasPrice, transactionRequest } = await this.assembleTx(request);
36463
+ request = await setAndValidateGasAndFeeForAssembledTx({
36464
+ gasPrice,
36465
+ provider: this.provider,
36466
+ transactionRequest,
36467
+ setGasLimit: txParams?.gasLimit,
36468
+ setMaxFee: txParams?.maxFee
36469
+ });
35370
36470
  return request;
35371
36471
  }
35372
36472
  /**
@@ -35392,7 +36492,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35392
36492
  async batchTransfer(transferParams, txParams = {}) {
35393
36493
  let request = new ScriptTransactionRequest(txParams);
35394
36494
  request = this.addBatchTransfer(request, transferParams);
35395
- request = await this.estimateAndFundTransaction(request, txParams);
36495
+ const { gasPrice, transactionRequest } = await this.assembleTx(request);
36496
+ request = await setAndValidateGasAndFeeForAssembledTx({
36497
+ gasPrice,
36498
+ provider: this.provider,
36499
+ transactionRequest,
36500
+ setGasLimit: txParams?.gasLimit,
36501
+ setMaxFee: txParams?.maxFee
36502
+ });
35396
36503
  return this.sendTransaction(request, { estimateTxDependencies: false });
35397
36504
  }
35398
36505
  /**
@@ -35464,7 +36571,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35464
36571
  const { script, scriptData } = await assembleTransferToContractScript(transferParams);
35465
36572
  request.script = script;
35466
36573
  request.scriptData = scriptData;
35467
- request = await this.estimateAndFundTransaction(request, txParams, { quantities });
36574
+ const { gasPrice, transactionRequest } = await this.assembleTx(request, quantities);
36575
+ request = await setAndValidateGasAndFeeForAssembledTx({
36576
+ gasPrice,
36577
+ provider: this.provider,
36578
+ transactionRequest,
36579
+ setGasLimit: txParams?.gasLimit,
36580
+ setMaxFee: txParams?.maxFee
36581
+ });
35468
36582
  return this.sendTransaction(request);
35469
36583
  }
35470
36584
  /**
@@ -35492,16 +36606,144 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35492
36606
  const baseAssetId = await this.provider.getBaseAssetId();
35493
36607
  let request = new ScriptTransactionRequest(params);
35494
36608
  const quantities = [{ amount: bn(amount), assetId: baseAssetId }];
35495
- const txCost = await this.getTransactionCost(request, { quantities });
35496
- request = this.validateGasLimitAndMaxFee({
35497
- transactionRequest: request,
35498
- gasUsed: txCost.gasUsed,
35499
- maxFee: txCost.maxFee,
35500
- txParams
36609
+ const { gasPrice, transactionRequest } = await this.assembleTx(request, quantities);
36610
+ request = await setAndValidateGasAndFeeForAssembledTx({
36611
+ gasPrice,
36612
+ provider: this.provider,
36613
+ transactionRequest,
36614
+ setGasLimit: txParams?.gasLimit,
36615
+ setMaxFee: txParams?.maxFee
35501
36616
  });
35502
- await this.fund(request, txCost);
35503
36617
  return this.sendTransaction(request);
35504
36618
  }
36619
+ /**
36620
+ * Consolidates base asset UTXOs into fewer, larger ones.
36621
+ *
36622
+ * Retrieves a limited number of base asset coins (as defined by `Provider.RESOURCES_PAGE_SIZE_LIMIT`),
36623
+ * assembles consolidation transactions, and submits them to the network.
36624
+ *
36625
+ * Note: This method currently supports only the base asset.
36626
+ *
36627
+ * @param params - The parameters for coin consolidation, including the asset ID, mode, and output number.
36628
+ * @returns A promise that resolves to the response of the submitted transactions.
36629
+ * @throws Will throw an error if the asset is not a base asset as non-base asset consolidation is not implemented.
36630
+ */
36631
+ async consolidateCoins(params) {
36632
+ const { assetId } = params;
36633
+ const { coins } = await this.getCoins(assetId);
36634
+ const baseAssetId = await this.provider.getBaseAssetId();
36635
+ const isBaseAsset = baseAssetId === assetId;
36636
+ let submitAll;
36637
+ const consolidationParams = {
36638
+ coins,
36639
+ mode: params.mode,
36640
+ outputNum: params.outputNum
36641
+ };
36642
+ if (isBaseAsset) {
36643
+ ({ submitAll } = await this.assembleBaseAssetConsolidationTxs(consolidationParams));
36644
+ } else {
36645
+ throw new FuelError(
36646
+ ErrorCode.UNSUPPORTED_FEATURE,
36647
+ "Consolidation for non-base assets is not supported yet."
36648
+ );
36649
+ }
36650
+ return submitAll();
36651
+ }
36652
+ /**
36653
+ * Assembles transactions for consolidating base asset coins into fewer UTXOs.
36654
+ *
36655
+ * This method splits the provided coins into batches and creates transaction requests
36656
+ * to consolidate them. It calculates the necessary fee and sets up the transactions
36657
+ * to be submitted either in parallel (default) or sequentially.
36658
+ *
36659
+ * @param params - The parameters for assembling base asset consolidation transactions.
36660
+ *
36661
+ * @returns An object containing the assembled transactions, the total fee cost, and a callback to submit all transactions.
36662
+ */
36663
+ async assembleBaseAssetConsolidationTxs(params) {
36664
+ const { coins, mode = "parallel", outputNum = 1 } = params;
36665
+ const baseAssetId = await this.provider.getBaseAssetId();
36666
+ this.validateConsolidationTxsCoins(coins, baseAssetId);
36667
+ const chainInfo = await this.provider.getChain();
36668
+ const maxInputsNumber = chainInfo.consensusParameters.txParameters.maxInputs.toNumber();
36669
+ let totalFeeCost = bn(0);
36670
+ const txs = [];
36671
+ const coinsBatches = splitCoinsIntoBatches(coins, maxInputsNumber);
36672
+ const gasPrice = await this.provider.estimateGasPrice(10);
36673
+ const consolidateMoreThanOneCoin = outputNum > 1;
36674
+ coinsBatches.filter((batch) => batch.length > 1).forEach((coinBatch) => {
36675
+ const request = new ScriptTransactionRequest({
36676
+ script: "0x"
36677
+ });
36678
+ request.addResources(coinBatch);
36679
+ if (consolidateMoreThanOneCoin) {
36680
+ Array.from({ length: outputNum - 1 }).forEach(() => {
36681
+ request.addCoinOutput(this.address, 0, baseAssetId);
36682
+ });
36683
+ }
36684
+ const minGas = request.calculateMinGas(chainInfo);
36685
+ const fee = calculateGasFee({
36686
+ gasPrice,
36687
+ gas: minGas,
36688
+ priceFactor: chainInfo.consensusParameters.feeParameters.gasPriceFactor,
36689
+ tip: request.tip
36690
+ });
36691
+ request.maxFee = fee;
36692
+ if (consolidateMoreThanOneCoin) {
36693
+ const total = request.inputs.filter(isRequestInputCoin).reduce((acc, input) => acc.add(input.amount), bn(0));
36694
+ const amountPerNewUtxo = total.div(outputNum + 1);
36695
+ request.outputs.forEach((output) => {
36696
+ if (output.type === OutputType.Coin) {
36697
+ output.amount = amountPerNewUtxo;
36698
+ }
36699
+ });
36700
+ }
36701
+ totalFeeCost = totalFeeCost.add(fee);
36702
+ txs.push(request);
36703
+ });
36704
+ const submitAll = this.prepareSubmitAll({ txs, mode });
36705
+ return { txs, totalFeeCost, submitAll };
36706
+ }
36707
+ /**
36708
+ * Prepares a function to submit all transactions either sequentially or in parallel.
36709
+ *
36710
+ * @param params - The parameters for preparing the submitAll callback.
36711
+ *
36712
+ * @returns A callback that, when called, submits all transactions and returns their results and any errors encountered.
36713
+ */
36714
+ prepareSubmitAll = /* @__PURE__ */ __name((params) => {
36715
+ const { txs, mode = "sequential" } = params;
36716
+ return async () => {
36717
+ const txResponses = [];
36718
+ const errors2 = [];
36719
+ if (mode === "sequential") {
36720
+ for (const tx of txs) {
36721
+ try {
36722
+ const submit = await this.sendTransaction(tx);
36723
+ const response = await submit.waitForResult();
36724
+ txResponses.push(response);
36725
+ } catch (error2) {
36726
+ errors2.push(error2);
36727
+ }
36728
+ }
36729
+ } else {
36730
+ const results = await Promise.allSettled(
36731
+ txs.map(async (tx) => {
36732
+ const submit = await this.sendTransaction(tx);
36733
+ return submit.waitForResult();
36734
+ })
36735
+ );
36736
+ results.forEach((result) => {
36737
+ if (result.status === "fulfilled") {
36738
+ txResponses.push(result.value);
36739
+ } else {
36740
+ errors2.push(result.reason);
36741
+ }
36742
+ });
36743
+ }
36744
+ return { txResponses, errors: errors2 };
36745
+ };
36746
+ }, "prepareSubmitAll");
35505
36747
  /**
35506
36748
  * Returns a transaction cost to enable user
35507
36749
  * to set gasLimit and also reserve balance amounts
@@ -35511,6 +36753,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35511
36753
  * @param transactionCostParams - The transaction cost parameters (optional).
35512
36754
  *
35513
36755
  * @returns A promise that resolves to the transaction cost object.
36756
+ *
36757
+ * @deprecated Use provider.assembleTx instead
36758
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
35514
36759
  */
35515
36760
  async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [], gasPrice } = {}) {
35516
36761
  const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
@@ -35672,6 +36917,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35672
36917
  } : void 0;
35673
36918
  }
35674
36919
  /** @hidden * */
36920
+ async assembleTx(transactionRequest, quantities = []) {
36921
+ const outputQuantities = transactionRequest.outputs.filter((o) => o.type === OutputType.Coin).map(({ amount, assetId }) => ({ assetId: String(assetId), amount: bn(amount) }));
36922
+ transactionRequest.gasLimit = bn(0);
36923
+ transactionRequest.maxFee = bn(0);
36924
+ const { assembledRequest, gasPrice } = await this.provider.assembleTx({
36925
+ request: transactionRequest,
36926
+ accountCoinQuantities: mergeQuantities(outputQuantities, quantities),
36927
+ feePayerAccount: this
36928
+ });
36929
+ return { transactionRequest: assembledRequest, gasPrice };
36930
+ }
36931
+ /** @hidden * */
35675
36932
  validateTransferAmount(amount) {
35676
36933
  if (bn(amount).lte(0)) {
35677
36934
  throw new FuelError(
@@ -35719,6 +36976,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35719
36976
  }
35720
36977
  return request;
35721
36978
  }
36979
+ /** @hidden * */
36980
+ validateConsolidationTxsCoins(coins, assetId) {
36981
+ if (coins.length <= 1) {
36982
+ throw new FuelError(ErrorCode.NO_COINS_TO_CONSOLIDATE, "No coins to consolidate.");
36983
+ }
36984
+ if (!coins.every((c) => c.assetId === assetId)) {
36985
+ throw new FuelError(
36986
+ ErrorCode.COINS_ASSET_ID_MISMATCH,
36987
+ "All coins to consolidate must be from the same asset id."
36988
+ );
36989
+ }
36990
+ }
35722
36991
  };
35723
36992
 
35724
36993
  // src/wallet/keystore-wallet.ts
@@ -38788,23 +40057,26 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
38788
40057
  ),
38789
40058
  port: nodeOptions.port || "0"
38790
40059
  };
38791
- let cleanup;
40060
+ let killNode;
38792
40061
  let url;
38793
40062
  if (launchNodeServerPort) {
38794
40063
  const serverUrl = `http://localhost:${launchNodeServerPort}`;
38795
40064
  url = await (await fetch(serverUrl, { method: "POST", body: JSON.stringify(launchNodeOptions) })).text();
38796
- cleanup = /* @__PURE__ */ __name(() => {
40065
+ killNode = /* @__PURE__ */ __name(() => {
38797
40066
  fetch(`${serverUrl}/cleanup/${url}`);
38798
- }, "cleanup");
40067
+ }, "killNode");
38799
40068
  } else {
38800
40069
  const settings = await launchNode(launchNodeOptions);
38801
40070
  url = settings.url;
38802
- cleanup = settings.cleanup;
40071
+ killNode = settings.cleanup;
38803
40072
  }
40073
+ const cleanup = /* @__PURE__ */ __name(() => {
40074
+ Provider.clearChainAndNodeCaches(url);
40075
+ killNode();
40076
+ }, "cleanup");
38804
40077
  let provider;
38805
40078
  try {
38806
40079
  provider = new Provider(url, providerOptions);
38807
- await provider.init();
38808
40080
  } catch (err) {
38809
40081
  cleanup();
38810
40082
  throw err;