@fuel-ts/account 0.100.3 → 0.100.5

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 (67) hide show
  1. package/dist/account.d.ts +71 -3
  2. package/dist/account.d.ts.map +1 -1
  3. package/dist/connectors/fuel-connector.d.ts +3 -3
  4. package/dist/connectors/fuel-connector.d.ts.map +1 -1
  5. package/dist/index.global.js +1506 -221
  6. package/dist/index.global.js.map +1 -1
  7. package/dist/index.js +2222 -1027
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +2021 -828
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/predicate/predicate.d.ts +9 -4
  12. package/dist/predicate/predicate.d.ts.map +1 -1
  13. package/dist/providers/__generated__/operations.d.ts +1187 -76
  14. package/dist/providers/__generated__/operations.d.ts.map +1 -1
  15. package/dist/providers/assemble-tx-helpers.d.ts +39 -0
  16. package/dist/providers/assemble-tx-helpers.d.ts.map +1 -0
  17. package/dist/providers/fuel-graphql-subscriber.d.ts +28 -0
  18. package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
  19. package/dist/providers/index.d.ts +1 -0
  20. package/dist/providers/index.d.ts.map +1 -1
  21. package/dist/providers/provider.d.ts +85 -6
  22. package/dist/providers/provider.d.ts.map +1 -1
  23. package/dist/providers/resource.d.ts +4 -1
  24. package/dist/providers/resource.d.ts.map +1 -1
  25. package/dist/providers/transaction-request/helpers.d.ts +3 -3
  26. package/dist/providers/transaction-request/helpers.d.ts.map +1 -1
  27. package/dist/providers/transaction-request/input.d.ts +2 -0
  28. package/dist/providers/transaction-request/input.d.ts.map +1 -1
  29. package/dist/providers/transaction-request/output.d.ts +6 -0
  30. package/dist/providers/transaction-request/output.d.ts.map +1 -1
  31. package/dist/providers/transaction-request/script-transaction-request.d.ts +11 -0
  32. package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
  33. package/dist/providers/transaction-request/transaction-request.d.ts +3 -3
  34. package/dist/providers/transaction-request/transaction-request.d.ts.map +1 -1
  35. package/dist/providers/transaction-response/getAllDecodedLogs.d.ts.map +1 -1
  36. package/dist/providers/transaction-response/transaction-response.d.ts +54 -15
  37. package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
  38. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +12 -1
  39. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
  40. package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
  41. package/dist/providers/transaction-summary/status.d.ts +16 -2
  42. package/dist/providers/transaction-summary/status.d.ts.map +1 -1
  43. package/dist/providers/transaction-summary/types.d.ts +85 -4
  44. package/dist/providers/transaction-summary/types.d.ts.map +1 -1
  45. package/dist/providers/utils/handle-gql-error-message.d.ts.map +1 -1
  46. package/dist/providers/utils/index.d.ts +1 -0
  47. package/dist/providers/utils/index.d.ts.map +1 -1
  48. package/dist/providers/utils/parse-graphql-response.d.ts +12 -0
  49. package/dist/providers/utils/parse-graphql-response.d.ts.map +1 -0
  50. package/dist/providers/utils/serialization.d.ts +9 -0
  51. package/dist/providers/utils/serialization.d.ts.map +1 -1
  52. package/dist/providers/utils/transaction-response-serialization.d.ts +8 -0
  53. package/dist/providers/utils/transaction-response-serialization.d.ts.map +1 -0
  54. package/dist/test-utils/launchNode.d.ts.map +1 -1
  55. package/dist/test-utils/setup-test-provider-and-wallets.d.ts.map +1 -1
  56. package/dist/test-utils.global.js +1500 -205
  57. package/dist/test-utils.global.js.map +1 -1
  58. package/dist/test-utils.js +2091 -901
  59. package/dist/test-utils.js.map +1 -1
  60. package/dist/test-utils.mjs +1938 -742
  61. package/dist/test-utils.mjs.map +1 -1
  62. package/dist/utils/deployScriptOrPredicate.d.ts.map +1 -1
  63. package/dist/utils/split-coins-into-batches.d.ts +3 -0
  64. package/dist/utils/split-coins-into-batches.d.ts.map +1 -0
  65. package/package.json +15 -15
  66. package/dist/providers/utils/helpers.d.ts +0 -14
  67. 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.3"
17290
+ FUEL_CORE: "0.43.1",
17291
+ FORC: "0.68.1",
17292
+ FUELS: "0.100.5"
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],
@@ -28903,6 +29010,83 @@ spurious results.`);
28903
29010
  var lib_default2 = gql;
28904
29011
 
28905
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
+ `;
28906
29090
  var SubmittedStatusFragmentDoc = lib_default2`
28907
29091
  fragment SubmittedStatusFragment on SubmittedStatus {
28908
29092
  type: __typename
@@ -29031,6 +29215,87 @@ spurious results.`);
29031
29215
  reason
29032
29216
  }
29033
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}`;
29034
29299
  var TransactionStatusSubscriptionFragmentDoc = lib_default2`
29035
29300
  fragment transactionStatusSubscriptionFragment on TransactionStatus {
29036
29301
  ... on SubmittedStatus {
@@ -29051,12 +29316,20 @@ spurious results.`);
29051
29316
  ... on SqueezedOutStatus {
29052
29317
  ...SqueezedOutStatusFragment
29053
29318
  }
29319
+ ... on PreconfirmationSuccessStatus {
29320
+ ...PreconfirmationSuccessStatusFragment
29321
+ }
29322
+ ... on PreconfirmationFailureStatus {
29323
+ ...PreconfirmationFailureStatusFragment
29324
+ }
29054
29325
  }
29055
29326
  ${SubmittedStatusFragmentDoc}
29056
29327
  ${SuccessStatusWithBlockIdFragmentDoc}
29057
29328
  ${MalleableTransactionFieldsFragmentDoc}
29058
29329
  ${FailureStatusWithBlockIdFragmentDoc}
29059
- ${SqueezedOutStatusFragmentDoc}`;
29330
+ ${SqueezedOutStatusFragmentDoc}
29331
+ ${PreconfirmationSuccessStatusFragmentDoc}
29332
+ ${PreconfirmationFailureStatusFragmentDoc}`;
29060
29333
  var TransactionStatusFragmentDoc = lib_default2`
29061
29334
  fragment transactionStatusFragment on TransactionStatus {
29062
29335
  ... on SubmittedStatus {
@@ -29108,6 +29381,23 @@ ${SqueezedOutStatusFragmentDoc}`;
29108
29381
  }
29109
29382
  }
29110
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}`;
29111
29401
  var DryRunFailureStatusFragmentDoc = lib_default2`
29112
29402
  fragment dryRunFailureStatusFragment on DryRunFailureStatus {
29113
29403
  type: __typename
@@ -29368,6 +29658,11 @@ ${GasCostsFragmentDoc}`;
29368
29658
  consensusParameters {
29369
29659
  ...consensusParametersFragment
29370
29660
  }
29661
+ latestBlock {
29662
+ header {
29663
+ consensusParametersVersion
29664
+ }
29665
+ }
29371
29666
  }
29372
29667
  ${ConsensusParametersFragmentDoc}`;
29373
29668
  var ContractBalanceFragmentDoc = lib_default2`
@@ -29464,13 +29759,21 @@ ${NodeInfoFragmentDoc}`;
29464
29759
  ... on SqueezedOutStatus {
29465
29760
  ...SqueezedOutStatusFragment
29466
29761
  }
29762
+ ... on PreconfirmationSuccessStatus {
29763
+ ...PreconfirmationSuccessStatusFragment
29764
+ }
29765
+ ... on PreconfirmationFailureStatus {
29766
+ ...PreconfirmationFailureStatusFragment
29767
+ }
29467
29768
  }
29468
29769
  }
29469
29770
  }
29470
29771
  ${SubmittedStatusFragmentDoc}
29471
29772
  ${SuccessStatusWithBlockIdFragmentDoc}
29472
29773
  ${FailureStatusWithBlockIdFragmentDoc}
29473
- ${SqueezedOutStatusFragmentDoc}`;
29774
+ ${SqueezedOutStatusFragmentDoc}
29775
+ ${PreconfirmationSuccessStatusFragmentDoc}
29776
+ ${PreconfirmationFailureStatusFragmentDoc}`;
29474
29777
  var GetTransactionsDocument = lib_default2`
29475
29778
  query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
29476
29779
  transactions(after: $after, before: $before, first: $first, last: $last) {
@@ -29761,8 +30064,79 @@ ${GetMessageFragmentDoc}`;
29761
30064
  }
29762
30065
  }
29763
30066
  `;
30067
+ var AssembleTxDocument = lib_default2`
30068
+ query assembleTx($tx: HexString!, $blockHorizon: U32!, $requiredBalances: [RequiredBalance!]!, $feeAddressIndex: U16!, $excludeInput: ExcludeInput, $estimatePredicates: Boolean, $reserveGas: U64) {
30069
+ assembleTx(
30070
+ tx: $tx
30071
+ blockHorizon: $blockHorizon
30072
+ requiredBalances: $requiredBalances
30073
+ feeAddressIndex: $feeAddressIndex
30074
+ excludeInput: $excludeInput
30075
+ estimatePredicates: $estimatePredicates
30076
+ reserveGas: $reserveGas
30077
+ ) {
30078
+ transaction {
30079
+ id
30080
+ inputs {
30081
+ ... on InputCoin {
30082
+ ...InputCoinFragment
30083
+ }
30084
+ ... on InputContract {
30085
+ ...InputContractFragment
30086
+ }
30087
+ ... on InputMessage {
30088
+ ...InputMessageFragment
30089
+ }
30090
+ }
30091
+ outputs {
30092
+ ... on CoinOutput {
30093
+ ...OutputCoinFragment
30094
+ }
30095
+ ... on ContractOutput {
30096
+ ...OutputContractFragment
30097
+ }
30098
+ ... on ChangeOutput {
30099
+ ...OutputChangeFragment
30100
+ }
30101
+ ... on VariableOutput {
30102
+ ...OutputVariableFragment
30103
+ }
30104
+ ... on ContractCreated {
30105
+ ...OutputContractCreatedFragment
30106
+ }
30107
+ }
30108
+ policies {
30109
+ tip
30110
+ witnessLimit
30111
+ maturity
30112
+ maxFee
30113
+ }
30114
+ witnesses
30115
+ scriptGasLimit
30116
+ }
30117
+ status {
30118
+ ... on DryRunFailureStatus {
30119
+ ...dryRunFailureAssembleTxFragment
30120
+ }
30121
+ ... on DryRunSuccessStatus {
30122
+ ...dryRunSuccessAssembleTxFragment
30123
+ }
30124
+ }
30125
+ gasPrice
30126
+ }
30127
+ }
30128
+ ${InputCoinFragmentDoc}
30129
+ ${InputContractFragmentDoc}
30130
+ ${InputMessageFragmentDoc}
30131
+ ${OutputCoinFragmentDoc}
30132
+ ${OutputContractFragmentDoc}
30133
+ ${OutputChangeFragmentDoc}
30134
+ ${OutputVariableFragmentDoc}
30135
+ ${OutputContractCreatedFragmentDoc}
30136
+ ${DryRunFailureAssembleTxFragmentDoc}
30137
+ ${DryRunSuccessAssembleTxFragmentDoc}`;
29764
30138
  var DryRunDocument = lib_default2`
29765
- mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
30139
+ query dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
29766
30140
  dryRun(
29767
30141
  txs: $encodedTransactions
29768
30142
  utxoValidation: $utxoValidation
@@ -29819,15 +30193,22 @@ ${GetMessageFragmentDoc}`;
29819
30193
  }
29820
30194
  `;
29821
30195
  var SubmitAndAwaitStatusDocument = lib_default2`
29822
- subscription submitAndAwaitStatus($encodedTransaction: HexString!) {
29823
- submitAndAwaitStatus(tx: $encodedTransaction) {
30196
+ subscription submitAndAwaitStatus($encodedTransaction: HexString!, $estimatePredicates: Boolean, $includePreConfirmation: Boolean) {
30197
+ submitAndAwaitStatus(
30198
+ tx: $encodedTransaction
30199
+ estimatePredicates: $estimatePredicates
30200
+ includePreconfirmation: $includePreConfirmation
30201
+ ) {
29824
30202
  ...transactionStatusSubscriptionFragment
29825
30203
  }
29826
30204
  }
29827
30205
  ${TransactionStatusSubscriptionFragmentDoc}`;
29828
30206
  var StatusChangeDocument = lib_default2`
29829
- subscription statusChange($transactionId: TransactionId!) {
29830
- statusChange(id: $transactionId) {
30207
+ subscription statusChange($transactionId: TransactionId!, $includePreConfirmation: Boolean) {
30208
+ statusChange(
30209
+ id: $transactionId
30210
+ includePreconfirmation: $includePreConfirmation
30211
+ ) {
29831
30212
  ...transactionStatusSubscriptionFragment
29832
30213
  }
29833
30214
  }
@@ -29930,6 +30311,9 @@ ${GetMessageFragmentDoc}`;
29930
30311
  getAssetDetails(variables, options) {
29931
30312
  return requester(GetAssetDetailsDocument, variables, options);
29932
30313
  },
30314
+ assembleTx(variables, options) {
30315
+ return requester(AssembleTxDocument, variables, options);
30316
+ },
29933
30317
  dryRun(variables, options) {
29934
30318
  return requester(DryRunDocument, variables, options);
29935
30319
  },
@@ -29958,9 +30342,67 @@ ${GetMessageFragmentDoc}`;
29958
30342
  }
29959
30343
  __name(getSdk, "getSdk");
29960
30344
 
30345
+ // src/providers/assemble-tx-helpers.ts
30346
+ var resolveAccountForAssembleTxParams = /* @__PURE__ */ __name((account) => {
30347
+ const assembleTxAccount = {};
30348
+ const accountIsPredicate = "bytes" in account;
30349
+ if (accountIsPredicate) {
30350
+ assembleTxAccount.predicate = {
30351
+ predicate: hexlify(account.bytes),
30352
+ predicateAddress: account.address.toB256(),
30353
+ predicateData: hexlify(account.getPredicateData())
30354
+ };
30355
+ } else {
30356
+ assembleTxAccount.address = account.address.toB256();
30357
+ }
30358
+ return assembleTxAccount;
30359
+ }, "resolveAccountForAssembleTxParams");
30360
+ var setAndValidateGasAndFeeForAssembledTx = /* @__PURE__ */ __name(async (params) => {
30361
+ const { gasPrice, transactionRequest, setGasLimit, setMaxFee, provider } = params;
30362
+ const gasLimitSpecified = isDefined(setGasLimit);
30363
+ const maxFeeSpecified = isDefined(setMaxFee);
30364
+ const isScriptTx = transactionRequest.type === TransactionType.Script;
30365
+ if (gasLimitSpecified && isScriptTx) {
30366
+ const requiredGasLimit = transactionRequest.gasLimit;
30367
+ if (bn(setGasLimit).lt(bn(requiredGasLimit))) {
30368
+ throw new FuelError(
30369
+ ErrorCode.GAS_LIMIT_TOO_LOW,
30370
+ `Gas limit '${setGasLimit}' is lower than the required: '${requiredGasLimit}'.`
30371
+ );
30372
+ }
30373
+ transactionRequest.gasLimit = bn(setGasLimit);
30374
+ }
30375
+ if (maxFeeSpecified) {
30376
+ const requiredMaxFee = transactionRequest.maxFee;
30377
+ if (bn(setMaxFee).lt(requiredMaxFee)) {
30378
+ throw new FuelError(
30379
+ ErrorCode.MAX_FEE_TOO_LOW,
30380
+ `Max fee '${setMaxFee}' is lower than the required: '${requiredMaxFee}'.`
30381
+ );
30382
+ }
30383
+ transactionRequest.maxFee = bn(setMaxFee);
30384
+ }
30385
+ if (gasLimitSpecified && !maxFeeSpecified) {
30386
+ const { maxFee: feeForGasPrice } = await provider.estimateTxGasAndFee({
30387
+ transactionRequest,
30388
+ gasPrice
30389
+ });
30390
+ transactionRequest.maxFee = feeForGasPrice;
30391
+ }
30392
+ return transactionRequest;
30393
+ }, "setAndValidateGasAndFeeForAssembledTx");
30394
+
29961
30395
  // src/providers/utils/handle-gql-error-message.ts
30396
+ var gqlErrorMessage = {
30397
+ RPC_CONSISTENCY: /The required fuel block height is higher than the current block height. Required: \d+, Current: \d+/,
30398
+ NOT_ENOUGH_COINS_MAX_COINS: /the target cannot be met due to no coins available or exceeding the \d+ coin limit./,
30399
+ ASSET_NOT_FOUND: /resource was not found in table/,
30400
+ MULTIPLE_CHANGE_POLICIES: /The asset ([a-fA-F0-9]{64}) has multiple change policies/,
30401
+ DUPLICATE_CHANGE_OUTPUT_ACCOUNT: /required balances contain duplicate \(asset, account\) pair/,
30402
+ INSUFFICIENT_FEE_AMOUNT: /InsufficientFeeAmount { expected: (\d+), provided: (\d+) }/
30403
+ };
29962
30404
  var mapGqlErrorMessage = /* @__PURE__ */ __name((error2) => {
29963
- 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)) {
30405
+ if (gqlErrorMessage.NOT_ENOUGH_COINS_MAX_COINS.test(error2.message)) {
29964
30406
  return new FuelError(
29965
30407
  ErrorCode.INSUFFICIENT_FUNDS_OR_MAX_COINS,
29966
30408
  `Insufficient funds or too many small value coins. Consider combining UTXOs.`,
@@ -29968,7 +30410,25 @@ ${GetMessageFragmentDoc}`;
29968
30410
  error2
29969
30411
  );
29970
30412
  }
29971
- if (new RegExp("resource was not found in table" /* ASSET_NOT_FOUND */).test(error2.message)) {
30413
+ if (gqlErrorMessage.MULTIPLE_CHANGE_POLICIES.test(error2.message)) {
30414
+ const match = error2.message.match(/asset ([a-fA-F0-9]{64})/);
30415
+ const assetId = match?.[1] || "";
30416
+ return new FuelError(
30417
+ ErrorCode.CHANGE_OUTPUT_COLLISION,
30418
+ `OutputChange address for asset 0x${assetId} differs between transaction request and assembleTx parameters.`,
30419
+ {},
30420
+ error2
30421
+ );
30422
+ }
30423
+ if (gqlErrorMessage.DUPLICATE_CHANGE_OUTPUT_ACCOUNT.test(error2.message)) {
30424
+ return new FuelError(
30425
+ ErrorCode.DUPLICATE_CHANGE_OUTPUT_ACCOUNT,
30426
+ `The parameter 'accountCoinQuantities' of assembleTx contains duplicate entries for the same assetId with different 'changeOutputAccount'.`,
30427
+ {},
30428
+ error2
30429
+ );
30430
+ }
30431
+ if (gqlErrorMessage.ASSET_NOT_FOUND.test(error2.message)) {
29972
30432
  return new FuelError(
29973
30433
  ErrorCode.ASSET_NOT_FOUND,
29974
30434
  `Asset not found for given asset id.`,
@@ -29976,6 +30436,13 @@ ${GetMessageFragmentDoc}`;
29976
30436
  error2
29977
30437
  );
29978
30438
  }
30439
+ if (gqlErrorMessage.RPC_CONSISTENCY.test(error2.message)) {
30440
+ return new FuelError(ErrorCode.RPC_CONSISTENCY, error2.message, {}, error2);
30441
+ }
30442
+ if (gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT.test(error2.message)) {
30443
+ const match = error2.message.match(gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT);
30444
+ return new FuelError(ErrorCode.FUNDS_TOO_LOW, match?.[0] || error2.message, {}, error2);
30445
+ }
29979
30446
  return new FuelError(ErrorCode.INVALID_REQUEST, error2.message, {}, error2);
29980
30447
  }, "mapGqlErrorMessage");
29981
30448
  var mapGqlErrorWithIncompatibleNodeVersion = /* @__PURE__ */ __name((error2, incompatibleNodeVersionMessage) => {
@@ -30008,8 +30475,9 @@ ${incompatibleNodeVersionMessage}`,
30008
30475
 
30009
30476
  // src/providers/fuel-graphql-subscriber.ts
30010
30477
  var FuelGraphqlSubscriber = class _FuelGraphqlSubscriber {
30011
- constructor(stream) {
30478
+ constructor(stream, onEvent) {
30012
30479
  this.stream = stream;
30480
+ this.onEvent = onEvent;
30013
30481
  }
30014
30482
  static {
30015
30483
  __name(this, "FuelGraphqlSubscriber");
@@ -30017,12 +30485,13 @@ ${incompatibleNodeVersionMessage}`,
30017
30485
  static incompatibleNodeVersionMessage = false;
30018
30486
  static textDecoder = new TextDecoder();
30019
30487
  static async create(options) {
30020
- const { url, query, variables, fetchFn } = options;
30488
+ const { url, query, variables, fetchFn, operationName, onEvent } = options;
30021
30489
  const response = await fetchFn(`${url}-sub`, {
30022
30490
  method: "POST",
30023
30491
  body: JSON.stringify({
30024
30492
  query: print(query),
30025
- variables
30493
+ variables,
30494
+ operationName
30026
30495
  }),
30027
30496
  headers: {
30028
30497
  "Content-Type": "application/json",
@@ -30031,39 +30500,71 @@ ${incompatibleNodeVersionMessage}`,
30031
30500
  });
30032
30501
  const [errorReader, resultReader] = response.body.tee().map((stream) => stream.getReader());
30033
30502
  await new _FuelGraphqlSubscriber(errorReader).next();
30034
- return new _FuelGraphqlSubscriber(resultReader);
30503
+ return new _FuelGraphqlSubscriber(resultReader, onEvent);
30035
30504
  }
30036
- events = [];
30037
- parsingLeftover = "";
30038
- async next() {
30505
+ /**
30506
+ * This method will take a stream reader and parse the event from the stream.
30507
+ *
30508
+ * @param reader - The reader of the SSE stream
30509
+ * @param parsingLeftover - The leftover string from parsing the previous event
30510
+ * @returns The event parsed as a full GraphQL response, whether the stream is done and the leftover string after parsing
30511
+ */
30512
+ static async readEvent(reader, parsingLeftover = "") {
30513
+ let text = parsingLeftover;
30514
+ const regex = /data:.*\n\n/g;
30039
30515
  while (true) {
30040
- if (this.events.length > 0) {
30041
- const { data, errors: errors2 } = this.events.shift();
30042
- assertGqlResponseHasNoErrors(errors2, _FuelGraphqlSubscriber.incompatibleNodeVersionMessage);
30043
- return { value: data, done: false };
30044
- }
30045
- const { value, done } = await this.stream.read();
30046
- if (done) {
30047
- return { value, done };
30048
- }
30049
- const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
30050
- if (decoded === "") {
30051
- continue;
30052
- }
30053
- const text = `${this.parsingLeftover}${decoded}`;
30054
- const regex = /data:.*\n\n/g;
30055
30516
  const matches = [...text.matchAll(regex)].flatMap((match) => match);
30056
- matches.forEach((match) => {
30517
+ if (matches.length > 0) {
30057
30518
  try {
30058
- this.events.push(JSON.parse(match.replace(/^data:/, "")));
30519
+ const event = JSON.parse(matches[0].replace(/^data:/, ""));
30520
+ return {
30521
+ event,
30522
+ done: false,
30523
+ parsingLeftover: text.replace(matches[0], "")
30524
+ };
30059
30525
  } catch (e) {
30060
30526
  throw new FuelError(
30061
30527
  ErrorCode.STREAM_PARSING_ERROR,
30062
30528
  `Error while parsing stream data response: ${text}`
30063
30529
  );
30064
30530
  }
30065
- });
30066
- this.parsingLeftover = text.replace(matches.join(), "");
30531
+ }
30532
+ const { value, done } = await reader.read();
30533
+ if (done) {
30534
+ return { event: void 0, done, parsingLeftover: "" };
30535
+ }
30536
+ const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
30537
+ text += decoded;
30538
+ }
30539
+ }
30540
+ events = [];
30541
+ parsingLeftover = "";
30542
+ /**
30543
+ * Gets automatically called when iterating in a `for-await-of` loop.
30544
+ * It can also be called manually.
30545
+ *
30546
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next
30547
+ */
30548
+ async next() {
30549
+ while (true) {
30550
+ const nextEvent = this.events.shift();
30551
+ if (nextEvent) {
30552
+ this.onEvent?.(nextEvent);
30553
+ assertGqlResponseHasNoErrors(
30554
+ nextEvent.errors,
30555
+ _FuelGraphqlSubscriber.incompatibleNodeVersionMessage
30556
+ );
30557
+ return { value: nextEvent.data, done: false };
30558
+ }
30559
+ const { event, done, parsingLeftover } = await _FuelGraphqlSubscriber.readEvent(
30560
+ this.stream,
30561
+ this.parsingLeftover
30562
+ );
30563
+ this.parsingLeftover = parsingLeftover;
30564
+ if (done) {
30565
+ return { value: void 0, done: true };
30566
+ }
30567
+ this.events.push(event);
30067
30568
  }
30068
30569
  }
30069
30570
  /**
@@ -30109,7 +30610,7 @@ ${incompatibleNodeVersionMessage}`,
30109
30610
  case InputType.Contract: {
30110
30611
  return {
30111
30612
  type: InputType.Contract,
30112
- txID: ZeroBytes32,
30613
+ txID: hexlify(value.txID || ZeroBytes32),
30113
30614
  outputIndex: 0,
30114
30615
  balanceRoot: ZeroBytes32,
30115
30616
  stateRoot: ZeroBytes32,
@@ -30180,9 +30681,9 @@ ${incompatibleNodeVersionMessage}`,
30180
30681
  case OutputType.Variable: {
30181
30682
  return {
30182
30683
  type: OutputType.Variable,
30183
- to: ZeroBytes32,
30184
- amount: bn(0),
30185
- assetId: ZeroBytes32
30684
+ to: hexlify(value.to || ZeroBytes32),
30685
+ amount: bn(value.amount),
30686
+ assetId: hexlify(value.assetId || ZeroBytes32)
30186
30687
  };
30187
30688
  }
30188
30689
  case OutputType.ContractCreated: {
@@ -30226,6 +30727,7 @@ ${incompatibleNodeVersionMessage}`,
30226
30727
  "BlobIdAlreadyUploaded",
30227
30728
  "BlobNotFound",
30228
30729
  "BytecodeAlreadyUploaded",
30730
+ "CanNotGetGasPriceInPredicate",
30229
30731
  "ContractIdAlreadyDeployed",
30230
30732
  "ContractInstructionNotAllowed",
30231
30733
  "ContractMaxSize",
@@ -30249,6 +30751,7 @@ ${incompatibleNodeVersionMessage}`,
30249
30751
  "InvalidImmediateValue",
30250
30752
  "InvalidInstruction",
30251
30753
  "InvalidMetadataIdentifier",
30754
+ "InvalidUpgradePurposeType",
30252
30755
  "MalformedCallStructure",
30253
30756
  "MaxStaticContractsReached",
30254
30757
  "MemoryGrowthOverlap",
@@ -30265,8 +30768,10 @@ ${incompatibleNodeVersionMessage}`,
30265
30768
  "PolicyIsNotSet",
30266
30769
  "PolicyNotFound",
30267
30770
  "PredicateReturnedNonOne",
30771
+ "ProofInUploadNotFound",
30268
30772
  "ReservedRegisterNotWritable",
30269
30773
  "Revert",
30774
+ "StorageSlotsNotFound",
30270
30775
  "ThePartIsNotSequentiallyConnected",
30271
30776
  "TooManyReceipts",
30272
30777
  "TooManySlots",
@@ -30285,7 +30790,7 @@ ${incompatibleNodeVersionMessage}`,
30285
30790
 
30286
30791
  // src/providers/utils/serialization.ts
30287
30792
  var deserializeChain = /* @__PURE__ */ __name((chain) => {
30288
- const { name, daHeight, consensusParameters } = chain;
30793
+ const { name, daHeight, consensusParameters, latestBlock } = chain;
30289
30794
  const {
30290
30795
  contractParams,
30291
30796
  feeParams,
@@ -30336,11 +30841,12 @@ ${incompatibleNodeVersionMessage}`,
30336
30841
  maxScriptDataLength: bn(scriptParams.maxScriptDataLength)
30337
30842
  },
30338
30843
  gasCosts
30339
- }
30844
+ },
30845
+ latestBlock
30340
30846
  };
30341
30847
  }, "deserializeChain");
30342
30848
  var serializeChain = /* @__PURE__ */ __name((chain) => {
30343
- const { name, baseChainHeight, consensusParameters } = chain;
30849
+ const { name, baseChainHeight, consensusParameters, latestBlock } = chain;
30344
30850
  const {
30345
30851
  contractParameters,
30346
30852
  feeParameters,
@@ -30391,7 +30897,8 @@ ${incompatibleNodeVersionMessage}`,
30391
30897
  maxScriptDataLength: scriptParameters.maxScriptDataLength.toString()
30392
30898
  },
30393
30899
  gasCosts
30394
- }
30900
+ },
30901
+ latestBlock
30395
30902
  };
30396
30903
  }, "serializeChain");
30397
30904
  var deserializeNodeInfo = /* @__PURE__ */ __name((nodeInfo) => {
@@ -30620,10 +31127,145 @@ ${incompatibleNodeVersionMessage}`,
30620
31127
  throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);
30621
31128
  }
30622
31129
  }, "deserializeReceipt");
30623
-
30624
- // src/providers/utils/receipts.ts
30625
- var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
30626
- var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
31130
+ var deserializeInput = /* @__PURE__ */ __name((input) => {
31131
+ let parsedInput;
31132
+ switch (input.type) {
31133
+ case "InputCoin":
31134
+ parsedInput = {
31135
+ type: InputType.Coin,
31136
+ id: input.utxoId,
31137
+ amount: bn(input.amount),
31138
+ assetId: input.assetId,
31139
+ owner: input.owner,
31140
+ txPointer: `0x${input.txPointer}`,
31141
+ witnessIndex: Number(input.coinWitnessIndex),
31142
+ predicate: input.predicate,
31143
+ predicateData: input.predicateData,
31144
+ predicateGasUsed: bn(input.predicateGasUsed)
31145
+ };
31146
+ break;
31147
+ case "InputMessage":
31148
+ parsedInput = {
31149
+ type: InputType.Message,
31150
+ nonce: input.nonce,
31151
+ amount: bn(input.amount),
31152
+ recipient: input.recipient,
31153
+ sender: input.sender,
31154
+ data: input.data,
31155
+ witnessIndex: Number(input.messageWitnessIndex),
31156
+ predicate: input.predicate,
31157
+ predicateData: input.predicateData,
31158
+ predicateGasUsed: bn(input.predicateGasUsed)
31159
+ };
31160
+ break;
31161
+ case "InputContract":
31162
+ parsedInput = {
31163
+ type: InputType.Contract,
31164
+ contractId: input.contractId,
31165
+ txPointer: `0x${input.txPointer}`,
31166
+ txID: hexlify(arrayify(input.utxoId).slice(0, 32))
31167
+ };
31168
+ break;
31169
+ default:
31170
+ assertUnreachable(input);
31171
+ }
31172
+ return parsedInput;
31173
+ }, "deserializeInput");
31174
+ var deserializeOutput = /* @__PURE__ */ __name((output) => {
31175
+ let parsedOutput;
31176
+ switch (output.type) {
31177
+ case "CoinOutput":
31178
+ parsedOutput = {
31179
+ type: OutputType.Coin,
31180
+ amount: bn(output.amount),
31181
+ assetId: output.assetId,
31182
+ to: output.to
31183
+ };
31184
+ break;
31185
+ case "ContractOutput":
31186
+ parsedOutput = {
31187
+ type: OutputType.Contract,
31188
+ inputIndex: Number(output.inputIndex)
31189
+ };
31190
+ break;
31191
+ case "ChangeOutput":
31192
+ parsedOutput = {
31193
+ type: OutputType.Change,
31194
+ assetId: output.assetId,
31195
+ to: output.to
31196
+ };
31197
+ break;
31198
+ case "ContractCreated":
31199
+ parsedOutput = {
31200
+ type: OutputType.ContractCreated,
31201
+ stateRoot: output.stateRoot,
31202
+ contractId: output.contract
31203
+ };
31204
+ break;
31205
+ case "VariableOutput":
31206
+ parsedOutput = {
31207
+ type: OutputType.Variable,
31208
+ amount: bn(output.amount),
31209
+ assetId: output.assetId,
31210
+ to: output.to
31211
+ };
31212
+ break;
31213
+ default:
31214
+ assertUnreachable(output);
31215
+ }
31216
+ return parsedOutput;
31217
+ }, "deserializeOutput");
31218
+ var deserializeProcessedTxOutput = /* @__PURE__ */ __name((output) => {
31219
+ let parsedOutput;
31220
+ switch (output.type) {
31221
+ case "CoinOutput":
31222
+ parsedOutput = {
31223
+ type: OutputType.Coin,
31224
+ amount: bn(output.amount),
31225
+ assetId: output.assetId,
31226
+ to: output.to
31227
+ };
31228
+ break;
31229
+ case "ContractOutput":
31230
+ parsedOutput = {
31231
+ type: OutputType.Contract,
31232
+ inputIndex: Number(output.inputIndex),
31233
+ balanceRoot: output.balanceRoot,
31234
+ stateRoot: output.stateRoot
31235
+ };
31236
+ break;
31237
+ case "ChangeOutput":
31238
+ parsedOutput = {
31239
+ type: OutputType.Change,
31240
+ assetId: output.assetId,
31241
+ to: output.to,
31242
+ amount: bn(output.amount)
31243
+ };
31244
+ break;
31245
+ case "ContractCreated":
31246
+ parsedOutput = {
31247
+ type: OutputType.ContractCreated,
31248
+ stateRoot: output.stateRoot,
31249
+ contractId: output.contract
31250
+ };
31251
+ break;
31252
+ case "VariableOutput":
31253
+ parsedOutput = {
31254
+ type: OutputType.Variable,
31255
+ amount: bn(output.amount),
31256
+ assetId: output.assetId,
31257
+ to: output.to
31258
+ };
31259
+ break;
31260
+ default:
31261
+ assertUnreachable(output);
31262
+ }
31263
+ return parsedOutput;
31264
+ }, "deserializeProcessedTxOutput");
31265
+
31266
+ // src/providers/utils/receipts.ts
31267
+ var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
31268
+ var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
30627
31269
  var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
30628
31270
  (memo, receipt) => {
30629
31271
  if (doesReceiptHaveMissingOutputVariables(receipt)) {
@@ -30900,6 +31542,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
30900
31542
  return assembleRevertError(receipts, logs, metadata);
30901
31543
  }, "extractTxError");
30902
31544
 
31545
+ // src/providers/utils/merge-quantities.ts
31546
+ var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
31547
+ const resultMap = {};
31548
+ function addToMap({ amount, assetId }) {
31549
+ if (resultMap[assetId]) {
31550
+ resultMap[assetId] = resultMap[assetId].add(amount);
31551
+ } else {
31552
+ resultMap[assetId] = amount;
31553
+ }
31554
+ }
31555
+ __name(addToMap, "addToMap");
31556
+ coinQuantities.forEach((arr) => arr.forEach(addToMap));
31557
+ return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
31558
+ }, "mergeQuantities");
31559
+
30903
31560
  // src/providers/transaction-request/errors.ts
30904
31561
  var NoWitnessAtIndexError = class extends Error {
30905
31562
  constructor(index) {
@@ -31003,8 +31660,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31003
31660
  /** List of witnesses */
31004
31661
  witnesses = [];
31005
31662
  /**
31006
- * @hidden
31007
- *
31008
31663
  * The current status of the transaction
31009
31664
  */
31010
31665
  flag = { state: void 0, transactionId: void 0, summary: void 0 };
@@ -31021,7 +31676,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31021
31676
  witnessLimit,
31022
31677
  inputs,
31023
31678
  outputs,
31024
- witnesses
31679
+ witnesses,
31680
+ flag
31025
31681
  } = {}) {
31026
31682
  this.tip = tip ? bn(tip) : void 0;
31027
31683
  this.maturity = maturity && maturity > 0 ? maturity : void 0;
@@ -31031,6 +31687,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31031
31687
  this.inputs = inputs ?? [];
31032
31688
  this.outputs = outputs ?? [];
31033
31689
  this.witnesses = witnesses ?? [];
31690
+ this.flag = flag ?? { state: void 0, transactionId: void 0, summary: void 0 };
31034
31691
  }
31035
31692
  static getPolicyMeta(req) {
31036
31693
  let policyTypes = 0;
@@ -31819,6 +32476,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31819
32476
  * @param account - The account to fund the transaction.
31820
32477
  * @param params - The parameters for the transaction cost.
31821
32478
  * @returns The current instance of the `ScriptTransactionRequest` funded.
32479
+ *
32480
+ * @deprecated Use `provider.assembleTx` instead.
32481
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
31822
32482
  */
31823
32483
  async estimateAndFund(account, { signatureCallback, quantities = [] } = {}) {
31824
32484
  const txCost = await account.getTransactionCost(this, { signatureCallback, quantities });
@@ -31902,6 +32562,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31902
32562
  }
31903
32563
  return this.outputs.length - 1;
31904
32564
  }
32565
+ /**
32566
+ * Adds a variable output to the transaction request.
32567
+ *
32568
+ * @param to - The recipient address as a BytesLike object. Defaults to ZeroBytes32 if not provided.
32569
+ * @param amount - The amount to be transferred as a BigNumberish object. Defaults to 0 if not provided.
32570
+ * @param assetId - The asset ID as a BytesLike object. Defaults to ZeroBytes32 if not provided.
32571
+ */
32572
+ addVariableOutput(to, amount, assetId) {
32573
+ this.pushOutput({
32574
+ type: OutputType.Variable,
32575
+ to,
32576
+ amount,
32577
+ assetId
32578
+ });
32579
+ }
31905
32580
  /**
31906
32581
  * Calculates the maximum gas for the transaction.
31907
32582
  *
@@ -32978,6 +33653,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32978
33653
  return "submitted" /* submitted */;
32979
33654
  case "SqueezedOutStatus":
32980
33655
  return "squeezedout" /* squeezedout */;
33656
+ case "PreconfirmationSuccessStatus":
33657
+ return "preconfirmationSuccess" /* preconfirmationSuccess */;
33658
+ case "PreconfirmationFailureStatus":
33659
+ return "preconfirmationFailure" /* preconfirmationFailure */;
32981
33660
  default:
32982
33661
  throw new FuelError(
32983
33662
  ErrorCode.INVALID_TRANSACTION_STATUS,
@@ -32985,15 +33664,30 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32985
33664
  );
32986
33665
  }
32987
33666
  }, "getTransactionStatusName");
33667
+ var extractResolvedOutputs = /* @__PURE__ */ __name((serializedOutputs) => {
33668
+ const resolvedOutputs = [];
33669
+ serializedOutputs?.forEach(
33670
+ ({ utxoId, output }) => resolvedOutputs.push({
33671
+ utxoId,
33672
+ output: deserializeProcessedTxOutput(output)
33673
+ })
33674
+ );
33675
+ return resolvedOutputs;
33676
+ }, "extractResolvedOutputs");
32988
33677
  var processGraphqlStatus = /* @__PURE__ */ __name((gqlTransactionStatus) => {
32989
33678
  let time;
32990
33679
  let blockId;
32991
33680
  let status;
32992
33681
  let totalFee;
32993
33682
  let totalGas;
33683
+ let receipts;
33684
+ let resolvedOutputs = [];
33685
+ let errorReason;
32994
33686
  let isStatusFailure = false;
32995
33687
  let isStatusSuccess = false;
32996
33688
  let isStatusPending = false;
33689
+ let isStatusPreConfirmationSuccess = false;
33690
+ let isStatusPreConfirmationFailure = false;
32997
33691
  if (gqlTransactionStatus?.type) {
32998
33692
  status = getTransactionStatusName(gqlTransactionStatus.type);
32999
33693
  switch (gqlTransactionStatus.type) {
@@ -33001,6 +33695,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33001
33695
  time = gqlTransactionStatus.time;
33002
33696
  blockId = gqlTransactionStatus.block?.id;
33003
33697
  isStatusSuccess = true;
33698
+ receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
33004
33699
  totalFee = bn(gqlTransactionStatus.totalFee);
33005
33700
  totalGas = bn(gqlTransactionStatus.totalGas);
33006
33701
  break;
@@ -33009,12 +33704,28 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33009
33704
  blockId = gqlTransactionStatus.block?.id;
33010
33705
  isStatusFailure = true;
33011
33706
  totalFee = bn(gqlTransactionStatus.totalFee);
33707
+ receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
33012
33708
  totalGas = bn(gqlTransactionStatus.totalGas);
33013
33709
  break;
33014
33710
  case "SubmittedStatus":
33015
33711
  time = gqlTransactionStatus.time;
33016
33712
  isStatusPending = true;
33017
33713
  break;
33714
+ case "PreconfirmationSuccessStatus":
33715
+ isStatusPreConfirmationSuccess = true;
33716
+ totalFee = bn(gqlTransactionStatus.totalFee);
33717
+ totalGas = bn(gqlTransactionStatus.totalGas);
33718
+ receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
33719
+ resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
33720
+ break;
33721
+ case "PreconfirmationFailureStatus":
33722
+ isStatusPreConfirmationFailure = true;
33723
+ totalFee = bn(gqlTransactionStatus.totalFee);
33724
+ totalGas = bn(gqlTransactionStatus.totalGas);
33725
+ receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
33726
+ resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
33727
+ errorReason = gqlTransactionStatus.reason;
33728
+ break;
33018
33729
  default:
33019
33730
  }
33020
33731
  }
@@ -33024,9 +33735,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33024
33735
  status,
33025
33736
  totalFee,
33026
33737
  totalGas,
33738
+ receipts,
33027
33739
  isStatusFailure,
33028
33740
  isStatusSuccess,
33029
- isStatusPending
33741
+ isStatusPending,
33742
+ isStatusPreConfirmationSuccess,
33743
+ isStatusPreConfirmationFailure,
33744
+ resolvedOutputs,
33745
+ errorReason
33030
33746
  };
33031
33747
  return processedGraphqlStatus;
33032
33748
  }, "processGraphqlStatus");
@@ -33111,6 +33827,81 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33111
33827
  return transactionSummary;
33112
33828
  }
33113
33829
  __name(assembleTransactionSummary, "assembleTransactionSummary");
33830
+ function assemblePreConfirmationTransactionSummary(params) {
33831
+ const { id, gqlTransactionStatus, transactionRequest, baseAssetId, maxInputs, abiMap } = params;
33832
+ let type3;
33833
+ let operations;
33834
+ let gasUsed;
33835
+ let tip;
33836
+ let transaction;
33837
+ let mintedAssets;
33838
+ let burnedAssets;
33839
+ const {
33840
+ isStatusFailure,
33841
+ isStatusSuccess,
33842
+ isStatusPending,
33843
+ status,
33844
+ receipts,
33845
+ resolvedOutputs,
33846
+ errorReason,
33847
+ totalFee,
33848
+ isStatusPreConfirmationFailure,
33849
+ isStatusPreConfirmationSuccess
33850
+ } = processGraphqlStatus(gqlTransactionStatus);
33851
+ if (receipts) {
33852
+ gasUsed = getGasUsedFromReceipts(receipts);
33853
+ mintedAssets = extractMintedAssetsFromReceipts(receipts);
33854
+ burnedAssets = extractBurnedAssetsFromReceipts(receipts);
33855
+ }
33856
+ if (transactionRequest) {
33857
+ transaction = transactionRequest.toTransaction();
33858
+ type3 = getTransactionTypeName(transaction.type);
33859
+ tip = bn(transaction.policies?.find((policy) => policy.type === PolicyType.Tip)?.data);
33860
+ if (receipts) {
33861
+ const rawPayload = hexlify(new TransactionCoder().encode(transaction));
33862
+ operations = getOperations({
33863
+ transactionType: transaction.type,
33864
+ inputs: transaction.inputs || [],
33865
+ outputs: transaction.outputs || [],
33866
+ receipts,
33867
+ rawPayload,
33868
+ abiMap,
33869
+ maxInputs,
33870
+ baseAssetId
33871
+ });
33872
+ }
33873
+ }
33874
+ const transactionSummary = {
33875
+ id,
33876
+ fee: totalFee,
33877
+ type: type3,
33878
+ status,
33879
+ receipts,
33880
+ gasUsed,
33881
+ tip,
33882
+ isStatusPreConfirmationFailure,
33883
+ isStatusPreConfirmationSuccess,
33884
+ isStatusFailure,
33885
+ isStatusSuccess,
33886
+ isStatusPending,
33887
+ ...transaction && {
33888
+ isTypeMint: isTypeMint(transaction.type),
33889
+ isTypeCreate: isTypeCreate(transaction.type),
33890
+ isTypeScript: isTypeScript(transaction.type),
33891
+ isTypeUpgrade: isTypeUpgrade(transaction.type),
33892
+ isTypeUpload: isTypeUpload(transaction.type),
33893
+ isTypeBlob: isTypeBlob(transaction.type)
33894
+ },
33895
+ mintedAssets,
33896
+ burnedAssets,
33897
+ resolvedOutputs,
33898
+ errorReason,
33899
+ transaction,
33900
+ operations
33901
+ };
33902
+ return transactionSummary;
33903
+ }
33904
+ __name(assemblePreConfirmationTransactionSummary, "assemblePreConfirmationTransactionSummary");
33114
33905
 
33115
33906
  // src/providers/transaction-response/getAllDecodedLogs.ts
33116
33907
  function getAllDecodedLogs(opts) {
@@ -33120,7 +33911,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33120
33911
  const firstCallReceipt = receipts.find(
33121
33912
  (r) => r.type === ReceiptType.Call && r.id === ZeroBytes32
33122
33913
  );
33123
- mainContract = firstCallReceipt.to;
33914
+ if (firstCallReceipt) {
33915
+ mainContract = firstCallReceipt.to;
33916
+ }
33124
33917
  }
33125
33918
  return receipts.reduce(
33126
33919
  ({ logs, groupedLogs }, receipt) => {
@@ -33143,37 +33936,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33143
33936
  __name(getAllDecodedLogs, "getAllDecodedLogs");
33144
33937
 
33145
33938
  // src/providers/transaction-response/transaction-response.ts
33146
- function mapGqlOutputsToTxOutputs(outputs) {
33147
- return outputs.map((o) => {
33148
- const obj = "amount" in o ? { ...o, amount: bn(o.amount) } : o;
33149
- switch (obj.type) {
33150
- case "CoinOutput":
33151
- return { ...obj, type: OutputType.Coin };
33152
- case "ContractOutput":
33153
- return {
33154
- ...obj,
33155
- type: OutputType.Contract,
33156
- inputIndex: parseInt(obj.inputIndex, 10)
33157
- };
33158
- case "ChangeOutput":
33159
- return {
33160
- ...obj,
33161
- type: OutputType.Change
33162
- };
33163
- case "VariableOutput":
33164
- return { ...obj, type: OutputType.Variable };
33165
- case "ContractCreated":
33166
- return {
33167
- ...obj,
33168
- type: OutputType.ContractCreated,
33169
- contractId: obj.contract
33170
- };
33171
- default:
33172
- return assertUnreachable(obj);
33173
- }
33174
- });
33175
- }
33176
- __name(mapGqlOutputsToTxOutputs, "mapGqlOutputsToTxOutputs");
33177
33939
  var TransactionResponse = class _TransactionResponse {
33178
33940
  /**
33179
33941
  * Constructor for `TransactionResponse`.
@@ -33183,11 +33945,16 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33183
33945
  */
33184
33946
  constructor(tx, provider, chainId, abis, submitTxSubscription) {
33185
33947
  this.submitTxSubscription = submitTxSubscription;
33186
- this.id = typeof tx === "string" ? tx : tx.getTransactionId(chainId);
33948
+ if (typeof tx === "string") {
33949
+ this.id = tx;
33950
+ } else {
33951
+ this.id = tx.getTransactionId(chainId);
33952
+ this.request = tx;
33953
+ }
33187
33954
  this.provider = provider;
33188
33955
  this.abis = abis;
33189
- this.request = typeof tx === "string" ? void 0 : tx;
33190
33956
  this.waitForResult = this.waitForResult.bind(this);
33957
+ this.waitForPreConfirmation = this.waitForPreConfirmation.bind(this);
33191
33958
  }
33192
33959
  static {
33193
33960
  __name(this, "TransactionResponse");
@@ -33203,6 +33970,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33203
33970
  request;
33204
33971
  status;
33205
33972
  abis;
33973
+ preConfirmationStatus;
33974
+ waitingForStreamData = false;
33975
+ statusResolvers = /* @__PURE__ */ new Map();
33206
33976
  /**
33207
33977
  * Async constructor for `TransactionResponse`. This method can be used to create
33208
33978
  * an instance of `TransactionResponse` and wait for the transaction to be fetched
@@ -33234,29 +34004,38 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33234
34004
  }
33235
34005
  return input;
33236
34006
  });
33237
- tx.outputs = mapGqlOutputsToTxOutputs(status.transaction.outputs);
33238
- if ("receiptsRoot" in status.transaction) {
34007
+ tx.outputs = status.transaction.outputs.map(deserializeProcessedTxOutput);
34008
+ if (status.transaction.receiptsRoot) {
33239
34009
  tx.receiptsRoot = status.transaction.receiptsRoot;
33240
34010
  }
33241
34011
  }
33242
34012
  }
33243
34013
  async getTransaction() {
33244
34014
  if (this.request) {
33245
- const tx = this.request.toTransaction();
33246
- this.applyMalleableSubscriptionFields(tx);
34015
+ const tx2 = this.request.toTransaction();
34016
+ this.applyMalleableSubscriptionFields(tx2);
33247
34017
  return {
33248
- tx,
34018
+ tx: tx2,
33249
34019
  bytes: this.request.toTransactionBytes()
33250
34020
  };
33251
34021
  }
33252
34022
  const gqlTransaction = this.gqlTransaction ?? await this.fetch();
34023
+ const { rawPayload } = gqlTransaction;
34024
+ const bytes = arrayify(rawPayload);
34025
+ const [tx] = new TransactionCoder().decode(bytes, 0);
33253
34026
  return {
33254
- tx: this.decodeTransaction(gqlTransaction),
33255
- bytes: arrayify(gqlTransaction.rawPayload)
34027
+ tx,
34028
+ bytes
33256
34029
  };
33257
34030
  }
34031
+ /**
34032
+ *
34033
+ * NOTE: This method is only called within `getTransactionSummary`, which is invoked after `getTransaction`.
34034
+ * Since `getTransaction` only resolves once the transaction has been processed,
34035
+ * the status at this point is guaranteed to be either `SuccessStatus` or `FailureStatus`.
34036
+ */
33258
34037
  getReceipts() {
33259
- const status = this.status ?? this.gqlTransaction?.status;
34038
+ const status = this.getTransactionStatus();
33260
34039
  switch (status?.type) {
33261
34040
  case "SuccessStatus":
33262
34041
  case "FailureStatus":
@@ -33289,18 +34068,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33289
34068
  this.gqlTransaction = response.transaction;
33290
34069
  return response.transaction;
33291
34070
  }
33292
- /**
33293
- * Decode the raw payload of the transaction.
33294
- *
33295
- * @param transactionWithReceipts - The transaction with receipts object.
33296
- * @returns The decoded transaction.
33297
- */
33298
- decodeTransaction(transactionWithReceipts) {
33299
- return new TransactionCoder().decode(
33300
- arrayify(transactionWithReceipts.rawPayload),
33301
- 0
33302
- )?.[0];
33303
- }
33304
34071
  /**
33305
34072
  * Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will
33306
34073
  * fetch it from the provider
@@ -33311,7 +34078,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33311
34078
  async getTransactionSummary(contractsAbiMap) {
33312
34079
  const { tx: transaction, bytes: transactionBytes } = await this.getTransaction();
33313
34080
  const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = await this.provider.getGasConfig();
33314
- const totalFee = getTotalFeeFromStatus(this.status ?? this.gqlTransaction?.status);
34081
+ const transactionStatus = this.getTransactionStatus();
34082
+ const totalFee = getTotalFeeFromStatus(transactionStatus);
33315
34083
  const gasPrice = totalFee ? bn(0) : await this.provider.getLatestGasPrice();
33316
34084
  const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
33317
34085
  const baseAssetId = await this.provider.getBaseAssetId();
@@ -33320,7 +34088,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33320
34088
  receipts: this.getReceipts(),
33321
34089
  transaction,
33322
34090
  transactionBytes,
33323
- gqlTransactionStatus: this.status ?? this.gqlTransaction?.status,
34091
+ gqlTransactionStatus: transactionStatus,
33324
34092
  gasPerByte,
33325
34093
  gasPriceFactor,
33326
34094
  abiMap: contractsAbiMap,
@@ -33332,29 +34100,92 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33332
34100
  });
33333
34101
  return transactionSummary;
33334
34102
  }
34103
+ async getPreConfirmationTransactionSummary(contractsAbiMap) {
34104
+ const baseAssetId = await this.provider.getBaseAssetId();
34105
+ const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
34106
+ const transactionSummary = assemblePreConfirmationTransactionSummary({
34107
+ id: this.id,
34108
+ gqlTransactionStatus: this.preConfirmationStatus || this.status,
34109
+ baseAssetId,
34110
+ maxInputs,
34111
+ abiMap: contractsAbiMap,
34112
+ transactionRequest: this.request
34113
+ });
34114
+ return transactionSummary;
34115
+ }
34116
+ resolveStatus(type3) {
34117
+ const resolvers = this.statusResolvers.get(type3) || [];
34118
+ resolvers.forEach((resolve) => resolve());
34119
+ this.statusResolvers.delete(type3);
34120
+ }
34121
+ async waitForStatus(type3) {
34122
+ return new Promise((resolve, reject) => {
34123
+ const resolvers = this.statusResolvers.get(type3) || [];
34124
+ resolvers.push(() => {
34125
+ resolve();
34126
+ });
34127
+ this.statusResolvers.set(type3, resolvers);
34128
+ this.waitForStatusChange().catch(reject);
34129
+ });
34130
+ }
34131
+ /**
34132
+ * Waits for the status change of the transaction.
34133
+ * If the transaction is already in a final state, it will return immediately.
34134
+ * If the transaction is not in a final state, it will wait for the status change.
34135
+ * If we are already subscribed to the status change, it will return immediately.
34136
+ */
33335
34137
  async waitForStatusChange() {
33336
- const status = this.gqlTransaction?.status?.type;
33337
- if (status && status !== "SubmittedStatus") {
34138
+ const type3 = this.status?.type;
34139
+ if (type3 && (type3 === "FailureStatus" || type3 === "SuccessStatus")) {
34140
+ this.resolveStatus("preConfirmation");
34141
+ this.resolveStatus("confirmation");
34142
+ return;
34143
+ }
34144
+ if (this.waitingForStreamData) {
33338
34145
  return;
33339
34146
  }
34147
+ this.waitingForStreamData = true;
33340
34148
  const subscription = this.submitTxSubscription ?? await this.provider.operations.statusChange({
33341
- transactionId: this.id
34149
+ transactionId: this.id,
34150
+ includePreConfirmation: true
33342
34151
  });
33343
34152
  for await (const sub of subscription) {
33344
34153
  const statusChange = "statusChange" in sub ? sub.statusChange : sub.submitAndAwaitStatus;
33345
34154
  this.status = statusChange;
33346
34155
  if (statusChange.type === "SqueezedOutStatus") {
33347
- this.unsetResourceCache();
33348
34156
  throw new FuelError(
33349
34157
  ErrorCode.TRANSACTION_SQUEEZED_OUT,
33350
34158
  `Transaction Squeezed Out with reason: ${statusChange.reason}`
33351
34159
  );
33352
34160
  }
33353
- if (statusChange.type !== "SubmittedStatus") {
34161
+ if (statusChange.type === "PreconfirmationSuccessStatus" || statusChange.type === "PreconfirmationFailureStatus") {
34162
+ this.preConfirmationStatus = statusChange;
34163
+ this.resolveStatus("preConfirmation");
34164
+ }
34165
+ if (statusChange.type === "SuccessStatus" || statusChange.type === "FailureStatus") {
34166
+ this.resolveStatus("confirmation");
34167
+ this.resolveStatus("preConfirmation");
34168
+ this.waitingForStreamData = false;
33354
34169
  break;
33355
34170
  }
33356
34171
  }
33357
34172
  }
34173
+ async waitForConfirmationStatuses() {
34174
+ try {
34175
+ await this.waitForStatus("confirmation");
34176
+ } catch (error2) {
34177
+ this.unsetResourceCache();
34178
+ throw error2;
34179
+ }
34180
+ }
34181
+ async waitForPreConfirmationStatuses() {
34182
+ try {
34183
+ await this.waitForStatus("preConfirmation");
34184
+ } catch (error2) {
34185
+ this.unsetResourceCache();
34186
+ throw error2;
34187
+ }
34188
+ }
33358
34189
  /**
33359
34190
  * Assembles the result of a transaction by retrieving the transaction summary,
33360
34191
  * decoding logs (if available), and handling transaction failure.
@@ -33383,7 +34214,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33383
34214
  transactionResult.groupedLogs = groupedLogs;
33384
34215
  }
33385
34216
  const { receipts } = transactionResult;
33386
- const status = this.status ?? this.gqlTransaction?.status;
34217
+ const status = this.getTransactionStatus();
33387
34218
  if (status?.type === "FailureStatus") {
33388
34219
  const { reason } = status;
33389
34220
  throw extractTxError({
@@ -33395,16 +34226,46 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33395
34226
  }
33396
34227
  return transactionResult;
33397
34228
  }
34229
+ async assemblePreConfirmationResult(contractsAbiMap) {
34230
+ const transactionSummary = await this.getPreConfirmationTransactionSummary(contractsAbiMap);
34231
+ const transactionResult = {
34232
+ ...transactionSummary,
34233
+ logs: [],
34234
+ groupedLogs: {}
34235
+ };
34236
+ let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
34237
+ if (this.abis && transactionSummary.receipts) {
34238
+ ({ logs, groupedLogs } = getAllDecodedLogs({
34239
+ receipts: transactionSummary.receipts,
34240
+ mainAbi: this.abis.main,
34241
+ externalAbis: this.abis.otherContractsAbis
34242
+ }));
34243
+ transactionResult.logs = logs;
34244
+ transactionResult.groupedLogs = groupedLogs;
34245
+ }
34246
+ return transactionResult;
34247
+ }
33398
34248
  /**
33399
34249
  * Waits for transaction to complete and returns the result.
33400
34250
  *
33401
34251
  * @returns The completed transaction result
33402
34252
  */
33403
34253
  async waitForResult(contractsAbiMap) {
33404
- await this.waitForStatusChange();
34254
+ await this.waitForConfirmationStatuses();
33405
34255
  this.unsetResourceCache();
33406
34256
  return this.assembleResult(contractsAbiMap);
33407
34257
  }
34258
+ /**
34259
+ * Waits for the transaction's pre-confirmation and returns the result.
34260
+ *
34261
+ * @param contractsAbiMap - The contracts ABI map.
34262
+ * @returns The pre-confirmed transaction result
34263
+ */
34264
+ async waitForPreConfirmation(contractsAbiMap) {
34265
+ await this.waitForPreConfirmationStatuses();
34266
+ this.unsetResourceCache();
34267
+ return this.assemblePreConfirmationResult(contractsAbiMap);
34268
+ }
33408
34269
  /**
33409
34270
  * Waits for transaction to complete and returns the result.
33410
34271
  *
@@ -33416,6 +34277,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33416
34277
  unsetResourceCache() {
33417
34278
  this.provider.cache?.unset(this.id);
33418
34279
  }
34280
+ getTransactionStatus() {
34281
+ return this.status ?? this.gqlTransaction?.status;
34282
+ }
33419
34283
  };
33420
34284
 
33421
34285
  // src/providers/utils/auto-retry-fetch.ts
@@ -33456,21 +34320,22 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33456
34320
  }
33457
34321
  __name(autoRetryFetch, "autoRetryFetch");
33458
34322
 
33459
- // src/providers/utils/helpers.ts
33460
- var adjustResourcesToExclude = /* @__PURE__ */ __name((params) => {
33461
- const { userInput, cached, maxInputs } = params;
33462
- const final = { ...userInput };
33463
- let total = final.utxos.length + final.messages.length;
33464
- if (total >= maxInputs) {
33465
- return final;
33466
- }
33467
- final.utxos = [...final.utxos, ...cached.utxos.slice(0, maxInputs - total)];
33468
- total = final.utxos.length + final.messages.length;
33469
- if (total < maxInputs) {
33470
- final.messages = [...final.messages, ...cached.messages.slice(0, maxInputs - total)];
34323
+ // src/providers/utils/parse-graphql-response.ts
34324
+ var parseGraphqlResponse = /* @__PURE__ */ __name(async (options) => {
34325
+ const { response, isSubscription } = options;
34326
+ let extensions;
34327
+ const responseClone = response.clone();
34328
+ if (isSubscription) {
34329
+ const reader = responseClone.body?.getReader();
34330
+ const { event } = await FuelGraphqlSubscriber.readEvent(reader);
34331
+ extensions = event?.extensions;
34332
+ } else {
34333
+ extensions = (await responseClone.json()).extensions;
33471
34334
  }
33472
- return final;
33473
- }, "adjustResourcesToExclude");
34335
+ return {
34336
+ extensions
34337
+ };
34338
+ }, "parseGraphqlResponse");
33474
34339
 
33475
34340
  // src/providers/utils/validate-pagination-args.ts
33476
34341
  var validatePaginationArgs = /* @__PURE__ */ __name((params) => {
@@ -33515,22 +34380,48 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33515
34380
  var BLOCKS_PAGE_SIZE_LIMIT = 5;
33516
34381
  var DEFAULT_RESOURCE_CACHE_TTL = 2e4;
33517
34382
  var GAS_USED_MODIFIER = 1.2;
34383
+ var WRITE_OPERATIONS = [
34384
+ "submit",
34385
+ "submitAndAwaitStatus",
34386
+ "produceBlocks"
34387
+ ];
33518
34388
  var Provider = class _Provider {
33519
34389
  static {
33520
34390
  __name(this, "Provider");
33521
34391
  }
33522
34392
  operations;
33523
34393
  cache;
33524
- /** @hidden */
33525
- static clearChainAndNodeCaches() {
34394
+ /**
34395
+ * @hidden
34396
+ * @param url - If provided, clears cache only for given url
34397
+ */
34398
+ static clearChainAndNodeCaches(url) {
34399
+ if (url) {
34400
+ delete _Provider.inflightFetchChainAndNodeInfoRequests[url];
34401
+ delete _Provider.chainInfoCache[url];
34402
+ delete _Provider.nodeInfoCache[url];
34403
+ delete _Provider.currentBlockHeightCache[url];
34404
+ return;
34405
+ }
33526
34406
  _Provider.inflightFetchChainAndNodeInfoRequests = {};
33527
34407
  _Provider.nodeInfoCache = {};
33528
34408
  _Provider.chainInfoCache = {};
34409
+ _Provider.currentBlockHeightCache = {};
33529
34410
  }
33530
34411
  /** @hidden */
33531
34412
  url;
33532
34413
  /** @hidden */
33533
34414
  urlWithoutAuth;
34415
+ /**
34416
+ * Governs whether to include the required block height in the request body
34417
+ * for block-sensitive operations like when submitting a transaction.
34418
+ *
34419
+ * This ensures that the operation is executed at the correct block height,
34420
+ * regardless of which node in the network the request is routed to.
34421
+ *
34422
+ * `true` by default.
34423
+ */
34424
+ static ENABLE_RPC_CONSISTENCY = true;
33534
34425
  /** @hidden */
33535
34426
  static inflightFetchChainAndNodeInfoRequests = {};
33536
34427
  /** @hidden */
@@ -33538,6 +34429,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33538
34429
  /** @hidden */
33539
34430
  static nodeInfoCache = {};
33540
34431
  /** @hidden */
34432
+ static currentBlockHeightCache = {};
34433
+ /** @hidden */
33541
34434
  static incompatibleNodeVersionMessage = "";
33542
34435
  /** @hidden */
33543
34436
  consensusParametersTimestamp;
@@ -33549,6 +34442,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33549
34442
  headers: void 0,
33550
34443
  cache: void 0
33551
34444
  };
34445
+ static extractOperationName(body) {
34446
+ return body?.toString().match(/"operationName":"(.+)"/)?.[1];
34447
+ }
34448
+ static isWriteOperation(body) {
34449
+ return WRITE_OPERATIONS.includes(this.extractOperationName(body));
34450
+ }
34451
+ static normalizeUrl(url) {
34452
+ return url.replace(/-sub$/, "");
34453
+ }
34454
+ static hasWriteOperationHappened(url) {
34455
+ return isDefined(_Provider.currentBlockHeightCache[this.normalizeUrl(url)]);
34456
+ }
33552
34457
  /**
33553
34458
  * @hidden
33554
34459
  */
@@ -33566,9 +34471,57 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33566
34471
  if (options.requestMiddleware) {
33567
34472
  fullRequest = await options.requestMiddleware(fullRequest);
33568
34473
  }
33569
- return options.fetch ? options.fetch(url, fullRequest, options) : fetch(url, fullRequest);
34474
+ if (_Provider.ENABLE_RPC_CONSISTENCY && _Provider.hasWriteOperationHappened(url)) {
34475
+ _Provider.applyBlockHeight(fullRequest, url);
34476
+ }
34477
+ return _Provider.fetchAndProcessBlockHeight(url, fullRequest, options);
33570
34478
  }, retryOptions);
33571
34479
  }
34480
+ static applyBlockHeight(request, url) {
34481
+ const normalizedUrl = this.normalizeUrl(url);
34482
+ const currentBlockHeight = _Provider.currentBlockHeightCache[normalizedUrl] ?? 0;
34483
+ request.body = request.body?.toString().replace(/}$/, `,"extensions":{"required_fuel_block_height":${currentBlockHeight}}}`);
34484
+ }
34485
+ static async fetchAndProcessBlockHeight(url, request, options) {
34486
+ const fetchFn = /* @__PURE__ */ __name(() => options.fetch ? options.fetch(url, request, options) : fetch(url, request), "fetchFn");
34487
+ const isWriteOperation = _Provider.isWriteOperation(request.body);
34488
+ if (isWriteOperation && !_Provider.hasWriteOperationHappened(url)) {
34489
+ _Provider.currentBlockHeightCache[_Provider.normalizeUrl(url)] = 0;
34490
+ }
34491
+ let response = await fetchFn();
34492
+ if (!_Provider.ENABLE_RPC_CONSISTENCY) {
34493
+ return response;
34494
+ }
34495
+ const retryOptions = {
34496
+ maxRetries: 5,
34497
+ baseDelay: 500
34498
+ };
34499
+ for (let retriesLeft = retryOptions.maxRetries; retriesLeft > 0; --retriesLeft) {
34500
+ const { extensions } = await parseGraphqlResponse({
34501
+ response,
34502
+ isSubscription: url.endsWith("-sub")
34503
+ });
34504
+ _Provider.setCurrentBlockHeight(url, extensions?.current_fuel_block_height);
34505
+ if (!extensions?.fuel_block_height_precondition_failed) {
34506
+ break;
34507
+ }
34508
+ const retryAttempt = retryOptions.maxRetries - retriesLeft + 1;
34509
+ const sleepTime = getWaitDelay(retryOptions, retryAttempt);
34510
+ await sleep(sleepTime);
34511
+ response = await fetchFn();
34512
+ }
34513
+ return response;
34514
+ }
34515
+ static setCurrentBlockHeight(url, height) {
34516
+ const writeOperationHappened = _Provider.hasWriteOperationHappened(url);
34517
+ if (!isDefined(height) || !writeOperationHappened) {
34518
+ return;
34519
+ }
34520
+ const normalizedUrl = _Provider.normalizeUrl(url);
34521
+ if (height > _Provider.currentBlockHeightCache[normalizedUrl]) {
34522
+ _Provider.currentBlockHeightCache[normalizedUrl] = height;
34523
+ }
34524
+ }
33572
34525
  /**
33573
34526
  * Constructor to initialize a Provider.
33574
34527
  *
@@ -33654,6 +34607,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33654
34607
  * Returns some helpful parameters related to gas fees.
33655
34608
  */
33656
34609
  async getGasConfig() {
34610
+ await this.init();
33657
34611
  const {
33658
34612
  txParameters: { maxGasPerTx },
33659
34613
  predicateParameters: { maxGasPerPredicate },
@@ -33778,7 +34732,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33778
34732
  url: this.urlWithoutAuth,
33779
34733
  query,
33780
34734
  fetchFn: /* @__PURE__ */ __name((url, requestInit) => fetchFn(url, requestInit, this.options), "fetchFn"),
33781
- variables: vars
34735
+ variables: vars,
34736
+ operationName: opDefinition.name.value,
34737
+ onEvent: /* @__PURE__ */ __name((event) => {
34738
+ _Provider.setCurrentBlockHeight(
34739
+ this.urlWithoutAuth,
34740
+ event.extensions?.current_fuel_block_height
34741
+ );
34742
+ }, "onEvent")
33782
34743
  });
33783
34744
  }
33784
34745
  return gqlClient.request(query, vars);
@@ -33936,7 +34897,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33936
34897
  * @param sendTransactionParams - The provider send transaction parameters (optional).
33937
34898
  * @returns A promise that resolves to the transaction response object.
33938
34899
  */
33939
- async sendTransaction(transactionRequestLike, { estimateTxDependencies = true, enableAssetBurn } = {}) {
34900
+ async sendTransaction(transactionRequestLike, {
34901
+ enableAssetBurn,
34902
+ estimateTxDependencies = true,
34903
+ includePreConfirmation: _includePreConfirmation = true
34904
+ } = {}) {
33940
34905
  const transactionRequest = transactionRequestify(transactionRequestLike);
33941
34906
  validateTransactionForAssetBurn(
33942
34907
  await this.getBaseAssetId(),
@@ -33952,7 +34917,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33952
34917
  if (isTransactionTypeScript(transactionRequest)) {
33953
34918
  abis = transactionRequest.abis;
33954
34919
  }
33955
- const subscription = await this.operations.submitAndAwaitStatus({ encodedTransaction });
34920
+ const subscription = await this.operations.submitAndAwaitStatus({
34921
+ encodedTransaction,
34922
+ includePreConfirmation: true
34923
+ });
33956
34924
  this.#cacheInputs(
33957
34925
  transactionRequest.inputs,
33958
34926
  transactionRequest.getTransactionId(await this.getChainId())
@@ -34204,7 +35172,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34204
35172
  }
34205
35173
  const chainInfo = _Provider.chainInfoCache[this.urlWithoutAuth];
34206
35174
  const {
34207
- consensusParameters: { version: previous }
35175
+ latestBlock: {
35176
+ header: { consensusParametersVersion: previous }
35177
+ }
34208
35178
  } = chainInfo;
34209
35179
  const {
34210
35180
  chain: {
@@ -34304,6 +35274,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34304
35274
  * @param transactionCostParams - The transaction cost parameters (optional).
34305
35275
  *
34306
35276
  * @returns A promise that resolves to the transaction cost object.
35277
+ *
35278
+ * @deprecated Use provider.assembleTx instead
35279
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
34307
35280
  */
34308
35281
  async getTransactionCost(transactionRequestLike, { signatureCallback, gasPrice: gasPriceParam } = {}) {
34309
35282
  const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
@@ -34346,7 +35319,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34346
35319
  }
34347
35320
  ({ rawReceipts, receipts, missingContractIds, outputVariables, dryRunStatus } = await this.estimateTxDependencies(txRequestClone, { gasPrice }));
34348
35321
  if (dryRunStatus && "reason" in dryRunStatus) {
34349
- throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus);
35322
+ throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus.reason);
34350
35323
  }
34351
35324
  const { maxGasPerTx } = await this.getGasConfig();
34352
35325
  const pristineGasUsed = getGasUsedFromReceipts(receipts);
@@ -34379,6 +35352,102 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34379
35352
  transactionSummary
34380
35353
  };
34381
35354
  }
35355
+ /**
35356
+ * Assembles a transaction by completely estimating and funding it.
35357
+ *
35358
+ * @param params - Parameters used to assemble the transaction.
35359
+ *
35360
+ * @returns The assembled transaction request, estimated gas price, and receipts
35361
+ */
35362
+ async assembleTx(params) {
35363
+ const {
35364
+ request,
35365
+ reserveGas,
35366
+ resourcesIdsToIgnore,
35367
+ feePayerAccount,
35368
+ blockHorizon = 10,
35369
+ estimatePredicates = true,
35370
+ accountCoinQuantities = []
35371
+ } = params;
35372
+ const allAddresses = /* @__PURE__ */ new Set();
35373
+ const baseAssetId = await this.getBaseAssetId();
35374
+ let feePayerIndex = -1;
35375
+ let baseAssetChange;
35376
+ const requiredBalances = accountCoinQuantities.map((quantity, index) => {
35377
+ const { amount, assetId, account = feePayerAccount, changeOutputAccount } = quantity;
35378
+ const changeAccountAddress = changeOutputAccount ? changeOutputAccount.address.toB256() : account.address.toB256();
35379
+ allAddresses.add(account.address.toB256());
35380
+ const changePolicy = {
35381
+ change: changeAccountAddress
35382
+ };
35383
+ if (assetId === baseAssetId) {
35384
+ baseAssetChange = changePolicy.change;
35385
+ }
35386
+ if (account.address.equals(feePayerAccount.address)) {
35387
+ feePayerIndex = index;
35388
+ }
35389
+ const requiredBalance = {
35390
+ account: resolveAccountForAssembleTxParams(account),
35391
+ amount: bn(amount).toString(10),
35392
+ assetId,
35393
+ changePolicy
35394
+ };
35395
+ return requiredBalance;
35396
+ });
35397
+ if (feePayerIndex === -1) {
35398
+ allAddresses.add(feePayerAccount.address.toB256());
35399
+ const newLength = requiredBalances.push({
35400
+ account: resolveAccountForAssembleTxParams(feePayerAccount),
35401
+ amount: bn(0).toString(10),
35402
+ // Since the correct fee amount cannot be determined yet, we can use 0
35403
+ assetId: baseAssetId,
35404
+ changePolicy: {
35405
+ change: baseAssetChange || feePayerAccount.address.toB256()
35406
+ }
35407
+ });
35408
+ feePayerIndex = newLength - 1;
35409
+ }
35410
+ const excludeInput = await this.adjustResourcesToIgnoreForAddresses(
35411
+ Array.from(allAddresses),
35412
+ resourcesIdsToIgnore
35413
+ );
35414
+ const {
35415
+ assembleTx: { status, transaction: gqlTransaction, gasPrice }
35416
+ } = await this.operations.assembleTx({
35417
+ tx: hexlify(request.toTransactionBytes()),
35418
+ blockHorizon: String(blockHorizon),
35419
+ feeAddressIndex: String(feePayerIndex),
35420
+ requiredBalances,
35421
+ estimatePredicates,
35422
+ excludeInput,
35423
+ reserveGas: reserveGas ? reserveGas.toString(10) : void 0
35424
+ });
35425
+ if (status.type === "DryRunFailureStatus") {
35426
+ const parsedReceipts = status.receipts.map(deserializeReceipt);
35427
+ throw this.extractDryRunError(request, parsedReceipts, status.reason);
35428
+ }
35429
+ request.witnesses = gqlTransaction.witnesses || request.witnesses;
35430
+ request.inputs = gqlTransaction.inputs?.map(deserializeInput) || request.inputs;
35431
+ request.outputs = gqlTransaction.outputs?.map(deserializeOutput) || request.outputs;
35432
+ if (gqlTransaction.policies?.maxFee) {
35433
+ request.maxFee = bn(gqlTransaction.policies.maxFee);
35434
+ }
35435
+ if (gqlTransaction.scriptGasLimit) {
35436
+ request.gasLimit = bn(gqlTransaction.scriptGasLimit);
35437
+ }
35438
+ const rawReceipts = status.receipts;
35439
+ const chainId = await this.getChainId();
35440
+ request.updateState(chainId, "funded", {
35441
+ gasPrice: gasPrice.toString(),
35442
+ receipts: rawReceipts
35443
+ });
35444
+ return {
35445
+ assembledRequest: request,
35446
+ gasPrice: bn(gasPrice),
35447
+ receipts: status.receipts.map(deserializeReceipt),
35448
+ rawReceipts
35449
+ };
35450
+ }
34382
35451
  /**
34383
35452
  * Returns coins for the given owner.
34384
35453
  *
@@ -34417,30 +35486,15 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34417
35486
  *
34418
35487
  * @param owner - The address to get resources for.
34419
35488
  * @param quantities - The coin quantities to get.
34420
- * @param excludedIds - IDs of excluded resources from the selection (optional).
35489
+ * @param resourcesIdsToIgnore - IDs of excluded resources from the selection (optional).
34421
35490
  * @returns A promise that resolves to the resources.
34422
35491
  */
34423
- async getResourcesToSpend(owner, quantities, excludedIds) {
35492
+ async getResourcesToSpend(owner, quantities, resourcesIdsToIgnore) {
34424
35493
  const ownerAddress = new Address(owner);
34425
- let idsToExclude = {
34426
- messages: excludedIds?.messages?.map((nonce) => hexlify(nonce)) || [],
34427
- utxos: excludedIds?.utxos?.map((id) => hexlify(id)) || []
34428
- };
34429
- if (this.cache) {
34430
- const cached = this.cache.getActiveData(ownerAddress.toB256());
34431
- if (cached.utxos.length || cached.messages.length) {
34432
- const {
34433
- consensusParameters: {
34434
- txParameters: { maxInputs }
34435
- }
34436
- } = await this.getChain();
34437
- idsToExclude = adjustResourcesToExclude({
34438
- userInput: idsToExclude,
34439
- cached,
34440
- maxInputs: maxInputs.toNumber()
34441
- });
34442
- }
34443
- }
35494
+ const excludedIds = await this.adjustResourcesToIgnoreForAddresses(
35495
+ [ownerAddress.b256Address],
35496
+ resourcesIdsToIgnore
35497
+ );
34444
35498
  const coinsQuery = {
34445
35499
  owner: ownerAddress.toB256(),
34446
35500
  queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
@@ -34448,7 +35502,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34448
35502
  amount: (amount.eqn(0) ? bn(1) : amount).toString(10),
34449
35503
  max: maxPerAsset ? maxPerAsset.toString(10) : void 0
34450
35504
  })),
34451
- excludedIds: idsToExclude
35505
+ excludedIds
34452
35506
  };
34453
35507
  const result = await this.operations.getCoinsToSpend(coinsQuery);
34454
35508
  const coins = result.coinsToSpend.flat().map((coin) => {
@@ -35015,11 +36069,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35015
36069
  /**
35016
36070
  * @hidden
35017
36071
  */
35018
- extractDryRunError(transactionRequest, receipts, dryRunStatus) {
35019
- const status = dryRunStatus;
36072
+ extractDryRunError(transactionRequest, receipts, reason) {
35020
36073
  let logs = [];
35021
36074
  let groupedLogs = {};
35022
- if (transactionRequest.abis) {
36075
+ if (transactionRequest.type === TransactionType.Script && transactionRequest.abis) {
35023
36076
  ({ logs, groupedLogs } = getAllDecodedLogs({
35024
36077
  receipts,
35025
36078
  mainAbi: transactionRequest.abis.main,
@@ -35030,7 +36083,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35030
36083
  logs,
35031
36084
  groupedLogs,
35032
36085
  receipts,
35033
- statusReason: status.reason
36086
+ statusReason: reason
35034
36087
  });
35035
36088
  }
35036
36089
  /**
@@ -35057,6 +36110,45 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35057
36110
  }
35058
36111
  return transactionRequest;
35059
36112
  }
36113
+ /**
36114
+ * @hidden
36115
+ *
36116
+ * This helper adjusts the resources to be excluded for a given set of addresses.
36117
+ * Supporting multiple addresses is important because of the `assembleTx` method,
36118
+ * which may be invoked with different addresses. It handles both messages and UTXOs,
36119
+ * ensuring the total number of inputs does not exceed the maximum allowed by the chain's
36120
+ * consensus parameters. The resources specified in the `resourcesIdsToIgnore` parameter have priority
36121
+ * over those retrieved from the cache.
36122
+ */
36123
+ async adjustResourcesToIgnoreForAddresses(addresses, resourcesIdsToIgnore) {
36124
+ const final = {
36125
+ messages: resourcesIdsToIgnore?.messages?.map((nonce) => hexlify(nonce)) || [],
36126
+ utxos: resourcesIdsToIgnore?.utxos?.map((id) => hexlify(id)) || []
36127
+ };
36128
+ if (this.cache) {
36129
+ const cache2 = this.cache;
36130
+ const allCached = addresses.map((address) => cache2.getActiveData(address));
36131
+ const {
36132
+ consensusParameters: {
36133
+ txParameters: { maxInputs: maxInputsBn }
36134
+ }
36135
+ } = await this.getChain();
36136
+ const maxInputs = maxInputsBn.toNumber();
36137
+ for (let i = 0; i < allCached.length; i++) {
36138
+ let total = final.utxos.length + final.messages.length;
36139
+ if (total >= maxInputs) {
36140
+ break;
36141
+ }
36142
+ final.utxos = [...final.utxos, ...allCached[i].utxos.slice(0, maxInputs - total)];
36143
+ total = final.utxos.length + final.messages.length;
36144
+ if (total >= maxInputs) {
36145
+ break;
36146
+ }
36147
+ final.messages = [...final.messages, ...allCached[i].messages.slice(0, maxInputs - total)];
36148
+ }
36149
+ }
36150
+ return final;
36151
+ }
35060
36152
  };
35061
36153
 
35062
36154
  // src/test-utils/test-asset-id.ts
@@ -35082,20 +36174,29 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35082
36174
  }
35083
36175
  };
35084
36176
 
35085
- // src/providers/utils/merge-quantities.ts
35086
- var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
35087
- const resultMap = {};
35088
- function addToMap({ amount, assetId }) {
35089
- if (resultMap[assetId]) {
35090
- resultMap[assetId] = resultMap[assetId].add(amount);
35091
- } else {
35092
- resultMap[assetId] = amount;
35093
- }
35094
- }
35095
- __name(addToMap, "addToMap");
35096
- coinQuantities.forEach((arr) => arr.forEach(addToMap));
35097
- return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
35098
- }, "mergeQuantities");
36177
+ // src/providers/utils/transaction-response-serialization.ts
36178
+ var deserializeTransactionResponseJson = /* @__PURE__ */ __name((json) => {
36179
+ const {
36180
+ id,
36181
+ abis,
36182
+ status,
36183
+ providerUrl,
36184
+ requestJson,
36185
+ providerCache,
36186
+ gqlTransaction,
36187
+ preConfirmationStatus
36188
+ } = json;
36189
+ const provider = new Provider(providerUrl, { cache: providerCache });
36190
+ const { chainId } = providerCache.chain.consensusParameters;
36191
+ const response = new TransactionResponse(id, provider, Number(chainId), abis);
36192
+ if (requestJson) {
36193
+ response.request = transactionRequestify(JSON.parse(requestJson));
36194
+ }
36195
+ response.status = status;
36196
+ response.gqlTransaction = gqlTransaction;
36197
+ response.preConfirmationStatus = preConfirmationStatus;
36198
+ return response;
36199
+ }, "deserializeTransactionResponseJson");
35099
36200
 
35100
36201
  // src/types.ts
35101
36202
  var AbstractAccount = class {
@@ -35141,6 +36242,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35141
36242
  return { script, scriptData };
35142
36243
  }, "assembleTransferToContractScript");
35143
36244
 
36245
+ // src/utils/split-coins-into-batches.ts
36246
+ var splitCoinsIntoBatches = /* @__PURE__ */ __name((coins, maxBatchLength) => {
36247
+ const batchesNum = Math.ceil(coins.length / maxBatchLength);
36248
+ const batches = [];
36249
+ for (let i = 0; i < batchesNum; i += 1) {
36250
+ const batchStart = i * maxBatchLength;
36251
+ const batchEnd = (i + 1) * maxBatchLength;
36252
+ batches.push(coins.slice(batchStart, batchEnd));
36253
+ }
36254
+ return batches;
36255
+ }, "splitCoinsIntoBatches");
36256
+
35144
36257
  // src/account.ts
35145
36258
  var MAX_FUNDING_ATTEMPTS = 5;
35146
36259
  var Account = class extends AbstractAccount {
@@ -35207,11 +36320,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35207
36320
  * Retrieves resources satisfying the spend query for the account.
35208
36321
  *
35209
36322
  * @param quantities - Quantities of resources to be obtained.
35210
- * @param excludedIds - IDs of resources to be excluded from the query (optional).
36323
+ * @param resourcesIdsToIgnore - IDs of resources to be excluded from the query (optional).
35211
36324
  * @returns A promise that resolves to an array of Resources.
35212
36325
  */
35213
- async getResourcesToSpend(quantities, excludedIds) {
35214
- return this.provider.getResourcesToSpend(this.address, quantities, excludedIds);
36326
+ async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
36327
+ return this.provider.getResourcesToSpend(this.address, quantities, resourcesIdsToIgnore);
35215
36328
  }
35216
36329
  /**
35217
36330
  * Retrieves coins owned by the account.
@@ -35256,6 +36369,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35256
36369
  * @param request - The transaction request to fund.
35257
36370
  * @param params - The estimated transaction parameters.
35258
36371
  * @returns A promise that resolves to the funded transaction request.
36372
+ *
36373
+ * @deprecated Use provider.assembleTx instead
36374
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
35259
36375
  */
35260
36376
  async fund(request, params) {
35261
36377
  const {
@@ -35378,7 +36494,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35378
36494
  amount,
35379
36495
  assetId: assetId || await this.provider.getBaseAssetId()
35380
36496
  });
35381
- request = await this.estimateAndFundTransaction(request, txParams);
36497
+ const { gasPrice, transactionRequest } = await this.assembleTx(request);
36498
+ request = await setAndValidateGasAndFeeForAssembledTx({
36499
+ gasPrice,
36500
+ provider: this.provider,
36501
+ transactionRequest,
36502
+ setGasLimit: txParams?.gasLimit,
36503
+ setMaxFee: txParams?.maxFee
36504
+ });
35382
36505
  return request;
35383
36506
  }
35384
36507
  /**
@@ -35404,7 +36527,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35404
36527
  async batchTransfer(transferParams, txParams = {}) {
35405
36528
  let request = new ScriptTransactionRequest(txParams);
35406
36529
  request = this.addBatchTransfer(request, transferParams);
35407
- request = await this.estimateAndFundTransaction(request, txParams);
36530
+ const { gasPrice, transactionRequest } = await this.assembleTx(request);
36531
+ request = await setAndValidateGasAndFeeForAssembledTx({
36532
+ gasPrice,
36533
+ provider: this.provider,
36534
+ transactionRequest,
36535
+ setGasLimit: txParams?.gasLimit,
36536
+ setMaxFee: txParams?.maxFee
36537
+ });
35408
36538
  return this.sendTransaction(request, { estimateTxDependencies: false });
35409
36539
  }
35410
36540
  /**
@@ -35476,7 +36606,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35476
36606
  const { script, scriptData } = await assembleTransferToContractScript(transferParams);
35477
36607
  request.script = script;
35478
36608
  request.scriptData = scriptData;
35479
- request = await this.estimateAndFundTransaction(request, txParams, { quantities });
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
36616
+ });
35480
36617
  return this.sendTransaction(request);
35481
36618
  }
35482
36619
  /**
@@ -35504,16 +36641,144 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35504
36641
  const baseAssetId = await this.provider.getBaseAssetId();
35505
36642
  let request = new ScriptTransactionRequest(params);
35506
36643
  const quantities = [{ amount: bn(amount), assetId: baseAssetId }];
35507
- const txCost = await this.getTransactionCost(request, { quantities });
35508
- request = this.validateGasLimitAndMaxFee({
35509
- transactionRequest: request,
35510
- gasUsed: txCost.gasUsed,
35511
- maxFee: txCost.maxFee,
35512
- txParams
36644
+ const { gasPrice, transactionRequest } = await this.assembleTx(request, quantities);
36645
+ request = await setAndValidateGasAndFeeForAssembledTx({
36646
+ gasPrice,
36647
+ provider: this.provider,
36648
+ transactionRequest,
36649
+ setGasLimit: txParams?.gasLimit,
36650
+ setMaxFee: txParams?.maxFee
35513
36651
  });
35514
- await this.fund(request, txCost);
35515
36652
  return this.sendTransaction(request);
35516
36653
  }
36654
+ /**
36655
+ * Consolidates base asset UTXOs into fewer, larger ones.
36656
+ *
36657
+ * Retrieves a limited number of base asset coins (as defined by `Provider.RESOURCES_PAGE_SIZE_LIMIT`),
36658
+ * assembles consolidation transactions, and submits them to the network.
36659
+ *
36660
+ * Note: This method currently supports only the base asset.
36661
+ *
36662
+ * @param params - The parameters for coin consolidation, including the asset ID, mode, and output number.
36663
+ * @returns A promise that resolves to the response of the submitted transactions.
36664
+ * @throws Will throw an error if the asset is not a base asset as non-base asset consolidation is not implemented.
36665
+ */
36666
+ async consolidateCoins(params) {
36667
+ const { assetId } = params;
36668
+ const { coins } = await this.getCoins(assetId);
36669
+ const baseAssetId = await this.provider.getBaseAssetId();
36670
+ const isBaseAsset = baseAssetId === assetId;
36671
+ let submitAll;
36672
+ const consolidationParams = {
36673
+ coins,
36674
+ mode: params.mode,
36675
+ outputNum: params.outputNum
36676
+ };
36677
+ if (isBaseAsset) {
36678
+ ({ submitAll } = await this.assembleBaseAssetConsolidationTxs(consolidationParams));
36679
+ } else {
36680
+ throw new FuelError(
36681
+ ErrorCode.UNSUPPORTED_FEATURE,
36682
+ "Consolidation for non-base assets is not supported yet."
36683
+ );
36684
+ }
36685
+ return submitAll();
36686
+ }
36687
+ /**
36688
+ * Assembles transactions for consolidating base asset coins into fewer UTXOs.
36689
+ *
36690
+ * This method splits the provided coins into batches and creates transaction requests
36691
+ * to consolidate them. It calculates the necessary fee and sets up the transactions
36692
+ * to be submitted either in parallel (default) or sequentially.
36693
+ *
36694
+ * @param params - The parameters for assembling base asset consolidation transactions.
36695
+ *
36696
+ * @returns An object containing the assembled transactions, the total fee cost, and a callback to submit all transactions.
36697
+ */
36698
+ async assembleBaseAssetConsolidationTxs(params) {
36699
+ const { coins, mode = "parallel", outputNum = 1 } = params;
36700
+ const baseAssetId = await this.provider.getBaseAssetId();
36701
+ this.validateConsolidationTxsCoins(coins, baseAssetId);
36702
+ const chainInfo = await this.provider.getChain();
36703
+ const maxInputsNumber = chainInfo.consensusParameters.txParameters.maxInputs.toNumber();
36704
+ let totalFeeCost = bn(0);
36705
+ const txs = [];
36706
+ const coinsBatches = splitCoinsIntoBatches(coins, maxInputsNumber);
36707
+ const gasPrice = await this.provider.estimateGasPrice(10);
36708
+ const consolidateMoreThanOneCoin = outputNum > 1;
36709
+ coinsBatches.filter((batch) => batch.length > 1).forEach((coinBatch) => {
36710
+ const request = new ScriptTransactionRequest({
36711
+ script: "0x"
36712
+ });
36713
+ request.addResources(coinBatch);
36714
+ if (consolidateMoreThanOneCoin) {
36715
+ Array.from({ length: outputNum - 1 }).forEach(() => {
36716
+ request.addCoinOutput(this.address, 0, baseAssetId);
36717
+ });
36718
+ }
36719
+ const minGas = request.calculateMinGas(chainInfo);
36720
+ const fee = calculateGasFee({
36721
+ gasPrice,
36722
+ gas: minGas,
36723
+ priceFactor: chainInfo.consensusParameters.feeParameters.gasPriceFactor,
36724
+ tip: request.tip
36725
+ });
36726
+ request.maxFee = fee;
36727
+ if (consolidateMoreThanOneCoin) {
36728
+ const total = request.inputs.filter(isRequestInputCoin).reduce((acc, input) => acc.add(input.amount), bn(0));
36729
+ const amountPerNewUtxo = total.div(outputNum + 1);
36730
+ request.outputs.forEach((output) => {
36731
+ if (output.type === OutputType.Coin) {
36732
+ output.amount = amountPerNewUtxo;
36733
+ }
36734
+ });
36735
+ }
36736
+ totalFeeCost = totalFeeCost.add(fee);
36737
+ txs.push(request);
36738
+ });
36739
+ const submitAll = this.prepareSubmitAll({ txs, mode });
36740
+ return { txs, totalFeeCost, submitAll };
36741
+ }
36742
+ /**
36743
+ * Prepares a function to submit all transactions either sequentially or in parallel.
36744
+ *
36745
+ * @param params - The parameters for preparing the submitAll callback.
36746
+ *
36747
+ * @returns A callback that, when called, submits all transactions and returns their results and any errors encountered.
36748
+ */
36749
+ prepareSubmitAll = /* @__PURE__ */ __name((params) => {
36750
+ const { txs, mode = "sequential" } = params;
36751
+ return async () => {
36752
+ const txResponses = [];
36753
+ const errors2 = [];
36754
+ if (mode === "sequential") {
36755
+ for (const tx of txs) {
36756
+ try {
36757
+ const submit = await this.sendTransaction(tx);
36758
+ const response = await submit.waitForResult();
36759
+ txResponses.push(response);
36760
+ } catch (error2) {
36761
+ errors2.push(error2);
36762
+ }
36763
+ }
36764
+ } else {
36765
+ const results = await Promise.allSettled(
36766
+ txs.map(async (tx) => {
36767
+ const submit = await this.sendTransaction(tx);
36768
+ return submit.waitForResult();
36769
+ })
36770
+ );
36771
+ results.forEach((result) => {
36772
+ if (result.status === "fulfilled") {
36773
+ txResponses.push(result.value);
36774
+ } else {
36775
+ errors2.push(result.reason);
36776
+ }
36777
+ });
36778
+ }
36779
+ return { txResponses, errors: errors2 };
36780
+ };
36781
+ }, "prepareSubmitAll");
35517
36782
  /**
35518
36783
  * Returns a transaction cost to enable user
35519
36784
  * to set gasLimit and also reserve balance amounts
@@ -35523,6 +36788,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35523
36788
  * @param transactionCostParams - The transaction cost parameters (optional).
35524
36789
  *
35525
36790
  * @returns A promise that resolves to the transaction cost object.
36791
+ *
36792
+ * @deprecated Use provider.assembleTx instead
36793
+ * Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
35526
36794
  */
35527
36795
  async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [], gasPrice } = {}) {
35528
36796
  const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
@@ -35623,7 +36891,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35623
36891
  transactionRequest,
35624
36892
  params
35625
36893
  );
35626
- return typeof transaction === "string" ? this.provider.getTransactionResponse(transaction) : transaction;
36894
+ return typeof transaction === "string" ? this.provider.getTransactionResponse(transaction) : deserializeTransactionResponseJson(transaction);
35627
36895
  }
35628
36896
  if (estimateTxDependencies) {
35629
36897
  await this.provider.estimateTxDependencies(transactionRequest);
@@ -35684,6 +36952,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35684
36952
  } : void 0;
35685
36953
  }
35686
36954
  /** @hidden * */
36955
+ async assembleTx(transactionRequest, quantities = []) {
36956
+ const outputQuantities = transactionRequest.outputs.filter((o) => o.type === OutputType.Coin).map(({ amount, assetId }) => ({ assetId: String(assetId), amount: bn(amount) }));
36957
+ transactionRequest.gasLimit = bn(0);
36958
+ transactionRequest.maxFee = bn(0);
36959
+ const { assembledRequest, gasPrice } = await this.provider.assembleTx({
36960
+ request: transactionRequest,
36961
+ accountCoinQuantities: mergeQuantities(outputQuantities, quantities),
36962
+ feePayerAccount: this
36963
+ });
36964
+ return { transactionRequest: assembledRequest, gasPrice };
36965
+ }
36966
+ /** @hidden * */
35687
36967
  validateTransferAmount(amount) {
35688
36968
  if (bn(amount).lte(0)) {
35689
36969
  throw new FuelError(
@@ -35731,6 +37011,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
35731
37011
  }
35732
37012
  return request;
35733
37013
  }
37014
+ /** @hidden * */
37015
+ validateConsolidationTxsCoins(coins, assetId) {
37016
+ if (coins.length <= 1) {
37017
+ throw new FuelError(ErrorCode.NO_COINS_TO_CONSOLIDATE, "No coins to consolidate.");
37018
+ }
37019
+ if (!coins.every((c) => c.assetId === assetId)) {
37020
+ throw new FuelError(
37021
+ ErrorCode.COINS_ASSET_ID_MISMATCH,
37022
+ "All coins to consolidate must be from the same asset id."
37023
+ );
37024
+ }
37025
+ }
35734
37026
  };
35735
37027
 
35736
37028
  // src/wallet/keystore-wallet.ts
@@ -38800,23 +40092,26 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
38800
40092
  ),
38801
40093
  port: nodeOptions.port || "0"
38802
40094
  };
38803
- let cleanup;
40095
+ let killNode;
38804
40096
  let url;
38805
40097
  if (launchNodeServerPort) {
38806
40098
  const serverUrl = `http://localhost:${launchNodeServerPort}`;
38807
40099
  url = await (await fetch(serverUrl, { method: "POST", body: JSON.stringify(launchNodeOptions) })).text();
38808
- cleanup = /* @__PURE__ */ __name(() => {
40100
+ killNode = /* @__PURE__ */ __name(() => {
38809
40101
  fetch(`${serverUrl}/cleanup/${url}`);
38810
- }, "cleanup");
40102
+ }, "killNode");
38811
40103
  } else {
38812
40104
  const settings = await launchNode(launchNodeOptions);
38813
40105
  url = settings.url;
38814
- cleanup = settings.cleanup;
40106
+ killNode = settings.cleanup;
38815
40107
  }
40108
+ const cleanup = /* @__PURE__ */ __name(() => {
40109
+ Provider.clearChainAndNodeCaches(url);
40110
+ killNode();
40111
+ }, "cleanup");
38816
40112
  let provider;
38817
40113
  try {
38818
40114
  provider = new Provider(url, providerOptions);
38819
- await provider.init();
38820
40115
  } catch (err) {
38821
40116
  cleanup();
38822
40117
  throw err;