From 4278fb63bda3d1f39c5a851082fc08b3af2bc655 Mon Sep 17 00:00:00 2001 From: Vivek Jain Date: Wed, 20 Nov 2024 16:08:32 +0530 Subject: [PATCH 1/6] Remove ts sdk from references --- .../ui/app/pages/home/nft-details/index.tsx | 4 +- .../src/routes/multisig-address.tsx | 2 +- docs/content/developer/dev-cheat-sheet.mdx | 2 +- .../developer/evm-to-move/tooling-apis.mdx | 2 +- .../getting-started/client-tssdk.mdx | 4 +- .../getting-started/iota-environment.mdx | 2 +- .../package-upgrades/custom-policies.mdx | 2 +- ...programmable-transaction-blocks-ts-sdk.mdx | 2 +- .../transactions/ptb/coin-management.mdx | 2 +- ...ogrammable-transaction-blocks-overview.mdx | 2 +- .../sign-and-send-transactions.mdx | 2 +- .../developer/iota-101/using-events.mdx | 4 +- docs/content/developer/standards/kiosk.mdx | 2 +- .../developer/standards/wallet-standard.mdx | 2 +- docs/content/references/references.mdx | 2 +- docs/content/sidebars/developer.js | 2 +- docs/content/sidebars/ts-sdk.js | 108 +- .../content/ts-sdk/api/bcs/classes/BcsType.md | 191 +++ .../api/bcs/classes/TypeTagSerializer.md | 57 + docs/content/ts-sdk/api/bcs/index.md | 20 + .../api/bcs/interfaces/BcsTypeOptions.md | 27 + .../ts-sdk/api/bcs/type-aliases/TypeTag.md | 5 + docs/content/ts-sdk/api/bcs/variables/bcs.md | 1456 +++++++++++++++++ .../ts-sdk/api/client/classes/IotaClient.md | 817 +++++++++ .../api/client/classes/IotaHTTPStatusError.md | 137 ++ .../api/client/classes/IotaHTTPTransport.md | 79 + .../client/classes/IotaHTTPTransportError.md | 144 ++ .../ts-sdk/api/client/classes/JsonRpcError.md | 135 ++ .../ts-sdk/api/client/enumerations/Network.md | 31 + .../api/client/functions/getAllNetworks.md | 7 + .../api/client/functions/getAppsBackend.md | 7 + .../api/client/functions/getDefaultNetwork.md | 7 + .../api/client/functions/getFullnodeUrl.md | 11 + .../ts-sdk/api/client/functions/getNetwork.md | 11 + .../api/client/functions/isIotaClient.md | 11 + docs/content/ts-sdk/api/client/index.md | 245 +++ .../api/client/interfaces/AddressMetrics.md | 51 + .../ts-sdk/api/client/interfaces/Balance.md | 19 + .../api/client/interfaces/BalanceChange.md | 24 + .../api/client/interfaces/Checkpoint.md | 92 ++ .../ts-sdk/api/client/interfaces/Claim.md | 15 + .../api/client/interfaces/CoinMetadata.md | 49 + .../api/client/interfaces/CoinStruct.md | 37 + .../api/client/interfaces/CoinSupply.md | 7 + .../api/client/interfaces/CommitteeInfo.md | 15 + .../api/client/interfaces/DelegatedStake.md | 23 + .../interfaces/DelegatedTimelockedStake.md | 19 + .../api/client/interfaces/DevInspectArgs.md | 43 + .../client/interfaces/DevInspectResults.md | 53 + .../DevInspectTransactionBlockParams.md | 43 + .../interfaces/DisplayFieldsResponse.md | 13 + .../DryRunTransactionBlockParams.md | 10 + .../DryRunTransactionBlockResponse.md | 31 + .../api/client/interfaces/DynamicFieldInfo.md | 43 + .../api/client/interfaces/DynamicFieldName.md | 13 + .../interfaces/ECMHLiveObjectSetDigest.md | 9 + .../api/client/interfaces/EndOfEpochData.md | 39 + .../api/client/interfaces/EndOfEpochInfo.md | 75 + .../ts-sdk/api/client/interfaces/EpochInfo.md | 57 + .../api/client/interfaces/EpochMetrics.md | 43 + .../ts-sdk/api/client/interfaces/EventId.md | 16 + .../ExecuteTransactionBlockParams.md | 45 + .../api/client/interfaces/GasCostSummary.md | 60 + .../client/interfaces/GetAllBalancesParams.md | 11 + .../client/interfaces/GetAllCoinsParams.md | 27 + .../GetAllEpochAddressMetricsParams.md | 7 + .../api/client/interfaces/GetBalanceParams.md | 20 + .../interfaces/GetChainIdentifierParams.md | 3 + .../GetCheckpointAddressMetricsParams.md | 7 + .../client/interfaces/GetCheckpointParams.md | 11 + .../client/interfaces/GetCheckpointsParams.md | 28 + .../interfaces/GetCoinMetadataParams.md | 11 + .../api/client/interfaces/GetCoinsParams.md | 36 + .../interfaces/GetCommitteeInfoParams.md | 11 + .../interfaces/GetCurrentEpochParams.md | 3 + .../interfaces/GetDynamicFieldObjectParams.md | 19 + .../interfaces/GetDynamicFieldsParams.md | 28 + .../interfaces/GetEpochMetricsParams.md | 27 + .../api/client/interfaces/GetEpochsParams.md | 27 + .../api/client/interfaces/GetEventsParams.md | 11 + .../GetLatestAddressMetricsParams.md | 3 + ...GetLatestCheckpointSequenceNumberParams.md | 3 + .../GetLatestIotaSystemStateParams.md | 3 + .../interfaces/GetMoveCallMetricsParams.md | 3 + .../GetMoveFunctionArgTypesParams.md | 21 + .../interfaces/GetNetworkMetricsParams.md | 3 + .../GetNormalizedMoveFunctionParams.md | 21 + .../GetNormalizedMoveModuleParams.md | 15 + ...GetNormalizedMoveModulesByPackageParams.md | 9 + .../GetNormalizedMoveStructParams.md | 21 + .../api/client/interfaces/GetObjectParams.md | 19 + .../client/interfaces/GetPastObjectRequest.md | 17 + .../interfaces/GetProtocolConfigParams.md | 13 + .../interfaces/GetReferenceGasPriceParams.md | 3 + .../client/interfaces/GetStakesByIdsParams.md | 9 + .../api/client/interfaces/GetStakesParams.md | 9 + .../GetTimelockedStakesByIdsParams.md | 9 + .../interfaces/GetTimelockedStakesParams.md | 9 + .../client/interfaces/GetTotalSupplyParams.md | 11 + .../GetTotalTransactionBlocksParams.md | 3 + .../interfaces/GetTotalTransactionsParams.md | 1 + .../interfaces/GetTransactionBlockParams.md | 19 + .../interfaces/GetValidatorsApyParams.md | 3 + .../api/client/interfaces/IotaActiveJwk.md | 19 + .../IotaAuthenticatorStateExpire.md | 7 + .../api/client/interfaces/IotaChangeEpoch.md | 31 + .../ts-sdk/api/client/interfaces/IotaEvent.md | 67 + .../client/interfaces/IotaExecutionResult.md | 17 + .../api/client/interfaces/IotaGasData.md | 25 + .../interfaces/IotaHTTPTransportOptions.md | 97 ++ .../ts-sdk/api/client/interfaces/IotaJWK.md | 25 + .../ts-sdk/api/client/interfaces/IotaJwkId.md | 13 + .../client/interfaces/IotaMoveAbilitySet.md | 7 + .../api/client/interfaces/IotaMoveModuleId.md | 13 + .../interfaces/IotaMoveNormalizedField.md | 13 + .../interfaces/IotaMoveNormalizedFunction.md | 31 + .../interfaces/IotaMoveNormalizedModule.md | 45 + .../interfaces/IotaMoveNormalizedStruct.md | 19 + .../interfaces/IotaMoveStructTypeParameter.md | 13 + .../api/client/interfaces/IotaObjectData.md | 85 + .../interfaces/IotaObjectDataOptions.md | 58 + .../api/client/interfaces/IotaObjectRef.md | 25 + .../client/interfaces/IotaObjectResponse.md | 13 + .../interfaces/IotaObjectResponseQuery.md | 17 + .../interfaces/IotaSystemStateSummary.md | 288 ++++ .../client/interfaces/IotaTransactionBlock.md | 13 + .../IotaTransactionBlockResponse.md | 81 + .../IotaTransactionBlockResponseOptions.md | 57 + .../IotaTransactionBlockResponseQuery.md | 17 + .../api/client/interfaces/IotaTransport.md | 37 + .../interfaces/IotaTransportRequestOptions.md | 13 + .../IotaTransportSubscribeOptions.md | 37 + .../client/interfaces/IotaValidatorSummary.md | 248 +++ .../client/interfaces/KioskConfiguration.md | 25 + .../interfaces/MoveCallIotaTransaction.md | 44 + .../api/client/interfaces/MoveCallMetrics.md | 25 + .../api/client/interfaces/MoveCallParams.md | 31 + .../api/client/interfaces/MoveFunctionName.md | 27 + .../api/client/interfaces/MoveVariant.md | 23 + .../interfaces/MultiGetObjectsParams.md | 19 + .../MultiGetTransactionBlocksParams.md | 20 + .../ts-sdk/api/client/interfaces/MultiSig.md | 28 + .../client/interfaces/MultiSigPublicKey.md | 20 + .../client/interfaces/NetworkConfiguration.md | 43 + .../api/client/interfaces/NetworkMetrics.md | 57 + .../api/client/interfaces/OrderArguments.md | 7 + .../api/client/interfaces/OwnedObjectRef.md | 13 + .../client/interfaces/PaginatedCheckpoints.md | 23 + .../api/client/interfaces/PaginatedCoins.md | 23 + .../interfaces/PaginatedDynamicFieldInfos.md | 23 + .../client/interfaces/PaginatedEpochInfos.md | 23 + .../interfaces/PaginatedEpochMetricss.md | 23 + .../api/client/interfaces/PaginatedEvents.md | 23 + .../interfaces/PaginatedObjectsResponse.md | 23 + .../PaginatedTransactionResponse.md | 23 + .../client/interfaces/PaginationArguments.md | 21 + .../client/interfaces/PasskeyAuthenticator.md | 24 + .../api/client/interfaces/ProtocolConfig.md | 39 + .../client/interfaces/QueryEventsParams.md | 36 + .../client/interfaces/SubscribeEventParams.md | 12 + .../interfaces/SubscribeTransactionParams.md | 9 + .../interfaces/TransactionBlockBytes.md | 25 + ...ansactionBlockEffectsModifiedAtVersions.md | 13 + .../client/interfaces/TransferObjectParams.md | 13 + .../interfaces/TryGetPastObjectParams.md | 29 + .../TryMultiGetPastObjectsParams.md | 21 + .../api/client/interfaces/TypeOrigin.md | 21 + .../UnsafeBatchTransactionParams.md | 44 + .../interfaces/UnsafeMergeCoinsParams.md | 45 + .../client/interfaces/UnsafeMoveCallParams.md | 79 + .../interfaces/UnsafePayAllIotaParams.md | 39 + .../client/interfaces/UnsafePayIotaParams.md | 49 + .../api/client/interfaces/UnsafePayParams.md | 55 + .../client/interfaces/UnsafePublishParams.md | 44 + .../interfaces/UnsafeRequestAddStakeParams.md | 52 + .../UnsafeRequestAddTimelockedStakeParams.md | 43 + .../UnsafeRequestWithdrawStakeParams.md | 36 + ...afeRequestWithdrawTimelockedStakeParams.md | 35 + .../interfaces/UnsafeSplitCoinEqualParams.md | 44 + .../interfaces/UnsafeSplitCoinParams.md | 44 + .../interfaces/UnsafeTransferIotaParams.md | 44 + .../interfaces/UnsafeTransferObjectParams.md | 45 + .../api/client/interfaces/UpgradeInfo.md | 19 + .../api/client/interfaces/ValidatorApy.md | 13 + .../api/client/interfaces/ValidatorsApy.md | 13 + .../client/interfaces/ZkLoginAuthenticator.md | 21 + .../api/client/interfaces/ZkLoginInputs.md | 27 + .../api/client/interfaces/ZkLoginProof.md | 21 + .../type-aliases/AllEpochsAddressMetrics.md | 3 + .../api/client/type-aliases/ChainType.md | 3 + .../type-aliases/CheckpointCommitment.md | 9 + .../api/client/type-aliases/CheckpointId.md | 3 + .../api/client/type-aliases/CheckpointPage.md | 17 + .../api/client/type-aliases/CoinBalance.md | 17 + .../type-aliases/CompressedSignature.md | 5 + .../ConsensusDeterminedVersionAssignments.md | 11 + .../client/type-aliases/DynamicFieldPage.md | 17 + .../client/type-aliases/DynamicFieldType.md | 3 + .../client/type-aliases/EpochMetricsPage.md | 17 + .../api/client/type-aliases/EpochPage.md | 17 + .../ExecuteTransactionRequestType.md | 3 + .../client/type-aliases/ExecutionStatus.md | 13 + .../type-aliases/GetOwnedObjectsParams.md | 28 + .../api/client/type-aliases/HttpHeaders.md | 9 + .../client/type-aliases/InputObjectKind.md | 3 + .../api/client/type-aliases/IotaArgument.md | 5 + .../api/client/type-aliases/IotaCallArg.md | 3 + .../client/type-aliases/IotaClientOptions.md | 6 + .../IotaEndOfEpochTransactionKind.md | 3 + .../client/type-aliases/IotaEventFilter.md | 3 + .../client/type-aliases/IotaMoveAbility.md | 3 + .../type-aliases/IotaMoveFunctionArgType.md | 3 + .../type-aliases/IotaMoveNormalizedModules.md | 3 + .../type-aliases/IotaMoveNormalizedType.md | 3 + .../api/client/type-aliases/IotaMoveObject.md | 3 + .../client/type-aliases/IotaMovePackage.md | 3 + .../client/type-aliases/IotaMoveVisibility.md | 3 + .../client/type-aliases/IotaObjectChange.md | 6 + .../type-aliases/IotaObjectChangeCreated.md | 3 + .../type-aliases/IotaObjectChangeDeleted.md | 3 + .../type-aliases/IotaObjectChangeMutated.md | 3 + .../type-aliases/IotaObjectChangePublished.md | 3 + .../IotaObjectChangeTransferred.md | 3 + .../type-aliases/IotaObjectChangeWrapped.md | 3 + .../type-aliases/IotaObjectDataFilter.md | 3 + .../api/client/type-aliases/IotaParsedData.md | 3 + .../client/type-aliases/IotaTransaction.md | 5 + .../IotaTransactionBlockBuilderMode.md | 3 + .../type-aliases/IotaTransactionBlockKind.md | 3 + .../api/client/type-aliases/MoveCallMetric.md | 3 + .../api/client/type-aliases/MoveStruct.md | 3 + .../api/client/type-aliases/MoveValue.md | 3 + .../api/client/type-aliases/NetworkId.md | 3 + .../api/client/type-aliases/ObjectOwner.md | 3 + .../api/client/type-aliases/ObjectRead.md | 3 + .../type-aliases/ObjectResponseError.md | 3 + .../client/type-aliases/ObjectValueKind.md | 3 + .../ts-sdk/api/client/type-aliases/Order.md | 3 + .../type-aliases/ProgrammableTransaction.md | 13 + .../type-aliases/ProtocolConfigValue.md | 3 + .../api/client/type-aliases/PublicKey.md | 3 + .../QueryTransactionBlocksParams.md | 26 + .../RPCTransactionRequestParams.md | 3 + .../ts-sdk/api/client/type-aliases/RawData.md | 3 + .../api/client/type-aliases/Signature.md | 3 + .../api/client/type-aliases/StakeObject.md | 3 + .../client/type-aliases/TimelockedStake.md | 3 + .../type-aliases/TransactionBlockData.md | 21 + .../client/type-aliases/TransactionEffects.md | 102 ++ .../client/type-aliases/TransactionFilter.md | 3 + .../api/client/type-aliases/Unsubscribe.md | 7 + .../api/cryptography/classes/Keypair.md | 173 ++ .../api/cryptography/classes/PublicKey.md | 206 +++ .../ts-sdk/api/cryptography/classes/Signer.md | 125 ++ .../functions/decodeIotaPrivateKey.md | 15 + .../functions/encodeIotaPrivateKey.md | 17 + .../functions/isValidBIP32Path.md | 18 + .../functions/isValidHardenedPath.md | 15 + .../functions/messageWithIntent.md | 15 + .../cryptography/functions/mnemonicToSeed.md | 15 + .../functions/mnemonicToSeedHex.md | 15 + .../functions/parseSerializedSignature.md | 13 + .../functions/toSerializedSignature.md | 13 + docs/content/ts-sdk/api/cryptography/index.md | 42 + .../interfaces/SignatureWithBytes.md | 13 + .../cryptography/type-aliases/IntentScope.md | 3 + .../type-aliases/ParsedKeypair.md | 13 + .../type-aliases/SerializeSignatureInput.md | 23 + .../type-aliases/SignatureFlag.md | 3 + .../type-aliases/SignatureScheme.md | 3 + .../variables/IOTA_PRIVATE_KEY_PREFIX.md | 3 + .../variables/LEGACY_PRIVATE_KEY_SIZE.md | 3 + .../variables/PRIVATE_KEY_SIZE.md | 3 + .../variables/SIGNATURE_FLAG_TO_SCHEME.md | 21 + .../variables/SIGNATURE_SCHEME_TO_FLAG.md | 21 + .../variables/SIGNATURE_SCHEME_TO_SIZE.md | 17 + .../faucet/classes/FaucetRateLimitError.md | 139 ++ .../api/faucet/functions/getFaucetHost.md | 11 + .../functions/getFaucetRequestStatus.md | 17 + .../functions/requestIotaFromFaucetV0.md | 17 + .../functions/requestIotaFromFaucetV1.md | 17 + docs/content/ts-sdk/api/faucet/index.md | 14 + .../api/graphql/classes/IotaGraphQLClient.md | 63 + .../classes/IotaGraphQLRequestError.md | 139 ++ docs/content/ts-sdk/api/graphql/index.md | 19 + .../interfaces/IotaGraphQLClientOptions.md | 51 + .../graphql/type-aliases/GraphQLDocument.md | 9 + .../type-aliases/GraphQLQueryOptions.md | 23 + .../type-aliases/GraphQLQueryResult.md | 21 + .../type-aliases/GraphQLResponseErrors.md | 3 + docs/content/ts-sdk/api/index.md | 16 + .../ed25519/classes/Ed25519Keypair.md | 266 +++ .../ed25519/classes/Ed25519PublicKey.md | 274 ++++ .../ts-sdk/api/keypairs/ed25519/index.md | 16 + .../ed25519/interfaces/Ed25519KeypairData.md | 17 + .../DEFAULT_ED25519_DERIVATION_PATH.md | 3 + .../secp256k1/classes/Secp256k1Keypair.md | 265 +++ .../secp256k1/classes/Secp256k1PublicKey.md | 274 ++++ .../ts-sdk/api/keypairs/secp256k1/index.md | 25 + .../interfaces/Secp256k1KeypairData.md | 15 + .../DEFAULT_SECP256K1_DERIVATION_PATH.md | 3 + .../api/multisig/classes/MultiSigPublicKey.md | 339 ++++ .../api/multisig/classes/MultiSigSigner.md | 184 +++ .../functions/parsePartialSignatures.md | 13 + docs/content/ts-sdk/api/multisig/index.md | 16 + .../multisig/type-aliases/MultiSigStruct.md | 17 + .../api/transactions/classes/AsyncCache.md | 297 ++++ .../api/transactions/classes/ObjectCache.md | 205 +++ .../classes/ParallelTransactionExecutor.md | 59 + .../classes/SerialTransactionExecutor.md | 123 ++ .../api/transactions/classes/Transaction.md | 957 +++++++++++ .../classes/TransactionDataBuilder.md | 391 +++++ .../enumerations/UpgradePolicy.md | 19 + .../transactions/functions/coinWithBalance.md | 25 + .../functions/getPureBcsSchema.md | 11 + .../transactions/functions/isTransaction.md | 11 + .../normalizedTypeToMoveTypeSignature.md | 11 + docs/content/ts-sdk/api/transactions/index.md | 63 + .../interfaces/BuildTransactionOptions.md | 17 + .../ParallelTransactionExecutorOptions.md | 85 + .../interfaces/SerializeTransactionOptions.md | 31 + .../api/transactions/type-aliases/Argument.md | 3 + .../api/transactions/type-aliases/CallArg.md | 3 + .../api/transactions/type-aliases/Command.md | 133 ++ .../api/transactions/type-aliases/GasData.md | 3 + .../transactions/type-aliases/ObjectRef.md | 3 + .../type-aliases/OpenMoveTypeSignature.md | 3 + .../type-aliases/OpenMoveTypeSignatureBody.md | 3 + .../SerializedTransactionDataV1.md | 3 + .../SerializedTransactionDataV2.md | 3 + .../type-aliases/TransactionArgument.md | 3 + .../type-aliases/TransactionData.md | 3 + .../type-aliases/TransactionInput.md | 3 + .../type-aliases/TransactionObjectArgument.md | 3 + .../type-aliases/TransactionObjectInput.md | 3 + .../type-aliases/TransactionPlugin.md | 15 + .../type-aliases/TransactionResult.md | 3 + .../api/transactions/variables/Argument.md | 3 + .../api/transactions/variables/Arguments.md | 496 ++++++ .../api/transactions/variables/Command.md | 145 ++ .../api/transactions/variables/Commands.md | 115 ++ .../api/transactions/variables/GasData.md | 21 + .../api/transactions/variables/Inputs.md | 275 ++++ .../api/transactions/variables/ObjectRef.md | 17 + .../variables/OpenMoveTypeSignature.md | 13 + .../variables/OpenMoveTypeSignatureBody.md | 3 + .../variables/SerializedTransactionDataV1.md | 47 + .../variables/SerializedTransactionDataV2.md | 47 + .../transactions/variables/TransactionData.md | 47 + docs/content/ts-sdk/api/typedoc-sidebar.cjs | 4 + .../api/utils/functions/formatAddress.md | 11 + .../api/utils/functions/formatDigest.md | 11 + .../ts-sdk/api/utils/functions/formatType.md | 11 + .../ts-sdk/api/utils/functions/fromB64.md | 11 + .../ts-sdk/api/utils/functions/fromHEX.md | 11 + .../api/utils/functions/isValidIotaAddress.md | 11 + .../utils/functions/isValidIotaObjectId.md | 11 + .../functions/isValidTransactionDigest.md | 13 + .../utils/functions/normalizeIotaAddress.md | 22 + .../utils/functions/normalizeIotaObjectId.md | 13 + .../api/utils/functions/normalizeStructTag.md | 11 + .../api/utils/functions/parseStructTag.md | 11 + .../ts-sdk/api/utils/functions/toB64.md | 11 + .../ts-sdk/api/utils/functions/toHEX.md | 11 + docs/content/ts-sdk/api/utils/index.md | 33 + .../utils/variables/IOTA_ADDRESS_LENGTH.md | 3 + .../utils/variables/IOTA_CLOCK_OBJECT_ID.md | 3 + .../api/utils/variables/IOTA_DECIMALS.md | 3 + .../utils/variables/IOTA_FRAMEWORK_ADDRESS.md | 3 + .../utils/variables/IOTA_SYSTEM_ADDRESS.md | 3 + .../variables/IOTA_SYSTEM_MODULE_NAME.md | 3 + .../variables/IOTA_SYSTEM_STATE_OBJECT_ID.md | 3 + .../api/utils/variables/IOTA_TYPE_ARG.md | 3 + .../utils/variables/MOVE_STDLIB_ADDRESS.md | 3 + .../api/utils/variables/NANOS_PER_IOTA.md | 3 + .../functions/publicKeyFromIotaBytes.md | 11 + .../verify/functions/publicKeyFromRawBytes.md | 13 + .../verifyPersonalMessageSignature.md | 13 + .../api/verify/functions/verifySignature.md | 13 + .../functions/verifyTransactionSignature.md | 13 + docs/content/ts-sdk/api/verify/index.md | 11 + docs/content/{references => }/ts-sdk/bcs.mdx | 0 .../ts-sdk/dapp-kit/create-dapp.mdx | 0 .../ts-sdk/dapp-kit/index.mdx | 0 .../ts-sdk/dapp-kit/iota-client-provider.mdx | 0 .../ts-sdk/dapp-kit/rpc-hooks.mdx | 0 .../ts-sdk/dapp-kit/themes.mdx | 0 .../wallet-components/ConnectButton.mdx | 0 .../wallet-components/ConnectModal.mdx | 0 .../dapp-kit/wallet-hooks/useAccounts.mdx | 0 .../wallet-hooks/useAutoConnectWallet.mdx | 0 .../wallet-hooks/useConnectWallet.mdx | 0 .../wallet-hooks/useCurrentAccount.mdx | 0 .../wallet-hooks/useCurrentWallet.mdx | 0 .../wallet-hooks/useDisconnectWallet.mdx | 0 .../useReportTransactionEffects.mdx | 0 .../useSignAndExecuteTransaction.mdx | 0 .../wallet-hooks/useSignPersonalMessage.mdx | 0 .../wallet-hooks/useSignTransaction.mdx | 0 .../wallet-hooks/useSwitchAccount.mdx | 0 .../dapp-kit/wallet-hooks/useWallets.mdx | 0 .../ts-sdk/dapp-kit/wallet-provider.mdx | 0 .../ts-sdk/kiosk/advanced-examples.mdx | 0 .../{references => }/ts-sdk/kiosk/index.mdx | 0 .../kiosk/kiosk-client/introduction.mdx | 0 .../kiosk-transaction/examples.mdx | 0 .../kiosk-transaction/kiosk-transaction.mdx | 0 .../kiosk-transaction/managing.mdx | 0 .../kiosk-transaction/purchasing.mdx | 0 .../ts-sdk/kiosk/kiosk-client/querying.mdx | 0 .../introduction.mdx | 0 .../using-the-manager.mdx | 0 .../ts-sdk/typescript/bcs.mdx | 0 .../typescript/cryptography/keypairs.mdx | 2 +- .../typescript/cryptography/multisig.mdx | 2 +- .../ts-sdk/typescript/executors.mdx | 0 .../ts-sdk/typescript/faucet.mdx | 0 .../ts-sdk/typescript/graphql.mdx | 0 .../ts-sdk/typescript/hello-iota.mdx | 4 +- .../ts-sdk/typescript/index.mdx | 0 .../ts-sdk/typescript/install.mdx | 2 +- .../ts-sdk/typescript/iota-client.mdx | 4 +- .../custom-split-strategy.mdx | 0 .../typescript/owned-object-pool/examples.mdx | 0 .../typescript/owned-object-pool/index.mdx | 0 .../owned-object-pool/local-development.mdx | 2 +- .../typescript/owned-object-pool/overview.mdx | 4 +- .../ts-sdk/typescript/plugins.mdx | 0 .../transaction-building/basics.mdx | 0 .../typescript/transaction-building/gas.mdx | 2 +- .../transaction-building/intents.mdx | 0 .../transaction-building/offline.mdx | 0 .../sponsored-transactions.mdx | 0 .../ts-sdk/typescript/utils.mdx | 0 docs/site/docusaurus.config.js | 5 +- examples/tic-tac-toe/ui/README.md | 2 +- scripts/slipstream/config_slipstream.json | 6 +- sdk/create-dapp/README.md | 2 +- sdk/create-dapp/package.json | 2 +- .../templates/react-client-dapp/README.md | 2 +- .../templates/react-e2e-counter/README.md | 2 +- sdk/dapp-kit/README.md | 4 +- sdk/dapp-kit/package.json | 2 +- sdk/kiosk/README.md | 4 +- sdk/typescript/README.md | 4 +- sdk/typescript/package.json | 2 +- 446 files changed, 15639 insertions(+), 102 deletions(-) create mode 100644 docs/content/ts-sdk/api/bcs/classes/BcsType.md create mode 100644 docs/content/ts-sdk/api/bcs/classes/TypeTagSerializer.md create mode 100644 docs/content/ts-sdk/api/bcs/index.md create mode 100644 docs/content/ts-sdk/api/bcs/interfaces/BcsTypeOptions.md create mode 100644 docs/content/ts-sdk/api/bcs/type-aliases/TypeTag.md create mode 100644 docs/content/ts-sdk/api/bcs/variables/bcs.md create mode 100644 docs/content/ts-sdk/api/client/classes/IotaClient.md create mode 100644 docs/content/ts-sdk/api/client/classes/IotaHTTPStatusError.md create mode 100644 docs/content/ts-sdk/api/client/classes/IotaHTTPTransport.md create mode 100644 docs/content/ts-sdk/api/client/classes/IotaHTTPTransportError.md create mode 100644 docs/content/ts-sdk/api/client/classes/JsonRpcError.md create mode 100644 docs/content/ts-sdk/api/client/enumerations/Network.md create mode 100644 docs/content/ts-sdk/api/client/functions/getAllNetworks.md create mode 100644 docs/content/ts-sdk/api/client/functions/getAppsBackend.md create mode 100644 docs/content/ts-sdk/api/client/functions/getDefaultNetwork.md create mode 100644 docs/content/ts-sdk/api/client/functions/getFullnodeUrl.md create mode 100644 docs/content/ts-sdk/api/client/functions/getNetwork.md create mode 100644 docs/content/ts-sdk/api/client/functions/isIotaClient.md create mode 100644 docs/content/ts-sdk/api/client/index.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/AddressMetrics.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/Balance.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/BalanceChange.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/Checkpoint.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/Claim.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/CoinMetadata.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/CoinStruct.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/CoinSupply.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/CommitteeInfo.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/DelegatedStake.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/DelegatedTimelockedStake.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/DevInspectArgs.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/DevInspectResults.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/DevInspectTransactionBlockParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/DisplayFieldsResponse.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockResponse.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/DynamicFieldInfo.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/DynamicFieldName.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/ECMHLiveObjectSetDigest.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/EndOfEpochData.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/EndOfEpochInfo.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/EpochInfo.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/EpochMetrics.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/EventId.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/ExecuteTransactionBlockParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GasCostSummary.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetAllBalancesParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetAllCoinsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetAllEpochAddressMetricsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetBalanceParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetChainIdentifierParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetCheckpointAddressMetricsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetCheckpointParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetCheckpointsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetCoinMetadataParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetCoinsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetCommitteeInfoParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetCurrentEpochParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldObjectParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetEpochMetricsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetEpochsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetEventsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetLatestAddressMetricsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetLatestCheckpointSequenceNumberParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetLatestIotaSystemStateParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetMoveCallMetricsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetMoveFunctionArgTypesParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetNetworkMetricsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveFunctionParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModuleParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModulesByPackageParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveStructParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetObjectParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetPastObjectRequest.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetProtocolConfigParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetReferenceGasPriceParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetStakesByIdsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetStakesParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetTimelockedStakesByIdsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetTimelockedStakesParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetTotalSupplyParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetTotalTransactionBlocksParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetTotalTransactionsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetTransactionBlockParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/GetValidatorsApyParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaActiveJwk.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaAuthenticatorStateExpire.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaChangeEpoch.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaEvent.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaExecutionResult.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaGasData.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaHTTPTransportOptions.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaJWK.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaJwkId.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaMoveAbilitySet.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaMoveModuleId.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedField.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedFunction.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedModule.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedStruct.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaMoveStructTypeParameter.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaObjectData.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaObjectDataOptions.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaObjectRef.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaObjectResponse.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaObjectResponseQuery.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaSystemStateSummary.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlock.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponse.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseOptions.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseQuery.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaTransport.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaTransportRequestOptions.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaTransportSubscribeOptions.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/IotaValidatorSummary.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/KioskConfiguration.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/MoveCallIotaTransaction.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/MoveCallMetrics.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/MoveCallParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/MoveFunctionName.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/MoveVariant.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/MultiGetObjectsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/MultiGetTransactionBlocksParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/MultiSig.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/MultiSigPublicKey.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/NetworkConfiguration.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/NetworkMetrics.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/OrderArguments.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/OwnedObjectRef.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/PaginatedCheckpoints.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/PaginatedCoins.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/PaginatedDynamicFieldInfos.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/PaginatedEpochInfos.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/PaginatedEpochMetricss.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/PaginatedEvents.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/PaginatedObjectsResponse.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/PaginatedTransactionResponse.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/PaginationArguments.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/PasskeyAuthenticator.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/ProtocolConfig.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/QueryEventsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/SubscribeEventParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/SubscribeTransactionParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/TransactionBlockBytes.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/TransactionBlockEffectsModifiedAtVersions.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/TransferObjectParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/TryGetPastObjectParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/TryMultiGetPastObjectsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/TypeOrigin.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeBatchTransactionParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeMergeCoinsParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeMoveCallParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafePayAllIotaParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafePayIotaParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafePayParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafePublishParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddStakeParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddTimelockedStakeParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawStakeParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawTimelockedStakeParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinEqualParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeTransferIotaParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UnsafeTransferObjectParams.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/UpgradeInfo.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/ValidatorApy.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/ValidatorsApy.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/ZkLoginAuthenticator.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/ZkLoginInputs.md create mode 100644 docs/content/ts-sdk/api/client/interfaces/ZkLoginProof.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/AllEpochsAddressMetrics.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/ChainType.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/CheckpointCommitment.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/CheckpointId.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/CheckpointPage.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/CoinBalance.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/CompressedSignature.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/ConsensusDeterminedVersionAssignments.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/DynamicFieldPage.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/DynamicFieldType.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/EpochMetricsPage.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/EpochPage.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/ExecuteTransactionRequestType.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/ExecutionStatus.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/GetOwnedObjectsParams.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/HttpHeaders.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/InputObjectKind.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaArgument.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaCallArg.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaClientOptions.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaEndOfEpochTransactionKind.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaEventFilter.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaMoveAbility.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaMoveFunctionArgType.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaMoveNormalizedModules.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaMoveNormalizedType.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaMoveObject.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaMovePackage.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaMoveVisibility.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaObjectChange.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeCreated.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeDeleted.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeMutated.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangePublished.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeTransferred.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeWrapped.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaObjectDataFilter.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaParsedData.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaTransaction.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaTransactionBlockBuilderMode.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/IotaTransactionBlockKind.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/MoveCallMetric.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/MoveStruct.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/MoveValue.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/NetworkId.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/ObjectOwner.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/ObjectRead.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/ObjectResponseError.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/ObjectValueKind.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/Order.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/ProgrammableTransaction.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/ProtocolConfigValue.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/PublicKey.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/QueryTransactionBlocksParams.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/RPCTransactionRequestParams.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/RawData.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/Signature.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/StakeObject.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/TimelockedStake.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/TransactionBlockData.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/TransactionEffects.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/TransactionFilter.md create mode 100644 docs/content/ts-sdk/api/client/type-aliases/Unsubscribe.md create mode 100644 docs/content/ts-sdk/api/cryptography/classes/Keypair.md create mode 100644 docs/content/ts-sdk/api/cryptography/classes/PublicKey.md create mode 100644 docs/content/ts-sdk/api/cryptography/classes/Signer.md create mode 100644 docs/content/ts-sdk/api/cryptography/functions/decodeIotaPrivateKey.md create mode 100644 docs/content/ts-sdk/api/cryptography/functions/encodeIotaPrivateKey.md create mode 100644 docs/content/ts-sdk/api/cryptography/functions/isValidBIP32Path.md create mode 100644 docs/content/ts-sdk/api/cryptography/functions/isValidHardenedPath.md create mode 100644 docs/content/ts-sdk/api/cryptography/functions/messageWithIntent.md create mode 100644 docs/content/ts-sdk/api/cryptography/functions/mnemonicToSeed.md create mode 100644 docs/content/ts-sdk/api/cryptography/functions/mnemonicToSeedHex.md create mode 100644 docs/content/ts-sdk/api/cryptography/functions/parseSerializedSignature.md create mode 100644 docs/content/ts-sdk/api/cryptography/functions/toSerializedSignature.md create mode 100644 docs/content/ts-sdk/api/cryptography/index.md create mode 100644 docs/content/ts-sdk/api/cryptography/interfaces/SignatureWithBytes.md create mode 100644 docs/content/ts-sdk/api/cryptography/type-aliases/IntentScope.md create mode 100644 docs/content/ts-sdk/api/cryptography/type-aliases/ParsedKeypair.md create mode 100644 docs/content/ts-sdk/api/cryptography/type-aliases/SerializeSignatureInput.md create mode 100644 docs/content/ts-sdk/api/cryptography/type-aliases/SignatureFlag.md create mode 100644 docs/content/ts-sdk/api/cryptography/type-aliases/SignatureScheme.md create mode 100644 docs/content/ts-sdk/api/cryptography/variables/IOTA_PRIVATE_KEY_PREFIX.md create mode 100644 docs/content/ts-sdk/api/cryptography/variables/LEGACY_PRIVATE_KEY_SIZE.md create mode 100644 docs/content/ts-sdk/api/cryptography/variables/PRIVATE_KEY_SIZE.md create mode 100644 docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_FLAG_TO_SCHEME.md create mode 100644 docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_SCHEME_TO_FLAG.md create mode 100644 docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_SCHEME_TO_SIZE.md create mode 100644 docs/content/ts-sdk/api/faucet/classes/FaucetRateLimitError.md create mode 100644 docs/content/ts-sdk/api/faucet/functions/getFaucetHost.md create mode 100644 docs/content/ts-sdk/api/faucet/functions/getFaucetRequestStatus.md create mode 100644 docs/content/ts-sdk/api/faucet/functions/requestIotaFromFaucetV0.md create mode 100644 docs/content/ts-sdk/api/faucet/functions/requestIotaFromFaucetV1.md create mode 100644 docs/content/ts-sdk/api/faucet/index.md create mode 100644 docs/content/ts-sdk/api/graphql/classes/IotaGraphQLClient.md create mode 100644 docs/content/ts-sdk/api/graphql/classes/IotaGraphQLRequestError.md create mode 100644 docs/content/ts-sdk/api/graphql/index.md create mode 100644 docs/content/ts-sdk/api/graphql/interfaces/IotaGraphQLClientOptions.md create mode 100644 docs/content/ts-sdk/api/graphql/type-aliases/GraphQLDocument.md create mode 100644 docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryOptions.md create mode 100644 docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryResult.md create mode 100644 docs/content/ts-sdk/api/graphql/type-aliases/GraphQLResponseErrors.md create mode 100644 docs/content/ts-sdk/api/index.md create mode 100644 docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519Keypair.md create mode 100644 docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519PublicKey.md create mode 100644 docs/content/ts-sdk/api/keypairs/ed25519/index.md create mode 100644 docs/content/ts-sdk/api/keypairs/ed25519/interfaces/Ed25519KeypairData.md create mode 100644 docs/content/ts-sdk/api/keypairs/ed25519/variables/DEFAULT_ED25519_DERIVATION_PATH.md create mode 100644 docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1Keypair.md create mode 100644 docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1PublicKey.md create mode 100644 docs/content/ts-sdk/api/keypairs/secp256k1/index.md create mode 100644 docs/content/ts-sdk/api/keypairs/secp256k1/interfaces/Secp256k1KeypairData.md create mode 100644 docs/content/ts-sdk/api/keypairs/secp256k1/variables/DEFAULT_SECP256K1_DERIVATION_PATH.md create mode 100644 docs/content/ts-sdk/api/multisig/classes/MultiSigPublicKey.md create mode 100644 docs/content/ts-sdk/api/multisig/classes/MultiSigSigner.md create mode 100644 docs/content/ts-sdk/api/multisig/functions/parsePartialSignatures.md create mode 100644 docs/content/ts-sdk/api/multisig/index.md create mode 100644 docs/content/ts-sdk/api/multisig/type-aliases/MultiSigStruct.md create mode 100644 docs/content/ts-sdk/api/transactions/classes/AsyncCache.md create mode 100644 docs/content/ts-sdk/api/transactions/classes/ObjectCache.md create mode 100644 docs/content/ts-sdk/api/transactions/classes/ParallelTransactionExecutor.md create mode 100644 docs/content/ts-sdk/api/transactions/classes/SerialTransactionExecutor.md create mode 100644 docs/content/ts-sdk/api/transactions/classes/Transaction.md create mode 100644 docs/content/ts-sdk/api/transactions/classes/TransactionDataBuilder.md create mode 100644 docs/content/ts-sdk/api/transactions/enumerations/UpgradePolicy.md create mode 100644 docs/content/ts-sdk/api/transactions/functions/coinWithBalance.md create mode 100644 docs/content/ts-sdk/api/transactions/functions/getPureBcsSchema.md create mode 100644 docs/content/ts-sdk/api/transactions/functions/isTransaction.md create mode 100644 docs/content/ts-sdk/api/transactions/functions/normalizedTypeToMoveTypeSignature.md create mode 100644 docs/content/ts-sdk/api/transactions/index.md create mode 100644 docs/content/ts-sdk/api/transactions/interfaces/BuildTransactionOptions.md create mode 100644 docs/content/ts-sdk/api/transactions/interfaces/ParallelTransactionExecutorOptions.md create mode 100644 docs/content/ts-sdk/api/transactions/interfaces/SerializeTransactionOptions.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/Argument.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/CallArg.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/Command.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/GasData.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/ObjectRef.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignature.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignatureBody.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV1.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV2.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/TransactionArgument.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/TransactionData.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/TransactionInput.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectArgument.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectInput.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/TransactionPlugin.md create mode 100644 docs/content/ts-sdk/api/transactions/type-aliases/TransactionResult.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/Argument.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/Arguments.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/Command.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/Commands.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/GasData.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/Inputs.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/ObjectRef.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/OpenMoveTypeSignature.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/OpenMoveTypeSignatureBody.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/SerializedTransactionDataV1.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/SerializedTransactionDataV2.md create mode 100644 docs/content/ts-sdk/api/transactions/variables/TransactionData.md create mode 100644 docs/content/ts-sdk/api/typedoc-sidebar.cjs create mode 100644 docs/content/ts-sdk/api/utils/functions/formatAddress.md create mode 100644 docs/content/ts-sdk/api/utils/functions/formatDigest.md create mode 100644 docs/content/ts-sdk/api/utils/functions/formatType.md create mode 100644 docs/content/ts-sdk/api/utils/functions/fromB64.md create mode 100644 docs/content/ts-sdk/api/utils/functions/fromHEX.md create mode 100644 docs/content/ts-sdk/api/utils/functions/isValidIotaAddress.md create mode 100644 docs/content/ts-sdk/api/utils/functions/isValidIotaObjectId.md create mode 100644 docs/content/ts-sdk/api/utils/functions/isValidTransactionDigest.md create mode 100644 docs/content/ts-sdk/api/utils/functions/normalizeIotaAddress.md create mode 100644 docs/content/ts-sdk/api/utils/functions/normalizeIotaObjectId.md create mode 100644 docs/content/ts-sdk/api/utils/functions/normalizeStructTag.md create mode 100644 docs/content/ts-sdk/api/utils/functions/parseStructTag.md create mode 100644 docs/content/ts-sdk/api/utils/functions/toB64.md create mode 100644 docs/content/ts-sdk/api/utils/functions/toHEX.md create mode 100644 docs/content/ts-sdk/api/utils/index.md create mode 100644 docs/content/ts-sdk/api/utils/variables/IOTA_ADDRESS_LENGTH.md create mode 100644 docs/content/ts-sdk/api/utils/variables/IOTA_CLOCK_OBJECT_ID.md create mode 100644 docs/content/ts-sdk/api/utils/variables/IOTA_DECIMALS.md create mode 100644 docs/content/ts-sdk/api/utils/variables/IOTA_FRAMEWORK_ADDRESS.md create mode 100644 docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_ADDRESS.md create mode 100644 docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_MODULE_NAME.md create mode 100644 docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_STATE_OBJECT_ID.md create mode 100644 docs/content/ts-sdk/api/utils/variables/IOTA_TYPE_ARG.md create mode 100644 docs/content/ts-sdk/api/utils/variables/MOVE_STDLIB_ADDRESS.md create mode 100644 docs/content/ts-sdk/api/utils/variables/NANOS_PER_IOTA.md create mode 100644 docs/content/ts-sdk/api/verify/functions/publicKeyFromIotaBytes.md create mode 100644 docs/content/ts-sdk/api/verify/functions/publicKeyFromRawBytes.md create mode 100644 docs/content/ts-sdk/api/verify/functions/verifyPersonalMessageSignature.md create mode 100644 docs/content/ts-sdk/api/verify/functions/verifySignature.md create mode 100644 docs/content/ts-sdk/api/verify/functions/verifyTransactionSignature.md create mode 100644 docs/content/ts-sdk/api/verify/index.md rename docs/content/{references => }/ts-sdk/bcs.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/create-dapp.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/index.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/iota-client-provider.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/rpc-hooks.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/themes.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-components/ConnectButton.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-components/ConnectModal.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useAccounts.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useConnectWallet.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useSignTransaction.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-hooks/useWallets.mdx (100%) rename docs/content/{references => }/ts-sdk/dapp-kit/wallet-provider.mdx (100%) rename docs/content/{references => }/ts-sdk/kiosk/advanced-examples.mdx (100%) rename docs/content/{references => }/ts-sdk/kiosk/index.mdx (100%) rename docs/content/{references => }/ts-sdk/kiosk/kiosk-client/introduction.mdx (100%) rename docs/content/{references => }/ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples.mdx (100%) rename docs/content/{references => }/ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction.mdx (100%) rename docs/content/{references => }/ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing.mdx (100%) rename docs/content/{references => }/ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing.mdx (100%) rename docs/content/{references => }/ts-sdk/kiosk/kiosk-client/querying.mdx (100%) rename docs/content/{references => }/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction.mdx (100%) rename docs/content/{references => }/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/bcs.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/cryptography/keypairs.mdx (98%) rename docs/content/{references => }/ts-sdk/typescript/cryptography/multisig.mdx (98%) rename docs/content/{references => }/ts-sdk/typescript/executors.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/faucet.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/graphql.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/hello-iota.mdx (95%) rename docs/content/{references => }/ts-sdk/typescript/index.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/install.mdx (94%) rename docs/content/{references => }/ts-sdk/typescript/iota-client.mdx (98%) rename docs/content/{references => }/ts-sdk/typescript/owned-object-pool/custom-split-strategy.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/owned-object-pool/examples.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/owned-object-pool/index.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/owned-object-pool/local-development.mdx (98%) rename docs/content/{references => }/ts-sdk/typescript/owned-object-pool/overview.mdx (96%) rename docs/content/{references => }/ts-sdk/typescript/plugins.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/transaction-building/basics.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/transaction-building/gas.mdx (95%) rename docs/content/{references => }/ts-sdk/typescript/transaction-building/intents.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/transaction-building/offline.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/transaction-building/sponsored-transactions.mdx (100%) rename docs/content/{references => }/ts-sdk/typescript/utils.mdx (100%) diff --git a/apps/wallet/src/ui/app/pages/home/nft-details/index.tsx b/apps/wallet/src/ui/app/pages/home/nft-details/index.tsx index 00792a40e54..e526e88b3d2 100644 --- a/apps/wallet/src/ui/app/pages/home/nft-details/index.tsx +++ b/apps/wallet/src/ui/app/pages/home/nft-details/index.tsx @@ -58,12 +58,12 @@ function NFTDetailsPage() { const isPending = isNftLoading || isPendingDisplay || isGuardLoading; function handleMoreAboutKiosk() { - window.open('https://docs.iota.org/references/ts-sdk/kiosk/', '_blank'); + window.open('https://docs.iota.org/ts-sdk/kiosk/', '_blank'); } function handleMarketplace() { // TODO: https://github.com/iotaledger/iota/issues/4024 - window.open('https://docs.iota.org/references/ts-sdk/kiosk/', '_blank'); + window.open('https://docs.iota.org/ts-sdk/kiosk/', '_blank'); } function handleSend() { diff --git a/dapps/multisig-toolkit/src/routes/multisig-address.tsx b/dapps/multisig-toolkit/src/routes/multisig-address.tsx index 9d7759cdd19..8f5b4a66d93 100644 --- a/dapps/multisig-toolkit/src/routes/multisig-address.tsx +++ b/dapps/multisig-toolkit/src/routes/multisig-address.tsx @@ -137,7 +137,7 @@ export default function MultiSigAddressGenerator() { IOTA MultiSig Address - https://docs.iota.org/references/ts-sdk/typescript/cryptography/multisig + https://docs.iota.org/ts-sdk/typescript/cryptography/multisig diff --git a/docs/content/developer/dev-cheat-sheet.mdx b/docs/content/developer/dev-cheat-sheet.mdx index f048a5e472f..b1cdc4f3d5c 100644 --- a/docs/content/developer/dev-cheat-sheet.mdx +++ b/docs/content/developer/dev-cheat-sheet.mdx @@ -33,7 +33,7 @@ Quick reference on best practices for IOTA Network developers. ## Apps -- For optimal performance and data consistency, apps should submit writes and reads for the same full node. In the TS SDK, this means that apps should use the wallet's [`signTransactionBlock`](../references/ts-sdk/dapp-kit/index.mdx) API, then submit the transaction via a call to [`execute_transactionBlock`](/iota-api-ref#iota_executetransactionblock) on the app's full node, _not_ use the wallet's `signAndExecuteTransactionBlock` API. This ensures read-after-write-consistency--reads from the app's full node will reflect writes from the transaction right away instead of waiting for a checkpoint. +- For optimal performance and data consistency, apps should submit writes and reads for the same full node. In the TS SDK, this means that apps should use the wallet's [`signTransactionBlock`](../ts-sdk/dapp-kit/index.mdx) API, then submit the transaction via a call to [`execute_transactionBlock`](/iota-api-ref#iota_executetransactionblock) on the app's full node, _not_ use the wallet's `signAndExecuteTransactionBlock` API. This ensures read-after-write-consistency--reads from the app's full node will reflect writes from the transaction right away instead of waiting for a checkpoint. - For lower latency, use [`executeTransactionBlock`](/iota-api-ref#iota_executetransactionblock) with `"showEffects": false` and `"showEvents": false` if your app needs to know that a transaction was confirmed, but does not immediately need to see the transaction effects or read the objects/events written by the transaction. - Apps should implement a local cache for frequently read data rather than over-fetching from the full node. - Whenever possible, use programmable transaction blocks to compose existing on-chain functionality rather than publishing new smart contract code. Programmable transaction blocks allow large-scale batching and heterogeneous composition, driving already-low gas fees down even further. diff --git a/docs/content/developer/evm-to-move/tooling-apis.mdx b/docs/content/developer/evm-to-move/tooling-apis.mdx index 258599084db..f5200beb5f6 100644 --- a/docs/content/developer/evm-to-move/tooling-apis.mdx +++ b/docs/content/developer/evm-to-move/tooling-apis.mdx @@ -37,7 +37,7 @@ Unlike with EVM, where open-source third parties create the most used tooling, t ### SDKs -IOTA Move comes with a convenient [Rust](../../references/rust-sdk.mdx) and [TypeScript SDK](../../references/ts-sdk/typescript/index.mdx) right out of the box as part of the IOTA Move core. Next to that, a dApp toolkit is also offered by default, which provides several React components to more easily integrate your IOTA Move contract interaction within your dApp. While TypeScript covers most dApp requirements for an SDK, there might not be an SDK available for your language of choice at the moment. However, You can use one of the APIs directly on a lower level. +IOTA Move comes with a convenient [Rust](../../references/rust-sdk.mdx) and [TypeScript SDK](../../ts-sdk/typescript/index.mdx) right out of the box as part of the IOTA Move core. Next to that, a dApp toolkit is also offered by default, which provides several React components to more easily integrate your IOTA Move contract interaction within your dApp. While TypeScript covers most dApp requirements for an SDK, there might not be an SDK available for your language of choice at the moment. However, You can use one of the APIs directly on a lower level. ### Wallets diff --git a/docs/content/developer/getting-started/client-tssdk.mdx b/docs/content/developer/getting-started/client-tssdk.mdx index 9480281f570..eed9b9ced58 100644 --- a/docs/content/developer/getting-started/client-tssdk.mdx +++ b/docs/content/developer/getting-started/client-tssdk.mdx @@ -34,14 +34,14 @@ yarn create @iota/dapp --template react-client-dapp ## What is the IOTA TypeScript SDK? -The [IOTA TypeScript SDK](../../references/ts-sdk/typescript/index.mdx) (`@iota/iota-sdk`) provides the essential +The [IOTA TypeScript SDK](../../ts-sdk/typescript/index.mdx) (`@iota/iota-sdk`) provides the essential functionality needed to interact with the IOTA ecosystem from TypeScript. It's versatile enough to be used in any TypeScript or JavaScript project, including web apps, Node.js applications, or mobile apps developed with tools like React Native that support TypeScript. ## What is dApp Kit? -[dApp Kit](../../references/ts-sdk/dapp-kit/index.mdx). (`@iota/dapp-kit`) is a collection of React hooks, components, +[dApp Kit](../../ts-sdk/dapp-kit/index.mdx). (`@iota/dapp-kit`) is a collection of React hooks, components, and utilities designed to simplify building decentralized applications (dApps) on the IOTA network. diff --git a/docs/content/developer/getting-started/iota-environment.mdx b/docs/content/developer/getting-started/iota-environment.mdx index 3c3360d1cf9..2c3acf693a3 100644 --- a/docs/content/developer/getting-started/iota-environment.mdx +++ b/docs/content/developer/getting-started/iota-environment.mdx @@ -29,7 +29,7 @@ IOTA nodes. IOTA provides two official SDKs that you can use to interact with the IOTA network from your dApp: -* [Typescript SDK](../../references/ts-sdk/typescript/index.mdx) +* [Typescript SDK](../../ts-sdk/typescript/index.mdx) * [Rust SDK](../../references/rust-sdk.mdx) ## Move IDEs and plugins diff --git a/docs/content/developer/iota-101/move-overview/package-upgrades/custom-policies.mdx b/docs/content/developer/iota-101/move-overview/package-upgrades/custom-policies.mdx index 3068fc2ce60..c1fa397f23b 100644 --- a/docs/content/developer/iota-101/move-overview/package-upgrades/custom-policies.mdx +++ b/docs/content/developer/iota-101/move-overview/package-upgrades/custom-policies.mdx @@ -546,7 +546,7 @@ you'll publish this package and then upgrade it to change the value emitted in t ### Using the TypeScript SDK To publish and upgrade the package using your custom policy, -you'll need to use the [IOTA TypeScript SDK](../../../../references/ts-sdk/typescript/index.mdx). +you'll need to use the [IOTA TypeScript SDK](../../../../ts-sdk/typescript/index.mdx). #### 1. Set Up a Node.js Project diff --git a/docs/content/developer/iota-101/transactions/ptb/building-programmable-transaction-blocks-ts-sdk.mdx b/docs/content/developer/iota-101/transactions/ptb/building-programmable-transaction-blocks-ts-sdk.mdx index 70b171a6459..67333043eab 100644 --- a/docs/content/developer/iota-101/transactions/ptb/building-programmable-transaction-blocks-ts-sdk.mdx +++ b/docs/content/developer/iota-101/transactions/ptb/building-programmable-transaction-blocks-ts-sdk.mdx @@ -7,7 +7,7 @@ import questions from '/json/developer/iota-101/transactions/ptb/building-progra # Build Programmable Transaction Blocks with TypeScript SDK This guide illustrates how to build a [programmable transaction block (PTB)](programmable-transaction-blocks.mdx) on IOTA -using the [TypeScript SDK](../../../../references/ts-sdk/typescript/install.mdx). +using the [TypeScript SDK](../../../../ts-sdk/typescript/install.mdx). This example starts by building a PTB to send IOTA tokens. To construct transactions, import the `Transaction` class and create a new instance: diff --git a/docs/content/developer/iota-101/transactions/ptb/coin-management.mdx b/docs/content/developer/iota-101/transactions/ptb/coin-management.mdx index e942cff51f2..5943e2ccd20 100644 --- a/docs/content/developer/iota-101/transactions/ptb/coin-management.mdx +++ b/docs/content/developer/iota-101/transactions/ptb/coin-management.mdx @@ -28,7 +28,7 @@ making coin management a crucial step in transaction preparation. ## Using the IOTA SDKs -The IOTA SDKs for [TypeScript](../../../../references/ts-sdk/typescript/index.mdx) and [Rust](../../../../references/rust-sdk.mdx) handle coin management automatically, +The IOTA SDKs for [TypeScript](../../../../ts-sdk/typescript/index.mdx) and [Rust](../../../../references/rust-sdk.mdx) handle coin management automatically, merging coins as needed and assuming sequential transaction execution. This automation simplifies the process for most use cases where high concurrency isn't a concern. diff --git a/docs/content/developer/iota-101/transactions/ptb/programmable-transaction-blocks-overview.mdx b/docs/content/developer/iota-101/transactions/ptb/programmable-transaction-blocks-overview.mdx index eee50e55c49..4bcc39612f2 100644 --- a/docs/content/developer/iota-101/transactions/ptb/programmable-transaction-blocks-overview.mdx +++ b/docs/content/developer/iota-101/transactions/ptb/programmable-transaction-blocks-overview.mdx @@ -7,7 +7,7 @@ description: Learn about Programmable Transaction Blocks (PTBs) in IOTA and how ## Building PTBs with the TypeScript SDK -To truly harness the capabilities of PTBs, practical experience is key. Utilizing tools like the [IOTA TypeScript SDK](../../../../references/ts-sdk/typescript/index.mdx) allows you to explore the power and flexibility that PTBs offer. +To truly harness the capabilities of PTBs, practical experience is key. Utilizing tools like the [IOTA TypeScript SDK](../../../../ts-sdk/typescript/index.mdx) allows you to explore the power and flexibility that PTBs offer. Dive deeper into this topic in [Building Programmable Transaction Blocks](building-programmable-transaction-blocks-ts-sdk). diff --git a/docs/content/developer/iota-101/transactions/sign-and-send-transactions.mdx b/docs/content/developer/iota-101/transactions/sign-and-send-transactions.mdx index f94e360b26e..bbba57bae42 100644 --- a/docs/content/developer/iota-101/transactions/sign-and-send-transactions.mdx +++ b/docs/content/developer/iota-101/transactions/sign-and-send-transactions.mdx @@ -56,7 +56,7 @@ Below are examples demonstrating how to sign and submit transactions using Rust, -There are several methods to create a key pair and derive its public key and Move address using the [Move TypeScript SDK](../../../references/ts-sdk/typescript/index.mdx). +There are several methods to create a key pair and derive its public key and Move address using the [Move TypeScript SDK](../../../ts-sdk/typescript/index.mdx). ```tsx import { fromHEX } from '@iota/bcs'; diff --git a/docs/content/developer/iota-101/using-events.mdx b/docs/content/developer/iota-101/using-events.mdx index f808f9e1e07..e287fd30612 100644 --- a/docs/content/developer/iota-101/using-events.mdx +++ b/docs/content/developer/iota-101/using-events.mdx @@ -64,7 +64,7 @@ public fun collect_profits( _: &ShopOwnerCap, shop: &mut DonutShop, ctx: &mut Tx ## Subscribing to Events To react to events emitted by Move modules, you need to subscribe to them. -IOTA full nodes support event subscriptions via JSON-RPC notifications over WebSocket. You can interact with the [RPC directly][iotax_subscribeEvent](/iota-api-ref#iotax_subscribeevent), [iotax_subscribeTransaction](/iota-api-ref#iotax_subscribetransaction) or use an SDK like the [IOTA TypeScript SDK](../../references/ts-sdk/typescript/index.mdx). +IOTA full nodes support event subscriptions via JSON-RPC notifications over WebSocket. You can interact with the [RPC directly][iotax_subscribeEvent](/iota-api-ref#iotax_subscribeevent), [iotax_subscribeTransaction](/iota-api-ref#iotax_subscribetransaction) or use an SDK like the [IOTA TypeScript SDK](../../ts-sdk/typescript/index.mdx). The following excerpt from one of the examples uses the TypeScript SDK to create an asynchronous subscription to the filter identified in the filter. @@ -134,7 +134,7 @@ async fn main() -> Result<()> { ### TypeScript -To create the event subscription, you can use a basic Node.js app. You need the [IOTA TypeScript SDK](../../references/ts-sdk/typescript/index.mdx), so install the module using `npm install @iota/iota-sdk` at the root of your project. In your TypeScript code, import `JsonRpcProvider` and a connection from the library. +To create the event subscription, you can use a basic Node.js app. You need the [IOTA TypeScript SDK](../../ts-sdk/typescript/index.mdx), so install the module using `npm install @iota/iota-sdk` at the root of your project. In your TypeScript code, import `JsonRpcProvider` and a connection from the library. ```ts diff --git a/docs/content/developer/standards/kiosk.mdx b/docs/content/developer/standards/kiosk.mdx index 4711381f38e..4d5630e6218 100644 --- a/docs/content/developer/standards/kiosk.mdx +++ b/docs/content/developer/standards/kiosk.mdx @@ -16,7 +16,7 @@ Practically, Kiosk is a part of the IOTA framework, and it is native to the syst :::info -See the [Kiosk SDK documentation](../../references/ts-sdk/kiosk/index.mdx) for examples of working with Kiosk using TypeScript. +See the [Kiosk SDK documentation](../../ts-sdk/kiosk/index.mdx) for examples of working with Kiosk using TypeScript. ::: diff --git a/docs/content/developer/standards/wallet-standard.mdx b/docs/content/developer/standards/wallet-standard.mdx index 8cc9142dde4..bdd586b91c7 100644 --- a/docs/content/developer/standards/wallet-standard.mdx +++ b/docs/content/developer/standards/wallet-standard.mdx @@ -327,6 +327,6 @@ These values are all arrays containing the new or changed items. Consequently, e ### Implementation Example -IOTA offers a bare bones scaffold for React-based applications called `@iota/dapp-kit`. See the [dApp Kit documentation](../../references/ts-sdk/dapp-kit/index.mdx) for more information. +IOTA offers a bare bones scaffold for React-based applications called `@iota/dapp-kit`. See the [dApp Kit documentation](../../ts-sdk/dapp-kit/index.mdx) for more information. \ No newline at end of file diff --git a/docs/content/references/references.mdx b/docs/content/references/references.mdx index 27a91e3f343..03facf3dd25 100644 --- a/docs/content/references/references.mdx +++ b/docs/content/references/references.mdx @@ -48,7 +48,7 @@ Access IOTA Move functions on chain using the IOTA Move CLI. Official software development kits (SDKs) available for IOTA include the TypeScript SDK and Rust SDK. - + The IOTA TypeScript SDK has its own microsite. Click this box to go there. diff --git a/docs/content/sidebars/developer.js b/docs/content/sidebars/developer.js index 9c3d738667c..ca3a09d0734 100644 --- a/docs/content/sidebars/developer.js +++ b/docs/content/sidebars/developer.js @@ -55,7 +55,7 @@ const developer = [ { type: 'link', label: 'Typescript SDK', - href: '/references/ts-sdk/typescript', + href: '/ts-sdk/typescript', }, 'developer/iota-101/using-events', ], diff --git a/docs/content/sidebars/ts-sdk.js b/docs/content/sidebars/ts-sdk.js index 3ce2111226e..c04a6f20d30 100644 --- a/docs/content/sidebars/ts-sdk.js +++ b/docs/content/sidebars/ts-sdk.js @@ -2,49 +2,49 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import typedocSidebar from '../references/ts-sdk/api/typedoc-sidebar.cjs'; +import typedocSidebar from '../ts-sdk/api/typedoc-sidebar.cjs'; const references = [ { type: 'category', label: 'Typescript SDK', items: [ - 'references/ts-sdk/typescript/index', - 'references/ts-sdk/typescript/install', - 'references/ts-sdk/typescript/hello-iota', - 'references/ts-sdk/typescript/faucet', - 'references/ts-sdk/typescript/iota-client', - 'references/ts-sdk/typescript/graphql', + 'ts-sdk/typescript/index', + 'ts-sdk/typescript/install', + 'ts-sdk/typescript/hello-iota', + 'ts-sdk/typescript/faucet', + 'ts-sdk/typescript/iota-client', + 'ts-sdk/typescript/graphql', { type: 'category', label: 'Transaction Building', items: [ - 'references/ts-sdk/typescript/transaction-building/basics', - 'references/ts-sdk/typescript/transaction-building/gas', - 'references/ts-sdk/typescript/transaction-building/sponsored-transactions', - 'references/ts-sdk/typescript/transaction-building/offline', + 'ts-sdk/typescript/transaction-building/basics', + 'ts-sdk/typescript/transaction-building/gas', + 'ts-sdk/typescript/transaction-building/sponsored-transactions', + 'ts-sdk/typescript/transaction-building/offline', ], }, { type: 'category', label: 'Cryptography', items: [ - 'references/ts-sdk/typescript/cryptography/keypairs', - 'references/ts-sdk/typescript/cryptography/multisig', + 'ts-sdk/typescript/cryptography/keypairs', + 'ts-sdk/typescript/cryptography/multisig', ], }, - 'references/ts-sdk/typescript/utils', - 'references/ts-sdk/typescript/bcs', - 'references/ts-sdk/typescript/executors', - 'references/ts-sdk/typescript/plugins', + 'ts-sdk/typescript/utils', + 'ts-sdk/typescript/bcs', + 'ts-sdk/typescript/executors', + 'ts-sdk/typescript/plugins', { type: 'category', label: 'Owned Object Pool', items: [ - 'references/ts-sdk/typescript/owned-object-pool/index', - 'references/ts-sdk/typescript/owned-object-pool/overview', - 'references/ts-sdk/typescript/owned-object-pool/local-development', - 'references/ts-sdk/typescript/owned-object-pool/custom-split-strategy', - 'references/ts-sdk/typescript/owned-object-pool/examples', + 'ts-sdk/typescript/owned-object-pool/index', + 'ts-sdk/typescript/owned-object-pool/overview', + 'ts-sdk/typescript/owned-object-pool/local-development', + 'ts-sdk/typescript/owned-object-pool/custom-split-strategy', + 'ts-sdk/typescript/owned-object-pool/examples', ], }, ], @@ -53,81 +53,81 @@ const references = [ type: 'category', label: 'dApp Kit', items: [ - 'references/ts-sdk/dapp-kit/index', - 'references/ts-sdk/dapp-kit/create-dapp', - 'references/ts-sdk/dapp-kit/iota-client-provider', - 'references/ts-sdk/dapp-kit/rpc-hooks', - 'references/ts-sdk/dapp-kit/wallet-provider', + 'ts-sdk/dapp-kit/index', + 'ts-sdk/dapp-kit/create-dapp', + 'ts-sdk/dapp-kit/iota-client-provider', + 'ts-sdk/dapp-kit/rpc-hooks', + 'ts-sdk/dapp-kit/wallet-provider', { type: 'category', label: 'Wallet Components', items: [ - 'references/ts-sdk/dapp-kit/wallet-components/ConnectButton', - 'references/ts-sdk/dapp-kit/wallet-components/ConnectModal', + 'ts-sdk/dapp-kit/wallet-components/ConnectButton', + 'ts-sdk/dapp-kit/wallet-components/ConnectModal', ], }, { type: 'category', label: 'Wallet Hooks', items: [ - 'references/ts-sdk/dapp-kit/wallet-hooks/useWallets', - 'references/ts-sdk/dapp-kit/wallet-hooks/useAccounts', - 'references/ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet', - 'references/ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount', - 'references/ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet', - 'references/ts-sdk/dapp-kit/wallet-hooks/useConnectWallet', - 'references/ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet', - 'references/ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount', - 'references/ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects', - 'references/ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage', - 'references/ts-sdk/dapp-kit/wallet-hooks/useSignTransaction', - 'references/ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction', + 'ts-sdk/dapp-kit/wallet-hooks/useWallets', + 'ts-sdk/dapp-kit/wallet-hooks/useAccounts', + 'ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet', + 'ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount', + 'ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet', + 'ts-sdk/dapp-kit/wallet-hooks/useConnectWallet', + 'ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet', + 'ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount', + 'ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects', + 'ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage', + 'ts-sdk/dapp-kit/wallet-hooks/useSignTransaction', + 'ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction', ], }, - 'references/ts-sdk/dapp-kit/themes', + 'ts-sdk/dapp-kit/themes', ], }, { type: 'category', label: 'Kiosk SDK', items: [ - 'references/ts-sdk/kiosk/index', + 'ts-sdk/kiosk/index', { type: 'category', label: 'Kiosk Client', items: [ - 'references/ts-sdk/kiosk/kiosk-client/introduction', - 'references/ts-sdk/kiosk/kiosk-client/querying', + 'ts-sdk/kiosk/kiosk-client/introduction', + 'ts-sdk/kiosk/kiosk-client/querying', { type: 'category', label: 'Kiosk Transactions', items: [ - 'references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction', - 'references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing', - 'references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing', - 'references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples', + 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction', + 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing', + 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing', + 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples', ], }, { type: 'category', label: 'Transfer Policy Transactions', items: [ - 'references/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction', - 'references/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager', + 'ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction', + 'ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager', ], }, ], }, - 'references/ts-sdk/kiosk/advanced-examples', + 'ts-sdk/kiosk/advanced-examples', ], }, - 'references/ts-sdk/bcs', + 'ts-sdk/bcs', { type: 'category', label: 'API', link: { type: 'doc', - id: 'references/ts-sdk/api/index', + id: 'ts-sdk/api/index', }, items: typedocSidebar, }, diff --git a/docs/content/ts-sdk/api/bcs/classes/BcsType.md b/docs/content/ts-sdk/api/bcs/classes/BcsType.md new file mode 100644 index 00000000000..b903231826f --- /dev/null +++ b/docs/content/ts-sdk/api/bcs/classes/BcsType.md @@ -0,0 +1,191 @@ +# Class: BcsType\ + +## Type Parameters + +• **T** + +• **Input** = `T` + +## Constructors + +### new BcsType() + +> **new BcsType**\<`T`, `Input`\>(`options`): [`BcsType`](BcsType.md)\<`T`, `Input`\> + +#### Parameters + +• **options**: `object` & [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`T`, `Input`\> + +#### Returns + +[`BcsType`](BcsType.md)\<`T`, `Input`\> + +## Properties + +### $inferType + +> **$inferType**: `T` + +*** + +### $inferInput + +> **$inferInput**: `Input` + +*** + +### name + +> **name**: `string` + +*** + +### read() + +> **read**: (`reader`) => `T` + +#### Parameters + +• **reader**: `BcsReader` + +#### Returns + +`T` + +*** + +### serializedSize() + +> **serializedSize**: (`value`, `options`?) => `null` \| `number` + +#### Parameters + +• **value**: `Input` + +• **options?**: `BcsWriterOptions` + +#### Returns + +`null` \| `number` + +*** + +### validate() + +> **validate**: (`value`) => `void` + +#### Parameters + +• **value**: `Input` + +#### Returns + +`void` + +## Methods + +### write() + +> **write**(`value`, `writer`): `void` + +#### Parameters + +• **value**: `Input` + +• **writer**: `BcsWriter` + +#### Returns + +`void` + +*** + +### serialize() + +> **serialize**(`value`, `options`?): `SerializedBcs`\<`T`, `Input`\> + +#### Parameters + +• **value**: `Input` + +• **options?**: `BcsWriterOptions` + +#### Returns + +`SerializedBcs`\<`T`, `Input`\> + +*** + +### parse() + +> **parse**(`bytes`): `T` + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`T` + +*** + +### fromHex() + +> **fromHex**(`hex`): `T` + +#### Parameters + +• **hex**: `string` + +#### Returns + +`T` + +*** + +### fromBase58() + +> **fromBase58**(`b64`): `T` + +#### Parameters + +• **b64**: `string` + +#### Returns + +`T` + +*** + +### fromBase64() + +> **fromBase64**(`b64`): `T` + +#### Parameters + +• **b64**: `string` + +#### Returns + +`T` + +*** + +### transform() + +> **transform**\<`T2`, `Input2`\>(`__namedParameters`): [`BcsType`](BcsType.md)\<`T2`, `Input2`\> + +#### Type Parameters + +• **T2** + +• **Input2** + +#### Parameters + +• **\_\_namedParameters**: `object` & [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`T2`, `Input2`\> + +#### Returns + +[`BcsType`](BcsType.md)\<`T2`, `Input2`\> diff --git a/docs/content/ts-sdk/api/bcs/classes/TypeTagSerializer.md b/docs/content/ts-sdk/api/bcs/classes/TypeTagSerializer.md new file mode 100644 index 00000000000..9f866c4a1ab --- /dev/null +++ b/docs/content/ts-sdk/api/bcs/classes/TypeTagSerializer.md @@ -0,0 +1,57 @@ +# Class: TypeTagSerializer + +## Constructors + +### new TypeTagSerializer() + +> **new TypeTagSerializer**(): [`TypeTagSerializer`](TypeTagSerializer.md) + +#### Returns + +[`TypeTagSerializer`](TypeTagSerializer.md) + +## Methods + +### parseFromStr() + +> `static` **parseFromStr**(`str`, `normalizeAddress`): [`TypeTag`](../type-aliases/TypeTag.md) + +#### Parameters + +• **str**: `string` + +• **normalizeAddress**: `boolean` = `false` + +#### Returns + +[`TypeTag`](../type-aliases/TypeTag.md) + +*** + +### parseStructTypeArgs() + +> `static` **parseStructTypeArgs**(`str`, `normalizeAddress`): [`TypeTag`](../type-aliases/TypeTag.md)[] + +#### Parameters + +• **str**: `string` + +• **normalizeAddress**: `boolean` = `false` + +#### Returns + +[`TypeTag`](../type-aliases/TypeTag.md)[] + +*** + +### tagToString() + +> `static` **tagToString**(`tag`): `string` + +#### Parameters + +• **tag**: [`TypeTag`](../type-aliases/TypeTag.md) + +#### Returns + +`string` diff --git a/docs/content/ts-sdk/api/bcs/index.md b/docs/content/ts-sdk/api/bcs/index.md new file mode 100644 index 00000000000..524ad590c73 --- /dev/null +++ b/docs/content/ts-sdk/api/bcs/index.md @@ -0,0 +1,20 @@ +# bcs + +## Index + +### Classes + +- [BcsType](classes/BcsType.md) +- [TypeTagSerializer](classes/TypeTagSerializer.md) + +### Interfaces + +- [BcsTypeOptions](interfaces/BcsTypeOptions.md) + +### Type Aliases + +- [TypeTag](type-aliases/TypeTag.md) + +### Variables + +- [bcs](variables/bcs.md) diff --git a/docs/content/ts-sdk/api/bcs/interfaces/BcsTypeOptions.md b/docs/content/ts-sdk/api/bcs/interfaces/BcsTypeOptions.md new file mode 100644 index 00000000000..337599b597a --- /dev/null +++ b/docs/content/ts-sdk/api/bcs/interfaces/BcsTypeOptions.md @@ -0,0 +1,27 @@ +# Interface: BcsTypeOptions\ + +## Type Parameters + +• **T** + +• **Input** = `T` + +## Properties + +### name? + +> `optional` **name**: `string` + +*** + +### validate()? + +> `optional` **validate**: (`value`) => `void` + +#### Parameters + +• **value**: `Input` + +#### Returns + +`void` diff --git a/docs/content/ts-sdk/api/bcs/type-aliases/TypeTag.md b/docs/content/ts-sdk/api/bcs/type-aliases/TypeTag.md new file mode 100644 index 00000000000..a91445adba0 --- /dev/null +++ b/docs/content/ts-sdk/api/bcs/type-aliases/TypeTag.md @@ -0,0 +1,5 @@ +# Type Alias: TypeTag + +> **TypeTag**: `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` + +IOTA TypeTag object. A decoupled `0x...::module::Type` parameter. diff --git a/docs/content/ts-sdk/api/bcs/variables/bcs.md b/docs/content/ts-sdk/api/bcs/variables/bcs.md new file mode 100644 index 00000000000..d2398fdf9ac --- /dev/null +++ b/docs/content/ts-sdk/api/bcs/variables/bcs.md @@ -0,0 +1,1456 @@ +# Variable: bcs + +> `const` **bcs**: `object` + +## Type declaration + +### u8() + +Creates a BcsType that can be used to read and write an 8-bit unsigned integer. + +#### Parameters + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`number`, `number`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`number`, `number`\> + +#### Example + +```ts +bcs.u8().serialize(255).toBytes() // Uint8Array [ 255 ] +``` + +### u16() + +Creates a BcsType that can be used to read and write a 16-bit unsigned integer. + +#### Parameters + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`number`, `number`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`number`, `number`\> + +#### Example + +```ts +bcs.u16().serialize(65535).toBytes() // Uint8Array [ 255, 255 ] +``` + +### u32() + +Creates a BcsType that can be used to read and write a 32-bit unsigned integer. + +#### Parameters + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`number`, `number`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`number`, `number`\> + +#### Example + +```ts +bcs.u32().serialize(4294967295).toBytes() // Uint8Array [ 255, 255, 255, 255 ] +``` + +### u64() + +Creates a BcsType that can be used to read and write a 64-bit unsigned integer. + +#### Parameters + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`string`, `string` \| `number` \| `bigint`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`string`, `string` \| `number` \| `bigint`\> + +#### Example + +```ts +bcs.u64().serialize(1).toBytes() // Uint8Array [ 1, 0, 0, 0, 0, 0, 0, 0 ] +``` + +### u128() + +Creates a BcsType that can be used to read and write a 128-bit unsigned integer. + +#### Parameters + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`string`, `string` \| `number` \| `bigint`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`string`, `string` \| `number` \| `bigint`\> + +#### Example + +```ts +bcs.u128().serialize(1).toBytes() // Uint8Array [ 1, ..., 0 ] +``` + +### u256() + +Creates a BcsType that can be used to read and write a 256-bit unsigned integer. + +#### Parameters + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`string`, `string` \| `number` \| `bigint`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`string`, `string` \| `number` \| `bigint`\> + +#### Example + +```ts +bcs.u256().serialize(1).toBytes() // Uint8Array [ 1, ..., 0 ] +``` + +### bool() + +Creates a BcsType that can be used to read and write boolean values. + +#### Parameters + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`boolean`, `boolean`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`boolean`, `boolean`\> + +#### Example + +```ts +bcs.bool().serialize(true).toBytes() // Uint8Array [ 1 ] +``` + +### uleb128() + +Creates a BcsType that can be used to read and write unsigned LEB encoded integers + +#### Parameters + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`number`, `number`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`number`, `number`\> + +#### Example + +```ts + +``` + +### bytes() + +Creates a BcsType representing a fixed length byte array + +#### Type Parameters + +• **T** *extends* `number` + +#### Parameters + +• **size**: `T` + +The number of bytes this types represents + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`Uint8Array`, `Iterable`\<`number`, `any`, `any`\>\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`Uint8Array`, `Uint8Array`\> + +#### Example + +```ts +bcs.bytes(3).serialize(new Uint8Array([1, 2, 3])).toBytes() // Uint8Array [1, 2, 3] +``` + +### string() + +Creates a BcsType that can ser/de string values. Strings will be UTF-8 encoded + +#### Parameters + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`string`, `string`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`string`, `string`\> + +#### Example + +```ts +bcs.string().serialize('a').toBytes() // Uint8Array [ 1, 97 ] +``` + +### fixedArray() + +Creates a BcsType that represents a fixed length array of a given type + +#### Type Parameters + +• **T** + +• **Input** + +#### Parameters + +• **size**: `number` + +The number of elements in the array + +• **type**: [`BcsType`](../classes/BcsType.md)\<`T`, `Input`\> + +The BcsType of each element in the array + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`T`[], `Iterable`\<`Input`, `any`, `any`\> & `object`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`T`[], `Iterable`\<`Input`, `any`, `any`\> & `object`\> + +#### Example + +```ts +bcs.fixedArray(3, bcs.u8()).serialize([1, 2, 3]).toBytes() // Uint8Array [ 1, 2, 3 ] +``` + +### option() + +Creates a BcsType representing an optional value + +#### Type Parameters + +• **T** + +• **Input** + +#### Parameters + +• **type**: [`BcsType`](../classes/BcsType.md)\<`T`, `Input`\> + +The BcsType of the optional value + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`null` \| `T`, `undefined` \| `null` \| `Input`\> + +#### Example + +```ts +bcs.option(bcs.u8()).serialize(null).toBytes() // Uint8Array [ 0 ] +bcs.option(bcs.u8()).serialize(1).toBytes() // Uint8Array [ 1, 1 ] +``` + +### vector() + +Creates a BcsType representing a variable length vector of a given type + +#### Type Parameters + +• **T** + +• **Input** + +#### Parameters + +• **type**: [`BcsType`](../classes/BcsType.md)\<`T`, `Input`\> + +The BcsType of each element in the vector + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`T`[], `Iterable`\<`Input`, `any`, `any`\> & `object`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`T`[], `Iterable`\<`Input`, `any`, `any`\> & `object`\> + +#### Example + +```ts +bcs.vector(bcs.u8()).toBytes([1, 2, 3]) // Uint8Array [ 3, 1, 2, 3 ] +``` + +### tuple() + +Creates a BcsType representing a tuple of a given set of types + +#### Type Parameters + +• **Types** *extends* readonly [`BcsType`](../classes/BcsType.md)\<`any`, `any`\>[] + +#### Parameters + +• **types**: `Types` + +The BcsTypes for each element in the tuple + +• **options?**: [`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<\{ -readonly \[K in string \| number \| symbol\]: Types\[K\\] extends BcsType\ ? T : never \}, \{ \[K in string \| number \| symbol\]: Types\[K\\] extends BcsType\ ? T : never \}\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<\{ -readonly \[K in string \| number \| symbol\]: Types\[K\\] extends BcsType\ ? T : never \}, \{ \[K\_1 in string \| number \| symbol\]: Types\[K\_1\\] extends BcsType\ ? T\_1 : never \}\> + +#### Example + +```ts +const tuple = bcs.tuple([bcs.u8(), bcs.string(), bcs.bool()]) +tuple.serialize([1, 'a', true]).toBytes() // Uint8Array [ 1, 1, 97, 1 ] +``` + +### struct() + +Creates a BcsType representing a struct of a given set of fields + +#### Type Parameters + +• **T** *extends* `Record`\<`string`, [`BcsType`](../classes/BcsType.md)\<`any`, `any`\>\> + +#### Parameters + +• **name**: `string` + +The name of the struct + +• **fields**: `T` + +The fields of the struct. The order of the fields affects how data is serialized and deserialized + +• **options?**: `Omit`\<[`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<\{ \[K in string \| number \| symbol\]: T\[K\] extends BcsType\ ? U : never \}, \{ \[K in string \| number \| symbol\]: T\[K\] extends BcsType\ ? U : never \}\>, `"name"`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<\{ \[K in string \| number \| symbol\]: T\[K\] extends BcsType\ ? U : never \}, \{ \[K\_1 in string \| number \| symbol\]: T\[K\_1\] extends BcsType\ ? U\_1 : never \}\> + +#### Example + +```ts +const struct = bcs.struct('MyStruct', { + a: bcs.u8(), + b: bcs.string(), +}) +struct.serialize({ a: 1, b: 'a' }).toBytes() // Uint8Array [ 1, 1, 97 ] +``` + +### enum() + +Creates a BcsType representing an enum of a given set of options + +#### Type Parameters + +• **T** *extends* `Record`\<`string`, `null` \| [`BcsType`](../classes/BcsType.md)\<`any`, `any`\>\> + +#### Parameters + +• **name**: `string` + +The name of the enum + +• **values**: `T` + +The values of the enum. The order of the values affects how data is serialized and deserialized. +null can be used to represent a variant with no data. + +• **options?**: `Omit`\<[`BcsTypeOptions`](../interfaces/BcsTypeOptions.md)\<`EnumOutputShape`\<\{ \[K in string \| number \| symbol\]: T\[K\] extends BcsType\ ? U : true \}\>, `EnumInputShape`\<\{ \[K in string \| number \| symbol\]: T\[K\] extends BcsType\ ? U : null \| boolean \| object \}\>\>, `"name"`\> + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`EnumOutputShape`\<\{ \[K in string \| number \| symbol\]: T\[K\] extends BcsType\ ? U : true \}\>, `EnumInputShape`\<\{ \[K\_1 in string \| number \| symbol\]: T\[K\_1\] extends BcsType\ ? U\_1 : null \| boolean \| object \}\>\> + +#### Example + +```ts +const enum = bcs.enum('MyEnum', { + A: bcs.u8(), + B: bcs.string(), + C: null, +}) +enum.serialize({ A: 1 }).toBytes() // Uint8Array [ 0, 1 ] +enum.serialize({ B: 'a' }).toBytes() // Uint8Array [ 1, 1, 97 ] +enum.serialize({ C: true }).toBytes() // Uint8Array [ 2 ] +``` + +### map() + +Creates a BcsType representing a map of a given key and value type + +#### Type Parameters + +• **K** + +• **V** + +• **InputK** = `K` + +• **InputV** = `V` + +#### Parameters + +• **keyType**: [`BcsType`](../classes/BcsType.md)\<`K`, `InputK`\> + +The BcsType of the key + +• **valueType**: [`BcsType`](../classes/BcsType.md)\<`V`, `InputV`\> + +The BcsType of the value + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`Map`\<`K`, `V`\>, `Map`\<`InputK`, `InputV`\>\> + +#### Example + +```ts +const map = bcs.map(bcs.u8(), bcs.string()) +map.serialize(new Map([[2, 'a']])).toBytes() // Uint8Array [ 1, 2, 1, 97 ] +``` + +### lazy() + +Creates a BcsType that wraps another BcsType which is lazily evaluated. This is useful for creating recursive types. + +#### Type Parameters + +• **T** *extends* [`BcsType`](../classes/BcsType.md)\<`any`, `any`\> + +#### Parameters + +• **cb** + +A callback that returns the BcsType + +#### Returns + +`T` + +### U8 + +> **U8**: [`BcsType`](../classes/BcsType.md)\<`number`, `number`\> + +### U16 + +> **U16**: [`BcsType`](../classes/BcsType.md)\<`number`, `number`\> + +### U32 + +> **U32**: [`BcsType`](../classes/BcsType.md)\<`number`, `number`\> + +### U64 + +> **U64**: [`BcsType`](../classes/BcsType.md)\<`string`, `string` \| `number` \| `bigint`\> + +### U128 + +> **U128**: [`BcsType`](../classes/BcsType.md)\<`string`, `string` \| `number` \| `bigint`\> + +### U256 + +> **U256**: [`BcsType`](../classes/BcsType.md)\<`string`, `string` \| `number` \| `bigint`\> + +### ULEB128 + +> **ULEB128**: [`BcsType`](../classes/BcsType.md)\<`number`, `number`\> + +### Bool + +> **Bool**: [`BcsType`](../classes/BcsType.md)\<`boolean`, `boolean`\> + +### String + +> **String**: [`BcsType`](../classes/BcsType.md)\<`string`, `string`\> + +### Address + +> **Address**: [`BcsType`](../classes/BcsType.md)\<`string`, `string` \| `Uint8Array`\> + +### AppId + +> **AppId**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### $kind + +> **$kind**: `"Iota"` + +##### Iota + +> **Iota**: `true` = `null` + +### Argument + +> **Argument**: [`BcsType`](../classes/BcsType.md)\<`EnumOutputShapeWithKeys`\<`object`, `"GasCoin"` \| `"Input"` \| `"Result"` \| `"NestedResult"`\>, `EnumInputShape`\<`object`\>\> + +### CallArg + +> **CallArg**: [`BcsType`](../classes/BcsType.md)\<`EnumOutputShapeWithKeys`\<`object`, `"Pure"` \| `"Object"`\>, `EnumInputShape`\<`object`\>\> + +### CompressedSignature + +> **CompressedSignature**: [`BcsType`](../classes/BcsType.md)\<`EnumOutputShapeWithKeys`\<`object`, `"ED25519"` \| `"Secp256k1"` \| `"Secp256r1"`\>, `EnumInputShape`\<`object`\>\> + +### GasData + +> **GasData**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### payment + +> **payment**: `object`[] + +##### owner + +> **owner**: `string` = `Address` + +##### price + +> **price**: `string` + +##### budget + +> **budget**: `string` + +### Intent + +> **Intent**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### scope + +> **scope**: `EnumOutputShapeWithKeys`\<`object`, `"TransactionData"` \| `"TransactionEffects"` \| `"CheckpointSummary"` \| `"PersonalMessage"`\> = `IntentScope` + +###### Type declaration + +###### TransactionData + +> **TransactionData**: `true` = `null` + +###### TransactionEffects + +> **TransactionEffects**: `true` = `null` + +###### CheckpointSummary + +> **CheckpointSummary**: `true` = `null` + +###### PersonalMessage + +> **PersonalMessage**: `true` = `null` + +##### version + +> **version**: `object` = `IntentVersion` + +##### version.$kind + +> **$kind**: `"V0"` + +##### version.V0 + +> **V0**: `true` = `null` + +##### appId + +> **appId**: `object` = `AppId` + +##### appId.$kind + +> **$kind**: `"Iota"` + +##### appId.Iota + +> **Iota**: `true` = `null` + +### IntentMessage() + +> **IntentMessage**: \<`T`\>(`T`) => [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type Parameters + +• **T** *extends* [`BcsType`](../classes/BcsType.md)\<`any`, `any`\> + +#### Parameters + +• **T**: `T` + +#### Returns + +[`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +##### intent + +> **intent**: `object` = `Intent` + +##### intent.scope + +> **scope**: `EnumOutputShapeWithKeys`\<`object`, `"TransactionData"` \| `"TransactionEffects"` \| `"CheckpointSummary"` \| `"PersonalMessage"`\> = `IntentScope` + +###### Type declaration + +###### TransactionData + +> **TransactionData**: `true` = `null` + +###### TransactionEffects + +> **TransactionEffects**: `true` = `null` + +###### CheckpointSummary + +> **CheckpointSummary**: `true` = `null` + +###### PersonalMessage + +> **PersonalMessage**: `true` = `null` + +##### intent.version + +> **version**: `object` = `IntentVersion` + +##### intent.version.$kind + +> **$kind**: `"V0"` + +##### intent.version.V0 + +> **V0**: `true` = `null` + +##### intent.appId + +> **appId**: `object` = `AppId` + +##### intent.appId.$kind + +> **$kind**: `"Iota"` + +##### intent.appId.Iota + +> **Iota**: `true` = `null` + +##### value + +> **value**: `T` *extends* [`BcsType`](../classes/BcsType.md)\<`U`, `any`\> ? `U` : `never` = `T` + +### IntentScope + +> **IntentScope**: [`BcsType`](../classes/BcsType.md)\<`EnumOutputShapeWithKeys`\<`object`, `"TransactionData"` \| `"TransactionEffects"` \| `"CheckpointSummary"` \| `"PersonalMessage"`\>, `EnumInputShape`\<`object`\>\> + +### IntentVersion + +> **IntentVersion**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### $kind + +> **$kind**: `"V0"` + +##### V0 + +> **V0**: `true` = `null` + +### MultiSig + +> **MultiSig**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### sigs + +> **sigs**: `EnumOutputShapeWithKeys`\<`object`, `"ED25519"` \| `"Secp256k1"` \| `"Secp256r1"`\>[] + +##### bitmap + +> **bitmap**: `number` + +##### multisig\_pk + +> **multisig\_pk**: `object` = `MultiSigPublicKey` + +##### multisig\_pk.pk\_map + +> **pk\_map**: `object`[] + +##### multisig\_pk.threshold + +> **threshold**: `number` + +### MultiSigPkMap + +> **MultiSigPkMap**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### pubKey + +> **pubKey**: `EnumOutputShapeWithKeys`\<`object`, `"ED25519"` \| `"Secp256k1"` \| `"Secp256r1"`\> = `PublicKey` + +###### Type declaration + +###### ED25519 + +> **ED25519**: `number`[] + +###### Secp256k1 + +> **Secp256k1**: `number`[] + +###### Secp256r1 + +> **Secp256r1**: `number`[] + +##### weight + +> **weight**: `number` + +### MultiSigPublicKey + +> **MultiSigPublicKey**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### pk\_map + +> **pk\_map**: `object`[] + +##### threshold + +> **threshold**: `number` + +### ObjectArg + +> **ObjectArg**: [`BcsType`](../classes/BcsType.md)\<`EnumOutputShapeWithKeys`\<`object`, `"ImmOrOwnedObject"` \| `"SharedObject"` \| `"Receiving"`\>, `EnumInputShape`\<`object`\>\> + +### ObjectDigest + +> **ObjectDigest**: [`BcsType`](../classes/BcsType.md)\<`string`, `string`\> + +### ProgrammableMoveCall + +> **ProgrammableMoveCall**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### package + +> **package**: `string` = `Address` + +##### module + +> **module**: `string` + +##### function + +> **function**: `string` + +##### typeArguments + +> **typeArguments**: `string`[] + +##### arguments + +> **arguments**: `EnumOutputShapeWithKeys`\<`object`, `"GasCoin"` \| `"Input"` \| `"Result"` \| `"NestedResult"`\>[] + +### ProgrammableTransaction + +> **ProgrammableTransaction**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### inputs + +> **inputs**: `EnumOutputShapeWithKeys`\<`object`, `"Pure"` \| `"Object"`\>[] + +##### commands + +> **commands**: `EnumOutputShapeWithKeys`\<`object`, `"MoveCall"` \| `"TransferObjects"` \| `"SplitCoins"` \| `"MergeCoins"` \| `"Publish"` \| `"MakeMoveVec"` \| `"Upgrade"`\>[] + +### PublicKey + +> **PublicKey**: [`BcsType`](../classes/BcsType.md)\<`EnumOutputShapeWithKeys`\<`object`, `"ED25519"` \| `"Secp256k1"` \| `"Secp256r1"`\>, `EnumInputShape`\<`object`\>\> + +### SenderSignedData + +> **SenderSignedData**: [`BcsType`](../classes/BcsType.md)\<`object`[], `Iterable`\<`object`, `any`, `any`\> & `object`\> + +### SenderSignedTransaction + +> **SenderSignedTransaction**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### intentMessage + +> **intentMessage**: `object` + +##### intentMessage.intent + +> **intent**: `object` = `Intent` + +##### intentMessage.intent.scope + +> **scope**: `EnumOutputShapeWithKeys`\<`object`, `"TransactionData"` \| `"TransactionEffects"` \| `"CheckpointSummary"` \| `"PersonalMessage"`\> = `IntentScope` + +###### Type declaration + +###### TransactionData + +> **TransactionData**: `true` = `null` + +###### TransactionEffects + +> **TransactionEffects**: `true` = `null` + +###### CheckpointSummary + +> **CheckpointSummary**: `true` = `null` + +###### PersonalMessage + +> **PersonalMessage**: `true` = `null` + +##### intentMessage.intent.version + +> **version**: `object` = `IntentVersion` + +##### intentMessage.intent.version.$kind + +> **$kind**: `"V0"` + +##### intentMessage.intent.version.V0 + +> **V0**: `true` = `null` + +##### intentMessage.intent.appId + +> **appId**: `object` = `AppId` + +##### intentMessage.intent.appId.$kind + +> **$kind**: `"Iota"` + +##### intentMessage.intent.appId.Iota + +> **Iota**: `true` = `null` + +##### intentMessage.value + +> **value**: `object` = `T` + +##### intentMessage.value.$kind + +> **$kind**: `"V1"` + +##### intentMessage.value.V1 + +> **V1**: `object` = `TransactionDataV1` + +##### intentMessage.value.V1.kind + +> **kind**: `EnumOutputShapeWithKeys`\<`object`, `"ProgrammableTransaction"` \| `"ChangeEpoch"` \| `"Genesis"` \| `"ConsensusCommitPrologue"`\> = `TransactionKind` + +###### Type declaration + +###### ProgrammableTransaction + +> **ProgrammableTransaction**: `object` + +###### ProgrammableTransaction.inputs + +> **inputs**: `EnumOutputShapeWithKeys`\<..., ...\>[] + +###### ProgrammableTransaction.commands + +> **commands**: `EnumOutputShapeWithKeys`\<..., ...\>[] + +###### ChangeEpoch + +> **ChangeEpoch**: `true` = `null` + +###### Genesis + +> **Genesis**: `true` = `null` + +###### ConsensusCommitPrologue + +> **ConsensusCommitPrologue**: `true` = `null` + +##### intentMessage.value.V1.sender + +> **sender**: `string` = `Address` + +##### intentMessage.value.V1.gasData + +> **gasData**: `object` = `GasData` + +##### intentMessage.value.V1.gasData.payment + +> **payment**: `object`[] + +##### intentMessage.value.V1.gasData.owner + +> **owner**: `string` = `Address` + +##### intentMessage.value.V1.gasData.price + +> **price**: `string` + +##### intentMessage.value.V1.gasData.budget + +> **budget**: `string` + +##### intentMessage.value.V1.expiration + +> **expiration**: `EnumOutputShapeWithKeys`\<`object`, `"None"` \| `"Epoch"`\> = `TransactionExpiration` + +###### Type declaration + +###### None + +> **None**: `true` = `null` + +###### Epoch + +> **Epoch**: `number` + +##### txSignatures + +> **txSignatures**: `string`[] + +### SharedObjectRef + +> **SharedObjectRef**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### objectId + +> **objectId**: `string` = `Address` + +##### initialSharedVersion + +> **initialSharedVersion**: `string` + +##### mutable + +> **mutable**: `boolean` + +### StructTag + +> **StructTag**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### address + +> **address**: `string` = `Address` + +##### module + +> **module**: `string` + +##### name + +> **name**: `string` + +##### typeParams + +> **typeParams**: [`TypeTag`](../type-aliases/TypeTag.md)[] + +### IotaObjectRef + +> **IotaObjectRef**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### objectId + +> **objectId**: `string` = `Address` + +##### version + +> **version**: `string` + +##### digest + +> **digest**: `string` = `ObjectDigest` + +### Command + +> **Command**: [`BcsType`](../classes/BcsType.md)\<`EnumOutputShapeWithKeys`\<`object`, `"MoveCall"` \| `"TransferObjects"` \| `"SplitCoins"` \| `"MergeCoins"` \| `"Publish"` \| `"MakeMoveVec"` \| `"Upgrade"`\>, `EnumInputShape`\<`object`\>\> + +### TransactionData + +> **TransactionData**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### $kind + +> **$kind**: `"V1"` + +##### V1 + +> **V1**: `object` = `TransactionDataV1` + +##### V1.kind + +> **kind**: `EnumOutputShapeWithKeys`\<`object`, `"ProgrammableTransaction"` \| `"ChangeEpoch"` \| `"Genesis"` \| `"ConsensusCommitPrologue"`\> = `TransactionKind` + +###### Type declaration + +###### ProgrammableTransaction + +> **ProgrammableTransaction**: `object` + +###### ProgrammableTransaction.inputs + +> **inputs**: `EnumOutputShapeWithKeys`\<`object`, `"Pure"` \| `"Object"`\>[] + +###### ProgrammableTransaction.commands + +> **commands**: `EnumOutputShapeWithKeys`\<`object`, `"MoveCall"` \| `"TransferObjects"` \| `"SplitCoins"` \| `"MergeCoins"` \| `"Publish"` \| `"MakeMoveVec"` \| `"Upgrade"`\>[] + +###### ChangeEpoch + +> **ChangeEpoch**: `true` = `null` + +###### Genesis + +> **Genesis**: `true` = `null` + +###### ConsensusCommitPrologue + +> **ConsensusCommitPrologue**: `true` = `null` + +##### V1.sender + +> **sender**: `string` = `Address` + +##### V1.gasData + +> **gasData**: `object` = `GasData` + +##### V1.gasData.payment + +> **payment**: `object`[] + +##### V1.gasData.owner + +> **owner**: `string` = `Address` + +##### V1.gasData.price + +> **price**: `string` + +##### V1.gasData.budget + +> **budget**: `string` + +##### V1.expiration + +> **expiration**: `EnumOutputShapeWithKeys`\<`object`, `"None"` \| `"Epoch"`\> = `TransactionExpiration` + +###### Type declaration + +###### None + +> **None**: `true` = `null` + +###### Epoch + +> **Epoch**: `number` + +### TransactionDataV1 + +> **TransactionDataV1**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### kind + +> **kind**: `EnumOutputShapeWithKeys`\<`object`, `"ProgrammableTransaction"` \| `"ChangeEpoch"` \| `"Genesis"` \| `"ConsensusCommitPrologue"`\> = `TransactionKind` + +###### Type declaration + +###### ProgrammableTransaction + +> **ProgrammableTransaction**: `object` + +###### ProgrammableTransaction.inputs + +> **inputs**: `EnumOutputShapeWithKeys`\<`object`, `"Pure"` \| `"Object"`\>[] + +###### ProgrammableTransaction.commands + +> **commands**: `EnumOutputShapeWithKeys`\<`object`, `"MoveCall"` \| `"TransferObjects"` \| `"SplitCoins"` \| `"MergeCoins"` \| `"Publish"` \| `"MakeMoveVec"` \| `"Upgrade"`\>[] + +###### ChangeEpoch + +> **ChangeEpoch**: `true` = `null` + +###### Genesis + +> **Genesis**: `true` = `null` + +###### ConsensusCommitPrologue + +> **ConsensusCommitPrologue**: `true` = `null` + +##### sender + +> **sender**: `string` = `Address` + +##### gasData + +> **gasData**: `object` = `GasData` + +##### gasData.payment + +> **payment**: `object`[] + +##### gasData.owner + +> **owner**: `string` = `Address` + +##### gasData.price + +> **price**: `string` + +##### gasData.budget + +> **budget**: `string` + +##### expiration + +> **expiration**: `EnumOutputShapeWithKeys`\<`object`, `"None"` \| `"Epoch"`\> = `TransactionExpiration` + +###### Type declaration + +###### None + +> **None**: `true` = `null` + +###### Epoch + +> **Epoch**: `number` + +### TransactionExpiration + +> **TransactionExpiration**: [`BcsType`](../classes/BcsType.md)\<`EnumOutputShapeWithKeys`\<`object`, `"None"` \| `"Epoch"`\>, `EnumInputShape`\<`object`\>\> + +### TransactionKind + +> **TransactionKind**: [`BcsType`](../classes/BcsType.md)\<`EnumOutputShapeWithKeys`\<`object`, `"ProgrammableTransaction"` \| `"ChangeEpoch"` \| `"Genesis"` \| `"ConsensusCommitPrologue"`\>, `EnumInputShape`\<`object`\>\> + +### TypeTag + +> **TypeTag**: [`BcsType`](../classes/BcsType.md)\<`string`, `string` \| [`TypeTag`](../type-aliases/TypeTag.md)\> + +### TransactionEffects + +> **TransactionEffects**: [`BcsType`](../classes/BcsType.md)\<`object`, `object`\> + +#### Type declaration + +##### $kind + +> **$kind**: `"V1"` + +##### V1 + +> **V1**: `object` = `TransactionEffectsV1` + +##### V1.status + +> **status**: `EnumOutputShapeWithKeys`\<`object`, `"Success"` \| `"Failed"`\> = `ExecutionStatus` + +###### Type declaration + +###### Success + +> **Success**: `true` = `null` + +###### Failed + +> **Failed**: `object` + +###### Failed.error + +> **error**: `EnumOutputShapeWithKeys`\<`object`, `"PackageUpgradeError"` \| `"SharedObjectOperationNotAllowed"` \| `"CommandArgumentError"` \| `"TypeArgumentError"` \| `"InsufficientGas"` \| `"InvalidGasObject"` \| `"InvariantViolation"` \| `"FeatureNotYetSupported"` \| `"MoveObjectTooBig"` \| `"MovePackageTooBig"` \| `"CircularObjectOwnership"` \| `"InsufficientCoinBalance"` \| `"CoinBalanceOverflow"` \| `"PublishErrorNonZeroAddress"` \| `"IotaMoveVerificationError"` \| `"MovePrimitiveRuntimeError"` \| `"MoveAbort"` \| `"VMVerificationOrDeserializationError"` \| `"VMInvariantViolation"` \| `"FunctionNotFound"` \| `"ArityMismatch"` \| `"TypeArityMismatch"` \| `"NonEntryFunctionInvoked"` \| `"UnusedValueWithoutDrop"` \| `"InvalidPublicFunctionReturnType"` \| `"InvalidTransferObject"` \| `"EffectsTooLarge"` \| `"PublishUpgradeMissingDependency"` \| `"PublishUpgradeDependencyDowngrade"` \| `"WrittenObjectsTooLarge"` \| `"CertificateDenied"` \| `"IotaMoveVerificationTimedout"` \| `"InputObjectDeleted"`\> = `ExecutionFailureStatus` + +###### Type declaration + +###### InsufficientGas + +> **InsufficientGas**: `true` = `null` + +###### InvalidGasObject + +> **InvalidGasObject**: `true` = `null` + +###### InvariantViolation + +> **InvariantViolation**: `true` = `null` + +###### FeatureNotYetSupported + +> **FeatureNotYetSupported**: `true` = `null` + +###### MoveObjectTooBig + +> **MoveObjectTooBig**: `object` + +###### MoveObjectTooBig.objectSize + +> **objectSize**: `string` + +###### MoveObjectTooBig.maxObjectSize + +> **maxObjectSize**: `string` + +###### MovePackageTooBig + +> **MovePackageTooBig**: `object` + +###### MovePackageTooBig.objectSize + +> **objectSize**: `string` + +###### MovePackageTooBig.maxObjectSize + +> **maxObjectSize**: `string` + +###### CircularObjectOwnership + +> **CircularObjectOwnership**: `object` + +###### CircularObjectOwnership.object + +> **object**: `string` = `Address` + +###### InsufficientCoinBalance + +> **InsufficientCoinBalance**: `true` = `null` + +###### CoinBalanceOverflow + +> **CoinBalanceOverflow**: `true` = `null` + +###### PublishErrorNonZeroAddress + +> **PublishErrorNonZeroAddress**: `true` = `null` + +###### IotaMoveVerificationError + +> **IotaMoveVerificationError**: `true` = `null` + +###### MovePrimitiveRuntimeError + +> **MovePrimitiveRuntimeError**: `null` \| `object` + +###### MoveAbort + +> **MoveAbort**: [`object`, `string`] + +###### VMVerificationOrDeserializationError + +> **VMVerificationOrDeserializationError**: `true` = `null` + +###### VMInvariantViolation + +> **VMInvariantViolation**: `true` = `null` + +###### FunctionNotFound + +> **FunctionNotFound**: `true` = `null` + +###### ArityMismatch + +> **ArityMismatch**: `true` = `null` + +###### TypeArityMismatch + +> **TypeArityMismatch**: `true` = `null` + +###### NonEntryFunctionInvoked + +> **NonEntryFunctionInvoked**: `true` = `null` + +###### CommandArgumentError + +> **CommandArgumentError**: `object` + +###### CommandArgumentError.argIdx + +> **argIdx**: `number` + +###### CommandArgumentError.kind + +> **kind**: `EnumOutputShapeWithKeys`\<..., ...\> = `CommandArgumentError` + +###### TypeArgumentError + +> **TypeArgumentError**: `object` + +###### TypeArgumentError.argumentIdx + +> **argumentIdx**: `number` + +###### TypeArgumentError.kind + +> **kind**: `EnumOutputShapeWithKeys`\<..., ...\> = `TypeArgumentError` + +###### UnusedValueWithoutDrop + +> **UnusedValueWithoutDrop**: `object` + +###### UnusedValueWithoutDrop.resultIdx + +> **resultIdx**: `number` + +###### UnusedValueWithoutDrop.secondaryIdx + +> **secondaryIdx**: `number` + +###### InvalidPublicFunctionReturnType + +> **InvalidPublicFunctionReturnType**: `object` + +###### InvalidPublicFunctionReturnType.idx + +> **idx**: `number` + +###### InvalidTransferObject + +> **InvalidTransferObject**: `true` = `null` + +###### EffectsTooLarge + +> **EffectsTooLarge**: `object` + +###### EffectsTooLarge.currentSize + +> **currentSize**: `string` + +###### EffectsTooLarge.maxSize + +> **maxSize**: `string` + +###### PublishUpgradeMissingDependency + +> **PublishUpgradeMissingDependency**: `true` = `null` + +###### PublishUpgradeDependencyDowngrade + +> **PublishUpgradeDependencyDowngrade**: `true` = `null` + +###### PackageUpgradeError + +> **PackageUpgradeError**: `object` + +###### PackageUpgradeError.upgradeError + +> **upgradeError**: `EnumOutputShapeWithKeys`\<..., ...\> = `PackageUpgradeError` + +###### WrittenObjectsTooLarge + +> **WrittenObjectsTooLarge**: `object` + +###### WrittenObjectsTooLarge.currentSize + +> **currentSize**: `string` + +###### WrittenObjectsTooLarge.maxSize + +> **maxSize**: `string` + +###### CertificateDenied + +> **CertificateDenied**: `true` = `null` + +###### IotaMoveVerificationTimedout + +> **IotaMoveVerificationTimedout**: `true` = `null` + +###### SharedObjectOperationNotAllowed + +> **SharedObjectOperationNotAllowed**: `true` = `null` + +###### InputObjectDeleted + +> **InputObjectDeleted**: `true` = `null` + +###### Failed.command + +> **command**: `null` \| `string` + +##### V1.executedEpoch + +> **executedEpoch**: `string` + +##### V1.gasUsed + +> **gasUsed**: `object` = `GasCostSummary` + +##### V1.gasUsed.computationCost + +> **computationCost**: `string` + +##### V1.gasUsed.computationCostBurned + +> **computationCostBurned**: `string` + +##### V1.gasUsed.storageCost + +> **storageCost**: `string` + +##### V1.gasUsed.storageRebate + +> **storageRebate**: `string` + +##### V1.gasUsed.nonRefundableStorageFee + +> **nonRefundableStorageFee**: `string` + +##### V1.transactionDigest + +> **transactionDigest**: `string` = `ObjectDigest` + +##### V1.gasObjectIndex + +> **gasObjectIndex**: `null` \| `number` + +##### V1.eventsDigest + +> **eventsDigest**: `null` \| `string` + +##### V1.dependencies + +> **dependencies**: `string`[] + +##### V1.lamportVersion + +> **lamportVersion**: `string` + +##### V1.changedObjects + +> **changedObjects**: [`string`, `object`][] + +##### V1.unchangedSharedObjects + +> **unchangedSharedObjects**: [`string`, `EnumOutputShapeWithKeys`\<`object`, `"ReadOnlyRoot"` \| `"MutateDeleted"` \| `"ReadDeleted"` \| `"Cancelled"` \| `"PerEpochConfig"`\>][] + +##### V1.auxDataDigest + +> **auxDataDigest**: `null` \| `string` diff --git a/docs/content/ts-sdk/api/client/classes/IotaClient.md b/docs/content/ts-sdk/api/client/classes/IotaClient.md new file mode 100644 index 00000000000..425805fb701 --- /dev/null +++ b/docs/content/ts-sdk/api/client/classes/IotaClient.md @@ -0,0 +1,817 @@ +# Class: IotaClient + +## Constructors + +### new IotaClient() + +> **new IotaClient**(`options`): [`IotaClient`](IotaClient.md) + +Establish a connection to a IOTA RPC endpoint + +#### Parameters + +• **options**: `NetworkOrTransport` + +configuration options for the API Client + +#### Returns + +[`IotaClient`](IotaClient.md) + +## Properties + +### transport + +> `protected` **transport**: [`IotaTransport`](../interfaces/IotaTransport.md) + +## Methods + +### getRpcApiVersion() + +> **getRpcApiVersion**(): `Promise`\<`undefined` \| `string`\> + +#### Returns + +`Promise`\<`undefined` \| `string`\> + +*** + +### getCoins() + +> **getCoins**(`input`): `Promise`\<[`PaginatedCoins`](../interfaces/PaginatedCoins.md)\> + +Get all Coin<`coin_type`> objects owned by an address. + +#### Parameters + +• **input**: [`GetCoinsParams`](../interfaces/GetCoinsParams.md) + +#### Returns + +`Promise`\<[`PaginatedCoins`](../interfaces/PaginatedCoins.md)\> + +*** + +### getAllCoins() + +> **getAllCoins**(`input`): `Promise`\<[`PaginatedCoins`](../interfaces/PaginatedCoins.md)\> + +Get all Coin objects owned by an address. + +#### Parameters + +• **input**: [`GetAllCoinsParams`](../interfaces/GetAllCoinsParams.md) + +#### Returns + +`Promise`\<[`PaginatedCoins`](../interfaces/PaginatedCoins.md)\> + +*** + +### getBalance() + +> **getBalance**(`input`): `Promise`\<[`CoinBalance`](../type-aliases/CoinBalance.md)\> + +Get the total coin balance for one coin type, owned by the address owner. + +#### Parameters + +• **input**: [`GetBalanceParams`](../interfaces/GetBalanceParams.md) + +#### Returns + +`Promise`\<[`CoinBalance`](../type-aliases/CoinBalance.md)\> + +*** + +### getAllBalances() + +> **getAllBalances**(`input`): `Promise`\<[`CoinBalance`](../type-aliases/CoinBalance.md)[]\> + +Get the total coin balance for all coin types, owned by the address owner. + +#### Parameters + +• **input**: [`GetAllBalancesParams`](../interfaces/GetAllBalancesParams.md) + +#### Returns + +`Promise`\<[`CoinBalance`](../type-aliases/CoinBalance.md)[]\> + +*** + +### getCoinMetadata() + +> **getCoinMetadata**(`input`): `Promise`\<`null` \| [`CoinMetadata`](../interfaces/CoinMetadata.md)\> + +Fetch CoinMetadata for a given coin type + +#### Parameters + +• **input**: [`GetCoinMetadataParams`](../interfaces/GetCoinMetadataParams.md) + +#### Returns + +`Promise`\<`null` \| [`CoinMetadata`](../interfaces/CoinMetadata.md)\> + +*** + +### getTotalSupply() + +> **getTotalSupply**(`input`): `Promise`\<[`CoinSupply`](../interfaces/CoinSupply.md)\> + +Fetch total supply for a coin + +#### Parameters + +• **input**: [`GetTotalSupplyParams`](../interfaces/GetTotalSupplyParams.md) + +#### Returns + +`Promise`\<[`CoinSupply`](../interfaces/CoinSupply.md)\> + +*** + +### call() + +> **call**\<`T`\>(`method`, `params`): `Promise`\<`T`\> + +Invoke any RPC method + +#### Type Parameters + +• **T** = `unknown` + +#### Parameters + +• **method**: `string` + +the method to be invoked + +• **params**: `unknown`[] + +#### Returns + +`Promise`\<`T`\> + +*** + +### getMoveFunctionArgTypes() + +> **getMoveFunctionArgTypes**(`input`): `Promise`\<[`IotaMoveFunctionArgType`](../type-aliases/IotaMoveFunctionArgType.md)[]\> + +Get Move function argument types like read, write and full access + +#### Parameters + +• **input**: [`GetMoveFunctionArgTypesParams`](../interfaces/GetMoveFunctionArgTypesParams.md) + +#### Returns + +`Promise`\<[`IotaMoveFunctionArgType`](../type-aliases/IotaMoveFunctionArgType.md)[]\> + +*** + +### getNormalizedMoveModulesByPackage() + +> **getNormalizedMoveModulesByPackage**(`input`): `Promise`\<[`IotaMoveNormalizedModules`](../type-aliases/IotaMoveNormalizedModules.md)\> + +Get a map from module name to +structured representations of Move modules + +#### Parameters + +• **input**: [`GetNormalizedMoveModulesByPackageParams`](../interfaces/GetNormalizedMoveModulesByPackageParams.md) + +#### Returns + +`Promise`\<[`IotaMoveNormalizedModules`](../type-aliases/IotaMoveNormalizedModules.md)\> + +*** + +### getNormalizedMoveModule() + +> **getNormalizedMoveModule**(`input`): `Promise`\<[`IotaMoveNormalizedModule`](../interfaces/IotaMoveNormalizedModule.md)\> + +Get a structured representation of Move module + +#### Parameters + +• **input**: [`GetNormalizedMoveModuleParams`](../interfaces/GetNormalizedMoveModuleParams.md) + +#### Returns + +`Promise`\<[`IotaMoveNormalizedModule`](../interfaces/IotaMoveNormalizedModule.md)\> + +*** + +### getNormalizedMoveFunction() + +> **getNormalizedMoveFunction**(`input`): `Promise`\<[`IotaMoveNormalizedFunction`](../interfaces/IotaMoveNormalizedFunction.md)\> + +Get a structured representation of Move function + +#### Parameters + +• **input**: [`GetNormalizedMoveFunctionParams`](../interfaces/GetNormalizedMoveFunctionParams.md) + +#### Returns + +`Promise`\<[`IotaMoveNormalizedFunction`](../interfaces/IotaMoveNormalizedFunction.md)\> + +*** + +### getNormalizedMoveStruct() + +> **getNormalizedMoveStruct**(`input`): `Promise`\<[`IotaMoveNormalizedStruct`](../interfaces/IotaMoveNormalizedStruct.md)\> + +Get a structured representation of Move struct + +#### Parameters + +• **input**: [`GetNormalizedMoveStructParams`](../interfaces/GetNormalizedMoveStructParams.md) + +#### Returns + +`Promise`\<[`IotaMoveNormalizedStruct`](../interfaces/IotaMoveNormalizedStruct.md)\> + +*** + +### getOwnedObjects() + +> **getOwnedObjects**(`input`): `Promise`\<[`PaginatedObjectsResponse`](../interfaces/PaginatedObjectsResponse.md)\> + +Get all objects owned by an address + +#### Parameters + +• **input**: [`GetOwnedObjectsParams`](../type-aliases/GetOwnedObjectsParams.md) + +#### Returns + +`Promise`\<[`PaginatedObjectsResponse`](../interfaces/PaginatedObjectsResponse.md)\> + +*** + +### getObject() + +> **getObject**(`input`): `Promise`\<[`IotaObjectResponse`](../interfaces/IotaObjectResponse.md)\> + +Get details about an object + +#### Parameters + +• **input**: [`GetObjectParams`](../interfaces/GetObjectParams.md) + +#### Returns + +`Promise`\<[`IotaObjectResponse`](../interfaces/IotaObjectResponse.md)\> + +*** + +### tryGetPastObject() + +> **tryGetPastObject**(`input`): `Promise`\<[`ObjectRead`](../type-aliases/ObjectRead.md)\> + +#### Parameters + +• **input**: [`TryGetPastObjectParams`](../interfaces/TryGetPastObjectParams.md) + +#### Returns + +`Promise`\<[`ObjectRead`](../type-aliases/ObjectRead.md)\> + +*** + +### multiGetObjects() + +> **multiGetObjects**(`input`): `Promise`\<[`IotaObjectResponse`](../interfaces/IotaObjectResponse.md)[]\> + +Batch get details about a list of objects. If any of the object ids are duplicates the call will fail + +#### Parameters + +• **input**: [`MultiGetObjectsParams`](../interfaces/MultiGetObjectsParams.md) + +#### Returns + +`Promise`\<[`IotaObjectResponse`](../interfaces/IotaObjectResponse.md)[]\> + +*** + +### queryTransactionBlocks() + +> **queryTransactionBlocks**(`input`): `Promise`\<[`PaginatedTransactionResponse`](../interfaces/PaginatedTransactionResponse.md)\> + +Get transaction blocks for a given query criteria + +#### Parameters + +• **input**: [`QueryTransactionBlocksParams`](../type-aliases/QueryTransactionBlocksParams.md) + +#### Returns + +`Promise`\<[`PaginatedTransactionResponse`](../interfaces/PaginatedTransactionResponse.md)\> + +*** + +### getTransactionBlock() + +> **getTransactionBlock**(`input`): `Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> + +#### Parameters + +• **input**: [`GetTransactionBlockParams`](../interfaces/GetTransactionBlockParams.md) + +#### Returns + +`Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> + +*** + +### multiGetTransactionBlocks() + +> **multiGetTransactionBlocks**(`input`): `Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)[]\> + +#### Parameters + +• **input**: [`MultiGetTransactionBlocksParams`](../interfaces/MultiGetTransactionBlocksParams.md) + +#### Returns + +`Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)[]\> + +*** + +### executeTransactionBlock() + +> **executeTransactionBlock**(`__namedParameters`): `Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> + +#### Parameters + +• **\_\_namedParameters**: [`ExecuteTransactionBlockParams`](../interfaces/ExecuteTransactionBlockParams.md) + +#### Returns + +`Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> + +*** + +### signAndExecuteTransaction() + +> **signAndExecuteTransaction**(`__namedParameters`): `Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> + +#### Parameters + +• **\_\_namedParameters**: `object` & `Omit`\<[`ExecuteTransactionBlockParams`](../interfaces/ExecuteTransactionBlockParams.md), `"signature"` \| `"transactionBlock"`\> + +#### Returns + +`Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> + +*** + +### getTotalTransactionBlocks() + +> **getTotalTransactionBlocks**(): `Promise`\<`bigint`\> + +Get total number of transactions + +#### Returns + +`Promise`\<`bigint`\> + +*** + +### getReferenceGasPrice() + +> **getReferenceGasPrice**(): `Promise`\<`bigint`\> + +Getting the reference gas price for the network + +#### Returns + +`Promise`\<`bigint`\> + +*** + +### getStakes() + +> **getStakes**(`input`): `Promise`\<[`DelegatedStake`](../interfaces/DelegatedStake.md)[]\> + +Return the delegated stakes for an address + +#### Parameters + +• **input**: [`GetStakesParams`](../interfaces/GetStakesParams.md) + +#### Returns + +`Promise`\<[`DelegatedStake`](../interfaces/DelegatedStake.md)[]\> + +*** + +### getTimelockedStakes() + +> **getTimelockedStakes**(`input`): `Promise`\<[`DelegatedTimelockedStake`](../interfaces/DelegatedTimelockedStake.md)[]\> + +Return the timelocked delegated stakes for an address + +#### Parameters + +• **input**: [`GetTimelockedStakesParams`](../interfaces/GetTimelockedStakesParams.md) + +#### Returns + +`Promise`\<[`DelegatedTimelockedStake`](../interfaces/DelegatedTimelockedStake.md)[]\> + +*** + +### getStakesByIds() + +> **getStakesByIds**(`input`): `Promise`\<[`DelegatedStake`](../interfaces/DelegatedStake.md)[]\> + +Return the delegated stakes queried by id. + +#### Parameters + +• **input**: [`GetStakesByIdsParams`](../interfaces/GetStakesByIdsParams.md) + +#### Returns + +`Promise`\<[`DelegatedStake`](../interfaces/DelegatedStake.md)[]\> + +*** + +### getTimelockedStakesByIds() + +> **getTimelockedStakesByIds**(`input`): `Promise`\<[`DelegatedTimelockedStake`](../interfaces/DelegatedTimelockedStake.md)[]\> + +Return the timelocked delegated stakes queried by id. + +#### Parameters + +• **input**: [`GetTimelockedStakesByIdsParams`](../interfaces/GetTimelockedStakesByIdsParams.md) + +#### Returns + +`Promise`\<[`DelegatedTimelockedStake`](../interfaces/DelegatedTimelockedStake.md)[]\> + +*** + +### getLatestIotaSystemState() + +> **getLatestIotaSystemState**(): `Promise`\<[`IotaSystemStateSummary`](../interfaces/IotaSystemStateSummary.md)\> + +Return the latest system state content. + +#### Returns + +`Promise`\<[`IotaSystemStateSummary`](../interfaces/IotaSystemStateSummary.md)\> + +*** + +### queryEvents() + +> **queryEvents**(`input`): `Promise`\<[`PaginatedEvents`](../interfaces/PaginatedEvents.md)\> + +Get events for a given query criteria + +#### Parameters + +• **input**: [`QueryEventsParams`](../interfaces/QueryEventsParams.md) + +#### Returns + +`Promise`\<[`PaginatedEvents`](../interfaces/PaginatedEvents.md)\> + +*** + +### ~~subscribeEvent()~~ + +> **subscribeEvent**(`input`): `Promise`\<[`Unsubscribe`](../type-aliases/Unsubscribe.md)\> + +Subscribe to get notifications whenever an event matching the filter occurs + +#### Parameters + +• **input**: [`SubscribeEventParams`](../interfaces/SubscribeEventParams.md) & `object` + +#### Returns + +`Promise`\<[`Unsubscribe`](../type-aliases/Unsubscribe.md)\> + +#### Deprecated + +*** + +### ~~subscribeTransaction()~~ + +> **subscribeTransaction**(`input`): `Promise`\<[`Unsubscribe`](../type-aliases/Unsubscribe.md)\> + +#### Parameters + +• **input**: [`SubscribeTransactionParams`](../interfaces/SubscribeTransactionParams.md) & `object` + +#### Returns + +`Promise`\<[`Unsubscribe`](../type-aliases/Unsubscribe.md)\> + +#### Deprecated + +*** + +### devInspectTransactionBlock() + +> **devInspectTransactionBlock**(`input`): `Promise`\<[`DevInspectResults`](../interfaces/DevInspectResults.md)\> + +Runs the transaction block in dev-inspect mode. Which allows for nearly any +transaction (or Move call) with any arguments. Detailed results are +provided, including both the transaction effects and any return values. + +#### Parameters + +• **input**: [`DevInspectTransactionBlockParams`](../interfaces/DevInspectTransactionBlockParams.md) + +#### Returns + +`Promise`\<[`DevInspectResults`](../interfaces/DevInspectResults.md)\> + +*** + +### dryRunTransactionBlock() + +> **dryRunTransactionBlock**(`input`): `Promise`\<[`DryRunTransactionBlockResponse`](../interfaces/DryRunTransactionBlockResponse.md)\> + +Dry run a transaction block and return the result. + +#### Parameters + +• **input**: [`DryRunTransactionBlockParams`](../interfaces/DryRunTransactionBlockParams.md) + +#### Returns + +`Promise`\<[`DryRunTransactionBlockResponse`](../interfaces/DryRunTransactionBlockResponse.md)\> + +*** + +### getDynamicFields() + +> **getDynamicFields**(`input`): `Promise`\<[`DynamicFieldPage`](../type-aliases/DynamicFieldPage.md)\> + +Return the list of dynamic field objects owned by an object + +#### Parameters + +• **input**: [`GetDynamicFieldsParams`](../interfaces/GetDynamicFieldsParams.md) + +#### Returns + +`Promise`\<[`DynamicFieldPage`](../type-aliases/DynamicFieldPage.md)\> + +*** + +### getDynamicFieldObject() + +> **getDynamicFieldObject**(`input`): `Promise`\<[`IotaObjectResponse`](../interfaces/IotaObjectResponse.md)\> + +Return the dynamic field object information for a specified object + +#### Parameters + +• **input**: [`GetDynamicFieldObjectParams`](../interfaces/GetDynamicFieldObjectParams.md) + +#### Returns + +`Promise`\<[`IotaObjectResponse`](../interfaces/IotaObjectResponse.md)\> + +*** + +### getLatestCheckpointSequenceNumber() + +> **getLatestCheckpointSequenceNumber**(): `Promise`\<`string`\> + +Get the sequence number of the latest checkpoint that has been executed + +#### Returns + +`Promise`\<`string`\> + +*** + +### getCheckpoint() + +> **getCheckpoint**(`input`): `Promise`\<[`Checkpoint`](../interfaces/Checkpoint.md)\> + +Returns information about a given checkpoint + +#### Parameters + +• **input**: [`GetCheckpointParams`](../interfaces/GetCheckpointParams.md) + +#### Returns + +`Promise`\<[`Checkpoint`](../interfaces/Checkpoint.md)\> + +*** + +### getCheckpoints() + +> **getCheckpoints**(`input`): `Promise`\<[`CheckpointPage`](../type-aliases/CheckpointPage.md)\> + +Returns historical checkpoints paginated + +#### Parameters + +• **input**: [`PaginationArguments`](../interfaces/PaginationArguments.md)\<`null` \| `string`\> & [`GetCheckpointsParams`](../interfaces/GetCheckpointsParams.md) + +#### Returns + +`Promise`\<[`CheckpointPage`](../type-aliases/CheckpointPage.md)\> + +*** + +### getCommitteeInfo() + +> **getCommitteeInfo**(`input`?): `Promise`\<[`CommitteeInfo`](../interfaces/CommitteeInfo.md)\> + +Return the committee information for the asked epoch + +#### Parameters + +• **input?**: [`GetCommitteeInfoParams`](../interfaces/GetCommitteeInfoParams.md) + +#### Returns + +`Promise`\<[`CommitteeInfo`](../interfaces/CommitteeInfo.md)\> + +*** + +### getNetworkMetrics() + +> **getNetworkMetrics**(): `Promise`\<[`NetworkMetrics`](../interfaces/NetworkMetrics.md)\> + +#### Returns + +`Promise`\<[`NetworkMetrics`](../interfaces/NetworkMetrics.md)\> + +*** + +### getAddressMetrics() + +> **getAddressMetrics**(): `Promise`\<[`AddressMetrics`](../interfaces/AddressMetrics.md)\> + +#### Returns + +`Promise`\<[`AddressMetrics`](../interfaces/AddressMetrics.md)\> + +*** + +### getEpochMetrics() + +> **getEpochMetrics**(`input`?): `Promise`\<[`EpochMetricsPage`](../type-aliases/EpochMetricsPage.md)\> + +#### Parameters + +• **input?**: `object` & [`PaginationArguments`](../interfaces/PaginationArguments.md)\<`null` \| `string`\> + +#### Returns + +`Promise`\<[`EpochMetricsPage`](../type-aliases/EpochMetricsPage.md)\> + +*** + +### getAllEpochAddressMetrics() + +> **getAllEpochAddressMetrics**(`input`?): `Promise`\<[`AllEpochsAddressMetrics`](../type-aliases/AllEpochsAddressMetrics.md)\> + +#### Parameters + +• **input?** + +• **input.descendingOrder?**: `boolean` + +#### Returns + +`Promise`\<[`AllEpochsAddressMetrics`](../type-aliases/AllEpochsAddressMetrics.md)\> + +*** + +### getCheckpointAddressMetrics() + +> **getCheckpointAddressMetrics**(`input`?): `Promise`\<[`AddressMetrics`](../interfaces/AddressMetrics.md)\> + +#### Parameters + +• **input?** + +• **input.checkpoint?**: `string` + +#### Returns + +`Promise`\<[`AddressMetrics`](../interfaces/AddressMetrics.md)\> + +*** + +### getEpochs() + +> **getEpochs**(`input`?): `Promise`\<[`EpochPage`](../type-aliases/EpochPage.md)\> + +Return the committee information for the asked epoch + +#### Parameters + +• **input?**: `object` & [`PaginationArguments`](../interfaces/PaginationArguments.md)\<`null` \| `string`\> + +#### Returns + +`Promise`\<[`EpochPage`](../type-aliases/EpochPage.md)\> + +*** + +### getMoveCallMetrics() + +> **getMoveCallMetrics**(): `Promise`\<[`MoveCallMetrics`](../interfaces/MoveCallMetrics.md)\> + +Returns list of top move calls by usage + +#### Returns + +`Promise`\<[`MoveCallMetrics`](../interfaces/MoveCallMetrics.md)\> + +*** + +### getCurrentEpoch() + +> **getCurrentEpoch**(): `Promise`\<[`EpochInfo`](../interfaces/EpochInfo.md)\> + +Return the committee information for the asked epoch + +#### Returns + +`Promise`\<[`EpochInfo`](../interfaces/EpochInfo.md)\> + +*** + +### getTotalTransactions() + +> **getTotalTransactions**(): `Promise`\<`string`\> + +#### Returns + +`Promise`\<`string`\> + +*** + +### getValidatorsApy() + +> **getValidatorsApy**(): `Promise`\<[`ValidatorsApy`](../interfaces/ValidatorsApy.md)\> + +Return the Validators APYs + +#### Returns + +`Promise`\<[`ValidatorsApy`](../interfaces/ValidatorsApy.md)\> + +*** + +### getChainIdentifier() + +> **getChainIdentifier**(): `Promise`\<`string`\> + +#### Returns + +`Promise`\<`string`\> + +*** + +### getProtocolConfig() + +> **getProtocolConfig**(`input`?): `Promise`\<[`ProtocolConfig`](../interfaces/ProtocolConfig.md)\> + +#### Parameters + +• **input?**: [`GetProtocolConfigParams`](../interfaces/GetProtocolConfigParams.md) + +#### Returns + +`Promise`\<[`ProtocolConfig`](../interfaces/ProtocolConfig.md)\> + +*** + +### waitForTransaction() + +> **waitForTransaction**(`__namedParameters`): `Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> + +Wait for a transaction block result to be available over the API. +This can be used in conjunction with `executeTransactionBlock` to wait for the transaction to +be available via the API. +This currently polls the `getTransactionBlock` API to check for the transaction. + +#### Parameters + +• **\_\_namedParameters**: `object` & [`GetTransactionBlockParams`](../interfaces/GetTransactionBlockParams.md) + +#### Returns + +`Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> diff --git a/docs/content/ts-sdk/api/client/classes/IotaHTTPStatusError.md b/docs/content/ts-sdk/api/client/classes/IotaHTTPStatusError.md new file mode 100644 index 00000000000..cafd4241fad --- /dev/null +++ b/docs/content/ts-sdk/api/client/classes/IotaHTTPStatusError.md @@ -0,0 +1,137 @@ +# Class: IotaHTTPStatusError + +## Extends + +- [`IotaHTTPTransportError`](IotaHTTPTransportError.md) + +## Constructors + +### new IotaHTTPStatusError() + +> **new IotaHTTPStatusError**(`message`, `status`, `statusText`): [`IotaHTTPStatusError`](IotaHTTPStatusError.md) + +#### Parameters + +• **message**: `string` + +• **status**: `number` + +• **statusText**: `string` + +#### Returns + +[`IotaHTTPStatusError`](IotaHTTPStatusError.md) + +#### Overrides + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`constructor`](IotaHTTPTransportError.md#constructors) + +## Properties + +### prepareStackTrace()? + +> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any` + +Optional override for formatting stack traces + +#### Parameters + +• **err**: `Error` + +• **stackTraces**: `CallSite`[] + +#### Returns + +`any` + +#### See + +https://v8.dev/docs/stack-trace-api#customizing-stack-traces + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`prepareStackTrace`](IotaHTTPTransportError.md#preparestacktrace) + +*** + +### stackTraceLimit + +> `static` **stackTraceLimit**: `number` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`stackTraceLimit`](IotaHTTPTransportError.md#stacktracelimit) + +*** + +### cause? + +> `optional` **cause**: `unknown` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`cause`](IotaHTTPTransportError.md#cause) + +*** + +### name + +> **name**: `string` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`name`](IotaHTTPTransportError.md#name) + +*** + +### message + +> **message**: `string` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`message`](IotaHTTPTransportError.md#message) + +*** + +### stack? + +> `optional` **stack**: `string` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`stack`](IotaHTTPTransportError.md#stack) + +*** + +### status + +> **status**: `number` + +*** + +### statusText + +> **statusText**: `string` + +## Methods + +### captureStackTrace() + +> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void` + +Create .stack property on a target object + +#### Parameters + +• **targetObject**: `object` + +• **constructorOpt?**: `Function` + +#### Returns + +`void` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`captureStackTrace`](IotaHTTPTransportError.md#capturestacktrace) diff --git a/docs/content/ts-sdk/api/client/classes/IotaHTTPTransport.md b/docs/content/ts-sdk/api/client/classes/IotaHTTPTransport.md new file mode 100644 index 00000000000..b24f426aa9c --- /dev/null +++ b/docs/content/ts-sdk/api/client/classes/IotaHTTPTransport.md @@ -0,0 +1,79 @@ +# Class: IotaHTTPTransport + +## Implements + +- [`IotaTransport`](../interfaces/IotaTransport.md) + +## Constructors + +### new IotaHTTPTransport() + +> **new IotaHTTPTransport**(`options`): [`IotaHTTPTransport`](IotaHTTPTransport.md) + +#### Parameters + +• **options**: [`IotaHTTPTransportOptions`](../interfaces/IotaHTTPTransportOptions.md) + +#### Returns + +[`IotaHTTPTransport`](IotaHTTPTransport.md) + +## Methods + +### fetch() + +> **fetch**(`input`, `init`?): `Promise`\<`Response`\> + +#### Parameters + +• **input**: `RequestInfo` + +• **init?**: `RequestInit` + +#### Returns + +`Promise`\<`Response`\> + +*** + +### request() + +> **request**\<`T`\>(`input`): `Promise`\<`T`\> + +#### Type Parameters + +• **T** + +#### Parameters + +• **input**: [`IotaTransportRequestOptions`](../interfaces/IotaTransportRequestOptions.md) + +#### Returns + +`Promise`\<`T`\> + +#### Implementation of + +[`IotaTransport`](../interfaces/IotaTransport.md).[`request`](../interfaces/IotaTransport.md#request) + +*** + +### subscribe() + +> **subscribe**\<`T`\>(`input`): `Promise`\<() => `Promise`\<`boolean`\>\> + +#### Type Parameters + +• **T** + +#### Parameters + +• **input**: [`IotaTransportSubscribeOptions`](../interfaces/IotaTransportSubscribeOptions.md)\<`T`\> + +#### Returns + +`Promise`\<() => `Promise`\<`boolean`\>\> + +#### Implementation of + +[`IotaTransport`](../interfaces/IotaTransport.md).[`subscribe`](../interfaces/IotaTransport.md#subscribe) diff --git a/docs/content/ts-sdk/api/client/classes/IotaHTTPTransportError.md b/docs/content/ts-sdk/api/client/classes/IotaHTTPTransportError.md new file mode 100644 index 00000000000..8b43ff4780c --- /dev/null +++ b/docs/content/ts-sdk/api/client/classes/IotaHTTPTransportError.md @@ -0,0 +1,144 @@ +# Class: IotaHTTPTransportError + +## Extends + +- `Error` + +## Extended by + +- [`IotaHTTPStatusError`](IotaHTTPStatusError.md) +- [`JsonRpcError`](JsonRpcError.md) + +## Constructors + +### new IotaHTTPTransportError() + +> **new IotaHTTPTransportError**(`message`?): [`IotaHTTPTransportError`](IotaHTTPTransportError.md) + +#### Parameters + +• **message?**: `string` + +#### Returns + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md) + +#### Inherited from + +`Error.constructor` + +### new IotaHTTPTransportError() + +> **new IotaHTTPTransportError**(`message`?, `options`?): [`IotaHTTPTransportError`](IotaHTTPTransportError.md) + +#### Parameters + +• **message?**: `string` + +• **options?**: `ErrorOptions` + +#### Returns + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md) + +#### Inherited from + +`Error.constructor` + +## Properties + +### prepareStackTrace()? + +> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any` + +Optional override for formatting stack traces + +#### Parameters + +• **err**: `Error` + +• **stackTraces**: `CallSite`[] + +#### Returns + +`any` + +#### See + +https://v8.dev/docs/stack-trace-api#customizing-stack-traces + +#### Inherited from + +`Error.prepareStackTrace` + +*** + +### stackTraceLimit + +> `static` **stackTraceLimit**: `number` + +#### Inherited from + +`Error.stackTraceLimit` + +*** + +### cause? + +> `optional` **cause**: `unknown` + +#### Inherited from + +`Error.cause` + +*** + +### name + +> **name**: `string` + +#### Inherited from + +`Error.name` + +*** + +### message + +> **message**: `string` + +#### Inherited from + +`Error.message` + +*** + +### stack? + +> `optional` **stack**: `string` + +#### Inherited from + +`Error.stack` + +## Methods + +### captureStackTrace() + +> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void` + +Create .stack property on a target object + +#### Parameters + +• **targetObject**: `object` + +• **constructorOpt?**: `Function` + +#### Returns + +`void` + +#### Inherited from + +`Error.captureStackTrace` diff --git a/docs/content/ts-sdk/api/client/classes/JsonRpcError.md b/docs/content/ts-sdk/api/client/classes/JsonRpcError.md new file mode 100644 index 00000000000..3a428516f87 --- /dev/null +++ b/docs/content/ts-sdk/api/client/classes/JsonRpcError.md @@ -0,0 +1,135 @@ +# Class: JsonRpcError + +## Extends + +- [`IotaHTTPTransportError`](IotaHTTPTransportError.md) + +## Constructors + +### new JsonRpcError() + +> **new JsonRpcError**(`message`, `code`): [`JsonRpcError`](JsonRpcError.md) + +#### Parameters + +• **message**: `string` + +• **code**: `number` + +#### Returns + +[`JsonRpcError`](JsonRpcError.md) + +#### Overrides + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`constructor`](IotaHTTPTransportError.md#constructors) + +## Properties + +### prepareStackTrace()? + +> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any` + +Optional override for formatting stack traces + +#### Parameters + +• **err**: `Error` + +• **stackTraces**: `CallSite`[] + +#### Returns + +`any` + +#### See + +https://v8.dev/docs/stack-trace-api#customizing-stack-traces + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`prepareStackTrace`](IotaHTTPTransportError.md#preparestacktrace) + +*** + +### stackTraceLimit + +> `static` **stackTraceLimit**: `number` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`stackTraceLimit`](IotaHTTPTransportError.md#stacktracelimit) + +*** + +### cause? + +> `optional` **cause**: `unknown` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`cause`](IotaHTTPTransportError.md#cause) + +*** + +### name + +> **name**: `string` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`name`](IotaHTTPTransportError.md#name) + +*** + +### message + +> **message**: `string` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`message`](IotaHTTPTransportError.md#message) + +*** + +### stack? + +> `optional` **stack**: `string` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`stack`](IotaHTTPTransportError.md#stack) + +*** + +### code + +> **code**: `number` + +*** + +### type + +> **type**: `string` + +## Methods + +### captureStackTrace() + +> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void` + +Create .stack property on a target object + +#### Parameters + +• **targetObject**: `object` + +• **constructorOpt?**: `Function` + +#### Returns + +`void` + +#### Inherited from + +[`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`captureStackTrace`](IotaHTTPTransportError.md#capturestacktrace) diff --git a/docs/content/ts-sdk/api/client/enumerations/Network.md b/docs/content/ts-sdk/api/client/enumerations/Network.md new file mode 100644 index 00000000000..73af6bc7352 --- /dev/null +++ b/docs/content/ts-sdk/api/client/enumerations/Network.md @@ -0,0 +1,31 @@ +# Enumeration: Network + +## Enumeration Members + +### Mainnet + +> **Mainnet**: `"mainnet"` + +*** + +### Devnet + +> **Devnet**: `"devnet"` + +*** + +### Testnet + +> **Testnet**: `"testnet"` + +*** + +### Localnet + +> **Localnet**: `"localnet"` + +*** + +### Custom + +> **Custom**: `"custom"` diff --git a/docs/content/ts-sdk/api/client/functions/getAllNetworks.md b/docs/content/ts-sdk/api/client/functions/getAllNetworks.md new file mode 100644 index 00000000000..ed7f0ecf2d8 --- /dev/null +++ b/docs/content/ts-sdk/api/client/functions/getAllNetworks.md @@ -0,0 +1,7 @@ +# Function: getAllNetworks() + +> **getAllNetworks**(): `NetworksConfiguration` + +## Returns + +`NetworksConfiguration` diff --git a/docs/content/ts-sdk/api/client/functions/getAppsBackend.md b/docs/content/ts-sdk/api/client/functions/getAppsBackend.md new file mode 100644 index 00000000000..03840c353a8 --- /dev/null +++ b/docs/content/ts-sdk/api/client/functions/getAppsBackend.md @@ -0,0 +1,7 @@ +# Function: getAppsBackend() + +> **getAppsBackend**(): `string` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/client/functions/getDefaultNetwork.md b/docs/content/ts-sdk/api/client/functions/getDefaultNetwork.md new file mode 100644 index 00000000000..1b58aafd25a --- /dev/null +++ b/docs/content/ts-sdk/api/client/functions/getDefaultNetwork.md @@ -0,0 +1,7 @@ +# Function: getDefaultNetwork() + +> **getDefaultNetwork**(): [`Network`](../enumerations/Network.md) + +## Returns + +[`Network`](../enumerations/Network.md) diff --git a/docs/content/ts-sdk/api/client/functions/getFullnodeUrl.md b/docs/content/ts-sdk/api/client/functions/getFullnodeUrl.md new file mode 100644 index 00000000000..0f385a6fc7e --- /dev/null +++ b/docs/content/ts-sdk/api/client/functions/getFullnodeUrl.md @@ -0,0 +1,11 @@ +# Function: getFullnodeUrl() + +> **getFullnodeUrl**(`network`): `string` + +## Parameters + +• **network**: `string` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/client/functions/getNetwork.md b/docs/content/ts-sdk/api/client/functions/getNetwork.md new file mode 100644 index 00000000000..1065cbb419f --- /dev/null +++ b/docs/content/ts-sdk/api/client/functions/getNetwork.md @@ -0,0 +1,11 @@ +# Function: getNetwork() + +> **getNetwork**(`network`): [`NetworkConfiguration`](../interfaces/NetworkConfiguration.md) + +## Parameters + +• **network**: `string` + +## Returns + +[`NetworkConfiguration`](../interfaces/NetworkConfiguration.md) diff --git a/docs/content/ts-sdk/api/client/functions/isIotaClient.md b/docs/content/ts-sdk/api/client/functions/isIotaClient.md new file mode 100644 index 00000000000..5b3f572a1a4 --- /dev/null +++ b/docs/content/ts-sdk/api/client/functions/isIotaClient.md @@ -0,0 +1,11 @@ +# Function: isIotaClient() + +> **isIotaClient**(`client`): `client is IotaClient` + +## Parameters + +• **client**: `unknown` + +## Returns + +`client is IotaClient` diff --git a/docs/content/ts-sdk/api/client/index.md b/docs/content/ts-sdk/api/client/index.md new file mode 100644 index 00000000000..33be3f54b19 --- /dev/null +++ b/docs/content/ts-sdk/api/client/index.md @@ -0,0 +1,245 @@ +# client + +## Index + +### Enumerations + +- [Network](enumerations/Network.md) + +### Classes + +- [IotaClient](classes/IotaClient.md) +- [IotaHTTPTransportError](classes/IotaHTTPTransportError.md) +- [JsonRpcError](classes/JsonRpcError.md) +- [IotaHTTPStatusError](classes/IotaHTTPStatusError.md) +- [IotaHTTPTransport](classes/IotaHTTPTransport.md) + +### Interfaces + +- [PaginationArguments](interfaces/PaginationArguments.md) +- [OrderArguments](interfaces/OrderArguments.md) +- [IotaHTTPTransportOptions](interfaces/IotaHTTPTransportOptions.md) +- [IotaTransportRequestOptions](interfaces/IotaTransportRequestOptions.md) +- [IotaTransportSubscribeOptions](interfaces/IotaTransportSubscribeOptions.md) +- [IotaTransport](interfaces/IotaTransport.md) +- [NetworkConfiguration](interfaces/NetworkConfiguration.md) +- [KioskConfiguration](interfaces/KioskConfiguration.md) +- [AddressMetrics](interfaces/AddressMetrics.md) +- [Balance](interfaces/Balance.md) +- [BalanceChange](interfaces/BalanceChange.md) +- [Checkpoint](interfaces/Checkpoint.md) +- [Claim](interfaces/Claim.md) +- [CoinStruct](interfaces/CoinStruct.md) +- [CommitteeInfo](interfaces/CommitteeInfo.md) +- [DelegatedStake](interfaces/DelegatedStake.md) +- [DelegatedTimelockedStake](interfaces/DelegatedTimelockedStake.md) +- [DevInspectArgs](interfaces/DevInspectArgs.md) +- [DevInspectResults](interfaces/DevInspectResults.md) +- [DisplayFieldsResponse](interfaces/DisplayFieldsResponse.md) +- [DryRunTransactionBlockResponse](interfaces/DryRunTransactionBlockResponse.md) +- [DynamicFieldInfo](interfaces/DynamicFieldInfo.md) +- [DynamicFieldName](interfaces/DynamicFieldName.md) +- [ECMHLiveObjectSetDigest](interfaces/ECMHLiveObjectSetDigest.md) +- [EndOfEpochData](interfaces/EndOfEpochData.md) +- [EndOfEpochInfo](interfaces/EndOfEpochInfo.md) +- [EpochInfo](interfaces/EpochInfo.md) +- [EpochMetrics](interfaces/EpochMetrics.md) +- [IotaEvent](interfaces/IotaEvent.md) +- [EventId](interfaces/EventId.md) +- [GasCostSummary](interfaces/GasCostSummary.md) +- [IotaGasData](interfaces/IotaGasData.md) +- [GetPastObjectRequest](interfaces/GetPastObjectRequest.md) +- [IotaActiveJwk](interfaces/IotaActiveJwk.md) +- [IotaAuthenticatorStateExpire](interfaces/IotaAuthenticatorStateExpire.md) +- [IotaChangeEpoch](interfaces/IotaChangeEpoch.md) +- [CoinMetadata](interfaces/CoinMetadata.md) +- [IotaExecutionResult](interfaces/IotaExecutionResult.md) +- [IotaJWK](interfaces/IotaJWK.md) +- [IotaJwkId](interfaces/IotaJwkId.md) +- [IotaMoveAbilitySet](interfaces/IotaMoveAbilitySet.md) +- [IotaMoveModuleId](interfaces/IotaMoveModuleId.md) +- [IotaMoveNormalizedField](interfaces/IotaMoveNormalizedField.md) +- [IotaMoveNormalizedFunction](interfaces/IotaMoveNormalizedFunction.md) +- [IotaMoveNormalizedModule](interfaces/IotaMoveNormalizedModule.md) +- [IotaMoveNormalizedStruct](interfaces/IotaMoveNormalizedStruct.md) +- [IotaMoveStructTypeParameter](interfaces/IotaMoveStructTypeParameter.md) +- [IotaObjectResponse](interfaces/IotaObjectResponse.md) +- [MoveCallIotaTransaction](interfaces/MoveCallIotaTransaction.md) +- [IotaSystemStateSummary](interfaces/IotaSystemStateSummary.md) +- [IotaValidatorSummary](interfaces/IotaValidatorSummary.md) +- [MoveCallMetrics](interfaces/MoveCallMetrics.md) +- [MoveCallParams](interfaces/MoveCallParams.md) +- [MoveFunctionName](interfaces/MoveFunctionName.md) +- [MoveVariant](interfaces/MoveVariant.md) +- [MultiSig](interfaces/MultiSig.md) +- [MultiSigPublicKey](interfaces/MultiSigPublicKey.md) +- [NetworkMetrics](interfaces/NetworkMetrics.md) +- [IotaObjectData](interfaces/IotaObjectData.md) +- [IotaObjectDataOptions](interfaces/IotaObjectDataOptions.md) +- [IotaObjectRef](interfaces/IotaObjectRef.md) +- [IotaObjectResponseQuery](interfaces/IotaObjectResponseQuery.md) +- [OwnedObjectRef](interfaces/OwnedObjectRef.md) +- [PaginatedCheckpoints](interfaces/PaginatedCheckpoints.md) +- [PaginatedCoins](interfaces/PaginatedCoins.md) +- [PaginatedDynamicFieldInfos](interfaces/PaginatedDynamicFieldInfos.md) +- [PaginatedEpochInfos](interfaces/PaginatedEpochInfos.md) +- [PaginatedEpochMetricss](interfaces/PaginatedEpochMetricss.md) +- [PaginatedEvents](interfaces/PaginatedEvents.md) +- [PaginatedObjectsResponse](interfaces/PaginatedObjectsResponse.md) +- [PaginatedTransactionResponse](interfaces/PaginatedTransactionResponse.md) +- [PasskeyAuthenticator](interfaces/PasskeyAuthenticator.md) +- [ProtocolConfig](interfaces/ProtocolConfig.md) +- [CoinSupply](interfaces/CoinSupply.md) +- [IotaTransactionBlock](interfaces/IotaTransactionBlock.md) +- [TransactionBlockBytes](interfaces/TransactionBlockBytes.md) +- [TransactionBlockEffectsModifiedAtVersions](interfaces/TransactionBlockEffectsModifiedAtVersions.md) +- [IotaTransactionBlockResponse](interfaces/IotaTransactionBlockResponse.md) +- [IotaTransactionBlockResponseOptions](interfaces/IotaTransactionBlockResponseOptions.md) +- [IotaTransactionBlockResponseQuery](interfaces/IotaTransactionBlockResponseQuery.md) +- [TransferObjectParams](interfaces/TransferObjectParams.md) +- [TypeOrigin](interfaces/TypeOrigin.md) +- [UpgradeInfo](interfaces/UpgradeInfo.md) +- [ValidatorApy](interfaces/ValidatorApy.md) +- [ValidatorsApy](interfaces/ValidatorsApy.md) +- [ZkLoginAuthenticator](interfaces/ZkLoginAuthenticator.md) +- [ZkLoginInputs](interfaces/ZkLoginInputs.md) +- [ZkLoginProof](interfaces/ZkLoginProof.md) +- [DevInspectTransactionBlockParams](interfaces/DevInspectTransactionBlockParams.md) +- [DryRunTransactionBlockParams](interfaces/DryRunTransactionBlockParams.md) +- [ExecuteTransactionBlockParams](interfaces/ExecuteTransactionBlockParams.md) +- [GetChainIdentifierParams](interfaces/GetChainIdentifierParams.md) +- [GetCheckpointParams](interfaces/GetCheckpointParams.md) +- [GetCheckpointsParams](interfaces/GetCheckpointsParams.md) +- [GetEventsParams](interfaces/GetEventsParams.md) +- [GetLatestCheckpointSequenceNumberParams](interfaces/GetLatestCheckpointSequenceNumberParams.md) +- [GetMoveFunctionArgTypesParams](interfaces/GetMoveFunctionArgTypesParams.md) +- [GetNormalizedMoveFunctionParams](interfaces/GetNormalizedMoveFunctionParams.md) +- [GetNormalizedMoveModuleParams](interfaces/GetNormalizedMoveModuleParams.md) +- [GetNormalizedMoveModulesByPackageParams](interfaces/GetNormalizedMoveModulesByPackageParams.md) +- [GetNormalizedMoveStructParams](interfaces/GetNormalizedMoveStructParams.md) +- [GetObjectParams](interfaces/GetObjectParams.md) +- [GetProtocolConfigParams](interfaces/GetProtocolConfigParams.md) +- [GetTotalTransactionBlocksParams](interfaces/GetTotalTransactionBlocksParams.md) +- [GetTransactionBlockParams](interfaces/GetTransactionBlockParams.md) +- [MultiGetObjectsParams](interfaces/MultiGetObjectsParams.md) +- [MultiGetTransactionBlocksParams](interfaces/MultiGetTransactionBlocksParams.md) +- [TryGetPastObjectParams](interfaces/TryGetPastObjectParams.md) +- [TryMultiGetPastObjectsParams](interfaces/TryMultiGetPastObjectsParams.md) +- [GetAllBalancesParams](interfaces/GetAllBalancesParams.md) +- [GetAllCoinsParams](interfaces/GetAllCoinsParams.md) +- [GetAllEpochAddressMetricsParams](interfaces/GetAllEpochAddressMetricsParams.md) +- [GetBalanceParams](interfaces/GetBalanceParams.md) +- [GetCheckpointAddressMetricsParams](interfaces/GetCheckpointAddressMetricsParams.md) +- [GetCoinMetadataParams](interfaces/GetCoinMetadataParams.md) +- [GetCoinsParams](interfaces/GetCoinsParams.md) +- [GetCommitteeInfoParams](interfaces/GetCommitteeInfoParams.md) +- [GetCurrentEpochParams](interfaces/GetCurrentEpochParams.md) +- [GetDynamicFieldObjectParams](interfaces/GetDynamicFieldObjectParams.md) +- [GetDynamicFieldsParams](interfaces/GetDynamicFieldsParams.md) +- [GetEpochMetricsParams](interfaces/GetEpochMetricsParams.md) +- [GetEpochsParams](interfaces/GetEpochsParams.md) +- [GetLatestAddressMetricsParams](interfaces/GetLatestAddressMetricsParams.md) +- [GetLatestIotaSystemStateParams](interfaces/GetLatestIotaSystemStateParams.md) +- [GetMoveCallMetricsParams](interfaces/GetMoveCallMetricsParams.md) +- [GetNetworkMetricsParams](interfaces/GetNetworkMetricsParams.md) +- [GetReferenceGasPriceParams](interfaces/GetReferenceGasPriceParams.md) +- [GetStakesParams](interfaces/GetStakesParams.md) +- [GetStakesByIdsParams](interfaces/GetStakesByIdsParams.md) +- [GetTimelockedStakesParams](interfaces/GetTimelockedStakesParams.md) +- [GetTimelockedStakesByIdsParams](interfaces/GetTimelockedStakesByIdsParams.md) +- [GetTotalSupplyParams](interfaces/GetTotalSupplyParams.md) +- [GetTotalTransactionsParams](interfaces/GetTotalTransactionsParams.md) +- [GetValidatorsApyParams](interfaces/GetValidatorsApyParams.md) +- [QueryEventsParams](interfaces/QueryEventsParams.md) +- [SubscribeEventParams](interfaces/SubscribeEventParams.md) +- [SubscribeTransactionParams](interfaces/SubscribeTransactionParams.md) +- [UnsafeBatchTransactionParams](interfaces/UnsafeBatchTransactionParams.md) +- [UnsafeMergeCoinsParams](interfaces/UnsafeMergeCoinsParams.md) +- [UnsafeMoveCallParams](interfaces/UnsafeMoveCallParams.md) +- [UnsafePayParams](interfaces/UnsafePayParams.md) +- [UnsafePayAllIotaParams](interfaces/UnsafePayAllIotaParams.md) +- [UnsafePayIotaParams](interfaces/UnsafePayIotaParams.md) +- [UnsafePublishParams](interfaces/UnsafePublishParams.md) +- [UnsafeRequestAddStakeParams](interfaces/UnsafeRequestAddStakeParams.md) +- [UnsafeRequestAddTimelockedStakeParams](interfaces/UnsafeRequestAddTimelockedStakeParams.md) +- [UnsafeRequestWithdrawStakeParams](interfaces/UnsafeRequestWithdrawStakeParams.md) +- [UnsafeRequestWithdrawTimelockedStakeParams](interfaces/UnsafeRequestWithdrawTimelockedStakeParams.md) +- [UnsafeSplitCoinParams](interfaces/UnsafeSplitCoinParams.md) +- [UnsafeSplitCoinEqualParams](interfaces/UnsafeSplitCoinEqualParams.md) +- [UnsafeTransferIotaParams](interfaces/UnsafeTransferIotaParams.md) +- [UnsafeTransferObjectParams](interfaces/UnsafeTransferObjectParams.md) + +### Type Aliases + +- [IotaClientOptions](type-aliases/IotaClientOptions.md) +- [HttpHeaders](type-aliases/HttpHeaders.md) +- [NetworkId](type-aliases/NetworkId.md) +- [ChainType](type-aliases/ChainType.md) +- [EpochPage](type-aliases/EpochPage.md) +- [EpochMetricsPage](type-aliases/EpochMetricsPage.md) +- [CheckpointPage](type-aliases/CheckpointPage.md) +- [AllEpochsAddressMetrics](type-aliases/AllEpochsAddressMetrics.md) +- [MoveCallMetric](type-aliases/MoveCallMetric.md) +- [DynamicFieldPage](type-aliases/DynamicFieldPage.md) +- [IotaMoveNormalizedModules](type-aliases/IotaMoveNormalizedModules.md) +- [IotaMoveObject](type-aliases/IotaMoveObject.md) +- [IotaMovePackage](type-aliases/IotaMovePackage.md) +- [ProgrammableTransaction](type-aliases/ProgrammableTransaction.md) +- [IotaObjectChangePublished](type-aliases/IotaObjectChangePublished.md) +- [IotaObjectChangeTransferred](type-aliases/IotaObjectChangeTransferred.md) +- [IotaObjectChangeMutated](type-aliases/IotaObjectChangeMutated.md) +- [IotaObjectChangeDeleted](type-aliases/IotaObjectChangeDeleted.md) +- [IotaObjectChangeWrapped](type-aliases/IotaObjectChangeWrapped.md) +- [IotaObjectChangeCreated](type-aliases/IotaObjectChangeCreated.md) +- [CoinBalance](type-aliases/CoinBalance.md) +- [Order](type-aliases/Order.md) +- [Unsubscribe](type-aliases/Unsubscribe.md) +- [CheckpointCommitment](type-aliases/CheckpointCommitment.md) +- [CheckpointId](type-aliases/CheckpointId.md) +- [CompressedSignature](type-aliases/CompressedSignature.md) +- [ConsensusDeterminedVersionAssignments](type-aliases/ConsensusDeterminedVersionAssignments.md) +- [IotaParsedData](type-aliases/IotaParsedData.md) +- [DynamicFieldType](type-aliases/DynamicFieldType.md) +- [IotaEventFilter](type-aliases/IotaEventFilter.md) +- [ExecuteTransactionRequestType](type-aliases/ExecuteTransactionRequestType.md) +- [ExecutionStatus](type-aliases/ExecutionStatus.md) +- [InputObjectKind](type-aliases/InputObjectKind.md) +- [IotaArgument](type-aliases/IotaArgument.md) +- [IotaCallArg](type-aliases/IotaCallArg.md) +- [IotaEndOfEpochTransactionKind](type-aliases/IotaEndOfEpochTransactionKind.md) +- [IotaMoveAbility](type-aliases/IotaMoveAbility.md) +- [IotaMoveNormalizedType](type-aliases/IotaMoveNormalizedType.md) +- [IotaMoveVisibility](type-aliases/IotaMoveVisibility.md) +- [IotaObjectDataFilter](type-aliases/IotaObjectDataFilter.md) +- [IotaTransaction](type-aliases/IotaTransaction.md) +- [IotaTransactionBlockBuilderMode](type-aliases/IotaTransactionBlockBuilderMode.md) +- [IotaMoveFunctionArgType](type-aliases/IotaMoveFunctionArgType.md) +- [MoveStruct](type-aliases/MoveStruct.md) +- [MoveValue](type-aliases/MoveValue.md) +- [IotaObjectChange](type-aliases/IotaObjectChange.md) +- [ObjectRead](type-aliases/ObjectRead.md) +- [ObjectResponseError](type-aliases/ObjectResponseError.md) +- [ObjectValueKind](type-aliases/ObjectValueKind.md) +- [ObjectOwner](type-aliases/ObjectOwner.md) +- [ProtocolConfigValue](type-aliases/ProtocolConfigValue.md) +- [PublicKey](type-aliases/PublicKey.md) +- [RPCTransactionRequestParams](type-aliases/RPCTransactionRequestParams.md) +- [RawData](type-aliases/RawData.md) +- [Signature](type-aliases/Signature.md) +- [StakeObject](type-aliases/StakeObject.md) +- [TimelockedStake](type-aliases/TimelockedStake.md) +- [TransactionBlockData](type-aliases/TransactionBlockData.md) +- [TransactionEffects](type-aliases/TransactionEffects.md) +- [IotaTransactionBlockKind](type-aliases/IotaTransactionBlockKind.md) +- [TransactionFilter](type-aliases/TransactionFilter.md) +- [GetOwnedObjectsParams](type-aliases/GetOwnedObjectsParams.md) +- [QueryTransactionBlocksParams](type-aliases/QueryTransactionBlocksParams.md) + +### Functions + +- [getAppsBackend](functions/getAppsBackend.md) +- [isIotaClient](functions/isIotaClient.md) +- [getAllNetworks](functions/getAllNetworks.md) +- [getNetwork](functions/getNetwork.md) +- [getDefaultNetwork](functions/getDefaultNetwork.md) +- [getFullnodeUrl](functions/getFullnodeUrl.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/AddressMetrics.md b/docs/content/ts-sdk/api/client/interfaces/AddressMetrics.md new file mode 100644 index 00000000000..eaf441dde46 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/AddressMetrics.md @@ -0,0 +1,51 @@ +# Interface: AddressMetrics + +Provides metrics about the addresses. + +## Properties + +### checkpoint + +> **checkpoint**: `string` + +The checkpoint sequence number at which the metrics were computed. + +*** + +### cumulativeActiveAddresses + +> **cumulativeActiveAddresses**: `string` + +The count of sender addresses. + +*** + +### cumulativeAddresses + +> **cumulativeAddresses**: `string` + +The count of sender and recipient addresses. + +*** + +### dailyActiveAddresses + +> **dailyActiveAddresses**: `string` + +The count of daily unique sender addresses. + +*** + +### epoch + +> **epoch**: `string` + +The epoch to which the checkpoint is assigned. + +*** + +### timestampMs + +> **timestampMs**: `string` + +The checkpoint timestamp. diff --git a/docs/content/ts-sdk/api/client/interfaces/Balance.md b/docs/content/ts-sdk/api/client/interfaces/Balance.md new file mode 100644 index 00000000000..86a49b28b00 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/Balance.md @@ -0,0 +1,19 @@ +# Interface: Balance + +## Properties + +### coinObjectCount + +> **coinObjectCount**: `number` + +*** + +### coinType + +> **coinType**: `string` + +*** + +### totalBalance + +> **totalBalance**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/BalanceChange.md b/docs/content/ts-sdk/api/client/interfaces/BalanceChange.md new file mode 100644 index 00000000000..96f747eb43d --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/BalanceChange.md @@ -0,0 +1,24 @@ +# Interface: BalanceChange + +## Properties + +### amount + +> **amount**: `string` + +The amount indicate the balance value changes, negative amount means spending coin value and +positive means receiving coin value. + +*** + +### coinType + +> **coinType**: `string` + +*** + +### owner + +> **owner**: [`ObjectOwner`](../type-aliases/ObjectOwner.md) + +Owner of the balance change diff --git a/docs/content/ts-sdk/api/client/interfaces/Checkpoint.md b/docs/content/ts-sdk/api/client/interfaces/Checkpoint.md new file mode 100644 index 00000000000..8a594b36e1a --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/Checkpoint.md @@ -0,0 +1,92 @@ +# Interface: Checkpoint + +## Properties + +### checkpointCommitments + +> **checkpointCommitments**: [`CheckpointCommitment`](../type-aliases/CheckpointCommitment.md)[] + +Commitments to checkpoint state + +*** + +### digest + +> **digest**: `string` + +Checkpoint digest + +*** + +### endOfEpochData? + +> `optional` **endOfEpochData**: `null` \| [`EndOfEpochData`](EndOfEpochData.md) + +Present only on the final checkpoint of the epoch. + +*** + +### epoch + +> **epoch**: `string` + +Checkpoint's epoch ID + +*** + +### epochRollingGasCostSummary + +> **epochRollingGasCostSummary**: [`GasCostSummary`](GasCostSummary.md) + +The running total gas costs of all transactions included in the current epoch so far until this +checkpoint. + +*** + +### networkTotalTransactions + +> **networkTotalTransactions**: `string` + +Total number of transactions committed since genesis, including those in this checkpoint. + +*** + +### previousDigest? + +> `optional` **previousDigest**: `null` \| `string` + +Digest of the previous checkpoint + +*** + +### sequenceNumber + +> **sequenceNumber**: `string` + +Checkpoint sequence number + +*** + +### timestampMs + +> **timestampMs**: `string` + +Timestamp of the checkpoint - number of milliseconds from the Unix epoch Checkpoint timestamps are +monotonic, but not strongly monotonic - subsequent checkpoints can have same timestamp if they +originate from the same underlining consensus commit + +*** + +### transactions + +> **transactions**: `string`[] + +Transaction digests + +*** + +### validatorSignature + +> **validatorSignature**: `string` + +Validator Signature diff --git a/docs/content/ts-sdk/api/client/interfaces/Claim.md b/docs/content/ts-sdk/api/client/interfaces/Claim.md new file mode 100644 index 00000000000..34f8a314c71 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/Claim.md @@ -0,0 +1,15 @@ +# Interface: Claim + +A claim consists of value and index_mod_4. + +## Properties + +### indexMod4 + +> **indexMod4**: `number` + +*** + +### value + +> **value**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/CoinMetadata.md b/docs/content/ts-sdk/api/client/interfaces/CoinMetadata.md new file mode 100644 index 00000000000..f0755590232 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/CoinMetadata.md @@ -0,0 +1,49 @@ +# Interface: CoinMetadata + +## Properties + +### decimals + +> **decimals**: `number` + +Number of decimal places the coin uses. + +*** + +### description + +> **description**: `string` + +Description of the token + +*** + +### iconUrl? + +> `optional` **iconUrl**: `null` \| `string` + +URL for the token logo + +*** + +### id? + +> `optional` **id**: `null` \| `string` + +Object id for the CoinMetadata object + +*** + +### name + +> **name**: `string` + +Name for the token + +*** + +### symbol + +> **symbol**: `string` + +Symbol for the token diff --git a/docs/content/ts-sdk/api/client/interfaces/CoinStruct.md b/docs/content/ts-sdk/api/client/interfaces/CoinStruct.md new file mode 100644 index 00000000000..00b33194bfd --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/CoinStruct.md @@ -0,0 +1,37 @@ +# Interface: CoinStruct + +## Properties + +### balance + +> **balance**: `string` + +*** + +### coinObjectId + +> **coinObjectId**: `string` + +*** + +### coinType + +> **coinType**: `string` + +*** + +### digest + +> **digest**: `string` + +*** + +### previousTransaction + +> **previousTransaction**: `string` + +*** + +### version + +> **version**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/CoinSupply.md b/docs/content/ts-sdk/api/client/interfaces/CoinSupply.md new file mode 100644 index 00000000000..3f3206cf892 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/CoinSupply.md @@ -0,0 +1,7 @@ +# Interface: CoinSupply + +## Properties + +### value + +> **value**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/CommitteeInfo.md b/docs/content/ts-sdk/api/client/interfaces/CommitteeInfo.md new file mode 100644 index 00000000000..07b2239bce0 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/CommitteeInfo.md @@ -0,0 +1,15 @@ +# Interface: CommitteeInfo + +RPC representation of the [Committee] type. + +## Properties + +### epoch + +> **epoch**: `string` + +*** + +### validators + +> **validators**: [`string`, `string`][] diff --git a/docs/content/ts-sdk/api/client/interfaces/DelegatedStake.md b/docs/content/ts-sdk/api/client/interfaces/DelegatedStake.md new file mode 100644 index 00000000000..b8ddcae369c --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/DelegatedStake.md @@ -0,0 +1,23 @@ +# Interface: DelegatedStake + +## Properties + +### stakes + +> **stakes**: [`StakeObject`](../type-aliases/StakeObject.md)[] + +*** + +### stakingPool + +> **stakingPool**: `string` + +Staking pool object id. + +*** + +### validatorAddress + +> **validatorAddress**: `string` + +Validator's Address. diff --git a/docs/content/ts-sdk/api/client/interfaces/DelegatedTimelockedStake.md b/docs/content/ts-sdk/api/client/interfaces/DelegatedTimelockedStake.md new file mode 100644 index 00000000000..d4453df96b2 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/DelegatedTimelockedStake.md @@ -0,0 +1,19 @@ +# Interface: DelegatedTimelockedStake + +## Properties + +### stakes + +> **stakes**: [`TimelockedStake`](../type-aliases/TimelockedStake.md)[] + +*** + +### stakingPool + +> **stakingPool**: `string` + +*** + +### validatorAddress + +> **validatorAddress**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/DevInspectArgs.md b/docs/content/ts-sdk/api/client/interfaces/DevInspectArgs.md new file mode 100644 index 00000000000..9faaf663dfc --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/DevInspectArgs.md @@ -0,0 +1,43 @@ +# Interface: DevInspectArgs + +Additional arguments supplied to dev inspect beyond what is allowed in today's API. + +## Properties + +### gasBudget? + +> `optional` **gasBudget**: `null` \| `string` + +The gas budget for the transaction. + +*** + +### gasObjects? + +> `optional` **gasObjects**: `null` \| [`string`, `string`, `string`][] + +The gas objects used to pay for the transaction. + +*** + +### gasSponsor? + +> `optional` **gasSponsor**: `null` \| `string` + +The sponsor of the gas for the transaction, might be different from the sender. + +*** + +### showRawTxnDataAndEffects? + +> `optional` **showRawTxnDataAndEffects**: `null` \| `boolean` + +Whether to return the raw transaction data and effects. + +*** + +### skipChecks? + +> `optional` **skipChecks**: `null` \| `boolean` + +Whether to skip transaction checks for the transaction. diff --git a/docs/content/ts-sdk/api/client/interfaces/DevInspectResults.md b/docs/content/ts-sdk/api/client/interfaces/DevInspectResults.md new file mode 100644 index 00000000000..78efaec2172 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/DevInspectResults.md @@ -0,0 +1,53 @@ +# Interface: DevInspectResults + +The response from processing a dev inspect transaction + +## Properties + +### effects + +> **effects**: [`TransactionEffects`](../type-aliases/TransactionEffects.md) + +Summary of effects that likely would be generated if the transaction is actually run. Note however, +that not all dev-inspect transactions are actually usable as transactions so it might not be +possible actually generate these effects from a normal transaction. + +*** + +### error? + +> `optional` **error**: `null` \| `string` + +Execution error from executing the transactions + +*** + +### events + +> **events**: [`IotaEvent`](IotaEvent.md)[] + +Events that likely would be generated if the transaction is actually run. + +*** + +### rawEffects? + +> `optional` **rawEffects**: `number`[] + +The raw effects of the transaction that was dev inspected. + +*** + +### rawTxnData? + +> `optional` **rawTxnData**: `number`[] + +The raw transaction data that was dev inspected. + +*** + +### results? + +> `optional` **results**: `null` \| [`IotaExecutionResult`](IotaExecutionResult.md)[] + +Execution results (including return values) from executing the transactions diff --git a/docs/content/ts-sdk/api/client/interfaces/DevInspectTransactionBlockParams.md b/docs/content/ts-sdk/api/client/interfaces/DevInspectTransactionBlockParams.md new file mode 100644 index 00000000000..9d73cb118d3 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/DevInspectTransactionBlockParams.md @@ -0,0 +1,43 @@ +# Interface: DevInspectTransactionBlockParams + +Runs the transaction in dev-inspect mode. Which allows for nearly any transaction (or Move call) +with any arguments. Detailed results are provided, including both the transaction effects and any +return values. + +## Properties + +### sender + +> **sender**: `string` + +*** + +### transactionBlock + +> **transactionBlock**: `string` \| `Uint8Array` \| [`Transaction`](../../transactions/classes/Transaction.md) + +BCS encoded TransactionKind(as opposed to TransactionData, which include gasBudget and gasPrice) + +*** + +### gasPrice? + +> `optional` **gasPrice**: `null` \| `number` \| `bigint` + +Gas is not charged, but gas usage is still calculated. Default to use reference gas price + +*** + +### epoch? + +> `optional` **epoch**: `null` \| `string` + +The epoch to perform the call. Will be set from the system state object if not provided + +*** + +### additionalArgs? + +> `optional` **additionalArgs**: `null` \| [`DevInspectArgs`](DevInspectArgs.md) + +Additional arguments including gas_budget, gas_objects, gas_sponsor and skip_checks. diff --git a/docs/content/ts-sdk/api/client/interfaces/DisplayFieldsResponse.md b/docs/content/ts-sdk/api/client/interfaces/DisplayFieldsResponse.md new file mode 100644 index 00000000000..d46762daeda --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/DisplayFieldsResponse.md @@ -0,0 +1,13 @@ +# Interface: DisplayFieldsResponse + +## Properties + +### data? + +> `optional` **data**: `null` \| `object` + +*** + +### error? + +> `optional` **error**: `null` \| [`ObjectResponseError`](../type-aliases/ObjectResponseError.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockParams.md b/docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockParams.md new file mode 100644 index 00000000000..7f8fb88a1bf --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockParams.md @@ -0,0 +1,10 @@ +# Interface: DryRunTransactionBlockParams + +Return transaction execution effects including the gas cost summary, while the effects are not +committed to the chain. + +## Properties + +### transactionBlock + +> **transactionBlock**: `string` \| `Uint8Array` diff --git a/docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockResponse.md b/docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockResponse.md new file mode 100644 index 00000000000..cab4aad8523 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockResponse.md @@ -0,0 +1,31 @@ +# Interface: DryRunTransactionBlockResponse + +## Properties + +### balanceChanges + +> **balanceChanges**: [`BalanceChange`](BalanceChange.md)[] + +*** + +### effects + +> **effects**: [`TransactionEffects`](../type-aliases/TransactionEffects.md) + +*** + +### events + +> **events**: [`IotaEvent`](IotaEvent.md)[] + +*** + +### input + +> **input**: [`TransactionBlockData`](../type-aliases/TransactionBlockData.md) + +*** + +### objectChanges + +> **objectChanges**: [`IotaObjectChange`](../type-aliases/IotaObjectChange.md)[] diff --git a/docs/content/ts-sdk/api/client/interfaces/DynamicFieldInfo.md b/docs/content/ts-sdk/api/client/interfaces/DynamicFieldInfo.md new file mode 100644 index 00000000000..1ad6abce1b2 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/DynamicFieldInfo.md @@ -0,0 +1,43 @@ +# Interface: DynamicFieldInfo + +## Properties + +### bcsName + +> **bcsName**: `string` + +*** + +### digest + +> **digest**: `string` + +*** + +### name + +> **name**: [`DynamicFieldName`](DynamicFieldName.md) + +*** + +### objectId + +> **objectId**: `string` + +*** + +### objectType + +> **objectType**: `string` + +*** + +### type + +> **type**: [`DynamicFieldType`](../type-aliases/DynamicFieldType.md) + +*** + +### version + +> **version**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/DynamicFieldName.md b/docs/content/ts-sdk/api/client/interfaces/DynamicFieldName.md new file mode 100644 index 00000000000..1493def656e --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/DynamicFieldName.md @@ -0,0 +1,13 @@ +# Interface: DynamicFieldName + +## Properties + +### type + +> **type**: `string` + +*** + +### value + +> **value**: `unknown` diff --git a/docs/content/ts-sdk/api/client/interfaces/ECMHLiveObjectSetDigest.md b/docs/content/ts-sdk/api/client/interfaces/ECMHLiveObjectSetDigest.md new file mode 100644 index 00000000000..abca44e384f --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/ECMHLiveObjectSetDigest.md @@ -0,0 +1,9 @@ +# Interface: ECMHLiveObjectSetDigest + +The Sha256 digest of an EllipticCurveMultisetHash committing to the live object set. + +## Properties + +### digest + +> **digest**: `number`[] diff --git a/docs/content/ts-sdk/api/client/interfaces/EndOfEpochData.md b/docs/content/ts-sdk/api/client/interfaces/EndOfEpochData.md new file mode 100644 index 00000000000..a41a90ba3a3 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/EndOfEpochData.md @@ -0,0 +1,39 @@ +# Interface: EndOfEpochData + +## Properties + +### epochCommitments + +> **epochCommitments**: [`CheckpointCommitment`](../type-aliases/CheckpointCommitment.md)[] + +Commitments to epoch specific state (e.g. live object set) + +*** + +### epochSupplyChange + +> **epochSupplyChange**: `number` + +The number of tokens that were minted (if positive) or burnt (if negative) in this epoch. + +*** + +### nextEpochCommittee + +> **nextEpochCommittee**: [`string`, `string`][] + +next_epoch_committee is `Some` if and only if the current checkpoint is the last checkpoint of an +epoch. Therefore next_epoch_committee can be used to pick the last checkpoint of an epoch, which is +often useful to get epoch level summary stats like total gas cost of an epoch, or the total number +of transactions from genesis to the end of an epoch. The committee is stored as a vector of +validator pub key and stake pairs. The vector should be sorted based on the Committee data +structure. + +*** + +### nextEpochProtocolVersion + +> **nextEpochProtocolVersion**: `string` + +The protocol version that is in effect during the epoch that starts immediately after this +checkpoint. diff --git a/docs/content/ts-sdk/api/client/interfaces/EndOfEpochInfo.md b/docs/content/ts-sdk/api/client/interfaces/EndOfEpochInfo.md new file mode 100644 index 00000000000..823fbd34bf6 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/EndOfEpochInfo.md @@ -0,0 +1,75 @@ +# Interface: EndOfEpochInfo + +## Properties + +### burntTokensAmount + +> **burntTokensAmount**: `string` + +*** + +### epochEndTimestamp + +> **epochEndTimestamp**: `string` + +*** + +### lastCheckpointId + +> **lastCheckpointId**: `string` + +*** + +### mintedTokensAmount + +> **mintedTokensAmount**: `string` + +*** + +### protocolVersion + +> **protocolVersion**: `string` + +existing fields from `SystemEpochInfoEventV1` (without epoch) + +*** + +### referenceGasPrice + +> **referenceGasPrice**: `string` + +*** + +### storageCharge + +> **storageCharge**: `string` + +*** + +### storageFundBalance + +> **storageFundBalance**: `string` + +*** + +### storageRebate + +> **storageRebate**: `string` + +*** + +### totalGasFees + +> **totalGasFees**: `string` + +*** + +### totalStake + +> **totalStake**: `string` + +*** + +### totalStakeRewardsDistributed + +> **totalStakeRewardsDistributed**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/EpochInfo.md b/docs/content/ts-sdk/api/client/interfaces/EpochInfo.md new file mode 100644 index 00000000000..6fed6645c0f --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/EpochInfo.md @@ -0,0 +1,57 @@ +# Interface: EpochInfo + +## Properties + +### endOfEpochInfo? + +> `optional` **endOfEpochInfo**: `null` \| [`EndOfEpochInfo`](EndOfEpochInfo.md) + +The end of epoch information. + +*** + +### epoch + +> **epoch**: `string` + +Epoch number + +*** + +### epochStartTimestamp + +> **epochStartTimestamp**: `string` + +The timestamp when the epoch started. + +*** + +### epochTotalTransactions + +> **epochTotalTransactions**: `string` + +Count of tx in epoch + +*** + +### firstCheckpointId + +> **firstCheckpointId**: `string` + +First, last checkpoint sequence numbers + +*** + +### referenceGasPrice? + +> `optional` **referenceGasPrice**: `null` \| `string` + +The reference gas price for the given epoch. + +*** + +### validators + +> **validators**: [`IotaValidatorSummary`](IotaValidatorSummary.md)[] + +List of validators included in epoch diff --git a/docs/content/ts-sdk/api/client/interfaces/EpochMetrics.md b/docs/content/ts-sdk/api/client/interfaces/EpochMetrics.md new file mode 100644 index 00000000000..54ff131ef67 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/EpochMetrics.md @@ -0,0 +1,43 @@ +# Interface: EpochMetrics + +A light-weight version of `EpochInfo` for faster loading + +## Properties + +### endOfEpochInfo? + +> `optional` **endOfEpochInfo**: `null` \| [`EndOfEpochInfo`](EndOfEpochInfo.md) + +The end of epoch information. + +*** + +### epoch + +> **epoch**: `string` + +The current epoch ID. + +*** + +### epochStartTimestamp + +> **epochStartTimestamp**: `string` + +The timestamp when the epoch started. + +*** + +### epochTotalTransactions + +> **epochTotalTransactions**: `string` + +The total number of transactions in the epoch. + +*** + +### firstCheckpointId + +> **firstCheckpointId**: `string` + +The first checkpoint ID of the epoch. diff --git a/docs/content/ts-sdk/api/client/interfaces/EventId.md b/docs/content/ts-sdk/api/client/interfaces/EventId.md new file mode 100644 index 00000000000..2177f11e922 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/EventId.md @@ -0,0 +1,16 @@ +# Interface: EventId + +Unique ID of a Iota Event, the ID is a combination of tx seq number and event seq number, the ID is +local to this particular fullnode and will be different from other fullnode. + +## Properties + +### eventSeq + +> **eventSeq**: `string` + +*** + +### txDigest + +> **txDigest**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/ExecuteTransactionBlockParams.md b/docs/content/ts-sdk/api/client/interfaces/ExecuteTransactionBlockParams.md new file mode 100644 index 00000000000..a4970d1b6c9 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/ExecuteTransactionBlockParams.md @@ -0,0 +1,45 @@ +# Interface: ExecuteTransactionBlockParams + +Execute the transaction and wait for results if desired. Request types: 1. WaitForEffectsCert: waits +for TransactionEffectsCert and then return to client. This mode is a proxy for transaction +finality. 2. WaitForLocalExecution: waits for TransactionEffectsCert and make sure the node executed +the transaction locally before returning the client. The local execution makes sure this node is +aware of this transaction when client fires subsequent queries. However if the node fails to execute +the transaction locally in a timely manner, a bool type in the response is set to false to indicated +the case. request_type is default to be `WaitForEffectsCert` unless options.show_events or +options.show_effects is true + +## Properties + +### transactionBlock + +> **transactionBlock**: `string` \| `Uint8Array` + +BCS serialized transaction data bytes without its type tag, as base-64 encoded string. + +*** + +### signature + +> **signature**: `string` \| `string`[] + +A list of signatures (`flag || signature || pubkey` bytes, as base-64 encoded string). Signature is +committed to the intent message of the transaction data, as base-64 encoded string. + +*** + +### options? + +> `optional` **options**: `null` \| [`IotaTransactionBlockResponseOptions`](IotaTransactionBlockResponseOptions.md) + +options for specifying the content to be returned + +*** + +### ~~requestType?~~ + +> `optional` **requestType**: `null` \| [`ExecuteTransactionRequestType`](../type-aliases/ExecuteTransactionRequestType.md) + +#### Deprecated + +requestType will be ignored by JSON RPC in the future diff --git a/docs/content/ts-sdk/api/client/interfaces/GasCostSummary.md b/docs/content/ts-sdk/api/client/interfaces/GasCostSummary.md new file mode 100644 index 00000000000..2f32fd7a740 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GasCostSummary.md @@ -0,0 +1,60 @@ +# Interface: GasCostSummary + +Summary of the charges in a transaction. Storage is charged independently of computation. There are +3 parts to the storage charges: `storage_cost`: it is the charge of storage at the time the +transaction is executed. The cost of storage is the number of bytes of the objects being mutated +multiplied by a variable storage cost per byte `storage_rebate`: this is the amount a user gets back +when manipulating an object. The `storage_rebate` is the `storage_cost` for an object minus fees. +`non_refundable_storage_fee`: not all the value of the object storage cost is given back to user and +there is a small fraction that is kept by the system. This value tracks that charge. + +When looking at a gas cost summary the amount charged to the user is +`computation_cost + storage_cost - storage_rebate` and that is the amount that is deducted from the +gas coins. `non_refundable_storage_fee` is collected from the objects being mutated/deleted and it +is tracked by the system in storage funds. + +Objects deleted, including the older versions of objects mutated, have the storage field on the +objects added up to a pool of "potential rebate". This rebate then is reduced by the "nonrefundable +rate" such that: +`potential_rebate(storage cost of deleted/mutated objects) = storage_rebate + non_refundable_storage_fee` + +## Properties + +### computationCost + +> **computationCost**: `string` + +Cost of computation/execution + +*** + +### computationCostBurned + +> **computationCostBurned**: `string` + +The burned component of the computation/execution costs + +*** + +### nonRefundableStorageFee + +> **nonRefundableStorageFee**: `string` + +The fee for the rebate. The portion of the storage rebate kept by the system. + +*** + +### storageCost + +> **storageCost**: `string` + +Storage cost, it's the sum of all storage cost for all objects created or mutated. + +*** + +### storageRebate + +> **storageRebate**: `string` + +The amount of storage cost refunded to the user for all objects deleted or mutated in the +transaction. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetAllBalancesParams.md b/docs/content/ts-sdk/api/client/interfaces/GetAllBalancesParams.md new file mode 100644 index 00000000000..0f97cbbd409 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetAllBalancesParams.md @@ -0,0 +1,11 @@ +# Interface: GetAllBalancesParams + +Return the total coin balance for all coin type, owned by the address owner. + +## Properties + +### owner + +> **owner**: `string` + +the owner's Iota address diff --git a/docs/content/ts-sdk/api/client/interfaces/GetAllCoinsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetAllCoinsParams.md new file mode 100644 index 00000000000..b32137f2fb2 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetAllCoinsParams.md @@ -0,0 +1,27 @@ +# Interface: GetAllCoinsParams + +Return all Coin objects owned by an address. + +## Properties + +### owner + +> **owner**: `string` + +the owner's Iota address + +*** + +### cursor? + +> `optional` **cursor**: `null` \| `string` + +optional paging cursor + +*** + +### limit? + +> `optional` **limit**: `null` \| `number` + +maximum number of items per page diff --git a/docs/content/ts-sdk/api/client/interfaces/GetAllEpochAddressMetricsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetAllEpochAddressMetricsParams.md new file mode 100644 index 00000000000..26e7e26fa0d --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetAllEpochAddressMetricsParams.md @@ -0,0 +1,7 @@ +# Interface: GetAllEpochAddressMetricsParams + +## Properties + +### descendingOrder? + +> `optional` **descendingOrder**: `null` \| `boolean` diff --git a/docs/content/ts-sdk/api/client/interfaces/GetBalanceParams.md b/docs/content/ts-sdk/api/client/interfaces/GetBalanceParams.md new file mode 100644 index 00000000000..0757181cbdd --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetBalanceParams.md @@ -0,0 +1,20 @@ +# Interface: GetBalanceParams + +Return the total coin balance for one coin type, owned by the address owner. + +## Properties + +### owner + +> **owner**: `string` + +the owner's Iota address + +*** + +### coinType? + +> `optional` **coinType**: `null` \| `string` + +optional type names for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC), +default to 0x2::iota::IOTA if not specified. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetChainIdentifierParams.md b/docs/content/ts-sdk/api/client/interfaces/GetChainIdentifierParams.md new file mode 100644 index 00000000000..8c4953d8483 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetChainIdentifierParams.md @@ -0,0 +1,3 @@ +# Interface: GetChainIdentifierParams + +Return the first four bytes of the chain's genesis checkpoint digest. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetCheckpointAddressMetricsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetCheckpointAddressMetricsParams.md new file mode 100644 index 00000000000..84279878c68 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetCheckpointAddressMetricsParams.md @@ -0,0 +1,7 @@ +# Interface: GetCheckpointAddressMetricsParams + +## Properties + +### checkpoint + +> **checkpoint**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/GetCheckpointParams.md b/docs/content/ts-sdk/api/client/interfaces/GetCheckpointParams.md new file mode 100644 index 00000000000..2198026d961 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetCheckpointParams.md @@ -0,0 +1,11 @@ +# Interface: GetCheckpointParams + +Return a checkpoint + +## Properties + +### id + +> **id**: `string` + +Checkpoint identifier, can use either checkpoint digest, or checkpoint sequence number as input. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetCheckpointsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetCheckpointsParams.md new file mode 100644 index 00000000000..e955a304e6b --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetCheckpointsParams.md @@ -0,0 +1,28 @@ +# Interface: GetCheckpointsParams + +Return paginated list of checkpoints + +## Properties + +### cursor? + +> `optional` **cursor**: `null` \| `string` + +An optional paging cursor. If provided, the query will start from the next item after the specified +cursor. Default to start from the first item if not specified. + +*** + +### limit? + +> `optional` **limit**: `null` \| `number` + +Maximum item returned per page, default to [QUERY_MAX_RESULT_LIMIT_CHECKPOINTS] if not specified. + +*** + +### descendingOrder + +> **descendingOrder**: `boolean` + +query result ordering, default to false (ascending order), oldest record first. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetCoinMetadataParams.md b/docs/content/ts-sdk/api/client/interfaces/GetCoinMetadataParams.md new file mode 100644 index 00000000000..1132256d456 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetCoinMetadataParams.md @@ -0,0 +1,11 @@ +# Interface: GetCoinMetadataParams + +Return metadata (e.g., symbol, decimals) for a coin. + +## Properties + +### coinType + +> **coinType**: `string` + +type name for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC) diff --git a/docs/content/ts-sdk/api/client/interfaces/GetCoinsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetCoinsParams.md new file mode 100644 index 00000000000..a3b97245dd4 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetCoinsParams.md @@ -0,0 +1,36 @@ +# Interface: GetCoinsParams + +Return all Coin<`coin_type`> objects owned by an address. + +## Properties + +### owner + +> **owner**: `string` + +the owner's Iota address + +*** + +### coinType? + +> `optional` **coinType**: `null` \| `string` + +optional type name for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC), +default to 0x2::iota::IOTA if not specified. + +*** + +### cursor? + +> `optional` **cursor**: `null` \| `string` + +optional paging cursor + +*** + +### limit? + +> `optional` **limit**: `null` \| `number` + +maximum number of items per page diff --git a/docs/content/ts-sdk/api/client/interfaces/GetCommitteeInfoParams.md b/docs/content/ts-sdk/api/client/interfaces/GetCommitteeInfoParams.md new file mode 100644 index 00000000000..28734880cdc --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetCommitteeInfoParams.md @@ -0,0 +1,11 @@ +# Interface: GetCommitteeInfoParams + +Return the committee information for the asked `epoch`. + +## Properties + +### epoch? + +> `optional` **epoch**: `null` \| `string` + +The epoch of interest. If None, default to the latest epoch diff --git a/docs/content/ts-sdk/api/client/interfaces/GetCurrentEpochParams.md b/docs/content/ts-sdk/api/client/interfaces/GetCurrentEpochParams.md new file mode 100644 index 00000000000..880377cae49 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetCurrentEpochParams.md @@ -0,0 +1,3 @@ +# Interface: GetCurrentEpochParams + +Return current epoch info diff --git a/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldObjectParams.md b/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldObjectParams.md new file mode 100644 index 00000000000..0441554ead8 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldObjectParams.md @@ -0,0 +1,19 @@ +# Interface: GetDynamicFieldObjectParams + +Return the dynamic field object information for a specified object + +## Properties + +### parentId + +> **parentId**: `string` + +The ID of the queried parent object + +*** + +### name + +> **name**: [`DynamicFieldName`](DynamicFieldName.md) + +The Name of the dynamic field diff --git a/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldsParams.md new file mode 100644 index 00000000000..7cba2ad20b1 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldsParams.md @@ -0,0 +1,28 @@ +# Interface: GetDynamicFieldsParams + +Return the list of dynamic field objects owned by an object. + +## Properties + +### parentId + +> **parentId**: `string` + +The ID of the parent object + +*** + +### cursor? + +> `optional` **cursor**: `null` \| `string` + +An optional paging cursor. If provided, the query will start from the next item after the specified +cursor. Default to start from the first item if not specified. + +*** + +### limit? + +> `optional` **limit**: `null` \| `number` + +Maximum item returned per page, default to [QUERY_MAX_RESULT_LIMIT] if not specified. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetEpochMetricsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetEpochMetricsParams.md new file mode 100644 index 00000000000..dfb279d3140 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetEpochMetricsParams.md @@ -0,0 +1,27 @@ +# Interface: GetEpochMetricsParams + +Return a list of epoch metrics, which is a subset of epoch info + +## Properties + +### cursor? + +> `optional` **cursor**: `null` \| `string` + +Optional paging cursor + +*** + +### limit? + +> `optional` **limit**: `null` \| `number` + +Maximum number of items per page + +*** + +### descendingOrder? + +> `optional` **descendingOrder**: `null` \| `boolean` + +Flag to return results in descending order diff --git a/docs/content/ts-sdk/api/client/interfaces/GetEpochsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetEpochsParams.md new file mode 100644 index 00000000000..f9ff4a31f18 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetEpochsParams.md @@ -0,0 +1,27 @@ +# Interface: GetEpochsParams + +Return a list of epoch info + +## Properties + +### cursor? + +> `optional` **cursor**: `null` \| `string` + +Optional paging cursor + +*** + +### limit? + +> `optional` **limit**: `null` \| `number` + +Maximum number of items per page + +*** + +### descendingOrder? + +> `optional` **descendingOrder**: `null` \| `boolean` + +Flag to return results in descending order diff --git a/docs/content/ts-sdk/api/client/interfaces/GetEventsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetEventsParams.md new file mode 100644 index 00000000000..275a989ed85 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetEventsParams.md @@ -0,0 +1,11 @@ +# Interface: GetEventsParams + +Return transaction events. + +## Properties + +### transactionDigest + +> **transactionDigest**: `string` + +the event query criteria. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetLatestAddressMetricsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetLatestAddressMetricsParams.md new file mode 100644 index 00000000000..487e885f696 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetLatestAddressMetricsParams.md @@ -0,0 +1,3 @@ +# Interface: GetLatestAddressMetricsParams + +Address related metrics diff --git a/docs/content/ts-sdk/api/client/interfaces/GetLatestCheckpointSequenceNumberParams.md b/docs/content/ts-sdk/api/client/interfaces/GetLatestCheckpointSequenceNumberParams.md new file mode 100644 index 00000000000..42747fcad47 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetLatestCheckpointSequenceNumberParams.md @@ -0,0 +1,3 @@ +# Interface: GetLatestCheckpointSequenceNumberParams + +Return the sequence number of the latest checkpoint that has been executed diff --git a/docs/content/ts-sdk/api/client/interfaces/GetLatestIotaSystemStateParams.md b/docs/content/ts-sdk/api/client/interfaces/GetLatestIotaSystemStateParams.md new file mode 100644 index 00000000000..60ec042acdd --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetLatestIotaSystemStateParams.md @@ -0,0 +1,3 @@ +# Interface: GetLatestIotaSystemStateParams + +Return the latest IOTA system state object on-chain. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetMoveCallMetricsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetMoveCallMetricsParams.md new file mode 100644 index 00000000000..435cf769e16 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetMoveCallMetricsParams.md @@ -0,0 +1,3 @@ +# Interface: GetMoveCallMetricsParams + +Return move call metrics diff --git a/docs/content/ts-sdk/api/client/interfaces/GetMoveFunctionArgTypesParams.md b/docs/content/ts-sdk/api/client/interfaces/GetMoveFunctionArgTypesParams.md new file mode 100644 index 00000000000..0289159c7ff --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetMoveFunctionArgTypesParams.md @@ -0,0 +1,21 @@ +# Interface: GetMoveFunctionArgTypesParams + +Return the argument types of a Move function, based on normalized Type. + +## Properties + +### package + +> **package**: `string` + +*** + +### module + +> **module**: `string` + +*** + +### function + +> **function**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/GetNetworkMetricsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetNetworkMetricsParams.md new file mode 100644 index 00000000000..94f16044ae3 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetNetworkMetricsParams.md @@ -0,0 +1,3 @@ +# Interface: GetNetworkMetricsParams + +Return Network metrics diff --git a/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveFunctionParams.md b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveFunctionParams.md new file mode 100644 index 00000000000..4d24ec2e49f --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveFunctionParams.md @@ -0,0 +1,21 @@ +# Interface: GetNormalizedMoveFunctionParams + +Return a structured representation of Move function + +## Properties + +### package + +> **package**: `string` + +*** + +### module + +> **module**: `string` + +*** + +### function + +> **function**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModuleParams.md b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModuleParams.md new file mode 100644 index 00000000000..1d3e76d4b77 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModuleParams.md @@ -0,0 +1,15 @@ +# Interface: GetNormalizedMoveModuleParams + +Return a structured representation of Move module + +## Properties + +### package + +> **package**: `string` + +*** + +### module + +> **module**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModulesByPackageParams.md b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModulesByPackageParams.md new file mode 100644 index 00000000000..d64eabe098a --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModulesByPackageParams.md @@ -0,0 +1,9 @@ +# Interface: GetNormalizedMoveModulesByPackageParams + +Return structured representations of all modules in the given package + +## Properties + +### package + +> **package**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveStructParams.md b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveStructParams.md new file mode 100644 index 00000000000..b2e5da10b09 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveStructParams.md @@ -0,0 +1,21 @@ +# Interface: GetNormalizedMoveStructParams + +Return a structured representation of Move struct + +## Properties + +### package + +> **package**: `string` + +*** + +### module + +> **module**: `string` + +*** + +### struct + +> **struct**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/GetObjectParams.md b/docs/content/ts-sdk/api/client/interfaces/GetObjectParams.md new file mode 100644 index 00000000000..d6ba43dd70d --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetObjectParams.md @@ -0,0 +1,19 @@ +# Interface: GetObjectParams + +Return the object information for a specified object + +## Properties + +### id + +> **id**: `string` + +the ID of the queried object + +*** + +### options? + +> `optional` **options**: `null` \| [`IotaObjectDataOptions`](IotaObjectDataOptions.md) + +options for specifying the content to be returned diff --git a/docs/content/ts-sdk/api/client/interfaces/GetPastObjectRequest.md b/docs/content/ts-sdk/api/client/interfaces/GetPastObjectRequest.md new file mode 100644 index 00000000000..e1850c270b1 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetPastObjectRequest.md @@ -0,0 +1,17 @@ +# Interface: GetPastObjectRequest + +## Properties + +### objectId + +> **objectId**: `string` + +the ID of the queried object + +*** + +### version + +> **version**: `string` + +the version of the queried object. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetProtocolConfigParams.md b/docs/content/ts-sdk/api/client/interfaces/GetProtocolConfigParams.md new file mode 100644 index 00000000000..19224f6e0d8 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetProtocolConfigParams.md @@ -0,0 +1,13 @@ +# Interface: GetProtocolConfigParams + +Return the protocol config table for the given version number. If the version number is not +specified, If none is specified, the node uses the version of the latest epoch it has processed. + +## Properties + +### version? + +> `optional` **version**: `null` \| `string` + +An optional protocol version specifier. If omitted, the latest protocol config table for the node +will be returned. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetReferenceGasPriceParams.md b/docs/content/ts-sdk/api/client/interfaces/GetReferenceGasPriceParams.md new file mode 100644 index 00000000000..726f8f17aee --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetReferenceGasPriceParams.md @@ -0,0 +1,3 @@ +# Interface: GetReferenceGasPriceParams + +Return the reference gas price for the network diff --git a/docs/content/ts-sdk/api/client/interfaces/GetStakesByIdsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetStakesByIdsParams.md new file mode 100644 index 00000000000..141035404c2 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetStakesByIdsParams.md @@ -0,0 +1,9 @@ +# Interface: GetStakesByIdsParams + +Return one or more [DelegatedStake]. If a Stake was withdrawn its status will be Unstaked. + +## Properties + +### stakedIotaIds + +> **stakedIotaIds**: `string`[] diff --git a/docs/content/ts-sdk/api/client/interfaces/GetStakesParams.md b/docs/content/ts-sdk/api/client/interfaces/GetStakesParams.md new file mode 100644 index 00000000000..2a8b1dc9c9e --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetStakesParams.md @@ -0,0 +1,9 @@ +# Interface: GetStakesParams + +Return all [DelegatedStake]. + +## Properties + +### owner + +> **owner**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/GetTimelockedStakesByIdsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetTimelockedStakesByIdsParams.md new file mode 100644 index 00000000000..a632c0fc887 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetTimelockedStakesByIdsParams.md @@ -0,0 +1,9 @@ +# Interface: GetTimelockedStakesByIdsParams + +Return one or more [DelegatedTimelockedStake]. If a Stake was withdrawn its status will be Unstaked. + +## Properties + +### timelockedStakedIotaIds + +> **timelockedStakedIotaIds**: `string`[] diff --git a/docs/content/ts-sdk/api/client/interfaces/GetTimelockedStakesParams.md b/docs/content/ts-sdk/api/client/interfaces/GetTimelockedStakesParams.md new file mode 100644 index 00000000000..dfb0a20d4e0 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetTimelockedStakesParams.md @@ -0,0 +1,9 @@ +# Interface: GetTimelockedStakesParams + +Return all [DelegatedTimelockedStake]. + +## Properties + +### owner + +> **owner**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/GetTotalSupplyParams.md b/docs/content/ts-sdk/api/client/interfaces/GetTotalSupplyParams.md new file mode 100644 index 00000000000..56a28352d08 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetTotalSupplyParams.md @@ -0,0 +1,11 @@ +# Interface: GetTotalSupplyParams + +Return total supply for a coin. + +## Properties + +### coinType + +> **coinType**: `string` + +type name for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC) diff --git a/docs/content/ts-sdk/api/client/interfaces/GetTotalTransactionBlocksParams.md b/docs/content/ts-sdk/api/client/interfaces/GetTotalTransactionBlocksParams.md new file mode 100644 index 00000000000..0a652fc5681 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetTotalTransactionBlocksParams.md @@ -0,0 +1,3 @@ +# Interface: GetTotalTransactionBlocksParams + +Return the total number of transaction blocks known to the server. diff --git a/docs/content/ts-sdk/api/client/interfaces/GetTotalTransactionsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetTotalTransactionsParams.md new file mode 100644 index 00000000000..fc4e2ee6e59 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetTotalTransactionsParams.md @@ -0,0 +1 @@ +# Interface: GetTotalTransactionsParams diff --git a/docs/content/ts-sdk/api/client/interfaces/GetTransactionBlockParams.md b/docs/content/ts-sdk/api/client/interfaces/GetTransactionBlockParams.md new file mode 100644 index 00000000000..fb612dfca60 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetTransactionBlockParams.md @@ -0,0 +1,19 @@ +# Interface: GetTransactionBlockParams + +Return the transaction response object. + +## Properties + +### digest + +> **digest**: `string` + +the digest of the queried transaction + +*** + +### options? + +> `optional` **options**: `null` \| [`IotaTransactionBlockResponseOptions`](IotaTransactionBlockResponseOptions.md) + +options for specifying the content to be returned diff --git a/docs/content/ts-sdk/api/client/interfaces/GetValidatorsApyParams.md b/docs/content/ts-sdk/api/client/interfaces/GetValidatorsApyParams.md new file mode 100644 index 00000000000..ae82c5de3e5 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/GetValidatorsApyParams.md @@ -0,0 +1,3 @@ +# Interface: GetValidatorsApyParams + +Return the validator APY diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaActiveJwk.md b/docs/content/ts-sdk/api/client/interfaces/IotaActiveJwk.md new file mode 100644 index 00000000000..5d44ec83e01 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaActiveJwk.md @@ -0,0 +1,19 @@ +# Interface: IotaActiveJwk + +## Properties + +### epoch + +> **epoch**: `string` + +*** + +### jwk + +> **jwk**: [`IotaJWK`](IotaJWK.md) + +*** + +### jwk\_id + +> **jwk\_id**: [`IotaJwkId`](IotaJwkId.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaAuthenticatorStateExpire.md b/docs/content/ts-sdk/api/client/interfaces/IotaAuthenticatorStateExpire.md new file mode 100644 index 00000000000..15c3c2fdbe7 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaAuthenticatorStateExpire.md @@ -0,0 +1,7 @@ +# Interface: IotaAuthenticatorStateExpire + +## Properties + +### min\_epoch + +> **min\_epoch**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaChangeEpoch.md b/docs/content/ts-sdk/api/client/interfaces/IotaChangeEpoch.md new file mode 100644 index 00000000000..8fa0b9ebdf5 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaChangeEpoch.md @@ -0,0 +1,31 @@ +# Interface: IotaChangeEpoch + +## Properties + +### computation\_charge + +> **computation\_charge**: `string` + +*** + +### epoch + +> **epoch**: `string` + +*** + +### epoch\_start\_timestamp\_ms + +> **epoch\_start\_timestamp\_ms**: `string` + +*** + +### storage\_charge + +> **storage\_charge**: `string` + +*** + +### storage\_rebate + +> **storage\_rebate**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaEvent.md b/docs/content/ts-sdk/api/client/interfaces/IotaEvent.md new file mode 100644 index 00000000000..08098cc5221 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaEvent.md @@ -0,0 +1,67 @@ +# Interface: IotaEvent + +## Properties + +### bcs + +> **bcs**: `string` + +Base 58 encoded bcs bytes of the move event + +*** + +### id + +> **id**: [`EventId`](EventId.md) + +Sequential event ID, ie (transaction seq number, event seq number). 1) Serves as a unique event ID +for each fullnode 2) Also serves to sequence events for the purposes of pagination and querying. A +higher id is an event seen later by that fullnode. This ID is the "cursor" for event querying. + +*** + +### packageId + +> **packageId**: `string` + +Move package where this event was emitted. + +*** + +### parsedJson + +> **parsedJson**: `unknown` + +Parsed json value of the event + +*** + +### sender + +> **sender**: `string` + +Sender's Iota address. + +*** + +### timestampMs? + +> `optional` **timestampMs**: `null` \| `string` + +UTC timestamp in milliseconds since epoch (1/1/1970) + +*** + +### transactionModule + +> **transactionModule**: `string` + +Move module where this event was emitted. + +*** + +### type + +> **type**: `string` + +Move event type. diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaExecutionResult.md b/docs/content/ts-sdk/api/client/interfaces/IotaExecutionResult.md new file mode 100644 index 00000000000..59690f2c949 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaExecutionResult.md @@ -0,0 +1,17 @@ +# Interface: IotaExecutionResult + +## Properties + +### mutableReferenceOutputs? + +> `optional` **mutableReferenceOutputs**: [[`IotaArgument`](../type-aliases/IotaArgument.md), `number`[], `string`][] + +The value of any arguments that were mutably borrowed. Non-mut borrowed values are not included + +*** + +### returnValues? + +> `optional` **returnValues**: [`number`[], `string`][] + +The return values from the transaction diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaGasData.md b/docs/content/ts-sdk/api/client/interfaces/IotaGasData.md new file mode 100644 index 00000000000..11c96ce7342 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaGasData.md @@ -0,0 +1,25 @@ +# Interface: IotaGasData + +## Properties + +### budget + +> **budget**: `string` + +*** + +### owner + +> **owner**: `string` + +*** + +### payment + +> **payment**: [`IotaObjectRef`](IotaObjectRef.md)[] + +*** + +### price + +> **price**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaHTTPTransportOptions.md b/docs/content/ts-sdk/api/client/interfaces/IotaHTTPTransportOptions.md new file mode 100644 index 00000000000..d408bca6e42 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaHTTPTransportOptions.md @@ -0,0 +1,97 @@ +# Interface: IotaHTTPTransportOptions + +## Properties + +### fetch()? + +> `optional` **fetch**: (`input`, `init`?) => `Promise`\<`Response`\>(`input`, `init`?) => `Promise`\<`Response`\> + +[MDN Reference](https://developer.mozilla.org/docs/Web/API/fetch) + +#### Parameters + +• **input**: `URL` \| `RequestInfo` + +• **init?**: `RequestInit` + +#### Returns + +`Promise`\<`Response`\> + +#### Parameters + +• **input**: `string` \| `URL` \| `Request` + +• **init?**: `RequestInit` + +#### Returns + +`Promise`\<`Response`\> + +*** + +### WebSocketConstructor()? + +> `optional` **WebSocketConstructor**: (`url`, `protocols`?) => `WebSocket` + +#### Parameters + +• **url**: `string` \| `URL` + +• **protocols?**: `string` \| `string`[] + +#### Returns + +`WebSocket` + +#### prototype + +> **prototype**: `WebSocket` + +#### CONNECTING + +> `readonly` **CONNECTING**: `0` + +#### OPEN + +> `readonly` **OPEN**: `1` + +#### CLOSING + +> `readonly` **CLOSING**: `2` + +#### CLOSED + +> `readonly` **CLOSED**: `3` + +*** + +### url + +> **url**: `string` + +*** + +### rpc? + +> `optional` **rpc**: `object` + +#### headers? + +> `optional` **headers**: [`HttpHeaders`](../type-aliases/HttpHeaders.md) + +#### url? + +> `optional` **url**: `string` + +*** + +### websocket? + +> `optional` **websocket**: `WebsocketClientOptions` & `object` + +#### Type declaration + +##### url? + +> `optional` **url**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaJWK.md b/docs/content/ts-sdk/api/client/interfaces/IotaJWK.md new file mode 100644 index 00000000000..233df48b15f --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaJWK.md @@ -0,0 +1,25 @@ +# Interface: IotaJWK + +## Properties + +### alg + +> **alg**: `string` + +*** + +### e + +> **e**: `string` + +*** + +### kty + +> **kty**: `string` + +*** + +### n + +> **n**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaJwkId.md b/docs/content/ts-sdk/api/client/interfaces/IotaJwkId.md new file mode 100644 index 00000000000..dea80ddd64a --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaJwkId.md @@ -0,0 +1,13 @@ +# Interface: IotaJwkId + +## Properties + +### iss + +> **iss**: `string` + +*** + +### kid + +> **kid**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveAbilitySet.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveAbilitySet.md new file mode 100644 index 00000000000..99dbd56a4c1 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveAbilitySet.md @@ -0,0 +1,7 @@ +# Interface: IotaMoveAbilitySet + +## Properties + +### abilities + +> **abilities**: [`IotaMoveAbility`](../type-aliases/IotaMoveAbility.md)[] diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveModuleId.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveModuleId.md new file mode 100644 index 00000000000..88942b2e965 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveModuleId.md @@ -0,0 +1,13 @@ +# Interface: IotaMoveModuleId + +## Properties + +### address + +> **address**: `string` + +*** + +### name + +> **name**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedField.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedField.md new file mode 100644 index 00000000000..c3a73f4de0e --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedField.md @@ -0,0 +1,13 @@ +# Interface: IotaMoveNormalizedField + +## Properties + +### name + +> **name**: `string` + +*** + +### type + +> **type**: [`IotaMoveNormalizedType`](../type-aliases/IotaMoveNormalizedType.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedFunction.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedFunction.md new file mode 100644 index 00000000000..aabbf5de551 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedFunction.md @@ -0,0 +1,31 @@ +# Interface: IotaMoveNormalizedFunction + +## Properties + +### isEntry + +> **isEntry**: `boolean` + +*** + +### parameters + +> **parameters**: [`IotaMoveNormalizedType`](../type-aliases/IotaMoveNormalizedType.md)[] + +*** + +### return + +> **return**: [`IotaMoveNormalizedType`](../type-aliases/IotaMoveNormalizedType.md)[] + +*** + +### typeParameters + +> **typeParameters**: [`IotaMoveAbilitySet`](IotaMoveAbilitySet.md)[] + +*** + +### visibility + +> **visibility**: [`IotaMoveVisibility`](../type-aliases/IotaMoveVisibility.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedModule.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedModule.md new file mode 100644 index 00000000000..aa957e05069 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedModule.md @@ -0,0 +1,45 @@ +# Interface: IotaMoveNormalizedModule + +## Properties + +### address + +> **address**: `string` + +*** + +### exposedFunctions + +> **exposedFunctions**: `object` + +#### Index Signature + + \[`key`: `string`\]: [`IotaMoveNormalizedFunction`](IotaMoveNormalizedFunction.md) + +*** + +### fileFormatVersion + +> **fileFormatVersion**: `number` + +*** + +### friends + +> **friends**: [`IotaMoveModuleId`](IotaMoveModuleId.md)[] + +*** + +### name + +> **name**: `string` + +*** + +### structs + +> **structs**: `object` + +#### Index Signature + + \[`key`: `string`\]: [`IotaMoveNormalizedStruct`](IotaMoveNormalizedStruct.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedStruct.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedStruct.md new file mode 100644 index 00000000000..9685e3df879 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedStruct.md @@ -0,0 +1,19 @@ +# Interface: IotaMoveNormalizedStruct + +## Properties + +### abilities + +> **abilities**: [`IotaMoveAbilitySet`](IotaMoveAbilitySet.md) + +*** + +### fields + +> **fields**: [`IotaMoveNormalizedField`](IotaMoveNormalizedField.md)[] + +*** + +### typeParameters + +> **typeParameters**: [`IotaMoveStructTypeParameter`](IotaMoveStructTypeParameter.md)[] diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveStructTypeParameter.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveStructTypeParameter.md new file mode 100644 index 00000000000..e992b5cdf0b --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveStructTypeParameter.md @@ -0,0 +1,13 @@ +# Interface: IotaMoveStructTypeParameter + +## Properties + +### constraints + +> **constraints**: [`IotaMoveAbilitySet`](IotaMoveAbilitySet.md) + +*** + +### isPhantom + +> **isPhantom**: `boolean` diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaObjectData.md b/docs/content/ts-sdk/api/client/interfaces/IotaObjectData.md new file mode 100644 index 00000000000..14445f71607 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaObjectData.md @@ -0,0 +1,85 @@ +# Interface: IotaObjectData + +## Properties + +### bcs? + +> `optional` **bcs**: `null` \| [`RawData`](../type-aliases/RawData.md) + +Move object content or package content in BCS, default to be None unless +IotaObjectDataOptions.showBcs is set to true + +*** + +### content? + +> `optional` **content**: `null` \| [`IotaParsedData`](../type-aliases/IotaParsedData.md) + +Move object content or package content, default to be None unless IotaObjectDataOptions.showContent +is set to true + +*** + +### digest + +> **digest**: `string` + +Base64 string representing the object digest + +*** + +### display? + +> `optional` **display**: `null` \| [`DisplayFieldsResponse`](DisplayFieldsResponse.md) + +The Display metadata for frontend UI rendering, default to be None unless +IotaObjectDataOptions.showContent is set to true This can also be None if the struct type does not +have Display defined See more details in + +*** + +### objectId + +> **objectId**: `string` + +*** + +### owner? + +> `optional` **owner**: `null` \| [`ObjectOwner`](../type-aliases/ObjectOwner.md) + +The owner of this object. Default to be None unless IotaObjectDataOptions.showOwner is set to true + +*** + +### previousTransaction? + +> `optional` **previousTransaction**: `null` \| `string` + +The digest of the transaction that created or last mutated this object. Default to be None unless +IotaObjectDataOptions. showPreviousTransaction is set to true + +*** + +### storageRebate? + +> `optional` **storageRebate**: `null` \| `string` + +The amount of IOTA we would rebate if this object gets deleted. This number is re-calculated each +time the object is mutated based on the present storage gas price. + +*** + +### type? + +> `optional` **type**: `null` \| `string` + +The type of the object. Default to be None unless IotaObjectDataOptions.showType is set to true + +*** + +### version + +> **version**: `string` + +Object version. diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaObjectDataOptions.md b/docs/content/ts-sdk/api/client/interfaces/IotaObjectDataOptions.md new file mode 100644 index 00000000000..5e04d42facc --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaObjectDataOptions.md @@ -0,0 +1,58 @@ +# Interface: IotaObjectDataOptions + +## Properties + +### showBcs? + +> `optional` **showBcs**: `boolean` + +Whether to show the content in BCS format. Default to be False + +*** + +### showContent? + +> `optional` **showContent**: `boolean` + +Whether to show the content(i.e., package content or Move struct content) of the object. Default to +be False + +*** + +### showDisplay? + +> `optional` **showDisplay**: `boolean` + +Whether to show the Display metadata of the object for frontend rendering. Default to be False + +*** + +### showOwner? + +> `optional` **showOwner**: `boolean` + +Whether to show the owner of the object. Default to be False + +*** + +### showPreviousTransaction? + +> `optional` **showPreviousTransaction**: `boolean` + +Whether to show the previous transaction digest of the object. Default to be False + +*** + +### showStorageRebate? + +> `optional` **showStorageRebate**: `boolean` + +Whether to show the storage rebate of the object. Default to be False + +*** + +### showType? + +> `optional` **showType**: `boolean` + +Whether to show the type of the object. Default to be False diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaObjectRef.md b/docs/content/ts-sdk/api/client/interfaces/IotaObjectRef.md new file mode 100644 index 00000000000..b7218bb9dff --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaObjectRef.md @@ -0,0 +1,25 @@ +# Interface: IotaObjectRef + +## Properties + +### digest + +> **digest**: `string` + +Base64 string representing the object digest + +*** + +### objectId + +> **objectId**: `string` + +Hex code as string representing the object id + +*** + +### version + +> **version**: `string` + +Object version. diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaObjectResponse.md b/docs/content/ts-sdk/api/client/interfaces/IotaObjectResponse.md new file mode 100644 index 00000000000..6c0ca45c6f8 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaObjectResponse.md @@ -0,0 +1,13 @@ +# Interface: IotaObjectResponse + +## Properties + +### data? + +> `optional` **data**: `null` \| [`IotaObjectData`](IotaObjectData.md) + +*** + +### error? + +> `optional` **error**: `null` \| [`ObjectResponseError`](../type-aliases/ObjectResponseError.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaObjectResponseQuery.md b/docs/content/ts-sdk/api/client/interfaces/IotaObjectResponseQuery.md new file mode 100644 index 00000000000..c3f62c9da0e --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaObjectResponseQuery.md @@ -0,0 +1,17 @@ +# Interface: IotaObjectResponseQuery + +## Properties + +### filter? + +> `optional` **filter**: `null` \| [`IotaObjectDataFilter`](../type-aliases/IotaObjectDataFilter.md) + +If None, no filter will be applied + +*** + +### options? + +> `optional` **options**: `null` \| [`IotaObjectDataOptions`](IotaObjectDataOptions.md) + +config which fields to include in the response, by default only digest is included diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaSystemStateSummary.md b/docs/content/ts-sdk/api/client/interfaces/IotaSystemStateSummary.md new file mode 100644 index 00000000000..f60fb5fd7d2 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaSystemStateSummary.md @@ -0,0 +1,288 @@ +# Interface: IotaSystemStateSummary + +This is the JSON-RPC type for the IOTA system state object. It flattens all fields to make them +top-level fields such that it as minimum dependencies to the internal data structures of the IOTA +system state type. + +## Properties + +### activeValidators + +> **activeValidators**: [`IotaValidatorSummary`](IotaValidatorSummary.md)[] + +The list of active validators in the current epoch. + +*** + +### atRiskValidators + +> **atRiskValidators**: [`string`, `string`][] + +Map storing the number of epochs for which each validator has been below the low stake threshold. + +*** + +### epoch + +> **epoch**: `string` + +The current epoch ID, starting from 0. + +*** + +### epochDurationMs + +> **epochDurationMs**: `string` + +The duration of an epoch, in milliseconds. + +*** + +### epochStartTimestampMs + +> **epochStartTimestampMs**: `string` + +Unix timestamp of the current epoch start + +*** + +### inactivePoolsId + +> **inactivePoolsId**: `string` + +ID of the object that maps from a staking pool ID to the inactive validator that has that pool as +its staking pool. + +*** + +### inactivePoolsSize + +> **inactivePoolsSize**: `string` + +Number of inactive staking pools. + +*** + +### iotaTotalSupply + +> **iotaTotalSupply**: `string` + +The current IOTA supply. + +*** + +### iotaTreasuryCapId + +> **iotaTreasuryCapId**: `string` + +The `TreasuryCap` object ID. + +*** + +### maxValidatorCount + +> **maxValidatorCount**: `string` + +Maximum number of active validators at any moment. We do not allow the number of validators in any +epoch to go above this. + +*** + +### minValidatorCount + +> **minValidatorCount**: `string` + +Minimum number of active validators at any moment. We do not allow the number of validators in any +epoch to go under this. + +*** + +### minValidatorJoiningStake + +> **minValidatorJoiningStake**: `string` + +Lower-bound on the amount of stake required to become a validator. + +*** + +### pendingActiveValidatorsId + +> **pendingActiveValidatorsId**: `string` + +ID of the object that contains the list of new validators that will join at the end of the epoch. + +*** + +### pendingActiveValidatorsSize + +> **pendingActiveValidatorsSize**: `string` + +Number of new validators that will join at the end of the epoch. + +*** + +### pendingRemovals + +> **pendingRemovals**: `string`[] + +Removal requests from the validators. Each element is an index pointing to `active_validators`. + +*** + +### protocolVersion + +> **protocolVersion**: `string` + +The current protocol version, starting from 1. + +*** + +### referenceGasPrice + +> **referenceGasPrice**: `string` + +The reference gas price for the current epoch. + +*** + +### safeMode + +> **safeMode**: `boolean` + +Whether the system is running in a downgraded safe mode due to a non-recoverable bug. This is set +whenever we failed to execute advance_epoch, and ended up executing advance_epoch_safe_mode. It can +be reset once we are able to successfully execute advance_epoch. + +*** + +### safeModeComputationRewards + +> **safeModeComputationRewards**: `string` + +Amount of computation rewards accumulated (and not yet distributed) during safe mode. + +*** + +### safeModeNonRefundableStorageFee + +> **safeModeNonRefundableStorageFee**: `string` + +Amount of non-refundable storage fee accumulated during safe mode. + +*** + +### safeModeStorageCharges + +> **safeModeStorageCharges**: `string` + +Amount of storage charges accumulated (and not yet distributed) during safe mode. + +*** + +### safeModeStorageRebates + +> **safeModeStorageRebates**: `string` + +Amount of storage rebates accumulated (and not yet burned) during safe mode. + +*** + +### stakingPoolMappingsId + +> **stakingPoolMappingsId**: `string` + +ID of the object that maps from staking pool's ID to the iota address of a validator. + +*** + +### stakingPoolMappingsSize + +> **stakingPoolMappingsSize**: `string` + +Number of staking pool mappings. + +*** + +### storageFundNonRefundableBalance + +> **storageFundNonRefundableBalance**: `string` + +The non-refundable portion of the storage fund coming from non-refundable storage rebates and any +leftover staking rewards. + +*** + +### storageFundTotalObjectStorageRebates + +> **storageFundTotalObjectStorageRebates**: `string` + +The storage rebates of all the objects on-chain stored in the storage fund. + +*** + +### systemStateVersion + +> **systemStateVersion**: `string` + +The current version of the system state data structure type. + +*** + +### totalStake + +> **totalStake**: `string` + +Total amount of stake from all active validators at the beginning of the epoch. + +*** + +### validatorCandidatesId + +> **validatorCandidatesId**: `string` + +ID of the object that stores preactive validators, mapping their addresses to their `Validator` +structs. + +*** + +### validatorCandidatesSize + +> **validatorCandidatesSize**: `string` + +Number of preactive validators. + +*** + +### validatorLowStakeGracePeriod + +> **validatorLowStakeGracePeriod**: `string` + +A validator can have stake below `validator_low_stake_threshold` for this many epochs before being +kicked out. + +*** + +### validatorLowStakeThreshold + +> **validatorLowStakeThreshold**: `string` + +Validators with stake amount below `validator_low_stake_threshold` are considered to have low stake +and will be escorted out of the validator set after being below this threshold for more than +`validator_low_stake_grace_period` number of epochs. + +*** + +### validatorReportRecords + +> **validatorReportRecords**: [`string`, `string`[]][] + +A map storing the records of validator reporting each other. + +*** + +### validatorVeryLowStakeThreshold + +> **validatorVeryLowStakeThreshold**: `string` + +Validators with stake below `validator_very_low_stake_threshold` will be removed immediately at +epoch change, no grace period. diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlock.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlock.md new file mode 100644 index 00000000000..1d4f0d4e124 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlock.md @@ -0,0 +1,13 @@ +# Interface: IotaTransactionBlock + +## Properties + +### data + +> **data**: [`TransactionBlockData`](../type-aliases/TransactionBlockData.md) + +*** + +### txSignatures + +> **txSignatures**: `string`[] diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponse.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponse.md new file mode 100644 index 00000000000..738c4f39e80 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponse.md @@ -0,0 +1,81 @@ +# Interface: IotaTransactionBlockResponse + +## Properties + +### balanceChanges? + +> `optional` **balanceChanges**: `null` \| [`BalanceChange`](BalanceChange.md)[] + +*** + +### checkpoint? + +> `optional` **checkpoint**: `null` \| `string` + +The checkpoint number when this transaction was included and hence finalized. This is only returned +in the read api, not in the transaction execution api. + +*** + +### confirmedLocalExecution? + +> `optional` **confirmedLocalExecution**: `null` \| `boolean` + +*** + +### digest + +> **digest**: `string` + +*** + +### effects? + +> `optional` **effects**: `null` \| [`TransactionEffects`](../type-aliases/TransactionEffects.md) + +*** + +### errors? + +> `optional` **errors**: `string`[] + +*** + +### events? + +> `optional` **events**: `null` \| [`IotaEvent`](IotaEvent.md)[] + +*** + +### objectChanges? + +> `optional` **objectChanges**: `null` \| [`IotaObjectChange`](../type-aliases/IotaObjectChange.md)[] + +*** + +### rawEffects? + +> `optional` **rawEffects**: `number`[] + +*** + +### rawTransaction? + +> `optional` **rawTransaction**: `string` + +BCS encoded [SenderSignedData] that includes input object references returns empty array if +`show_raw_transaction` is false + +*** + +### timestampMs? + +> `optional` **timestampMs**: `null` \| `string` + +*** + +### transaction? + +> `optional` **transaction**: `null` \| [`IotaTransactionBlock`](IotaTransactionBlock.md) + +Transaction input data diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseOptions.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseOptions.md new file mode 100644 index 00000000000..255f78745c2 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseOptions.md @@ -0,0 +1,57 @@ +# Interface: IotaTransactionBlockResponseOptions + +## Properties + +### showBalanceChanges? + +> `optional` **showBalanceChanges**: `boolean` + +Whether to show balance_changes. Default to be False + +*** + +### showEffects? + +> `optional` **showEffects**: `boolean` + +Whether to show transaction effects. Default to be False + +*** + +### showEvents? + +> `optional` **showEvents**: `boolean` + +Whether to show transaction events. Default to be False + +*** + +### showInput? + +> `optional` **showInput**: `boolean` + +Whether to show transaction input data. Default to be False + +*** + +### showObjectChanges? + +> `optional` **showObjectChanges**: `boolean` + +Whether to show object_changes. Default to be False + +*** + +### showRawEffects? + +> `optional` **showRawEffects**: `boolean` + +Whether to show raw transaction effects. Default to be False + +*** + +### showRawInput? + +> `optional` **showRawInput**: `boolean` + +Whether to show bcs-encoded transaction input data diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseQuery.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseQuery.md new file mode 100644 index 00000000000..861b61d980e --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseQuery.md @@ -0,0 +1,17 @@ +# Interface: IotaTransactionBlockResponseQuery + +## Properties + +### filter? + +> `optional` **filter**: `null` \| [`TransactionFilter`](../type-aliases/TransactionFilter.md) + +If None, no filter will be applied + +*** + +### options? + +> `optional` **options**: `null` \| [`IotaTransactionBlockResponseOptions`](IotaTransactionBlockResponseOptions.md) + +config which fields to include in the response, by default only digest is included diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransport.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransport.md new file mode 100644 index 00000000000..41045d4663c --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransport.md @@ -0,0 +1,37 @@ +# Interface: IotaTransport + +## Methods + +### request() + +> **request**\<`T`\>(`input`): `Promise`\<`T`\> + +#### Type Parameters + +• **T** = `unknown` + +#### Parameters + +• **input**: [`IotaTransportRequestOptions`](IotaTransportRequestOptions.md) + +#### Returns + +`Promise`\<`T`\> + +*** + +### subscribe() + +> **subscribe**\<`T`\>(`input`): `Promise`\<() => `Promise`\<`boolean`\>\> + +#### Type Parameters + +• **T** = `unknown` + +#### Parameters + +• **input**: [`IotaTransportSubscribeOptions`](IotaTransportSubscribeOptions.md)\<`T`\> + +#### Returns + +`Promise`\<() => `Promise`\<`boolean`\>\> diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransportRequestOptions.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransportRequestOptions.md new file mode 100644 index 00000000000..5319da2b482 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransportRequestOptions.md @@ -0,0 +1,13 @@ +# Interface: IotaTransportRequestOptions + +## Properties + +### method + +> **method**: `string` + +*** + +### params + +> **params**: `unknown`[] diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransportSubscribeOptions.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransportSubscribeOptions.md new file mode 100644 index 00000000000..b1255d4fb16 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransportSubscribeOptions.md @@ -0,0 +1,37 @@ +# Interface: IotaTransportSubscribeOptions\ + +## Type Parameters + +• **T** + +## Properties + +### method + +> **method**: `string` + +*** + +### unsubscribe + +> **unsubscribe**: `string` + +*** + +### params + +> **params**: `unknown`[] + +*** + +### onMessage() + +> **onMessage**: (`event`) => `void` + +#### Parameters + +• **event**: `T` + +#### Returns + +`void` diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaValidatorSummary.md b/docs/content/ts-sdk/api/client/interfaces/IotaValidatorSummary.md new file mode 100644 index 00000000000..e3eafd7aea0 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/IotaValidatorSummary.md @@ -0,0 +1,248 @@ +# Interface: IotaValidatorSummary + +This is the JSON-RPC type for the IOTA validator. It flattens all inner structures to top-level +fields so that they are decoupled from the internal definitions. + +## Properties + +### authorityPubkeyBytes + +> **authorityPubkeyBytes**: `string` + +*** + +### commissionRate + +> **commissionRate**: `string` + +*** + +### description + +> **description**: `string` + +*** + +### exchangeRatesId + +> **exchangeRatesId**: `string` + +ID of the exchange rate table object. + +*** + +### exchangeRatesSize + +> **exchangeRatesSize**: `string` + +Number of exchange rates in the table. + +*** + +### gasPrice + +> **gasPrice**: `string` + +*** + +### imageUrl + +> **imageUrl**: `string` + +*** + +### iotaAddress + +> **iotaAddress**: `string` + +*** + +### name + +> **name**: `string` + +*** + +### netAddress + +> **netAddress**: `string` + +*** + +### networkPubkeyBytes + +> **networkPubkeyBytes**: `string` + +*** + +### nextEpochAuthorityPubkeyBytes? + +> `optional` **nextEpochAuthorityPubkeyBytes**: `null` \| `string` + +*** + +### nextEpochCommissionRate + +> **nextEpochCommissionRate**: `string` + +*** + +### nextEpochGasPrice + +> **nextEpochGasPrice**: `string` + +*** + +### nextEpochNetAddress? + +> `optional` **nextEpochNetAddress**: `null` \| `string` + +*** + +### nextEpochNetworkPubkeyBytes? + +> `optional` **nextEpochNetworkPubkeyBytes**: `null` \| `string` + +*** + +### nextEpochP2pAddress? + +> `optional` **nextEpochP2pAddress**: `null` \| `string` + +*** + +### nextEpochPrimaryAddress? + +> `optional` **nextEpochPrimaryAddress**: `null` \| `string` + +*** + +### nextEpochProofOfPossession? + +> `optional` **nextEpochProofOfPossession**: `null` \| `string` + +*** + +### nextEpochProtocolPubkeyBytes? + +> `optional` **nextEpochProtocolPubkeyBytes**: `null` \| `string` + +*** + +### nextEpochStake + +> **nextEpochStake**: `string` + +*** + +### operationCapId + +> **operationCapId**: `string` + +*** + +### p2pAddress + +> **p2pAddress**: `string` + +*** + +### pendingPoolTokenWithdraw + +> **pendingPoolTokenWithdraw**: `string` + +Pending pool token withdrawn during the current epoch, emptied at epoch boundaries. + +*** + +### pendingStake + +> **pendingStake**: `string` + +Pending stake amount for this epoch. + +*** + +### pendingTotalIotaWithdraw + +> **pendingTotalIotaWithdraw**: `string` + +Pending stake withdrawn during the current epoch, emptied at epoch boundaries. + +*** + +### poolTokenBalance + +> **poolTokenBalance**: `string` + +Total number of pool tokens issued by the pool. + +*** + +### primaryAddress + +> **primaryAddress**: `string` + +*** + +### projectUrl + +> **projectUrl**: `string` + +*** + +### proofOfPossessionBytes + +> **proofOfPossessionBytes**: `string` + +*** + +### protocolPubkeyBytes + +> **protocolPubkeyBytes**: `string` + +*** + +### rewardsPool + +> **rewardsPool**: `string` + +The epoch stake rewards will be added here at the end of each epoch. + +*** + +### stakingPoolActivationEpoch? + +> `optional` **stakingPoolActivationEpoch**: `null` \| `string` + +The epoch at which this pool became active. + +*** + +### stakingPoolDeactivationEpoch? + +> `optional` **stakingPoolDeactivationEpoch**: `null` \| `string` + +The epoch at which this staking pool ceased to be active. `None` = {pre-active, active}, + +*** + +### stakingPoolId + +> **stakingPoolId**: `string` + +ID of the staking pool object. + +*** + +### stakingPoolIotaBalance + +> **stakingPoolIotaBalance**: `string` + +The total number of IOTA tokens in this pool. + +*** + +### votingPower + +> **votingPower**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/KioskConfiguration.md b/docs/content/ts-sdk/api/client/interfaces/KioskConfiguration.md new file mode 100644 index 00000000000..95d945fefd3 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/KioskConfiguration.md @@ -0,0 +1,25 @@ +# Interface: KioskConfiguration + +## Properties + +### royaltyRulePackageId + +> **royaltyRulePackageId**: `string` + +*** + +### kioskLockRulePackageId + +> **kioskLockRulePackageId**: `string` + +*** + +### floorPriceRulePackageId + +> **floorPriceRulePackageId**: `string` + +*** + +### personalKioskRulePackageId + +> **personalKioskRulePackageId**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/MoveCallIotaTransaction.md b/docs/content/ts-sdk/api/client/interfaces/MoveCallIotaTransaction.md new file mode 100644 index 00000000000..663712b6b49 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/MoveCallIotaTransaction.md @@ -0,0 +1,44 @@ +# Interface: MoveCallIotaTransaction + +The transaction for calling a Move function, either an entry function or a public function (which +cannot return references). + +## Properties + +### arguments? + +> `optional` **arguments**: [`IotaArgument`](../type-aliases/IotaArgument.md)[] + +The arguments to the function. + +*** + +### function + +> **function**: `string` + +The function to be called. + +*** + +### module + +> **module**: `string` + +The specific module in the package containing the function. + +*** + +### package + +> **package**: `string` + +The package containing the module and function. + +*** + +### type\_arguments? + +> `optional` **type\_arguments**: `string`[] + +The type arguments to the function. diff --git a/docs/content/ts-sdk/api/client/interfaces/MoveCallMetrics.md b/docs/content/ts-sdk/api/client/interfaces/MoveCallMetrics.md new file mode 100644 index 00000000000..56106539bca --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/MoveCallMetrics.md @@ -0,0 +1,25 @@ +# Interface: MoveCallMetrics + +## Properties + +### rank30Days + +> **rank30Days**: [[`MoveFunctionName`](MoveFunctionName.md), `string`][] + +The count of calls of each function in the last 30 days. + +*** + +### rank3Days + +> **rank3Days**: [[`MoveFunctionName`](MoveFunctionName.md), `string`][] + +The count of calls of each function in the last 3 days. + +*** + +### rank7Days + +> **rank7Days**: [[`MoveFunctionName`](MoveFunctionName.md), `string`][] + +The count of calls of each function in the last 7 days. diff --git a/docs/content/ts-sdk/api/client/interfaces/MoveCallParams.md b/docs/content/ts-sdk/api/client/interfaces/MoveCallParams.md new file mode 100644 index 00000000000..e82bc6928b6 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/MoveCallParams.md @@ -0,0 +1,31 @@ +# Interface: MoveCallParams + +## Properties + +### arguments + +> **arguments**: `unknown`[] + +*** + +### function + +> **function**: `string` + +*** + +### module + +> **module**: `string` + +*** + +### packageObjectId + +> **packageObjectId**: `string` + +*** + +### typeArguments? + +> `optional` **typeArguments**: `string`[] diff --git a/docs/content/ts-sdk/api/client/interfaces/MoveFunctionName.md b/docs/content/ts-sdk/api/client/interfaces/MoveFunctionName.md new file mode 100644 index 00000000000..47f89f35592 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/MoveFunctionName.md @@ -0,0 +1,27 @@ +# Interface: MoveFunctionName + +Identifies a Move function. + +## Properties + +### function + +> **function**: `string` + +The function name. + +*** + +### module + +> **module**: `string` + +The module name to which the function belongs. + +*** + +### package + +> **package**: `string` + +The package ID to which the function belongs. diff --git a/docs/content/ts-sdk/api/client/interfaces/MoveVariant.md b/docs/content/ts-sdk/api/client/interfaces/MoveVariant.md new file mode 100644 index 00000000000..8601e656bf3 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/MoveVariant.md @@ -0,0 +1,23 @@ +# Interface: MoveVariant + +## Properties + +### fields + +> **fields**: `object` + +#### Index Signature + + \[`key`: `string`\]: [`MoveValue`](../type-aliases/MoveValue.md) + +*** + +### type + +> **type**: `string` + +*** + +### variant + +> **variant**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/MultiGetObjectsParams.md b/docs/content/ts-sdk/api/client/interfaces/MultiGetObjectsParams.md new file mode 100644 index 00000000000..9380bfb1ab4 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/MultiGetObjectsParams.md @@ -0,0 +1,19 @@ +# Interface: MultiGetObjectsParams + +Return the object data for a list of objects + +## Properties + +### ids + +> **ids**: `string`[] + +the IDs of the queried objects + +*** + +### options? + +> `optional` **options**: `null` \| [`IotaObjectDataOptions`](IotaObjectDataOptions.md) + +options for specifying the content to be returned diff --git a/docs/content/ts-sdk/api/client/interfaces/MultiGetTransactionBlocksParams.md b/docs/content/ts-sdk/api/client/interfaces/MultiGetTransactionBlocksParams.md new file mode 100644 index 00000000000..f95edba27ac --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/MultiGetTransactionBlocksParams.md @@ -0,0 +1,20 @@ +# Interface: MultiGetTransactionBlocksParams + +Returns an ordered list of transaction responses The method will throw an error if the input +contains any duplicate or the input size exceeds QUERY_MAX_RESULT_LIMIT + +## Properties + +### digests + +> **digests**: `string`[] + +A list of transaction digests. + +*** + +### options? + +> `optional` **options**: `null` \| [`IotaTransactionBlockResponseOptions`](IotaTransactionBlockResponseOptions.md) + +config options to control which fields to fetch diff --git a/docs/content/ts-sdk/api/client/interfaces/MultiSig.md b/docs/content/ts-sdk/api/client/interfaces/MultiSig.md new file mode 100644 index 00000000000..fd9b1149186 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/MultiSig.md @@ -0,0 +1,28 @@ +# Interface: MultiSig + +The struct that contains signatures and public keys necessary for authenticating a MultiSig. + +## Properties + +### bitmap + +> **bitmap**: `number` + +A bitmap that indicates the position of which public key the signature should be authenticated with. + +*** + +### multisig\_pk + +> **multisig\_pk**: [`MultiSigPublicKey`](MultiSigPublicKey.md) + +The public key encoded with each public key with its signature scheme used along with the +corresponding weight. + +*** + +### sigs + +> **sigs**: [`CompressedSignature`](../type-aliases/CompressedSignature.md)[] + +The plain signature encoded with signature scheme. diff --git a/docs/content/ts-sdk/api/client/interfaces/MultiSigPublicKey.md b/docs/content/ts-sdk/api/client/interfaces/MultiSigPublicKey.md new file mode 100644 index 00000000000..ed50bda5b99 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/MultiSigPublicKey.md @@ -0,0 +1,20 @@ +# Interface: MultiSigPublicKey + +The struct that contains the public key used for authenticating a MultiSig. + +## Properties + +### pk\_map + +> **pk\_map**: [[`PublicKey`](../type-aliases/PublicKey.md), `number`][] + +A list of public key and its corresponding weight. + +*** + +### threshold + +> **threshold**: `number` + +If the total weight of the public keys corresponding to verified signatures is larger than +threshold, the MultiSig is verified. diff --git a/docs/content/ts-sdk/api/client/interfaces/NetworkConfiguration.md b/docs/content/ts-sdk/api/client/interfaces/NetworkConfiguration.md new file mode 100644 index 00000000000..47c2846d1b5 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/NetworkConfiguration.md @@ -0,0 +1,43 @@ +# Interface: NetworkConfiguration + +## Properties + +### id + +> **id**: [`Network`](../enumerations/Network.md) + +*** + +### name + +> **name**: `string` + +*** + +### url + +> **url**: `string` + +*** + +### explorer + +> **explorer**: `string` + +*** + +### chain + +> **chain**: \`$\{string\}:$\{string\}\` + +*** + +### faucet? + +> `optional` **faucet**: `string` + +*** + +### kiosk? + +> `optional` **kiosk**: [`KioskConfiguration`](KioskConfiguration.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/NetworkMetrics.md b/docs/content/ts-sdk/api/client/interfaces/NetworkMetrics.md new file mode 100644 index 00000000000..72bd9ef422e --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/NetworkMetrics.md @@ -0,0 +1,57 @@ +# Interface: NetworkMetrics + +## Properties + +### currentCheckpoint + +> **currentCheckpoint**: `string` + +Current checkpoint number + +*** + +### currentEpoch + +> **currentEpoch**: `string` + +Current epoch number + +*** + +### currentTps + +> **currentTps**: `number` + +Current TPS - Transaction Blocks per Second. + +*** + +### totalAddresses + +> **totalAddresses**: `string` + +Total number of addresses seen in the network + +*** + +### totalObjects + +> **totalObjects**: `string` + +Total number of live objects in the network + +*** + +### totalPackages + +> **totalPackages**: `string` + +Total number of packages published in the network + +*** + +### tps30Days + +> **tps30Days**: `number` + +Peak TPS in the past 30 days diff --git a/docs/content/ts-sdk/api/client/interfaces/OrderArguments.md b/docs/content/ts-sdk/api/client/interfaces/OrderArguments.md new file mode 100644 index 00000000000..2a7e253eee2 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/OrderArguments.md @@ -0,0 +1,7 @@ +# Interface: OrderArguments + +## Properties + +### order? + +> `optional` **order**: `null` \| [`Order`](../type-aliases/Order.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/OwnedObjectRef.md b/docs/content/ts-sdk/api/client/interfaces/OwnedObjectRef.md new file mode 100644 index 00000000000..2d3a35e1ff6 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/OwnedObjectRef.md @@ -0,0 +1,13 @@ +# Interface: OwnedObjectRef + +## Properties + +### owner + +> **owner**: [`ObjectOwner`](../type-aliases/ObjectOwner.md) + +*** + +### reference + +> **reference**: [`IotaObjectRef`](IotaObjectRef.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedCheckpoints.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedCheckpoints.md new file mode 100644 index 00000000000..8b2b208a5df --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedCheckpoints.md @@ -0,0 +1,23 @@ +# Interface: PaginatedCheckpoints + +`next_cursor` points to the last item in the page; Reading with `next_cursor` will start from the +next item after `next_cursor` if `next_cursor` is `Some`, otherwise it will start from the first +item. + +## Properties + +### data + +> **data**: [`Checkpoint`](Checkpoint.md)[] + +*** + +### hasNextPage + +> **hasNextPage**: `boolean` + +*** + +### nextCursor? + +> `optional` **nextCursor**: `null` \| `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedCoins.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedCoins.md new file mode 100644 index 00000000000..b8fcba18ef3 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedCoins.md @@ -0,0 +1,23 @@ +# Interface: PaginatedCoins + +`next_cursor` points to the last item in the page; Reading with `next_cursor` will start from the +next item after `next_cursor` if `next_cursor` is `Some`, otherwise it will start from the first +item. + +## Properties + +### data + +> **data**: [`CoinStruct`](CoinStruct.md)[] + +*** + +### hasNextPage + +> **hasNextPage**: `boolean` + +*** + +### nextCursor? + +> `optional` **nextCursor**: `null` \| `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedDynamicFieldInfos.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedDynamicFieldInfos.md new file mode 100644 index 00000000000..dab8592bd03 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedDynamicFieldInfos.md @@ -0,0 +1,23 @@ +# Interface: PaginatedDynamicFieldInfos + +`next_cursor` points to the last item in the page; Reading with `next_cursor` will start from the +next item after `next_cursor` if `next_cursor` is `Some`, otherwise it will start from the first +item. + +## Properties + +### data + +> **data**: [`DynamicFieldInfo`](DynamicFieldInfo.md)[] + +*** + +### hasNextPage + +> **hasNextPage**: `boolean` + +*** + +### nextCursor? + +> `optional` **nextCursor**: `null` \| `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochInfos.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochInfos.md new file mode 100644 index 00000000000..b88b8b4fac6 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochInfos.md @@ -0,0 +1,23 @@ +# Interface: PaginatedEpochInfos + +`next_cursor` points to the last item in the page; Reading with `next_cursor` will start from the +next item after `next_cursor` if `next_cursor` is `Some`, otherwise it will start from the first +item. + +## Properties + +### data + +> **data**: [`EpochInfo`](EpochInfo.md)[] + +*** + +### hasNextPage + +> **hasNextPage**: `boolean` + +*** + +### nextCursor? + +> `optional` **nextCursor**: `null` \| `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochMetricss.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochMetricss.md new file mode 100644 index 00000000000..baa1bc69ed2 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochMetricss.md @@ -0,0 +1,23 @@ +# Interface: PaginatedEpochMetricss + +`next_cursor` points to the last item in the page; Reading with `next_cursor` will start from the +next item after `next_cursor` if `next_cursor` is `Some`, otherwise it will start from the first +item. + +## Properties + +### data + +> **data**: [`EpochMetrics`](EpochMetrics.md)[] + +*** + +### hasNextPage + +> **hasNextPage**: `boolean` + +*** + +### nextCursor? + +> `optional` **nextCursor**: `null` \| `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedEvents.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedEvents.md new file mode 100644 index 00000000000..466b734ff92 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedEvents.md @@ -0,0 +1,23 @@ +# Interface: PaginatedEvents + +`next_cursor` points to the last item in the page; Reading with `next_cursor` will start from the +next item after `next_cursor` if `next_cursor` is `Some`, otherwise it will start from the first +item. + +## Properties + +### data + +> **data**: [`IotaEvent`](IotaEvent.md)[] + +*** + +### hasNextPage + +> **hasNextPage**: `boolean` + +*** + +### nextCursor? + +> `optional` **nextCursor**: `null` \| [`EventId`](EventId.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedObjectsResponse.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedObjectsResponse.md new file mode 100644 index 00000000000..5af524f6f4f --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedObjectsResponse.md @@ -0,0 +1,23 @@ +# Interface: PaginatedObjectsResponse + +`next_cursor` points to the last item in the page; Reading with `next_cursor` will start from the +next item after `next_cursor` if `next_cursor` is `Some`, otherwise it will start from the first +item. + +## Properties + +### data + +> **data**: [`IotaObjectResponse`](IotaObjectResponse.md)[] + +*** + +### hasNextPage + +> **hasNextPage**: `boolean` + +*** + +### nextCursor? + +> `optional` **nextCursor**: `null` \| `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedTransactionResponse.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedTransactionResponse.md new file mode 100644 index 00000000000..6a0c9d1ddf4 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedTransactionResponse.md @@ -0,0 +1,23 @@ +# Interface: PaginatedTransactionResponse + +`next_cursor` points to the last item in the page; Reading with `next_cursor` will start from the +next item after `next_cursor` if `next_cursor` is `Some`, otherwise it will start from the first +item. + +## Properties + +### data + +> **data**: [`IotaTransactionBlockResponse`](IotaTransactionBlockResponse.md)[] + +*** + +### hasNextPage + +> **hasNextPage**: `boolean` + +*** + +### nextCursor? + +> `optional` **nextCursor**: `null` \| `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginationArguments.md b/docs/content/ts-sdk/api/client/interfaces/PaginationArguments.md new file mode 100644 index 00000000000..ca95555bc07 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/PaginationArguments.md @@ -0,0 +1,21 @@ +# Interface: PaginationArguments\ + +## Type Parameters + +• **Cursor** + +## Properties + +### cursor? + +> `optional` **cursor**: `Cursor` + +Optional paging cursor + +*** + +### limit? + +> `optional` **limit**: `null` \| `number` + +Maximum item returned per page diff --git a/docs/content/ts-sdk/api/client/interfaces/PasskeyAuthenticator.md b/docs/content/ts-sdk/api/client/interfaces/PasskeyAuthenticator.md new file mode 100644 index 00000000000..525adc0a0a3 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/PasskeyAuthenticator.md @@ -0,0 +1,24 @@ +# Interface: PasskeyAuthenticator + +An passkey authenticator with parsed fields. See field definition below. Can be initialized from +[struct RawPasskeyAuthenticator]. + +## Properties + +### authenticator\_data + +> **authenticator\_data**: `number`[] + +`authenticatorData` is a bytearray that encodes +[Authenticator Data](https://www.w3.org/TR/webauthn-2/#sctn-authenticator-data) structure returned +by the authenticator attestation response as is. + +*** + +### client\_data\_json + +> **client\_data\_json**: `string` + +`clientDataJSON` contains a JSON-compatible UTF-8 encoded string of the client data which is passed +to the authenticator by the client during the authentication request (see +[CollectedClientData](https://www.w3.org/TR/webauthn-2/#dictdef-collectedclientdata)) diff --git a/docs/content/ts-sdk/api/client/interfaces/ProtocolConfig.md b/docs/content/ts-sdk/api/client/interfaces/ProtocolConfig.md new file mode 100644 index 00000000000..f2b754a2b14 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/ProtocolConfig.md @@ -0,0 +1,39 @@ +# Interface: ProtocolConfig + +## Properties + +### attributes + +> **attributes**: `object` + +#### Index Signature + + \[`key`: `string`\]: [`ProtocolConfigValue`](../type-aliases/ProtocolConfigValue.md) \| `null` + +*** + +### featureFlags + +> **featureFlags**: `object` + +#### Index Signature + + \[`key`: `string`\]: `boolean` + +*** + +### maxSupportedProtocolVersion + +> **maxSupportedProtocolVersion**: `string` + +*** + +### minSupportedProtocolVersion + +> **minSupportedProtocolVersion**: `string` + +*** + +### protocolVersion + +> **protocolVersion**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/QueryEventsParams.md b/docs/content/ts-sdk/api/client/interfaces/QueryEventsParams.md new file mode 100644 index 00000000000..adef58b1892 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/QueryEventsParams.md @@ -0,0 +1,36 @@ +# Interface: QueryEventsParams + +Return list of events for a specified query criteria. + +## Properties + +### query + +> **query**: [`IotaEventFilter`](../type-aliases/IotaEventFilter.md) + +The event query criteria. See [Event filter](https://docs.iota.io/build/event_api#event-filters) +documentation for examples. + +*** + +### cursor? + +> `optional` **cursor**: `null` \| [`EventId`](EventId.md) + +optional paging cursor + +*** + +### limit? + +> `optional` **limit**: `null` \| `number` + +maximum number of items per page, default to [QUERY_MAX_RESULT_LIMIT] if not specified. + +*** + +### order? + +> `optional` **order**: `null` \| `"ascending"` \| `"descending"` + +query result ordering, default to false (ascending order), oldest record first. diff --git a/docs/content/ts-sdk/api/client/interfaces/SubscribeEventParams.md b/docs/content/ts-sdk/api/client/interfaces/SubscribeEventParams.md new file mode 100644 index 00000000000..2791f02043e --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/SubscribeEventParams.md @@ -0,0 +1,12 @@ +# Interface: SubscribeEventParams + +Subscribe to a stream of Iota event + +## Properties + +### filter + +> **filter**: [`IotaEventFilter`](../type-aliases/IotaEventFilter.md) + +The filter criteria of the event stream. See +[Event filter](https://docs.iota.io/build/event_api#event-filters) documentation for examples. diff --git a/docs/content/ts-sdk/api/client/interfaces/SubscribeTransactionParams.md b/docs/content/ts-sdk/api/client/interfaces/SubscribeTransactionParams.md new file mode 100644 index 00000000000..080041b1f59 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/SubscribeTransactionParams.md @@ -0,0 +1,9 @@ +# Interface: SubscribeTransactionParams + +Subscribe to a stream of Iota transaction effects + +## Properties + +### filter + +> **filter**: [`TransactionFilter`](../type-aliases/TransactionFilter.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/TransactionBlockBytes.md b/docs/content/ts-sdk/api/client/interfaces/TransactionBlockBytes.md new file mode 100644 index 00000000000..abecce14546 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/TransactionBlockBytes.md @@ -0,0 +1,25 @@ +# Interface: TransactionBlockBytes + +## Properties + +### gas + +> **gas**: [`IotaObjectRef`](IotaObjectRef.md)[] + +the gas objects to be used + +*** + +### inputObjects + +> **inputObjects**: [`InputObjectKind`](../type-aliases/InputObjectKind.md)[] + +objects to be used in this transaction + +*** + +### txBytes + +> **txBytes**: `string` + +BCS serialized transaction data bytes without its type tag, as base-64 encoded string. diff --git a/docs/content/ts-sdk/api/client/interfaces/TransactionBlockEffectsModifiedAtVersions.md b/docs/content/ts-sdk/api/client/interfaces/TransactionBlockEffectsModifiedAtVersions.md new file mode 100644 index 00000000000..1699c8e7879 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/TransactionBlockEffectsModifiedAtVersions.md @@ -0,0 +1,13 @@ +# Interface: TransactionBlockEffectsModifiedAtVersions + +## Properties + +### objectId + +> **objectId**: `string` + +*** + +### sequenceNumber + +> **sequenceNumber**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/TransferObjectParams.md b/docs/content/ts-sdk/api/client/interfaces/TransferObjectParams.md new file mode 100644 index 00000000000..45afcde17a6 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/TransferObjectParams.md @@ -0,0 +1,13 @@ +# Interface: TransferObjectParams + +## Properties + +### objectId + +> **objectId**: `string` + +*** + +### recipient + +> **recipient**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/TryGetPastObjectParams.md b/docs/content/ts-sdk/api/client/interfaces/TryGetPastObjectParams.md new file mode 100644 index 00000000000..b894ecdf62f --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/TryGetPastObjectParams.md @@ -0,0 +1,29 @@ +# Interface: TryGetPastObjectParams + +Note there is no software-level guarantee/SLA that objects with past versions can be retrieved by +this API, even if the object and version exists/existed. The result may vary across nodes depending +on their pruning policies. Return the object information for a specified version + +## Properties + +### id + +> **id**: `string` + +the ID of the queried object + +*** + +### version + +> **version**: `number` + +the version of the queried object. If None, default to the latest known version + +*** + +### options? + +> `optional` **options**: `null` \| [`IotaObjectDataOptions`](IotaObjectDataOptions.md) + +options for specifying the content to be returned diff --git a/docs/content/ts-sdk/api/client/interfaces/TryMultiGetPastObjectsParams.md b/docs/content/ts-sdk/api/client/interfaces/TryMultiGetPastObjectsParams.md new file mode 100644 index 00000000000..a3ed052b346 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/TryMultiGetPastObjectsParams.md @@ -0,0 +1,21 @@ +# Interface: TryMultiGetPastObjectsParams + +Note there is no software-level guarantee/SLA that objects with past versions can be retrieved by +this API, even if the object and version exists/existed. The result may vary across nodes depending +on their pruning policies. Return the object information for a specified version + +## Properties + +### pastObjects + +> **pastObjects**: [`GetPastObjectRequest`](GetPastObjectRequest.md)[] + +a vector of object and versions to be queried + +*** + +### options? + +> `optional` **options**: `null` \| [`IotaObjectDataOptions`](IotaObjectDataOptions.md) + +options for specifying the content to be returned diff --git a/docs/content/ts-sdk/api/client/interfaces/TypeOrigin.md b/docs/content/ts-sdk/api/client/interfaces/TypeOrigin.md new file mode 100644 index 00000000000..0ed5c86e8e6 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/TypeOrigin.md @@ -0,0 +1,21 @@ +# Interface: TypeOrigin + +Identifies a struct and the module it was defined in + +## Properties + +### datatype\_name + +> **datatype\_name**: `string` + +*** + +### module\_name + +> **module\_name**: `string` + +*** + +### package + +> **package**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeBatchTransactionParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeBatchTransactionParams.md new file mode 100644 index 00000000000..3a466d9c34c --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeBatchTransactionParams.md @@ -0,0 +1,44 @@ +# Interface: UnsafeBatchTransactionParams + +Create an unsigned batched transaction. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### singleTransactionParams + +> **singleTransactionParams**: [`RPCTransactionRequestParams`](../type-aliases/RPCTransactionRequestParams.md)[] + +list of transaction request parameters + +*** + +### gas? + +> `optional` **gas**: `null` \| `string` + +gas object to be used in this transaction, node will pick one from the signer's possession if not +provided + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget + +*** + +### txnBuilderMode? + +> `optional` **txnBuilderMode**: `null` \| [`IotaTransactionBlockBuilderMode`](../type-aliases/IotaTransactionBlockBuilderMode.md) + +Whether this is a regular transaction or a Dev Inspect Transaction diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeMergeCoinsParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeMergeCoinsParams.md new file mode 100644 index 00000000000..fa45fbf60fe --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeMergeCoinsParams.md @@ -0,0 +1,45 @@ +# Interface: UnsafeMergeCoinsParams + +Create an unsigned transaction to merge multiple coins into one coin. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### primaryCoin + +> **primaryCoin**: `string` + +the coin object to merge into, this coin will remain after the transaction + +*** + +### coinToMerge + +> **coinToMerge**: `string` + +the coin object to be merged, this coin will be destroyed, the balance will be added to +`primary_coin` + +*** + +### gas? + +> `optional` **gas**: `null` \| `string` + +gas object to be used in this transaction, node will pick one from the signer's possession if not +provided + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeMoveCallParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeMoveCallParams.md new file mode 100644 index 00000000000..ab7e3502514 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeMoveCallParams.md @@ -0,0 +1,79 @@ +# Interface: UnsafeMoveCallParams + +Create an unsigned transaction to execute a Move call on the network, by calling the specified +function in the module of a given package. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### packageObjectId + +> **packageObjectId**: `string` + +the Move package ID, e.g. `0x2` + +*** + +### module + +> **module**: `string` + +the Move module name, e.g. `pay` + +*** + +### function + +> **function**: `string` + +the move function name, e.g. `split` + +*** + +### typeArguments + +> **typeArguments**: `string`[] + +the type arguments of the Move function + +*** + +### arguments + +> **arguments**: `unknown`[] + +the arguments to be passed into the Move function, in +[IotaJson](https://docs.iota.io/build/iota-json) format + +*** + +### gas? + +> `optional` **gas**: `null` \| `string` + +gas object to be used in this transaction, node will pick one from the signer's possession if not +provided + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget + +*** + +### executionMode? + +> `optional` **executionMode**: `null` \| [`IotaTransactionBlockBuilderMode`](../type-aliases/IotaTransactionBlockBuilderMode.md) + +Whether this is a Normal transaction or a Dev Inspect Transaction. Default to be +`IotaTransactionBlockBuilderMode::Commit` when it's None. diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafePayAllIotaParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafePayAllIotaParams.md new file mode 100644 index 00000000000..603e5946d54 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafePayAllIotaParams.md @@ -0,0 +1,39 @@ +# Interface: UnsafePayAllIotaParams + +Send all IOTA coins to one recipient. This is for IOTA coin only and does not require a separate gas +coin object. Specifically, what pay_all_iota does are: 1. accumulate all IOTA from input coins and +deposit all IOTA to the first input coin 2. transfer the updated first coin to the recipient and +also use this first coin as gas coin object. 3. the balance of the first input coin after tx is +sum(input_coins) - actual_gas_cost. 4. all other input coins other than the first are deleted. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### inputCoins + +> **inputCoins**: `string`[] + +the Iota coins to be used in this transaction, including the coin for gas payment. + +*** + +### recipient + +> **recipient**: `string` + +the recipient address, + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafePayIotaParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafePayIotaParams.md new file mode 100644 index 00000000000..97fe6f3c7f6 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafePayIotaParams.md @@ -0,0 +1,49 @@ +# Interface: UnsafePayIotaParams + +Send IOTA coins to a list of addresses, following a list of amounts. This is for IOTA coin only and +does not require a separate gas coin object. Specifically, what pay_iota does are: 1. debit each +input_coin to create new coin following the order of amounts and assign it to the corresponding +recipient. 2. accumulate all residual IOTA from input coins left and deposit all IOTA to the first +input coin, then use the first input coin as the gas coin object. 3. the balance of the first input +coin after tx is sum(input_coins) - sum(amounts) - actual_gas_cost 4. all other input coints other +than the first one are deleted. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### inputCoins + +> **inputCoins**: `string`[] + +the Iota coins to be used in this transaction, including the coin for gas payment. + +*** + +### recipients + +> **recipients**: `string`[] + +the recipients' addresses, the length of this vector must be the same as amounts. + +*** + +### amounts + +> **amounts**: `string`[] + +the amounts to be transferred to recipients, following the same order + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafePayParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafePayParams.md new file mode 100644 index 00000000000..4f276f48632 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafePayParams.md @@ -0,0 +1,55 @@ +# Interface: UnsafePayParams + +Send `Coin` to a list of addresses, where `T` can be any coin type, following a list of amounts, +The object specified in the `gas` field will be used to pay the gas fee for the transaction. The gas +object can not appear in `input_coins`. If the gas object is not specified, the RPC server will +auto-select one. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### inputCoins + +> **inputCoins**: `string`[] + +the Iota coins to be used in this transaction + +*** + +### recipients + +> **recipients**: `string`[] + +the recipients' addresses, the length of this vector must be the same as amounts. + +*** + +### amounts + +> **amounts**: `string`[] + +the amounts to be transferred to recipients, following the same order + +*** + +### gas? + +> `optional` **gas**: `null` \| `string` + +gas object to be used in this transaction, node will pick one from the signer's possession if not +provided + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafePublishParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafePublishParams.md new file mode 100644 index 00000000000..4989c078307 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafePublishParams.md @@ -0,0 +1,44 @@ +# Interface: UnsafePublishParams + +Create an unsigned transaction to publish a Move package. + +## Properties + +### sender + +> **sender**: `string` + +the transaction signer's Iota address + +*** + +### compiledModules + +> **compiledModules**: `string`[] + +the compiled bytes of a Move package + +*** + +### dependencies + +> **dependencies**: `string`[] + +a list of transitive dependency addresses that this set of modules depends on. + +*** + +### gas? + +> `optional` **gas**: `null` \| `string` + +gas object to be used in this transaction, node will pick one from the signer's possession if not +provided + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddStakeParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddStakeParams.md new file mode 100644 index 00000000000..2f51a1c5fac --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddStakeParams.md @@ -0,0 +1,52 @@ +# Interface: UnsafeRequestAddStakeParams + +Add stake to a validator's staking pool using multiple coins and amount. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### coins + +> **coins**: `string`[] + +Coin object to stake + +*** + +### amount? + +> `optional` **amount**: `null` \| `string` + +stake amount + +*** + +### validator + +> **validator**: `string` + +the validator's Iota address + +*** + +### gas? + +> `optional` **gas**: `null` \| `string` + +gas object to be used in this transaction, node will pick one from the signer's possession if not +provided + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddTimelockedStakeParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddTimelockedStakeParams.md new file mode 100644 index 00000000000..dde17b26b43 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddTimelockedStakeParams.md @@ -0,0 +1,43 @@ +# Interface: UnsafeRequestAddTimelockedStakeParams + +Add timelocked stake to a validator's staking pool using multiple balances and amount. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### lockedBalance + +> **lockedBalance**: `string` + +TimeLock> object to stake + +*** + +### validator + +> **validator**: `string` + +the validator's Iota address + +*** + +### gas + +> **gas**: `string` + +gas object to be used in this transaction + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawStakeParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawStakeParams.md new file mode 100644 index 00000000000..68cd26201d7 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawStakeParams.md @@ -0,0 +1,36 @@ +# Interface: UnsafeRequestWithdrawStakeParams + +Withdraw stake from a validator's staking pool. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### stakedIota + +> **stakedIota**: `string` + +StakedIota object ID + +*** + +### gas? + +> `optional` **gas**: `null` \| `string` + +gas object to be used in this transaction, node will pick one from the signer's possession if not +provided + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawTimelockedStakeParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawTimelockedStakeParams.md new file mode 100644 index 00000000000..29aa9a32a0e --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawTimelockedStakeParams.md @@ -0,0 +1,35 @@ +# Interface: UnsafeRequestWithdrawTimelockedStakeParams + +Withdraw timelocked stake from a validator's staking pool. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### timelockedStakedIota + +> **timelockedStakedIota**: `string` + +TimelockedStakedIota object ID + +*** + +### gas + +> **gas**: `string` + +gas object to be used in this transaction + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinEqualParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinEqualParams.md new file mode 100644 index 00000000000..411d9170f4a --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinEqualParams.md @@ -0,0 +1,44 @@ +# Interface: UnsafeSplitCoinEqualParams + +Create an unsigned transaction to split a coin object into multiple equal-size coins. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### coinObjectId + +> **coinObjectId**: `string` + +the coin object to be spilt + +*** + +### splitCount + +> **splitCount**: `string` + +the number of coins to split into + +*** + +### gas? + +> `optional` **gas**: `null` \| `string` + +gas object to be used in this transaction, node will pick one from the signer's possession if not +provided + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinParams.md new file mode 100644 index 00000000000..b2e1524a687 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinParams.md @@ -0,0 +1,44 @@ +# Interface: UnsafeSplitCoinParams + +Create an unsigned transaction to split a coin object into multiple coins. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### coinObjectId + +> **coinObjectId**: `string` + +the coin object to be spilt + +*** + +### splitAmounts + +> **splitAmounts**: `string`[] + +the amounts to split out from the coin + +*** + +### gas? + +> `optional` **gas**: `null` \| `string` + +gas object to be used in this transaction, node will pick one from the signer's possession if not +provided + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferIotaParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferIotaParams.md new file mode 100644 index 00000000000..8f0ff7a2260 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferIotaParams.md @@ -0,0 +1,44 @@ +# Interface: UnsafeTransferIotaParams + +Create an unsigned transaction to send IOTA coin object to a Iota address. The IOTA object is also +used as the gas object. + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### iotaObjectId + +> **iotaObjectId**: `string` + +the Iota coin object to be used in this transaction + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget + +*** + +### recipient + +> **recipient**: `string` + +the recipient's Iota address + +*** + +### amount? + +> `optional` **amount**: `null` \| `string` + +the amount to be split out and transferred diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferObjectParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferObjectParams.md new file mode 100644 index 00000000000..ea774edd8c8 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferObjectParams.md @@ -0,0 +1,45 @@ +# Interface: UnsafeTransferObjectParams + +Create an unsigned transaction to transfer an object from one address to another. The object's type +must allow public transfers + +## Properties + +### signer + +> **signer**: `string` + +the transaction signer's Iota address + +*** + +### objectId + +> **objectId**: `string` + +the ID of the object to be transferred + +*** + +### gas? + +> `optional` **gas**: `null` \| `string` + +gas object to be used in this transaction, node will pick one from the signer's possession if not +provided + +*** + +### gasBudget + +> **gasBudget**: `string` + +the gas budget, the transaction will fail if the gas cost exceed the budget + +*** + +### recipient + +> **recipient**: `string` + +the recipient's Iota address diff --git a/docs/content/ts-sdk/api/client/interfaces/UpgradeInfo.md b/docs/content/ts-sdk/api/client/interfaces/UpgradeInfo.md new file mode 100644 index 00000000000..44fb3358eb1 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/UpgradeInfo.md @@ -0,0 +1,19 @@ +# Interface: UpgradeInfo + +Upgraded package info for the linkage table + +## Properties + +### upgraded\_id + +> **upgraded\_id**: `string` + +ID of the upgraded packages + +*** + +### upgraded\_version + +> **upgraded\_version**: `string` + +Version of the upgraded package diff --git a/docs/content/ts-sdk/api/client/interfaces/ValidatorApy.md b/docs/content/ts-sdk/api/client/interfaces/ValidatorApy.md new file mode 100644 index 00000000000..0c707fe1ffd --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/ValidatorApy.md @@ -0,0 +1,13 @@ +# Interface: ValidatorApy + +## Properties + +### address + +> **address**: `string` + +*** + +### apy + +> **apy**: `number` diff --git a/docs/content/ts-sdk/api/client/interfaces/ValidatorsApy.md b/docs/content/ts-sdk/api/client/interfaces/ValidatorsApy.md new file mode 100644 index 00000000000..39c08fca3ab --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/ValidatorsApy.md @@ -0,0 +1,13 @@ +# Interface: ValidatorsApy + +## Properties + +### apys + +> **apys**: [`ValidatorApy`](ValidatorApy.md)[] + +*** + +### epoch + +> **epoch**: `string` diff --git a/docs/content/ts-sdk/api/client/interfaces/ZkLoginAuthenticator.md b/docs/content/ts-sdk/api/client/interfaces/ZkLoginAuthenticator.md new file mode 100644 index 00000000000..f044cf83b6b --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/ZkLoginAuthenticator.md @@ -0,0 +1,21 @@ +# Interface: ZkLoginAuthenticator + +An zk login authenticator with all the necessary fields. + +## Properties + +### inputs + +> **inputs**: [`ZkLoginInputs`](ZkLoginInputs.md) + +*** + +### maxEpoch + +> **maxEpoch**: `string` + +*** + +### userSignature + +> **userSignature**: [`Signature`](../type-aliases/Signature.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/ZkLoginInputs.md b/docs/content/ts-sdk/api/client/interfaces/ZkLoginInputs.md new file mode 100644 index 00000000000..adaffa1f419 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/ZkLoginInputs.md @@ -0,0 +1,27 @@ +# Interface: ZkLoginInputs + +All inputs required for the zk login proof verification and other public inputs. + +## Properties + +### addressSeed + +> **addressSeed**: `string` + +*** + +### headerBase64 + +> **headerBase64**: `string` + +*** + +### issBase64Details + +> **issBase64Details**: [`Claim`](Claim.md) + +*** + +### proofPoints + +> **proofPoints**: [`ZkLoginProof`](ZkLoginProof.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/ZkLoginProof.md b/docs/content/ts-sdk/api/client/interfaces/ZkLoginProof.md new file mode 100644 index 00000000000..4a980d122d3 --- /dev/null +++ b/docs/content/ts-sdk/api/client/interfaces/ZkLoginProof.md @@ -0,0 +1,21 @@ +# Interface: ZkLoginProof + +The struct for zk login proof. + +## Properties + +### a + +> **a**: `string`[] + +*** + +### b + +> **b**: `string`[][] + +*** + +### c + +> **c**: `string`[] diff --git a/docs/content/ts-sdk/api/client/type-aliases/AllEpochsAddressMetrics.md b/docs/content/ts-sdk/api/client/type-aliases/AllEpochsAddressMetrics.md new file mode 100644 index 00000000000..66824162015 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/AllEpochsAddressMetrics.md @@ -0,0 +1,3 @@ +# Type Alias: AllEpochsAddressMetrics + +> **AllEpochsAddressMetrics**: [`AddressMetrics`](../interfaces/AddressMetrics.md)[] diff --git a/docs/content/ts-sdk/api/client/type-aliases/ChainType.md b/docs/content/ts-sdk/api/client/type-aliases/ChainType.md new file mode 100644 index 00000000000..0f161fc3552 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/ChainType.md @@ -0,0 +1,3 @@ +# Type Alias: ChainType + +> **ChainType**: \`$\{string\}:$\{string\}\` diff --git a/docs/content/ts-sdk/api/client/type-aliases/CheckpointCommitment.md b/docs/content/ts-sdk/api/client/type-aliases/CheckpointCommitment.md new file mode 100644 index 00000000000..7e3a5c89f1e --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/CheckpointCommitment.md @@ -0,0 +1,9 @@ +# Type Alias: CheckpointCommitment + +> **CheckpointCommitment**: `object` + +## Type declaration + +### ECMHLiveObjectSetDigest + +> **ECMHLiveObjectSetDigest**: [`ECMHLiveObjectSetDigest`](../interfaces/ECMHLiveObjectSetDigest.md) diff --git a/docs/content/ts-sdk/api/client/type-aliases/CheckpointId.md b/docs/content/ts-sdk/api/client/type-aliases/CheckpointId.md new file mode 100644 index 00000000000..ccd838ad71f --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/CheckpointId.md @@ -0,0 +1,3 @@ +# Type Alias: CheckpointId + +> **CheckpointId**: `string` \| `string` diff --git a/docs/content/ts-sdk/api/client/type-aliases/CheckpointPage.md b/docs/content/ts-sdk/api/client/type-aliases/CheckpointPage.md new file mode 100644 index 00000000000..37ceab5fa74 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/CheckpointPage.md @@ -0,0 +1,17 @@ +# Type Alias: CheckpointPage + +> **CheckpointPage**: `object` + +## Type declaration + +### data + +> **data**: [`Checkpoint`](../interfaces/Checkpoint.md)[] + +### nextCursor + +> **nextCursor**: `string` \| `null` + +### hasNextPage + +> **hasNextPage**: `boolean` diff --git a/docs/content/ts-sdk/api/client/type-aliases/CoinBalance.md b/docs/content/ts-sdk/api/client/type-aliases/CoinBalance.md new file mode 100644 index 00000000000..d732ee8b9c4 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/CoinBalance.md @@ -0,0 +1,17 @@ +# Type Alias: CoinBalance + +> **CoinBalance**: `object` + +## Type declaration + +### coinType + +> **coinType**: `string` + +### coinObjectCount + +> **coinObjectCount**: `number` + +### totalBalance + +> **totalBalance**: `string` diff --git a/docs/content/ts-sdk/api/client/type-aliases/CompressedSignature.md b/docs/content/ts-sdk/api/client/type-aliases/CompressedSignature.md new file mode 100644 index 00000000000..8a5bdd2ac41 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/CompressedSignature.md @@ -0,0 +1,5 @@ +# Type Alias: CompressedSignature + +> **CompressedSignature**: `object` \| `object` \| `object` \| `object` + +Unlike [enum Signature], [enum CompressedSignature] does not contain public key. diff --git a/docs/content/ts-sdk/api/client/type-aliases/ConsensusDeterminedVersionAssignments.md b/docs/content/ts-sdk/api/client/type-aliases/ConsensusDeterminedVersionAssignments.md new file mode 100644 index 00000000000..c183c48de8d --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/ConsensusDeterminedVersionAssignments.md @@ -0,0 +1,11 @@ +# Type Alias: ConsensusDeterminedVersionAssignments + +> **ConsensusDeterminedVersionAssignments**: `object` + +Uses an enum to allow for future expansion of the ConsensusDeterminedVersionAssignments. + +## Type declaration + +### CancelledTransactions + +> **CancelledTransactions**: [`string`, [`string`, `string`][]][] diff --git a/docs/content/ts-sdk/api/client/type-aliases/DynamicFieldPage.md b/docs/content/ts-sdk/api/client/type-aliases/DynamicFieldPage.md new file mode 100644 index 00000000000..50cf6e7176c --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/DynamicFieldPage.md @@ -0,0 +1,17 @@ +# Type Alias: DynamicFieldPage + +> **DynamicFieldPage**: `object` + +## Type declaration + +### data + +> **data**: [`DynamicFieldInfo`](../interfaces/DynamicFieldInfo.md)[] + +### nextCursor + +> **nextCursor**: `string` \| `null` + +### hasNextPage + +> **hasNextPage**: `boolean` diff --git a/docs/content/ts-sdk/api/client/type-aliases/DynamicFieldType.md b/docs/content/ts-sdk/api/client/type-aliases/DynamicFieldType.md new file mode 100644 index 00000000000..e5229fba910 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/DynamicFieldType.md @@ -0,0 +1,3 @@ +# Type Alias: DynamicFieldType + +> **DynamicFieldType**: `"DynamicField"` \| `"DynamicObject"` diff --git a/docs/content/ts-sdk/api/client/type-aliases/EpochMetricsPage.md b/docs/content/ts-sdk/api/client/type-aliases/EpochMetricsPage.md new file mode 100644 index 00000000000..5d4d5f7fd02 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/EpochMetricsPage.md @@ -0,0 +1,17 @@ +# Type Alias: EpochMetricsPage + +> **EpochMetricsPage**: `object` + +## Type declaration + +### data + +> **data**: [`EpochMetrics`](../interfaces/EpochMetrics.md)[] + +### nextCursor + +> **nextCursor**: `string` \| `null` + +### hasNextPage + +> **hasNextPage**: `boolean` diff --git a/docs/content/ts-sdk/api/client/type-aliases/EpochPage.md b/docs/content/ts-sdk/api/client/type-aliases/EpochPage.md new file mode 100644 index 00000000000..8ced10634fb --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/EpochPage.md @@ -0,0 +1,17 @@ +# Type Alias: EpochPage + +> **EpochPage**: `object` + +## Type declaration + +### data + +> **data**: [`EpochInfo`](../interfaces/EpochInfo.md)[] + +### nextCursor + +> **nextCursor**: `string` \| `null` + +### hasNextPage + +> **hasNextPage**: `boolean` diff --git a/docs/content/ts-sdk/api/client/type-aliases/ExecuteTransactionRequestType.md b/docs/content/ts-sdk/api/client/type-aliases/ExecuteTransactionRequestType.md new file mode 100644 index 00000000000..66c07a62f2a --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/ExecuteTransactionRequestType.md @@ -0,0 +1,3 @@ +# Type Alias: ExecuteTransactionRequestType + +> **ExecuteTransactionRequestType**: `"WaitForEffectsCert"` \| `"WaitForLocalExecution"` diff --git a/docs/content/ts-sdk/api/client/type-aliases/ExecutionStatus.md b/docs/content/ts-sdk/api/client/type-aliases/ExecutionStatus.md new file mode 100644 index 00000000000..9053a7504ab --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/ExecutionStatus.md @@ -0,0 +1,13 @@ +# Type Alias: ExecutionStatus + +> **ExecutionStatus**: `object` + +## Type declaration + +### status + +> **status**: `"success"` \| `"failure"` + +### error? + +> `optional` **error**: `string` diff --git a/docs/content/ts-sdk/api/client/type-aliases/GetOwnedObjectsParams.md b/docs/content/ts-sdk/api/client/type-aliases/GetOwnedObjectsParams.md new file mode 100644 index 00000000000..cb5aaab254e --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/GetOwnedObjectsParams.md @@ -0,0 +1,28 @@ +# Type Alias: GetOwnedObjectsParams + +> **GetOwnedObjectsParams**: `object` & [`IotaObjectResponseQuery`](../interfaces/IotaObjectResponseQuery.md) + +Return the list of objects owned by an address. Note that if the address owns more than +`QUERY_MAX_RESULT_LIMIT` objects, the pagination is not accurate, because previous page may have +been updated when the next page is fetched. Please use iotax_queryObjects if this is a concern. + +## Type declaration + +### owner + +> **owner**: `string` + +the owner's Iota address + +### cursor? + +> `optional` **cursor**: `string` \| `null` + +An optional paging cursor. If provided, the query will start from the next item after the specified +cursor. Default to start from the first item if not specified. + +### limit? + +> `optional` **limit**: `number` \| `null` + +Max number of items returned per page, default to [QUERY_MAX_RESULT_LIMIT] if not specified. diff --git a/docs/content/ts-sdk/api/client/type-aliases/HttpHeaders.md b/docs/content/ts-sdk/api/client/type-aliases/HttpHeaders.md new file mode 100644 index 00000000000..cc536244663 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/HttpHeaders.md @@ -0,0 +1,9 @@ +# Type Alias: HttpHeaders + +> **HttpHeaders**: `object` + +An object defining headers to be passed to the RPC server + +## Index Signature + + \[`header`: `string`\]: `string` diff --git a/docs/content/ts-sdk/api/client/type-aliases/InputObjectKind.md b/docs/content/ts-sdk/api/client/type-aliases/InputObjectKind.md new file mode 100644 index 00000000000..b6282ac6bac --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/InputObjectKind.md @@ -0,0 +1,3 @@ +# Type Alias: InputObjectKind + +> **InputObjectKind**: `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaArgument.md b/docs/content/ts-sdk/api/client/type-aliases/IotaArgument.md new file mode 100644 index 00000000000..527b7c68812 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaArgument.md @@ -0,0 +1,5 @@ +# Type Alias: IotaArgument + +> **IotaArgument**: `"GasCoin"` \| `object` \| `object` \| `object` + +An argument to a transaction in a programmable transaction block diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaCallArg.md b/docs/content/ts-sdk/api/client/type-aliases/IotaCallArg.md new file mode 100644 index 00000000000..43b055efa61 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaCallArg.md @@ -0,0 +1,3 @@ +# Type Alias: IotaCallArg + +> **IotaCallArg**: `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaClientOptions.md b/docs/content/ts-sdk/api/client/type-aliases/IotaClientOptions.md new file mode 100644 index 00000000000..90678e95f1a --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaClientOptions.md @@ -0,0 +1,6 @@ +# Type Alias: IotaClientOptions + +> **IotaClientOptions**: `NetworkOrTransport` + +Configuration options for the IotaClient +You must provide either a `url` or a `transport` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaEndOfEpochTransactionKind.md b/docs/content/ts-sdk/api/client/type-aliases/IotaEndOfEpochTransactionKind.md new file mode 100644 index 00000000000..e4e87103982 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaEndOfEpochTransactionKind.md @@ -0,0 +1,3 @@ +# Type Alias: IotaEndOfEpochTransactionKind + +> **IotaEndOfEpochTransactionKind**: `"AuthenticatorStateCreate"` \| `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaEventFilter.md b/docs/content/ts-sdk/api/client/type-aliases/IotaEventFilter.md new file mode 100644 index 00000000000..029499c5617 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaEventFilter.md @@ -0,0 +1,3 @@ +# Type Alias: IotaEventFilter + +> **IotaEventFilter**: `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaMoveAbility.md b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveAbility.md new file mode 100644 index 00000000000..d3a71608f39 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveAbility.md @@ -0,0 +1,3 @@ +# Type Alias: IotaMoveAbility + +> **IotaMoveAbility**: `"Copy"` \| `"Drop"` \| `"Store"` \| `"Key"` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaMoveFunctionArgType.md b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveFunctionArgType.md new file mode 100644 index 00000000000..eedf2ab093d --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveFunctionArgType.md @@ -0,0 +1,3 @@ +# Type Alias: IotaMoveFunctionArgType + +> **IotaMoveFunctionArgType**: `"Pure"` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaMoveNormalizedModules.md b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveNormalizedModules.md new file mode 100644 index 00000000000..536db7d4d35 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveNormalizedModules.md @@ -0,0 +1,3 @@ +# Type Alias: IotaMoveNormalizedModules + +> **IotaMoveNormalizedModules**: `Record`\<`string`, [`IotaMoveNormalizedModule`](../interfaces/IotaMoveNormalizedModule.md)\> diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaMoveNormalizedType.md b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveNormalizedType.md new file mode 100644 index 00000000000..511c6533d98 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveNormalizedType.md @@ -0,0 +1,3 @@ +# Type Alias: IotaMoveNormalizedType + +> **IotaMoveNormalizedType**: `"Bool"` \| `"U8"` \| `"U16"` \| `"U32"` \| `"U64"` \| `"U128"` \| `"U256"` \| `"Address"` \| `"Signer"` \| `object` \| `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaMoveObject.md b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveObject.md new file mode 100644 index 00000000000..3fd6b213bde --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveObject.md @@ -0,0 +1,3 @@ +# Type Alias: IotaMoveObject + +> **IotaMoveObject**: `Extract`\<[`IotaParsedData`](IotaParsedData.md), `object`\> diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaMovePackage.md b/docs/content/ts-sdk/api/client/type-aliases/IotaMovePackage.md new file mode 100644 index 00000000000..beb04366e33 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaMovePackage.md @@ -0,0 +1,3 @@ +# Type Alias: IotaMovePackage + +> **IotaMovePackage**: `Extract`\<[`IotaParsedData`](IotaParsedData.md), `object`\> diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaMoveVisibility.md b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveVisibility.md new file mode 100644 index 00000000000..ce97a9ce264 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaMoveVisibility.md @@ -0,0 +1,3 @@ +# Type Alias: IotaMoveVisibility + +> **IotaMoveVisibility**: `"Private"` \| `"Public"` \| `"Friend"` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChange.md b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChange.md new file mode 100644 index 00000000000..2c4f6fd7553 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChange.md @@ -0,0 +1,6 @@ +# Type Alias: IotaObjectChange + +> **IotaObjectChange**: `object` \| `object` \| `object` \| `object` \| `object` \| `object` + +ObjectChange are derived from the object mutations in the TransactionEffect to provide richer object +information. diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeCreated.md b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeCreated.md new file mode 100644 index 00000000000..6f15567b3d2 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeCreated.md @@ -0,0 +1,3 @@ +# Type Alias: IotaObjectChangeCreated + +> **IotaObjectChangeCreated**: `Extract`\<[`IotaObjectChange`](IotaObjectChange.md), `object`\> diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeDeleted.md b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeDeleted.md new file mode 100644 index 00000000000..758abe5c7e5 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeDeleted.md @@ -0,0 +1,3 @@ +# Type Alias: IotaObjectChangeDeleted + +> **IotaObjectChangeDeleted**: `Extract`\<[`IotaObjectChange`](IotaObjectChange.md), `object`\> diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeMutated.md b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeMutated.md new file mode 100644 index 00000000000..197bf328451 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeMutated.md @@ -0,0 +1,3 @@ +# Type Alias: IotaObjectChangeMutated + +> **IotaObjectChangeMutated**: `Extract`\<[`IotaObjectChange`](IotaObjectChange.md), `object`\> diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangePublished.md b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangePublished.md new file mode 100644 index 00000000000..e7b8dffc541 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangePublished.md @@ -0,0 +1,3 @@ +# Type Alias: IotaObjectChangePublished + +> **IotaObjectChangePublished**: `Extract`\<[`IotaObjectChange`](IotaObjectChange.md), `object`\> diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeTransferred.md b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeTransferred.md new file mode 100644 index 00000000000..3413123602b --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeTransferred.md @@ -0,0 +1,3 @@ +# Type Alias: IotaObjectChangeTransferred + +> **IotaObjectChangeTransferred**: `Extract`\<[`IotaObjectChange`](IotaObjectChange.md), `object`\> diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeWrapped.md b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeWrapped.md new file mode 100644 index 00000000000..86f6372dce9 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectChangeWrapped.md @@ -0,0 +1,3 @@ +# Type Alias: IotaObjectChangeWrapped + +> **IotaObjectChangeWrapped**: `Extract`\<[`IotaObjectChange`](IotaObjectChange.md), `object`\> diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaObjectDataFilter.md b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectDataFilter.md new file mode 100644 index 00000000000..5b0f3fefc67 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaObjectDataFilter.md @@ -0,0 +1,3 @@ +# Type Alias: IotaObjectDataFilter + +> **IotaObjectDataFilter**: `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaParsedData.md b/docs/content/ts-sdk/api/client/type-aliases/IotaParsedData.md new file mode 100644 index 00000000000..f1d525a210b --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaParsedData.md @@ -0,0 +1,3 @@ +# Type Alias: IotaParsedData + +> **IotaParsedData**: `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaTransaction.md b/docs/content/ts-sdk/api/client/type-aliases/IotaTransaction.md new file mode 100644 index 00000000000..29d0859477d --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaTransaction.md @@ -0,0 +1,5 @@ +# Type Alias: IotaTransaction + +> **IotaTransaction**: `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` + +A single transaction in a programmable transaction block. diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaTransactionBlockBuilderMode.md b/docs/content/ts-sdk/api/client/type-aliases/IotaTransactionBlockBuilderMode.md new file mode 100644 index 00000000000..46cf3da249f --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaTransactionBlockBuilderMode.md @@ -0,0 +1,3 @@ +# Type Alias: IotaTransactionBlockBuilderMode + +> **IotaTransactionBlockBuilderMode**: `"Commit"` \| `"DevInspect"` diff --git a/docs/content/ts-sdk/api/client/type-aliases/IotaTransactionBlockKind.md b/docs/content/ts-sdk/api/client/type-aliases/IotaTransactionBlockKind.md new file mode 100644 index 00000000000..a893a704a51 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/IotaTransactionBlockKind.md @@ -0,0 +1,3 @@ +# Type Alias: IotaTransactionBlockKind + +> **IotaTransactionBlockKind**: `object` \| `object` \| `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/MoveCallMetric.md b/docs/content/ts-sdk/api/client/type-aliases/MoveCallMetric.md new file mode 100644 index 00000000000..c3e0fe4d780 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/MoveCallMetric.md @@ -0,0 +1,3 @@ +# Type Alias: MoveCallMetric + +> **MoveCallMetric**: [`object`, `string`] diff --git a/docs/content/ts-sdk/api/client/type-aliases/MoveStruct.md b/docs/content/ts-sdk/api/client/type-aliases/MoveStruct.md new file mode 100644 index 00000000000..312003bc846 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/MoveStruct.md @@ -0,0 +1,3 @@ +# Type Alias: MoveStruct + +> **MoveStruct**: [`MoveValue`](MoveValue.md)[] \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/MoveValue.md b/docs/content/ts-sdk/api/client/type-aliases/MoveValue.md new file mode 100644 index 00000000000..4cf8d12c405 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/MoveValue.md @@ -0,0 +1,3 @@ +# Type Alias: MoveValue + +> **MoveValue**: `number` \| `boolean` \| `string` \| [`MoveValue`](MoveValue.md)[] \| `string` \| `object` \| [`MoveStruct`](MoveStruct.md) \| `null` \| [`MoveVariant`](../interfaces/MoveVariant.md) diff --git a/docs/content/ts-sdk/api/client/type-aliases/NetworkId.md b/docs/content/ts-sdk/api/client/type-aliases/NetworkId.md new file mode 100644 index 00000000000..801f6e66072 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/NetworkId.md @@ -0,0 +1,3 @@ +# Type Alias: NetworkId + +> **NetworkId**: [`Network`](../enumerations/Network.md) \| `string` diff --git a/docs/content/ts-sdk/api/client/type-aliases/ObjectOwner.md b/docs/content/ts-sdk/api/client/type-aliases/ObjectOwner.md new file mode 100644 index 00000000000..92227cc8d12 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/ObjectOwner.md @@ -0,0 +1,3 @@ +# Type Alias: ObjectOwner + +> **ObjectOwner**: `object` \| `object` \| `object` \| `"Immutable"` diff --git a/docs/content/ts-sdk/api/client/type-aliases/ObjectRead.md b/docs/content/ts-sdk/api/client/type-aliases/ObjectRead.md new file mode 100644 index 00000000000..261496046e9 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/ObjectRead.md @@ -0,0 +1,3 @@ +# Type Alias: ObjectRead + +> **ObjectRead**: `object` \| `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/ObjectResponseError.md b/docs/content/ts-sdk/api/client/type-aliases/ObjectResponseError.md new file mode 100644 index 00000000000..7d4a1eb309e --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/ObjectResponseError.md @@ -0,0 +1,3 @@ +# Type Alias: ObjectResponseError + +> **ObjectResponseError**: `object` \| `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/ObjectValueKind.md b/docs/content/ts-sdk/api/client/type-aliases/ObjectValueKind.md new file mode 100644 index 00000000000..d6a2fd3cc71 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/ObjectValueKind.md @@ -0,0 +1,3 @@ +# Type Alias: ObjectValueKind + +> **ObjectValueKind**: `"ByImmutableReference"` \| `"ByMutableReference"` \| `"ByValue"` diff --git a/docs/content/ts-sdk/api/client/type-aliases/Order.md b/docs/content/ts-sdk/api/client/type-aliases/Order.md new file mode 100644 index 00000000000..02d225e1e28 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/Order.md @@ -0,0 +1,3 @@ +# Type Alias: Order + +> **Order**: `"ascending"` \| `"descending"` diff --git a/docs/content/ts-sdk/api/client/type-aliases/ProgrammableTransaction.md b/docs/content/ts-sdk/api/client/type-aliases/ProgrammableTransaction.md new file mode 100644 index 00000000000..9e5c4dedd98 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/ProgrammableTransaction.md @@ -0,0 +1,13 @@ +# Type Alias: ProgrammableTransaction + +> **ProgrammableTransaction**: `object` + +## Type declaration + +### transactions + +> **transactions**: [`IotaTransaction`](IotaTransaction.md)[] + +### inputs + +> **inputs**: [`IotaCallArg`](IotaCallArg.md)[] diff --git a/docs/content/ts-sdk/api/client/type-aliases/ProtocolConfigValue.md b/docs/content/ts-sdk/api/client/type-aliases/ProtocolConfigValue.md new file mode 100644 index 00000000000..2736c43f41e --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/ProtocolConfigValue.md @@ -0,0 +1,3 @@ +# Type Alias: ProtocolConfigValue + +> **ProtocolConfigValue**: `object` \| `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/PublicKey.md b/docs/content/ts-sdk/api/client/type-aliases/PublicKey.md new file mode 100644 index 00000000000..93198d6dc31 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/PublicKey.md @@ -0,0 +1,3 @@ +# Type Alias: PublicKey + +> **PublicKey**: `object` \| `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/QueryTransactionBlocksParams.md b/docs/content/ts-sdk/api/client/type-aliases/QueryTransactionBlocksParams.md new file mode 100644 index 00000000000..6db24317834 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/QueryTransactionBlocksParams.md @@ -0,0 +1,26 @@ +# Type Alias: QueryTransactionBlocksParams + +> **QueryTransactionBlocksParams**: `object` & [`IotaTransactionBlockResponseQuery`](../interfaces/IotaTransactionBlockResponseQuery.md) + +Return list of transactions for a specified query criteria. + +## Type declaration + +### cursor? + +> `optional` **cursor**: `string` \| `null` + +An optional paging cursor. If provided, the query will start from the next item after the specified +cursor. Default to start from the first item if not specified. + +### limit? + +> `optional` **limit**: `number` \| `null` + +Maximum item returned per page, default to QUERY_MAX_RESULT_LIMIT if not specified. + +### order? + +> `optional` **order**: `"ascending"` \| `"descending"` \| `null` + +query result ordering, default to false (ascending order), oldest record first. diff --git a/docs/content/ts-sdk/api/client/type-aliases/RPCTransactionRequestParams.md b/docs/content/ts-sdk/api/client/type-aliases/RPCTransactionRequestParams.md new file mode 100644 index 00000000000..925786949c0 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/RPCTransactionRequestParams.md @@ -0,0 +1,3 @@ +# Type Alias: RPCTransactionRequestParams + +> **RPCTransactionRequestParams**: `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/RawData.md b/docs/content/ts-sdk/api/client/type-aliases/RawData.md new file mode 100644 index 00000000000..31063b30e6d --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/RawData.md @@ -0,0 +1,3 @@ +# Type Alias: RawData + +> **RawData**: `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/Signature.md b/docs/content/ts-sdk/api/client/type-aliases/Signature.md new file mode 100644 index 00000000000..2c0e8c35872 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/Signature.md @@ -0,0 +1,3 @@ +# Type Alias: Signature + +> **Signature**: `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/StakeObject.md b/docs/content/ts-sdk/api/client/type-aliases/StakeObject.md new file mode 100644 index 00000000000..4337569ac10 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/StakeObject.md @@ -0,0 +1,3 @@ +# Type Alias: StakeObject + +> **StakeObject**: `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/TimelockedStake.md b/docs/content/ts-sdk/api/client/type-aliases/TimelockedStake.md new file mode 100644 index 00000000000..9e5a77c5983 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/TimelockedStake.md @@ -0,0 +1,3 @@ +# Type Alias: TimelockedStake + +> **TimelockedStake**: `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/TransactionBlockData.md b/docs/content/ts-sdk/api/client/type-aliases/TransactionBlockData.md new file mode 100644 index 00000000000..d8241f2a8df --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/TransactionBlockData.md @@ -0,0 +1,21 @@ +# Type Alias: TransactionBlockData + +> **TransactionBlockData**: `object` + +## Type declaration + +### gasData + +> **gasData**: [`IotaGasData`](../interfaces/IotaGasData.md) + +### messageVersion + +> **messageVersion**: `"v1"` + +### sender + +> **sender**: `string` + +### transaction + +> **transaction**: [`IotaTransactionBlockKind`](IotaTransactionBlockKind.md) diff --git a/docs/content/ts-sdk/api/client/type-aliases/TransactionEffects.md b/docs/content/ts-sdk/api/client/type-aliases/TransactionEffects.md new file mode 100644 index 00000000000..ac07e60a246 --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/TransactionEffects.md @@ -0,0 +1,102 @@ +# Type Alias: TransactionEffects + +> **TransactionEffects**: `object` + +## Type declaration + +### created? + +> `optional` **created**: [`OwnedObjectRef`](../interfaces/OwnedObjectRef.md)[] + +ObjectRef and owner of new objects created. + +### deleted? + +> `optional` **deleted**: [`IotaObjectRef`](../interfaces/IotaObjectRef.md)[] + +Object Refs of objects now deleted (the old refs). + +### dependencies? + +> `optional` **dependencies**: `string`[] + +The set of transaction digests this transaction depends on. + +### eventsDigest? + +> `optional` **eventsDigest**: `string` \| `null` + +The digest of the events emitted during execution, can be None if the transaction does not emit any +event. + +### executedEpoch + +> **executedEpoch**: `string` + +The epoch when this transaction was executed. + +### gasObject + +> **gasObject**: [`OwnedObjectRef`](../interfaces/OwnedObjectRef.md) + +The updated gas object reference. Have a dedicated field for convenient access. It's also included +in mutated. + +### gasUsed + +> **gasUsed**: [`GasCostSummary`](../interfaces/GasCostSummary.md) + +### messageVersion + +> **messageVersion**: `"v1"` + +### modifiedAtVersions? + +> `optional` **modifiedAtVersions**: [`TransactionBlockEffectsModifiedAtVersions`](../interfaces/TransactionBlockEffectsModifiedAtVersions.md)[] + +The version that every modified (mutated or deleted) object had before it was modified by this +transaction. + +### mutated? + +> `optional` **mutated**: [`OwnedObjectRef`](../interfaces/OwnedObjectRef.md)[] + +ObjectRef and owner of mutated objects, including gas object. + +### sharedObjects? + +> `optional` **sharedObjects**: [`IotaObjectRef`](../interfaces/IotaObjectRef.md)[] + +The object references of the shared objects used in this transaction. Empty if no shared objects +were used. + +### status + +> **status**: [`ExecutionStatus`](ExecutionStatus.md) + +The status of the execution + +### transactionDigest + +> **transactionDigest**: `string` + +The transaction digest + +### unwrapped? + +> `optional` **unwrapped**: [`OwnedObjectRef`](../interfaces/OwnedObjectRef.md)[] + +ObjectRef and owner of objects that are unwrapped in this transaction. Unwrapped objects are objects +that were wrapped into other objects in the past, and just got extracted out. + +### unwrappedThenDeleted? + +> `optional` **unwrappedThenDeleted**: [`IotaObjectRef`](../interfaces/IotaObjectRef.md)[] + +Object refs of objects previously wrapped in other objects but now deleted. + +### wrapped? + +> `optional` **wrapped**: [`IotaObjectRef`](../interfaces/IotaObjectRef.md)[] + +Object refs of objects now wrapped in other objects. diff --git a/docs/content/ts-sdk/api/client/type-aliases/TransactionFilter.md b/docs/content/ts-sdk/api/client/type-aliases/TransactionFilter.md new file mode 100644 index 00000000000..4800d811b4d --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/TransactionFilter.md @@ -0,0 +1,3 @@ +# Type Alias: TransactionFilter + +> **TransactionFilter**: `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/client/type-aliases/Unsubscribe.md b/docs/content/ts-sdk/api/client/type-aliases/Unsubscribe.md new file mode 100644 index 00000000000..17b357f44fa --- /dev/null +++ b/docs/content/ts-sdk/api/client/type-aliases/Unsubscribe.md @@ -0,0 +1,7 @@ +# Type Alias: Unsubscribe() + +> **Unsubscribe**: () => `Promise`\<`boolean`\> + +## Returns + +`Promise`\<`boolean`\> diff --git a/docs/content/ts-sdk/api/cryptography/classes/Keypair.md b/docs/content/ts-sdk/api/cryptography/classes/Keypair.md new file mode 100644 index 00000000000..4408c253aee --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/classes/Keypair.md @@ -0,0 +1,173 @@ +# Class: `abstract` Keypair + +TODO: Document + +## Extends + +- [`Signer`](Signer.md) + +## Extended by + +- [`Ed25519Keypair`](../../keypairs/ed25519/classes/Ed25519Keypair.md) +- [`Secp256k1Keypair`](../../keypairs/secp256k1/classes/Secp256k1Keypair.md) + +## Constructors + +### new Keypair() + +> **new Keypair**(): [`Keypair`](Keypair.md) + +#### Returns + +[`Keypair`](Keypair.md) + +#### Inherited from + +[`Signer`](Signer.md).[`constructor`](Signer.md#constructors) + +## Methods + +### sign() + +> `abstract` **sign**(`bytes`): `Promise`\<`Uint8Array`\> + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<`Uint8Array`\> + +#### Inherited from + +[`Signer`](Signer.md).[`sign`](Signer.md#sign) + +*** + +### signWithIntent() + +> **signWithIntent**(`bytes`, `intent`): `Promise`\<[`SignatureWithBytes`](../interfaces/SignatureWithBytes.md)\> + +Sign messages with a specific intent. By combining the message bytes with the intent before hashing and signing, +it ensures that a signed message is tied to a specific purpose and domain separator is provided + +#### Parameters + +• **bytes**: `Uint8Array` + +• **intent**: [`IntentScope`](../type-aliases/IntentScope.md) + +#### Returns + +`Promise`\<[`SignatureWithBytes`](../interfaces/SignatureWithBytes.md)\> + +#### Inherited from + +[`Signer`](Signer.md).[`signWithIntent`](Signer.md#signwithintent) + +*** + +### signTransaction() + +> **signTransaction**(`bytes`): `Promise`\<[`SignatureWithBytes`](../interfaces/SignatureWithBytes.md)\> + +Signs provided transaction by calling `signWithIntent()` with a `TransactionData` provided as intent scope + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<[`SignatureWithBytes`](../interfaces/SignatureWithBytes.md)\> + +#### Inherited from + +[`Signer`](Signer.md).[`signTransaction`](Signer.md#signtransaction) + +*** + +### signPersonalMessage() + +> **signPersonalMessage**(`bytes`): `Promise`\<`object`\> + +Signs provided personal message by calling `signWithIntent()` with a `PersonalMessage` provided as intent scope + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<`object`\> + +##### bytes + +> **bytes**: `string` + +##### signature + +> **signature**: `string` + +#### Inherited from + +[`Signer`](Signer.md).[`signPersonalMessage`](Signer.md#signpersonalmessage) + +*** + +### toIotaAddress() + +> **toIotaAddress**(): `string` + +#### Returns + +`string` + +#### Inherited from + +[`Signer`](Signer.md).[`toIotaAddress`](Signer.md#toiotaaddress) + +*** + +### getKeyScheme() + +> `abstract` **getKeyScheme**(): [`SignatureScheme`](../type-aliases/SignatureScheme.md) + +Get the key scheme of the keypair: Secp256k1 or ED25519 + +#### Returns + +[`SignatureScheme`](../type-aliases/SignatureScheme.md) + +#### Inherited from + +[`Signer`](Signer.md).[`getKeyScheme`](Signer.md#getkeyscheme) + +*** + +### getPublicKey() + +> `abstract` **getPublicKey**(): [`PublicKey`](PublicKey.md) + +The public key for this keypair + +#### Returns + +[`PublicKey`](PublicKey.md) + +#### Inherited from + +[`Signer`](Signer.md).[`getPublicKey`](Signer.md#getpublickey) + +*** + +### getSecretKey() + +> `abstract` **getSecretKey**(): `string` + +This returns the Bech32 secret key string for this keypair. + +#### Returns + +`string` diff --git a/docs/content/ts-sdk/api/cryptography/classes/PublicKey.md b/docs/content/ts-sdk/api/cryptography/classes/PublicKey.md new file mode 100644 index 00000000000..9ca8175c393 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/classes/PublicKey.md @@ -0,0 +1,206 @@ +# Class: `abstract` PublicKey + +A public key + +## Extended by + +- [`Ed25519PublicKey`](../../keypairs/ed25519/classes/Ed25519PublicKey.md) +- [`Secp256k1PublicKey`](../../keypairs/secp256k1/classes/Secp256k1PublicKey.md) +- [`MultiSigPublicKey`](../../multisig/classes/MultiSigPublicKey.md) + +## Constructors + +### new PublicKey() + +> **new PublicKey**(): [`PublicKey`](PublicKey.md) + +#### Returns + +[`PublicKey`](PublicKey.md) + +## Methods + +### equals() + +> **equals**(`publicKey`): `boolean` + +Checks if two public keys are equal + +#### Parameters + +• **publicKey**: [`PublicKey`](PublicKey.md) + +#### Returns + +`boolean` + +*** + +### toBase64() + +> **toBase64**(): `string` + +Return the base-64 representation of the public key + +#### Returns + +`string` + +*** + +### toString() + +> **toString**(): `never` + +#### Returns + +`never` + +*** + +### toIotaPublicKey() + +> **toIotaPublicKey**(): `string` + +Return the IOTA representation of the public key encoded in +base-64. A IOTA public key is formed by the concatenation +of the scheme flag with the raw bytes of the public key + +#### Returns + +`string` + +*** + +### verifyWithIntent() + +> **verifyWithIntent**(`bytes`, `signature`, `intent`): `Promise`\<`boolean`\> + +#### Parameters + +• **bytes**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +• **intent**: [`IntentScope`](../type-aliases/IntentScope.md) + +#### Returns + +`Promise`\<`boolean`\> + +*** + +### verifyPersonalMessage() + +> **verifyPersonalMessage**(`message`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided PersonalMessage + +#### Parameters + +• **message**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> + +*** + +### verifyTransaction() + +> **verifyTransaction**(`transaction`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided Transaction + +#### Parameters + +• **transaction**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> + +*** + +### toIotaBytes() + +> **toIotaBytes**(): `Uint8Array` + +Returns the bytes representation of the public key +prefixed with the signature scheme flag + +#### Returns + +`Uint8Array` + +*** + +### toIotaBytesForAddress() + +> **toIotaBytesForAddress**(): `Uint8Array` + +Returns the bytes representation of the public key +prefixed with the signature scheme flag. If the +signature scheme is ED25519, no prefix is set. + +#### Returns + +`Uint8Array` + +*** + +### toIotaAddress() + +> **toIotaAddress**(): `string` + +Return the IOTA address associated with this Ed25519 public key + +#### Returns + +`string` + +*** + +### toRawBytes() + +> `abstract` **toRawBytes**(): `Uint8Array` + +Return the byte array representation of the public key + +#### Returns + +`Uint8Array` + +*** + +### flag() + +> `abstract` **flag**(): `number` + +Return signature scheme flag of the public key + +#### Returns + +`number` + +*** + +### verify() + +> `abstract` **verify**(`data`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided message + +#### Parameters + +• **data**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> diff --git a/docs/content/ts-sdk/api/cryptography/classes/Signer.md b/docs/content/ts-sdk/api/cryptography/classes/Signer.md new file mode 100644 index 00000000000..052177ead21 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/classes/Signer.md @@ -0,0 +1,125 @@ +# Class: `abstract` Signer + +TODO: Document + +## Extended by + +- [`Keypair`](Keypair.md) +- [`MultiSigSigner`](../../multisig/classes/MultiSigSigner.md) + +## Constructors + +### new Signer() + +> **new Signer**(): [`Signer`](Signer.md) + +#### Returns + +[`Signer`](Signer.md) + +## Methods + +### sign() + +> `abstract` **sign**(`bytes`): `Promise`\<`Uint8Array`\> + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<`Uint8Array`\> + +*** + +### signWithIntent() + +> **signWithIntent**(`bytes`, `intent`): `Promise`\<[`SignatureWithBytes`](../interfaces/SignatureWithBytes.md)\> + +Sign messages with a specific intent. By combining the message bytes with the intent before hashing and signing, +it ensures that a signed message is tied to a specific purpose and domain separator is provided + +#### Parameters + +• **bytes**: `Uint8Array` + +• **intent**: [`IntentScope`](../type-aliases/IntentScope.md) + +#### Returns + +`Promise`\<[`SignatureWithBytes`](../interfaces/SignatureWithBytes.md)\> + +*** + +### signTransaction() + +> **signTransaction**(`bytes`): `Promise`\<[`SignatureWithBytes`](../interfaces/SignatureWithBytes.md)\> + +Signs provided transaction by calling `signWithIntent()` with a `TransactionData` provided as intent scope + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<[`SignatureWithBytes`](../interfaces/SignatureWithBytes.md)\> + +*** + +### signPersonalMessage() + +> **signPersonalMessage**(`bytes`): `Promise`\<`object`\> + +Signs provided personal message by calling `signWithIntent()` with a `PersonalMessage` provided as intent scope + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<`object`\> + +##### bytes + +> **bytes**: `string` + +##### signature + +> **signature**: `string` + +*** + +### toIotaAddress() + +> **toIotaAddress**(): `string` + +#### Returns + +`string` + +*** + +### getKeyScheme() + +> `abstract` **getKeyScheme**(): [`SignatureScheme`](../type-aliases/SignatureScheme.md) + +Get the key scheme of the keypair: Secp256k1 or ED25519 + +#### Returns + +[`SignatureScheme`](../type-aliases/SignatureScheme.md) + +*** + +### getPublicKey() + +> `abstract` **getPublicKey**(): [`PublicKey`](PublicKey.md) + +The public key for this keypair + +#### Returns + +[`PublicKey`](PublicKey.md) diff --git a/docs/content/ts-sdk/api/cryptography/functions/decodeIotaPrivateKey.md b/docs/content/ts-sdk/api/cryptography/functions/decodeIotaPrivateKey.md new file mode 100644 index 00000000000..0318a390465 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/functions/decodeIotaPrivateKey.md @@ -0,0 +1,15 @@ +# Function: decodeIotaPrivateKey() + +> **decodeIotaPrivateKey**(`value`): [`ParsedKeypair`](../type-aliases/ParsedKeypair.md) + +This returns an ParsedKeypair object based by validating the +33-byte Bech32 encoded string starting with `iotaprivkey`, and +parse out the signature scheme and the private key in bytes. + +## Parameters + +• **value**: `string` + +## Returns + +[`ParsedKeypair`](../type-aliases/ParsedKeypair.md) diff --git a/docs/content/ts-sdk/api/cryptography/functions/encodeIotaPrivateKey.md b/docs/content/ts-sdk/api/cryptography/functions/encodeIotaPrivateKey.md new file mode 100644 index 00000000000..4b7cffea7d8 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/functions/encodeIotaPrivateKey.md @@ -0,0 +1,17 @@ +# Function: encodeIotaPrivateKey() + +> **encodeIotaPrivateKey**(`bytes`, `scheme`): `string` + +This returns a Bech32 encoded string starting with `iotaprivkey`, +encoding 33-byte `flag || bytes` for the given the 32-byte private +key and its signature scheme. + +## Parameters + +• **bytes**: `Uint8Array` + +• **scheme**: [`SignatureScheme`](../type-aliases/SignatureScheme.md) + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/cryptography/functions/isValidBIP32Path.md b/docs/content/ts-sdk/api/cryptography/functions/isValidBIP32Path.md new file mode 100644 index 00000000000..e124c9a26e8 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/functions/isValidBIP32Path.md @@ -0,0 +1,18 @@ +# Function: isValidBIP32Path() + +> **isValidBIP32Path**(`path`): `boolean` + +Parse and validate a path that is compliant to BIP-32 in form m/54'/4218'/{account_index}'/{change_index}/{address_index} +for Secp256k1 and m/74'/4218'/{account_index}'/{change_index}/{address_index} for Secp256r1. + +Note that the purpose for Secp256k1 is registered as 54, to differentiate from Ed25519 with purpose 44. + +## Parameters + +• **path**: `string` + +path string (e.g. `m/54'/4218'/0'/0/0`). + +## Returns + +`boolean` diff --git a/docs/content/ts-sdk/api/cryptography/functions/isValidHardenedPath.md b/docs/content/ts-sdk/api/cryptography/functions/isValidHardenedPath.md new file mode 100644 index 00000000000..9affc1bd7e7 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/functions/isValidHardenedPath.md @@ -0,0 +1,15 @@ +# Function: isValidHardenedPath() + +> **isValidHardenedPath**(`path`): `boolean` + +Parse and validate a path that is compliant to SLIP-0010 in form m/44'/4218'/{account_index}'/{change_index}'/{address_index}'. + +## Parameters + +• **path**: `string` + +path string (e.g. `m/44'/4218'/0'/0'/0'`). + +## Returns + +`boolean` diff --git a/docs/content/ts-sdk/api/cryptography/functions/messageWithIntent.md b/docs/content/ts-sdk/api/cryptography/functions/messageWithIntent.md new file mode 100644 index 00000000000..f0f96a48fc9 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/functions/messageWithIntent.md @@ -0,0 +1,15 @@ +# Function: messageWithIntent() + +> **messageWithIntent**(`scope`, `message`): `Uint8Array` + +Inserts a domain separator for a message that is being signed + +## Parameters + +• **scope**: [`IntentScope`](../type-aliases/IntentScope.md) + +• **message**: `Uint8Array` + +## Returns + +`Uint8Array` diff --git a/docs/content/ts-sdk/api/cryptography/functions/mnemonicToSeed.md b/docs/content/ts-sdk/api/cryptography/functions/mnemonicToSeed.md new file mode 100644 index 00000000000..5681b851070 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/functions/mnemonicToSeed.md @@ -0,0 +1,15 @@ +# Function: mnemonicToSeed() + +> **mnemonicToSeed**(`mnemonics`): `Uint8Array` + +Uses KDF to derive 64 bytes of key data from mnemonic with empty password. + +## Parameters + +• **mnemonics**: `string` + +24 words string split by spaces. + +## Returns + +`Uint8Array` diff --git a/docs/content/ts-sdk/api/cryptography/functions/mnemonicToSeedHex.md b/docs/content/ts-sdk/api/cryptography/functions/mnemonicToSeedHex.md new file mode 100644 index 00000000000..04e274a65b1 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/functions/mnemonicToSeedHex.md @@ -0,0 +1,15 @@ +# Function: mnemonicToSeedHex() + +> **mnemonicToSeedHex**(`mnemonics`): `string` + +Derive the seed in hex format from a 24-word mnemonic string. + +## Parameters + +• **mnemonics**: `string` + +24 words string split by spaces. + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/cryptography/functions/parseSerializedSignature.md b/docs/content/ts-sdk/api/cryptography/functions/parseSerializedSignature.md new file mode 100644 index 00000000000..562ee77562e --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/functions/parseSerializedSignature.md @@ -0,0 +1,13 @@ +# Function: parseSerializedSignature() + +> **parseSerializedSignature**(`serializedSignature`): `object` \| `object` + +Decodes a serialized signature into its constituent components: the signature scheme, the actual signature, and the public key + +## Parameters + +• **serializedSignature**: `string` + +## Returns + +`object` \| `object` diff --git a/docs/content/ts-sdk/api/cryptography/functions/toSerializedSignature.md b/docs/content/ts-sdk/api/cryptography/functions/toSerializedSignature.md new file mode 100644 index 00000000000..7dabe5495da --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/functions/toSerializedSignature.md @@ -0,0 +1,13 @@ +# Function: toSerializedSignature() + +> **toSerializedSignature**(`__namedParameters`): `string` + +Takes in a signature, its associated signing scheme and a public key, then serializes this data + +## Parameters + +• **\_\_namedParameters**: [`SerializeSignatureInput`](../type-aliases/SerializeSignatureInput.md) + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/cryptography/index.md b/docs/content/ts-sdk/api/cryptography/index.md new file mode 100644 index 00000000000..c13f775cd73 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/index.md @@ -0,0 +1,42 @@ +# cryptography + +## Index + +### Classes + +- [Signer](classes/Signer.md) +- [Keypair](classes/Keypair.md) +- [PublicKey](classes/PublicKey.md) + +### Interfaces + +- [SignatureWithBytes](interfaces/SignatureWithBytes.md) + +### Type Aliases + +- [IntentScope](type-aliases/IntentScope.md) +- [ParsedKeypair](type-aliases/ParsedKeypair.md) +- [SignatureScheme](type-aliases/SignatureScheme.md) +- [SignatureFlag](type-aliases/SignatureFlag.md) +- [SerializeSignatureInput](type-aliases/SerializeSignatureInput.md) + +### Variables + +- [PRIVATE\_KEY\_SIZE](variables/PRIVATE_KEY_SIZE.md) +- [LEGACY\_PRIVATE\_KEY\_SIZE](variables/LEGACY_PRIVATE_KEY_SIZE.md) +- [IOTA\_PRIVATE\_KEY\_PREFIX](variables/IOTA_PRIVATE_KEY_PREFIX.md) +- [SIGNATURE\_SCHEME\_TO\_FLAG](variables/SIGNATURE_SCHEME_TO_FLAG.md) +- [SIGNATURE\_SCHEME\_TO\_SIZE](variables/SIGNATURE_SCHEME_TO_SIZE.md) +- [SIGNATURE\_FLAG\_TO\_SCHEME](variables/SIGNATURE_FLAG_TO_SCHEME.md) + +### Functions + +- [messageWithIntent](functions/messageWithIntent.md) +- [decodeIotaPrivateKey](functions/decodeIotaPrivateKey.md) +- [encodeIotaPrivateKey](functions/encodeIotaPrivateKey.md) +- [isValidHardenedPath](functions/isValidHardenedPath.md) +- [isValidBIP32Path](functions/isValidBIP32Path.md) +- [mnemonicToSeed](functions/mnemonicToSeed.md) +- [mnemonicToSeedHex](functions/mnemonicToSeedHex.md) +- [toSerializedSignature](functions/toSerializedSignature.md) +- [parseSerializedSignature](functions/parseSerializedSignature.md) diff --git a/docs/content/ts-sdk/api/cryptography/interfaces/SignatureWithBytes.md b/docs/content/ts-sdk/api/cryptography/interfaces/SignatureWithBytes.md new file mode 100644 index 00000000000..aa0230ef52b --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/interfaces/SignatureWithBytes.md @@ -0,0 +1,13 @@ +# Interface: SignatureWithBytes + +## Properties + +### bytes + +> **bytes**: `string` + +*** + +### signature + +> **signature**: `string` diff --git a/docs/content/ts-sdk/api/cryptography/type-aliases/IntentScope.md b/docs/content/ts-sdk/api/cryptography/type-aliases/IntentScope.md new file mode 100644 index 00000000000..7ac8fdb14d0 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/type-aliases/IntentScope.md @@ -0,0 +1,3 @@ +# Type Alias: IntentScope + +> **IntentScope**: `Exclude`\ diff --git a/docs/content/ts-sdk/api/cryptography/type-aliases/ParsedKeypair.md b/docs/content/ts-sdk/api/cryptography/type-aliases/ParsedKeypair.md new file mode 100644 index 00000000000..d35bea74c82 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/type-aliases/ParsedKeypair.md @@ -0,0 +1,13 @@ +# Type Alias: ParsedKeypair + +> **ParsedKeypair**: `object` + +## Type declaration + +### schema + +> **schema**: [`SignatureScheme`](SignatureScheme.md) + +### secretKey + +> **secretKey**: `Uint8Array` diff --git a/docs/content/ts-sdk/api/cryptography/type-aliases/SerializeSignatureInput.md b/docs/content/ts-sdk/api/cryptography/type-aliases/SerializeSignatureInput.md new file mode 100644 index 00000000000..aacf1be5579 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/type-aliases/SerializeSignatureInput.md @@ -0,0 +1,23 @@ +# Type Alias: SerializeSignatureInput + +> **SerializeSignatureInput**: `object` + +Pair of signature and corresponding public key + +## Type declaration + +### signatureScheme + +> **signatureScheme**: [`SignatureScheme`](SignatureScheme.md) + +### signature + +> **signature**: `Uint8Array` + +Base64-encoded signature + +### publicKey? + +> `optional` **publicKey**: [`PublicKey`](../classes/PublicKey.md) + +Base64-encoded public key diff --git a/docs/content/ts-sdk/api/cryptography/type-aliases/SignatureFlag.md b/docs/content/ts-sdk/api/cryptography/type-aliases/SignatureFlag.md new file mode 100644 index 00000000000..a9d0be078b4 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/type-aliases/SignatureFlag.md @@ -0,0 +1,3 @@ +# Type Alias: SignatureFlag + +> **SignatureFlag**: keyof *typeof* [`SIGNATURE_FLAG_TO_SCHEME`](../variables/SIGNATURE_FLAG_TO_SCHEME.md) diff --git a/docs/content/ts-sdk/api/cryptography/type-aliases/SignatureScheme.md b/docs/content/ts-sdk/api/cryptography/type-aliases/SignatureScheme.md new file mode 100644 index 00000000000..10bacc122d5 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/type-aliases/SignatureScheme.md @@ -0,0 +1,3 @@ +# Type Alias: SignatureScheme + +> **SignatureScheme**: `"ED25519"` \| `"Secp256k1"` \| `"Secp256r1"` \| `"MultiSig"` diff --git a/docs/content/ts-sdk/api/cryptography/variables/IOTA_PRIVATE_KEY_PREFIX.md b/docs/content/ts-sdk/api/cryptography/variables/IOTA_PRIVATE_KEY_PREFIX.md new file mode 100644 index 00000000000..f15475f4a0b --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/variables/IOTA_PRIVATE_KEY_PREFIX.md @@ -0,0 +1,3 @@ +# Variable: IOTA\_PRIVATE\_KEY\_PREFIX + +> `const` **IOTA\_PRIVATE\_KEY\_PREFIX**: `"iotaprivkey"` = `'iotaprivkey'` diff --git a/docs/content/ts-sdk/api/cryptography/variables/LEGACY_PRIVATE_KEY_SIZE.md b/docs/content/ts-sdk/api/cryptography/variables/LEGACY_PRIVATE_KEY_SIZE.md new file mode 100644 index 00000000000..d35b901d802 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/variables/LEGACY_PRIVATE_KEY_SIZE.md @@ -0,0 +1,3 @@ +# Variable: LEGACY\_PRIVATE\_KEY\_SIZE + +> `const` **LEGACY\_PRIVATE\_KEY\_SIZE**: `64` = `64` diff --git a/docs/content/ts-sdk/api/cryptography/variables/PRIVATE_KEY_SIZE.md b/docs/content/ts-sdk/api/cryptography/variables/PRIVATE_KEY_SIZE.md new file mode 100644 index 00000000000..a02f817c1d7 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/variables/PRIVATE_KEY_SIZE.md @@ -0,0 +1,3 @@ +# Variable: PRIVATE\_KEY\_SIZE + +> `const` **PRIVATE\_KEY\_SIZE**: `32` = `32` diff --git a/docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_FLAG_TO_SCHEME.md b/docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_FLAG_TO_SCHEME.md new file mode 100644 index 00000000000..3b38748eec5 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_FLAG_TO_SCHEME.md @@ -0,0 +1,21 @@ +# Variable: SIGNATURE\_FLAG\_TO\_SCHEME + +> `const` **SIGNATURE\_FLAG\_TO\_SCHEME**: `object` + +## Type declaration + +### 0 + +> `readonly` **0**: `"ED25519"` = `'ED25519'` + +### 1 + +> `readonly` **1**: `"Secp256k1"` = `'Secp256k1'` + +### 2 + +> `readonly` **2**: `"Secp256r1"` = `'Secp256r1'` + +### 3 + +> `readonly` **3**: `"MultiSig"` = `'MultiSig'` diff --git a/docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_SCHEME_TO_FLAG.md b/docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_SCHEME_TO_FLAG.md new file mode 100644 index 00000000000..2828146641d --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_SCHEME_TO_FLAG.md @@ -0,0 +1,21 @@ +# Variable: SIGNATURE\_SCHEME\_TO\_FLAG + +> `const` **SIGNATURE\_SCHEME\_TO\_FLAG**: `object` + +## Type declaration + +### ED25519 + +> `readonly` **ED25519**: `0` = `0x00` + +### Secp256k1 + +> `readonly` **Secp256k1**: `1` = `0x01` + +### Secp256r1 + +> `readonly` **Secp256r1**: `2` = `0x02` + +### MultiSig + +> `readonly` **MultiSig**: `3` = `0x03` diff --git a/docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_SCHEME_TO_SIZE.md b/docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_SCHEME_TO_SIZE.md new file mode 100644 index 00000000000..59364899c46 --- /dev/null +++ b/docs/content/ts-sdk/api/cryptography/variables/SIGNATURE_SCHEME_TO_SIZE.md @@ -0,0 +1,17 @@ +# Variable: SIGNATURE\_SCHEME\_TO\_SIZE + +> `const` **SIGNATURE\_SCHEME\_TO\_SIZE**: `object` + +## Type declaration + +### ED25519 + +> **ED25519**: `number` = `32` + +### Secp256k1 + +> **Secp256k1**: `number` = `33` + +### Secp256r1 + +> **Secp256r1**: `number` = `33` diff --git a/docs/content/ts-sdk/api/faucet/classes/FaucetRateLimitError.md b/docs/content/ts-sdk/api/faucet/classes/FaucetRateLimitError.md new file mode 100644 index 00000000000..62ea37b7a5f --- /dev/null +++ b/docs/content/ts-sdk/api/faucet/classes/FaucetRateLimitError.md @@ -0,0 +1,139 @@ +# Class: FaucetRateLimitError + +## Extends + +- `Error` + +## Constructors + +### new FaucetRateLimitError() + +> **new FaucetRateLimitError**(`message`?): [`FaucetRateLimitError`](FaucetRateLimitError.md) + +#### Parameters + +• **message?**: `string` + +#### Returns + +[`FaucetRateLimitError`](FaucetRateLimitError.md) + +#### Inherited from + +`Error.constructor` + +### new FaucetRateLimitError() + +> **new FaucetRateLimitError**(`message`?, `options`?): [`FaucetRateLimitError`](FaucetRateLimitError.md) + +#### Parameters + +• **message?**: `string` + +• **options?**: `ErrorOptions` + +#### Returns + +[`FaucetRateLimitError`](FaucetRateLimitError.md) + +#### Inherited from + +`Error.constructor` + +## Properties + +### prepareStackTrace()? + +> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any` + +Optional override for formatting stack traces + +#### Parameters + +• **err**: `Error` + +• **stackTraces**: `CallSite`[] + +#### Returns + +`any` + +#### See + +https://v8.dev/docs/stack-trace-api#customizing-stack-traces + +#### Inherited from + +`Error.prepareStackTrace` + +*** + +### stackTraceLimit + +> `static` **stackTraceLimit**: `number` + +#### Inherited from + +`Error.stackTraceLimit` + +*** + +### cause? + +> `optional` **cause**: `unknown` + +#### Inherited from + +`Error.cause` + +*** + +### name + +> **name**: `string` + +#### Inherited from + +`Error.name` + +*** + +### message + +> **message**: `string` + +#### Inherited from + +`Error.message` + +*** + +### stack? + +> `optional` **stack**: `string` + +#### Inherited from + +`Error.stack` + +## Methods + +### captureStackTrace() + +> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void` + +Create .stack property on a target object + +#### Parameters + +• **targetObject**: `object` + +• **constructorOpt?**: `Function` + +#### Returns + +`void` + +#### Inherited from + +`Error.captureStackTrace` diff --git a/docs/content/ts-sdk/api/faucet/functions/getFaucetHost.md b/docs/content/ts-sdk/api/faucet/functions/getFaucetHost.md new file mode 100644 index 00000000000..3baaf30b700 --- /dev/null +++ b/docs/content/ts-sdk/api/faucet/functions/getFaucetHost.md @@ -0,0 +1,11 @@ +# Function: getFaucetHost() + +> **getFaucetHost**(`network`): `string` + +## Parameters + +• **network**: `string` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/faucet/functions/getFaucetRequestStatus.md b/docs/content/ts-sdk/api/faucet/functions/getFaucetRequestStatus.md new file mode 100644 index 00000000000..1e8b8ff4b0c --- /dev/null +++ b/docs/content/ts-sdk/api/faucet/functions/getFaucetRequestStatus.md @@ -0,0 +1,17 @@ +# Function: getFaucetRequestStatus() + +> **getFaucetRequestStatus**(`input`): `Promise`\<`BatchStatusFaucetResponse`\> + +## Parameters + +• **input** + +• **input.host**: `string` + +• **input.taskId**: `string` + +• **input.headers?**: `HeadersInit` + +## Returns + +`Promise`\<`BatchStatusFaucetResponse`\> diff --git a/docs/content/ts-sdk/api/faucet/functions/requestIotaFromFaucetV0.md b/docs/content/ts-sdk/api/faucet/functions/requestIotaFromFaucetV0.md new file mode 100644 index 00000000000..5fdaf5b048f --- /dev/null +++ b/docs/content/ts-sdk/api/faucet/functions/requestIotaFromFaucetV0.md @@ -0,0 +1,17 @@ +# Function: requestIotaFromFaucetV0() + +> **requestIotaFromFaucetV0**(`input`): `Promise`\<`FaucetResponse`\> + +## Parameters + +• **input** + +• **input.host**: `string` + +• **input.recipient**: `string` + +• **input.headers?**: `HeadersInit` + +## Returns + +`Promise`\<`FaucetResponse`\> diff --git a/docs/content/ts-sdk/api/faucet/functions/requestIotaFromFaucetV1.md b/docs/content/ts-sdk/api/faucet/functions/requestIotaFromFaucetV1.md new file mode 100644 index 00000000000..91052957506 --- /dev/null +++ b/docs/content/ts-sdk/api/faucet/functions/requestIotaFromFaucetV1.md @@ -0,0 +1,17 @@ +# Function: requestIotaFromFaucetV1() + +> **requestIotaFromFaucetV1**(`input`): `Promise`\<`BatchFaucetResponse`\> + +## Parameters + +• **input** + +• **input.host**: `string` + +• **input.recipient**: `string` + +• **input.headers?**: `HeadersInit` + +## Returns + +`Promise`\<`BatchFaucetResponse`\> diff --git a/docs/content/ts-sdk/api/faucet/index.md b/docs/content/ts-sdk/api/faucet/index.md new file mode 100644 index 00000000000..6542dbbb933 --- /dev/null +++ b/docs/content/ts-sdk/api/faucet/index.md @@ -0,0 +1,14 @@ +# faucet + +## Index + +### Classes + +- [FaucetRateLimitError](classes/FaucetRateLimitError.md) + +### Functions + +- [requestIotaFromFaucetV0](functions/requestIotaFromFaucetV0.md) +- [requestIotaFromFaucetV1](functions/requestIotaFromFaucetV1.md) +- [getFaucetRequestStatus](functions/getFaucetRequestStatus.md) +- [getFaucetHost](functions/getFaucetHost.md) diff --git a/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLClient.md b/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLClient.md new file mode 100644 index 00000000000..8fec347aade --- /dev/null +++ b/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLClient.md @@ -0,0 +1,63 @@ +# Class: IotaGraphQLClient\ + +## Type Parameters + +• **Queries** *extends* `Record`\<`string`, [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\> = `object` + +## Constructors + +### new IotaGraphQLClient() + +> **new IotaGraphQLClient**\<`Queries`\>(`__namedParameters`): [`IotaGraphQLClient`](IotaGraphQLClient.md)\<`Queries`\> + +#### Parameters + +• **\_\_namedParameters**: [`IotaGraphQLClientOptions`](../interfaces/IotaGraphQLClientOptions.md)\<`Queries`\> + +#### Returns + +[`IotaGraphQLClient`](IotaGraphQLClient.md)\<`Queries`\> + +## Methods + +### query() + +> **query**\<`Result`, `Variables`\>(`options`): `Promise`\<[`GraphQLQueryResult`](../type-aliases/GraphQLQueryResult.md)\<`Result`\>\> + +#### Type Parameters + +• **Result** = `Record`\<`string`, `unknown`\> + +• **Variables** = `Record`\<`string`, `unknown`\> + +#### Parameters + +• **options**: [`GraphQLQueryOptions`](../type-aliases/GraphQLQueryOptions.md)\<`Result`, `Variables`\> + +#### Returns + +`Promise`\<[`GraphQLQueryResult`](../type-aliases/GraphQLQueryResult.md)\<`Result`\>\> + +*** + +### execute() + +> **execute**\<`Query`, `Result`, `Variables`\>(`query`, `options`): `Promise`\<[`GraphQLQueryResult`](../type-aliases/GraphQLQueryResult.md)\<`Result`\>\> + +#### Type Parameters + +• **Query** *extends* `string` + +• **Result** = `Queries`\[`Query`\] *extends* [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\<`R`, `unknown`\> ? `R` : `Record`\<`string`, `unknown`\> + +• **Variables** = `Queries`\[`Query`\] *extends* [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\<`unknown`, `V`\> ? `V` : `Record`\<`string`, `unknown`\> + +#### Parameters + +• **query**: `Query` + +• **options**: `Omit`\<[`GraphQLQueryOptions`](../type-aliases/GraphQLQueryOptions.md)\<`Result`, `Variables`\>, `"query"`\> + +#### Returns + +`Promise`\<[`GraphQLQueryResult`](../type-aliases/GraphQLQueryResult.md)\<`Result`\>\> diff --git a/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLRequestError.md b/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLRequestError.md new file mode 100644 index 00000000000..b17d149ebb6 --- /dev/null +++ b/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLRequestError.md @@ -0,0 +1,139 @@ +# Class: IotaGraphQLRequestError + +## Extends + +- `Error` + +## Constructors + +### new IotaGraphQLRequestError() + +> **new IotaGraphQLRequestError**(`message`?): [`IotaGraphQLRequestError`](IotaGraphQLRequestError.md) + +#### Parameters + +• **message?**: `string` + +#### Returns + +[`IotaGraphQLRequestError`](IotaGraphQLRequestError.md) + +#### Inherited from + +`Error.constructor` + +### new IotaGraphQLRequestError() + +> **new IotaGraphQLRequestError**(`message`?, `options`?): [`IotaGraphQLRequestError`](IotaGraphQLRequestError.md) + +#### Parameters + +• **message?**: `string` + +• **options?**: `ErrorOptions` + +#### Returns + +[`IotaGraphQLRequestError`](IotaGraphQLRequestError.md) + +#### Inherited from + +`Error.constructor` + +## Properties + +### prepareStackTrace()? + +> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any` + +Optional override for formatting stack traces + +#### Parameters + +• **err**: `Error` + +• **stackTraces**: `CallSite`[] + +#### Returns + +`any` + +#### See + +https://v8.dev/docs/stack-trace-api#customizing-stack-traces + +#### Inherited from + +`Error.prepareStackTrace` + +*** + +### stackTraceLimit + +> `static` **stackTraceLimit**: `number` + +#### Inherited from + +`Error.stackTraceLimit` + +*** + +### cause? + +> `optional` **cause**: `unknown` + +#### Inherited from + +`Error.cause` + +*** + +### name + +> **name**: `string` + +#### Inherited from + +`Error.name` + +*** + +### message + +> **message**: `string` + +#### Inherited from + +`Error.message` + +*** + +### stack? + +> `optional` **stack**: `string` + +#### Inherited from + +`Error.stack` + +## Methods + +### captureStackTrace() + +> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void` + +Create .stack property on a target object + +#### Parameters + +• **targetObject**: `object` + +• **constructorOpt?**: `Function` + +#### Returns + +`void` + +#### Inherited from + +`Error.captureStackTrace` diff --git a/docs/content/ts-sdk/api/graphql/index.md b/docs/content/ts-sdk/api/graphql/index.md new file mode 100644 index 00000000000..c4718be8923 --- /dev/null +++ b/docs/content/ts-sdk/api/graphql/index.md @@ -0,0 +1,19 @@ +# graphql + +## Index + +### Classes + +- [IotaGraphQLRequestError](classes/IotaGraphQLRequestError.md) +- [IotaGraphQLClient](classes/IotaGraphQLClient.md) + +### Interfaces + +- [IotaGraphQLClientOptions](interfaces/IotaGraphQLClientOptions.md) + +### Type Aliases + +- [GraphQLDocument](type-aliases/GraphQLDocument.md) +- [GraphQLQueryOptions](type-aliases/GraphQLQueryOptions.md) +- [GraphQLQueryResult](type-aliases/GraphQLQueryResult.md) +- [GraphQLResponseErrors](type-aliases/GraphQLResponseErrors.md) diff --git a/docs/content/ts-sdk/api/graphql/interfaces/IotaGraphQLClientOptions.md b/docs/content/ts-sdk/api/graphql/interfaces/IotaGraphQLClientOptions.md new file mode 100644 index 00000000000..4241716dd47 --- /dev/null +++ b/docs/content/ts-sdk/api/graphql/interfaces/IotaGraphQLClientOptions.md @@ -0,0 +1,51 @@ +# Interface: IotaGraphQLClientOptions\ + +## Type Parameters + +• **Queries** *extends* `Record`\<`string`, [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\> + +## Properties + +### url + +> **url**: `string` + +*** + +### fetch()? + +> `optional` **fetch**: (`input`, `init`?) => `Promise`\<`Response`\>(`input`, `init`?) => `Promise`\<`Response`\> + +[MDN Reference](https://developer.mozilla.org/docs/Web/API/fetch) + +#### Parameters + +• **input**: `URL` \| `RequestInfo` + +• **init?**: `RequestInit` + +#### Returns + +`Promise`\<`Response`\> + +#### Parameters + +• **input**: `string` \| `URL` \| `Request` + +• **init?**: `RequestInit` + +#### Returns + +`Promise`\<`Response`\> + +*** + +### headers? + +> `optional` **headers**: `Record`\<`string`, `string`\> + +*** + +### queries? + +> `optional` **queries**: `Queries` diff --git a/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLDocument.md b/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLDocument.md new file mode 100644 index 00000000000..884c60bf206 --- /dev/null +++ b/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLDocument.md @@ -0,0 +1,9 @@ +# Type Alias: GraphQLDocument\ + +> **GraphQLDocument**\<`Result`, `Variables`\>: `string` \| `DocumentNode` \| `TypedDocumentNode`\<`Result`, `Variables`\> \| `TadaDocumentNode`\<`Result`, `Variables`\> + +## Type Parameters + +• **Result** = `Record`\<`string`, `unknown`\> + +• **Variables** = `Record`\<`string`, `unknown`\> diff --git a/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryOptions.md b/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryOptions.md new file mode 100644 index 00000000000..354bbcee9c3 --- /dev/null +++ b/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryOptions.md @@ -0,0 +1,23 @@ +# Type Alias: GraphQLQueryOptions\ + +> **GraphQLQueryOptions**\<`Result`, `Variables`\>: `object` & `Variables` *extends* `object` ? `object` : `object` + +## Type declaration + +### query + +> **query**: [`GraphQLDocument`](GraphQLDocument.md)\<`Result`, `Variables`\> + +### operationName? + +> `optional` **operationName**: `string` + +### extensions? + +> `optional` **extensions**: `Record`\<`string`, `unknown`\> + +## Type Parameters + +• **Result** = `Record`\<`string`, `unknown`\> + +• **Variables** = `Record`\<`string`, `unknown`\> diff --git a/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryResult.md b/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryResult.md new file mode 100644 index 00000000000..a515ef6abe6 --- /dev/null +++ b/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryResult.md @@ -0,0 +1,21 @@ +# Type Alias: GraphQLQueryResult\ + +> **GraphQLQueryResult**\<`Result`\>: `object` + +## Type Parameters + +• **Result** = `Record`\<`string`, `unknown`\> + +## Type declaration + +### data? + +> `optional` **data**: `Result` + +### errors? + +> `optional` **errors**: [`GraphQLResponseErrors`](GraphQLResponseErrors.md) + +### extensions? + +> `optional` **extensions**: `Record`\<`string`, `unknown`\> diff --git a/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLResponseErrors.md b/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLResponseErrors.md new file mode 100644 index 00000000000..1d285edae3f --- /dev/null +++ b/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLResponseErrors.md @@ -0,0 +1,3 @@ +# Type Alias: GraphQLResponseErrors + +> **GraphQLResponseErrors**: `object`[] diff --git a/docs/content/ts-sdk/api/index.md b/docs/content/ts-sdk/api/index.md new file mode 100644 index 00000000000..4ee3103cec3 --- /dev/null +++ b/docs/content/ts-sdk/api/index.md @@ -0,0 +1,16 @@ +# @iota/iota-sdk + +## Modules + +- [bcs](bcs/index.md) +- [client](client/index.md) +- [cryptography](cryptography/index.md) +- [faucet](faucet/index.md) +- [graphql](graphql/index.md) +- [keypairs/ed25519](keypairs/ed25519/index.md) +- [keypairs/secp256k1](keypairs/secp256k1/index.md) +- [keypairs/secp256k1](keypairs/secp256k1/index.md) +- [multisig](multisig/index.md) +- [transactions](transactions/index.md) +- [utils](utils/index.md) +- [verify](verify/index.md) diff --git a/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519Keypair.md b/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519Keypair.md new file mode 100644 index 00000000000..17e73ebae11 --- /dev/null +++ b/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519Keypair.md @@ -0,0 +1,266 @@ +# Class: Ed25519Keypair + +An Ed25519 Keypair used for signing transactions. + +## Extends + +- [`Keypair`](../../../cryptography/classes/Keypair.md) + +## Constructors + +### new Ed25519Keypair() + +> **new Ed25519Keypair**(`keypair`?): [`Ed25519Keypair`](Ed25519Keypair.md) + +Create a new Ed25519 keypair instance. +Generate random keypair if no [Ed25519Keypair](Ed25519Keypair.md) is provided. + +#### Parameters + +• **keypair?**: [`Ed25519KeypairData`](../interfaces/Ed25519KeypairData.md) + +Ed25519 keypair + +#### Returns + +[`Ed25519Keypair`](Ed25519Keypair.md) + +#### Overrides + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`constructor`](../../../cryptography/classes/Keypair.md#constructors) + +## Methods + +### signWithIntent() + +> **signWithIntent**(`bytes`, `intent`): `Promise`\<[`SignatureWithBytes`](../../../cryptography/interfaces/SignatureWithBytes.md)\> + +Sign messages with a specific intent. By combining the message bytes with the intent before hashing and signing, +it ensures that a signed message is tied to a specific purpose and domain separator is provided + +#### Parameters + +• **bytes**: `Uint8Array` + +• **intent**: [`IntentScope`](../../../cryptography/type-aliases/IntentScope.md) + +#### Returns + +`Promise`\<[`SignatureWithBytes`](../../../cryptography/interfaces/SignatureWithBytes.md)\> + +#### Inherited from + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`signWithIntent`](../../../cryptography/classes/Keypair.md#signwithintent) + +*** + +### signTransaction() + +> **signTransaction**(`bytes`): `Promise`\<[`SignatureWithBytes`](../../../cryptography/interfaces/SignatureWithBytes.md)\> + +Signs provided transaction by calling `signWithIntent()` with a `TransactionData` provided as intent scope + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<[`SignatureWithBytes`](../../../cryptography/interfaces/SignatureWithBytes.md)\> + +#### Inherited from + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`signTransaction`](../../../cryptography/classes/Keypair.md#signtransaction) + +*** + +### signPersonalMessage() + +> **signPersonalMessage**(`bytes`): `Promise`\<`object`\> + +Signs provided personal message by calling `signWithIntent()` with a `PersonalMessage` provided as intent scope + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<`object`\> + +##### bytes + +> **bytes**: `string` + +##### signature + +> **signature**: `string` + +#### Inherited from + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`signPersonalMessage`](../../../cryptography/classes/Keypair.md#signpersonalmessage) + +*** + +### toIotaAddress() + +> **toIotaAddress**(): `string` + +#### Returns + +`string` + +#### Inherited from + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`toIotaAddress`](../../../cryptography/classes/Keypair.md#toiotaaddress) + +*** + +### getKeyScheme() + +> **getKeyScheme**(): [`SignatureScheme`](../../../cryptography/type-aliases/SignatureScheme.md) + +Get the key scheme of the keypair ED25519 + +#### Returns + +[`SignatureScheme`](../../../cryptography/type-aliases/SignatureScheme.md) + +#### Overrides + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`getKeyScheme`](../../../cryptography/classes/Keypair.md#getkeyscheme) + +*** + +### generate() + +> `static` **generate**(): [`Ed25519Keypair`](Ed25519Keypair.md) + +Generate a new random Ed25519 keypair + +#### Returns + +[`Ed25519Keypair`](Ed25519Keypair.md) + +*** + +### fromSecretKey() + +> `static` **fromSecretKey**(`secretKey`, `options`?): [`Ed25519Keypair`](Ed25519Keypair.md) + +Create a Ed25519 keypair from a raw secret key byte array, also known as seed. +This is NOT the private scalar which is result of hashing and bit clamping of +the raw secret key. + +#### Parameters + +• **secretKey**: `Uint8Array` + +secret key byte array + +• **options?** + +• **options.skipValidation?**: `boolean` + +#### Returns + +[`Ed25519Keypair`](Ed25519Keypair.md) + +#### Throws + +error if the provided secret key is invalid and validation is not skipped. + +*** + +### getPublicKey() + +> **getPublicKey**(): [`Ed25519PublicKey`](Ed25519PublicKey.md) + +The public key for this Ed25519 keypair + +#### Returns + +[`Ed25519PublicKey`](Ed25519PublicKey.md) + +#### Overrides + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`getPublicKey`](../../../cryptography/classes/Keypair.md#getpublickey) + +*** + +### getSecretKey() + +> **getSecretKey**(): `string` + +The Bech32 secret key string for this Ed25519 keypair + +#### Returns + +`string` + +#### Overrides + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`getSecretKey`](../../../cryptography/classes/Keypair.md#getsecretkey) + +*** + +### sign() + +> **sign**(`data`): `Promise`\<`Uint8Array`\> + +Return the signature for the provided data using Ed25519. + +#### Parameters + +• **data**: `Uint8Array` + +#### Returns + +`Promise`\<`Uint8Array`\> + +#### Overrides + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`sign`](../../../cryptography/classes/Keypair.md#sign) + +*** + +### deriveKeypair() + +> `static` **deriveKeypair**(`mnemonics`, `path`?): [`Ed25519Keypair`](Ed25519Keypair.md) + +Derive Ed25519 keypair from mnemonics and path. The mnemonics must be normalized +and validated against the english wordlist. + +If path is none, it will default to m/44'/4218'/0'/0'/0', otherwise the path must +be compliant to SLIP-0010 in form m/44'/4218'/{account_index}'/{change_index}'/{address_index}'. + +#### Parameters + +• **mnemonics**: `string` + +• **path?**: `string` + +#### Returns + +[`Ed25519Keypair`](Ed25519Keypair.md) + +*** + +### deriveKeypairFromSeed() + +> `static` **deriveKeypairFromSeed**(`seedHex`, `path`?): [`Ed25519Keypair`](Ed25519Keypair.md) + +Derive Ed25519 keypair from mnemonicSeed and path. + +If path is none, it will default to m/44'/4218'/0'/0'/0', otherwise the path must +be compliant to SLIP-0010 in form m/44'/4218'/{account_index}'/{change_index}'/{address_index}'. + +#### Parameters + +• **seedHex**: `string` + +• **path?**: `string` + +#### Returns + +[`Ed25519Keypair`](Ed25519Keypair.md) diff --git a/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519PublicKey.md b/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519PublicKey.md new file mode 100644 index 00000000000..5b46db27abe --- /dev/null +++ b/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519PublicKey.md @@ -0,0 +1,274 @@ +# Class: Ed25519PublicKey + +An Ed25519 public key + +## Extends + +- [`PublicKey`](../../../cryptography/classes/PublicKey.md) + +## Constructors + +### new Ed25519PublicKey() + +> **new Ed25519PublicKey**(`value`): [`Ed25519PublicKey`](Ed25519PublicKey.md) + +Create a new Ed25519PublicKey object + +#### Parameters + +• **value**: `PublicKeyInitData` + +ed25519 public key as buffer or base-64 encoded string + +#### Returns + +[`Ed25519PublicKey`](Ed25519PublicKey.md) + +#### Overrides + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`constructor`](../../../cryptography/classes/PublicKey.md#constructors) + +## Properties + +### SIZE + +> `static` **SIZE**: `number` = `PUBLIC_KEY_SIZE` + +## Methods + +### toBase64() + +> **toBase64**(): `string` + +Return the base-64 representation of the public key + +#### Returns + +`string` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toBase64`](../../../cryptography/classes/PublicKey.md#tobase64) + +*** + +### toString() + +> **toString**(): `never` + +#### Returns + +`never` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toString`](../../../cryptography/classes/PublicKey.md#tostring) + +*** + +### toIotaPublicKey() + +> **toIotaPublicKey**(): `string` + +Return the IOTA representation of the public key encoded in +base-64. A IOTA public key is formed by the concatenation +of the scheme flag with the raw bytes of the public key + +#### Returns + +`string` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaPublicKey`](../../../cryptography/classes/PublicKey.md#toiotapublickey) + +*** + +### verifyWithIntent() + +> **verifyWithIntent**(`bytes`, `signature`, `intent`): `Promise`\<`boolean`\> + +#### Parameters + +• **bytes**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +• **intent**: [`IntentScope`](../../../cryptography/type-aliases/IntentScope.md) + +#### Returns + +`Promise`\<`boolean`\> + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyWithIntent`](../../../cryptography/classes/PublicKey.md#verifywithintent) + +*** + +### verifyPersonalMessage() + +> **verifyPersonalMessage**(`message`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided PersonalMessage + +#### Parameters + +• **message**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyPersonalMessage`](../../../cryptography/classes/PublicKey.md#verifypersonalmessage) + +*** + +### verifyTransaction() + +> **verifyTransaction**(`transaction`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided Transaction + +#### Parameters + +• **transaction**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyTransaction`](../../../cryptography/classes/PublicKey.md#verifytransaction) + +*** + +### toIotaBytes() + +> **toIotaBytes**(): `Uint8Array` + +Returns the bytes representation of the public key +prefixed with the signature scheme flag + +#### Returns + +`Uint8Array` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaBytes`](../../../cryptography/classes/PublicKey.md#toiotabytes) + +*** + +### toIotaBytesForAddress() + +> **toIotaBytesForAddress**(): `Uint8Array` + +Returns the bytes representation of the public key +prefixed with the signature scheme flag. If the +signature scheme is ED25519, no prefix is set. + +#### Returns + +`Uint8Array` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaBytesForAddress`](../../../cryptography/classes/PublicKey.md#toiotabytesforaddress) + +*** + +### toIotaAddress() + +> **toIotaAddress**(): `string` + +Return the IOTA address associated with this Ed25519 public key + +#### Returns + +`string` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaAddress`](../../../cryptography/classes/PublicKey.md#toiotaaddress) + +*** + +### equals() + +> **equals**(`publicKey`): `boolean` + +Checks if two Ed25519 public keys are equal + +#### Parameters + +• **publicKey**: [`Ed25519PublicKey`](Ed25519PublicKey.md) + +#### Returns + +`boolean` + +#### Overrides + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`equals`](../../../cryptography/classes/PublicKey.md#equals) + +*** + +### toRawBytes() + +> **toRawBytes**(): `Uint8Array` + +Return the byte array representation of the Ed25519 public key + +#### Returns + +`Uint8Array` + +#### Overrides + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toRawBytes`](../../../cryptography/classes/PublicKey.md#torawbytes) + +*** + +### flag() + +> **flag**(): `number` + +Return the IOTA address associated with this Ed25519 public key + +#### Returns + +`number` + +#### Overrides + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`flag`](../../../cryptography/classes/PublicKey.md#flag) + +*** + +### verify() + +> **verify**(`message`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided message + +#### Parameters + +• **message**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> + +#### Overrides + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verify`](../../../cryptography/classes/PublicKey.md#verify) diff --git a/docs/content/ts-sdk/api/keypairs/ed25519/index.md b/docs/content/ts-sdk/api/keypairs/ed25519/index.md new file mode 100644 index 00000000000..0f255541112 --- /dev/null +++ b/docs/content/ts-sdk/api/keypairs/ed25519/index.md @@ -0,0 +1,16 @@ +# keypairs/ed25519 + +## Index + +### Classes + +- [Ed25519Keypair](classes/Ed25519Keypair.md) +- [Ed25519PublicKey](classes/Ed25519PublicKey.md) + +### Interfaces + +- [Ed25519KeypairData](interfaces/Ed25519KeypairData.md) + +### Variables + +- [DEFAULT\_ED25519\_DERIVATION\_PATH](variables/DEFAULT_ED25519_DERIVATION_PATH.md) diff --git a/docs/content/ts-sdk/api/keypairs/ed25519/interfaces/Ed25519KeypairData.md b/docs/content/ts-sdk/api/keypairs/ed25519/interfaces/Ed25519KeypairData.md new file mode 100644 index 00000000000..2041757a768 --- /dev/null +++ b/docs/content/ts-sdk/api/keypairs/ed25519/interfaces/Ed25519KeypairData.md @@ -0,0 +1,17 @@ +# Interface: Ed25519KeypairData + +Ed25519 Keypair data. The publickey is the 32-byte public key and +the secretkey is 64-byte, where the first 32 bytes is the secret +key and the last 32 bytes is the public key. + +## Properties + +### publicKey + +> **publicKey**: `Uint8Array` + +*** + +### secretKey + +> **secretKey**: `Uint8Array` diff --git a/docs/content/ts-sdk/api/keypairs/ed25519/variables/DEFAULT_ED25519_DERIVATION_PATH.md b/docs/content/ts-sdk/api/keypairs/ed25519/variables/DEFAULT_ED25519_DERIVATION_PATH.md new file mode 100644 index 00000000000..73eccc6b64f --- /dev/null +++ b/docs/content/ts-sdk/api/keypairs/ed25519/variables/DEFAULT_ED25519_DERIVATION_PATH.md @@ -0,0 +1,3 @@ +# Variable: DEFAULT\_ED25519\_DERIVATION\_PATH + +> `const` **DEFAULT\_ED25519\_DERIVATION\_PATH**: `"m/44'/4218'/0'/0'/0'"` = `"m/44'/4218'/0'/0'/0'"` diff --git a/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1Keypair.md b/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1Keypair.md new file mode 100644 index 00000000000..c9d978b40fb --- /dev/null +++ b/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1Keypair.md @@ -0,0 +1,265 @@ +# Class: Secp256k1Keypair + +An Secp256k1 Keypair used for signing transactions. + +## Extends + +- [`Keypair`](../../../cryptography/classes/Keypair.md) + +## Constructors + +### new Secp256k1Keypair() + +> **new Secp256k1Keypair**(`keypair`?): [`Secp256k1Keypair`](Secp256k1Keypair.md) + +Create a new keypair instance. +Generate random keypair if no [Secp256k1Keypair](Secp256k1Keypair.md) is provided. + +#### Parameters + +• **keypair?**: [`Secp256k1KeypairData`](../interfaces/Secp256k1KeypairData.md) + +secp256k1 keypair + +#### Returns + +[`Secp256k1Keypair`](Secp256k1Keypair.md) + +#### Overrides + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`constructor`](../../../cryptography/classes/Keypair.md#constructors) + +## Methods + +### signWithIntent() + +> **signWithIntent**(`bytes`, `intent`): `Promise`\<[`SignatureWithBytes`](../../../cryptography/interfaces/SignatureWithBytes.md)\> + +Sign messages with a specific intent. By combining the message bytes with the intent before hashing and signing, +it ensures that a signed message is tied to a specific purpose and domain separator is provided + +#### Parameters + +• **bytes**: `Uint8Array` + +• **intent**: [`IntentScope`](../../../cryptography/type-aliases/IntentScope.md) + +#### Returns + +`Promise`\<[`SignatureWithBytes`](../../../cryptography/interfaces/SignatureWithBytes.md)\> + +#### Inherited from + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`signWithIntent`](../../../cryptography/classes/Keypair.md#signwithintent) + +*** + +### signTransaction() + +> **signTransaction**(`bytes`): `Promise`\<[`SignatureWithBytes`](../../../cryptography/interfaces/SignatureWithBytes.md)\> + +Signs provided transaction by calling `signWithIntent()` with a `TransactionData` provided as intent scope + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<[`SignatureWithBytes`](../../../cryptography/interfaces/SignatureWithBytes.md)\> + +#### Inherited from + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`signTransaction`](../../../cryptography/classes/Keypair.md#signtransaction) + +*** + +### signPersonalMessage() + +> **signPersonalMessage**(`bytes`): `Promise`\<`object`\> + +Signs provided personal message by calling `signWithIntent()` with a `PersonalMessage` provided as intent scope + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<`object`\> + +##### bytes + +> **bytes**: `string` + +##### signature + +> **signature**: `string` + +#### Inherited from + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`signPersonalMessage`](../../../cryptography/classes/Keypair.md#signpersonalmessage) + +*** + +### toIotaAddress() + +> **toIotaAddress**(): `string` + +#### Returns + +`string` + +#### Inherited from + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`toIotaAddress`](../../../cryptography/classes/Keypair.md#toiotaaddress) + +*** + +### getKeyScheme() + +> **getKeyScheme**(): [`SignatureScheme`](../../../cryptography/type-aliases/SignatureScheme.md) + +Get the key scheme of the keypair Secp256k1 + +#### Returns + +[`SignatureScheme`](../../../cryptography/type-aliases/SignatureScheme.md) + +#### Overrides + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`getKeyScheme`](../../../cryptography/classes/Keypair.md#getkeyscheme) + +*** + +### generate() + +> `static` **generate**(): [`Secp256k1Keypair`](Secp256k1Keypair.md) + +Generate a new random keypair + +#### Returns + +[`Secp256k1Keypair`](Secp256k1Keypair.md) + +*** + +### fromSecretKey() + +> `static` **fromSecretKey**(`secretKey`, `options`?): [`Secp256k1Keypair`](Secp256k1Keypair.md) + +Create a keypair from a raw secret key byte array. + +This method should only be used to recreate a keypair from a previously +generated secret key. Generating keypairs from a random seed should be done +with the Keypair.fromSeed method. + +#### Parameters + +• **secretKey**: `Uint8Array` + +secret key byte array + +• **options?** + +• **options.skipValidation?**: `boolean` + +#### Returns + +[`Secp256k1Keypair`](Secp256k1Keypair.md) + +#### Throws + +error if the provided secret key is invalid and validation is not skipped. + +*** + +### fromSeed() + +> `static` **fromSeed**(`seed`): [`Secp256k1Keypair`](Secp256k1Keypair.md) + +Generate a keypair from a 32 byte seed. + +#### Parameters + +• **seed**: `Uint8Array` + +seed byte array + +#### Returns + +[`Secp256k1Keypair`](Secp256k1Keypair.md) + +*** + +### getPublicKey() + +> **getPublicKey**(): [`PublicKey`](../../../cryptography/classes/PublicKey.md) + +The public key for this keypair + +#### Returns + +[`PublicKey`](../../../cryptography/classes/PublicKey.md) + +#### Overrides + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`getPublicKey`](../../../cryptography/classes/Keypair.md#getpublickey) + +*** + +### getSecretKey() + +> **getSecretKey**(): `string` + +The Bech32 secret key string for this Secp256k1 keypair + +#### Returns + +`string` + +#### Overrides + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`getSecretKey`](../../../cryptography/classes/Keypair.md#getsecretkey) + +*** + +### sign() + +> **sign**(`data`): `Promise`\<`Uint8Array`\> + +Return the signature for the provided data. + +#### Parameters + +• **data**: `Uint8Array` + +#### Returns + +`Promise`\<`Uint8Array`\> + +#### Overrides + +[`Keypair`](../../../cryptography/classes/Keypair.md).[`sign`](../../../cryptography/classes/Keypair.md#sign) + +*** + +### deriveKeypair() + +> `static` **deriveKeypair**(`mnemonics`, `path`?): [`Secp256k1Keypair`](Secp256k1Keypair.md) + +Derive Secp256k1 keypair from mnemonics and path. The mnemonics must be normalized +and validated against the english wordlist. + +If path is none, it will default to m/54'/4218'/0'/0/0, otherwise the path must +be compliant to BIP-32 in form m/54'/4218'/{account_index}'/{change_index}/{address_index}. + +#### Parameters + +• **mnemonics**: `string` + +• **path?**: `string` + +#### Returns + +[`Secp256k1Keypair`](Secp256k1Keypair.md) diff --git a/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1PublicKey.md b/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1PublicKey.md new file mode 100644 index 00000000000..bf2b486f915 --- /dev/null +++ b/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1PublicKey.md @@ -0,0 +1,274 @@ +# Class: Secp256k1PublicKey + +A Secp256k1 public key + +## Extends + +- [`PublicKey`](../../../cryptography/classes/PublicKey.md) + +## Constructors + +### new Secp256k1PublicKey() + +> **new Secp256k1PublicKey**(`value`): [`Secp256k1PublicKey`](Secp256k1PublicKey.md) + +Create a new Secp256k1PublicKey object + +#### Parameters + +• **value**: `PublicKeyInitData` + +secp256k1 public key as buffer or base-64 encoded string + +#### Returns + +[`Secp256k1PublicKey`](Secp256k1PublicKey.md) + +#### Overrides + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`constructor`](../../../cryptography/classes/PublicKey.md#constructors) + +## Properties + +### SIZE + +> `static` **SIZE**: `number` = `SECP256K1_PUBLIC_KEY_SIZE` + +## Methods + +### toBase64() + +> **toBase64**(): `string` + +Return the base-64 representation of the public key + +#### Returns + +`string` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toBase64`](../../../cryptography/classes/PublicKey.md#tobase64) + +*** + +### toString() + +> **toString**(): `never` + +#### Returns + +`never` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toString`](../../../cryptography/classes/PublicKey.md#tostring) + +*** + +### toIotaPublicKey() + +> **toIotaPublicKey**(): `string` + +Return the IOTA representation of the public key encoded in +base-64. A IOTA public key is formed by the concatenation +of the scheme flag with the raw bytes of the public key + +#### Returns + +`string` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaPublicKey`](../../../cryptography/classes/PublicKey.md#toiotapublickey) + +*** + +### verifyWithIntent() + +> **verifyWithIntent**(`bytes`, `signature`, `intent`): `Promise`\<`boolean`\> + +#### Parameters + +• **bytes**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +• **intent**: [`IntentScope`](../../../cryptography/type-aliases/IntentScope.md) + +#### Returns + +`Promise`\<`boolean`\> + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyWithIntent`](../../../cryptography/classes/PublicKey.md#verifywithintent) + +*** + +### verifyPersonalMessage() + +> **verifyPersonalMessage**(`message`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided PersonalMessage + +#### Parameters + +• **message**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyPersonalMessage`](../../../cryptography/classes/PublicKey.md#verifypersonalmessage) + +*** + +### verifyTransaction() + +> **verifyTransaction**(`transaction`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided Transaction + +#### Parameters + +• **transaction**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyTransaction`](../../../cryptography/classes/PublicKey.md#verifytransaction) + +*** + +### toIotaBytes() + +> **toIotaBytes**(): `Uint8Array` + +Returns the bytes representation of the public key +prefixed with the signature scheme flag + +#### Returns + +`Uint8Array` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaBytes`](../../../cryptography/classes/PublicKey.md#toiotabytes) + +*** + +### toIotaBytesForAddress() + +> **toIotaBytesForAddress**(): `Uint8Array` + +Returns the bytes representation of the public key +prefixed with the signature scheme flag. If the +signature scheme is ED25519, no prefix is set. + +#### Returns + +`Uint8Array` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaBytesForAddress`](../../../cryptography/classes/PublicKey.md#toiotabytesforaddress) + +*** + +### toIotaAddress() + +> **toIotaAddress**(): `string` + +Return the IOTA address associated with this Ed25519 public key + +#### Returns + +`string` + +#### Inherited from + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaAddress`](../../../cryptography/classes/PublicKey.md#toiotaaddress) + +*** + +### equals() + +> **equals**(`publicKey`): `boolean` + +Checks if two Secp256k1 public keys are equal + +#### Parameters + +• **publicKey**: [`Secp256k1PublicKey`](Secp256k1PublicKey.md) + +#### Returns + +`boolean` + +#### Overrides + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`equals`](../../../cryptography/classes/PublicKey.md#equals) + +*** + +### toRawBytes() + +> **toRawBytes**(): `Uint8Array` + +Return the byte array representation of the Secp256k1 public key + +#### Returns + +`Uint8Array` + +#### Overrides + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toRawBytes`](../../../cryptography/classes/PublicKey.md#torawbytes) + +*** + +### flag() + +> **flag**(): `number` + +Return the IOTA address associated with this Secp256k1 public key + +#### Returns + +`number` + +#### Overrides + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`flag`](../../../cryptography/classes/PublicKey.md#flag) + +*** + +### verify() + +> **verify**(`message`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided message + +#### Parameters + +• **message**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> + +#### Overrides + +[`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verify`](../../../cryptography/classes/PublicKey.md#verify) diff --git a/docs/content/ts-sdk/api/keypairs/secp256k1/index.md b/docs/content/ts-sdk/api/keypairs/secp256k1/index.md new file mode 100644 index 00000000000..5167f383dd7 --- /dev/null +++ b/docs/content/ts-sdk/api/keypairs/secp256k1/index.md @@ -0,0 +1,25 @@ +# keypairs/secp256k1 + +## References + +### DEFAULT\_SECP256K1\_DERIVATION\_PATH + +Re-exports [DEFAULT_SECP256K1_DERIVATION_PATH](variables/DEFAULT_SECP256K1_DERIVATION_PATH.md) + +*** + +### Secp256k1Keypair + +Re-exports [Secp256k1Keypair](classes/Secp256k1Keypair.md) + +*** + +### Secp256k1KeypairData + +Re-exports [Secp256k1KeypairData](interfaces/Secp256k1KeypairData.md) + +*** + +### Secp256k1PublicKey + +Re-exports [Secp256k1PublicKey](classes/Secp256k1PublicKey.md) diff --git a/docs/content/ts-sdk/api/keypairs/secp256k1/interfaces/Secp256k1KeypairData.md b/docs/content/ts-sdk/api/keypairs/secp256k1/interfaces/Secp256k1KeypairData.md new file mode 100644 index 00000000000..c6761ef2a8b --- /dev/null +++ b/docs/content/ts-sdk/api/keypairs/secp256k1/interfaces/Secp256k1KeypairData.md @@ -0,0 +1,15 @@ +# Interface: Secp256k1KeypairData + +Secp256k1 Keypair data + +## Properties + +### publicKey + +> **publicKey**: `Uint8Array` + +*** + +### secretKey + +> **secretKey**: `Uint8Array` diff --git a/docs/content/ts-sdk/api/keypairs/secp256k1/variables/DEFAULT_SECP256K1_DERIVATION_PATH.md b/docs/content/ts-sdk/api/keypairs/secp256k1/variables/DEFAULT_SECP256K1_DERIVATION_PATH.md new file mode 100644 index 00000000000..27f35eea3ab --- /dev/null +++ b/docs/content/ts-sdk/api/keypairs/secp256k1/variables/DEFAULT_SECP256K1_DERIVATION_PATH.md @@ -0,0 +1,3 @@ +# Variable: DEFAULT\_SECP256K1\_DERIVATION\_PATH + +> `const` **DEFAULT\_SECP256K1\_DERIVATION\_PATH**: `"m/54'/4218'/0'/0/0"` = `"m/54'/4218'/0'/0/0"` diff --git a/docs/content/ts-sdk/api/multisig/classes/MultiSigPublicKey.md b/docs/content/ts-sdk/api/multisig/classes/MultiSigPublicKey.md new file mode 100644 index 00000000000..2190d11d77f --- /dev/null +++ b/docs/content/ts-sdk/api/multisig/classes/MultiSigPublicKey.md @@ -0,0 +1,339 @@ +# Class: MultiSigPublicKey + +A MultiSig public key + +## Extends + +- [`PublicKey`](../../cryptography/classes/PublicKey.md) + +## Constructors + +### new MultiSigPublicKey() + +> **new MultiSigPublicKey**(`value`): [`MultiSigPublicKey`](MultiSigPublicKey.md) + +Create a new MultiSigPublicKey object + +#### Parameters + +• **value**: `string` \| `Uint8Array` \| `MultiSigPublicKeyStruct` + +MultiSig public key as buffer or base-64 encoded string + +#### Returns + +[`MultiSigPublicKey`](MultiSigPublicKey.md) + +#### Overrides + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`constructor`](../../cryptography/classes/PublicKey.md#constructors) + +## Methods + +### toBase64() + +> **toBase64**(): `string` + +Return the base-64 representation of the public key + +#### Returns + +`string` + +#### Inherited from + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`toBase64`](../../cryptography/classes/PublicKey.md#tobase64) + +*** + +### toString() + +> **toString**(): `never` + +#### Returns + +`never` + +#### Inherited from + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`toString`](../../cryptography/classes/PublicKey.md#tostring) + +*** + +### toIotaPublicKey() + +> **toIotaPublicKey**(): `string` + +Return the IOTA representation of the public key encoded in +base-64. A IOTA public key is formed by the concatenation +of the scheme flag with the raw bytes of the public key + +#### Returns + +`string` + +#### Inherited from + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`toIotaPublicKey`](../../cryptography/classes/PublicKey.md#toiotapublickey) + +*** + +### verifyWithIntent() + +> **verifyWithIntent**(`bytes`, `signature`, `intent`): `Promise`\<`boolean`\> + +#### Parameters + +• **bytes**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +• **intent**: [`IntentScope`](../../cryptography/type-aliases/IntentScope.md) + +#### Returns + +`Promise`\<`boolean`\> + +#### Inherited from + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`verifyWithIntent`](../../cryptography/classes/PublicKey.md#verifywithintent) + +*** + +### verifyPersonalMessage() + +> **verifyPersonalMessage**(`message`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided PersonalMessage + +#### Parameters + +• **message**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> + +#### Inherited from + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`verifyPersonalMessage`](../../cryptography/classes/PublicKey.md#verifypersonalmessage) + +*** + +### verifyTransaction() + +> **verifyTransaction**(`transaction`, `signature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided Transaction + +#### Parameters + +• **transaction**: `Uint8Array` + +• **signature**: `string` \| `Uint8Array` + +#### Returns + +`Promise`\<`boolean`\> + +#### Inherited from + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`verifyTransaction`](../../cryptography/classes/PublicKey.md#verifytransaction) + +*** + +### toIotaBytes() + +> **toIotaBytes**(): `Uint8Array` + +Returns the bytes representation of the public key +prefixed with the signature scheme flag + +#### Returns + +`Uint8Array` + +#### Inherited from + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`toIotaBytes`](../../cryptography/classes/PublicKey.md#toiotabytes) + +*** + +### toIotaBytesForAddress() + +> **toIotaBytesForAddress**(): `Uint8Array` + +Returns the bytes representation of the public key +prefixed with the signature scheme flag. If the +signature scheme is ED25519, no prefix is set. + +#### Returns + +`Uint8Array` + +#### Inherited from + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`toIotaBytesForAddress`](../../cryptography/classes/PublicKey.md#toiotabytesforaddress) + +*** + +### fromPublicKeys() + +> `static` **fromPublicKeys**(`__namedParameters`): [`MultiSigPublicKey`](MultiSigPublicKey.md) + +A static method to create a new MultiSig publickey instance from a set of public keys and their associated weights pairs and threshold. + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.threshold**: `number` + +• **\_\_namedParameters.publicKeys**: `object`[] + +#### Returns + +[`MultiSigPublicKey`](MultiSigPublicKey.md) + +*** + +### equals() + +> **equals**(`publicKey`): `boolean` + +Checks if two MultiSig public keys are equal + +#### Parameters + +• **publicKey**: [`MultiSigPublicKey`](MultiSigPublicKey.md) + +#### Returns + +`boolean` + +#### Overrides + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`equals`](../../cryptography/classes/PublicKey.md#equals) + +*** + +### toRawBytes() + +> **toRawBytes**(): `Uint8Array` + +Return the byte array representation of the MultiSig public key + +#### Returns + +`Uint8Array` + +#### Overrides + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`toRawBytes`](../../cryptography/classes/PublicKey.md#torawbytes) + +*** + +### getPublicKeys() + +> **getPublicKeys**(): `object`[] + +#### Returns + +`object`[] + +*** + +### getThreshold() + +> **getThreshold**(): `number` + +#### Returns + +`number` + +*** + +### getSigner() + +> **getSigner**(...`signers`): [`MultiSigSigner`](MultiSigSigner.md) + +#### Parameters + +• ...**signers**: [[`Signer`](../../cryptography/classes/Signer.md)] + +#### Returns + +[`MultiSigSigner`](MultiSigSigner.md) + +*** + +### toIotaAddress() + +> **toIotaAddress**(): `string` + +Return the IOTA address associated with this MultiSig public key + +#### Returns + +`string` + +#### Overrides + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`toIotaAddress`](../../cryptography/classes/PublicKey.md#toiotaaddress) + +*** + +### flag() + +> **flag**(): `number` + +Return the IOTA address associated with this MultiSig public key + +#### Returns + +`number` + +#### Overrides + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`flag`](../../cryptography/classes/PublicKey.md#flag) + +*** + +### verify() + +> **verify**(`message`, `multisigSignature`): `Promise`\<`boolean`\> + +Verifies that the signature is valid for for the provided message + +#### Parameters + +• **message**: `Uint8Array` + +• **multisigSignature**: `string` + +#### Returns + +`Promise`\<`boolean`\> + +#### Overrides + +[`PublicKey`](../../cryptography/classes/PublicKey.md).[`verify`](../../cryptography/classes/PublicKey.md#verify) + +*** + +### combinePartialSignatures() + +> **combinePartialSignatures**(`signatures`): `string` + +Combines multiple partial signatures into a single multisig, ensuring that each public key signs only once +and that all the public keys involved are known and valid, and then serializes multisig into the standard format + +#### Parameters + +• **signatures**: `string`[] + +#### Returns + +`string` diff --git a/docs/content/ts-sdk/api/multisig/classes/MultiSigSigner.md b/docs/content/ts-sdk/api/multisig/classes/MultiSigSigner.md new file mode 100644 index 00000000000..f5d10c6677a --- /dev/null +++ b/docs/content/ts-sdk/api/multisig/classes/MultiSigSigner.md @@ -0,0 +1,184 @@ +# Class: MultiSigSigner + +TODO: Document + +## Extends + +- [`Signer`](../../cryptography/classes/Signer.md) + +## Constructors + +### new MultiSigSigner() + +> **new MultiSigSigner**(`pubkey`, `signers`): [`MultiSigSigner`](MultiSigSigner.md) + +#### Parameters + +• **pubkey**: [`MultiSigPublicKey`](MultiSigPublicKey.md) + +• **signers**: [`Signer`](../../cryptography/classes/Signer.md)[] = `[]` + +#### Returns + +[`MultiSigSigner`](MultiSigSigner.md) + +#### Overrides + +[`Signer`](../../cryptography/classes/Signer.md).[`constructor`](../../cryptography/classes/Signer.md#constructors) + +## Methods + +### signWithIntent() + +> **signWithIntent**(`bytes`, `intent`): `Promise`\<[`SignatureWithBytes`](../../cryptography/interfaces/SignatureWithBytes.md)\> + +Sign messages with a specific intent. By combining the message bytes with the intent before hashing and signing, +it ensures that a signed message is tied to a specific purpose and domain separator is provided + +#### Parameters + +• **bytes**: `Uint8Array` + +• **intent**: [`IntentScope`](../../cryptography/type-aliases/IntentScope.md) + +#### Returns + +`Promise`\<[`SignatureWithBytes`](../../cryptography/interfaces/SignatureWithBytes.md)\> + +#### Inherited from + +[`Signer`](../../cryptography/classes/Signer.md).[`signWithIntent`](../../cryptography/classes/Signer.md#signwithintent) + +*** + +### toIotaAddress() + +> **toIotaAddress**(): `string` + +#### Returns + +`string` + +#### Inherited from + +[`Signer`](../../cryptography/classes/Signer.md).[`toIotaAddress`](../../cryptography/classes/Signer.md#toiotaaddress) + +*** + +### getKeyScheme() + +> **getKeyScheme**(): [`SignatureScheme`](../../cryptography/type-aliases/SignatureScheme.md) + +Get the key scheme of the keypair: Secp256k1 or ED25519 + +#### Returns + +[`SignatureScheme`](../../cryptography/type-aliases/SignatureScheme.md) + +#### Overrides + +[`Signer`](../../cryptography/classes/Signer.md).[`getKeyScheme`](../../cryptography/classes/Signer.md#getkeyscheme) + +*** + +### getPublicKey() + +> **getPublicKey**(): [`MultiSigPublicKey`](MultiSigPublicKey.md) + +The public key for this keypair + +#### Returns + +[`MultiSigPublicKey`](MultiSigPublicKey.md) + +#### Overrides + +[`Signer`](../../cryptography/classes/Signer.md).[`getPublicKey`](../../cryptography/classes/Signer.md#getpublickey) + +*** + +### sign() + +> **sign**(`_data`): `never` + +#### Parameters + +• **\_data**: `Uint8Array` + +#### Returns + +`never` + +#### Overrides + +[`Signer`](../../cryptography/classes/Signer.md).[`sign`](../../cryptography/classes/Signer.md#sign) + +*** + +### signData() + +> **signData**(`_data`): `never` + +#### Parameters + +• **\_data**: `Uint8Array` + +#### Returns + +`never` + +*** + +### signTransaction() + +> **signTransaction**(`bytes`): `Promise`\<`object`\> + +Signs provided transaction by calling `signWithIntent()` with a `TransactionData` provided as intent scope + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<`object`\> + +##### signature + +> **signature**: `string` + +##### bytes + +> **bytes**: `string` + +#### Overrides + +[`Signer`](../../cryptography/classes/Signer.md).[`signTransaction`](../../cryptography/classes/Signer.md#signtransaction) + +*** + +### signPersonalMessage() + +> **signPersonalMessage**(`bytes`): `Promise`\<`object`\> + +Signs provided personal message by calling `signWithIntent()` with a `PersonalMessage` provided as intent scope + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +`Promise`\<`object`\> + +##### signature + +> **signature**: `string` + +##### bytes + +> **bytes**: `string` + +#### Overrides + +[`Signer`](../../cryptography/classes/Signer.md).[`signPersonalMessage`](../../cryptography/classes/Signer.md#signpersonalmessage) diff --git a/docs/content/ts-sdk/api/multisig/functions/parsePartialSignatures.md b/docs/content/ts-sdk/api/multisig/functions/parsePartialSignatures.md new file mode 100644 index 00000000000..c8da186fa70 --- /dev/null +++ b/docs/content/ts-sdk/api/multisig/functions/parsePartialSignatures.md @@ -0,0 +1,13 @@ +# Function: parsePartialSignatures() + +> **parsePartialSignatures**(`multisig`): `ParsedPartialMultiSigSignature`[] + +Parse multisig structure into an array of individual signatures: signature scheme, the actual individual signature, public key and its weight. + +## Parameters + +• **multisig**: [`MultiSigStruct`](../type-aliases/MultiSigStruct.md) + +## Returns + +`ParsedPartialMultiSigSignature`[] diff --git a/docs/content/ts-sdk/api/multisig/index.md b/docs/content/ts-sdk/api/multisig/index.md new file mode 100644 index 00000000000..2d1327238f1 --- /dev/null +++ b/docs/content/ts-sdk/api/multisig/index.md @@ -0,0 +1,16 @@ +# multisig + +## Index + +### Classes + +- [MultiSigPublicKey](classes/MultiSigPublicKey.md) +- [MultiSigSigner](classes/MultiSigSigner.md) + +### Type Aliases + +- [MultiSigStruct](type-aliases/MultiSigStruct.md) + +### Functions + +- [parsePartialSignatures](functions/parsePartialSignatures.md) diff --git a/docs/content/ts-sdk/api/multisig/type-aliases/MultiSigStruct.md b/docs/content/ts-sdk/api/multisig/type-aliases/MultiSigStruct.md new file mode 100644 index 00000000000..0f9e0237dd2 --- /dev/null +++ b/docs/content/ts-sdk/api/multisig/type-aliases/MultiSigStruct.md @@ -0,0 +1,17 @@ +# Type Alias: MultiSigStruct + +> **MultiSigStruct**: `object` + +## Type declaration + +### sigs + +> **sigs**: `CompressedSignature`[] + +### bitmap + +> **bitmap**: `number` + +### multisig\_pk + +> **multisig\_pk**: `MultiSigPublicKeyStruct` diff --git a/docs/content/ts-sdk/api/transactions/classes/AsyncCache.md b/docs/content/ts-sdk/api/transactions/classes/AsyncCache.md new file mode 100644 index 00000000000..22cbc913383 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/classes/AsyncCache.md @@ -0,0 +1,297 @@ +# Class: `abstract` AsyncCache + +## Constructors + +### new AsyncCache() + +> **new AsyncCache**(): [`AsyncCache`](AsyncCache.md) + +#### Returns + +[`AsyncCache`](AsyncCache.md) + +## Methods + +### get() + +> `abstract` `protected` **get**\<`T`\>(`type`, `key`): `Promise`\<`null` \| `CacheEntryTypes`\[`T`\]\> + +#### Type Parameters + +• **T** *extends* keyof `CacheEntryTypes` + +#### Parameters + +• **type**: `T` + +• **key**: `string` + +#### Returns + +`Promise`\<`null` \| `CacheEntryTypes`\[`T`\]\> + +*** + +### set() + +> `abstract` `protected` **set**\<`T`\>(`type`, `key`, `value`): `Promise`\<`void`\> + +#### Type Parameters + +• **T** *extends* keyof `CacheEntryTypes` + +#### Parameters + +• **type**: `T` + +• **key**: `string` + +• **value**: `CacheEntryTypes`\[`T`\] + +#### Returns + +`Promise`\<`void`\> + +*** + +### delete() + +> `abstract` `protected` **delete**\<`T`\>(`type`, `key`): `Promise`\<`void`\> + +#### Type Parameters + +• **T** *extends* keyof `CacheEntryTypes` + +#### Parameters + +• **type**: `T` + +• **key**: `string` + +#### Returns + +`Promise`\<`void`\> + +*** + +### clear() + +> `abstract` **clear**\<`T`\>(`type`?): `Promise`\<`void`\> + +#### Type Parameters + +• **T** *extends* keyof `CacheEntryTypes` + +#### Parameters + +• **type?**: `T` + +#### Returns + +`Promise`\<`void`\> + +*** + +### getObject() + +> **getObject**(`id`): `Promise`\<`null` \| `ObjectCacheEntry`\> + +#### Parameters + +• **id**: `string` + +#### Returns + +`Promise`\<`null` \| `ObjectCacheEntry`\> + +*** + +### getObjects() + +> **getObjects**(`ids`): `Promise`\<(`null` \| `ObjectCacheEntry`)[]\> + +#### Parameters + +• **ids**: `string`[] + +#### Returns + +`Promise`\<(`null` \| `ObjectCacheEntry`)[]\> + +*** + +### addObject() + +> **addObject**(`object`): `Promise`\<`ObjectCacheEntry`\> + +#### Parameters + +• **object**: `ObjectCacheEntry` + +#### Returns + +`Promise`\<`ObjectCacheEntry`\> + +*** + +### addObjects() + +> **addObjects**(`objects`): `Promise`\<`void`\> + +#### Parameters + +• **objects**: `ObjectCacheEntry`[] + +#### Returns + +`Promise`\<`void`\> + +*** + +### deleteObject() + +> **deleteObject**(`id`): `Promise`\<`void`\> + +#### Parameters + +• **id**: `string` + +#### Returns + +`Promise`\<`void`\> + +*** + +### deleteObjects() + +> **deleteObjects**(`ids`): `Promise`\<`void`\> + +#### Parameters + +• **ids**: `string`[] + +#### Returns + +`Promise`\<`void`\> + +*** + +### getMoveFunctionDefinition() + +> **getMoveFunctionDefinition**(`ref`): `Promise`\<`null` \| `MoveFunctionCacheEntry`\> + +#### Parameters + +• **ref** + +• **ref.package**: `string` + +• **ref.module**: `string` + +• **ref.function**: `string` + +#### Returns + +`Promise`\<`null` \| `MoveFunctionCacheEntry`\> + +*** + +### addMoveFunctionDefinition() + +> **addMoveFunctionDefinition**(`functionEntry`): `Promise`\<`object`\> + +#### Parameters + +• **functionEntry**: `MoveFunctionCacheEntry` + +#### Returns + +`Promise`\<`object`\> + +##### module + +> **module**: `string` + +##### function + +> **function**: `string` + +##### parameters + +> **parameters**: `object`[] + +##### package + +> **package**: `string` = `pkg` + +*** + +### deleteMoveFunctionDefinition() + +> **deleteMoveFunctionDefinition**(`ref`): `Promise`\<`void`\> + +#### Parameters + +• **ref** + +• **ref.package**: `string` + +• **ref.module**: `string` + +• **ref.function**: `string` + +#### Returns + +`Promise`\<`void`\> + +*** + +### getCustom() + +> **getCustom**\<`T`\>(`key`): `Promise`\<`null` \| `T`\> + +#### Type Parameters + +• **T** + +#### Parameters + +• **key**: `string` + +#### Returns + +`Promise`\<`null` \| `T`\> + +*** + +### setCustom() + +> **setCustom**\<`T`\>(`key`, `value`): `Promise`\<`void`\> + +#### Type Parameters + +• **T** + +#### Parameters + +• **key**: `string` + +• **value**: `T` + +#### Returns + +`Promise`\<`void`\> + +*** + +### deleteCustom() + +> **deleteCustom**(`key`): `Promise`\<`void`\> + +#### Parameters + +• **key**: `string` + +#### Returns + +`Promise`\<`void`\> diff --git a/docs/content/ts-sdk/api/transactions/classes/ObjectCache.md b/docs/content/ts-sdk/api/transactions/classes/ObjectCache.md new file mode 100644 index 00000000000..099a6b9895c --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/classes/ObjectCache.md @@ -0,0 +1,205 @@ +# Class: ObjectCache + +## Constructors + +### new ObjectCache() + +> **new ObjectCache**(`__namedParameters`): [`ObjectCache`](ObjectCache.md) + +#### Parameters + +• **\_\_namedParameters**: `ObjectCacheOptions` + +#### Returns + +[`ObjectCache`](ObjectCache.md) + +## Methods + +### asPlugin() + +> **asPlugin**(): [`TransactionPlugin`](../type-aliases/TransactionPlugin.md) + +#### Returns + +[`TransactionPlugin`](../type-aliases/TransactionPlugin.md) + +*** + +### clear() + +> **clear**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + +### getMoveFunctionDefinition() + +> **getMoveFunctionDefinition**(`ref`): `Promise`\<`null` \| `MoveFunctionCacheEntry`\> + +#### Parameters + +• **ref** + +• **ref.package**: `string` + +• **ref.module**: `string` + +• **ref.function**: `string` + +#### Returns + +`Promise`\<`null` \| `MoveFunctionCacheEntry`\> + +*** + +### getObjects() + +> **getObjects**(`ids`): `Promise`\<(`null` \| `ObjectCacheEntry`)[]\> + +#### Parameters + +• **ids**: `string`[] + +#### Returns + +`Promise`\<(`null` \| `ObjectCacheEntry`)[]\> + +*** + +### deleteObjects() + +> **deleteObjects**(`ids`): `Promise`\<`void`\> + +#### Parameters + +• **ids**: `string`[] + +#### Returns + +`Promise`\<`void`\> + +*** + +### clearOwnedObjects() + +> **clearOwnedObjects**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + +### clearCustom() + +> **clearCustom**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + +### getCustom() + +> **getCustom**\<`T`\>(`key`): `Promise`\<`null` \| `T`\> + +#### Type Parameters + +• **T** + +#### Parameters + +• **key**: `string` + +#### Returns + +`Promise`\<`null` \| `T`\> + +*** + +### setCustom() + +> **setCustom**\<`T`\>(`key`, `value`): `Promise`\<`void`\> + +#### Type Parameters + +• **T** + +#### Parameters + +• **key**: `string` + +• **value**: `T` + +#### Returns + +`Promise`\<`void`\> + +*** + +### deleteCustom() + +> **deleteCustom**(`key`): `Promise`\<`void`\> + +#### Parameters + +• **key**: `string` + +#### Returns + +`Promise`\<`void`\> + +*** + +### applyEffects() + +> **applyEffects**(`effects`): `Promise`\<`void`\> + +#### Parameters + +• **effects** + +• **effects.$kind**: `"V1"` + +• **effects.V1** = `TransactionEffectsV1` + +• **effects.V1.status**: `EnumOutputShapeWithKeys`\<`object`, `"Success"` \| `"Failed"`\> = `ExecutionStatus` + +• **effects.V1.executedEpoch**: `string` = `...` + +• **effects.V1.gasUsed** = `GasCostSummary` + +• **effects.V1.gasUsed.computationCost**: `string` = `...` + +• **effects.V1.gasUsed.computationCostBurned**: `string` = `...` + +• **effects.V1.gasUsed.storageCost**: `string` = `...` + +• **effects.V1.gasUsed.storageRebate**: `string` = `...` + +• **effects.V1.gasUsed.nonRefundableStorageFee**: `string` = `...` + +• **effects.V1.transactionDigest**: `string` = `ObjectDigest` + +• **effects.V1.gasObjectIndex**: `null` \| `number` = `...` + +• **effects.V1.eventsDigest**: `null` \| `string` = `...` + +• **effects.V1.dependencies**: `string`[] = `...` + +• **effects.V1.lamportVersion**: `string` = `...` + +• **effects.V1.changedObjects**: [`string`, `object`][] = `...` + +• **effects.V1.unchangedSharedObjects**: [`string`, `EnumOutputShapeWithKeys`\<`object`, `"ReadOnlyRoot"` \| `"MutateDeleted"` \| `"ReadDeleted"` \| `"Cancelled"` \| `"PerEpochConfig"`\>][] = `...` + +• **effects.V1.auxDataDigest**: `null` \| `string` = `...` + +#### Returns + +`Promise`\<`void`\> diff --git a/docs/content/ts-sdk/api/transactions/classes/ParallelTransactionExecutor.md b/docs/content/ts-sdk/api/transactions/classes/ParallelTransactionExecutor.md new file mode 100644 index 00000000000..c4182666b3c --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/classes/ParallelTransactionExecutor.md @@ -0,0 +1,59 @@ +# Class: ParallelTransactionExecutor + +## Constructors + +### new ParallelTransactionExecutor() + +> **new ParallelTransactionExecutor**(`options`): [`ParallelTransactionExecutor`](ParallelTransactionExecutor.md) + +#### Parameters + +• **options**: [`ParallelTransactionExecutorOptions`](../interfaces/ParallelTransactionExecutorOptions.md) + +#### Returns + +[`ParallelTransactionExecutor`](ParallelTransactionExecutor.md) + +## Methods + +### resetCache() + +> **resetCache**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + +### waitForLastTransaction() + +> **waitForLastTransaction**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + +### executeTransaction() + +> **executeTransaction**(`transaction`, `options`?): `Promise`\<`object`\> + +#### Parameters + +• **transaction**: [`Transaction`](Transaction.md) + +• **options?**: [`IotaTransactionBlockResponseOptions`](../../client/interfaces/IotaTransactionBlockResponseOptions.md) + +#### Returns + +`Promise`\<`object`\> + +##### digest + +> **digest**: `string` + +##### effects + +> **effects**: `string` diff --git a/docs/content/ts-sdk/api/transactions/classes/SerialTransactionExecutor.md b/docs/content/ts-sdk/api/transactions/classes/SerialTransactionExecutor.md new file mode 100644 index 00000000000..f2c5b29adb6 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/classes/SerialTransactionExecutor.md @@ -0,0 +1,123 @@ +# Class: SerialTransactionExecutor + +## Constructors + +### new SerialTransactionExecutor() + +> **new SerialTransactionExecutor**(`__namedParameters`): [`SerialTransactionExecutor`](SerialTransactionExecutor.md) + +#### Parameters + +• **\_\_namedParameters**: `Omit`\<`ObjectCacheOptions`, `"address"`\> & `object` + +#### Returns + +[`SerialTransactionExecutor`](SerialTransactionExecutor.md) + +## Methods + +### applyEffects() + +> **applyEffects**(`effects`): `Promise`\<[`void`, `void`]\> + +#### Parameters + +• **effects** + +• **effects.$kind**: `"V1"` + +• **effects.V1** = `TransactionEffectsV1` + +• **effects.V1.status**: `EnumOutputShapeWithKeys`\<`object`, `"Success"` \| `"Failed"`\> = `ExecutionStatus` + +• **effects.V1.executedEpoch**: `string` = `...` + +• **effects.V1.gasUsed** = `GasCostSummary` + +• **effects.V1.gasUsed.computationCost**: `string` = `...` + +• **effects.V1.gasUsed.computationCostBurned**: `string` = `...` + +• **effects.V1.gasUsed.storageCost**: `string` = `...` + +• **effects.V1.gasUsed.storageRebate**: `string` = `...` + +• **effects.V1.gasUsed.nonRefundableStorageFee**: `string` = `...` + +• **effects.V1.transactionDigest**: `string` = `ObjectDigest` + +• **effects.V1.gasObjectIndex**: `null` \| `number` = `...` + +• **effects.V1.eventsDigest**: `null` \| `string` = `...` + +• **effects.V1.dependencies**: `string`[] = `...` + +• **effects.V1.lamportVersion**: `string` = `...` + +• **effects.V1.changedObjects**: [`string`, `object`][] = `...` + +• **effects.V1.unchangedSharedObjects**: [`string`, `EnumOutputShapeWithKeys`\<`object`, `"ReadOnlyRoot"` \| `"MutateDeleted"` \| `"ReadDeleted"` \| `"Cancelled"` \| `"PerEpochConfig"`\>][] = `...` + +• **effects.V1.auxDataDigest**: `null` \| `string` = `...` + +#### Returns + +`Promise`\<[`void`, `void`]\> + +*** + +### buildTransaction() + +> **buildTransaction**(`transaction`): `Promise`\<`Uint8Array`\> + +#### Parameters + +• **transaction**: [`Transaction`](Transaction.md) + +#### Returns + +`Promise`\<`Uint8Array`\> + +*** + +### resetCache() + +> **resetCache**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + +### waitForLastTransaction() + +> **waitForLastTransaction**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + +### executeTransaction() + +> **executeTransaction**(`transaction`, `options`?): `Promise`\<`object`\> + +#### Parameters + +• **transaction**: `Uint8Array` \| [`Transaction`](Transaction.md) + +• **options?**: [`IotaTransactionBlockResponseOptions`](../../client/interfaces/IotaTransactionBlockResponseOptions.md) + +#### Returns + +`Promise`\<`object`\> + +##### digest + +> **digest**: `string` = `results.digest` + +##### effects + +> **effects**: `string` diff --git a/docs/content/ts-sdk/api/transactions/classes/Transaction.md b/docs/content/ts-sdk/api/transactions/classes/Transaction.md new file mode 100644 index 00000000000..6b3315575d1 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/classes/Transaction.md @@ -0,0 +1,957 @@ +# Class: Transaction + +Transaction Builder + +## Constructors + +### new Transaction() + +> **new Transaction**(): [`Transaction`](Transaction.md) + +#### Returns + +[`Transaction`](Transaction.md) + +## Properties + +### object() + +> **object**: (`value`) => `object` + +Add a new object input to the transaction. + +#### Parameters + +• **value**: [`TransactionObjectInput`](../type-aliases/TransactionObjectInput.md) + +#### Returns + +`object` + +##### $kind + +> **$kind**: `"Input"` + +##### Input + +> **Input**: `number` + +##### type? + +> `optional` **type**: `"object"` + +#### system() + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +#### clock() + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +#### random() + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +#### denyList() + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +## Accessors + +### blockData + +#### Get Signature + +> **get** **blockData**(): `object` + +##### Deprecated + +Use `getData()` instead. + +##### Returns + +`object` + +###### ~~version~~ + +> **version**: `1` + +###### ~~sender?~~ + +> `optional` **sender**: `string` + +###### ~~expiration?~~ + +> `optional` **expiration**: `null` \| `object` \| `object` + +###### ~~gasConfig~~ + +> **gasConfig**: `object` = `GasConfig` + +###### gasConfig.budget? + +> `optional` **budget**: `string` \| `number` \| `bigint` + +###### gasConfig.price? + +> `optional` **price**: `string` \| `number` \| `bigint` + +###### gasConfig.payment? + +> `optional` **payment**: `object`[] + +###### gasConfig.owner? + +> `optional` **owner**: `string` + +###### ~~inputs~~ + +> **inputs**: (`object` \| `object`)[] + +###### ~~transactions~~ + +> **transactions**: (`object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object`)[] + +*** + +### pure + +#### Get Signature + +> **get** **pure**(): \<`T`\>(`type`, `value`) => `T`(`value`) => `T` + +##### Returns + +`Function` + +###### Type Parameters + +• **T** *extends* `PureTypeName` + +###### Parameters + +• **type**: `T` *extends* `PureTypeName` ? `ValidPureTypeName`\<`T`\<`T`\>\> : `T` + +• **value**: `ShapeFromPureTypeName`\<`T`\> + +###### Returns + +`T` + +###### Parameters + +• **value**: `Uint8Array` \| `SerializedBcs`\<`any`, `any`\> + +The pure value, serialized to BCS. If this is a Uint8Array, then the value +is assumed to be raw bytes, and will be used directly. + +###### Returns + +`T` + +###### u8() + +###### Parameters + +• **value**: `number` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### u16() + +###### Parameters + +• **value**: `number` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### u32() + +###### Parameters + +• **value**: `number` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### u64() + +###### Parameters + +• **value**: `string` \| `number` \| `bigint` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### u128() + +###### Parameters + +• **value**: `string` \| `number` \| `bigint` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### u256() + +###### Parameters + +• **value**: `string` \| `number` \| `bigint` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### bool() + +###### Parameters + +• **value**: `boolean` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### string() + +###### Parameters + +• **value**: `string` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### address() + +###### Parameters + +• **value**: `string` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### id() + +> **id**: (`value`) => `object` \| `object` \| `object` \| `object` \| `object` + +###### Parameters + +• **value**: `string` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### vector() + +###### Type Parameters + +• **Type** *extends* `PureTypeName` + +###### Parameters + +• **type**: `Type` + +• **value**: `Iterable`\<`ShapeFromPureTypeName`\<`Type`\>, `any`, `any`\> & `object` + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +###### option() + +###### Type Parameters + +• **Type** *extends* `PureTypeName` + +###### Parameters + +• **type**: `Type` + +• **value**: `undefined` \| `null` \| `ShapeFromPureTypeName`\<`Type`\> + +###### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +*** + +### gas + +#### Get Signature + +> **get** **gas**(): `object` + +Returns an argument for the gas coin, to be used in a transaction. + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"GasCoin"` + +###### GasCoin + +> **GasCoin**: `true` + +## Methods + +### fromKind() + +> `static` **fromKind**(`serialized`): [`Transaction`](Transaction.md) + +Converts from a serialize transaction kind (built with `build({ onlyTransactionKind: true })`) to a `Transaction` class. +Supports either a byte array, or base64-encoded bytes. + +#### Parameters + +• **serialized**: `string` \| `Uint8Array` + +#### Returns + +[`Transaction`](Transaction.md) + +*** + +### from() + +> `static` **from**(`transaction`): [`Transaction`](Transaction.md) + +Converts from a serialized transaction format to a `Transaction` class. +There are two supported serialized formats: +- A string returned from `Transaction#serialize`. The serialized format must be compatible, or it will throw an error. +- A byte array (or base64-encoded bytes) containing BCS transaction data. + +#### Parameters + +• **transaction**: `string` \| `Uint8Array` \| [`Transaction`](Transaction.md) + +#### Returns + +[`Transaction`](Transaction.md) + +*** + +### registerGlobalSerializationPlugin() + +> `static` **registerGlobalSerializationPlugin**(`step`): `void` + +#### Parameters + +• **step**: [`TransactionPlugin`](../type-aliases/TransactionPlugin.md) + +#### Returns + +`void` + +*** + +### registerGlobalBuildPlugin() + +> `static` **registerGlobalBuildPlugin**(`step`): `void` + +#### Parameters + +• **step**: [`TransactionPlugin`](../type-aliases/TransactionPlugin.md) + +#### Returns + +`void` + +*** + +### addSerializationPlugin() + +> **addSerializationPlugin**(`step`): `void` + +#### Parameters + +• **step**: [`TransactionPlugin`](../type-aliases/TransactionPlugin.md) + +#### Returns + +`void` + +*** + +### addBuildPlugin() + +> **addBuildPlugin**(`step`): `void` + +#### Parameters + +• **step**: [`TransactionPlugin`](../type-aliases/TransactionPlugin.md) + +#### Returns + +`void` + +*** + +### addIntentResolver() + +> **addIntentResolver**(`intent`, `resolver`): `void` + +#### Parameters + +• **intent**: `string` + +• **resolver**: [`TransactionPlugin`](../type-aliases/TransactionPlugin.md) + +#### Returns + +`void` + +*** + +### setSender() + +> **setSender**(`sender`): `void` + +#### Parameters + +• **sender**: `string` + +#### Returns + +`void` + +*** + +### setSenderIfNotSet() + +> **setSenderIfNotSet**(`sender`): `void` + +Sets the sender only if it has not already been set. +This is useful for sponsored transaction flows where the sender may not be the same as the signer address. + +#### Parameters + +• **sender**: `string` + +#### Returns + +`void` + +*** + +### setExpiration() + +> **setExpiration**(`expiration`?): `void` + +#### Parameters + +• **expiration?**: `null` \| `EnumInputShape`\<`object`\> + +#### Returns + +`void` + +*** + +### setGasPrice() + +> **setGasPrice**(`price`): `void` + +#### Parameters + +• **price**: `number` \| `bigint` + +#### Returns + +`void` + +*** + +### setGasBudget() + +> **setGasBudget**(`budget`): `void` + +#### Parameters + +• **budget**: `number` \| `bigint` + +#### Returns + +`void` + +*** + +### setGasBudgetIfNotSet() + +> **setGasBudgetIfNotSet**(`budget`): `void` + +#### Parameters + +• **budget**: `number` \| `bigint` + +#### Returns + +`void` + +*** + +### setGasOwner() + +> **setGasOwner**(`owner`): `void` + +#### Parameters + +• **owner**: `string` + +#### Returns + +`void` + +*** + +### setGasPayment() + +> **setGasPayment**(`payments`): `void` + +#### Parameters + +• **payments**: `object`[] + +#### Returns + +`void` + +*** + +### getData() + +> **getData**(): `object` + +Get a snapshot of the transaction data, in JSON form: + +#### Returns + +`object` + +##### version + +> **version**: `2` + +##### sender? + +> `optional` **sender**: `null` \| `string` + +##### expiration? + +> `optional` **expiration**: `null` \| `EnumOutputShapeWithKeys`\<`object`, `"None"` \| `"Epoch"`\> + +##### gasData + +> **gasData**: `object` = `GasData` + +##### gasData.budget + +> **budget**: `null` \| `string` \| `number` + +##### gasData.price + +> **price**: `null` \| `string` \| `number` + +##### gasData.owner + +> **owner**: `null` \| `string` + +##### gasData.payment + +> **payment**: `null` \| `object`[] + +##### inputs + +> **inputs**: `EnumOutputShapeWithKeys`\<`object`, `"Pure"` \| `"Object"` \| `"UnresolvedPure"` \| `"UnresolvedObject"`\>[] + +##### commands + +> **commands**: `EnumOutputShapeWithKeys`\<`object`, `"MoveCall"` \| `"TransferObjects"` \| `"SplitCoins"` \| `"MergeCoins"` \| `"Publish"` \| `"MakeMoveVec"` \| `"Upgrade"` \| `"$Intent"`\>[] + +*** + +### objectRef() + +> **objectRef**(...`args`): `object` + +Add a new object input to the transaction using the fully-resolved object reference. +If you only have an object ID, use `builder.object(id)` instead. + +#### Parameters + +• ...**args**: [`object`] + +#### Returns + +`object` + +##### $kind + +> **$kind**: `"Input"` + +##### Input + +> **Input**: `number` + +##### type? + +> `optional` **type**: `"object"` + +*** + +### receivingRef() + +> **receivingRef**(...`args`): `object` + +Add a new receiving input to the transaction using the fully-resolved object reference. +If you only have an object ID, use `builder.object(id)` instead. + +#### Parameters + +• ...**args**: [`object`] + +#### Returns + +`object` + +##### $kind + +> **$kind**: `"Input"` + +##### Input + +> **Input**: `number` + +##### type? + +> `optional` **type**: `"object"` + +*** + +### sharedObjectRef() + +> **sharedObjectRef**(...`args`): `object` + +Add a new shared object input to the transaction using the fully-resolved shared object reference. +If you only have an object ID, use `builder.object(id)` instead. + +#### Parameters + +• ...**args**: [`object`] + +#### Returns + +`object` + +##### $kind + +> **$kind**: `"Input"` + +##### Input + +> **Input**: `number` + +##### type? + +> `optional` **type**: `"object"` + +*** + +### add() + +> **add**\<`T`\>(`command`): `T` + +Add a transaction to the transaction + +#### Type Parameters + +• **T** = [`TransactionResult`](../type-aliases/TransactionResult.md) + +#### Parameters + +• **command**: [`Command`](../type-aliases/Command.md) \| (`tx`) => `T` + +#### Returns + +`T` + +*** + +### splitCoins() + +> **splitCoins**(`coin`, `amounts`): [`TransactionResult`](../type-aliases/TransactionResult.md) + +#### Parameters + +• **coin**: `string` \| [`TransactionObjectArgument`](../type-aliases/TransactionObjectArgument.md) + +• **amounts**: (`string` \| `number` \| `bigint` \| `SerializedBcs`\<`any`, `any`\> \| [`TransactionArgument`](../type-aliases/TransactionArgument.md))[] + +#### Returns + +[`TransactionResult`](../type-aliases/TransactionResult.md) + +*** + +### mergeCoins() + +> **mergeCoins**(`destination`, `sources`): [`TransactionResult`](../type-aliases/TransactionResult.md) + +#### Parameters + +• **destination**: `string` \| [`TransactionObjectArgument`](../type-aliases/TransactionObjectArgument.md) + +• **sources**: (`string` \| [`TransactionObjectArgument`](../type-aliases/TransactionObjectArgument.md))[] + +#### Returns + +[`TransactionResult`](../type-aliases/TransactionResult.md) + +*** + +### publish() + +> **publish**(`__namedParameters`): [`TransactionResult`](../type-aliases/TransactionResult.md) + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.modules**: `string`[] \| `number`[][] + +• **\_\_namedParameters.dependencies**: `string`[] + +#### Returns + +[`TransactionResult`](../type-aliases/TransactionResult.md) + +*** + +### upgrade() + +> **upgrade**(`__namedParameters`): [`TransactionResult`](../type-aliases/TransactionResult.md) + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.modules**: `string`[] \| `number`[][] + +• **\_\_namedParameters.dependencies**: `string`[] + +• **\_\_namedParameters.package**: `string` + +• **\_\_namedParameters.ticket**: `string` \| [`TransactionObjectArgument`](../type-aliases/TransactionObjectArgument.md) + +#### Returns + +[`TransactionResult`](../type-aliases/TransactionResult.md) + +*** + +### moveCall() + +> **moveCall**(`__namedParameters`): [`TransactionResult`](../type-aliases/TransactionResult.md) + +#### Parameters + +• **\_\_namedParameters**: `object` \| `object` + +#### Returns + +[`TransactionResult`](../type-aliases/TransactionResult.md) + +*** + +### transferObjects() + +> **transferObjects**(`objects`, `address`): [`TransactionResult`](../type-aliases/TransactionResult.md) + +#### Parameters + +• **objects**: (`string` \| [`TransactionObjectArgument`](../type-aliases/TransactionObjectArgument.md))[] + +• **address**: `string` \| `SerializedBcs`\<`any`, `any`\> \| [`TransactionArgument`](../type-aliases/TransactionArgument.md) + +#### Returns + +[`TransactionResult`](../type-aliases/TransactionResult.md) + +*** + +### makeMoveVec() + +> **makeMoveVec**(`__namedParameters`): [`TransactionResult`](../type-aliases/TransactionResult.md) + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.elements**: (`string` \| [`TransactionObjectArgument`](../type-aliases/TransactionObjectArgument.md))[] + +• **\_\_namedParameters.type?**: `string` + +#### Returns + +[`TransactionResult`](../type-aliases/TransactionResult.md) + +*** + +### ~~serialize()~~ + +> **serialize**(): `string` + +#### Returns + +`string` + +#### Deprecated + +Use toJSON instead. +For synchronous serialization, you can use `getData()` + +*** + +### toJSON() + +> **toJSON**(`options`): `Promise`\<`string`\> + +#### Parameters + +• **options**: [`SerializeTransactionOptions`](../interfaces/SerializeTransactionOptions.md) = `{}` + +#### Returns + +`Promise`\<`string`\> + +*** + +### sign() + +> **sign**(`options`): `Promise`\<[`SignatureWithBytes`](../../cryptography/interfaces/SignatureWithBytes.md)\> + +Build the transaction to BCS bytes, and sign it with the provided keypair. + +#### Parameters + +• **options**: `SignOptions` + +#### Returns + +`Promise`\<[`SignatureWithBytes`](../../cryptography/interfaces/SignatureWithBytes.md)\> + +*** + +### build() + +> **build**(`options`): `Promise`\<`Uint8Array`\> + +Build the transaction to BCS bytes. + +#### Parameters + +• **options**: [`BuildTransactionOptions`](../interfaces/BuildTransactionOptions.md) = `{}` + +#### Returns + +`Promise`\<`Uint8Array`\> + +*** + +### getDigest() + +> **getDigest**(`options`): `Promise`\<`string`\> + +Derive transaction digest + +#### Parameters + +• **options** = `{}` + +• **options.client?**: [`IotaClient`](../../client/classes/IotaClient.md) + +#### Returns + +`Promise`\<`string`\> + +*** + +### prepareForSerialization() + +> **prepareForSerialization**(`options`): `Promise`\<`void`\> + +#### Parameters + +• **options**: [`SerializeTransactionOptions`](../interfaces/SerializeTransactionOptions.md) + +#### Returns + +`Promise`\<`void`\> diff --git a/docs/content/ts-sdk/api/transactions/classes/TransactionDataBuilder.md b/docs/content/ts-sdk/api/transactions/classes/TransactionDataBuilder.md new file mode 100644 index 00000000000..6e6fcd47268 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/classes/TransactionDataBuilder.md @@ -0,0 +1,391 @@ +# Class: TransactionDataBuilder + +## Implements + +- [`TransactionData`](../type-aliases/TransactionData.md) + +## Constructors + +### new TransactionDataBuilder() + +> **new TransactionDataBuilder**(`clone`?): [`TransactionDataBuilder`](TransactionDataBuilder.md) + +#### Parameters + +• **clone?** + +• **clone.version?**: `2` = `...` + +• **clone.sender?**: `null` \| `string` = `...` + +• **clone.expiration?**: `null` \| `EnumOutputShapeWithKeys`\<`object`, `"None"` \| `"Epoch"`\> = `...` + +• **clone.gasData?** = `GasData` + +• **clone.gasData.budget?**: `null` \| `string` \| `number` = `...` + +• **clone.gasData.price?**: `null` \| `string` \| `number` = `...` + +• **clone.gasData.owner?**: `null` \| `string` = `...` + +• **clone.gasData.payment?**: `null` \| `object`[] = `...` + +• **clone.inputs?**: `EnumOutputShapeWithKeys`\<`object`, `"Pure"` \| `"Object"` \| `"UnresolvedPure"` \| `"UnresolvedObject"`\>[] = `...` + +• **clone.commands?**: `EnumOutputShapeWithKeys`\<`object`, `"MoveCall"` \| `"TransferObjects"` \| `"SplitCoins"` \| `"MergeCoins"` \| `"Publish"` \| `"MakeMoveVec"` \| `"Upgrade"` \| `"$Intent"`\>[] = `...` + +#### Returns + +[`TransactionDataBuilder`](TransactionDataBuilder.md) + +## Properties + +### version + +> **version**: `2` + +#### Implementation of + +`TransactionData.version` + +*** + +### sender + +> **sender**: `null` \| `string` + +#### Implementation of + +`TransactionData.sender` + +*** + +### expiration + +> **expiration**: `null` \| `EnumOutputShapeWithKeys`\<`object`, `"None"` \| `"Epoch"`\> + +#### Implementation of + +`TransactionData.expiration` + +*** + +### gasData + +> **gasData**: `object` + +#### budget + +> **budget**: `null` \| `string` \| `number` + +#### price + +> **price**: `null` \| `string` \| `number` + +#### owner + +> **owner**: `null` \| `string` + +#### payment + +> **payment**: `null` \| `object`[] + +#### Implementation of + +`TransactionData.gasData` + +*** + +### inputs + +> **inputs**: `EnumOutputShapeWithKeys`\<`object`, `"Pure"` \| `"Object"` \| `"UnresolvedPure"` \| `"UnresolvedObject"`\>[] + +#### Implementation of + +`TransactionData.inputs` + +*** + +### commands + +> **commands**: [`Command`](../type-aliases/Command.md)[] + +#### Implementation of + +`TransactionData.commands` + +## Accessors + +### gasConfig + +#### Get Signature + +> **get** **gasConfig**(): `object` + +##### Returns + +`object` + +###### budget + +> **budget**: `null` \| `string` \| `number` + +###### price + +> **price**: `null` \| `string` \| `number` + +###### owner + +> **owner**: `null` \| `string` + +###### payment + +> **payment**: `null` \| `object`[] + +#### Set Signature + +> **set** **gasConfig**(`value`): `void` + +##### Parameters + +• **value** + +• **value.budget**: `null` \| `string` \| `number` = `...` + +• **value.price**: `null` \| `string` \| `number` = `...` + +• **value.owner**: `null` \| `string` = `...` + +• **value.payment**: `null` \| `object`[] = `...` + +##### Returns + +`void` + +## Methods + +### fromKindBytes() + +> `static` **fromKindBytes**(`bytes`): [`TransactionDataBuilder`](TransactionDataBuilder.md) + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +[`TransactionDataBuilder`](TransactionDataBuilder.md) + +*** + +### fromBytes() + +> `static` **fromBytes**(`bytes`): [`TransactionDataBuilder`](TransactionDataBuilder.md) + +#### Parameters + +• **bytes**: `Uint8Array` + +#### Returns + +[`TransactionDataBuilder`](TransactionDataBuilder.md) + +*** + +### restore() + +> `static` **restore**(`data`): [`TransactionDataBuilder`](TransactionDataBuilder.md) + +#### Parameters + +• **data**: `object` \| `object` + +#### Returns + +[`TransactionDataBuilder`](TransactionDataBuilder.md) + +*** + +### getDigestFromBytes() + +> `static` **getDigestFromBytes**(`bytes`): `string` + +Generate transaction digest. + +#### Parameters + +• **bytes**: `Uint8Array` + +BCS serialized transaction data + +#### Returns + +`string` + +transaction digest. + +*** + +### build() + +> **build**(`__namedParameters`): `Uint8Array` + +#### Parameters + +• **\_\_namedParameters** = `{}` + +• **\_\_namedParameters.maxSizeBytes?**: `number` = `Infinity` + +• **\_\_namedParameters.overrides?** + +• **\_\_namedParameters.overrides.expiration?**: `EnumOutputShapeWithKeys`\<`object`, `"None"` \| `"Epoch"`\> + +• **\_\_namedParameters.overrides.sender?**: `string` + +• **\_\_namedParameters.overrides.gasConfig?**: `Partial`\<`object`\> + +• **\_\_namedParameters.overrides.gasData?**: `Partial`\<`object`\> + +• **\_\_namedParameters.onlyTransactionKind?**: `boolean` + +#### Returns + +`Uint8Array` + +*** + +### addInput() + +> **addInput**\<`T`\>(`type`, `arg`): `object` + +#### Type Parameters + +• **T** *extends* `"object"` \| `"pure"` + +#### Parameters + +• **type**: `T` + +• **arg**: `EnumOutputShapeWithKeys`\<`object`, `"Pure"` \| `"Object"` \| `"UnresolvedPure"` \| `"UnresolvedObject"`\> + +#### Returns + +`object` + +##### Input + +> **Input**: `number` = `index` + +##### type + +> **type**: `T` + +##### $kind + +> **$kind**: `"Input"` + +*** + +### getInputUses() + +> **getInputUses**(`index`, `fn`): `void` + +#### Parameters + +• **index**: `number` + +• **fn** + +#### Returns + +`void` + +*** + +### mapArguments() + +> **mapArguments**(`fn`): `void` + +#### Parameters + +• **fn** + +#### Returns + +`void` + +*** + +### replaceCommand() + +> **replaceCommand**(`index`, `replacement`): `void` + +#### Parameters + +• **index**: `number` + +• **replacement**: [`Command`](../type-aliases/Command.md) \| [`Command`](../type-aliases/Command.md)[] + +#### Returns + +`void` + +*** + +### getDigest() + +> **getDigest**(): `string` + +#### Returns + +`string` + +*** + +### snapshot() + +> **snapshot**(): `object` + +#### Returns + +`object` + +##### version + +> **version**: `2` + +##### sender? + +> `optional` **sender**: `null` \| `string` + +##### expiration? + +> `optional` **expiration**: `null` \| `EnumOutputShapeWithKeys`\<`object`, `"None"` \| `"Epoch"`\> + +##### gasData + +> **gasData**: `object` = `GasData` + +##### gasData.budget + +> **budget**: `null` \| `string` \| `number` + +##### gasData.price + +> **price**: `null` \| `string` \| `number` + +##### gasData.owner + +> **owner**: `null` \| `string` + +##### gasData.payment + +> **payment**: `null` \| `object`[] + +##### inputs + +> **inputs**: `EnumOutputShapeWithKeys`\<`object`, `"Pure"` \| `"Object"` \| `"UnresolvedPure"` \| `"UnresolvedObject"`\>[] + +##### commands + +> **commands**: `EnumOutputShapeWithKeys`\<`object`, `"MoveCall"` \| `"TransferObjects"` \| `"SplitCoins"` \| `"MergeCoins"` \| `"Publish"` \| `"MakeMoveVec"` \| `"Upgrade"` \| `"$Intent"`\>[] diff --git a/docs/content/ts-sdk/api/transactions/enumerations/UpgradePolicy.md b/docs/content/ts-sdk/api/transactions/enumerations/UpgradePolicy.md new file mode 100644 index 00000000000..c5573562315 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/enumerations/UpgradePolicy.md @@ -0,0 +1,19 @@ +# Enumeration: UpgradePolicy + +## Enumeration Members + +### COMPATIBLE + +> **COMPATIBLE**: `0` + +*** + +### ADDITIVE + +> **ADDITIVE**: `128` + +*** + +### DEP\_ONLY + +> **DEP\_ONLY**: `192` diff --git a/docs/content/ts-sdk/api/transactions/functions/coinWithBalance.md b/docs/content/ts-sdk/api/transactions/functions/coinWithBalance.md new file mode 100644 index 00000000000..432850432b2 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/functions/coinWithBalance.md @@ -0,0 +1,25 @@ +# Function: coinWithBalance() + +> **coinWithBalance**(`__namedParameters`): (`tx`) => [`TransactionResult`](../type-aliases/TransactionResult.md) + +## Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.balance**: `number` \| `bigint` + +• **\_\_namedParameters.type?**: `string` = `IOTA_TYPE` + +• **\_\_namedParameters.useGasCoin?**: `boolean` = `true` + +## Returns + +`Function` + +### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +### Returns + +[`TransactionResult`](../type-aliases/TransactionResult.md) diff --git a/docs/content/ts-sdk/api/transactions/functions/getPureBcsSchema.md b/docs/content/ts-sdk/api/transactions/functions/getPureBcsSchema.md new file mode 100644 index 00000000000..765629b98b5 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/functions/getPureBcsSchema.md @@ -0,0 +1,11 @@ +# Function: getPureBcsSchema() + +> **getPureBcsSchema**(`typeSignature`): [`BcsType`](../../bcs/classes/BcsType.md)\<`any`\> \| `null` + +## Parameters + +• **typeSignature**: [`OpenMoveTypeSignatureBody`](../type-aliases/OpenMoveTypeSignatureBody.md) + +## Returns + +[`BcsType`](../../bcs/classes/BcsType.md)\<`any`\> \| `null` diff --git a/docs/content/ts-sdk/api/transactions/functions/isTransaction.md b/docs/content/ts-sdk/api/transactions/functions/isTransaction.md new file mode 100644 index 00000000000..18208ac88c9 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/functions/isTransaction.md @@ -0,0 +1,11 @@ +# Function: isTransaction() + +> **isTransaction**(`obj`): `obj is Transaction` + +## Parameters + +• **obj**: `unknown` + +## Returns + +`obj is Transaction` diff --git a/docs/content/ts-sdk/api/transactions/functions/normalizedTypeToMoveTypeSignature.md b/docs/content/ts-sdk/api/transactions/functions/normalizedTypeToMoveTypeSignature.md new file mode 100644 index 00000000000..bafdc45d357 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/functions/normalizedTypeToMoveTypeSignature.md @@ -0,0 +1,11 @@ +# Function: normalizedTypeToMoveTypeSignature() + +> **normalizedTypeToMoveTypeSignature**(`type`): [`OpenMoveTypeSignature`](../type-aliases/OpenMoveTypeSignature.md) + +## Parameters + +• **type**: [`IotaMoveNormalizedType`](../../client/type-aliases/IotaMoveNormalizedType.md) + +## Returns + +[`OpenMoveTypeSignature`](../type-aliases/OpenMoveTypeSignature.md) diff --git a/docs/content/ts-sdk/api/transactions/index.md b/docs/content/ts-sdk/api/transactions/index.md new file mode 100644 index 00000000000..c2e79210d77 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/index.md @@ -0,0 +1,63 @@ +# transactions + +## Index + +### Enumerations + +- [UpgradePolicy](enumerations/UpgradePolicy.md) + +### Classes + +- [AsyncCache](classes/AsyncCache.md) +- [ObjectCache](classes/ObjectCache.md) +- [Transaction](classes/Transaction.md) +- [TransactionDataBuilder](classes/TransactionDataBuilder.md) +- [ParallelTransactionExecutor](classes/ParallelTransactionExecutor.md) +- [SerialTransactionExecutor](classes/SerialTransactionExecutor.md) + +### Interfaces + +- [ParallelTransactionExecutorOptions](interfaces/ParallelTransactionExecutorOptions.md) +- [BuildTransactionOptions](interfaces/BuildTransactionOptions.md) +- [SerializeTransactionOptions](interfaces/SerializeTransactionOptions.md) + +### Type Aliases + +- [TransactionArgument](type-aliases/TransactionArgument.md) +- [TransactionInput](type-aliases/TransactionInput.md) +- [TransactionObjectArgument](type-aliases/TransactionObjectArgument.md) +- [TransactionResult](type-aliases/TransactionResult.md) +- [TransactionObjectInput](type-aliases/TransactionObjectInput.md) +- [ObjectRef](type-aliases/ObjectRef.md) +- [Argument](type-aliases/Argument.md) +- [GasData](type-aliases/GasData.md) +- [OpenMoveTypeSignatureBody](type-aliases/OpenMoveTypeSignatureBody.md) +- [OpenMoveTypeSignature](type-aliases/OpenMoveTypeSignature.md) +- [Command](type-aliases/Command.md) +- [CallArg](type-aliases/CallArg.md) +- [TransactionData](type-aliases/TransactionData.md) +- [SerializedTransactionDataV1](type-aliases/SerializedTransactionDataV1.md) +- [SerializedTransactionDataV2](type-aliases/SerializedTransactionDataV2.md) +- [TransactionPlugin](type-aliases/TransactionPlugin.md) + +### Variables + +- [Arguments](variables/Arguments.md) +- [Commands](variables/Commands.md) +- [Inputs](variables/Inputs.md) +- [ObjectRef](variables/ObjectRef.md) +- [Argument](variables/Argument.md) +- [GasData](variables/GasData.md) +- [OpenMoveTypeSignatureBody](variables/OpenMoveTypeSignatureBody.md) +- [OpenMoveTypeSignature](variables/OpenMoveTypeSignature.md) +- [Command](variables/Command.md) +- [TransactionData](variables/TransactionData.md) +- [SerializedTransactionDataV1](variables/SerializedTransactionDataV1.md) +- [SerializedTransactionDataV2](variables/SerializedTransactionDataV2.md) + +### Functions + +- [isTransaction](functions/isTransaction.md) +- [coinWithBalance](functions/coinWithBalance.md) +- [getPureBcsSchema](functions/getPureBcsSchema.md) +- [normalizedTypeToMoveTypeSignature](functions/normalizedTypeToMoveTypeSignature.md) diff --git a/docs/content/ts-sdk/api/transactions/interfaces/BuildTransactionOptions.md b/docs/content/ts-sdk/api/transactions/interfaces/BuildTransactionOptions.md new file mode 100644 index 00000000000..efa7b0af288 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/interfaces/BuildTransactionOptions.md @@ -0,0 +1,17 @@ +# Interface: BuildTransactionOptions + +## Extended by + +- [`SerializeTransactionOptions`](SerializeTransactionOptions.md) + +## Properties + +### client? + +> `optional` **client**: [`IotaClient`](../../client/classes/IotaClient.md) + +*** + +### onlyTransactionKind? + +> `optional` **onlyTransactionKind**: `boolean` diff --git a/docs/content/ts-sdk/api/transactions/interfaces/ParallelTransactionExecutorOptions.md b/docs/content/ts-sdk/api/transactions/interfaces/ParallelTransactionExecutorOptions.md new file mode 100644 index 00000000000..1d44ed4b9da --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/interfaces/ParallelTransactionExecutorOptions.md @@ -0,0 +1,85 @@ +# Interface: ParallelTransactionExecutorOptions + +## Extends + +- `Omit`\<`ObjectCacheOptions`, `"address"`\> + +## Properties + +### cache? + +> `optional` **cache**: [`AsyncCache`](../classes/AsyncCache.md) + +#### Inherited from + +`Omit.cache` + +*** + +### client + +> **client**: [`IotaClient`](../../client/classes/IotaClient.md) + +*** + +### signer + +> **signer**: [`Signer`](../../cryptography/classes/Signer.md) + +*** + +### coinBatchSize? + +> `optional` **coinBatchSize**: `number` + +The number of coins to create in a batch when refilling the gas pool + +*** + +### initialCoinBalance? + +> `optional` **initialCoinBalance**: `bigint` + +The initial balance of each coin created for the gas pool + +*** + +### minimumCoinBalance? + +> `optional` **minimumCoinBalance**: `bigint` + +The minimum balance of a coin that can be reused for future transactions. If the gasCoin is below this value, it will be used when refilling the gasPool + +*** + +### defaultGasBudget? + +> `optional` **defaultGasBudget**: `bigint` + +The gasBudget to use if the transaction has not defined it's own gasBudget, defaults to `minimumCoinBalance` + +*** + +### epochBoundaryWindow? + +> `optional` **epochBoundaryWindow**: `number` + +Time to wait before/after the expected epoch boundary before re-fetching the gas pool (in milliseconds). +Building transactions will be paused for up to 2x this duration around each epoch boundary to ensure the +gas price is up-to-date for the next epoch. + +*** + +### maxPoolSize? + +> `optional` **maxPoolSize**: `number` + +The maximum number of transactions that can be execute in parallel, this also determines the maximum number of gas coins that will be created + +*** + +### sourceCoins? + +> `optional` **sourceCoins**: `string`[] + +An initial list of coins used to fund the gas pool, uses all owned IOTA coins by default diff --git a/docs/content/ts-sdk/api/transactions/interfaces/SerializeTransactionOptions.md b/docs/content/ts-sdk/api/transactions/interfaces/SerializeTransactionOptions.md new file mode 100644 index 00000000000..cabd6813024 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/interfaces/SerializeTransactionOptions.md @@ -0,0 +1,31 @@ +# Interface: SerializeTransactionOptions + +## Extends + +- [`BuildTransactionOptions`](BuildTransactionOptions.md) + +## Properties + +### client? + +> `optional` **client**: [`IotaClient`](../../client/classes/IotaClient.md) + +#### Inherited from + +[`BuildTransactionOptions`](BuildTransactionOptions.md).[`client`](BuildTransactionOptions.md#client) + +*** + +### onlyTransactionKind? + +> `optional` **onlyTransactionKind**: `boolean` + +#### Inherited from + +[`BuildTransactionOptions`](BuildTransactionOptions.md).[`onlyTransactionKind`](BuildTransactionOptions.md#onlytransactionkind) + +*** + +### supportedIntents? + +> `optional` **supportedIntents**: `string`[] diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/Argument.md b/docs/content/ts-sdk/api/transactions/type-aliases/Argument.md new file mode 100644 index 00000000000..335d7970fa8 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/Argument.md @@ -0,0 +1,3 @@ +# Type Alias: Argument + +> **Argument**: `InferOutput`\<*typeof* [`Argument`](../variables/Argument.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/CallArg.md b/docs/content/ts-sdk/api/transactions/type-aliases/CallArg.md new file mode 100644 index 00000000000..63642e5fea7 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/CallArg.md @@ -0,0 +1,3 @@ +# Type Alias: CallArg + +> **CallArg**: `InferOutput`\<*typeof* `CallArg`\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/Command.md b/docs/content/ts-sdk/api/transactions/type-aliases/Command.md new file mode 100644 index 00000000000..852dc1f4d1c --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/Command.md @@ -0,0 +1,133 @@ +# Type Alias: Command\ + +> **Command**\<`Arg`\>: `EnumOutputShape`\<`object`\> + +## Type declaration + +### MoveCall + +> **MoveCall**: `object` + +### MoveCall.package + +> **package**: `string` + +### MoveCall.module + +> **module**: `string` + +### MoveCall.function + +> **function**: `string` + +### MoveCall.typeArguments + +> **typeArguments**: `string`[] + +### MoveCall.arguments + +> **arguments**: `Arg`[] + +### MoveCall.\_argumentTypes? + +> `optional` **\_argumentTypes**: [`OpenMoveTypeSignature`](OpenMoveTypeSignature.md)[] \| `null` + +### TransferObjects + +> **TransferObjects**: `object` + +### TransferObjects.objects + +> **objects**: `Arg`[] + +### TransferObjects.address + +> **address**: `Arg` + +### SplitCoins + +> **SplitCoins**: `object` + +### SplitCoins.coin + +> **coin**: `Arg` + +### SplitCoins.amounts + +> **amounts**: `Arg`[] + +### MergeCoins + +> **MergeCoins**: `object` + +### MergeCoins.destination + +> **destination**: `Arg` + +### MergeCoins.sources + +> **sources**: `Arg`[] + +### Publish + +> **Publish**: `object` + +### Publish.modules + +> **modules**: `string`[] + +### Publish.dependencies + +> **dependencies**: `string`[] + +### MakeMoveVec + +> **MakeMoveVec**: `object` + +### MakeMoveVec.type + +> **type**: `string` \| `null` + +### MakeMoveVec.elements + +> **elements**: `Arg`[] + +### Upgrade + +> **Upgrade**: `object` + +### Upgrade.modules + +> **modules**: `string`[] + +### Upgrade.dependencies + +> **dependencies**: `string`[] + +### Upgrade.package + +> **package**: `string` + +### Upgrade.ticket + +> **ticket**: `Arg` + +### $Intent + +> **$Intent**: `object` + +### $Intent.name + +> **name**: `string` + +### $Intent.inputs + +> **inputs**: `Record`\<`string`, [`Argument`](Argument.md) \| [`Argument`](Argument.md)[]\> + +### $Intent.data + +> **data**: `Record`\<`string`, `unknown`\> + +## Type Parameters + +• **Arg** = [`Argument`](Argument.md) diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/GasData.md b/docs/content/ts-sdk/api/transactions/type-aliases/GasData.md new file mode 100644 index 00000000000..e9d4d81ff3b --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/GasData.md @@ -0,0 +1,3 @@ +# Type Alias: GasData + +> **GasData**: `InferOutput`\<*typeof* [`GasData`](../variables/GasData.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/ObjectRef.md b/docs/content/ts-sdk/api/transactions/type-aliases/ObjectRef.md new file mode 100644 index 00000000000..43756193c17 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/ObjectRef.md @@ -0,0 +1,3 @@ +# Type Alias: ObjectRef + +> **ObjectRef**: `InferOutput`\<*typeof* [`ObjectRef`](../variables/ObjectRef.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignature.md b/docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignature.md new file mode 100644 index 00000000000..7835450d923 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignature.md @@ -0,0 +1,3 @@ +# Type Alias: OpenMoveTypeSignature + +> **OpenMoveTypeSignature**: `InferOutput`\<*typeof* [`OpenMoveTypeSignature`](../variables/OpenMoveTypeSignature.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignatureBody.md b/docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignatureBody.md new file mode 100644 index 00000000000..8f8ce94cace --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignatureBody.md @@ -0,0 +1,3 @@ +# Type Alias: OpenMoveTypeSignatureBody + +> **OpenMoveTypeSignatureBody**: `"address"` \| `"bool"` \| `"u8"` \| `"u16"` \| `"u32"` \| `"u64"` \| `"u128"` \| `"u256"` \| `object` \| `object` \| `object` diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV1.md b/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV1.md new file mode 100644 index 00000000000..b4ba3c82199 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV1.md @@ -0,0 +1,3 @@ +# Type Alias: SerializedTransactionDataV1 + +> **SerializedTransactionDataV1**: `InferOutput`\<*typeof* [`SerializedTransactionDataV1`](../variables/SerializedTransactionDataV1.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV2.md b/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV2.md new file mode 100644 index 00000000000..a7063c200cf --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV2.md @@ -0,0 +1,3 @@ +# Type Alias: SerializedTransactionDataV2 + +> **SerializedTransactionDataV2**: `InferOutput`\<*typeof* [`SerializedTransactionDataV2`](../variables/SerializedTransactionDataV2.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionArgument.md b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionArgument.md new file mode 100644 index 00000000000..65ddee25f13 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionArgument.md @@ -0,0 +1,3 @@ +# Type Alias: TransactionArgument + +> **TransactionArgument**: `InferInput`\<*typeof* [`Argument`](../variables/Argument.md)\> \| (`tx`) => `InferInput`\<*typeof* [`Argument`](../variables/Argument.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionData.md b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionData.md new file mode 100644 index 00000000000..7532086ba0f --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionData.md @@ -0,0 +1,3 @@ +# Type Alias: TransactionData + +> **TransactionData**: `InferOutput`\<*typeof* [`TransactionData`](../variables/TransactionData.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionInput.md b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionInput.md new file mode 100644 index 00000000000..229d8a89ec7 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionInput.md @@ -0,0 +1,3 @@ +# Type Alias: TransactionInput + +> **TransactionInput**: [`CallArg`](CallArg.md) diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectArgument.md b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectArgument.md new file mode 100644 index 00000000000..008aec5ade3 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectArgument.md @@ -0,0 +1,3 @@ +# Type Alias: TransactionObjectArgument + +> **TransactionObjectArgument**: `Exclude`\<`InferInput`\<*typeof* [`Argument`](../variables/Argument.md)\>, `object`\> \| (`tx`) => `Exclude`\<`InferInput`\<*typeof* [`Argument`](../variables/Argument.md)\>, `object`\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectInput.md b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectInput.md new file mode 100644 index 00000000000..52bf593828f --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectInput.md @@ -0,0 +1,3 @@ +# Type Alias: TransactionObjectInput + +> **TransactionObjectInput**: `string` \| [`CallArg`](CallArg.md) \| [`TransactionObjectArgument`](TransactionObjectArgument.md) diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionPlugin.md b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionPlugin.md new file mode 100644 index 00000000000..f1d2c692900 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionPlugin.md @@ -0,0 +1,15 @@ +# Type Alias: TransactionPlugin() + +> **TransactionPlugin**: (`transactionData`, `options`, `next`) => `Promise`\<`void`\> + +## Parameters + +• **transactionData**: [`TransactionDataBuilder`](../classes/TransactionDataBuilder.md) + +• **options**: [`BuildTransactionOptions`](../interfaces/BuildTransactionOptions.md) + +• **next** + +## Returns + +`Promise`\<`void`\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionResult.md b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionResult.md new file mode 100644 index 00000000000..15823fd9a1d --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionResult.md @@ -0,0 +1,3 @@ +# Type Alias: TransactionResult + +> **TransactionResult**: `Extract`\<[`Argument`](Argument.md), `object`\> & `Extract`\<[`Argument`](Argument.md), `object`\>[] diff --git a/docs/content/ts-sdk/api/transactions/variables/Argument.md b/docs/content/ts-sdk/api/transactions/variables/Argument.md new file mode 100644 index 00000000000..3a4f8696679 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/Argument.md @@ -0,0 +1,3 @@ +# Variable: Argument + +> `const` **Argument**: `GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\> diff --git a/docs/content/ts-sdk/api/transactions/variables/Arguments.md b/docs/content/ts-sdk/api/transactions/variables/Arguments.md new file mode 100644 index 00000000000..94942ef81b2 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/Arguments.md @@ -0,0 +1,496 @@ +# Variable: Arguments + +> `const` **Arguments**: `object` + +## Type declaration + +### pure() + +> **pure**: \<`T`\>(`type`, `value`) => `T`(`value`) => `T` + +#### Type Parameters + +• **T** *extends* `PureTypeName` + +#### Parameters + +• **type**: `T` *extends* `PureTypeName` ? `ValidPureTypeName`\<`T`\<`T`\>\> : `T` + +• **value**: `ShapeFromPureTypeName`\<`T`\> + +#### Returns + +`T` + +#### Parameters + +• **value**: `Uint8Array` \| `SerializedBcs`\<`any`, `any`\> + +The pure value, serialized to BCS. If this is a Uint8Array, then the value +is assumed to be raw bytes, and will be used directly. + +#### Returns + +`T` + +### pure.u8() + +#### Parameters + +• **value**: `number` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.u16() + +#### Parameters + +• **value**: `number` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.u32() + +#### Parameters + +• **value**: `number` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.u64() + +#### Parameters + +• **value**: `string` \| `number` \| `bigint` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.u128() + +#### Parameters + +• **value**: `string` \| `number` \| `bigint` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.u256() + +#### Parameters + +• **value**: `string` \| `number` \| `bigint` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.bool() + +#### Parameters + +• **value**: `boolean` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.string() + +#### Parameters + +• **value**: `string` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.address() + +#### Parameters + +• **value**: `string` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.id() + +> **id**: (`value`) => (`tx`) => `object` \| `object` \| `object` \| `object` \| `object` + +#### Parameters + +• **value**: `string` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.vector() + +#### Type Parameters + +• **Type** *extends* `PureTypeName` + +#### Parameters + +• **type**: `Type` + +• **value**: `Iterable`\<`ShapeFromPureTypeName`\<`Type`\>, `any`, `any`\> & `object` + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### pure.option() + +#### Type Parameters + +• **Type** *extends* `PureTypeName` + +#### Parameters + +• **type**: `Type` + +• **value**: `undefined` \| `null` \| `ShapeFromPureTypeName`\<`Type`\> + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` \| `object` \| `object` \| `object` \| `object` + +### object() + +> **object**: (`value`) => (`tx`) => `object` + +#### Parameters + +• **value**: [`TransactionObjectInput`](../type-aliases/TransactionObjectInput.md) + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +### object.system() + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +### object.clock() + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +### object.random() + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +### object.denyList() + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +### sharedObjectRef() + +> **sharedObjectRef**: (...`args`) => (`tx`) => `object` + +#### Parameters + +• ...**args**: [`object`] + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +### objectRef() + +> **objectRef**: (...`args`) => (`tx`) => `object` + +#### Parameters + +• ...**args**: [`object`] + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` + +### receivingRef() + +> **receivingRef**: (...`args`) => (`tx`) => `object` + +#### Parameters + +• ...**args**: [`object`] + +#### Returns + +`Function` + +##### Parameters + +• **tx**: [`Transaction`](../classes/Transaction.md) + +##### Returns + +`object` + +###### $kind + +> **$kind**: `"Input"` + +###### Input + +> **Input**: `number` + +###### type? + +> `optional` **type**: `"object"` diff --git a/docs/content/ts-sdk/api/transactions/variables/Command.md b/docs/content/ts-sdk/api/transactions/variables/Command.md new file mode 100644 index 00000000000..ae625f52b55 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/Command.md @@ -0,0 +1,145 @@ +# Variable: Command + +> `const` **Command**: `EnumSchema`\<`object`\> + +## Type declaration + +### MoveCall + +> **MoveCall**: `ObjectSchema`\<`object`, `undefined`\> = `ProgrammableMoveCall` + +#### Type declaration + +##### package + +> `readonly` **package**: `SchemaWithPipe`\<[`StringSchema`\<`undefined`\>, `TransformAction`\<`string`, `string`\>, `CheckAction`\<`string`, `undefined`\>]\> = `ObjectID` + +##### module + +> `readonly` **module**: `StringSchema`\<`undefined`\> + +##### function + +> `readonly` **function**: `StringSchema`\<`undefined`\> + +##### typeArguments + +> `readonly` **typeArguments**: `ArraySchema`\<`StringSchema`\<`undefined`\>, `undefined`\> + +##### arguments + +> `readonly` **arguments**: `ArraySchema`\<`GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\>, `undefined`\> + +##### \_argumentTypes + +> `readonly` **\_argumentTypes**: `OptionalSchema`\<`NullableSchema`\<`ArraySchema`\<`ObjectSchema`\<`object`, `undefined`\>, `undefined`\>, `never`\>, `never`\> + +### TransferObjects + +> **TransferObjects**: `ObjectSchema`\<`object`, `undefined`\> + +#### Type declaration + +##### objects + +> `readonly` **objects**: `ArraySchema`\<`GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\>, `undefined`\> + +##### address + +> `readonly` **address**: `GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\> = `Argument` + +### SplitCoins + +> **SplitCoins**: `ObjectSchema`\<`object`, `undefined`\> + +#### Type declaration + +##### coin + +> `readonly` **coin**: `GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\> = `Argument` + +##### amounts + +> `readonly` **amounts**: `ArraySchema`\<`GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\>, `undefined`\> + +### MergeCoins + +> **MergeCoins**: `ObjectSchema`\<`object`, `undefined`\> + +#### Type declaration + +##### destination + +> `readonly` **destination**: `GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\> = `Argument` + +##### sources + +> `readonly` **sources**: `ArraySchema`\<`GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\>, `undefined`\> + +### Publish + +> **Publish**: `ObjectSchema`\<`object`, `undefined`\> + +#### Type declaration + +##### modules + +> `readonly` **modules**: `ArraySchema`\<`StringSchema`\<`undefined`\>, `undefined`\> + +##### dependencies + +> `readonly` **dependencies**: `ArraySchema`\<`SchemaWithPipe`\<[`StringSchema`\<`undefined`\>, `TransformAction`\<`string`, `string`\>, `CheckAction`\<`string`, `undefined`\>]\>, `undefined`\> + +### MakeMoveVec + +> **MakeMoveVec**: `ObjectSchema`\<`object`, `undefined`\> + +#### Type declaration + +##### type + +> `readonly` **type**: `NullableSchema`\<`StringSchema`\<`undefined`\>, `never`\> + +##### elements + +> `readonly` **elements**: `ArraySchema`\<`GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\>, `undefined`\> + +### Upgrade + +> **Upgrade**: `ObjectSchema`\<`object`, `undefined`\> + +#### Type declaration + +##### modules + +> `readonly` **modules**: `ArraySchema`\<`StringSchema`\<`undefined`\>, `undefined`\> + +##### dependencies + +> `readonly` **dependencies**: `ArraySchema`\<`SchemaWithPipe`\<[`StringSchema`\<`undefined`\>, `TransformAction`\<`string`, `string`\>, `CheckAction`\<`string`, `undefined`\>]\>, `undefined`\> + +##### package + +> `readonly` **package**: `SchemaWithPipe`\<[`StringSchema`\<`undefined`\>, `TransformAction`\<`string`, `string`\>, `CheckAction`\<`string`, `undefined`\>]\> = `ObjectID` + +##### ticket + +> `readonly` **ticket**: `GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\> = `Argument` + +### $Intent + +> **$Intent**: `ObjectSchema`\<`object`, `undefined`\> + +#### Type declaration + +##### name + +> `readonly` **name**: `StringSchema`\<`undefined`\> + +##### inputs + +> `readonly` **inputs**: `RecordSchema`\<`StringSchema`\<`undefined`\>, `UnionSchema`\<[`GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\>, `ArraySchema`\<`GenericSchema`\<`object` \| `object` \| `object` \| `object`, `object` \| `object` \| `object` \| `object` \| `object`, `BaseIssue`\<`unknown`\>\>, `undefined`\>], `undefined`\>, `undefined`\> + +##### data + +> `readonly` **data**: `RecordSchema`\<`StringSchema`\<`undefined`\>, `UnknownSchema`, `undefined`\> diff --git a/docs/content/ts-sdk/api/transactions/variables/Commands.md b/docs/content/ts-sdk/api/transactions/variables/Commands.md new file mode 100644 index 00000000000..1e6564413ac --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/Commands.md @@ -0,0 +1,115 @@ +# Variable: Commands + +> `const` **Commands**: `object` + +Simple helpers used to construct transactions: + +## Type declaration + +### MoveCall() + +#### Parameters + +• **input**: `object` \| `object` + +#### Returns + +`TransactionShape`\<`"MoveCall"`\> + +### TransferObjects() + +#### Parameters + +• **objects**: (`object` \| `object` \| `object` \| `object`)[] + +• **address**: `object` \| `object` \| `object` \| `object` + +#### Returns + +`TransactionShape`\<`"TransferObjects"`\> + +### SplitCoins() + +#### Parameters + +• **coin**: `object` \| `object` \| `object` \| `object` + +• **amounts**: (`object` \| `object` \| `object` \| `object`)[] + +#### Returns + +`TransactionShape`\<`"SplitCoins"`\> + +### MergeCoins() + +#### Parameters + +• **destination**: `object` \| `object` \| `object` \| `object` + +• **sources**: (`object` \| `object` \| `object` \| `object`)[] + +#### Returns + +`TransactionShape`\<`"MergeCoins"`\> + +### Publish() + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.modules**: `string`[] \| `number`[][] + +• **\_\_namedParameters.dependencies**: `string`[] + +#### Returns + +`TransactionShape`\<`"Publish"`\> + +### Upgrade() + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.modules**: `string`[] \| `number`[][] + +• **\_\_namedParameters.dependencies**: `string`[] + +• **\_\_namedParameters.package**: `string` + +• **\_\_namedParameters.ticket**: `object` \| `object` \| `object` \| `object` + +#### Returns + +`TransactionShape`\<`"Upgrade"`\> + +### MakeMoveVec() + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.type?**: `string` + +• **\_\_namedParameters.elements**: (`object` \| `object` \| `object` \| `object`)[] + +#### Returns + +`TransactionShape`\<`"MakeMoveVec"`\> + +### Intent() + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.name**: `string` + +• **\_\_namedParameters.inputs?**: `Record`\<`string`, `object` \| `object` \| `object` \| `object` \| (`object` \| `object` \| `object` \| `object`)[]\> = `{}` + +• **\_\_namedParameters.data?**: `Record`\<`string`, `unknown`\> = `{}` + +#### Returns + +`TransactionShape`\<`"$Intent"`\> diff --git a/docs/content/ts-sdk/api/transactions/variables/GasData.md b/docs/content/ts-sdk/api/transactions/variables/GasData.md new file mode 100644 index 00000000000..da28ef91032 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/GasData.md @@ -0,0 +1,21 @@ +# Variable: GasData + +> `const` **GasData**: `ObjectSchema`\<`object`, `undefined`\> + +## Type declaration + +### budget + +> `readonly` **budget**: `NullableSchema`\<`SchemaWithPipe`\<[`UnionSchema`\<[`StringSchema`\<`undefined`\>, `SchemaWithPipe`\<[`NumberSchema`\<`undefined`\>, `IntegerAction`\<`number`, `undefined`\>]\>], `undefined`\>, `CheckAction`\<`string` \| `number`, `"Invalid u64"`\>]\>, `never`\> + +### price + +> `readonly` **price**: `NullableSchema`\<`SchemaWithPipe`\<[`UnionSchema`\<[`StringSchema`\<`undefined`\>, `SchemaWithPipe`\<[`NumberSchema`\<`undefined`\>, `IntegerAction`\<`number`, `undefined`\>]\>], `undefined`\>, `CheckAction`\<`string` \| `number`, `"Invalid u64"`\>]\>, `never`\> + +### owner + +> `readonly` **owner**: `NullableSchema`\<`SchemaWithPipe`\<[`StringSchema`\<`undefined`\>, `TransformAction`\<`string`, `string`\>, `CheckAction`\<`string`, `undefined`\>]\>, `never`\> + +### payment + +> `readonly` **payment**: `NullableSchema`\<`ArraySchema`\<`ObjectSchema`\<`object`, `undefined`\>, `undefined`\>, `never`\> diff --git a/docs/content/ts-sdk/api/transactions/variables/Inputs.md b/docs/content/ts-sdk/api/transactions/variables/Inputs.md new file mode 100644 index 00000000000..57163e5994b --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/Inputs.md @@ -0,0 +1,275 @@ +# Variable: Inputs + +> `const` **Inputs**: `object` + +## Type declaration + +### Pure() + +> **Pure**: (`data`) => `Extract`\<[`CallArg`](../type-aliases/CallArg.md), `object`\> + +#### Parameters + +• **data**: `Uint8Array` \| `SerializedBcs`\<`any`, `any`\> + +#### Returns + +`Extract`\<[`CallArg`](../type-aliases/CallArg.md), `object`\> + +### ObjectRef() + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.objectId**: `string` + +• **\_\_namedParameters.version**: `string` \| `number` + +• **\_\_namedParameters.digest**: `string` + +#### Returns + +`object` + +##### Pure + +> **Pure**: `undefined` + +##### UnresolvedPure + +> **UnresolvedPure**: `undefined` + +##### UnresolvedObject + +> **UnresolvedObject**: `undefined` + +##### $kind + +> **$kind**: `"Object"` + +##### Object + +> **Object**: `EnumOutputShapeWithKeys`\<`object`, `"ImmOrOwnedObject"` \| `"SharedObject"` \| `"Receiving"`\> = `ObjectArg` + +###### Type declaration + +###### ImmOrOwnedObject + +> **ImmOrOwnedObject**: `object` = `ObjectRef` + +###### ImmOrOwnedObject.objectId + +> **objectId**: `string` = `IotaAddress` + +###### ImmOrOwnedObject.version + +> **version**: `string` \| `number` = `JsonU64` + +###### ImmOrOwnedObject.digest + +> **digest**: `string` + +###### SharedObject + +> **SharedObject**: `object` + +###### SharedObject.objectId + +> **objectId**: `string` = `ObjectID` + +###### SharedObject.initialSharedVersion + +> **initialSharedVersion**: `string` \| `number` = `JsonU64` + +###### SharedObject.mutable + +> **mutable**: `boolean` + +###### Receiving + +> **Receiving**: `object` = `ObjectRef` + +###### Receiving.objectId + +> **objectId**: `string` = `IotaAddress` + +###### Receiving.version + +> **version**: `string` \| `number` = `JsonU64` + +###### Receiving.digest + +> **digest**: `string` + +### SharedObjectRef() + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.objectId**: `string` + +• **\_\_namedParameters.mutable**: `boolean` + +• **\_\_namedParameters.initialSharedVersion**: `string` \| `number` + +#### Returns + +`object` + +##### Pure + +> **Pure**: `undefined` + +##### UnresolvedPure + +> **UnresolvedPure**: `undefined` + +##### UnresolvedObject + +> **UnresolvedObject**: `undefined` + +##### $kind + +> **$kind**: `"Object"` + +##### Object + +> **Object**: `EnumOutputShapeWithKeys`\<`object`, `"ImmOrOwnedObject"` \| `"SharedObject"` \| `"Receiving"`\> = `ObjectArg` + +###### Type declaration + +###### ImmOrOwnedObject + +> **ImmOrOwnedObject**: `object` = `ObjectRef` + +###### ImmOrOwnedObject.objectId + +> **objectId**: `string` = `IotaAddress` + +###### ImmOrOwnedObject.version + +> **version**: `string` \| `number` = `JsonU64` + +###### ImmOrOwnedObject.digest + +> **digest**: `string` + +###### SharedObject + +> **SharedObject**: `object` + +###### SharedObject.objectId + +> **objectId**: `string` = `ObjectID` + +###### SharedObject.initialSharedVersion + +> **initialSharedVersion**: `string` \| `number` = `JsonU64` + +###### SharedObject.mutable + +> **mutable**: `boolean` + +###### Receiving + +> **Receiving**: `object` = `ObjectRef` + +###### Receiving.objectId + +> **objectId**: `string` = `IotaAddress` + +###### Receiving.version + +> **version**: `string` \| `number` = `JsonU64` + +###### Receiving.digest + +> **digest**: `string` + +### ReceivingRef() + +#### Parameters + +• **\_\_namedParameters** + +• **\_\_namedParameters.objectId**: `string` + +• **\_\_namedParameters.version**: `string` \| `number` + +• **\_\_namedParameters.digest**: `string` + +#### Returns + +`object` + +##### Pure + +> **Pure**: `undefined` + +##### UnresolvedPure + +> **UnresolvedPure**: `undefined` + +##### UnresolvedObject + +> **UnresolvedObject**: `undefined` + +##### $kind + +> **$kind**: `"Object"` + +##### Object + +> **Object**: `EnumOutputShapeWithKeys`\<`object`, `"ImmOrOwnedObject"` \| `"SharedObject"` \| `"Receiving"`\> = `ObjectArg` + +###### Type declaration + +###### ImmOrOwnedObject + +> **ImmOrOwnedObject**: `object` = `ObjectRef` + +###### ImmOrOwnedObject.objectId + +> **objectId**: `string` = `IotaAddress` + +###### ImmOrOwnedObject.version + +> **version**: `string` \| `number` = `JsonU64` + +###### ImmOrOwnedObject.digest + +> **digest**: `string` + +###### SharedObject + +> **SharedObject**: `object` + +###### SharedObject.objectId + +> **objectId**: `string` = `ObjectID` + +###### SharedObject.initialSharedVersion + +> **initialSharedVersion**: `string` \| `number` = `JsonU64` + +###### SharedObject.mutable + +> **mutable**: `boolean` + +###### Receiving + +> **Receiving**: `object` = `ObjectRef` + +###### Receiving.objectId + +> **objectId**: `string` = `IotaAddress` + +###### Receiving.version + +> **version**: `string` \| `number` = `JsonU64` + +###### Receiving.digest + +> **digest**: `string` diff --git a/docs/content/ts-sdk/api/transactions/variables/ObjectRef.md b/docs/content/ts-sdk/api/transactions/variables/ObjectRef.md new file mode 100644 index 00000000000..faaf4bcb02e --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/ObjectRef.md @@ -0,0 +1,17 @@ +# Variable: ObjectRef + +> `const` **ObjectRef**: `ObjectSchema`\<`object`, `undefined`\> + +## Type declaration + +### objectId + +> `readonly` **objectId**: `SchemaWithPipe`\<[`StringSchema`\<`undefined`\>, `TransformAction`\<`string`, `string`\>, `CheckAction`\<`string`, `undefined`\>]\> = `IotaAddress` + +### version + +> `readonly` **version**: `SchemaWithPipe`\<[`UnionSchema`\<[`StringSchema`\<`undefined`\>, `SchemaWithPipe`\<[`NumberSchema`\<`undefined`\>, `IntegerAction`\<`number`, `undefined`\>]\>], `undefined`\>, `CheckAction`\<`string` \| `number`, `"Invalid u64"`\>]\> = `JsonU64` + +### digest + +> `readonly` **digest**: `StringSchema`\<`undefined`\> diff --git a/docs/content/ts-sdk/api/transactions/variables/OpenMoveTypeSignature.md b/docs/content/ts-sdk/api/transactions/variables/OpenMoveTypeSignature.md new file mode 100644 index 00000000000..4f23fe77bc8 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/OpenMoveTypeSignature.md @@ -0,0 +1,13 @@ +# Variable: OpenMoveTypeSignature + +> `const` **OpenMoveTypeSignature**: `ObjectSchema`\<`object`, `undefined`\> + +## Type declaration + +### ref + +> `readonly` **ref**: `NullableSchema`\<`UnionSchema`\<[`LiteralSchema`\<`"&"`, `undefined`\>, `LiteralSchema`\<`"&mut"`, `undefined`\>], `undefined`\>, `never`\> + +### body + +> `readonly` **body**: `GenericSchema`\<[`OpenMoveTypeSignatureBody`](../type-aliases/OpenMoveTypeSignatureBody.md), [`OpenMoveTypeSignatureBody`](../type-aliases/OpenMoveTypeSignatureBody.md), `BaseIssue`\<`unknown`\>\> = `OpenMoveTypeSignatureBody` diff --git a/docs/content/ts-sdk/api/transactions/variables/OpenMoveTypeSignatureBody.md b/docs/content/ts-sdk/api/transactions/variables/OpenMoveTypeSignatureBody.md new file mode 100644 index 00000000000..1ddca2645fd --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/OpenMoveTypeSignatureBody.md @@ -0,0 +1,3 @@ +# Variable: OpenMoveTypeSignatureBody + +> **OpenMoveTypeSignatureBody**: `GenericSchema`\<[`OpenMoveTypeSignatureBody`](../type-aliases/OpenMoveTypeSignatureBody.md), [`OpenMoveTypeSignatureBody`](../type-aliases/OpenMoveTypeSignatureBody.md), `BaseIssue`\<`unknown`\>\> diff --git a/docs/content/ts-sdk/api/transactions/variables/SerializedTransactionDataV1.md b/docs/content/ts-sdk/api/transactions/variables/SerializedTransactionDataV1.md new file mode 100644 index 00000000000..6a27477a35a --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/SerializedTransactionDataV1.md @@ -0,0 +1,47 @@ +# Variable: SerializedTransactionDataV1 + +> `const` **SerializedTransactionDataV1**: `ObjectSchema`\<`object`, `undefined`\> + +## Type declaration + +### version + +> `readonly` **version**: `LiteralSchema`\<`1`, `undefined`\> + +### sender + +> `readonly` **sender**: `OptionalSchema`\<`StringSchema`\<`undefined`\>, `never`\> + +### expiration + +> `readonly` **expiration**: `NullishSchema`\<`UnionSchema`\<[`ObjectSchema`\<`object`, `undefined`\>, `ObjectSchema`\<`object`, `undefined`\>], `undefined`\>, `never`\> + +### gasConfig + +> `readonly` **gasConfig**: `ObjectSchema`\<`object`, `undefined`\> = `GasConfig` + +#### Type declaration + +##### budget + +> `readonly` **budget**: `OptionalSchema`\<`SchemaWithPipe`\<[`UnionSchema`\<[`NumberSchema`\<`undefined`\>, `StringSchema`\<`undefined`\>, `BigintSchema`\<`undefined`\>], `undefined`\>, `CheckAction`\<`string` \| `number` \| `bigint`, `undefined`\>]\>, `never`\> + +##### price + +> `readonly` **price**: `OptionalSchema`\<`SchemaWithPipe`\<[`UnionSchema`\<[`NumberSchema`\<`undefined`\>, `StringSchema`\<`undefined`\>, `BigintSchema`\<`undefined`\>], `undefined`\>, `CheckAction`\<`string` \| `number` \| `bigint`, `undefined`\>]\>, `never`\> + +##### payment + +> `readonly` **payment**: `OptionalSchema`\<`ArraySchema`\<`ObjectSchema`\<`object`, `undefined`\>, `undefined`\>, `never`\> + +##### owner + +> `readonly` **owner**: `OptionalSchema`\<`StringSchema`\<`undefined`\>, `never`\> + +### inputs + +> `readonly` **inputs**: `ArraySchema`\<`UnionSchema`\<[`ObjectSchema`\<`object`, `undefined`\>, `ObjectSchema`\<`object`, `undefined`\>], `undefined`\>, `undefined`\> + +### transactions + +> `readonly` **transactions**: `ArraySchema`\<`UnionSchema`\<[`ObjectSchema`\<`object`, `undefined`\>, `ObjectSchema`\<`object`, `undefined`\>, `ObjectSchema`\<`object`, `undefined`\>], `undefined`\>, `undefined`\> diff --git a/docs/content/ts-sdk/api/transactions/variables/SerializedTransactionDataV2.md b/docs/content/ts-sdk/api/transactions/variables/SerializedTransactionDataV2.md new file mode 100644 index 00000000000..a84362cbe02 --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/SerializedTransactionDataV2.md @@ -0,0 +1,47 @@ +# Variable: SerializedTransactionDataV2 + +> `const` **SerializedTransactionDataV2**: `ObjectSchema`\<`object`, `undefined`\> + +## Type declaration + +### version + +> `readonly` **version**: `LiteralSchema`\<`2`, `undefined`\> + +### sender + +> `readonly` **sender**: `NullishSchema`\<`SchemaWithPipe`\<[`StringSchema`\<`undefined`\>, `TransformAction`\<`string`, `string`\>, `CheckAction`\<`string`, `undefined`\>]\>, `never`\> + +### expiration + +> `readonly` **expiration**: `NullishSchema`\<`GenericSchema`\<`EnumInputShape`\<`object`\>, `EnumInputShape`\<`object`\>, `BaseIssue`\<`unknown`\>\>, `never`\> + +### gasData + +> `readonly` **gasData**: `ObjectSchema`\<`object`, `undefined`\> = `GasData` + +#### Type declaration + +##### budget + +> `readonly` **budget**: `NullableSchema`\<`SchemaWithPipe`\<[`UnionSchema`\<[`StringSchema`\<`undefined`\>, `SchemaWithPipe`\<[..., ...]\>], `undefined`\>, `CheckAction`\<`string` \| `number`, `"Invalid u64"`\>]\>, `never`\> + +##### price + +> `readonly` **price**: `NullableSchema`\<`SchemaWithPipe`\<[`UnionSchema`\<[`StringSchema`\<`undefined`\>, `SchemaWithPipe`\<[..., ...]\>], `undefined`\>, `CheckAction`\<`string` \| `number`, `"Invalid u64"`\>]\>, `never`\> + +##### owner + +> `readonly` **owner**: `NullableSchema`\<`SchemaWithPipe`\<[`StringSchema`\<`undefined`\>, `TransformAction`\<`string`, `string`\>, `CheckAction`\<`string`, `undefined`\>]\>, `never`\> + +##### payment + +> `readonly` **payment**: `NullableSchema`\<`ArraySchema`\<`ObjectSchema`\<`object`, `undefined`\>, `undefined`\>, `never`\> + +### inputs + +> `readonly` **inputs**: `ArraySchema`\<`GenericSchema`\<`EnumInputShape`\<`object`\>, `EnumInputShape`\<`object`\>, `BaseIssue`\<`unknown`\>\>, `undefined`\> + +### commands + +> `readonly` **commands**: `ArraySchema`\<`GenericSchema`\<`EnumInputShape`\<`object`\>, `EnumInputShape`\<`object`\>, `BaseIssue`\<`unknown`\>\>, `undefined`\> diff --git a/docs/content/ts-sdk/api/transactions/variables/TransactionData.md b/docs/content/ts-sdk/api/transactions/variables/TransactionData.md new file mode 100644 index 00000000000..c200a513e2c --- /dev/null +++ b/docs/content/ts-sdk/api/transactions/variables/TransactionData.md @@ -0,0 +1,47 @@ +# Variable: TransactionData + +> `const` **TransactionData**: `ObjectSchema`\<`object`, `undefined`\> + +## Type declaration + +### version + +> `readonly` **version**: `LiteralSchema`\<`2`, `undefined`\> + +### sender + +> `readonly` **sender**: `NullishSchema`\<`SchemaWithPipe`\<[`StringSchema`\<`undefined`\>, `TransformAction`\<`string`, `string`\>, `CheckAction`\<`string`, `undefined`\>]\>, `never`\> + +### expiration + +> `readonly` **expiration**: `NullishSchema`\<`EnumSchema`\<`object`\>, `never`\> + +### gasData + +> `readonly` **gasData**: `ObjectSchema`\<`object`, `undefined`\> = `GasData` + +#### Type declaration + +##### budget + +> `readonly` **budget**: `NullableSchema`\<`SchemaWithPipe`\<[`UnionSchema`\<[`StringSchema`\<`undefined`\>, `SchemaWithPipe`\<[..., ...]\>], `undefined`\>, `CheckAction`\<`string` \| `number`, `"Invalid u64"`\>]\>, `never`\> + +##### price + +> `readonly` **price**: `NullableSchema`\<`SchemaWithPipe`\<[`UnionSchema`\<[`StringSchema`\<`undefined`\>, `SchemaWithPipe`\<[..., ...]\>], `undefined`\>, `CheckAction`\<`string` \| `number`, `"Invalid u64"`\>]\>, `never`\> + +##### owner + +> `readonly` **owner**: `NullableSchema`\<`SchemaWithPipe`\<[`StringSchema`\<`undefined`\>, `TransformAction`\<`string`, `string`\>, `CheckAction`\<`string`, `undefined`\>]\>, `never`\> + +##### payment + +> `readonly` **payment**: `NullableSchema`\<`ArraySchema`\<`ObjectSchema`\<`object`, `undefined`\>, `undefined`\>, `never`\> + +### inputs + +> `readonly` **inputs**: `ArraySchema`\<`EnumSchema`\<`object`\>, `undefined`\> + +### commands + +> `readonly` **commands**: `ArraySchema`\<`EnumSchema`\<`object`\>, `undefined`\> diff --git a/docs/content/ts-sdk/api/typedoc-sidebar.cjs b/docs/content/ts-sdk/api/typedoc-sidebar.cjs new file mode 100644 index 00000000000..25ebb1ff4d8 --- /dev/null +++ b/docs/content/ts-sdk/api/typedoc-sidebar.cjs @@ -0,0 +1,4 @@ +// @ts-check +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const typedocSidebar = { items: [{"type":"category","label":"bcs","items":[{"type":"category","label":"Classes","items":[{"type":"doc","id":"ts-sdk/api/bcs/classes/BcsType","label":"BcsType"},{"type":"doc","id":"ts-sdk/api/bcs/classes/TypeTagSerializer","label":"TypeTagSerializer"}]},{"type":"category","label":"Interfaces","items":[{"type":"doc","id":"ts-sdk/api/bcs/interfaces/BcsTypeOptions","label":"BcsTypeOptions"}]},{"type":"category","label":"Type Aliases","items":[{"type":"doc","id":"ts-sdk/api/bcs/type-aliases/TypeTag","label":"TypeTag"}]},{"type":"category","label":"Variables","items":[{"type":"doc","id":"ts-sdk/api/bcs/variables/bcs","label":"bcs"}]}],"link":{"type":"doc","id":"ts-sdk/api/bcs/index"}},{"type":"category","label":"client","items":[{"type":"category","label":"Enumerations","items":[{"type":"doc","id":"ts-sdk/api/client/enumerations/Network","label":"Network"}]},{"type":"category","label":"Classes","items":[{"type":"doc","id":"ts-sdk/api/client/classes/IotaClient","label":"IotaClient"},{"type":"doc","id":"ts-sdk/api/client/classes/IotaHTTPTransportError","label":"IotaHTTPTransportError"},{"type":"doc","id":"ts-sdk/api/client/classes/JsonRpcError","label":"JsonRpcError"},{"type":"doc","id":"ts-sdk/api/client/classes/IotaHTTPStatusError","label":"IotaHTTPStatusError"},{"type":"doc","id":"ts-sdk/api/client/classes/IotaHTTPTransport","label":"IotaHTTPTransport"}]},{"type":"category","label":"Interfaces","items":[{"type":"doc","id":"ts-sdk/api/client/interfaces/PaginationArguments","label":"PaginationArguments"},{"type":"doc","id":"ts-sdk/api/client/interfaces/OrderArguments","label":"OrderArguments"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaHTTPTransportOptions","label":"IotaHTTPTransportOptions"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaTransportRequestOptions","label":"IotaTransportRequestOptions"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaTransportSubscribeOptions","label":"IotaTransportSubscribeOptions"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaTransport","label":"IotaTransport"},{"type":"doc","id":"ts-sdk/api/client/interfaces/NetworkConfiguration","label":"NetworkConfiguration"},{"type":"doc","id":"ts-sdk/api/client/interfaces/KioskConfiguration","label":"KioskConfiguration"},{"type":"doc","id":"ts-sdk/api/client/interfaces/AddressMetrics","label":"AddressMetrics"},{"type":"doc","id":"ts-sdk/api/client/interfaces/Balance","label":"Balance"},{"type":"doc","id":"ts-sdk/api/client/interfaces/BalanceChange","label":"BalanceChange"},{"type":"doc","id":"ts-sdk/api/client/interfaces/Checkpoint","label":"Checkpoint"},{"type":"doc","id":"ts-sdk/api/client/interfaces/Claim","label":"Claim"},{"type":"doc","id":"ts-sdk/api/client/interfaces/CoinStruct","label":"CoinStruct"},{"type":"doc","id":"ts-sdk/api/client/interfaces/CommitteeInfo","label":"CommitteeInfo"},{"type":"doc","id":"ts-sdk/api/client/interfaces/DelegatedStake","label":"DelegatedStake"},{"type":"doc","id":"ts-sdk/api/client/interfaces/DelegatedTimelockedStake","label":"DelegatedTimelockedStake"},{"type":"doc","id":"ts-sdk/api/client/interfaces/DevInspectArgs","label":"DevInspectArgs"},{"type":"doc","id":"ts-sdk/api/client/interfaces/DevInspectResults","label":"DevInspectResults"},{"type":"doc","id":"ts-sdk/api/client/interfaces/DisplayFieldsResponse","label":"DisplayFieldsResponse"},{"type":"doc","id":"ts-sdk/api/client/interfaces/DryRunTransactionBlockResponse","label":"DryRunTransactionBlockResponse"},{"type":"doc","id":"ts-sdk/api/client/interfaces/DynamicFieldInfo","label":"DynamicFieldInfo"},{"type":"doc","id":"ts-sdk/api/client/interfaces/DynamicFieldName","label":"DynamicFieldName"},{"type":"doc","id":"ts-sdk/api/client/interfaces/ECMHLiveObjectSetDigest","label":"ECMHLiveObjectSetDigest"},{"type":"doc","id":"ts-sdk/api/client/interfaces/EndOfEpochData","label":"EndOfEpochData"},{"type":"doc","id":"ts-sdk/api/client/interfaces/EndOfEpochInfo","label":"EndOfEpochInfo"},{"type":"doc","id":"ts-sdk/api/client/interfaces/EpochInfo","label":"EpochInfo"},{"type":"doc","id":"ts-sdk/api/client/interfaces/EpochMetrics","label":"EpochMetrics"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaEvent","label":"IotaEvent"},{"type":"doc","id":"ts-sdk/api/client/interfaces/EventId","label":"EventId"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GasCostSummary","label":"GasCostSummary"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaGasData","label":"IotaGasData"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetPastObjectRequest","label":"GetPastObjectRequest"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaActiveJwk","label":"IotaActiveJwk"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaAuthenticatorStateExpire","label":"IotaAuthenticatorStateExpire"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaChangeEpoch","label":"IotaChangeEpoch"},{"type":"doc","id":"ts-sdk/api/client/interfaces/CoinMetadata","label":"CoinMetadata"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaExecutionResult","label":"IotaExecutionResult"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaJWK","label":"IotaJWK"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaJwkId","label":"IotaJwkId"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaMoveAbilitySet","label":"IotaMoveAbilitySet"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaMoveModuleId","label":"IotaMoveModuleId"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaMoveNormalizedField","label":"IotaMoveNormalizedField"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaMoveNormalizedFunction","label":"IotaMoveNormalizedFunction"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaMoveNormalizedModule","label":"IotaMoveNormalizedModule"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaMoveNormalizedStruct","label":"IotaMoveNormalizedStruct"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaMoveStructTypeParameter","label":"IotaMoveStructTypeParameter"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaObjectResponse","label":"IotaObjectResponse"},{"type":"doc","id":"ts-sdk/api/client/interfaces/MoveCallIotaTransaction","label":"MoveCallIotaTransaction"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaSystemStateSummary","label":"IotaSystemStateSummary"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaValidatorSummary","label":"IotaValidatorSummary"},{"type":"doc","id":"ts-sdk/api/client/interfaces/MoveCallMetrics","label":"MoveCallMetrics"},{"type":"doc","id":"ts-sdk/api/client/interfaces/MoveCallParams","label":"MoveCallParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/MoveFunctionName","label":"MoveFunctionName"},{"type":"doc","id":"ts-sdk/api/client/interfaces/MoveVariant","label":"MoveVariant"},{"type":"doc","id":"ts-sdk/api/client/interfaces/MultiSig","label":"MultiSig"},{"type":"doc","id":"ts-sdk/api/client/interfaces/MultiSigPublicKey","label":"MultiSigPublicKey"},{"type":"doc","id":"ts-sdk/api/client/interfaces/NetworkMetrics","label":"NetworkMetrics"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaObjectData","label":"IotaObjectData"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaObjectDataOptions","label":"IotaObjectDataOptions"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaObjectRef","label":"IotaObjectRef"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaObjectResponseQuery","label":"IotaObjectResponseQuery"},{"type":"doc","id":"ts-sdk/api/client/interfaces/OwnedObjectRef","label":"OwnedObjectRef"},{"type":"doc","id":"ts-sdk/api/client/interfaces/PaginatedCheckpoints","label":"PaginatedCheckpoints"},{"type":"doc","id":"ts-sdk/api/client/interfaces/PaginatedCoins","label":"PaginatedCoins"},{"type":"doc","id":"ts-sdk/api/client/interfaces/PaginatedDynamicFieldInfos","label":"PaginatedDynamicFieldInfos"},{"type":"doc","id":"ts-sdk/api/client/interfaces/PaginatedEpochInfos","label":"PaginatedEpochInfos"},{"type":"doc","id":"ts-sdk/api/client/interfaces/PaginatedEpochMetricss","label":"PaginatedEpochMetricss"},{"type":"doc","id":"ts-sdk/api/client/interfaces/PaginatedEvents","label":"PaginatedEvents"},{"type":"doc","id":"ts-sdk/api/client/interfaces/PaginatedObjectsResponse","label":"PaginatedObjectsResponse"},{"type":"doc","id":"ts-sdk/api/client/interfaces/PaginatedTransactionResponse","label":"PaginatedTransactionResponse"},{"type":"doc","id":"ts-sdk/api/client/interfaces/PasskeyAuthenticator","label":"PasskeyAuthenticator"},{"type":"doc","id":"ts-sdk/api/client/interfaces/ProtocolConfig","label":"ProtocolConfig"},{"type":"doc","id":"ts-sdk/api/client/interfaces/CoinSupply","label":"CoinSupply"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaTransactionBlock","label":"IotaTransactionBlock"},{"type":"doc","id":"ts-sdk/api/client/interfaces/TransactionBlockBytes","label":"TransactionBlockBytes"},{"type":"doc","id":"ts-sdk/api/client/interfaces/TransactionBlockEffectsModifiedAtVersions","label":"TransactionBlockEffectsModifiedAtVersions"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaTransactionBlockResponse","label":"IotaTransactionBlockResponse"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaTransactionBlockResponseOptions","label":"IotaTransactionBlockResponseOptions"},{"type":"doc","id":"ts-sdk/api/client/interfaces/IotaTransactionBlockResponseQuery","label":"IotaTransactionBlockResponseQuery"},{"type":"doc","id":"ts-sdk/api/client/interfaces/TransferObjectParams","label":"TransferObjectParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/TypeOrigin","label":"TypeOrigin"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UpgradeInfo","label":"UpgradeInfo"},{"type":"doc","id":"ts-sdk/api/client/interfaces/ValidatorApy","label":"ValidatorApy"},{"type":"doc","id":"ts-sdk/api/client/interfaces/ValidatorsApy","label":"ValidatorsApy"},{"type":"doc","id":"ts-sdk/api/client/interfaces/ZkLoginAuthenticator","label":"ZkLoginAuthenticator"},{"type":"doc","id":"ts-sdk/api/client/interfaces/ZkLoginInputs","label":"ZkLoginInputs"},{"type":"doc","id":"ts-sdk/api/client/interfaces/ZkLoginProof","label":"ZkLoginProof"},{"type":"doc","id":"ts-sdk/api/client/interfaces/DevInspectTransactionBlockParams","label":"DevInspectTransactionBlockParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/DryRunTransactionBlockParams","label":"DryRunTransactionBlockParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/ExecuteTransactionBlockParams","label":"ExecuteTransactionBlockParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetChainIdentifierParams","label":"GetChainIdentifierParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetCheckpointParams","label":"GetCheckpointParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetCheckpointsParams","label":"GetCheckpointsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetEventsParams","label":"GetEventsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetLatestCheckpointSequenceNumberParams","label":"GetLatestCheckpointSequenceNumberParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetMoveFunctionArgTypesParams","label":"GetMoveFunctionArgTypesParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetNormalizedMoveFunctionParams","label":"GetNormalizedMoveFunctionParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetNormalizedMoveModuleParams","label":"GetNormalizedMoveModuleParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetNormalizedMoveModulesByPackageParams","label":"GetNormalizedMoveModulesByPackageParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetNormalizedMoveStructParams","label":"GetNormalizedMoveStructParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetObjectParams","label":"GetObjectParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetProtocolConfigParams","label":"GetProtocolConfigParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetTotalTransactionBlocksParams","label":"GetTotalTransactionBlocksParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetTransactionBlockParams","label":"GetTransactionBlockParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/MultiGetObjectsParams","label":"MultiGetObjectsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/MultiGetTransactionBlocksParams","label":"MultiGetTransactionBlocksParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/TryGetPastObjectParams","label":"TryGetPastObjectParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/TryMultiGetPastObjectsParams","label":"TryMultiGetPastObjectsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetAllBalancesParams","label":"GetAllBalancesParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetAllCoinsParams","label":"GetAllCoinsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetAllEpochAddressMetricsParams","label":"GetAllEpochAddressMetricsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetBalanceParams","label":"GetBalanceParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetCheckpointAddressMetricsParams","label":"GetCheckpointAddressMetricsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetCoinMetadataParams","label":"GetCoinMetadataParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetCoinsParams","label":"GetCoinsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetCommitteeInfoParams","label":"GetCommitteeInfoParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetCurrentEpochParams","label":"GetCurrentEpochParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetDynamicFieldObjectParams","label":"GetDynamicFieldObjectParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetDynamicFieldsParams","label":"GetDynamicFieldsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetEpochMetricsParams","label":"GetEpochMetricsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetEpochsParams","label":"GetEpochsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetLatestAddressMetricsParams","label":"GetLatestAddressMetricsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetLatestIotaSystemStateParams","label":"GetLatestIotaSystemStateParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetMoveCallMetricsParams","label":"GetMoveCallMetricsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetNetworkMetricsParams","label":"GetNetworkMetricsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetReferenceGasPriceParams","label":"GetReferenceGasPriceParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetStakesParams","label":"GetStakesParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetStakesByIdsParams","label":"GetStakesByIdsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetTimelockedStakesParams","label":"GetTimelockedStakesParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetTimelockedStakesByIdsParams","label":"GetTimelockedStakesByIdsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetTotalSupplyParams","label":"GetTotalSupplyParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetTotalTransactionsParams","label":"GetTotalTransactionsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/GetValidatorsApyParams","label":"GetValidatorsApyParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/QueryEventsParams","label":"QueryEventsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/SubscribeEventParams","label":"SubscribeEventParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/SubscribeTransactionParams","label":"SubscribeTransactionParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeBatchTransactionParams","label":"UnsafeBatchTransactionParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeMergeCoinsParams","label":"UnsafeMergeCoinsParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeMoveCallParams","label":"UnsafeMoveCallParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafePayParams","label":"UnsafePayParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafePayAllIotaParams","label":"UnsafePayAllIotaParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafePayIotaParams","label":"UnsafePayIotaParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafePublishParams","label":"UnsafePublishParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeRequestAddStakeParams","label":"UnsafeRequestAddStakeParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeRequestAddTimelockedStakeParams","label":"UnsafeRequestAddTimelockedStakeParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeRequestWithdrawStakeParams","label":"UnsafeRequestWithdrawStakeParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeRequestWithdrawTimelockedStakeParams","label":"UnsafeRequestWithdrawTimelockedStakeParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeSplitCoinParams","label":"UnsafeSplitCoinParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeSplitCoinEqualParams","label":"UnsafeSplitCoinEqualParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeTransferIotaParams","label":"UnsafeTransferIotaParams"},{"type":"doc","id":"ts-sdk/api/client/interfaces/UnsafeTransferObjectParams","label":"UnsafeTransferObjectParams"}]},{"type":"category","label":"Type Aliases","items":[{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaClientOptions","label":"IotaClientOptions"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/HttpHeaders","label":"HttpHeaders"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/NetworkId","label":"NetworkId"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/ChainType","label":"ChainType"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/EpochPage","label":"EpochPage"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/EpochMetricsPage","label":"EpochMetricsPage"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/CheckpointPage","label":"CheckpointPage"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/AllEpochsAddressMetrics","label":"AllEpochsAddressMetrics"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/MoveCallMetric","label":"MoveCallMetric"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/DynamicFieldPage","label":"DynamicFieldPage"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaMoveNormalizedModules","label":"IotaMoveNormalizedModules"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaMoveObject","label":"IotaMoveObject"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaMovePackage","label":"IotaMovePackage"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/ProgrammableTransaction","label":"ProgrammableTransaction"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaObjectChangePublished","label":"IotaObjectChangePublished"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaObjectChangeTransferred","label":"IotaObjectChangeTransferred"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaObjectChangeMutated","label":"IotaObjectChangeMutated"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaObjectChangeDeleted","label":"IotaObjectChangeDeleted"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaObjectChangeWrapped","label":"IotaObjectChangeWrapped"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaObjectChangeCreated","label":"IotaObjectChangeCreated"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/CoinBalance","label":"CoinBalance"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/Order","label":"Order"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/Unsubscribe","label":"Unsubscribe"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/CheckpointCommitment","label":"CheckpointCommitment"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/CheckpointId","label":"CheckpointId"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/CompressedSignature","label":"CompressedSignature"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/ConsensusDeterminedVersionAssignments","label":"ConsensusDeterminedVersionAssignments"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaParsedData","label":"IotaParsedData"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/DynamicFieldType","label":"DynamicFieldType"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaEventFilter","label":"IotaEventFilter"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/ExecuteTransactionRequestType","label":"ExecuteTransactionRequestType"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/ExecutionStatus","label":"ExecutionStatus"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/InputObjectKind","label":"InputObjectKind"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaArgument","label":"IotaArgument"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaCallArg","label":"IotaCallArg"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaEndOfEpochTransactionKind","label":"IotaEndOfEpochTransactionKind"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaMoveAbility","label":"IotaMoveAbility"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaMoveNormalizedType","label":"IotaMoveNormalizedType"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaMoveVisibility","label":"IotaMoveVisibility"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaObjectDataFilter","label":"IotaObjectDataFilter"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaTransaction","label":"IotaTransaction"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaTransactionBlockBuilderMode","label":"IotaTransactionBlockBuilderMode"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaMoveFunctionArgType","label":"IotaMoveFunctionArgType"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/MoveStruct","label":"MoveStruct"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/MoveValue","label":"MoveValue"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaObjectChange","label":"IotaObjectChange"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/ObjectRead","label":"ObjectRead"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/ObjectResponseError","label":"ObjectResponseError"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/ObjectValueKind","label":"ObjectValueKind"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/ObjectOwner","label":"ObjectOwner"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/ProtocolConfigValue","label":"ProtocolConfigValue"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/PublicKey","label":"PublicKey"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/RPCTransactionRequestParams","label":"RPCTransactionRequestParams"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/RawData","label":"RawData"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/Signature","label":"Signature"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/StakeObject","label":"StakeObject"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/TimelockedStake","label":"TimelockedStake"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/TransactionBlockData","label":"TransactionBlockData"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/TransactionEffects","label":"TransactionEffects"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/IotaTransactionBlockKind","label":"IotaTransactionBlockKind"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/TransactionFilter","label":"TransactionFilter"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/GetOwnedObjectsParams","label":"GetOwnedObjectsParams"},{"type":"doc","id":"ts-sdk/api/client/type-aliases/QueryTransactionBlocksParams","label":"QueryTransactionBlocksParams"}]},{"type":"category","label":"Functions","items":[{"type":"doc","id":"ts-sdk/api/client/functions/getAppsBackend","label":"getAppsBackend"},{"type":"doc","id":"ts-sdk/api/client/functions/isIotaClient","label":"isIotaClient"},{"type":"doc","id":"ts-sdk/api/client/functions/getAllNetworks","label":"getAllNetworks"},{"type":"doc","id":"ts-sdk/api/client/functions/getNetwork","label":"getNetwork"},{"type":"doc","id":"ts-sdk/api/client/functions/getDefaultNetwork","label":"getDefaultNetwork"},{"type":"doc","id":"ts-sdk/api/client/functions/getFullnodeUrl","label":"getFullnodeUrl"}]}],"link":{"type":"doc","id":"ts-sdk/api/client/index"}},{"type":"category","label":"cryptography","items":[{"type":"category","label":"Classes","items":[{"type":"doc","id":"ts-sdk/api/cryptography/classes/Signer","label":"Signer"},{"type":"doc","id":"ts-sdk/api/cryptography/classes/Keypair","label":"Keypair"},{"type":"doc","id":"ts-sdk/api/cryptography/classes/PublicKey","label":"PublicKey"}]},{"type":"category","label":"Interfaces","items":[{"type":"doc","id":"ts-sdk/api/cryptography/interfaces/SignatureWithBytes","label":"SignatureWithBytes"}]},{"type":"category","label":"Type Aliases","items":[{"type":"doc","id":"ts-sdk/api/cryptography/type-aliases/IntentScope","label":"IntentScope"},{"type":"doc","id":"ts-sdk/api/cryptography/type-aliases/ParsedKeypair","label":"ParsedKeypair"},{"type":"doc","id":"ts-sdk/api/cryptography/type-aliases/SignatureScheme","label":"SignatureScheme"},{"type":"doc","id":"ts-sdk/api/cryptography/type-aliases/SignatureFlag","label":"SignatureFlag"},{"type":"doc","id":"ts-sdk/api/cryptography/type-aliases/SerializeSignatureInput","label":"SerializeSignatureInput"}]},{"type":"category","label":"Variables","items":[{"type":"doc","id":"ts-sdk/api/cryptography/variables/PRIVATE_KEY_SIZE","label":"PRIVATE_KEY_SIZE"},{"type":"doc","id":"ts-sdk/api/cryptography/variables/LEGACY_PRIVATE_KEY_SIZE","label":"LEGACY_PRIVATE_KEY_SIZE"},{"type":"doc","id":"ts-sdk/api/cryptography/variables/IOTA_PRIVATE_KEY_PREFIX","label":"IOTA_PRIVATE_KEY_PREFIX"},{"type":"doc","id":"ts-sdk/api/cryptography/variables/SIGNATURE_SCHEME_TO_FLAG","label":"SIGNATURE_SCHEME_TO_FLAG"},{"type":"doc","id":"ts-sdk/api/cryptography/variables/SIGNATURE_SCHEME_TO_SIZE","label":"SIGNATURE_SCHEME_TO_SIZE"},{"type":"doc","id":"ts-sdk/api/cryptography/variables/SIGNATURE_FLAG_TO_SCHEME","label":"SIGNATURE_FLAG_TO_SCHEME"}]},{"type":"category","label":"Functions","items":[{"type":"doc","id":"ts-sdk/api/cryptography/functions/messageWithIntent","label":"messageWithIntent"},{"type":"doc","id":"ts-sdk/api/cryptography/functions/decodeIotaPrivateKey","label":"decodeIotaPrivateKey"},{"type":"doc","id":"ts-sdk/api/cryptography/functions/encodeIotaPrivateKey","label":"encodeIotaPrivateKey"},{"type":"doc","id":"ts-sdk/api/cryptography/functions/isValidHardenedPath","label":"isValidHardenedPath"},{"type":"doc","id":"ts-sdk/api/cryptography/functions/isValidBIP32Path","label":"isValidBIP32Path"},{"type":"doc","id":"ts-sdk/api/cryptography/functions/mnemonicToSeed","label":"mnemonicToSeed"},{"type":"doc","id":"ts-sdk/api/cryptography/functions/mnemonicToSeedHex","label":"mnemonicToSeedHex"},{"type":"doc","id":"ts-sdk/api/cryptography/functions/toSerializedSignature","label":"toSerializedSignature"},{"type":"doc","id":"ts-sdk/api/cryptography/functions/parseSerializedSignature","label":"parseSerializedSignature"}]}],"link":{"type":"doc","id":"ts-sdk/api/cryptography/index"}},{"type":"category","label":"faucet","items":[{"type":"category","label":"Classes","items":[{"type":"doc","id":"ts-sdk/api/faucet/classes/FaucetRateLimitError","label":"FaucetRateLimitError"}]},{"type":"category","label":"Functions","items":[{"type":"doc","id":"ts-sdk/api/faucet/functions/requestIotaFromFaucetV0","label":"requestIotaFromFaucetV0"},{"type":"doc","id":"ts-sdk/api/faucet/functions/requestIotaFromFaucetV1","label":"requestIotaFromFaucetV1"},{"type":"doc","id":"ts-sdk/api/faucet/functions/getFaucetRequestStatus","label":"getFaucetRequestStatus"},{"type":"doc","id":"ts-sdk/api/faucet/functions/getFaucetHost","label":"getFaucetHost"}]}],"link":{"type":"doc","id":"ts-sdk/api/faucet/index"}},{"type":"category","label":"graphql","items":[{"type":"category","label":"Classes","items":[{"type":"doc","id":"ts-sdk/api/graphql/classes/IotaGraphQLRequestError","label":"IotaGraphQLRequestError"},{"type":"doc","id":"ts-sdk/api/graphql/classes/IotaGraphQLClient","label":"IotaGraphQLClient"}]},{"type":"category","label":"Interfaces","items":[{"type":"doc","id":"ts-sdk/api/graphql/interfaces/IotaGraphQLClientOptions","label":"IotaGraphQLClientOptions"}]},{"type":"category","label":"Type Aliases","items":[{"type":"doc","id":"ts-sdk/api/graphql/type-aliases/GraphQLDocument","label":"GraphQLDocument"},{"type":"doc","id":"ts-sdk/api/graphql/type-aliases/GraphQLQueryOptions","label":"GraphQLQueryOptions"},{"type":"doc","id":"ts-sdk/api/graphql/type-aliases/GraphQLQueryResult","label":"GraphQLQueryResult"},{"type":"doc","id":"ts-sdk/api/graphql/type-aliases/GraphQLResponseErrors","label":"GraphQLResponseErrors"}]}],"link":{"type":"doc","id":"ts-sdk/api/graphql/index"}},{"type":"category","label":"keypairs","items":[{"type":"category","label":"ed25519","items":[{"type":"category","label":"Classes","items":[{"type":"doc","id":"ts-sdk/api/keypairs/ed25519/classes/Ed25519Keypair","label":"Ed25519Keypair"},{"type":"doc","id":"ts-sdk/api/keypairs/ed25519/classes/Ed25519PublicKey","label":"Ed25519PublicKey"}]},{"type":"category","label":"Interfaces","items":[{"type":"doc","id":"ts-sdk/api/keypairs/ed25519/interfaces/Ed25519KeypairData","label":"Ed25519KeypairData"}]},{"type":"category","label":"Variables","items":[{"type":"doc","id":"ts-sdk/api/keypairs/ed25519/variables/DEFAULT_ED25519_DERIVATION_PATH","label":"DEFAULT_ED25519_DERIVATION_PATH"}]}],"link":{"type":"doc","id":"ts-sdk/api/keypairs/ed25519/index"}},{"type":"category","label":"secp256k1","items":[{"type":"category","label":"Classes","items":[{"type":"doc","id":"ts-sdk/api/keypairs/secp256k1/classes/Secp256k1Keypair","label":"Secp256k1Keypair"},{"type":"doc","id":"ts-sdk/api/keypairs/secp256k1/classes/Secp256k1PublicKey","label":"Secp256k1PublicKey"}]},{"type":"category","label":"Interfaces","items":[{"type":"doc","id":"ts-sdk/api/keypairs/secp256k1/interfaces/Secp256k1KeypairData","label":"Secp256k1KeypairData"}]},{"type":"category","label":"Variables","items":[{"type":"doc","id":"ts-sdk/api/keypairs/secp256k1/variables/DEFAULT_SECP256K1_DERIVATION_PATH","label":"DEFAULT_SECP256K1_DERIVATION_PATH"}]}],"link":{"type":"doc","id":"ts-sdk/api/keypairs/secp256k1/index"}},{"type":"doc","id":"ts-sdk/api/keypairs/secp256k1/index","label":"secp256k1"}]},{"type":"category","label":"multisig","items":[{"type":"category","label":"Classes","items":[{"type":"doc","id":"ts-sdk/api/multisig/classes/MultiSigPublicKey","label":"MultiSigPublicKey"},{"type":"doc","id":"ts-sdk/api/multisig/classes/MultiSigSigner","label":"MultiSigSigner"}]},{"type":"category","label":"Type Aliases","items":[{"type":"doc","id":"ts-sdk/api/multisig/type-aliases/MultiSigStruct","label":"MultiSigStruct"}]},{"type":"category","label":"Functions","items":[{"type":"doc","id":"ts-sdk/api/multisig/functions/parsePartialSignatures","label":"parsePartialSignatures"}]}],"link":{"type":"doc","id":"ts-sdk/api/multisig/index"}},{"type":"category","label":"transactions","items":[{"type":"category","label":"Enumerations","items":[{"type":"doc","id":"ts-sdk/api/transactions/enumerations/UpgradePolicy","label":"UpgradePolicy"}]},{"type":"category","label":"Classes","items":[{"type":"doc","id":"ts-sdk/api/transactions/classes/AsyncCache","label":"AsyncCache"},{"type":"doc","id":"ts-sdk/api/transactions/classes/ObjectCache","label":"ObjectCache"},{"type":"doc","id":"ts-sdk/api/transactions/classes/Transaction","label":"Transaction"},{"type":"doc","id":"ts-sdk/api/transactions/classes/TransactionDataBuilder","label":"TransactionDataBuilder"},{"type":"doc","id":"ts-sdk/api/transactions/classes/ParallelTransactionExecutor","label":"ParallelTransactionExecutor"},{"type":"doc","id":"ts-sdk/api/transactions/classes/SerialTransactionExecutor","label":"SerialTransactionExecutor"}]},{"type":"category","label":"Interfaces","items":[{"type":"doc","id":"ts-sdk/api/transactions/interfaces/ParallelTransactionExecutorOptions","label":"ParallelTransactionExecutorOptions"},{"type":"doc","id":"ts-sdk/api/transactions/interfaces/BuildTransactionOptions","label":"BuildTransactionOptions"},{"type":"doc","id":"ts-sdk/api/transactions/interfaces/SerializeTransactionOptions","label":"SerializeTransactionOptions"}]},{"type":"category","label":"Type Aliases","items":[{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/TransactionArgument","label":"TransactionArgument"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/TransactionInput","label":"TransactionInput"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/TransactionObjectArgument","label":"TransactionObjectArgument"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/TransactionResult","label":"TransactionResult"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/TransactionObjectInput","label":"TransactionObjectInput"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/ObjectRef","label":"ObjectRef"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/Argument","label":"Argument"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/GasData","label":"GasData"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignatureBody","label":"OpenMoveTypeSignatureBody"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignature","label":"OpenMoveTypeSignature"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/Command","label":"Command"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/CallArg","label":"CallArg"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/TransactionData","label":"TransactionData"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV1","label":"SerializedTransactionDataV1"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV2","label":"SerializedTransactionDataV2"},{"type":"doc","id":"ts-sdk/api/transactions/type-aliases/TransactionPlugin","label":"TransactionPlugin"}]},{"type":"category","label":"Variables","items":[{"type":"doc","id":"ts-sdk/api/transactions/variables/Arguments","label":"Arguments"},{"type":"doc","id":"ts-sdk/api/transactions/variables/Commands","label":"Commands"},{"type":"doc","id":"ts-sdk/api/transactions/variables/Inputs","label":"Inputs"},{"type":"doc","id":"ts-sdk/api/transactions/variables/ObjectRef","label":"ObjectRef"},{"type":"doc","id":"ts-sdk/api/transactions/variables/Argument","label":"Argument"},{"type":"doc","id":"ts-sdk/api/transactions/variables/GasData","label":"GasData"},{"type":"doc","id":"ts-sdk/api/transactions/variables/OpenMoveTypeSignatureBody","label":"OpenMoveTypeSignatureBody"},{"type":"doc","id":"ts-sdk/api/transactions/variables/OpenMoveTypeSignature","label":"OpenMoveTypeSignature"},{"type":"doc","id":"ts-sdk/api/transactions/variables/Command","label":"Command"},{"type":"doc","id":"ts-sdk/api/transactions/variables/TransactionData","label":"TransactionData"},{"type":"doc","id":"ts-sdk/api/transactions/variables/SerializedTransactionDataV1","label":"SerializedTransactionDataV1"},{"type":"doc","id":"ts-sdk/api/transactions/variables/SerializedTransactionDataV2","label":"SerializedTransactionDataV2"}]},{"type":"category","label":"Functions","items":[{"type":"doc","id":"ts-sdk/api/transactions/functions/isTransaction","label":"isTransaction"},{"type":"doc","id":"ts-sdk/api/transactions/functions/coinWithBalance","label":"coinWithBalance"},{"type":"doc","id":"ts-sdk/api/transactions/functions/getPureBcsSchema","label":"getPureBcsSchema"},{"type":"doc","id":"ts-sdk/api/transactions/functions/normalizedTypeToMoveTypeSignature","label":"normalizedTypeToMoveTypeSignature"}]}],"link":{"type":"doc","id":"ts-sdk/api/transactions/index"}},{"type":"category","label":"utils","items":[{"type":"category","label":"Variables","items":[{"type":"doc","id":"ts-sdk/api/utils/variables/IOTA_DECIMALS","label":"IOTA_DECIMALS"},{"type":"doc","id":"ts-sdk/api/utils/variables/NANOS_PER_IOTA","label":"NANOS_PER_IOTA"},{"type":"doc","id":"ts-sdk/api/utils/variables/MOVE_STDLIB_ADDRESS","label":"MOVE_STDLIB_ADDRESS"},{"type":"doc","id":"ts-sdk/api/utils/variables/IOTA_FRAMEWORK_ADDRESS","label":"IOTA_FRAMEWORK_ADDRESS"},{"type":"doc","id":"ts-sdk/api/utils/variables/IOTA_SYSTEM_ADDRESS","label":"IOTA_SYSTEM_ADDRESS"},{"type":"doc","id":"ts-sdk/api/utils/variables/IOTA_CLOCK_OBJECT_ID","label":"IOTA_CLOCK_OBJECT_ID"},{"type":"doc","id":"ts-sdk/api/utils/variables/IOTA_SYSTEM_MODULE_NAME","label":"IOTA_SYSTEM_MODULE_NAME"},{"type":"doc","id":"ts-sdk/api/utils/variables/IOTA_TYPE_ARG","label":"IOTA_TYPE_ARG"},{"type":"doc","id":"ts-sdk/api/utils/variables/IOTA_SYSTEM_STATE_OBJECT_ID","label":"IOTA_SYSTEM_STATE_OBJECT_ID"},{"type":"doc","id":"ts-sdk/api/utils/variables/IOTA_ADDRESS_LENGTH","label":"IOTA_ADDRESS_LENGTH"}]},{"type":"category","label":"Functions","items":[{"type":"doc","id":"ts-sdk/api/utils/functions/fromB64","label":"fromB64"},{"type":"doc","id":"ts-sdk/api/utils/functions/toB64","label":"toB64"},{"type":"doc","id":"ts-sdk/api/utils/functions/fromHEX","label":"fromHEX"},{"type":"doc","id":"ts-sdk/api/utils/functions/toHEX","label":"toHEX"},{"type":"doc","id":"ts-sdk/api/utils/functions/formatAddress","label":"formatAddress"},{"type":"doc","id":"ts-sdk/api/utils/functions/formatDigest","label":"formatDigest"},{"type":"doc","id":"ts-sdk/api/utils/functions/formatType","label":"formatType"},{"type":"doc","id":"ts-sdk/api/utils/functions/isValidTransactionDigest","label":"isValidTransactionDigest"},{"type":"doc","id":"ts-sdk/api/utils/functions/isValidIotaAddress","label":"isValidIotaAddress"},{"type":"doc","id":"ts-sdk/api/utils/functions/isValidIotaObjectId","label":"isValidIotaObjectId"},{"type":"doc","id":"ts-sdk/api/utils/functions/parseStructTag","label":"parseStructTag"},{"type":"doc","id":"ts-sdk/api/utils/functions/normalizeStructTag","label":"normalizeStructTag"},{"type":"doc","id":"ts-sdk/api/utils/functions/normalizeIotaAddress","label":"normalizeIotaAddress"},{"type":"doc","id":"ts-sdk/api/utils/functions/normalizeIotaObjectId","label":"normalizeIotaObjectId"}]}],"link":{"type":"doc","id":"ts-sdk/api/utils/index"}},{"type":"category","label":"verify","items":[{"type":"category","label":"Functions","items":[{"type":"doc","id":"ts-sdk/api/verify/functions/verifySignature","label":"verifySignature"},{"type":"doc","id":"ts-sdk/api/verify/functions/verifyPersonalMessageSignature","label":"verifyPersonalMessageSignature"},{"type":"doc","id":"ts-sdk/api/verify/functions/verifyTransactionSignature","label":"verifyTransactionSignature"},{"type":"doc","id":"ts-sdk/api/verify/functions/publicKeyFromRawBytes","label":"publicKeyFromRawBytes"},{"type":"doc","id":"ts-sdk/api/verify/functions/publicKeyFromIotaBytes","label":"publicKeyFromIotaBytes"}]}],"link":{"type":"doc","id":"ts-sdk/api/verify/index"}}]}; +module.exports = typedocSidebar.items; \ No newline at end of file diff --git a/docs/content/ts-sdk/api/utils/functions/formatAddress.md b/docs/content/ts-sdk/api/utils/functions/formatAddress.md new file mode 100644 index 00000000000..c3a167f0e9b --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/formatAddress.md @@ -0,0 +1,11 @@ +# Function: formatAddress() + +> **formatAddress**(`address`): `string` + +## Parameters + +• **address**: `string` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/utils/functions/formatDigest.md b/docs/content/ts-sdk/api/utils/functions/formatDigest.md new file mode 100644 index 00000000000..41a3ba2dd1b --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/formatDigest.md @@ -0,0 +1,11 @@ +# Function: formatDigest() + +> **formatDigest**(`digest`): `string` + +## Parameters + +• **digest**: `string` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/utils/functions/formatType.md b/docs/content/ts-sdk/api/utils/functions/formatType.md new file mode 100644 index 00000000000..7941bffb537 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/formatType.md @@ -0,0 +1,11 @@ +# Function: formatType() + +> **formatType**(`type`): `string` + +## Parameters + +• **type**: `string` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/utils/functions/fromB64.md b/docs/content/ts-sdk/api/utils/functions/fromB64.md new file mode 100644 index 00000000000..9c32aca174a --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/fromB64.md @@ -0,0 +1,11 @@ +# Function: fromB64() + +> **fromB64**(`base64String`): `Uint8Array` + +## Parameters + +• **base64String**: `string` + +## Returns + +`Uint8Array` diff --git a/docs/content/ts-sdk/api/utils/functions/fromHEX.md b/docs/content/ts-sdk/api/utils/functions/fromHEX.md new file mode 100644 index 00000000000..2a2e84dd9c7 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/fromHEX.md @@ -0,0 +1,11 @@ +# Function: fromHEX() + +> **fromHEX**(`hexStr`): `Uint8Array` + +## Parameters + +• **hexStr**: `string` + +## Returns + +`Uint8Array` diff --git a/docs/content/ts-sdk/api/utils/functions/isValidIotaAddress.md b/docs/content/ts-sdk/api/utils/functions/isValidIotaAddress.md new file mode 100644 index 00000000000..4d59e4823c4 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/isValidIotaAddress.md @@ -0,0 +1,11 @@ +# Function: isValidIotaAddress() + +> **isValidIotaAddress**(`value`): `value is string` + +## Parameters + +• **value**: `string` + +## Returns + +`value is string` diff --git a/docs/content/ts-sdk/api/utils/functions/isValidIotaObjectId.md b/docs/content/ts-sdk/api/utils/functions/isValidIotaObjectId.md new file mode 100644 index 00000000000..e6a979a5dd0 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/isValidIotaObjectId.md @@ -0,0 +1,11 @@ +# Function: isValidIotaObjectId() + +> **isValidIotaObjectId**(`value`): `boolean` + +## Parameters + +• **value**: `string` + +## Returns + +`boolean` diff --git a/docs/content/ts-sdk/api/utils/functions/isValidTransactionDigest.md b/docs/content/ts-sdk/api/utils/functions/isValidTransactionDigest.md new file mode 100644 index 00000000000..c796a72169a --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/isValidTransactionDigest.md @@ -0,0 +1,13 @@ +# Function: isValidTransactionDigest() + +> **isValidTransactionDigest**(`value`): `value is string` + +Returns whether the tx digest is valid based on the serialization format + +## Parameters + +• **value**: `string` + +## Returns + +`value is string` diff --git a/docs/content/ts-sdk/api/utils/functions/normalizeIotaAddress.md b/docs/content/ts-sdk/api/utils/functions/normalizeIotaAddress.md new file mode 100644 index 00000000000..85c8a7cf127 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/normalizeIotaAddress.md @@ -0,0 +1,22 @@ +# Function: normalizeIotaAddress() + +> **normalizeIotaAddress**(`value`, `forceAdd0x`): `string` + +Perform the following operations: +1. Make the address lower case +2. Prepend `0x` if the string does not start with `0x`. +3. Add more zeros if the length of the address(excluding `0x`) is less than `IOTA_ADDRESS_LENGTH` + +WARNING: if the address value itself starts with `0x`, e.g., `0x0x`, the default behavior +is to treat the first `0x` not as part of the address. The default behavior can be overridden by +setting `forceAdd0x` to true + +## Parameters + +• **value**: `string` + +• **forceAdd0x**: `boolean` = `false` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/utils/functions/normalizeIotaObjectId.md b/docs/content/ts-sdk/api/utils/functions/normalizeIotaObjectId.md new file mode 100644 index 00000000000..28534bd38e2 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/normalizeIotaObjectId.md @@ -0,0 +1,13 @@ +# Function: normalizeIotaObjectId() + +> **normalizeIotaObjectId**(`value`, `forceAdd0x`): `string` + +## Parameters + +• **value**: `string` + +• **forceAdd0x**: `boolean` = `false` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/utils/functions/normalizeStructTag.md b/docs/content/ts-sdk/api/utils/functions/normalizeStructTag.md new file mode 100644 index 00000000000..4dedb10bc34 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/normalizeStructTag.md @@ -0,0 +1,11 @@ +# Function: normalizeStructTag() + +> **normalizeStructTag**(`type`): `string` + +## Parameters + +• **type**: `string` \| `StructTag` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/utils/functions/parseStructTag.md b/docs/content/ts-sdk/api/utils/functions/parseStructTag.md new file mode 100644 index 00000000000..6cd9aa7e153 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/parseStructTag.md @@ -0,0 +1,11 @@ +# Function: parseStructTag() + +> **parseStructTag**(`type`): `StructTag` + +## Parameters + +• **type**: `string` + +## Returns + +`StructTag` diff --git a/docs/content/ts-sdk/api/utils/functions/toB64.md b/docs/content/ts-sdk/api/utils/functions/toB64.md new file mode 100644 index 00000000000..b24565ffe87 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/toB64.md @@ -0,0 +1,11 @@ +# Function: toB64() + +> **toB64**(`bytes`): `string` + +## Parameters + +• **bytes**: `Uint8Array` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/utils/functions/toHEX.md b/docs/content/ts-sdk/api/utils/functions/toHEX.md new file mode 100644 index 00000000000..a9cd257eca6 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/functions/toHEX.md @@ -0,0 +1,11 @@ +# Function: toHEX() + +> **toHEX**(`bytes`): `string` + +## Parameters + +• **bytes**: `Uint8Array` + +## Returns + +`string` diff --git a/docs/content/ts-sdk/api/utils/index.md b/docs/content/ts-sdk/api/utils/index.md new file mode 100644 index 00000000000..54098ba1a11 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/index.md @@ -0,0 +1,33 @@ +# utils + +## Index + +### Variables + +- [IOTA\_DECIMALS](variables/IOTA_DECIMALS.md) +- [NANOS\_PER\_IOTA](variables/NANOS_PER_IOTA.md) +- [MOVE\_STDLIB\_ADDRESS](variables/MOVE_STDLIB_ADDRESS.md) +- [IOTA\_FRAMEWORK\_ADDRESS](variables/IOTA_FRAMEWORK_ADDRESS.md) +- [IOTA\_SYSTEM\_ADDRESS](variables/IOTA_SYSTEM_ADDRESS.md) +- [IOTA\_CLOCK\_OBJECT\_ID](variables/IOTA_CLOCK_OBJECT_ID.md) +- [IOTA\_SYSTEM\_MODULE\_NAME](variables/IOTA_SYSTEM_MODULE_NAME.md) +- [IOTA\_TYPE\_ARG](variables/IOTA_TYPE_ARG.md) +- [IOTA\_SYSTEM\_STATE\_OBJECT\_ID](variables/IOTA_SYSTEM_STATE_OBJECT_ID.md) +- [IOTA\_ADDRESS\_LENGTH](variables/IOTA_ADDRESS_LENGTH.md) + +### Functions + +- [fromB64](functions/fromB64.md) +- [toB64](functions/toB64.md) +- [fromHEX](functions/fromHEX.md) +- [toHEX](functions/toHEX.md) +- [formatAddress](functions/formatAddress.md) +- [formatDigest](functions/formatDigest.md) +- [formatType](functions/formatType.md) +- [isValidTransactionDigest](functions/isValidTransactionDigest.md) +- [isValidIotaAddress](functions/isValidIotaAddress.md) +- [isValidIotaObjectId](functions/isValidIotaObjectId.md) +- [parseStructTag](functions/parseStructTag.md) +- [normalizeStructTag](functions/normalizeStructTag.md) +- [normalizeIotaAddress](functions/normalizeIotaAddress.md) +- [normalizeIotaObjectId](functions/normalizeIotaObjectId.md) diff --git a/docs/content/ts-sdk/api/utils/variables/IOTA_ADDRESS_LENGTH.md b/docs/content/ts-sdk/api/utils/variables/IOTA_ADDRESS_LENGTH.md new file mode 100644 index 00000000000..1fb9e5b63a4 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/variables/IOTA_ADDRESS_LENGTH.md @@ -0,0 +1,3 @@ +# Variable: IOTA\_ADDRESS\_LENGTH + +> `const` **IOTA\_ADDRESS\_LENGTH**: `32` = `32` diff --git a/docs/content/ts-sdk/api/utils/variables/IOTA_CLOCK_OBJECT_ID.md b/docs/content/ts-sdk/api/utils/variables/IOTA_CLOCK_OBJECT_ID.md new file mode 100644 index 00000000000..fd283f0e8e5 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/variables/IOTA_CLOCK_OBJECT_ID.md @@ -0,0 +1,3 @@ +# Variable: IOTA\_CLOCK\_OBJECT\_ID + +> `const` **IOTA\_CLOCK\_OBJECT\_ID**: `string` diff --git a/docs/content/ts-sdk/api/utils/variables/IOTA_DECIMALS.md b/docs/content/ts-sdk/api/utils/variables/IOTA_DECIMALS.md new file mode 100644 index 00000000000..f1df665dedc --- /dev/null +++ b/docs/content/ts-sdk/api/utils/variables/IOTA_DECIMALS.md @@ -0,0 +1,3 @@ +# Variable: IOTA\_DECIMALS + +> `const` **IOTA\_DECIMALS**: `9` = `9` diff --git a/docs/content/ts-sdk/api/utils/variables/IOTA_FRAMEWORK_ADDRESS.md b/docs/content/ts-sdk/api/utils/variables/IOTA_FRAMEWORK_ADDRESS.md new file mode 100644 index 00000000000..b890559b3dc --- /dev/null +++ b/docs/content/ts-sdk/api/utils/variables/IOTA_FRAMEWORK_ADDRESS.md @@ -0,0 +1,3 @@ +# Variable: IOTA\_FRAMEWORK\_ADDRESS + +> `const` **IOTA\_FRAMEWORK\_ADDRESS**: `"0x2"` = `'0x2'` diff --git a/docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_ADDRESS.md b/docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_ADDRESS.md new file mode 100644 index 00000000000..7e37bcfa041 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_ADDRESS.md @@ -0,0 +1,3 @@ +# Variable: IOTA\_SYSTEM\_ADDRESS + +> `const` **IOTA\_SYSTEM\_ADDRESS**: `"0x3"` = `'0x3'` diff --git a/docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_MODULE_NAME.md b/docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_MODULE_NAME.md new file mode 100644 index 00000000000..ca2c521163a --- /dev/null +++ b/docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_MODULE_NAME.md @@ -0,0 +1,3 @@ +# Variable: IOTA\_SYSTEM\_MODULE\_NAME + +> `const` **IOTA\_SYSTEM\_MODULE\_NAME**: `"iota_system"` = `'iota_system'` diff --git a/docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_STATE_OBJECT_ID.md b/docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_STATE_OBJECT_ID.md new file mode 100644 index 00000000000..d76f5c32308 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/variables/IOTA_SYSTEM_STATE_OBJECT_ID.md @@ -0,0 +1,3 @@ +# Variable: IOTA\_SYSTEM\_STATE\_OBJECT\_ID + +> `const` **IOTA\_SYSTEM\_STATE\_OBJECT\_ID**: `string` diff --git a/docs/content/ts-sdk/api/utils/variables/IOTA_TYPE_ARG.md b/docs/content/ts-sdk/api/utils/variables/IOTA_TYPE_ARG.md new file mode 100644 index 00000000000..90c769bb7a7 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/variables/IOTA_TYPE_ARG.md @@ -0,0 +1,3 @@ +# Variable: IOTA\_TYPE\_ARG + +> `const` **IOTA\_TYPE\_ARG**: `"0x2::iota::IOTA"` diff --git a/docs/content/ts-sdk/api/utils/variables/MOVE_STDLIB_ADDRESS.md b/docs/content/ts-sdk/api/utils/variables/MOVE_STDLIB_ADDRESS.md new file mode 100644 index 00000000000..ae4d58a71c1 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/variables/MOVE_STDLIB_ADDRESS.md @@ -0,0 +1,3 @@ +# Variable: MOVE\_STDLIB\_ADDRESS + +> `const` **MOVE\_STDLIB\_ADDRESS**: `"0x1"` = `'0x1'` diff --git a/docs/content/ts-sdk/api/utils/variables/NANOS_PER_IOTA.md b/docs/content/ts-sdk/api/utils/variables/NANOS_PER_IOTA.md new file mode 100644 index 00000000000..19cedc83a26 --- /dev/null +++ b/docs/content/ts-sdk/api/utils/variables/NANOS_PER_IOTA.md @@ -0,0 +1,3 @@ +# Variable: NANOS\_PER\_IOTA + +> `const` **NANOS\_PER\_IOTA**: `bigint` diff --git a/docs/content/ts-sdk/api/verify/functions/publicKeyFromIotaBytes.md b/docs/content/ts-sdk/api/verify/functions/publicKeyFromIotaBytes.md new file mode 100644 index 00000000000..03bd0e8353c --- /dev/null +++ b/docs/content/ts-sdk/api/verify/functions/publicKeyFromIotaBytes.md @@ -0,0 +1,11 @@ +# Function: publicKeyFromIotaBytes() + +> **publicKeyFromIotaBytes**(`publicKey`): [`PublicKey`](../../cryptography/classes/PublicKey.md) + +## Parameters + +• **publicKey**: `string` \| `Uint8Array` + +## Returns + +[`PublicKey`](../../cryptography/classes/PublicKey.md) diff --git a/docs/content/ts-sdk/api/verify/functions/publicKeyFromRawBytes.md b/docs/content/ts-sdk/api/verify/functions/publicKeyFromRawBytes.md new file mode 100644 index 00000000000..1653d84f622 --- /dev/null +++ b/docs/content/ts-sdk/api/verify/functions/publicKeyFromRawBytes.md @@ -0,0 +1,13 @@ +# Function: publicKeyFromRawBytes() + +> **publicKeyFromRawBytes**(`signatureScheme`, `bytes`): [`PublicKey`](../../cryptography/classes/PublicKey.md) + +## Parameters + +• **signatureScheme**: [`SignatureScheme`](../../cryptography/type-aliases/SignatureScheme.md) + +• **bytes**: `Uint8Array` + +## Returns + +[`PublicKey`](../../cryptography/classes/PublicKey.md) diff --git a/docs/content/ts-sdk/api/verify/functions/verifyPersonalMessageSignature.md b/docs/content/ts-sdk/api/verify/functions/verifyPersonalMessageSignature.md new file mode 100644 index 00000000000..f5ffbb44e69 --- /dev/null +++ b/docs/content/ts-sdk/api/verify/functions/verifyPersonalMessageSignature.md @@ -0,0 +1,13 @@ +# Function: verifyPersonalMessageSignature() + +> **verifyPersonalMessageSignature**(`message`, `signature`): `Promise`\<[`PublicKey`](../../cryptography/classes/PublicKey.md)\> + +## Parameters + +• **message**: `Uint8Array` + +• **signature**: `string` + +## Returns + +`Promise`\<[`PublicKey`](../../cryptography/classes/PublicKey.md)\> diff --git a/docs/content/ts-sdk/api/verify/functions/verifySignature.md b/docs/content/ts-sdk/api/verify/functions/verifySignature.md new file mode 100644 index 00000000000..6b15319df4d --- /dev/null +++ b/docs/content/ts-sdk/api/verify/functions/verifySignature.md @@ -0,0 +1,13 @@ +# Function: verifySignature() + +> **verifySignature**(`bytes`, `signature`): `Promise`\<[`PublicKey`](../../cryptography/classes/PublicKey.md)\> + +## Parameters + +• **bytes**: `Uint8Array` + +• **signature**: `string` + +## Returns + +`Promise`\<[`PublicKey`](../../cryptography/classes/PublicKey.md)\> diff --git a/docs/content/ts-sdk/api/verify/functions/verifyTransactionSignature.md b/docs/content/ts-sdk/api/verify/functions/verifyTransactionSignature.md new file mode 100644 index 00000000000..2f4ce54b83c --- /dev/null +++ b/docs/content/ts-sdk/api/verify/functions/verifyTransactionSignature.md @@ -0,0 +1,13 @@ +# Function: verifyTransactionSignature() + +> **verifyTransactionSignature**(`transaction`, `signature`): `Promise`\<[`PublicKey`](../../cryptography/classes/PublicKey.md)\> + +## Parameters + +• **transaction**: `Uint8Array` + +• **signature**: `string` + +## Returns + +`Promise`\<[`PublicKey`](../../cryptography/classes/PublicKey.md)\> diff --git a/docs/content/ts-sdk/api/verify/index.md b/docs/content/ts-sdk/api/verify/index.md new file mode 100644 index 00000000000..b1b20ba8ef8 --- /dev/null +++ b/docs/content/ts-sdk/api/verify/index.md @@ -0,0 +1,11 @@ +# verify + +## Index + +### Functions + +- [verifySignature](functions/verifySignature.md) +- [verifyPersonalMessageSignature](functions/verifyPersonalMessageSignature.md) +- [verifyTransactionSignature](functions/verifyTransactionSignature.md) +- [publicKeyFromRawBytes](functions/publicKeyFromRawBytes.md) +- [publicKeyFromIotaBytes](functions/publicKeyFromIotaBytes.md) diff --git a/docs/content/references/ts-sdk/bcs.mdx b/docs/content/ts-sdk/bcs.mdx similarity index 100% rename from docs/content/references/ts-sdk/bcs.mdx rename to docs/content/ts-sdk/bcs.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/create-dapp.mdx b/docs/content/ts-sdk/dapp-kit/create-dapp.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/create-dapp.mdx rename to docs/content/ts-sdk/dapp-kit/create-dapp.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/index.mdx b/docs/content/ts-sdk/dapp-kit/index.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/index.mdx rename to docs/content/ts-sdk/dapp-kit/index.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/iota-client-provider.mdx b/docs/content/ts-sdk/dapp-kit/iota-client-provider.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/iota-client-provider.mdx rename to docs/content/ts-sdk/dapp-kit/iota-client-provider.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/rpc-hooks.mdx b/docs/content/ts-sdk/dapp-kit/rpc-hooks.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/rpc-hooks.mdx rename to docs/content/ts-sdk/dapp-kit/rpc-hooks.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/themes.mdx b/docs/content/ts-sdk/dapp-kit/themes.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/themes.mdx rename to docs/content/ts-sdk/dapp-kit/themes.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-components/ConnectButton.mdx b/docs/content/ts-sdk/dapp-kit/wallet-components/ConnectButton.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-components/ConnectButton.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-components/ConnectButton.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-components/ConnectModal.mdx b/docs/content/ts-sdk/dapp-kit/wallet-components/ConnectModal.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-components/ConnectModal.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-components/ConnectModal.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useAccounts.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useAccounts.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useAccounts.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useAccounts.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useConnectWallet.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useConnectWallet.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useConnectWallet.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useConnectWallet.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useSignTransaction.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useSignTransaction.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useSignTransaction.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useSignTransaction.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useWallets.mdx b/docs/content/ts-sdk/dapp-kit/wallet-hooks/useWallets.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-hooks/useWallets.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-hooks/useWallets.mdx diff --git a/docs/content/references/ts-sdk/dapp-kit/wallet-provider.mdx b/docs/content/ts-sdk/dapp-kit/wallet-provider.mdx similarity index 100% rename from docs/content/references/ts-sdk/dapp-kit/wallet-provider.mdx rename to docs/content/ts-sdk/dapp-kit/wallet-provider.mdx diff --git a/docs/content/references/ts-sdk/kiosk/advanced-examples.mdx b/docs/content/ts-sdk/kiosk/advanced-examples.mdx similarity index 100% rename from docs/content/references/ts-sdk/kiosk/advanced-examples.mdx rename to docs/content/ts-sdk/kiosk/advanced-examples.mdx diff --git a/docs/content/references/ts-sdk/kiosk/index.mdx b/docs/content/ts-sdk/kiosk/index.mdx similarity index 100% rename from docs/content/references/ts-sdk/kiosk/index.mdx rename to docs/content/ts-sdk/kiosk/index.mdx diff --git a/docs/content/references/ts-sdk/kiosk/kiosk-client/introduction.mdx b/docs/content/ts-sdk/kiosk/kiosk-client/introduction.mdx similarity index 100% rename from docs/content/references/ts-sdk/kiosk/kiosk-client/introduction.mdx rename to docs/content/ts-sdk/kiosk/kiosk-client/introduction.mdx diff --git a/docs/content/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples.mdx b/docs/content/ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples.mdx similarity index 100% rename from docs/content/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples.mdx rename to docs/content/ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples.mdx diff --git a/docs/content/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction.mdx b/docs/content/ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction.mdx similarity index 100% rename from docs/content/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction.mdx rename to docs/content/ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction.mdx diff --git a/docs/content/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing.mdx b/docs/content/ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing.mdx similarity index 100% rename from docs/content/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing.mdx rename to docs/content/ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing.mdx diff --git a/docs/content/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing.mdx b/docs/content/ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing.mdx similarity index 100% rename from docs/content/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing.mdx rename to docs/content/ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing.mdx diff --git a/docs/content/references/ts-sdk/kiosk/kiosk-client/querying.mdx b/docs/content/ts-sdk/kiosk/kiosk-client/querying.mdx similarity index 100% rename from docs/content/references/ts-sdk/kiosk/kiosk-client/querying.mdx rename to docs/content/ts-sdk/kiosk/kiosk-client/querying.mdx diff --git a/docs/content/references/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction.mdx b/docs/content/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction.mdx similarity index 100% rename from docs/content/references/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction.mdx rename to docs/content/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction.mdx diff --git a/docs/content/references/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager.mdx b/docs/content/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager.mdx similarity index 100% rename from docs/content/references/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager.mdx rename to docs/content/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager.mdx diff --git a/docs/content/references/ts-sdk/typescript/bcs.mdx b/docs/content/ts-sdk/typescript/bcs.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/bcs.mdx rename to docs/content/ts-sdk/typescript/bcs.mdx diff --git a/docs/content/references/ts-sdk/typescript/cryptography/keypairs.mdx b/docs/content/ts-sdk/typescript/cryptography/keypairs.mdx similarity index 98% rename from docs/content/references/ts-sdk/typescript/cryptography/keypairs.mdx rename to docs/content/ts-sdk/typescript/cryptography/keypairs.mdx index 03ef7636b9e..5a2d1af1bea 100644 --- a/docs/content/references/ts-sdk/typescript/cryptography/keypairs.mdx +++ b/docs/content/ts-sdk/typescript/cryptography/keypairs.mdx @@ -12,7 +12,7 @@ The IOTA TypeScript SDK supports three signing schemes: | ECDSA Secp256r1 | `Secp256r1Keypair` | `@iota/iota-sdk/keypairs/secp256r1` | For information on these schemes, see the -[Signatures](../../../../developer/cryptography/transaction-auth/signatures.mdx) topic. +[Signatures](../../../developer/cryptography/transaction-auth/signatures.mdx) topic. To use, import the key pair class your project uses from the `@iota/iota-sdk/keypairs` folder. For example, to use the Ed25519 scheme, import the `Ed25519Keypair` class from diff --git a/docs/content/references/ts-sdk/typescript/cryptography/multisig.mdx b/docs/content/ts-sdk/typescript/cryptography/multisig.mdx similarity index 98% rename from docs/content/references/ts-sdk/typescript/cryptography/multisig.mdx rename to docs/content/ts-sdk/typescript/cryptography/multisig.mdx index 06b7aa889a3..738827a77fc 100644 --- a/docs/content/references/ts-sdk/typescript/cryptography/multisig.mdx +++ b/docs/content/ts-sdk/typescript/cryptography/multisig.mdx @@ -1,7 +1,7 @@ # Multi-Signature Transactions The IOTA TypeScript SDK provides a `MultiSigPublicKey` class to support -[Multi-Signature](../../../../developer/cryptography/transaction-auth/multisig.mdx) (MultiSig) +[Multi-Signature](../../../developer/cryptography/transaction-auth/multisig.mdx) (MultiSig) transaction and personal message signing. This class implements the same interface as the `PublicKey` classes that [Keypairs](./keypairs.mdx) uses diff --git a/docs/content/references/ts-sdk/typescript/executors.mdx b/docs/content/ts-sdk/typescript/executors.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/executors.mdx rename to docs/content/ts-sdk/typescript/executors.mdx diff --git a/docs/content/references/ts-sdk/typescript/faucet.mdx b/docs/content/ts-sdk/typescript/faucet.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/faucet.mdx rename to docs/content/ts-sdk/typescript/faucet.mdx diff --git a/docs/content/references/ts-sdk/typescript/graphql.mdx b/docs/content/ts-sdk/typescript/graphql.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/graphql.mdx rename to docs/content/ts-sdk/typescript/graphql.mdx diff --git a/docs/content/references/ts-sdk/typescript/hello-iota.mdx b/docs/content/ts-sdk/typescript/hello-iota.mdx similarity index 95% rename from docs/content/references/ts-sdk/typescript/hello-iota.mdx rename to docs/content/ts-sdk/typescript/hello-iota.mdx index 686abee55a7..942eb463727 100644 --- a/docs/content/references/ts-sdk/typescript/hello-iota.mdx +++ b/docs/content/ts-sdk/typescript/hello-iota.mdx @@ -10,7 +10,7 @@ projects. ## Before you begin You need an address on a IOTA development network (Devnet, Testnet, local). If you don't already have -an address, use the [IOTA Client CLI](../../../references/cli/client.mdx) or the +an address, use the [IOTA Client CLI](../../references/cli/client.mdx) or the IOTA Wallet browser extension to create one. You also need [Node.js](https://nodejs.org/en/download/current) and a package manager like @@ -105,5 +105,5 @@ the faucet. You can check the total IOTA for your address using the IOTA Wallet -You can also use the [IOTA Client CLI](../../cli/client.mdx) to perform client +You can also use the [IOTA Client CLI](../../references/cli/client.mdx) to perform client calls on a IOTA network. \ No newline at end of file diff --git a/docs/content/references/ts-sdk/typescript/index.mdx b/docs/content/ts-sdk/typescript/index.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/index.mdx rename to docs/content/ts-sdk/typescript/index.mdx diff --git a/docs/content/references/ts-sdk/typescript/install.mdx b/docs/content/ts-sdk/typescript/install.mdx similarity index 94% rename from docs/content/references/ts-sdk/typescript/install.mdx rename to docs/content/ts-sdk/typescript/install.mdx index c041f440d80..c18412c0d5e 100644 --- a/docs/content/references/ts-sdk/typescript/install.mdx +++ b/docs/content/ts-sdk/typescript/install.mdx @@ -16,7 +16,7 @@ npm i @iota/iota-sdk Projects developing against one of the on-chain IOTA networks (Devnet, Testnet, Mainnet) should use the base SDK published in the NPM registry (previous section) because the code aligns with the relevant JSON-RPC. If your developing against a -[local network](../../../developer/getting-started/local-network.mdx) built from the +[local network](../../developer/getting-started/local-network.mdx) built from the `main` branch of the IOTA monorepo, however, you should use the `experimental`-tagged SDK package as it contains the latest features (or a local build detailed in the section that follows). diff --git a/docs/content/references/ts-sdk/typescript/iota-client.mdx b/docs/content/ts-sdk/typescript/iota-client.mdx similarity index 98% rename from docs/content/references/ts-sdk/typescript/iota-client.mdx rename to docs/content/ts-sdk/typescript/iota-client.mdx index 1a4210cdc33..cd89941eeed 100644 --- a/docs/content/references/ts-sdk/typescript/iota-client.mdx +++ b/docs/content/ts-sdk/typescript/iota-client.mdx @@ -36,7 +36,7 @@ during development. In a production application, however, you should use the For local development, you can run `cargo run --bin iota start --with-faucet --force-regenesis` to spin up a local network with a local validator, a Full node, and a faucet server. Refer to -[the Local Network guide](../../../developer/getting-started/local-network.mdx) for +[the Local Network guide](../../developer/getting-started/local-network.mdx) for more information. ## Manually calling unsupported RPC methods @@ -55,7 +55,7 @@ const committeeInfo = await client.call('iotax_getCommitteeInfo', []); ``` For a full list of available RPC methods, see the -[RPC documentation](../../iota-api). +[RPC documentation](../../references/iota-api). ## Subscribing to events with IotaClient diff --git a/docs/content/references/ts-sdk/typescript/owned-object-pool/custom-split-strategy.mdx b/docs/content/ts-sdk/typescript/owned-object-pool/custom-split-strategy.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/owned-object-pool/custom-split-strategy.mdx rename to docs/content/ts-sdk/typescript/owned-object-pool/custom-split-strategy.mdx diff --git a/docs/content/references/ts-sdk/typescript/owned-object-pool/examples.mdx b/docs/content/ts-sdk/typescript/owned-object-pool/examples.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/owned-object-pool/examples.mdx rename to docs/content/ts-sdk/typescript/owned-object-pool/examples.mdx diff --git a/docs/content/references/ts-sdk/typescript/owned-object-pool/index.mdx b/docs/content/ts-sdk/typescript/owned-object-pool/index.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/owned-object-pool/index.mdx rename to docs/content/ts-sdk/typescript/owned-object-pool/index.mdx diff --git a/docs/content/references/ts-sdk/typescript/owned-object-pool/local-development.mdx b/docs/content/ts-sdk/typescript/owned-object-pool/local-development.mdx similarity index 98% rename from docs/content/references/ts-sdk/typescript/owned-object-pool/local-development.mdx rename to docs/content/ts-sdk/typescript/owned-object-pool/local-development.mdx index aec12c0308d..d263c3e3654 100644 --- a/docs/content/references/ts-sdk/typescript/owned-object-pool/local-development.mdx +++ b/docs/content/ts-sdk/typescript/owned-object-pool/local-development.mdx @@ -43,7 +43,7 @@ iota client switch --env testnet && iota client envs Also, make sure that your admin account (the account `iota client active-address` identifies) owns enough IOTA. You can get IOTA for a test network from the -[IOTA faucet](../../../../developer/getting-started/get-coins.mdx). +[IOTA faucet](../../../developer/getting-started/get-coins.mdx). Next, run the setup script: diff --git a/docs/content/references/ts-sdk/typescript/owned-object-pool/overview.mdx b/docs/content/ts-sdk/typescript/owned-object-pool/overview.mdx similarity index 96% rename from docs/content/references/ts-sdk/typescript/owned-object-pool/overview.mdx rename to docs/content/ts-sdk/typescript/owned-object-pool/overview.mdx index 0978437e67b..463bca18a77 100644 --- a/docs/content/references/ts-sdk/typescript/owned-object-pool/overview.mdx +++ b/docs/content/ts-sdk/typescript/owned-object-pool/overview.mdx @@ -14,7 +14,7 @@ benefit of the lower latency those objects provide. On top of that, they are imp completely avoid because the transaction's gas coin is an owned object. Finally, the situation is exacerbated by -[coin-merging](../../../../developer/iota-101/transactions/ptb/optimizing-gas-with-coin-merging.mdx) and the IOTA TypeScript SDK's +[coin-merging](../../../developer/iota-101/transactions/ptb/optimizing-gas-with-coin-merging.mdx) and the IOTA TypeScript SDK's default coin selection logic, which uses all the `0x2::coin::Coin<0x2::iota::IOTA>` objects owned by an address for every transaction's gas payment. These defaults make sending transactions from your wallet straightforward (doing so automatically cleans up coin dust), but means that developers @@ -63,7 +63,7 @@ Before you can run this example, you need to already have at least one coin of t `0x2::coin::Coin<0x2::iota::IOTA>` in your wallet for each transaction that you need to execute in parallel (in our case 10 coins). Each `Coin` should have enough balance to execute each transaction. If you need IOTA for a test network, you can -[use a faucet](../../../../developer/getting-started/get-coins.mdx) to mint some. +[use a faucet](../../../developer/getting-started/get-coins.mdx) to mint some. ```ts import { IotaClient } from '@iota/iota-sdk/client'; diff --git a/docs/content/references/ts-sdk/typescript/plugins.mdx b/docs/content/ts-sdk/typescript/plugins.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/plugins.mdx rename to docs/content/ts-sdk/typescript/plugins.mdx diff --git a/docs/content/references/ts-sdk/typescript/transaction-building/basics.mdx b/docs/content/ts-sdk/typescript/transaction-building/basics.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/transaction-building/basics.mdx rename to docs/content/ts-sdk/typescript/transaction-building/basics.mdx diff --git a/docs/content/references/ts-sdk/typescript/transaction-building/gas.mdx b/docs/content/ts-sdk/typescript/transaction-building/gas.mdx similarity index 95% rename from docs/content/references/ts-sdk/typescript/transaction-building/gas.mdx rename to docs/content/ts-sdk/typescript/transaction-building/gas.mdx index 5c3cb85d198..bd3d450045b 100644 --- a/docs/content/references/ts-sdk/typescript/transaction-building/gas.mdx +++ b/docs/content/ts-sdk/typescript/transaction-building/gas.mdx @@ -4,7 +4,7 @@ With Programmable Transactions, you can use the gas payment coin to construct co balance using `splitCoin`. This is useful for IOTA payments, and avoids the need for up-front coin selection. You can use `tx.gas` to access the gas coin in a transaction, and it is valid as input for any arguments, as long as it is used -[by-reference](../../../../developer/iota-101/transactions/ptb/simulating-refs.mdx. Practically speaking, +[by-reference](../../../developer/iota-101/transactions/ptb/simulating-references.mdx). Practically speaking, this means you can also add to the gas coin with `mergeCoins` and borrow it for Move functions with `moveCall`. diff --git a/docs/content/references/ts-sdk/typescript/transaction-building/intents.mdx b/docs/content/ts-sdk/typescript/transaction-building/intents.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/transaction-building/intents.mdx rename to docs/content/ts-sdk/typescript/transaction-building/intents.mdx diff --git a/docs/content/references/ts-sdk/typescript/transaction-building/offline.mdx b/docs/content/ts-sdk/typescript/transaction-building/offline.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/transaction-building/offline.mdx rename to docs/content/ts-sdk/typescript/transaction-building/offline.mdx diff --git a/docs/content/references/ts-sdk/typescript/transaction-building/sponsored-transactions.mdx b/docs/content/ts-sdk/typescript/transaction-building/sponsored-transactions.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/transaction-building/sponsored-transactions.mdx rename to docs/content/ts-sdk/typescript/transaction-building/sponsored-transactions.mdx diff --git a/docs/content/references/ts-sdk/typescript/utils.mdx b/docs/content/ts-sdk/typescript/utils.mdx similarity index 100% rename from docs/content/references/ts-sdk/typescript/utils.mdx rename to docs/content/ts-sdk/typescript/utils.mdx diff --git a/docs/site/docusaurus.config.js b/docs/site/docusaurus.config.js index 3edac2ca385..59ecd0745e1 100644 --- a/docs/site/docusaurus.config.js +++ b/docs/site/docusaurus.config.js @@ -96,7 +96,7 @@ const config = { "../../sdk/typescript/src/verify" ], plugin: ["typedoc-plugin-markdown"], - out: "../../docs/content/references/ts-sdk/api/", + out: "../../docs/content/ts-sdk/api/", githubPages: false, readme: "none", hideGenerator: true, @@ -243,7 +243,8 @@ const config = { }, { label: "TS SDK", - to: "references/ts-sdk/typescript/", + to: "ts-sdk/typescript", + activeBaseRegex: "^/ts-sdk/.*" }, { label: "Node Operators", diff --git a/examples/tic-tac-toe/ui/README.md b/examples/tic-tac-toe/ui/README.md index cad40e908a2..e6bb47f0d24 100644 --- a/examples/tic-tac-toe/ui/README.md +++ b/examples/tic-tac-toe/ui/README.md @@ -22,7 +22,7 @@ Client dApp using the following tools: - [Vite](https://vitejs.dev/) for build tooling - [Radix UI](https://www.radix-ui.com/) for pre-built UI components - [ESLint](https://eslint.org/) -- [`@iota/dapp-kit`](https://docs.iota.org/references/ts-sdk/dapp-kit) for connecting to +- [`@iota/dapp-kit`](https://docs.iota.org/ts-sdk/dapp-kit) for connecting to wallets and loading data - [pnpm](https://pnpm.io/) for package management diff --git a/scripts/slipstream/config_slipstream.json b/scripts/slipstream/config_slipstream.json index 97ea0270f2c..4fbd5836c2f 100644 --- a/scripts/slipstream/config_slipstream.json +++ b/scripts/slipstream/config_slipstream.json @@ -203,15 +203,15 @@ }, { "regex": "sdk\\.[Mm]ysten[Ll]abs\\.com\/typescript", - "replacement": "wiki.iota.org/references/ts-sdk/typescript" + "replacement": "wiki.iota.org/ts-sdk/typescript" }, { "regex": "sdk\\.[Mm]ysten[Ll]abs\\.com\/", - "replacement": "wiki.iota.org/references/ts-sdk/" + "replacement": "wiki.iota.org/ts-sdk/" }, { "regex": "sdk\\.[Mm]ysten[Ll]abs\\.com", - "replacement": "wiki.iota.org/references/ts-sdk/typescript" + "replacement": "wiki.iota.org/ts-sdk/typescript" }, { "regex": "[Mm]ysten[Ll]abs\\.com", diff --git a/sdk/create-dapp/README.md b/sdk/create-dapp/README.md index 43655d7126c..9353a0f8733 100644 --- a/sdk/create-dapp/README.md +++ b/sdk/create-dapp/README.md @@ -27,7 +27,7 @@ you including: - [Vite](https://vitejs.dev/) - [Radix UI](https://www.radix-ui.com/) - [ESLint](https://eslint.org/) -- [`@iota/dapp-kit`](https://docs.iota.org/references/ts-sdk/dapp-kit) +- [`@iota/dapp-kit`](https://docs.iota.org/ts-sdk/dapp-kit) These templates are still new, and would love to get feedback and suggestions for improvements or future templates. Please open an issue on GitHub if you have any feedback. diff --git a/sdk/create-dapp/package.json b/sdk/create-dapp/package.json index af275038111..59526fba3bc 100644 --- a/sdk/create-dapp/package.json +++ b/sdk/create-dapp/package.json @@ -2,7 +2,7 @@ "name": "@iota/create-dapp", "author": "IOTA Foundation ", "description": "A CLI for creating new IOTA dApps", - "homepage": "https://docs.iota.org/references/ts-sdk/typescript/", + "homepage": "https://docs.iota.org/ts-sdk/typescript/", "version": "0.2.1", "license": "Apache-2.0", "files": [ diff --git a/sdk/create-dapp/templates/react-client-dapp/README.md b/sdk/create-dapp/templates/react-client-dapp/README.md index 0ab6d299881..80e33ab70bc 100644 --- a/sdk/create-dapp/templates/react-client-dapp/README.md +++ b/sdk/create-dapp/templates/react-client-dapp/README.md @@ -8,7 +8,7 @@ Client dApp using the following tools: - [Vite](https://vitejs.dev/) for build tooling - [Radix UI](https://www.radix-ui.com/) for pre-built UI components - [ESLint](https://eslint.org/) -- [`@iota/dapp-kit`](https://docs.iota.org/references/ts-sdk/dapp-kit) for +- [`@iota/dapp-kit`](https://docs.iota.org/ts-sdk/dapp-kit) for connecting to wallets and loading data - [pnpm](https://pnpm.io/) for package management diff --git a/sdk/create-dapp/templates/react-e2e-counter/README.md b/sdk/create-dapp/templates/react-e2e-counter/README.md index 7e7f648f195..3750bd0ec74 100644 --- a/sdk/create-dapp/templates/react-e2e-counter/README.md +++ b/sdk/create-dapp/templates/react-e2e-counter/README.md @@ -8,7 +8,7 @@ Client dApp using the following tools: - [Vite](https://vitejs.dev/) for build tooling - [Radix UI](https://www.radix-ui.com/) for pre-built UI components - [ESLint](https://eslint.org/) for linting -- [`@iota/dapp-kit`](https://docs.iota.org/references/ts-sdk/dapp-kit) for +- [`@iota/dapp-kit`](https://docs.iota.org/ts-sdk/dapp-kit) for connecting to wallets and loading data - [pnpm](https://pnpm.io/) for package management diff --git a/sdk/dapp-kit/README.md b/sdk/dapp-kit/README.md index 8ee45dda9a2..08823b60180 100644 --- a/sdk/dapp-kit/README.md +++ b/sdk/dapp-kit/README.md @@ -4,7 +4,7 @@ The IOTA dApp Kit is a set of React components, hooks, and utilities that make i dApp for the IOTA ecosystem. It provides hooks and components for querying data from the IOTA blockchain, and connecting to IOTA wallets. -See https://docs.iota.org/references/ts-sdk/typescript for full documentation +See https://docs.iota.org/ts-sdk/typescript for full documentation ### Core Features @@ -68,7 +68,7 @@ dApp up and running. To use our provided UI components, you will need to import the dApp Kit's CSS stylesheet into your dApp as shown below. For more information regarding customization options, check out the respective documentation pages for the components and -[themes](https://docs.iota.org/references/ts-sdk/dapp-kit/themes). +[themes](https://docs.iota.org/ts-sdk/dapp-kit/themes). ```tsx import '@iota/dapp-kit/dist/index.css'; diff --git a/sdk/dapp-kit/package.json b/sdk/dapp-kit/package.json index 4060a691508..1b48b2af4a3 100644 --- a/sdk/dapp-kit/package.json +++ b/sdk/dapp-kit/package.json @@ -2,7 +2,7 @@ "name": "@iota/dapp-kit", "author": "IOTA Foundation ", "description": "A collection of React hooks and components for interacting with the IOTA blockchain and wallets.", - "homepage": "https://docs.iota.org/references/ts-sdk/dapp-kit/", + "homepage": "https://docs.iota.org/ts-sdk/dapp-kit/", "version": "0.3.1", "license": "Apache-2.0", "files": [ diff --git a/sdk/kiosk/README.md b/sdk/kiosk/README.md index 5c76569cb4c..952c793ed66 100644 --- a/sdk/kiosk/README.md +++ b/sdk/kiosk/README.md @@ -3,6 +3,6 @@ This Kiosk SDK library provides different utilities to interact/create/manage a [Kiosk](https://github.com/iotaledger/iota/tree/main/kiosk). -[You can read the documentation and see examples by clicking here.](https://docs.iota.org/references/ts-sdk/kiosk) +[You can read the documentation and see examples by clicking here.](https://docs.iota.org/ts-sdk/kiosk) -[If you are migrating from `0.6.x`, you can follow these instructions](https://docs.iota.org/references/ts-sdk/kiosk/from-v1) +[If you are migrating from `0.6.x`, you can follow these instructions](https://docs.iota.org/ts-sdk/kiosk/from-v1) diff --git a/sdk/typescript/README.md b/sdk/typescript/README.md index 619edbb58c2..09fc37b9e83 100644 --- a/sdk/typescript/README.md +++ b/sdk/typescript/README.md @@ -1,7 +1,7 @@ # Docs site For more complete docs, visit the -[IOTA TypeScript SDK docs](https://docs.iota.org/references/ts-sdk/typescript/) +[IOTA TypeScript SDK docs](https://docs.iota.org/ts-sdk/typescript/) # IOTA TypeScript SDK @@ -172,7 +172,7 @@ await requestIotaFromFaucetV0({ ## Writing APIs For a primer for building transactions, refer to -[this guide](https://docs.iota.org/references/ts-sdk/typescript/transaction-building/basics). +[this guide](https://docs.iota.org/ts-sdk/typescript/transaction-building/basics). ### Transfer Object diff --git a/sdk/typescript/package.json b/sdk/typescript/package.json index 2285a952c73..6eac2e20773 100644 --- a/sdk/typescript/package.json +++ b/sdk/typescript/package.json @@ -2,7 +2,7 @@ "name": "@iota/iota-sdk", "author": "IOTA Foundation ", "description": "IOTA TypeScript API", - "homepage": "https://docs.iota.org/references/ts-sdk/typescript/", + "homepage": "https://docs.iota.org/ts-sdk/typescript/", "version": "0.3.1", "license": "Apache-2.0", "sideEffects": false, From d7f38b3f6a42a211d07ceefde023e52a0785d173 Mon Sep 17 00:00:00 2001 From: Vivek Jain Date: Wed, 20 Nov 2024 16:17:07 +0530 Subject: [PATCH 2/6] Fix formatting --- .../content/ts-sdk/api/bcs/classes/BcsType.md | 22 ++-- .../api/bcs/classes/TypeTagSerializer.md | 4 +- .../api/bcs/interfaces/BcsTypeOptions.md | 2 +- docs/content/ts-sdk/api/bcs/variables/bcs.md | 17 ++- .../ts-sdk/api/client/classes/IotaClient.md | 104 +++++++++--------- .../api/client/classes/IotaHTTPStatusError.md | 14 +-- .../api/client/classes/IotaHTTPTransport.md | 4 +- .../client/classes/IotaHTTPTransportError.md | 10 +- .../ts-sdk/api/client/classes/JsonRpcError.md | 14 +-- .../ts-sdk/api/client/enumerations/Network.md | 8 +- .../api/client/interfaces/AddressMetrics.md | 10 +- .../ts-sdk/api/client/interfaces/Balance.md | 4 +- .../api/client/interfaces/BalanceChange.md | 4 +- .../api/client/interfaces/Checkpoint.md | 20 ++-- .../ts-sdk/api/client/interfaces/Claim.md | 2 +- .../api/client/interfaces/CoinMetadata.md | 10 +- .../api/client/interfaces/CoinStruct.md | 10 +- .../api/client/interfaces/CommitteeInfo.md | 2 +- .../api/client/interfaces/DelegatedStake.md | 4 +- .../interfaces/DelegatedTimelockedStake.md | 4 +- .../api/client/interfaces/DevInspectArgs.md | 8 +- .../client/interfaces/DevInspectResults.md | 10 +- .../DevInspectTransactionBlockParams.md | 8 +- .../interfaces/DisplayFieldsResponse.md | 2 +- .../DryRunTransactionBlockResponse.md | 8 +- .../api/client/interfaces/DynamicFieldInfo.md | 12 +- .../api/client/interfaces/DynamicFieldName.md | 2 +- .../api/client/interfaces/EndOfEpochData.md | 6 +- .../api/client/interfaces/EndOfEpochInfo.md | 22 ++-- .../ts-sdk/api/client/interfaces/EpochInfo.md | 12 +- .../api/client/interfaces/EpochMetrics.md | 8 +- .../ts-sdk/api/client/interfaces/EventId.md | 2 +- .../ExecuteTransactionBlockParams.md | 6 +- .../api/client/interfaces/GasCostSummary.md | 8 +- .../client/interfaces/GetAllCoinsParams.md | 4 +- .../api/client/interfaces/GetBalanceParams.md | 2 +- .../client/interfaces/GetCheckpointsParams.md | 4 +- .../api/client/interfaces/GetCoinsParams.md | 6 +- .../interfaces/GetDynamicFieldObjectParams.md | 2 +- .../interfaces/GetDynamicFieldsParams.md | 4 +- .../interfaces/GetEpochMetricsParams.md | 4 +- .../api/client/interfaces/GetEpochsParams.md | 4 +- .../GetMoveFunctionArgTypesParams.md | 4 +- .../GetNormalizedMoveFunctionParams.md | 4 +- .../GetNormalizedMoveModuleParams.md | 2 +- .../GetNormalizedMoveStructParams.md | 4 +- .../api/client/interfaces/GetObjectParams.md | 2 +- .../client/interfaces/GetPastObjectRequest.md | 2 +- .../interfaces/GetTransactionBlockParams.md | 2 +- .../api/client/interfaces/IotaActiveJwk.md | 4 +- .../api/client/interfaces/IotaChangeEpoch.md | 8 +- .../ts-sdk/api/client/interfaces/IotaEvent.md | 14 +-- .../client/interfaces/IotaExecutionResult.md | 2 +- .../api/client/interfaces/IotaGasData.md | 6 +- .../interfaces/IotaHTTPTransportOptions.md | 8 +- .../ts-sdk/api/client/interfaces/IotaJWK.md | 6 +- .../ts-sdk/api/client/interfaces/IotaJwkId.md | 2 +- .../api/client/interfaces/IotaMoveModuleId.md | 2 +- .../interfaces/IotaMoveNormalizedField.md | 2 +- .../interfaces/IotaMoveNormalizedFunction.md | 8 +- .../interfaces/IotaMoveNormalizedModule.md | 14 +-- .../interfaces/IotaMoveNormalizedStruct.md | 4 +- .../interfaces/IotaMoveStructTypeParameter.md | 2 +- .../api/client/interfaces/IotaObjectData.md | 18 +-- .../interfaces/IotaObjectDataOptions.md | 12 +- .../api/client/interfaces/IotaObjectRef.md | 4 +- .../client/interfaces/IotaObjectResponse.md | 2 +- .../interfaces/IotaObjectResponseQuery.md | 2 +- .../interfaces/IotaSystemStateSummary.md | 66 +++++------ .../client/interfaces/IotaTransactionBlock.md | 2 +- .../IotaTransactionBlockResponse.md | 22 ++-- .../IotaTransactionBlockResponseOptions.md | 12 +- .../IotaTransactionBlockResponseQuery.md | 2 +- .../api/client/interfaces/IotaTransport.md | 2 +- .../interfaces/IotaTransportRequestOptions.md | 2 +- .../IotaTransportSubscribeOptions.md | 6 +- .../client/interfaces/IotaValidatorSummary.md | 72 ++++++------ .../client/interfaces/KioskConfiguration.md | 6 +- .../interfaces/MoveCallIotaTransaction.md | 8 +- .../api/client/interfaces/MoveCallMetrics.md | 4 +- .../api/client/interfaces/MoveCallParams.md | 8 +- .../api/client/interfaces/MoveFunctionName.md | 4 +- .../api/client/interfaces/MoveVariant.md | 6 +- .../interfaces/MultiGetObjectsParams.md | 2 +- .../MultiGetTransactionBlocksParams.md | 2 +- .../ts-sdk/api/client/interfaces/MultiSig.md | 4 +- .../client/interfaces/MultiSigPublicKey.md | 2 +- .../client/interfaces/NetworkConfiguration.md | 12 +- .../api/client/interfaces/NetworkMetrics.md | 12 +- .../api/client/interfaces/OwnedObjectRef.md | 2 +- .../client/interfaces/PaginatedCheckpoints.md | 4 +- .../api/client/interfaces/PaginatedCoins.md | 4 +- .../interfaces/PaginatedDynamicFieldInfos.md | 4 +- .../client/interfaces/PaginatedEpochInfos.md | 4 +- .../interfaces/PaginatedEpochMetricss.md | 4 +- .../api/client/interfaces/PaginatedEvents.md | 4 +- .../interfaces/PaginatedObjectsResponse.md | 4 +- .../PaginatedTransactionResponse.md | 4 +- .../client/interfaces/PaginationArguments.md | 2 +- .../client/interfaces/PasskeyAuthenticator.md | 2 +- .../api/client/interfaces/ProtocolConfig.md | 12 +- .../client/interfaces/QueryEventsParams.md | 6 +- .../interfaces/TransactionBlockBytes.md | 4 +- ...ansactionBlockEffectsModifiedAtVersions.md | 2 +- .../client/interfaces/TransferObjectParams.md | 2 +- .../interfaces/TryGetPastObjectParams.md | 4 +- .../TryMultiGetPastObjectsParams.md | 2 +- .../api/client/interfaces/TypeOrigin.md | 4 +- .../UnsafeBatchTransactionParams.md | 8 +- .../interfaces/UnsafeMergeCoinsParams.md | 8 +- .../client/interfaces/UnsafeMoveCallParams.md | 16 +-- .../interfaces/UnsafePayAllIotaParams.md | 6 +- .../client/interfaces/UnsafePayIotaParams.md | 8 +- .../api/client/interfaces/UnsafePayParams.md | 10 +- .../client/interfaces/UnsafePublishParams.md | 8 +- .../interfaces/UnsafeRequestAddStakeParams.md | 10 +- .../UnsafeRequestAddTimelockedStakeParams.md | 8 +- .../UnsafeRequestWithdrawStakeParams.md | 6 +- ...afeRequestWithdrawTimelockedStakeParams.md | 6 +- .../interfaces/UnsafeSplitCoinEqualParams.md | 8 +- .../interfaces/UnsafeSplitCoinParams.md | 8 +- .../interfaces/UnsafeTransferIotaParams.md | 8 +- .../interfaces/UnsafeTransferObjectParams.md | 8 +- .../api/client/interfaces/UpgradeInfo.md | 2 +- .../api/client/interfaces/ValidatorApy.md | 2 +- .../api/client/interfaces/ValidatorsApy.md | 2 +- .../client/interfaces/ZkLoginAuthenticator.md | 4 +- .../api/client/interfaces/ZkLoginInputs.md | 6 +- .../api/client/interfaces/ZkLoginProof.md | 4 +- .../api/client/type-aliases/HttpHeaders.md | 2 +- .../api/cryptography/classes/Keypair.md | 14 +-- .../api/cryptography/classes/PublicKey.md | 24 ++-- .../ts-sdk/api/cryptography/classes/Signer.md | 12 +- .../interfaces/SignatureWithBytes.md | 2 +- .../cryptography/type-aliases/IntentScope.md | 2 +- .../type-aliases/SignatureFlag.md | 2 +- .../faucet/classes/FaucetRateLimitError.md | 10 +- .../api/graphql/classes/IotaGraphQLClient.md | 10 +- .../classes/IotaGraphQLRequestError.md | 10 +- .../interfaces/IotaGraphQLClientOptions.md | 8 +- .../type-aliases/GraphQLQueryOptions.md | 2 +- .../ed25519/classes/Ed25519Keypair.md | 22 ++-- .../ed25519/classes/Ed25519PublicKey.md | 24 ++-- .../ed25519/interfaces/Ed25519KeypairData.md | 2 +- .../secp256k1/classes/Secp256k1Keypair.md | 22 ++-- .../secp256k1/classes/Secp256k1PublicKey.md | 24 ++-- .../ts-sdk/api/keypairs/secp256k1/index.md | 6 +- .../interfaces/Secp256k1KeypairData.md | 2 +- .../api/multisig/classes/MultiSigPublicKey.md | 34 +++--- .../api/multisig/classes/MultiSigSigner.md | 14 +-- .../api/transactions/classes/AsyncCache.md | 38 +++---- .../api/transactions/classes/ObjectCache.md | 20 ++-- .../classes/ParallelTransactionExecutor.md | 4 +- .../classes/SerialTransactionExecutor.md | 8 +- .../api/transactions/classes/Transaction.md | 77 ++++++------- .../classes/TransactionDataBuilder.md | 32 +++--- .../enumerations/UpgradePolicy.md | 4 +- .../interfaces/BuildTransactionOptions.md | 2 +- .../ParallelTransactionExecutorOptions.md | 20 ++-- .../interfaces/SerializeTransactionOptions.md | 4 +- .../api/transactions/type-aliases/Argument.md | 2 +- .../api/transactions/type-aliases/CallArg.md | 2 +- .../api/transactions/type-aliases/GasData.md | 2 +- .../transactions/type-aliases/ObjectRef.md | 2 +- .../type-aliases/OpenMoveTypeSignature.md | 2 +- .../SerializedTransactionDataV1.md | 2 +- .../SerializedTransactionDataV2.md | 2 +- .../type-aliases/TransactionArgument.md | 2 +- .../type-aliases/TransactionData.md | 2 +- .../type-aliases/TransactionObjectArgument.md | 2 +- .../api/transactions/variables/Arguments.md | 8 +- .../utils/functions/normalizeIotaAddress.md | 1 + 172 files changed, 758 insertions(+), 757 deletions(-) diff --git a/docs/content/ts-sdk/api/bcs/classes/BcsType.md b/docs/content/ts-sdk/api/bcs/classes/BcsType.md index b903231826f..bb8b6b72213 100644 --- a/docs/content/ts-sdk/api/bcs/classes/BcsType.md +++ b/docs/content/ts-sdk/api/bcs/classes/BcsType.md @@ -26,19 +26,19 @@ > **$inferType**: `T` -*** +--- ### $inferInput > **$inferInput**: `Input` -*** +--- ### name > **name**: `string` -*** +--- ### read() @@ -52,7 +52,7 @@ `T` -*** +--- ### serializedSize() @@ -68,7 +68,7 @@ `null` \| `number` -*** +--- ### validate() @@ -98,7 +98,7 @@ `void` -*** +--- ### serialize() @@ -114,7 +114,7 @@ `SerializedBcs`\<`T`, `Input`\> -*** +--- ### parse() @@ -128,7 +128,7 @@ `T` -*** +--- ### fromHex() @@ -142,7 +142,7 @@ `T` -*** +--- ### fromBase58() @@ -156,7 +156,7 @@ `T` -*** +--- ### fromBase64() @@ -170,7 +170,7 @@ `T` -*** +--- ### transform() diff --git a/docs/content/ts-sdk/api/bcs/classes/TypeTagSerializer.md b/docs/content/ts-sdk/api/bcs/classes/TypeTagSerializer.md index 9f866c4a1ab..b29c5013521 100644 --- a/docs/content/ts-sdk/api/bcs/classes/TypeTagSerializer.md +++ b/docs/content/ts-sdk/api/bcs/classes/TypeTagSerializer.md @@ -26,7 +26,7 @@ [`TypeTag`](../type-aliases/TypeTag.md) -*** +--- ### parseStructTypeArgs() @@ -42,7 +42,7 @@ [`TypeTag`](../type-aliases/TypeTag.md)[] -*** +--- ### tagToString() diff --git a/docs/content/ts-sdk/api/bcs/interfaces/BcsTypeOptions.md b/docs/content/ts-sdk/api/bcs/interfaces/BcsTypeOptions.md index 337599b597a..7b1a0011ae1 100644 --- a/docs/content/ts-sdk/api/bcs/interfaces/BcsTypeOptions.md +++ b/docs/content/ts-sdk/api/bcs/interfaces/BcsTypeOptions.md @@ -12,7 +12,7 @@ > `optional` **name**: `string` -*** +--- ### validate()? diff --git a/docs/content/ts-sdk/api/bcs/variables/bcs.md b/docs/content/ts-sdk/api/bcs/variables/bcs.md index d2398fdf9ac..1e9047ef16d 100644 --- a/docs/content/ts-sdk/api/bcs/variables/bcs.md +++ b/docs/content/ts-sdk/api/bcs/variables/bcs.md @@ -145,7 +145,6 @@ Creates a BcsType that can be used to read and write unsigned LEB encoded intege #### Example ```ts - ``` ### bytes() @@ -154,7 +153,7 @@ Creates a BcsType representing a fixed length byte array #### Type Parameters -• **T** *extends* `number` +• **T** _extends_ `number` #### Parameters @@ -176,7 +175,7 @@ bcs.bytes(3).serialize(new Uint8Array([1, 2, 3])).toBytes() // Uint8Array [1, 2, ### string() -Creates a BcsType that can ser/de string values. Strings will be UTF-8 encoded +Creates a BcsType that can ser/de string values. Strings will be UTF-8 encoded #### Parameters @@ -285,7 +284,7 @@ Creates a BcsType representing a tuple of a given set of types #### Type Parameters -• **Types** *extends* readonly [`BcsType`](../classes/BcsType.md)\<`any`, `any`\>[] +• **Types** _extends_ readonly [`BcsType`](../classes/BcsType.md)\<`any`, `any`\>[] #### Parameters @@ -312,7 +311,7 @@ Creates a BcsType representing a struct of a given set of fields #### Type Parameters -• **T** *extends* `Record`\<`string`, [`BcsType`](../classes/BcsType.md)\<`any`, `any`\>\> +• **T** _extends_ `Record`\<`string`, [`BcsType`](../classes/BcsType.md)\<`any`, `any`\>\> #### Parameters @@ -346,7 +345,7 @@ Creates a BcsType representing an enum of a given set of options #### Type Parameters -• **T** *extends* `Record`\<`string`, `null` \| [`BcsType`](../classes/BcsType.md)\<`any`, `any`\>\> +• **T** _extends_ `Record`\<`string`, `null` \| [`BcsType`](../classes/BcsType.md)\<`any`, `any`\>\> #### Parameters @@ -419,7 +418,7 @@ Creates a BcsType that wraps another BcsType which is lazily evaluated. This is #### Type Parameters -• **T** *extends* [`BcsType`](../classes/BcsType.md)\<`any`, `any`\> +• **T** _extends_ [`BcsType`](../classes/BcsType.md)\<`any`, `any`\> #### Parameters @@ -577,7 +576,7 @@ A callback that returns the BcsType #### Type Parameters -• **T** *extends* [`BcsType`](../classes/BcsType.md)\<`any`, `any`\> +• **T** _extends_ [`BcsType`](../classes/BcsType.md)\<`any`, `any`\> #### Parameters @@ -639,7 +638,7 @@ A callback that returns the BcsType ##### value -> **value**: `T` *extends* [`BcsType`](../classes/BcsType.md)\<`U`, `any`\> ? `U` : `never` = `T` +> **value**: `T` _extends_ [`BcsType`](../classes/BcsType.md)\<`U`, `any`\> ? `U` : `never` = `T` ### IntentScope diff --git a/docs/content/ts-sdk/api/client/classes/IotaClient.md b/docs/content/ts-sdk/api/client/classes/IotaClient.md index 425805fb701..caae17a3f8c 100644 --- a/docs/content/ts-sdk/api/client/classes/IotaClient.md +++ b/docs/content/ts-sdk/api/client/classes/IotaClient.md @@ -34,7 +34,7 @@ configuration options for the API Client `Promise`\<`undefined` \| `string`\> -*** +--- ### getCoins() @@ -50,7 +50,7 @@ Get all Coin<`coin_type`> objects owned by an address. `Promise`\<[`PaginatedCoins`](../interfaces/PaginatedCoins.md)\> -*** +--- ### getAllCoins() @@ -66,7 +66,7 @@ Get all Coin objects owned by an address. `Promise`\<[`PaginatedCoins`](../interfaces/PaginatedCoins.md)\> -*** +--- ### getBalance() @@ -82,7 +82,7 @@ Get the total coin balance for one coin type, owned by the address owner. `Promise`\<[`CoinBalance`](../type-aliases/CoinBalance.md)\> -*** +--- ### getAllBalances() @@ -98,7 +98,7 @@ Get the total coin balance for all coin types, owned by the address owner. `Promise`\<[`CoinBalance`](../type-aliases/CoinBalance.md)[]\> -*** +--- ### getCoinMetadata() @@ -114,7 +114,7 @@ Fetch CoinMetadata for a given coin type `Promise`\<`null` \| [`CoinMetadata`](../interfaces/CoinMetadata.md)\> -*** +--- ### getTotalSupply() @@ -130,7 +130,7 @@ Fetch total supply for a coin `Promise`\<[`CoinSupply`](../interfaces/CoinSupply.md)\> -*** +--- ### call() @@ -154,7 +154,7 @@ the method to be invoked `Promise`\<`T`\> -*** +--- ### getMoveFunctionArgTypes() @@ -170,7 +170,7 @@ Get Move function argument types like read, write and full access `Promise`\<[`IotaMoveFunctionArgType`](../type-aliases/IotaMoveFunctionArgType.md)[]\> -*** +--- ### getNormalizedMoveModulesByPackage() @@ -187,7 +187,7 @@ structured representations of Move modules `Promise`\<[`IotaMoveNormalizedModules`](../type-aliases/IotaMoveNormalizedModules.md)\> -*** +--- ### getNormalizedMoveModule() @@ -203,7 +203,7 @@ Get a structured representation of Move module `Promise`\<[`IotaMoveNormalizedModule`](../interfaces/IotaMoveNormalizedModule.md)\> -*** +--- ### getNormalizedMoveFunction() @@ -219,7 +219,7 @@ Get a structured representation of Move function `Promise`\<[`IotaMoveNormalizedFunction`](../interfaces/IotaMoveNormalizedFunction.md)\> -*** +--- ### getNormalizedMoveStruct() @@ -235,7 +235,7 @@ Get a structured representation of Move struct `Promise`\<[`IotaMoveNormalizedStruct`](../interfaces/IotaMoveNormalizedStruct.md)\> -*** +--- ### getOwnedObjects() @@ -251,7 +251,7 @@ Get all objects owned by an address `Promise`\<[`PaginatedObjectsResponse`](../interfaces/PaginatedObjectsResponse.md)\> -*** +--- ### getObject() @@ -267,7 +267,7 @@ Get details about an object `Promise`\<[`IotaObjectResponse`](../interfaces/IotaObjectResponse.md)\> -*** +--- ### tryGetPastObject() @@ -281,7 +281,7 @@ Get details about an object `Promise`\<[`ObjectRead`](../type-aliases/ObjectRead.md)\> -*** +--- ### multiGetObjects() @@ -297,7 +297,7 @@ Batch get details about a list of objects. If any of the object ids are duplicat `Promise`\<[`IotaObjectResponse`](../interfaces/IotaObjectResponse.md)[]\> -*** +--- ### queryTransactionBlocks() @@ -313,7 +313,7 @@ Get transaction blocks for a given query criteria `Promise`\<[`PaginatedTransactionResponse`](../interfaces/PaginatedTransactionResponse.md)\> -*** +--- ### getTransactionBlock() @@ -327,7 +327,7 @@ Get transaction blocks for a given query criteria `Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> -*** +--- ### multiGetTransactionBlocks() @@ -341,7 +341,7 @@ Get transaction blocks for a given query criteria `Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)[]\> -*** +--- ### executeTransactionBlock() @@ -355,7 +355,7 @@ Get transaction blocks for a given query criteria `Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> -*** +--- ### signAndExecuteTransaction() @@ -369,7 +369,7 @@ Get transaction blocks for a given query criteria `Promise`\<[`IotaTransactionBlockResponse`](../interfaces/IotaTransactionBlockResponse.md)\> -*** +--- ### getTotalTransactionBlocks() @@ -381,7 +381,7 @@ Get total number of transactions `Promise`\<`bigint`\> -*** +--- ### getReferenceGasPrice() @@ -393,7 +393,7 @@ Getting the reference gas price for the network `Promise`\<`bigint`\> -*** +--- ### getStakes() @@ -409,7 +409,7 @@ Return the delegated stakes for an address `Promise`\<[`DelegatedStake`](../interfaces/DelegatedStake.md)[]\> -*** +--- ### getTimelockedStakes() @@ -425,7 +425,7 @@ Return the timelocked delegated stakes for an address `Promise`\<[`DelegatedTimelockedStake`](../interfaces/DelegatedTimelockedStake.md)[]\> -*** +--- ### getStakesByIds() @@ -441,7 +441,7 @@ Return the delegated stakes queried by id. `Promise`\<[`DelegatedStake`](../interfaces/DelegatedStake.md)[]\> -*** +--- ### getTimelockedStakesByIds() @@ -457,7 +457,7 @@ Return the timelocked delegated stakes queried by id. `Promise`\<[`DelegatedTimelockedStake`](../interfaces/DelegatedTimelockedStake.md)[]\> -*** +--- ### getLatestIotaSystemState() @@ -469,7 +469,7 @@ Return the latest system state content. `Promise`\<[`IotaSystemStateSummary`](../interfaces/IotaSystemStateSummary.md)\> -*** +--- ### queryEvents() @@ -485,7 +485,7 @@ Get events for a given query criteria `Promise`\<[`PaginatedEvents`](../interfaces/PaginatedEvents.md)\> -*** +--- ### ~~subscribeEvent()~~ @@ -503,7 +503,7 @@ Subscribe to get notifications whenever an event matching the filter occurs #### Deprecated -*** +--- ### ~~subscribeTransaction()~~ @@ -519,7 +519,7 @@ Subscribe to get notifications whenever an event matching the filter occurs #### Deprecated -*** +--- ### devInspectTransactionBlock() @@ -537,7 +537,7 @@ provided, including both the transaction effects and any return values. `Promise`\<[`DevInspectResults`](../interfaces/DevInspectResults.md)\> -*** +--- ### dryRunTransactionBlock() @@ -553,7 +553,7 @@ Dry run a transaction block and return the result. `Promise`\<[`DryRunTransactionBlockResponse`](../interfaces/DryRunTransactionBlockResponse.md)\> -*** +--- ### getDynamicFields() @@ -569,7 +569,7 @@ Return the list of dynamic field objects owned by an object `Promise`\<[`DynamicFieldPage`](../type-aliases/DynamicFieldPage.md)\> -*** +--- ### getDynamicFieldObject() @@ -585,7 +585,7 @@ Return the dynamic field object information for a specified object `Promise`\<[`IotaObjectResponse`](../interfaces/IotaObjectResponse.md)\> -*** +--- ### getLatestCheckpointSequenceNumber() @@ -597,7 +597,7 @@ Get the sequence number of the latest checkpoint that has been executed `Promise`\<`string`\> -*** +--- ### getCheckpoint() @@ -613,7 +613,7 @@ Returns information about a given checkpoint `Promise`\<[`Checkpoint`](../interfaces/Checkpoint.md)\> -*** +--- ### getCheckpoints() @@ -629,7 +629,7 @@ Returns historical checkpoints paginated `Promise`\<[`CheckpointPage`](../type-aliases/CheckpointPage.md)\> -*** +--- ### getCommitteeInfo() @@ -645,7 +645,7 @@ Return the committee information for the asked epoch `Promise`\<[`CommitteeInfo`](../interfaces/CommitteeInfo.md)\> -*** +--- ### getNetworkMetrics() @@ -655,7 +655,7 @@ Return the committee information for the asked epoch `Promise`\<[`NetworkMetrics`](../interfaces/NetworkMetrics.md)\> -*** +--- ### getAddressMetrics() @@ -665,7 +665,7 @@ Return the committee information for the asked epoch `Promise`\<[`AddressMetrics`](../interfaces/AddressMetrics.md)\> -*** +--- ### getEpochMetrics() @@ -679,7 +679,7 @@ Return the committee information for the asked epoch `Promise`\<[`EpochMetricsPage`](../type-aliases/EpochMetricsPage.md)\> -*** +--- ### getAllEpochAddressMetrics() @@ -695,7 +695,7 @@ Return the committee information for the asked epoch `Promise`\<[`AllEpochsAddressMetrics`](../type-aliases/AllEpochsAddressMetrics.md)\> -*** +--- ### getCheckpointAddressMetrics() @@ -711,7 +711,7 @@ Return the committee information for the asked epoch `Promise`\<[`AddressMetrics`](../interfaces/AddressMetrics.md)\> -*** +--- ### getEpochs() @@ -727,7 +727,7 @@ Return the committee information for the asked epoch `Promise`\<[`EpochPage`](../type-aliases/EpochPage.md)\> -*** +--- ### getMoveCallMetrics() @@ -739,7 +739,7 @@ Returns list of top move calls by usage `Promise`\<[`MoveCallMetrics`](../interfaces/MoveCallMetrics.md)\> -*** +--- ### getCurrentEpoch() @@ -751,7 +751,7 @@ Return the committee information for the asked epoch `Promise`\<[`EpochInfo`](../interfaces/EpochInfo.md)\> -*** +--- ### getTotalTransactions() @@ -761,7 +761,7 @@ Return the committee information for the asked epoch `Promise`\<`string`\> -*** +--- ### getValidatorsApy() @@ -773,7 +773,7 @@ Return the Validators APYs `Promise`\<[`ValidatorsApy`](../interfaces/ValidatorsApy.md)\> -*** +--- ### getChainIdentifier() @@ -783,7 +783,7 @@ Return the Validators APYs `Promise`\<`string`\> -*** +--- ### getProtocolConfig() @@ -797,7 +797,7 @@ Return the Validators APYs `Promise`\<[`ProtocolConfig`](../interfaces/ProtocolConfig.md)\> -*** +--- ### waitForTransaction() diff --git a/docs/content/ts-sdk/api/client/classes/IotaHTTPStatusError.md b/docs/content/ts-sdk/api/client/classes/IotaHTTPStatusError.md index cafd4241fad..a8bff3d074e 100644 --- a/docs/content/ts-sdk/api/client/classes/IotaHTTPStatusError.md +++ b/docs/content/ts-sdk/api/client/classes/IotaHTTPStatusError.md @@ -52,7 +52,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`prepareStackTrace`](IotaHTTPTransportError.md#preparestacktrace) -*** +--- ### stackTraceLimit @@ -62,7 +62,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`stackTraceLimit`](IotaHTTPTransportError.md#stacktracelimit) -*** +--- ### cause? @@ -72,7 +72,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`cause`](IotaHTTPTransportError.md#cause) -*** +--- ### name @@ -82,7 +82,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`name`](IotaHTTPTransportError.md#name) -*** +--- ### message @@ -92,7 +92,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`message`](IotaHTTPTransportError.md#message) -*** +--- ### stack? @@ -102,13 +102,13 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`stack`](IotaHTTPTransportError.md#stack) -*** +--- ### status > **status**: `number` -*** +--- ### statusText diff --git a/docs/content/ts-sdk/api/client/classes/IotaHTTPTransport.md b/docs/content/ts-sdk/api/client/classes/IotaHTTPTransport.md index b24f426aa9c..cf9231e1c32 100644 --- a/docs/content/ts-sdk/api/client/classes/IotaHTTPTransport.md +++ b/docs/content/ts-sdk/api/client/classes/IotaHTTPTransport.md @@ -34,7 +34,7 @@ `Promise`\<`Response`\> -*** +--- ### request() @@ -56,7 +56,7 @@ [`IotaTransport`](../interfaces/IotaTransport.md).[`request`](../interfaces/IotaTransport.md#request) -*** +--- ### subscribe() diff --git a/docs/content/ts-sdk/api/client/classes/IotaHTTPTransportError.md b/docs/content/ts-sdk/api/client/classes/IotaHTTPTransportError.md index 8b43ff4780c..8b7b5540534 100644 --- a/docs/content/ts-sdk/api/client/classes/IotaHTTPTransportError.md +++ b/docs/content/ts-sdk/api/client/classes/IotaHTTPTransportError.md @@ -71,7 +71,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.prepareStackTrace` -*** +--- ### stackTraceLimit @@ -81,7 +81,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.stackTraceLimit` -*** +--- ### cause? @@ -91,7 +91,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.cause` -*** +--- ### name @@ -101,7 +101,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.name` -*** +--- ### message @@ -111,7 +111,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.message` -*** +--- ### stack? diff --git a/docs/content/ts-sdk/api/client/classes/JsonRpcError.md b/docs/content/ts-sdk/api/client/classes/JsonRpcError.md index 3a428516f87..c8f021e7b97 100644 --- a/docs/content/ts-sdk/api/client/classes/JsonRpcError.md +++ b/docs/content/ts-sdk/api/client/classes/JsonRpcError.md @@ -50,7 +50,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`prepareStackTrace`](IotaHTTPTransportError.md#preparestacktrace) -*** +--- ### stackTraceLimit @@ -60,7 +60,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`stackTraceLimit`](IotaHTTPTransportError.md#stacktracelimit) -*** +--- ### cause? @@ -70,7 +70,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`cause`](IotaHTTPTransportError.md#cause) -*** +--- ### name @@ -80,7 +80,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`name`](IotaHTTPTransportError.md#name) -*** +--- ### message @@ -90,7 +90,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`message`](IotaHTTPTransportError.md#message) -*** +--- ### stack? @@ -100,13 +100,13 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces [`IotaHTTPTransportError`](IotaHTTPTransportError.md).[`stack`](IotaHTTPTransportError.md#stack) -*** +--- ### code > **code**: `number` -*** +--- ### type diff --git a/docs/content/ts-sdk/api/client/enumerations/Network.md b/docs/content/ts-sdk/api/client/enumerations/Network.md index 73af6bc7352..325fa73d1df 100644 --- a/docs/content/ts-sdk/api/client/enumerations/Network.md +++ b/docs/content/ts-sdk/api/client/enumerations/Network.md @@ -6,25 +6,25 @@ > **Mainnet**: `"mainnet"` -*** +--- ### Devnet > **Devnet**: `"devnet"` -*** +--- ### Testnet > **Testnet**: `"testnet"` -*** +--- ### Localnet > **Localnet**: `"localnet"` -*** +--- ### Custom diff --git a/docs/content/ts-sdk/api/client/interfaces/AddressMetrics.md b/docs/content/ts-sdk/api/client/interfaces/AddressMetrics.md index eaf441dde46..418331ccc9d 100644 --- a/docs/content/ts-sdk/api/client/interfaces/AddressMetrics.md +++ b/docs/content/ts-sdk/api/client/interfaces/AddressMetrics.md @@ -10,7 +10,7 @@ Provides metrics about the addresses. The checkpoint sequence number at which the metrics were computed. -*** +--- ### cumulativeActiveAddresses @@ -18,7 +18,7 @@ The checkpoint sequence number at which the metrics were computed. The count of sender addresses. -*** +--- ### cumulativeAddresses @@ -26,7 +26,7 @@ The count of sender addresses. The count of sender and recipient addresses. -*** +--- ### dailyActiveAddresses @@ -34,7 +34,7 @@ The count of sender and recipient addresses. The count of daily unique sender addresses. -*** +--- ### epoch @@ -42,7 +42,7 @@ The count of daily unique sender addresses. The epoch to which the checkpoint is assigned. -*** +--- ### timestampMs diff --git a/docs/content/ts-sdk/api/client/interfaces/Balance.md b/docs/content/ts-sdk/api/client/interfaces/Balance.md index 86a49b28b00..e88bdc327c5 100644 --- a/docs/content/ts-sdk/api/client/interfaces/Balance.md +++ b/docs/content/ts-sdk/api/client/interfaces/Balance.md @@ -6,13 +6,13 @@ > **coinObjectCount**: `number` -*** +--- ### coinType > **coinType**: `string` -*** +--- ### totalBalance diff --git a/docs/content/ts-sdk/api/client/interfaces/BalanceChange.md b/docs/content/ts-sdk/api/client/interfaces/BalanceChange.md index 96f747eb43d..880b39f2e99 100644 --- a/docs/content/ts-sdk/api/client/interfaces/BalanceChange.md +++ b/docs/content/ts-sdk/api/client/interfaces/BalanceChange.md @@ -9,13 +9,13 @@ The amount indicate the balance value changes, negative amount means spending coin value and positive means receiving coin value. -*** +--- ### coinType > **coinType**: `string` -*** +--- ### owner diff --git a/docs/content/ts-sdk/api/client/interfaces/Checkpoint.md b/docs/content/ts-sdk/api/client/interfaces/Checkpoint.md index 8a594b36e1a..977f8292cf9 100644 --- a/docs/content/ts-sdk/api/client/interfaces/Checkpoint.md +++ b/docs/content/ts-sdk/api/client/interfaces/Checkpoint.md @@ -8,7 +8,7 @@ Commitments to checkpoint state -*** +--- ### digest @@ -16,7 +16,7 @@ Commitments to checkpoint state Checkpoint digest -*** +--- ### endOfEpochData? @@ -24,7 +24,7 @@ Checkpoint digest Present only on the final checkpoint of the epoch. -*** +--- ### epoch @@ -32,7 +32,7 @@ Present only on the final checkpoint of the epoch. Checkpoint's epoch ID -*** +--- ### epochRollingGasCostSummary @@ -41,7 +41,7 @@ Checkpoint's epoch ID The running total gas costs of all transactions included in the current epoch so far until this checkpoint. -*** +--- ### networkTotalTransactions @@ -49,7 +49,7 @@ checkpoint. Total number of transactions committed since genesis, including those in this checkpoint. -*** +--- ### previousDigest? @@ -57,7 +57,7 @@ Total number of transactions committed since genesis, including those in this ch Digest of the previous checkpoint -*** +--- ### sequenceNumber @@ -65,7 +65,7 @@ Digest of the previous checkpoint Checkpoint sequence number -*** +--- ### timestampMs @@ -75,7 +75,7 @@ Timestamp of the checkpoint - number of milliseconds from the Unix epoch Checkpo monotonic, but not strongly monotonic - subsequent checkpoints can have same timestamp if they originate from the same underlining consensus commit -*** +--- ### transactions @@ -83,7 +83,7 @@ originate from the same underlining consensus commit Transaction digests -*** +--- ### validatorSignature diff --git a/docs/content/ts-sdk/api/client/interfaces/Claim.md b/docs/content/ts-sdk/api/client/interfaces/Claim.md index 34f8a314c71..810e376f9ba 100644 --- a/docs/content/ts-sdk/api/client/interfaces/Claim.md +++ b/docs/content/ts-sdk/api/client/interfaces/Claim.md @@ -8,7 +8,7 @@ A claim consists of value and index_mod_4. > **indexMod4**: `number` -*** +--- ### value diff --git a/docs/content/ts-sdk/api/client/interfaces/CoinMetadata.md b/docs/content/ts-sdk/api/client/interfaces/CoinMetadata.md index f0755590232..408e871dca0 100644 --- a/docs/content/ts-sdk/api/client/interfaces/CoinMetadata.md +++ b/docs/content/ts-sdk/api/client/interfaces/CoinMetadata.md @@ -8,7 +8,7 @@ Number of decimal places the coin uses. -*** +--- ### description @@ -16,7 +16,7 @@ Number of decimal places the coin uses. Description of the token -*** +--- ### iconUrl? @@ -24,7 +24,7 @@ Description of the token URL for the token logo -*** +--- ### id? @@ -32,7 +32,7 @@ URL for the token logo Object id for the CoinMetadata object -*** +--- ### name @@ -40,7 +40,7 @@ Object id for the CoinMetadata object Name for the token -*** +--- ### symbol diff --git a/docs/content/ts-sdk/api/client/interfaces/CoinStruct.md b/docs/content/ts-sdk/api/client/interfaces/CoinStruct.md index 00b33194bfd..9d772291688 100644 --- a/docs/content/ts-sdk/api/client/interfaces/CoinStruct.md +++ b/docs/content/ts-sdk/api/client/interfaces/CoinStruct.md @@ -6,31 +6,31 @@ > **balance**: `string` -*** +--- ### coinObjectId > **coinObjectId**: `string` -*** +--- ### coinType > **coinType**: `string` -*** +--- ### digest > **digest**: `string` -*** +--- ### previousTransaction > **previousTransaction**: `string` -*** +--- ### version diff --git a/docs/content/ts-sdk/api/client/interfaces/CommitteeInfo.md b/docs/content/ts-sdk/api/client/interfaces/CommitteeInfo.md index 07b2239bce0..55e5471a3ff 100644 --- a/docs/content/ts-sdk/api/client/interfaces/CommitteeInfo.md +++ b/docs/content/ts-sdk/api/client/interfaces/CommitteeInfo.md @@ -8,7 +8,7 @@ RPC representation of the [Committee] type. > **epoch**: `string` -*** +--- ### validators diff --git a/docs/content/ts-sdk/api/client/interfaces/DelegatedStake.md b/docs/content/ts-sdk/api/client/interfaces/DelegatedStake.md index b8ddcae369c..1e24986e560 100644 --- a/docs/content/ts-sdk/api/client/interfaces/DelegatedStake.md +++ b/docs/content/ts-sdk/api/client/interfaces/DelegatedStake.md @@ -6,7 +6,7 @@ > **stakes**: [`StakeObject`](../type-aliases/StakeObject.md)[] -*** +--- ### stakingPool @@ -14,7 +14,7 @@ Staking pool object id. -*** +--- ### validatorAddress diff --git a/docs/content/ts-sdk/api/client/interfaces/DelegatedTimelockedStake.md b/docs/content/ts-sdk/api/client/interfaces/DelegatedTimelockedStake.md index d4453df96b2..6c1ab4109b3 100644 --- a/docs/content/ts-sdk/api/client/interfaces/DelegatedTimelockedStake.md +++ b/docs/content/ts-sdk/api/client/interfaces/DelegatedTimelockedStake.md @@ -6,13 +6,13 @@ > **stakes**: [`TimelockedStake`](../type-aliases/TimelockedStake.md)[] -*** +--- ### stakingPool > **stakingPool**: `string` -*** +--- ### validatorAddress diff --git a/docs/content/ts-sdk/api/client/interfaces/DevInspectArgs.md b/docs/content/ts-sdk/api/client/interfaces/DevInspectArgs.md index 9faaf663dfc..2df1d1f8818 100644 --- a/docs/content/ts-sdk/api/client/interfaces/DevInspectArgs.md +++ b/docs/content/ts-sdk/api/client/interfaces/DevInspectArgs.md @@ -10,7 +10,7 @@ Additional arguments supplied to dev inspect beyond what is allowed in today's A The gas budget for the transaction. -*** +--- ### gasObjects? @@ -18,7 +18,7 @@ The gas budget for the transaction. The gas objects used to pay for the transaction. -*** +--- ### gasSponsor? @@ -26,7 +26,7 @@ The gas objects used to pay for the transaction. The sponsor of the gas for the transaction, might be different from the sender. -*** +--- ### showRawTxnDataAndEffects? @@ -34,7 +34,7 @@ The sponsor of the gas for the transaction, might be different from the sender. Whether to return the raw transaction data and effects. -*** +--- ### skipChecks? diff --git a/docs/content/ts-sdk/api/client/interfaces/DevInspectResults.md b/docs/content/ts-sdk/api/client/interfaces/DevInspectResults.md index 78efaec2172..cf9d07e4f8e 100644 --- a/docs/content/ts-sdk/api/client/interfaces/DevInspectResults.md +++ b/docs/content/ts-sdk/api/client/interfaces/DevInspectResults.md @@ -12,7 +12,7 @@ Summary of effects that likely would be generated if the transaction is actually that not all dev-inspect transactions are actually usable as transactions so it might not be possible actually generate these effects from a normal transaction. -*** +--- ### error? @@ -20,7 +20,7 @@ possible actually generate these effects from a normal transaction. Execution error from executing the transactions -*** +--- ### events @@ -28,7 +28,7 @@ Execution error from executing the transactions Events that likely would be generated if the transaction is actually run. -*** +--- ### rawEffects? @@ -36,7 +36,7 @@ Events that likely would be generated if the transaction is actually run. The raw effects of the transaction that was dev inspected. -*** +--- ### rawTxnData? @@ -44,7 +44,7 @@ The raw effects of the transaction that was dev inspected. The raw transaction data that was dev inspected. -*** +--- ### results? diff --git a/docs/content/ts-sdk/api/client/interfaces/DevInspectTransactionBlockParams.md b/docs/content/ts-sdk/api/client/interfaces/DevInspectTransactionBlockParams.md index 9d73cb118d3..a04a8dfbded 100644 --- a/docs/content/ts-sdk/api/client/interfaces/DevInspectTransactionBlockParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/DevInspectTransactionBlockParams.md @@ -10,7 +10,7 @@ return values. > **sender**: `string` -*** +--- ### transactionBlock @@ -18,7 +18,7 @@ return values. BCS encoded TransactionKind(as opposed to TransactionData, which include gasBudget and gasPrice) -*** +--- ### gasPrice? @@ -26,7 +26,7 @@ BCS encoded TransactionKind(as opposed to TransactionData, which include gasBudg Gas is not charged, but gas usage is still calculated. Default to use reference gas price -*** +--- ### epoch? @@ -34,7 +34,7 @@ Gas is not charged, but gas usage is still calculated. Default to use reference The epoch to perform the call. Will be set from the system state object if not provided -*** +--- ### additionalArgs? diff --git a/docs/content/ts-sdk/api/client/interfaces/DisplayFieldsResponse.md b/docs/content/ts-sdk/api/client/interfaces/DisplayFieldsResponse.md index d46762daeda..686bbac8613 100644 --- a/docs/content/ts-sdk/api/client/interfaces/DisplayFieldsResponse.md +++ b/docs/content/ts-sdk/api/client/interfaces/DisplayFieldsResponse.md @@ -6,7 +6,7 @@ > `optional` **data**: `null` \| `object` -*** +--- ### error? diff --git a/docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockResponse.md b/docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockResponse.md index cab4aad8523..96c17c1fc4b 100644 --- a/docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockResponse.md +++ b/docs/content/ts-sdk/api/client/interfaces/DryRunTransactionBlockResponse.md @@ -6,25 +6,25 @@ > **balanceChanges**: [`BalanceChange`](BalanceChange.md)[] -*** +--- ### effects > **effects**: [`TransactionEffects`](../type-aliases/TransactionEffects.md) -*** +--- ### events > **events**: [`IotaEvent`](IotaEvent.md)[] -*** +--- ### input > **input**: [`TransactionBlockData`](../type-aliases/TransactionBlockData.md) -*** +--- ### objectChanges diff --git a/docs/content/ts-sdk/api/client/interfaces/DynamicFieldInfo.md b/docs/content/ts-sdk/api/client/interfaces/DynamicFieldInfo.md index 1ad6abce1b2..55e71e3ea44 100644 --- a/docs/content/ts-sdk/api/client/interfaces/DynamicFieldInfo.md +++ b/docs/content/ts-sdk/api/client/interfaces/DynamicFieldInfo.md @@ -6,37 +6,37 @@ > **bcsName**: `string` -*** +--- ### digest > **digest**: `string` -*** +--- ### name > **name**: [`DynamicFieldName`](DynamicFieldName.md) -*** +--- ### objectId > **objectId**: `string` -*** +--- ### objectType > **objectType**: `string` -*** +--- ### type > **type**: [`DynamicFieldType`](../type-aliases/DynamicFieldType.md) -*** +--- ### version diff --git a/docs/content/ts-sdk/api/client/interfaces/DynamicFieldName.md b/docs/content/ts-sdk/api/client/interfaces/DynamicFieldName.md index 1493def656e..8367d690352 100644 --- a/docs/content/ts-sdk/api/client/interfaces/DynamicFieldName.md +++ b/docs/content/ts-sdk/api/client/interfaces/DynamicFieldName.md @@ -6,7 +6,7 @@ > **type**: `string` -*** +--- ### value diff --git a/docs/content/ts-sdk/api/client/interfaces/EndOfEpochData.md b/docs/content/ts-sdk/api/client/interfaces/EndOfEpochData.md index a41a90ba3a3..2e0db8ec574 100644 --- a/docs/content/ts-sdk/api/client/interfaces/EndOfEpochData.md +++ b/docs/content/ts-sdk/api/client/interfaces/EndOfEpochData.md @@ -8,7 +8,7 @@ Commitments to epoch specific state (e.g. live object set) -*** +--- ### epochSupplyChange @@ -16,7 +16,7 @@ Commitments to epoch specific state (e.g. live object set) The number of tokens that were minted (if positive) or burnt (if negative) in this epoch. -*** +--- ### nextEpochCommittee @@ -29,7 +29,7 @@ of transactions from genesis to the end of an epoch. The committee is stored as validator pub key and stake pairs. The vector should be sorted based on the Committee data structure. -*** +--- ### nextEpochProtocolVersion diff --git a/docs/content/ts-sdk/api/client/interfaces/EndOfEpochInfo.md b/docs/content/ts-sdk/api/client/interfaces/EndOfEpochInfo.md index 823fbd34bf6..8e92b650662 100644 --- a/docs/content/ts-sdk/api/client/interfaces/EndOfEpochInfo.md +++ b/docs/content/ts-sdk/api/client/interfaces/EndOfEpochInfo.md @@ -6,25 +6,25 @@ > **burntTokensAmount**: `string` -*** +--- ### epochEndTimestamp > **epochEndTimestamp**: `string` -*** +--- ### lastCheckpointId > **lastCheckpointId**: `string` -*** +--- ### mintedTokensAmount > **mintedTokensAmount**: `string` -*** +--- ### protocolVersion @@ -32,43 +32,43 @@ existing fields from `SystemEpochInfoEventV1` (without epoch) -*** +--- ### referenceGasPrice > **referenceGasPrice**: `string` -*** +--- ### storageCharge > **storageCharge**: `string` -*** +--- ### storageFundBalance > **storageFundBalance**: `string` -*** +--- ### storageRebate > **storageRebate**: `string` -*** +--- ### totalGasFees > **totalGasFees**: `string` -*** +--- ### totalStake > **totalStake**: `string` -*** +--- ### totalStakeRewardsDistributed diff --git a/docs/content/ts-sdk/api/client/interfaces/EpochInfo.md b/docs/content/ts-sdk/api/client/interfaces/EpochInfo.md index 6fed6645c0f..d71b6f05069 100644 --- a/docs/content/ts-sdk/api/client/interfaces/EpochInfo.md +++ b/docs/content/ts-sdk/api/client/interfaces/EpochInfo.md @@ -8,7 +8,7 @@ The end of epoch information. -*** +--- ### epoch @@ -16,7 +16,7 @@ The end of epoch information. Epoch number -*** +--- ### epochStartTimestamp @@ -24,7 +24,7 @@ Epoch number The timestamp when the epoch started. -*** +--- ### epochTotalTransactions @@ -32,7 +32,7 @@ The timestamp when the epoch started. Count of tx in epoch -*** +--- ### firstCheckpointId @@ -40,7 +40,7 @@ Count of tx in epoch First, last checkpoint sequence numbers -*** +--- ### referenceGasPrice? @@ -48,7 +48,7 @@ First, last checkpoint sequence numbers The reference gas price for the given epoch. -*** +--- ### validators diff --git a/docs/content/ts-sdk/api/client/interfaces/EpochMetrics.md b/docs/content/ts-sdk/api/client/interfaces/EpochMetrics.md index 54ff131ef67..0e2dd8c0058 100644 --- a/docs/content/ts-sdk/api/client/interfaces/EpochMetrics.md +++ b/docs/content/ts-sdk/api/client/interfaces/EpochMetrics.md @@ -10,7 +10,7 @@ A light-weight version of `EpochInfo` for faster loading The end of epoch information. -*** +--- ### epoch @@ -18,7 +18,7 @@ The end of epoch information. The current epoch ID. -*** +--- ### epochStartTimestamp @@ -26,7 +26,7 @@ The current epoch ID. The timestamp when the epoch started. -*** +--- ### epochTotalTransactions @@ -34,7 +34,7 @@ The timestamp when the epoch started. The total number of transactions in the epoch. -*** +--- ### firstCheckpointId diff --git a/docs/content/ts-sdk/api/client/interfaces/EventId.md b/docs/content/ts-sdk/api/client/interfaces/EventId.md index 2177f11e922..6b7f7ccebcc 100644 --- a/docs/content/ts-sdk/api/client/interfaces/EventId.md +++ b/docs/content/ts-sdk/api/client/interfaces/EventId.md @@ -9,7 +9,7 @@ local to this particular fullnode and will be different from other fullnode. > **eventSeq**: `string` -*** +--- ### txDigest diff --git a/docs/content/ts-sdk/api/client/interfaces/ExecuteTransactionBlockParams.md b/docs/content/ts-sdk/api/client/interfaces/ExecuteTransactionBlockParams.md index a4970d1b6c9..1cf7d422d44 100644 --- a/docs/content/ts-sdk/api/client/interfaces/ExecuteTransactionBlockParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/ExecuteTransactionBlockParams.md @@ -17,7 +17,7 @@ options.show_effects is true BCS serialized transaction data bytes without its type tag, as base-64 encoded string. -*** +--- ### signature @@ -26,7 +26,7 @@ BCS serialized transaction data bytes without its type tag, as base-64 encoded s A list of signatures (`flag || signature || pubkey` bytes, as base-64 encoded string). Signature is committed to the intent message of the transaction data, as base-64 encoded string. -*** +--- ### options? @@ -34,7 +34,7 @@ committed to the intent message of the transaction data, as base-64 encoded stri options for specifying the content to be returned -*** +--- ### ~~requestType?~~ diff --git a/docs/content/ts-sdk/api/client/interfaces/GasCostSummary.md b/docs/content/ts-sdk/api/client/interfaces/GasCostSummary.md index 2f32fd7a740..5f0e852e40c 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GasCostSummary.md +++ b/docs/content/ts-sdk/api/client/interfaces/GasCostSummary.md @@ -26,7 +26,7 @@ rate" such that: Cost of computation/execution -*** +--- ### computationCostBurned @@ -34,7 +34,7 @@ Cost of computation/execution The burned component of the computation/execution costs -*** +--- ### nonRefundableStorageFee @@ -42,7 +42,7 @@ The burned component of the computation/execution costs The fee for the rebate. The portion of the storage rebate kept by the system. -*** +--- ### storageCost @@ -50,7 +50,7 @@ The fee for the rebate. The portion of the storage rebate kept by the system. Storage cost, it's the sum of all storage cost for all objects created or mutated. -*** +--- ### storageRebate diff --git a/docs/content/ts-sdk/api/client/interfaces/GetAllCoinsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetAllCoinsParams.md index b32137f2fb2..c378282f13b 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetAllCoinsParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetAllCoinsParams.md @@ -10,7 +10,7 @@ Return all Coin objects owned by an address. the owner's Iota address -*** +--- ### cursor? @@ -18,7 +18,7 @@ the owner's Iota address optional paging cursor -*** +--- ### limit? diff --git a/docs/content/ts-sdk/api/client/interfaces/GetBalanceParams.md b/docs/content/ts-sdk/api/client/interfaces/GetBalanceParams.md index 0757181cbdd..89d78b0fbdb 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetBalanceParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetBalanceParams.md @@ -10,7 +10,7 @@ Return the total coin balance for one coin type, owned by the address owner. the owner's Iota address -*** +--- ### coinType? diff --git a/docs/content/ts-sdk/api/client/interfaces/GetCheckpointsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetCheckpointsParams.md index e955a304e6b..d9636260ff0 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetCheckpointsParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetCheckpointsParams.md @@ -11,7 +11,7 @@ Return paginated list of checkpoints An optional paging cursor. If provided, the query will start from the next item after the specified cursor. Default to start from the first item if not specified. -*** +--- ### limit? @@ -19,7 +19,7 @@ cursor. Default to start from the first item if not specified. Maximum item returned per page, default to [QUERY_MAX_RESULT_LIMIT_CHECKPOINTS] if not specified. -*** +--- ### descendingOrder diff --git a/docs/content/ts-sdk/api/client/interfaces/GetCoinsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetCoinsParams.md index a3b97245dd4..f5870cd1bd3 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetCoinsParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetCoinsParams.md @@ -10,7 +10,7 @@ Return all Coin<`coin_type`> objects owned by an address. the owner's Iota address -*** +--- ### coinType? @@ -19,7 +19,7 @@ the owner's Iota address optional type name for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC), default to 0x2::iota::IOTA if not specified. -*** +--- ### cursor? @@ -27,7 +27,7 @@ default to 0x2::iota::IOTA if not specified. optional paging cursor -*** +--- ### limit? diff --git a/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldObjectParams.md b/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldObjectParams.md index 0441554ead8..4f86b718daa 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldObjectParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldObjectParams.md @@ -10,7 +10,7 @@ Return the dynamic field object information for a specified object The ID of the queried parent object -*** +--- ### name diff --git a/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldsParams.md index 7cba2ad20b1..ffe4b64e5f7 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldsParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetDynamicFieldsParams.md @@ -10,7 +10,7 @@ Return the list of dynamic field objects owned by an object. The ID of the parent object -*** +--- ### cursor? @@ -19,7 +19,7 @@ The ID of the parent object An optional paging cursor. If provided, the query will start from the next item after the specified cursor. Default to start from the first item if not specified. -*** +--- ### limit? diff --git a/docs/content/ts-sdk/api/client/interfaces/GetEpochMetricsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetEpochMetricsParams.md index dfb279d3140..42c9c7ddeb7 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetEpochMetricsParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetEpochMetricsParams.md @@ -10,7 +10,7 @@ Return a list of epoch metrics, which is a subset of epoch info Optional paging cursor -*** +--- ### limit? @@ -18,7 +18,7 @@ Optional paging cursor Maximum number of items per page -*** +--- ### descendingOrder? diff --git a/docs/content/ts-sdk/api/client/interfaces/GetEpochsParams.md b/docs/content/ts-sdk/api/client/interfaces/GetEpochsParams.md index f9ff4a31f18..a71efe0d58d 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetEpochsParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetEpochsParams.md @@ -10,7 +10,7 @@ Return a list of epoch info Optional paging cursor -*** +--- ### limit? @@ -18,7 +18,7 @@ Optional paging cursor Maximum number of items per page -*** +--- ### descendingOrder? diff --git a/docs/content/ts-sdk/api/client/interfaces/GetMoveFunctionArgTypesParams.md b/docs/content/ts-sdk/api/client/interfaces/GetMoveFunctionArgTypesParams.md index 0289159c7ff..2cda001f228 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetMoveFunctionArgTypesParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetMoveFunctionArgTypesParams.md @@ -8,13 +8,13 @@ Return the argument types of a Move function, based on normalized Type. > **package**: `string` -*** +--- ### module > **module**: `string` -*** +--- ### function diff --git a/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveFunctionParams.md b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveFunctionParams.md index 4d24ec2e49f..148f75022ab 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveFunctionParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveFunctionParams.md @@ -8,13 +8,13 @@ Return a structured representation of Move function > **package**: `string` -*** +--- ### module > **module**: `string` -*** +--- ### function diff --git a/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModuleParams.md b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModuleParams.md index 1d3e76d4b77..67d95263a1f 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModuleParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveModuleParams.md @@ -8,7 +8,7 @@ Return a structured representation of Move module > **package**: `string` -*** +--- ### module diff --git a/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveStructParams.md b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveStructParams.md index b2e5da10b09..6e70879d963 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveStructParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetNormalizedMoveStructParams.md @@ -8,13 +8,13 @@ Return a structured representation of Move struct > **package**: `string` -*** +--- ### module > **module**: `string` -*** +--- ### struct diff --git a/docs/content/ts-sdk/api/client/interfaces/GetObjectParams.md b/docs/content/ts-sdk/api/client/interfaces/GetObjectParams.md index d6ba43dd70d..9425140b67d 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetObjectParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetObjectParams.md @@ -10,7 +10,7 @@ Return the object information for a specified object the ID of the queried object -*** +--- ### options? diff --git a/docs/content/ts-sdk/api/client/interfaces/GetPastObjectRequest.md b/docs/content/ts-sdk/api/client/interfaces/GetPastObjectRequest.md index e1850c270b1..b1027f6ede7 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetPastObjectRequest.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetPastObjectRequest.md @@ -8,7 +8,7 @@ the ID of the queried object -*** +--- ### version diff --git a/docs/content/ts-sdk/api/client/interfaces/GetTransactionBlockParams.md b/docs/content/ts-sdk/api/client/interfaces/GetTransactionBlockParams.md index fb612dfca60..46e07f5fee7 100644 --- a/docs/content/ts-sdk/api/client/interfaces/GetTransactionBlockParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/GetTransactionBlockParams.md @@ -10,7 +10,7 @@ Return the transaction response object. the digest of the queried transaction -*** +--- ### options? diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaActiveJwk.md b/docs/content/ts-sdk/api/client/interfaces/IotaActiveJwk.md index 5d44ec83e01..616901c4dd7 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaActiveJwk.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaActiveJwk.md @@ -6,13 +6,13 @@ > **epoch**: `string` -*** +--- ### jwk > **jwk**: [`IotaJWK`](IotaJWK.md) -*** +--- ### jwk\_id diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaChangeEpoch.md b/docs/content/ts-sdk/api/client/interfaces/IotaChangeEpoch.md index 8fa0b9ebdf5..9150be9478b 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaChangeEpoch.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaChangeEpoch.md @@ -6,25 +6,25 @@ > **computation\_charge**: `string` -*** +--- ### epoch > **epoch**: `string` -*** +--- ### epoch\_start\_timestamp\_ms > **epoch\_start\_timestamp\_ms**: `string` -*** +--- ### storage\_charge > **storage\_charge**: `string` -*** +--- ### storage\_rebate diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaEvent.md b/docs/content/ts-sdk/api/client/interfaces/IotaEvent.md index 08098cc5221..40a03ed7c99 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaEvent.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaEvent.md @@ -8,7 +8,7 @@ Base 58 encoded bcs bytes of the move event -*** +--- ### id @@ -18,7 +18,7 @@ Sequential event ID, ie (transaction seq number, event seq number). 1) Serves as for each fullnode 2) Also serves to sequence events for the purposes of pagination and querying. A higher id is an event seen later by that fullnode. This ID is the "cursor" for event querying. -*** +--- ### packageId @@ -26,7 +26,7 @@ higher id is an event seen later by that fullnode. This ID is the "cursor" for e Move package where this event was emitted. -*** +--- ### parsedJson @@ -34,7 +34,7 @@ Move package where this event was emitted. Parsed json value of the event -*** +--- ### sender @@ -42,7 +42,7 @@ Parsed json value of the event Sender's Iota address. -*** +--- ### timestampMs? @@ -50,7 +50,7 @@ Sender's Iota address. UTC timestamp in milliseconds since epoch (1/1/1970) -*** +--- ### transactionModule @@ -58,7 +58,7 @@ UTC timestamp in milliseconds since epoch (1/1/1970) Move module where this event was emitted. -*** +--- ### type diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaExecutionResult.md b/docs/content/ts-sdk/api/client/interfaces/IotaExecutionResult.md index 59690f2c949..ba33a7adf84 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaExecutionResult.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaExecutionResult.md @@ -8,7 +8,7 @@ The value of any arguments that were mutably borrowed. Non-mut borrowed values are not included -*** +--- ### returnValues? diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaGasData.md b/docs/content/ts-sdk/api/client/interfaces/IotaGasData.md index 11c96ce7342..b95801801e2 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaGasData.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaGasData.md @@ -6,19 +6,19 @@ > **budget**: `string` -*** +--- ### owner > **owner**: `string` -*** +--- ### payment > **payment**: [`IotaObjectRef`](IotaObjectRef.md)[] -*** +--- ### price diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaHTTPTransportOptions.md b/docs/content/ts-sdk/api/client/interfaces/IotaHTTPTransportOptions.md index d408bca6e42..4e4f9bf5e15 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaHTTPTransportOptions.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaHTTPTransportOptions.md @@ -28,7 +28,7 @@ `Promise`\<`Response`\> -*** +--- ### WebSocketConstructor()? @@ -64,13 +64,13 @@ > `readonly` **CLOSED**: `3` -*** +--- ### url > **url**: `string` -*** +--- ### rpc? @@ -84,7 +84,7 @@ > `optional` **url**: `string` -*** +--- ### websocket? diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaJWK.md b/docs/content/ts-sdk/api/client/interfaces/IotaJWK.md index 233df48b15f..0de351c914e 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaJWK.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaJWK.md @@ -6,19 +6,19 @@ > **alg**: `string` -*** +--- ### e > **e**: `string` -*** +--- ### kty > **kty**: `string` -*** +--- ### n diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaJwkId.md b/docs/content/ts-sdk/api/client/interfaces/IotaJwkId.md index dea80ddd64a..7bdc005d104 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaJwkId.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaJwkId.md @@ -6,7 +6,7 @@ > **iss**: `string` -*** +--- ### kid diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveModuleId.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveModuleId.md index 88942b2e965..52f844004ec 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaMoveModuleId.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveModuleId.md @@ -6,7 +6,7 @@ > **address**: `string` -*** +--- ### name diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedField.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedField.md index c3a73f4de0e..f3e61999179 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedField.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedField.md @@ -6,7 +6,7 @@ > **name**: `string` -*** +--- ### type diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedFunction.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedFunction.md index aabbf5de551..fbd5df5baa8 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedFunction.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedFunction.md @@ -6,25 +6,25 @@ > **isEntry**: `boolean` -*** +--- ### parameters > **parameters**: [`IotaMoveNormalizedType`](../type-aliases/IotaMoveNormalizedType.md)[] -*** +--- ### return > **return**: [`IotaMoveNormalizedType`](../type-aliases/IotaMoveNormalizedType.md)[] -*** +--- ### typeParameters > **typeParameters**: [`IotaMoveAbilitySet`](IotaMoveAbilitySet.md)[] -*** +--- ### visibility diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedModule.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedModule.md index aa957e05069..ee2f40a67e5 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedModule.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedModule.md @@ -6,7 +6,7 @@ > **address**: `string` -*** +--- ### exposedFunctions @@ -14,27 +14,27 @@ #### Index Signature - \[`key`: `string`\]: [`IotaMoveNormalizedFunction`](IotaMoveNormalizedFunction.md) +\[`key`: `string`\]: [`IotaMoveNormalizedFunction`](IotaMoveNormalizedFunction.md) -*** +--- ### fileFormatVersion > **fileFormatVersion**: `number` -*** +--- ### friends > **friends**: [`IotaMoveModuleId`](IotaMoveModuleId.md)[] -*** +--- ### name > **name**: `string` -*** +--- ### structs @@ -42,4 +42,4 @@ #### Index Signature - \[`key`: `string`\]: [`IotaMoveNormalizedStruct`](IotaMoveNormalizedStruct.md) +\[`key`: `string`\]: [`IotaMoveNormalizedStruct`](IotaMoveNormalizedStruct.md) diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedStruct.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedStruct.md index 9685e3df879..d1b33f6803b 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedStruct.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveNormalizedStruct.md @@ -6,13 +6,13 @@ > **abilities**: [`IotaMoveAbilitySet`](IotaMoveAbilitySet.md) -*** +--- ### fields > **fields**: [`IotaMoveNormalizedField`](IotaMoveNormalizedField.md)[] -*** +--- ### typeParameters diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaMoveStructTypeParameter.md b/docs/content/ts-sdk/api/client/interfaces/IotaMoveStructTypeParameter.md index e992b5cdf0b..a7648fc96d2 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaMoveStructTypeParameter.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaMoveStructTypeParameter.md @@ -6,7 +6,7 @@ > **constraints**: [`IotaMoveAbilitySet`](IotaMoveAbilitySet.md) -*** +--- ### isPhantom diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaObjectData.md b/docs/content/ts-sdk/api/client/interfaces/IotaObjectData.md index 14445f71607..562469ae40b 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaObjectData.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaObjectData.md @@ -9,7 +9,7 @@ Move object content or package content in BCS, default to be None unless IotaObjectDataOptions.showBcs is set to true -*** +--- ### content? @@ -18,7 +18,7 @@ IotaObjectDataOptions.showBcs is set to true Move object content or package content, default to be None unless IotaObjectDataOptions.showContent is set to true -*** +--- ### digest @@ -26,7 +26,7 @@ is set to true Base64 string representing the object digest -*** +--- ### display? @@ -36,13 +36,13 @@ The Display metadata for frontend UI rendering, default to be None unless IotaObjectDataOptions.showContent is set to true This can also be None if the struct type does not have Display defined See more details in -*** +--- ### objectId > **objectId**: `string` -*** +--- ### owner? @@ -50,7 +50,7 @@ have Display defined See more details in `optional` **data**: `null` \| [`IotaObjectData`](IotaObjectData.md) -*** +--- ### error? diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaObjectResponseQuery.md b/docs/content/ts-sdk/api/client/interfaces/IotaObjectResponseQuery.md index c3f62c9da0e..36b3f1a28bb 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaObjectResponseQuery.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaObjectResponseQuery.md @@ -8,7 +8,7 @@ If None, no filter will be applied -*** +--- ### options? diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaSystemStateSummary.md b/docs/content/ts-sdk/api/client/interfaces/IotaSystemStateSummary.md index f60fb5fd7d2..61acf4eacbd 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaSystemStateSummary.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaSystemStateSummary.md @@ -12,7 +12,7 @@ system state type. The list of active validators in the current epoch. -*** +--- ### atRiskValidators @@ -20,7 +20,7 @@ The list of active validators in the current epoch. Map storing the number of epochs for which each validator has been below the low stake threshold. -*** +--- ### epoch @@ -28,7 +28,7 @@ Map storing the number of epochs for which each validator has been below the low The current epoch ID, starting from 0. -*** +--- ### epochDurationMs @@ -36,7 +36,7 @@ The current epoch ID, starting from 0. The duration of an epoch, in milliseconds. -*** +--- ### epochStartTimestampMs @@ -44,7 +44,7 @@ The duration of an epoch, in milliseconds. Unix timestamp of the current epoch start -*** +--- ### inactivePoolsId @@ -53,7 +53,7 @@ Unix timestamp of the current epoch start ID of the object that maps from a staking pool ID to the inactive validator that has that pool as its staking pool. -*** +--- ### inactivePoolsSize @@ -61,7 +61,7 @@ its staking pool. Number of inactive staking pools. -*** +--- ### iotaTotalSupply @@ -69,7 +69,7 @@ Number of inactive staking pools. The current IOTA supply. -*** +--- ### iotaTreasuryCapId @@ -77,7 +77,7 @@ The current IOTA supply. The `TreasuryCap` object ID. -*** +--- ### maxValidatorCount @@ -86,7 +86,7 @@ The `TreasuryCap` object ID. Maximum number of active validators at any moment. We do not allow the number of validators in any epoch to go above this. -*** +--- ### minValidatorCount @@ -95,7 +95,7 @@ epoch to go above this. Minimum number of active validators at any moment. We do not allow the number of validators in any epoch to go under this. -*** +--- ### minValidatorJoiningStake @@ -103,7 +103,7 @@ epoch to go under this. Lower-bound on the amount of stake required to become a validator. -*** +--- ### pendingActiveValidatorsId @@ -111,7 +111,7 @@ Lower-bound on the amount of stake required to become a validator. ID of the object that contains the list of new validators that will join at the end of the epoch. -*** +--- ### pendingActiveValidatorsSize @@ -119,7 +119,7 @@ ID of the object that contains the list of new validators that will join at the Number of new validators that will join at the end of the epoch. -*** +--- ### pendingRemovals @@ -127,7 +127,7 @@ Number of new validators that will join at the end of the epoch. Removal requests from the validators. Each element is an index pointing to `active_validators`. -*** +--- ### protocolVersion @@ -135,7 +135,7 @@ Removal requests from the validators. Each element is an index pointing to `acti The current protocol version, starting from 1. -*** +--- ### referenceGasPrice @@ -143,7 +143,7 @@ The current protocol version, starting from 1. The reference gas price for the current epoch. -*** +--- ### safeMode @@ -153,7 +153,7 @@ Whether the system is running in a downgraded safe mode due to a non-recoverable whenever we failed to execute advance_epoch, and ended up executing advance_epoch_safe_mode. It can be reset once we are able to successfully execute advance_epoch. -*** +--- ### safeModeComputationRewards @@ -161,7 +161,7 @@ be reset once we are able to successfully execute advance_epoch. Amount of computation rewards accumulated (and not yet distributed) during safe mode. -*** +--- ### safeModeNonRefundableStorageFee @@ -169,7 +169,7 @@ Amount of computation rewards accumulated (and not yet distributed) during safe Amount of non-refundable storage fee accumulated during safe mode. -*** +--- ### safeModeStorageCharges @@ -177,7 +177,7 @@ Amount of non-refundable storage fee accumulated during safe mode. Amount of storage charges accumulated (and not yet distributed) during safe mode. -*** +--- ### safeModeStorageRebates @@ -185,7 +185,7 @@ Amount of storage charges accumulated (and not yet distributed) during safe mode Amount of storage rebates accumulated (and not yet burned) during safe mode. -*** +--- ### stakingPoolMappingsId @@ -193,7 +193,7 @@ Amount of storage rebates accumulated (and not yet burned) during safe mode. ID of the object that maps from staking pool's ID to the iota address of a validator. -*** +--- ### stakingPoolMappingsSize @@ -201,7 +201,7 @@ ID of the object that maps from staking pool's ID to the iota address of a valid Number of staking pool mappings. -*** +--- ### storageFundNonRefundableBalance @@ -210,7 +210,7 @@ Number of staking pool mappings. The non-refundable portion of the storage fund coming from non-refundable storage rebates and any leftover staking rewards. -*** +--- ### storageFundTotalObjectStorageRebates @@ -218,7 +218,7 @@ leftover staking rewards. The storage rebates of all the objects on-chain stored in the storage fund. -*** +--- ### systemStateVersion @@ -226,7 +226,7 @@ The storage rebates of all the objects on-chain stored in the storage fund. The current version of the system state data structure type. -*** +--- ### totalStake @@ -234,7 +234,7 @@ The current version of the system state data structure type. Total amount of stake from all active validators at the beginning of the epoch. -*** +--- ### validatorCandidatesId @@ -243,7 +243,7 @@ Total amount of stake from all active validators at the beginning of the epoch. ID of the object that stores preactive validators, mapping their addresses to their `Validator` structs. -*** +--- ### validatorCandidatesSize @@ -251,7 +251,7 @@ structs. Number of preactive validators. -*** +--- ### validatorLowStakeGracePeriod @@ -260,7 +260,7 @@ Number of preactive validators. A validator can have stake below `validator_low_stake_threshold` for this many epochs before being kicked out. -*** +--- ### validatorLowStakeThreshold @@ -270,7 +270,7 @@ Validators with stake amount below `validator_low_stake_threshold` are considere and will be escorted out of the validator set after being below this threshold for more than `validator_low_stake_grace_period` number of epochs. -*** +--- ### validatorReportRecords @@ -278,7 +278,7 @@ and will be escorted out of the validator set after being below this threshold f A map storing the records of validator reporting each other. -*** +--- ### validatorVeryLowStakeThreshold diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlock.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlock.md index 1d4f0d4e124..da80ed00cb9 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlock.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlock.md @@ -6,7 +6,7 @@ > **data**: [`TransactionBlockData`](../type-aliases/TransactionBlockData.md) -*** +--- ### txSignatures diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponse.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponse.md index 738c4f39e80..ad39282bed1 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponse.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponse.md @@ -6,7 +6,7 @@ > `optional` **balanceChanges**: `null` \| [`BalanceChange`](BalanceChange.md)[] -*** +--- ### checkpoint? @@ -15,49 +15,49 @@ The checkpoint number when this transaction was included and hence finalized. This is only returned in the read api, not in the transaction execution api. -*** +--- ### confirmedLocalExecution? > `optional` **confirmedLocalExecution**: `null` \| `boolean` -*** +--- ### digest > **digest**: `string` -*** +--- ### effects? > `optional` **effects**: `null` \| [`TransactionEffects`](../type-aliases/TransactionEffects.md) -*** +--- ### errors? > `optional` **errors**: `string`[] -*** +--- ### events? > `optional` **events**: `null` \| [`IotaEvent`](IotaEvent.md)[] -*** +--- ### objectChanges? > `optional` **objectChanges**: `null` \| [`IotaObjectChange`](../type-aliases/IotaObjectChange.md)[] -*** +--- ### rawEffects? > `optional` **rawEffects**: `number`[] -*** +--- ### rawTransaction? @@ -66,13 +66,13 @@ in the read api, not in the transaction execution api. BCS encoded [SenderSignedData] that includes input object references returns empty array if `show_raw_transaction` is false -*** +--- ### timestampMs? > `optional` **timestampMs**: `null` \| `string` -*** +--- ### transaction? diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseOptions.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseOptions.md index 255f78745c2..9d9e5fd4065 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseOptions.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseOptions.md @@ -8,7 +8,7 @@ Whether to show balance_changes. Default to be False -*** +--- ### showEffects? @@ -16,7 +16,7 @@ Whether to show balance_changes. Default to be False Whether to show transaction effects. Default to be False -*** +--- ### showEvents? @@ -24,7 +24,7 @@ Whether to show transaction effects. Default to be False Whether to show transaction events. Default to be False -*** +--- ### showInput? @@ -32,7 +32,7 @@ Whether to show transaction events. Default to be False Whether to show transaction input data. Default to be False -*** +--- ### showObjectChanges? @@ -40,7 +40,7 @@ Whether to show transaction input data. Default to be False Whether to show object_changes. Default to be False -*** +--- ### showRawEffects? @@ -48,7 +48,7 @@ Whether to show object_changes. Default to be False Whether to show raw transaction effects. Default to be False -*** +--- ### showRawInput? diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseQuery.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseQuery.md index 861b61d980e..a3ebf2cc2d1 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseQuery.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransactionBlockResponseQuery.md @@ -8,7 +8,7 @@ If None, no filter will be applied -*** +--- ### options? diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransport.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransport.md index 41045d4663c..bf8540667e9 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaTransport.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransport.md @@ -18,7 +18,7 @@ `Promise`\<`T`\> -*** +--- ### subscribe() diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransportRequestOptions.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransportRequestOptions.md index 5319da2b482..ee306cd816b 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaTransportRequestOptions.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransportRequestOptions.md @@ -6,7 +6,7 @@ > **method**: `string` -*** +--- ### params diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaTransportSubscribeOptions.md b/docs/content/ts-sdk/api/client/interfaces/IotaTransportSubscribeOptions.md index b1255d4fb16..8e95b561428 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaTransportSubscribeOptions.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaTransportSubscribeOptions.md @@ -10,19 +10,19 @@ > **method**: `string` -*** +--- ### unsubscribe > **unsubscribe**: `string` -*** +--- ### params > **params**: `unknown`[] -*** +--- ### onMessage() diff --git a/docs/content/ts-sdk/api/client/interfaces/IotaValidatorSummary.md b/docs/content/ts-sdk/api/client/interfaces/IotaValidatorSummary.md index e3eafd7aea0..441e9aa0a50 100644 --- a/docs/content/ts-sdk/api/client/interfaces/IotaValidatorSummary.md +++ b/docs/content/ts-sdk/api/client/interfaces/IotaValidatorSummary.md @@ -9,19 +9,19 @@ fields so that they are decoupled from the internal definitions. > **authorityPubkeyBytes**: `string` -*** +--- ### commissionRate > **commissionRate**: `string` -*** +--- ### description > **description**: `string` -*** +--- ### exchangeRatesId @@ -29,7 +29,7 @@ fields so that they are decoupled from the internal definitions. ID of the exchange rate table object. -*** +--- ### exchangeRatesSize @@ -37,115 +37,115 @@ ID of the exchange rate table object. Number of exchange rates in the table. -*** +--- ### gasPrice > **gasPrice**: `string` -*** +--- ### imageUrl > **imageUrl**: `string` -*** +--- ### iotaAddress > **iotaAddress**: `string` -*** +--- ### name > **name**: `string` -*** +--- ### netAddress > **netAddress**: `string` -*** +--- ### networkPubkeyBytes > **networkPubkeyBytes**: `string` -*** +--- ### nextEpochAuthorityPubkeyBytes? > `optional` **nextEpochAuthorityPubkeyBytes**: `null` \| `string` -*** +--- ### nextEpochCommissionRate > **nextEpochCommissionRate**: `string` -*** +--- ### nextEpochGasPrice > **nextEpochGasPrice**: `string` -*** +--- ### nextEpochNetAddress? > `optional` **nextEpochNetAddress**: `null` \| `string` -*** +--- ### nextEpochNetworkPubkeyBytes? > `optional` **nextEpochNetworkPubkeyBytes**: `null` \| `string` -*** +--- ### nextEpochP2pAddress? > `optional` **nextEpochP2pAddress**: `null` \| `string` -*** +--- ### nextEpochPrimaryAddress? > `optional` **nextEpochPrimaryAddress**: `null` \| `string` -*** +--- ### nextEpochProofOfPossession? > `optional` **nextEpochProofOfPossession**: `null` \| `string` -*** +--- ### nextEpochProtocolPubkeyBytes? > `optional` **nextEpochProtocolPubkeyBytes**: `null` \| `string` -*** +--- ### nextEpochStake > **nextEpochStake**: `string` -*** +--- ### operationCapId > **operationCapId**: `string` -*** +--- ### p2pAddress > **p2pAddress**: `string` -*** +--- ### pendingPoolTokenWithdraw @@ -153,7 +153,7 @@ Number of exchange rates in the table. Pending pool token withdrawn during the current epoch, emptied at epoch boundaries. -*** +--- ### pendingStake @@ -161,7 +161,7 @@ Pending pool token withdrawn during the current epoch, emptied at epoch boundari Pending stake amount for this epoch. -*** +--- ### pendingTotalIotaWithdraw @@ -169,7 +169,7 @@ Pending stake amount for this epoch. Pending stake withdrawn during the current epoch, emptied at epoch boundaries. -*** +--- ### poolTokenBalance @@ -177,31 +177,31 @@ Pending stake withdrawn during the current epoch, emptied at epoch boundaries. Total number of pool tokens issued by the pool. -*** +--- ### primaryAddress > **primaryAddress**: `string` -*** +--- ### projectUrl > **projectUrl**: `string` -*** +--- ### proofOfPossessionBytes > **proofOfPossessionBytes**: `string` -*** +--- ### protocolPubkeyBytes > **protocolPubkeyBytes**: `string` -*** +--- ### rewardsPool @@ -209,7 +209,7 @@ Total number of pool tokens issued by the pool. The epoch stake rewards will be added here at the end of each epoch. -*** +--- ### stakingPoolActivationEpoch? @@ -217,7 +217,7 @@ The epoch stake rewards will be added here at the end of each epoch. The epoch at which this pool became active. -*** +--- ### stakingPoolDeactivationEpoch? @@ -225,7 +225,7 @@ The epoch at which this pool became active. The epoch at which this staking pool ceased to be active. `None` = {pre-active, active}, -*** +--- ### stakingPoolId @@ -233,7 +233,7 @@ The epoch at which this staking pool ceased to be active. `None` = {pre-active, ID of the staking pool object. -*** +--- ### stakingPoolIotaBalance @@ -241,7 +241,7 @@ ID of the staking pool object. The total number of IOTA tokens in this pool. -*** +--- ### votingPower diff --git a/docs/content/ts-sdk/api/client/interfaces/KioskConfiguration.md b/docs/content/ts-sdk/api/client/interfaces/KioskConfiguration.md index 95d945fefd3..467b17aeda4 100644 --- a/docs/content/ts-sdk/api/client/interfaces/KioskConfiguration.md +++ b/docs/content/ts-sdk/api/client/interfaces/KioskConfiguration.md @@ -6,19 +6,19 @@ > **royaltyRulePackageId**: `string` -*** +--- ### kioskLockRulePackageId > **kioskLockRulePackageId**: `string` -*** +--- ### floorPriceRulePackageId > **floorPriceRulePackageId**: `string` -*** +--- ### personalKioskRulePackageId diff --git a/docs/content/ts-sdk/api/client/interfaces/MoveCallIotaTransaction.md b/docs/content/ts-sdk/api/client/interfaces/MoveCallIotaTransaction.md index 663712b6b49..cc6d5e31d27 100644 --- a/docs/content/ts-sdk/api/client/interfaces/MoveCallIotaTransaction.md +++ b/docs/content/ts-sdk/api/client/interfaces/MoveCallIotaTransaction.md @@ -11,7 +11,7 @@ cannot return references). The arguments to the function. -*** +--- ### function @@ -19,7 +19,7 @@ The arguments to the function. The function to be called. -*** +--- ### module @@ -27,7 +27,7 @@ The function to be called. The specific module in the package containing the function. -*** +--- ### package @@ -35,7 +35,7 @@ The specific module in the package containing the function. The package containing the module and function. -*** +--- ### type\_arguments? diff --git a/docs/content/ts-sdk/api/client/interfaces/MoveCallMetrics.md b/docs/content/ts-sdk/api/client/interfaces/MoveCallMetrics.md index 56106539bca..9973d3f3e0c 100644 --- a/docs/content/ts-sdk/api/client/interfaces/MoveCallMetrics.md +++ b/docs/content/ts-sdk/api/client/interfaces/MoveCallMetrics.md @@ -8,7 +8,7 @@ The count of calls of each function in the last 30 days. -*** +--- ### rank3Days @@ -16,7 +16,7 @@ The count of calls of each function in the last 30 days. The count of calls of each function in the last 3 days. -*** +--- ### rank7Days diff --git a/docs/content/ts-sdk/api/client/interfaces/MoveCallParams.md b/docs/content/ts-sdk/api/client/interfaces/MoveCallParams.md index e82bc6928b6..0df4e11284b 100644 --- a/docs/content/ts-sdk/api/client/interfaces/MoveCallParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/MoveCallParams.md @@ -6,25 +6,25 @@ > **arguments**: `unknown`[] -*** +--- ### function > **function**: `string` -*** +--- ### module > **module**: `string` -*** +--- ### packageObjectId > **packageObjectId**: `string` -*** +--- ### typeArguments? diff --git a/docs/content/ts-sdk/api/client/interfaces/MoveFunctionName.md b/docs/content/ts-sdk/api/client/interfaces/MoveFunctionName.md index 47f89f35592..b4611e5b520 100644 --- a/docs/content/ts-sdk/api/client/interfaces/MoveFunctionName.md +++ b/docs/content/ts-sdk/api/client/interfaces/MoveFunctionName.md @@ -10,7 +10,7 @@ Identifies a Move function. The function name. -*** +--- ### module @@ -18,7 +18,7 @@ The function name. The module name to which the function belongs. -*** +--- ### package diff --git a/docs/content/ts-sdk/api/client/interfaces/MoveVariant.md b/docs/content/ts-sdk/api/client/interfaces/MoveVariant.md index 8601e656bf3..b5ec11a3d8f 100644 --- a/docs/content/ts-sdk/api/client/interfaces/MoveVariant.md +++ b/docs/content/ts-sdk/api/client/interfaces/MoveVariant.md @@ -8,15 +8,15 @@ #### Index Signature - \[`key`: `string`\]: [`MoveValue`](../type-aliases/MoveValue.md) +\[`key`: `string`\]: [`MoveValue`](../type-aliases/MoveValue.md) -*** +--- ### type > **type**: `string` -*** +--- ### variant diff --git a/docs/content/ts-sdk/api/client/interfaces/MultiGetObjectsParams.md b/docs/content/ts-sdk/api/client/interfaces/MultiGetObjectsParams.md index 9380bfb1ab4..bb4b886dc0f 100644 --- a/docs/content/ts-sdk/api/client/interfaces/MultiGetObjectsParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/MultiGetObjectsParams.md @@ -10,7 +10,7 @@ Return the object data for a list of objects the IDs of the queried objects -*** +--- ### options? diff --git a/docs/content/ts-sdk/api/client/interfaces/MultiGetTransactionBlocksParams.md b/docs/content/ts-sdk/api/client/interfaces/MultiGetTransactionBlocksParams.md index f95edba27ac..1c9436be4be 100644 --- a/docs/content/ts-sdk/api/client/interfaces/MultiGetTransactionBlocksParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/MultiGetTransactionBlocksParams.md @@ -11,7 +11,7 @@ contains any duplicate or the input size exceeds QUERY_MAX_RESULT_LIMIT A list of transaction digests. -*** +--- ### options? diff --git a/docs/content/ts-sdk/api/client/interfaces/MultiSig.md b/docs/content/ts-sdk/api/client/interfaces/MultiSig.md index fd9b1149186..b3f6150e610 100644 --- a/docs/content/ts-sdk/api/client/interfaces/MultiSig.md +++ b/docs/content/ts-sdk/api/client/interfaces/MultiSig.md @@ -10,7 +10,7 @@ The struct that contains signatures and public keys necessary for authenticating A bitmap that indicates the position of which public key the signature should be authenticated with. -*** +--- ### multisig\_pk @@ -19,7 +19,7 @@ A bitmap that indicates the position of which public key the signature should be The public key encoded with each public key with its signature scheme used along with the corresponding weight. -*** +--- ### sigs diff --git a/docs/content/ts-sdk/api/client/interfaces/MultiSigPublicKey.md b/docs/content/ts-sdk/api/client/interfaces/MultiSigPublicKey.md index ed50bda5b99..28f052a45e2 100644 --- a/docs/content/ts-sdk/api/client/interfaces/MultiSigPublicKey.md +++ b/docs/content/ts-sdk/api/client/interfaces/MultiSigPublicKey.md @@ -10,7 +10,7 @@ The struct that contains the public key used for authenticating a MultiSig. A list of public key and its corresponding weight. -*** +--- ### threshold diff --git a/docs/content/ts-sdk/api/client/interfaces/NetworkConfiguration.md b/docs/content/ts-sdk/api/client/interfaces/NetworkConfiguration.md index 47c2846d1b5..d065dc211ff 100644 --- a/docs/content/ts-sdk/api/client/interfaces/NetworkConfiguration.md +++ b/docs/content/ts-sdk/api/client/interfaces/NetworkConfiguration.md @@ -6,37 +6,37 @@ > **id**: [`Network`](../enumerations/Network.md) -*** +--- ### name > **name**: `string` -*** +--- ### url > **url**: `string` -*** +--- ### explorer > **explorer**: `string` -*** +--- ### chain > **chain**: \`$\{string\}:$\{string\}\` -*** +--- ### faucet? > `optional` **faucet**: `string` -*** +--- ### kiosk? diff --git a/docs/content/ts-sdk/api/client/interfaces/NetworkMetrics.md b/docs/content/ts-sdk/api/client/interfaces/NetworkMetrics.md index 72bd9ef422e..3ab8ca92476 100644 --- a/docs/content/ts-sdk/api/client/interfaces/NetworkMetrics.md +++ b/docs/content/ts-sdk/api/client/interfaces/NetworkMetrics.md @@ -8,7 +8,7 @@ Current checkpoint number -*** +--- ### currentEpoch @@ -16,7 +16,7 @@ Current checkpoint number Current epoch number -*** +--- ### currentTps @@ -24,7 +24,7 @@ Current epoch number Current TPS - Transaction Blocks per Second. -*** +--- ### totalAddresses @@ -32,7 +32,7 @@ Current TPS - Transaction Blocks per Second. Total number of addresses seen in the network -*** +--- ### totalObjects @@ -40,7 +40,7 @@ Total number of addresses seen in the network Total number of live objects in the network -*** +--- ### totalPackages @@ -48,7 +48,7 @@ Total number of live objects in the network Total number of packages published in the network -*** +--- ### tps30Days diff --git a/docs/content/ts-sdk/api/client/interfaces/OwnedObjectRef.md b/docs/content/ts-sdk/api/client/interfaces/OwnedObjectRef.md index 2d3a35e1ff6..ab63f1639fa 100644 --- a/docs/content/ts-sdk/api/client/interfaces/OwnedObjectRef.md +++ b/docs/content/ts-sdk/api/client/interfaces/OwnedObjectRef.md @@ -6,7 +6,7 @@ > **owner**: [`ObjectOwner`](../type-aliases/ObjectOwner.md) -*** +--- ### reference diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedCheckpoints.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedCheckpoints.md index 8b2b208a5df..acd0188123d 100644 --- a/docs/content/ts-sdk/api/client/interfaces/PaginatedCheckpoints.md +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedCheckpoints.md @@ -10,13 +10,13 @@ item. > **data**: [`Checkpoint`](Checkpoint.md)[] -*** +--- ### hasNextPage > **hasNextPage**: `boolean` -*** +--- ### nextCursor? diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedCoins.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedCoins.md index b8fcba18ef3..0e3be66b2f3 100644 --- a/docs/content/ts-sdk/api/client/interfaces/PaginatedCoins.md +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedCoins.md @@ -10,13 +10,13 @@ item. > **data**: [`CoinStruct`](CoinStruct.md)[] -*** +--- ### hasNextPage > **hasNextPage**: `boolean` -*** +--- ### nextCursor? diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedDynamicFieldInfos.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedDynamicFieldInfos.md index dab8592bd03..7c4bf33f4a6 100644 --- a/docs/content/ts-sdk/api/client/interfaces/PaginatedDynamicFieldInfos.md +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedDynamicFieldInfos.md @@ -10,13 +10,13 @@ item. > **data**: [`DynamicFieldInfo`](DynamicFieldInfo.md)[] -*** +--- ### hasNextPage > **hasNextPage**: `boolean` -*** +--- ### nextCursor? diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochInfos.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochInfos.md index b88b8b4fac6..d82329f9387 100644 --- a/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochInfos.md +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochInfos.md @@ -10,13 +10,13 @@ item. > **data**: [`EpochInfo`](EpochInfo.md)[] -*** +--- ### hasNextPage > **hasNextPage**: `boolean` -*** +--- ### nextCursor? diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochMetricss.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochMetricss.md index baa1bc69ed2..c4a4a7d697f 100644 --- a/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochMetricss.md +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedEpochMetricss.md @@ -10,13 +10,13 @@ item. > **data**: [`EpochMetrics`](EpochMetrics.md)[] -*** +--- ### hasNextPage > **hasNextPage**: `boolean` -*** +--- ### nextCursor? diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedEvents.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedEvents.md index 466b734ff92..300f3849c7e 100644 --- a/docs/content/ts-sdk/api/client/interfaces/PaginatedEvents.md +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedEvents.md @@ -10,13 +10,13 @@ item. > **data**: [`IotaEvent`](IotaEvent.md)[] -*** +--- ### hasNextPage > **hasNextPage**: `boolean` -*** +--- ### nextCursor? diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedObjectsResponse.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedObjectsResponse.md index 5af524f6f4f..047de986799 100644 --- a/docs/content/ts-sdk/api/client/interfaces/PaginatedObjectsResponse.md +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedObjectsResponse.md @@ -10,13 +10,13 @@ item. > **data**: [`IotaObjectResponse`](IotaObjectResponse.md)[] -*** +--- ### hasNextPage > **hasNextPage**: `boolean` -*** +--- ### nextCursor? diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginatedTransactionResponse.md b/docs/content/ts-sdk/api/client/interfaces/PaginatedTransactionResponse.md index 6a0c9d1ddf4..2a820321557 100644 --- a/docs/content/ts-sdk/api/client/interfaces/PaginatedTransactionResponse.md +++ b/docs/content/ts-sdk/api/client/interfaces/PaginatedTransactionResponse.md @@ -10,13 +10,13 @@ item. > **data**: [`IotaTransactionBlockResponse`](IotaTransactionBlockResponse.md)[] -*** +--- ### hasNextPage > **hasNextPage**: `boolean` -*** +--- ### nextCursor? diff --git a/docs/content/ts-sdk/api/client/interfaces/PaginationArguments.md b/docs/content/ts-sdk/api/client/interfaces/PaginationArguments.md index ca95555bc07..48e3a007045 100644 --- a/docs/content/ts-sdk/api/client/interfaces/PaginationArguments.md +++ b/docs/content/ts-sdk/api/client/interfaces/PaginationArguments.md @@ -12,7 +12,7 @@ Optional paging cursor -*** +--- ### limit? diff --git a/docs/content/ts-sdk/api/client/interfaces/PasskeyAuthenticator.md b/docs/content/ts-sdk/api/client/interfaces/PasskeyAuthenticator.md index 525adc0a0a3..2bba01e9c04 100644 --- a/docs/content/ts-sdk/api/client/interfaces/PasskeyAuthenticator.md +++ b/docs/content/ts-sdk/api/client/interfaces/PasskeyAuthenticator.md @@ -13,7 +13,7 @@ An passkey authenticator with parsed fields. See field definition below. Can be [Authenticator Data](https://www.w3.org/TR/webauthn-2/#sctn-authenticator-data) structure returned by the authenticator attestation response as is. -*** +--- ### client\_data\_json diff --git a/docs/content/ts-sdk/api/client/interfaces/ProtocolConfig.md b/docs/content/ts-sdk/api/client/interfaces/ProtocolConfig.md index f2b754a2b14..86dd2b6510d 100644 --- a/docs/content/ts-sdk/api/client/interfaces/ProtocolConfig.md +++ b/docs/content/ts-sdk/api/client/interfaces/ProtocolConfig.md @@ -8,9 +8,9 @@ #### Index Signature - \[`key`: `string`\]: [`ProtocolConfigValue`](../type-aliases/ProtocolConfigValue.md) \| `null` +\[`key`: `string`\]: [`ProtocolConfigValue`](../type-aliases/ProtocolConfigValue.md) \| `null` -*** +--- ### featureFlags @@ -18,21 +18,21 @@ #### Index Signature - \[`key`: `string`\]: `boolean` +\[`key`: `string`\]: `boolean` -*** +--- ### maxSupportedProtocolVersion > **maxSupportedProtocolVersion**: `string` -*** +--- ### minSupportedProtocolVersion > **minSupportedProtocolVersion**: `string` -*** +--- ### protocolVersion diff --git a/docs/content/ts-sdk/api/client/interfaces/QueryEventsParams.md b/docs/content/ts-sdk/api/client/interfaces/QueryEventsParams.md index adef58b1892..7b6e7c4a156 100644 --- a/docs/content/ts-sdk/api/client/interfaces/QueryEventsParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/QueryEventsParams.md @@ -11,7 +11,7 @@ Return list of events for a specified query criteria. The event query criteria. See [Event filter](https://docs.iota.io/build/event_api#event-filters) documentation for examples. -*** +--- ### cursor? @@ -19,7 +19,7 @@ documentation for examples. optional paging cursor -*** +--- ### limit? @@ -27,7 +27,7 @@ optional paging cursor maximum number of items per page, default to [QUERY_MAX_RESULT_LIMIT] if not specified. -*** +--- ### order? diff --git a/docs/content/ts-sdk/api/client/interfaces/TransactionBlockBytes.md b/docs/content/ts-sdk/api/client/interfaces/TransactionBlockBytes.md index abecce14546..b85858cd1b6 100644 --- a/docs/content/ts-sdk/api/client/interfaces/TransactionBlockBytes.md +++ b/docs/content/ts-sdk/api/client/interfaces/TransactionBlockBytes.md @@ -8,7 +8,7 @@ the gas objects to be used -*** +--- ### inputObjects @@ -16,7 +16,7 @@ the gas objects to be used objects to be used in this transaction -*** +--- ### txBytes diff --git a/docs/content/ts-sdk/api/client/interfaces/TransactionBlockEffectsModifiedAtVersions.md b/docs/content/ts-sdk/api/client/interfaces/TransactionBlockEffectsModifiedAtVersions.md index 1699c8e7879..4ddb17de766 100644 --- a/docs/content/ts-sdk/api/client/interfaces/TransactionBlockEffectsModifiedAtVersions.md +++ b/docs/content/ts-sdk/api/client/interfaces/TransactionBlockEffectsModifiedAtVersions.md @@ -6,7 +6,7 @@ > **objectId**: `string` -*** +--- ### sequenceNumber diff --git a/docs/content/ts-sdk/api/client/interfaces/TransferObjectParams.md b/docs/content/ts-sdk/api/client/interfaces/TransferObjectParams.md index 45afcde17a6..3d1289d1796 100644 --- a/docs/content/ts-sdk/api/client/interfaces/TransferObjectParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/TransferObjectParams.md @@ -6,7 +6,7 @@ > **objectId**: `string` -*** +--- ### recipient diff --git a/docs/content/ts-sdk/api/client/interfaces/TryGetPastObjectParams.md b/docs/content/ts-sdk/api/client/interfaces/TryGetPastObjectParams.md index b894ecdf62f..3be99d62b98 100644 --- a/docs/content/ts-sdk/api/client/interfaces/TryGetPastObjectParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/TryGetPastObjectParams.md @@ -12,7 +12,7 @@ on their pruning policies. Return the object information for a specified version the ID of the queried object -*** +--- ### version @@ -20,7 +20,7 @@ the ID of the queried object the version of the queried object. If None, default to the latest known version -*** +--- ### options? diff --git a/docs/content/ts-sdk/api/client/interfaces/TryMultiGetPastObjectsParams.md b/docs/content/ts-sdk/api/client/interfaces/TryMultiGetPastObjectsParams.md index a3ed052b346..681a2aa78ff 100644 --- a/docs/content/ts-sdk/api/client/interfaces/TryMultiGetPastObjectsParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/TryMultiGetPastObjectsParams.md @@ -12,7 +12,7 @@ on their pruning policies. Return the object information for a specified version a vector of object and versions to be queried -*** +--- ### options? diff --git a/docs/content/ts-sdk/api/client/interfaces/TypeOrigin.md b/docs/content/ts-sdk/api/client/interfaces/TypeOrigin.md index 0ed5c86e8e6..1c21b67dedd 100644 --- a/docs/content/ts-sdk/api/client/interfaces/TypeOrigin.md +++ b/docs/content/ts-sdk/api/client/interfaces/TypeOrigin.md @@ -8,13 +8,13 @@ Identifies a struct and the module it was defined in > **datatype\_name**: `string` -*** +--- ### module\_name > **module\_name**: `string` -*** +--- ### package diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeBatchTransactionParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeBatchTransactionParams.md index 3a466d9c34c..a6288e19ef6 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeBatchTransactionParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeBatchTransactionParams.md @@ -10,7 +10,7 @@ Create an unsigned batched transaction. the transaction signer's Iota address -*** +--- ### singleTransactionParams @@ -18,7 +18,7 @@ the transaction signer's Iota address list of transaction request parameters -*** +--- ### gas? @@ -27,7 +27,7 @@ list of transaction request parameters gas object to be used in this transaction, node will pick one from the signer's possession if not provided -*** +--- ### gasBudget @@ -35,7 +35,7 @@ provided the gas budget, the transaction will fail if the gas cost exceed the budget -*** +--- ### txnBuilderMode? diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeMergeCoinsParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeMergeCoinsParams.md index fa45fbf60fe..14c57e62319 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeMergeCoinsParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeMergeCoinsParams.md @@ -10,7 +10,7 @@ Create an unsigned transaction to merge multiple coins into one coin. the transaction signer's Iota address -*** +--- ### primaryCoin @@ -18,7 +18,7 @@ the transaction signer's Iota address the coin object to merge into, this coin will remain after the transaction -*** +--- ### coinToMerge @@ -27,7 +27,7 @@ the coin object to merge into, this coin will remain after the transaction the coin object to be merged, this coin will be destroyed, the balance will be added to `primary_coin` -*** +--- ### gas? @@ -36,7 +36,7 @@ the coin object to be merged, this coin will be destroyed, the balance will be a gas object to be used in this transaction, node will pick one from the signer's possession if not provided -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeMoveCallParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeMoveCallParams.md index ab7e3502514..236f88d4100 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeMoveCallParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeMoveCallParams.md @@ -11,7 +11,7 @@ function in the module of a given package. the transaction signer's Iota address -*** +--- ### packageObjectId @@ -19,7 +19,7 @@ the transaction signer's Iota address the Move package ID, e.g. `0x2` -*** +--- ### module @@ -27,7 +27,7 @@ the Move package ID, e.g. `0x2` the Move module name, e.g. `pay` -*** +--- ### function @@ -35,7 +35,7 @@ the Move module name, e.g. `pay` the move function name, e.g. `split` -*** +--- ### typeArguments @@ -43,7 +43,7 @@ the move function name, e.g. `split` the type arguments of the Move function -*** +--- ### arguments @@ -52,7 +52,7 @@ the type arguments of the Move function the arguments to be passed into the Move function, in [IotaJson](https://docs.iota.io/build/iota-json) format -*** +--- ### gas? @@ -61,7 +61,7 @@ the arguments to be passed into the Move function, in gas object to be used in this transaction, node will pick one from the signer's possession if not provided -*** +--- ### gasBudget @@ -69,7 +69,7 @@ provided the gas budget, the transaction will fail if the gas cost exceed the budget -*** +--- ### executionMode? diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafePayAllIotaParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafePayAllIotaParams.md index 603e5946d54..8ef301e08cf 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafePayAllIotaParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafePayAllIotaParams.md @@ -14,7 +14,7 @@ sum(input_coins) - actual_gas_cost. 4. all other input coins other than the firs the transaction signer's Iota address -*** +--- ### inputCoins @@ -22,7 +22,7 @@ the transaction signer's Iota address the Iota coins to be used in this transaction, including the coin for gas payment. -*** +--- ### recipient @@ -30,7 +30,7 @@ the Iota coins to be used in this transaction, including the coin for gas paymen the recipient address, -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafePayIotaParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafePayIotaParams.md index 97fe6f3c7f6..9a99d4b1006 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafePayIotaParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafePayIotaParams.md @@ -16,7 +16,7 @@ than the first one are deleted. the transaction signer's Iota address -*** +--- ### inputCoins @@ -24,7 +24,7 @@ the transaction signer's Iota address the Iota coins to be used in this transaction, including the coin for gas payment. -*** +--- ### recipients @@ -32,7 +32,7 @@ the Iota coins to be used in this transaction, including the coin for gas paymen the recipients' addresses, the length of this vector must be the same as amounts. -*** +--- ### amounts @@ -40,7 +40,7 @@ the recipients' addresses, the length of this vector must be the same as amounts the amounts to be transferred to recipients, following the same order -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafePayParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafePayParams.md index 4f276f48632..4ad4bb50cc5 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafePayParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafePayParams.md @@ -13,7 +13,7 @@ auto-select one. the transaction signer's Iota address -*** +--- ### inputCoins @@ -21,7 +21,7 @@ the transaction signer's Iota address the Iota coins to be used in this transaction -*** +--- ### recipients @@ -29,7 +29,7 @@ the Iota coins to be used in this transaction the recipients' addresses, the length of this vector must be the same as amounts. -*** +--- ### amounts @@ -37,7 +37,7 @@ the recipients' addresses, the length of this vector must be the same as amounts the amounts to be transferred to recipients, following the same order -*** +--- ### gas? @@ -46,7 +46,7 @@ the amounts to be transferred to recipients, following the same order gas object to be used in this transaction, node will pick one from the signer's possession if not provided -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafePublishParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafePublishParams.md index 4989c078307..f71ddfc0c58 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafePublishParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafePublishParams.md @@ -10,7 +10,7 @@ Create an unsigned transaction to publish a Move package. the transaction signer's Iota address -*** +--- ### compiledModules @@ -18,7 +18,7 @@ the transaction signer's Iota address the compiled bytes of a Move package -*** +--- ### dependencies @@ -26,7 +26,7 @@ the compiled bytes of a Move package a list of transitive dependency addresses that this set of modules depends on. -*** +--- ### gas? @@ -35,7 +35,7 @@ a list of transitive dependency addresses that this set of modules depends on. gas object to be used in this transaction, node will pick one from the signer's possession if not provided -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddStakeParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddStakeParams.md index 2f51a1c5fac..ff4ff0f0d84 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddStakeParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddStakeParams.md @@ -10,7 +10,7 @@ Add stake to a validator's staking pool using multiple coins and amount. the transaction signer's Iota address -*** +--- ### coins @@ -18,7 +18,7 @@ the transaction signer's Iota address Coin object to stake -*** +--- ### amount? @@ -26,7 +26,7 @@ Coin object to stake stake amount -*** +--- ### validator @@ -34,7 +34,7 @@ stake amount the validator's Iota address -*** +--- ### gas? @@ -43,7 +43,7 @@ the validator's Iota address gas object to be used in this transaction, node will pick one from the signer's possession if not provided -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddTimelockedStakeParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddTimelockedStakeParams.md index dde17b26b43..b012505ed4a 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddTimelockedStakeParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestAddTimelockedStakeParams.md @@ -10,7 +10,7 @@ Add timelocked stake to a validator's staking pool using multiple balances and a the transaction signer's Iota address -*** +--- ### lockedBalance @@ -18,7 +18,7 @@ the transaction signer's Iota address TimeLock> object to stake -*** +--- ### validator @@ -26,7 +26,7 @@ TimeLock> object to stake the validator's Iota address -*** +--- ### gas @@ -34,7 +34,7 @@ the validator's Iota address gas object to be used in this transaction -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawStakeParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawStakeParams.md index 68cd26201d7..fd1f21c21ba 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawStakeParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawStakeParams.md @@ -10,7 +10,7 @@ Withdraw stake from a validator's staking pool. the transaction signer's Iota address -*** +--- ### stakedIota @@ -18,7 +18,7 @@ the transaction signer's Iota address StakedIota object ID -*** +--- ### gas? @@ -27,7 +27,7 @@ StakedIota object ID gas object to be used in this transaction, node will pick one from the signer's possession if not provided -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawTimelockedStakeParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawTimelockedStakeParams.md index 29aa9a32a0e..c3ed583dd1c 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawTimelockedStakeParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeRequestWithdrawTimelockedStakeParams.md @@ -10,7 +10,7 @@ Withdraw timelocked stake from a validator's staking pool. the transaction signer's Iota address -*** +--- ### timelockedStakedIota @@ -18,7 +18,7 @@ the transaction signer's Iota address TimelockedStakedIota object ID -*** +--- ### gas @@ -26,7 +26,7 @@ TimelockedStakedIota object ID gas object to be used in this transaction -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinEqualParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinEqualParams.md index 411d9170f4a..cb19a46b51e 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinEqualParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinEqualParams.md @@ -10,7 +10,7 @@ Create an unsigned transaction to split a coin object into multiple equal-size c the transaction signer's Iota address -*** +--- ### coinObjectId @@ -18,7 +18,7 @@ the transaction signer's Iota address the coin object to be spilt -*** +--- ### splitCount @@ -26,7 +26,7 @@ the coin object to be spilt the number of coins to split into -*** +--- ### gas? @@ -35,7 +35,7 @@ the number of coins to split into gas object to be used in this transaction, node will pick one from the signer's possession if not provided -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinParams.md index b2e1524a687..59c93b78247 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeSplitCoinParams.md @@ -10,7 +10,7 @@ Create an unsigned transaction to split a coin object into multiple coins. the transaction signer's Iota address -*** +--- ### coinObjectId @@ -18,7 +18,7 @@ the transaction signer's Iota address the coin object to be spilt -*** +--- ### splitAmounts @@ -26,7 +26,7 @@ the coin object to be spilt the amounts to split out from the coin -*** +--- ### gas? @@ -35,7 +35,7 @@ the amounts to split out from the coin gas object to be used in this transaction, node will pick one from the signer's possession if not provided -*** +--- ### gasBudget diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferIotaParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferIotaParams.md index 8f0ff7a2260..6c1333e2eee 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferIotaParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferIotaParams.md @@ -11,7 +11,7 @@ used as the gas object. the transaction signer's Iota address -*** +--- ### iotaObjectId @@ -19,7 +19,7 @@ the transaction signer's Iota address the Iota coin object to be used in this transaction -*** +--- ### gasBudget @@ -27,7 +27,7 @@ the Iota coin object to be used in this transaction the gas budget, the transaction will fail if the gas cost exceed the budget -*** +--- ### recipient @@ -35,7 +35,7 @@ the gas budget, the transaction will fail if the gas cost exceed the budget the recipient's Iota address -*** +--- ### amount? diff --git a/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferObjectParams.md b/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferObjectParams.md index ea774edd8c8..282b0735111 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferObjectParams.md +++ b/docs/content/ts-sdk/api/client/interfaces/UnsafeTransferObjectParams.md @@ -11,7 +11,7 @@ must allow public transfers the transaction signer's Iota address -*** +--- ### objectId @@ -19,7 +19,7 @@ the transaction signer's Iota address the ID of the object to be transferred -*** +--- ### gas? @@ -28,7 +28,7 @@ the ID of the object to be transferred gas object to be used in this transaction, node will pick one from the signer's possession if not provided -*** +--- ### gasBudget @@ -36,7 +36,7 @@ provided the gas budget, the transaction will fail if the gas cost exceed the budget -*** +--- ### recipient diff --git a/docs/content/ts-sdk/api/client/interfaces/UpgradeInfo.md b/docs/content/ts-sdk/api/client/interfaces/UpgradeInfo.md index 44fb3358eb1..b101ea09001 100644 --- a/docs/content/ts-sdk/api/client/interfaces/UpgradeInfo.md +++ b/docs/content/ts-sdk/api/client/interfaces/UpgradeInfo.md @@ -10,7 +10,7 @@ Upgraded package info for the linkage table ID of the upgraded packages -*** +--- ### upgraded\_version diff --git a/docs/content/ts-sdk/api/client/interfaces/ValidatorApy.md b/docs/content/ts-sdk/api/client/interfaces/ValidatorApy.md index 0c707fe1ffd..2f273ef63b3 100644 --- a/docs/content/ts-sdk/api/client/interfaces/ValidatorApy.md +++ b/docs/content/ts-sdk/api/client/interfaces/ValidatorApy.md @@ -6,7 +6,7 @@ > **address**: `string` -*** +--- ### apy diff --git a/docs/content/ts-sdk/api/client/interfaces/ValidatorsApy.md b/docs/content/ts-sdk/api/client/interfaces/ValidatorsApy.md index 39c08fca3ab..fc7ae2867f3 100644 --- a/docs/content/ts-sdk/api/client/interfaces/ValidatorsApy.md +++ b/docs/content/ts-sdk/api/client/interfaces/ValidatorsApy.md @@ -6,7 +6,7 @@ > **apys**: [`ValidatorApy`](ValidatorApy.md)[] -*** +--- ### epoch diff --git a/docs/content/ts-sdk/api/client/interfaces/ZkLoginAuthenticator.md b/docs/content/ts-sdk/api/client/interfaces/ZkLoginAuthenticator.md index f044cf83b6b..b7d56e93103 100644 --- a/docs/content/ts-sdk/api/client/interfaces/ZkLoginAuthenticator.md +++ b/docs/content/ts-sdk/api/client/interfaces/ZkLoginAuthenticator.md @@ -8,13 +8,13 @@ An zk login authenticator with all the necessary fields. > **inputs**: [`ZkLoginInputs`](ZkLoginInputs.md) -*** +--- ### maxEpoch > **maxEpoch**: `string` -*** +--- ### userSignature diff --git a/docs/content/ts-sdk/api/client/interfaces/ZkLoginInputs.md b/docs/content/ts-sdk/api/client/interfaces/ZkLoginInputs.md index adaffa1f419..e77e86206d2 100644 --- a/docs/content/ts-sdk/api/client/interfaces/ZkLoginInputs.md +++ b/docs/content/ts-sdk/api/client/interfaces/ZkLoginInputs.md @@ -8,19 +8,19 @@ All inputs required for the zk login proof verification and other public inputs. > **addressSeed**: `string` -*** +--- ### headerBase64 > **headerBase64**: `string` -*** +--- ### issBase64Details > **issBase64Details**: [`Claim`](Claim.md) -*** +--- ### proofPoints diff --git a/docs/content/ts-sdk/api/client/interfaces/ZkLoginProof.md b/docs/content/ts-sdk/api/client/interfaces/ZkLoginProof.md index 4a980d122d3..4bbdb50a0c6 100644 --- a/docs/content/ts-sdk/api/client/interfaces/ZkLoginProof.md +++ b/docs/content/ts-sdk/api/client/interfaces/ZkLoginProof.md @@ -8,13 +8,13 @@ The struct for zk login proof. > **a**: `string`[] -*** +--- ### b > **b**: `string`[][] -*** +--- ### c diff --git a/docs/content/ts-sdk/api/client/type-aliases/HttpHeaders.md b/docs/content/ts-sdk/api/client/type-aliases/HttpHeaders.md index cc536244663..66cbfed62dc 100644 --- a/docs/content/ts-sdk/api/client/type-aliases/HttpHeaders.md +++ b/docs/content/ts-sdk/api/client/type-aliases/HttpHeaders.md @@ -6,4 +6,4 @@ An object defining headers to be passed to the RPC server ## Index Signature - \[`header`: `string`\]: `string` +\[`header`: `string`\]: `string` diff --git a/docs/content/ts-sdk/api/cryptography/classes/Keypair.md b/docs/content/ts-sdk/api/cryptography/classes/Keypair.md index 4408c253aee..b2540b63eb7 100644 --- a/docs/content/ts-sdk/api/cryptography/classes/Keypair.md +++ b/docs/content/ts-sdk/api/cryptography/classes/Keypair.md @@ -43,7 +43,7 @@ TODO: Document [`Signer`](Signer.md).[`sign`](Signer.md#sign) -*** +--- ### signWithIntent() @@ -66,7 +66,7 @@ it ensures that a signed message is tied to a specific purpose and domain separa [`Signer`](Signer.md).[`signWithIntent`](Signer.md#signwithintent) -*** +--- ### signTransaction() @@ -86,7 +86,7 @@ Signs provided transaction by calling `signWithIntent()` with a `TransactionData [`Signer`](Signer.md).[`signTransaction`](Signer.md#signtransaction) -*** +--- ### signPersonalMessage() @@ -114,7 +114,7 @@ Signs provided personal message by calling `signWithIntent()` with a `PersonalMe [`Signer`](Signer.md).[`signPersonalMessage`](Signer.md#signpersonalmessage) -*** +--- ### toIotaAddress() @@ -128,7 +128,7 @@ Signs provided personal message by calling `signWithIntent()` with a `PersonalMe [`Signer`](Signer.md).[`toIotaAddress`](Signer.md#toiotaaddress) -*** +--- ### getKeyScheme() @@ -144,7 +144,7 @@ Get the key scheme of the keypair: Secp256k1 or ED25519 [`Signer`](Signer.md).[`getKeyScheme`](Signer.md#getkeyscheme) -*** +--- ### getPublicKey() @@ -160,7 +160,7 @@ The public key for this keypair [`Signer`](Signer.md).[`getPublicKey`](Signer.md#getpublickey) -*** +--- ### getSecretKey() diff --git a/docs/content/ts-sdk/api/cryptography/classes/PublicKey.md b/docs/content/ts-sdk/api/cryptography/classes/PublicKey.md index 9ca8175c393..3793a8aab8d 100644 --- a/docs/content/ts-sdk/api/cryptography/classes/PublicKey.md +++ b/docs/content/ts-sdk/api/cryptography/classes/PublicKey.md @@ -34,7 +34,7 @@ Checks if two public keys are equal `boolean` -*** +--- ### toBase64() @@ -46,7 +46,7 @@ Return the base-64 representation of the public key `string` -*** +--- ### toString() @@ -56,7 +56,7 @@ Return the base-64 representation of the public key `never` -*** +--- ### toIotaPublicKey() @@ -70,7 +70,7 @@ of the scheme flag with the raw bytes of the public key `string` -*** +--- ### verifyWithIntent() @@ -88,7 +88,7 @@ of the scheme flag with the raw bytes of the public key `Promise`\<`boolean`\> -*** +--- ### verifyPersonalMessage() @@ -106,7 +106,7 @@ Verifies that the signature is valid for for the provided PersonalMessage `Promise`\<`boolean`\> -*** +--- ### verifyTransaction() @@ -124,7 +124,7 @@ Verifies that the signature is valid for for the provided Transaction `Promise`\<`boolean`\> -*** +--- ### toIotaBytes() @@ -137,7 +137,7 @@ prefixed with the signature scheme flag `Uint8Array` -*** +--- ### toIotaBytesForAddress() @@ -151,7 +151,7 @@ signature scheme is ED25519, no prefix is set. `Uint8Array` -*** +--- ### toIotaAddress() @@ -163,7 +163,7 @@ Return the IOTA address associated with this Ed25519 public key `string` -*** +--- ### toRawBytes() @@ -175,7 +175,7 @@ Return the byte array representation of the public key `Uint8Array` -*** +--- ### flag() @@ -187,7 +187,7 @@ Return signature scheme flag of the public key `number` -*** +--- ### verify() diff --git a/docs/content/ts-sdk/api/cryptography/classes/Signer.md b/docs/content/ts-sdk/api/cryptography/classes/Signer.md index 052177ead21..7755ea9e1ff 100644 --- a/docs/content/ts-sdk/api/cryptography/classes/Signer.md +++ b/docs/content/ts-sdk/api/cryptography/classes/Signer.md @@ -31,7 +31,7 @@ TODO: Document `Promise`\<`Uint8Array`\> -*** +--- ### signWithIntent() @@ -50,7 +50,7 @@ it ensures that a signed message is tied to a specific purpose and domain separa `Promise`\<[`SignatureWithBytes`](../interfaces/SignatureWithBytes.md)\> -*** +--- ### signTransaction() @@ -66,7 +66,7 @@ Signs provided transaction by calling `signWithIntent()` with a `TransactionData `Promise`\<[`SignatureWithBytes`](../interfaces/SignatureWithBytes.md)\> -*** +--- ### signPersonalMessage() @@ -90,7 +90,7 @@ Signs provided personal message by calling `signWithIntent()` with a `PersonalMe > **signature**: `string` -*** +--- ### toIotaAddress() @@ -100,7 +100,7 @@ Signs provided personal message by calling `signWithIntent()` with a `PersonalMe `string` -*** +--- ### getKeyScheme() @@ -112,7 +112,7 @@ Get the key scheme of the keypair: Secp256k1 or ED25519 [`SignatureScheme`](../type-aliases/SignatureScheme.md) -*** +--- ### getPublicKey() diff --git a/docs/content/ts-sdk/api/cryptography/interfaces/SignatureWithBytes.md b/docs/content/ts-sdk/api/cryptography/interfaces/SignatureWithBytes.md index aa0230ef52b..ba584635d90 100644 --- a/docs/content/ts-sdk/api/cryptography/interfaces/SignatureWithBytes.md +++ b/docs/content/ts-sdk/api/cryptography/interfaces/SignatureWithBytes.md @@ -6,7 +6,7 @@ > **bytes**: `string` -*** +--- ### signature diff --git a/docs/content/ts-sdk/api/cryptography/type-aliases/IntentScope.md b/docs/content/ts-sdk/api/cryptography/type-aliases/IntentScope.md index 7ac8fdb14d0..6cba4a432ad 100644 --- a/docs/content/ts-sdk/api/cryptography/type-aliases/IntentScope.md +++ b/docs/content/ts-sdk/api/cryptography/type-aliases/IntentScope.md @@ -1,3 +1,3 @@ # Type Alias: IntentScope -> **IntentScope**: `Exclude`\ +> **IntentScope**: `Exclude`\ diff --git a/docs/content/ts-sdk/api/cryptography/type-aliases/SignatureFlag.md b/docs/content/ts-sdk/api/cryptography/type-aliases/SignatureFlag.md index a9d0be078b4..06bdc308af2 100644 --- a/docs/content/ts-sdk/api/cryptography/type-aliases/SignatureFlag.md +++ b/docs/content/ts-sdk/api/cryptography/type-aliases/SignatureFlag.md @@ -1,3 +1,3 @@ # Type Alias: SignatureFlag -> **SignatureFlag**: keyof *typeof* [`SIGNATURE_FLAG_TO_SCHEME`](../variables/SIGNATURE_FLAG_TO_SCHEME.md) +> **SignatureFlag**: keyof _typeof_ [`SIGNATURE_FLAG_TO_SCHEME`](../variables/SIGNATURE_FLAG_TO_SCHEME.md) diff --git a/docs/content/ts-sdk/api/faucet/classes/FaucetRateLimitError.md b/docs/content/ts-sdk/api/faucet/classes/FaucetRateLimitError.md index 62ea37b7a5f..c083e2ff12c 100644 --- a/docs/content/ts-sdk/api/faucet/classes/FaucetRateLimitError.md +++ b/docs/content/ts-sdk/api/faucet/classes/FaucetRateLimitError.md @@ -66,7 +66,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.prepareStackTrace` -*** +--- ### stackTraceLimit @@ -76,7 +76,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.stackTraceLimit` -*** +--- ### cause? @@ -86,7 +86,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.cause` -*** +--- ### name @@ -96,7 +96,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.name` -*** +--- ### message @@ -106,7 +106,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.message` -*** +--- ### stack? diff --git a/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLClient.md b/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLClient.md index 8fec347aade..8f2abf52ff9 100644 --- a/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLClient.md +++ b/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLClient.md @@ -2,7 +2,7 @@ ## Type Parameters -• **Queries** *extends* `Record`\<`string`, [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\> = `object` +• **Queries** _extends_ `Record`\<`string`, [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\> = `object` ## Constructors @@ -38,7 +38,7 @@ `Promise`\<[`GraphQLQueryResult`](../type-aliases/GraphQLQueryResult.md)\<`Result`\>\> -*** +--- ### execute() @@ -46,11 +46,11 @@ #### Type Parameters -• **Query** *extends* `string` +• **Query** _extends_ `string` -• **Result** = `Queries`\[`Query`\] *extends* [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\<`R`, `unknown`\> ? `R` : `Record`\<`string`, `unknown`\> +• **Result** = `Queries`\[`Query`\] _extends_ [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\<`R`, `unknown`\> ? `R` : `Record`\<`string`, `unknown`\> -• **Variables** = `Queries`\[`Query`\] *extends* [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\<`unknown`, `V`\> ? `V` : `Record`\<`string`, `unknown`\> +• **Variables** = `Queries`\[`Query`\] _extends_ [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\<`unknown`, `V`\> ? `V` : `Record`\<`string`, `unknown`\> #### Parameters diff --git a/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLRequestError.md b/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLRequestError.md index b17d149ebb6..afb383fce34 100644 --- a/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLRequestError.md +++ b/docs/content/ts-sdk/api/graphql/classes/IotaGraphQLRequestError.md @@ -66,7 +66,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.prepareStackTrace` -*** +--- ### stackTraceLimit @@ -76,7 +76,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.stackTraceLimit` -*** +--- ### cause? @@ -86,7 +86,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.cause` -*** +--- ### name @@ -96,7 +96,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.name` -*** +--- ### message @@ -106,7 +106,7 @@ https://v8.dev/docs/stack-trace-api#customizing-stack-traces `Error.message` -*** +--- ### stack? diff --git a/docs/content/ts-sdk/api/graphql/interfaces/IotaGraphQLClientOptions.md b/docs/content/ts-sdk/api/graphql/interfaces/IotaGraphQLClientOptions.md index 4241716dd47..6d4cc827cf4 100644 --- a/docs/content/ts-sdk/api/graphql/interfaces/IotaGraphQLClientOptions.md +++ b/docs/content/ts-sdk/api/graphql/interfaces/IotaGraphQLClientOptions.md @@ -2,7 +2,7 @@ ## Type Parameters -• **Queries** *extends* `Record`\<`string`, [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\> +• **Queries** _extends_ `Record`\<`string`, [`GraphQLDocument`](../type-aliases/GraphQLDocument.md)\> ## Properties @@ -10,7 +10,7 @@ > **url**: `string` -*** +--- ### fetch()? @@ -38,13 +38,13 @@ `Promise`\<`Response`\> -*** +--- ### headers? > `optional` **headers**: `Record`\<`string`, `string`\> -*** +--- ### queries? diff --git a/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryOptions.md b/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryOptions.md index 354bbcee9c3..60ef82a0a74 100644 --- a/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryOptions.md +++ b/docs/content/ts-sdk/api/graphql/type-aliases/GraphQLQueryOptions.md @@ -1,6 +1,6 @@ # Type Alias: GraphQLQueryOptions\ -> **GraphQLQueryOptions**\<`Result`, `Variables`\>: `object` & `Variables` *extends* `object` ? `object` : `object` +> **GraphQLQueryOptions**\<`Result`, `Variables`\>: `object` & `Variables` _extends_ `object` ? `object` : `object` ## Type declaration diff --git a/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519Keypair.md b/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519Keypair.md index 17e73ebae11..eddf91bcedf 100644 --- a/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519Keypair.md +++ b/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519Keypair.md @@ -52,7 +52,7 @@ it ensures that a signed message is tied to a specific purpose and domain separa [`Keypair`](../../../cryptography/classes/Keypair.md).[`signWithIntent`](../../../cryptography/classes/Keypair.md#signwithintent) -*** +--- ### signTransaction() @@ -72,7 +72,7 @@ Signs provided transaction by calling `signWithIntent()` with a `TransactionData [`Keypair`](../../../cryptography/classes/Keypair.md).[`signTransaction`](../../../cryptography/classes/Keypair.md#signtransaction) -*** +--- ### signPersonalMessage() @@ -100,7 +100,7 @@ Signs provided personal message by calling `signWithIntent()` with a `PersonalMe [`Keypair`](../../../cryptography/classes/Keypair.md).[`signPersonalMessage`](../../../cryptography/classes/Keypair.md#signpersonalmessage) -*** +--- ### toIotaAddress() @@ -114,7 +114,7 @@ Signs provided personal message by calling `signWithIntent()` with a `PersonalMe [`Keypair`](../../../cryptography/classes/Keypair.md).[`toIotaAddress`](../../../cryptography/classes/Keypair.md#toiotaaddress) -*** +--- ### getKeyScheme() @@ -130,7 +130,7 @@ Get the key scheme of the keypair ED25519 [`Keypair`](../../../cryptography/classes/Keypair.md).[`getKeyScheme`](../../../cryptography/classes/Keypair.md#getkeyscheme) -*** +--- ### generate() @@ -142,7 +142,7 @@ Generate a new random Ed25519 keypair [`Ed25519Keypair`](Ed25519Keypair.md) -*** +--- ### fromSecretKey() @@ -170,7 +170,7 @@ secret key byte array error if the provided secret key is invalid and validation is not skipped. -*** +--- ### getPublicKey() @@ -186,7 +186,7 @@ The public key for this Ed25519 keypair [`Keypair`](../../../cryptography/classes/Keypair.md).[`getPublicKey`](../../../cryptography/classes/Keypair.md#getpublickey) -*** +--- ### getSecretKey() @@ -202,7 +202,7 @@ The Bech32 secret key string for this Ed25519 keypair [`Keypair`](../../../cryptography/classes/Keypair.md).[`getSecretKey`](../../../cryptography/classes/Keypair.md#getsecretkey) -*** +--- ### sign() @@ -222,7 +222,7 @@ Return the signature for the provided data using Ed25519. [`Keypair`](../../../cryptography/classes/Keypair.md).[`sign`](../../../cryptography/classes/Keypair.md#sign) -*** +--- ### deriveKeypair() @@ -244,7 +244,7 @@ be compliant to SLIP-0010 in form m/44'/4218'/{account_index}'/{change_index}'/{ [`Ed25519Keypair`](Ed25519Keypair.md) -*** +--- ### deriveKeypairFromSeed() diff --git a/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519PublicKey.md b/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519PublicKey.md index 5b46db27abe..1762dc9142e 100644 --- a/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519PublicKey.md +++ b/docs/content/ts-sdk/api/keypairs/ed25519/classes/Ed25519PublicKey.md @@ -50,7 +50,7 @@ Return the base-64 representation of the public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toBase64`](../../../cryptography/classes/PublicKey.md#tobase64) -*** +--- ### toString() @@ -64,7 +64,7 @@ Return the base-64 representation of the public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toString`](../../../cryptography/classes/PublicKey.md#tostring) -*** +--- ### toIotaPublicKey() @@ -82,7 +82,7 @@ of the scheme flag with the raw bytes of the public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaPublicKey`](../../../cryptography/classes/PublicKey.md#toiotapublickey) -*** +--- ### verifyWithIntent() @@ -104,7 +104,7 @@ of the scheme flag with the raw bytes of the public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyWithIntent`](../../../cryptography/classes/PublicKey.md#verifywithintent) -*** +--- ### verifyPersonalMessage() @@ -126,7 +126,7 @@ Verifies that the signature is valid for for the provided PersonalMessage [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyPersonalMessage`](../../../cryptography/classes/PublicKey.md#verifypersonalmessage) -*** +--- ### verifyTransaction() @@ -148,7 +148,7 @@ Verifies that the signature is valid for for the provided Transaction [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyTransaction`](../../../cryptography/classes/PublicKey.md#verifytransaction) -*** +--- ### toIotaBytes() @@ -165,7 +165,7 @@ prefixed with the signature scheme flag [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaBytes`](../../../cryptography/classes/PublicKey.md#toiotabytes) -*** +--- ### toIotaBytesForAddress() @@ -183,7 +183,7 @@ signature scheme is ED25519, no prefix is set. [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaBytesForAddress`](../../../cryptography/classes/PublicKey.md#toiotabytesforaddress) -*** +--- ### toIotaAddress() @@ -199,7 +199,7 @@ Return the IOTA address associated with this Ed25519 public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaAddress`](../../../cryptography/classes/PublicKey.md#toiotaaddress) -*** +--- ### equals() @@ -219,7 +219,7 @@ Checks if two Ed25519 public keys are equal [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`equals`](../../../cryptography/classes/PublicKey.md#equals) -*** +--- ### toRawBytes() @@ -235,7 +235,7 @@ Return the byte array representation of the Ed25519 public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toRawBytes`](../../../cryptography/classes/PublicKey.md#torawbytes) -*** +--- ### flag() @@ -251,7 +251,7 @@ Return the IOTA address associated with this Ed25519 public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`flag`](../../../cryptography/classes/PublicKey.md#flag) -*** +--- ### verify() diff --git a/docs/content/ts-sdk/api/keypairs/ed25519/interfaces/Ed25519KeypairData.md b/docs/content/ts-sdk/api/keypairs/ed25519/interfaces/Ed25519KeypairData.md index 2041757a768..8a91d7a4c6a 100644 --- a/docs/content/ts-sdk/api/keypairs/ed25519/interfaces/Ed25519KeypairData.md +++ b/docs/content/ts-sdk/api/keypairs/ed25519/interfaces/Ed25519KeypairData.md @@ -10,7 +10,7 @@ key and the last 32 bytes is the public key. > **publicKey**: `Uint8Array` -*** +--- ### secretKey diff --git a/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1Keypair.md b/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1Keypair.md index c9d978b40fb..ebf396ad00e 100644 --- a/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1Keypair.md +++ b/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1Keypair.md @@ -52,7 +52,7 @@ it ensures that a signed message is tied to a specific purpose and domain separa [`Keypair`](../../../cryptography/classes/Keypair.md).[`signWithIntent`](../../../cryptography/classes/Keypair.md#signwithintent) -*** +--- ### signTransaction() @@ -72,7 +72,7 @@ Signs provided transaction by calling `signWithIntent()` with a `TransactionData [`Keypair`](../../../cryptography/classes/Keypair.md).[`signTransaction`](../../../cryptography/classes/Keypair.md#signtransaction) -*** +--- ### signPersonalMessage() @@ -100,7 +100,7 @@ Signs provided personal message by calling `signWithIntent()` with a `PersonalMe [`Keypair`](../../../cryptography/classes/Keypair.md).[`signPersonalMessage`](../../../cryptography/classes/Keypair.md#signpersonalmessage) -*** +--- ### toIotaAddress() @@ -114,7 +114,7 @@ Signs provided personal message by calling `signWithIntent()` with a `PersonalMe [`Keypair`](../../../cryptography/classes/Keypair.md).[`toIotaAddress`](../../../cryptography/classes/Keypair.md#toiotaaddress) -*** +--- ### getKeyScheme() @@ -130,7 +130,7 @@ Get the key scheme of the keypair Secp256k1 [`Keypair`](../../../cryptography/classes/Keypair.md).[`getKeyScheme`](../../../cryptography/classes/Keypair.md#getkeyscheme) -*** +--- ### generate() @@ -142,7 +142,7 @@ Generate a new random keypair [`Secp256k1Keypair`](Secp256k1Keypair.md) -*** +--- ### fromSecretKey() @@ -172,7 +172,7 @@ secret key byte array error if the provided secret key is invalid and validation is not skipped. -*** +--- ### fromSeed() @@ -190,7 +190,7 @@ seed byte array [`Secp256k1Keypair`](Secp256k1Keypair.md) -*** +--- ### getPublicKey() @@ -206,7 +206,7 @@ The public key for this keypair [`Keypair`](../../../cryptography/classes/Keypair.md).[`getPublicKey`](../../../cryptography/classes/Keypair.md#getpublickey) -*** +--- ### getSecretKey() @@ -222,7 +222,7 @@ The Bech32 secret key string for this Secp256k1 keypair [`Keypair`](../../../cryptography/classes/Keypair.md).[`getSecretKey`](../../../cryptography/classes/Keypair.md#getsecretkey) -*** +--- ### sign() @@ -242,7 +242,7 @@ Return the signature for the provided data. [`Keypair`](../../../cryptography/classes/Keypair.md).[`sign`](../../../cryptography/classes/Keypair.md#sign) -*** +--- ### deriveKeypair() diff --git a/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1PublicKey.md b/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1PublicKey.md index bf2b486f915..d7ee0719526 100644 --- a/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1PublicKey.md +++ b/docs/content/ts-sdk/api/keypairs/secp256k1/classes/Secp256k1PublicKey.md @@ -50,7 +50,7 @@ Return the base-64 representation of the public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toBase64`](../../../cryptography/classes/PublicKey.md#tobase64) -*** +--- ### toString() @@ -64,7 +64,7 @@ Return the base-64 representation of the public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toString`](../../../cryptography/classes/PublicKey.md#tostring) -*** +--- ### toIotaPublicKey() @@ -82,7 +82,7 @@ of the scheme flag with the raw bytes of the public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaPublicKey`](../../../cryptography/classes/PublicKey.md#toiotapublickey) -*** +--- ### verifyWithIntent() @@ -104,7 +104,7 @@ of the scheme flag with the raw bytes of the public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyWithIntent`](../../../cryptography/classes/PublicKey.md#verifywithintent) -*** +--- ### verifyPersonalMessage() @@ -126,7 +126,7 @@ Verifies that the signature is valid for for the provided PersonalMessage [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyPersonalMessage`](../../../cryptography/classes/PublicKey.md#verifypersonalmessage) -*** +--- ### verifyTransaction() @@ -148,7 +148,7 @@ Verifies that the signature is valid for for the provided Transaction [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`verifyTransaction`](../../../cryptography/classes/PublicKey.md#verifytransaction) -*** +--- ### toIotaBytes() @@ -165,7 +165,7 @@ prefixed with the signature scheme flag [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaBytes`](../../../cryptography/classes/PublicKey.md#toiotabytes) -*** +--- ### toIotaBytesForAddress() @@ -183,7 +183,7 @@ signature scheme is ED25519, no prefix is set. [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaBytesForAddress`](../../../cryptography/classes/PublicKey.md#toiotabytesforaddress) -*** +--- ### toIotaAddress() @@ -199,7 +199,7 @@ Return the IOTA address associated with this Ed25519 public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toIotaAddress`](../../../cryptography/classes/PublicKey.md#toiotaaddress) -*** +--- ### equals() @@ -219,7 +219,7 @@ Checks if two Secp256k1 public keys are equal [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`equals`](../../../cryptography/classes/PublicKey.md#equals) -*** +--- ### toRawBytes() @@ -235,7 +235,7 @@ Return the byte array representation of the Secp256k1 public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`toRawBytes`](../../../cryptography/classes/PublicKey.md#torawbytes) -*** +--- ### flag() @@ -251,7 +251,7 @@ Return the IOTA address associated with this Secp256k1 public key [`PublicKey`](../../../cryptography/classes/PublicKey.md).[`flag`](../../../cryptography/classes/PublicKey.md#flag) -*** +--- ### verify() diff --git a/docs/content/ts-sdk/api/keypairs/secp256k1/index.md b/docs/content/ts-sdk/api/keypairs/secp256k1/index.md index 5167f383dd7..128c2524bf9 100644 --- a/docs/content/ts-sdk/api/keypairs/secp256k1/index.md +++ b/docs/content/ts-sdk/api/keypairs/secp256k1/index.md @@ -6,19 +6,19 @@ Re-exports [DEFAULT_SECP256K1_DERIVATION_PATH](variables/DEFAULT_SECP256K1_DERIVATION_PATH.md) -*** +--- ### Secp256k1Keypair Re-exports [Secp256k1Keypair](classes/Secp256k1Keypair.md) -*** +--- ### Secp256k1KeypairData Re-exports [Secp256k1KeypairData](interfaces/Secp256k1KeypairData.md) -*** +--- ### Secp256k1PublicKey diff --git a/docs/content/ts-sdk/api/keypairs/secp256k1/interfaces/Secp256k1KeypairData.md b/docs/content/ts-sdk/api/keypairs/secp256k1/interfaces/Secp256k1KeypairData.md index c6761ef2a8b..15128be2f2a 100644 --- a/docs/content/ts-sdk/api/keypairs/secp256k1/interfaces/Secp256k1KeypairData.md +++ b/docs/content/ts-sdk/api/keypairs/secp256k1/interfaces/Secp256k1KeypairData.md @@ -8,7 +8,7 @@ Secp256k1 Keypair data > **publicKey**: `Uint8Array` -*** +--- ### secretKey diff --git a/docs/content/ts-sdk/api/multisig/classes/MultiSigPublicKey.md b/docs/content/ts-sdk/api/multisig/classes/MultiSigPublicKey.md index 2190d11d77f..2a2439369c5 100644 --- a/docs/content/ts-sdk/api/multisig/classes/MultiSigPublicKey.md +++ b/docs/content/ts-sdk/api/multisig/classes/MultiSigPublicKey.md @@ -44,7 +44,7 @@ Return the base-64 representation of the public key [`PublicKey`](../../cryptography/classes/PublicKey.md).[`toBase64`](../../cryptography/classes/PublicKey.md#tobase64) -*** +--- ### toString() @@ -58,7 +58,7 @@ Return the base-64 representation of the public key [`PublicKey`](../../cryptography/classes/PublicKey.md).[`toString`](../../cryptography/classes/PublicKey.md#tostring) -*** +--- ### toIotaPublicKey() @@ -76,7 +76,7 @@ of the scheme flag with the raw bytes of the public key [`PublicKey`](../../cryptography/classes/PublicKey.md).[`toIotaPublicKey`](../../cryptography/classes/PublicKey.md#toiotapublickey) -*** +--- ### verifyWithIntent() @@ -98,7 +98,7 @@ of the scheme flag with the raw bytes of the public key [`PublicKey`](../../cryptography/classes/PublicKey.md).[`verifyWithIntent`](../../cryptography/classes/PublicKey.md#verifywithintent) -*** +--- ### verifyPersonalMessage() @@ -120,7 +120,7 @@ Verifies that the signature is valid for for the provided PersonalMessage [`PublicKey`](../../cryptography/classes/PublicKey.md).[`verifyPersonalMessage`](../../cryptography/classes/PublicKey.md#verifypersonalmessage) -*** +--- ### verifyTransaction() @@ -142,7 +142,7 @@ Verifies that the signature is valid for for the provided Transaction [`PublicKey`](../../cryptography/classes/PublicKey.md).[`verifyTransaction`](../../cryptography/classes/PublicKey.md#verifytransaction) -*** +--- ### toIotaBytes() @@ -159,7 +159,7 @@ prefixed with the signature scheme flag [`PublicKey`](../../cryptography/classes/PublicKey.md).[`toIotaBytes`](../../cryptography/classes/PublicKey.md#toiotabytes) -*** +--- ### toIotaBytesForAddress() @@ -177,7 +177,7 @@ signature scheme is ED25519, no prefix is set. [`PublicKey`](../../cryptography/classes/PublicKey.md).[`toIotaBytesForAddress`](../../cryptography/classes/PublicKey.md#toiotabytesforaddress) -*** +--- ### fromPublicKeys() @@ -197,7 +197,7 @@ A static method to create a new MultiSig publickey instance from a set of public [`MultiSigPublicKey`](MultiSigPublicKey.md) -*** +--- ### equals() @@ -217,7 +217,7 @@ Checks if two MultiSig public keys are equal [`PublicKey`](../../cryptography/classes/PublicKey.md).[`equals`](../../cryptography/classes/PublicKey.md#equals) -*** +--- ### toRawBytes() @@ -233,7 +233,7 @@ Return the byte array representation of the MultiSig public key [`PublicKey`](../../cryptography/classes/PublicKey.md).[`toRawBytes`](../../cryptography/classes/PublicKey.md#torawbytes) -*** +--- ### getPublicKeys() @@ -243,7 +243,7 @@ Return the byte array representation of the MultiSig public key `object`[] -*** +--- ### getThreshold() @@ -253,7 +253,7 @@ Return the byte array representation of the MultiSig public key `number` -*** +--- ### getSigner() @@ -267,7 +267,7 @@ Return the byte array representation of the MultiSig public key [`MultiSigSigner`](MultiSigSigner.md) -*** +--- ### toIotaAddress() @@ -283,7 +283,7 @@ Return the IOTA address associated with this MultiSig public key [`PublicKey`](../../cryptography/classes/PublicKey.md).[`toIotaAddress`](../../cryptography/classes/PublicKey.md#toiotaaddress) -*** +--- ### flag() @@ -299,7 +299,7 @@ Return the IOTA address associated with this MultiSig public key [`PublicKey`](../../cryptography/classes/PublicKey.md).[`flag`](../../cryptography/classes/PublicKey.md#flag) -*** +--- ### verify() @@ -321,7 +321,7 @@ Verifies that the signature is valid for for the provided message [`PublicKey`](../../cryptography/classes/PublicKey.md).[`verify`](../../cryptography/classes/PublicKey.md#verify) -*** +--- ### combinePartialSignatures() diff --git a/docs/content/ts-sdk/api/multisig/classes/MultiSigSigner.md b/docs/content/ts-sdk/api/multisig/classes/MultiSigSigner.md index f5d10c6677a..fa42201acbd 100644 --- a/docs/content/ts-sdk/api/multisig/classes/MultiSigSigner.md +++ b/docs/content/ts-sdk/api/multisig/classes/MultiSigSigner.md @@ -49,7 +49,7 @@ it ensures that a signed message is tied to a specific purpose and domain separa [`Signer`](../../cryptography/classes/Signer.md).[`signWithIntent`](../../cryptography/classes/Signer.md#signwithintent) -*** +--- ### toIotaAddress() @@ -63,7 +63,7 @@ it ensures that a signed message is tied to a specific purpose and domain separa [`Signer`](../../cryptography/classes/Signer.md).[`toIotaAddress`](../../cryptography/classes/Signer.md#toiotaaddress) -*** +--- ### getKeyScheme() @@ -79,7 +79,7 @@ Get the key scheme of the keypair: Secp256k1 or ED25519 [`Signer`](../../cryptography/classes/Signer.md).[`getKeyScheme`](../../cryptography/classes/Signer.md#getkeyscheme) -*** +--- ### getPublicKey() @@ -95,7 +95,7 @@ The public key for this keypair [`Signer`](../../cryptography/classes/Signer.md).[`getPublicKey`](../../cryptography/classes/Signer.md#getpublickey) -*** +--- ### sign() @@ -113,7 +113,7 @@ The public key for this keypair [`Signer`](../../cryptography/classes/Signer.md).[`sign`](../../cryptography/classes/Signer.md#sign) -*** +--- ### signData() @@ -127,7 +127,7 @@ The public key for this keypair `never` -*** +--- ### signTransaction() @@ -155,7 +155,7 @@ Signs provided transaction by calling `signWithIntent()` with a `TransactionData [`Signer`](../../cryptography/classes/Signer.md).[`signTransaction`](../../cryptography/classes/Signer.md#signtransaction) -*** +--- ### signPersonalMessage() diff --git a/docs/content/ts-sdk/api/transactions/classes/AsyncCache.md b/docs/content/ts-sdk/api/transactions/classes/AsyncCache.md index 22cbc913383..36be0086784 100644 --- a/docs/content/ts-sdk/api/transactions/classes/AsyncCache.md +++ b/docs/content/ts-sdk/api/transactions/classes/AsyncCache.md @@ -18,7 +18,7 @@ #### Type Parameters -• **T** *extends* keyof `CacheEntryTypes` +• **T** _extends_ keyof `CacheEntryTypes` #### Parameters @@ -30,7 +30,7 @@ `Promise`\<`null` \| `CacheEntryTypes`\[`T`\]\> -*** +--- ### set() @@ -38,7 +38,7 @@ #### Type Parameters -• **T** *extends* keyof `CacheEntryTypes` +• **T** _extends_ keyof `CacheEntryTypes` #### Parameters @@ -52,7 +52,7 @@ `Promise`\<`void`\> -*** +--- ### delete() @@ -60,7 +60,7 @@ #### Type Parameters -• **T** *extends* keyof `CacheEntryTypes` +• **T** _extends_ keyof `CacheEntryTypes` #### Parameters @@ -72,7 +72,7 @@ `Promise`\<`void`\> -*** +--- ### clear() @@ -80,7 +80,7 @@ #### Type Parameters -• **T** *extends* keyof `CacheEntryTypes` +• **T** _extends_ keyof `CacheEntryTypes` #### Parameters @@ -90,7 +90,7 @@ `Promise`\<`void`\> -*** +--- ### getObject() @@ -104,7 +104,7 @@ `Promise`\<`null` \| `ObjectCacheEntry`\> -*** +--- ### getObjects() @@ -118,7 +118,7 @@ `Promise`\<(`null` \| `ObjectCacheEntry`)[]\> -*** +--- ### addObject() @@ -132,7 +132,7 @@ `Promise`\<`ObjectCacheEntry`\> -*** +--- ### addObjects() @@ -146,7 +146,7 @@ `Promise`\<`void`\> -*** +--- ### deleteObject() @@ -160,7 +160,7 @@ `Promise`\<`void`\> -*** +--- ### deleteObjects() @@ -174,7 +174,7 @@ `Promise`\<`void`\> -*** +--- ### getMoveFunctionDefinition() @@ -194,7 +194,7 @@ `Promise`\<`null` \| `MoveFunctionCacheEntry`\> -*** +--- ### addMoveFunctionDefinition() @@ -224,7 +224,7 @@ > **package**: `string` = `pkg` -*** +--- ### deleteMoveFunctionDefinition() @@ -244,7 +244,7 @@ `Promise`\<`void`\> -*** +--- ### getCustom() @@ -262,7 +262,7 @@ `Promise`\<`null` \| `T`\> -*** +--- ### setCustom() @@ -282,7 +282,7 @@ `Promise`\<`void`\> -*** +--- ### deleteCustom() diff --git a/docs/content/ts-sdk/api/transactions/classes/ObjectCache.md b/docs/content/ts-sdk/api/transactions/classes/ObjectCache.md index 099a6b9895c..9cad0a8a823 100644 --- a/docs/content/ts-sdk/api/transactions/classes/ObjectCache.md +++ b/docs/content/ts-sdk/api/transactions/classes/ObjectCache.md @@ -24,7 +24,7 @@ [`TransactionPlugin`](../type-aliases/TransactionPlugin.md) -*** +--- ### clear() @@ -34,7 +34,7 @@ `Promise`\<`void`\> -*** +--- ### getMoveFunctionDefinition() @@ -54,7 +54,7 @@ `Promise`\<`null` \| `MoveFunctionCacheEntry`\> -*** +--- ### getObjects() @@ -68,7 +68,7 @@ `Promise`\<(`null` \| `ObjectCacheEntry`)[]\> -*** +--- ### deleteObjects() @@ -82,7 +82,7 @@ `Promise`\<`void`\> -*** +--- ### clearOwnedObjects() @@ -92,7 +92,7 @@ `Promise`\<`void`\> -*** +--- ### clearCustom() @@ -102,7 +102,7 @@ `Promise`\<`void`\> -*** +--- ### getCustom() @@ -120,7 +120,7 @@ `Promise`\<`null` \| `T`\> -*** +--- ### setCustom() @@ -140,7 +140,7 @@ `Promise`\<`void`\> -*** +--- ### deleteCustom() @@ -154,7 +154,7 @@ `Promise`\<`void`\> -*** +--- ### applyEffects() diff --git a/docs/content/ts-sdk/api/transactions/classes/ParallelTransactionExecutor.md b/docs/content/ts-sdk/api/transactions/classes/ParallelTransactionExecutor.md index c4182666b3c..40be6ca8364 100644 --- a/docs/content/ts-sdk/api/transactions/classes/ParallelTransactionExecutor.md +++ b/docs/content/ts-sdk/api/transactions/classes/ParallelTransactionExecutor.md @@ -24,7 +24,7 @@ `Promise`\<`void`\> -*** +--- ### waitForLastTransaction() @@ -34,7 +34,7 @@ `Promise`\<`void`\> -*** +--- ### executeTransaction() diff --git a/docs/content/ts-sdk/api/transactions/classes/SerialTransactionExecutor.md b/docs/content/ts-sdk/api/transactions/classes/SerialTransactionExecutor.md index f2c5b29adb6..c1c7bff91c5 100644 --- a/docs/content/ts-sdk/api/transactions/classes/SerialTransactionExecutor.md +++ b/docs/content/ts-sdk/api/transactions/classes/SerialTransactionExecutor.md @@ -64,7 +64,7 @@ `Promise`\<[`void`, `void`]\> -*** +--- ### buildTransaction() @@ -78,7 +78,7 @@ `Promise`\<`Uint8Array`\> -*** +--- ### resetCache() @@ -88,7 +88,7 @@ `Promise`\<`void`\> -*** +--- ### waitForLastTransaction() @@ -98,7 +98,7 @@ `Promise`\<`void`\> -*** +--- ### executeTransaction() diff --git a/docs/content/ts-sdk/api/transactions/classes/Transaction.md b/docs/content/ts-sdk/api/transactions/classes/Transaction.md index 6b3315575d1..6ab53963495 100644 --- a/docs/content/ts-sdk/api/transactions/classes/Transaction.md +++ b/docs/content/ts-sdk/api/transactions/classes/Transaction.md @@ -168,7 +168,7 @@ Use `getData()` instead. > **transactions**: (`object` \| `object` \| `object` \| `object` \| `object` \| `object` \| `object`)[] -*** +--- ### pure @@ -182,11 +182,11 @@ Use `getData()` instead. ###### Type Parameters -• **T** *extends* `PureTypeName` +• **T** _extends_ `PureTypeName` ###### Parameters -• **type**: `T` *extends* `PureTypeName` ? `ValidPureTypeName`\<`T`\<`T`\>\> : `T` +• **type**: `T` _extends_ `PureTypeName` ? `ValidPureTypeName`\<`T`\<`T`\>\> : `T` • **value**: `ShapeFromPureTypeName`\<`T`\> @@ -311,7 +311,7 @@ is assumed to be raw bytes, and will be used directly. ###### Type Parameters -• **Type** *extends* `PureTypeName` +• **Type** _extends_ `PureTypeName` ###### Parameters @@ -327,7 +327,7 @@ is assumed to be raw bytes, and will be used directly. ###### Type Parameters -• **Type** *extends* `PureTypeName` +• **Type** _extends_ `PureTypeName` ###### Parameters @@ -339,7 +339,7 @@ is assumed to be raw bytes, and will be used directly. `object` \| `object` \| `object` \| `object` \| `object` -*** +--- ### gas @@ -378,7 +378,7 @@ Supports either a byte array, or base64-encoded bytes. [`Transaction`](Transaction.md) -*** +--- ### from() @@ -386,6 +386,7 @@ Supports either a byte array, or base64-encoded bytes. Converts from a serialized transaction format to a `Transaction` class. There are two supported serialized formats: + - A string returned from `Transaction#serialize`. The serialized format must be compatible, or it will throw an error. - A byte array (or base64-encoded bytes) containing BCS transaction data. @@ -397,7 +398,7 @@ There are two supported serialized formats: [`Transaction`](Transaction.md) -*** +--- ### registerGlobalSerializationPlugin() @@ -411,7 +412,7 @@ There are two supported serialized formats: `void` -*** +--- ### registerGlobalBuildPlugin() @@ -425,7 +426,7 @@ There are two supported serialized formats: `void` -*** +--- ### addSerializationPlugin() @@ -439,7 +440,7 @@ There are two supported serialized formats: `void` -*** +--- ### addBuildPlugin() @@ -453,7 +454,7 @@ There are two supported serialized formats: `void` -*** +--- ### addIntentResolver() @@ -469,7 +470,7 @@ There are two supported serialized formats: `void` -*** +--- ### setSender() @@ -483,7 +484,7 @@ There are two supported serialized formats: `void` -*** +--- ### setSenderIfNotSet() @@ -500,7 +501,7 @@ This is useful for sponsored transaction flows where the sender may not be the s `void` -*** +--- ### setExpiration() @@ -514,7 +515,7 @@ This is useful for sponsored transaction flows where the sender may not be the s `void` -*** +--- ### setGasPrice() @@ -528,7 +529,7 @@ This is useful for sponsored transaction flows where the sender may not be the s `void` -*** +--- ### setGasBudget() @@ -542,7 +543,7 @@ This is useful for sponsored transaction flows where the sender may not be the s `void` -*** +--- ### setGasBudgetIfNotSet() @@ -556,7 +557,7 @@ This is useful for sponsored transaction flows where the sender may not be the s `void` -*** +--- ### setGasOwner() @@ -570,7 +571,7 @@ This is useful for sponsored transaction flows where the sender may not be the s `void` -*** +--- ### setGasPayment() @@ -584,7 +585,7 @@ This is useful for sponsored transaction flows where the sender may not be the s `void` -*** +--- ### getData() @@ -636,7 +637,7 @@ Get a snapshot of the transaction data, in JSON form: > **commands**: `EnumOutputShapeWithKeys`\<`object`, `"MoveCall"` \| `"TransferObjects"` \| `"SplitCoins"` \| `"MergeCoins"` \| `"Publish"` \| `"MakeMoveVec"` \| `"Upgrade"` \| `"$Intent"`\>[] -*** +--- ### objectRef() @@ -665,7 +666,7 @@ If you only have an object ID, use `builder.object(id)` instead. > `optional` **type**: `"object"` -*** +--- ### receivingRef() @@ -694,7 +695,7 @@ If you only have an object ID, use `builder.object(id)` instead. > `optional` **type**: `"object"` -*** +--- ### sharedObjectRef() @@ -723,7 +724,7 @@ If you only have an object ID, use `builder.object(id)` instead. > `optional` **type**: `"object"` -*** +--- ### add() @@ -743,7 +744,7 @@ Add a transaction to the transaction `T` -*** +--- ### splitCoins() @@ -759,7 +760,7 @@ Add a transaction to the transaction [`TransactionResult`](../type-aliases/TransactionResult.md) -*** +--- ### mergeCoins() @@ -775,7 +776,7 @@ Add a transaction to the transaction [`TransactionResult`](../type-aliases/TransactionResult.md) -*** +--- ### publish() @@ -793,7 +794,7 @@ Add a transaction to the transaction [`TransactionResult`](../type-aliases/TransactionResult.md) -*** +--- ### upgrade() @@ -815,7 +816,7 @@ Add a transaction to the transaction [`TransactionResult`](../type-aliases/TransactionResult.md) -*** +--- ### moveCall() @@ -829,7 +830,7 @@ Add a transaction to the transaction [`TransactionResult`](../type-aliases/TransactionResult.md) -*** +--- ### transferObjects() @@ -845,7 +846,7 @@ Add a transaction to the transaction [`TransactionResult`](../type-aliases/TransactionResult.md) -*** +--- ### makeMoveVec() @@ -863,7 +864,7 @@ Add a transaction to the transaction [`TransactionResult`](../type-aliases/TransactionResult.md) -*** +--- ### ~~serialize()~~ @@ -878,7 +879,7 @@ Add a transaction to the transaction Use toJSON instead. For synchronous serialization, you can use `getData()` -*** +--- ### toJSON() @@ -892,7 +893,7 @@ For synchronous serialization, you can use `getData()` `Promise`\<`string`\> -*** +--- ### sign() @@ -908,7 +909,7 @@ Build the transaction to BCS bytes, and sign it with the provided keypair. `Promise`\<[`SignatureWithBytes`](../../cryptography/interfaces/SignatureWithBytes.md)\> -*** +--- ### build() @@ -924,7 +925,7 @@ Build the transaction to BCS bytes. `Promise`\<`Uint8Array`\> -*** +--- ### getDigest() @@ -942,7 +943,7 @@ Derive transaction digest `Promise`\<`string`\> -*** +--- ### prepareForSerialization() diff --git a/docs/content/ts-sdk/api/transactions/classes/TransactionDataBuilder.md b/docs/content/ts-sdk/api/transactions/classes/TransactionDataBuilder.md index 6e6fcd47268..69f97d0aa15 100644 --- a/docs/content/ts-sdk/api/transactions/classes/TransactionDataBuilder.md +++ b/docs/content/ts-sdk/api/transactions/classes/TransactionDataBuilder.md @@ -48,7 +48,7 @@ `TransactionData.version` -*** +--- ### sender @@ -58,7 +58,7 @@ `TransactionData.sender` -*** +--- ### expiration @@ -68,7 +68,7 @@ `TransactionData.expiration` -*** +--- ### gasData @@ -94,7 +94,7 @@ `TransactionData.gasData` -*** +--- ### inputs @@ -104,7 +104,7 @@ `TransactionData.inputs` -*** +--- ### commands @@ -176,7 +176,7 @@ [`TransactionDataBuilder`](TransactionDataBuilder.md) -*** +--- ### fromBytes() @@ -190,7 +190,7 @@ [`TransactionDataBuilder`](TransactionDataBuilder.md) -*** +--- ### restore() @@ -204,7 +204,7 @@ [`TransactionDataBuilder`](TransactionDataBuilder.md) -*** +--- ### getDigestFromBytes() @@ -224,7 +224,7 @@ BCS serialized transaction data transaction digest. -*** +--- ### build() @@ -252,7 +252,7 @@ transaction digest. `Uint8Array` -*** +--- ### addInput() @@ -260,7 +260,7 @@ transaction digest. #### Type Parameters -• **T** *extends* `"object"` \| `"pure"` +• **T** _extends_ `"object"` \| `"pure"` #### Parameters @@ -284,7 +284,7 @@ transaction digest. > **$kind**: `"Input"` -*** +--- ### getInputUses() @@ -300,7 +300,7 @@ transaction digest. `void` -*** +--- ### mapArguments() @@ -314,7 +314,7 @@ transaction digest. `void` -*** +--- ### replaceCommand() @@ -330,7 +330,7 @@ transaction digest. `void` -*** +--- ### getDigest() @@ -340,7 +340,7 @@ transaction digest. `string` -*** +--- ### snapshot() diff --git a/docs/content/ts-sdk/api/transactions/enumerations/UpgradePolicy.md b/docs/content/ts-sdk/api/transactions/enumerations/UpgradePolicy.md index c5573562315..0c256285a35 100644 --- a/docs/content/ts-sdk/api/transactions/enumerations/UpgradePolicy.md +++ b/docs/content/ts-sdk/api/transactions/enumerations/UpgradePolicy.md @@ -6,13 +6,13 @@ > **COMPATIBLE**: `0` -*** +--- ### ADDITIVE > **ADDITIVE**: `128` -*** +--- ### DEP\_ONLY diff --git a/docs/content/ts-sdk/api/transactions/interfaces/BuildTransactionOptions.md b/docs/content/ts-sdk/api/transactions/interfaces/BuildTransactionOptions.md index efa7b0af288..b3595d8c682 100644 --- a/docs/content/ts-sdk/api/transactions/interfaces/BuildTransactionOptions.md +++ b/docs/content/ts-sdk/api/transactions/interfaces/BuildTransactionOptions.md @@ -10,7 +10,7 @@ > `optional` **client**: [`IotaClient`](../../client/classes/IotaClient.md) -*** +--- ### onlyTransactionKind? diff --git a/docs/content/ts-sdk/api/transactions/interfaces/ParallelTransactionExecutorOptions.md b/docs/content/ts-sdk/api/transactions/interfaces/ParallelTransactionExecutorOptions.md index 1d44ed4b9da..a2a896fcdf1 100644 --- a/docs/content/ts-sdk/api/transactions/interfaces/ParallelTransactionExecutorOptions.md +++ b/docs/content/ts-sdk/api/transactions/interfaces/ParallelTransactionExecutorOptions.md @@ -14,19 +14,19 @@ `Omit.cache` -*** +--- ### client > **client**: [`IotaClient`](../../client/classes/IotaClient.md) -*** +--- ### signer > **signer**: [`Signer`](../../cryptography/classes/Signer.md) -*** +--- ### coinBatchSize? @@ -34,7 +34,7 @@ The number of coins to create in a batch when refilling the gas pool -*** +--- ### initialCoinBalance? @@ -42,15 +42,15 @@ The number of coins to create in a batch when refilling the gas pool The initial balance of each coin created for the gas pool -*** +--- ### minimumCoinBalance? > `optional` **minimumCoinBalance**: `bigint` -The minimum balance of a coin that can be reused for future transactions. If the gasCoin is below this value, it will be used when refilling the gasPool +The minimum balance of a coin that can be reused for future transactions. If the gasCoin is below this value, it will be used when refilling the gasPool -*** +--- ### defaultGasBudget? @@ -58,7 +58,7 @@ The minimum balance of a coin that can be reused for future transactions. If th The gasBudget to use if the transaction has not defined it's own gasBudget, defaults to `minimumCoinBalance` -*** +--- ### epochBoundaryWindow? @@ -68,7 +68,7 @@ Time to wait before/after the expected epoch boundary before re-fetching the gas Building transactions will be paused for up to 2x this duration around each epoch boundary to ensure the gas price is up-to-date for the next epoch. -*** +--- ### maxPoolSize? @@ -76,7 +76,7 @@ gas price is up-to-date for the next epoch. The maximum number of transactions that can be execute in parallel, this also determines the maximum number of gas coins that will be created -*** +--- ### sourceCoins? diff --git a/docs/content/ts-sdk/api/transactions/interfaces/SerializeTransactionOptions.md b/docs/content/ts-sdk/api/transactions/interfaces/SerializeTransactionOptions.md index cabd6813024..f49846b7d96 100644 --- a/docs/content/ts-sdk/api/transactions/interfaces/SerializeTransactionOptions.md +++ b/docs/content/ts-sdk/api/transactions/interfaces/SerializeTransactionOptions.md @@ -14,7 +14,7 @@ [`BuildTransactionOptions`](BuildTransactionOptions.md).[`client`](BuildTransactionOptions.md#client) -*** +--- ### onlyTransactionKind? @@ -24,7 +24,7 @@ [`BuildTransactionOptions`](BuildTransactionOptions.md).[`onlyTransactionKind`](BuildTransactionOptions.md#onlytransactionkind) -*** +--- ### supportedIntents? diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/Argument.md b/docs/content/ts-sdk/api/transactions/type-aliases/Argument.md index 335d7970fa8..c85eb152efd 100644 --- a/docs/content/ts-sdk/api/transactions/type-aliases/Argument.md +++ b/docs/content/ts-sdk/api/transactions/type-aliases/Argument.md @@ -1,3 +1,3 @@ # Type Alias: Argument -> **Argument**: `InferOutput`\<*typeof* [`Argument`](../variables/Argument.md)\> +> **Argument**: `InferOutput`\<_typeof_ [`Argument`](../variables/Argument.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/CallArg.md b/docs/content/ts-sdk/api/transactions/type-aliases/CallArg.md index 63642e5fea7..4465aae5475 100644 --- a/docs/content/ts-sdk/api/transactions/type-aliases/CallArg.md +++ b/docs/content/ts-sdk/api/transactions/type-aliases/CallArg.md @@ -1,3 +1,3 @@ # Type Alias: CallArg -> **CallArg**: `InferOutput`\<*typeof* `CallArg`\> +> **CallArg**: `InferOutput`\<_typeof_ `CallArg`\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/GasData.md b/docs/content/ts-sdk/api/transactions/type-aliases/GasData.md index e9d4d81ff3b..b6305390618 100644 --- a/docs/content/ts-sdk/api/transactions/type-aliases/GasData.md +++ b/docs/content/ts-sdk/api/transactions/type-aliases/GasData.md @@ -1,3 +1,3 @@ # Type Alias: GasData -> **GasData**: `InferOutput`\<*typeof* [`GasData`](../variables/GasData.md)\> +> **GasData**: `InferOutput`\<_typeof_ [`GasData`](../variables/GasData.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/ObjectRef.md b/docs/content/ts-sdk/api/transactions/type-aliases/ObjectRef.md index 43756193c17..8d46548255d 100644 --- a/docs/content/ts-sdk/api/transactions/type-aliases/ObjectRef.md +++ b/docs/content/ts-sdk/api/transactions/type-aliases/ObjectRef.md @@ -1,3 +1,3 @@ # Type Alias: ObjectRef -> **ObjectRef**: `InferOutput`\<*typeof* [`ObjectRef`](../variables/ObjectRef.md)\> +> **ObjectRef**: `InferOutput`\<_typeof_ [`ObjectRef`](../variables/ObjectRef.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignature.md b/docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignature.md index 7835450d923..3b7474bf7bc 100644 --- a/docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignature.md +++ b/docs/content/ts-sdk/api/transactions/type-aliases/OpenMoveTypeSignature.md @@ -1,3 +1,3 @@ # Type Alias: OpenMoveTypeSignature -> **OpenMoveTypeSignature**: `InferOutput`\<*typeof* [`OpenMoveTypeSignature`](../variables/OpenMoveTypeSignature.md)\> +> **OpenMoveTypeSignature**: `InferOutput`\<_typeof_ [`OpenMoveTypeSignature`](../variables/OpenMoveTypeSignature.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV1.md b/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV1.md index b4ba3c82199..19084da2839 100644 --- a/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV1.md +++ b/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV1.md @@ -1,3 +1,3 @@ # Type Alias: SerializedTransactionDataV1 -> **SerializedTransactionDataV1**: `InferOutput`\<*typeof* [`SerializedTransactionDataV1`](../variables/SerializedTransactionDataV1.md)\> +> **SerializedTransactionDataV1**: `InferOutput`\<_typeof_ [`SerializedTransactionDataV1`](../variables/SerializedTransactionDataV1.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV2.md b/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV2.md index a7063c200cf..38f7ed0e41e 100644 --- a/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV2.md +++ b/docs/content/ts-sdk/api/transactions/type-aliases/SerializedTransactionDataV2.md @@ -1,3 +1,3 @@ # Type Alias: SerializedTransactionDataV2 -> **SerializedTransactionDataV2**: `InferOutput`\<*typeof* [`SerializedTransactionDataV2`](../variables/SerializedTransactionDataV2.md)\> +> **SerializedTransactionDataV2**: `InferOutput`\<_typeof_ [`SerializedTransactionDataV2`](../variables/SerializedTransactionDataV2.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionArgument.md b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionArgument.md index 65ddee25f13..836b8760ba0 100644 --- a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionArgument.md +++ b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionArgument.md @@ -1,3 +1,3 @@ # Type Alias: TransactionArgument -> **TransactionArgument**: `InferInput`\<*typeof* [`Argument`](../variables/Argument.md)\> \| (`tx`) => `InferInput`\<*typeof* [`Argument`](../variables/Argument.md)\> +> **TransactionArgument**: `InferInput`\<_typeof_ [`Argument`](../variables/Argument.md)\> \| (`tx`) => `InferInput`\<_typeof_ [`Argument`](../variables/Argument.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionData.md b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionData.md index 7532086ba0f..fd3405985e4 100644 --- a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionData.md +++ b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionData.md @@ -1,3 +1,3 @@ # Type Alias: TransactionData -> **TransactionData**: `InferOutput`\<*typeof* [`TransactionData`](../variables/TransactionData.md)\> +> **TransactionData**: `InferOutput`\<_typeof_ [`TransactionData`](../variables/TransactionData.md)\> diff --git a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectArgument.md b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectArgument.md index 008aec5ade3..de01e6e364e 100644 --- a/docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectArgument.md +++ b/docs/content/ts-sdk/api/transactions/type-aliases/TransactionObjectArgument.md @@ -1,3 +1,3 @@ # Type Alias: TransactionObjectArgument -> **TransactionObjectArgument**: `Exclude`\<`InferInput`\<*typeof* [`Argument`](../variables/Argument.md)\>, `object`\> \| (`tx`) => `Exclude`\<`InferInput`\<*typeof* [`Argument`](../variables/Argument.md)\>, `object`\> +> **TransactionObjectArgument**: `Exclude`\<`InferInput`\<_typeof_ [`Argument`](../variables/Argument.md)\>, `object`\> \| (`tx`) => `Exclude`\<`InferInput`\<_typeof_ [`Argument`](../variables/Argument.md)\>, `object`\> diff --git a/docs/content/ts-sdk/api/transactions/variables/Arguments.md b/docs/content/ts-sdk/api/transactions/variables/Arguments.md index 94942ef81b2..b9757be7565 100644 --- a/docs/content/ts-sdk/api/transactions/variables/Arguments.md +++ b/docs/content/ts-sdk/api/transactions/variables/Arguments.md @@ -10,11 +10,11 @@ #### Type Parameters -• **T** *extends* `PureTypeName` +• **T** _extends_ `PureTypeName` #### Parameters -• **type**: `T` *extends* `PureTypeName` ? `ValidPureTypeName`\<`T`\<`T`\>\> : `T` +• **type**: `T` _extends_ `PureTypeName` ? `ValidPureTypeName`\<`T`\<`T`\>\> : `T` • **value**: `ShapeFromPureTypeName`\<`T`\> @@ -219,7 +219,7 @@ is assumed to be raw bytes, and will be used directly. #### Type Parameters -• **Type** *extends* `PureTypeName` +• **Type** _extends_ `PureTypeName` #### Parameters @@ -243,7 +243,7 @@ is assumed to be raw bytes, and will be used directly. #### Type Parameters -• **Type** *extends* `PureTypeName` +• **Type** _extends_ `PureTypeName` #### Parameters diff --git a/docs/content/ts-sdk/api/utils/functions/normalizeIotaAddress.md b/docs/content/ts-sdk/api/utils/functions/normalizeIotaAddress.md index 85c8a7cf127..62b6dde0733 100644 --- a/docs/content/ts-sdk/api/utils/functions/normalizeIotaAddress.md +++ b/docs/content/ts-sdk/api/utils/functions/normalizeIotaAddress.md @@ -3,6 +3,7 @@ > **normalizeIotaAddress**(`value`, `forceAdd0x`): `string` Perform the following operations: + 1. Make the address lower case 2. Prepend `0x` if the string does not start with `0x`. 3. Add more zeros if the length of the address(excluding `0x`) is less than `IOTA_ADDRESS_LENGTH` From 8181124e6d0553e54c3a9d0632412fd15cd57db9 Mon Sep 17 00:00:00 2001 From: Vivek Jain Date: Mon, 25 Nov 2024 18:00:12 +0530 Subject: [PATCH 3/6] Add plugin-client-redirects package --- docs/site/package.json | 1 + pnpm-lock.yaml | 43 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/docs/site/package.json b/docs/site/package.json index 28d0b5926e7..d9e6feeef75 100644 --- a/docs/site/package.json +++ b/docs/site/package.json @@ -22,6 +22,7 @@ "@amplitude/analytics-browser": "^1.10.3", "@docsearch/react": "^3.6.0", "@docusaurus/core": "3.5.2", + "@docusaurus/plugin-client-redirects": "^3.5.2", "@docusaurus/preset-classic": "3.5.2", "@docusaurus/remark-plugin-npm2yarn": "^3.5.2", "@docusaurus/theme-common": "^3.5.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1949708d445..ee00651c8f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1302,6 +1302,9 @@ importers: '@docusaurus/core': specifier: 3.5.2 version: 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-client-redirects': + specifier: ^3.5.2 + version: 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/preset-classic': specifier: 3.5.2 version: 3.5.2(@algolia/client-search@4.24.0)(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) @@ -3338,6 +3341,13 @@ packages: react: '*' react-dom: '*' + '@docusaurus/plugin-client-redirects@3.5.2': + resolution: {integrity: sha512-GMU0ZNoVG1DEsZlBbwLPdh0iwibrVZiRfmdppvX17SnByCVP74mb/Nne7Ss7ALgxQLtM4IHbXi8ij90VVjAJ+Q==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + '@docusaurus/plugin-content-blog@3.5.2': resolution: {integrity: sha512-R7ghWnMvjSf+aeNDH0K4fjyQnt5L0KzUEnUhmf1e3jZrv3wogeytZNN6n7X8yHcMsuZHPOrctQhXWnmxu+IRRg==} engines: {node: '>=18.0'} @@ -18799,6 +18809,39 @@ snapshots: - uglify-js - webpack-cli + '@docusaurus/plugin-client-redirects@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + dependencies: + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/logger': 3.5.2 + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + eta: 2.2.0 + fs-extra: 11.2.0 + lodash: 4.17.21 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.7.0 + transitivePeerDependencies: + - '@docusaurus/types' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + '@docusaurus/plugin-content-blog@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) From 7e4090cf43f7103516ff3fcf875773e625a4301c Mon Sep 17 00:00:00 2001 From: Vivek Jain Date: Fri, 13 Dec 2024 14:45:35 +0530 Subject: [PATCH 4/6] Minor fixes --- docs/content/developer/dev-cheat-sheet.mdx | 2 +- docs/content/sidebars/ts-sdk.js | 2 +- docs/site/docusaurus.config.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/content/developer/dev-cheat-sheet.mdx b/docs/content/developer/dev-cheat-sheet.mdx index aa067459d45..71d1fb88b31 100644 --- a/docs/content/developer/dev-cheat-sheet.mdx +++ b/docs/content/developer/dev-cheat-sheet.mdx @@ -36,7 +36,7 @@ Quick reference on best practices for IOTA Network developers. | **Topic** | **Description** | |-|-| -| **Optimal performance** | For optimal performance and data consistency, apps should use the wallet's [`signTransactionBlock`](../references/ts-sdk/dapp-kit/index.mdx) API to sign transactions and then submit them via [`execute_transactionBlock`](/iota-api-ref#iota_executetransactionblock) on the app's full node. This ensures immediate read-after-write consistency, as the app's full node reflects writes instantly, avoiding delays from checkpointing. | +| **Optimal performance** | For optimal performance and data consistency, apps should use the wallet's [`signTransactionBlock`](../ts-sdk/dapp-kit/index.mdx) API to sign transactions and then submit them via [`execute_transactionBlock`](/iota-api-ref#iota_executetransactionblock) on the app's full node. This ensures immediate read-after-write consistency, as the app's full node reflects writes instantly, avoiding delays from checkpointing. | | **Lower latency** | For lower latency, use [`executeTransactionBlock`](/iota-api-ref#iota_executetransactionblock) with `"showEffects": false` and `"showEvents": false` if your app only needs confirmation of a transaction without immediate access to its effects or events.| | **Local cache** | Apps should implement a local cache for frequently read data rather than over-fetching from the full node. | | **Transaction cache**| Whenever possible,use programmable transaction blocks to compose on-chain functionality instead of deploying new contracts, enabling batching and lowering gas fees. | diff --git a/docs/content/sidebars/ts-sdk.js b/docs/content/sidebars/ts-sdk.js index ac6e746e291..66c95ad3456 100644 --- a/docs/content/sidebars/ts-sdk.js +++ b/docs/content/sidebars/ts-sdk.js @@ -3,7 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 import typedocSidebar from '../ts-sdk/api/typedoc-sidebar.cjs'; -const references = [ +const tsSDK = [ { type: 'category', label: 'Typescript SDK', diff --git a/docs/site/docusaurus.config.js b/docs/site/docusaurus.config.js index 4eddae4d567..221d7023d76 100644 --- a/docs/site/docusaurus.config.js +++ b/docs/site/docusaurus.config.js @@ -252,7 +252,7 @@ const config = { }, { label: "TS SDK", - to: "references/ts-sdk/typescript/", + to: "ts-sdk/typescript/", }, { label: "IOTA Identity", From 64dee6f3cc7c212e8eb97306291f2290581ac28e Mon Sep 17 00:00:00 2001 From: Vivek Jain Date: Fri, 13 Dec 2024 15:49:26 +0530 Subject: [PATCH 5/6] Add client-redirect --- docs/site/docusaurus.config.js | 208 +++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) diff --git a/docs/site/docusaurus.config.js b/docs/site/docusaurus.config.js index 221d7023d76..f4034a646cf 100644 --- a/docs/site/docusaurus.config.js +++ b/docs/site/docusaurus.config.js @@ -108,6 +108,214 @@ const config = { intentionallyNotExported: [], }, ], + [ + '@docusaurus/plugin-client-redirects', + { + createRedirects(existingPath) { + const redirects = [ + { + to: 'ts-sdk/typescript/install', + from: '/references/ts-sdk/typescript/install', + }, + { + to: 'ts-sdk/typescript/hello-iota', + from: '/references/ts-sdk/typescript/hello-iota', + }, + { + to: 'ts-sdk/typescript/faucet', + from: '/references/ts-sdk/typescript/faucet', + }, + { + to: 'ts-sdk/typescript/iota-client', + from: '/references/ts-sdk/typescript/iota-client', + }, + { + to: 'ts-sdk/typescript/graphql', + from: '/references/ts-sdk/typescript/graphql', + }, + { + to: 'ts-sdk/typescript/transaction-building/basics', + from: '/references/ts-sdk/typescript/transaction-building/basics', + }, + { + to: 'ts-sdk/typescript/transaction-building/gas', + from: '/references/ts-sdk/typescript/transaction-building/gas', + }, + { + to: 'ts-sdk/typescript/transaction-building/sponsored-transactions', + from: '/references/ts-sdk/typescript/transaction-building/sponsored-transactions', + }, + { + to: 'ts-sdk/typescript/transaction-building/offline', + from: '/references/ts-sdk/typescript/transaction-building/offline', + }, + { + to: 'ts-sdk/typescript/cryptography/keypairs', + from: '/references/ts-sdk/typescript/cryptography/keypairs', + }, + { + to: 'ts-sdk/typescript/cryptography/multisig', + from: '/references/ts-sdk/typescript/cryptography/multisig', + }, + { + to: 'ts-sdk/typescript/utils', + from: '/references/ts-sdk/typescript/utils', + }, + { + to: 'ts-sdk/typescript/bcs', + from: '/references/ts-sdk/typescript/bcs', + }, + { + to: 'ts-sdk/typescript/executors', + from: '/references/ts-sdk/typescript/executors', + }, + { + to: 'ts-sdk/typescript/plugins', + from: '/references/ts-sdk/typescript/plugins', + }, + { + to: 'ts-sdk/typescript/owned-object-pool/overview', + from: '/references/ts-sdk/typescript/owned-object-pool/overview', + }, + { + to: 'ts-sdk/typescript/owned-object-pool/local-development', + from: '/references/ts-sdk/typescript/owned-object-pool/local-development', + }, + { + to: 'ts-sdk/typescript/owned-object-pool/custom-split-strategy', + from: '/references/ts-sdk/typescript/owned-object-pool/custom-split-strategy', + }, + { + to: 'ts-sdk/typescript/owned-object-pool/examples', + from: '/references/ts-sdk/typescript/owned-object-pool/examples', + }, + { + to: 'ts-sdk/dapp-kit/create-dapp', + from: '/references/ts-sdk/dapp-kit/create-dapp', + }, + { + to: 'ts-sdk/dapp-kit/iota-client-provider', + from: '/references/ts-sdk/dapp-kit/iota-client-provider', + }, + { + to: 'ts-sdk/dapp-kit/rpc-hooks', + from: '/references/ts-sdk/dapp-kit/rpc-hooks', + }, + { + to: 'ts-sdk/dapp-kit/wallet-provider', + from: '/references/ts-sdk/dapp-kit/wallet-provider', + }, + { + to: 'ts-sdk/dapp-kit/wallet-components/ConnectButton', + from: '/references/ts-sdk/dapp-kit/wallet-components/ConnectButton', + }, + { + to: 'ts-sdk/dapp-kit/wallet-components/ConnectModal', + from: '/references/ts-sdk/dapp-kit/wallet-components/ConnectModal', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useWallets', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useWallets', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useAccounts', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useAccounts', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useConnectWallet', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useConnectWallet', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useSignTransaction', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useSignTransaction', + }, + { + to: 'ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction', + from: '/references/ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction', + }, + { + to: 'ts-sdk/dapp-kit/themes', + from: '/references/ts-sdk/dapp-kit/themes', + }, + { + to: 'ts-sdk/kiosk/kiosk-client/introduction', + from: '/references/ts-sdk/kiosk/kiosk-client/introduction', + }, + { + to: 'ts-sdk/kiosk/kiosk-client/querying', + from: '/references/ts-sdk/kiosk/kiosk-client/querying', + }, + { + to: 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction', + from: '/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction', + }, + { + to: 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing', + from: '/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing', + }, + { + to: 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing', + from: '/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing', + }, + { + to: 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples', + from: '/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples', + }, + { + to: 'ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction', + from: '/references/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction', + }, + { + to: 'ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager', + from: '/references/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager', + }, + { + to: 'ts-sdk/kiosk/advanced-examples', + from: '/references/ts-sdk/kiosk/advanced-examples', + }, + { + to: 'ts-sdk/bcs', + from: '/references/ts-sdk/bcs', + }, + ]; + let paths = []; + for (const redirect of redirects) { + if (existingPath.startsWith(redirect.to)) { + paths.push(existingPath.replace(redirect.to, redirect.from)); + } + } + return paths.length > 0 ? paths : undefined; + }, + }, + ], 'plugin-image-zoom' ], presets: [ From dbe2c940d7b808f3b3dc571cee7369996b30fb3a Mon Sep 17 00:00:00 2001 From: Vivek Jain Date: Fri, 20 Dec 2024 19:17:50 +0530 Subject: [PATCH 6/6] Fix branch and merge develop --- .github/scripts/rosetta/setup.sh | 9 +- .github/workflows/_move_tests.yml | 22 +- .github/workflows/_rust_tests.yml | 4 + .github/workflows/_vercel_deploy.yml | 8 +- .../apps_wallet_dashboard_deploy.yml | 16 +- .github/workflows/nightly.yml | 30 + .github/workflows/simulator_nightly.yml | 178 - Cargo.lock | 290 +- Cargo.toml | 6 +- .../src/features/features.controller.ts | 4 +- .../src/components/buttons}/ThemeSwitcher.tsx | 3 +- apps/core/src/components/buttons/index.ts | 1 + apps/core/src/components/stake/StakedCard.tsx | 2 +- .../info/UnstakeTransactionInfo.tsx | 12 +- apps/core/src/hooks/index.ts | 1 + .../core/src/hooks/useCountdownByTimestamp.ts | 34 +- .../src/hooks/useRecognizedPackages.ts | 11 +- apps/core/src/utils/getStakeIotaByIotaId.ts | 2 +- .../migration/createMigrationTransaction.ts | 21 +- apps/core/src/utils/parseObjectDetails.ts | 14 +- .../explorer/src/components/header/Header.tsx | 3 +- apps/explorer/src/components/header/index.ts | 1 - .../components/home-metrics/OnTheNetwork.tsx | 2 +- .../components/network/NetworkSelector.tsx | 3 +- .../src/components/owned-coins/OwnedCoins.tsx | 9 +- apps/explorer/src/hooks/index.ts | 1 - apps/explorer/src/hooks/useResolveVideo.ts | 8 +- .../transaction-result/TransactionData.tsx | 8 +- .../transaction-result/TransactionView.tsx | 9 +- .../programmable-transaction-view/utils.ts | 3 +- .../transaction-summary/index.tsx | 10 +- apps/ui-kit/package.json | 2 +- apps/ui-kit/src/lib/components/atoms/index.ts | 1 + .../atoms/key-value-info/KeyValueInfo.tsx | 6 + .../components/atoms/list-item/ListItem.tsx | 10 +- .../loading-indicator/LoadingIndicator.tsx | 7 +- .../components/atoms/skeleton/Skeleton.tsx | 47 + .../lib/components/atoms/skeleton}/index.ts | 2 +- .../stories/atoms/Skeleton.stories.tsx | 33 + .../app/(protected)/assets/page.tsx | 8 +- .../(protected)/components/top-nav/TopNav.tsx | 33 +- .../app/(protected)/home/page.tsx | 10 +- .../app/(protected)/layout.tsx | 20 - .../app/(protected)/migrations/page.tsx | 251 +- .../app/(protected)/staking/page.tsx | 80 +- .../app/(protected)/vesting/page.tsx | 451 ++- apps/wallet-dashboard/app/globals.css | 51 +- apps/wallet-dashboard/app/page.tsx | 11 +- .../components/Dialogs/Assets/AssetDialog.tsx | 37 +- .../Assets/constants/AssetsDialogView.ts | 1 + .../Dialogs/Assets/views/DetailsView.tsx | 6 +- .../Dialogs/Assets/views/SendView.tsx | 6 +- .../Dialogs/SendToken/SendTokenDialog.tsx | 109 +- .../SendToken/views/EnterValuesFormView.tsx | 203 +- .../SendToken/views/ReviewValuesFormView.tsx | 129 +- .../views/TransactionDetailsView.tsx | 47 + .../Dialogs/SendToken/views/index.ts | 1 + .../Dialogs/Staking/StakeDialog.tsx | 129 +- .../Dialogs/Staking/enums/view.enums.ts | 1 - .../components/Dialogs/Staking/index.ts | 3 +- .../Dialogs/Staking/views/DetailsView.tsx | 6 +- .../Staking/views/EnterAmountDialogLayout.tsx | 166 + .../Dialogs/Staking/views/EnterAmountView.tsx | 205 +- .../views/EnterTimelockedAmountView.tsx | 230 +- .../Dialogs/Staking/views/UnstakeView.tsx | 202 -- .../components/Dialogs/Staking/views/index.ts | 2 +- .../components/Dialogs/TransactionDialog.tsx | 4 +- .../components/Dialogs/index.ts | 3 + .../Dialogs/migration/MigrationDialog.tsx | 88 + .../Dialogs/migration/enums/index.ts | 4 + .../Dialogs/migration/enums/view.enums.ts | 7 + .../components/Dialogs/migration/index.ts | 6 + .../migration/views/ConfirmMigrationView.tsx | 169 + .../Dialogs/migration/views/index.ts | 4 + .../Dialogs/settings/SettingsDialog.tsx | 36 + .../Dialogs/settings/enums/index.ts | 4 + .../Dialogs/settings/enums/view.enums.ts | 7 + .../Dialogs/settings/hooks/index.ts | 4 + .../settings/hooks/useSettingsDialog.ts | 27 + .../components/Dialogs/settings/index.ts | 7 + .../settings/views/NetworkSelectorView.tsx | 51 + .../settings/views/SettingsListView.tsx | 62 + .../Dialogs/settings/views/index.ts | 5 + .../transaction/TransactionDetailsLayout.tsx | 58 + .../components/Dialogs/transaction/index.ts | 4 + .../Dialogs/unstake/UnstakeDialog.tsx | 56 + .../components/Dialogs/unstake/enums/index.ts | 4 + .../Dialogs/unstake/enums/views.enums.ts | 8 + .../components/Dialogs/unstake/hooks/index.ts | 4 + .../Dialogs/unstake/hooks/useUnstakeDialog.ts | 41 + .../components/Dialogs/unstake/index.ts | 8 + .../views/UnstakeTimelockedObjectsView.tsx | 213 ++ .../Dialogs/unstake/views/UnstakeView.tsx | 167 + .../components/Dialogs/unstake/views/index.ts | 5 + .../Dialogs/vesting/VestingScheduleBox.tsx | 2 +- .../components/MigrationOverview.tsx | 2 +- .../components/Popup/Popup.tsx | 31 - .../components/Popup/PopupProvider.tsx | 29 - .../components/Popup/Popups/MigratePopup.tsx | 115 - .../Popup/Popups/SendAssetPopup.tsx | 85 - .../components/Popup/Popups/UnstakePopup.tsx | 49 - .../VestingPopup/TimelockedUnstakePopup.tsx | 84 - .../Popup/Popups/VestingPopup/index.ts | 4 - .../components/Popup/Popups/index.ts | 7 - .../components/Popup/index.ts | 7 - .../components/StakeRewardsPanel.tsx | 70 + .../SupplyIncreaseVestingOverview.tsx | 151 + .../components/VirtualList.tsx | 64 +- .../account-balance/AccountBalance.tsx | 8 +- .../components/coins/MyCoins.tsx | 64 +- apps/wallet-dashboard/components/index.ts | 4 +- .../migration/MigrationObjectLoading.tsx | 27 + .../migration/MigrationObjectsPanel.tsx | 115 + .../components/migration/index.ts | 5 + .../MigrationObjectDetailsCard.tsx | 155 + .../migration-object-details-card/index.ts | 4 + .../StakedTimelockObject.tsx | 4 +- .../staking-overview/StartStaking.tsx | 1 - .../components/staking-overview/index.ts | 1 + .../transactions/TransactionAmount.tsx | 2 +- .../transactions/TransactionTile.tsx | 71 +- .../transactions/TransactionsOverview.tsx | 2 +- .../wallet-dashboard/contexts/PopupContext.ts | 12 - apps/wallet-dashboard/hooks/index.ts | 6 +- .../hooks/useGetCurrentEpochEndTimestamp.ts | 21 + .../hooks/useGetStardustMigratableObjects.ts | 61 +- .../useGetSupplyIncreaseVestingObjects.ts | 112 + ...GroupedMigrationObjectsByExpirationDate.ts | 59 + .../hooks/useNewStakeTransaction.ts | 46 +- .../hooks/useNewUnstakeTransaction.ts | 55 + apps/wallet-dashboard/hooks/usePopups.ts | 9 - .../hooks/useTransferTransaction.ts | 24 + .../hooks/useUnstakeTransaction.ts | 28 - apps/wallet-dashboard/lib/constants/index.ts | 1 + .../lib/constants/migration.constants.ts | 14 + .../lib/constants/vesting.constants.ts | 66 +- .../enums/commonMigrationObjectType.enums.ts | 8 + apps/wallet-dashboard/lib/enums/index.ts | 3 + .../enums/stardustOutputDetailsFilter.enum.ts | 10 + .../stardustOutputMigrationStatus.enum.ts | 7 + .../lib/interfaces/timelock.interface.ts | 2 +- .../lib/interfaces/vesting.interface.ts | 2 +- apps/wallet-dashboard/lib/types/index.ts | 4 + .../lib/types/stardustMigrationObjects.ts | 33 + apps/wallet-dashboard/lib/utils/migration.ts | 101 - .../migration/filterMigrationObjectDetails.ts | 37 + .../utils/migration/groupMigrationObjects.ts | 235 ++ .../groupStardustObjectsByMigrationStatus.ts | 151 + .../lib/utils/migration/index.ts | 6 + apps/wallet-dashboard/lib/utils/timelock.ts | 4 +- .../lib/utils/vesting/vesting.spec.ts | 76 +- .../lib/utils/vesting/vesting.ts | 10 +- apps/wallet-dashboard/next.config.mjs | 6 + apps/wallet-dashboard/package.json | 3 +- .../providers/AppProviders.tsx | 21 +- apps/wallet/package.json | 7 +- .../app/components/accounts/AccountIcon.tsx | 4 +- .../app/components/receipt-card/TxnAmount.tsx | 2 +- .../src/ui/app/pages/accounts/WelcomePage.tsx | 6 +- consensus/core/src/authority_node.rs | 6 +- consensus/core/src/base_committer.rs | 12 +- consensus/core/src/block_verifier.rs | 3 +- consensus/core/src/commit.rs | 1 - consensus/core/src/core.rs | 2 +- consensus/core/src/leader_schedule.rs | 2 +- consensus/core/src/leader_scoring_strategy.rs | 2 +- consensus/core/src/network/metrics_layer.rs | 2 +- consensus/core/src/stake_aggregator.rs | 3 +- consensus/core/src/storage/mem_store.rs | 3 - consensus/core/src/storage/mod.rs | 6 +- consensus/core/src/storage/rocksdb_store.rs | 8 +- consensus/core/src/synchronizer.rs | 13 +- consensus/core/src/test_dag_builder.rs | 21 +- consensus/core/src/transaction.rs | 3 +- consensus/core/src/universal_committer.rs | 2 +- crates/bin-version/src/lib.rs | 17 +- .../src/analytics_processor.rs | 4 +- crates/iota-archival/src/lib.rs | 2 +- crates/iota-aws-orchestrator/src/benchmark.rs | 1 - crates/iota-aws-orchestrator/src/monitor.rs | 3 +- crates/iota-benchmark/src/drivers/mod.rs | 1 - crates/iota-benchmark/src/lib.rs | 2 +- crates/iota-bridge/src/action_executor.rs | 97 +- .../iota-bridge/src/e2e_tests/test_utils.rs | 1 - crates/iota-bridge/src/eth_syncer.rs | 1 - crates/iota-bridge/src/iota_mock_client.rs | 2 +- crates/iota-bridge/src/monitor.rs | 2 +- crates/iota-bridge/src/orchestrator.rs | 2 +- crates/iota-bridge/src/server/mock_handler.rs | 2 +- crates/iota-cluster-test/src/lib.rs | 1 - .../iota-common/src/sync/async_once_cell.rs | 2 +- crates/iota-common/src/sync/notify_once.rs | 2 +- crates/iota-config/src/genesis.rs | 2 +- crates/iota-core/src/authority.rs | 7 +- .../authority/authority_per_epoch_store.rs | 15 +- .../src/authority/authority_store.rs | 2 +- .../src/authority/authority_store_types.rs | 16 +- .../authority/epoch_start_configuration.rs | 2 +- crates/iota-core/src/authority_aggregator.rs | 4 +- .../checkpoints/checkpoint_executor/mod.rs | 2 +- crates/iota-core/src/checkpoints/mod.rs | 4 +- crates/iota-core/src/connection_monitor.rs | 4 +- crates/iota-core/src/consensus_adapter.rs | 3 +- crates/iota-core/src/epoch/randomness.rs | 5 +- crates/iota-core/src/overload_monitor.rs | 2 +- crates/iota-core/src/stake_aggregator.rs | 2 +- crates/iota-core/src/test_utils.rs | 7 +- crates/iota-core/src/transaction_manager.rs | 3 +- .../iota-core/src/transaction_orchestrator.rs | 2 +- .../unit_tests/authority_aggregator_tests.rs | 482 +-- .../src/unit_tests/execution_driver_tests.rs | 749 ++--- .../unit_tests/transaction_manager_tests.rs | 2 +- .../unit_tests/transfer_to_object_tests.rs | 2 +- .../tests/dynamic_committee_tests.rs | 6 +- .../tests/full_node_migration_tests.rs | 71 +- .../tests/migration/address_swap.csv | 2 + .../migration/stardust_object_snapshot.bin | Bin 3827115 -> 0 bytes .../migration/test_hornet_full_snapshot.bin | Bin 0 -> 1654902 bytes .../iota-e2e-tests/tests/passkey_e2e_tests.rs | 21 +- .../tests/shared_objects_tests.rs | 1 - .../iota-faucet/src/faucet/simple_faucet.rs | 2 +- crates/iota-genesis-builder/src/lib.rs | 2 +- crates/iota-genesis-builder/src/main.rs | 191 +- .../src/stardust/migration/migration.rs | 15 + .../src/stardust/migration/mod.rs | 2 +- .../iota-genesis-builder/src/stardust/mod.rs | 1 + .../src/stardust/process_outputs.rs | 208 ++ crates/iota-graphql-config/src/lib.rs | 2 +- .../iota-graphql-rpc-client/src/response.rs | 4 +- .../src/simple_client.rs | 2 +- crates/iota-graphql-rpc/src/raw_query.rs | 1 - crates/iota-graphql-rpc/src/server/version.rs | 2 +- crates/iota-graphql-rpc/src/types/epoch.rs | 1 - .../iota-graphql-rpc/src/types/move_object.rs | 2 +- crates/iota-graphql-rpc/src/types/object.rs | 4 +- crates/iota-graphql-rpc/src/types/owner.rs | 2 +- .../src/apis/transaction_builder_api.rs | 2 +- crates/iota-indexer/src/models/tx_indices.rs | 2 +- .../iota-indexer/src/store/indexer_store.rs | 2 +- .../src/store/pg_indexer_store.rs | 2 +- crates/iota-indexer/tests/ingestion_tests.rs | 2 +- crates/iota-indexer/tests/rpc-tests/main.rs | 2 +- crates/iota-json-rpc-tests/tests/read_api.rs | 172 +- .../tests/transaction_builder_api.rs | 86 +- crates/iota-json-rpc-types/src/iota_object.rs | 1 - crates/iota-json-rpc/src/authority_state.rs | 1 - crates/iota-json-rpc/src/axum_router.rs | 1 - .../src/transaction_execution_api.rs | 2 +- crates/iota-json/src/tests.rs | 164 +- .../iota-light-client/src/bin/light_client.rs | 2 +- crates/iota-macros/src/lib.rs | 2 - crates/iota-metrics/src/metrics_network.rs | 2 +- crates/iota-metrics/src/monitored_mpsc.rs | 2 +- crates/iota-move-build/src/lib.rs | 4 +- crates/iota-network/src/discovery/builder.rs | 1 - crates/iota-network/src/randomness/mod.rs | 4 +- crates/iota-network/src/state_sync/builder.rs | 2 +- crates/iota-network/src/state_sync/server.rs | 2 +- crates/iota-node/src/lib.rs | 2 +- crates/iota-open-rpc/spec/openrpc.json | 2 +- crates/iota-proc-macros/src/lib.rs | 2 +- crates/iota-protocol-config-macros/src/lib.rs | 4 +- crates/iota-protocol-config/src/lib.rs | 2 +- crates/iota-replay/src/fuzz.rs | 2 +- crates/iota-replay/src/replay.rs | 6 +- crates/iota-replay/src/types.rs | 1 - crates/iota-rest-api/src/reader.rs | 2 +- .../iota-rosetta/resources/rosetta_cli.json | 4 +- crates/iota-rosetta/src/errors.rs | 1 - crates/iota-rosetta/src/types.rs | 3 - .../unit_tests/balance_changing_tx_tests.rs | 174 +- crates/iota-rosetta/tests/gas_budget_tests.rs | 4 +- crates/iota-rpc-loadgen/src/payload/mod.rs | 1 - crates/iota-sdk/examples/utils.rs | 2 +- .../tests/tests.rs | 2 +- crates/iota-swarm/src/memory/swarm.rs | 2 +- crates/iota-tool/src/commands.rs | 1 - crates/iota-tool/src/lib.rs | 3 +- .../iota-transactional-test-runner/src/lib.rs | 1 - crates/iota-types/src/authenticator_state.rs | 3 +- crates/iota-types/src/crypto.rs | 2 +- crates/iota-types/src/effects/effects_v1.rs | 1 - crates/iota-types/src/effects/mod.rs | 1 - crates/iota-types/src/error.rs | 4 +- crates/iota-types/src/gas.rs | 2 +- crates/iota-types/src/gas_model/gas_v1.rs | 3 +- crates/iota-types/src/gas_model/tables.rs | 3 +- crates/iota-types/src/messages_checkpoint.rs | 3 +- crates/iota-types/src/messages_consensus.rs | 1 - crates/iota-types/src/object.rs | 3 - crates/iota-types/src/timelock/mod.rs | 2 +- .../unit_tests/passkey_authenticator_test.rs | 25 +- crates/iota-util-mem-derive/lib.rs | 2 +- crates/iota/src/client_ptb/builder.rs | 2 +- crates/iota/src/genesis_inspector.rs | 5 +- crates/iota/src/iota_commands.rs | 1 - crates/iota/src/keytool.rs | 1 - crates/simulacrum/src/lib.rs | 4 +- crates/simulacrum/src/store/in_mem_store.rs | 1 - crates/telemetry-subscribers/src/lib.rs | 3 +- crates/typed-store-derive/src/lib.rs | 8 +- crates/typed-store/src/rocks/mod.rs | 8 +- deny.toml | 3 +- docs/content/_snippets/info-BST-2f1.mdx | 10 + docs/content/_snippets/info-high-traffic.mdx | 7 + docs/content/_snippets/warn-ml-rpcs.mdx | 9 - .../about-iota/iota-architecture/epochs.mdx | 3 + .../iota-architecture/iota-security.mdx | 2 +- .../transaction-lifecycle.mdx | 30 +- .../iota-wallet/how-to/integrate-ledger.mdx | 24 +- .../getting-started/getting-started.mdx | 2 +- .../getting-started/local-network.mdx | 1 - .../developer/iota-101/using-events.mdx | 156 +- docs/content/operator/genesis.mdx | 2 +- .../operator/iota-full-node/overview.mdx | 5 +- docs/content/operator/observability.mdx | 2 +- docs/content/operator/validator-committee.mdx | 26 +- docs/content/references/iota-api.mdx | 2 +- .../iota-api/rpc-best-practices.mdx | 4 +- docs/content/references/iota-compared.mdx | 8 +- docs/content/references/iota-glossary.mdx | 92 +- docs/content/references/references.mdx | 12 +- docs/content/references/research-papers.mdx | 2 +- docs/content/sidebars/developer.js | 4 +- docs/content/ts-sdk/typescript/index.mdx | 17 +- docs/site/config/jargon.js | 35 + docs/site/docusaurus.config.js | 227 +- docs/site/package.json | 4 +- .../site/src/components/API/api-ref/refnav.js | 1 - .../src/components/FeedbackForm/index.tsx | 2 - .../src/components/FeedbackForm/styles.css | 12 +- docs/site/src/components/Glossary/index.tsx | 53 + docs/site/src/css/custom.css | 110 +- docs/site/src/theme/CodeBlock/index.tsx | 29 + .../dark/iota-architecture.svg | 2 +- .../iota-architecture.svg | 2 +- .../developer/getting-started/connect.json | 2 +- .../getting-started/create-a-package.json | 39 +- .../getting-started/local-network.json | 122 +- examples/tic-tac-toe/cli/src/turn_cap.rs | 7 +- .../latest/iota-adapter/src/gas_charger.rs | 6 +- .../programmable_transactions/execution.rs | 2 +- .../src/object_runtime/object_store.rs | 1 - nre/docker/README.md | 4 +- nre/validator_tasks.md | 11 - nre/validator_tool.md | 16 - package.json | 10 +- pnpm-lock.yaml | 2867 +++++------------ pnpm-workspace.yaml | 2 +- scripts/simtest/clippy.sh | 1 + scripts/simtest/simtest-cov.sh | 2 +- sdk/create-dapp/CHANGELOG.md | 7 + sdk/create-dapp/package.json | 2 +- .../react-client-dapp/eslint.config.js | 28 + .../templates/react-client-dapp/package.json | 18 +- .../react-e2e-counter/eslint.config.js | 28 + .../templates/react-e2e-counter/package.json | 18 +- sdk/typescript/src/client/types/generated.ts | 2 +- sdk/typescript/src/client/types/params.ts | 6 +- 359 files changed, 7329 insertions(+), 6333 deletions(-) delete mode 100644 .github/workflows/simulator_nightly.yml rename apps/{explorer/src/components/header => core/src/components/buttons}/ThemeSwitcher.tsx (89%) rename apps/{explorer => core}/src/hooks/useRecognizedPackages.ts (61%) create mode 100644 apps/ui-kit/src/lib/components/atoms/skeleton/Skeleton.tsx rename apps/{wallet-dashboard/contexts => ui-kit/src/lib/components/atoms/skeleton}/index.ts (70%) create mode 100644 apps/ui-kit/src/storybook/stories/atoms/Skeleton.stories.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/SendToken/views/TransactionDetailsView.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/Staking/views/EnterAmountDialogLayout.tsx delete mode 100644 apps/wallet-dashboard/components/Dialogs/Staking/views/UnstakeView.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/migration/MigrationDialog.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/migration/enums/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/migration/enums/view.enums.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/migration/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/migration/views/ConfirmMigrationView.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/migration/views/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/settings/SettingsDialog.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/settings/enums/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/settings/enums/view.enums.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/settings/hooks/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/settings/hooks/useSettingsDialog.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/settings/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/settings/views/NetworkSelectorView.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/settings/views/SettingsListView.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/settings/views/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/transaction/TransactionDetailsLayout.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/transaction/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/unstake/UnstakeDialog.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/unstake/enums/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/unstake/enums/views.enums.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/unstake/hooks/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/unstake/hooks/useUnstakeDialog.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/unstake/index.ts create mode 100644 apps/wallet-dashboard/components/Dialogs/unstake/views/UnstakeTimelockedObjectsView.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/unstake/views/UnstakeView.tsx create mode 100644 apps/wallet-dashboard/components/Dialogs/unstake/views/index.ts delete mode 100644 apps/wallet-dashboard/components/Popup/Popup.tsx delete mode 100644 apps/wallet-dashboard/components/Popup/PopupProvider.tsx delete mode 100644 apps/wallet-dashboard/components/Popup/Popups/MigratePopup.tsx delete mode 100644 apps/wallet-dashboard/components/Popup/Popups/SendAssetPopup.tsx delete mode 100644 apps/wallet-dashboard/components/Popup/Popups/UnstakePopup.tsx delete mode 100644 apps/wallet-dashboard/components/Popup/Popups/VestingPopup/TimelockedUnstakePopup.tsx delete mode 100644 apps/wallet-dashboard/components/Popup/Popups/VestingPopup/index.ts delete mode 100644 apps/wallet-dashboard/components/Popup/Popups/index.ts delete mode 100644 apps/wallet-dashboard/components/Popup/index.ts create mode 100644 apps/wallet-dashboard/components/StakeRewardsPanel.tsx create mode 100644 apps/wallet-dashboard/components/SupplyIncreaseVestingOverview.tsx create mode 100644 apps/wallet-dashboard/components/migration/MigrationObjectLoading.tsx create mode 100644 apps/wallet-dashboard/components/migration/MigrationObjectsPanel.tsx create mode 100644 apps/wallet-dashboard/components/migration/index.ts create mode 100644 apps/wallet-dashboard/components/migration/migration-object-details-card/MigrationObjectDetailsCard.tsx create mode 100644 apps/wallet-dashboard/components/migration/migration-object-details-card/index.ts delete mode 100644 apps/wallet-dashboard/contexts/PopupContext.ts create mode 100644 apps/wallet-dashboard/hooks/useGetCurrentEpochEndTimestamp.ts create mode 100644 apps/wallet-dashboard/hooks/useGetSupplyIncreaseVestingObjects.ts create mode 100644 apps/wallet-dashboard/hooks/useGroupedMigrationObjectsByExpirationDate.ts create mode 100644 apps/wallet-dashboard/hooks/useNewUnstakeTransaction.ts delete mode 100644 apps/wallet-dashboard/hooks/usePopups.ts create mode 100644 apps/wallet-dashboard/hooks/useTransferTransaction.ts delete mode 100644 apps/wallet-dashboard/hooks/useUnstakeTransaction.ts create mode 100644 apps/wallet-dashboard/lib/constants/migration.constants.ts create mode 100644 apps/wallet-dashboard/lib/enums/commonMigrationObjectType.enums.ts create mode 100644 apps/wallet-dashboard/lib/enums/stardustOutputDetailsFilter.enum.ts create mode 100644 apps/wallet-dashboard/lib/enums/stardustOutputMigrationStatus.enum.ts create mode 100644 apps/wallet-dashboard/lib/types/index.ts create mode 100644 apps/wallet-dashboard/lib/types/stardustMigrationObjects.ts delete mode 100644 apps/wallet-dashboard/lib/utils/migration.ts create mode 100644 apps/wallet-dashboard/lib/utils/migration/filterMigrationObjectDetails.ts create mode 100644 apps/wallet-dashboard/lib/utils/migration/groupMigrationObjects.ts create mode 100644 apps/wallet-dashboard/lib/utils/migration/groupStardustObjectsByMigrationStatus.ts create mode 100644 apps/wallet-dashboard/lib/utils/migration/index.ts create mode 100644 crates/iota-e2e-tests/tests/migration/address_swap.csv delete mode 100644 crates/iota-e2e-tests/tests/migration/stardust_object_snapshot.bin create mode 100644 crates/iota-e2e-tests/tests/migration/test_hornet_full_snapshot.bin create mode 100644 crates/iota-genesis-builder/src/stardust/process_outputs.rs create mode 100644 docs/content/_snippets/info-BST-2f1.mdx create mode 100644 docs/content/_snippets/info-high-traffic.mdx delete mode 100644 docs/content/_snippets/warn-ml-rpcs.mdx create mode 100644 docs/site/config/jargon.js create mode 100644 docs/site/src/components/Glossary/index.tsx create mode 100644 docs/site/src/theme/CodeBlock/index.tsx create mode 100644 sdk/create-dapp/templates/react-client-dapp/eslint.config.js create mode 100644 sdk/create-dapp/templates/react-e2e-counter/eslint.config.js diff --git a/.github/scripts/rosetta/setup.sh b/.github/scripts/rosetta/setup.sh index 308006ca289..b85acf125eb 100755 --- a/.github/scripts/rosetta/setup.sh +++ b/.github/scripts/rosetta/setup.sh @@ -7,12 +7,11 @@ echo "Install binaries" cargo install --locked --bin iota --path crates/iota cargo install --locked --bin iota-rosetta --path crates/iota-rosetta -echo "create dedicated config dir for IOTA genesis" -CONFIG_DIR="~/.iota/rosetta_config" -mkdir -p $CONFIG_DIR - echo "run IOTA genesis" -iota genesis -f --working-dir $CONFIG_DIR +CONFIG_DIR=~/.iota/iota_config +if ! [ -d "$CONFIG_DIR" ]; then + iota genesis +fi echo "generate rosetta configuration" iota-rosetta generate-rosetta-cli-config --online-url http://127.0.0.1:9002 --offline-url http://127.0.0.1:9003 diff --git a/.github/workflows/_move_tests.yml b/.github/workflows/_move_tests.yml index a98c7ad8f3f..54c8b002f08 100644 --- a/.github/workflows/_move_tests.yml +++ b/.github/workflows/_move_tests.yml @@ -26,4 +26,24 @@ jobs: tool: nextest - name: Run move tests run: | - cargo nextest run -p iota-framework-tests -- unit_tests:: + cargo nextest run -E + 'package(iota-framework-tests) + or (package(iota-core) and test(quorum_driver::)) + or package(iota-benchmark) + or test(move_tests::)' + + move-simtest: + timeout-minutes: 10 + runs-on: [self-hosted] + steps: + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: taiki-e/install-action@375e0c7f08a66b8c2ba7e7eef31a6f91043a81b0 # v2.44.38 + with: + tool: nextest + - name: Run move tests + run: | + scripts/simtest/cargo-simtest simtest --profile ci -E + 'package(iota-framework-tests) + or (package(iota-core) and test(quorum_driver::)) + or package(iota-benchmark) + or test(move_tests::)' diff --git a/.github/workflows/_rust_tests.yml b/.github/workflows/_rust_tests.yml index 75a96614c06..9aeccdffe2d 100644 --- a/.github/workflows/_rust_tests.yml +++ b/.github/workflows/_rust_tests.yml @@ -6,6 +6,9 @@ on: changedCrates: type: string required: false + runSimtest: + type: boolean + default: true concurrency: group: rust-tests-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -118,6 +121,7 @@ jobs: simtest: name: Simtest rust + if: inputs.runSimtest timeout-minutes: 45 runs-on: [self-hosted] env: diff --git a/.github/workflows/_vercel_deploy.yml b/.github/workflows/_vercel_deploy.yml index d85f6664fff..ffdb8fda37f 100644 --- a/.github/workflows/_vercel_deploy.yml +++ b/.github/workflows/_vercel_deploy.yml @@ -68,14 +68,16 @@ jobs: secrets: inherit with: isProd: false + isStaging: false - wallet-dashboard-prod: - name: Vercel Wallet Dashboard Production + wallet-dashboard-staging: + name: Vercel Wallet Dashboard Staging if: github.ref_name == 'develop' uses: ./.github/workflows/apps_wallet_dashboard_deploy.yml secrets: inherit with: - isProd: true + isProd: false + isStaging: true apps-backend-preview: name: Vercel apps-backend Preview diff --git a/.github/workflows/apps_wallet_dashboard_deploy.yml b/.github/workflows/apps_wallet_dashboard_deploy.yml index d3ae3f5f284..f533776b7bb 100644 --- a/.github/workflows/apps_wallet_dashboard_deploy.yml +++ b/.github/workflows/apps_wallet_dashboard_deploy.yml @@ -3,14 +3,25 @@ name: Deploy for Wallet Dashboard env: VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} VERCEL_PROJECT_ID: ${{ secrets.WALLET_DASHBOARD_VERCEL_PROJECT_ID }} + WALLET_DASHBOARD_VERCEL_PROJECT_STAGING_URL: ${{ secrets.WALLET_DASHBOARD_VERCEL_PROJECT_STAGING_URL }} on: workflow_dispatch: + inputs: + isProd: + type: boolean + required: true + isStaging: + type: boolean + required: true workflow_call: inputs: isProd: type: boolean required: true + isStaging: + type: boolean + required: true jobs: deploy: @@ -64,8 +75,11 @@ jobs: id: deploy_url if: ${{ inputs.isProd == false }} run: echo "DEPLOY_URL=$(cat vercel_output.txt | awk 'END{print}')" >> $GITHUB_OUTPUT + - name: Alias Staging deploy + if: ${{ inputs.isStaging }} + run: vercel alias ${{ steps.deploy_url.outputs.DEPLOY_URL }} $WALLET_DASHBOARD_VERCEL_PROJECT_STAGING_URL --token=${{ secrets.VERCEL_TOKEN }} --scope=${{ secrets.VERCEL_SCOPE }} - name: Comment on pull request - if: ${{ inputs.isProd == false }} + if: ${{ inputs.isProd == false && inputs.isStaging == false }} uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 27268340ad9..3e02cfc233f 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -4,6 +4,17 @@ on: schedule: - cron: "0 0 * * *" # every day at midnight workflow_dispatch: + inputs: + iota_ref: + description: "Branch / commit to simtest" + type: string + required: true + default: develop + test_num: + description: "MSIM_TEST_NUM (test iterations)" + type: string + required: false + default: "30" env: BINARY_LIST_FILE: "./binary-build-list.json" @@ -27,6 +38,8 @@ env: RUSTUP_MAX_RETRIES: 10 # Don't emit giant backtraces in the CI logs. RUST_BACKTRACE: short + IOTA_REF: "${{ github.event.inputs.iota_ref || 'develop' }}" + TEST_NUM: "${{ github.event.inputs.test_num || '30' }}" jobs: release: @@ -61,6 +74,9 @@ jobs: tests: uses: ./.github/workflows/_rust_tests.yml + with: + # simtest job below runs a superset of these tests + runSimtest: false external-tests: uses: ./.github/workflows/_external_rust_tests.yml @@ -84,3 +100,17 @@ jobs: split-cluster: uses: ./.github/workflows/split_cluster.yml + + simtest: + timeout-minutes: 240 + runs-on: [self-hosted] + + steps: + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + with: + ref: ${{ env.IOTA_REF }} + - uses: taiki-e/install-action@375e0c7f08a66b8c2ba7e7eef31a6f91043a81b0 # v2.44.38 + with: + tool: nextest + - name: Run simtest + run: scripts/simtest/simtest-run.sh diff --git a/.github/workflows/simulator_nightly.yml b/.github/workflows/simulator_nightly.yml deleted file mode 100644 index 234a9013788..00000000000 --- a/.github/workflows/simulator_nightly.yml +++ /dev/null @@ -1,178 +0,0 @@ -name: Simulator Tests - -on: - schedule: - - cron: "0 9 * * *" # UTC timing is every day at 1am PST - workflow_dispatch: - inputs: - iota_ref: - description: "Branch / commit to test" - type: string - required: true - default: main - test_num: - description: "MSIM_TEST_NUM (test iterations)" - type: string - required: false - default: "30" - -concurrency: - group: ${{ github.workflow }} - -env: - IOTA_REF: "${{ github.event.inputs.iota_ref || 'main' }}" - TEST_NUM: "${{ github.event.inputs.test_num || '30' }}" - -jobs: - simtest: - timeout-minutes: 240 - permissions: - # The "id-token: write" permission is required or Machine ID will not be - # able to authenticate with the cluster. - id-token: write - contents: read - runs-on: self-hosted - - steps: - - name: Install Teleport - uses: teleport-actions/setup@176c25dfcd19cd31a252f275d579822b243e7b9c # v1.0.6 - with: - version: 11.3.1 - - name: Authorize against Teleport - id: auth - uses: teleport-actions/auth@685adaf480dc79262a99220eb158a92136d5abd9 # v2.0.3 - with: - # Specify the publically accessible address of your Teleport proxy. - proxy: proxy.iota-int.com:443 - # Specify the name of the join token for your bot. - token: iota-simtest-token - # Specify the length of time that the generated credentials should be - # valid for. This is optional and defaults to "1h" - certificate-ttl: 2h - - # Cargo clean and git restore on any left over files from git checkout, and deletes all remote tracking branches - - name: Environment clean - run: | - tsh -i ${{ steps.auth.outputs.identity-file }} --ttl 5 ssh ubuntu@simtest-01 "source ~/.bashrc && source ~/.cargo/env && rm -rf ~/iota" - tsh -i ${{ steps.auth.outputs.identity-file }} --ttl 5 ssh ubuntu@simtest-01 "source ~/.bashrc && source ~/.cargo/env && cd ~/ && git clone git@github.com:iotaledger/iota.git" - - # Deleting files in tmpfs that usually fill up pretty quickly after each run. Cargo clean to free up space as well. - - name: Tmpfs and cargo clean - run: | - tsh -i ${{ steps.auth.outputs.identity-file }} --ttl 5 ssh ubuntu@simtest-01 "sudo rm -rf /tmp/*" - tsh -i ${{ steps.auth.outputs.identity-file }} --ttl 5 ssh ubuntu@simtest-01 "source ~/.bashrc && source ~/.cargo/env && cd ~/iota && cargo clean" - - # Checkout out the latest iota repo - - name: Checkout iota repo - run: | - tsh -i ${{ steps.auth.outputs.identity-file }} --ttl 10 ssh ubuntu@simtest-01 "source ~/.bashrc && source ~/.cargo/env && cd ~/iota && git fetch origin && git checkout ${{ env.IOTA_REF }}" - - # Setting up cargo and simtest - - name: Install simtest - run: | - tsh -i ${{ steps.auth.outputs.identity-file }} --ttl 10 ssh ubuntu@simtest-01 "source ~/.bashrc && source ~/.cargo/env && cd ~/iota && ./scripts/simtest/install.sh" - - # Run simulator tests - - name: Run simtest - run: | - tsh -i ${{ steps.auth.outputs.identity-file }} --ttl 120 ssh ubuntu@simtest-01 "source ~/.bashrc && source ~/.cargo/env && cd ~/iota && RUSTUP_MAX_RETRIES=10 CARGO_TERM_COLOR=always CARGO_INCREMENTAL=0 CARGO_NET_RETRY=10 RUST_BACKTRACE=short RUST_LOG=off NUM_CPUS=24 TEST_NUM=${{ env.TEST_NUM }} ./scripts/simtest/simtest-run.sh" - - notify: - name: Notify - needs: [simtest] - runs-on: self-hosted - if: github.event_name == 'schedule' && failure() - - steps: - - uses: technote-space/workflow-conclusion-action@45ce8e0eb155657ab8ccf346ade734257fd196a5 # v3.0.3 - - - name: Checkout iota repo develop branch - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - - - name: Get iota commit - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - export iota_sha=$(git rev-parse HEAD) - echo "iota_sha=${iota_sha}" >> $GITHUB_ENV - - - name: Get link to logs - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - gh_job_link=$(gh api -X GET 'repos/iotaledger/iota/actions/runs/${{ github.run_id }}/jobs' --jq '.jobs.[0].html_url') - echo "gh_job_link=${gh_job_link}" >> $GITHUB_ENV - - - name: Get current oncall - run: | - export current_oncall=$(curl -s --request GET \ - --url 'https://api.pagerduty.com/oncalls?schedule_ids[]=PGCQ3YS' \ - --header 'Accept: application/json' \ - --header 'Authorization: Token token=${{ secrets.PAGERDUTY_ACCESS_KEY }}' \ - --header 'Content-Type: application/json' \ - | jq '.oncalls[].user.summary' | tr -d '"') - echo "current_oncall=$(echo ${current_oncall})" >> $GITHUB_ENV - - export oncall_name=$(curl -s --request GET \ - --url 'https://api.pagerduty.com/oncalls?schedule_ids[]=PGCQ3YS' \ - --header 'Accept: application/json' \ - --header 'Authorization: Token token=${{ secrets.PAGERDUTY_ACCESS_KEY }}' \ - --header 'Content-Type: application/json' \ - | jq '.oncalls[].escalation_policy.summary' | tr -d '"') - echo "oncall_name=$(echo ${oncall_name})" >> $GITHUB_ENV - - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-west-2 - - - name: Get slack id for the oncall - run: | - export slack_id=$(aws s3 cp s3://iota-employees-dir/employees.json - | jq --arg ONCALL "${{ env.current_oncall }}" '.[] | if .name == $ONCALL then .slack_id else empty end') - echo "slack_id=$(echo ${slack_id} | tr -d '"')" >> $GITHUB_ENV - - - name: Post to slack - uses: slackapi/slack-github-action@37ebaef184d7626c5f204ab8d3baff4262dd30f0 # v1.27.0 - env: - SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} - IOTA_SHA: ${{ env.iota_sha }} - GH_JOB_LINK: ${{ env.gh_job_link }} - SLACK_ID: ${{ env.slack_id }} - ONCALL_NAME: ${{ env.oncall_name }} - with: - channel-id: "simtest-nightly" - payload: | - { - "text": "*${{ github.workflow }}* workflow status: `${{ env.WORKFLOW_CONCLUSION }}`", - "blocks": [ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "*${{ github.workflow }}* workflow status: `${{ env.WORKFLOW_CONCLUSION }}`" - } - }, - { - "type": "divider" - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "IOTA commit: \nRun: <${{ env.GH_JOB_LINK }}|${{ github.run_id }}>" - } - }, - { - "type": "divider" - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "<@${{ env.SLACK_ID }}>, current `${{ env.ONCALL_NAME }}` oncall, please debug failures: `tsh ssh ubuntu@simtest-01` and look in the `/home/ubuntu/simtest_logs/{date}` folder for test results" - } - } - ] - } diff --git a/Cargo.lock b/Cargo.lock index c0b1c6e29bf..550aa462be0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -803,7 +803,7 @@ dependencies = [ "proc-macro2 1.0.86", "quote 1.0.37", "syn 1.0.109", - "synstructure", + "synstructure 0.12.6", ] [[package]] @@ -5500,6 +5500,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -5508,12 +5626,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -8275,7 +8404,7 @@ version = "0.8.0-alpha" dependencies = [ "proc-macro2 1.0.86", "syn 1.0.109", - "synstructure", + "synstructure 0.12.6", ] [[package]] @@ -8876,7 +9005,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.48.5", ] [[package]] @@ -8972,6 +9101,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "lock_api" version = "0.4.12" @@ -10066,7 +10201,7 @@ dependencies = [ "proc-macro2 1.0.86", "quote 1.0.37", "syn 1.0.109", - "synstructure", + "synstructure 0.12.6", ] [[package]] @@ -11040,9 +11175,9 @@ dependencies = [ [[package]] name = "passkey-authenticator" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017d27e98940a98358b43a3fe19cb3d7b7c821c3b35634d8087230e92445579" +checksum = "f9b065ce31354bcf23a333003c77f0d71f00eb95761b3390a069546e078a7a5b" dependencies = [ "async-trait", "coset", @@ -11054,9 +11189,9 @@ dependencies = [ [[package]] name = "passkey-client" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f14d42b14749cc7927add34a9932b3b3cc5349a633384850baa67183061439dd" +checksum = "5080bfafe23d139ae8be8b907453aee0b8af3ca7cf25d1f8d7bfcf7b079d3412" dependencies = [ "ciborium", "coset", @@ -11072,14 +11207,16 @@ dependencies = [ [[package]] name = "passkey-types" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "499cff8432e71c5f8784d9645aac0f9fca604d67f59b68a606170b5e229c6538" +checksum = "77144664f6aac5f629d7efa815f5098a054beeeca6ccafee5ec453fd2b0c53f9" dependencies = [ "bitflags 2.6.0", "ciborium", "coset", "data-encoding", + "getrandom 0.2.15", + "hmac", "indexmap 2.5.0", "rand 0.8.5", "serde", @@ -11087,6 +11224,7 @@ dependencies = [ "sha2 0.10.8", "strum 0.25.0", "typeshare", + "zeroize", ] [[package]] @@ -14337,6 +14475,17 @@ dependencies = [ "unicode-xid 0.2.6", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", +] + [[package]] name = "sysinfo" version = "0.31.4" @@ -14710,6 +14859,16 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinytemplate" version = "1.2.1" @@ -15338,7 +15497,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "rand 0.8.5", + "rand 0.7.3", "static_assertions", ] @@ -15466,12 +15625,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" version = "1.0.13" @@ -15563,9 +15716,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -15585,6 +15738,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -16218,6 +16383,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "ws_stream_wasm" version = "0.7.4" @@ -16328,6 +16505,30 @@ dependencies = [ "time", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", + "synstructure 0.13.1", +] + [[package]] name = "yup-oauth2" version = "8.3.2" @@ -16376,6 +16577,27 @@ dependencies = [ "syn 2.0.77", ] +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", + "synstructure 0.13.1", +] + [[package]] name = "zeroize" version = "1.8.1" @@ -16397,6 +16619,28 @@ dependencies = [ "syn 2.0.77", ] +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", +] + [[package]] name = "zip" version = "0.6.6" diff --git a/Cargo.toml b/Cargo.toml index 277ac3a5492..9dbfc1385f2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -284,9 +284,9 @@ object_store = { version = "0.10", features = ["aws", "gcp", "azure", "http"] } once_cell = "1.18.0" p256 = { version = "0.13.2", features = ["ecdsa"] } parking_lot = "0.12.1" -passkey-authenticator = { version = "0.2.0" } -passkey-client = { version = "0.2.0" } -passkey-types = { version = "0.2.0" } +passkey-authenticator = "0.4.0" +passkey-client = "0.4.0" +passkey-types = "0.4.0" pretty_assertions = "1.3.0" proc-macro2 = "1.0.47" prometheus = "0.13.3" diff --git a/apps/apps-backend/src/features/features.controller.ts b/apps/apps-backend/src/features/features.controller.ts index c3947236ec5..a3f3dbbdd3f 100644 --- a/apps/apps-backend/src/features/features.controller.ts +++ b/apps/apps-backend/src/features/features.controller.ts @@ -134,10 +134,10 @@ export class FeaturesController { defaultValue: false, }, [Feature.StardustMigration]: { - defaultValue: false, + defaultValue: true, }, [Feature.SupplyIncreaseVesting]: { - defaultValue: false, + defaultValue: true, }, }, dateUpdated: new Date().toISOString(), diff --git a/apps/explorer/src/components/header/ThemeSwitcher.tsx b/apps/core/src/components/buttons/ThemeSwitcher.tsx similarity index 89% rename from apps/explorer/src/components/header/ThemeSwitcher.tsx rename to apps/core/src/components/buttons/ThemeSwitcher.tsx index b947cafe76c..922deb78957 100644 --- a/apps/explorer/src/components/header/ThemeSwitcher.tsx +++ b/apps/core/src/components/buttons/ThemeSwitcher.tsx @@ -3,7 +3,8 @@ import { Button, ButtonType } from '@iota/apps-ui-kit'; import { DarkMode, LightMode } from '@iota/ui-icons'; -import { useTheme, Theme, ThemePreference } from '@iota/core'; +import { Theme, ThemePreference } from '../../enums'; +import { useTheme } from '../../hooks'; export function ThemeSwitcher(): React.JSX.Element { const { theme, themePreference, setThemePreference } = useTheme(); diff --git a/apps/core/src/components/buttons/index.ts b/apps/core/src/components/buttons/index.ts index b7638e371ce..95938f61610 100644 --- a/apps/core/src/components/buttons/index.ts +++ b/apps/core/src/components/buttons/index.ts @@ -2,3 +2,4 @@ // SPDX-License-Identifier: Apache-2.0 export * from './ViewTxnOnExplorerButton'; +export * from './ThemeSwitcher'; diff --git a/apps/core/src/components/stake/StakedCard.tsx b/apps/core/src/components/stake/StakedCard.tsx index 58bc5c82f20..92f6b0e8184 100644 --- a/apps/core/src/components/stake/StakedCard.tsx +++ b/apps/core/src/components/stake/StakedCard.tsx @@ -37,7 +37,7 @@ export function StakedCard({ // For inactive validator, show principal + rewards const [principalStaked, symbol] = useFormatCoin( - inactiveValidator ? principal + rewards : principal, + inactiveValidator ? BigInt(principal) + rewards : principal, IOTA_TYPE_ARG, ); diff --git a/apps/core/src/components/transaction/info/UnstakeTransactionInfo.tsx b/apps/core/src/components/transaction/info/UnstakeTransactionInfo.tsx index bb69cf69226..94e120821d3 100644 --- a/apps/core/src/components/transaction/info/UnstakeTransactionInfo.tsx +++ b/apps/core/src/components/transaction/info/UnstakeTransactionInfo.tsx @@ -27,21 +27,21 @@ export function UnstakeTransactionInfo({ renderExplorerLink, }: UnstakeTransactionInfoProps) { const json = event.parsedJson as { - principal_amount?: number; - reward_amount?: number; + principal_amount?: string; + reward_amount?: string; validator_address?: string; }; - const principalAmount = json?.principal_amount || 0; - const rewardAmount = json?.reward_amount || 0; + const principalAmount = json?.principal_amount || '0'; + const rewardAmount = json?.reward_amount || '0'; const validatorAddress = json?.validator_address; - const totalAmount = Number(principalAmount) + Number(rewardAmount); + const totalAmount = BigInt(principalAmount) + BigInt(rewardAmount); const [formatPrinciple, symbol] = useFormatCoin(principalAmount, IOTA_TYPE_ARG); const [formatRewards] = useFormatCoin(rewardAmount || 0, IOTA_TYPE_ARG); return (
{validatorAddress && } - {totalAmount && ( + {totalAmount !== 0n && ( )} diff --git a/apps/core/src/hooks/index.ts b/apps/core/src/hooks/index.ts index 89aced3f57f..1602541e57b 100644 --- a/apps/core/src/hooks/index.ts +++ b/apps/core/src/hooks/index.ts @@ -47,5 +47,6 @@ export * from './useOwnedNFT'; export * from './useNftDetails'; export * from './useCountdownByTimestamp'; export * from './useStakeRewardStatus'; +export * from './useRecognizedPackages'; export * from './stake'; diff --git a/apps/core/src/hooks/useCountdownByTimestamp.ts b/apps/core/src/hooks/useCountdownByTimestamp.ts index 3b79b69b915..18a5a598292 100644 --- a/apps/core/src/hooks/useCountdownByTimestamp.ts +++ b/apps/core/src/hooks/useCountdownByTimestamp.ts @@ -9,7 +9,17 @@ import { MILLISECONDS_PER_SECOND, } from '../constants'; -export function useCountdownByTimestamp(initialTimestamp: number | null): string { +interface FormatCountdownOptions { + showSeconds?: boolean; + showMinutes?: boolean; + showHours?: boolean; + showDays?: boolean; +} + +export function useCountdownByTimestamp( + initialTimestamp: number | null, + options?: FormatCountdownOptions, +): string { const [timeRemainingMs, setTimeRemainingMs] = useState(0); useEffect(() => { @@ -22,11 +32,19 @@ export function useCountdownByTimestamp(initialTimestamp: number | null): string return () => clearInterval(interval); }, [initialTimestamp]); - const formattedCountdown = formatCountdown(timeRemainingMs); + const formattedCountdown = formatCountdown(timeRemainingMs, options); return formattedCountdown; } -function formatCountdown(totalMilliseconds: number) { +function formatCountdown( + totalMilliseconds: number, + { + showSeconds = true, + showMinutes = true, + showHours = true, + showDays = true, + }: FormatCountdownOptions = {}, +) { const days = Math.floor(totalMilliseconds / MILLISECONDS_PER_DAY); const hours = Math.floor((totalMilliseconds % MILLISECONDS_PER_DAY) / MILLISECONDS_PER_HOUR); const minutes = Math.floor( @@ -36,11 +54,11 @@ function formatCountdown(totalMilliseconds: number) { (totalMilliseconds % MILLISECONDS_PER_MINUTE) / MILLISECONDS_PER_SECOND, ); - const timeUnits = []; - if (days > 0) timeUnits.push(`${days}d`); - if (hours > 0) timeUnits.push(`${hours}h`); - if (minutes > 0) timeUnits.push(`${minutes}m`); - if (seconds > 0 || timeUnits.length === 0) timeUnits.push(`${seconds}s`); + const timeUnits: string[] = []; + if (showDays && days > 0) timeUnits.push(`${days}d`); + if (showHours && hours > 0) timeUnits.push(`${hours}h`); + if (showMinutes && minutes > 0) timeUnits.push(`${minutes}m`); + if (showSeconds && (seconds > 0 || timeUnits.length === 0)) timeUnits.push(`${seconds}s`); return timeUnits.join(' '); } diff --git a/apps/explorer/src/hooks/useRecognizedPackages.ts b/apps/core/src/hooks/useRecognizedPackages.ts similarity index 61% rename from apps/explorer/src/hooks/useRecognizedPackages.ts rename to apps/core/src/hooks/useRecognizedPackages.ts index 811c2abfdf4..15a62c80447 100644 --- a/apps/explorer/src/hooks/useRecognizedPackages.ts +++ b/apps/core/src/hooks/useRecognizedPackages.ts @@ -2,18 +2,11 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { Feature } from '@iota/core'; import { useFeatureValue } from '@growthbook/growthbook-react'; -import { IOTA_FRAMEWORK_ADDRESS, IOTA_SYSTEM_ADDRESS } from '@iota/iota-sdk/utils'; import { Network } from '@iota/iota-sdk/client'; +import { Feature, DEFAULT_RECOGNIZED_PACKAGES } from '../../'; -import { useNetwork } from './'; - -const DEFAULT_RECOGNIZED_PACKAGES = [IOTA_FRAMEWORK_ADDRESS, IOTA_SYSTEM_ADDRESS]; - -export function useRecognizedPackages(): string[] { - const [network] = useNetwork(); - +export function useRecognizedPackages(network: Network): string[] { const recognizedPackages = useFeatureValue( Feature.RecognizedPackages, DEFAULT_RECOGNIZED_PACKAGES, diff --git a/apps/core/src/utils/getStakeIotaByIotaId.ts b/apps/core/src/utils/getStakeIotaByIotaId.ts index 5bdaa2a01ee..ba2e8837c99 100644 --- a/apps/core/src/utils/getStakeIotaByIotaId.ts +++ b/apps/core/src/utils/getStakeIotaByIotaId.ts @@ -10,7 +10,7 @@ export function getStakeIotaByIotaId(allDelegation: DelegatedStake[], stakeIotaI allDelegation.reduce((acc, curr) => { const total = BigInt( curr.stakes.find(({ stakedIotaId }) => stakedIotaId === stakeIotaId)?.principal || - 0, + 0n, ); return total + acc; }, 0n) || 0n diff --git a/apps/core/src/utils/migration/createMigrationTransaction.ts b/apps/core/src/utils/migration/createMigrationTransaction.ts index 8519a950831..c5ac17fa556 100644 --- a/apps/core/src/utils/migration/createMigrationTransaction.ts +++ b/apps/core/src/utils/migration/createMigrationTransaction.ts @@ -1,7 +1,7 @@ // Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { IotaClient, IotaObjectData } from '@iota/iota-sdk/client'; +import { DynamicFieldInfo, IotaClient, IotaObjectData } from '@iota/iota-sdk/client'; import { Transaction } from '@iota/iota-sdk/transactions'; import { STARDUST_PACKAGE_ID } from '../../constants/migration.constants'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; @@ -17,21 +17,28 @@ type NestedResultType = { NestedResult: [number, number]; }; -export async function getNativeTokenTypesFromBag( - bagId: string, - client: IotaClient, -): Promise { +export async function getNativeTokensFromBag(bagId: string, client: IotaClient) { const nativeTokenDynamicFields = await client.getDynamicFields({ parentId: bagId, }); - const nativeTokenTypes: string[] = []; + const nativeTokenTypes: DynamicFieldInfo[] = []; for (const nativeToken of nativeTokenDynamicFields.data) { - nativeTokenTypes.push(nativeToken?.name?.value as string); + nativeTokenTypes.push(nativeToken); } return nativeTokenTypes; } +export async function getNativeTokenTypesFromBag( + bagId: string, + client: IotaClient, +): Promise { + const nativeTokenDynamicFields = await client.getDynamicFields({ + parentId: bagId, + }); + return nativeTokenDynamicFields.data.map(({ name }) => name.value as string); +} + export function validateBasicOutputObject(outputObject: IotaObjectData): BasicOutputObject { if (outputObject.content?.dataType !== 'moveObject') { throw new Error('Invalid basic output object'); diff --git a/apps/core/src/utils/parseObjectDetails.ts b/apps/core/src/utils/parseObjectDetails.ts index 76a9884c5d8..fefa3c717e1 100644 --- a/apps/core/src/utils/parseObjectDetails.ts +++ b/apps/core/src/utils/parseObjectDetails.ts @@ -9,10 +9,16 @@ type ObjectChangeWithObjectType = Extract< { objectType: string } >; +type PackageId = string; +type ModuleName = string; +type TypeName = string; export function parseObjectChangeDetails( objectChange: ObjectChangeWithObjectType, -): [string, string, string] { - const [packageId, moduleName, typeName] = - objectChange.objectType?.split('<')[0]?.split('::') || []; - return [packageId, moduleName, typeName]; +): [PackageId, ModuleName, TypeName] { + return extractObjectTypeStruct(objectChange.objectType); +} + +export function extractObjectTypeStruct(objectType: string): [PackageId, ModuleName, TypeName] { + const [packageId, moduleName, functionName] = objectType?.split('<')[0]?.split('::') || []; + return [packageId, moduleName, functionName]; } diff --git a/apps/explorer/src/components/header/Header.tsx b/apps/explorer/src/components/header/Header.tsx index a3b0cbcb00b..a2f95b165d5 100644 --- a/apps/explorer/src/components/header/Header.tsx +++ b/apps/explorer/src/components/header/Header.tsx @@ -5,7 +5,8 @@ import { NetworkSelector } from '../network'; import Search from '../search/Search'; import { LinkWithQuery } from '~/components/ui'; -import { ThemeSwitcher, ThemedIotaLogo } from '~/components'; +import { ThemedIotaLogo } from '~/components'; +import { ThemeSwitcher } from '@iota/core'; function Header(): JSX.Element { return ( diff --git a/apps/explorer/src/components/header/index.ts b/apps/explorer/src/components/header/index.ts index b23c1fae65a..8a717a10a0b 100644 --- a/apps/explorer/src/components/header/index.ts +++ b/apps/explorer/src/components/header/index.ts @@ -2,4 +2,3 @@ // SPDX-License-Identifier: Apache-2.0 export * from './Header'; -export * from './ThemeSwitcher'; diff --git a/apps/explorer/src/components/home-metrics/OnTheNetwork.tsx b/apps/explorer/src/components/home-metrics/OnTheNetwork.tsx index d98dc4b126f..35bd6468232 100644 --- a/apps/explorer/src/components/home-metrics/OnTheNetwork.tsx +++ b/apps/explorer/src/components/home-metrics/OnTheNetwork.tsx @@ -98,7 +98,7 @@ export function OnTheNetwork(): JSX.Element { size={LabelTextSize.Large} label="Reference Gas Price" text={gasPriceFormatted ?? '-'} - supportingLabel={gasPriceFormatted !== null ? 'IOTA' : undefined} + supportingLabel={gasPriceFormatted !== null ? 'nano' : undefined} tooltipPosition={TooltipPosition.Top} tooltipText="The reference gas price in the current epoch." /> diff --git a/apps/explorer/src/components/network/NetworkSelector.tsx b/apps/explorer/src/components/network/NetworkSelector.tsx index 34da8635f62..deb20e35e9b 100644 --- a/apps/explorer/src/components/network/NetworkSelector.tsx +++ b/apps/explorer/src/components/network/NetworkSelector.tsx @@ -99,11 +99,12 @@ export function NetworkSelector(): JSX.Element { key={idx} onClick={() => handleNetworkSwitch(network.id)} hideBottomBorder + isHighlighted={network === selectedNetwork} >
diff --git a/apps/explorer/src/components/owned-coins/OwnedCoins.tsx b/apps/explorer/src/components/owned-coins/OwnedCoins.tsx index 8df810f8f0c..619fd8e9864 100644 --- a/apps/explorer/src/components/owned-coins/OwnedCoins.tsx +++ b/apps/explorer/src/components/owned-coins/OwnedCoins.tsx @@ -2,14 +2,14 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { getCoinSymbol } from '@iota/core'; +import { getCoinSymbol, useRecognizedPackages } from '@iota/core'; import { useIotaClientQuery } from '@iota/dapp-kit'; -import { type CoinBalance } from '@iota/iota-sdk/client'; +import { type CoinBalance, type Network } from '@iota/iota-sdk/client'; +import { useNetwork } from '~/hooks'; import { normalizeIotaAddress } from '@iota/iota-sdk/utils'; import { FilterList, Warning } from '@iota/ui-icons'; import { useMemo, useState } from 'react'; import OwnedCoinView from './OwnedCoinView'; -import { useRecognizedPackages } from '~/hooks/useRecognizedPackages'; import { Button, ButtonType, @@ -47,7 +47,8 @@ export function OwnedCoins({ id }: OwnerCoinsProps): JSX.Element { const { isPending, data, isError } = useIotaClientQuery('getAllBalances', { owner: normalizeIotaAddress(id), }); - const recognizedPackages = useRecognizedPackages(); + const [network] = useNetwork(); + const recognizedPackages = useRecognizedPackages(network as Network); const balances: Record = useMemo(() => { const balanceData = data?.reduce( diff --git a/apps/explorer/src/hooks/index.ts b/apps/explorer/src/hooks/index.ts index 9fbe82e3302..a52c31b12d6 100644 --- a/apps/explorer/src/hooks/index.ts +++ b/apps/explorer/src/hooks/index.ts @@ -17,7 +17,6 @@ export * from './useInitialPageView'; export * from './useMediaQuery'; export * from './useNetwork'; export * from './useNormalizedMoveModule'; -export * from './useRecognizedPackages'; export * from './useResolveVideo'; export * from './useSearch'; export * from './useVerifiedSourceCode'; diff --git a/apps/explorer/src/hooks/useResolveVideo.ts b/apps/explorer/src/hooks/useResolveVideo.ts index 19d7c871d23..a40622340a3 100644 --- a/apps/explorer/src/hooks/useResolveVideo.ts +++ b/apps/explorer/src/hooks/useResolveVideo.ts @@ -2,12 +2,14 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { type IotaObjectResponse } from '@iota/iota-sdk/client'; +import { type IotaObjectResponse, type Network } from '@iota/iota-sdk/client'; -import { useRecognizedPackages } from './useRecognizedPackages'; +import { useRecognizedPackages } from '@iota/core'; +import { useNetwork } from '~/hooks'; export function useResolveVideo(object: IotaObjectResponse): string | undefined | null { - const recognizedPackages = useRecognizedPackages(); + const [network] = useNetwork(); + const recognizedPackages = useRecognizedPackages(network as Network); const objectType = (object.data?.type ?? object?.data?.content?.dataType === 'package') ? 'package' diff --git a/apps/explorer/src/pages/transaction-result/TransactionData.tsx b/apps/explorer/src/pages/transaction-result/TransactionData.tsx index de3d78e5890..17617d7363a 100644 --- a/apps/explorer/src/pages/transaction-result/TransactionData.tsx +++ b/apps/explorer/src/pages/transaction-result/TransactionData.tsx @@ -2,13 +2,14 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { useTransactionSummary } from '@iota/core'; +import { useTransactionSummary, useRecognizedPackages } from '@iota/core'; import { type ProgrammableTransaction, type IotaTransactionBlockResponse, + type Network, } from '@iota/iota-sdk/client'; import { GasBreakdown } from '~/components'; -import { useRecognizedPackages } from '~/hooks/useRecognizedPackages'; +import { useNetwork } from '~/hooks/useNetwork'; import { InputsCard } from '~/pages/transaction-result/programmable-transaction-view/InputsCard'; import { TransactionsCard } from '~/pages/transaction-result/programmable-transaction-view/TransactionsCard'; @@ -17,7 +18,8 @@ interface TransactionDataProps { } export function TransactionData({ transaction }: TransactionDataProps): JSX.Element { - const recognizedPackagesList = useRecognizedPackages(); + const [network] = useNetwork(); + const recognizedPackagesList = useRecognizedPackages(network as Network); const summary = useTransactionSummary({ transaction, recognizedPackagesList, diff --git a/apps/explorer/src/pages/transaction-result/TransactionView.tsx b/apps/explorer/src/pages/transaction-result/TransactionView.tsx index 06b5f3d6c15..73af5407edf 100644 --- a/apps/explorer/src/pages/transaction-result/TransactionView.tsx +++ b/apps/explorer/src/pages/transaction-result/TransactionView.tsx @@ -2,7 +2,7 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { type IotaTransactionBlockResponse } from '@iota/iota-sdk/client'; +import { type Network, type IotaTransactionBlockResponse } from '@iota/iota-sdk/client'; import clsx from 'clsx'; import { useState } from 'react'; import { ErrorBoundary, SplitPanes } from '~/components'; @@ -11,8 +11,8 @@ import { TransactionData } from '~/pages/transaction-result/TransactionData'; import { TransactionSummary } from '~/pages/transaction-result/transaction-summary'; import { Signatures } from './Signatures'; import { TransactionDetails } from './transaction-summary/TransactionDetails'; -import { useTransactionSummary } from '@iota/core'; -import { useBreakpoint, useRecognizedPackages } from '~/hooks'; +import { useTransactionSummary, useRecognizedPackages } from '@iota/core'; +import { useBreakpoint, useNetwork } from '~/hooks'; import { ButtonSegment, ButtonSegmentType, @@ -42,7 +42,8 @@ export function TransactionView({ transaction }: TransactionViewProps): JSX.Elem const transactionKindName = transaction.transaction?.data.transaction?.kind; const isProgrammableTransaction = transactionKindName === 'ProgrammableTransaction'; - const recognizedPackagesList = useRecognizedPackages(); + const [network] = useNetwork(); + const recognizedPackagesList = useRecognizedPackages(network as Network); const summary = useTransactionSummary({ transaction, recognizedPackagesList, diff --git a/apps/explorer/src/pages/transaction-result/programmable-transaction-view/utils.ts b/apps/explorer/src/pages/transaction-result/programmable-transaction-view/utils.ts index 92e2e32d939..e239ce3a86e 100644 --- a/apps/explorer/src/pages/transaction-result/programmable-transaction-view/utils.ts +++ b/apps/explorer/src/pages/transaction-result/programmable-transaction-view/utils.ts @@ -24,10 +24,11 @@ export function flattenIotaArguments(data: (IotaArgument | IotaArgument[])[]): s } else if ('NestedResult' in value) { return `NestedResult(${value.NestedResult[0]}, ${value.NestedResult[1]})`; } + } else if (typeof value === 'string') { + return value; } else { throw new Error('Not a correct flattenable data'); } - return ''; }) .join(', '); } diff --git a/apps/explorer/src/pages/transaction-result/transaction-summary/index.tsx b/apps/explorer/src/pages/transaction-result/transaction-summary/index.tsx index 7ea356fbcb2..ea5d48cbab6 100644 --- a/apps/explorer/src/pages/transaction-result/transaction-summary/index.tsx +++ b/apps/explorer/src/pages/transaction-result/transaction-summary/index.tsx @@ -2,20 +2,20 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import { useTransactionSummary } from '@iota/core'; -import { type IotaTransactionBlockResponse } from '@iota/iota-sdk/client'; - +import { useTransactionSummary, useRecognizedPackages } from '@iota/core'; +import { type IotaTransactionBlockResponse, type Network } from '@iota/iota-sdk/client'; import { BalanceChanges } from './BalanceChanges'; import { ObjectChanges } from './ObjectChanges'; import { UpgradedSystemPackages } from './UpgradedSystemPackages'; -import { useRecognizedPackages } from '~/hooks/useRecognizedPackages'; +import { useNetwork } from '~/hooks'; interface TransactionSummaryProps { transaction: IotaTransactionBlockResponse; } export function TransactionSummary({ transaction }: TransactionSummaryProps): JSX.Element { - const recognizedPackagesList = useRecognizedPackages(); + const [network] = useNetwork(); + const recognizedPackagesList = useRecognizedPackages(network as Network); const summary = useTransactionSummary({ transaction, recognizedPackagesList, diff --git a/apps/ui-kit/package.json b/apps/ui-kit/package.json index ff323347fea..89e9785c466 100644 --- a/apps/ui-kit/package.json +++ b/apps/ui-kit/package.json @@ -66,7 +66,7 @@ "tailwindcss": "^3.3.3", "typescript": "^5.5.3", "vite": "^5.3.3", - "vite-plugin-dts": "^3.9.1", + "vite-plugin-dts": "^4.3.0", "vite-tsconfig-paths": "^4.2.0" } } diff --git a/apps/ui-kit/src/lib/components/atoms/index.ts b/apps/ui-kit/src/lib/components/atoms/index.ts index 373f611cd1e..12a58426391 100644 --- a/apps/ui-kit/src/lib/components/atoms/index.ts +++ b/apps/ui-kit/src/lib/components/atoms/index.ts @@ -19,3 +19,4 @@ export * from './snackbar'; export * from './visual-asset-card'; export * from './loading-indicator'; export * from './placeholder'; +export * from './skeleton'; diff --git a/apps/ui-kit/src/lib/components/atoms/key-value-info/KeyValueInfo.tsx b/apps/ui-kit/src/lib/components/atoms/key-value-info/KeyValueInfo.tsx index 569054372f2..d15da2af5de 100644 --- a/apps/ui-kit/src/lib/components/atoms/key-value-info/KeyValueInfo.tsx +++ b/apps/ui-kit/src/lib/components/atoms/key-value-info/KeyValueInfo.tsx @@ -57,6 +57,10 @@ interface KeyValueProps { * Reverse the KeyValue (optional). */ isReverse?: boolean; + /** + * Text shown on value hover. + */ + valueHoverTitle?: string; } export function KeyValueInfo({ @@ -72,6 +76,7 @@ export function KeyValueInfo({ onCopyError, fullwidth, isReverse = false, + valueHoverTitle, }: KeyValueProps): React.JSX.Element { const flexDirectionClass = isReverse ? 'flex-row-reverse' : 'flex-row'; async function handleCopyClick(event: React.MouseEvent) { @@ -119,6 +124,7 @@ export function KeyValueInfo({ })} > ): React.JSX.Element { function handleKeyDown(event: React.KeyboardEvent) { if ((event.key === 'Enter' || event.key === ' ') && !isDisabled && onClick) { @@ -63,7 +68,10 @@ export function ListItem({ className={cx( 'relative flex flex-row items-center justify-between px-md py-sm text-neutral-10 dark:text-neutral-92', !isDisabled && onClick ? 'cursor-pointer' : 'cursor-default', - { 'state-layer': !isDisabled }, + { + 'bg-shader-primary-dark-16 dark:bg-shader-inverted-dark-16': isHighlighted, + 'state-layer': !isDisabled, + }, )} > {children} diff --git a/apps/ui-kit/src/lib/components/atoms/loading-indicator/LoadingIndicator.tsx b/apps/ui-kit/src/lib/components/atoms/loading-indicator/LoadingIndicator.tsx index 6a0c8d5df45..86160c55771 100644 --- a/apps/ui-kit/src/lib/components/atoms/loading-indicator/LoadingIndicator.tsx +++ b/apps/ui-kit/src/lib/components/atoms/loading-indicator/LoadingIndicator.tsx @@ -18,16 +18,21 @@ export interface LoadingIndicatorProps { * The text to display next to the loading indicator. */ text?: string; + /** + * The 'data-testid' attribute value (used in e2e tests) + */ + testId?: string; } export function LoadingIndicator({ color = 'text-primary-30 dark:text-primary-80', size = 'w-5 h-5', text, + testId, }: LoadingIndicatorProps): React.JSX.Element { return (
- + {text && {text}}
); diff --git a/apps/ui-kit/src/lib/components/atoms/skeleton/Skeleton.tsx b/apps/ui-kit/src/lib/components/atoms/skeleton/Skeleton.tsx new file mode 100644 index 00000000000..9504693f036 --- /dev/null +++ b/apps/ui-kit/src/lib/components/atoms/skeleton/Skeleton.tsx @@ -0,0 +1,47 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import cx from 'classnames'; + +interface SkeletonLoaderProps { + /** + * Width class for the skeleton div. + */ + widthClass?: string; + /** + * Height class for the skeleton div. + */ + heightClass?: string; + /** + * If true, the skeleton will use darker neutral colors. + */ + hasSecondaryColors?: boolean; + /** + * Whether the class `rounded-full` should be applied. Defaults to true. + */ + isRounded?: boolean; +} + +export function Skeleton({ + children, + widthClass = 'w-full', + heightClass = 'h-3', + hasSecondaryColors, + isRounded = true, +}: React.PropsWithChildren): React.JSX.Element { + return ( +
+ {children} +
+ ); +} diff --git a/apps/wallet-dashboard/contexts/index.ts b/apps/ui-kit/src/lib/components/atoms/skeleton/index.ts similarity index 70% rename from apps/wallet-dashboard/contexts/index.ts rename to apps/ui-kit/src/lib/components/atoms/skeleton/index.ts index d356e2485ed..4540f454c5f 100644 --- a/apps/wallet-dashboard/contexts/index.ts +++ b/apps/ui-kit/src/lib/components/atoms/skeleton/index.ts @@ -1,4 +1,4 @@ // Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -export * from './PopupContext'; +export * from './Skeleton'; diff --git a/apps/ui-kit/src/storybook/stories/atoms/Skeleton.stories.tsx b/apps/ui-kit/src/storybook/stories/atoms/Skeleton.stories.tsx new file mode 100644 index 00000000000..cb611c8cf08 --- /dev/null +++ b/apps/ui-kit/src/storybook/stories/atoms/Skeleton.stories.tsx @@ -0,0 +1,33 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import type { Meta, StoryObj } from '@storybook/react'; +import { Card, CardImage, ImageShape, Skeleton } from '@/components'; + +const meta: Meta = { + component: Skeleton, + tags: ['autodocs'], +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const SkeletonCard: Story = { + render: () => ( + + +
+ + +
+ + +
+
+ + +
+ + ), +}; diff --git a/apps/wallet-dashboard/app/(protected)/assets/page.tsx b/apps/wallet-dashboard/app/(protected)/assets/page.tsx index ed96fe0a519..7007cc86c5c 100644 --- a/apps/wallet-dashboard/app/(protected)/assets/page.tsx +++ b/apps/wallet-dashboard/app/(protected)/assets/page.tsx @@ -29,7 +29,7 @@ export default function AssetsDashboardPage(): React.JSX.Element { const [selectedAsset, setSelectedAsset] = useState(null); const [selectedCategory, setSelectedCategory] = useState(AssetCategory.Visual); const account = useCurrentAccount(); - const { data, isFetching, fetchNextPage, hasNextPage } = useGetOwnedObjects( + const { data, isFetching, fetchNextPage, hasNextPage, refetch } = useGetOwnedObjects( account?.address, undefined, OBJECTS_PER_REQ, @@ -79,7 +79,11 @@ export default function AssetsDashboardPage(): React.JSX.Element { fetchNextPage={fetchNextPage} /> {selectedAsset && ( - setSelectedAsset(null)} asset={selectedAsset} /> + setSelectedAsset(null)} + asset={selectedAsset} + refetchAssets={refetch} + /> )}
diff --git a/apps/wallet-dashboard/app/(protected)/components/top-nav/TopNav.tsx b/apps/wallet-dashboard/app/(protected)/components/top-nav/TopNav.tsx index 8dd5f01ca2b..3b802387ca8 100644 --- a/apps/wallet-dashboard/app/(protected)/components/top-nav/TopNav.tsx +++ b/apps/wallet-dashboard/app/(protected)/components/top-nav/TopNav.tsx @@ -1,16 +1,43 @@ // Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +import { SettingsDialog, useSettingsDialog } from '@/components'; import { Badge, BadgeType, Button, ButtonType } from '@iota/apps-ui-kit'; -import { ConnectButton } from '@iota/dapp-kit'; +import { ConnectButton, useIotaClientContext } from '@iota/dapp-kit'; +import { getNetwork, Network } from '@iota/iota-sdk/client'; +import { ThemeSwitcher } from '@iota/core'; import { Settings } from '@iota/ui-icons'; export function TopNav() { + const { network } = useIotaClientContext(); + const { name: networkName } = getNetwork(network); + const { + isSettingsDialogOpen, + settingsDialogView, + setSettingsDialogView, + onCloseSettingsDialogClick, + onOpenSettingsDialogClick, + } = useSettingsDialog(); + return (
- + -
); } diff --git a/apps/wallet-dashboard/app/(protected)/home/page.tsx b/apps/wallet-dashboard/app/(protected)/home/page.tsx index 61f55475702..d435d44f630 100644 --- a/apps/wallet-dashboard/app/(protected)/home/page.tsx +++ b/apps/wallet-dashboard/app/(protected)/home/page.tsx @@ -8,6 +8,7 @@ import { TransactionsOverview, StakingOverview, MigrationOverview, + SupplyIncreaseVestingOverview, } from '@/components'; import { useFeature } from '@growthbook/growthbook-react'; import { Feature } from '@iota/core'; @@ -18,12 +19,13 @@ function HomeDashboardPage(): JSX.Element { const account = useCurrentAccount(); const stardustMigrationEnabled = useFeature(Feature.StardustMigration).value; + const supplyIncreaseVestingEnabled = useFeature(Feature.SupplyIncreaseVesting).value; return (
{connectionStatus === 'connected' && account && ( <> -
+
@@ -31,12 +33,10 @@ function HomeDashboardPage(): JSX.Element {
{stardustMigrationEnabled && } -
+
-
- Vesting -
+ {supplyIncreaseVestingEnabled && }
diff --git a/apps/wallet-dashboard/app/(protected)/layout.tsx b/apps/wallet-dashboard/app/(protected)/layout.tsx index a77c8922ab9..72fa80c67cc 100644 --- a/apps/wallet-dashboard/app/(protected)/layout.tsx +++ b/apps/wallet-dashboard/app/(protected)/layout.tsx @@ -4,21 +4,9 @@ import { Notifications } from '@/components/index'; import React, { type PropsWithChildren } from 'react'; -import { Button } from '@iota/apps-ui-kit'; import { Sidebar, TopNav } from './components'; -import { ThemePreference, useTheme } from '@iota/core'; function DashboardLayout({ children }: PropsWithChildren): JSX.Element { - const { theme, themePreference, setThemePreference } = useTheme(); - - const toggleTheme = () => { - const newTheme = - themePreference === ThemePreference.Light - ? ThemePreference.Dark - : ThemePreference.Light; - setThemePreference(newTheme); - }; - return (
@@ -34,14 +22,6 @@ function DashboardLayout({ children }: PropsWithChildren): JSX.Element {
{children}
- -
-
-
); diff --git a/apps/wallet-dashboard/app/(protected)/migrations/page.tsx b/apps/wallet-dashboard/app/(protected)/migrations/page.tsx index 544f352e963..e2cd767e663 100644 --- a/apps/wallet-dashboard/app/(protected)/migrations/page.tsx +++ b/apps/wallet-dashboard/app/(protected)/migrations/page.tsx @@ -1,10 +1,13 @@ // Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 + 'use client'; -import MigratePopup from '@/components/Popup/Popups/MigratePopup'; -import { usePopups } from '@/hooks'; -import { summarizeMigratableObjectValues } from '@/lib/utils'; +import { useState, useMemo, useCallback } from 'react'; +import { useQueryClient } from '@tanstack/react-query'; +import clsx from 'clsx'; +import { useGetStardustMigratableObjects } from '@/hooks'; +import { summarizeMigratableObjectValues, summarizeTimelockedObjectValues } from '@/lib/utils'; import { Button, ButtonSize, @@ -16,119 +19,156 @@ import { Panel, Title, } from '@iota/apps-ui-kit'; +import { Assets, Clock, IotaLogoMark, Tokens } from '@iota/ui-icons'; import { useCurrentAccount, useIotaClient } from '@iota/dapp-kit'; import { STARDUST_BASIC_OUTPUT_TYPE, STARDUST_NFT_OUTPUT_TYPE, useFormatCoin } from '@iota/core'; -import { useGetStardustMigratableObjects } from '@/hooks'; -import { useQueryClient } from '@tanstack/react-query'; -import { Assets, Clock, IotaLogoMark, Tokens } from '@iota/ui-icons'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; - -interface MigrationDisplayCard { - title: string; - subtitle: string; - icon: React.FC; -} +import { StardustOutputMigrationStatus } from '@/lib/enums'; +import { MigrationObjectsPanel, MigrationDialog } from '@/components'; +import { useRouter } from 'next/navigation'; function MigrationDashboardPage(): JSX.Element { const account = useCurrentAccount(); const address = account?.address || ''; - const { openPopup, closePopup } = usePopups(); const queryClient = useQueryClient(); const iotaClient = useIotaClient(); + const router = useRouter(); + const [isMigrationDialogOpen, setIsMigrationDialogOpen] = useState(false); + const [selectedStardustObjectsCategory, setSelectedStardustObjectsCategory] = useState< + StardustOutputMigrationStatus | undefined + >(undefined); + const { data: stardustMigrationObjects, isPlaceholderData } = + useGetStardustMigratableObjects(address); const { migratableBasicOutputs, - unmigratableBasicOutputs, migratableNftOutputs, - unmigratableNftOutputs, - } = useGetStardustMigratableObjects(address); + timelockedBasicOutputs, + timelockedNftOutputs, + } = stardustMigrationObjects || {}; + + const { + totalIotaAmount, + totalNativeTokens: migratableNativeTokens, + totalVisualAssets: migratableVisualAssets, + } = summarizeMigratableObjectValues({ + basicOutputs: migratableBasicOutputs, + nftOutputs: migratableNftOutputs, + address, + }); + const { totalTimelockedObjects } = summarizeTimelockedObjectValues({ + basicOutputs: timelockedBasicOutputs, + nftOutputs: timelockedNftOutputs, + }); const hasMigratableObjects = - migratableBasicOutputs.length > 0 || migratableNftOutputs.length > 0; - - function handleOnSuccess(digest: string): void { - iotaClient - .waitForTransaction({ - digest, - }) - .then(() => { + (migratableBasicOutputs?.length || 0) > 0 && (migratableNftOutputs?.length || 0) > 0; + + const [timelockedIotaTokens, symbol] = useFormatCoin(totalIotaAmount, IOTA_TYPE_ARG); + + const handleOnSuccess = useCallback( + (digest: string) => { + iotaClient.waitForTransaction({ digest }).then(() => { queryClient.invalidateQueries({ queryKey: [ 'get-all-owned-objects', address, - { - StructType: STARDUST_BASIC_OUTPUT_TYPE, - }, + { StructType: STARDUST_BASIC_OUTPUT_TYPE }, ], }); queryClient.invalidateQueries({ queryKey: [ 'get-all-owned-objects', address, - { - StructType: STARDUST_NFT_OUTPUT_TYPE, - }, + { StructType: STARDUST_NFT_OUTPUT_TYPE }, ], }); }); - } - function openMigratePopup(): void { - openPopup( - , - ); - } - - const { - accumulatedIotaAmount: accumulatedTimelockedIotaAmount, - totalNativeTokens, - totalVisualAssets, - } = summarizeMigratableObjectValues({ - migratableBasicOutputs, - migratableNftOutputs, - address, - }); - - const [timelockedIotaTokens, symbol] = useFormatCoin( - accumulatedTimelockedIotaAmount, - IOTA_TYPE_ARG, + }, + [iotaClient, queryClient, address], ); - const MIGRATION_CARDS: MigrationDisplayCard[] = [ + const MIGRATION_CARDS: MigrationDisplayCardProps[] = [ { title: `${timelockedIotaTokens} ${symbol}`, subtitle: 'IOTA Tokens', icon: IotaLogoMark, }, { - title: `${totalNativeTokens}`, + title: `${migratableNativeTokens}`, subtitle: 'Native Tokens', icon: Tokens, }, { - title: `${totalVisualAssets}`, + title: `${migratableVisualAssets}`, subtitle: 'Visual Assets', icon: Assets, }, ]; - const timelockedAssetsAmount = unmigratableBasicOutputs.length + unmigratableNftOutputs.length; - const TIMELOCKED_ASSETS_CARDS: MigrationDisplayCard[] = [ + const TIMELOCKED_ASSETS_CARDS: MigrationDisplayCardProps[] = [ { - title: `${timelockedAssetsAmount}`, + title: `${totalTimelockedObjects}`, subtitle: 'Time-locked', icon: Clock, }, ]; + const selectedObjects = useMemo(() => { + if (stardustMigrationObjects) { + if (selectedStardustObjectsCategory === StardustOutputMigrationStatus.Migratable) { + return [ + ...stardustMigrationObjects.migratableBasicOutputs, + ...stardustMigrationObjects.migratableNftOutputs, + ]; + } else if ( + selectedStardustObjectsCategory === StardustOutputMigrationStatus.TimeLocked + ) { + return [ + ...stardustMigrationObjects.timelockedBasicOutputs, + ...stardustMigrationObjects.timelockedNftOutputs, + ]; + } + } + return []; + }, [selectedStardustObjectsCategory, stardustMigrationObjects]); + + function openMigrationDialog(): void { + setIsMigrationDialogOpen(true); + } + + function handleCloseDetailsPanel() { + setSelectedStardustObjectsCategory(undefined); + } + + function handleMigrationDialogClose() { + setIsMigrationDialogOpen(false); + router.push('/'); + } + return (
-
+
+ {isMigrationDialogOpen && ( + + )} } /> <div className="flex flex-col gap-xs p-md--rs"> {MIGRATION_CARDS.map((card) => ( - <Card key={card.subtitle}> - <CardImage shape={ImageShape.SquareRounded}> - <card.icon /> - </CardImage> - <CardBody title={card.title} subtitle={card.subtitle} /> - </Card> + <MigrationDisplayCard + key={card.subtitle} + isPlaceholder={isPlaceholderData} + {...card} + /> ))} - <Button text="See All" type={ButtonType.Ghost} fullWidth /> + <Button + text="See All" + type={ButtonType.Ghost} + fullWidth + disabled={ + selectedStardustObjectsCategory === + StardustOutputMigrationStatus.Migratable || + !hasMigratableObjects + } + onClick={() => + setSelectedStardustObjectsCategory( + StardustOutputMigrationStatus.Migratable, + ) + } + /> </div> </Panel> @@ -158,20 +211,64 @@ function MigrationDashboardPage(): JSX.Element { <Title title="Time-locked Assets" /> <div className="flex flex-col gap-xs p-md--rs"> {TIMELOCKED_ASSETS_CARDS.map((card) => ( - <Card key={card.subtitle}> - <CardImage shape={ImageShape.SquareRounded}> - <card.icon /> - </CardImage> - <CardBody title={card.title} subtitle={card.subtitle} /> - </Card> + <MigrationDisplayCard + key={card.subtitle} + isPlaceholder={isPlaceholderData} + {...card} + /> ))} - <Button text="See All" type={ButtonType.Ghost} fullWidth /> + <Button + text="See All" + type={ButtonType.Ghost} + fullWidth + disabled={ + selectedStardustObjectsCategory === + StardustOutputMigrationStatus.TimeLocked || + !totalTimelockedObjects + } + onClick={() => + setSelectedStardustObjectsCategory( + StardustOutputMigrationStatus.TimeLocked, + ) + } + /> </div> </Panel> </div> + + <MigrationObjectsPanel + selectedObjects={selectedObjects} + onClose={handleCloseDetailsPanel} + isTimelocked={ + selectedStardustObjectsCategory === StardustOutputMigrationStatus.TimeLocked + } + /> </div> </div> ); } +interface MigrationDisplayCardProps { + title: string; + subtitle: string; + icon: React.ComponentType; + isPlaceholder?: boolean; +} + +function MigrationDisplayCard({ + title, + subtitle, + icon: Icon, + isPlaceholder, +}: MigrationDisplayCardProps): React.JSX.Element { + return ( + <Card> + <CardImage shape={ImageShape.SquareRounded}> + <Icon /> + </CardImage> + <CardBody title={isPlaceholder ? '--' : title} subtitle={subtitle} /> + </Card> + ); +} + export default MigrationDashboardPage; diff --git a/apps/wallet-dashboard/app/(protected)/staking/page.tsx b/apps/wallet-dashboard/app/(protected)/staking/page.tsx index e33b1253b95..87f69eccffa 100644 --- a/apps/wallet-dashboard/app/(protected)/staking/page.tsx +++ b/apps/wallet-dashboard/app/(protected)/staking/page.tsx @@ -3,7 +3,6 @@ 'use client'; -import { StartStaking } from '@/components/staking-overview/StartStaking'; import { Button, ButtonSize, @@ -16,7 +15,15 @@ import { Title, TitleSize, } from '@iota/apps-ui-kit'; -import { StakeDialog, StakeDialogView } from '@/components'; +import { + StakeDialog, + StakeDialogView, + UnstakeDialog, + useUnstakeDialog, + UnstakeDialogView, + useStakeDialog, + StartStaking, +} from '@/components'; import { ExtendedDelegatedStake, formatDelegatedStake, @@ -32,8 +39,8 @@ import { useCurrentAccount, useIotaClient, useIotaClientQuery } from '@iota/dapp import { IotaSystemStateSummary } from '@iota/iota-sdk/client'; import { Info } from '@iota/ui-icons'; import { useMemo } from 'react'; -import { useStakeDialog } from '@/components/Dialogs/Staking/hooks/useStakeDialog'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { IotaSignAndExecuteTransactionOutput } from '@iota/wallet-standard'; function StakingDashboardPage(): React.JSX.Element { const account = useCurrentAccount(); @@ -52,6 +59,14 @@ function StakingDashboardPage(): React.JSX.Element { handleCloseStakeDialog, handleNewStake, } = useStakeDialog(); + const { + isOpen: isUnstakeDialogOpen, + openUnstakeDialog, + defaultDialogProps, + handleClose: handleCloseUnstakeDialog, + setView: setUnstakeDialogView, + setTxDigest, + } = useUnstakeDialog(); const { data: delegatedStakeData, refetch: refetchDelegatedStakes } = useGetDelegatedStake({ address: account?.address || '', @@ -100,6 +115,34 @@ function StakingDashboardPage(): React.JSX.Element { .then(() => refetchDelegatedStakes()); } + function handleUnstakeClick() { + setStakeDialogView(undefined); + openUnstakeDialog(); + } + + function handleUnstakeDialogBack() { + setStakeDialogView(StakeDialogView.Details); + handleCloseUnstakeDialog(); + } + + function handleOnUnstakeBack(view: UnstakeDialogView): (() => void) | undefined { + if (view === UnstakeDialogView.Unstake) { + return handleUnstakeDialogBack; + } + } + + function handleOnUnstakeSuccess(tx: IotaSignAndExecuteTransactionOutput): void { + setUnstakeDialogView(UnstakeDialogView.TransactionDetails); + iotaClient + .waitForTransaction({ + digest: tx.digest, + }) + .then((tx) => { + refetchDelegatedStakes(); + setTxDigest(tx.digest); + }); + } + return ( <div className="flex justify-center"> <div className="w-3/4"> @@ -171,16 +214,27 @@ function StakingDashboardPage(): React.JSX.Element { </div> </div> </div> - <StakeDialog - stakedDetails={selectedStake} - onSuccess={handleOnStakeSuccess} - isOpen={isDialogStakeOpen} - handleClose={handleCloseStakeDialog} - view={stakeDialogView} - setView={setStakeDialogView} - selectedValidator={selectedValidator} - setSelectedValidator={setSelectedValidator} - /> + {isDialogStakeOpen && ( + <StakeDialog + stakedDetails={selectedStake} + onSuccess={handleOnStakeSuccess} + handleClose={handleCloseStakeDialog} + view={stakeDialogView} + setView={setStakeDialogView} + selectedValidator={selectedValidator} + setSelectedValidator={setSelectedValidator} + onUnstakeClick={handleUnstakeClick} + /> + )} + + {isUnstakeDialogOpen && selectedStake && ( + <UnstakeDialog + extendedStake={selectedStake} + onBack={handleOnUnstakeBack} + onSuccess={handleOnUnstakeSuccess} + {...defaultDialogProps} + /> + )} </Panel> ) : ( <div className="flex h-[270px] p-lg"> diff --git a/apps/wallet-dashboard/app/(protected)/vesting/page.tsx b/apps/wallet-dashboard/app/(protected)/vesting/page.tsx index b925d57e97c..e29d94a7fef 100644 --- a/apps/wallet-dashboard/app/(protected)/vesting/page.tsx +++ b/apps/wallet-dashboard/app/(protected)/vesting/page.tsx @@ -6,22 +6,15 @@ import { Banner, StakeDialog, - StakeDialogView, - TimelockedUnstakePopup, useStakeDialog, VestingScheduleDialog, + UnstakeDialog, + StakeDialogView, } from '@/components'; -import { useGetCurrentEpochStartTimestamp, useNotifications, usePopups } from '@/hooks'; -import { - buildSupplyIncreaseVestingSchedule, - formatDelegatedTimelockedStake, - getLatestOrEarliestSupplyIncreaseVestingPayout, - getVestingOverview, - groupTimelockedStakedObjects, - isTimelockedUnlockable, - mapTimelockObjects, - TimelockedStakedObjectsGrouped, -} from '@/lib/utils'; +import { UnstakeDialogView } from '@/components/Dialogs/unstake/enums'; +import { useUnstakeDialog } from '@/components/Dialogs/unstake/hooks'; +import { useGetSupplyIncreaseVestingObjects, useNotifications } from '@/hooks'; +import { groupTimelockedStakedObjects, TimelockedStakedObjectsGrouped } from '@/lib/utils'; import { NotificationType } from '@/stores/notificationStore'; import { useFeature } from '@growthbook/growthbook-react'; import { @@ -44,13 +37,9 @@ import { } from '@iota/apps-ui-kit'; import { Theme, - TIMELOCK_IOTA_TYPE, useFormatCoin, useGetActiveValidatorsInfo, - useGetAllOwnedObjects, - useGetTimelockedStakedObjects, useTheme, - useUnlockTimelockedObjectsTransaction, useCountdownByTimestamp, Feature, } from '@iota/core'; @@ -63,29 +52,22 @@ import { import { IotaValidatorSummary } from '@iota/iota-sdk/client'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; import { Calendar, StarHex } from '@iota/ui-icons'; -import { useQueryClient } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import { StakedTimelockObject } from '@/components'; +import { IotaSignAndExecuteTransactionOutput } from '@iota/wallet-standard'; -function VestingDashboardPage(): JSX.Element { +export default function VestingDashboardPage(): JSX.Element { + const [timelockedObjectsToUnstake, setTimelockedObjectsToUnstake] = + useState<TimelockedStakedObjectsGrouped | null>(null); const account = useCurrentAccount(); - const queryClient = useQueryClient(); + const address = account?.address || ''; const iotaClient = useIotaClient(); const router = useRouter(); const { data: system } = useIotaClientQuery('getLatestIotaSystemState'); const [isVestingScheduleDialogOpen, setIsVestingScheduleDialogOpen] = useState(false); const { addNotification } = useNotifications(); - const { openPopup, closePopup } = usePopups(); - const { data: currentEpochMs } = useGetCurrentEpochStartTimestamp(); const { data: activeValidators } = useGetActiveValidatorsInfo(); - const { data: timelockedObjects } = useGetAllOwnedObjects(account?.address || '', { - StructType: TIMELOCK_IOTA_TYPE, - }); - - const { data: timelockedStakedObjects, isLoading: istimelockedStakedObjectsLoading } = - useGetTimelockedStakedObjects(account?.address || ''); - const { mutateAsync: signAndExecuteTransaction } = useSignAndExecuteTransaction(); const { theme } = useTheme(); @@ -96,16 +78,19 @@ function VestingDashboardPage(): JSX.Element { const supplyIncreaseVestingEnabled = useFeature<boolean>(Feature.SupplyIncreaseVesting).value; - const timelockedMapped = mapTimelockObjects(timelockedObjects || []); - const timelockedstakedMapped = formatDelegatedTimelockedStake(timelockedStakedObjects || []); + const { + nextPayout, + supplyIncreaseVestingPortfolio, + supplyIncreaseVestingSchedule, + supplyIncreaseVestingMapped, + supplyIncreaseVestingStakedMapped, + isTimelockedStakedObjectsLoading, + unlockAllSupplyIncreaseVesting, + refreshStakeList, + } = useGetSupplyIncreaseVestingObjects(address); const timelockedStakedObjectsGrouped: TimelockedStakedObjectsGrouped[] = - groupTimelockedStakedObjects(timelockedstakedMapped || []); - - const vestingSchedule = getVestingOverview( - [...timelockedMapped, ...timelockedstakedMapped], - Number(currentEpochMs), - ); + groupTimelockedStakedObjects(supplyIncreaseVestingStakedMapped || []); const { isDialogStakeOpen, @@ -118,37 +103,30 @@ function VestingDashboardPage(): JSX.Element { handleNewStake, } = useStakeDialog(); - const nextPayout = getLatestOrEarliestSupplyIncreaseVestingPayout( - [...timelockedMapped, ...timelockedstakedMapped], - Number(currentEpochMs), - false, - ); - - const lastPayout = getLatestOrEarliestSupplyIncreaseVestingPayout( - [...timelockedMapped, ...timelockedstakedMapped], - Number(currentEpochMs), - true, - ); - - const vestingPortfolio = - lastPayout && buildSupplyIncreaseVestingSchedule(lastPayout, Number(currentEpochMs)); + const { + isOpen: isUnstakeDialogOpen, + openUnstakeDialog, + defaultDialogProps, + setTxDigest, + setView: setUnstakeDialogView, + } = useUnstakeDialog(); const formattedLastPayoutExpirationTime = useCountdownByTimestamp( Number(nextPayout?.expirationTimestampMs), ); const [formattedTotalVested, vestedSymbol] = useFormatCoin( - vestingSchedule.totalVested, + supplyIncreaseVestingSchedule.totalVested, IOTA_TYPE_ARG, ); const [formattedTotalLocked, lockedSymbol] = useFormatCoin( - vestingSchedule.totalLocked, + supplyIncreaseVestingSchedule.totalLocked, IOTA_TYPE_ARG, ); const [formattedAvailableClaiming, availableClaimingSymbol] = useFormatCoin( - vestingSchedule.availableClaiming, + supplyIncreaseVestingSchedule.availableClaiming, IOTA_TYPE_ARG, ); @@ -164,54 +142,33 @@ function VestingDashboardPage(): JSX.Element { } const [totalStakedFormatted, totalStakedSymbol] = useFormatCoin( - vestingSchedule.totalStaked, + supplyIncreaseVestingSchedule.totalStaked, IOTA_TYPE_ARG, ); const [totalEarnedFormatted, totalEarnedSymbol] = useFormatCoin( - vestingSchedule.totalEarned, + supplyIncreaseVestingSchedule.totalEarned, IOTA_TYPE_ARG, ); - const unlockedTimelockedObjects = timelockedMapped?.filter((timelockedObject) => - isTimelockedUnlockable(timelockedObject, Number(currentEpochMs)), - ); - const unlockedTimelockedObjectIds: string[] = - unlockedTimelockedObjects.map((timelocked) => timelocked.id.id) || []; - const { data: unlockAllTimelockedObjects } = useUnlockTimelockedObjectsTransaction( - account?.address || '', - unlockedTimelockedObjectIds, - ); - function handleOnSuccess(digest: string): void { + setTimelockedObjectsToUnstake(null); + iotaClient .waitForTransaction({ digest, }) - .then(() => { - queryClient.invalidateQueries({ - queryKey: ['get-timelocked-staked-objects', account?.address], - }); - queryClient.invalidateQueries({ - queryKey: [ - 'get-all-owned-objects', - account?.address, - { - StructType: TIMELOCK_IOTA_TYPE, - }, - ], - }); - }); + .then(refreshStakeList); } const handleCollect = () => { - if (!unlockAllTimelockedObjects?.transactionBlock) { + if (!unlockAllSupplyIncreaseVesting?.transactionBlock) { addNotification('Failed to create a Transaction', NotificationType.Error); return; } signAndExecuteTransaction( { - transaction: unlockAllTimelockedObjects.transactionBlock, + transaction: unlockAllSupplyIncreaseVesting.transactionBlock, }, { onSuccess: (tx) => { @@ -228,34 +185,29 @@ function VestingDashboardPage(): JSX.Element { }; function handleUnstake(delegatedTimelockedStake: TimelockedStakedObjectsGrouped): void { - const validatorInfo = getValidatorByAddress(delegatedTimelockedStake.validatorAddress); - if (!account || !validatorInfo) { - addNotification('Cannot create transaction', NotificationType.Error); - return; - } - - openPopup( - <TimelockedUnstakePopup - accountAddress={account.address} - delegatedStake={delegatedTimelockedStake} - validatorInfo={validatorInfo} - closePopup={closePopup} - onSuccess={handleOnSuccess} - />, - ); + setTimelockedObjectsToUnstake(delegatedTimelockedStake); + openUnstakeDialog(UnstakeDialogView.TimelockedUnstake); } - function openReceiveTokenPopup(): void { + function openReceiveTokenDialog(): void { setIsVestingScheduleDialogOpen(true); } + function handleOnSuccessUnstake(tx: IotaSignAndExecuteTransactionOutput): void { + setUnstakeDialogView(UnstakeDialogView.TransactionDetails); + iotaClient.waitForTransaction({ digest: tx.digest }).then((tx) => { + refreshStakeList(); + setTxDigest(tx.digest); + }); + } + useEffect(() => { if (!supplyIncreaseVestingEnabled) { router.push('/'); } }, [router, supplyIncreaseVestingEnabled]); - if (istimelockedStakedObjectsLoading) { + if (isTimelockedStakedObjectsLoading) { return ( <div className="flex w-full max-w-4xl items-start justify-center justify-self-center"> <LoadingIndicator /> @@ -264,152 +216,177 @@ function VestingDashboardPage(): JSX.Element { } return ( - <div className="flex w-full max-w-4xl flex-col items-stretch justify-center gap-lg justify-self-center md:flex-row"> - <div className="flex w-full flex-col gap-lg md:w-1/2"> - <Panel> - <Title title="Vesting" size={TitleSize.Medium} /> - <div className="flex flex-col gap-md p-lg pt-sm"> - <div className="flex h-24 flex-row gap-4"> - <DisplayStats - label="Total Vested" - value={formattedTotalVested} - supportingLabel={vestedSymbol} - /> - <DisplayStats - label="Total Locked" - value={formattedTotalLocked} - supportingLabel={lockedSymbol} - tooltipText="Total amount of IOTA that is still locked in your account." - tooltipPosition={TooltipPosition.Right} - /> - </div> - <Card type={CardType.Outlined}> - <CardImage type={ImageType.BgSolid} shape={ImageShape.SquareRounded}> - <StarHex className="h-5 w-5 text-primary-30 dark:text-primary-80" /> - </CardImage> - <CardBody - title={`${formattedAvailableClaiming} ${availableClaimingSymbol}`} - subtitle="Available Rewards" - /> - <CardAction - type={CardActionType.Button} - onClick={handleCollect} - title="Collect" - buttonType={ButtonType.Primary} - buttonDisabled={ - !vestingSchedule.availableClaiming || - vestingSchedule.availableClaiming === 0n - } - /> - </Card> - <Card type={CardType.Outlined}> - <CardImage type={ImageType.BgSolid} shape={ImageShape.SquareRounded}> - <Calendar className="h-5 w-5 text-primary-30 dark:text-primary-80" /> - </CardImage> - <CardBody - title={`${formattedNextPayout} ${nextPayoutSymbol}`} - subtitle={`Next payout ${ - nextPayout?.expirationTimestampMs - ? formattedLastPayoutExpirationTime - : '' - }`} - /> - <CardAction - type={CardActionType.Button} - onClick={openReceiveTokenPopup} - title="See All" - buttonType={ButtonType.Secondary} - buttonDisabled={!vestingPortfolio} - /> - </Card> - {vestingPortfolio && ( - <VestingScheduleDialog - open={isVestingScheduleDialogOpen} - setOpen={setIsVestingScheduleDialogOpen} - vestingPortfolio={vestingPortfolio} - /> - )} - </div> - </Panel> - - {timelockedstakedMapped.length === 0 ? ( - <Banner - videoSrc={videoSrc} - title="Stake Vested Tokens" - subtitle="Earn Rewards" - onButtonClick={() => handleNewStake()} - buttonText="Stake" - /> - ) : null} - </div> - - {timelockedstakedMapped.length !== 0 ? ( - <div className="flex w-full md:w-1/2"> + <> + <div className="flex w-full max-w-4xl flex-col items-stretch justify-center gap-lg justify-self-center md:flex-row"> + <div className="flex w-full flex-col gap-lg md:w-1/2"> <Panel> - <Title - title="Staked Vesting" - trailingElement={ - <Button - type={ButtonType.Primary} - text="Stake" - onClick={() => { - setStakeDialogView(StakeDialogView.SelectValidator); - }} - /> - } - /> - - <div className="flex flex-col px-lg py-sm"> - <div className="flex flex-row gap-md"> + <Title title="Vesting" size={TitleSize.Medium} /> + <div className="flex flex-col gap-md p-lg pt-sm"> + <div className="flex h-24 flex-row gap-4"> <DisplayStats - label="Your stake" - value={`${totalStakedFormatted} ${totalStakedSymbol}`} + label="Total Vested" + value={formattedTotalVested} + supportingLabel={vestedSymbol} /> <DisplayStats - label="Earned" - value={`${totalEarnedFormatted} ${totalEarnedSymbol}`} + label="Total Locked" + value={formattedTotalLocked} + supportingLabel={lockedSymbol} + tooltipText="Total amount of IOTA that is still locked in your account." + tooltipPosition={TooltipPosition.Right} /> </div> - </div> - <div className="flex flex-col px-lg py-sm"> - <div className="flex w-full flex-col items-center justify-center space-y-4 pt-4"> - {system && - timelockedStakedObjectsGrouped?.map( - (timelockedStakedObject) => { - return ( - <StakedTimelockObject - key={ - timelockedStakedObject.validatorAddress + - timelockedStakedObject.stakeRequestEpoch + - timelockedStakedObject.label - } - getValidatorByAddress={getValidatorByAddress} - timelockedStakedObject={timelockedStakedObject} - handleUnstake={handleUnstake} - currentEpoch={Number(system.epoch)} - /> - ); - }, - )} - </div> + <Card type={CardType.Outlined}> + <CardImage + type={ImageType.BgSolid} + shape={ImageShape.SquareRounded} + > + <StarHex className="h-5 w-5 text-primary-30 dark:text-primary-80" /> + </CardImage> + <CardBody + title={`${formattedAvailableClaiming} ${availableClaimingSymbol}`} + subtitle="Available Rewards" + /> + <CardAction + type={CardActionType.Button} + onClick={handleCollect} + title="Collect" + buttonType={ButtonType.Primary} + buttonDisabled={ + !supplyIncreaseVestingSchedule.availableClaiming || + supplyIncreaseVestingSchedule.availableClaiming === 0n + } + /> + </Card> + <Card type={CardType.Outlined}> + <CardImage + type={ImageType.BgSolid} + shape={ImageShape.SquareRounded} + > + <Calendar className="h-5 w-5 text-primary-30 dark:text-primary-80" /> + </CardImage> + <CardBody + title={`${formattedNextPayout} ${nextPayoutSymbol}`} + subtitle={`Next payout ${ + nextPayout?.expirationTimestampMs + ? formattedLastPayoutExpirationTime + : '' + }`} + /> + <CardAction + type={CardActionType.Button} + onClick={openReceiveTokenDialog} + title="See All" + buttonType={ButtonType.Secondary} + buttonDisabled={!supplyIncreaseVestingPortfolio} + /> + </Card> + {supplyIncreaseVestingPortfolio && ( + <VestingScheduleDialog + open={isVestingScheduleDialogOpen} + setOpen={setIsVestingScheduleDialogOpen} + vestingPortfolio={supplyIncreaseVestingPortfolio} + /> + )} </div> </Panel> + + {supplyIncreaseVestingMapped.length === 0 ? ( + <Banner + videoSrc={videoSrc} + title="Stake Vested Tokens" + subtitle="Earn Rewards" + onButtonClick={() => handleNewStake()} + buttonText="Stake" + /> + ) : null} </div> - ) : null} - <StakeDialog - isTimelockedStaking - stakedDetails={selectedStake} - onSuccess={handleOnSuccess} - isOpen={isDialogStakeOpen} - handleClose={handleCloseStakeDialog} - view={stakeDialogView} - setView={setStakeDialogView} - selectedValidator={selectedValidator} - setSelectedValidator={setSelectedValidator} - maxStakableTimelockedAmount={BigInt(vestingSchedule.availableStaking)} - /> - </div> + + {supplyIncreaseVestingMapped.length !== 0 ? ( + <div className="flex w-full md:w-1/2"> + <Panel> + <Title + title="Staked Vesting" + trailingElement={ + <Button + type={ButtonType.Primary} + text="Stake" + disabled={ + supplyIncreaseVestingSchedule.availableStaking === 0n + } + onClick={() => { + setStakeDialogView(StakeDialogView.SelectValidator); + }} + /> + } + /> + + <div className="flex flex-col px-lg py-sm"> + <div className="flex flex-row gap-md"> + <DisplayStats + label="Your stake" + value={`${totalStakedFormatted} ${totalStakedSymbol}`} + /> + <DisplayStats + label="Earned" + value={`${totalEarnedFormatted} ${totalEarnedSymbol}`} + /> + </div> + </div> + <div className="flex flex-col px-lg py-sm"> + <div className="flex w-full flex-col items-center justify-center space-y-4 pt-4"> + {system && + timelockedStakedObjectsGrouped?.map( + (timelockedStakedObject) => { + return ( + <StakedTimelockObject + key={ + timelockedStakedObject.validatorAddress + + timelockedStakedObject.stakeRequestEpoch + + timelockedStakedObject.label + } + getValidatorByAddress={ + getValidatorByAddress + } + timelockedStakedObject={ + timelockedStakedObject + } + handleUnstake={handleUnstake} + currentEpoch={Number(system.epoch)} + /> + ); + }, + )} + </div> + </div> + </Panel> + </div> + ) : null} + + {isDialogStakeOpen && ( + <StakeDialog + isTimelockedStaking + stakedDetails={selectedStake} + onSuccess={handleOnSuccess} + handleClose={handleCloseStakeDialog} + view={stakeDialogView} + setView={setStakeDialogView} + selectedValidator={selectedValidator} + setSelectedValidator={setSelectedValidator} + maxStakableTimelockedAmount={BigInt( + supplyIncreaseVestingSchedule.availableStaking, + )} + /> + )} + + {isUnstakeDialogOpen && timelockedObjectsToUnstake && ( + <UnstakeDialog + groupedTimelockedObjects={timelockedObjectsToUnstake} + onSuccess={handleOnSuccessUnstake} + {...defaultDialogProps} + /> + )} + </div> + </> ); } - -export default VestingDashboardPage; diff --git a/apps/wallet-dashboard/app/globals.css b/apps/wallet-dashboard/app/globals.css index 04c6811f389..69ca23f41f2 100644 --- a/apps/wallet-dashboard/app/globals.css +++ b/apps/wallet-dashboard/app/globals.css @@ -24,7 +24,6 @@ body { 'balance' 'staking' 'coins' - 'vesting' 'activity'; & @@ -36,13 +35,29 @@ body { height: 200px; } } - .home-page-grid-container:has(.with-migration) { + .home-page-grid-container:has(.with-vesting):not(:has(.with-migration)) { + grid-template-areas: + 'balance' + 'staking' + 'vesting' + 'coins' + 'activity'; + } + .home-page-grid-container:has(.with-migration):not(:has(.with-vesting)) { grid-template-areas: 'balance' 'staking' 'migration' 'coins' + 'activity'; + } + .home-page-grid-container:has(.with-migration):has(.with-vesting) { + grid-template-areas: + 'balance' + 'staking' + 'migration' 'vesting' + 'coins' 'activity'; } @@ -53,28 +68,56 @@ body { 'balance balance' 'staking staking' 'coins coins' + 'activity activity'; + } + .home-page-grid-container:has(.with-vesting):not(:has(.with-migration)) { + grid-template-areas: + 'balance balance' + 'staking staking' 'vesting vesting' + 'coins coins' 'activity activity'; } - .home-page-grid-container:has(.with-migration) { + .home-page-grid-container:has(.with-migration):not(:has(.with-vesting)) { grid-template-areas: 'balance balance' 'staking migration' 'coins coins' + 'activity activity'; + } + .home-page-grid-container:has(.with-migration):has(.with-vesting) { + grid-template-areas: + 'balance balance' + 'staking migration' 'vesting vesting' + 'coins coins' 'activity activity'; } } @screen md { .home-page-grid-container { + min-height: 700px; + height: calc(100vh - 140px); @apply grid-cols-3; + grid-template-areas: + 'balance staking staking' + 'coins activity activity'; + } + .home-page-grid-container:has(.with-vesting):not(:has(.with-migration)) { grid-template-areas: 'balance staking staking' 'coins vesting vesting' 'coins activity activity'; } - .home-page-grid-container:has(.with-migration) { + + .home-page-grid-container:has(.with-migration):not(:has(.with-vesting)) { + grid-template-areas: + 'balance staking migration' + 'coins activity activity'; + } + + .home-page-grid-container:has(.with-migration):has(.with-vesting) { grid-template-areas: 'balance staking migration' 'coins vesting vesting' diff --git a/apps/wallet-dashboard/app/page.tsx b/apps/wallet-dashboard/app/page.tsx index 8901eec400a..3392c231d31 100644 --- a/apps/wallet-dashboard/app/page.tsx +++ b/apps/wallet-dashboard/app/page.tsx @@ -7,7 +7,7 @@ import { ConnectButton, useCurrentWallet, useAutoConnectWallet } from '@iota/dap import { redirect } from 'next/navigation'; import { IotaLogoWeb } from '@iota/ui-icons'; import { HOMEPAGE_ROUTE } from '@/lib/constants/routes.constants'; -import { Theme, useTheme } from '@iota/core'; +import { Theme, ThemeSwitcher, useTheme } from '@iota/core'; import { LoadingIndicator } from '@iota/apps-ui-kit'; function HomeDashboardPage(): JSX.Element { @@ -44,7 +44,10 @@ function HomeDashboardPage(): JSX.Element { disableRemotePlayback ></video> </div> - <div className="flex h-full w-full flex-col items-center justify-between p-md sm:p-2xl"> + <div className="relative flex h-full w-full flex-col items-center justify-between p-md sm:p-2xl"> + <div className="absolute right-2 top-2 sm:right-8 sm:top-8"> + <ThemeSwitcher /> + </div> <IotaLogoWeb width={130} height={32} /> <div className="flex max-w-sm flex-col items-center gap-8 text-center"> <div className="flex flex-col items-center gap-4"> @@ -60,8 +63,10 @@ function HomeDashboardPage(): JSX.Element { <ConnectButton connectText="Connect" /> </div> </div> - <div className="text-body-lg text-neutral-60"> + <div className="text-center text-body-lg text-neutral-60"> © IOTA Foundation {CURRENT_YEAR} + <br /> + {process.env.NEXT_PUBLIC_DASHBOARD_REV} </div> </div> </> diff --git a/apps/wallet-dashboard/components/Dialogs/Assets/AssetDialog.tsx b/apps/wallet-dashboard/components/Dialogs/Assets/AssetDialog.tsx index ec3d8d38d11..c71390a33aa 100644 --- a/apps/wallet-dashboard/components/Dialogs/Assets/AssetDialog.tsx +++ b/apps/wallet-dashboard/components/Dialogs/Assets/AssetDialog.tsx @@ -4,17 +4,20 @@ import React, { useState } from 'react'; import { Dialog } from '@iota/apps-ui-kit'; import { FormikProvider, useFormik } from 'formik'; -import { useCurrentAccount } from '@iota/dapp-kit'; +import { useIotaClient, useCurrentAccount } from '@iota/dapp-kit'; import { createNftSendValidationSchema } from '@iota/core'; import { DetailsView, SendView } from './views'; import { IotaObjectData } from '@iota/iota-sdk/client'; import { AssetsDialogView } from './constants'; import { useCreateSendAssetTransaction, useNotifications } from '@/hooks'; import { NotificationType } from '@/stores/notificationStore'; +import { TransactionDetailsView } from '../SendToken'; +import { DialogLayout } from '../layout'; interface AssetsDialogProps { onClose: () => void; asset: IotaObjectData; + refetchAssets: () => void; } interface FormValues { @@ -25,12 +28,14 @@ const INITIAL_VALUES: FormValues = { to: '', }; -export function AssetDialog({ onClose, asset }: AssetsDialogProps): JSX.Element { +export function AssetDialog({ onClose, asset, refetchAssets }: AssetsDialogProps): JSX.Element { const [view, setView] = useState<AssetsDialogView>(AssetsDialogView.Details); const account = useCurrentAccount(); + const [digest, setDigest] = useState<string>(''); const activeAddress = account?.address ?? ''; const objectId = asset?.objectId ?? ''; const { addNotification } = useNotifications(); + const iotaClient = useIotaClient(); const validationSchema = createNftSendValidationSchema(activeAddress, objectId); const { mutation: sendAsset } = useCreateSendAssetTransaction(objectId); @@ -44,10 +49,16 @@ export function AssetDialog({ onClose, asset }: AssetsDialogProps): JSX.Element async function onSubmit(values: FormValues) { try { - await sendAsset.mutateAsync(values.to); + const executed = await sendAsset.mutateAsync(values.to); + + const tx = await iotaClient.waitForTransaction({ + digest: executed.digest, + }); + + setDigest(tx.digest); + refetchAssets(); addNotification('Transfer transaction successful', NotificationType.Success); - onClose(); - setView(AssetsDialogView.Details); + setView(AssetsDialogView.TransactionDetails); } catch { addNotification('Transfer transaction failed', NotificationType.Error); } @@ -66,16 +77,26 @@ export function AssetDialog({ onClose, asset }: AssetsDialogProps): JSX.Element } return ( <Dialog open onOpenChange={onOpenChange}> - <FormikProvider value={formik}> + <DialogLayout> <> {view === AssetsDialogView.Details && ( <DetailsView asset={asset} onClose={onOpenChange} onSend={onDetailsSend} /> )} {view === AssetsDialogView.Send && ( - <SendView asset={asset} onClose={onOpenChange} onBack={onSendViewBack} /> + <FormikProvider value={formik}> + <SendView + asset={asset} + onClose={onOpenChange} + onBack={onSendViewBack} + /> + </FormikProvider> )} + + {view === AssetsDialogView.TransactionDetails && !!digest ? ( + <TransactionDetailsView digest={digest} onClose={onOpenChange} /> + ) : null} </> - </FormikProvider> + </DialogLayout> </Dialog> ); } diff --git a/apps/wallet-dashboard/components/Dialogs/Assets/constants/AssetsDialogView.ts b/apps/wallet-dashboard/components/Dialogs/Assets/constants/AssetsDialogView.ts index 88cb34c15b1..242da33c2c3 100644 --- a/apps/wallet-dashboard/components/Dialogs/Assets/constants/AssetsDialogView.ts +++ b/apps/wallet-dashboard/components/Dialogs/Assets/constants/AssetsDialogView.ts @@ -4,4 +4,5 @@ export enum AssetsDialogView { Details = 'Details', Send = 'Send', + TransactionDetails = 'TransactionDetails', } diff --git a/apps/wallet-dashboard/components/Dialogs/Assets/views/DetailsView.tsx b/apps/wallet-dashboard/components/Dialogs/Assets/views/DetailsView.tsx index 3929ba0062f..8520d62a484 100644 --- a/apps/wallet-dashboard/components/Dialogs/Assets/views/DetailsView.tsx +++ b/apps/wallet-dashboard/components/Dialogs/Assets/views/DetailsView.tsx @@ -13,7 +13,7 @@ import { } from '@iota/apps-ui-kit'; import Link from 'next/link'; import { formatAddress } from '@iota/iota-sdk/utils'; -import { DialogLayout, DialogLayoutBody, DialogLayoutFooter } from '../../layout'; +import { DialogLayoutBody, DialogLayoutFooter } from '../../layout'; import { IotaObjectData } from '@iota/iota-sdk/client'; import { ExplorerLink } from '@/components/ExplorerLink'; import { useCurrentAccount } from '@iota/dapp-kit'; @@ -55,7 +55,7 @@ export function DetailsView({ onClose, asset, onSend }: DetailsViewProps) { } return ( - <DialogLayout> + <> <Header title="Asset" onClose={onClose} titleCentered /> <DialogLayoutBody> <div className="flex w-full flex-col items-center justify-center gap-xs"> @@ -195,6 +195,6 @@ export function DetailsView({ onClose, asset, onSend }: DetailsViewProps) { )} </div> </DialogLayoutFooter> - </DialogLayout> + </> ); } diff --git a/apps/wallet-dashboard/components/Dialogs/Assets/views/SendView.tsx b/apps/wallet-dashboard/components/Dialogs/Assets/views/SendView.tsx index b5757582c7b..3d0350478ac 100644 --- a/apps/wallet-dashboard/components/Dialogs/Assets/views/SendView.tsx +++ b/apps/wallet-dashboard/components/Dialogs/Assets/views/SendView.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { AddressInput, useNftDetails } from '@iota/core'; import { useFormikContext } from 'formik'; -import { DialogLayout, DialogLayoutFooter, DialogLayoutBody } from '../../layout'; +import { DialogLayoutFooter, DialogLayoutBody } from '../../layout'; import { Button, ButtonHtmlType, @@ -33,7 +33,7 @@ export function SendView({ asset, onClose, onBack }: SendViewProps) { const { nftName, nftImageUrl } = useNftDetails(objectId, senderAddress); return ( - <DialogLayout> + <> <Header title="Send asset" onClose={onClose} titleCentered onBack={onBack} /> <DialogLayoutBody> <div className="flex w-full flex-col items-center justify-center gap-xs"> @@ -65,6 +65,6 @@ export function SendView({ asset, onClose, onBack }: SendViewProps) { onClick={submitForm} /> </DialogLayoutFooter> - </DialogLayout> + </> ); } diff --git a/apps/wallet-dashboard/components/Dialogs/SendToken/SendTokenDialog.tsx b/apps/wallet-dashboard/components/Dialogs/SendToken/SendTokenDialog.tsx index da417f66147..a33f018a09c 100644 --- a/apps/wallet-dashboard/components/Dialogs/SendToken/SendTokenDialog.tsx +++ b/apps/wallet-dashboard/components/Dialogs/SendToken/SendTokenDialog.tsx @@ -2,18 +2,18 @@ // SPDX-License-Identifier: Apache-2.0 import React, { useState } from 'react'; -import { EnterValuesFormView, ReviewValuesFormView } from './views'; +import { EnterValuesFormView, ReviewValuesFormView, TransactionDetailsView } from './views'; import { CoinBalance } from '@iota/iota-sdk/client'; import { useSendCoinTransaction, useNotifications } from '@/hooks'; -import { useSignAndExecuteTransaction } from '@iota/dapp-kit'; import { NotificationType } from '@/stores/notificationStore'; import { CoinFormat, useFormatCoin, useGetAllCoins } from '@iota/core'; -import { Dialog, DialogBody, DialogContent, DialogPosition, Header } from '@iota/apps-ui-kit'; +import { Dialog, DialogContent, DialogPosition } from '@iota/apps-ui-kit'; import { FormDataValues } from './interfaces'; import { INITIAL_VALUES } from './constants'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { useTransferTransactionMutation } from '@/hooks'; -interface SendCoinPopupProps { +interface SendCoinDialogProps { coin: CoinBalance; activeAddress: string; setOpen: (bool: boolean) => void; @@ -23,22 +23,21 @@ interface SendCoinPopupProps { enum FormStep { EnterValues, ReviewValues, + TransactionDetails, } function SendTokenDialogBody({ coin, activeAddress, setOpen, -}: SendCoinPopupProps): React.JSX.Element { +}: SendCoinDialogProps): React.JSX.Element { const [step, setStep] = useState<FormStep>(FormStep.EnterValues); const [selectedCoin, setSelectedCoin] = useState<CoinBalance>(coin); const [formData, setFormData] = useState<FormDataValues>(INITIAL_VALUES); const [fullAmount] = useFormatCoin(formData.amount, selectedCoin.coinType, CoinFormat.FULL); - const { addNotification } = useNotifications(); - const { data: coinsData } = useGetAllCoins(selectedCoin.coinType, activeAddress); - const { mutateAsync: signAndExecuteTransaction, isPending } = useSignAndExecuteTransaction(); + const { addNotification } = useNotifications(); const isPayAllIota = selectedCoin.totalBalance === formData.amount && selectedCoin.coinType === IOTA_TYPE_ARG; @@ -51,25 +50,28 @@ function SendTokenDialogBody({ isPayAllIota, ); - function handleTransfer() { + const { + mutate: transfer, + data, + isPending: isLoadingTransfer, + } = useTransferTransactionMutation(); + + async function handleTransfer() { if (!transaction) { addNotification('There was an error with the transaction', NotificationType.Error); return; - } else { - signAndExecuteTransaction({ - transaction, - }) - .then(() => { - setOpen(false); - addNotification('Transfer transaction has been sent'); - }) - .catch(handleTransactionError); } - } - function handleTransactionError() { - setOpen(false); - addNotification('There was an error with the transaction', NotificationType.Error); + transfer(transaction, { + onSuccess: () => { + setStep(FormStep.TransactionDetails); + addNotification('Transfer transaction has been sent', NotificationType.Success); + }, + onError: () => { + setOpen(false); + addNotification('Transfer transaction failed', NotificationType.Error); + }, + }); } function onNext(): void { @@ -87,40 +89,43 @@ function SendTokenDialogBody({ return ( <> - <Header - title={step === FormStep.EnterValues ? 'Send' : 'Review & Send'} - onClose={() => setOpen(false)} - onBack={step === FormStep.ReviewValues ? onBack : undefined} - /> - <div className="h-full [&>div]:h-full"> - <DialogBody> - {step === FormStep.EnterValues && ( - <EnterValuesFormView - coin={selectedCoin} - activeAddress={activeAddress} - setSelectedCoin={setSelectedCoin} - onNext={onNext} - setFormData={setFormData} - initialFormValues={formData} - /> - )} - {step === FormStep.ReviewValues && ( - <ReviewValuesFormView - formData={formData} - executeTransfer={handleTransfer} - senderAddress={activeAddress} - isPending={isPending} - coinType={selectedCoin.coinType} - isPayAllIota={isPayAllIota} - /> - )} - </DialogBody> - </div> + {step === FormStep.EnterValues && ( + <EnterValuesFormView + coin={selectedCoin} + activeAddress={activeAddress} + setSelectedCoin={setSelectedCoin} + onNext={onNext} + onClose={() => setOpen(false)} + setFormData={setFormData} + initialFormValues={formData} + /> + )} + {step === FormStep.ReviewValues && ( + <ReviewValuesFormView + formData={formData} + executeTransfer={handleTransfer} + senderAddress={activeAddress} + isPending={isLoadingTransfer} + coinType={selectedCoin.coinType} + isPayAllIota={isPayAllIota} + onClose={() => setOpen(false)} + onBack={onBack} + /> + )} + {step === FormStep.TransactionDetails && data?.digest && ( + <TransactionDetailsView + digest={data.digest} + onClose={() => { + setOpen(false); + setStep(FormStep.EnterValues); + }} + /> + )} </> ); } -export function SendTokenDialog(props: SendCoinPopupProps): React.JSX.Element { +export function SendTokenDialog(props: SendCoinDialogProps) { return ( <Dialog open={props.open} onOpenChange={props.setOpen}> <DialogContent containerId="overlay-portal-container" position={DialogPosition.Right}> diff --git a/apps/wallet-dashboard/components/Dialogs/SendToken/views/EnterValuesFormView.tsx b/apps/wallet-dashboard/components/Dialogs/SendToken/views/EnterValuesFormView.tsx index f38c0d95cfa..f33ddbc8fef 100644 --- a/apps/wallet-dashboard/components/Dialogs/SendToken/views/EnterValuesFormView.tsx +++ b/apps/wallet-dashboard/components/Dialogs/SendToken/views/EnterValuesFormView.tsx @@ -24,14 +24,16 @@ import { Button, InfoBoxStyle, LoadingIndicator, + Header, } from '@iota/apps-ui-kit'; import { useIotaClientQuery } from '@iota/dapp-kit'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; -import { Form, Formik, FormikProps } from 'formik'; +import { Form, FormikProvider, useFormik, useFormikContext } from 'formik'; import { Exclamation } from '@iota/ui-icons'; import { UseQueryResult } from '@tanstack/react-query'; import { FormDataValues } from '../interfaces'; import { INITIAL_VALUES } from '../constants'; +import { DialogLayoutBody, DialogLayoutFooter } from '../../layout'; interface EnterValuesFormProps { coin: CoinBalance; @@ -40,9 +42,10 @@ interface EnterValuesFormProps { setFormData: React.Dispatch<React.SetStateAction<FormDataValues>>; setSelectedCoin: React.Dispatch<React.SetStateAction<CoinBalance>>; onNext: () => void; + onClose: () => void; } -interface FormInputsProps extends FormikProps<FormDataValues> { +interface FormInputsProps { coinType: string; coinDecimals: number; coinBalance: bigint; @@ -52,6 +55,9 @@ interface FormInputsProps extends FormikProps<FormDataValues> { activeAddress: string; coins: CoinStruct[]; queryResult: UseQueryResult<CoinMetadata | null>; + formattedAmount: bigint; + hasEnoughBalance: boolean; + isPayAllIota: boolean; } function totalBalance(coins: CoinStruct[]): bigint { @@ -62,29 +68,18 @@ function getBalanceFromCoinStruct(coin: CoinStruct): bigint { } function FormInputs({ - isValid, - isSubmitting, - setFieldValue, - values, - submitForm, - coinType, coinDecimals, coinBalance, - iotaBalance, formattedTokenBalance, symbol, activeAddress, coins, queryResult, + formattedAmount, + hasEnoughBalance, + isPayAllIota, }: FormInputsProps): React.JSX.Element { - const formattedAmount = parseAmount(values.amount, coinDecimals); - const isPayAllIota = formattedAmount === coinBalance && coinType === IOTA_TYPE_ARG; - - const hasEnoughBalance = - isPayAllIota || - iotaBalance > - BigInt(values.gasBudgetEst ?? '0') + - (coinType === IOTA_TYPE_ARG ? formattedAmount : 0n); + const { setFieldValue, values } = useFormikContext<FormDataValues>(); async function onMaxTokenButtonClick() { await setFieldValue('amount', formattedTokenBalance); @@ -94,46 +89,31 @@ function FormInputs({ formattedAmount === coinBalance || queryResult.isPending || !coinBalance; return ( - <div className="flex h-full w-full flex-col"> - <Form autoComplete="off" noValidate className="flex-1"> - <div className="flex h-full w-full flex-col gap-md"> - {!hasEnoughBalance && ( - <InfoBox - type={InfoBoxType.Error} - supportingText="Insufficient IOTA to cover transaction" - style={InfoBoxStyle.Elevated} - icon={<Exclamation />} - /> - )} - - <SendTokenFormInput - name="amount" - to={values.to} - symbol={symbol} - coins={coins} - coinDecimals={coinDecimals} - activeAddress={activeAddress} - onActionClick={onMaxTokenButtonClick} - isMaxActionDisabled={isMaxActionDisabled} - isPayAllIota={isPayAllIota} + <Form autoComplete="off" noValidate className="flex-1"> + <div className="flex h-full w-full flex-col gap-md"> + {!hasEnoughBalance && ( + <InfoBox + type={InfoBoxType.Error} + supportingText="Insufficient IOTA to cover transaction" + style={InfoBoxStyle.Elevated} + icon={<Exclamation />} /> - <AddressInput name="to" placeholder="Enter Address" /> - </div> - </Form> + )} - <div className="pt-xs"> - <Button - onClick={submitForm} - htmlType={ButtonHtmlType.Submit} - type={ButtonType.Primary} - disabled={ - !isValid || isSubmitting || !hasEnoughBalance || values.gasBudgetEst === '' - } - text="Review" - fullWidth + <SendTokenFormInput + name="amount" + to={values.to} + symbol={symbol} + coins={coins} + coinDecimals={coinDecimals} + activeAddress={activeAddress} + onActionClick={onMaxTokenButtonClick} + isMaxActionDisabled={isMaxActionDisabled} + isPayAllIota={isPayAllIota} /> + <AddressInput name="to" placeholder="Enter Address" /> </div> - </div> + </Form> ); } @@ -144,6 +124,7 @@ export function EnterValuesFormView({ setSelectedCoin, onNext, initialFormValues, + onClose, }: EnterValuesFormProps): JSX.Element { // Get all coins of the type const { data: coinsData, isPending: coinsIsPending } = useGetAllCoins( @@ -188,13 +169,14 @@ export function EnterValuesFormView({ const formattedTokenBalance = tokenBalance.replace(/,/g, ''); - if (coinsBalanceIsPending || coinsIsPending || iotaCoinsIsPending) { - return ( - <div className="flex h-full w-full items-center justify-center"> - <LoadingIndicator /> - </div> - ); - } + const formik = useFormik({ + initialValues: initialFormValues, + validationSchema: validationSchemaStepOne, + enableReinitialize: true, + validateOnChange: false, + validateOnBlur: false, + onSubmit: handleFormSubmit, + }); async function handleFormSubmit({ to, amount, gasBudgetEst }: FormDataValues) { const formattedAmount = parseAmount(amount, coinDecimals).toString(); @@ -207,41 +189,72 @@ export function EnterValuesFormView({ onNext(); } + const coinType = coin.coinType; + const formattedAmount = parseAmount(formik.values.amount, coinDecimals); + const isPayAllIota = formattedAmount === coinBalance && coinType === IOTA_TYPE_ARG; + + const hasEnoughBalance = + isPayAllIota || + iotaBalance > + BigInt(formik.values.gasBudgetEst ?? '0') + + (coinType === IOTA_TYPE_ARG ? formattedAmount : 0n); + + if (coinsBalanceIsPending || coinsIsPending || iotaCoinsIsPending) { + return ( + <div className="flex h-full w-full items-center justify-center"> + <LoadingIndicator /> + </div> + ); + } + return ( - <div className="flex h-full w-full flex-col gap-md"> - <CoinSelector - activeCoinType={coin.coinType} - coins={coinsBalance ?? []} - onClick={(coinType) => { - setFormData(INITIAL_VALUES); - const coin = coinsBalance?.find((coin) => coin.coinType === coinType); - setSelectedCoin(coin!); - }} - /> - - <Formik - initialValues={initialFormValues} - validationSchema={validationSchemaStepOne} - enableReinitialize - validateOnChange={false} - validateOnBlur={false} - onSubmit={handleFormSubmit} - > - {(props: FormikProps<FormDataValues>) => ( - <FormInputs - {...props} - coinType={coin.coinType} - coinDecimals={coinDecimals} - coinBalance={coinBalance} - iotaBalance={iotaBalance} - formattedTokenBalance={formattedTokenBalance} - symbol={symbol} - activeAddress={activeAddress} - coins={coins ?? []} - queryResult={queryResult} - /> - )} - </Formik> - </div> + <FormikProvider value={formik}> + <Header title={'Send'} onClose={onClose} /> + <DialogLayoutBody> + <CoinSelector + activeCoinType={coin.coinType} + coins={coinsBalance ?? []} + onClick={(coinType) => { + setFormData(INITIAL_VALUES); + const selectedCoin = coinsBalance?.find( + (coinBalance) => coinBalance.coinType === coinType, + ); + if (selectedCoin) { + setSelectedCoin(selectedCoin); + } + }} + /> + + <FormInputs + hasEnoughBalance={hasEnoughBalance} + formattedAmount={formattedAmount} + isPayAllIota={isPayAllIota} + coinType={coin.coinType} + coinDecimals={coinDecimals} + coinBalance={coinBalance} + iotaBalance={iotaBalance} + formattedTokenBalance={formattedTokenBalance} + symbol={symbol} + activeAddress={activeAddress} + coins={coins ?? []} + queryResult={queryResult} + /> + </DialogLayoutBody> + <DialogLayoutFooter> + <Button + onClick={formik.submitForm} + htmlType={ButtonHtmlType.Submit} + type={ButtonType.Primary} + disabled={ + !formik.isValid || + formik.isSubmitting || + !hasEnoughBalance || + formik.values.gasBudgetEst === '' + } + text="Review" + fullWidth + /> + </DialogLayoutFooter> + </FormikProvider> ); } diff --git a/apps/wallet-dashboard/components/Dialogs/SendToken/views/ReviewValuesFormView.tsx b/apps/wallet-dashboard/components/Dialogs/SendToken/views/ReviewValuesFormView.tsx index 58d6e21e10b..d4d82d1ccad 100644 --- a/apps/wallet-dashboard/components/Dialogs/SendToken/views/ReviewValuesFormView.tsx +++ b/apps/wallet-dashboard/components/Dialogs/SendToken/views/ReviewValuesFormView.tsx @@ -16,11 +16,13 @@ import { KeyValueInfo, Divider, ButtonType, + Header, } from '@iota/apps-ui-kit'; import { formatAddress, IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; import { CoinIcon, ImageIconSize, useFormatCoin, ExplorerLinkType, CoinFormat } from '@iota/core'; import { Loader } from '@iota/ui-icons'; import { ExplorerLink } from '@/components'; +import { DialogLayoutBody, DialogLayoutFooter } from '../../layout'; interface ReviewValuesFormProps { formData: FormDataValues; @@ -29,6 +31,8 @@ interface ReviewValuesFormProps { executeTransfer: () => void; coinType: string; isPayAllIota?: boolean; + onClose: () => void; + onBack: () => void; } export function ReviewValuesFormView({ @@ -38,78 +42,75 @@ export function ReviewValuesFormView({ executeTransfer, coinType, isPayAllIota, + onClose, + onBack, }: ReviewValuesFormProps): JSX.Element { const [roundedAmount, symbol] = useFormatCoin(amount, coinType, CoinFormat.ROUNDED); const [gasEstimated, gasSymbol] = useFormatCoin(gasBudgetEst, IOTA_TYPE_ARG); return ( - <div className="flex h-full flex-col"> - <div className="flex h-full w-full flex-col gap-md"> - <div className="flex h-full flex-col justify-between"> - <div className="h-full flex-1"> - <div className="flex w-full flex-col gap-md"> - {Number(amount) !== 0 ? ( - <Card type={CardType.Filled}> - <CardImage type={ImageType.BgSolid}> - <CoinIcon - coinType={coinType} - rounded - size={ImageIconSize.Small} - /> - </CardImage> - <CardBody - title={`${isPayAllIota ? '~' : ''}${roundedAmount} ${symbol}`} - subtitle="Amount" - /> - <CardAction type={CardActionType.SupportingText} /> - </Card> - ) : null} - <div className="flex flex-col gap-md--rs p-sm--rs"> - <KeyValueInfo - keyText={'From'} - value={ - <ExplorerLink - type={ExplorerLinkType.Address} - address={senderAddress} - > - {formatAddress(senderAddress)} - </ExplorerLink> - } - fullwidth - /> + <> + <Header title="Review & Send" onClose={onClose} onBack={onBack} /> + <DialogLayoutBody> + <div className="flex w-full flex-col gap-md"> + {Number(amount) !== 0 ? ( + <Card type={CardType.Filled}> + <CardImage type={ImageType.BgSolid}> + <CoinIcon coinType={coinType} rounded size={ImageIconSize.Small} /> + </CardImage> + <CardBody + title={`${isPayAllIota ? '~' : ''}${roundedAmount} ${symbol}`} + subtitle="Amount" + /> + <CardAction type={CardActionType.SupportingText} /> + </Card> + ) : null} + <div className="flex flex-col gap-md--rs p-sm--rs"> + <KeyValueInfo + keyText={'From'} + value={ + <ExplorerLink + type={ExplorerLinkType.Address} + address={senderAddress} + > + {formatAddress(senderAddress)} + </ExplorerLink> + } + fullwidth + /> - <Divider /> - <KeyValueInfo - keyText={'To'} - value={ - <ExplorerLink type={ExplorerLinkType.Address} address={to}> - {formatAddress(to || '')} - </ExplorerLink> - } - fullwidth - /> + <Divider /> + <KeyValueInfo + keyText={'To'} + value={ + <ExplorerLink type={ExplorerLinkType.Address} address={to}> + {formatAddress(to || '')} + </ExplorerLink> + } + fullwidth + /> - <Divider /> - <KeyValueInfo - keyText={'Est. Gas Fees'} - value={gasEstimated} - supportingLabel={gasSymbol} - fullwidth - /> - </div> - </div> + <Divider /> + <KeyValueInfo + keyText={'Est. Gas Fees'} + value={gasEstimated} + supportingLabel={gasSymbol} + fullwidth + /> </div> - <Button - type={ButtonType.Primary} - onClick={executeTransfer} - text="Send Now" - disabled={coinType === null || isPending} - fullWidth - icon={isPending ? <Loader className="animate-spin" /> : undefined} - iconAfterText - /> </div> - </div> - </div> + </DialogLayoutBody> + <DialogLayoutFooter> + <Button + type={ButtonType.Primary} + onClick={executeTransfer} + text="Send Now" + disabled={coinType === null || isPending} + fullWidth + icon={isPending ? <Loader className="animate-spin" /> : undefined} + iconAfterText + /> + </DialogLayoutFooter> + </> ); } diff --git a/apps/wallet-dashboard/components/Dialogs/SendToken/views/TransactionDetailsView.tsx b/apps/wallet-dashboard/components/Dialogs/SendToken/views/TransactionDetailsView.tsx new file mode 100644 index 00000000000..f534f72e387 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/SendToken/views/TransactionDetailsView.tsx @@ -0,0 +1,47 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { useGetTransaction } from '@iota/core'; +import { InfoBoxType, InfoBox, InfoBoxStyle } from '@iota/apps-ui-kit'; +import { Warning, Loader } from '@iota/ui-icons'; +import { getExtendedTransaction } from '@/lib/utils'; +import { useCurrentAccount } from '@iota/dapp-kit'; +import { TransactionDetailsLayout } from '../../transaction'; + +interface TransactionDetailsViewProps { + digest?: string; + onClose: () => void; +} + +export function TransactionDetailsView({ digest, onClose }: TransactionDetailsViewProps) { + const currentAccount = useCurrentAccount(); + const { data, isError, error, isFetching } = useGetTransaction(digest || ''); + + if (isError) { + return ( + <InfoBox + type={InfoBoxType.Error} + title="Error getting transaction info" + supportingText={ + error?.message ?? 'An error occurred when getting the transaction info' + } + icon={<Warning />} + style={InfoBoxStyle.Default} + /> + ); + } + + if (isFetching) { + return ( + <div className="flex h-full w-full items-center justify-center"> + <Loader className="h-6 w-6 animate-spin" /> + </div> + ); + } + + const transaction = data && getExtendedTransaction(data, currentAccount?.address || ''); + + return transaction ? ( + <TransactionDetailsLayout transaction={transaction} onClose={onClose} /> + ) : null; +} diff --git a/apps/wallet-dashboard/components/Dialogs/SendToken/views/index.ts b/apps/wallet-dashboard/components/Dialogs/SendToken/views/index.ts index bc7f7fd90e7..4938ff14337 100644 --- a/apps/wallet-dashboard/components/Dialogs/SendToken/views/index.ts +++ b/apps/wallet-dashboard/components/Dialogs/SendToken/views/index.ts @@ -3,3 +3,4 @@ export * from './EnterValuesFormView'; export * from './ReviewValuesFormView'; +export * from './TransactionDetailsView'; diff --git a/apps/wallet-dashboard/components/Dialogs/Staking/StakeDialog.tsx b/apps/wallet-dashboard/components/Dialogs/Staking/StakeDialog.tsx index 2c9f72a2911..6829097f6c3 100644 --- a/apps/wallet-dashboard/components/Dialogs/Staking/StakeDialog.tsx +++ b/apps/wallet-dashboard/components/Dialogs/Staking/StakeDialog.tsx @@ -3,32 +3,20 @@ import React, { useMemo, useState } from 'react'; import { EnterAmountView, EnterTimelockedAmountView, SelectValidatorView } from './views'; -import { - useNotifications, - useNewStakeTransaction, - useGetCurrentEpochStartTimestamp, -} from '@/hooks'; import { ExtendedDelegatedStake, - GroupedTimelockObject, parseAmount, - TIMELOCK_IOTA_TYPE, useCoinMetadata, - useGetAllOwnedObjects, useGetValidatorsApy, useBalance, createValidationSchema, MIN_NUMBER_IOTA_TO_STAKE, } from '@iota/core'; import { FormikProvider, useFormik } from 'formik'; -import type { FormikHelpers } from 'formik'; -import { useCurrentAccount, useSignAndExecuteTransaction } from '@iota/dapp-kit'; +import { useCurrentAccount } from '@iota/dapp-kit'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; -import { NotificationType } from '@/stores/notificationStore'; -import { prepareObjectsForTimelockedStakingTransaction } from '@/lib/utils'; import { Dialog } from '@iota/apps-ui-kit'; -import { DetailsView, UnstakeView } from './views'; -import { FormValues } from './views/EnterAmountView'; +import { DetailsView } from './views'; import { TransactionDialogView } from '../TransactionDialog'; import { StakeDialogView } from './enums/view.enums'; @@ -37,7 +25,6 @@ const INITIAL_VALUES = { }; interface StakeDialogProps { - isOpen: boolean; handleClose: () => void; view: StakeDialogView | undefined; setView: (view: StakeDialogView) => void; @@ -47,12 +34,12 @@ interface StakeDialogProps { onSuccess?: (digest: string) => void; selectedValidator?: string; setSelectedValidator?: (validator: string) => void; + onUnstakeClick?: () => void; } export function StakeDialog({ onSuccess, isTimelockedStaking, - isOpen, handleClose, view, setView, @@ -60,6 +47,7 @@ export function StakeDialog({ maxStakableTimelockedAmount, selectedValidator = '', setSelectedValidator, + onUnstakeClick, }: StakeDialogProps): JSX.Element { const account = useCurrentAccount(); const senderAddress = account?.address ?? ''; @@ -78,114 +66,69 @@ export function StakeDialog({ maxStakableTimelockedAmount ?? coinBalance, coinSymbol, coinDecimals, - view === StakeDialogView.Unstake, + false, minimumStake, ), - [maxStakableTimelockedAmount, coinBalance, coinSymbol, coinDecimals, view, minimumStake], + [maxStakableTimelockedAmount, coinBalance, coinSymbol, coinDecimals, minimumStake], ); const formik = useFormik({ initialValues: INITIAL_VALUES, validationSchema: validationSchema, - onSubmit: onSubmit, + onSubmit: () => undefined, validateOnMount: true, }); const amount = formik.values.amount || `${MIN_NUMBER_IOTA_TO_STAKE}`; const amountWithoutDecimals = parseAmount(amount, coinDecimals); - const { data: currentEpochMs } = useGetCurrentEpochStartTimestamp(); - const { data: timelockedObjects } = useGetAllOwnedObjects(senderAddress, { - StructType: TIMELOCK_IOTA_TYPE, - }); - let groupedTimelockObjects: GroupedTimelockObject[] = []; - if (isTimelockedStaking && timelockedObjects && currentEpochMs) { - groupedTimelockObjects = prepareObjectsForTimelockedStakingTransaction( - timelockedObjects, - amountWithoutDecimals, - currentEpochMs, - ); - } - const { data: newStakeData, isLoading: isTransactionLoading } = useNewStakeTransaction( - selectedValidator, - amountWithoutDecimals, - senderAddress, - isTimelockedStaking, - groupedTimelockObjects, - ); - - const { mutateAsync: signAndExecuteTransaction } = useSignAndExecuteTransaction(); - const { addNotification } = useNotifications(); const { data: rollingAverageApys } = useGetValidatorsApy(); const validators = Object.keys(rollingAverageApys ?? {}) ?? []; function handleBack(): void { - setView?.(StakeDialogView.SelectValidator); + setView(StakeDialogView.SelectValidator); } function handleValidatorSelect(validator: string): void { setSelectedValidator?.(validator); } + function setViewBasedOnStakingType() { + setView( + isTimelockedStaking + ? StakeDialogView.EnterTimelockedAmount + : StakeDialogView.EnterAmount, + ); + } + function selectValidatorHandleNext(): void { if (selectedValidator) { - setView?.( - isTimelockedStaking - ? StakeDialogView.EnterTimelockedAmount - : StakeDialogView.EnterAmount, - ); + setViewBasedOnStakingType(); } } - function detailsHandleUnstake() { - setView?.(StakeDialogView.Unstake); - } - function detailsHandleStake() { - setView?.(StakeDialogView.SelectValidator); - } - - function handleStake(): void { - if (isTimelockedStaking && groupedTimelockObjects.length === 0) { - addNotification('Invalid stake amount. Please try again.', NotificationType.Error); - return; - } - if (!newStakeData?.transaction) { - addNotification('Stake transaction was not created', NotificationType.Error); - return; + if (stakedDetails) { + setSelectedValidator?.(stakedDetails.validatorAddress); + setViewBasedOnStakingType(); } - signAndExecuteTransaction( - { - transaction: newStakeData?.transaction, - }, - { - onSuccess: (tx) => { - onSuccess?.(tx.digest); - addNotification('Stake transaction has been sent'); - setTxDigest(tx.digest); - setView?.(StakeDialogView.TransactionDetails); - }, - onError: () => { - addNotification('Stake transaction was not sent', NotificationType.Error); - }, - }, - ); } - function onSubmit(_: FormValues, { resetForm }: FormikHelpers<FormValues>) { - handleStake(); - resetForm(); + function handleTransactionSuccess(digest: string) { + onSuccess?.(digest); + setTxDigest(digest); + setView(StakeDialogView.TransactionDetails); } return ( - <Dialog open={isOpen} onOpenChange={() => handleClose()}> + <Dialog open onOpenChange={() => handleClose()}> <FormikProvider value={formik}> <> {view === StakeDialogView.Details && stakedDetails && ( <DetailsView handleStake={detailsHandleStake} - handleUnstake={detailsHandleUnstake} + handleUnstake={onUnstakeClick} stakedDetails={stakedDetails} handleClose={handleClose} /> @@ -204,28 +147,20 @@ export function StakeDialog({ selectedValidator={selectedValidator} handleClose={handleClose} onBack={handleBack} - onStake={handleStake} - gasBudget={newStakeData?.gasBudget} - isTransactionLoading={isTransactionLoading} + amountWithoutDecimals={amountWithoutDecimals} + senderAddress={senderAddress} + onSuccess={handleTransactionSuccess} /> )} {view === StakeDialogView.EnterTimelockedAmount && ( <EnterTimelockedAmountView selectedValidator={selectedValidator} maxStakableTimelockedAmount={maxStakableTimelockedAmount ?? BigInt(0)} - hasGroupedTimelockObjects={groupedTimelockObjects.length > 0} handleClose={handleClose} onBack={handleBack} - onStake={handleStake} - gasBudget={newStakeData?.gasBudget} - isTransactionLoading={isTransactionLoading} - /> - )} - {view === StakeDialogView.Unstake && stakedDetails && ( - <UnstakeView - extendedStake={stakedDetails} - handleClose={handleClose} - showActiveStatus + senderAddress={senderAddress} + onSuccess={handleTransactionSuccess} + amountWithoutDecimals={amountWithoutDecimals} /> )} {view === StakeDialogView.TransactionDetails && ( diff --git a/apps/wallet-dashboard/components/Dialogs/Staking/enums/view.enums.ts b/apps/wallet-dashboard/components/Dialogs/Staking/enums/view.enums.ts index 1bdb66a93ed..eb4f6cf20f5 100644 --- a/apps/wallet-dashboard/components/Dialogs/Staking/enums/view.enums.ts +++ b/apps/wallet-dashboard/components/Dialogs/Staking/enums/view.enums.ts @@ -5,7 +5,6 @@ export enum StakeDialogView { Details = 'Details', SelectValidator = 'SelectValidator', EnterAmount = 'EnterAmount', - Unstake = 'Unstake', EnterTimelockedAmount = 'EnterTimelockedAmount', TransactionDetails = 'TransactionDetails', } diff --git a/apps/wallet-dashboard/components/Dialogs/Staking/index.ts b/apps/wallet-dashboard/components/Dialogs/Staking/index.ts index bf9af6d49a4..e32885d1475 100644 --- a/apps/wallet-dashboard/components/Dialogs/Staking/index.ts +++ b/apps/wallet-dashboard/components/Dialogs/Staking/index.ts @@ -2,5 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 export * from './enums'; -export * from './StakeDialog'; export * from './hooks'; + +export * from './StakeDialog'; diff --git a/apps/wallet-dashboard/components/Dialogs/Staking/views/DetailsView.tsx b/apps/wallet-dashboard/components/Dialogs/Staking/views/DetailsView.tsx index 0cdba0031e1..48ebf1b4f3c 100644 --- a/apps/wallet-dashboard/components/Dialogs/Staking/views/DetailsView.tsx +++ b/apps/wallet-dashboard/components/Dialogs/Staking/views/DetailsView.tsx @@ -33,11 +33,11 @@ import { formatAddress, IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; import { DialogLayout, DialogLayoutFooter, DialogLayoutBody } from '../../layout'; interface StakeDialogProps { - stakedDetails: ExtendedDelegatedStake; - showActiveStatus?: boolean; handleClose: () => void; - handleUnstake: () => void; handleStake: () => void; + stakedDetails: ExtendedDelegatedStake; + showActiveStatus?: boolean; + handleUnstake?: () => void; } export function DetailsView({ diff --git a/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterAmountDialogLayout.tsx b/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterAmountDialogLayout.tsx new file mode 100644 index 00000000000..9ec233b1838 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterAmountDialogLayout.tsx @@ -0,0 +1,166 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; +import { useFormatCoin, useStakeTxnInfo } from '@iota/core'; +import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { + Button, + ButtonType, + KeyValueInfo, + Panel, + Divider, + Input, + InputType, + Header, + InfoBoxType, + InfoBoxStyle, + InfoBox, +} from '@iota/apps-ui-kit'; +import { Field, type FieldProps, useFormikContext } from 'formik'; +import { Exclamation, Loader } from '@iota/ui-icons'; +import { useIotaClientQuery } from '@iota/dapp-kit'; + +import { Validator } from './Validator'; +import { StakedInfo } from './StakedInfo'; +import { DialogLayout, DialogLayoutBody, DialogLayoutFooter } from '../../layout'; + +export interface FormValues { + amount: string; +} + +interface EnterAmountDialogLayoutProps { + selectedValidator: string; + senderAddress: string; + caption: string; + showInfo: boolean; + infoMessage: string; + isLoading: boolean; + onBack: () => void; + handleClose: () => void; + handleStake: () => void; + isStakeDisabled?: boolean; + gasBudget?: string | number | null; +} + +function EnterAmountDialogLayout({ + selectedValidator, + gasBudget, + senderAddress, + caption, + showInfo, + infoMessage, + isLoading, + isStakeDisabled, + onBack, + handleClose, + handleStake, +}: EnterAmountDialogLayoutProps): JSX.Element { + const { data: system } = useIotaClientQuery('getLatestIotaSystemState'); + const { values, errors } = useFormikContext<FormValues>(); + const amount = values.amount; + + const [gas, symbol] = useFormatCoin(gasBudget ?? 0, IOTA_TYPE_ARG); + + const { stakedRewardsStartEpoch, timeBeforeStakeRewardsRedeemableAgoDisplay } = useStakeTxnInfo( + system?.epoch, + ); + + return ( + <DialogLayout> + <Header title="Enter amount" onClose={handleClose} onBack={onBack} titleCentered /> + <DialogLayoutBody> + <div className="flex w-full flex-col justify-between"> + <div> + <div className="mb-md"> + <Validator address={selectedValidator} isSelected showAction={false} /> + </div> + <StakedInfo + validatorAddress={selectedValidator} + accountAddress={senderAddress} + /> + <div className="my-md w-full"> + <Field name="amount"> + {({ + field: { onChange, ...field }, + form: { setFieldValue }, + meta, + }: FieldProps<FormValues>) => { + return ( + <Input + {...field} + onValueChange={({ value }) => { + setFieldValue('amount', value, true); + }} + type={InputType.NumericFormat} + label="Amount" + value={amount} + suffix={` ${symbol}`} + placeholder="Enter amount to stake" + errorMessage={ + values.amount && meta.error ? meta.error : undefined + } + caption={caption} + /> + ); + }} + </Field> + {showInfo ? ( + <div className="mt-md"> + <InfoBox + type={InfoBoxType.Error} + supportingText={infoMessage} + style={InfoBoxStyle.Elevated} + icon={<Exclamation />} + /> + </div> + ) : null} + </div> + + <Panel hasBorder> + <div className="flex flex-col gap-y-sm p-md"> + <KeyValueInfo + keyText="Staking Rewards Start" + value={stakedRewardsStartEpoch} + fullwidth + /> + <KeyValueInfo + keyText="Redeem Rewards" + value={timeBeforeStakeRewardsRedeemableAgoDisplay} + fullwidth + /> + <Divider /> + <KeyValueInfo + keyText="Gas fee" + value={gas || '--'} + supportingLabel={symbol} + fullwidth + /> + </div> + </Panel> + </div> + </div> + </DialogLayoutBody> + <DialogLayoutFooter> + <div className="flex w-full justify-between gap-sm"> + <Button fullWidth type={ButtonType.Secondary} onClick={onBack} text="Back" /> + <Button + fullWidth + type={ButtonType.Primary} + disabled={!amount || !!errors?.amount || isLoading || isStakeDisabled} + onClick={handleStake} + text="Stake" + icon={ + isLoading ? ( + <Loader className="animate-spin" data-testid="loading-indicator" /> + ) : null + } + iconAfterText + /> + </div> + </DialogLayoutFooter> + </DialogLayout> + ); +} + +export default EnterAmountDialogLayout; diff --git a/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterAmountView.tsx b/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterAmountView.tsx index b3869faed2b..b90de664794 100644 --- a/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterAmountView.tsx +++ b/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterAmountView.tsx @@ -2,35 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 import React from 'react'; -import { - useFormatCoin, - useBalance, - CoinFormat, - parseAmount, - useCoinMetadata, - useStakeTxnInfo, -} from '@iota/core'; +import { useFormatCoin, useBalance, CoinFormat, parseAmount, useCoinMetadata } from '@iota/core'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; -import { - Button, - ButtonType, - KeyValueInfo, - Panel, - Divider, - Input, - InputType, - Header, - InfoBoxType, - InfoBoxStyle, - InfoBox, -} from '@iota/apps-ui-kit'; -import { Field, type FieldProps, useFormikContext } from 'formik'; -import { Exclamation } from '@iota/ui-icons'; -import { useCurrentAccount, useIotaClientQuery } from '@iota/dapp-kit'; - -import { Validator } from './Validator'; -import { StakedInfo } from './StakedInfo'; -import { DialogLayout, DialogLayoutBody, DialogLayoutFooter } from '../../layout'; +import { useFormikContext } from 'formik'; +import { useSignAndExecuteTransaction } from '@iota/dapp-kit'; +import { useNewStakeTransaction, useNotifications } from '@/hooks'; +import { NotificationType } from '@/stores/notificationStore'; +import EnterAmountDialogLayout from './EnterAmountDialogLayout'; export interface FormValues { amount: string; @@ -39,38 +17,39 @@ export interface FormValues { interface EnterAmountViewProps { selectedValidator: string; onBack: () => void; - onStake: () => void; showActiveStatus?: boolean; - gasBudget?: string | number | null; handleClose: () => void; - isTransactionLoading?: boolean; + amountWithoutDecimals: bigint; + senderAddress: string; + onSuccess: (digest: string) => void; } function EnterAmountView({ - selectedValidator: selectedValidatorAddress, + selectedValidator, onBack, - onStake, - gasBudget = 0, handleClose, - isTransactionLoading, + amountWithoutDecimals, + senderAddress, + onSuccess, }: EnterAmountViewProps): JSX.Element { + const { addNotification } = useNotifications(); + const { mutateAsync: signAndExecuteTransaction } = useSignAndExecuteTransaction(); + const { values, resetForm } = useFormikContext<FormValues>(); + const coinType = IOTA_TYPE_ARG; const { data: metadata } = useCoinMetadata(coinType); const decimals = metadata?.decimals ?? 0; - const account = useCurrentAccount(); - const accountAddress = account?.address; - - const { values, errors } = useFormikContext<FormValues>(); - const amount = values.amount; - - const { data: system } = useIotaClientQuery('getLatestIotaSystemState'); - const { data: iotaBalance } = useBalance(accountAddress!); + const { data: iotaBalance } = useBalance(senderAddress); const coinBalance = BigInt(iotaBalance?.totalBalance || 0); - const gasBudgetBigInt = BigInt(gasBudget ?? 0); - const [gas, symbol] = useFormatCoin(gasBudget, IOTA_TYPE_ARG); + const { data: newStakeData, isLoading: isTransactionLoading } = useNewStakeTransaction( + selectedValidator, + amountWithoutDecimals, + senderAddress, + ); + const gasBudgetBigInt = BigInt(newStakeData?.gasBudget ?? 0); const maxTokenBalance = coinBalance - gasBudgetBigInt; const [maxTokenFormatted, maxTokenFormattedSymbol] = useFormatCoin( maxTokenBalance, @@ -78,109 +57,47 @@ function EnterAmountView({ CoinFormat.FULL, ); - const caption = isTransactionLoading - ? '--' - : `${maxTokenFormatted} ${maxTokenFormattedSymbol} Available`; - - const { stakedRewardsStartEpoch, timeBeforeStakeRewardsRedeemableAgoDisplay } = useStakeTxnInfo( - system?.epoch, - ); - + const caption = `${maxTokenFormatted} ${maxTokenFormattedSymbol} Available`; + const infoMessage = + 'You have selected an amount that will leave you with insufficient funds to pay for gas fees for unstaking or any other transactions.'; const hasEnoughRemaingBalance = maxTokenBalance > parseAmount(values.amount, decimals) + BigInt(2) * gasBudgetBigInt; - return ( - <DialogLayout> - <Header title="Enter amount" onClose={handleClose} onBack={onBack} titleCentered /> - <DialogLayoutBody> - <div className="flex w-full flex-col justify-between"> - <div> - <div className="mb-md"> - <Validator - address={selectedValidatorAddress} - isSelected - showAction={false} - /> - </div> - <StakedInfo - validatorAddress={selectedValidatorAddress} - accountAddress={accountAddress!} - /> - <div className="my-md w-full"> - <Field name="amount"> - {({ - field: { onChange, ...field }, - form: { setFieldValue }, - meta, - }: FieldProps<FormValues>) => { - return ( - <Input - {...field} - onValueChange={({ value }) => { - setFieldValue('amount', value, true); - }} - type={InputType.NumericFormat} - label="Amount" - value={amount} - suffix={` ${symbol}`} - placeholder="Enter amount to stake" - errorMessage={ - values.amount && meta.error ? meta.error : undefined - } - caption={coinBalance ? caption : ''} - /> - ); - }} - </Field> - {!hasEnoughRemaingBalance ? ( - <div className="mt-md"> - <InfoBox - type={InfoBoxType.Error} - supportingText="You have selected an amount that will leave you with insufficient funds to pay for gas fees for unstaking or any other transactions." - style={InfoBoxStyle.Elevated} - icon={<Exclamation />} - /> - </div> - ) : null} - </div> + function handleStake(): void { + if (!newStakeData?.transaction) { + addNotification('Stake transaction was not created', NotificationType.Error); + return; + } + signAndExecuteTransaction( + { + transaction: newStakeData?.transaction, + }, + { + onSuccess: (tx) => { + onSuccess(tx.digest); + addNotification('Stake transaction has been sent'); + resetForm(); + }, + onError: () => { + addNotification('Stake transaction was not sent', NotificationType.Error); + }, + }, + ); + } - <Panel hasBorder> - <div className="flex flex-col gap-y-sm p-md"> - <KeyValueInfo - keyText="Staking Rewards Start" - value={stakedRewardsStartEpoch} - fullwidth - /> - <KeyValueInfo - keyText="Redeem Rewards" - value={timeBeforeStakeRewardsRedeemableAgoDisplay} - fullwidth - /> - <Divider /> - <KeyValueInfo - keyText="Gas fee" - value={gas || '--'} - supportingLabel={symbol} - fullwidth - /> - </div> - </Panel> - </div> - </div> - </DialogLayoutBody> - <DialogLayoutFooter> - <div className="flex w-full justify-between gap-sm"> - <Button fullWidth type={ButtonType.Secondary} onClick={onBack} text="Back" /> - <Button - fullWidth - type={ButtonType.Primary} - onClick={onStake} - disabled={!amount || !!errors?.amount} - text="Stake" - /> - </div> - </DialogLayoutFooter> - </DialogLayout> + return ( + <EnterAmountDialogLayout + selectedValidator={selectedValidator} + gasBudget={newStakeData?.gasBudget} + senderAddress={senderAddress} + caption={caption} + showInfo={!hasEnoughRemaingBalance} + infoMessage={infoMessage} + isLoading={isTransactionLoading} + onBack={onBack} + handleClose={handleClose} + handleStake={handleStake} + /> ); } diff --git a/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterTimelockedAmountView.tsx b/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterTimelockedAmountView.tsx index 9eaeb41b6a2..b21a6ad3bd1 100644 --- a/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterTimelockedAmountView.tsx +++ b/apps/wallet-dashboard/components/Dialogs/Staking/views/EnterTimelockedAmountView.tsx @@ -1,29 +1,25 @@ // Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -import React from 'react'; -import { useFormatCoin, CoinFormat, useStakeTxnInfo } from '@iota/core'; +import React, { useEffect, useState } from 'react'; +import { + useFormatCoin, + CoinFormat, + GroupedTimelockObject, + useGetAllOwnedObjects, + TIMELOCK_IOTA_TYPE, +} from '@iota/core'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { useFormikContext } from 'formik'; +import { useSignAndExecuteTransaction } from '@iota/dapp-kit'; import { - Button, - ButtonType, - KeyValueInfo, - Panel, - Divider, - Input, - InputType, - Header, - InfoBoxType, - InfoBoxStyle, - InfoBox, -} from '@iota/apps-ui-kit'; -import { Field, type FieldProps, useFormikContext } from 'formik'; -import { Exclamation, Loader } from '@iota/ui-icons'; -import { useCurrentAccount, useIotaClientQuery } from '@iota/dapp-kit'; - -import { Validator } from './Validator'; -import { StakedInfo } from './StakedInfo'; -import { DialogLayout, DialogLayoutBody, DialogLayoutFooter } from '../../layout'; + useGetCurrentEpochStartTimestamp, + useNewStakeTimelockedTransaction, + useNotifications, +} from '@/hooks'; +import { NotificationType } from '@/stores/notificationStore'; +import { prepareObjectsForTimelockedStakingTransaction } from '@/lib/utils'; +import EnterAmountDialogLayout from './EnterAmountDialogLayout'; export interface FormValues { amount: string; @@ -32,32 +28,49 @@ export interface FormValues { interface EnterTimelockedAmountViewProps { selectedValidator: string; maxStakableTimelockedAmount: bigint; + amountWithoutDecimals: bigint; + senderAddress: string; onBack: () => void; - onStake: () => void; - gasBudget?: string | number | null; handleClose: () => void; - hasGroupedTimelockObjects?: boolean; - isTransactionLoading?: boolean; + onSuccess: (digest: string) => void; } function EnterTimelockedAmountView({ - selectedValidator: selectedValidatorAddress, + selectedValidator, maxStakableTimelockedAmount, - hasGroupedTimelockObjects, + amountWithoutDecimals, + senderAddress, onBack, - onStake, - gasBudget, handleClose, - isTransactionLoading, + onSuccess, }: EnterTimelockedAmountViewProps): JSX.Element { - const account = useCurrentAccount(); - const accountAddress = account?.address; + const { addNotification } = useNotifications(); + const { mutateAsync: signAndExecuteTransaction } = useSignAndExecuteTransaction(); + const { resetForm } = useFormikContext<FormValues>(); + + const { data: currentEpochMs } = useGetCurrentEpochStartTimestamp(); + const { data: timelockedObjects } = useGetAllOwnedObjects(senderAddress, { + StructType: TIMELOCK_IOTA_TYPE, + }); + const [groupedTimelockObjects, setGroupedTimelockObjects] = useState<GroupedTimelockObject[]>( + [], + ); - const { values, errors } = useFormikContext<FormValues>(); - const amount = values.amount; + const { data: newStakeData, isLoading: isTransactionLoading } = + useNewStakeTimelockedTransaction(selectedValidator, senderAddress, groupedTimelockObjects); - const { data: system } = useIotaClientQuery('getLatestIotaSystemState'); - const [gas, symbol] = useFormatCoin(gasBudget ?? 0, IOTA_TYPE_ARG); + useEffect(() => { + if (timelockedObjects && currentEpochMs) { + const groupedTimelockObjects = prepareObjectsForTimelockedStakingTransaction( + timelockedObjects, + amountWithoutDecimals, + currentEpochMs, + ); + setGroupedTimelockObjects(groupedTimelockObjects); + } + }, [timelockedObjects, currentEpochMs, amountWithoutDecimals]); + + const hasGroupedTimelockObjects = groupedTimelockObjects.length > 0; const [maxTokenFormatted, maxTokenFormattedSymbol] = useFormatCoin( maxStakableTimelockedAmount, @@ -66,114 +79,49 @@ function EnterTimelockedAmountView({ ); const caption = `${maxTokenFormatted} ${maxTokenFormattedSymbol} Available`; + const infoMessage = + 'It is not possible to combine timelocked objects to stake the entered amount. Please try a different amount.'; - const { stakedRewardsStartEpoch, timeBeforeStakeRewardsRedeemableAgoDisplay } = useStakeTxnInfo( - system?.epoch, - ); + function handleStake(): void { + if (groupedTimelockObjects.length === 0) { + addNotification('Invalid stake amount. Please try again.', NotificationType.Error); + return; + } + if (!newStakeData?.transaction) { + addNotification('Stake transaction was not created', NotificationType.Error); + return; + } + signAndExecuteTransaction( + { + transaction: newStakeData?.transaction, + }, + { + onSuccess: (tx) => { + onSuccess?.(tx.digest); + addNotification('Stake transaction has been sent'); + resetForm(); + }, + onError: () => { + addNotification('Stake transaction was not sent', NotificationType.Error); + }, + }, + ); + } return ( - <DialogLayout> - <Header title="Enter amount" onClose={handleClose} onBack={onBack} titleCentered /> - <DialogLayoutBody> - <div className="flex w-full flex-col justify-between"> - <div> - <div className="mb-md"> - <Validator - address={selectedValidatorAddress} - isSelected - showAction={false} - /> - </div> - <StakedInfo - validatorAddress={selectedValidatorAddress} - accountAddress={accountAddress!} - /> - <div className="my-md w-full"> - <Field name="amount"> - {({ - field: { onChange, ...field }, - form: { setFieldValue }, - meta, - }: FieldProps<FormValues>) => { - return ( - <Input - {...field} - onValueChange={({ value }) => { - setFieldValue('amount', value, true); - }} - type={InputType.NumericFormat} - label="Amount" - value={amount} - suffix={` ${symbol}`} - placeholder="Enter amount to stake" - errorMessage={ - values.amount && meta.error ? meta.error : undefined - } - caption={caption} - /> - ); - }} - </Field> - {!hasGroupedTimelockObjects && !isTransactionLoading ? ( - <div className="mt-md"> - <InfoBox - type={InfoBoxType.Error} - supportingText="It is not possible to combine timelocked objects to stake the entered amount. Please try a different amount." - style={InfoBoxStyle.Elevated} - icon={<Exclamation />} - /> - </div> - ) : null} - </div> - - <Panel hasBorder> - <div className="flex flex-col gap-y-sm p-md"> - <KeyValueInfo - keyText="Staking Rewards Start" - value={stakedRewardsStartEpoch} - fullwidth - /> - <KeyValueInfo - keyText="Redeem Rewards" - value={timeBeforeStakeRewardsRedeemableAgoDisplay} - fullwidth - /> - <Divider /> - <KeyValueInfo - keyText="Gas fee" - value={gas || '--'} - supportingLabel={symbol} - fullwidth - /> - </div> - </Panel> - </div> - </div> - </DialogLayoutBody> - <DialogLayoutFooter> - <div className="flex w-full justify-between gap-sm"> - <Button fullWidth type={ButtonType.Secondary} onClick={onBack} text="Back" /> - <Button - fullWidth - type={ButtonType.Primary} - disabled={ - !amount || - !!errors?.amount || - isTransactionLoading || - !hasGroupedTimelockObjects - } - onClick={onStake} - text="Stake" - icon={ - isTransactionLoading ? ( - <Loader className="animate-spin" data-testid="loading-indicator" /> - ) : null - } - iconAfterText - /> - </div> - </DialogLayoutFooter> - </DialogLayout> + <EnterAmountDialogLayout + selectedValidator={selectedValidator} + gasBudget={newStakeData?.gasBudget} + senderAddress={senderAddress} + caption={caption} + showInfo={!hasGroupedTimelockObjects} + infoMessage={infoMessage} + isLoading={isTransactionLoading} + isStakeDisabled={!hasGroupedTimelockObjects} + onBack={onBack} + handleClose={handleClose} + handleStake={handleStake} + /> ); } diff --git a/apps/wallet-dashboard/components/Dialogs/Staking/views/UnstakeView.tsx b/apps/wallet-dashboard/components/Dialogs/Staking/views/UnstakeView.tsx deleted file mode 100644 index 671184c9cea..00000000000 --- a/apps/wallet-dashboard/components/Dialogs/Staking/views/UnstakeView.tsx +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import { - Header, - Button, - KeyValueInfo, - Divider, - ButtonType, - Panel, - LoadingIndicator, - InfoBoxType, - InfoBoxStyle, - InfoBox, -} from '@iota/apps-ui-kit'; -import { - createUnstakeTransaction, - ExtendedDelegatedStake, - GAS_SYMBOL, - TimeUnit, - useFormatCoin, - useGetTimeBeforeEpochNumber, - useGetStakingValidatorDetails, - useTimeAgo, - useTransactionGasBudget, -} from '@iota/core'; -import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; -import { useMemo } from 'react'; -import { useCurrentAccount, useSignAndExecuteTransaction } from '@iota/dapp-kit'; -import { Loader, Warning } from '@iota/ui-icons'; -import { useUnstakeTransaction } from '@/hooks'; -import { ValidatorStakingData } from '@/components'; -import { DialogLayout, DialogLayoutFooter, DialogLayoutBody } from '../../layout'; - -interface UnstakeDialogProps { - extendedStake: ExtendedDelegatedStake; - handleClose: () => void; - showActiveStatus?: boolean; -} - -export function UnstakeView({ - extendedStake, - handleClose, - showActiveStatus, -}: UnstakeDialogProps): JSX.Element { - const stakingReward = BigInt(extendedStake.estimatedReward ?? '').toString(); - const [rewards, rewardSymbol] = useFormatCoin(stakingReward, IOTA_TYPE_ARG); - const activeAddress = useCurrentAccount()?.address ?? null; - - const { - totalStake: [tokenBalance], - totalStakeOriginal, - epoch, - systemDataResult, - delegatedStakeDataResult, - } = useGetStakingValidatorDetails({ - accountAddress: activeAddress, - validatorAddress: extendedStake.validatorAddress, - stakeId: extendedStake.stakedIotaId, - unstake: true, - }); - - const { isLoading: loadingValidators, error: errorValidators } = systemDataResult; - const { - isLoading: isLoadingDelegatedStakeData, - isError, - error: delegatedStakeDataError, - } = delegatedStakeDataResult; - - const delegationId = extendedStake?.status === 'Active' && extendedStake?.stakedIotaId; - - const [totalIota] = useFormatCoin( - BigInt(stakingReward || 0) + totalStakeOriginal, - IOTA_TYPE_ARG, - ); - - const transaction = useMemo( - () => createUnstakeTransaction(extendedStake.stakedIotaId), - [extendedStake], - ); - const { data: gasBudget } = useTransactionGasBudget(activeAddress, transaction); - - const { data: currentEpochEndTime } = useGetTimeBeforeEpochNumber(epoch + 1 || 0); - const currentEpochEndTimeAgo = useTimeAgo({ - timeFrom: currentEpochEndTime, - endLabel: '--', - shortedTimeLabel: false, - shouldEnd: true, - maxTimeUnit: TimeUnit.ONE_HOUR, - }); - - const { data: unstakeData } = useUnstakeTransaction( - extendedStake.stakedIotaId, - activeAddress || '', - ); - const { mutateAsync: signAndExecuteTransaction, isPending } = useSignAndExecuteTransaction(); - - async function handleUnstake(): Promise<void> { - if (!unstakeData) return; - await signAndExecuteTransaction({ - transaction: unstakeData.transaction, - }); - handleClose(); - } - - const currentEpochEndTimeFormatted = - currentEpochEndTime > 0 ? currentEpochEndTimeAgo : `Epoch #${epoch}`; - - if (isLoadingDelegatedStakeData || loadingValidators) { - return ( - <div className="flex h-full w-full items-center justify-center p-2"> - <LoadingIndicator /> - </div> - ); - } - - if (isError || errorValidators) { - return ( - <div className="mb-2 flex h-full w-full items-center justify-center p-2"> - <InfoBox - title="Something went wrong" - supportingText={delegatedStakeDataError?.message ?? 'An error occurred'} - style={InfoBoxStyle.Default} - type={InfoBoxType.Error} - icon={<Warning />} - /> - </div> - ); - } - - return ( - <DialogLayout> - <Header title="Unstake" onClose={handleClose} onBack={handleClose} titleCentered /> - <DialogLayoutBody> - <div className="flex flex-col gap-y-md"> - <ValidatorStakingData - validatorAddress={extendedStake.validatorAddress} - stakeId={extendedStake.stakedIotaId} - isUnstake - /> - - <Panel hasBorder> - <div className="flex flex-col gap-y-sm p-md"> - <KeyValueInfo - keyText="Current Epoch Ends" - value={currentEpochEndTimeFormatted} - fullwidth - /> - <Divider /> - <KeyValueInfo - keyText="Your Stake" - value={tokenBalance} - supportingLabel={GAS_SYMBOL} - fullwidth - /> - <KeyValueInfo - keyText="Rewards Earned" - value={rewards} - supportingLabel={rewardSymbol} - fullwidth - /> - <Divider /> - <KeyValueInfo - keyText="Total unstaked IOTA" - value={totalIota} - supportingLabel={GAS_SYMBOL} - fullwidth - /> - </div> - </Panel> - - <Panel hasBorder> - <div className="flex flex-col gap-y-sm p-md"> - <KeyValueInfo - keyText="Gas Fees" - value={gasBudget || '-'} - supportingLabel={GAS_SYMBOL} - fullwidth - /> - </div> - </Panel> - </div> - </DialogLayoutBody> - - <DialogLayoutFooter> - <Button - type={ButtonType.Secondary} - fullWidth - onClick={handleUnstake} - disabled={isPending || !delegationId} - text="Unstake" - icon={ - isPending ? ( - <Loader className="animate-spin" data-testid="loading-indicator" /> - ) : null - } - iconAfterText - /> - </DialogLayoutFooter> - </DialogLayout> - ); -} diff --git a/apps/wallet-dashboard/components/Dialogs/Staking/views/index.ts b/apps/wallet-dashboard/components/Dialogs/Staking/views/index.ts index 8ed3cfb4dee..5a0ffed2be6 100644 --- a/apps/wallet-dashboard/components/Dialogs/Staking/views/index.ts +++ b/apps/wallet-dashboard/components/Dialogs/Staking/views/index.ts @@ -3,6 +3,6 @@ export { default as EnterAmountView } from './EnterAmountView'; export { default as EnterTimelockedAmountView } from './EnterTimelockedAmountView'; +export { default as EnterAmountDialogLayout } from './EnterAmountDialogLayout'; export { default as SelectValidatorView } from './SelectValidatorView'; export * from './DetailsView'; -export * from './UnstakeView'; diff --git a/apps/wallet-dashboard/components/Dialogs/TransactionDialog.tsx b/apps/wallet-dashboard/components/Dialogs/TransactionDialog.tsx index c1b6a845b01..8b78f53d190 100644 --- a/apps/wallet-dashboard/components/Dialogs/TransactionDialog.tsx +++ b/apps/wallet-dashboard/components/Dialogs/TransactionDialog.tsx @@ -46,7 +46,9 @@ export function TransactionDialogView({ renderValidatorLogo={Validator} /> ) : ( - <LoadingIndicator /> + <div className="flex h-full w-full justify-center"> + <LoadingIndicator /> + </div> )} </DialogLayoutBody> <DialogLayoutFooter> diff --git a/apps/wallet-dashboard/components/Dialogs/index.ts b/apps/wallet-dashboard/components/Dialogs/index.ts index 97ee2fabbad..1475376b5ec 100644 --- a/apps/wallet-dashboard/components/Dialogs/index.ts +++ b/apps/wallet-dashboard/components/Dialogs/index.ts @@ -4,4 +4,7 @@ export * from './SendToken'; export * from './ReceiveFundsDialog'; export * from './Staking'; +export * from './unstake'; export * from './vesting'; +export * from './settings'; +export * from './migration'; diff --git a/apps/wallet-dashboard/components/Dialogs/migration/MigrationDialog.tsx b/apps/wallet-dashboard/components/Dialogs/migration/MigrationDialog.tsx new file mode 100644 index 00000000000..3fd91b0eb35 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/migration/MigrationDialog.tsx @@ -0,0 +1,88 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import React, { useState } from 'react'; +import { useCurrentAccount, useSignAndExecuteTransaction } from '@iota/dapp-kit'; +import { IotaObjectData } from '@iota/iota-sdk/client'; +import { useMigrationTransaction } from '@/hooks/useMigrationTransaction'; +import { Dialog } from '@iota/apps-ui-kit'; +import toast from 'react-hot-toast'; +import { TransactionDialogView } from '../TransactionDialog'; +import { MigrationDialogView } from './enums'; +import { ConfirmMigrationView } from './views'; + +interface MigrationDialogProps { + handleClose: () => void; + basicOutputObjects: IotaObjectData[] | undefined; + nftOutputObjects: IotaObjectData[] | undefined; + onSuccess: (digest: string) => void; + setOpen: (bool: boolean) => void; + open: boolean; + isTimelocked: boolean; +} + +export function MigrationDialog({ + handleClose, + basicOutputObjects = [], + nftOutputObjects = [], + onSuccess, + open, + setOpen, + isTimelocked, +}: MigrationDialogProps): JSX.Element { + const account = useCurrentAccount(); + const [txDigest, setTxDigest] = useState<string>(''); + const [view, setView] = useState<MigrationDialogView>(MigrationDialogView.Confirmation); + + const { + data: migrateData, + isPending: isMigrationPending, + isError: isMigrationError, + } = useMigrationTransaction(account?.address || '', basicOutputObjects, nftOutputObjects); + + const { mutateAsync: signAndExecuteTransaction, isPending: isSendingTransaction } = + useSignAndExecuteTransaction(); + + async function handleMigrate(): Promise<void> { + if (!migrateData) return; + signAndExecuteTransaction( + { + transaction: migrateData.transaction, + }, + { + onSuccess: (tx) => { + onSuccess(tx.digest); + setTxDigest(tx.digest); + setView(MigrationDialogView.TransactionDetails); + }, + }, + ) + .then(() => { + toast.success('Migration transaction has been sent'); + }) + .catch(() => { + toast.error('Migration transaction was not sent'); + }); + } + + return ( + <Dialog open={open} onOpenChange={setOpen}> + {view === MigrationDialogView.Confirmation && ( + <ConfirmMigrationView + basicOutputObjects={basicOutputObjects} + nftOutputObjects={nftOutputObjects} + onSuccess={handleMigrate} + setOpen={setOpen} + isTimelocked={isTimelocked} + migrateData={migrateData} + isMigrationPending={isMigrationPending} + isMigrationError={isMigrationError} + isSendingTransaction={isSendingTransaction} + /> + )} + {view === MigrationDialogView.TransactionDetails && ( + <TransactionDialogView txDigest={txDigest} onClose={handleClose} /> + )} + </Dialog> + ); +} diff --git a/apps/wallet-dashboard/components/Dialogs/migration/enums/index.ts b/apps/wallet-dashboard/components/Dialogs/migration/enums/index.ts new file mode 100644 index 00000000000..6f408e39b8c --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/migration/enums/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './view.enums'; diff --git a/apps/wallet-dashboard/components/Dialogs/migration/enums/view.enums.ts b/apps/wallet-dashboard/components/Dialogs/migration/enums/view.enums.ts new file mode 100644 index 00000000000..5b16d31b836 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/migration/enums/view.enums.ts @@ -0,0 +1,7 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export enum MigrationDialogView { + Confirmation = 'Confirmation', + TransactionDetails = 'TransactionDetails', +} diff --git a/apps/wallet-dashboard/components/Dialogs/migration/index.ts b/apps/wallet-dashboard/components/Dialogs/migration/index.ts new file mode 100644 index 00000000000..41dd3ff2b30 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/migration/index.ts @@ -0,0 +1,6 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './MigrationDialog'; + +export * from './views'; diff --git a/apps/wallet-dashboard/components/Dialogs/migration/views/ConfirmMigrationView.tsx b/apps/wallet-dashboard/components/Dialogs/migration/views/ConfirmMigrationView.tsx new file mode 100644 index 00000000000..7066a922187 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/migration/views/ConfirmMigrationView.tsx @@ -0,0 +1,169 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; +import { MigrationObjectLoading, VirtualList } from '@/components'; +import { useCurrentAccount } from '@iota/dapp-kit'; +import { IotaObjectData } from '@iota/iota-sdk/client'; +import { + Button, + Header, + InfoBox, + InfoBoxStyle, + InfoBoxType, + KeyValueInfo, + Panel, + Skeleton, + Title, + TitleSize, +} from '@iota/apps-ui-kit'; +import { useGroupedMigrationObjectsByExpirationDate } from '@/hooks'; +import { Loader, Warning } from '@iota/ui-icons'; +import { Collapsible, useFormatCoin } from '@iota/core'; +import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { summarizeMigratableObjectValues } from '@/lib/utils'; +import { MigrationObjectDetailsCard } from '@/components/migration/migration-object-details-card'; +import { DialogLayout, DialogLayoutBody, DialogLayoutFooter } from '../../layout'; +import { Transaction } from '@iota/iota-sdk/transactions'; + +interface ConfirmMigrationViewProps { + basicOutputObjects: IotaObjectData[] | undefined; + nftOutputObjects: IotaObjectData[] | undefined; + onSuccess: () => void; + setOpen: (bool: boolean) => void; + isTimelocked: boolean; + migrateData: + | { + transaction: Transaction; + gasBudget: string | number | null; + } + | undefined; + isMigrationPending: boolean; + isMigrationError: boolean; + isSendingTransaction: boolean; +} + +export function ConfirmMigrationView({ + basicOutputObjects = [], + nftOutputObjects = [], + onSuccess, + setOpen, + isTimelocked, + migrateData, + isMigrationPending, + isMigrationError, + isSendingTransaction, +}: ConfirmMigrationViewProps): JSX.Element { + const account = useCurrentAccount(); + + const { + data: resolvedObjects = [], + isLoading, + error: isGroupedMigrationError, + } = useGroupedMigrationObjectsByExpirationDate( + [...basicOutputObjects, ...nftOutputObjects], + isTimelocked, + ); + + const { totalNotOwnedStorageDepositReturnAmount } = summarizeMigratableObjectValues({ + basicOutputs: basicOutputObjects, + nftOutputs: nftOutputObjects, + address: account?.address || '', + }); + + const [gasFee, gasFeeSymbol] = useFormatCoin(migrateData?.gasBudget, IOTA_TYPE_ARG); + const [totalStorageDepositReturnAmountFormatted, totalStorageDepositReturnAmountSymbol] = + useFormatCoin(totalNotOwnedStorageDepositReturnAmount.toString(), IOTA_TYPE_ARG); + + return ( + <DialogLayout> + <Header title="Confirmation" onClose={() => setOpen(false)} titleCentered /> + <DialogLayoutBody> + <div className="flex h-full flex-col gap-y-md overflow-y-auto"> + {isGroupedMigrationError && !isLoading && ( + <InfoBox + title="Error" + supportingText="Failed to load migration objects" + style={InfoBoxStyle.Elevated} + type={InfoBoxType.Error} + icon={<Warning />} + /> + )} + {isLoading ? ( + <> + <Panel hasBorder> + <div className="flex flex-col gap-y-sm p-md"> + <Skeleton widthClass="w-40" heightClass="h-3.5" /> + <MigrationObjectLoading /> + </div> + </Panel> + <Panel hasBorder> + <div className="flex flex-col gap-y-md p-md"> + <Skeleton widthClass="w-full" heightClass="h-3.5" /> + <Skeleton widthClass="w-full" heightClass="h-3.5" /> + </div> + </Panel> + </> + ) : ( + <> + <Collapsible + defaultOpen + render={() => ( + <Title size={TitleSize.Small} title="Assets to Migrate" /> + )} + > + <div className="h-[500px] pb-md--rs xl:h-[600px]"> + <VirtualList + heightClassName="h-full" + overflowClassName="overflow-y-auto" + items={resolvedObjects} + estimateSize={() => 58} + render={(migrationObject) => ( + <MigrationObjectDetailsCard + migrationObject={migrationObject} + isTimelocked={isTimelocked} + /> + )} + /> + </div> + </Collapsible> + <Panel hasBorder> + <div className="flex flex-col gap-y-sm p-md"> + <KeyValueInfo + keyText="Legacy storage deposit" + value={totalStorageDepositReturnAmountFormatted || '-'} + supportingLabel={totalStorageDepositReturnAmountSymbol} + fullwidth + /> + <KeyValueInfo + keyText="Gas Fees" + value={gasFee || '-'} + supportingLabel={gasFeeSymbol} + fullwidth + /> + </div> + </Panel> + </> + )} + </div> + </DialogLayoutBody> + <DialogLayoutFooter> + <Button + text="Migrate" + disabled={isMigrationPending || isMigrationError || isSendingTransaction} + onClick={onSuccess} + icon={ + isMigrationPending || isSendingTransaction ? ( + <Loader + className="h-4 w-4 animate-spin" + data-testid="loading-indicator" + /> + ) : null + } + iconAfterText + fullWidth + /> + </DialogLayoutFooter> + </DialogLayout> + ); +} diff --git a/apps/wallet-dashboard/components/Dialogs/migration/views/index.ts b/apps/wallet-dashboard/components/Dialogs/migration/views/index.ts new file mode 100644 index 00000000000..b5a03528f1e --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/migration/views/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './ConfirmMigrationView'; diff --git a/apps/wallet-dashboard/components/Dialogs/settings/SettingsDialog.tsx b/apps/wallet-dashboard/components/Dialogs/settings/SettingsDialog.tsx new file mode 100644 index 00000000000..447c3e3a4e9 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/settings/SettingsDialog.tsx @@ -0,0 +1,36 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; +import { Dialog } from '@iota/apps-ui-kit'; +import { SettingsDialogView } from './enums'; +import { SettingsListView, NetworkSelectorView } from './views'; + +interface SettingsDialogProps { + isOpen: boolean; + handleClose: () => void; + view: SettingsDialogView | undefined; + setView: (view: SettingsDialogView) => void; +} + +export function SettingsDialog({ + isOpen, + handleClose, + view, + setView, +}: SettingsDialogProps): JSX.Element { + function onBack(): void { + setView(SettingsDialogView.SelectSetting); + } + + return ( + <Dialog open={isOpen} onOpenChange={() => handleClose()}> + {view === SettingsDialogView.SelectSetting && ( + <SettingsListView handleClose={handleClose} setView={setView} /> + )} + {view === SettingsDialogView.NetworkSettings && ( + <NetworkSelectorView handleClose={handleClose} onBack={onBack} /> + )} + </Dialog> + ); +} diff --git a/apps/wallet-dashboard/components/Dialogs/settings/enums/index.ts b/apps/wallet-dashboard/components/Dialogs/settings/enums/index.ts new file mode 100644 index 00000000000..6f408e39b8c --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/settings/enums/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './view.enums'; diff --git a/apps/wallet-dashboard/components/Dialogs/settings/enums/view.enums.ts b/apps/wallet-dashboard/components/Dialogs/settings/enums/view.enums.ts new file mode 100644 index 00000000000..b3f17bb2130 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/settings/enums/view.enums.ts @@ -0,0 +1,7 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export enum SettingsDialogView { + SelectSetting = 'SelectSetting', + NetworkSettings = 'NetworkSettings', +} diff --git a/apps/wallet-dashboard/components/Dialogs/settings/hooks/index.ts b/apps/wallet-dashboard/components/Dialogs/settings/hooks/index.ts new file mode 100644 index 00000000000..dfc58ee2f8b --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/settings/hooks/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './useSettingsDialog'; diff --git a/apps/wallet-dashboard/components/Dialogs/settings/hooks/useSettingsDialog.ts b/apps/wallet-dashboard/components/Dialogs/settings/hooks/useSettingsDialog.ts new file mode 100644 index 00000000000..6691f971e6c --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/settings/hooks/useSettingsDialog.ts @@ -0,0 +1,27 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { useState } from 'react'; +import { SettingsDialogView } from '../enums'; + +export function useSettingsDialog() { + const [settingsDialogView, setSettingsDialogView] = useState<SettingsDialogView | undefined>(); + + const isSettingsDialogOpen = settingsDialogView !== undefined; + + function onCloseSettingsDialogClick() { + setSettingsDialogView(undefined); + } + + function onOpenSettingsDialogClick() { + setSettingsDialogView(SettingsDialogView.SelectSetting); + } + + return { + isSettingsDialogOpen, + settingsDialogView, + setSettingsDialogView, + onCloseSettingsDialogClick, + onOpenSettingsDialogClick, + }; +} diff --git a/apps/wallet-dashboard/components/Dialogs/settings/index.ts b/apps/wallet-dashboard/components/Dialogs/settings/index.ts new file mode 100644 index 00000000000..00a59c7b679 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/settings/index.ts @@ -0,0 +1,7 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './enums'; +export * from './SettingsDialog'; +export * from './hooks'; +export * from './views'; diff --git a/apps/wallet-dashboard/components/Dialogs/settings/views/NetworkSelectorView.tsx b/apps/wallet-dashboard/components/Dialogs/settings/views/NetworkSelectorView.tsx new file mode 100644 index 00000000000..9eb2d3a80d4 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/settings/views/NetworkSelectorView.tsx @@ -0,0 +1,51 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; +import { Header, RadioButton } from '@iota/apps-ui-kit'; +import { DialogLayout, DialogLayoutBody } from '../../layout'; +import { NetworkConfiguration } from '@iota/iota-sdk/client'; +import { useIotaClientContext } from '@iota/dapp-kit'; +import toast from 'react-hot-toast'; + +interface NetworkSelectorViewProps { + handleClose: () => void; + onBack: () => void; +} + +export function NetworkSelectorView({ + handleClose, + onBack, +}: NetworkSelectorViewProps): JSX.Element { + const clientContext = useIotaClientContext(); + const activeNetwork = clientContext.network; + // Dashboard doesn't support RPCs yet + const networks = clientContext.networks as Record<string, NetworkConfiguration>; + + async function handleNetworkChange(network: NetworkConfiguration) { + if (activeNetwork === network.id) { + return; + } + clientContext.selectNetwork(network.id); + toast.success(`Switched to ${network.name}`); + } + + return ( + <DialogLayout> + <Header title="Network" onClose={handleClose} onBack={onBack} titleCentered /> + <DialogLayoutBody> + <div className="flex w-full flex-col gap-md"> + {Object.values(networks).map((network) => ( + <div className="px-md" key={network.id}> + <RadioButton + label={network.name} + isChecked={activeNetwork === network.id} + onChange={() => handleNetworkChange(network)} + /> + </div> + ))} + </div> + </DialogLayoutBody> + </DialogLayout> + ); +} diff --git a/apps/wallet-dashboard/components/Dialogs/settings/views/SettingsListView.tsx b/apps/wallet-dashboard/components/Dialogs/settings/views/SettingsListView.tsx new file mode 100644 index 00000000000..7e9d484de73 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/settings/views/SettingsListView.tsx @@ -0,0 +1,62 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; +import { + Card, + CardAction, + CardActionType, + CardBody, + CardImage, + CardType, + Header, + ImageType, +} from '@iota/apps-ui-kit'; +import { DialogLayout, DialogLayoutBody } from '../../layout'; +import { SettingsDialogView } from '../enums'; +import { getNetwork } from '@iota/iota-sdk/client'; +import { useIotaClientContext } from '@iota/dapp-kit'; +import { Globe } from '@iota/ui-icons'; + +interface SettingsListViewProps { + handleClose: () => void; + setView: (view: SettingsDialogView) => void; +} + +export function SettingsListView({ handleClose, setView }: SettingsListViewProps): JSX.Element { + const { network } = useIotaClientContext(); + const { name: networkName } = getNetwork(network); + + const MENU_ITEMS = [ + { + title: 'Network', + subtitle: networkName, + icon: <Globe />, + onClick: () => setView(SettingsDialogView.NetworkSettings), + }, + ]; + + return ( + <DialogLayout> + <Header title="Settings" onClose={handleClose} onBack={handleClose} titleCentered /> + <DialogLayoutBody> + <div className="flex h-full flex-col content-stretch"> + <div className="flex h-full w-full flex-col gap-md"> + {MENU_ITEMS.map((item, index) => ( + <Card key={index} type={CardType.Default} onClick={item.onClick}> + <CardImage type={ImageType.BgSolid}> + <div className="flex h-10 w-10 items-center justify-center rounded-full text-neutral-10 dark:text-neutral-92 [&_svg]:h-5 [&_svg]:w-5"> + <span className="text-2xl">{item.icon}</span> + </div> + </CardImage> + <CardBody title={item.title} subtitle={item.subtitle} /> + <CardAction type={CardActionType.Link} /> + </Card> + ))} + </div> + <p className="text-center">{process.env.NEXT_PUBLIC_DASHBOARD_REV}</p> + </div> + </DialogLayoutBody> + </DialogLayout> + ); +} diff --git a/apps/wallet-dashboard/components/Dialogs/settings/views/index.ts b/apps/wallet-dashboard/components/Dialogs/settings/views/index.ts new file mode 100644 index 00000000000..738311af3ac --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/settings/views/index.ts @@ -0,0 +1,5 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './SettingsListView'; +export * from './NetworkSelectorView'; diff --git a/apps/wallet-dashboard/components/Dialogs/transaction/TransactionDetailsLayout.tsx b/apps/wallet-dashboard/components/Dialogs/transaction/TransactionDetailsLayout.tsx new file mode 100644 index 00000000000..44bc9474a6a --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/transaction/TransactionDetailsLayout.tsx @@ -0,0 +1,58 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 +import React from 'react'; +import { ExplorerLink } from '@/components'; +import { ExtendedTransaction } from '@/lib/interfaces'; +import { Header, LoadingIndicator } from '@iota/apps-ui-kit'; +import { + useTransactionSummary, + ViewTxnOnExplorerButton, + ExplorerLinkType, + TransactionReceipt, + useRecognizedPackages, +} from '@iota/core'; +import { useCurrentAccount, useIotaClientContext } from '@iota/dapp-kit'; +import { DialogLayoutBody, DialogLayoutFooter } from '../layout'; +import { Validator } from '../Staking/views/Validator'; +import { Network } from '@iota/iota-sdk/client'; + +interface TransactionDialogDetailsProps { + transaction: ExtendedTransaction; + onClose: () => void; +} +export function TransactionDetailsLayout({ transaction, onClose }: TransactionDialogDetailsProps) { + const address = useCurrentAccount()?.address ?? ''; + + const { network } = useIotaClientContext(); + const recognizedPackagesList = useRecognizedPackages(network as Network); + const summary = useTransactionSummary({ + transaction: transaction.raw, + currentAddress: address, + recognizedPackagesList, + }); + + if (!summary) return <LoadingIndicator />; + + return ( + <> + <Header title="Transaction" onClose={onClose} /> + <DialogLayoutBody> + <TransactionReceipt + txn={transaction.raw} + activeAddress={address} + summary={summary} + renderExplorerLink={ExplorerLink} + renderValidatorLogo={Validator} + /> + </DialogLayoutBody> + <DialogLayoutFooter> + <ExplorerLink + type={ExplorerLinkType.Transaction} + transactionID={transaction.raw.digest} + > + <ViewTxnOnExplorerButton digest={transaction.raw.digest} /> + </ExplorerLink> + </DialogLayoutFooter> + </> + ); +} diff --git a/apps/wallet-dashboard/components/Dialogs/transaction/index.ts b/apps/wallet-dashboard/components/Dialogs/transaction/index.ts new file mode 100644 index 00000000000..55a1e09a752 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/transaction/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './TransactionDetailsLayout'; diff --git a/apps/wallet-dashboard/components/Dialogs/unstake/UnstakeDialog.tsx b/apps/wallet-dashboard/components/Dialogs/unstake/UnstakeDialog.tsx new file mode 100644 index 00000000000..16ef52b41bb --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/unstake/UnstakeDialog.tsx @@ -0,0 +1,56 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { Dialog } from '@iota/apps-ui-kit'; +import { UnstakeTimelockedObjectsView, UnstakeView } from './views'; +import { ExtendedDelegatedStake } from '@iota/core'; +import { TimelockedStakedObjectsGrouped } from '@/lib/utils'; +import { UnstakeDialogView } from './enums'; +import { IotaSignAndExecuteTransactionOutput } from '@iota/wallet-standard'; +import { TransactionDialogView } from '../TransactionDialog'; + +interface UnstakeDialogProps { + view: UnstakeDialogView; + handleClose: () => void; + onSuccess: (tx: IotaSignAndExecuteTransactionOutput) => void; + onBack?: (view: UnstakeDialogView) => (() => void) | undefined; + groupedTimelockedObjects?: TimelockedStakedObjectsGrouped; + extendedStake?: ExtendedDelegatedStake; + txDigest?: string; +} + +export function UnstakeDialog({ + view, + handleClose, + onSuccess, + extendedStake, + groupedTimelockedObjects, + onBack, + txDigest, +}: UnstakeDialogProps): React.JSX.Element { + return ( + <Dialog open onOpenChange={handleClose}> + {view === UnstakeDialogView.Unstake && extendedStake && ( + <UnstakeView + extendedStake={extendedStake} + handleClose={handleClose} + onBack={onBack?.(UnstakeDialogView.Unstake)} + showActiveStatus + onSuccess={onSuccess} + /> + )} + + {view === UnstakeDialogView.TimelockedUnstake && groupedTimelockedObjects && ( + <UnstakeTimelockedObjectsView + onClose={handleClose} + groupedTimelockedObjects={groupedTimelockedObjects} + onBack={onBack?.(UnstakeDialogView.TimelockedUnstake)} + onSuccess={onSuccess} + /> + )} + {view === UnstakeDialogView.TransactionDetails && ( + <TransactionDialogView txDigest={txDigest} onClose={handleClose} /> + )} + </Dialog> + ); +} diff --git a/apps/wallet-dashboard/components/Dialogs/unstake/enums/index.ts b/apps/wallet-dashboard/components/Dialogs/unstake/enums/index.ts new file mode 100644 index 00000000000..75ff18fcbaf --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/unstake/enums/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './views.enums'; diff --git a/apps/wallet-dashboard/components/Dialogs/unstake/enums/views.enums.ts b/apps/wallet-dashboard/components/Dialogs/unstake/enums/views.enums.ts new file mode 100644 index 00000000000..1b0b313dcce --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/unstake/enums/views.enums.ts @@ -0,0 +1,8 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export enum UnstakeDialogView { + Unstake = 'unstake', + TimelockedUnstake = 'timelockedUnstake', + TransactionDetails = 'transactionDetails', +} diff --git a/apps/wallet-dashboard/components/Dialogs/unstake/hooks/index.ts b/apps/wallet-dashboard/components/Dialogs/unstake/hooks/index.ts new file mode 100644 index 00000000000..8834415eafd --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/unstake/hooks/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './useUnstakeDialog'; diff --git a/apps/wallet-dashboard/components/Dialogs/unstake/hooks/useUnstakeDialog.ts b/apps/wallet-dashboard/components/Dialogs/unstake/hooks/useUnstakeDialog.ts new file mode 100644 index 00000000000..88de6c40f25 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/unstake/hooks/useUnstakeDialog.ts @@ -0,0 +1,41 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { ComponentProps, useState } from 'react'; +import { UnstakeDialogView } from '../enums'; +import type { UnstakeDialog } from '../UnstakeDialog'; + +export function useUnstakeDialog() { + const [isOpen, setIsOpen] = useState(false); + const [view, setView] = useState<UnstakeDialogView>(UnstakeDialogView.Unstake); + const [txDigest, setTxDigest] = useState<string | undefined>(); + + function openUnstakeDialog(view?: UnstakeDialogView) { + setIsOpen(true); + if (view) { + setView(view); + } + } + + function handleClose() { + setIsOpen(false); + } + + const defaultDialogProps: Omit<ComponentProps<typeof UnstakeDialog>, 'onSuccess'> = { + view, + handleClose: () => setIsOpen(false), + txDigest, + }; + + return { + isOpen, + setIsOpen, + view, + setView, + openUnstakeDialog, + txDigest, + setTxDigest, + defaultDialogProps, + handleClose, + }; +} diff --git a/apps/wallet-dashboard/components/Dialogs/unstake/index.ts b/apps/wallet-dashboard/components/Dialogs/unstake/index.ts new file mode 100644 index 00000000000..05b9b934af5 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/unstake/index.ts @@ -0,0 +1,8 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './views'; +export * from './enums'; +export * from './hooks'; + +export * from './UnstakeDialog'; diff --git a/apps/wallet-dashboard/components/Dialogs/unstake/views/UnstakeTimelockedObjectsView.tsx b/apps/wallet-dashboard/components/Dialogs/unstake/views/UnstakeTimelockedObjectsView.tsx new file mode 100644 index 00000000000..45e34ee5cf0 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/unstake/views/UnstakeTimelockedObjectsView.tsx @@ -0,0 +1,213 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { StakeRewardsPanel, ValidatorStakingData } from '@/components'; +import { DialogLayout, DialogLayoutBody, DialogLayoutFooter } from '../../layout'; +import { Validator } from '../../Staking/views/Validator'; +import { useNewUnstakeTimelockedTransaction, useNotifications } from '@/hooks'; +import { + Collapsible, + TimeUnit, + useFormatCoin, + useGetActiveValidatorsInfo, + useTimeAgo, +} from '@iota/core'; +import { ExtendedDelegatedTimelockedStake, TimelockedStakedObjectsGrouped } from '@/lib/utils'; +import { formatAddress, IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { + Panel, + LoadingIndicator, + KeyValueInfo, + Header, + ButtonType, + Button, +} from '@iota/apps-ui-kit'; +import { useCurrentAccount, useSignAndExecuteTransaction } from '@iota/dapp-kit'; +import { IotaSignAndExecuteTransactionOutput } from '@iota/wallet-standard'; +import { NotificationType } from '@/stores/notificationStore'; + +interface UnstakeTimelockedObjectsViewProps { + onClose: () => void; + groupedTimelockedObjects: TimelockedStakedObjectsGrouped; + onSuccess: (tx: IotaSignAndExecuteTransactionOutput) => void; + onBack?: () => void; +} + +export function UnstakeTimelockedObjectsView({ + groupedTimelockedObjects, + onClose, + onBack, + onSuccess, +}: UnstakeTimelockedObjectsViewProps) { + const { addNotification } = useNotifications(); + const activeAddress = useCurrentAccount()?.address ?? ''; + const { data: activeValidators } = useGetActiveValidatorsInfo(); + + const stakes = groupedTimelockedObjects.stakes; + const timelockedStakedIotaIds = stakes.map((stake) => stake.timelockedStakedIotaId); + + const { data: unstakeData, isPending: isUnstakeTxPending } = useNewUnstakeTimelockedTransaction( + activeAddress, + timelockedStakedIotaIds, + ); + const { mutateAsync: signAndExecuteTransaction, isPending: isTransactionPending } = + useSignAndExecuteTransaction(); + + const validatorInfo = activeValidators?.find( + ({ iotaAddress: validatorAddress }) => + validatorAddress === groupedTimelockedObjects.validatorAddress, + ); + + const stakeId = stakes[0].timelockedStakedIotaId; + const totalStakedAmount = stakes.reduce((acc, stake) => acc + parseInt(stake.principal), 0); + const totalRewards = stakes.reduce( + (acc, stake) => acc + (stake.status === 'Active' ? parseInt(stake.estimatedReward) : 0), + 0, + ); + + const [rewardsPoolFormatted, rewardsToken] = useFormatCoin( + validatorInfo?.rewardsPool, + IOTA_TYPE_ARG, + ); + + function handleCopySuccess() { + addNotification('Copied to clipboard'); + } + + async function handleUnstake(): Promise<void> { + if (!unstakeData) return; + + await signAndExecuteTransaction( + { + transaction: unstakeData.transaction, + }, + { + onSuccess: (tx) => { + addNotification('Unstake transaction has been sent'); + onSuccess(tx); + }, + }, + ).catch(() => { + addNotification('Unstake transaction was not sent', NotificationType.Error); + }); + } + + return ( + <DialogLayout> + <Header title="Unstake" onClose={onClose} onBack={onBack} /> + <DialogLayoutBody> + <div className="flex flex-col gap-md"> + <Validator + address={groupedTimelockedObjects.validatorAddress} + isSelected + showActiveStatus + /> + + {stakeId && ( + <ValidatorStakingData + key={stakeId} + validatorAddress={groupedTimelockedObjects.validatorAddress} + stakeId={stakeId} + isUnstake + /> + )} + + <StakeRewardsPanel + stakingRewards={totalRewards} + totalStaked={totalStakedAmount} + isTimelocked + /> + + <Panel hasBorder> + <div className="flex flex-col gap-y-sm p-md"> + <KeyValueInfo + keyText="Stake Request Epoch" + value={groupedTimelockedObjects.stakeRequestEpoch} + fullwidth + /> + {rewardsPoolFormatted && ( + <KeyValueInfo + keyText="Rewards Pool" + value={rewardsPoolFormatted} + supportingLabel={rewardsToken} + fullwidth + /> + )} + <KeyValueInfo keyText="Total Stakes" value={stakes.length} fullwidth /> + </div> + </Panel> + + {stakes.map((stake, index) => ( + <TimelockedStakeCollapsible + title={`Stake Nº${index + 1}`} + key={stake.timelockedStakedIotaId} + stake={stake} + handleCopySuccess={handleCopySuccess} + /> + ))} + </div> + </DialogLayoutBody> + <DialogLayoutFooter> + <Button + onClick={handleUnstake} + text="Unstake" + icon={!unstakeData || isUnstakeTxPending ? <LoadingIndicator /> : undefined} + disabled={!unstakeData || isTransactionPending || isUnstakeTxPending} + type={ButtonType.Secondary} + fullWidth + /> + </DialogLayoutFooter> + </DialogLayout> + ); +} + +interface TimelockedStakeCollapsibleProps { + stake: ExtendedDelegatedTimelockedStake; + title: string; + handleCopySuccess: () => void; +} +function TimelockedStakeCollapsible({ + stake, + title, + handleCopySuccess, +}: TimelockedStakeCollapsibleProps) { + const currentEpochEndTimeAgo = useTimeAgo({ + timeFrom: Number(stake.expirationTimestampMs), + endLabel: '--', + shortedTimeLabel: false, + shouldEnd: true, + maxTimeUnit: TimeUnit.ONE_DAY, + }); + return ( + <Collapsible defaultOpen key={stake.timelockedStakedIotaId} title={title}> + <Panel> + <div className="flex flex-col gap-y-sm p-md--rs py-sm"> + <KeyValueInfo + keyText="Stake ID" + value={formatAddress(stake.timelockedStakedIotaId)} + valueHoverTitle={stake.timelockedStakedIotaId} + onCopySuccess={handleCopySuccess} + copyText={stake.timelockedStakedIotaId} + fullwidth + /> + <KeyValueInfo + keyText="Expiration time" + value={currentEpochEndTimeAgo} + fullwidth + /> + {stake.label && ( + <KeyValueInfo + keyText="Label" + value={formatAddress(stake.label)} + copyText={stake.label} + valueHoverTitle={stake.label} + onCopySuccess={handleCopySuccess} + fullwidth + /> + )} + <KeyValueInfo keyText="Status" value={stake.status} fullwidth /> + </div> + </Panel> + </Collapsible> + ); +} diff --git a/apps/wallet-dashboard/components/Dialogs/unstake/views/UnstakeView.tsx b/apps/wallet-dashboard/components/Dialogs/unstake/views/UnstakeView.tsx new file mode 100644 index 00000000000..5d07eadcec3 --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/unstake/views/UnstakeView.tsx @@ -0,0 +1,167 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { + Header, + Button, + KeyValueInfo, + ButtonType, + Panel, + LoadingIndicator, + InfoBoxType, + InfoBoxStyle, + InfoBox, +} from '@iota/apps-ui-kit'; +import { + ExtendedDelegatedStake, + GAS_SYMBOL, + useFormatCoin, + useGetStakingValidatorDetails, +} from '@iota/core'; +import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { useCurrentAccount, useSignAndExecuteTransaction } from '@iota/dapp-kit'; +import { Warning } from '@iota/ui-icons'; +import { StakeRewardsPanel, ValidatorStakingData } from '@/components'; +import { DialogLayout, DialogLayoutFooter, DialogLayoutBody } from '../../layout'; +import { Validator } from '../../Staking/views/Validator'; +import { useNewUnstakeTransaction, useNotifications } from '@/hooks'; +import { IotaSignAndExecuteTransactionOutput } from '@iota/wallet-standard'; +import { NotificationType } from '@/stores/notificationStore'; + +interface UnstakeDialogProps { + extendedStake: ExtendedDelegatedStake; + handleClose: () => void; + onSuccess: (tx: IotaSignAndExecuteTransactionOutput) => void; + showActiveStatus?: boolean; + onBack?: () => void; +} + +export function UnstakeView({ + extendedStake, + handleClose, + onBack, + onSuccess, + showActiveStatus, +}: UnstakeDialogProps): JSX.Element { + const activeAddress = useCurrentAccount()?.address ?? ''; + const { addNotification } = useNotifications(); + const { data: unstakeData, isPending: isUnstakeTxPending } = useNewUnstakeTransaction( + activeAddress, + extendedStake.stakedIotaId, + ); + const [gasFormatted] = useFormatCoin(unstakeData?.gasBudget, IOTA_TYPE_ARG); + + const { mutateAsync: signAndExecuteTransaction, isPending: isTransactionPending } = + useSignAndExecuteTransaction(); + + const { totalStakeOriginal, systemDataResult, delegatedStakeDataResult } = + useGetStakingValidatorDetails({ + accountAddress: activeAddress, + validatorAddress: extendedStake.validatorAddress, + stakeId: extendedStake.stakedIotaId, + unstake: true, + }); + + const { isLoading: loadingValidators, error: errorValidators } = systemDataResult; + const { + isLoading: isLoadingDelegatedStakeData, + isError, + error: delegatedStakeDataError, + } = delegatedStakeDataResult; + + const delegationId = extendedStake?.stakedIotaId; + const isPreparingUnstake = !unstakeData || isUnstakeTxPending; + + async function handleUnstake(): Promise<void> { + if (!unstakeData) return; + + await signAndExecuteTransaction( + { + transaction: unstakeData.transaction, + }, + { + onSuccess: (tx) => { + addNotification('Unstake transaction has been sent'); + onSuccess(tx); + }, + }, + ).catch(() => { + addNotification('Unstake transaction was not sent', NotificationType.Error); + }); + } + + if (isLoadingDelegatedStakeData || loadingValidators) { + return ( + <div className="flex h-full w-full items-center justify-center p-2"> + <LoadingIndicator /> + </div> + ); + } + + if (isError || errorValidators) { + return ( + <div className="mb-2 flex h-full w-full items-center justify-center p-2"> + <InfoBox + title="Something went wrong" + supportingText={delegatedStakeDataError?.message ?? 'An error occurred'} + style={InfoBoxStyle.Default} + type={InfoBoxType.Error} + icon={<Warning />} + /> + </div> + ); + } + + return ( + <DialogLayout> + <Header title="Unstake" onClose={handleClose} onBack={onBack} titleCentered /> + <DialogLayoutBody> + <div className="flex flex-col gap-y-md"> + <Validator + address={extendedStake.validatorAddress} + isSelected + showActiveStatus={showActiveStatus} + /> + + <ValidatorStakingData + validatorAddress={extendedStake.validatorAddress} + stakeId={extendedStake.stakedIotaId} + isUnstake + /> + + <StakeRewardsPanel + stakingRewards={extendedStake.estimatedReward} + totalStaked={totalStakeOriginal} + /> + + <Panel hasBorder> + <div className="flex flex-col gap-y-sm p-md"> + <KeyValueInfo + keyText="Gas Fees" + value={gasFormatted || '-'} + supportingLabel={GAS_SYMBOL} + fullwidth + /> + </div> + </Panel> + </div> + </DialogLayoutBody> + + <DialogLayoutFooter> + <Button + type={ButtonType.Secondary} + fullWidth + onClick={handleUnstake} + disabled={isPreparingUnstake || isTransactionPending || !delegationId} + text="Unstake" + icon={ + isPreparingUnstake ? ( + <LoadingIndicator data-testid="loading-indicator" /> + ) : null + } + iconAfterText + /> + </DialogLayoutFooter> + </DialogLayout> + ); +} diff --git a/apps/wallet-dashboard/components/Dialogs/unstake/views/index.ts b/apps/wallet-dashboard/components/Dialogs/unstake/views/index.ts new file mode 100644 index 00000000000..88b177871cd --- /dev/null +++ b/apps/wallet-dashboard/components/Dialogs/unstake/views/index.ts @@ -0,0 +1,5 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './UnstakeView'; +export * from './UnstakeTimelockedObjectsView'; diff --git a/apps/wallet-dashboard/components/Dialogs/vesting/VestingScheduleBox.tsx b/apps/wallet-dashboard/components/Dialogs/vesting/VestingScheduleBox.tsx index 25f861590a0..d9a93fc8d7c 100644 --- a/apps/wallet-dashboard/components/Dialogs/vesting/VestingScheduleBox.tsx +++ b/apps/wallet-dashboard/components/Dialogs/vesting/VestingScheduleBox.tsx @@ -8,7 +8,7 @@ import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; import { LockLocked } from '@iota/ui-icons'; interface VestingScheduleBoxProps { - amount: number; + amount: bigint; expirationTimestampMs: number; } diff --git a/apps/wallet-dashboard/components/MigrationOverview.tsx b/apps/wallet-dashboard/components/MigrationOverview.tsx index 9b17852f3d5..09faf91737b 100644 --- a/apps/wallet-dashboard/components/MigrationOverview.tsx +++ b/apps/wallet-dashboard/components/MigrationOverview.tsx @@ -12,7 +12,7 @@ export function MigrationOverview() { const router = useRouter(); const account = useCurrentAccount(); const address = account?.address || ''; - const { migratableBasicOutputs, migratableNftOutputs } = + const { data: { migratableBasicOutputs = [], migratableNftOutputs = [] } = {} } = useGetStardustMigratableObjects(address); const needsMigration = migratableBasicOutputs.length > 0 || migratableNftOutputs.length > 0; diff --git a/apps/wallet-dashboard/components/Popup/Popup.tsx b/apps/wallet-dashboard/components/Popup/Popup.tsx deleted file mode 100644 index e16a915882c..00000000000 --- a/apps/wallet-dashboard/components/Popup/Popup.tsx +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import React from 'react'; -import { usePopups } from '@/hooks'; - -function Popup(): JSX.Element { - const { popups, closePopup } = usePopups(); - - return ( - <> - {popups.map((popup, index) => ( - <div - key={index} - className="fixed left-0 top-0 z-[1000] flex h-full w-full items-center justify-center bg-black/20" - > - <div className="relative"> - <div className="absolute left-2/4 top-2/4 flex max-h-[80vh] min-w-[200px] -translate-x-2/4 -translate-y-2/4 flex-col gap-3 overflow-y-auto rounded-lg bg-white p-5 text-black"> - <button className="cursor-pointer self-end" onClick={closePopup}> - X - </button> - {popup} - </div> - </div> - </div> - ))} - </> - ); -} - -export default Popup; diff --git a/apps/wallet-dashboard/components/Popup/PopupProvider.tsx b/apps/wallet-dashboard/components/Popup/PopupProvider.tsx deleted file mode 100644 index 8eb6fbfc3a3..00000000000 --- a/apps/wallet-dashboard/components/Popup/PopupProvider.tsx +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 -'use client'; -import { PopupContext } from '@/contexts'; -import React, { useState, ReactNode } from 'react'; - -interface PopupProviderProps { - children: ReactNode; -} - -function PopupProvider({ children }: PopupProviderProps): JSX.Element { - const [popups, setPopups] = useState<ReactNode[]>([]); - - const openPopup = (content: ReactNode) => { - setPopups((prevPopups) => [...prevPopups, content]); - }; - - const closePopup = () => { - setPopups((prevPopups) => prevPopups.slice(0, prevPopups.length - 1)); - }; - - return ( - <PopupContext.Provider value={{ popups, openPopup, closePopup }}> - {children} - </PopupContext.Provider> - ); -} - -export default PopupProvider; diff --git a/apps/wallet-dashboard/components/Popup/Popups/MigratePopup.tsx b/apps/wallet-dashboard/components/Popup/Popups/MigratePopup.tsx deleted file mode 100644 index 627fb860f3f..00000000000 --- a/apps/wallet-dashboard/components/Popup/Popups/MigratePopup.tsx +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import React from 'react'; -import { VirtualList } from '@/components'; -import { - useCurrentAccount, - useIotaClientContext, - useSignAndExecuteTransaction, -} from '@iota/dapp-kit'; -import { getNetwork, IotaObjectData } from '@iota/iota-sdk/client'; -import { useMigrationTransaction } from '@/hooks/useMigrationTransaction'; -import { Button, InfoBox, InfoBoxStyle, InfoBoxType } from '@iota/apps-ui-kit'; -import { useNotifications } from '@/hooks'; -import { NotificationType } from '@/stores/notificationStore'; -import { Loader, Warning } from '@iota/ui-icons'; - -interface MigratePopupProps { - basicOutputObjects: IotaObjectData[]; - nftOutputObjects: IotaObjectData[]; - closePopup: () => void; - onSuccess?: (digest: string) => void; -} - -function MigratePopup({ - basicOutputObjects = [], - nftOutputObjects = [], - closePopup, - onSuccess, -}: MigratePopupProps): JSX.Element { - const account = useCurrentAccount(); - const { addNotification } = useNotifications(); - const { - data: migrateData, - isPending, - isError, - error, - } = useMigrationTransaction(account?.address || '', basicOutputObjects, nftOutputObjects); - - const { network } = useIotaClientContext(); - const { explorer } = getNetwork(network); - const { mutateAsync: signAndExecuteTransaction, isPending: isSendingTransaction } = - useSignAndExecuteTransaction(); - - async function handleMigrate(): Promise<void> { - if (!migrateData) return; - signAndExecuteTransaction( - { - transaction: migrateData.transaction, - }, - { - onSuccess: (tx) => { - if (onSuccess) { - onSuccess(tx.digest); - } - }, - }, - ) - .then(() => { - closePopup(); - addNotification('Migration transaction has been sent'); - }) - .catch(() => { - addNotification('Migration transaction was not sent', NotificationType.Error); - }); - } - - const virtualItem = (asset: IotaObjectData): JSX.Element => ( - <a href={`${explorer}/object/${asset.objectId}`} target="_blank" rel="noreferrer"> - {asset.objectId} - </a> - ); - return ( - <div className="flex min-w-[300px] flex-col gap-2"> - <div className="flex flex-col"> - <h1>Migratable Basic Outputs: {basicOutputObjects?.length}</h1> - <VirtualList - items={basicOutputObjects ?? []} - estimateSize={() => 30} - render={virtualItem} - /> - </div> - <div className="flex flex-col"> - <h1>Migratable Nft Outputs: {nftOutputObjects?.length}</h1> - <VirtualList - items={nftOutputObjects ?? []} - estimateSize={() => 30} - render={virtualItem} - /> - </div> - <p>Gas Fees: {migrateData?.gasBudget?.toString() || '--'}</p> - {isError ? ( - <InfoBox - type={InfoBoxType.Error} - title={error?.message || 'Error creating migration transcation'} - icon={<Warning />} - style={InfoBoxStyle.Elevated} - /> - ) : null} - <Button - text="Migrate" - disabled={isPending || isError || isSendingTransaction} - onClick={handleMigrate} - icon={ - isPending || isSendingTransaction ? ( - <Loader className="h-4 w-4 animate-spin" /> - ) : null - } - iconAfterText - /> - </div> - ); -} - -export default MigratePopup; diff --git a/apps/wallet-dashboard/components/Popup/Popups/SendAssetPopup.tsx b/apps/wallet-dashboard/components/Popup/Popups/SendAssetPopup.tsx deleted file mode 100644 index 679c4002d96..00000000000 --- a/apps/wallet-dashboard/components/Popup/Popups/SendAssetPopup.tsx +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import React, { useCallback, useState } from 'react'; -import { IotaObjectData } from '@iota/iota-sdk/client'; -import { VisualAssetTile, Input } from '@/components'; -import { Button } from '@/components/Buttons'; -import { FlexDirection } from '@/lib/ui/enums'; -import { useCurrentAccount } from '@iota/dapp-kit'; -import { createNftSendValidationSchema, ValidationError } from '@iota/core'; -import { useRouter } from 'next/navigation'; -import { useNotifications } from '@/hooks'; -import { NotificationType } from '@/stores/notificationStore'; -import { useCreateSendAssetTransaction } from '@/hooks'; -import { ASSETS_ROUTE } from '@/lib/constants/routes.constants'; - -interface SendAssetPopupProps { - asset: IotaObjectData; - onClose: () => void; -} - -export default function SendAssetPopup({ asset, onClose }: SendAssetPopupProps): JSX.Element { - const [recipientAddress, setRecipientAddress] = useState<string>(''); - const [errors, setErrors] = useState<string[]>([]); - const activeAddress = useCurrentAccount()?.address; - const router = useRouter(); - const { addNotification } = useNotifications(); - const { mutation: sendAsset } = useCreateSendAssetTransaction( - asset.objectId, - onSendAssetSuccess, - onSendAssetError, - ); - - const schema = createNftSendValidationSchema(activeAddress || '', asset.objectId); - - async function handleAddressChange(address: string): Promise<void> { - setRecipientAddress(address); - - try { - await schema.validate({ to: address }); - setErrors([]); - } catch (error) { - if (error instanceof ValidationError) { - setErrors(error.errors); - } - } - } - - function onSendAssetSuccess() { - addNotification('Transfer transaction successful', NotificationType.Success); - onClose?.(); - router.push(ASSETS_ROUTE.path + '/assets'); - } - - function onSendAssetError() { - addNotification('Transfer transaction failed', NotificationType.Error); - onClose?.(); - } - - const handleSendAsset = useCallback(async () => { - try { - await sendAsset.mutateAsync(recipientAddress); - } catch (error) { - addNotification('Transfer transaction failed', NotificationType.Error); - } - }, [recipientAddress, sendAsset, addNotification]); - - return ( - <div className="flex flex-col space-y-4"> - <VisualAssetTile asset={asset} flexDirection={FlexDirection.Column} /> - <div className="flex flex-col space-y-2"> - <Input - type="text" - value={recipientAddress} - placeholder="Enter Address" - onChange={(e) => handleAddressChange(e.target.value)} - label="Enter recipient address" - error={errors[0]} - /> - </div> - <Button onClick={handleSendAsset}>Send</Button> - <Button onClick={onClose}>Cancel</Button> - </div> - ); -} diff --git a/apps/wallet-dashboard/components/Popup/Popups/UnstakePopup.tsx b/apps/wallet-dashboard/components/Popup/Popups/UnstakePopup.tsx deleted file mode 100644 index 0518809fced..00000000000 --- a/apps/wallet-dashboard/components/Popup/Popups/UnstakePopup.tsx +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import React from 'react'; -import { Button } from '@/components'; -import { useUnstakeTransaction } from '@/hooks'; -import { useCurrentAccount, useSignAndExecuteTransaction } from '@iota/dapp-kit'; -import { ExtendedDelegatedStake } from '@iota/core'; - -interface UnstakePopupProps { - extendedStake: ExtendedDelegatedStake; - closePopup: () => void; -} - -function UnstakePopup({ extendedStake, closePopup }: UnstakePopupProps): JSX.Element { - const account = useCurrentAccount(); - const { data: unstakeData } = useUnstakeTransaction( - extendedStake.stakedIotaId, - account?.address || '', - ); - const { mutateAsync: signAndExecuteTransaction, isPending } = useSignAndExecuteTransaction(); - - async function handleUnstake(): Promise<void> { - if (!unstakeData) return; - await signAndExecuteTransaction({ - transaction: unstakeData.transaction, - }); - closePopup(); - } - - return ( - <div className="flex min-w-[300px] flex-col gap-2"> - <p>Stake ID: {extendedStake.stakedIotaId}</p> - <p>Validator: {extendedStake.validatorAddress}</p> - <p>Stake: {extendedStake.principal}</p> - {extendedStake.status === 'Active' && ( - <p>Estimated reward: {extendedStake.estimatedReward}</p> - )} - <p>Gas Fees: {unstakeData?.gasBudget?.toString() || '--'}</p> - {isPending ? ( - <Button disabled>Loading...</Button> - ) : ( - <Button onClick={handleUnstake}>Confirm Unstake</Button> - )} - </div> - ); -} - -export default UnstakePopup; diff --git a/apps/wallet-dashboard/components/Popup/Popups/VestingPopup/TimelockedUnstakePopup.tsx b/apps/wallet-dashboard/components/Popup/Popups/VestingPopup/TimelockedUnstakePopup.tsx deleted file mode 100644 index 9cfdc96f035..00000000000 --- a/apps/wallet-dashboard/components/Popup/Popups/VestingPopup/TimelockedUnstakePopup.tsx +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import React from 'react'; -import { Button } from '@/components'; -import { useNotifications, useTimelockedUnstakeTransaction } from '@/hooks'; -import { useSignAndExecuteTransaction } from '@iota/dapp-kit'; -import { IotaValidatorSummary } from '@iota/iota-sdk/client'; -import { NotificationType } from '@/stores/notificationStore'; -import { TimelockedStakedObjectsGrouped } from '@/lib/utils'; - -interface UnstakePopupProps { - accountAddress: string; - delegatedStake: TimelockedStakedObjectsGrouped; - validatorInfo: IotaValidatorSummary; - closePopup: () => void; - onSuccess?: (digest: string) => void; -} - -function TimelockedUnstakePopup({ - accountAddress, - delegatedStake, - validatorInfo, - closePopup, - onSuccess, -}: UnstakePopupProps): JSX.Element { - const objectIds = delegatedStake.stakes.map((stake) => stake.timelockedStakedIotaId); - const { data: timelockedUnstake } = useTimelockedUnstakeTransaction(objectIds, accountAddress); - const { mutateAsync: signAndExecuteTransaction, isPending } = useSignAndExecuteTransaction(); - const { addNotification } = useNotifications(); - - async function handleTimelockedUnstake(): Promise<void> { - if (!timelockedUnstake) return; - signAndExecuteTransaction( - { - transaction: timelockedUnstake.transaction, - }, - { - onSuccess: (tx) => { - if (onSuccess) { - onSuccess(tx.digest); - } - }, - }, - ) - .then(() => { - closePopup(); - addNotification('Unstake transaction has been sent'); - }) - .catch(() => { - addNotification('Unstake transaction was not sent', NotificationType.Error); - }); - } - - return ( - <div className="flex min-w-[300px] flex-col gap-2"> - <p>Validator Name: {validatorInfo.name}</p> - <p>Validator Address: {delegatedStake.validatorAddress}</p> - <p>Stake Request Epoch: {delegatedStake.stakeRequestEpoch}</p> - <p>Rewards: {validatorInfo.rewardsPool}</p> - <p>Total Stakes: {delegatedStake.stakes.length}</p> - {delegatedStake.stakes.map((stake, index) => { - return ( - <div key={stake.timelockedStakedIotaId} className="m-4 flex flex-col"> - <span> - Stake {index + 1}: {stake.timelockedStakedIotaId} - </span> - <span>Expiration time: {stake.expirationTimestampMs}</span> - <span>Label: {stake.label}</span> - <span>Status: {stake.status}</span> - </div> - ); - })} - <p>Gas Fees: {timelockedUnstake?.gasBudget?.toString() || '--'}</p> - {isPending ? ( - <Button disabled>Loading...</Button> - ) : ( - <Button onClick={handleTimelockedUnstake}>Confirm Unstake</Button> - )} - </div> - ); -} - -export default TimelockedUnstakePopup; diff --git a/apps/wallet-dashboard/components/Popup/Popups/VestingPopup/index.ts b/apps/wallet-dashboard/components/Popup/Popups/VestingPopup/index.ts deleted file mode 100644 index 2a8ca3b61df..00000000000 --- a/apps/wallet-dashboard/components/Popup/Popups/VestingPopup/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -export { default as TimelockedUnstakePopup } from './TimelockedUnstakePopup'; diff --git a/apps/wallet-dashboard/components/Popup/Popups/index.ts b/apps/wallet-dashboard/components/Popup/Popups/index.ts deleted file mode 100644 index ebdfc7f7391..00000000000 --- a/apps/wallet-dashboard/components/Popup/Popups/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -export { default as UnstakePopup } from './UnstakePopup'; -export { default as SendAssetPopup } from './SendAssetPopup'; - -export * from './VestingPopup'; diff --git a/apps/wallet-dashboard/components/Popup/index.ts b/apps/wallet-dashboard/components/Popup/index.ts deleted file mode 100644 index baeafee23a7..00000000000 --- a/apps/wallet-dashboard/components/Popup/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -export { default as Popup } from './Popup'; -export { default as PopupProvider } from './PopupProvider'; - -export * from './Popups'; diff --git a/apps/wallet-dashboard/components/StakeRewardsPanel.tsx b/apps/wallet-dashboard/components/StakeRewardsPanel.tsx new file mode 100644 index 00000000000..a7e5e84619c --- /dev/null +++ b/apps/wallet-dashboard/components/StakeRewardsPanel.tsx @@ -0,0 +1,70 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { Divider, KeyValueInfo, Panel } from '@iota/apps-ui-kit'; +import { TimeUnit, useFormatCoin, useGetTimeBeforeEpochNumber, useTimeAgo } from '@iota/core'; +import { useIotaClientQuery } from '@iota/dapp-kit'; +import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; + +interface StakeRewardsPanelProps { + stakingRewards: string | number | undefined; + totalStaked: number | bigint; + isTimelocked?: boolean; +} +export function StakeRewardsPanel({ + stakingRewards, + totalStaked, + isTimelocked, +}: StakeRewardsPanelProps) { + const { epoch = '0' } = useIotaClientQuery('getLatestIotaSystemState')?.data || {}; + const [rewards, symbol] = useFormatCoin(stakingRewards ?? 0, IOTA_TYPE_ARG); + const [stakedBalance] = useFormatCoin(totalStaked, IOTA_TYPE_ARG); + const [stakedAndRewards] = useFormatCoin( + BigInt(stakingRewards || 0) + BigInt(totalStaked), + IOTA_TYPE_ARG, + ); + + const { data: currentEpochEndTime } = useGetTimeBeforeEpochNumber(Number(epoch) + 1); + const currentEpochEndTimeAgo = useTimeAgo({ + timeFrom: currentEpochEndTime, + endLabel: '--', + shortedTimeLabel: false, + shouldEnd: true, + maxTimeUnit: TimeUnit.ONE_HOUR, + }); + + const currentEpochEndTimeFormatted = + currentEpochEndTime > 0 ? currentEpochEndTimeAgo : `Epoch #${epoch}`; + + return ( + <Panel hasBorder> + <div className="flex flex-col gap-y-sm p-md"> + <KeyValueInfo + keyText="Current Epoch Ends" + value={currentEpochEndTimeFormatted} + fullwidth + /> + <Divider /> + <KeyValueInfo + keyText="Your Stake" + value={stakedBalance} + supportingLabel={symbol} + fullwidth + /> + <KeyValueInfo + keyText="Rewards Earned" + value={rewards} + supportingLabel={symbol} + fullwidth + /> + <Divider /> + <KeyValueInfo + keyText={'Total unstaked ' + (isTimelocked ? 'Timelocked' : 'IOTA')} + value={stakedAndRewards} + supportingLabel={symbol} + fullwidth + /> + </div> + </Panel> + ); +} diff --git a/apps/wallet-dashboard/components/SupplyIncreaseVestingOverview.tsx b/apps/wallet-dashboard/components/SupplyIncreaseVestingOverview.tsx new file mode 100644 index 00000000000..7608bda1a3a --- /dev/null +++ b/apps/wallet-dashboard/components/SupplyIncreaseVestingOverview.tsx @@ -0,0 +1,151 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { useCurrentAccount, useIotaClient } from '@iota/dapp-kit'; +import { useGetSupplyIncreaseVestingObjects } from '@/hooks'; +import { + ButtonType, + Card, + CardAction, + CardActionType, + CardBody, + CardType, + LabelText, + LabelTextSize, + Panel, + Title, +} from '@iota/apps-ui-kit'; +import { StakeDialog, useStakeDialog } from './Dialogs'; +import { TIMELOCK_IOTA_TYPE, useCountdownByTimestamp, useFormatCoin } from '@iota/core'; +import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import SvgClock from '@iota/ui-icons/src/Clock'; +import { useQueryClient } from '@tanstack/react-query'; + +export function SupplyIncreaseVestingOverview() { + const account = useCurrentAccount(); + const address = account?.address || ''; + const iotaClient = useIotaClient(); + const queryClient = useQueryClient(); + const { + nextPayout, + supplyIncreaseVestingSchedule, + supplyIncreaseVestingMapped, + supplyIncreaseVestingStakedMapped, + } = useGetSupplyIncreaseVestingObjects(address); + + const { + stakeDialogView, + setStakeDialogView, + selectedStake, + selectedValidator, + setSelectedValidator, + handleCloseStakeDialog, + handleNewStake, + } = useStakeDialog(); + + const formattedLastPayoutExpirationTime = useCountdownByTimestamp( + Number(nextPayout?.expirationTimestampMs), + { showSeconds: false, showMinutes: false }, + ); + const [formattedNextPayout, nextPayoutSymbol, nextPayoutResult] = useFormatCoin( + nextPayout?.amount, + IOTA_TYPE_ARG, + ); + + const [formattedAvailableStaking, availableStakingSymbol] = useFormatCoin( + supplyIncreaseVestingSchedule.availableStaking, + IOTA_TYPE_ARG, + ); + + const showSupplyIncreaseVestingOverview = + supplyIncreaseVestingMapped.length > 0 || supplyIncreaseVestingStakedMapped.length > 0; + + function handleOnSuccess(digest: string): void { + iotaClient + .waitForTransaction({ + digest, + }) + .then(() => { + queryClient.invalidateQueries({ + queryKey: ['get-timelocked-staked-objects', account?.address], + }); + queryClient.invalidateQueries({ + queryKey: [ + 'get-all-owned-objects', + account?.address, + { + StructType: TIMELOCK_IOTA_TYPE, + }, + ], + }); + }); + } + + return showSupplyIncreaseVestingOverview ? ( + <div style={{ gridArea: 'vesting' }} className="with-vesting flex grow overflow-hidden"> + <Panel> + <Title title="Vesting" /> + <div className="flex h-full w-full items-center gap-md p-md--rs"> + <div className="w-1/2"> + <Card type={CardType.Filled}> + <CardBody + title="" + subtitle={ + <LabelText + size={LabelTextSize.Large} + label="Next reward" + text={ + nextPayoutResult.isPending + ? '-' + : `${formattedNextPayout} ` + } + supportingLabel={nextPayoutSymbol} + /> + } + /> + <CardAction + type={CardActionType.Button} + buttonType={ButtonType.Ghost} + title={formattedLastPayoutExpirationTime} + icon={<SvgClock />} + /> + </Card> + </div> + <div className="w-1/2"> + <Card type={CardType.Filled}> + <CardBody + title="" + subtitle={ + <LabelText + size={LabelTextSize.Large} + label="Available for staking" + text={formattedAvailableStaking} + supportingLabel={availableStakingSymbol} + /> + } + /> + <CardAction + type={CardActionType.Button} + buttonType={ButtonType.Primary} + title={'Stake'} + onClick={() => handleNewStake()} + buttonDisabled={!supplyIncreaseVestingSchedule.availableStaking} + /> + </Card> + </div> + </div> + </Panel> + <StakeDialog + isTimelockedStaking={true} + stakedDetails={selectedStake} + onSuccess={handleOnSuccess} + handleClose={handleCloseStakeDialog} + view={stakeDialogView} + setView={setStakeDialogView} + selectedValidator={selectedValidator} + setSelectedValidator={setSelectedValidator} + maxStakableTimelockedAmount={BigInt(supplyIncreaseVestingSchedule.availableStaking)} + /> + </div> + ) : null; +} diff --git a/apps/wallet-dashboard/components/VirtualList.tsx b/apps/wallet-dashboard/components/VirtualList.tsx index 49178382bfc..58dc598a364 100644 --- a/apps/wallet-dashboard/components/VirtualList.tsx +++ b/apps/wallet-dashboard/components/VirtualList.tsx @@ -5,6 +5,7 @@ import React, { ReactNode, useEffect } from 'react'; import { useVirtualizer } from '@tanstack/react-virtual'; +import clsx from 'clsx'; interface VirtualListProps<T> { items: T[]; @@ -14,6 +15,8 @@ interface VirtualListProps<T> { estimateSize: (index: number) => number; render: (item: T, index: number) => ReactNode; onClick?: (item: T) => void; + heightClassName?: string; + overflowClassName?: string; } function VirtualList<T>({ @@ -24,6 +27,8 @@ function VirtualList<T>({ estimateSize, render, onClick, + heightClassName = 'h-fit', + overflowClassName, }: VirtualListProps<T>): JSX.Element { const containerRef = React.useRef<HTMLDivElement | null>(null); const virtualizer = useVirtualizer({ @@ -51,17 +56,13 @@ function VirtualList<T>({ if (lastItem.index >= items.length - 1 && hasNextPage && !isFetchingNextPage) { fetchNextPage(); } - }, [ - hasNextPage, - fetchNextPage, - items.length, - isFetchingNextPage, - virtualizer, - virtualizer.getVirtualItems(), - ]); + }, [hasNextPage, fetchNextPage, items.length, isFetchingNextPage, virtualizer, virtualItems]); return ( - <div className="relative h-full w-full" ref={containerRef}> + <div + className={clsx('relative w-full', heightClassName, overflowClassName)} + ref={containerRef} + > <div style={{ height: `${virtualizer.getTotalSize()}px`, @@ -69,27 +70,30 @@ function VirtualList<T>({ position: 'relative', }} > - {virtualItems.map((virtualItem) => ( - <div - key={virtualItem.key} - className={`absolute w-full ${onClick ? 'cursor-pointer' : ''}`} - style={{ - position: 'absolute', - top: 0, - left: 0, - width: '100%', - height: `${virtualItem.size}px`, - transform: `translateY(${virtualItem.start}px)`, - }} - onClick={() => onClick && onClick(items[virtualItem.index])} - > - {virtualItem.index > items.length - 1 - ? hasNextPage - ? 'Loading more...' - : 'Nothing more to load' - : render(items[virtualItem.index], virtualItem.index)} - </div> - ))} + {virtualItems.map((virtualItem) => { + const item = items[virtualItem.index]; + return ( + <div + key={virtualItem.key} + className={`absolute w-full ${onClick ? 'cursor-pointer' : ''}`} + style={{ + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: `${virtualItem.size}px`, + transform: `translateY(${virtualItem.start}px)`, + }} + onClick={() => onClick && onClick(item)} + > + {virtualItem.index > items.length - 1 + ? hasNextPage + ? 'Loading more...' + : 'Nothing more to load' + : render(item, virtualItem.index)} + </div> + ); + })} </div> </div> ); diff --git a/apps/wallet-dashboard/components/account-balance/AccountBalance.tsx b/apps/wallet-dashboard/components/account-balance/AccountBalance.tsx index 151a46d473f..9bb3f297b27 100644 --- a/apps/wallet-dashboard/components/account-balance/AccountBalance.tsx +++ b/apps/wallet-dashboard/components/account-balance/AccountBalance.tsx @@ -22,11 +22,11 @@ export function AccountBalance() { const [isSendTokenDialogOpen, setIsSendTokenDialogOpen] = useState(false); const explorerLink = `${explorer}/address/${address}`; - function openSendTokenPopup(): void { + function openSendTokenDialog(): void { setIsSendTokenDialogOpen(true); } - function openReceiveTokenPopup(): void { + function openReceiveTokenDialog(): void { setIsReceiveDialogOpen(true); } @@ -56,7 +56,7 @@ export function AccountBalance() { </span> <div className="flex w-full max-w-56 gap-xs"> <Button - onClick={openSendTokenPopup} + onClick={openSendTokenDialog} text="Send" size={ButtonSize.Small} disabled={!address} @@ -64,7 +64,7 @@ export function AccountBalance() { fullWidth /> <Button - onClick={openReceiveTokenPopup} + onClick={openReceiveTokenDialog} type={ButtonType.Secondary} text="Receive" size={ButtonSize.Small} diff --git a/apps/wallet-dashboard/components/coins/MyCoins.tsx b/apps/wallet-dashboard/components/coins/MyCoins.tsx index fc441d76148..411d7cdc702 100644 --- a/apps/wallet-dashboard/components/coins/MyCoins.tsx +++ b/apps/wallet-dashboard/components/coins/MyCoins.tsx @@ -71,9 +71,9 @@ function MyCoins(): React.JSX.Element { return ( <Panel> - <div className="flex w-full flex-col"> + <div className="flex h-full w-full flex-col"> <Title title="My Coins" /> - <div className="px-sm pb-md pt-sm"> + <div className="px-sm py-sm"> <div className="inline-flex"> <SegmentedButton type={SegmentedButtonType.Filled}> {TOKEN_CATEGORIES.map(({ label, value }) => { @@ -96,37 +96,35 @@ function MyCoins(): React.JSX.Element { })} </SegmentedButton> </div> - <div className="pb-md pt-sm"> - {[TokenCategory.All, TokenCategory.Recognized].includes( - selectedTokenCategory, - ) && - recognized?.map((coin, index) => { - return ( - <CoinItem - key={index} - coinType={coin.coinType} - balance={BigInt(coin.totalBalance)} - onClick={() => openSendTokenDialog(coin)} - icon={ - <RecognizedBadge className="h-4 w-4 text-primary-40" /> - } - /> - ); - })} - {[TokenCategory.All, TokenCategory.Unrecognized].includes( - selectedTokenCategory, - ) && - unrecognized?.map((coin, index) => { - return ( - <CoinItem - key={index} - coinType={coin.coinType} - balance={BigInt(coin.totalBalance)} - onClick={() => openSendTokenDialog(coin)} - /> - ); - })} - </div> + </div> + <div className="h-full overflow-y-auto px-sm pb-md pt-sm"> + {[TokenCategory.All, TokenCategory.Recognized].includes( + selectedTokenCategory, + ) && + recognized?.map((coin, index) => { + return ( + <CoinItem + key={index} + coinType={coin.coinType} + balance={BigInt(coin.totalBalance)} + onClick={() => openSendTokenDialog(coin)} + icon={<RecognizedBadge className="h-4 w-4 text-primary-40" />} + /> + ); + })} + {[TokenCategory.All, TokenCategory.Unrecognized].includes( + selectedTokenCategory, + ) && + unrecognized?.map((coin, index) => { + return ( + <CoinItem + key={index} + coinType={coin.coinType} + balance={BigInt(coin.totalBalance)} + onClick={() => openSendTokenDialog(coin)} + /> + ); + })} </div> </div> {selectedCoin && activeAccountAddress && ( diff --git a/apps/wallet-dashboard/components/index.ts b/apps/wallet-dashboard/components/index.ts index 37ff834be4f..fcccf7b3a95 100644 --- a/apps/wallet-dashboard/components/index.ts +++ b/apps/wallet-dashboard/components/index.ts @@ -13,7 +13,6 @@ export * from './PaginationOptions'; export * from './account-balance/AccountBalance'; export * from './coins'; -export * from './Popup'; export * from './AppList'; export * from './Cards'; export * from './Buttons'; @@ -23,7 +22,10 @@ export * from './ExplorerLink'; export * from './Dialogs'; export * from './ValidatorStakingData'; export * from './tiles'; +export * from './migration'; export * from './Toaster'; export * from './Banner'; +export * from './StakeRewardsPanel'; export * from './MigrationOverview'; +export * from './SupplyIncreaseVestingOverview'; export * from './staked-timelock-object'; diff --git a/apps/wallet-dashboard/components/migration/MigrationObjectLoading.tsx b/apps/wallet-dashboard/components/migration/MigrationObjectLoading.tsx new file mode 100644 index 00000000000..297d1a8fa81 --- /dev/null +++ b/apps/wallet-dashboard/components/migration/MigrationObjectLoading.tsx @@ -0,0 +1,27 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { Card, CardImage, ImageShape, Skeleton } from '@iota/apps-ui-kit'; + +export function MigrationObjectLoading() { + return ( + <div className="flex h-full max-h-full w-full flex-col overflow-hidden"> + {new Array(10).fill(0).map((_, index) => ( + <Card key={index}> + <CardImage shape={ImageShape.SquareRounded}> + <div className="h-10 w-10 animate-pulse bg-neutral-90 dark:bg-neutral-12" /> + <Skeleton widthClass="w-10" heightClass="h-10" isRounded={false} /> + </CardImage> + <div className="flex flex-col gap-y-xs"> + <Skeleton widthClass="w-40" heightClass="h-3.5" /> + <Skeleton widthClass="w-32" heightClass="h-3" hasSecondaryColors /> + </div> + <div className="ml-auto flex flex-col gap-y-xs"> + <Skeleton widthClass="w-20" heightClass="h-3.5" /> + <Skeleton widthClass="w-16" heightClass="h-3" hasSecondaryColors /> + </div> + </Card> + ))} + </div> + ); +} diff --git a/apps/wallet-dashboard/components/migration/MigrationObjectsPanel.tsx b/apps/wallet-dashboard/components/migration/MigrationObjectsPanel.tsx new file mode 100644 index 00000000000..a3864b329cf --- /dev/null +++ b/apps/wallet-dashboard/components/migration/MigrationObjectsPanel.tsx @@ -0,0 +1,115 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +'use client'; + +import { useGroupedMigrationObjectsByExpirationDate } from '@/hooks'; +import { + STARDUST_MIGRATABLE_OBJECTS_FILTER_LIST, + STARDUST_TIMELOCKED_OBJECTS_FILTER_LIST, +} from '@/lib/constants'; +import { StardustOutputDetailsFilter } from '@/lib/enums'; +import { + Button, + ButtonType, + Chip, + InfoBox, + InfoBoxStyle, + InfoBoxType, + Panel, + Title, +} from '@iota/apps-ui-kit'; +import type { IotaObjectData } from '@iota/iota-sdk/client'; +import { Close, Warning } from '@iota/ui-icons'; +import clsx from 'clsx'; +import { useState } from 'react'; +import { MigrationObjectDetailsCard } from './migration-object-details-card'; +import VirtualList from '../VirtualList'; +import { filterMigrationObjects } from '@/lib/utils'; +import { MigrationObjectLoading } from './MigrationObjectLoading'; + +const FILTERS = { + migratable: STARDUST_MIGRATABLE_OBJECTS_FILTER_LIST, + timelocked: STARDUST_TIMELOCKED_OBJECTS_FILTER_LIST, +}; + +interface MigrationObjectsPanelProps { + selectedObjects: IotaObjectData[]; + onClose: () => void; + isTimelocked: boolean; +} + +export function MigrationObjectsPanel({ + selectedObjects, + onClose, + isTimelocked, +}: MigrationObjectsPanelProps): React.JSX.Element { + const [stardustOutputDetailsFilter, setStardustOutputDetailsFilter] = + useState<StardustOutputDetailsFilter>(StardustOutputDetailsFilter.All); + + const { + data: resolvedObjects = [], + isLoading, + error: isErrored, + } = useGroupedMigrationObjectsByExpirationDate(selectedObjects, isTimelocked); + + const filteredObjects = filterMigrationObjects(resolvedObjects, stardustOutputDetailsFilter); + + const filters = isTimelocked ? FILTERS.timelocked : FILTERS.migratable; + const isHidden = selectedObjects.length === 0; + + return ( + <div className={clsx('flex h-full min-h-0 w-2/3 flex-col', isHidden && 'hidden')}> + <Panel> + <Title + title="Details" + trailingElement={ + <Button icon={<Close />} type={ButtonType.Ghost} onClick={onClose} /> + } + /> + <div className="flex min-h-0 flex-1 flex-col px-md--rs"> + <div className="flex flex-row gap-xs py-xs"> + {filters.map((filter) => ( + <Chip + key={filter} + label={filter} + onClick={() => setStardustOutputDetailsFilter(filter)} + selected={stardustOutputDetailsFilter === filter} + /> + ))} + </div> + <div className="flex min-h-0 flex-col py-sm"> + <div className="h-full flex-1 overflow-auto"> + {isLoading && <MigrationObjectLoading />} + {isErrored && !isLoading && ( + <div className="flex h-full max-h-full w-full flex-col items-center"> + <InfoBox + title="Error" + supportingText="Failed to load stardust objects" + style={InfoBoxStyle.Elevated} + type={InfoBoxType.Error} + icon={<Warning />} + /> + </div> + )} + {!isLoading && !isErrored && ( + <VirtualList + heightClassName="h-[600px]" + overflowClassName="overflow-y-auto" + items={filteredObjects} + estimateSize={() => 58} + render={(migrationObject) => ( + <MigrationObjectDetailsCard + migrationObject={migrationObject} + isTimelocked={isTimelocked} + /> + )} + /> + )} + </div> + </div> + </div> + </Panel> + </div> + ); +} diff --git a/apps/wallet-dashboard/components/migration/index.ts b/apps/wallet-dashboard/components/migration/index.ts new file mode 100644 index 00000000000..2690e18d11b --- /dev/null +++ b/apps/wallet-dashboard/components/migration/index.ts @@ -0,0 +1,5 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './MigrationObjectsPanel'; +export * from './MigrationObjectLoading'; diff --git a/apps/wallet-dashboard/components/migration/migration-object-details-card/MigrationObjectDetailsCard.tsx b/apps/wallet-dashboard/components/migration/migration-object-details-card/MigrationObjectDetailsCard.tsx new file mode 100644 index 00000000000..599e58dbd21 --- /dev/null +++ b/apps/wallet-dashboard/components/migration/migration-object-details-card/MigrationObjectDetailsCard.tsx @@ -0,0 +1,155 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { ExternalImage } from '@/components'; +import { useGetCurrentEpochStartTimestamp } from '@/hooks'; +import { useGetCurrentEpochEndTimestamp } from '@/hooks/useGetCurrentEpochEndTimestamp'; +import { MIGRATION_OBJECT_WITHOUT_UC_KEY } from '@/lib/constants'; +import { CommonMigrationObjectType } from '@/lib/enums'; +import { ResolvedObjectTypes } from '@/lib/types'; +import { Card, CardBody, CardImage, ImageShape, LabelText, LabelTextSize } from '@iota/apps-ui-kit'; +import { MILLISECONDS_PER_SECOND, TimeUnit, useFormatCoin, useTimeAgo } from '@iota/core'; +import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { Assets, DataStack, IotaLogoMark } from '@iota/ui-icons'; +import { useState } from 'react'; + +interface MigrationObjectDetailsCardProps { + migrationObject: ResolvedObjectTypes; + isTimelocked: boolean; +} +export function MigrationObjectDetailsCard({ + migrationObject: { unlockConditionTimestamp, ...migrationObject }, + isTimelocked: isTimelocked, +}: MigrationObjectDetailsCardProps) { + const coinType = 'coinType' in migrationObject ? migrationObject.coinType : IOTA_TYPE_ARG; + const [balance, token] = useFormatCoin(migrationObject.balance, coinType); + + switch (migrationObject.commonObjectType) { + case CommonMigrationObjectType.Basic: + return ( + <MigrationObjectCard + title={`${balance} ${token}`} + subtitle="IOTA Tokens" + unlockConditionTimestamp={unlockConditionTimestamp} + image={<IotaLogoMark />} + isTimelocked={isTimelocked} + /> + ); + case CommonMigrationObjectType.Nft: + return ( + <MigrationObjectCard + title={migrationObject.name} + subtitle="Visual Assets" + unlockConditionTimestamp={unlockConditionTimestamp} + image={ + <ExternalImageWithFallback + src={migrationObject.image_url} + alt={migrationObject.name} + fallback={<Assets />} + /> + } + isTimelocked={isTimelocked} + /> + ); + case CommonMigrationObjectType.NativeToken: + return ( + <MigrationObjectCard + isTimelocked={isTimelocked} + title={`${balance} ${token}`} + subtitle="Native Tokens" + unlockConditionTimestamp={unlockConditionTimestamp} + image={<DataStack />} + /> + ); + default: + return null; + } +} + +interface ExternalImageWithFallbackProps { + src: string; + alt: string; + fallback: React.ReactNode; +} +function ExternalImageWithFallback({ src, alt, fallback }: ExternalImageWithFallbackProps) { + const [errored, setErrored] = useState(false); + function handleError() { + setErrored(true); + } + return !errored ? <ExternalImage src={src} alt={alt} onError={handleError} /> : fallback; +} + +interface MigrationObjectCardProps { + title: string; + subtitle: string; + unlockConditionTimestamp: string; + isTimelocked: boolean; + image?: React.ReactNode; +} + +function MigrationObjectCard({ + title, + subtitle, + unlockConditionTimestamp, + isTimelocked, + image, +}: MigrationObjectCardProps) { + const hasUnlockConditionTimestamp = + unlockConditionTimestamp !== MIGRATION_OBJECT_WITHOUT_UC_KEY; + return ( + <Card> + <CardImage shape={ImageShape.SquareRounded}>{image}</CardImage> + <CardBody title={title} subtitle={subtitle} /> + {hasUnlockConditionTimestamp && ( + <UnlockConditionLabel + groupKey={unlockConditionTimestamp} + isTimelocked={isTimelocked} + /> + )} + </Card> + ); +} + +interface UnlockConditionLabelProps { + groupKey: string; + isTimelocked: boolean; +} +function UnlockConditionLabel({ groupKey, isTimelocked: isTimelocked }: UnlockConditionLabelProps) { + const { data: currentEpochStartTimestampMs, isLoading: isLoadingEpochStart } = + useGetCurrentEpochStartTimestamp(); + const { data: currentEpochEndTimestampMs, isLoading: isLoadingEpochEnd } = + useGetCurrentEpochEndTimestamp(); + + const epochEndMs = currentEpochEndTimestampMs ?? 0; + const epochStartMs = currentEpochStartTimestampMs ?? '0'; + const currentDateMs = Date.now(); + + const unlockConditionTimestampMs = parseInt(groupKey) * MILLISECONDS_PER_SECOND; + const isFromPreviousEpoch = + !isLoadingEpochStart && unlockConditionTimestampMs < parseInt(epochStartMs); + // TODO: https://github.com/iotaledger/iota/issues/4369 + const isInAFutureEpoch = !isLoadingEpochEnd && unlockConditionTimestampMs > epochEndMs; + + const outputTimestampMs = isInAFutureEpoch ? unlockConditionTimestampMs : epochEndMs; + + const timeLabel = useTimeAgo({ + timeFrom: outputTimestampMs, + shortedTimeLabel: true, + shouldEnd: true, + maxTimeUnit: TimeUnit.ONE_DAY, + }); + + const showLabel = !isFromPreviousEpoch && outputTimestampMs > currentDateMs; + + return ( + <div className="ml-auto h-full whitespace-nowrap"> + {showLabel && ( + <LabelText + size={LabelTextSize.Small} + text={timeLabel} + label={isTimelocked ? 'Unlocks in' : 'Expires in'} + /> + )} + </div> + ); +} diff --git a/apps/wallet-dashboard/components/migration/migration-object-details-card/index.ts b/apps/wallet-dashboard/components/migration/migration-object-details-card/index.ts new file mode 100644 index 00000000000..d7097a997c2 --- /dev/null +++ b/apps/wallet-dashboard/components/migration/migration-object-details-card/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './MigrationObjectDetailsCard'; diff --git a/apps/wallet-dashboard/components/staked-timelock-object/StakedTimelockObject.tsx b/apps/wallet-dashboard/components/staked-timelock-object/StakedTimelockObject.tsx index 8696705bc12..f7e21915a3a 100644 --- a/apps/wallet-dashboard/components/staked-timelock-object/StakedTimelockObject.tsx +++ b/apps/wallet-dashboard/components/staked-timelock-object/StakedTimelockObject.tsx @@ -27,11 +27,11 @@ export function StakedTimelockObject({ // TODO probably we could calculate estimated reward on grouping stage. const summary = timelockedStakedObject.stakes.reduce( (acc, stake) => { - const estimatedReward = stake.status === 'Active' ? stake.estimatedReward : 0; + const estimatedReward = stake.status === 'Active' ? BigInt(stake.estimatedReward) : 0n; return { principal: BigInt(stake.principal) + acc.principal, - estimatedReward: BigInt(estimatedReward) + acc.estimatedReward, + estimatedReward: estimatedReward + acc.estimatedReward, stakeRequestEpoch: stake.stakeRequestEpoch, }; }, diff --git a/apps/wallet-dashboard/components/staking-overview/StartStaking.tsx b/apps/wallet-dashboard/components/staking-overview/StartStaking.tsx index 828abc974ab..573a254a3d2 100644 --- a/apps/wallet-dashboard/components/staking-overview/StartStaking.tsx +++ b/apps/wallet-dashboard/components/staking-overview/StartStaking.tsx @@ -35,7 +35,6 @@ export function StartStaking() { {isDialogStakeOpen && stakeDialogView && ( <StakeDialog stakedDetails={selectedStake} - isOpen={isDialogStakeOpen} handleClose={handleCloseStakeDialog} view={stakeDialogView} setView={setStakeDialogView} diff --git a/apps/wallet-dashboard/components/staking-overview/index.ts b/apps/wallet-dashboard/components/staking-overview/index.ts index 88d8d1794ef..a2fdb941d58 100644 --- a/apps/wallet-dashboard/components/staking-overview/index.ts +++ b/apps/wallet-dashboard/components/staking-overview/index.ts @@ -2,3 +2,4 @@ // SPDX-License-Identifier: Apache-2.0 export * from './StakingOverview'; +export * from './StartStaking'; diff --git a/apps/wallet-dashboard/components/transactions/TransactionAmount.tsx b/apps/wallet-dashboard/components/transactions/TransactionAmount.tsx index ae7654b0273..498ebc19522 100644 --- a/apps/wallet-dashboard/components/transactions/TransactionAmount.tsx +++ b/apps/wallet-dashboard/components/transactions/TransactionAmount.tsx @@ -5,7 +5,7 @@ import { useFormatCoin } from '@iota/core'; interface TransactionAmountProps { - amount: string | number; + amount: string | number | bigint; coinType: string; label: string; approximation?: boolean; diff --git a/apps/wallet-dashboard/components/transactions/TransactionTile.tsx b/apps/wallet-dashboard/components/transactions/TransactionTile.tsx index 405a02e76c6..0c76c27ceb1 100644 --- a/apps/wallet-dashboard/components/transactions/TransactionTile.tsx +++ b/apps/wallet-dashboard/components/transactions/TransactionTile.tsx @@ -6,7 +6,6 @@ import React, { useState } from 'react'; import TransactionIcon from './TransactionIcon'; import formatTimestamp from '@/lib/utils/time'; -import { ExplorerLink } from '@/components'; import { ExtendedTransaction, TransactionState } from '@/lib/interfaces'; import { Card, @@ -18,21 +17,12 @@ import { CardAction, CardActionType, Dialog, - Header, - LoadingIndicator, } from '@iota/apps-ui-kit'; -import { - useFormatCoin, - getLabel, - useTransactionSummary, - ViewTxnOnExplorerButton, - ExplorerLinkType, - TransactionReceipt, -} from '@iota/core'; +import { useFormatCoin, getLabel, useTransactionSummary } from '@iota/core'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; import { useCurrentAccount } from '@iota/dapp-kit'; -import { DialogLayout, DialogLayoutBody, DialogLayoutFooter } from '../Dialogs/layout'; -import { Validator } from '../Dialogs/Staking/views/Validator'; +import { TransactionDetailsLayout } from '../Dialogs/transaction/TransactionDetailsLayout'; +import { DialogLayout } from '../Dialogs/layout'; interface TransactionTileProps { transaction: ExtendedTransaction; @@ -85,53 +75,14 @@ export function TransactionTile({ transaction }: TransactionTileProps): JSX.Elem } /> </Card> - <ActivityDetailsDialog transaction={transaction} open={open} setOpen={setOpen} /> - </> - ); -} - -interface ActivityDetailsDialogProps { - transaction: ExtendedTransaction; - open: boolean; - setOpen: (open: boolean) => void; -} -function ActivityDetailsDialog({ - transaction, - open, - setOpen, -}: ActivityDetailsDialogProps): React.JSX.Element { - const address = useCurrentAccount()?.address ?? ''; - - const summary = useTransactionSummary({ - transaction: transaction.raw, - currentAddress: address, - recognizedPackagesList: [], - }); - - if (!summary) return <LoadingIndicator />; - - return ( - <Dialog open={open} onOpenChange={setOpen}> - <DialogLayout> - <Header title="Transaction" onClose={() => setOpen(false)} /> - <DialogLayoutBody> - <TransactionReceipt - txn={transaction.raw} - activeAddress={address} - summary={summary} - renderExplorerLink={ExplorerLink} - renderValidatorLogo={Validator} + <Dialog open={open} onOpenChange={setOpen}> + <DialogLayout> + <TransactionDetailsLayout + transaction={transaction} + onClose={() => setOpen(false)} /> - </DialogLayoutBody> - <DialogLayoutFooter> - <ExplorerLink - type={ExplorerLinkType.Transaction} - transactionID={transaction.raw.digest} - > - <ViewTxnOnExplorerButton digest={transaction.raw.digest} /> - </ExplorerLink> - </DialogLayoutFooter> - </DialogLayout> - </Dialog> + </DialogLayout> + </Dialog> + </> ); } diff --git a/apps/wallet-dashboard/components/transactions/TransactionsOverview.tsx b/apps/wallet-dashboard/components/transactions/TransactionsOverview.tsx index a590e3abcdb..fcaf74eddaa 100644 --- a/apps/wallet-dashboard/components/transactions/TransactionsOverview.tsx +++ b/apps/wallet-dashboard/components/transactions/TransactionsOverview.tsx @@ -9,7 +9,7 @@ function TransactionsOverview() { return ( <Panel> <Title title="Activity" /> - <div className="px-sm pb-md pt-sm"> + <div className="h-full overflow-y-auto px-sm pb-md pt-sm"> <TransactionsList /> </div> </Panel> diff --git a/apps/wallet-dashboard/contexts/PopupContext.ts b/apps/wallet-dashboard/contexts/PopupContext.ts deleted file mode 100644 index ced7b13cc33..00000000000 --- a/apps/wallet-dashboard/contexts/PopupContext.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import { ReactNode, createContext } from 'react'; - -export interface PopupManager { - popups: ReactNode[]; - openPopup: (content: ReactNode) => void; - closePopup: () => void; -} - -export const PopupContext = createContext<PopupManager>({} as PopupManager); diff --git a/apps/wallet-dashboard/hooks/index.ts b/apps/wallet-dashboard/hooks/index.ts index 77ea2304aa4..5ad872afeed 100644 --- a/apps/wallet-dashboard/hooks/index.ts +++ b/apps/wallet-dashboard/hooks/index.ts @@ -1,8 +1,7 @@ // Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -export * from './useUnstakeTransaction'; -export * from './usePopups'; +export * from './useNewUnstakeTransaction'; export * from './useNewStakeTransaction'; export * from './useNotifications'; export * from './useSendCoinTransaction'; @@ -11,3 +10,6 @@ export * from './useGetCurrentEpochStartTimestamp'; export * from './useTimelockedUnstakeTransaction'; export * from './useExplorerLinkGetter'; export * from './useGetStardustMigratableObjects'; +export * from './useGetSupplyIncreaseVestingObjects'; +export * from './useGroupedMigrationObjectsByExpirationDate'; +export * from './useTransferTransaction'; diff --git a/apps/wallet-dashboard/hooks/useGetCurrentEpochEndTimestamp.ts b/apps/wallet-dashboard/hooks/useGetCurrentEpochEndTimestamp.ts new file mode 100644 index 00000000000..69217c4becf --- /dev/null +++ b/apps/wallet-dashboard/hooks/useGetCurrentEpochEndTimestamp.ts @@ -0,0 +1,21 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { useIotaClient } from '@iota/dapp-kit'; +import { useQuery } from '@tanstack/react-query'; + +export function useGetCurrentEpochEndTimestamp() { + const client = useIotaClient(); + return useQuery({ + // eslint-disable-next-line @tanstack/query/exhaustive-deps + queryKey: ['current-epoch-end-timestamp'], + queryFn: async () => { + const iotaSystemState = await client.getLatestIotaSystemState(); + const epochStart = parseInt(iotaSystemState.epochStartTimestampMs); + const epochDuration = parseInt(iotaSystemState.epochDurationMs); + const epochEnd = epochStart + epochDuration; + return epochEnd; + }, + staleTime: 10 * 60 * 1000, // 10 minutes + }); +} diff --git a/apps/wallet-dashboard/hooks/useGetStardustMigratableObjects.ts b/apps/wallet-dashboard/hooks/useGetStardustMigratableObjects.ts index 7a5b40ce140..e17bb3d6b3b 100644 --- a/apps/wallet-dashboard/hooks/useGetStardustMigratableObjects.ts +++ b/apps/wallet-dashboard/hooks/useGetStardustMigratableObjects.ts @@ -1,21 +1,17 @@ // Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +import { useQuery } from '@tanstack/react-query'; import { useGetCurrentEpochStartTimestamp } from '@/hooks'; import { groupStardustObjectsByMigrationStatus } from '@/lib/utils'; import { STARDUST_BASIC_OUTPUT_TYPE, STARDUST_NFT_OUTPUT_TYPE, + TimeUnit, useGetAllOwnedObjects, } from '@iota/core'; -import { IotaObjectData } from '@iota/iota-sdk/client'; -export function useGetStardustMigratableObjects(address: string): { - migratableBasicOutputs: IotaObjectData[]; - unmigratableBasicOutputs: IotaObjectData[]; - migratableNftOutputs: IotaObjectData[]; - unmigratableNftOutputs: IotaObjectData[]; -} { +export function useGetStardustMigratableObjects(address: string) { const { data: currentEpochMs } = useGetCurrentEpochStartTimestamp(); const { data: basicOutputObjects } = useGetAllOwnedObjects(address, { StructType: STARDUST_BASIC_OUTPUT_TYPE, @@ -24,24 +20,41 @@ export function useGetStardustMigratableObjects(address: string): { StructType: STARDUST_NFT_OUTPUT_TYPE, }); - const { migratable: migratableBasicOutputs, unmigratable: unmigratableBasicOutputs } = - groupStardustObjectsByMigrationStatus( - basicOutputObjects ?? [], - Number(currentEpochMs), + return useQuery({ + queryKey: [ + 'stardust-migratable-objects', address, - ); + currentEpochMs, + basicOutputObjects, + nftOutputObjects, + ], + queryFn: () => { + const epochMs = Number(currentEpochMs) || 0; - const { migratable: migratableNftOutputs, unmigratable: unmigratableNftOutputs } = - groupStardustObjectsByMigrationStatus( - nftOutputObjects ?? [], - Number(currentEpochMs), - address, - ); + const { migratable: migratableBasicOutputs, timelocked: timelockedBasicOutputs } = + groupStardustObjectsByMigrationStatus(basicOutputObjects ?? [], epochMs, address); + + const { migratable: migratableNftOutputs, timelocked: timelockedNftOutputs } = + groupStardustObjectsByMigrationStatus(nftOutputObjects ?? [], epochMs, address); - return { - migratableBasicOutputs, - unmigratableBasicOutputs, - migratableNftOutputs, - unmigratableNftOutputs, - }; + return { + migratableBasicOutputs, + timelockedBasicOutputs, + migratableNftOutputs, + timelockedNftOutputs, + }; + }, + enabled: + !!address && + currentEpochMs !== undefined && + basicOutputObjects !== undefined && + nftOutputObjects !== undefined, + staleTime: TimeUnit.ONE_SECOND * TimeUnit.ONE_MINUTE * 5, + placeholderData: { + migratableBasicOutputs: [], + timelockedBasicOutputs: [], + migratableNftOutputs: [], + timelockedNftOutputs: [], + }, + }); } diff --git a/apps/wallet-dashboard/hooks/useGetSupplyIncreaseVestingObjects.ts b/apps/wallet-dashboard/hooks/useGetSupplyIncreaseVestingObjects.ts new file mode 100644 index 00000000000..58d19d63641 --- /dev/null +++ b/apps/wallet-dashboard/hooks/useGetSupplyIncreaseVestingObjects.ts @@ -0,0 +1,112 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { useGetCurrentEpochStartTimestamp } from '@/hooks'; +import { + SupplyIncreaseVestingPayout, + SupplyIncreaseVestingPortfolio, + TimelockedObject, + VestingOverview, +} from '@/lib/interfaces'; +import { + buildSupplyIncreaseVestingSchedule, + ExtendedDelegatedTimelockedStake, + formatDelegatedTimelockedStake, + getLatestOrEarliestSupplyIncreaseVestingPayout, + getVestingOverview, + isSupplyIncreaseVestingObject, + isTimelockedUnlockable, + mapTimelockObjects, +} from '@/lib/utils'; +import { + TIMELOCK_IOTA_TYPE, + useGetAllOwnedObjects, + useGetTimelockedStakedObjects, + useUnlockTimelockedObjectsTransaction, +} from '@iota/core'; +import { Transaction } from '@iota/iota-sdk/transactions'; + +export function useGetSupplyIncreaseVestingObjects(address: string): { + nextPayout: SupplyIncreaseVestingPayout | undefined; + lastPayout: SupplyIncreaseVestingPayout | undefined; + supplyIncreaseVestingSchedule: VestingOverview; + supplyIncreaseVestingPortfolio: SupplyIncreaseVestingPortfolio | undefined; + supplyIncreaseVestingMapped: TimelockedObject[]; + supplyIncreaseVestingStakedMapped: ExtendedDelegatedTimelockedStake[]; + isTimelockedStakedObjectsLoading: boolean; + unlockAllSupplyIncreaseVesting: + | { + transactionBlock: Transaction; + } + | undefined; + refreshStakeList: () => void; +} { + const { data: currentEpochMs } = useGetCurrentEpochStartTimestamp(); + + const { data: timelockedObjects, refetch: refetchGetAllOwnedObjects } = useGetAllOwnedObjects( + address || '', + { + StructType: TIMELOCK_IOTA_TYPE, + }, + ); + const { + data: timelockedStakedObjects, + isLoading: isTimelockedStakedObjectsLoading, + refetch: refetchTimelockedStakedObjects, + } = useGetTimelockedStakedObjects(address || ''); + + const supplyIncreaseVestingMapped = mapTimelockObjects(timelockedObjects || []).filter( + isSupplyIncreaseVestingObject, + ); + const supplyIncreaseVestingStakedMapped = formatDelegatedTimelockedStake( + timelockedStakedObjects || [], + ).filter(isSupplyIncreaseVestingObject); + + const supplyIncreaseVestingSchedule = getVestingOverview( + [...supplyIncreaseVestingMapped, ...supplyIncreaseVestingStakedMapped], + Number(currentEpochMs), + ); + + const nextPayout = getLatestOrEarliestSupplyIncreaseVestingPayout( + [...supplyIncreaseVestingMapped, ...supplyIncreaseVestingStakedMapped], + Number(currentEpochMs), + false, + ); + + const lastPayout = getLatestOrEarliestSupplyIncreaseVestingPayout( + [...supplyIncreaseVestingMapped, ...supplyIncreaseVestingStakedMapped], + Number(currentEpochMs), + true, + ); + + const supplyIncreaseVestingPortfolio = + lastPayout && buildSupplyIncreaseVestingSchedule(lastPayout, Number(currentEpochMs)); + + const supplyIncreaseVestingUnlocked = supplyIncreaseVestingMapped?.filter( + (supplyIncreaseVestingObject) => + isTimelockedUnlockable(supplyIncreaseVestingObject, Number(currentEpochMs)), + ); + const supplyIncreaseVestingUnlockedObjectIds: string[] = + supplyIncreaseVestingUnlocked.map((unlockedObject) => unlockedObject.id.id) || []; + const { data: unlockAllSupplyIncreaseVesting } = useUnlockTimelockedObjectsTransaction( + address || '', + supplyIncreaseVestingUnlockedObjectIds, + ); + + function refreshStakeList() { + refetchTimelockedStakedObjects(); + refetchGetAllOwnedObjects(); + } + + return { + nextPayout, + lastPayout, + supplyIncreaseVestingSchedule, + supplyIncreaseVestingPortfolio, + supplyIncreaseVestingMapped, + supplyIncreaseVestingStakedMapped, + isTimelockedStakedObjectsLoading, + unlockAllSupplyIncreaseVesting, + refreshStakeList, + }; +} diff --git a/apps/wallet-dashboard/hooks/useGroupedMigrationObjectsByExpirationDate.ts b/apps/wallet-dashboard/hooks/useGroupedMigrationObjectsByExpirationDate.ts new file mode 100644 index 00000000000..d9d96816fd2 --- /dev/null +++ b/apps/wallet-dashboard/hooks/useGroupedMigrationObjectsByExpirationDate.ts @@ -0,0 +1,59 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { ResolvedObjectTypes } from '@/lib/types'; +import { + groupMigrationObjectsByUnlockCondition, + sortStardustResolvedObjectsByExpiration, +} from '@/lib/utils'; +import { TimeUnit } from '@iota/core'; +import { useCurrentAccount, useIotaClient } from '@iota/dapp-kit'; +import { IotaObjectData } from '@iota/iota-sdk/client'; +import { useQuery } from '@tanstack/react-query'; +import { useGetCurrentEpochStartTimestamp } from './useGetCurrentEpochStartTimestamp'; +import { useGetCurrentEpochEndTimestamp } from './useGetCurrentEpochEndTimestamp'; + +export function useGroupedMigrationObjectsByExpirationDate( + objects: IotaObjectData[], + isTimelockUnlockCondition: boolean = false, +) { + const client = useIotaClient(); + const address = useCurrentAccount()?.address; + + const { data: currentEpochStartTimestampMs } = useGetCurrentEpochStartTimestamp(); + const { data: currentEpochEndTimestampMs } = useGetCurrentEpochEndTimestamp(); + + const epochStartMs = currentEpochStartTimestampMs ? parseInt(currentEpochStartTimestampMs) : 0; + const epochEndMs = currentEpochEndTimestampMs ? currentEpochEndTimestampMs : 0; + + return useQuery({ + // eslint-disable-next-line @tanstack/query/exhaustive-deps + queryKey: [ + 'grouped-migration-objects', + objects, + address, + isTimelockUnlockCondition, + epochStartMs, + epochEndMs, + ], + queryFn: async (): Promise<ResolvedObjectTypes[]> => { + if (!client || objects.length === 0) { + return []; + } + const resolvedObjects = await groupMigrationObjectsByUnlockCondition( + objects, + client, + address, + isTimelockUnlockCondition, + ); + + return sortStardustResolvedObjectsByExpiration( + resolvedObjects, + epochStartMs, + epochEndMs, + ); + }, + enabled: !!client && objects.length > 0, + staleTime: TimeUnit.ONE_SECOND * TimeUnit.ONE_MINUTE * 5, + }); +} diff --git a/apps/wallet-dashboard/hooks/useNewStakeTransaction.ts b/apps/wallet-dashboard/hooks/useNewStakeTransaction.ts index 7bd856cf77d..3e45ccd6144 100644 --- a/apps/wallet-dashboard/hooks/useNewStakeTransaction.ts +++ b/apps/wallet-dashboard/hooks/useNewStakeTransaction.ts @@ -9,26 +9,54 @@ import { import { useIotaClient } from '@iota/dapp-kit'; import { useQuery } from '@tanstack/react-query'; -export function useNewStakeTransaction( +export function useNewStakeTransaction(validator: string, amount: bigint, senderAddress: string) { + const client = useIotaClient(); + return useQuery({ + // eslint-disable-next-line @tanstack/query/exhaustive-deps + queryKey: ['stake-transaction', validator, amount.toString(), senderAddress], + queryFn: async () => { + const transaction = createStakeTransaction(amount, validator); + transaction.setSender(senderAddress); + await transaction.build({ client }); + return transaction; + }, + enabled: !!amount && !!validator && !!senderAddress, + gcTime: 0, + select: (transaction) => { + return { + transaction, + gasBudget: transaction.getData().gasData.budget, + }; + }, + }); +} + +export function useNewStakeTimelockedTransaction( validator: string, - amount: bigint, senderAddress: string, - isTimelockedStaking: boolean = false, - groupedTimelockObjects?: GroupedTimelockObject[], + groupedTimelockObjects: GroupedTimelockObject[], ) { + const amount = groupedTimelockObjects.reduce( + (acc, obj) => acc + (obj.totalLockedAmount - (obj.splitAmount ?? 0n)), + 0n, + ); const client = useIotaClient(); return useQuery({ // eslint-disable-next-line @tanstack/query/exhaustive-deps - queryKey: ['stake-transaction', validator, amount.toString(), senderAddress], + queryKey: [ + 'stake-timelocked-transaction', + validator, + senderAddress, + amount.toString(), + groupedTimelockObjects.length, + ], queryFn: async () => { - const transaction = isTimelockedStaking - ? createTimelockedStakeTransaction(groupedTimelockObjects || [], validator) - : createStakeTransaction(amount, validator); + const transaction = createTimelockedStakeTransaction(groupedTimelockObjects, validator); transaction.setSender(senderAddress); await transaction.build({ client }); return transaction; }, - enabled: !!amount && !!validator && !!senderAddress, + enabled: !!(validator && senderAddress && groupedTimelockObjects?.length), gcTime: 0, select: (transaction) => { return { diff --git a/apps/wallet-dashboard/hooks/useNewUnstakeTransaction.ts b/apps/wallet-dashboard/hooks/useNewUnstakeTransaction.ts new file mode 100644 index 00000000000..5704507f448 --- /dev/null +++ b/apps/wallet-dashboard/hooks/useNewUnstakeTransaction.ts @@ -0,0 +1,55 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { createTimelockedUnstakeTransaction, createUnstakeTransaction } from '@iota/core'; +import { useIotaClient } from '@iota/dapp-kit'; +import { useQuery } from '@tanstack/react-query'; + +export function useNewUnstakeTransaction(senderAddress: string, unstakeIotaId: string) { + const client = useIotaClient(); + + return useQuery({ + // eslint-disable-next-line @tanstack/query/exhaustive-deps + queryKey: ['unstake-transaction', unstakeIotaId, senderAddress], + queryFn: async () => { + const transaction = createUnstakeTransaction(unstakeIotaId); + transaction.setSender(senderAddress); + await transaction.build({ client }); + return transaction; + }, + enabled: !!(senderAddress && unstakeIotaId), + gcTime: 0, + select: (transaction) => { + return { + transaction, + gasBudget: transaction.getData().gasData.budget, + }; + }, + }); +} + +export function useNewUnstakeTimelockedTransaction( + senderAddress: string, + timelockedUnstakeIotaIds: string[], +) { + const client = useIotaClient(); + + return useQuery({ + // eslint-disable-next-line @tanstack/query/exhaustive-deps + queryKey: ['timelocked-unstake-transaction', timelockedUnstakeIotaIds, senderAddress], + queryFn: async () => { + const transaction = createTimelockedUnstakeTransaction(timelockedUnstakeIotaIds); + transaction.setSender(senderAddress); + await transaction.build({ client }); + return transaction; + }, + enabled: !!(senderAddress && timelockedUnstakeIotaIds?.length), + gcTime: 0, + select: (transaction) => { + return { + transaction, + gasBudget: transaction.getData().gasData.budget, + }; + }, + }); +} diff --git a/apps/wallet-dashboard/hooks/usePopups.ts b/apps/wallet-dashboard/hooks/usePopups.ts deleted file mode 100644 index b4867bbac73..00000000000 --- a/apps/wallet-dashboard/hooks/usePopups.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import { PopupContext, PopupManager } from '@/contexts'; -import { useContext } from 'react'; - -export const usePopups = (): PopupManager => { - return useContext(PopupContext); -}; diff --git a/apps/wallet-dashboard/hooks/useTransferTransaction.ts b/apps/wallet-dashboard/hooks/useTransferTransaction.ts new file mode 100644 index 00000000000..ee673368ac0 --- /dev/null +++ b/apps/wallet-dashboard/hooks/useTransferTransaction.ts @@ -0,0 +1,24 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 +import { useMutation } from '@tanstack/react-query'; +import { useIotaClient, useSignAndExecuteTransaction } from '@iota/dapp-kit'; +import { Transaction } from '@iota/iota-sdk/transactions'; + +export function useTransferTransactionMutation() { + const iotaClient = useIotaClient(); + const { mutateAsync: signAndExecuteTransaction } = useSignAndExecuteTransaction(); + + return useMutation({ + mutationFn: async (transaction: Transaction) => { + const executed = await signAndExecuteTransaction({ + transaction, + }); + + const tx = await iotaClient.waitForTransaction({ + digest: executed.digest, + }); + + return tx; + }, + }); +} diff --git a/apps/wallet-dashboard/hooks/useUnstakeTransaction.ts b/apps/wallet-dashboard/hooks/useUnstakeTransaction.ts deleted file mode 100644 index 9f8644eda4c..00000000000 --- a/apps/wallet-dashboard/hooks/useUnstakeTransaction.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import { createUnstakeTransaction } from '@iota/core'; -import { useIotaClient } from '@iota/dapp-kit'; -import { useQuery } from '@tanstack/react-query'; - -export function useUnstakeTransaction(stakedIotaId: string, senderAddress: string) { - const client = useIotaClient(); - return useQuery({ - // eslint-disable-next-line @tanstack/query/exhaustive-deps - queryKey: ['unstake-transaction', stakedIotaId, senderAddress], - queryFn: async () => { - const transaction = createUnstakeTransaction(stakedIotaId); - transaction.setSender(senderAddress); - await transaction.build({ client }); - return transaction; - }, - enabled: !!stakedIotaId && !!senderAddress, - gcTime: 0, - select: (transaction) => { - return { - transaction, - gasBudget: transaction.getData().gasData.budget, - }; - }, - }); -} diff --git a/apps/wallet-dashboard/lib/constants/index.ts b/apps/wallet-dashboard/lib/constants/index.ts index b2c6ab5f6cd..30680459cef 100644 --- a/apps/wallet-dashboard/lib/constants/index.ts +++ b/apps/wallet-dashboard/lib/constants/index.ts @@ -2,3 +2,4 @@ // SPDX-License-Identifier: Apache-2.0 export * from './vesting.constants'; +export * from './migration.constants'; diff --git a/apps/wallet-dashboard/lib/constants/migration.constants.ts b/apps/wallet-dashboard/lib/constants/migration.constants.ts new file mode 100644 index 00000000000..1a203fc50e9 --- /dev/null +++ b/apps/wallet-dashboard/lib/constants/migration.constants.ts @@ -0,0 +1,14 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { StardustOutputDetailsFilter } from '../enums'; + +export const STARDUST_MIGRATABLE_OBJECTS_FILTER_LIST: StardustOutputDetailsFilter[] = Object.values( + StardustOutputDetailsFilter, +); + +export const STARDUST_TIMELOCKED_OBJECTS_FILTER_LIST: StardustOutputDetailsFilter[] = Object.values( + StardustOutputDetailsFilter, +).filter((element) => element !== StardustOutputDetailsFilter.WithExpiration); + +export const MIGRATION_OBJECT_WITHOUT_UC_KEY = 'no-unlock-condition-timestamp'; diff --git a/apps/wallet-dashboard/lib/constants/vesting.constants.ts b/apps/wallet-dashboard/lib/constants/vesting.constants.ts index 5e290e70e06..51ace2168a7 100644 --- a/apps/wallet-dashboard/lib/constants/vesting.constants.ts +++ b/apps/wallet-dashboard/lib/constants/vesting.constants.ts @@ -32,7 +32,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xfe755ca67e3a0714f97ec3c49cfc6f3ecdab2673d96b5840294d3a5db376c99', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1697320800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -42,7 +42,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x682d14613231dd1dde39397977cdfafb6b6263b5683b6782348c597c104b834', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1698530400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -52,7 +52,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x93f2bf2d044e45e1a85c010c22357892d1625436b8c95b26dcdb6f309319064', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1699740000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -62,7 +62,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x44fa510ba216cd555ecd6b99d1ebd612f82e2bf421091c973bca49b064dc72b', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1700949600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -72,7 +72,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xacd861b6dc5d108af03655a2175545ac6d432c526bcbe294b90e722fa36b459', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1702159200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -82,7 +82,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x8f9eeb5953c77d53dcff3057619af7a29be1d9ce67bf66c86ad5309379d17e5', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1703368800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -92,7 +92,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x70b1063c1104760afc06df5217bebdf02f937e1aff51211fc0472e677ba8c74', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1704578400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -102,7 +102,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xb0aa6f655d08f630c15a2cfb4e3e13e307ce9d96c52c1e91c65a71a204819bd', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1705788000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -112,7 +112,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x65224b9a3b9eadc55be4cb6efa363f283b924607496d60c02deef2aa6bf9e22', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1706997600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -122,7 +122,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x68f9a2af0ebd0bcd9e3cc836ac7103670a9602e8dca8fd28e7b2b5a693898f2', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1708207200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -132,7 +132,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x637e6b758efdb8d49ee96397ca909d579bb77b79f8b64e7e7f1af13ad4f7ce4', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1709416800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -142,7 +142,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xbd0f349c21b67faec992b6c9a1b9b6343b4ff1f2ad5f33b0b4cd0fc31be2b31', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1710626400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -152,7 +152,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xfb8c3539b22e4086bd03417027e70515e6fb6d18f366876ad5ad0d8da3bde0f', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1711836000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -162,7 +162,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xbfb7c1a941885cc55a191e579c7c6d5dc345d6b5b9cfa439f724a343d354032', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1713045600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -172,7 +172,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x8935a904f90e23f6f453cb0c85a03859e07f1c9e5a5d1644b2fbe7005d8e158', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1714255200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -182,7 +182,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x73be6f8df4b73b83f8ccf909d61aabb56c56c56aa597d2806eccf3ab4fac66b', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1715464800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -192,7 +192,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x20075cc2ebd5fa6e069829e58e55e6e010ad115e8cbc48d7a3d98d079ce649a', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1716674400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -202,7 +202,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xce03433d496cb231ead90a661fe08b924eb9b0cfb43dd560ea02a8060f6afd0', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1717884000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -212,7 +212,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xf111b8705ba276f8c6b76bdf72a4a46889cb8207cc5a80d3df0f40d9576116a', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1719093600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -222,7 +222,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xbc27940fb9c6f96ae9e2c11ad151446e30de5281172e48aac7f600d1da92c10', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1720303200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -232,7 +232,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x016fae8797d3d12a26e215ec1815ee8adce70bb93149b4d55eb06a81c476ff9', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1721512800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -242,7 +242,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x06f1e354ff551d76da8dc890eab728a65319defb3608991b4c70a1a2b30e8f1', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1722722400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -252,7 +252,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xc4cf3ea32480aab7d78784c6f00b9210ce0ffaabbcbb8cddd846073e7455386', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1723932000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -262,7 +262,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x6dc10a8008855549b8d92e7704c799253a953d9835af001970426414fdd3ba7', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1725141600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -272,7 +272,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xa5f7a66c575db3f74c5fe7043c28f7231a2127aec4dc2de88f5b9d3cf020511', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1726351200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -282,7 +282,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xde0a4c2e0f16541983302c596339815ffa4d4743509e8115bc06fcf7f71ea8f', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1727560800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -292,7 +292,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xccc5d23ab69789b934b9bf7f5006e43eef45c2d7a251e3eec8b7dd24bc20a07', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1728770400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -302,7 +302,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x503dc8844b0cd6e74e735433751328e8283569e81b4602aaa6941ce3fe826bb', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1729980000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -312,7 +312,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x0fac98b5ac955644dffa0700933aababe438fae6fc58b8a4bd1f740c8aba941', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1731189600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -322,7 +322,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x756483e3c7dd3491ea405f682df6c5dc1e4a59d8b5c9725b0d194815a25ea95', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1732399200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -332,7 +332,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x72c4318876f51bed94c2228b395d18f5dce5f243039c7e3d8fad690dfe918fc', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1733608800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -342,7 +342,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x37f68fd72af05b4c923268b64a0baa7511f27bc4cbd90641e444e7116f02604', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1734818400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -352,7 +352,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x97bedf66e48392a0b9baf8a8280e72fcce9b32ff980832edfe1a90a14ce9047', }, locked: { - value: 2_000_000_000, + value: 2_000_000_000n, }, expirationTimestampMs: 1736028000000, label: SUPPLY_INCREASE_VESTING_LABEL, diff --git a/apps/wallet-dashboard/lib/enums/commonMigrationObjectType.enums.ts b/apps/wallet-dashboard/lib/enums/commonMigrationObjectType.enums.ts new file mode 100644 index 00000000000..9395fca36b8 --- /dev/null +++ b/apps/wallet-dashboard/lib/enums/commonMigrationObjectType.enums.ts @@ -0,0 +1,8 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export enum CommonMigrationObjectType { + NativeToken = 'nativeToken', + Nft = 'nft', + Basic = 'basic', +} diff --git a/apps/wallet-dashboard/lib/enums/index.ts b/apps/wallet-dashboard/lib/enums/index.ts index 87f3b0e2f22..6d936d1ec45 100644 --- a/apps/wallet-dashboard/lib/enums/index.ts +++ b/apps/wallet-dashboard/lib/enums/index.ts @@ -3,3 +3,6 @@ export * from './protectedRouteTitle.enum'; export * from './assetCategory.enum'; +export * from './commonMigrationObjectType.enums'; +export * from './stardustOutputDetailsFilter.enum'; +export * from './stardustOutputMigrationStatus.enum'; diff --git a/apps/wallet-dashboard/lib/enums/stardustOutputDetailsFilter.enum.ts b/apps/wallet-dashboard/lib/enums/stardustOutputDetailsFilter.enum.ts new file mode 100644 index 00000000000..f1ff813072c --- /dev/null +++ b/apps/wallet-dashboard/lib/enums/stardustOutputDetailsFilter.enum.ts @@ -0,0 +1,10 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export enum StardustOutputDetailsFilter { + All = 'All', + IOTA = 'IOTA', + NativeTokens = 'Native Tokens', + VisualAssets = 'Visual Assets', + WithExpiration = 'With Expiration', +} diff --git a/apps/wallet-dashboard/lib/enums/stardustOutputMigrationStatus.enum.ts b/apps/wallet-dashboard/lib/enums/stardustOutputMigrationStatus.enum.ts new file mode 100644 index 00000000000..29df88def12 --- /dev/null +++ b/apps/wallet-dashboard/lib/enums/stardustOutputMigrationStatus.enum.ts @@ -0,0 +1,7 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export enum StardustOutputMigrationStatus { + Migratable = 'Migratable', + TimeLocked = 'TimeLocked', +} diff --git a/apps/wallet-dashboard/lib/interfaces/timelock.interface.ts b/apps/wallet-dashboard/lib/interfaces/timelock.interface.ts index 12b26daeecb..2cb58e1a988 100644 --- a/apps/wallet-dashboard/lib/interfaces/timelock.interface.ts +++ b/apps/wallet-dashboard/lib/interfaces/timelock.interface.ts @@ -6,7 +6,7 @@ export interface UID { } export interface Balance { - value: number; + value: bigint; } export interface TimelockedObject { diff --git a/apps/wallet-dashboard/lib/interfaces/vesting.interface.ts b/apps/wallet-dashboard/lib/interfaces/vesting.interface.ts index ba846d71e6c..4eac7bcc774 100644 --- a/apps/wallet-dashboard/lib/interfaces/vesting.interface.ts +++ b/apps/wallet-dashboard/lib/interfaces/vesting.interface.ts @@ -7,7 +7,7 @@ export enum SupplyIncreaseUserType { } export interface SupplyIncreaseVestingPayout { - amount: number; + amount: bigint; expirationTimestampMs: number; } diff --git a/apps/wallet-dashboard/lib/types/index.ts b/apps/wallet-dashboard/lib/types/index.ts new file mode 100644 index 00000000000..cdec0f4219f --- /dev/null +++ b/apps/wallet-dashboard/lib/types/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './stardustMigrationObjects'; diff --git a/apps/wallet-dashboard/lib/types/stardustMigrationObjects.ts b/apps/wallet-dashboard/lib/types/stardustMigrationObjects.ts new file mode 100644 index 00000000000..516cc7e2908 --- /dev/null +++ b/apps/wallet-dashboard/lib/types/stardustMigrationObjects.ts @@ -0,0 +1,33 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { IotaObjectData } from '@iota/iota-sdk/client'; +import { CommonMigrationObjectType } from '../enums'; + +export type UnlockConditionTimestamp = string; + +interface CommonExpirationTypeObject { + unlockConditionTimestamp: UnlockConditionTimestamp; + output: IotaObjectData; + uniqueId: string; + balance: bigint; +} + +export interface ResolvedNativeToken extends CommonExpirationTypeObject { + name: string; + commonObjectType: CommonMigrationObjectType.NativeToken; + coinType: string; +} + +export interface ResolvedBasicObject extends CommonExpirationTypeObject { + type: string; + commonObjectType: CommonMigrationObjectType.Basic; +} + +export interface ResolvedNftObject extends CommonExpirationTypeObject { + name: string; + image_url: string; + commonObjectType: CommonMigrationObjectType.Nft; +} + +export type ResolvedObjectTypes = ResolvedBasicObject | ResolvedNftObject | ResolvedNativeToken; diff --git a/apps/wallet-dashboard/lib/utils/migration.ts b/apps/wallet-dashboard/lib/utils/migration.ts deleted file mode 100644 index ee129d4d211..00000000000 --- a/apps/wallet-dashboard/lib/utils/migration.ts +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import { CommonOutputObjectWithUc } from '@iota/core'; -import { IotaObjectData } from '@iota/iota-sdk/client'; - -export type StardustMigrationGroupedObjects = { - migratable: IotaObjectData[]; - unmigratable: IotaObjectData[]; -}; - -export function groupStardustObjectsByMigrationStatus( - stardustOutputObjects: IotaObjectData[], - epochTimestamp: number, - address: string, -): StardustMigrationGroupedObjects { - const migratable: IotaObjectData[] = []; - const unmigratable: IotaObjectData[] = []; - - const epochUnix = epochTimestamp / 1000; - - for (const outputObject of stardustOutputObjects) { - const outputObjectFields = extractOutputFields(outputObject); - - if (outputObjectFields.expiration_uc) { - const unlockableAddress = - outputObjectFields.expiration_uc.fields.unix_time <= epochUnix - ? outputObjectFields.expiration_uc.fields.return_address - : outputObjectFields.expiration_uc.fields.owner; - - if (unlockableAddress !== address) { - unmigratable.push(outputObject); - continue; - } - } - if ( - outputObjectFields.timelock_uc && - outputObjectFields.timelock_uc.fields.unix_time > epochUnix - ) { - unmigratable.push(outputObject); - continue; - } - - migratable.push(outputObject); - } - - return { migratable, unmigratable }; -} - -interface MigratableObjectsData { - totalNativeTokens: number; - totalVisualAssets: number; - accumulatedIotaAmount: number; -} - -export function summarizeMigratableObjectValues({ - migratableBasicOutputs, - migratableNftOutputs, - address, -}: { - migratableBasicOutputs: IotaObjectData[]; - migratableNftOutputs: IotaObjectData[]; - address: string; -}): MigratableObjectsData { - let totalNativeTokens = 0; - let totalIotaAmount = 0; - - const totalVisualAssets = migratableNftOutputs.length; - const outputObjects = [...migratableBasicOutputs, ...migratableNftOutputs]; - - for (const output of outputObjects) { - const outputObjectFields = extractOutputFields(output); - - totalIotaAmount += parseInt(outputObjectFields.balance); - totalNativeTokens += parseInt(outputObjectFields.native_tokens.fields.size); - totalIotaAmount += extractStorageDepositReturnAmount(outputObjectFields, address) || 0; - } - - return { totalNativeTokens, totalVisualAssets, accumulatedIotaAmount: totalIotaAmount }; -} - -function extractStorageDepositReturnAmount( - { storage_deposit_return_uc }: CommonOutputObjectWithUc, - address: string, -): number | null { - if ( - storage_deposit_return_uc?.fields && - storage_deposit_return_uc?.fields.return_address === address - ) { - return parseInt(storage_deposit_return_uc?.fields.return_amount); - } - return null; -} - -function extractOutputFields(outputObject: IotaObjectData): CommonOutputObjectWithUc { - return ( - outputObject.content as unknown as { - fields: CommonOutputObjectWithUc; - } - ).fields; -} diff --git a/apps/wallet-dashboard/lib/utils/migration/filterMigrationObjectDetails.ts b/apps/wallet-dashboard/lib/utils/migration/filterMigrationObjectDetails.ts new file mode 100644 index 00000000000..3f9d54de6c8 --- /dev/null +++ b/apps/wallet-dashboard/lib/utils/migration/filterMigrationObjectDetails.ts @@ -0,0 +1,37 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { MIGRATION_OBJECT_WITHOUT_UC_KEY } from '@/lib/constants'; +import { CommonMigrationObjectType, StardustOutputDetailsFilter } from '@/lib/enums'; +import { ResolvedObjectTypes } from '@/lib/types'; + +export function filterMigrationObjects( + objects: ResolvedObjectTypes[], + filter: StardustOutputDetailsFilter, +) { + switch (filter) { + case StardustOutputDetailsFilter.All: + return objects; + case StardustOutputDetailsFilter.IOTA: + return filterObjectByCommonOutputType(objects, CommonMigrationObjectType.Basic); + case StardustOutputDetailsFilter.VisualAssets: + return filterObjectByCommonOutputType(objects, CommonMigrationObjectType.Nft); + case StardustOutputDetailsFilter.NativeTokens: + return filterObjectByCommonOutputType(objects, CommonMigrationObjectType.NativeToken); + case StardustOutputDetailsFilter.WithExpiration: + return filterObjectsByExpiration(objects); + } +} + +function filterObjectByCommonOutputType( + objects: ResolvedObjectTypes[], + type: CommonMigrationObjectType, +) { + return objects.filter((object) => object.commonObjectType === type); +} + +function filterObjectsByExpiration(objects: ResolvedObjectTypes[]): ResolvedObjectTypes[] { + return objects.filter( + (object) => object.unlockConditionTimestamp !== MIGRATION_OBJECT_WITHOUT_UC_KEY, + ); +} diff --git a/apps/wallet-dashboard/lib/utils/migration/groupMigrationObjects.ts b/apps/wallet-dashboard/lib/utils/migration/groupMigrationObjects.ts new file mode 100644 index 00000000000..73991f4ac09 --- /dev/null +++ b/apps/wallet-dashboard/lib/utils/migration/groupMigrationObjects.ts @@ -0,0 +1,235 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { CommonMigrationObjectType } from '@/lib/enums'; +import { + ResolvedBasicObject, + ResolvedNativeToken, + ResolvedNftObject, + ResolvedObjectTypes, + UnlockConditionTimestamp, +} from '@/lib/types'; +import { + extractObjectTypeStruct, + getNativeTokensFromBag, + MILLISECONDS_PER_SECOND, + STARDUST_BASIC_OUTPUT_TYPE, + STARDUST_NFT_OUTPUT_TYPE, +} from '@iota/core'; +import { extractMigrationOutputFields, extractOwnedStorageDepositReturnAmount } from '.'; +import { IotaClient, IotaObjectData } from '@iota/iota-sdk/client'; +import { MIGRATION_OBJECT_WITHOUT_UC_KEY } from '@/lib/constants'; + +export async function groupMigrationObjectsByUnlockCondition( + objectsData: IotaObjectData[], + client: IotaClient, + currentAddress: string = '', + isTimelockUnlockCondition: boolean = false, +): Promise<ResolvedObjectTypes[]> { + const flatObjects: ResolvedObjectTypes[] = []; + const basicObjectMap: Map<string, ResolvedBasicObject> = new Map(); + const nativeTokenMap: Map<string, Map<string, ResolvedNativeToken>> = new Map(); + + const PROMISE_CHUNK_SIZE = 100; + + // Get output data in chunks of 100 + for (let i = 0; i < objectsData.length; i += PROMISE_CHUNK_SIZE) { + const chunk = objectsData.slice(i, i + PROMISE_CHUNK_SIZE); + + const promises = chunk.map(async (object) => { + const objectFields = extractMigrationOutputFields(object); + + let groupKey: string | undefined; + if (isTimelockUnlockCondition) { + const timestamp = objectFields.timelock_uc?.fields.unix_time.toString(); + groupKey = timestamp; + } else { + const timestamp = objectFields.expiration_uc?.fields.unix_time.toString(); + // Timestamp can be undefined if the object was timelocked and is now unlocked + // and it doesn't have an expiration unlock condition + groupKey = timestamp ?? MIGRATION_OBJECT_WITHOUT_UC_KEY; + } + + if (!groupKey) { + return; + } + + if (object.type === STARDUST_BASIC_OUTPUT_TYPE) { + const existing = basicObjectMap.get(groupKey); + const gasReturn = extractOwnedStorageDepositReturnAmount( + objectFields, + currentAddress, + ); + const newBalance = + (existing ? existing.balance : 0n) + + BigInt(objectFields.balance) + + (gasReturn ?? 0n); + + if (existing) { + existing.balance = newBalance; + } else { + const newBasicObject: ResolvedBasicObject = { + balance: newBalance, + unlockConditionTimestamp: groupKey, + type: object.type, + commonObjectType: CommonMigrationObjectType.Basic, + output: object, + uniqueId: objectFields.id.id, + }; + basicObjectMap.set(groupKey, newBasicObject); + flatObjects.push(newBasicObject); + } + } else if (object.type === STARDUST_NFT_OUTPUT_TYPE) { + const nftDetails = await getNftDetails(object, groupKey, client); + flatObjects.push(...nftDetails); + } + + if (!nativeTokenMap.has(groupKey)) { + nativeTokenMap.set(groupKey, new Map()); + } + + const tokenGroup = nativeTokenMap.get(groupKey)!; + const objectNativeTokens = await extractNativeTokensFromObject( + object, + client, + groupKey, + ); + + for (const token of objectNativeTokens) { + const existing = tokenGroup.get(token.name); + + if (existing) { + existing.balance += token.balance; + } else { + tokenGroup.set(token.name, token); + flatObjects.push(token); + } + } + }); + + // Wait for all promises in the chunk to resolve + await Promise.all(promises); + } + + return flatObjects; +} + +export function sortStardustResolvedObjectsByExpiration( + objects: ResolvedObjectTypes[], + currentEpochStartMs: number, + currentEpochEndMs: number, +): ResolvedObjectTypes[] { + const currentTimestampMs = Date.now(); + + return objects.sort((a, b) => { + const aIsNoExpiration = a.unlockConditionTimestamp === MIGRATION_OBJECT_WITHOUT_UC_KEY; + const bIsNoExpiration = b.unlockConditionTimestamp === MIGRATION_OBJECT_WITHOUT_UC_KEY; + + // No-expiration objects should be last + if (aIsNoExpiration && bIsNoExpiration) return 0; + if (aIsNoExpiration) return 1; + if (bIsNoExpiration) return -1; + + const aTimestampMs = parseInt(a.unlockConditionTimestamp) * MILLISECONDS_PER_SECOND; + const bTimestampMs = parseInt(b.unlockConditionTimestamp) * MILLISECONDS_PER_SECOND; + + const aIsFromPreviousEpoch = aTimestampMs < currentEpochStartMs; + const bIsFromPreviousEpoch = bTimestampMs < currentEpochStartMs; + + // Objects from a past epoch should be last (but before no-expiration objects) + if (aIsFromPreviousEpoch && bIsFromPreviousEpoch) return 0; + if (aIsFromPreviousEpoch) return 1; + if (bIsFromPreviousEpoch) return -1; + + const aIsInFutureEpoch = aTimestampMs > currentEpochEndMs; + const bIsInFutureEpoch = bTimestampMs > currentEpochEndMs; + + const aOutputTimestampMs = aIsInFutureEpoch ? aTimestampMs : currentEpochEndMs; + const bOutputTimestampMs = bIsInFutureEpoch ? bTimestampMs : currentEpochEndMs; + + // Objects closer to the calculated `outputTimestampMs` should be first + const aProximity = Math.abs(aOutputTimestampMs - currentTimestampMs); + const bProximity = Math.abs(bOutputTimestampMs - currentTimestampMs); + + return aProximity - bProximity; + }); +} + +async function getNftDetails( + object: IotaObjectData, + expirationKey: UnlockConditionTimestamp, + client: IotaClient, +): Promise<ResolvedNftObject[]> { + const objectFields = extractMigrationOutputFields(object); + const nftOutputDynamicFields = await client.getDynamicFields({ + parentId: objectFields.id.id, + }); + + const nftDetails: ResolvedNftObject[] = []; + for (const nft of nftOutputDynamicFields.data) { + const nftObject = await client.getObject({ + id: nft.objectId, + options: { showDisplay: true }, + }); + + if (!nftObject?.data?.display?.data) { + continue; + } + + nftDetails.push({ + balance: BigInt(objectFields.balance), + name: nftObject.data.display.data.name ?? '', + image_url: nftObject.data.display.data.image_url ?? '', + commonObjectType: CommonMigrationObjectType.Nft, + unlockConditionTimestamp: expirationKey, + output: object, + uniqueId: nftObject.data.objectId, + }); + } + + return nftDetails; +} + +async function extractNativeTokensFromObject( + object: IotaObjectData, + client: IotaClient, + expirationKey: UnlockConditionTimestamp, +): Promise<ResolvedNativeToken[]> { + const fields = extractMigrationOutputFields(object); + const bagId = fields.native_tokens.fields.id.id; + const bagSize = Number(fields.native_tokens.fields.size); + + const nativeTokens = bagSize > 0 ? await getNativeTokensFromBag(bagId, client) : []; + const result: ResolvedNativeToken[] = []; + + for (const nativeToken of nativeTokens) { + const nativeTokenParentId = fields.native_tokens.fields.id.id; + const objectDynamic = await client.getDynamicFieldObject({ + parentId: nativeTokenParentId, + name: nativeToken.name, + }); + + if (objectDynamic?.data?.content && 'fields' in objectDynamic.data.content) { + const nativeTokenFields = objectDynamic.data.content.fields as { + name: string; + value: string; + id: { id: string }; + }; + const tokenStruct = extractObjectTypeStruct(nativeTokenFields.name); + const tokenName = tokenStruct[2]; + const balance = BigInt(nativeTokenFields.value); + + result.push({ + name: tokenName, + balance, + coinType: nativeTokenFields.name, + unlockConditionTimestamp: expirationKey, + commonObjectType: CommonMigrationObjectType.NativeToken, + output: object, + uniqueId: nativeTokenFields.id.id, + }); + } + } + + return result; +} diff --git a/apps/wallet-dashboard/lib/utils/migration/groupStardustObjectsByMigrationStatus.ts b/apps/wallet-dashboard/lib/utils/migration/groupStardustObjectsByMigrationStatus.ts new file mode 100644 index 00000000000..b10f1cf4218 --- /dev/null +++ b/apps/wallet-dashboard/lib/utils/migration/groupStardustObjectsByMigrationStatus.ts @@ -0,0 +1,151 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { CommonOutputObjectWithUc, MILLISECONDS_PER_SECOND } from '@iota/core'; +import { IotaObjectData } from '@iota/iota-sdk/client'; + +export type StardustMigrationGroupedObjects = { + migratable: IotaObjectData[]; + timelocked: IotaObjectData[]; +}; + +export function groupStardustObjectsByMigrationStatus( + stardustOutputObjects: IotaObjectData[], + epochTimestampMs: number, + address: string, +): StardustMigrationGroupedObjects { + const migratable: IotaObjectData[] = []; + const timelocked: IotaObjectData[] = []; + + const epochUnix = epochTimestampMs / MILLISECONDS_PER_SECOND; + + for (const outputObject of stardustOutputObjects) { + const outputObjectFields = extractMigrationOutputFields(outputObject); + + if ( + outputObjectFields.timelock_uc && + outputObjectFields.timelock_uc.fields.unix_time > epochUnix + ) { + timelocked.push(outputObject); + continue; + } + + if (outputObjectFields.expiration_uc) { + const unlockableAddress = + outputObjectFields.expiration_uc.fields.unix_time <= epochUnix + ? outputObjectFields.expiration_uc.fields.return_address + : outputObjectFields.expiration_uc.fields.owner; + + if (unlockableAddress !== address) { + continue; + } + } + + migratable.push(outputObject); + } + + return { migratable, timelocked }; +} + +interface MigratableObjectsData { + totalNativeTokens: number; + totalVisualAssets: number; + totalIotaAmount: bigint; + totalNotOwnedStorageDepositReturnAmount: bigint; +} + +interface SummarizeMigrationObjectParams { + basicOutputs: IotaObjectData[] | undefined; + nftOutputs: IotaObjectData[] | undefined; + address: string; +} + +export function summarizeMigratableObjectValues({ + basicOutputs = [], + nftOutputs = [], + address, +}: SummarizeMigrationObjectParams): MigratableObjectsData { + let totalNativeTokens = 0; + let totalIotaAmount: bigint = 0n; + let totalNotOwnedStorageDepositReturnAmount: bigint = 0n; + + const totalVisualAssets = nftOutputs.length; + const outputObjects = [...basicOutputs, ...nftOutputs]; + + for (const output of outputObjects) { + const outputObjectFields = extractMigrationOutputFields(output); + + totalIotaAmount += BigInt(outputObjectFields.balance); + totalNativeTokens += parseInt(outputObjectFields.native_tokens.fields.size); + totalIotaAmount += + extractOwnedStorageDepositReturnAmount(outputObjectFields, address) || 0n; + totalNotOwnedStorageDepositReturnAmount += + extractNotOwnedStorageDepositReturnAmount(outputObjectFields, address) || 0n; + } + + return { + totalNativeTokens, + totalVisualAssets, + totalIotaAmount, + totalNotOwnedStorageDepositReturnAmount, + }; +} + +interface UnmmigratableObjectsData { + totalTimelockedObjects: number; +} + +export function summarizeTimelockedObjectValues({ + basicOutputs = [], + nftOutputs = [], +}: Omit<SummarizeMigrationObjectParams, 'address'>): UnmmigratableObjectsData { + const basicObjects = basicOutputs.length; + const nftObjects = nftOutputs.length; + let nativeTokens = 0; + + for (const output of [...basicOutputs, ...nftOutputs]) { + const outputObjectFields = extractMigrationOutputFields(output); + + nativeTokens += parseInt(outputObjectFields.native_tokens.fields.size); + } + + const totalTimelockedObjects = basicObjects + nativeTokens + nftObjects; + + return { totalTimelockedObjects }; +} + +export function extractOwnedStorageDepositReturnAmount( + { storage_deposit_return_uc }: CommonOutputObjectWithUc, + address: string, +): bigint | null { + if ( + storage_deposit_return_uc?.fields && + storage_deposit_return_uc?.fields.return_address === address + ) { + return BigInt(storage_deposit_return_uc?.fields.return_amount); + } + return null; +} + +export function extractMigrationOutputFields( + outputObject: IotaObjectData, +): CommonOutputObjectWithUc { + return ( + outputObject.content as unknown as { + fields: CommonOutputObjectWithUc; + } + ).fields; +} + +export function extractNotOwnedStorageDepositReturnAmount( + { storage_deposit_return_uc }: CommonOutputObjectWithUc, + address: string, +): bigint | null { + if ( + storage_deposit_return_uc?.fields && + storage_deposit_return_uc?.fields.return_address !== address + ) { + return BigInt(storage_deposit_return_uc?.fields.return_amount); + } + return null; +} diff --git a/apps/wallet-dashboard/lib/utils/migration/index.ts b/apps/wallet-dashboard/lib/utils/migration/index.ts new file mode 100644 index 00000000000..8dbde02f32c --- /dev/null +++ b/apps/wallet-dashboard/lib/utils/migration/index.ts @@ -0,0 +1,6 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './filterMigrationObjectDetails'; +export * from './groupMigrationObjects'; +export * from './groupStardustObjectsByMigrationStatus'; diff --git a/apps/wallet-dashboard/lib/utils/timelock.ts b/apps/wallet-dashboard/lib/utils/timelock.ts index 90c77c0ba9f..f8e06340922 100644 --- a/apps/wallet-dashboard/lib/utils/timelock.ts +++ b/apps/wallet-dashboard/lib/utils/timelock.ts @@ -42,14 +42,14 @@ export function mapTimelockObjects(iotaObjects: IotaObjectData[]): TimelockedObj if (!iotaObject?.content?.dataType || iotaObject.content.dataType !== 'moveObject') { return { id: { id: '' }, - locked: { value: 0 }, + locked: { value: 0n }, expirationTimestampMs: 0, }; } const fields = iotaObject.content.fields as unknown as TimelockedIotaResponse; return { id: fields.id, - locked: { value: Number(fields.locked) }, + locked: { value: BigInt(fields.locked) }, expirationTimestampMs: Number(fields.expiration_timestamp_ms), label: fields.label, }; diff --git a/apps/wallet-dashboard/lib/utils/vesting/vesting.spec.ts b/apps/wallet-dashboard/lib/utils/vesting/vesting.spec.ts index e0bb1f37bd5..3612418d48b 100644 --- a/apps/wallet-dashboard/lib/utils/vesting/vesting.spec.ts +++ b/apps/wallet-dashboard/lib/utils/vesting/vesting.spec.ts @@ -21,10 +21,6 @@ import { const MOCKED_CURRENT_EPOCH_TIMESTAMP = Date.now() + MILLISECONDS_PER_HOUR * 6; // 6 hours later -function bigIntRound(n: number) { - return BigInt(Math.floor(n)); -} - describe('get last supply increase vesting payout', () => { it('should get the object with highest expirationTimestampMs', () => { const timelockedObjects = MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS; @@ -48,7 +44,7 @@ describe('get last supply increase vesting payout', () => { describe('get supply increase user type', () => { it('should return staker, if last payout is two years away from vesting starting year (2023)', () => { const vestingPayout: SupplyIncreaseVestingPayout = { - amount: 1000, + amount: 1000n, expirationTimestampMs: 1735689661000, // Wednesday, 1 January 2025 00:01:01 }; const userType = getSupplyIncreaseVestingUserType([vestingPayout]); @@ -57,7 +53,7 @@ describe('get supply increase user type', () => { it('should return entity, if last payout is more than two years away from vesting starting year (2023)', () => { const vestingPayout: SupplyIncreaseVestingPayout = { - amount: 1000, + amount: 1000n, expirationTimestampMs: 1798761661000, // Friday, 1 January 2027 00:01:01 }; const userType = getSupplyIncreaseVestingUserType([vestingPayout]); @@ -125,12 +121,12 @@ describe('vesting overview', () => { it('should get correct vesting overview data with timelocked objects', () => { const timelockedObjects = MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS; const lastPayout = timelockedObjects[timelockedObjects.length - 1]; - const totalAmount = bigIntRound( - (SUPPLY_INCREASE_STAKER_VESTING_DURATION * - SUPPLY_INCREASE_VESTING_PAYOUTS_IN_1_YEAR * + const totalAmount = + (BigInt(SUPPLY_INCREASE_STAKER_VESTING_DURATION) * + BigInt(SUPPLY_INCREASE_VESTING_PAYOUTS_IN_1_YEAR) * + 10n * lastPayout.locked.value) / - 0.9, - ); + 9n; const vestingOverview = getVestingOverview(timelockedObjects, Date.now()); expect(vestingOverview.totalVested).toEqual(totalAmount); @@ -145,9 +141,7 @@ describe('vesting overview', () => { const lockedAmount = vestingPortfolio.reduce( (acc, current) => - current.expirationTimestampMs > Date.now() - ? acc + bigIntRound(current.amount) - : acc, + current.expirationTimestampMs > Date.now() ? acc + current.amount : acc, 0n, ); @@ -159,16 +153,12 @@ describe('vesting overview', () => { const lockedObjectsAmount = timelockedObjects.reduce( (acc, current) => - current.expirationTimestampMs > Date.now() - ? acc + bigIntRound(current.locked.value) - : acc, + current.expirationTimestampMs > Date.now() ? acc + current.locked.value : acc, 0n, ); const unlockedObjectsAmount = timelockedObjects.reduce( (acc, current) => - current.expirationTimestampMs <= Date.now() - ? acc + bigIntRound(current.locked.value) - : acc, + current.expirationTimestampMs <= Date.now() ? acc + current.locked.value : acc, 0n, ); @@ -182,20 +172,20 @@ describe('vesting overview', () => { formatDelegatedTimelockedStake(timelockedStakedObjects); const lastPayout = extendedTimelockedStakedObjects[extendedTimelockedStakedObjects.length - 1]; - const lastPayoutValue = Number(lastPayout.principal); - const totalAmount = bigIntRound( - (SUPPLY_INCREASE_STAKER_VESTING_DURATION * - SUPPLY_INCREASE_VESTING_PAYOUTS_IN_1_YEAR * - lastPayoutValue) / - 0.9, - ); + const lastPayoutValue = BigInt(lastPayout.principal); + const totalAmount = + (BigInt(SUPPLY_INCREASE_STAKER_VESTING_DURATION) * + BigInt(SUPPLY_INCREASE_VESTING_PAYOUTS_IN_1_YEAR) * + lastPayoutValue * + 10n) / + 9n; const vestingOverview = getVestingOverview(extendedTimelockedStakedObjects, Date.now()); expect(vestingOverview.totalVested).toEqual(totalAmount); const vestingPortfolio = buildVestingPortfolio( { - amount: lastPayoutValue, + amount: BigInt(lastPayoutValue), expirationTimestampMs: Number(lastPayout.expirationTimestampMs), }, Date.now(), @@ -203,9 +193,7 @@ describe('vesting overview', () => { const lockedAmount = vestingPortfolio.reduce( (acc, current) => - current.expirationTimestampMs > Date.now() - ? acc + bigIntRound(current.amount) - : acc, + current.expirationTimestampMs > Date.now() ? acc + current.amount : acc, 0n, ); @@ -215,7 +203,7 @@ describe('vesting overview', () => { let totalStaked = 0n; for (const timelockedStakedObject of timelockedStakedObjects) { const stakesAmount = timelockedStakedObject.stakes.reduce( - (acc, current) => acc + bigIntRound(Number(current.principal)), + (acc, current) => acc + BigInt(current.principal), 0n, ); totalStaked += stakesAmount; @@ -239,12 +227,12 @@ describe('vesting overview', () => { mixedObjects, MOCKED_CURRENT_EPOCH_TIMESTAMP, )!; - const totalAmount = bigIntRound( - (SUPPLY_INCREASE_STAKER_VESTING_DURATION * - SUPPLY_INCREASE_VESTING_PAYOUTS_IN_1_YEAR * + const totalAmount = + (BigInt(SUPPLY_INCREASE_STAKER_VESTING_DURATION) * + BigInt(SUPPLY_INCREASE_VESTING_PAYOUTS_IN_1_YEAR) * + 10n * lastPayout.amount) / - 0.9, - ); + 9n; const vestingOverview = getVestingOverview(mixedObjects, Date.now()); expect(vestingOverview.totalVested).toEqual(totalAmount); @@ -259,9 +247,7 @@ describe('vesting overview', () => { const lockedAmount = vestingPortfolio.reduce( (acc, current) => - current.expirationTimestampMs > Date.now() - ? acc + bigIntRound(current.amount) - : acc, + current.expirationTimestampMs > Date.now() ? acc + current.amount : acc, 0n, ); @@ -269,7 +255,7 @@ describe('vesting overview', () => { expect(vestingOverview.totalUnlocked).toEqual(totalAmount - lockedAmount); const totalStaked = extendedTimelockedStakedObjects.reduce( - (acc, current) => acc + bigIntRound(Number(current.principal)), + (acc, current) => acc + BigInt(current.principal), 0n, ); @@ -278,16 +264,12 @@ describe('vesting overview', () => { const timelockObjects = mixedObjects.filter(isTimelockedObject); const availableClaiming = timelockObjects.reduce( (acc, current) => - current.expirationTimestampMs <= Date.now() - ? acc + bigIntRound(current.locked.value) - : acc, + current.expirationTimestampMs <= Date.now() ? acc + current.locked.value : acc, 0n, ); const availableStaking = timelockObjects.reduce( (acc, current) => - current.expirationTimestampMs > Date.now() - ? acc + bigIntRound(current.locked.value) - : acc, + current.expirationTimestampMs > Date.now() ? acc + current.locked.value : acc, 0n, ); expect(vestingOverview.availableClaiming).toEqual(availableClaiming); diff --git a/apps/wallet-dashboard/lib/utils/vesting/vesting.ts b/apps/wallet-dashboard/lib/utils/vesting/vesting.ts index e0bb8a29158..374d9a19204 100644 --- a/apps/wallet-dashboard/lib/utils/vesting/vesting.ts +++ b/apps/wallet-dashboard/lib/utils/vesting/vesting.ts @@ -53,7 +53,7 @@ export function getLatestOrEarliestSupplyIncreaseVestingPayout( } function addVestingPayoutToSupplyIncreaseMap( - value: number, + value: bigint, expirationTimestampMs: number, supplyIncreaseMap: Map<number, SupplyIncreaseVestingPayout>, ) { @@ -85,7 +85,7 @@ function supplyIncreaseVestingObjectsToPayoutMap( expirationToVestingPayout, ); } else if (isTimelockedStakedIota(vestingObject)) { - const objectValue = Number(vestingObject.principal); + const objectValue = BigInt(vestingObject.principal); const expirationTimestampMs = Number(vestingObject.expirationTimestampMs); addVestingPayoutToSupplyIncreaseMap( objectValue, @@ -162,7 +162,7 @@ export function getVestingOverview( const userType = getSupplyIncreaseVestingUserType([latestPayout]); const vestingPayoutsCount = getSupplyIncreaseVestingPayoutsCount(userType!); // Note: we add the initial payout to the total rewards, 10% of the total rewards are paid out immediately - const totalVestedAmount = BigInt(Math.floor((vestingPayoutsCount * latestPayout.amount) / 0.9)); + const totalVestedAmount = (BigInt(vestingPayoutsCount) * latestPayout.amount * 10n) / 9n; const vestingPortfolio = buildSupplyIncreaseVestingSchedule( latestPayout, currentEpochTimestamp, @@ -326,7 +326,7 @@ export function prepareObjectsForTimelockedStakingTransaction( targetAmount: bigint, currentEpochMs: string, ): GroupedTimelockObject[] { - if (Number(targetAmount) === 0) { + if (targetAmount === 0n) { return []; } const timelockedMapped = mapTimelockObjects(timelockedObjects); @@ -368,7 +368,7 @@ export function prepareObjectsForTimelockedStakingTransaction( const remainingAmount = totalLocked - targetAmount; // Add splitAmount property to the vesting objects that need to be split - if (remainingAmount > 0) { + if (remainingAmount > 0n) { selectedGroupedTimelockObjects = adjustSplitAmountsInGroupedTimelockObjects( selectedGroupedTimelockObjects, remainingAmount, diff --git a/apps/wallet-dashboard/next.config.mjs b/apps/wallet-dashboard/next.config.mjs index a7417e613fd..533cbcccda9 100644 --- a/apps/wallet-dashboard/next.config.mjs +++ b/apps/wallet-dashboard/next.config.mjs @@ -1,6 +1,9 @@ // Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +import { execSync } from 'child_process'; +const NEXT_PUBLIC_DASHBOARD_REV = execSync('git rev-parse HEAD').toString().trim().toString(); + /** @type {import('next').NextConfig} */ const nextConfig = { async redirects() { @@ -16,6 +19,9 @@ const nextConfig = { // Remove this domain when fetching data domains: ['d315pvdvxi2gex.cloudfront.net'], }, + env: { + NEXT_PUBLIC_DASHBOARD_REV, + }, }; export default nextConfig; diff --git a/apps/wallet-dashboard/package.json b/apps/wallet-dashboard/package.json index 3cf781bca2f..9cff8865c4d 100644 --- a/apps/wallet-dashboard/package.json +++ b/apps/wallet-dashboard/package.json @@ -22,11 +22,12 @@ "@iota/dapp-kit": "workspace:*", "@iota/iota-sdk": "workspace:*", "@iota/ui-icons": "workspace:*", + "@iota/wallet-standard": "workspace:*", "@tanstack/react-query": "^5.50.1", "@tanstack/react-virtual": "^3.5.0", "clsx": "^2.1.1", "formik": "^2.4.2", - "next": "14.2.10", + "next": "14.2.15", "react": "^18.3.1", "react-hot-toast": "^2.4.1", "zustand": "^4.4.1" diff --git a/apps/wallet-dashboard/providers/AppProviders.tsx b/apps/wallet-dashboard/providers/AppProviders.tsx index 27744398f86..26be321a43b 100644 --- a/apps/wallet-dashboard/providers/AppProviders.tsx +++ b/apps/wallet-dashboard/providers/AppProviders.tsx @@ -3,7 +3,7 @@ 'use client'; -import { PopupProvider, Toaster } from '@/components'; +import { Toaster } from '@/components'; import { GrowthBookProvider } from '@growthbook/growthbook-react'; import { IotaClientProvider, lightTheme, darkTheme, WalletProvider } from '@iota/dapp-kit'; import { getAllNetworks, getDefaultNetwork } from '@iota/iota-sdk/client'; @@ -11,7 +11,6 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { useState } from 'react'; import { KioskClientProvider } from '@iota/core'; import { growthbook } from '@/lib/utils'; -import { Popup } from '@/components/Popup'; import { ThemeProvider } from '@iota/core'; growthbook.init(); @@ -20,11 +19,18 @@ export function AppProviders({ children }: React.PropsWithChildren) { const [queryClient] = useState(() => new QueryClient()); const allNetworks = getAllNetworks(); const defaultNetwork = getDefaultNetwork(); - + function handleNetworkChange() { + queryClient.resetQueries(); + queryClient.clear(); + } return ( <GrowthBookProvider growthbook={growthbook}> <QueryClientProvider client={queryClient}> - <IotaClientProvider networks={allNetworks} defaultNetwork={defaultNetwork}> + <IotaClientProvider + networks={allNetworks} + defaultNetwork={defaultNetwork} + onNetworkChange={handleNetworkChange} + > <KioskClientProvider> <WalletProvider autoConnect={true} @@ -39,11 +45,8 @@ export function AppProviders({ children }: React.PropsWithChildren) { ]} > <ThemeProvider appId="iota-dashboard"> - <PopupProvider> - {children} - <Toaster /> - <Popup /> - </PopupProvider> + {children} + <Toaster /> </ThemeProvider> </WalletProvider> </KioskClientProvider> diff --git a/apps/wallet/package.json b/apps/wallet/package.json index a240f6170bb..59ad3cd44ec 100644 --- a/apps/wallet/package.json +++ b/apps/wallet/package.json @@ -1,6 +1,6 @@ { "name": "iota-wallet", - "version": "0.3.1", + "version": "0.4.0", "private": true, "description": "A wallet for IOTA", "main": "./dist/ui.js", @@ -81,7 +81,7 @@ "vite": "^5.3.3", "vite-tsconfig-paths": "^4.2.0", "vitest": "^2.0.1", - "web-ext": "^7.6.2", + "web-ext": "^8.3.0", "webpack": "^5.79.0", "webpack-cli": "^5.0.1", "webpack-merge": "^5.8.0" @@ -117,7 +117,7 @@ "@reduxjs/toolkit": "^1.9.5", "@scure/bip32": "^1.4.0", "@scure/bip39": "^1.3.0", - "@sentry/browser": "^7.61.0", + "@sentry/browser": "^7.120.2", "@tanstack/react-query": "^5.50.1", "@tanstack/react-query-persist-client": "^5.40.1", "axios": "^1.7.4", @@ -132,7 +132,6 @@ "formik": "^2.4.2", "framer-motion": "^10.12.22", "idb-keyval": "^6.2.1", - "jose": "^5.2.3", "mitt": "^3.0.1", "poseidon-lite": "^0.2.0", "react": "^18.3.1", diff --git a/apps/wallet/src/ui/app/components/accounts/AccountIcon.tsx b/apps/wallet/src/ui/app/components/accounts/AccountIcon.tsx index ffcc77d28dc..5ae5de338f1 100644 --- a/apps/wallet/src/ui/app/components/accounts/AccountIcon.tsx +++ b/apps/wallet/src/ui/app/components/accounts/AccountIcon.tsx @@ -11,7 +11,7 @@ interface AccountIconProps { export function AccountIcon({ account }: AccountIconProps) { if (account.type === AccountType.LedgerDerived) { - return <Ledger className="h-5 w-5" />; + return <Ledger className="h-5 w-5 text-neutral-10 dark:text-neutral-92" />; } - return <IotaLogoMark className="h-5 w-5" />; + return <IotaLogoMark className="h-5 w-5 text-neutral-10 dark:text-neutral-92" />; } diff --git a/apps/wallet/src/ui/app/components/receipt-card/TxnAmount.tsx b/apps/wallet/src/ui/app/components/receipt-card/TxnAmount.tsx index 85d4ff481e0..cb17eab7d23 100644 --- a/apps/wallet/src/ui/app/components/receipt-card/TxnAmount.tsx +++ b/apps/wallet/src/ui/app/components/receipt-card/TxnAmount.tsx @@ -28,7 +28,7 @@ export function TxnAmount({ amount, coinType, subtitle, approximation }: TxnAmou return Number(amount) !== 0 ? ( <Card type={CardType.Filled}> <CardImage type={ImageType.BgSolid}> - <CoinIcon coinType={coinType} rounded size={ImageIconSize.Large} hasCoinWrapper /> + <CoinIcon coinType={coinType} rounded size={ImageIconSize.Small} /> </CardImage> <CardBody title={`${approximation ? '~' : ''}${formatAmount} ${symbol}`} diff --git a/apps/wallet/src/ui/app/pages/accounts/WelcomePage.tsx b/apps/wallet/src/ui/app/pages/accounts/WelcomePage.tsx index a9ac8919e66..c9f6d36ddd7 100644 --- a/apps/wallet/src/ui/app/pages/accounts/WelcomePage.tsx +++ b/apps/wallet/src/ui/app/pages/accounts/WelcomePage.tsx @@ -23,7 +23,11 @@ export function WelcomePage() { return ( <Loading loading={isInitializedLoading || isFullscreenGuardLoading}> <div className="flex h-full w-full flex-col items-center justify-between bg-neutral-100 px-md py-2xl shadow-wallet-content dark:bg-neutral-6"> - <IotaLogoWeb width={130} height={32} /> + <IotaLogoWeb + width={130} + height={32} + className="text-neutral-10 dark:text-neutral-92" + /> <div className="flex flex-col items-center gap-8 text-center"> <div className="flex flex-col items-center gap-4"> <span className="text-headline-sm text-neutral-40">Welcome to</span> diff --git a/consensus/core/src/authority_node.rs b/consensus/core/src/authority_node.rs index b07c487bfac..70f81c271fb 100644 --- a/consensus/core/src/authority_node.rs +++ b/consensus/core/src/authority_node.rs @@ -36,8 +36,8 @@ use crate::{ /// ConsensusAuthority is used by Iota to manage the lifetime of AuthorityNode. /// It hides the details of the implementation from the caller, /// MysticetiManager. -#[allow(private_interfaces)] pub enum ConsensusAuthority { + #[expect(private_interfaces)] WithTonic(AuthorityNode<TonicManager>), } @@ -100,7 +100,7 @@ impl ConsensusAuthority { } } - #[allow(unused)] + #[cfg(test)] fn sync_last_known_own_block_enabled(&self) -> bool { match self { Self::WithTonic(authority) => authority.sync_last_known_own_block, @@ -124,6 +124,7 @@ where broadcaster: Option<Broadcaster>, subscriber: Option<Subscriber<N::Client, AuthorityService<ChannelCoreThreadDispatcher>>>, network_manager: N, + #[cfg(test)] sync_last_known_own_block: bool, } @@ -306,6 +307,7 @@ where broadcaster, subscriber, network_manager, + #[cfg(test)] sync_last_known_own_block, } } diff --git a/consensus/core/src/base_committer.rs b/consensus/core/src/base_committer.rs index 2440f2c513a..bdc9188d1b1 100644 --- a/consensus/core/src/base_committer.rs +++ b/consensus/core/src/base_committer.rs @@ -427,19 +427,19 @@ mod base_committer_builder { } } - #[allow(unused)] + #[expect(unused)] pub(crate) fn with_wave_length(mut self, wave_length: u32) -> Self { self.wave_length = wave_length; self } - #[allow(unused)] + #[expect(unused)] pub(crate) fn with_leader_offset(mut self, leader_offset: u32) -> Self { self.leader_offset = leader_offset; self } - #[allow(unused)] + #[expect(unused)] pub(crate) fn with_round_offset(mut self, round_offset: u32) -> Self { self.round_offset = round_offset; self @@ -447,9 +447,9 @@ mod base_committer_builder { pub(crate) fn build(self) -> BaseCommitter { let options = BaseCommitterOptions { - wave_length: DEFAULT_WAVE_LENGTH, - leader_offset: 0, - round_offset: 0, + wave_length: self.wave_length, + leader_offset: self.leader_offset, + round_offset: self.round_offset, }; BaseCommitter::new( self.context.clone(), diff --git a/consensus/core/src/block_verifier.rs b/consensus/core/src/block_verifier.rs index 74b7a8e4583..843a495fe4d 100644 --- a/consensus/core/src/block_verifier.rs +++ b/consensus/core/src/block_verifier.rs @@ -206,9 +206,10 @@ impl BlockVerifier for SignedBlockVerifier { } } -#[allow(unused)] +#[cfg(test)] pub(crate) struct NoopBlockVerifier; +#[cfg(test)] impl BlockVerifier for NoopBlockVerifier { fn verify(&self, _block: &SignedBlock) -> ConsensusResult<()> { Ok(()) diff --git a/consensus/core/src/commit.rs b/consensus/core/src/commit.rs index 9135fd342e1..fc2221a84b0 100644 --- a/consensus/core/src/commit.rs +++ b/consensus/core/src/commit.rs @@ -91,7 +91,6 @@ impl Commit { pub(crate) trait CommitAPI { fn round(&self) -> Round; fn index(&self) -> CommitIndex; - #[allow(dead_code)] fn previous_digest(&self) -> CommitDigest; fn timestamp_ms(&self) -> BlockTimestampMs; fn leader(&self) -> BlockRef; diff --git a/consensus/core/src/core.rs b/consensus/core/src/core.rs index 8031ddd064a..1446fb656e4 100644 --- a/consensus/core/src/core.rs +++ b/consensus/core/src/core.rs @@ -849,7 +849,7 @@ pub(crate) struct CoreTextFixture { pub core: Core, pub signal_receivers: CoreSignalsReceivers, pub block_receiver: broadcast::Receiver<VerifiedBlock>, - #[allow(unused)] + #[expect(unused)] pub commit_receiver: UnboundedReceiver<CommittedSubDag>, pub store: Arc<MemStore>, } diff --git a/consensus/core/src/leader_schedule.rs b/consensus/core/src/leader_schedule.rs index 62b9e522b98..871f9f5c1ea 100644 --- a/consensus/core/src/leader_schedule.rs +++ b/consensus/core/src/leader_schedule.rs @@ -298,7 +298,7 @@ impl LeaderSwapTable { context: Arc<Context>, // Ignore linter warning in simtests. // TODO: maybe override protocol configs in tests for swap_stake_threshold, and call new(). - #[allow(unused_variables)] swap_stake_threshold: u64, + #[cfg_attr(msim, expect(unused_variables))] swap_stake_threshold: u64, commit_index: CommitIndex, reputation_scores: ReputationScores, ) -> Self { diff --git a/consensus/core/src/leader_scoring_strategy.rs b/consensus/core/src/leader_scoring_strategy.rs index 72b54eb4e9a..366ad857bdf 100644 --- a/consensus/core/src/leader_scoring_strategy.rs +++ b/consensus/core/src/leader_scoring_strategy.rs @@ -11,13 +11,13 @@ use crate::{ stake_aggregator::{QuorumThreshold, StakeAggregator}, }; -#[allow(unused)] pub(crate) trait ScoringStrategy: Send + Sync { fn calculate_scores_for_leader(&self, subdag: &UnscoredSubdag, leader_slot: Slot) -> Vec<u64>; // Based on the scoring strategy there is a minimum number of rounds required // for the scores to be calculated. This method allows that to be set by the // scoring strategy. + #[expect(unused)] fn leader_scoring_round_range(&self, min_round: u32, max_round: u32) -> Range<u32>; } diff --git a/consensus/core/src/network/metrics_layer.rs b/consensus/core/src/network/metrics_layer.rs index c9949830dcf..01c35cc31c5 100644 --- a/consensus/core/src/network/metrics_layer.rs +++ b/consensus/core/src/network/metrics_layer.rs @@ -79,7 +79,7 @@ impl MetricsCallbackMaker { pub(crate) struct MetricsResponseCallback { metrics: Arc<NetworkRouteMetrics>, // The timer is held on to and "observed" once dropped - #[allow(unused)] + #[expect(unused)] timer: HistogramTimer, route: String, excessive_message_size: usize, diff --git a/consensus/core/src/stake_aggregator.rs b/consensus/core/src/stake_aggregator.rs index 4c2a1c8c06a..330939c2873 100644 --- a/consensus/core/src/stake_aggregator.rs +++ b/consensus/core/src/stake_aggregator.rs @@ -12,7 +12,7 @@ pub(crate) trait CommitteeThreshold { pub(crate) struct QuorumThreshold; -#[allow(unused)] +#[cfg(test)] pub(crate) struct ValidityThreshold; impl CommitteeThreshold for QuorumThreshold { @@ -21,6 +21,7 @@ impl CommitteeThreshold for QuorumThreshold { } } +#[cfg(test)] impl CommitteeThreshold for ValidityThreshold { fn is_threshold(committee: &Committee, amount: Stake) -> bool { committee.reached_validity(amount) diff --git a/consensus/core/src/storage/mem_store.rs b/consensus/core/src/storage/mem_store.rs index 656837433f7..602fd2ba4f9 100644 --- a/consensus/core/src/storage/mem_store.rs +++ b/consensus/core/src/storage/mem_store.rs @@ -21,12 +21,10 @@ use crate::{ }; /// In-memory storage for testing. -#[allow(unused)] pub(crate) struct MemStore { inner: RwLock<Inner>, } -#[allow(unused)] struct Inner { blocks: BTreeMap<(Round, AuthorityIndex, BlockDigest), VerifiedBlock>, digests_by_authorities: BTreeSet<(AuthorityIndex, Round, BlockDigest)>, @@ -36,7 +34,6 @@ struct Inner { } impl MemStore { - #[cfg(test)] pub(crate) fn new() -> Self { MemStore { inner: RwLock::new(Inner { diff --git a/consensus/core/src/storage/mod.rs b/consensus/core/src/storage/mod.rs index d83d49cb89e..925ed467fbb 100644 --- a/consensus/core/src/storage/mod.rs +++ b/consensus/core/src/storage/mod.rs @@ -2,6 +2,7 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +#[cfg(test)] pub(crate) mod mem_store; pub(crate) mod rocksdb_store; @@ -12,13 +13,12 @@ use consensus_config::AuthorityIndex; use crate::{ CommitIndex, - block::{BlockRef, Round, Slot, VerifiedBlock}, + block::{BlockRef, Round, VerifiedBlock}, commit::{CommitInfo, CommitRange, CommitRef, TrustedCommit}, error::ConsensusResult, }; /// A common interface for consensus storage. -#[allow(unused)] pub(crate) trait Store: Send + Sync { /// Writes blocks, consensus commits and other data to store atomically. fn write(&self, write_batch: WriteBatch) -> ConsensusResult<()>; @@ -31,7 +31,7 @@ pub(crate) trait Store: Send + Sync { /// Checks whether there is any block at the given slot #[allow(dead_code)] - fn contains_block_at_slot(&self, slot: Slot) -> ConsensusResult<bool>; + fn contains_block_at_slot(&self, slot: crate::block::Slot) -> ConsensusResult<bool>; /// Reads blocks for an authority, from start_round. fn scan_blocks_by_author( diff --git a/consensus/core/src/storage/rocksdb_store.rs b/consensus/core/src/storage/rocksdb_store.rs index 39f18a906b7..aa06216318a 100644 --- a/consensus/core/src/storage/rocksdb_store.rs +++ b/consensus/core/src/storage/rocksdb_store.rs @@ -2,7 +2,7 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use std::{collections::VecDeque, ops::Bound::Included, time::Duration}; +use std::{ops::Bound::Included, time::Duration}; use bytes::Bytes; use consensus_config::AuthorityIndex; @@ -16,7 +16,7 @@ use typed_store::{ use super::{CommitInfo, Store, WriteBatch}; use crate::{ - block::{BlockAPI as _, BlockDigest, BlockRef, Round, SignedBlock, Slot, VerifiedBlock}, + block::{BlockAPI as _, BlockDigest, BlockRef, Round, SignedBlock, VerifiedBlock}, commit::{CommitAPI as _, CommitDigest, CommitIndex, CommitRange, CommitRef, TrustedCommit}, error::{ConsensusError, ConsensusResult}, }; @@ -176,7 +176,7 @@ impl Store for RocksDBStore { Ok(exist) } - fn contains_block_at_slot(&self, slot: Slot) -> ConsensusResult<bool> { + fn contains_block_at_slot(&self, slot: crate::block::Slot) -> ConsensusResult<bool> { let found = self .digests_by_authorities .safe_range_iter(( @@ -222,7 +222,7 @@ impl Store for RocksDBStore { before_round: Option<Round>, ) -> ConsensusResult<Vec<VerifiedBlock>> { let before_round = before_round.unwrap_or(Round::MAX); - let mut refs = VecDeque::new(); + let mut refs = std::collections::VecDeque::new(); for kv in self .digests_by_authorities .safe_range_iter(( diff --git a/consensus/core/src/synchronizer.rs b/consensus/core/src/synchronizer.rs index e928dd246c7..de1c0568960 100644 --- a/consensus/core/src/synchronizer.rs +++ b/consensus/core/src/synchronizer.rs @@ -975,21 +975,16 @@ impl<C: NetworkClient, V: BlockVerifier, D: CoreThreadDispatcher> Synchronizer<C .take(MAX_PEERS * context.parameters.max_blocks_per_fetch) .collect::<Vec<_>>(); - #[allow(unused_mut)] + #[cfg_attr(test, expect(unused_mut))] let mut peers = context .committee .authorities() .filter_map(|(peer_index, _)| (peer_index != context.own_index).then_some(peer_index)) .collect::<Vec<_>>(); - // TODO: probably inject the RNG to allow unit testing - this is a work around - // for now. - cfg_if::cfg_if! { - if #[cfg(not(test))] { - // Shuffle the peers - peers.shuffle(&mut ThreadRng::default()); - } - } + // In test, the order is not randomized + #[cfg(not(test))] + peers.shuffle(&mut ThreadRng::default()); let mut peers = peers.into_iter(); let mut request_futures = FuturesUnordered::new(); diff --git a/consensus/core/src/test_dag_builder.rs b/consensus/core/src/test_dag_builder.rs index 20e4ebe8d79..607c5d65dc8 100644 --- a/consensus/core/src/test_dag_builder.rs +++ b/consensus/core/src/test_dag_builder.rs @@ -76,7 +76,6 @@ use crate::{ /// dag_builder.layer(1).build(); /// dag_builder.print(); // pretty print the entire DAG /// ``` -#[allow(unused)] pub(crate) struct DagBuilder { pub(crate) context: Arc<Context>, pub(crate) leader_schedule: LeaderSchedule, @@ -93,7 +92,6 @@ pub(crate) struct DagBuilder { pipeline: bool, } -#[allow(unused)] impl DagBuilder { pub(crate) fn new(context: Arc<Context>) -> Self { let leader_schedule = LeaderSchedule::new(context.clone(), LeaderSwapTable::default()); @@ -206,25 +204,26 @@ impl DagBuilder { !self.blocks.is_empty(), "No blocks have been created, please make sure that you have called build method" ); - self.blocks - .iter() - .find(|(block_ref, block)| { - block_ref.round == round - && block_ref.author == self.leader_schedule.elect_leader(round, 0) - }) - .map(|(_block_ref, block)| block.clone()) + self.blocks.iter().find_map(|(block_ref, block)| { + (block_ref.round == round + && block_ref.author == self.leader_schedule.elect_leader(round, 0)) + .then_some(block.clone()) + }) } + #[expect(unused)] pub(crate) fn with_wave_length(mut self, wave_length: Round) -> Self { self.wave_length = wave_length; self } + #[expect(unused)] pub(crate) fn with_number_of_leaders(mut self, number_of_leaders: u32) -> Self { self.number_of_leaders = number_of_leaders; self } + #[expect(unused)] pub(crate) fn with_pipeline(mut self, pipeline: bool) -> Self { self.pipeline = pipeline; self @@ -290,7 +289,7 @@ impl DagBuilder { /// Gets all uncommitted blocks in a slot. pub(crate) fn get_uncommitted_blocks_at_slot(&self, slot: Slot) -> Vec<VerifiedBlock> { let mut blocks = vec![]; - for (block_ref, block) in self.blocks.range(( + for (_block_ref, block) in self.blocks.range(( Included(BlockRef::new(slot.round, slot.authority, BlockDigest::MIN)), Included(BlockRef::new(slot.round, slot.authority, BlockDigest::MAX)), )) { @@ -366,7 +365,7 @@ pub struct LayerBuilder<'a> { blocks: Vec<VerifiedBlock>, } -#[allow(unused)] +#[expect(unused)] impl<'a> LayerBuilder<'a> { fn new(dag_builder: &'a mut DagBuilder, start_round: Round) -> Self { assert!(start_round > 0, "genesis round is created by default"); diff --git a/consensus/core/src/transaction.rs b/consensus/core/src/transaction.rs index d2df8a87fe9..f22eeeba635 100644 --- a/consensus/core/src/transaction.rs +++ b/consensus/core/src/transaction.rs @@ -240,9 +240,10 @@ pub enum ValidationError { } /// `NoopTransactionVerifier` accepts all transactions. -#[allow(unused)] +#[cfg(test)] pub(crate) struct NoopTransactionVerifier; +#[cfg(test)] impl TransactionVerifier for NoopTransactionVerifier { fn verify_batch(&self, _batch: &[&[u8]]) -> Result<(), ValidationError> { Ok(()) diff --git a/consensus/core/src/universal_committer.rs b/consensus/core/src/universal_committer.rs index bee37eef92e..970638e868d 100644 --- a/consensus/core/src/universal_committer.rs +++ b/consensus/core/src/universal_committer.rs @@ -182,7 +182,7 @@ pub(crate) mod universal_committer_builder { } } - #[allow(unused)] + #[expect(unused)] pub(crate) fn with_wave_length(mut self, wave_length: Round) -> Self { self.wave_length = wave_length; self diff --git a/crates/bin-version/src/lib.rs b/crates/bin-version/src/lib.rs index 7af360af7fe..76f534af1e1 100644 --- a/crates/bin-version/src/lib.rs +++ b/crates/bin-version/src/lib.rs @@ -12,11 +12,11 @@ pub mod _hidden { /// /// Defines two global `const`s: /// `GIT_REVISION`: The git revision as specified by the `GIT_REVISION` env -/// variable provided at compile time, or the current git revision as -/// discovered by running `git describe`. +/// variable provided at compile time, or the current git revision as discovered +/// by running `git describe`. /// /// `VERSION`: The value of the `CARGO_PKG_VERSION` environment variable -/// concatenated with the value of `GIT_REVISION`. +/// concatenated with the value of `GIT_REVISION` if it is not empty. /// /// Note: This macro must only be used from a binary, if used inside a library /// this will fail to compile. @@ -25,16 +25,19 @@ macro_rules! bin_version { () => { $crate::git_revision!(); - const VERSION: &str = - $crate::_hidden::concat!(env!("CARGO_PKG_VERSION"), "-", GIT_REVISION); + const VERSION: &str = if GIT_REVISION.is_empty() { + env!("CARGO_PKG_VERSION") + } else { + $crate::_hidden::concat!(env!("CARGO_PKG_VERSION"), "-", GIT_REVISION) + }; }; } /// Defines constant that holds the git revision at build time. /// /// `GIT_REVISION`: The git revision as specified by the `GIT_REVISION` env -/// variable provided at compile time, or the current git revision as -/// discovered by running `git describe`. +/// variable provided at compile time, or the current git revision as discovered +/// by running `git describe`. /// /// Note: This macro must only be used from a binary, if used inside a library /// this will fail to compile. diff --git a/crates/iota-analytics-indexer/src/analytics_processor.rs b/crates/iota-analytics-indexer/src/analytics_processor.rs index 7203f5dfe5c..036b25ad188 100644 --- a/crates/iota-analytics-indexer/src/analytics_processor.rs +++ b/crates/iota-analytics-indexer/src/analytics_processor.rs @@ -41,9 +41,9 @@ pub struct AnalyticsProcessor<S: Serialize + ParquetSchema> { metrics: AnalyticsMetrics, config: AnalyticsIndexerConfig, sender: mpsc::Sender<FileMetadata>, - #[allow(dead_code)] + #[expect(dead_code)] kill_sender: oneshot::Sender<()>, - #[allow(dead_code)] + #[expect(dead_code)] max_checkpoint_sender: oneshot::Sender<()>, } diff --git a/crates/iota-archival/src/lib.rs b/crates/iota-archival/src/lib.rs index e4a783b5b25..21938964cc6 100644 --- a/crates/iota-archival/src/lib.rs +++ b/crates/iota-archival/src/lib.rs @@ -52,7 +52,7 @@ use tracing::{error, info}; use crate::reader::{ArchiveReader, ArchiveReaderMetrics}; -#[allow(rustdoc::invalid_html_tags)] +#[expect(rustdoc::invalid_html_tags)] /// Checkpoints and summaries are persisted as blob files. Files are committed /// to local store by duration or file size. Committed files are synced with the /// remote store continuously. Files are optionally compressed with the zstd diff --git a/crates/iota-aws-orchestrator/src/benchmark.rs b/crates/iota-aws-orchestrator/src/benchmark.rs index d53d42e225d..733537adfe7 100644 --- a/crates/iota-aws-orchestrator/src/benchmark.rs +++ b/crates/iota-aws-orchestrator/src/benchmark.rs @@ -103,7 +103,6 @@ pub enum LoadType { /// Search for the breaking point of the L-graph. // TODO: Doesn't work very well, use tps regression as additional signal. - #[allow(dead_code)] Search { /// The initial load to test (and use a baseline). starting_load: usize, diff --git a/crates/iota-aws-orchestrator/src/monitor.rs b/crates/iota-aws-orchestrator/src/monitor.rs index 3a3da4f7a43..335960f8b96 100644 --- a/crates/iota-aws-orchestrator/src/monitor.rs +++ b/crates/iota-aws-orchestrator/src/monitor.rs @@ -220,7 +220,6 @@ impl Grafana { } } -#[allow(dead_code)] /// Bootstrap the grafana with datasource to connect to the given instances. /// NOTE: Only for macOS. Grafana must be installed through homebrew (and not /// from source). Deeper grafana configuration can be done through the @@ -228,7 +227,7 @@ impl Grafana { /// (~/Library/LaunchAgents/homebrew.mxcl.grafana.plist). pub struct LocalGrafana; -#[allow(dead_code)] +#[expect(dead_code)] impl LocalGrafana { /// The default grafana home directory (macOS, homebrew install). const DEFAULT_GRAFANA_HOME: &'static str = "/opt/homebrew/opt/grafana/share/grafana/"; diff --git a/crates/iota-benchmark/src/drivers/mod.rs b/crates/iota-benchmark/src/drivers/mod.rs index d242d6723a3..f442d30a3b8 100644 --- a/crates/iota-benchmark/src/drivers/mod.rs +++ b/crates/iota-benchmark/src/drivers/mod.rs @@ -55,7 +55,6 @@ impl std::fmt::Display for Interval { } // wrapper which implements serde -#[allow(dead_code)] #[derive(Debug)] pub struct HistogramWrapper { histogram: Histogram<u64>, diff --git a/crates/iota-benchmark/src/lib.rs b/crates/iota-benchmark/src/lib.rs index 2b807952799..f715a56f18f 100644 --- a/crates/iota-benchmark/src/lib.rs +++ b/crates/iota-benchmark/src/lib.rs @@ -72,7 +72,7 @@ use tracing::{error, info}; #[derive(Debug)] /// A wrapper on execution results to accommodate different types of /// responses from LocalValidatorAggregatorProxy and FullNodeProxy -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] pub enum ExecutionEffects { CertifiedTransactionEffects(CertifiedTransactionEffects, TransactionEvents), IotaTransactionBlockEffects(IotaTransactionBlockEffects), diff --git a/crates/iota-bridge/src/action_executor.rs b/crates/iota-bridge/src/action_executor.rs index be81c44ed10..a1070ae3aab 100644 --- a/crates/iota-bridge/src/action_executor.rs +++ b/crates/iota-bridge/src/action_executor.rs @@ -695,9 +695,8 @@ mod tests { #[tokio::test] #[ignore = "https://github.com/iotaledger/iota/issues/3224"] async fn test_onchain_execution_loop() { - let ( + let SetupData { signing_tx, - _execution_tx, iota_client_mock, mut tx_subscription, store, @@ -707,12 +706,11 @@ mod tests { mock1, mock2, mock3, - _handles, gas_object_ref, iota_address, iota_token_type_tags, - _bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let (action_certificate, _, _) = get_bridge_authority_approved_action( vec![&mock0, &mock1, &mock2, &mock3], vec![&secrets[0], &secrets[1], &secrets[2], &secrets[3]], @@ -903,9 +901,8 @@ mod tests { #[tokio::test] #[ignore = "https://github.com/iotaledger/iota/issues/3224"] async fn test_signature_aggregation_loop() { - let ( + let SetupData { signing_tx, - _execution_tx, iota_client_mock, mut tx_subscription, store, @@ -915,12 +912,11 @@ mod tests { mock1, mock2, mock3, - _handles, gas_object_ref, iota_address, iota_token_type_tags, - _bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let id_token_map = (*iota_token_type_tags.load().clone()).clone(); let (action_certificate, iota_tx_digest, iota_tx_event_index) = get_bridge_authority_approved_action( @@ -1030,24 +1026,17 @@ mod tests { #[tokio::test] #[ignore = "https://github.com/iotaledger/iota/issues/3224"] async fn test_skip_request_signature_if_already_processed_on_chain() { - let ( + let SetupData { signing_tx, - _execution_tx, iota_client_mock, mut tx_subscription, store, - _secrets, - _dummy_iota_key, mock0, mock1, mock2, mock3, - _handles, - _gas_object_ref, - _iota_address, - _iota_token_type_tags, - _bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let iota_tx_digest = TransactionDigest::random(); let iota_tx_event_index = 0; @@ -1101,8 +1090,7 @@ mod tests { #[tokio::test] #[ignore = "https://github.com/iotaledger/iota/issues/3224"] async fn test_skip_tx_submission_if_already_processed_on_chain() { - let ( - _signing_tx, + let SetupData { execution_tx, iota_client_mock, mut tx_subscription, @@ -1113,12 +1101,11 @@ mod tests { mock1, mock2, mock3, - _handles, gas_object_ref, iota_address, iota_token_type_tags, - _bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let id_token_map = (*iota_token_type_tags.load().clone()).clone(); let (action_certificate, _, _) = get_bridge_authority_approved_action( vec![&mock0, &mock1, &mock2, &mock3], @@ -1188,8 +1175,7 @@ mod tests { #[tokio::test] #[ignore = "https://github.com/iotaledger/iota/issues/3224"] async fn test_skip_tx_submission_if_bridge_is_paused() { - let ( - _signing_tx, + let SetupData { execution_tx, iota_client_mock, mut tx_subscription, @@ -1200,12 +1186,12 @@ mod tests { mock1, mock2, mock3, - _handles, gas_object_ref, iota_address, iota_token_type_tags, bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let id_token_map: HashMap<u8, TypeTag> = (*iota_token_type_tags.load().clone()).clone(); let (action_certificate, _, _) = get_bridge_authority_approved_action( vec![&mock0, &mock1, &mock2, &mock3], @@ -1290,24 +1276,21 @@ mod tests { async fn test_action_executor_handle_new_token() { let new_token_id = 255u8; // token id that does not exist let new_type_tag = TypeTag::from_str("0xbeef::beef::BEEF").unwrap(); - let ( - _signing_tx, + let SetupData { execution_tx, iota_client_mock, mut tx_subscription, - _store, secrets, dummy_iota_key, mock0, mock1, mock2, mock3, - _handles, gas_object_ref, iota_address, iota_token_type_tags, - _bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let mut id_token_map: HashMap<u8, TypeTag> = (*iota_token_type_tags.load().clone()).clone(); let (action_certificate, _, _) = get_bridge_authority_approved_action( vec![&mock0, &mock1, &mock2, &mock3], @@ -1501,25 +1484,27 @@ mod tests { } } - #[allow(clippy::type_complexity)] - async fn setup() -> ( - iota_metrics::metered_channel::Sender<BridgeActionExecutionWrapper>, - iota_metrics::metered_channel::Sender<CertifiedBridgeActionExecutionWrapper>, - IotaMockClient, - tokio::sync::broadcast::Receiver<TransactionDigest>, - Arc<BridgeOrchestratorTables>, - Vec<BridgeAuthorityKeyPair>, - IotaKeyPair, - BridgeRequestMockHandler, - BridgeRequestMockHandler, - BridgeRequestMockHandler, - BridgeRequestMockHandler, - Vec<tokio::task::JoinHandle<()>>, - ObjectRef, - IotaAddress, - Arc<ArcSwap<HashMap<u8, TypeTag>>>, - tokio::sync::watch::Sender<IsBridgePaused>, - ) { + struct SetupData { + signing_tx: iota_metrics::metered_channel::Sender<BridgeActionExecutionWrapper>, + execution_tx: iota_metrics::metered_channel::Sender<CertifiedBridgeActionExecutionWrapper>, + iota_client_mock: IotaMockClient, + tx_subscription: tokio::sync::broadcast::Receiver<TransactionDigest>, + store: Arc<BridgeOrchestratorTables>, + secrets: Vec<BridgeAuthorityKeyPair>, + dummy_iota_key: IotaKeyPair, + mock0: BridgeRequestMockHandler, + mock1: BridgeRequestMockHandler, + mock2: BridgeRequestMockHandler, + mock3: BridgeRequestMockHandler, + #[expect(unused)] + handles: Vec<tokio::task::JoinHandle<()>>, + gas_object_ref: ObjectRef, + iota_address: IotaAddress, + iota_token_type_tags: Arc<ArcSwap<HashMap<u8, TypeTag>>>, + bridge_pause_tx: tokio::sync::watch::Sender<IsBridgePaused>, + } + + async fn setup() -> SetupData { telemetry_subscribers::init_for_testing(); let registry = Registry::new(); iota_metrics::init_metrics(®istry); @@ -1578,7 +1563,7 @@ mod tests { let (executor_handle, signing_tx, execution_tx) = executor.run_inner(); handles.extend(executor_handle); - ( + SetupData { signing_tx, execution_tx, iota_client_mock, @@ -1595,6 +1580,6 @@ mod tests { iota_address, iota_token_type_tags, bridge_pause_tx, - ) + } } } diff --git a/crates/iota-bridge/src/e2e_tests/test_utils.rs b/crates/iota-bridge/src/e2e_tests/test_utils.rs index 35195b89d22..a836ae9888f 100644 --- a/crates/iota-bridge/src/e2e_tests/test_utils.rs +++ b/crates/iota-bridge/src/e2e_tests/test_utils.rs @@ -434,7 +434,6 @@ pub async fn get_eth_signer_client_e2e_test_only( Ok((signer_0, private_key_0.to_string())) } -#[allow(dead_code)] #[derive(Debug, Clone)] pub struct DeployedSolContracts { pub iota_bridge: EthAddress, diff --git a/crates/iota-bridge/src/eth_syncer.rs b/crates/iota-bridge/src/eth_syncer.rs index cdbd7bf59a6..2fb109dd0da 100644 --- a/crates/iota-bridge/src/eth_syncer.rs +++ b/crates/iota-bridge/src/eth_syncer.rs @@ -36,7 +36,6 @@ pub struct EthSyncer<P> { /// Map from contract address to their start block. pub type EthTargetAddresses = HashMap<EthAddress, u64>; -#[allow(clippy::new_without_default)] impl<P> EthSyncer<P> where P: ethers::providers::JsonRpcClient + 'static, diff --git a/crates/iota-bridge/src/iota_mock_client.rs b/crates/iota-bridge/src/iota_mock_client.rs index 178e631de03..acf4fa4fd27 100644 --- a/crates/iota-bridge/src/iota_mock_client.rs +++ b/crates/iota-bridge/src/iota_mock_client.rs @@ -30,7 +30,7 @@ use crate::{ }; /// Mock client used in test environments. -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] #[derive(Clone, Debug)] pub struct IotaMockClient { // the top two fields do not change during tests so we don't need them to be Arc<Mutex>> diff --git a/crates/iota-bridge/src/monitor.rs b/crates/iota-bridge/src/monitor.rs index f2b0a551e51..3d483d216be 100644 --- a/crates/iota-bridge/src/monitor.rs +++ b/crates/iota-bridge/src/monitor.rs @@ -906,7 +906,7 @@ mod tests { .unwrap(); } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] fn setup() -> ( iota_metrics::metered_channel::Sender<IotaBridgeEvent>, iota_metrics::metered_channel::Receiver<IotaBridgeEvent>, diff --git a/crates/iota-bridge/src/orchestrator.rs b/crates/iota-bridge/src/orchestrator.rs index e0193d15230..8604d0fe28d 100644 --- a/crates/iota-bridge/src/orchestrator.rs +++ b/crates/iota-bridge/src/orchestrator.rs @@ -485,7 +485,7 @@ mod tests { assert_eq!(digests.len(), 2); } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] fn setup() -> ( iota_metrics::metered_channel::Sender<(Identifier, Vec<IotaEvent>)>, iota_metrics::metered_channel::Receiver<(Identifier, Vec<IotaEvent>)>, diff --git a/crates/iota-bridge/src/server/mock_handler.rs b/crates/iota-bridge/src/server/mock_handler.rs index c986cf4e143..39505eba88f 100644 --- a/crates/iota-bridge/src/server/mock_handler.rs +++ b/crates/iota-bridge/src/server/mock_handler.rs @@ -26,7 +26,7 @@ use crate::{ types::SignedBridgeAction, }; -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] #[derive(Clone)] pub struct BridgeRequestMockHandler { signer: Arc<ArcSwap<Option<BridgeAuthorityKeyPair>>>, diff --git a/crates/iota-cluster-test/src/lib.rs b/crates/iota-cluster-test/src/lib.rs index b107bc08f3f..855ab846157 100644 --- a/crates/iota-cluster-test/src/lib.rs +++ b/crates/iota-cluster-test/src/lib.rs @@ -50,7 +50,6 @@ pub mod wallet_client; pub use iota_genesis_builder::SnapshotUrl as MigrationSnapshotUrl; -#[allow(unused)] pub struct TestContext { /// Cluster handle that allows access to various components in a cluster cluster: Box<dyn Cluster + Sync + Send>, diff --git a/crates/iota-common/src/sync/async_once_cell.rs b/crates/iota-common/src/sync/async_once_cell.rs index b2759e4ba62..68cf5583271 100644 --- a/crates/iota-common/src/sync/async_once_cell.rs +++ b/crates/iota-common/src/sync/async_once_cell.rs @@ -42,7 +42,7 @@ impl<T: Send + Clone> AsyncOnceCell<T> { } /// Sets the value and notifies waiters. Return error if called twice - #[allow(clippy::result_unit_err)] + #[expect(clippy::result_unit_err)] pub fn set(&self, value: T) -> Result<(), ()> { let mut writer = self.writer.lock(); match writer.take() { diff --git a/crates/iota-common/src/sync/notify_once.rs b/crates/iota-common/src/sync/notify_once.rs index dfeb264ab4b..2c6b2b5eac8 100644 --- a/crates/iota-common/src/sync/notify_once.rs +++ b/crates/iota-common/src/sync/notify_once.rs @@ -35,7 +35,7 @@ impl NotifyOnce { /// After this method all pending and future calls to .wait() will return /// /// This method returns errors if called more then once - #[allow(clippy::result_unit_err)] + #[expect(clippy::result_unit_err)] pub fn notify(&self) -> Result<(), ()> { let Some(notify) = self.notify.lock().take() else { return Err(()); diff --git a/crates/iota-config/src/genesis.rs b/crates/iota-config/src/genesis.rs index 3cb724e34b6..d7c850ca148 100644 --- a/crates/iota-config/src/genesis.rs +++ b/crates/iota-config/src/genesis.rs @@ -586,7 +586,7 @@ pub struct TokenDistributionScheduleBuilder { } impl TokenDistributionScheduleBuilder { - #[allow(clippy::new_without_default)] + #[expect(clippy::new_without_default)] pub fn new() -> Self { Self { pre_minted_supply: 0, diff --git a/crates/iota-core/src/authority.rs b/crates/iota-core/src/authority.rs index bd968065e99..d85c217974f 100644 --- a/crates/iota-core/src/authority.rs +++ b/crates/iota-core/src/authority.rs @@ -784,7 +784,7 @@ pub struct AuthorityState { transaction_manager: Arc<TransactionManager>, /// Shuts down the execution task. Used only in testing. - #[allow(unused)] + #[cfg_attr(not(test), expect(unused))] tx_execution_shutdown: Mutex<Option<oneshot::Sender<()>>>, pub metrics: Arc<AuthorityMetrics>, @@ -1593,7 +1593,7 @@ impl AuthorityState { let transaction_data = &certificate.data().intent_message().value; let (kind, signer, gas) = transaction_data.execution_parts(); - #[allow(unused_mut)] + #[expect(unused_mut)] let (inner_temp_store, _, mut effects, execution_error_opt) = epoch_store.executor().execute_transaction_to_effects( self.get_backing_store().as_ref(), @@ -1860,7 +1860,6 @@ impl AuthorityState { } /// The object ID for gas can be any object ID, even for an uncreated object - #[allow(clippy::collapsible_else_if)] pub async fn dev_inspect_transaction_block( &self, sender: IotaAddress, @@ -2610,7 +2609,7 @@ impl AuthorityState { } } - #[allow(clippy::disallowed_methods)] // allow unbounded_channel() + #[expect(clippy::disallowed_methods)] // allow unbounded_channel() pub async fn new( name: AuthorityName, secret: StableSyncAuthoritySigner, diff --git a/crates/iota-core/src/authority/authority_per_epoch_store.rs b/crates/iota-core/src/authority/authority_per_epoch_store.rs index cc6340a840e..cf080a649d9 100644 --- a/crates/iota-core/src/authority/authority_per_epoch_store.rs +++ b/crates/iota-core/src/authority/authority_per_epoch_store.rs @@ -131,8 +131,8 @@ pub(crate) type EncG = bls12381::G2Element; // retain a distinction anyway. If we need to support distributed object // storage, having this distinction will be useful, as we will most likely have // to re-implement a retry / write-ahead-log at that point. -pub struct CertLockGuard(#[allow(unused)] MutexGuard); -pub struct CertTxGuard(#[allow(unused)] CertLockGuard); +pub struct CertLockGuard(#[expect(unused)] MutexGuard); +pub struct CertTxGuard(#[expect(unused)] CertLockGuard); impl CertTxGuard { pub fn release(self) {} @@ -2273,7 +2273,6 @@ impl AuthorityPerEpochStore { /// /// In addition to the early termination guarantee, this function also /// prevents epoch_terminated() if future is being executed. - #[allow(clippy::result_unit_err)] pub async fn within_alive_epoch<F: Future + Send>(&self, f: F) -> Result<F::Output, ()> { // This guard is kept in the future until it resolves, preventing // `epoch_terminated` to acquire a write lock @@ -2911,7 +2910,7 @@ impl AuthorityPerEpochStore { /// VerifiedCertificates for each executable certificate /// - Or update the state for checkpoint or epoch change protocol. #[instrument(level = "debug", skip_all)] - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] pub(crate) async fn process_consensus_transactions<C: CheckpointServiceNotify>( &self, output: &mut ConsensusCommitOutput, @@ -4103,8 +4102,8 @@ impl LockDetailsWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("lock details should have been migrated to latest version at read time"), } } @@ -4112,8 +4111,8 @@ impl LockDetailsWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("lock details should have been migrated to latest version at read time"), } } diff --git a/crates/iota-core/src/authority/authority_store.rs b/crates/iota-core/src/authority/authority_store.rs index 98d68d84ae1..2ae0de3fb71 100644 --- a/crates/iota-core/src/authority/authority_store.rs +++ b/crates/iota-core/src/authority/authority_store.rs @@ -163,7 +163,7 @@ impl AuthorityStore { let epoch_start_configuration = if perpetual_tables.database_is_empty()? { info!("Creating new epoch start config from genesis"); - #[allow(unused_mut)] + #[expect(unused_mut)] let mut initial_epoch_flags = EpochFlag::default_flags_for_new_epoch(config); fail_point_arg!("initial_epoch_flags", |flags: Vec<EpochFlag>| { info!("Setting initial epoch flags to {:?}", flags); diff --git a/crates/iota-core/src/authority/authority_store_types.rs b/crates/iota-core/src/authority/authority_store_types.rs index b50904ea5c6..d46bd084eca 100644 --- a/crates/iota-core/src/authority/authority_store_types.rs +++ b/crates/iota-core/src/authority/authority_store_types.rs @@ -65,8 +65,8 @@ impl StoreObjectWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("object should have been migrated to latest version at read time"), } } @@ -74,8 +74,8 @@ impl StoreObjectWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("object should have been migrated to latest version at read time"), } } @@ -145,8 +145,8 @@ impl StoreMoveObjectWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("object should have been migrated to latest version at read time"), } } @@ -154,8 +154,8 @@ impl StoreMoveObjectWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("object should have been migrated to latest version at read time"), } } diff --git a/crates/iota-core/src/authority/epoch_start_configuration.rs b/crates/iota-core/src/authority/epoch_start_configuration.rs index 7ae6446577a..26df7d243ae 100644 --- a/crates/iota-core/src/authority/epoch_start_configuration.rs +++ b/crates/iota-core/src/authority/epoch_start_configuration.rs @@ -127,7 +127,7 @@ impl EpochStartConfiguration { })) } - #[allow(unreachable_patterns)] + #[expect(unreachable_patterns)] pub fn new_at_next_epoch_for_testing(&self) -> Self { // We only need to implement this function for the latest version. // When a new version is introduced, this function should be updated. diff --git a/crates/iota-core/src/authority_aggregator.rs b/crates/iota-core/src/authority_aggregator.rs index d7a3f8b6251..f42945e4990 100644 --- a/crates/iota-core/src/authority_aggregator.rs +++ b/crates/iota-core/src/authority_aggregator.rs @@ -287,7 +287,7 @@ pub enum AggregatorProcessCertificateError { /// Groups the errors by error type and stake. pub fn group_errors(errors: Vec<(IotaError, Vec<AuthorityName>, StakeUnit)>) -> GroupedErrors { - #[allow(clippy::mutable_key_type)] + #[expect(clippy::mutable_key_type)] let mut grouped_errors = HashMap::new(); for (error, names, stake) in errors { let entry = grouped_errors.entry(error).or_insert((0, vec![])); @@ -382,7 +382,7 @@ struct ProcessTransactionState { impl ProcessTransactionState { /// Returns the conflicting transaction digest and its validators with the /// most stake. - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] pub fn conflicting_tx_digest_with_most_stake( &self, ) -> Option<( diff --git a/crates/iota-core/src/checkpoints/checkpoint_executor/mod.rs b/crates/iota-core/src/checkpoints/checkpoint_executor/mod.rs index bac30e2396c..d1266c66400 100644 --- a/crates/iota-core/src/checkpoints/checkpoint_executor/mod.rs +++ b/crates/iota-core/src/checkpoints/checkpoint_executor/mod.rs @@ -1002,7 +1002,7 @@ fn extract_end_of_epoch_tx( // Given a checkpoint, filter out any already executed transactions, then return // the remaining execution digests, transaction digests, transactions to be // executed, and randomness rounds (if any) included in the checkpoint. -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] fn get_unexecuted_transactions( checkpoint: VerifiedCheckpoint, cache_reader: &dyn TransactionCacheRead, diff --git a/crates/iota-core/src/checkpoints/mod.rs b/crates/iota-core/src/checkpoints/mod.rs index 3c819e3c8c6..9ab63227779 100644 --- a/crates/iota-core/src/checkpoints/mod.rs +++ b/crates/iota-core/src/checkpoints/mod.rs @@ -1238,7 +1238,7 @@ impl CheckpointBuilder { Ok(()) } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] fn split_checkpoint_chunks( &self, effects_and_transaction_sizes: Vec<(TransactionEffects, usize)>, @@ -1924,7 +1924,7 @@ impl CheckpointAggregator { } impl CheckpointSignatureAggregator { - #[allow(clippy::result_unit_err)] + #[expect(clippy::result_unit_err)] pub fn try_aggregate( &mut self, data: CheckpointSignatureMessage, diff --git a/crates/iota-core/src/connection_monitor.rs b/crates/iota-core/src/connection_monitor.rs index a15afd715c4..33224315332 100644 --- a/crates/iota-core/src/connection_monitor.rs +++ b/crates/iota-core/src/connection_monitor.rs @@ -109,9 +109,7 @@ impl ConnectionMonitor { rx.receiver.recv().await } else { // If no shutdown receiver is provided, wait forever. - let future = future::pending(); - #[allow(clippy::let_unit_value)] - let () = future.await; + future::pending::<()>().await; Ok(()) } } diff --git a/crates/iota-core/src/consensus_adapter.rs b/crates/iota-core/src/consensus_adapter.rs index 46e8e9b6875..eb25d7b5137 100644 --- a/crates/iota-core/src/consensus_adapter.rs +++ b/crates/iota-core/src/consensus_adapter.rs @@ -280,7 +280,7 @@ impl ConsensusAdapter { // be a big deal but can be optimized let mut recovered = epoch_store.get_all_pending_consensus_transactions(); - #[allow(clippy::collapsible_if)] // This if can be collapsed but it will be ugly + #[expect(clippy::collapsible_if)] // This if can be collapsed but it will be ugly if epoch_store .get_reconfig_state_read_lock_guard() .is_reject_user_certs() @@ -592,7 +592,6 @@ impl ConsensusAdapter { // care about it } - #[allow(clippy::option_map_unit_fn)] async fn submit_and_wait_inner( self: Arc<Self>, transactions: Vec<ConsensusTransaction>, diff --git a/crates/iota-core/src/epoch/randomness.rs b/crates/iota-core/src/epoch/randomness.rs index e63f4f2a4e8..be323fa4747 100644 --- a/crates/iota-core/src/epoch/randomness.rs +++ b/crates/iota-core/src/epoch/randomness.rs @@ -57,7 +57,6 @@ pub const SINGLETON_KEY: u64 = 0; // Wrappers for DKG messages (to simplify upgrades). #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] -#[allow(clippy::large_enum_variant)] pub enum VersionedProcessedMessage { V1(dkg_v1::ProcessedMessage<PkG, EncG>), } @@ -427,7 +426,7 @@ impl RandomnessManager { info!("random beacon: created {msg:?} with dkg version {dkg_version}"); let transaction = ConsensusTransaction::new_randomness_dkg_message(epoch_store.name, &msg); - #[allow(unused_mut)] + #[expect(unused_mut)] let mut fail_point_skip_sending = false; fail_point_if!("rb-dkg", || { // maybe skip sending in simtests @@ -499,7 +498,7 @@ impl RandomnessManager { &conf, ); - #[allow(unused_mut)] + #[expect(unused_mut)] let mut fail_point_skip_sending = false; fail_point_if!("rb-dkg", || { // maybe skip sending in simtests diff --git a/crates/iota-core/src/overload_monitor.rs b/crates/iota-core/src/overload_monitor.rs index 3f155117282..c4e921d15cf 100644 --- a/crates/iota-core/src/overload_monitor.rs +++ b/crates/iota-core/src/overload_monitor.rs @@ -271,7 +271,7 @@ pub fn overload_monitor_accept_tx( } #[cfg(test)] -#[allow(clippy::disallowed_methods)] // allow unbounded_channel() since tests are simulating txn manager execution +#[expect(clippy::disallowed_methods)] // allow unbounded_channel() since tests are simulating txn manager execution // driver interaction. mod tests { use std::sync::Arc; diff --git a/crates/iota-core/src/stake_aggregator.rs b/crates/iota-core/src/stake_aggregator.rs index b8d8907fca0..3269ba384ac 100644 --- a/crates/iota-core/src/stake_aggregator.rs +++ b/crates/iota-core/src/stake_aggregator.rs @@ -301,7 +301,7 @@ impl<K, V, const STRENGTH: bool> MultiStakeAggregator<K, V, STRENGTH> where K: Hash + Eq, { - #[allow(dead_code)] + #[expect(dead_code)] pub fn authorities_for_key(&self, k: &K) -> Option<impl Iterator<Item = &AuthorityName>> { self.stake_maps.get(k).map(|(_, agg)| agg.keys()) } diff --git a/crates/iota-core/src/test_utils.rs b/crates/iota-core/src/test_utils.rs index 809ca04d8c5..4a215adf02a 100644 --- a/crates/iota-core/src/test_utils.rs +++ b/crates/iota-core/src/test_utils.rs @@ -11,7 +11,6 @@ use iota_framework::BuiltInFramework; use iota_genesis_builder::{ genesis_build_effects::GenesisBuildEffects, validator_info::ValidatorInfo, }; -use iota_macros::nondeterministic; use iota_move_build::{BuildConfig, CompiledPackage, IotaPackageHooks}; use iota_protocol_config::ProtocolConfig; use iota_types::{ @@ -94,14 +93,12 @@ pub async fn send_and_confirm_transaction( Ok((certificate.into_inner(), result.into_inner())) } -// note: clippy is confused about this being dead - it appears to only be used -// in cfg(test), but adding #[cfg(test)] causes other targets to fail -#[allow(dead_code)] +#[cfg(test)] pub(crate) fn init_state_parameters_from_rng<R>(rng: &mut R) -> (Genesis, AuthorityKeyPair) where R: rand::CryptoRng + rand::RngCore, { - let dir = nondeterministic!(tempfile::TempDir::new().unwrap()); + let dir = iota_macros::nondeterministic!(tempfile::TempDir::new().unwrap()); let network_config = iota_swarm_config::network_config_builder::ConfigBuilder::new(&dir) .rng(rng) .build(); diff --git a/crates/iota-core/src/transaction_manager.rs b/crates/iota-core/src/transaction_manager.rs index 527897c08e1..0192e28bc37 100644 --- a/crates/iota-core/src/transaction_manager.rs +++ b/crates/iota-core/src/transaction_manager.rs @@ -64,7 +64,7 @@ pub struct TransactionManager { #[derive(Clone, Debug)] pub struct PendingCertificateStats { // The time this certificate enters transaction manager. - #[allow(unused)] + #[cfg(test)] pub enqueue_time: Instant, // The time this certificate becomes ready for execution. pub ready_time: Option<Instant>, @@ -556,6 +556,7 @@ impl TransactionManager { expected_effects_digest, waiting_input_objects: input_object_keys, stats: PendingCertificateStats { + #[cfg(test)] enqueue_time: pending_cert_enqueue_time, ready_time: None, }, diff --git a/crates/iota-core/src/transaction_orchestrator.rs b/crates/iota-core/src/transaction_orchestrator.rs index 5dc3ae32188..9aee380abea 100644 --- a/crates/iota-core/src/transaction_orchestrator.rs +++ b/crates/iota-core/src/transaction_orchestrator.rs @@ -347,7 +347,6 @@ where let digests = [tx_digest]; let effects_await = cache_reader.notify_read_executed_effects(&digests); // let-and-return necessary to satisfy borrow checker. - #[allow(clippy::let_and_return)] let res = match select(ticket, effects_await.boxed()).await { Either::Left((quorum_driver_response, _)) => Ok(quorum_driver_response), Either::Right((_, unfinished_quorum_driver_task)) => { @@ -360,6 +359,7 @@ where Ok(unfinished_quorum_driver_task.await) } }; + #[expect(clippy::let_and_return)] res }) } diff --git a/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs b/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs index bfb2e944747..ac734a40e8f 100644 --- a/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs +++ b/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs @@ -345,254 +345,262 @@ fn effects_with_tx(digest: TransactionDigest) -> TransactionEffects { effects } -/// The intent of this is to test whether client side timeouts -/// have any impact on the server execution. Turns out because -/// we spawn a tokio task on the server, client timing out and -/// terminating the connection does not stop server from completing -/// execution on its side -#[sim_test(config = "constant_latency_ms(1)")] -async fn test_quorum_map_and_reduce_timeout() { - let build_config = BuildConfig::new_for_testing(); - let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - path.extend(["src", "unit_tests", "data", "object_basics"]); - let client_ip = make_socket_addr(); - let modules: Vec<_> = build_config - .build(&path) - .unwrap() - .get_modules() - .cloned() - .collect(); - let pkg = Object::new_package_for_testing( - &modules, - TransactionDigest::genesis_marker(), - BuiltInFramework::genesis_move_packages(), - ) - .unwrap(); - let (addr1, key1): (_, AccountKeyPair) = get_key_pair(); - let gas_object1 = Object::with_owner_for_testing(addr1); - let genesis_objects = vec![pkg.clone(), gas_object1.clone()]; - let (mut authorities, _, genesis, _) = init_local_authorities(4, genesis_objects).await; - let rgp = reference_gas_price(&authorities); - let pkg = genesis.object(pkg.id()).unwrap(); - let gas_object1 = genesis.object(gas_object1.id()).unwrap(); - let gas_ref_1 = gas_object1.compute_object_reference(); - let tx = create_object_move_transaction(addr1, &key1, addr1, 100, pkg.id(), gas_ref_1, rgp); - let certified_tx = authorities - .process_transaction(tx.clone(), Some(client_ip)) - .await; - assert!(certified_tx.is_ok()); - let certificate = certified_tx.unwrap().into_cert_for_testing(); - // Send request with a very small timeout to trigger timeout error - authorities.timeouts.pre_quorum_timeout = Duration::from_nanos(0); - authorities.timeouts.post_quorum_timeout = Duration::from_nanos(0); - let request = HandleCertificateRequestV1 { - certificate: certificate.clone(), - include_events: true, - include_input_objects: false, - include_output_objects: false, - include_auxiliary_data: false, - }; - let certified_effects = authorities - .process_certificate(request, Some(client_ip)) - .await; - // Ensure it is an error - assert!(certified_effects.is_err()); - assert!(matches!( - certified_effects, - Err(AggregatorProcessCertificateError::RetryableExecuteCertificate { .. }) - )); - tokio::time::sleep(tokio::time::Duration::from_secs(10)).await; - let tx_info = TransactionInfoRequest { - transaction_digest: *tx.digest(), - }; - for (_, client) in authorities.authority_clients.iter() { - let resp = client - .handle_transaction_info_request(tx_info.clone()) +mod move_tests { + use super::*; + + /// The intent of this is to test whether client side timeouts + /// have any impact on the server execution. Turns out because + /// we spawn a tokio task on the server, client timing out and + /// terminating the connection does not stop server from completing + /// execution on its side + #[sim_test(config = "constant_latency_ms(1)")] + async fn test_quorum_map_and_reduce_timeout() { + let build_config = BuildConfig::new_for_testing(); + let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + path.extend(["src", "unit_tests", "data", "object_basics"]); + let client_ip = make_socket_addr(); + let modules: Vec<_> = build_config + .build(&path) + .unwrap() + .get_modules() + .cloned() + .collect(); + let pkg = Object::new_package_for_testing( + &modules, + TransactionDigest::genesis_marker(), + BuiltInFramework::genesis_move_packages(), + ) + .unwrap(); + let (addr1, key1): (_, AccountKeyPair) = get_key_pair(); + let gas_object1 = Object::with_owner_for_testing(addr1); + let genesis_objects = vec![pkg.clone(), gas_object1.clone()]; + let (mut authorities, _, genesis, _) = init_local_authorities(4, genesis_objects).await; + let rgp = reference_gas_price(&authorities); + let pkg = genesis.object(pkg.id()).unwrap(); + let gas_object1 = genesis.object(gas_object1.id()).unwrap(); + let gas_ref_1 = gas_object1.compute_object_reference(); + let tx = create_object_move_transaction(addr1, &key1, addr1, 100, pkg.id(), gas_ref_1, rgp); + let certified_tx = authorities + .process_transaction(tx.clone(), Some(client_ip)) .await; - // Server should return a signed effect even though previous calls - // failed due to timeout - assert!(resp.is_ok()); - assert!(resp.unwrap().is_executed()); + assert!(certified_tx.is_ok()); + let certificate = certified_tx.unwrap().into_cert_for_testing(); + // Send request with a very small timeout to trigger timeout error + authorities.timeouts.pre_quorum_timeout = Duration::from_nanos(0); + authorities.timeouts.post_quorum_timeout = Duration::from_nanos(0); + let request = HandleCertificateRequestV1 { + certificate: certificate.clone(), + include_events: true, + include_input_objects: false, + include_output_objects: false, + include_auxiliary_data: false, + }; + let certified_effects = authorities + .process_certificate(request, Some(client_ip)) + .await; + // Ensure it is an error + assert!(certified_effects.is_err()); + assert!(matches!( + certified_effects, + Err(AggregatorProcessCertificateError::RetryableExecuteCertificate { .. }) + )); + tokio::time::sleep(tokio::time::Duration::from_secs(10)).await; + let tx_info = TransactionInfoRequest { + transaction_digest: *tx.digest(), + }; + for (_, client) in authorities.authority_clients.iter() { + let resp = client + .handle_transaction_info_request(tx_info.clone()) + .await; + // Server should return a signed effect even though previous calls + // failed due to timeout + assert!(resp.is_ok()); + assert!(resp.unwrap().is_executed()); + } } -} -#[sim_test] -async fn test_map_reducer() { - let (authorities, _, _, _) = init_local_authorities(4, vec![]).await; - - // Test: mapper errors do not get propagated up, reducer works - let res = quorum_map_then_reduce_with_timeout::<_, _, _, _, _, (), _, _, _>( - authorities.committee.clone(), - authorities.authority_clients.clone(), - 0usize, - |_name, _client| { - Box::pin(async move { - let res: Result<usize, IotaError> = Err(IotaError::TooManyIncorrectAuthorities { - errors: vec![], - action: "".to_string(), - }); - res - }) - }, - |mut accumulated_state, _authority_name, _authority_weight, result| { - Box::pin(async move { - assert!(matches!( - result, - Err(IotaError::TooManyIncorrectAuthorities { .. }) - )); - accumulated_state += 1; - ReduceOutput::Continue(accumulated_state) - }) - }, - Duration::from_millis(1000), - ) - .await - .unwrap_err(); - assert_eq!(4, res); - - // Test: early end - let res = quorum_map_then_reduce_with_timeout( - authorities.committee.clone(), - authorities.authority_clients.clone(), - 0usize, - |_name, _client| Box::pin(async move { Ok::<(), anyhow::Error>(()) }), - |mut accumulated_state, _authority_name, _authority_weight, _result| { - Box::pin(async move { - if accumulated_state > 2 { - ReduceOutput::Success(accumulated_state) - } else { + #[sim_test] + async fn test_map_reducer() { + let (authorities, _, _, _) = init_local_authorities(4, vec![]).await; + + // Test: mapper errors do not get propagated up, reducer works + let res = quorum_map_then_reduce_with_timeout::<_, _, _, _, _, (), _, _, _>( + authorities.committee.clone(), + authorities.authority_clients.clone(), + 0usize, + |_name, _client| { + Box::pin(async move { + let res: Result<usize, IotaError> = + Err(IotaError::TooManyIncorrectAuthorities { + errors: vec![], + action: "".to_string(), + }); + res + }) + }, + |mut accumulated_state, _authority_name, _authority_weight, result| { + Box::pin(async move { + assert!(matches!( + result, + Err(IotaError::TooManyIncorrectAuthorities { .. }) + )); accumulated_state += 1; ReduceOutput::Continue(accumulated_state) - } - }) - }, - Duration::from_millis(1000), - ) - .await - .unwrap(); - assert_eq!(3, res.0); - - // Test: Global timeout works - let res = quorum_map_then_reduce_with_timeout::<_, _, _, _, _, (), _, _, _>( - authorities.committee.clone(), - authorities.authority_clients.clone(), - 0usize, - |_name, _client| { - Box::pin(async move { - // 10 mins - tokio::time::sleep(Duration::from_secs(10 * 60)).await; - Ok::<(), anyhow::Error>(()) - }) - }, - |_accumulated_state, _authority_name, _authority_weight, _result| { - Box::pin(async move { ReduceOutput::Continue(0) }) - }, - Duration::from_millis(10), - ) - .await - .unwrap_err(); - assert_eq!(0, res); - - // Test: Local timeout works - let bad_auth = *authorities.committee.sample(); - let res = quorum_map_then_reduce_with_timeout::<_, _, _, _, _, (), _, _, _>( - authorities.committee.clone(), - authorities.authority_clients.clone(), - HashSet::new(), - |_name, _client| { - Box::pin(async move { - // 10 mins - if _name == bad_auth { + }) + }, + Duration::from_millis(1000), + ) + .await + .unwrap_err(); + assert_eq!(4, res); + + // Test: early end + let res = quorum_map_then_reduce_with_timeout( + authorities.committee.clone(), + authorities.authority_clients.clone(), + 0usize, + |_name, _client| Box::pin(async move { Ok::<(), anyhow::Error>(()) }), + |mut accumulated_state, _authority_name, _authority_weight, _result| { + Box::pin(async move { + if accumulated_state > 2 { + ReduceOutput::Success(accumulated_state) + } else { + accumulated_state += 1; + ReduceOutput::Continue(accumulated_state) + } + }) + }, + Duration::from_millis(1000), + ) + .await + .unwrap(); + assert_eq!(3, res.0); + + // Test: Global timeout works + let res = quorum_map_then_reduce_with_timeout::<_, _, _, _, _, (), _, _, _>( + authorities.committee.clone(), + authorities.authority_clients.clone(), + 0usize, + |_name, _client| { + Box::pin(async move { + // 10 mins tokio::time::sleep(Duration::from_secs(10 * 60)).await; - } - Ok::<(), anyhow::Error>(()) - }) - }, - |mut accumulated_state, authority_name, _authority_weight, _result| { - Box::pin(async move { - accumulated_state.insert(authority_name); - if accumulated_state.len() <= 3 { - ReduceOutput::Continue(accumulated_state) - } else { - ReduceOutput::ContinueWithTimeout(accumulated_state, Duration::from_millis(10)) - } - }) - }, - // large delay - Duration::from_millis(10 * 60), - ) - .await; - assert_eq!(res.as_ref().unwrap_err().len(), 3); - assert!(!res.as_ref().unwrap_err().contains(&bad_auth)); -} + Ok::<(), anyhow::Error>(()) + }) + }, + |_accumulated_state, _authority_name, _authority_weight, _result| { + Box::pin(async move { ReduceOutput::Continue(0) }) + }, + Duration::from_millis(10), + ) + .await + .unwrap_err(); + assert_eq!(0, res); + + // Test: Local timeout works + let bad_auth = *authorities.committee.sample(); + let res = quorum_map_then_reduce_with_timeout::<_, _, _, _, _, (), _, _, _>( + authorities.committee.clone(), + authorities.authority_clients.clone(), + HashSet::new(), + |_name, _client| { + Box::pin(async move { + // 10 mins + if _name == bad_auth { + tokio::time::sleep(Duration::from_secs(10 * 60)).await; + } + Ok::<(), anyhow::Error>(()) + }) + }, + |mut accumulated_state, authority_name, _authority_weight, _result| { + Box::pin(async move { + accumulated_state.insert(authority_name); + if accumulated_state.len() <= 3 { + ReduceOutput::Continue(accumulated_state) + } else { + ReduceOutput::ContinueWithTimeout( + accumulated_state, + Duration::from_millis(10), + ) + } + }) + }, + // large delay + Duration::from_millis(10 * 60), + ) + .await; + assert_eq!(res.as_ref().unwrap_err().len(), 3); + assert!(!res.as_ref().unwrap_err().contains(&bad_auth)); + } -#[sim_test] -async fn test_process_transaction_fault_success() { - // This test exercises the 4 different possible failing case when one authority - // is faulty. A transaction is sent to all authories, however one of them - // will error out either before or after processing the transaction. - // A cert should still be created, and sent out to all authorities again. This - // time a different authority errors out either before or after processing - // the cert. - for i in 0..4 { - let mut config_before_process_transaction = LocalAuthorityClientFaultConfig::default(); - if i % 2 == 0 { - config_before_process_transaction.fail_before_handle_transaction = true; - } else { - config_before_process_transaction.fail_after_handle_transaction = true; - } - let mut config_before_process_certificate = LocalAuthorityClientFaultConfig::default(); - if i < 2 { - config_before_process_certificate.fail_before_handle_confirmation = true; - } else { - config_before_process_certificate.fail_after_handle_confirmation = true; + #[sim_test] + async fn test_process_transaction_fault_success() { + // This test exercises the 4 different possible failing case when one authority + // is faulty. A transaction is sent to all authories, however one of them + // will error out either before or after processing the transaction. + // A cert should still be created, and sent out to all authorities again. This + // time a different authority errors out either before or after processing + // the cert. + for i in 0..4 { + let mut config_before_process_transaction = LocalAuthorityClientFaultConfig::default(); + if i % 2 == 0 { + config_before_process_transaction.fail_before_handle_transaction = true; + } else { + config_before_process_transaction.fail_after_handle_transaction = true; + } + let mut config_before_process_certificate = LocalAuthorityClientFaultConfig::default(); + if i < 2 { + config_before_process_certificate.fail_before_handle_confirmation = true; + } else { + config_before_process_certificate.fail_after_handle_confirmation = true; + } + assert!( + execute_transaction_with_fault_configs( + &[(0, config_before_process_transaction)], + &[(1, config_before_process_certificate)], + ) + .await + ); } + } + + #[sim_test] + async fn test_process_transaction_fault_fail() { + // This test exercises the cases when there are 2 authorities faulty, + // and hence no quorum could be formed. This is tested on the + // process_transaction phase. + let fail_before_process_transaction_config = LocalAuthorityClientFaultConfig { + fail_before_handle_transaction: true, + ..Default::default() + }; assert!( - execute_transaction_with_fault_configs(&[(0, config_before_process_transaction)], &[( - 1, - config_before_process_certificate - )],) + !execute_transaction_with_fault_configs( + &[ + (0, fail_before_process_transaction_config), + (1, fail_before_process_transaction_config), + ], + &[], + ) .await ); } -} -#[sim_test] -async fn test_process_transaction_fault_fail() { - // This test exercises the cases when there are 2 authorities faulty, - // and hence no quorum could be formed. This is tested on the - // process_transaction phase. - let fail_before_process_transaction_config = LocalAuthorityClientFaultConfig { - fail_before_handle_transaction: true, - ..Default::default() - }; - assert!( - !execute_transaction_with_fault_configs( - &[ - (0, fail_before_process_transaction_config), - (1, fail_before_process_transaction_config), - ], - &[], - ) - .await - ); -} - -#[sim_test] -async fn test_process_certificate_fault_fail() { - // Similar to test_process_transaction_fault_fail but tested on the - // process_certificate phase. - let fail_before_process_certificate_config = LocalAuthorityClientFaultConfig { - fail_before_handle_confirmation: true, - ..Default::default() - }; - assert!( - !execute_transaction_with_fault_configs(&[], &[ - (0, fail_before_process_certificate_config), - (1, fail_before_process_certificate_config), - ],) - .await - ); + #[sim_test] + async fn test_process_certificate_fault_fail() { + // Similar to test_process_transaction_fault_fail but tested on the + // process_certificate phase. + let fail_before_process_certificate_config = LocalAuthorityClientFaultConfig { + fail_before_handle_confirmation: true, + ..Default::default() + }; + assert!( + !execute_transaction_with_fault_configs(&[], &[ + (0, fail_before_process_certificate_config), + (1, fail_before_process_certificate_config), + ],) + .await + ); + } } #[tokio::test(start_paused = true)] @@ -661,7 +669,7 @@ async fn test_quorum_once_with_timeout() { ); } -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] fn get_authorities( count: Arc<Mutex<u32>>, committee_size: u64, @@ -2243,7 +2251,7 @@ async fn test_process_transaction_again() { } } -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] fn make_fake_authorities() -> ( BTreeMap<AuthorityName, StakeUnit>, BTreeMap<AuthorityName, HandleTransactionTestAuthorityClient>, diff --git a/crates/iota-core/src/unit_tests/execution_driver_tests.rs b/crates/iota-core/src/unit_tests/execution_driver_tests.rs index a2a51628601..e41d0583860 100644 --- a/crates/iota-core/src/unit_tests/execution_driver_tests.rs +++ b/crates/iota-core/src/unit_tests/execution_driver_tests.rs @@ -51,7 +51,7 @@ use crate::{ }, }; -#[allow(dead_code)] +#[expect(dead_code)] async fn wait_for_certs( stream: &mut UnboundedReceiver<VerifiedCertificate>, certs: &[VerifiedCertificate], @@ -298,268 +298,300 @@ async fn execute_shared_on_first_three_authorities( (cert, effects) } -#[tokio::test(flavor = "current_thread", start_paused = true)] -async fn test_execution_with_dependencies() { - telemetry_subscribers::init_for_testing(); - - // ---- Initialize a network with three accounts, each with 10 gas objects. - - const NUM_ACCOUNTS: usize = 3; - let accounts: Vec<(_, AccountKeyPair)> = - (0..NUM_ACCOUNTS).map(|_| get_key_pair()).collect_vec(); - - const NUM_GAS_OBJECTS_PER_ACCOUNT: usize = 10; - let gas_objects = (0..NUM_ACCOUNTS) - .map(|i| { - (0..NUM_GAS_OBJECTS_PER_ACCOUNT) - .map(|_| Object::with_owner_for_testing(accounts[i].0)) - .collect_vec() - }) - .collect_vec(); - let all_gas_objects = gas_objects.clone().into_iter().flatten().collect_vec(); - - let (aggregator, authorities, _genesis, package) = - init_local_authorities(4, all_gas_objects.clone()).await; - let authority_clients: Vec<_> = authorities - .iter() - .map(|a| aggregator.authority_clients[&a.name].clone()) - .collect(); - let rgp = authorities - .first() - .unwrap() - .reference_gas_price_for_testing() - .unwrap(); - - // ---- Create an owned object and a shared counter. - - let mut executed_owned_certs = Vec::new(); - let mut executed_shared_certs = Vec::new(); - - // Initialize an object owned by 1st account. - let (addr1, key1): &(_, AccountKeyPair) = &accounts[0]; - let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[0][0].id()).await; - let tx1 = create_object_move_transaction(*addr1, key1, *addr1, 100, package, gas_ref, rgp); - let (cert, effects1) = - execute_owned_on_first_three_authorities(&authority_clients, &aggregator.committee, &tx1) - .await; - executed_owned_certs.push(cert); - let mut owned_object_ref = effects1.created()[0].0; - - // Initialize a shared counter, re-using gas_ref_0 so it has to execute after - // tx1. - let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[0][0].id()).await; - let tx2 = TestTransactionBuilder::new(*addr1, gas_ref, rgp) - .call_counter_create(package) - .build_and_sign(key1); - let (cert, effects2) = - execute_owned_on_first_three_authorities(&authority_clients, &aggregator.committee, &tx2) - .await; - executed_owned_certs.push(cert); - let (mut shared_counter_ref, owner) = effects2.created()[0]; - let shared_counter_initial_version = if let Owner::Shared { - initial_shared_version, - } = owner - { - // Because the gas object used has version 2, the initial lamport timestamp of - // the shared counter is 3. - assert_eq!(initial_shared_version.value(), 3); - initial_shared_version - } else { - panic!("Not a shared object! {:?} {:?}", shared_counter_ref, owner); - }; +mod move_tests { + use super::*; + + #[tokio::test(flavor = "current_thread", start_paused = true)] + async fn test_execution_with_dependencies() { + telemetry_subscribers::init_for_testing(); + + // ---- Initialize a network with three accounts, each with 10 gas objects. + + const NUM_ACCOUNTS: usize = 3; + let accounts: Vec<(_, AccountKeyPair)> = + (0..NUM_ACCOUNTS).map(|_| get_key_pair()).collect_vec(); + + const NUM_GAS_OBJECTS_PER_ACCOUNT: usize = 10; + let gas_objects = (0..NUM_ACCOUNTS) + .map(|i| { + (0..NUM_GAS_OBJECTS_PER_ACCOUNT) + .map(|_| Object::with_owner_for_testing(accounts[i].0)) + .collect_vec() + }) + .collect_vec(); + let all_gas_objects = gas_objects.clone().into_iter().flatten().collect_vec(); + + let (aggregator, authorities, _genesis, package) = + init_local_authorities(4, all_gas_objects.clone()).await; + let authority_clients: Vec<_> = authorities + .iter() + .map(|a| aggregator.authority_clients[&a.name].clone()) + .collect(); + let rgp = authorities + .first() + .unwrap() + .reference_gas_price_for_testing() + .unwrap(); - // ---- Execute transactions with dependencies on first 3 nodes in the - // dependency order. + // ---- Create an owned object and a shared counter. - // In each iteration, creates an owned and a shared transaction that depends on - // previous input and gas objects. - for i in 0..100 { - let source_index = i % NUM_ACCOUNTS; - let (source_addr, source_key) = &accounts[source_index]; + let mut executed_owned_certs = Vec::new(); + let mut executed_shared_certs = Vec::new(); - let gas_ref = get_latest_ref( - authority_clients[source_index].clone(), - gas_objects[source_index][i * 3 % NUM_GAS_OBJECTS_PER_ACCOUNT].id(), + // Initialize an object owned by 1st account. + let (addr1, key1): &(_, AccountKeyPair) = &accounts[0]; + let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[0][0].id()).await; + let tx1 = create_object_move_transaction(*addr1, key1, *addr1, 100, package, gas_ref, rgp); + let (cert, effects1) = execute_owned_on_first_three_authorities( + &authority_clients, + &aggregator.committee, + &tx1, ) .await; - let (dest_addr, _) = &accounts[(i + 1) % NUM_ACCOUNTS]; - let owned_tx = make_transfer_object_move_transaction( - *source_addr, - source_key, - *dest_addr, - owned_object_ref, - package, - gas_ref, - TEST_ONLY_GAS_UNIT_FOR_HEAVY_COMPUTATION_STORAGE, - rgp, - ); - let (cert, effects) = execute_owned_on_first_three_authorities( + executed_owned_certs.push(cert); + let mut owned_object_ref = effects1.created()[0].0; + + // Initialize a shared counter, re-using gas_ref_0 so it has to execute after + // tx1. + let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[0][0].id()).await; + let tx2 = TestTransactionBuilder::new(*addr1, gas_ref, rgp) + .call_counter_create(package) + .build_and_sign(key1); + let (cert, effects2) = execute_owned_on_first_three_authorities( &authority_clients, &aggregator.committee, - &owned_tx, + &tx2, ) .await; executed_owned_certs.push(cert); - owned_object_ref = effects.mutated_excluding_gas().first().unwrap().0; + let (mut shared_counter_ref, owner) = effects2.created()[0]; + let shared_counter_initial_version = if let Owner::Shared { + initial_shared_version, + } = owner + { + // Because the gas object used has version 2, the initial lamport timestamp of + // the shared counter is 3. + assert_eq!(initial_shared_version.value(), 3); + initial_shared_version + } else { + panic!("Not a shared object! {:?} {:?}", shared_counter_ref, owner); + }; - let gas_ref = get_latest_ref( - authority_clients[source_index].clone(), - gas_objects[source_index][i * 7 % NUM_GAS_OBJECTS_PER_ACCOUNT].id(), - ) - .await; - let shared_tx = TestTransactionBuilder::new(*source_addr, gas_ref, rgp) - .call_counter_increment( + // ---- Execute transactions with dependencies on first 3 nodes in the + // dependency order. + + // In each iteration, creates an owned and a shared transaction that depends on + // previous input and gas objects. + for i in 0..100 { + let source_index = i % NUM_ACCOUNTS; + let (source_addr, source_key) = &accounts[source_index]; + + let gas_ref = get_latest_ref( + authority_clients[source_index].clone(), + gas_objects[source_index][i * 3 % NUM_GAS_OBJECTS_PER_ACCOUNT].id(), + ) + .await; + let (dest_addr, _) = &accounts[(i + 1) % NUM_ACCOUNTS]; + let owned_tx = make_transfer_object_move_transaction( + *source_addr, + source_key, + *dest_addr, + owned_object_ref, package, - shared_counter_ref.0, - shared_counter_initial_version, + gas_ref, + TEST_ONLY_GAS_UNIT_FOR_HEAVY_COMPUTATION_STORAGE, + rgp, + ); + let (cert, effects) = execute_owned_on_first_three_authorities( + &authority_clients, + &aggregator.committee, + &owned_tx, ) - .build_and_sign(source_key); - let (cert, effects) = execute_shared_on_first_three_authorities( - &authority_clients, - &aggregator.committee, - &shared_tx, - ) - .await; - executed_shared_certs.push(cert); - shared_counter_ref = effects.mutated_excluding_gas().first().unwrap().0; - } + .await; + executed_owned_certs.push(cert); + owned_object_ref = effects.mutated_excluding_gas().first().unwrap().0; - // ---- Execute transactions in reverse dependency order on the last authority. + let gas_ref = get_latest_ref( + authority_clients[source_index].clone(), + gas_objects[source_index][i * 7 % NUM_GAS_OBJECTS_PER_ACCOUNT].id(), + ) + .await; + let shared_tx = TestTransactionBuilder::new(*source_addr, gas_ref, rgp) + .call_counter_increment( + package, + shared_counter_ref.0, + shared_counter_initial_version, + ) + .build_and_sign(source_key); + let (cert, effects) = execute_shared_on_first_three_authorities( + &authority_clients, + &aggregator.committee, + &shared_tx, + ) + .await; + executed_shared_certs.push(cert); + shared_counter_ref = effects.mutated_excluding_gas().first().unwrap().0; + } - // Sets shared object locks in the executed order. - for cert in executed_shared_certs.iter() { - send_consensus_no_execution(&authorities[3], cert).await; - } + // ---- Execute transactions in reverse dependency order on the last authority. - // Enqueue certs out of dependency order for executions. - for cert in executed_shared_certs.iter().rev() { - authorities[3].enqueue_certificates_for_execution( - vec![cert.clone()], - &authorities[3].epoch_store_for_testing(), - ); - } - for cert in executed_owned_certs.iter().rev() { - authorities[3].enqueue_certificates_for_execution( - vec![cert.clone()], - &authorities[3].epoch_store_for_testing(), - ); - } + // Sets shared object locks in the executed order. + for cert in executed_shared_certs.iter() { + send_consensus_no_execution(&authorities[3], cert).await; + } - // All certs should get executed eventually. - let digests: Vec<_> = executed_shared_certs - .iter() - .chain(executed_owned_certs.iter()) - .map(|cert| *cert.digest()) - .collect(); - authorities[3] - .get_transaction_cache_reader() - .notify_read_executed_effects(&digests) - .await - .unwrap(); -} + // Enqueue certs out of dependency order for executions. + for cert in executed_shared_certs.iter().rev() { + authorities[3].enqueue_certificates_for_execution( + vec![cert.clone()], + &authorities[3].epoch_store_for_testing(), + ); + } + for cert in executed_owned_certs.iter().rev() { + authorities[3].enqueue_certificates_for_execution( + vec![cert.clone()], + &authorities[3].epoch_store_for_testing(), + ); + } -fn make_socket_addr() -> std::net::SocketAddr { - SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 0) -} + // All certs should get executed eventually. + let digests: Vec<_> = executed_shared_certs + .iter() + .chain(executed_owned_certs.iter()) + .map(|cert| *cert.digest()) + .collect(); + authorities[3] + .get_transaction_cache_reader() + .notify_read_executed_effects(&digests) + .await + .unwrap(); + } -async fn try_sign_on_first_three_authorities( - authority_clients: &[Arc<SafeClient<LocalAuthorityClient>>], - committee: &Committee, - txn: &Transaction, -) -> IotaResult<VerifiedCertificate> { - for client in authority_clients.iter().take(3) { - client - .handle_transaction(txn.clone(), Some(make_socket_addr())) - .await?; + fn make_socket_addr() -> std::net::SocketAddr { + SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 0) } - extract_cert(authority_clients, committee, txn.digest()) - .await - .try_into_verified_for_testing(committee, &Default::default()) -} -#[tokio::test(flavor = "current_thread", start_paused = true)] -async fn test_per_object_overload() { - telemetry_subscribers::init_for_testing(); + async fn try_sign_on_first_three_authorities( + authority_clients: &[Arc<SafeClient<LocalAuthorityClient>>], + committee: &Committee, + txn: &Transaction, + ) -> IotaResult<VerifiedCertificate> { + for client in authority_clients.iter().take(3) { + client + .handle_transaction(txn.clone(), Some(make_socket_addr())) + .await?; + } + extract_cert(authority_clients, committee, txn.digest()) + .await + .try_into_verified_for_testing(committee, &Default::default()) + } - // Initialize a network with 1 account and 2000 gas objects. - let (addr, key): (_, AccountKeyPair) = get_key_pair(); - const NUM_GAS_OBJECTS_PER_ACCOUNT: usize = 2000; - let gas_objects = (0..NUM_GAS_OBJECTS_PER_ACCOUNT) - .map(|_| Object::with_owner_for_testing(addr)) - .collect_vec(); - let (aggregator, authorities, _genesis, package) = - init_local_authorities(4, gas_objects.clone()).await; - let rgp = authorities - .first() - .unwrap() - .reference_gas_price_for_testing() + #[tokio::test(flavor = "current_thread", start_paused = true)] + async fn test_per_object_overload() { + telemetry_subscribers::init_for_testing(); + + // Initialize a network with 1 account and 2000 gas objects. + let (addr, key): (_, AccountKeyPair) = get_key_pair(); + const NUM_GAS_OBJECTS_PER_ACCOUNT: usize = 2000; + let gas_objects = (0..NUM_GAS_OBJECTS_PER_ACCOUNT) + .map(|_| Object::with_owner_for_testing(addr)) + .collect_vec(); + let (aggregator, authorities, _genesis, package) = + init_local_authorities(4, gas_objects.clone()).await; + let rgp = authorities + .first() + .unwrap() + .reference_gas_price_for_testing() + .unwrap(); + let authority_clients: Vec<_> = authorities + .iter() + .map(|a| aggregator.authority_clients[&a.name].clone()) + .collect(); + + // Create a shared counter. + let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[0].id()).await; + let create_counter_txn = TestTransactionBuilder::new(addr, gas_ref, rgp) + .call_counter_create(package) + .build_and_sign(&key); + let create_counter_cert = try_sign_on_first_three_authorities( + &authority_clients, + &aggregator.committee, + &create_counter_txn, + ) + .await .unwrap(); - let authority_clients: Vec<_> = authorities - .iter() - .map(|a| aggregator.authority_clients[&a.name].clone()) - .collect(); - - // Create a shared counter. - let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[0].id()).await; - let create_counter_txn = TestTransactionBuilder::new(addr, gas_ref, rgp) - .call_counter_create(package) - .build_and_sign(&key); - let create_counter_cert = try_sign_on_first_three_authorities( - &authority_clients, - &aggregator.committee, - &create_counter_txn, - ) - .await - .unwrap(); - for authority in authorities.iter().take(3) { - send_consensus(authority, &create_counter_cert).await; - } - for authority in authorities.iter().take(3) { - authority + for authority in authorities.iter().take(3) { + send_consensus(authority, &create_counter_cert).await; + } + for authority in authorities.iter().take(3) { + authority + .get_transaction_cache_reader() + .notify_read_executed_effects(&[*create_counter_cert.digest()]) + .await + .unwrap() + .pop() + .unwrap(); + } + + // Signing and executing this transaction on the last authority should succeed. + authority_clients[3] + .handle_transaction(create_counter_txn.clone(), Some(make_socket_addr())) + .await + .unwrap(); + send_consensus(&authorities[3], &create_counter_cert).await; + let create_counter_effects = authorities[3] .get_transaction_cache_reader() .notify_read_executed_effects(&[*create_counter_cert.digest()]) .await .unwrap() .pop() .unwrap(); - } + let (shared_counter_ref, owner) = create_counter_effects.created()[0]; + let Owner::Shared { + initial_shared_version: shared_counter_initial_version, + } = owner + else { + panic!("Not a shared object! {:?} {:?}", shared_counter_ref, owner); + }; - // Signing and executing this transaction on the last authority should succeed. - authority_clients[3] - .handle_transaction(create_counter_txn.clone(), Some(make_socket_addr())) - .await - .unwrap(); - send_consensus(&authorities[3], &create_counter_cert).await; - let create_counter_effects = authorities[3] - .get_transaction_cache_reader() - .notify_read_executed_effects(&[*create_counter_cert.digest()]) - .await - .unwrap() - .pop() - .unwrap(); - let (shared_counter_ref, owner) = create_counter_effects.created()[0]; - let Owner::Shared { - initial_shared_version: shared_counter_initial_version, - } = owner - else { - panic!("Not a shared object! {:?} {:?}", shared_counter_ref, owner); - }; + // Stop execution on the last authority, to simulate having a backlog. + authorities[3].shutdown_execution_for_test(); + // Make sure execution driver has exited. + sleep(Duration::from_secs(1)).await; + + // Sign and try execute 1000 txns on the first three authorities. And enqueue + // them on the last authority. First shared counter txn has input object + // available on authority 3. So to overload authority 3, 1 more + // txn is needed. + let num_txns = authorities[3] + .overload_config() + .max_transaction_manager_per_object_queue_length + + 1; + for gas_object in gas_objects.iter().take(num_txns) { + let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_object.id()).await; + let shared_txn = TestTransactionBuilder::new(addr, gas_ref, rgp) + .call_counter_increment( + package, + shared_counter_ref.0, + shared_counter_initial_version, + ) + .build_and_sign(&key); + let shared_cert = try_sign_on_first_three_authorities( + &authority_clients, + &aggregator.committee, + &shared_txn, + ) + .await + .unwrap(); + for authority in authorities.iter().take(3) { + send_consensus(authority, &shared_cert).await; + } + send_consensus(&authorities[3], &shared_cert).await; + } - // Stop execution on the last authority, to simulate having a backlog. - authorities[3].shutdown_execution_for_test(); - // Make sure execution driver has exited. - sleep(Duration::from_secs(1)).await; - - // Sign and try execute 1000 txns on the first three authorities. And enqueue - // them on the last authority. First shared counter txn has input object - // available on authority 3. So to overload authority 3, 1 more - // txn is needed. - let num_txns = authorities[3] - .overload_config() - .max_transaction_manager_per_object_queue_length - + 1; - for gas_object in gas_objects.iter().take(num_txns) { - let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_object.id()).await; + // Trying to sign a new transaction would now fail. + let gas_ref = + get_latest_ref(authority_clients[0].clone(), gas_objects[num_txns].id()).await; let shared_txn = TestTransactionBuilder::new(addr, gas_ref, rgp) .call_counter_increment( package, @@ -567,125 +599,129 @@ async fn test_per_object_overload() { shared_counter_initial_version, ) .build_and_sign(&key); - let shared_cert = try_sign_on_first_three_authorities( + let res = authorities[3] + .transaction_manager() + .check_execution_overload(authorities[3].overload_config(), shared_txn.data()); + let message = format!("{res:?}"); + assert!( + message.contains("TooManyTransactionsPendingOnObject"), + "{}", + message + ); + } + + #[tokio::test] + async fn test_txn_age_overload() { + telemetry_subscribers::init_for_testing(); + + // Initialize a network with 1 account and 3 gas objects. + let (addr, key): (_, AccountKeyPair) = get_key_pair(); + let gas_objects = (0..3) + .map(|_| Object::with_owner_for_testing(addr)) + .collect_vec(); + let (aggregator, authorities, _genesis, package) = + init_local_authorities_with_overload_thresholds( + 4, + gas_objects.clone(), + AuthorityOverloadConfig { + max_txn_age_in_queue: Duration::from_secs(5), + ..Default::default() + }, + ) + .await; + let rgp = authorities + .first() + .unwrap() + .reference_gas_price_for_testing() + .unwrap(); + let authority_clients: Vec<_> = authorities + .iter() + .map(|a| aggregator.authority_clients[&a.name].clone()) + .collect(); + + // Create a shared counter. + let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[0].id()).await; + let create_counter_txn = TestTransactionBuilder::new(addr, gas_ref, rgp) + .call_counter_create(package) + .build_and_sign(&key); + let create_counter_cert = try_sign_on_first_three_authorities( &authority_clients, &aggregator.committee, - &shared_txn, + &create_counter_txn, ) .await .unwrap(); for authority in authorities.iter().take(3) { - send_consensus(authority, &shared_cert).await; + send_consensus(authority, &create_counter_cert).await; + } + for authority in authorities.iter().take(3) { + authority + .get_transaction_cache_reader() + .notify_read_executed_effects(&[*create_counter_cert.digest()]) + .await + .unwrap() + .pop() + .unwrap(); } - send_consensus(&authorities[3], &shared_cert).await; - } - - // Trying to sign a new transaction would now fail. - let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[num_txns].id()).await; - let shared_txn = TestTransactionBuilder::new(addr, gas_ref, rgp) - .call_counter_increment( - package, - shared_counter_ref.0, - shared_counter_initial_version, - ) - .build_and_sign(&key); - let res = authorities[3] - .transaction_manager() - .check_execution_overload(authorities[3].overload_config(), shared_txn.data()); - let message = format!("{res:?}"); - assert!( - message.contains("TooManyTransactionsPendingOnObject"), - "{}", - message - ); -} - -#[tokio::test] -async fn test_txn_age_overload() { - telemetry_subscribers::init_for_testing(); - // Initialize a network with 1 account and 3 gas objects. - let (addr, key): (_, AccountKeyPair) = get_key_pair(); - let gas_objects = (0..3) - .map(|_| Object::with_owner_for_testing(addr)) - .collect_vec(); - let (aggregator, authorities, _genesis, package) = - init_local_authorities_with_overload_thresholds( - 4, - gas_objects.clone(), - AuthorityOverloadConfig { - max_txn_age_in_queue: Duration::from_secs(5), - ..Default::default() - }, - ) - .await; - let rgp = authorities - .first() - .unwrap() - .reference_gas_price_for_testing() - .unwrap(); - let authority_clients: Vec<_> = authorities - .iter() - .map(|a| aggregator.authority_clients[&a.name].clone()) - .collect(); - - // Create a shared counter. - let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[0].id()).await; - let create_counter_txn = TestTransactionBuilder::new(addr, gas_ref, rgp) - .call_counter_create(package) - .build_and_sign(&key); - let create_counter_cert = try_sign_on_first_three_authorities( - &authority_clients, - &aggregator.committee, - &create_counter_txn, - ) - .await - .unwrap(); - for authority in authorities.iter().take(3) { - send_consensus(authority, &create_counter_cert).await; - } - for authority in authorities.iter().take(3) { - authority + // Signing and executing this transaction on the last authority should succeed. + authority_clients[3] + .handle_transaction(create_counter_txn.clone(), Some(make_socket_addr())) + .await + .unwrap(); + send_consensus(&authorities[3], &create_counter_cert).await; + let create_counter_effects = authorities[3] .get_transaction_cache_reader() .notify_read_executed_effects(&[*create_counter_cert.digest()]) .await .unwrap() .pop() .unwrap(); - } + let (shared_counter_ref, owner) = create_counter_effects.created()[0]; + let Owner::Shared { + initial_shared_version: shared_counter_initial_version, + } = owner + else { + panic!("Not a shared object! {:?} {:?}", shared_counter_ref, owner); + }; - // Signing and executing this transaction on the last authority should succeed. - authority_clients[3] - .handle_transaction(create_counter_txn.clone(), Some(make_socket_addr())) - .await - .unwrap(); - send_consensus(&authorities[3], &create_counter_cert).await; - let create_counter_effects = authorities[3] - .get_transaction_cache_reader() - .notify_read_executed_effects(&[*create_counter_cert.digest()]) - .await - .unwrap() - .pop() - .unwrap(); - let (shared_counter_ref, owner) = create_counter_effects.created()[0]; - let Owner::Shared { - initial_shared_version: shared_counter_initial_version, - } = owner - else { - panic!("Not a shared object! {:?} {:?}", shared_counter_ref, owner); - }; + // Stop execution on the last authority, to simulate having a backlog. + authorities[3].shutdown_execution_for_test(); + // Make sure execution driver has exited. + sleep(Duration::from_secs(1)).await; + + // Sign and try execute 2 txns on the first three authorities. And enqueue them + // on the last authority. First shared counter txn has input object + // available on authority 3. So to put a txn in the queue, we + // will need another txn. + for gas_object in gas_objects.iter().take(2) { + let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_object.id()).await; + let shared_txn = TestTransactionBuilder::new(addr, gas_ref, rgp) + .call_counter_increment( + package, + shared_counter_ref.0, + shared_counter_initial_version, + ) + .build_and_sign(&key); + let shared_cert = try_sign_on_first_three_authorities( + &authority_clients, + &aggregator.committee, + &shared_txn, + ) + .await + .unwrap(); + for authority in authorities.iter().take(3) { + send_consensus(authority, &shared_cert).await; + } + send_consensus(&authorities[3], &shared_cert).await; + } + + // Sleep for 6 seconds to make sure the transaction is old enough since our + // threshold is 5. + tokio::time::sleep(Duration::from_secs(6)).await; - // Stop execution on the last authority, to simulate having a backlog. - authorities[3].shutdown_execution_for_test(); - // Make sure execution driver has exited. - sleep(Duration::from_secs(1)).await; - - // Sign and try execute 2 txns on the first three authorities. And enqueue them - // on the last authority. First shared counter txn has input object - // available on authority 3. So to put a txn in the queue, we - // will need another txn. - for gas_object in gas_objects.iter().take(2) { - let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_object.id()).await; + // Trying to sign a new transaction would now fail. + let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[2].id()).await; let shared_txn = TestTransactionBuilder::new(addr, gas_ref, rgp) .call_counter_increment( package, @@ -693,41 +729,16 @@ async fn test_txn_age_overload() { shared_counter_initial_version, ) .build_and_sign(&key); - let shared_cert = try_sign_on_first_three_authorities( - &authority_clients, - &aggregator.committee, - &shared_txn, - ) - .await - .unwrap(); - for authority in authorities.iter().take(3) { - send_consensus(authority, &shared_cert).await; - } - send_consensus(&authorities[3], &shared_cert).await; + let res = authorities[3] + .transaction_manager() + .check_execution_overload(authorities[3].overload_config(), shared_txn.data()); + let message = format!("{res:?}"); + assert!( + message.contains("TooOldTransactionPendingOnObject"), + "{}", + message + ); } - - // Sleep for 6 seconds to make sure the transaction is old enough since our - // threshold is 5. - tokio::time::sleep(Duration::from_secs(6)).await; - - // Trying to sign a new transaction would now fail. - let gas_ref = get_latest_ref(authority_clients[0].clone(), gas_objects[2].id()).await; - let shared_txn = TestTransactionBuilder::new(addr, gas_ref, rgp) - .call_counter_increment( - package, - shared_counter_ref.0, - shared_counter_initial_version, - ) - .build_and_sign(&key); - let res = authorities[3] - .transaction_manager() - .check_execution_overload(authorities[3].overload_config(), shared_txn.data()); - let message = format!("{res:?}"); - assert!( - message.contains("TooOldTransactionPendingOnObject"), - "{}", - message - ); } // Tests that when validator is in load shedding mode, it can pushback txn diff --git a/crates/iota-core/src/unit_tests/transaction_manager_tests.rs b/crates/iota-core/src/unit_tests/transaction_manager_tests.rs index 7868b8d4335..2f6abcaac31 100644 --- a/crates/iota-core/src/unit_tests/transaction_manager_tests.rs +++ b/crates/iota-core/src/unit_tests/transaction_manager_tests.rs @@ -24,7 +24,7 @@ use crate::{ transaction_manager::{PendingCertificate, TransactionManager}, }; -#[allow(clippy::disallowed_methods)] // allow unbounded_channel() +#[expect(clippy::disallowed_methods)] // allow unbounded_channel() fn make_transaction_manager( state: &AuthorityState, ) -> (TransactionManager, UnboundedReceiver<PendingCertificate>) { diff --git a/crates/iota-core/src/unit_tests/transfer_to_object_tests.rs b/crates/iota-core/src/unit_tests/transfer_to_object_tests.rs index 9fab1b9a0ee..61795f7bbf5 100644 --- a/crates/iota-core/src/unit_tests/transfer_to_object_tests.rs +++ b/crates/iota-core/src/unit_tests/transfer_to_object_tests.rs @@ -425,7 +425,7 @@ async fn test_tto_invalid_receiving_arguments() { .find(|(_, owner)| matches!(owner, Owner::ObjectOwner(_))) .unwrap(); - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] let mutations: Vec<( Box<dyn FnOnce(ObjectRef) -> ObjectRef>, Box<dyn FnOnce(UserInputError) -> bool>, diff --git a/crates/iota-e2e-tests/tests/dynamic_committee_tests.rs b/crates/iota-e2e-tests/tests/dynamic_committee_tests.rs index 0558a0e0e7e..c76e4922dbe 100644 --- a/crates/iota-e2e-tests/tests/dynamic_committee_tests.rs +++ b/crates/iota-e2e-tests/tests/dynamic_committee_tests.rs @@ -59,7 +59,7 @@ trait StatePredicate { runner: &StressTestRunner, effects: &TransactionEffects, ); - #[allow(unused)] + #[expect(unused)] async fn post_epoch_post_condition( &mut self, runner: &StressTestRunner, @@ -67,7 +67,7 @@ trait StatePredicate { ); } -#[allow(dead_code)] +#[expect(dead_code)] struct StressTestRunner { pub post_epoch_predicates: Vec<Box<dyn StatePredicate + Send + Sync>>, pub test_cluster: TestCluster, @@ -234,7 +234,7 @@ impl StressTestRunner { self.get_from_effects(&effects.created(), name).await } - #[allow(dead_code)] + #[expect(dead_code)] pub async fn get_mutated_object_of_type_name( &self, effects: &TransactionEffects, diff --git a/crates/iota-e2e-tests/tests/full_node_migration_tests.rs b/crates/iota-e2e-tests/tests/full_node_migration_tests.rs index e6c79e17779..c7f8c281b77 100644 --- a/crates/iota-e2e-tests/tests/full_node_migration_tests.rs +++ b/crates/iota-e2e-tests/tests/full_node_migration_tests.rs @@ -1,11 +1,24 @@ // Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use std::{path::PathBuf, str::FromStr}; +use std::{ + fs::File, + io::{BufWriter, Write}, + path::PathBuf, + str::FromStr, +}; use anyhow::anyhow; use bip32::DerivationPath; -use iota_genesis_builder::SnapshotSource; +use iota_genesis_builder::{ + SnapshotSource, + stardust::{ + migration::{Migration, MigrationTargetNetwork}, + parse::HornetSnapshotParser, + process_outputs::scale_amount_for_iota, + types::address_swap_map::AddressSwapMap, + }, +}; use iota_json_rpc_types::{ IotaObjectDataFilter, IotaObjectDataOptions, IotaObjectResponseQuery, IotaTransactionBlockResponse, IotaTransactionBlockResponseOptions, @@ -21,7 +34,7 @@ use iota_types::{ gas_coin::GAS, programmable_transaction_builder::ProgrammableTransactionBuilder, quorum_driver_types::ExecuteTransactionRequestType, - stardust::output::NftOutput, + stardust::{coin_type::CoinType, output::NftOutput}, transaction::{Argument, ObjectArg, Transaction, TransactionData}, }; use move_core_types::ident_str; @@ -29,7 +42,10 @@ use shared_crypto::intent::Intent; use tempfile::tempdir; use test_cluster::TestClusterBuilder; -const MIGRATION_DATA_PATH: &str = "tests/migration/stardust_object_snapshot.bin"; +const HORNET_SNAPSHOT_PATH: &str = "tests/migration/test_hornet_full_snapshot.bin"; +const ADDRESS_SWAP_MAP_PATH: &str = "tests/migration/address_swap.csv"; +const TEST_TARGET_NETWORK: &str = "alphanet-test"; +const MIGRATION_DATA_FILE_NAME: &str = "stardust_object_snapshot.bin"; /// Got from iota-genesis-builder/src/stardust/test_outputs/alias_ownership.rs const MAIN_ADDRESS_MNEMONIC: &str = "few hood high omit camp keep burger give happy iron evolve draft few dawn pulp jazz box dash load snake gown bag draft car"; @@ -39,26 +55,67 @@ const SPONSOR_ADDRESS_MNEMONIC: &str = "okay pottery arch air egg very cave cash #[sim_test] async fn test_full_node_load_migration_data() -> Result<(), anyhow::Error> { telemetry_subscribers::init_for_testing(); - let snapshot_source = SnapshotSource::Local(PathBuf::from_str(MIGRATION_DATA_PATH).unwrap()); + + // Setup the temporary dir and create the writer for the stardust object + // snapshot + let dir = tempdir()?; + let stardudst_object_snapshot_file_path = dir.path().join(MIGRATION_DATA_FILE_NAME); + let object_snapshot_writer = + BufWriter::new(File::create(&stardudst_object_snapshot_file_path)?); + + // Generate the stardust object snapshot + genesis_builder_snapshot_generation(object_snapshot_writer)?; + // Then load it + let snapshot_source = SnapshotSource::Local(stardudst_object_snapshot_file_path); + + // A new test cluster can be spawn with the stardust object snapshot let test_cluster = TestClusterBuilder::new() .with_migration_data(vec![snapshot_source]) .build() .await; + // Use a client to issue a test transaction let client = test_cluster.wallet.get_client().await.unwrap(); - let tx_response = address_unlock_condition(client).await?; - let IotaTransactionBlockResponse { confirmed_local_execution, errors, .. } = tx_response; + + // The transaction must be successful assert!(confirmed_local_execution.unwrap()); assert!(errors.is_empty()); Ok(()) } +fn genesis_builder_snapshot_generation( + object_snapshot_writer: impl Write, +) -> Result<(), anyhow::Error> { + let mut snapshot_parser = + HornetSnapshotParser::new::<false>(File::open(HORNET_SNAPSHOT_PATH)?)?; + let total_supply = scale_amount_for_iota(snapshot_parser.total_supply()?)?; + let target_network = MigrationTargetNetwork::from_str(TEST_TARGET_NETWORK)?; + let coin_type = CoinType::Iota; + let address_swap_map = AddressSwapMap::from_csv(ADDRESS_SWAP_MAP_PATH)?; + + // Migrate using the parser output stream + Migration::new( + snapshot_parser.target_milestone_timestamp(), + total_supply, + target_network, + coin_type, + address_swap_map, + )? + .run_for_iota( + snapshot_parser.target_milestone_timestamp(), + snapshot_parser.outputs(), + object_snapshot_writer, + )?; + + Ok(()) +} + async fn address_unlock_condition( iota_client: IotaClient, ) -> Result<IotaTransactionBlockResponse, anyhow::Error> { diff --git a/crates/iota-e2e-tests/tests/migration/address_swap.csv b/crates/iota-e2e-tests/tests/migration/address_swap.csv new file mode 100644 index 00000000000..7ece8894744 --- /dev/null +++ b/crates/iota-e2e-tests/tests/migration/address_swap.csv @@ -0,0 +1,2 @@ +Origin,Destination +iota1qp8h9augeh6tk3uvlxqfapuwv93atv63eqkpru029p6sgvr49eufyz7katr,0x4f72f788cdf4bb478cf9809e878e6163d5b351c82c11f1ea28750430752e7892 \ No newline at end of file diff --git a/crates/iota-e2e-tests/tests/migration/stardust_object_snapshot.bin b/crates/iota-e2e-tests/tests/migration/stardust_object_snapshot.bin deleted file mode 100644 index c7fa51debb701346cf0b63ed684fbfca4f847da2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3827115 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 uAUavv-RlVISdzs!^vF-My(f45h9<0P;0 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%0D*od{k1 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%0DZG~8asRFd>ufQm2DX;2&%X3=WhC^?5vZ$- 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 `2@m} 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%0AYEhXwK08{ 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 wP1P4bTg(>XxHV<2s~Uy=60h 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%0AAwn1t9oj0&ItO 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%0A!<Smph!yptxCNjEb%p&;TmS58ku|HI zVfX#l)e2xj4qlh{O%ZCGY9_<j?FpV+{DPGCCC--)y6YA))UzlY8DxRShFnv77fvT5 ztHhtU%4b2C4KP=EGP*AI4muj{S9BYgLmd&Wa>7GbIl&*Ua-#opl^^=LzxNe<?-TzQ zUFFA40~u8f&TEnif34g69|ze#bEE&oF7%(wli%n4k3Np3(T~1|%?$j1e0dlW0&wUb zH--rE2!O!?CS1lQ{7@4xlwW|8ha1ev1(QLIVa0Yh`Aj*vz{areVInDy3D`)GkB7%Z zfQOHlkKdSwTkwDS$6<AY4n5@mkAK`A6^2}aZU5Xqe$?uJ_{U)gnD71L|M)KdIIMog zc8(<SANAMI`tx|<|Ir10KmUJzbL1uuPsn#-5cX2K^nBg+Lx3lk*^5CB^U=c0{G5FH z%v7sQ($s8T4LleVd9~T5vK)nL&Rz7rIIHXN2*-jWCv2BFVxo$m+8?J$uH!!9f-#Y+ z7L@zf7O6>^7CfXYl>})eK_X83yOIV)eF6fXYWC#N{Gk>g%^!d`wcsaA0l9?esMry4 z24{9$W=|PtyxS(~>Nv$QzLzbvG|4pALyBc@^PU!-N6IbaJd#Ssw|qED3wBFx!HJfA zM?P>Z?CIAprTYa-69vz4nsi^L2_aBLLZ-!{tJ8aHma@yUp}F`agT&iht*i275*tLF zTeoSAFZmpdhOf{expe#|u2lArNc7sphF!Xc#!m*wNgnypqy~>w+&HTm@S*60RJ2X# z#op+YPA0n&$7mZoM0wY%SzunQwMT4BF<y9UXyW#ikLAcAZf%FLR1--l?zj{kxMV>P zY`>l$cAs&>dzOI_t4&u;^g?u?bMmhW-y&>A{7LC}+k^r3yt_ACeaCF~d-=6Yy%c6x zzTG6&v)v5hpal%wwm;-{sIFY>oLCk%Fd!|5y{#FixwEsqlMn}oojugn2?}Aiu;YM5 zqB&a_bHLj;aoAf!jG^Xs)-Y5lJM0H2$};M|aZTVsHlHQWwatMB(N4^>8mkRy#`Rf# zEx0SvtrM;Ue#QO>dspPL;WvQ~u7@fbx_Qco1oWyYury!x#ORL9D&kbpvm8(a?oinZ z!+{FOW5eG-ov()LsJ;9TR^PAb8}!ZyNs7Lb(V1|v3%kELi=B8v2(iAF{JNl)R=}>f z8c)1dZ~HFkkP*L<3;JGgbFiVa%27>?ox#b=xybR4|Ao~&aE%~NhuM-{ob6qlaU>7_ zP=O!+JX12Ng`G15RbEA1;ur|1ldu6@i`3OWlbn|#u@!%JTZa1q7HRE-oORo6<77Yx z%8}U%G(K!#s>(dCW2^?!_X^-5s}UBEDjoMxS3LV}o}Jj@H`V~#1DiR~JmG&4zu@8U z7m6@&8oYozS(@wdjF0AHfpS@zL5263n@QUoCuDT)pf5Y#c(LP99m^t}UA`jK26>LR zR174fGcpL=p-@WIEE|W%ZX?g(n%dP>lhAmbVTB=+>U60)<xK5@Sa7BjF<*1}oX5I1 z+6f`V*NZ!?dYAdJEcf&*BxwmD!`R^+p(y@?b^Xxdvs`ktq;<^j@&w335x;;&$v>+S z6e$s2Aa)wuxTy{bW(obQDHrU7Gt))B_b-&vJ+^KzCZa0}U#-4m%A&$#l%QvurOKKb zI72;qrAjDGWjIq=z*|oU+wX8bo*nDr4W?cQrJvQ9ovF!mG30x{R}1FrJYBR!Fm@Bw z^JI*IM9iXFZZAHn;$xjvV>-Czcu?}K{bS_zx->QE<kIG4mW9*WjYy8*uS+OW`@kHC z=~}LwFYN=wx9>k-tafl!OESE=xiEhPd_o9;bv-CAPjo=b7t3y&jKS#we(&sy&bQrU znSy2|LesCj^Ak1Ugg_qt!3BE5aCt-U{)ZLWsRNMkbGqe8^nGHzLP0SaKJ?y4?k9v0 z1a6e)lb^QUIM;ru<F#w2vFrXh_ew5X0#jiN8=Df7zmxccRD~juAXOpXO-J2>&6QBN zd`&Mc1>F8c-y3JT$<0p%yYn?bu`L#k2)gu^B@#JuEK$x`R~lwI8sJ=mvn3Puw2^>@ z*tFi+s#{$7&`yl`a|oOf|Ca0fe~$=ie<<ZN@KOFb#iKGZQN{7?(Dkw%^DmEG&TE&9 z8DHpL{-21TL}m#h@i*<GMkwU<`?h8hx>$S3tQmmkQs^0}dEwNtSB&`t1;Jo`9%ECe z5m?ZKhYObf$%u!GALfWLHZg%AgN#hMjCf21_ykO0jvRhoZZNN)5vPeU9}hR5F$8Mz zCy1a@)Ox2*PvP$6=dNh_o<w&WNkyp2eb>Y_ZtJD7RiTR_kPb++uO+hFCXdpzCKn}q zq%<?F)|{t1ZCF?7q;DLpQ1RYgccDbmXBDntSF1shl!vhh+~L~J-$N&Ce=0Oo5?eq2 z9^>QZ50|6&6o;kN<JxZ`j1Y(iG$gXF?~v^l<h{#^Mq}Ea|8OrGf?Yvk@uis|EC^%y zh4YbS_jYoy50v6iIBWGOuGzdwi)B(JnDIFuj~07)>6VUI4P2Ll?S46-D{yD(72i)= z|19ULJN3(H*j@j1K*Q1V{_qo->5CIN%Rl1RDPBytdb1(YbNG@m<^~|L6fLsRwr+JH zp}*b@_(T$p^+#T5g1@Zh400D^z62lk7YeU>GQYA`x(E4*zF6@GJ-}|YP!DzZTy56e zoYs*F$4MhEC(Pd?p?9L->4Qazy(=`do)3%h2v~2;GX!7{yk{j;mXL5vl&`~Vd9wf~ z1oFz)C_92KUFF~PAHaJSFTJ_IBv<&TDO|Q^d__orD9c)68exk7a%Y6-Tyx<2P9N}9 zY_bU^j~ri`tEwtOTj#_?XKk~Y;}nnM!H{P^`Fq5JB}%gP`wLJLq@-ifpSozpZARN+ zS&iNFkZ$_5o@A}xvxrKo({OJW^6<HePYtwsdBWPC>s?uif+fi*nsCJnN{<6AFLX}Q zg>#}Ja7G|WPk7x#G#!8{JVI_QG^f#TK+$GL(!XxbKY1H$HIjXGweVO^ILepdlz4f@ zeOJ@Vw&mS3)pc6|<2(I>0FtZ)?3mc3M}eY~Ojk?<VTu3`lnWL#0Om1*C69&h8S_A( zyu7@yq_Qv-!I+oNlnZuj%Ec$Z!*62BZ^Q%UgSCV3@p3^;A%CVPe5*{%Gi5j*<tSn8 zFnQi+LObj(g(Rw+)V<p%Z&3<u?jn#5$kY?AB=`{Xr~1kQ_!j+5c)zh5YIY=PuQ_aK z(H=xlj(ie8wFSV1Cgf%1%)22LTt5k>VEuA`RGw<i(_p;C{f2M<mDAgz*5NPTHvc*y zzO(FJDg78I^X##n(Iad8$cu5l7n;~gQMqFME-tM<JDc9z{JPgS{nq6}BicXTe*NbE z{5r@5iX~oE=1fGjNBd$0Xeh%855#zhS$syqoa^B`r>>lwvBd@U!OL*_KJo;G(XXGB zT)*Idxgf!B__n*TL{8nMPARmpFj#pR%|_Tt7GZ=yWSDFmFj3P95+JZxJpd`b^QK`T zLiUS;#ZyI*Ji$*1Hx1Ks$B#6{L}!qAJNieBjlK%(n$$u&jq3$e?i)ZAS%Jl}_Soy< ze~ca=?IbC1dG0JHYn@9ADUBW!{Mh2btt4Mv!nZU*JKbjUKl}ck!Q<VNruu0^R=0FU z(E)m7%#?Tdyk20Z*Yq-%bEO2oy4YbCXBDwgKZ*wH!X4y|U+;Qfk}_^Q+Ealf2hT~H zipYXlis)&2hwLj%KYV+WKZL;Xdl*iFqHOAXT(j3U(QpV%UdAQT?0|+rRk}rRZsw($ z2)g~1&YA5~M1A&fpE3eLEGABlf(>GM4s-@1Et^9f59t#8lfI&PFI}k@rJM65XGhq( z{zFEe?~(c6WugOOWR*39I!=^nnkv%!eTaG&>ry{g94S&$n_CKYy#4GM)-j-(%MI#c zFW`6#sOHj=)=(8tJND_*CR$btx4irU4n1dH>X-9qkz(HB+o{`>A?A;7w)XK*XadOj z!fu%u&N13d(0?|?=UO0t)n4j2H6j!;tF3MH;gJOb-yNA^gOx?5f-;v_(j$%TC0T|i zRj#DAMprM;(vq-;4F?m>AD4<k9%}3_D;0%Y&C)suCpiQUN;jxI##%I7EGq)c3pyR9 z=S4y@w9z)nbj<lm1gVf@=l#n#A94xdHlW8bbwg3ZFkg8wV^&e;%5c^G3fo(qKEJlv zo&3dP6(4y%*}sX3@5MH3fP3nSB=|8ED5rBlK;vtQLW7yH)Du48z|OT?Ov!s0@Uk)S zD^f_xNS%64fGA8#gtGA?zz|#;#&;vU^Xtp$m8o;n5-T-|b`A(zBmNA~ns~QrMKNhh z;5-+uVA*`lAmtZaL)q7n5cbVSt}L$hvxkx<0%d{1h|V-ah4-sl9HnH^NwGwRkG_Sq z1NB{PYP51_U&&A+>|K#N`vZ80&FEzpX$Ji&B}X~}O*PpvZiNd!lCQ(*mlwl*K<hf( zM|>!NB5(G`j9{VGMXp|HV(M9v8zHi#6R@fr4)NwpjmjVAp2M?67$Fd;K;2FZ_VU#q zEa`a~nJYViTfDVvW(UD}G#-Ph;jmOdU|N2pKaFdIsm47HUwIWdh2d8;<BQ&lW6E54 zYtsk6i&n;i=g`Ux-+o%?{wQ=9*7|2P?-AHze<HHqzv)RJ!U*`Vw*iXpUh5RPqTZ5o zV_KfMruF7HbpFEO+aPe7vh3iiOosA)_UO2ze}V8u`YRgGmw?fmctoIsEEOo{AOhbN zu_)ViU}6N}m*yQSb}>yOH^abs=ozax%{boubhq?;(X@l=!lNN#Les=`>Fp4kV^D(| zqtu-(hEbh}#Q<8m3+p|t7EcI#;o}3g1O5zLdo)CVSfaF9KW+W9t1V4&_QURqc#Zr| zng0XlS6|XPUp?Qxh*NeZK?*cG9{IY~<B@gAMA7*BY0bkvK;WnX7U-Mg_dzKqRQ%6< zDEUl6$mO5s6XZ8%#=ZZ^>HWKZA+_swrn_ie7d4PV1s5BJZ)H+eScGah_6F2z*G_if zD~%B;#SyvxCY4VUWA9Rx;l_$bh^%mv8$&L=^A05<UAVtTk+G-kfLERw&sX>aF76<& z+<;i}lr#_vO_4xJmOPit<<`^3xqX-Dh|*P|Pd(yT^$QWmTmFQP#^!epQ*nh4nPR3l z<1!O{te;e=BcCaHtEgw!?LZ=f;1QqGXJWI^*Y8ko?d*BWv5UQ;0AQEjyY*N!Y<X%j z`bj0i-W9pxPC~kaU7~po7R0X3hvq?;IyBi-`)uT@$BpaY8kTE0m@%U<a5vhSJMHnv zf!jIjz7u}yf37BvPB-L+{%wcrp1=ck+*vd1&PG{F$zB}<65`)-qy1+x%_OE}n=d_= zSAO)3ZDX&))Qo<Qj<sTKc~>G-Ad;`bboy|99C+5PVD`rYgC1Y<!+d0EsD^2oll9SF zkavyQ&aSv(9vBfBRM1z;g)#)bjt!L@xjZ8qGd9R`j(#1Z$8>1e?O%Y>A5N}+wjmWR zRNzGKm&89_3j-KZSc<fA`OUvlmTtO$Gsfd(34FA*#%q262S*^!^QB^WK9wt?jM_ld z-GG^bg1ZqzR)5|qS6vzyN}K5(XoA2oj7(c%9rl~+q?!B$Q^fgn`z{g^W;3-;@qC8i zWkj>|GWXuPJ*=04$7CaK1ykN3{_tv}j#M#^EO3Z5psKt<Ln`@Gw-E7Jv)ADyR5K@p z5Upc1j|+7vKi)8frii9l&@0zfMr~AJC*xl6Ts&XA(@c7Q1Rj%(ykxnlVjQ0FS`~$M zpDUyVzix%3R1#t^sn-xMuhe?Szo11wA%y6hHl>~uqHhk;W^a=@b<KH&Tbc3QeQ-bu znh{pgt<!F0sl0HR&fZ}x3OUQGrGwPvZRYp~<bk9Qq=~ogg3<#A+a9GVnyw_SCvYFk zoe)BFv6P)J(-%`3PyR-pD^Jg05MmxecRiTq9%%$XBICsr7Tq~`pbhfE3aH=H`fAw? zTC;SM2n0aK8parxZ=)`Ryq!mVq$RF@o%N&;f|U-Zk;#%;E?hZit0e2H4r(>uyGugR z36y(kafM%Z8a{0wW*gc;UL@$)4EYWb^Lvl#Eq%@!tNR=NQq`i1G|^DX_K00V_HnM0 zLI`7GnC;-Ssq%}+U|SoffUt!g@w7En3#Gdk+8;^Xobsf|hf7V!1JK#-+;YHsGSS`! z^44FvV-zXr*4xfPLy9GHUNgn+^LpJ$Aw+ToS&X=-`HLk`_Sm~;g?vvgn8b<MNX{l) zxlyB8bDY^8d5*uoEVDgwb>WdS`>L56-5M=ex0nb&uF(u?R44||T>ti>Z$}@{^X$0Z zBl4ssgw=Zld}oH6$G%kv3=us)YIJ6D`r{Xm86uKpqx##QmKEp%q>0i27&>`yBeh~U zJ(?ub7mQDPy#rG=P}P{U)H_~)dcQ0%#l9}T(+h-6M@0G^t|hM5)rc?RWmi7F=7X0v zs`ZX(Po1F(O*nd2B#Wm)y7$P+81+qo-n(i)d*Z9C;!S+Pec61%+<c%S_u`o~%66`A z-{H0ZfYN#Q6ya_^%$xU;XG7}i2&kg>_r^$~cih7BTmqb<U4FeMz9Yki&-(OP!tg>j z-z5ff`^~4@hGln+15E<s`JM<wtL=AEo^ya};C~q|<xkDdy9D#6g_gD?ZBm|46Ggli zNJml7k9U243agta<ltH5;S(az?Ch`2f9)m~O8nZTE@j~&vWr!MogSsvf*R%myzTjm zeSyE;(eSSOCp)AXFm~k>Kb~IgqI`)b9Hrvit(?OW?L9#@{~W}0eOa-l#BKA=20XhT z^6Fnj%Pm*Db|F$Czdex`l%H5GeCZVCeVOI^XJ6lR)tKO)KOuzJH~iolJ{<mRM$Bs( zMN>n-g=%I%-q6HgwD}pGQ?IeTXtD)dOF&+M4ukI6#R)pa?i%lB>K=^y!B~k)_qQ2c zIhpLnpmc`wjK5BZ?^w^lxw{_$rkHe$H&icQS=nT9RVH_oC%K(oYhoSGN3A0;Vd)7| zP62=bR5p|rn}}Xx?lgsY21jxnA%zPx!$bXX_ttA`>dRw({pSB<Cc?i0{TG>HlhEC) znl_0vRwHhyVVLj^aSbMPJ`HjZt4m@Wdx5U>?$8uFIwl+znDNM?whP~+Lm-Br*H5^$ z_>B^vN{{3IJq9XDAW?`3ntv~`n`3X#wE?<rb=-GfNz{cq7erWghPmu_PiVgMBpe1h zwtz9xH@(-f_BQB!Ak!*p?pfvsI%clalLEcohg~<Y2xV|OAS5-1s`XS=yEQE(?!HXV zRszJ!3ST1q(hKuCi0n9B<?whJaWR?7sc6lslooua^0GQleM6k7UX;fG0!Q6HDJ%JH z>|<{AgLgpU2@C3&7slPJIlN<vj~Lp&B!UXX<q7MKV_o1g1vZFtfk|igurI`EjW6y+ z+_-S<31=s#gOY4CzgPy*L$9pCiN^TF8;?I2Rau<l+}xWl*J2ntjcNaEVgE8FxBsO; zf`H<qTD(9Mtje~R!Bj=WTArk3Q$v*!{H<#w(u(Q4!QZq^l#4pB|3^JxuEWRqCk2IJ z&hewG|0l{xB2<D)Vr!_}btxrz!vs>gkS`K4-8S{QTOxa(9GfZpa_Hl^BMC0~iRZ;z z9wN#SF+sBHGcVMJ1X13I?Ksn_uRIR8%;XUBJ<n<Xq?O6Qz}jK^(QO;MiHd_;TOTEr zDw;cbWNU*@_DcA#kEuV{Xc9Xm9z-`S!D_~Z6}>Tj<Z1Xb|AEbjT}iO~hs62Eibu~0 zpzP4;DxS{3iI-O}4hPhnCQ9yX9@*5>miY`}c71P!_3JnP{+0gh7@1N{k|3#gQLGg~ z#n7%$ux5-7wIALXMp1%(S9(C5>wM63$$AI{T&gh?S45KSQ*t=VMs3R@PV-5BJG&;P z`Hm*(#}N$IlzdzuIVK5j#7QB<=hIs$Dw(+sIrvqtKDa{eQUXh}qE`|sv+A8xb`{*# z3DD7Dqi1Kd(jQ5s^9oJVK80zr)Xor|!tk#?RdN5SOa^<NG~xW&5x&YahI<Gj1R@zz z956}9*tR-Iy67Tzp+^zk>5UXVhm0mxYdR}INwjSVJ=~)iKXeXHf=~P^sknmiSMzg@ znoTu*{<`lA2H7)i6#DDEPX1%+0)NJse)c_=yk<D!5lBe2%OqW5E@FR^xEtHJME)?s zI2cv$bO;9jLe!{5W3|NygXFOjrPFU4NyzxWhZ7}9rj$O&B*?>4m|^1GI!yotpPH=m zwBTK{4=<>6@e0J7gIg%z*jVJ*?(d<Kouj|>2?KnEw|DyMd9=GlkKN-}q{XZ$8kZKB zgHK4E<|J7+DJa8><kuN8LC<{E9Y4ozeEP61ZF@@AN-IV_?dEZ;2=W~5e_5;u{w*|! zwFSfpP2zA5I9$jMw=iJR^&ADTVu#$PjpxDd?Ln+7rYd4Cx}ljxTRvjeEo_i?wVngH zC0`giP{Z>C=4N2QvgA8T)2t6{=KEY(=CKmtay;;-tx$j<l%KW&0I71@cJ=};1FFhy z`Z2LJqs`_|&0HN0aduJ<I)|xm_XuGt9CBH;_8s?@kPo8-C|k^{iC@;vF_UH86YJP< z1)-6npiI@JN*R5IXKzDZ=AJ&b&9|JLEKWM*e!UT%+uTCM#uBfiDp;r*dbCx`M+Ff` zi2o)V2Gk|f*uTeg4;THKczrJJMRb+dYttXbuoc`QqdEF{4i)jQr8n*ud?h9-zu0|w z0!zf}1*ZBW@XD@fGh3k+>X}y@z_@jRJm<pO{<~c_UF{5b9WYwuKkAmd_bIc*f4*>j zHwb}UheQ-pl5=nWQu#Ow;05JtHzOhUM^8`PMxXd-BMOMptg6IIKTf28yjm-WOQi4{ zv;6TMsS2d41Mi{;fv}BswDW#o#dJ086ZP!_cg2qrW;+<>5-rEcQIUsD{d*)wP4d-v z;p8tkF4&=()}xfpz5L)ZLv^1Hp}RuZ3~1`PRH_m7Fg&S51Q|*;a!^d6=&FQJW;E?O z6vd!T;EP=@U)qAe=?OKq9+k*fi`x_kV@-eN6iW)?x4behaC$CBHRW#2EGCAMSBbQ~ z)ICAkU{6v$yU@ewg+Qm6bHwE9h=k4abG)XsfpTux-6Xh5O5%_Nw+9-!SbiRa2zyuL ziW1?s=Uz3N%k3lvj7NNP7!vYR1k^tpc!Or(B#CXO%h-HwZyb(KL0)AEkb*(pF1O;F z&JO8|?j`zPM3d(&t=~%~Vnve_X74rmoDf1pKGOGDv|S;c;pWf5MLi#L`H3z#Ty%`M zL0=J2Tbmj`&|3)4-H$w{*mMd_%^3sBl%7g7#p?^Bt5X`I;-YwcBeA4f3fJ4^=}!nD z;w7)*xV>Q`8*$M*@Ylk!NYP!;;84|R9X3nu58qpMvk;htqk54iT&GNtHB^O)j}Xf( zqjW@EbbY655yW2HEQC>6h=v`KKXpO~k&KU7pyAhI-pK;`CVa<q9n^5WB~^u|xzxq$ zBJohkvHC5y<%Fah)qk1#jodXN1st!^xc*RMGt1LsQ|>*=n8M12d!*j{xXZqcKi*q` zSff7pj6fcAPVbv}(>E1-AGwjLv8JuDH=68BUp4IdxfTbMbl$Y2eg5?s@tvdT5%4Ux z0?(B;DG%>R;(H5BKCRCK-p43TMs?2?et6xwhR%iouh`lBz)x<d&+GqV?<>Hf+S>h@ zp}Ua|Y3VNMP&x%ci2;T#89+c%Dd|$W1rd~%QbZal6-h-}q(K2`_z&ZO<Ne=rKK;JS zJ#!w;-TLg=?7e38-s^qWT5tZ|zR!NVQq;ALmr+)U+TUj1>8mjlzXP^xV*T}-|G9?n z{R&+5ghxdLZ;9&n2=xy~{g{MPSi260U5bVh^6o?O`^Ox3x2m(Q!!V=Zhmb9Z;R-Sy z9lao7N*^QymV1a!tTm|a#Z9t)E}b1!YW(ytqu@In3*V)`eaa~%u*6?SBVRT&k6OuJ zTW7L>S)RXWLc57}QVa}!n)5%S7+7i<pdfxt7;`XZGvLYC6<Jw3-+)(hi*1PI=29}7 zfUJ`R3Vt5Hf5-w=@1mYZN!X*3&X&6<`5f>fP%VV<P~FeaTD8I><%?~}&Y>}!!TTx3 zn7%IVs5MJ8_TLa-LZTvUh-clKpa=U|y+HsbHAJ0}HKLs|{8f1w%4U$5>*&W~SAEK% z$1E>UE||=Vv9>Pd?9DD|k;2eXL!MW_sa))XOJr;bU8oj86<H#f-)_!+>Z)?~FsS$O zTSb}5(jUV+BZPQWCP=;T>PGv!b=GVf?XM=SqP90gm2XRqA*r2zZ4V-iQVxW3B9>HL zMQy`4`?m|XlZ7RgLiMkFtYCR(^(0R-x8A(b<K9_O>xZt|;}J-Q*{BRyu{gR0yk4MX zNGLML-l$Cz;Yup1P7H6Efpd;1N}Dlj6|u{Cn`gC}Li!RFLrE9oyT;kS?x=8i$7m$| z8wiX)$j-yFgN}24L8&~w*(0q2nJMB2HA^<cl(u-d{-O@|Y^2EOWMHzhx&cC6L1^k# zlWiS~E#8WS#}64*1c=rRI{WI%lddA;oRQ%;LLNiq7WmqW{pz<J4}T6!>Gy6~63GEG ztIzFyAz!|{?74jfX4>`3v4hjR=p-M`Lmg@6NZ!7K6V~?Wl`;!9eRAAk$JDK7_Fl?6 z)n|kdW2zx8XcQQnnRAR;b00Y`r(JDzlmQU#crzhDT(!AQh9mqER8Ma>{zRKR%^)r9 z)ERDu5dyyVnmUnJtkZAZ{*bWF3Nc9W7<NZ7w=0}+4+&X8JaY9j+$1~f3EccrFle_{ z`gVV73E&YwG)){apo*r18*DcF<1>r<=hW{mf;!`h<f&itHW|!?zT<VzA2J$Q(caFY zHaNWi&eQCPTd6a~E}`xM0@v3ae6P^<QK8u?-JI9iDqUDieoE0y7<3%1rc=iw>vZ#W z`x@h0vz&7pq07{LEHu-af})vM!K#W++Kzhy&>S8DNP82NbFN4mrCB^G`4Zja<F+)d zz_G`g+Jpq8M91)2&@cR~=@}WspIK(<KDj>*->IB?d=E2$RpVv5U8G2J;!cO~$hYu) zseBYYSb!A#q|8RAEWGC{)j6@Zmvx;{67?@a-t8sPsINb3;z#Cp{q%37t{t<%pM0Js z>ox&W7rhKGW(8?%;9Lwx3)1KRDkouWlBQM}xp|l>`|zXKG4CqUY3_dUBQEXekBjOx z4#mszK%1TB+kWzNEz`uyHZA!0VF9=24l-KUrZ-kh4Wb=Kb>?*4E)#?}yveLTm)a<c zS4McuyMTKQ1W7+_{j*<N$JV|1??+_<Qonfbqoae!ceVL-8b04<@9`d0r+6V(Epzb& z=0JV4!*Qws;3(QZ4=syw0TUGg0T}~;fCsHNf~X*g6bK+dP5?9lP=|qCK(t(B6O=#{ zAB;Pw$XFq$_6USP3?L>D3rGQ^1X2M=5RidTq;V_&G$Q~BwnshMBLZN1AZ(9#v`0n* zBA}q7BA}w69z6j*6jU34M}&z0#D<;#0twL20SJh=cu=7Wkq8GDx+lYj9wVJ21OTv* zNU@=NWO58l1XN-G5&!`M5r~Y4jE04bjD(DWj7oq;3`9dfMMFhEgFYJy01W{X`Dh0_ zLOMD^2cV&00*{Ump*!dw0O%=n=m7#MIs){Cj{d<KL4O1YZG(;gZH<nAhzdJKgq{Up z0*=0b0zE=LIz~ePq9Y(9{@xba1`&Ek=r@s%c1TBGM}eI{{r(3KcH#RU0O%>`a~%C3 z1`q&yP$XGLYX{7uohrxyWC?cu5zkx|>;f_exqxIrPCuUh0p=VF_RZg#A*!nBpr|{! zSUWmk{?G<p$6eOZ!3FH@f_TN*4i#i>?hJ-Nkj$X>{4Yr?xMt2^kPFz@%+=W$>|o}B zY3^!o?_q3V4Yo5U0XtYYI-7xw?LqF=_OABE5LYKBI}bbyXGeQu5X8*d+St^?1q?y5 zcCdCqvbT0{fhD;(fNvr>I68n)9AQsI=;Uf@2Q9V^u>v`RjU7#Gz-BJEznyb&201`1 zz|IuVdpo*19Np@-*D`jz=>T?ySXn!vK)?>>U}v=Bwiqt%#%900nya(j&&I&<i2jq$ z<00}VmyZ|*>FBL6fCT?7iG~{kNbxUnXfS}%Qal3Yf_x%;=6w9nqBR!0{9tZj3w|>p zK>@I!nTUljScFeRMA#I>3kHF}rqG6h(4v-RV190}kdP2BzlA9jEfNRzh(Hcu1T0ic z1Rf0NxB@^K7Zn2_48TIeLdQl&IZoAqo&sV3IPuYi5i!v*(J%qRNLVOXNLa`?$k-?+ zt%Q*=k+4yOp$sdGiiwPch>C~>9S1l-e1I@?;6ev9^mUK8>SsNR^k;qc+xee$?TOO$ zliz`<TmPcX$;A0D+8kXvE;96I&0u2QpI!X@Jf7$8$A5H$=Xw0%h-XA<`IgYETX(O( z4@YqFk#+b>(hCDZeHWJxTovAGiQ9w>Bc!}Hfa!p<v&0F|cLz9e{|`1EZXuAUD8vQi zZ0-tiF?MybbOxD&jqO0DU^`J!Z5?SXxhvW_##b~hX-Uh;8>>jm$g3b&zb|;5PQs%U z$nn<Heu$*%^7%t9LC#1^&wxtZu!4w<QzOJ5h4-WZH(Qa6oL35){p>~rzNM+<cf6l} zB=uO};NVUClUb!BCOO6M9)t<R;b*(kw>PD*>2oAMB+6a7;TpVa{XP&{n?g5*?2H&5 z(olGdUmF|0HWF;n2@4RXiJcXSyywV^_hJa|9&^E?3aLa80}Lw;euZ9qi%MSj`udB6 z7`cm?pjgaI?9Hcm914F;D0>j+G8T35)R+#gPP;U0Y7I+_FMa&g?|7%HILPC#>)|zC zEEE)DRuo&2LGRhhFx-cQY{Soo{%l^ClF`^EV%@$G?fi|yprOiWR?_(=;TQFV)J(m? zYfh06f1{A?Gy=k+Cp(Woc3PoihvzMC-{>({Q^ve&@zUhOR@boUt)q}_=E?!o$vS%t zE9{{6MTt($JIWJy5NtV1Ui?-jwohCYfM<IuasyhjB9k*KhQiIboYEZg{7LfLHm1&y z7$Kd|qF?X2lhvFhjb^X{m)ec$z0rjX|BRFpAj#mf+*U<hQPxDiWM51n1i#h?J`vE> zSlxLuq<j6@rSNUP^x#O4S%0}^J3IcDc@|eBZdXqC*k8UmAdMB`ge)@bU6j2ukPD$r zwVqu3kW}BBe`Eh)aizlO|0zQMrwE;SMd)W^;E!b0AI=>Mtv{UlFNgn15#sr|A_V5; z5fTwGHy02A@q>8zz<k0`RYyobP?*P*M^J=E&>RE?^N5)92=iI+^IDkl3v=^<gv`Na z7JOi6Gae8;6``N??Efi3|AkYI|2T7sP#Syf&Z@^ua(hLOXOWqg%KT<v2Do64W5)lI z-$ilZ^%M9X_yyRW9{kTS760rLo)LX%?4!)L&`t0#tBsy%a?M@RQ8fKl2AOqvJC>Ug z*jC1wiNv=KLo9$_mF<+9g{!$DPpiUn&;}OPrX|O1r{((CT-ENq>UC6zR|x)P+2#i% zzBJxO@?bO^Ts-Znm#TC&M1dw5ZO>QwRkGYLv4LHTuU@v?x6eA7$7LR{tjQ&Bk<8y> z0?eTYSTbn^n12W;ZR*omX|lX@=hp?RKO_Fh`M&`U(^2T=(Wa2bXJ;KCdJ$9TO6lQ6 ztPGb@`SDkBi~K}>YE}v9Msc>^^MFC`P$&7(w70yIAY-3vyhFs?ulNDFr}$=ET5)ca z8ear-yxQJFmCNr2YO66OB9$XX0W9flwAn*m+E2P{lV$!Jl>7c%f4+z75aK64h)az4 zINZbpv9<Ld4y)hWL8JQUtG)Cn$I<^a3j+3sk1(}vi#!ibMx7SxMH{QCueW$O>dz6R z=0A0<vtE-%ekQ?RI^(z~yLd*dYiSBEfo}evZw4Yv#!t)3&|H|5i1_qyHak)(P2oU@ z<X*|-HW2ExLD+&{bpm}fq6`kf;s%6L!KCGl6<)vgx4SehGTiq$8r2-oc+LoDLYjJ= z_JFy-aCBXl;ivf+!ELwnu(>7~@02MyKiWFZfRo5GtK{Sd@G*1#Ga}E@G!uJctm`^6 z)6v?A7V#-fCCi2rdadY}o99z)BfjKVee$w{#p}b*OU^i^uZqjn^T94Hw|G(3$C0Hg z)}s}(<)zT|IQ2(4{HF&2ewtqLTWLD1&u>qBeQtVzjOe)?xV>vAa&_f#h}pED`<{6B zl@p*e*_5(p)-#D-%lBh$Hhisf53)mH)719REOVY*lQ7dgI9|~Jnfvs^i>u^x30Kb9 z2IUGrCcNYD4hthJhdqYBeX&6&{n$wk{ld?h{<=JLeD^>5gzKuRA2*6HoOpdY-f217 z_mPie;5qt8Zfk<4p3#J$+GzdNMKKLn^eX%&bIljUsxqC%sSlqT+I*0jZ6F4G<3EVk z-5q~1W;C0yoOnhEVWJ?F>DF<}k<&o)ATCyf;}(CA$Y(U~QKhmsb-f9Ymy2u#u)uow zrJA5`K3bDlTbcAB#^uxMedAw@kD=(^PAV;S*MnPeef0Ed!@}2n0A48QZ0i)a35{R} zDdJTI6Ng2q8fNT>I{SPpRW58lL9d6O^YEX6UY}+YUB&Kw-p}1oq-+@feeR7{+{3)V z^+AktAs>b#a}&8O<p8kQGx#~wJ}6@fHW}h%k}+mrITovZ5mkHEZ}Xhm{8D&-`zseJ z`!g~%+3XB99r%YxeCf@-ubFr8wzK9Ok}3`r<Ae8EiaUhb+z&UYVYrv@BLrdR<aC9g z@~BY`5|5(H{VyNfI)cY^ZySC#-O?G4d!Two2;pCibN5LnTXDcn;Ztm|?EGUfZkwvu z_ku3_P%z=BHNRI(1u#Ou54hmTqf#&Os38dg6drrc)M}oboZFvO$glWG64Q|-_7^Li zA|d`xp3OTQO~~tFP2|C3v!kU}Y@atG9(do2GP~7)>2SV6HRH&$*>j=hie#-8q&ofv z6>Xx{#<l4?FC=e=>i6I5kCw7M2nSSMs(zTV6n36=Q^a||ZY?A4fx47o8x8lHuo}h> zkD2OEvFqRnMwJ%w9`n`%0#cV*V`pA>rsWBj{Qf<JTkQ2$<y=@@_T;v-acN;@9Qf%< zI86@OX7^sJk6KP=wNku85{V8!54nOHujo0wvlYf3c4~w;O<hSlEkbpH_ky|%%6;O; zsmmX1DcBAXJYVQ99S%Q7Sw(NgISwc$0SwC#i5R{&ls=!5JA1Cr+GsnY@~N0KKGz8Q zb=H-}AGMT;K9y%*ULY;$m<S?*<oxd5QMyQwKcOp<sLfby|FYxsN^iqg;)`qUsGpZ) z+uda5edymQCH79fmm>j?&f3e7M1xUlPfAAi78WiBzcM+gpLG}qZOaU_Y?<5?+$JV; zg?P2C%ROSg4iCJsnYwE8w`9p%X$jta?ltrj(GtP*=Nb*AaY6Nb?~7)bVjb_R-es@w zJZ8zf2GipC$ho{5lnd1K7%u1lb7mw`Fv<BKKmE%n;?n5HEcr8!FTxM%d-8!*vqTFg zPMiPbrVEc-p5A`*HnFzNQ9*(N9hL8z@Yhr8G5E4>>Hy`T4uL`mNZAk73?ugNKF|l^ z*GDyeutQ}xp9ipt^2~tqYzhH`bJW~F$>i9yGllZ<6!Vm|UCD5cNxphDx~t^kHJ>v= zh)nCpyrE+XZ=^k@zm$w0CVt*k*afdj^QO&icQ^H3K7lfV-yHJKfHF$UVGGiIkhxw( zzI9`k_)~Q^=A2RB#)yieaoJ;;^ZPL;MsfI60sMy;#fxpS>+ZO!f^G2K!)}F>nl-S~ zGj@Sm_6{nw-u0}H&2qkxg{`Xa^VbdSe^Yha!`ow$7BczJ@uK9ij_WhkuoqA6sx2Yg zi`iZ}wW;Y3g0NcwX)h_iRGLo8g_X9`$uf(XTse@Cqr5V%U5GN=sHAQk{L|GA0N_6Q zf4n;W+2@au+z>ZQW-AvLCx|E)*Ug(ZIjtRCK%9=wmRxp@mW~|O&@2@WbC9zwC$t@k z`XyR51swoT{SpEI1A0WO2!XhQodK9SR$$ui7dfG^^VEVDLREP|l1hcDam<D(rV49B zSgMZqJWSq4QjVjx5S?NtVwr*<(7YT+R~IK&7fhL>Kh$BzfFpn7zuJIEM{kOxsIDUo z&F%WWr32DhUSJ>k3w<mXNe~>I|91a;JLR4C%AK}h_^|^L;XO;o@(Bcgw%MhU)w?g4 zXgYza(~v1qo$ytB`zD*2{hj;*PtB7%1ISv*lL7ZXIaOcCjSEGusU%7;wb@PcpZO}b zpGoFKI$_~|NW=8A>k+H#htQuq$rAbX9{eGswN<pPn!~u8-}4s0J^b~zX_YTaBbRM) ziA@o1tk0`P`E|B5_Z&U94L6fryvX7u!s4qEIAt^2l}aJ+Lbw_lZt$YtA<`cu{`H%m z^unJUz}3w$&{;#Z+2WeA!AM1el|uE9%!V}thevomKJr!313=nPSsV9JP}~;$@a5&4 zr9K-vlWW8?qlN6?q2~A}<OBEkHl;$ac)QRe5zh)CW~D3#A<3V)KHgK-cQbgG3|wXk zups#;n@_?*tQ8keic>ZZ^EYW=KZg_2ASE?sTzURx31oGL(+J3@GErJJtdCtWTSs}- zr=vS(`HYN+S(g<=H{AsB$U(z!X`hP`JRgjU(G?K7tZ*+i1xIU~)F6Rhmc&1!21(j% zJzvU)R|{gfLS-iJ2plo81XH-3Xb6NqSNU6#Db$@HYQfK_`xhc={YOS!05UAM7e(8} z+1kMp;itj?swv101kK$=mHGY&K>b9;0gk=e9%|^H0-iDN-`tf=;&Vgw=htN?XraBz z6L*|pdXka}Nn7gfGxfX|hjgW}Gv{e>e_b8@yF|A|aL9FeLqjJAkP=vc$DG$(P(XxN zK-f%J7$jgW%p+oYlt(MbZ!TaV1PvL7rqc592?=rw3G?vr3kdR>@$i}n@Nx?X^YMuA ziHbtAT17>nX|3zONh|=7=R5wZ>yI8zj5f%+p-wNYE^ex`Yq^hy5vo0GB@IwHwVCM$ zdG$D05h|}P?QqKOq3d;38<bFHqp;u7Ww<mZXI=}*PDMhMe0Nmw>|bwx4|x^6#WdoP zD?lyvR@r%yI;Jb}X5WUG$yTduyVIuB_UlJZtrOvE7+OvcIOlm=e{V9IzYegq{e})# zwO2~TXc^-j=gMl}4bq(#`PfGSPvWv%Jd|>9NP#7lAsc>vZO9S#lYqLyt5Pp7vQL}k z{P$FDE7}mUSIEep5kh=LD9sE1B0JUD;YC)vAs65brZvv1sRCK+e)aCJD9(KG=_^d~ zgx~aT^|)@Zbe082J5IA+(vqg3d96w^RXcv8xHW)C%1Q1tvk~Fxc-lA2PN+z2R(n!Z zH`8Y@TJ1FQ{tmX}E~$O8qSgIzaP<r9`6Em77W`^b8{h<uHz+b|*A=?lt>CNyqqT*+ z-5n%9pu)Msz1KKIel|u#IwmXCFox(QX3(nfAnTsEYODM82?<e>*^u?#tD+dX(RTyN zVRaDTXDVHwlp?BR5+FVo#8FHSZ2l@5oh&a^|5|TJeEyqM&WqEl3v`+uz+35<TRzS& z)_HX}w1qBFh~VCmO>#ne*nvU>Is7u}cdzW&oZ<e`GSif|ZR3T%@$>?@tL%NnXNlvZ z*2-=6xmIlwjfuyr_|J=gfxD@GYy7jSVrPVP8A|P5(WwNX2)WvQw9wPE(qnu^i5!(I zcTeb|M$tU|<v?|Im`xLYW(3_f!p4-Zp4xjeP04&IG3~;*70=|z4x;AkG-%G7v38vi zLa>r>rj8}+hFM(QOe9mbHRB2xoru&;dRU5`%se_*d=iobKRoDvMo3cn1#P4HiaPrN zrcixGMS@AK+~xQ4v6xvM+V@%$9Hs)QZF)*!BLaRXk8axB>-0pkNW@OrBPhX_fPFb$ z$_bGnZ4p~jOS6g;r-y9_SAjpB;~EfIyy$ZAdvhL?1m9aFkM6B_=%<!ewIyRSDVkO~ z@!<=@;)mgv>WN0vrFE;OWuB99wKlgVrqRL=x5Dq7|1O~<`v?xm-SgL{rr+({>6{Uh zy6JI+^H;&pB%kat2_TQ}Q(_XQlvy^g*;n08t9*rrFvau<AChc?&1awfP(eHJVie?I zWoy=U`ciiri&kv2KdtYt-~4!a{Ik!$L5ATm0F_)iKSJ0RT7}pZ3?=o=@;%C=2z*Gg z-MAtuiGG=h!!6^Zz_ie?oAmVxR%5w3T_5$o*dkG8;9mE&2+5e`fy8^izVaGS!1%1C zH@_^>cILVr*}I+#qZT+S53Z}D=I1<$E!rBmc8XmGNBtmO_2Z#6GJ=l5fxRPj38n5D zfniwPWKN*d4ZMms(bbSuW^4jjxH0@{;9T_nq_Q01CZv0Hg6rx-+Y4y3`tSQVL=>FT z88kMY%~+foA%3v`9J7)`x&~W5Ta7~qrP-wIw>7U`lDnjbIqZeOO^WHuO*iH`kA}mK zu0|&ZOYUP=qoWhp0Rjd=-HlvOoGce>GcId;D2gD2%gGL82DWmvgTm!;Lcf3rbu)e+ zR)FH<4pQ2;`)?Jiyl~G&y<cm5d>t)gbwAA0X8&<KWsdQwy(@fYZOwacLy=PJ*z!F6 z@XK-X<}w~Xi$))iz0W%IT%f1V`z19;DJ(A>e!7rKBt5bW>mKU2ovzp8_F#>BS(&~* z2+sp@`6+g<2|@bL2qCl*#~!~tpvZn@yqwTrfk^Uv<uioLR)7B)<C`5rU<96Ubp@;@ z9Q>>UUYcwLS$(n1L~Cs262g<&`joLe>@%|L-L?a4qvT<)&j=xOyc`a2wW;>aSys}= z-7(vzOXSSH+#%n+Jl%6+h2-OjUrM-fDjGh9%fHMo^@r2233o(Nkj4d^br}il7kzvm z44Cv}YA`+z(&ywqZ($)l<!N{)m-Q)z(j64)sIn&=yLD?mGq*89hUrNa*Ng_iIr{%b zmG2*9HglD!r?V~TomrX6_<91bO3%w<MuaiG?GRdI)rroKmm)SJy?pc@_h~*V-kAo@ zgW6eMX7_EX`YNL23#_n)w?eW-OvRUH&j`m`JsQZrv3ah}i6!uZpq_GOJ5S+xyyq$0 z*RzUeFOSwHHq=kSR4DF_^d$Ijd~52mYCG%uRy4V-m2VOO7ZjNCy(`5Yxr@KXvLXA% z%zH)%aU;53w;G#cto@2&(xybLSDttL+iOqQBR2d#PTD_+nZ?n60gFw5U)i;1$wgXo z7lP5;D%1+)Zv*h0dJb8tZ@6itnrN=g&M5Jp8X->8FsYq>>wZyG+clN+zU7(jnrl3s zy7HS$3m!FW6DU1J3vrXx5pf+yO4@CS_HqMuo2O5f*{~rUo1WN6G~JU0rczl%oV<F; zIlf18!twUV$IT$uw>+{nWwP4*f~b6Eoa+P@JvgX->cI-4v4Hle^#l|I+}y(fWDgBI zgJDb~D;yzB!w@cxpXHA}fkemO`VJud{mZC&&LAfzXb>IB&qLNwzJC#@C<nzb|Gvqk zhfJAnrx2^__NReWbp|iy%q;CT&-u1i8zM?0zve!7q|aGZ-~Y5pkCWeLO5LYxG0I)u zJ6GtiRG!@8+S?_fe}f1h`IX9ZAOp9%(<{4DHow@^dW?p_D4r$(dzfn!aU}Nik_q4| zTF0SVS0(bd;(%_iM6iSbqeg%+LIz0qh!G5C6&z&5<3VySVWIKxOQ@dWG1oKw(sccu z<6x$RW}l5IRbKz&i?(9GMmAqG@-NfB&ci<}u8-W)!Xt%c#NJp7CJ8+Hn6^*-#+MWs z!dKrjiQjVvoz{QK$l_?QG0}5utsC*-i}vQ~ULl#Ax;+Z%r&s3C(u)Rq5k9=p`0F?S zBliE{+-XiFx6&WyrMy|~p}RR;cF(VNBzH~u@n~<A<%e3exb-w-;g(|`M^`jjrPpc! z!dv2<`O-=(f0YKp+6c|bPHtZWe`<s1!Q<yU>WP27{qEz4TOs}AFc;f*ahK?Rnci$? ze%>f;-ouLVvHp?9gXmMufB!p8Ii+mP%OxtkirklM7}YqWw;zUHWxbbhKT}SZ+gark z47C+CU^c0B1YG#6F&*XATxyW2>Fb3s<D8)i%LvefAVd$avNvID*pT3*@WN{fmBCz& z*Li7#FL`uye}{c#>p{+0@oYBOtZkBJaT+J7HD0^fZ!jtI!205n<&gg+jg+>y`j00j zB>352|1uL2eCPh=U=y~O;#+pFtsF%HcO!%nSlL3prAC^$4PB86by6M2YWIafRKX8! zFPBf<ILJ<839YU3MZniJEJQ=Cno)j%hvSmIwM})yX9N^Iy&W-pPs=}#np?%RC>J;N z9QxKf9wpistt2W!g|r<R4fNnF7%~$42yulhBX2i*Rxin{z-SvNK}#Qcbpq9**tYuO zRJv4VwdJX;gYX>@ov%uVFx(wz>Xl#b-R<3~6(v3=-Kzv1|74Ip^Eqbo1U-+XR2NQ4 z=05{HFTF=cy?Hf6sl~lLhj%(iCz<zwA_j<6d&>>kyn>jd=LB#GexB=p2H;Y9ueX+Z z4O>j&J0{&v%HC=Ky;#T`Fr&7AG=Mk`?6ieo!LJL`_A^l<;1nT=r1YMGab!K-hg!jy zxnOghrvaIg^D7pl?~|-&X+avsDNap)CxLTN)S0%44IB7j_CX#$AD9TY=AQQA4SLQv zmdk1{wbGAt+=uEYT$wuj+flf}?;T#W?J8)>%B3EBnPIb_Pw^Gi1_ByTzKng_;eNGR zS0MG4E;j)fdTq#xw5n{zeAW9>)03c6>^gY*EI)$gANyh~65~I2f1QnfyQ4nv?QJ6l z93tIFqHem0yC*yhzbN0okcZ((hzXLmhf85^yqAiFm0W;*v8zGP3dU3)4Kr_AgtOa! zE2;lB3#-Nrzc83-%cy>b6vOJ;uhI&SuOVi;?p-$x#Jbn-e6P$);%3;t0g?2Bv0=^G zRi1Egk41OsC2nBQ!!mTo^XZ62lZ$s8zOeh|E1Z7ejDM}GL$AU!%P@U6t*Jhv8e69e zozcx>%ylX$grnra_PIcBF_5==R@>HtNh(-mEBun%M4f0@CKxc^P>mIy6O*~*C6>5* zSx2b-l>`ctU2^23&u3#^%s}PM^LX7`($4G~Fp53oi}3KB1iDHA6&H;{DAoG%fXOpf zC7AvPzar2HJmZ~S?cEyQ(hQ3hOQ`nCLcMNU?MlzuB>mk#zkks1>xB4yIA&m);Cswg zJigC!!}B?+X<3P$VIfv1W}gH2yk}|M?4-$y_?-Ns5u}Ol9MKxjxVgilMtV0Y5@JT* zB}Xd8NO+LBnxaC{a``{HIj)O2uHE#00ENo+DzdwROm<lsQ$;RD9XQ6VEdzqKv<0#% z`bXxrzbxziZ)Lg9z{AInF>0#3+?U@LVEQ2eNp}(P(z<UL9a2E(KFMX&BdI3n4O>|J zO9FEr@#otNvI34e68sy^w5Fa(NjSAn=oE|rYf*YjBXpGujZ3})eGj+k(~|NX@RRDN zSmOK02s3ogh#4&dPmQvysKAqmrL4o9rOe_pam_m90gbBwMUoLZdm#Qv2mt(2X8ytu z01PN&{04b|u4du#9{?U4dykp`8HD1!bow|0NvW?mL^b+w8yJf^%tc0$H;F|KX^Nkc z9$U|gnRL2ePSI3>?4ROc->kiLefPREXI%Q?jbJp&FFNs2M{~&02Dmo!Saw^xf}P<K zF@_+W|5o6@w|7q_;{`#+H{S)U3yvKFG6AZs?JxYa_0N6{=V^Jze}Ibc{aOEf4^NRH zgXNM->Q#Em{5|%sR^HhZ8(*-pucQ@}5*|*{NVCPbpBTvC2Z#5U8OTo4QKX%ryjv}) zU!{zHuN-oljJiuK-i3a~n9xG&i4Vq%%M+GkR#z<Jt|JK=7BgkeA!dFs+hgl9&p#Dj zWii7W;_{^bO~a3Dvz4MXbC<>S$~&ajG_y+h!##wS<<ewHd6om|K<e}Or<Z>VS1C3_ z?b$h*q9{5{Zq<ZHEiaWvHK>$sD^CQ#4<DT4%u#T32b9UcbeT74;`gBoIvi3*4^}h# zh`A!BIdU{GGM=1&@?NO2Ci%{_PRszLN2GLqY`-qQ{7BwEI)>}qU~qH0Er>GjCLLuG zQd-dG*uo8TOlI1)bSxLvmC#2Ucq}pBj!Fb?!4HXAPg!->f!PTAd?C{Ln7sRp=|&$D zS@RPo{U3^K(q7ESJ|l#<mSnH^F!f_a*}h_%NY(lbQCVE<HMXQ_hb4eEwK6F2b=MPE za47t|7!&C<HKfKi>7A9xDtfa+E8|y&B*k&N`|gumRn}`&q(38sFs@$3(L$5#dN=g; zYg3=pIUg1mhXIQf*JM4H^8So86Q4O>7yvT-VmhvuyAw>d3q+5wVtt7>&q7J2k5J03 z8kmZtpUX8EM?B3u6FAztGQflcF4eEGEvG4v%aP7i8ySkpF~-it;a;Z^WO!*$bZq$9 zdNU@Q51%#S)M~Z<(X#O4IXutrb-IwH?W{qN6NHcmK!!E0kckG}ThrKk{g9iHc!<rf z7Qc{VD(bP^xM;*gjrDX;JuF^DJ#}K69A}epYyY6={?@#)B!Phek}iN|xa3G#MgaV@ z6(RtL_|sMhfD&px1diKDA;!C_3MO4_)=MVq!?zNhFV+YSYxTN0i~afx@q@v^I!)+p zrhDqbkoG;D$a`RQzsbc=O$&m%78jjd8x5Wx3t0$%S$Z&@=jnpPB?B^S-)lOQTP-SS z+@y=H*gLn;TGB{wU`0k2l?S|D6x@FNj@mln(VYu8xgJcZ_sRrfvltZVd}piF-vw_s zqLl!b#(!rSfS^hKT?M=a<aUy}Q7LtOg1g~dLwyr>-rj3SyY{VOKHz89Z-M8Jl0wd! zD&%<ZjarCcK2laYyV3CdC*Q2tV2Aq5SLZ10KN5Bq$0oLkCBOh0;Fnze1ym@9+k}`@ zx9XW`bI$tk2}9(EjpbSS@OmF$uJVrJuaBYMx#5qG;3{`|Bv5RI@;`G|M;)^k#(rd! zruA(8GLeV%Am`P>R3pMSCItzwppC0cNJpqYa8LlebRZIS%5pn20U1h{cPg#p7!n6V znao)`vPL6&45!XWDVhwAj#pnR*eAPj2?R<@wLu*`DVMhQT!S^v>-o&nSL376WNgAY zdZw(WqdxuIEn?M7|GVxBZEweb?lqbkE7}fXm#>g5H*){_i1=Yu@mL?|k~5>G?|C4^ zQKlq>T+A+pi8XcYLZ6UCFqItk%i*p&*`BgT&iQ}6{rb)S_3yyftCZoNR`)Q2i?Qr> zqy*O0?tuODXM$m><pYJ=3oLP0JP8p}-W$O3L*R$hXZ^n5bvg-;QXt1$Q~M#3s>|mO zxdb^QEj<G&b;AlGHh!HDKX8G6OMsBQ#aapppJ<jwj!vGql1L`@0R+Q8H%SxcPW|z^ zi(vmzcu9P2hfryI`1$4Pw+W9dEETpJ7u>j_5V&TF$Ugo0&Hvt9upfc56Y41t2#K3@ z<I7T!DN^fYruh7c_J(m=`L*5?=n?qEmi{xKM=}BpOBxBJ)!GSepx1-vwzJL$7n6$v z725=zLit3p#oHOM^I<wD{EPv1Y?k^QeB7wFwO<)OZ($AIkO?mPta#@#K+E|srK;sL z)3yFaaYGpqoH6?=tC&%DZo0k2#nsyo89Ya+`9x?h2=K6Y9b9tcVVhN~bV!dVWXqTg zV4`LW1DF<vmb2fq2>L>E-@6pYP6RMA_Dl?mDy7-rmeMt8B$qM?!EM?YHDhKe7fX{| zcbxGvGMPl&R8Vd^Cz($3s#8u#n*JQdMoo3PWuj(s+)4!YMxm7!S04=P0Demfi~beJ zr<-Bcp(42bco})BhnV!P%PA`$oJ1*&$-D0eew`3MEGbbGL>jfvjFT{^zsad#vov;p zFzXoSIBXE(vXx6%y+lemUItUTV+(jPlchy<NPUH*GHB9dy@BU>E(3`v<krp4InOko z9!BIJW%y<!^j;N47f=7_bx1B1o;M-Ap~_pJba}l9(ugq|4LmZvpC-^k+*PvY{^YM9 z=Ew~CJJ#E~2^m;8f??Jv^m9sn`l+4izuwV*>*X_946`GKV)wb4O4_}ZxROXeq^4r^ zyN)uFV(vjtqfBO1X7%x)FR%qaoyMBD=jC;JgwOW^bHb4C7q=+1uqrDvu~{(UaQMzj zEW$n7^M8)A`{Hil=7?B$S|0z)p|aAXgz5JsU$ZTp3~~L^?(+JVaGap*9($}I8EGO5 zo*Zu&kW>a9^;UW2o2C>TypsROv0H<?a+s)NsbmTk76F-B2$`GlnF^bUn1clQ_|3S@ zg-v-)c|=4+guwjfAX9D&UJ$RKkPx?kIk$x{w}`p02p_L7k102=`5&O{-Vnk1CP;nb zWqwnhi#J8>I5KvWuf7<kFghDn2NDqc@ze&y9}fP!!pLHwIabF*NZr@Mnz$k_$Oko_ z>n|P5aT-gf^6#GV;HRnWA;OOv#^;di?8Ve!n2nvzn^s)kOuQWHQ?{=Wg?)<edU|mT z+8K`=kt`Tv8^J943_!LvMu9@&%y;n&x-kcPgNr^~CdaBlu%zJpzQV{?YHK>uHF@vE z)Fgr^I+-EbZ?-x@AB9n2Q~mLzrDgSCva!9hsj;UpZ}f`C0YIIh_nn<1sZwXu3iqXb z(BHBrQUDo6>NPkYlYj!B_}Os7luTw14eO%(-(%L0%}$MMPxBmi1%^q-0%{7oAd1$z zdWC|73BrRHRMwQK8iIJ|IBpMMwH|i^0>DsAVGSUj%c_o$XKSOjk;h3^@_el%)9rQU zN4&kX=20#AE=}s6UB?TL+dXUM$)eIi>9h`x@N;o3M!;5&N|xpfh<q-)SrgNiSws`| zNr7hgRYCm=3pD>na{vE)1@S48j2&VuM$++_a}pl+3tG6X7}1<rUV2TQB8JAOWA0=H zIr57iZIFzb$nxdjd!K=hs@UqI=*6vyxc&s2<ifMS<sH2A5^g0SFbK?NA;N1e%qsx0 z;N}<L7XpJtgt+;H!Q8^!!h&E^VP1X_VRJKn5Vt9xDUX0DzW|S^2oH~i0N4x!7WsVz zG5>x`1c2x{F&p4Za@4JMDzaL>TQs{D1lrrn#|gF3G)lCqxmQnZE`e{HNL|m%n(DI2 zU0RHBzk!!)$>-h@%dBO|8RD_G+$WEcJ1KbvznJ&GtmN70hAuS_HjKQT3Pj~9UfLct zGF|B8YzgW3)Hk>=kF-xQXK*~Hmv;1u&n;;W7{9#CxR!IbrG)vhq(?{a`kn{=UW<yK z?QiS|`_S98t&e4}TA`sY@~5F3=-MUmJv1SDVb%Gz|2o^bU4vg|Nkr7TBEv^k!c$Lt z43Ov|P-FDwJ7uy&1aiB_-ModBx^XN|2H|n-0G5o_=ajVppT_DCt!o#*Qh@dtnpV!I z;*D%&;3h(XqL7Y9&W}(0hsVGEm_KNJZLGIVkvhX`uVypbXeb81^6I(8{DrNHz;29o ztmsi?W*?KQ+tJ;cBVNtlLgq;c%NTi4nTMMp#KO+7r)j3hZ%RPt*xWq$>o@<yXaC_O zT)jJ8S)%F2&sw`1uW2eBehHv2`j&}9F<QZxb>&i)K3;G8tDb5YAU*ta|B&;{>`T3| zYFLO|sqgQms`ZekE~vO%Wu@Zazi*A+f_7?zIBjpSPe#`e&xkp7N%N!?lbI9${nbuW z15C+1e7QAYPp!GocgI85B{(-anP&jdj>WH$d)qN8*-5d5&Oh*F`BR*z(U=d8$Gifd z{X}*{{f^~<0YyQHP_qyI7G3ymNFUd>Jm-p$KMz*aae(djFZ`_auXo%J!{<$#x~V+r zXOE`T`?@z@i+1HSR^q?D%IwMs#3i^I?spvOf$*0FT)=nLdzaog)+wr*EOt}wTAmjh z$dSt(zZ82dv3|s|D1%qaY8y!u=97cp@R=?*VUMv`oO4tygea*e^KhwM4+KtUO7b4m zlSqg%r~En>9JAq{eZqAfdp}CUK3I8gAg>|7s_MMmbrn9tlA@i0LV)>_wT4<~h#SAk z_hc*1`egWcse7y+e!z-)KSf~!87gPS^SpRLCM>D=#t5XOc7vN6Md^$X;)7}}#kNP> zTOf4=28*?pGbpnU#bW9@zXpZCEB|+sCf+%^uy|oOrfd8oiX3KaULUX4MAY$MdEjN^ zJs7qzvBs3?T(FMnVM}#$c^YfgE1@5j^#;H6!@3MDT1pi8k66P+$g??RF+z1%kLbp= z@utk_J?T?+s!nZ0{Gn}a=lShgTUDgVJLmLpK}*^xxRD8NGN`fI(Mc~oR<*~DX1P;D zF#Z~T0Rn0AWVyo+Ed0E$PM^53<hMIQT5;t{(Ei5bt|zDXuBRLGmJZ0+SLdT>w_}~o z6(_|iE`wGevx!lTE>B^lrU_@3>sdP%W0c=K&45JZZBLDQ5iJ)#u0PbFNsyt$Bz$3C z$YV1Ss(P|+0MxC=nE)Sn-HhUT!fMgD@8&fkYIGu?(}^n+=XTuv;Lxuteyi+f*PnXn z9C@YwHw;TyW{%bl#`YiwC@i%zi7fOF)$hkT&R`J4)!9Q9<OD!X=8#=X14X%x>Q#i_ z8c*#*_9YaFi{uH!z90KBoAg@CiRN=`TBOZH38HLiCFCqc!)Sf@@WVx{A$>LR5=O}n zU8ETMIL5aTC?IGi_O{}@WWkCF&2vcgj{zf7gK42gcl+df3;G)*ew|Bx7uhl~gYzSj zny6a_aH~I|q+vc|2bhf5=$XGlX)hI437C<RwV@S1qK!&}@zpNAh}L)4m6l_Hc!EWv zZnz=Y3BaY<_A$ChZlqto`3a@}_y8(sgN~wOk8AhBLS_F4scagV_*0;&cBg%grPkVR zo%B9KK#Jy!(lZ=qfPA(BCq2N)>P7ky5r!@kENpT~&KYBLo||K{uzn@`aiY%)ov|yD zk+jMe`@_lOQq_Syuc+t9`Y+vjt$Qt@-T}*qf^ga4e7>O%k-LL>-Klj2T&35{3-^#w zbcN|?LH9%ao)zB^AEifIFZSk{&|%m23fDI}sYV7r>GhvcjVx0#v5qmyOVV~GxF6V$ zBB_@YK<V2MAz9t;mL<D;bvnAz76+Ew;~vTo2OsJ6FPj|TJ0dO>JyLndo1&Rg`|JUa zMAh|$h~)?S5lw1`RSiRTzKx%l_2Fm5{0q(ca7-!5RN4}cldJWP!D_c3agce^F%M!M z+zUzM{d&g%bVc@Frkv>}46hY_z*yZJYah7V*&qfL0bSAF8@!^$X41p4PuZyII`uUw zhD6TD8lkeZXP<2t(>agxYL{e-r+i`A!DYON`v#YXPrSFx#Fj6}2NrJ%zqG>__jO%! zE4fM-uBFSmS@}E--XU>}zY2M2A3m#cF6BJw86kvD)I5_$e6^o)6*i!~9c+zUaKo5k z+jL{#?)8y7aa%)?%XF}q75Je$edEdG42?mlov+)bOEN2aO-`H<K$CfQ<f##vM$lZ5 z)fpj#UUbOSFeLGpcSw4DW1ONSqz(qgL&8Mj7ksNlsrs<0tqLE(Mg;saQyQ-phOI?F z*j94so*|6N`3B!5ymO-po5GNzG^kv$AM1<|0-Ugyj~Kj!HZy;%6-V+R!^XmaMYyVc zABls(2J^rdZu|{)Sh*bd6$iOEj=~y>kbO5e-DpO-I8dmd*0~7T>><}}=jWdQgW>jP zgb+6_N|;@a@<Uw>eZaq^Ct`b9XV>^SD~?8z7{)mMlY(QXz&|1X6TafByJ}-_P{)eX zbzzsQ4#A#cluK^>+li`-??;B_jpo`-9uZc;IW--{D1^ICx@u^o_8k>rXI_=!;X9Jm zq`Gv%!B>@drNHxNWJI{@PAKWew&&7|wfjIOI(s*hcgH;$@fxO@WpzBL0<ZGd-8>3w z+=5>fmrZSX{j7piw)0#JmKJ+?zN#jZhactDlh{Fz+sn?MKfRJ_rx^{A0LTn6AHvey zw9B_@R}GuLN@A6CVTeh#-qrfr_4{I0S>4CR$S=b=SN)AG<mweVOm$e%__>;i>R6l$ z76OLTu6#g2)ITxxApDQR+uoz|@c(aEA^)SOs{frzBbj;L%bWX#RZ0Ty)8<iy?%=Z? zyoguQV=D|SHUZ6E&^yYe2-bUbudo$^B4XS%Ic7fI!7BRGQ&1;^RXweC)Fqt&2!Q$1 zfTr&2v3HjIjk0N*7qb{`U)f53n%HBBcYHOt^P%F54E-Ycc1G&N*Xt3MwV&)mH}-FK z8*_4^N3YdXap_#jy_9K+(F+p~+XFW4!N-;phN3|LzJRR%3{fRy4bZ>MbBFeE@WiMV zN2hws;QR)~86iYz&_m7`Dbp1O=~khwbGI_AIGZ<6Ed$Jw7(e$7JCdG&oWrk(-#-K7 zJhM!_nS}O{9CjNE$8&7ctp&DQWpdSIF+)_Wcy}*+d!E0|umBqo@U!LoW#w=FRw$I2 z)laQo4N5r(eyOPAHZPy=W#m*Ziw08ou5Fe*jFt{Qn$@Xxc<}T$HTzsN=e+o@y$hH0 z3ae>xVN?^pSjn@S63YtsfNf-Z5x4w4-@D!Tw#BD6pZ5`Bn|#gzq~v?HiD`EI8#&*< zFUfy=1kd=A%x5VRD2NrnZLIs!gOFY?!pYj{=%8gzx2P%1{UKxHlNush<ar73nbrRp zHAFJ&Np7|m$1bPXd~G+iapAYVK;pi@e$D;K(B9!n7(3*I5b(1{o*p3(QThFAQNsg$ zhxcndZnK0<O34E;@T{HEUaU1`-y0|8Pr$WsbagOy_AmzX@q%saJaHA&uc*ms=^M-Q z@yaWy7$6+EJ&!h)%)SbnD=v;!D{n1B^-VJvl#RirF%P^IR0>JIxRJhjh|zlfI86Tg zH~wsYYSO_UL}jD_GKUYpOz-)cULp;65L25eJNsqrfr2(EajeqVxuCqwqtGG1&k{2K zzp#yS$Azb%(;26uvnAKj=Wq3;0k~$4c6MMh7i&icV`yDJFaiM68Uk?zJH!40V48y= zX3o}5N7tcuj=F?d=}b+e*=N8QKkgBkTpn23%*)gwhw*WCwdRw$)~WRk0`R}YAYlFw zg8)FicJ3ByLP^|#IAw_XUJp1x;Hit<!R?56wYageMC7*^Crlw^=IP;fgZG3fgk%l$ zbv1cUm?9C7Ig);jI$4SHg=grS$8uyE8R~|QHJWnzA5=``Ta6Ni(5+(*gYIejgf8&V z@1{8AO>%Y_P-_f(@>&B(S>=7uBxR>zd;*Z(pq(4EBtlLHYl_&lBAzS2z3MKVSB68C z6B^BHmk@^V-yZ6ibANltBf=j48Uo;dL!W}DJ8O!>%%N8v&CrUl#HXjvbu|D}fW{=d zgt{PGTx^h}|K<6ekFfAW_(jD5m5mFwc~#!Gx5+bmlo;-br_I>deU?c<k0*YTw^M)n z)L8q6VSk(w&<e<07JG?dGo|GwH3xtMBX5eJwUo*i$7YlbZ!y$q2;v-1V}CX&Apii} zNB{ry`fnG0oEji*mdwXf!_AvFq4nrpK(P72&e775!`jTzfx{f+Y|9C4hoXLo7FvxS z093z(0KkAA(JI0w2>_;!6`1z>MNTLKUv`jcotS+~N?A~{`l!lr^QLuvWnN41+T+O) z3?t;)kW=eK_?j8lC$;wER1>QT$x&?Nx%PoOBDwja0;@jvJ(d@3S=&ww@9+a&{D&Cc zH{I&vY6H|c^M!6{7F)D;abpiJgW1gYux5r9$v+Scm9=rhIeSCSS?aT)Gr2}QGg`<F z9%_z%LOyVhZ&NA+i?<6s5|Q|9jEF2W<p4yzB@6QhoIXJDC$Fny;zffiiY<dpba0-o zZ(qX`uC9O?-r?t*_0nW3$m)x2CR$@Fmk^%J)~Af+VV{v@@3tLa8zm2WeMSg@^Js=d z{#(>j^*SwTE1M({Q9ERQBNmVaX+6DM28p6ObEXdr%Y^$;N;G`*G?i%4!>43uf#^D2 zB}U~UbOZf4L|wej*OAS=<E$WGc+LnR@UQQf=ei?&M)whIuDV>=0)A3VG4ZaZa6fG5 z5hvq%^~HDxn8cG$+YhILYNuEC1QAsjacggn?Cx_G)K=H><Zr@3OYilA<)~hY_&AN< z|EyGX5(|7R@~~u`i)(#1n?83)dywV1%JH&<3c>kF((J4^HKRVo6V~$og)GRQ2}kfW zuw<R9%U;9pMvYHNrrTbK-dpO(FuSPN@wim|?QH$kk*DL+1vM}rE%+tWkLNmz)tqPc zW1ha|m4Ru^^)O=lLiA`Aesv&b{pGf(xHB?vDHv#sv?-SENs<Mir4wAr4(kRGJIPxX z(gm@Rh%cyTM$Ux6WD5AzpqPJ?Q%-~%Xm~~U#boT4^CFBMtF5mL!m)6vi@PvbhR#Tw zQ5Llt-u{a8w3;-RYDKFYLMi?fJp$1iW#hKj>}0R@A`(fTa9~1*^cMU|QsRUx-HqvS zaItf4ecTz|w({mF@Yz>&jNaVxH)DG!Iwq$$BK}6s&@4J7v>1^W{xY5tN=EjTyWMI8 z0g9JZ^hB>$ncle`VtQmYH)`AIF~FX`Olo@G`7`CmiBM{HJ#x9V$`Nb^<*I0!cEIS% zZ5B84W?piUGD#XD$pH^$4rSrP%XUQ!bGtly%?GF0b#SzMWN}r<;Ek1uxf1&)t%r)e zEBAff!d^Q`E;+$C5t&&&EtLpjfblT=d~m)+B`<t^{Y65I+{H{#EM_M5=2JWlg})}0 zJ&1D|i@JD52*HomQHgk1Jk-~E;ildjVJ|!0ryJGR64rGohrXIFUEV5)zYg=k!7s2~ zqAGhsWsN#K<kq}3`Ml|Kzr<0-10P%MaV+i8H?OxQPK^*h7@&@!#T>FE@OG2FaHAm= z&vVw8)Pv35BlZT?EP3XUduJ}xY&IQ<PCwd?pyp%lW80CV6W9R)20`sdTo4zKi?tb- zwLLU(48rAP2QmX&Iog?nosaF!-$gJ$$gCCmljtV)5p5o&b=(9GE^ya_mkW^D6@vy! zAF<%@Q+rpq+KIBH^+lbs(Wx0)%n~UnAi+f$u1ohiBWDnrM$pyvN<#A6qdc&WRxtRb zwWtgE4K<Lmp}4-JH}-tP7{&LjIJzpx<I>|7FAd(PHtC!iA^wo*WWMUNkjQyzdqsrA zl=&m@TRo4pwPoV!4G$WVzrihg%1n1NJ5)AvCV`o?h5a_4M|U_YPSDJo=`YxI<_!zO zpWFez{;t0#7iJmE9moY=R9?stdd*!qwl!;)Fu9RL?Vu=T8HPFkVf8p13!(Mf)d!4> z>}?JU?i(2OR9w9JhKQL|@x1YU>t6*gDMkMJ&A$(!Ki&UfN1M21gNJD%%H39_-N3~@ zV<};6fl2pkJoB#AyKW-wopMJPmKTLtT~4RIZk2W^j<z7?>1rDmas)Rm(x+nVCro&Z zr}nP!9o-hZwQsiH7?N<$JgFj8-T`cw`&$G$PT#+irJ1?bxU*IFZ37nL2){V^kxB9` z!V90hs@Dy<Yiy&w2Fg{7&(p+%DO;nr2{=Fg8>SXS)T%N}moP&b7Ecs8AyEd$kk^#y zl^U#i_w@)3Ki5X17@uhPN6OLB#*$@?QHfkdo^&NCNTtA4!Drj-Lj2wKHgwrwV?y4_ zz`Or64c{isG}fR8-|;zTt(&tGR=43-ch)be>^Zs}8x0Hm5@>GvBrpvhe)>$vt^l(l z_wDultK=V@kT+|XQ?fcP^b|0!0`;f)RWD`y`oR5RhP0_v#$2O{6muX#^z=+Xe&Ev4 zfY*{mB=oF(FgfRi&sM0b7K~q3BRZ*x{Sny$*>%tdTKz97z7<M+)-Y$~?|^!};W`2E z*KZE{xj*0i;SA|0gJ)NQ)PkSPw5Q(sEl)HORghiWgZH`aU^*?`+UuiVJ4N|tF;u9a zxnn3F)jc51%0N<N1((~~v|F>YKV*glNp`sL)ZX=P6>pX0SdB5EJ$T!C>rt&YLy#07 zWVFZYxyELv9<_*5@JIF|#qs?9^lb43O2V%p9#Nl`-#2tKZs>TU5(W|YDd==3y0!v* z1s*-P{xLGSKN-~It4&v&ao#l@!#4REQ}u@BtpT=Ncz50Z9M+LxNz&F>sqDl1#|UAa z1?60q={|BwVi=Qr8kUK^a4xg$zs<CeEGL8-zV;m?S^`S+#%C{m0=d$XOPYsihR1Gy zIneWxR^sIcoAX%+nhIF(gG_nNP0c|dGj48SQ!`T#$dr%Qf?t@I$K0G33jN3p60qPA z1Phpp@bijr^MZJUK-^|Rzr#AN|K?%_*abL9wRm<HS>4E26IWzNr{FRts{S^;K)24l zARAfE0B<_{?*xKpxm9K|doGs<PxjoUhBBtDc&LVAY{twBo#Y<Y*Z!A}Shzc^SF!DF z#`NumQZRCuWMoyf>!krpTI6LT%Y)q%l_tOn1+;J<D<wlL2Fa?0`d~Yu?fF7fx{C;U z!XTT%cK$O`uP4jrJlf(r+=iN)A0C=zZyPCXCZRhF*kl=I3lVgWf20#eazKC~A;Ax1 zyue7}?(;Ez3iiFIAw{ZB-o_srJ&f-3DB)~~+eHq1czKFE3{NAJU-Vn#^#zlPS08PR z_A4V3{cY^FV|)uxVi1UwOU$^eVx|BvbcM_7kQn&*1UJa)qwSfzLfzM{UoiEYvPV(b zPh?e#<#*7LbvE+3wsMMu_&XU={Whv?oZEA~)#I!?{B`g8&%Ig1p{`A8l8_Iy0ZQ~A zO(tKS=*x8-ND?oS3yI(5O-<KG=<wy>BTsU8c_HV?!p<&WeL>MD9;@z(R-h7#40D?6 zqNqK#xQ+rBsv?ouQ%l3nQ|vl;@^Ap(A~G*9k5q!(t?brj<B;9z0l7Mhrt`)^!+hgQ z5qC}Ri!iSY{Bm8*f`_LbyRue&wNS0^Hlg(G^>Y7kW3QU=+prgv?eZw+86iaI^BZg+ zz_mWFiU$41dI$<KTa6KYPwg#Lw(dB%L%LatQ$t~C`0(><qfQ>&^4<5ydNFu^cww*5 z%)g&7?-?IHp|fn8(sM*w<}*TwSWB&uaVbMb-3K51MIWj6n?*Y6gIsig7mLctWAB7X zS=5ZcLT=zkh>MzcB2m%wif~sn8aZ+5!kDOv)A9G8xAS3ES=fDhBz;B*ky94iFJ|LF zif}JF(6rpVvOu#ajgu`bg>j0{4PTYaiO_T(X61!nG$5B}yH`{6fHuc$23zCG3d*6w z{I>S=l~F%3x}mIo4B9h7h}@KKEmKngt(y}``&AkY⁢Q_SWugndF<?(ov)*Jb_?` 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%0AIjB6(w*0BBulaFSPX!-w3z}1ZYDE0$NjoNXYTW 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'rZ!$==YZ)?(2@1$J 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 ^)t6b|r2CX?Wm>TnsBCRStE6?R#<vGw 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�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 ?w3*>F-ZtFyN0!eT=Y3 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≦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�~*p!$30d*zaqWmIQihekPymeteqr=+cQ!q8t{@1FQJl zy)DL|%TWBJ=aT6W^gG>U=z9<A(J7=x!eKF8^wii43%A6f0!+@Xw(LOX^uAbN#?5|a zyJv*Tny>E32*S9=QRAegbLW33pOJyxINaae{Mm6=%<@+7SNcLWxctQV5IIi&Yax8E z8_BAvNZQPZxQAEEHkS_z#j_}$?x>I_WuPcO<RUo#!Nwj)CXPdecT1#NXj{93gl<Wu zNaScw!NcQ`NgfjFevGwUj6vhBDhCCZA(yZ8yicE(J{0{9bC<qMfP40p24OTS!&ec8 z9;*@hFZiK-*TkfRW)}G#eBjej442o%<UnA654mab5emr%XvL`hRNEWiw`B>k?bCfd z&mq&Is3lZ`ZW^l>Ofwms(VuZTW0)}3d<V(gX@B(|$NCLHaE8(#DG|?uRJ~5PFpH97 zL!N#$?$Qr1uqge0{-}s~-ia@ds13nOMI96kV#!U0(3D1F{S<M6S$GHhicOA|EE0Qa z(*!t%*nA(Cm$Nq-?peTG6Nz|zJ4fOzMM=ALa&Jg}2Je#PQc|$%t%sI*?wfi<*&Yea zjdP%~XSb)6F_4jnwig?69dw`D5JV3)_XVEZ7N^efs<@l$#@~lxiMLO~c1;M8J(s_i zLMBCV$AyrxBeO6vns1v@7Osp(m*1GcB8;(v@<t9igrofQW*Us_EbxBHoqBce>4Ns| z1(hyJ`AY(o9L|#~--C}3;O?V&2|RvF=}v)cS?z)_!YxF<I;q@yPa?gKj>ei88vA=> zSL~(Jxr9Iq7!l@I)!Tnv`?P06FEUn1u#$N<1n=w)M#}~q2#+1)cmhp$Xu|*P4ztg5 zogaSux$EY4Rz7`sBBd`>w;dv;wrcr+y&Y#@{is#lpPKimT*AY<I8T-l1b+!RXpFw_ zyQ|%@M6k_+lshv4Z9~ee9-~RNcg9Z8BATaVJg&*aspIO2ERz`1s=$;R^gd4%?N$hx zi`8*SpV3f9#H;YPcwbeQDBh@p(CDwfNOegkyY*~dX5Bu@i{{!d<sVqK4fXFiklvgu zjF605v=KZ=ygdQx@=AjbhY)<yjHf(Tlo9!E{D{pm+X99ZuDx|S=?#nF6VmmOiGEJ- zfl)(tOZ?H+0aj)9Lt$usv)@z)mo6VeaNS*asuha6sfGu≷rx-k@Q4kn7==jp99j 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 Z_JhyudbO>P#|6Ck;uZyI@Gmp(e*i7*=J5ak diff --git a/crates/iota-e2e-tests/tests/migration/test_hornet_full_snapshot.bin b/crates/iota-e2e-tests/tests/migration/test_hornet_full_snapshot.bin new file mode 100644 index 0000000000000000000000000000000000000000..bac42b911176e8e12b2d40d054996c3918e23153 GIT binary patch literal 1654902 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∾+eiCndT8!H(1oVKP|qZGEU?1v&&J-xnmzmN4>MI=ne1TN)W4^wCx{xPKcz ztwBCsajM}h)WWN+e>^-ODmpx()#R3OtI8+~9u-S{?g!EXV2=YUCx#+ac$ULM1^5&t zKp^d;|IC|!3gSNLRrvplfL6%4@!t_#WJE+60>hO&-8&38cevmaHy-LPR4>_r2hs(I zCP4*LF^?3j$g9*-qeG0Yk9MCL?cCzbYl()nc)Ppvr_yusXO-y_d0Y(~!Eh@yiR6(Y zXdqt)glQEwA07D9nDejP-NX@Gh++Z-mW@6nm~d?2{ZHuc8NmfIwxkL!KN-P=j&P-2 zH4|GXIS^0diHnuOo==(A=4mH!g;ChZS@AA5_aC{LDfOFV_tZEyem>%96mf0fi%GW^ z_gcLFEw=%x;L;p8aQXrgWc{mE&Q`dvs=7X}Ros7++d>u4LP@RFw#%F9c5V&68>E#r z@=vMjA7GL2rLDoJ43BCZ628SQzSM(j5buBghLybYasE+a<%z^Cy6;{Gj7m3Jc-AX+ z-_R+`V|3Bv`VBr`4ee8RRgYPPzvIsN)BpdUzhNb`5hYgExN)rF!GS%-$F_ay)=z!x zzLOWe2M%qy-PEV%u0cQRyzM2g0?O1JkPV{Q^SYjf6Z6@v{6v(SKOj>y>B{ZsWP`?z zaii+od78CxPoL|F=NErSuQ4Lrobxi*{~yJ||K|@TQ*}aSk|(BUu*bB|utPpc9nT>d z?M(&(vFybheF7g|hg3l3VHuD>aDl=?UR25mcru8Kr88r|QF$9Y5<WsQvYiYX;}(eS zkvj6Wjf6Bx<t$o)5Kj+Qh{l^R5GpBr1Qx=%9-P^gxoK4xsx4TQtnl|-Am7~x31j(H z7DmVaO*f!xOAsFkgM9}UW|jCl9|%-vRzsK!YS-x0sa94~C?ay|MkLIZ<l{5}-W)C- zu2q@0MXJ5aZ%{VW`G@uCnl(}arw<Bl`ml`Ia`lVj*U!6%hQ3smpsHBv)48~PDeUo* zOH-J#r|>L?hYIj13f&#b63kT)_d#hxKr7_j`0ofVG9scZfwA;J_v|i5aKR^TJk(vN zUa|!bqze#DA{JayMm5d7cVMld&Pdb7+y3*lPIeCOb@1Eq%F8F%>E)U0S*syv1jDW1 z5b+%@&_KQp2-7NVJ_bPvErWv`!G$O$P+-~ULxKrpA@ui*-~t)@Hw72o#tL&S+tT!d z{FhlFPU`cumADka9UW2X6HQVwQ=hjL#OxnmK&yrCSuG~K+$M^X`b04)DX9+`OP%_y z{><x(elS|2V=-%kzv8ZtRC8l88^T2-TvA1z8nvpL2i=|Abk}xxtm)phfvZPewAIFL z<5WsbNf&L@y{CO|ZgQ6U%C>b3<kc%kh$Gav)HBq6PD<IH;Um^0o*z>-<DH7ewJmmo z+b4{has8;CrDoF=Fx$#tj?{Sq160AKaSnD^jSk-_J!XR_UN!XL#;0F9-*#53oRVX; zJf_Qs#BVKopy+b)O2Gscs(=<sx}~g&bG<(_sH1-|z4eg%OwY-vZ<VE=S4RxmyR@lJ zoawzRx)&Ev#gRqtV)uu{%G;A$Z2taz_t)5(u8kj6Uv<whW^<SJUWW$G-s@HE&fA*l zQ;MCY;7k5(rr211ZkaHv<Mh{`UQN`QaryhCHhX@0yzHvmb4u9K<d1qLnvXcI`4_O4 z-%6(3hQL7dBPf3loS4>$S0<w=;mel>IL&RMV%hSjx=&j8z0no=y>AlKbamtsmqAC; zU-}3bC;exBGns}9GLt+pMW<tit%V(`xoB7%;_E6g1ioc)%0Ozlz<=>NB+`JGhs|I} zYXnO-qFD$CfxIgd#%)U$SEmbvN&3&+fJquu>DL1PMc@QN!kDhYLMq)ZA~%iz3q-Ex z0~;YEjOp$yocap5Fa2lv!be~sykk7HM>7xH2?Ksh7Hch~whH{0(p(_N2!w<gVGaw% z%6fW=U?tdHEf72W&k}Y+!j$oh1#7Kh=PCHIM68A|rS!1ea7A~UvSe@)e$4Z9Z3J(Q zXt#w7`!ybAH)YWK?!NX1l9n#_3~d!w`_!w40a48_Rw#c~6cEu@&L`BsMN}+-TJ?J~ z3HErSexJPv@s;qH3UG-n=S^`Xib0|96Oa=*!~Q$ECtquWX%Kf6E>PTMu!|%9@HBO} z04VIKSb&8z3ZhBG;!kGlNzRd%LK8KNLSj#;_PKz{)HSuOy5)RG=Gf~4O#}C-A!r1{ z3*Zp3?g<U#>&7rS<3^|+RbV;d4^d2@z_QVYbW6xW=<gZb6Ec=s{88Y$t9hF|%-FcS zg8UaseZCeK7c{uLBuagvNlIqw^R}h9hB#3`&UA$YC-sS9Qc_YMGL|~^|B&waozXq5 zs8U}l8!?#;;UW?)%nqK9pFd{<-Tmxz*G{uNxNG;iUxrueJ>N5+)uPD@+xmN~xL>}{ zxhA7(^m;LHSXnv!CLxaQoumDb^XHMN;R9y&2=DlG)U&pJmCk*b^mCv6@b+Jh)j82& zs$JqZ<r$y~E{*TQ$7|8B7RziqUJQKIyy3??{$a5OqOtMadUdY9>A{!#^*k!1uB6+% z(&ZrtkqT&`q~|)+d~!_v;aV-8{`lVJR>HZf8m1P#!y4v={#s(|QKS3*FdOB?kwx!f zr<YjyrA^&xp%rJulpgQDXhY{ybJTwtzuf6G>cc{x3z}M;T2w0;v26T)eDl;M5%Gun zSF<x}<~QDX_GG6YV>NAqtT$A?t+J&hUH2eeai-jcz(8d0^`Ie~m<OggR6(Wpjcbu{ z@lN>K<;gp4{b$fOu$N!h8uM+lmbmJsI-QGuSh3hODfp7xWlPO01)E8pn4+ZnJ=|c2 zma0^YKzzL^hQJLhPRaR{u1Eu79yWtP-4iO^h-M)m1oEy-7`LmjxJq|gM=mWAIDwEb zrY~Y4RatK|BEVJAuPlp;2nl0)8VjdNyq6Th0eHt49%;-xnj;MOhghubMTG(689)$Z za*RMom=T(>U`+SpEedu63ZaDEkT7N3V8MDYG?fe@E7%Pv<)m&1Q%bbv${x1v-Ie49 z2|r#*dw&()9Q9U2S~5l+DPMWrf63QA4Ry56acwf`xp$cpo%2_;AN{4rC7*7d2f8ZB z55*Gb^9>!CcacG>w<jR>CPI8AJf;F%VjIZkafxD3$OQs&B4^ltNB87wZ7>buuA&wc zcNy&B=$<@H9WDS0dn&eUf;0-ENyOrh$JvzJG1h%P_m1-L?)B-x_G{0Zto6JUUA4KT zQL7c<_2SeJG=iZwaEMs<ga-0;W0;(ABSiPBqa5*vC?-%~+2}*MCA9R=-!r-=WGuD# zqd?uWxZmvi#)v=tA^&AkU)o49v4xTY@if7><SFbwt(16ep4JxEDTPfX-Ge1kze#pa z=kMq95l_>KD~xbV-E_y@R0gPmOLNNqx;+xC9lBRtSgXRvo|WWW9)b|5fEG$Bw%vDb zelC?9G&-vBD-<;_qP%Ks{O7o&^fyn&n)oe!mv&m--#{R;5{iJt%JeRVe*J5?y)k)H zv16;!hdyYbP1UzeZ|HUEt5b^w?jzpNz5j-4wJBnmkTc4&{$kDR`n!y8UaPk3%$hrT zUeWXBx_QUz*K!H_q~{I!D*y&e%>jXdXimNCW^iJvZ+|o!l}gAz8=AZ9_~z-0-py|E zqjzY4wO0qDX$=py?mVZ0v)Tf>Gks|=nc5XHlRTKBpLu2putUZfM=K&39Z&`Wu>?o= zVsME=Dj@T)3<!xo1W-<1RLY2nGKh<1JbS7XBX1K4oIprMLX<&c+(?-y$v6V65jmZX zT7eKxCs&BZM_3?Kmg+@dA)M<!_D*Ns2`3EIYgv?J9=ZcQT<MlP0|;Co-`xlaWBFDV zM&Y~GmFNZ#K+bRW34^^A3$y;vR5FnN*H%NA3>x%2zUrHvgOc1JVYabOYnWfKgP29L z<^ZOks&lJt*udUxD-G%v)5`nDj(VtNnMd|V!bf@a&vD=W-F2j%lKfCC_1UWHn!+9j zWxFv<U3jj<Lk0LmM^3>_LEHz0n}Alxx$)l-Tx6t383MzVJROa31Q&ez$3xwP8Yo-v zK)L|YBx1p3b-w56E@xVlPn~U((q!kE13_2PS0<*8v+h!>jJolV_8-*{G=d=}aEMrN zfd=w*K$uo>^Dz)gXc;)?2rfi1fdb1$9}-L;3!%Sf1Q*EIzbUxzHddHx*_Ngu<iE@c zaZ;bJt;D4W?&ye8pJ<Yjnfkn~AZCBn0$S}!6<AK{6UC&Yq&{RUb?X128_jYUtx?W< z917AA!bK!pQsq8Szc^o??$%~Wi%oQG?Vv7)8f*6U?J*=}goByWQCFWsKgX7tnl^v? z<LjmsP8!kG*wSm05J%e|(Th;UJ27_4+M=`V?=;$7;gFx*kp4aUwXv=B#9(~e>iP{v zv^1pJ8dL_Tf=g5BVDAxVWi8c#(_Lzx=-Z=mRD`$4Zsycl<JZS)K3}MnSAO)IRvYBK zpNAksDxifD74MtfuZ6XS{j74)quhu`6Q^JGwg2+rq>=rQWZSj=KE5ln=$^HsiX)5O z#V(V?%KjI|w%c{Uuix1;t+gL_4d^gw``s2X%TH}GeOCF>*y(l~=^kmLv=Z8g5-Wpj zBEN=@v|N;b#jeq**k*16Z)z?6khfCPY-|1!%d)>txE1Sc!I#|rS!yLyZbLSR2Ay%% zh7+^fu(Wk(P1^CNH}woQjPE^a)At9@@|=C!M!ej=;oXtxr`P9KId($cyY`rd3o?^D zF-0-iK`mj2T1}}Iiuk%p41v#BoPvl<Anqct=wdS%(i$}&{vw)%fDp*LGGW}F$>ORf zRictBBm_<{R~E$dmn@`CQIc^4xGL&>+F}qw!kE5<g;VXnXCb^}e49iiAS4X<BUr38 z|9dWwV+2CNjNrwBG4m)f@ZlmZc_I_!3cIU|y|{!okT7L<v0zO{!U}c+!gQ${!juv+ z@80kh>*&tf$lV~}#~z`-zQUVh$m5`J=CSPx=1sc&H(J9$@8HSfx1y8$w7lO|Y<S<^ zMf=mDgG-IP`W3sZ1z*aSRf;9h6uq9z&wN6wH)7dt2GRIRcuWPj#Fq0Nu_cN@p+zGg zCvt}UcXUs_)&|oc?kec+_2q~^JWU-g01A657GR;$j%X6G_){;shq3d+EtkKpSfid+ zdvTCkuKJPLTU#89S%a21mhwtaL(m9@7r-H6-4hzf*NtIv#*I*0D4}Igh$H?G#RLj0 z8+}N(ge-*qp3yxaW2wa-1>R`J+vH)!X4|XYkpD6(#7TX=78e&ZxVt1ueWFQ9X6o~{ zrMQOZS3u6CsRGMMeWI9@l+=ferB3}nq<em4bWeG2^<y#{!bK!pn8i;ho8|j<2vv4S zWfqcams@|(-azYo^NBmwXH4yQ_}6+-SnK6W4Bs0@O!J+U6nT26oYy8Hj?vF-&!G^s z@o0xM|M2X|pRXC}=uiD+a5*|b<>iYn;V1i7?GaK}U3mtmf=i?E`HT&68tve<FJ^r8 zyL~-EX9mtLzd-v+Xz;z>^J>*J+oF52=}1fES*QY9C}~y>4(aHZbYi{s@XxJZ^fpd9 z81A&X@wM06T~c(elo{pk-RL*o5D6tPi{8ZsL1N{TS6d&eR`0*uDy3Y;GiRNuCoSrm zojY-C_?lN~H+G2{TG0WaG}Q^xjUtvtUw36`M7mdZTHSt*`VCQ{OJ=hP#y*V>o!T}2 zL#4hK{N%jX4>9F76ibmo{g-9o#MDbp(m<_V>|V2V`hu5^O@2QA`J>(LdTke+oSN+u zw`k(2y7z8x@v2trniPD=ZR@1LWZE{!O!8og4r;D02Rn2!e{%-n>rF8P9%pf?wR{eV zz@m%IU{Lpj_={*30#GLJ%7k&-jKx(0s(_IT6a-EnB#i0HSx8ml1GZ55ip~#97=e&5 zriZd{$}VWJA>?i#^6(L$6})4bC*8Y(kTBpcXR)?PvE~<isWcbJF#;iBMmWQQv9j)| zBUlMI2_)=>ilGb^tZV#ltcEb9+|@ll&)>*eNp6tv<HUK!=itq;<7RLsLQ}uo4t!X- z#lVXb7ewVAcP>|1D{Ga<q6R6){p(+gY?cAnwsLL`#S-ZH_Wy;$9%sCp7Q}eWQ^I2^ zz$G@_O?whVD^UyzB_9Dfku&VSqkHnTHkbx+SJ4cLyUb?ch(A0{9WDS0dny)SA&r7) z60!I*{?Lki-~7fOI(fQ}{5+s{m-!|&Q_Ot6KlDHA8RhP3uvHB~BN$!)hlq7gXdquV zhRGQ>Ld^3Pz=uoG9Px)JCQxA6=tH_CU>}11p3yxaW2wa-1?rx~Jz)EV5r5=;p%N2Y zC^-;M6O2oq!v50?ioMLXlQwZA*XC<&xlN^$oYyAVJ<e5LbwNB$E3Po=W9sgvJOfn0 zrO_#`6^sOHhi9!WT>f?FfRXYnQ~@oN6rOGm6Be#qb*WcSzF)s?D~G0L$9r!M3yfQ5 zZLy?xufU0MayHJ0U?ExjC^iTZD-DjPzH#skPF=WjZ)tt>G;ziFG9wZ*cQj92wzcBO ziNQ-d7CTMBms}u}raF<8&_<M4xpLS*13&9$4tqVW&i!@%wWHa=x~)vwkF8Sk=0oeJ z5xJga<g}8hIUpNERU>}Zh7<FohgMS*Q@f0b^R6AQ2OhIu;hkUWW+$_D%}=V`O0NHX zAaaQ{(s!2AOr~~)%p^}tk%iUEB-o+)4;NY?868jt0<i>VDW5|sAoH*p42eGka7tcO z%8H3x#Kkfm-HpzYDjf_EffESHNQg3Mj2o#A;AObGl-xLiT`Zb#H<)=}JWnTAh{iWr zAgucLEQE92xT!@LLc&lT&Y~pU6DA4`GWqUCNEpi#SQwS_HXCsL2y%sjmyj^nuV7*J ze`Ga;$sm7&{s$8^y59gNPbv~-^SQex58fP&{JSqjXw!g0=O1rM*4`Cf=5@Vo3(Pz{ za_kbTeVEucXy51q_9|JO!TgX9ffP%9hdLZ%WE+S}Pc^drf{^%JsVEiT6CF8k5mpfQ zLE$E#6>@I;cLWz1DN=^Oa3wzhin~lX%n@Ah=^qbu7iyp^G(x%n(IjHQrOI{Vmh(C; zcJaH?P%CTiwrQtL^j_`ky?>L-fmt;I)_!TJhM*A)qJu-kf(tZ|uLHugiklBu_vPXT zM{psE2^3g1`jB7(Ej{%2jNk$p`!@v_-o^@ZE!)yGfczIqeZIC5mm;{MBT9XuNlIqw z^R|MR{mT{5DjlY9QlBU$B_;JCW2saB58Y_?nb8{QiW{j2!elmti%7Vn3bV}$+~^?h zL#`y(4hx%oQTJ3(U>U6$9S^nop_}osnVa3t%P~Xh+<7$hkkxh_sx2?|n}j%$jnt;2 z_DRN%uRfYqCG$;$k4lBcmlyx%wWPYmrw<x2Rn-qaw&=@D1bn!xKxKd`xHQ^!cTCXZ zGTmpK8Xx?u%KB252PVef&bu>U+sEp)50+lC@MQXou9xYaVxzK91+-A2k4;J$?-gUR z&v;#fEYrcBNA6nQtmIznL8Q_1PG055O?%v{2N1<#R6HnwS@bS;dWn@!o5n0Fr`oPY zNJ@a^?pl?$9EyIm?c(5$%MC2At@B^9{^qD+rz!YS?$xG<rSnCf!w1_h+Txyn>0`XE z%NJ9<6)%ESGE4n;-{f8Oa8pCNTV$jw&Xn6wEJeGFR_DTr8GgRb0TiuwCpWtN*>Qtc z)E%;DzvuA$87cGaGOUJ$gle=t=H0Weot(jB8ZO98@?eU}nCfqV9eVx1=n~@VDlr5e zW^rn)d=7~;Am(8+7}6TS(v4^q0#GLJ%7k(IGK;Hp#~|d=0)Z0<31hk;3#oJ`*W|{L zP*2dPh#!njCWz@@SU9D7<&Q!wgm+A!-nbVC2?PED7Hh#BBLk=kb%7is5E5pDr7RdL z>)n<Fxx()1V#6q5HzZ6Mmszm3Dt4ZNFS+#g*H%NAQr_>-?xA0at{5hFgM=T;9Ceut zZw{^W2h2;08kvkY8*r;juGNB28@J82d++Klzxd|)fx2&FH_z#FZ)T9Yl9ofU1Uh5I z3P!Pn7`da($x{gNmGGDfaEUGVjb<f?L7_z>ASZH${daWF;_kNj#B{*&-mJhZ$Ie-S zqm28kC}VnP;{J<~;aj_;4V|~~h3ePR6LJ%)Eq?2Oine{YL=bmfbcdVLf}7;pMH@Oy z{^DLr-bc(BYJvO~H5NV0LPdKuOx@x(sV<c8GNd7Op1=TA(8SACzKlji`!vkT;ueYS z^%qnYs(=<s*tck(hDlf4A<>~drIpYcNvtf|reRLKT}W2H(WgV{MiEOP#>};y+_Poh z1C{7*HJ8Sc0ba;T(c*g1*>Gb1*QlBSnqj?puld(Q`h!e<sNNoPaM|ORHP==*Neox5 z|1ieyk*8ZPXjufd4nyFOndHF~dDS^E9(HKSk#{+Wt9;2qAQql9<#dPu2+28-D}Kph zCDxtj?oT8y4+)$=h^u+Y;wYAzyr?2bZX5yHiaz$e%>1A#SMQR=Q7kpl{bZ6tErheQ zdh%@MF-xu(CJVAyhHC%!f=s?I5#owvvM7vOhQ5E(4d~huMnOdz8!=4VvH&>^no0%* z6`D{qt04^Ik+(hH-rhJvNp6sEQf<4Q%<l(6oN#bMnePbAsW-fIyJ~F=oX48#uX*F1 zGsoI-sr%3uhKVhr`%hW)1<^e^Pre+AC9TqTdNB`1Lmn@=(c~#Y_#A|f3h)s`V<oK| z0U?mH+P~B3u_rBj%u{&CLHA+{&K)iV=S+N@D?Z|3){FU_ARrltCJ`U=8$Ov7`sR7Z ze)g@6qg5XrsB!pq&ydpVwf}3k>qcyBhk^ao5Hy0}ZE%SA4i{)3dpN|$hlR&7bO^>d z<|m2?6j(O;&>bqk;*dO21Q|<x%>RcTDf-BW9KUhY4kZUFIFjS5GQ`5<R4Dc`G%f9^ zm~{oOE!8|_O9OH5WGLsgNp{b%R?FI>qP-a=_05HBDeudG2@FsL!{a^jo+T2Z>##58 zliq52{c=-Yh*UreCB<G`c+yx6pLXp%a`wFYq%kQdpnJ~4EW-;Is@*;k&@v&iCLMN5 zlZYUWEPfOl1c{ZgWqR&=w7hH5%o?|69-JHUs@z`x4%?T8t<3Zeo-p1cEY_mfX$rpN zo`X<Y32g?6l`k)L+}R^ofAH1NY4c01sul1t?~tzPjn>&G*66o>RW`C?OF6A%Y7WQ- zQO_O`sc>TUb=Mz;(odb*vMJPl=lZ#J9phfz8-ITP-9rbzj<guAbv5%@D}%3e<-IhR zOuY!1NuHRZ_YURPzz*#g6y<;lj*!H17vI?oV;Jz^%?=d}h<VryhK~6O;FP?mEI4K2 zM_jB{SptsAZUpjPfWQfaxJsEU8spxD?lu>4;|Q=u)aU3N=H((qn<p_EpJ0Iyh9qvL zDAYnY*Y7n{k7iD`1)+L1i;{FoszO~L-`xlaWBGIzMu#dXkqL4IP67$yBVn+&Wns3_ z-*f{)W2qa$WS~Cx{;%bBZc1{4gxO}UzibO{jvy~rU4)!2bga5=cg(^!s}ELDov<qA zt8Glkx?yhnUbY{<N^5v$KV|(Aq++QrH?`_n*kjwC3j+|s$0t~q6Bpmyg9|yIF;x)v zL1{xkE9Bhx?+7j&@lTe&3JZB=CjcKVjd28*f-^2Y<`%1tEHpy80MR63!Np{ZT7{35 zo_Jkvxb#ePUZ73b^zxh9dAlS|9Z_Y+-W3-Ht08CvgXrK8vETv?<Y|B~s}}Yibgx<C z2rfi1fdb1${|^W*kg+9IaQVOpF5Q8|mo0#$%?lG-C^=Bkz7y9f;+Bu@cOvMnU9_9T z1%|kfqk9BfdTo;36B4_BEh^e4;?m%3A?MP)x{t~LRd8uu%}ek{LZp9VRMo86wZH4q zkw2A%DxiguS}S{vNoxE}=PUW4$FmyFQuD6!b#JdGGj9&qF}LHT_|&gwTgaKf1PjUH zN3qjOtUR!{!?UtCvj>gtw<CE*=f~|GuZ{3taUyJY`^;Qtt#$*n#}zwG!IxZyQC2L| zE@Z^#B*vw-J{%I!r(%s76^2CxJ7k`0=bOIU{ZvYegYw>D#?%}T7>LTvJs%4v=H4yo z56}?5?Q?n`ykW6poNvPoGfutuT>JUg5YKJP<70H*&6;s#wS%0&WU5ZcO!CAO`Iok2 zerX1putP&p6yi#6vJi+>FF8d+6%B}a*bF8RTp%yVi%PD3CyTgPIfG~7ZUpjnn}m-L zSGAKxW84AJ-D*f~90AsdOtWr2L8xd8CPw3PED)MgrM^NfgmeAI$SzDK3q$oP7A0%{ zJr~G#H$uW#-j#(>y0b)ut^@@yAz`q;$-=Df|Hf(vlYx`2ldJi<u1a!)gxOl_Ht7j( zj_f;mrxD6p;(B)Sylov1BpNj`@Yp`$*{4n_<7!u***oWjV@A@jPW_eShhnMkg!!;t zu*YlKeq;m}e3ZjS1^5t!?({^mj}*jxP`C+b1!gqFC@n^+Dn|c~;KGp*W%;YHkf(cb z4@Yn*IB(-)Zn1XBLZb(;szj5B1(!GB9(r>dHQ6@s)ueZCkG$U8{ISj1*8M6UJJmU) z`IgLx%W4Q3!LUC#L@c;K19=)C%&LXGhcn>1Y@fjqT!>-<1(uEe9}rw1WB;b$!q-<} zs>K}*lMTR!TL5!XpQo$Dl}KSjN0j<Rla$QV=j#M9`3JMCN_WpQC-sS9Qc_YMGL|~^ z|Ij;J-ZNSw^8=*7hnxCR5roNX2p5rHMOAq~?+M#i*arevmIX$-YscFMR@*RT#muoL zt!7<)XPDj8|2aBq(IGz}@Ycs+DAm8ZoYy8Hj*i=JJwVmVcUYD6U~|~6=6k(!7hdfX z8E!uIs76n-kZTEUp><E&(Dk)a=Lrl@1()W)m<bN3Nu~P!{o)VJ`EJ<u#KQcj%T7La zyC$h`T|GH>)%%0<`_Gp5H<<`5Q~@oNsCemTj<$UI<haex9ZAz>y!8$KX%o1%e&FW0 z-BfzjD*x1`3f&u2sp80@cd>aQwQ{*d`Ra$3pT5<4ZjB$7t|@_yciCB8P}#Km&7qgZ zgHjLERn(MLLK{(HWrFLNXXa(HI_K5(vud(q`p!{mU-oWU_ha~~d1<<>IyHJyr&wnT zzT^i3rrd^X5GB^nOoJ2CNVjeWwA&$SyZ=km@cma$+Bof4qFpNA`|VP%=}$`gA2_qI zQk!F~<TR6MxF9ph6I0a4Pjmxz$UxoA67e*Zg%CKH#VNWc&?VU+(twzU&0t7t)PPDi zqFD$CfxIgd#_e+~uF}2qM$({yc|+g?Lc*AC$wDe!(L-(=0j`QxJhx^xu`s5avv5lH zYCVNo2=ADg@#f2!7iS9sK1wgZ+DhPBa-mA0E|6mcLc)yjo&{t5zv%{aZ3%B6Vaf<% z!J7GjI^a_xRzsLlvNj$35W24};DjvyktY=iKaO46X+OL<Onmw=zoZxAw`r$yrQIuP z<g|Fw;={>C>Mnj6v3vTJow4`XN!1Tt-#RJD55*E_tM*ks!XD3RH+2C*d?h@l0$gI# zy@ge>awUpEp+zGgCvt}UcXZF<-r@3&>43{XaTh3hndL}xXk&0~d+^+2#@+5Gv^%$0 z_jStCujxA*<*$x;KYw)82voG~!zF^a>yo!EAh~wYh7OazxR)v~r{7E&0{Jbv`qW?u zD%z`I>K3<2uF5k&6*RHWknOus(LN2cvbaU^Q=Ww?poJ3lE!wAH(iL||^^|EPG`Gac zqHP-H)aHd`H4~aiV4D%78$~RI7*qXMf5W!Xqb|#9B?G+Rrics<w}TTiJonW~G;DUl z$$3MAbXTvb?o?ysSX<qTCpY(3x#j&}U+c&UuPTm__mND7z#%iqgDEmUb1epTXzZ-% z=7_6&$wD9&p7iC+4gw$~=R~gfC5x3<cj`xFq@>6I|BAo~gt(fQERJHiX(D(Txl3>; zWkiz(IWqTuarG`)9K})--5uTJ;Uho@I7`*1wKYbFD~8E}ES90n{$7yD_a#DHu}l_) zamzqgb|`cum|O=w5=KEq8yhi9*I)sXP6t%58_=eZx*-hX73W;AY<s;N5Rl*KIw2!P zTjQ;);LWkxC5AaCTH$djc+2z3>mF4&V=^w@{M@Tpy-up(dG02vyGA-YKUo4D$I0u5 zVo7Uqvej|e<J==*dCZ-E>^TS@72qQXW$9=Hgh0+}|4yfek6QSs2cL5ErrKznV}ACa ziH~#(&v;l+gVLX967ezrVxQRYN%mjP)n0f_ZH-x?-nwCRE;fmZpZ+}S+QSf^=fl+y zG=gD8aESO07ib_p9pWQId@e&*dvK2ViDCi;mW}=&xWff9min0g552?XEhBQ!A(iBW zsURJp<Us719ABAHs7%s5GEaAHj_4^{8x%HAbR~lH+9bQ@%<%Tfh^INjtR9Bx(v1pp zs0>gAmu92yr-ew6uVWtXarf8F|BYjQC^b|-3nf+3O4D<r+c_^<n3MW(b@#nTVuqp` ztADEP`!aUOxVfQga)#GXUL0BcD0X^@m61`F?dpE%e|t#tb#qPoglro)Wro?Y$Vt;* z&NZ*T!BZ3^@7**6=|&OD3K!KU<-R{rqjcDi<r(RkWjCe7+ud~NaqIP-K{YprKdLA1 z<5^720j;>GQud?>I5FFtW$r)GGCO42YvP4&!;RJ%>kU8ZzdvA6)fU@z&Av9Y*Va2Y zKkhePR129&9!$}(`TJa9hqBr>aYyVKl34HJIh?6dY?2jx$!*akSfHW-F%O%;&@n#& zl#>^g>@gEB;$pd~9+j))tr>w6%mF=DDw9ED+`P0=l5qsPSadS{mI*>U-BTeN+p$2% z%mjS6nL-{u0t?|>SFJNci%C^Ms9wjSq&wh%Y_coV1@hgEkT8~)VqsKSiA=B(6ug9l z!TvN0vvgSc*H%NA3_3=ewqMalLrF<R!fYQdSIB`khnK5nGD0d-4s15Qr)lqgrg9i+ z|KPgUVU=H9U)@y68x{I^c97clvP$xUkxCRuec!Bx>A)VVyBY)_RCs=Zg*l#+i!Snc ztRU`#E>1uz<lOl02re@6pA3QFN}lc>XO7^4Pq}!gyHIyzp%Kyrh$ayWF5lMldlu4Y z;()8AF6+JMseSuW<x%_1Yp#kNbz{A#PCe~jY6u#^AUZfiEVw`e`8ps>tGM}~dvyUv za3P8b6j(O;e?V}7jQyK}3vXkExt48d<klMb+DcrC;Es+c^@%1anW@j)3S#zuSwO4x zAuN|^qByBf6qAyY`jD~IssD!_DSE?bjdZ9lX>$wG5yC|zTvEk$>1ejvUf!Q(Cb@R4 zOUqH(my0!{tXt)oCV8(NvG!<E(*Yv?*w4A!Hcv}S97>g$Qol)vL$l({{-~X1wkSKq zXkl6P3ZmCLtnZ~S3@g>Q|Fu>zJF=>yM|&2?`)*zW160AKu|GO?Dax&R=#umPsbg)s zXHTpjp>Z>>$<5ozi6%XI=EQqf&Z%Pf8$XH#rG^S<p+v>=H21vPL!+#QbI6*-5k0C_ z&JBLu?N^nGPk()Q<d~A!<pteu^-wJ&i{8cNiNwm#gGRIFJRCG6tjxQ<*-wT>MvFAI zyB@r|ZEx@dlbfloA#TM^Q}88MBcQYrinhc`3ze9a=0Afj2R>CX4^Exg*sYvnhcBx= z7Wf)JRZG0PTbHi!lv>G@+mH<+_h#m!;KV$${<{@Qw0wM^Yoj!WRu(R2IwZN)m@vk0 z%;ugh9kzB$akaZ!RZrfVKuf`9k|(C9vRcvx*r70u?QIcXSBW9emBp!s@@0oe11h@M z42HBu4T!&pW+4D&@~%u6x7Ao&wW10bxk5tV1VX}?UX6uRx}QNHH;w@LMHhelT#b-0 zriZd{YM`X>5m*TCn3|4Fm>-D~2K=@x*4q9(7sxRJAz?=7&4MxA!-NXW6?Rt_8$}6k zAYsbTV8NR17FPwk0a1_C4Pi<dT<6$E6>Vib3`oL{QJu>igg1w^|5R;+4$rQ<Cwu)} z&6RWeM2*U-VQ_1wMc4X{i`v|>dzo`_?2?-Uie1)%FS*qQ`En?hKwEjKyoEi^n{k}E zv!Abo$5enzY`V9wN<1!63<@n80XdN~?7yRX@^m(s1q+)By65OQx@Xaz4)edbrD6dV z(kO@~5sN?9KE&JK$SKp@?T+RO{|MFCpGG&#On0R|%eee>Pt{@dm>bQY5e!3vL&Ul# zG?1qm!`xih2X%uIS_XwU;tx?wpun=x{{y-wWGuD#qre-@_<B4{*tol*J6q?ZK2L{> z>zTslk|_0wCMlVz&)1dW65=t-&2;?<C-sS9Qc_YMGL|~^|B&wan$bO(rX2WiOC+h( z!DKdsi%768>yvA}dhFeebiE7RwJRK}v+G;VQb+yAnU|(q-&^NcaEn@tyL21!^~vhT zJ<fW=Z;Y1#W$Cp^h(j~-`2}>)U(>qE5D$O#@78yM%Q!4v<>dbJ#M-7m$NaLt-sg*! zJ00Cp8K4R-&B|pT{86pwYMr_*&3LqEs@-Vgdb2BbOsZmL+-q=K&46c}w@<a)<q0H) zZ1qfKp$cfBq*-aYGH!?U@}K4A-kULHubt+xR;PW;2OXUdx6^S_7oA>BxBkY<<)H*- z(Yx3nNUW^mX4$gt*{D*1$#1r0=LZj7IcW5X<F4@)(j5=QU%x!D(U@YVDfp6qn-QcN zMJzv->$m#+&(awI@nu#x$7z(iXk^m;?%gZLUmt1aeSY+sj8Sr0$&}krEJbt6Id+8; zvrq1$muTjt4FN9BCbc(aL}#O03k*EdM4}^|&6esO2;OX3Zh(WnoMx7S%_I+|C@S#i zRM??Wi~oy6JgsRV1TJH7s=0g)i8P?1i_KtA_k{S1XchuOAn(eAaeE4jtIkvbleD?u zUlBOL{O++Jrf*>(bq07D?p`N1jsOcpOM6aNM@Sgcx3F+Z_wx)2wGiGhjusZT5E2Ib z3oO=F_<KPn#|VUk8DSO+#-0DB8_=~S?1qFXqXi4ruFzC6^rp~+qFD`LN?F-meM>hB zy7MP;H%RzV|K*#q@aA~@tKx2iE+i%Dt-LVyUUq+tF*DuTsm}@x-%)G+g2ra&mS0)( zWkZUdl9ofU1e#g%%VpT(OU;ikcWUyL@R$m4iA`5cOIEH#F(|ZX1mr}{u>X$k$=BLo z8pK^iMJVnv*u@clc$zv~02KCA%z81!0x&z#Bx3QWfniv0jeWxp{SeJC8}3rArE0m$ z5gwas?)!E&VDf~x$_vyGG=ixiz#(GY6B@|ZjbU=ejgTqex@^zG5r2qc0tJ?h{vXgi zA!Dh<9|h{3yiFcvY_`2(V^r)aaVu3$>hra@xS+w^B~j`VO;R#bpSLZ=HAI&Ja%P^E z0zTZpa#EitCM6~HA!Dgi{}1V&uNd9a2v{FkaFU8!OlCv4h=dEX8`E?~-{?knEKPUq zOl^~^s<qNC#r}HRU2~RW#Nv#0@mo}WjngczmZSM-+Whiz`b|O{V`t6uMw7ML_?+u~ z`{(FR>y9i<yw&=C(i6MAz3Pchy_x-P&+1?KbeJP`p1=TAaB1#&kLipiH;D7zzu3vm zZ|Ka|K|jLG$3$mtc)5S6%eD2-CeNyrb;Ct@AyNS?l=NKlYBm3LeS_X9?<1=!9GGm_ zar3KzH=HdRG`x4>!#u55htDW+A>k#GSUFw4+<wizIvXZ0I;j@?_F;D1`0&b(Y0FxA zls>fOibeTDOz94MxIjp?+7z+uaKtsJ^T<tyEJWM;KUgxvaBQ7N=ga>$=6IHk!<>cl z5=0JwjY43+l-m#(h_c`7K7|vr{|n2u==5$qujk!$dVEVv-*)iR+V#!ry||KH`nr{F zc<@%gmM8S-Ztjo<lWE%^Gs%M~(%AfPF6_{l&i5K2zTOl=pazRm{pE|hNCPUm*bD}B zPl&&WW?=?F!6om?gmK%4#nrA<0h6@3;9n6qfsin!r?HS~4_=15*U60|Kz>o$YxDI8 z31hl13#Vp(&q8>|T+-;xybxL#@cmh=rMt~vp+P3c2!w<gK^=qf-&+ZGR~LJE3A-U- z%DBjab>m{^Dfm)pDNnT;f|N4!RnorEI(?Mn1_?jLh8;<UH^;9U0~p1BPfqmZc5$Mt z*T)iiO^w!#ywx=_Gch*kZrJ^M#^WbU^l7RjKNL%#Z#}m6gFWv4z`7kmd?h@l0$gI# z-9jOOgA&D{(4rBL6FI~FJGv)dYlCSJcNI2J+-0zfBmVF-b+`a1?5S9Qg)|DHNyOq$ zbonbS$1TzA@3h&%wri<?sD{-yZfYNQA>pB|+S~76KfO~!&<Li60EdWmPiP=tH-^a> zH$pwA0?QG9h++Z-mW}=&&^;kzsl^`!>Ylt!9%gK|y#g0VDE0YT+`@u}Eft7TpJ<Yj znfknKDXt-M3&@%71|m-C6UC&Yq&{RUb?W~i-7}lfJ>9|F=T@vz4S~sQ2p5rXVV3PU zWX%<GWnSBE@;BX|&2IfSF(B{P!;}d3FHYTjYqpv>VtQDkclrqxC(?nk)Nc~v5M9{) z0ZqO$dzZ;l_vX3Z=HKXZ;8)z0D~J6y<QnYrtgU@)%8rRD1LX`nfdQ)E(qwH3y^e;o zN?x1nJ>kLC`la?6nBVG<nrQEyr%~<NM$M%0cSF6G(mjJm6(SYTLP^i%moiQ5^o3S! zC-l;Kx7BrkXXd$mn%nxkck!RA`D#z~`hj#m6Gdqyv_=vu%N-wa$ntRO^j$`VDp$u1 z+tho^v`PQDTE8vrwfIB!aK{(Fq0U0vj3SmnI&F2r&b{lRrk=NRw)RMG{jC#wKiXKj zV$arBUdD%R+AnV`nQ|MlQuI2%)lE1tk4-DJ0NFpOxbMuBu#DqPTP%6G?YYUS$3I+x zjNX<x=Y8+KZJVdp=u|K1k~3`^WF~nqMF|_X8^8|r+WYAg;_FQ@1lDJ9itdRZi9;d{ zh<Vuh1JpgC(v4^q0zx3~%7k%y8H=mqp^Yh1uu0ln@UIA*Ku8$VZ?TXHUPVsh2#{ZN z%kwLvK?!5JJqxGIOu&ar`sCpwun^uc{|%kSD96HpzmmmTYruiuP}&rS5eNx0f&mN0 z&Hknv(6uG(hJ-0Yj|FSGr-l@oP~?b>kT9ieT^KzqXK-mKB699r5`LVx>GCpoa|BdL zNI__{)yV<T_nK*l9){dW&anzSJ!ssXm--c!&6-eMbAw*wGCL*tp;!XVo4D;9?C~!f z>kbI<mGGDfaEaYpK95TjgF-G4kP|t>{yVxSUu%PD5O)=Wp}5OzdXDbN)70Stps=T6 z%O*&pAeuxh{v1v-R___nTw~ATuu<E}&Yqq-s@#XIS+7rB-x}wy=ddSB4M8Iqh6aa- zbx&v@UpI!y88<@aRDtD)KSVKs0?S7K59pqdvDD&^0(DQ`CJ!?<+g{Q29h}tXYjJTw zgS$(j)F+yxWTrlETZ(Il&;oL%BVbPI6UC&Yq&{RUb?W~i-SZ`*drqbTCrQg)kd6>8 zBH_ZU<_e=91`lc}@!EIXH=@c1?AD69lur6-F=FR{?AqI^=oz1^yFROX`DHE6&~?sI zze$LrnW{%!^zhB)GLKZ+y}BB;+4ODI8y!sBRDM_gK}4@f&SN%&N3IH`V+AS$RKcau zIOdRzvUl%~^xAXD?0G=_pVKog+c{OT2&~;WWn1R;7YA+x4>mBCb9o3tqykzf>A9w) zxT)Kpe{yI~tBgl4<IdYg1<bB8)3Ej4iARuk*cH!UI*6f)Ba7a}20>zFjf&GUD(G08 z(D*WKM8f3T+Dq&8f4_Us$T-zVoo4TAw1}d6ER)hoXd_Cj?BM_4_0L|S+c&4>+4q^Z z_veb<Mj4MT9XQ&uzh?fUx7!mSK$R5}q*gNJHe`cHl&q@-C+5Q+pAI0s4yFT>7Z{!S zKBJA%t234f#>SOnkIzqh_od1F>H5Q0S<<~gQEFx>*i7=o6os4}A%Y#c^R7Ze#Mhf* z2#jEHitZOABo2u*prVV-U{Lpj_={*3W)PGE<XxFCZkw^VYEkU2EcjAB;f}xwgoH7D zGYhF5m1G<Nu8Qm&1~V#wFs6@U;ne-_SqSf#wWX3m5fTP`7Zz*f6goi134%<H5eNx0 z0%F0~3N%Q*L?&_ry0(NjkT7L*X2Dv{$BZEZ5Rn@Y>`2`Zrj+srdaoGZ><bzs-)a!? zV+P8DH%FHn-L^A8>-%H0Pmt%O<d@@Xd0vm0ccYt&=}ys{3c<@JM1_ZxUROp*ekhhe zOFyxn1ACm*tMLNnwHG`kJf;F%V#_JKmna5>7L9<M$QkzE(LMQE8%%?^tEdmfU8a`c zh(A0{9WDS0dn&eU@&INhnnW!AJiOK`>BI3-Zybi3sJdFs3YpWhbERz$2X<K5zrkUj z<nve55Hx}TRB(t`_k;%Wbz_*EaU(Pia9y@Y<A^^*F@XZhM*k1!o{+KB;*SD#Pu?aE zGd9~^feR#*`g|=eE@*IfNtF6Tla$QV=WR=I4RN}FoSAn`0UvH5!AX6hn3R;%hm568 z{Xe98zF>6Ek-+-Mf|I1>E=WfR7m;vbR;$asX2X_NSK_r_TeW_9?~%{CH?`hZIQY2A z;EgkKzh=3ds}r-n=JOw}C)Y4{#Q+~}W=j1gAr4Qg1Y`7}(&?d5b-xX>o}8Xq-%;PY znr-)E)zfcP$~>BV#j=avW4aqws0>gAm*!GP*{Z1J*VYM7od!%V_pITG<hb3V_vgN= z=hZM`UNigYedgHYHmL~&NGLT3LZkv(C}~#qWOWa_q`SP-3HPt>o>#TGmAc<XWvpLq z?NL)|toZcVD7&6At%T;5So!JN@H5}z>KnY=-#6*4Y1LZmS1s(_X@Et4^Hq(LR#w;* z_8UK=1#L5mSO&WJYpH*K_W48igz+0Sw7R$R{7<dw#9uuJ)E?c{IHYAGy6!=mlT5h{ zSt&|xp{E8X=F61!-_ZPH-KP9kq1@s+Dod(gS~qEkLBlC`E0ovk*)*=^&vte8*wP70 zQZq}zW|9X}G=7j>TiBsmn;(ore7z}#z>zFYv1LNBxyB1dA`PhMVkZW5Pl&&WW+5O1 z@~%u6xARzBrDG2A`^yNNV164*5Yv~ikV<!NH@R^HxGM6oZ14dgVN7>s;gq?b68LcQ zO`#UTJ7(R6NA(dB2K*{4*7g7#kR>ODx<HN*2njR7aTbi(tyQcmN?Qr|(h_z<!jv(H z1#2a~rW7I;n$-}dl+XI1^?DqE0ZP8rAmPV11Hz)<%~9*=vOCP1HWC-EnLGF6s>v|{ zOJ>!`ew`51UH|-=oJ$qM7X&WL@afvO*o-RpQa(QvOQ7%FQ~Y6%E7Z8cynctTgvV5X zOKdp_p+qq#v}gq61Sc?J1WzMX6{CMg_vCABFb(3aLKBL+%x2-}o;*z*E&vL9Di&ZN zje=+rvG_CO*-p#v{S%ti?_Ra6N!{7s=H2*ub=RY1Cax|4SLc2<Vea>YMldx5I7F;_ zLIe4_F-*?55uyt$NBkj*2^3g1`hP(8gp8#Ye-x;D@-}&xvDx+t%zUBL=WB6sL4&(X zqSPmvq-3T(Z(E9Mh?)iD><vbiOTe7eCyGf)Nqxvz>eT;3y61C7_mo%aU@{xRMI>C9 z9Y3*TT9X=d*&)?0NUr^&pW*80uhkE1&pllJLW>4rZkOz9JC3brt=;-Y=Jxa)4Z1=} zdTkQo_^26`i`4CQPFS(D+T5X&>O47mEWL;As(qn#TZ}N#eB9t|l@SL|(mmluWq>NU zG^^5<X(EeHcb>1#J=^`_*!zC#rmXUbJZ*e*<FsC-JVU3o3EXrgh4~px;KSX#R2Hg$ z7D{@qcvam^O)uuDo;%kp`G<qMdF4hK`A>h%8tRrY&~bU!$>ZssO{26D@E=L6^qXW7 zJ!00h`>$3sH_bB2jr|e)@m-l@&lBYyn9L8~e6T|oXeJqkp|ld(h!QKOlq%!X>gl=I zocd;VtF8O5s(W+!+Ojnrw<PZS_@ch1N$N~Ftz^n=$Oh5mc=wlZV#b)QUx(D47Y5Fl z<q|&Q;=ZcY+I>GU*8l7Mh=^;?r{|n{5wR(vww9b`GHn}VCV66t0xCSN0z0%MwbmoV z*PCJpY{udgorojJ4v_{_bg}gZsCz>EMKlWmD3f<(!nmEz;wtk3NZ`YTCUVt_zzKwe zF+G-r)SiH8@~RFb)Kh)r6NcG@F?}@)r+R<SLU_j<xL*G#V(xtt0(@5%Yw0k6JOc=V zOpXx<2{S?v3&wQ4p@Q9jvOvNcNSHDzvS6*O8w?e^8p4z^G03LFd{{1&VQKQ!AmPXD zm#VggH%D&y3@d~jK5Xk6v9z4c=^ahWS`PL$>u)f;@g3XqHwPJ>TYdOg_sId!%F5}7 zVhQxHmroPe<MIdgpJ#r_iKm3eRDertSNS|HQ49*XKtN994Eyiso_wthra|0QG=kzT zvspO0Cr?v{3xL9&idirCca4Z95sN>4#-uomX|(Rqj{9aiwJP1#@IIHBH}H9<o?A6^ zM31vSr>G%l1Ouqx5V7tF4dm;_FgfE!i0*Mtj`%|qlaeC-K*mywKMK@6d7C`U*lc?> zLEhBoYjJTwgS$(j)F+yxWTrlETZ(Ily9MM-_Y^fJ^@(CqQc@o>mOAzSknZ`6(LD{R zQeV<?7o;PEi%7UIyD-hw$obW8{H79k?NdVzbz5rg*{$qa%`q3x^nDn)zRMG*{Ii2H zjOX17PS_IBP)@%|h@;%AUj8Ux^^v1npBfL|*5=KSQ)OnCMpq{J?aZuKfAC_nrE3S+ zYiTRb099~lY+j7+f)ck*tkk4lhjV4lUMy3yOt)vvELycXdn~hVy(&=&$4Y(mtE@Z= zRX__RJy-kE<(qE5|6{R^Yv7yb^9{#^2hOio?!=k&a*3}Z?bZ!1{TnYVfRczs?_z@> zu`;dhqd~DQw=TA~n_**UGVkiHf%jc^eSTVYcgBxuu0zftx?fP1ZZm>(qljfp<7a6u zduwD&xNDZ$?n5K3X{)^44L+HqeXBO}h1tTK=5>p8w%|*yoFui9DYv0micVL2XbLCh z4&R42(8iE%9n#cx1e9v_?Z}vuk(MoYjPpM7<L1lAy7$BLeQti2^RaNmv~7@?<iQj* zb?spUJ5;vx;eLp(H^mTW%HkB=6G4)=i!`93i_KtA_k{S1XclG=6kPJIOc=LMv$#rk zvpl&#LEr>J!kGS+h16kGyNKL40xS@D_UptPR|#YKaTZSd{XGle9n;PCRW?GxfS<x* zZPUN!0y#z?B+Lk^EEos=O*f!xOV|wwQ^qM4tXn`+$q<J^Q=Vougej$~soU-6+v$EV zkK7Fsek>b%Y6`qL);`dQMQCKrW9_X~YMzgJ)V=m_wXLJFSMM3!&+_Aj234jtHJ>`! zM_ISuDwaSs2lO2Rdpu@(P#=W&N_b2KxWtxoAC)Kuh4v5uIgvB$zoUEdbT*g;3!91= zP~2s(i=%rM?ddT8i(4wTY=SfjqDjQ!&*?=ARMuUIh_1f7f9cbv5v#k`eY7)mUB7u* zJNx#pT&YGCH3W@dY6x(MSoeem@-$<Zn+y9Oy7#1U#2=!VK!IhW{|D~(gp8#Ye-x;D z?p<>FXpqy{mF+^Fs&%{mPJL5G<o1QP{d1SCyinsQBmPXGN_|P+QIL*Ma-gC;Fs^vS z?I+!<ap<mHw6n!!inymVmD6vM-7~LaP(4(%XT=3Zw?gLrjoYB0z^j5wbG7BTen_Zv z_;GjJt7D7i_*p40L@J<#lETy4`|bJeF0C^=#qCjjTV-bN+!x8)^E$>S2bwz{D&NaJ zwW>0$gyxo58S&BoWz&wmms<?2cBtlniO>6gvUzG_m>T!wa-D>07YCZjo9YDVMiEQ> zmmcN%SwHAKBW>;X9w#<liyM-XJ*)3{$E*MCSp0Ejl{0RTzcM^1-H=Sp0p+A<S8O-t zB~H+=fjjm*Ko%2@4yqcoKW};XT(k9e-ZvUn>UICE&TgG9jEs46>Rk7;bnl{)n#t6z z(DliKDY~!ocqZ(SYs#Ty#FYVMArLEYYVyThMFV0UmH{F0hXBgSi%PDRD2upQ#iM&r zo4mgwZ~`H&f+&l|xR0Xy!7Xy*2zIf^z@~OJgo-wDVl;lh0%1F<Oi`$XaISya=i$lx zo{1n-e`ZmV2?p@tD$ELXfqZu(B#h;qSQv%3gc98V0w}#18wrDbGZtoDp{Zmb|F5lv zFd1|_TgSWg9jFzMJ+>fsgM`^kerRXGn<MS|k9>qyEDPQ4<h*dz_iw75`}dj^(#3G4 z-Hj@lZ`UHPwR0;OdJa(1awwMizWLOTfIY5ue>!tAhmV!`r~n`6&>eh8R!%|O2Zft} zR$w6b_a3n2Dv`1ThAVlwe^r7#{NtnULJ5>vFZf0?qDjPp%bo9KTa@z*jjqx^a@G;! zO^2EHBlgs2bznf;#3hg7Q+F|f3p9cuJaC9uaDfK$bwHR_ar2=ICA18ja|9Qnm_R7Y zM*j~8E|9T*Q*hyJtT5NIEe##va<oRiwi1^jxT7OVeWFQ9X6o~{f|&h%3uu+@wbz`~ zCyGf)Nqxvz>eT;3H<~?Rw8qg?;3VzanaqZ85eb)6tt&sW{n6J&iPw%l*QI=J)AnPU z`BqqQDgI5ZPIp`lbbAG5ZuakM8hqd8Q$;ziO+p+C&2qP)6N^(n`=3mEnAa-G&g5IB zPp7ZBHfN@ud>I{IwuATNt0(DB%B6uPFhCVtnpO3CYNE)4PuI=+P}lWsrc3thW#h8m z9rl|xsP|TtRUf_`XgRavF1jj^%0d;;LWzo(+0oGNn@;Dc6WZ3%%=6H7@u)PVO^{2q zD#;;1uUZA=jZtD8S@bS8Pb5}eIdS|`m&<qTFRXW8m-@W-+Qx1Amd<$5wSwk8(>}Sk zpX@Jo7WPYSXR54N`e%;_F7Fb3X7JNn!AHLaUT)Ia<&w>9?b8bf_I>%QZ<$f@>fcPc z4S|8^`;A5!aAJNtZQ2htIJUCdyQ{rBPB}5teekmkJFhBj62qceJG!BdzSqpEjkg7( z$sbIn;eyO0PfU?&rssaxq0Wo?K1F<8C5FHx7N_KlyGR3K9yWs^tx*Fi-H2u(AO!NR zOc=M@v$$H1Dgz`9D)?6fP9P+V>DO3D)dVlYO;2*;2#{aY-grhBLc*Bdk%dzwYO2r% zgLllBfv!Ig5(fN5EY{N9D6Y^TlVb#fH-e1toCV{le=k?qU0v+uCG3WTDPs`}*0qbB zr{GJar991Q2vf=ul{%+t%~RI>t0er`EXnUGyg7VRcbq^dpkGsiLy?}5^VX+!>UlM< z$)FLw-OhAd+^}{^t>Yi=YBW~X1N4d|&<Y3NsKXwwSft6E!SI#vm<n)-&AfXM`0yrR ziDFQ|fdT~pMptN(e^2-1Yi%$M;;w@3t`m;<!_(B^0-&&`VgVM?D2OHzi$7x{PRtlO zqH*KF6MprpxG85-rJ;*^wH@aick8RWTiXU5jMNY`f~g_EA!6MV8pzj;VRFWeP-!q1 zxqFf${t(3k3M?D_KcIU;#!`zv3cS&bx5>kd&9+x`@*F4i`C43D(BSTpDD{aZDVeFy z+m_-Q;#>ha(>=7$NqwT2l$6wmjHOQfKcss;W^_-wQco(#FqsYEA`&jlQsb;D4pWs^ zzaY7G)tD34avEAZI?_JJux5<ij<|BRXP3IGIq&PLeaTj3mOb4w^-{k{h{N;I!%^tV zy}KvFLhU0QP0ZBID}?R|&U#)`=hB!l-U~I}wYhOqr#%%bP#K^KE=}b1DJ@aup5b$1 z>#w>WpBK~S=Dy}j78_ohKlh@_@E84SRNHXoa8IVn1wLHfqOwp0v{2G><;@(kW^?|R z?VXM8?)}i=*7r{VWgpClcwkv7er4C*<L(aE2W*sWxhSoK=9XA_s<dC{l`2ak9Y5NR z=zCe$x>3U~|K*)L?i+Hq!HyRVem(z<$El%hMiI;AT3vjfJ>9(Hc#=<>yN{-Q>QXQN z;h+(*I)(=$r+0Sg?n_sxNMp(Lb&!>!dHrwoh7)uBh|!DDP4lSNRm<u3O+VOd-7$3y zj~lb+cUxdyuFUMP+Kv16ZfGO#Fa0nH4Vg(EOi}8As(P?PowCj+Bfj1gL*OqKr{n}9 zkp{#(Z2bZ1o>1vVGz$SJlk1+sxb4Q`D)aI@;KPL`a@C8#350|(eKZTHqX5%n5sBP5 z66&$2G>&<|Rv6PWSvaM8<&Q!wgm=uNUr**EBn<dHSgalN_kv805eNx0!Xp-p%l%C^ zpleIm4GB|5DHg2%VnWfZhA^e5Ej%z*N8195h@A2*2|pguX|WyN9PL*JtVU>h{_=^X z^Wu{1#%Vrj?q_mqS+Z}i-i}fzYG82XiDPqSFc1KI<by}W5@^n{r4F#ihC2o@GA>^U zkEsBc*mSR1ksw-$Vo+eo3KRgSd?9Dpf9C;Pp3VldU|~~1_iBBP_*1l}!~8F9so1g! z(kO@~5sN?8C-P@}{%k%;uU=~8VY?4$wp}}E-s<|rNu&PmX*$goy;eie2&RSrhlq7g zXdq8BhPk=0528DZ;D|p&F@XZhM*k1!o{+KB;*SD#Pre=x6E^Oy=-$rENqwFU7uPd| z%_ULl6HQVwQ=hLZ#U;dQmYeB*u9uVgL@_BTsSg=To%(-B_k6_Yp8gQq%9MIise{RE z2p5rHUFPB5<ke<>?V(D%w$tlIAr;+|YIN|NbtKLwBHwO;)~GpYr|Org{BeK3*CT4y zlk?gn#F1oo{|uUYWXq6+E2G9{e`s@{^yPB_+gmSuwftS>7sG3BO<m<>X+d|)C=EP; z0jl8A*r^@4g$~|+z420~{AGc<#)hWGJEvV(q*-=IsnZ&|n=)_u)b9AWrSd|g0$M2P zx#l-s)b82+X+5K7Hggb7x3Bzq(c){nmfLo!(k9k_<-{@mbY%-w99i@(HV6_cy_(g@ zG|k^RV0Uu#_JwJlX<1tqMdf6kzV~rSh0>Srd^$_VFqBq88&P7V&yp?;BDU6Td~VX( z6%%hgJ>YWqWZu*{U()Xztc?9p&f~GXuRmnUZO8`ExTr16?=C~bH1CdIj2<^NuZe1H zuj&wTG3VE^b;r)Va!!0O=2)vTP8GIZu%FSK?lesrOr~vvu1}trq9?YMw!#iI@4LtW z@wBFe5SYZ`6rGGGaY&>A6<urwgSscgUqrJI5CVBuCXCw$SzNU%c2^dBDPLnx-~>X# zm|m5I)WJ$JjsW>ZNt!+(2nl1l4hyHs`aK!~3*jA8qw!O7=9fqW0e>)ywRA5Rl?WZ+ z(h#^nju8k6Gs0LFjG4;;ANdlQ$PM7ioF~+UDdPbP)^vxse{D5{DdpBazX9$>>QF@F zgcTBg>=4o_72X`4&-?B{DBOQgs|IzDd7b~RyRW&h-f%#dt@X7}`+1yvpLFxkvt|!_ zD#;JU66h@bp%Y<`kNEavZvW;h;V~895?e<;k4qGTLM{-H6FI~FJGv)dYlCSJcNNp2 zxXWyMuJ}{5slx?8VNb=Z7yO(%PiI(k60!JG<y-Scou&+_5Z&bGvmI*!>L2PkW5KKU z-$K?seAB~p@jg{G1dU*L0URRMJ;8xI-54fk+z2sf0eraJ#ua}Q5m+|*e?a$y7LZ!} zQK0Tw+=~StGUCr~{Hg?$9Ehh0#wAZ-|5+c%4cQW2((@E-1@PKDtu3xo3Y$v0Eib(` z$?i#esM{3rG_AP8NW|1lw>78?PzA%|S#z$haP6@EMs8xdUUNBb#X$riQUNWL2o_i0 zMy)KDJy5TG!uR-9WiCy$xUhd!UUHAVBWr0bf4ltlC%OmMsN%@tN3l67v9gM>Re6Iw z)lb}ATkpiCIv4NSq^w-w=<y}%qv8E?$9oPuYEkSo1z&Q3kkU$MGf1qADYez%_T?P? z2iLosI9_+W9n<aMh3n><D-W>J>bkjmVqd!3b);4@H3wvaC~af=TX14#W!OAM-<o}E z@zpiX>%`8k6(43L1fRLTq(xkr49km8mwn7?xTA->PoXng4l<KGF-2R#2W)~JT6Ce4 zKa$Y_WgrksaB!mWW`~Lf#60Z8koZFYr{qPYjF>2cxLC%cOEK~`k-!OrWF$lxG{#^^ zcQ+-uaRi7c$_r6vUOdLr$rYk;eHI9n`1*cmYrwfab)Y))K6_!PuEnBcLn<g#XpqTw zH$uW#ev5@sB|fGLtpp4g62wQsU_XF`Svn#8udRkK8K|KBllptmJwHM21_`sxX?y4- zyg9zOX4XT<?&P7*rQTQS)aBduyt0?mKc3vzGIQFp^QUjv%^n#SJ8U!E`)|noP%QPO zPp+g3dwhR@)(wOT&y{$n0H5es$p;4t;y&o&1hhiVjsK3|A|pl05E!oH>B?b_;DS&8 zc&NKj17)Gn16Wm}NyLIn%)H$AGy6k*E?)W&JLU-*(fV%J@bt1~Iy-M3zfx6ac(59R zMlkFT4iO73&_KQp2-7NVKImSv&JkRQVgd!0js71HTp(jhs^Ic~5nSkmd1;Tu#1={p z#M5}<Vx_R>qa%B|YxA^|xWXuG<XnMGSxg5E`7Nq*&~+~2X%um7&=8ZZk@5^s1()Wc z)$W5xko7CR9(%oumu7wCS*QY9C@C4=)r}c`yz;y%8_RAm*?M{WgrViV)3ma5YrpNI zl|1^_yE)9OH-HasvsxevK?}*^N3oMjtQ_%i_1jL4-FIkufA-qoRiWMRK6TUGmPTFo z3ka{MdivaJ?_#GZ`0_Wbg#3_LsiWCrP@@T*og3EC>epptyT?u6m*15A#cz;P)nl(G zq^BTDIjv-B4#)=4-KSCZaAMjV>scMStZewwGC_Oqb-z-BI=QP{(*4<W<J&V^^EbE; z-_&-hdWDX1npp}qlRPm+DWay<utO_D`Whe^?M(&(vFrsAnLu`^Xh6)vW-x)^0<9i- zQ7I$f$sjJ4&djLRj=ZBF;Ugp?+sU9YZh_pDWE=t3h%Q8iA3=zx2P;J59V`$I`Fj?^ zxqkgoJuifWp}HZ9l1=}f3*@^SAz>{4z``iqZOY_{Opq%Syo7|o{s9ZKbXcljHz3%N z5El|AgC=*iwGLnGqokxFVK#G}V?E)`v025XJVG|wu1l)!i|wA~^li!q?**c}Hv%G) zTz|A{7xCjzm(31GlqLBpmij7BoAn6xc);}eP6!pA<?v7eK1E^j9r$o7BS``(i2Hy` z7j)fFl9F@dzazNFh=?)-hAa7*P~2t8VUFN}PuzH@yHLGkp%E&lh$ayWE(dPfhc4@7 zzxLsGo$@&izUAfbUj8lHrE4W8r&0q|^ltA_L(m8&!@(h9!37$~*8yQ##mxuZZI2wm zg(xOaVA<&Z0l@___HPO<yp0v+TDGO3d#?Z|_4(RLT#De1jwtnsCMlVz&)W)O_McZk zt8^z|oYW_ZNl8h4$XM#s|3gpqWieVKa~cbLxKuBr_d&RbgiEUKjw?^Mi=jK{r@Qv` z5zBU}lsC>Qvta6)1^G|)+b+3lIy*7V>1TPzCtup#>CY5jz=z*&65@z0xBCq;^IdoR z*S-n$(#9J#o!4hYT<Xk4*9RW))$_8rUL*3vvNv?^V30abV1O#fZQbAha6~7<yIN_y zN=;dIv2RONtEw0K3{6!xNjdlFT|foBo%X$s&^?h(WuXdap`^{2Fef~6p@&5uzb#LG ztgmSu7U0mdMevc486Cd0m_5ZTI|*1t=4-hZl11-g=a*R7EpNr*o_+6jaqGSNa74Mj zfmUbT8}}S4nq#Rw^g*8E%N|vVou=T+->?$eh!QI;16`waol+k6zIAHLqQ_HTTHdr6 z>|j!@?Q4_8TUU?X6D{wiV9IUC22q;z=2$o}oeV>Q(T)b)y<Ts$*xK=GPUD@44quzK z>3B|icw5J22J7Fv-L}WeS<YZG?m=dfC#LAzgPSI>LsRP9c!>DAN(_NdS)8JyNy$zV zX+T96o57IQr~&a8(Jag$D7fTZnJ{iwVsW(<RR%~JRPe6|oIpqz)2p$NIvl(VcdwHh zM}Yhy<JG|z5E908GZs$io-<ach47Baa%_ATAz{FO$ztu$zZYb3j6g`35#F<4tgJ*P z$Q5>17aK(hZy;gHxXXgIYq9ebe5tgQr&$eQO1ba0r;+1(MkxnA^0`66k7a(WY6@?T z1qoA_r<&UaAAK>*%g%7{L$|1lEuPk#8DjP7Yb&R$Ui$HRb+_H#*9-7M-sMm%fllpv z=Lqca8l63L5#lT1F%{qvTh3q8E>R2$EgAtiku&VSqkHmnHkbtqn+m$ed^qAy(Vh<T zzqqAh0oDUpRia76;*ZJjZ6VebU#b09?bv-Yd&f#4i(1~g_Ha&m)X8;2z9wYPRYTAS zh8MsgV%-xO$kU8rZZ7PDYyj6~QHUe{5XA%vEF1klpnF2bQj0%-=*hnOjQGPG1pyx} z-%0w8f^>wE0~PIoam6EUKj~^vx@#BhY;l<)?kQ^nUdv{t^x7o5r|(6->ZoYXiVKWo zh0NVVc?PJ0OA|OEyEGCi9il!bW{tACI_5WCm;|MU3TUCE@U%In*?R5%Jz>}C-3+!4 zI{(AE$Jy~-`sZg&oH%9Z)~fHO4Od<qS^Ow=dWn_3chb++byX{E`$fNDmn+k*Pn|Y& zf4{(?HP>u3srF5ML;1<YPE+tD|288?H;PyuAN#d^>mAF&12(o<buVw!OO=e*<xkZe zw(V3v-uknHbBD^ClT6J4t+>c)sq1?<G0#r#=Z^-b>!{Ygwp#z<<?2b*qHUh6a(s3C z?uIT;_s)w--ui0F&N^}ilc`-HGs%M~a#!898+NGixTGnFD+9_xAXeZs<a0<x17aRF zgCX&U0LsaWO0JeDi?~?DQ`Vy^1Wq8tRS;#-823@iGLB#uiyYpM&p@bXBPT{<O%@1s zsWOF1wt=<=oa-hvg4ZJ?4Au8ol%zXuQm6~$yBi^4EWg0QD09~k@Zlo5g53bF%y}V` zFxXFHVYV4Gl?*W{*bOM<B=m}e$-r2($IFZqW`_YE`BsC3*{V5~8xL=ewr+vU+xwoc zcem2(?)bxNX8&PrAB3XKt$SFEUmB@#qWQT*r;g)BRtCI~trN(XL$TENx{}3e*khA= zjUFR}kCphS03YadmCs`ZaUXPX0$L&G#(zg}DeiqT_n5AetxJlHJ$JiGyD#SNf?not zIMejWmv?SXi^tt}csX#AO{E26uWUR~eeEgBiu)>~g5yCxau<uFYQ<i+;7j?hE!AIT zX<OXC1j>1B2HqgQMQ{6ibw@?}BTTyD)<oXG6BwWhnz-$Bz#dezH^O`>Zc9v+7a|qV zLJ8p%?Ts*9io25T%Cr)iTViF=)(ErVuR@xkd(Kn3%?MVTB9=m2=QezJ-KO`uFQmJ< zT52T&yx^wTqdCzKPE4=LmFgqg%%0sgZXf^3HtwxoR?Y?gD!~ss?Q~eWuK!`*PQEh@ zVk$w)B7hqV^+INn2UB#vvH3CBA-5L)Ekp&!Sz@(`@0^G+4EV?mgyfu9a8|{Sm00Uh zRzXC<B#5gs$>J!Mc<3^hyjmmJf1<j5gX|IFYD}^?isc<;9Rm_r2xsZGqZ+3W;tEi* zAd96RB|clFxP8eS^K%3$Sro>_J{=Y-G*@8KmoN${+LDN2I-CVaI*CxhZb0iLbwe1& z*M}qqkLs?h)ga-d+Z*S8fj7s#!EXZ)@*d^0-G8bI`cHeW>dx4>|LTsjKAhA$;LO2} zVF~*e=U!)q03R-flP`y2Nh|7PrB$%UpUVwo+`(rLSnU#*&0N`k4B)S9`A+UJ0U?mH z+P~B3;o}WH>cJ-q`c%usIa+5Aclb!R@LYujH4k8RqDjO@>l^b7Zohu7Q+LIH>fZCW zwBK2I&e*G3WkaKzEot-L>yr-a)etm-VMTC=_-Gv(h)-nr2oax!xB{-r?gP%zI#EoZ zz_QW*14rwSv48VuT}HT*Wl6S;@TFQIPU_=RF1{iHD~3d=Pc%u%Onu(=3-fkZ0U^3k z1(uWgL@_BTsSg=To%(<1k)pedzDHM<NLzX)vmsn$QdX!K%AdA7XVhCWs_dY<_7V-( z6!Sh`M+IyBtZtC(-Ed5^X$wE?%UiuZrq89x!<-(->o*B;sHoStfILz(;*UOR>rsBh z0pFhf*X&b`-`4)tpj?vgaNmb-Ep40phQJ5~UKL&%*SC{V^pP7HAGOod95r_Cn_t?_ zIJR0~_hS~VKfh`+wL|-mZodY|xjY0RQUNWLGzk5Z7G_tQu(?;iv6HlaRTkwpY9H2c z-H>S&0`)8Hs2ovsxu-I%gyxo58Iowz`+1vTrAFx+y5CR>UGUA>qql9B0dB{JmDNh} zIo6TxC8^R>S8Oa75BIOp@Ko;6UDh^+R_6!zou7F3+pF8@e&%JK|4i;xwKv_{Xr)#% z<u;U)qW@+rNP!bm`(3xCsE)Pw_9uJSnO~jT$|_)bqDfBB?W~a34|CK@Z%}z=IBvpk z=zEZv<cTTTYc{w7?2u}W<cEl_AH)!t$l}yQD9`u>OOXatbg}gZbXSQ6#9u_S5D)@+ zS0;?x9avnYOH``X63P(fhJHazKg>ev464;6H;w=cL|>!UWFjPt={YQ%>is<n;T<z7 zC!`ia!hpYw#agKLlWnRL8f0>eKuDMo{8=zI`+F<F?&@MMFJU(%Oc~}ZSQ`{OPr;Y+ ziCY9IPqP}rlyWNN-IC@Dt(4>j2|osh4X*@m4z1UtT@eyBcxy5B*M<bAUTHRZ&l*o$ zZW=yzomt2j<Mo64-%kuYrlTZ3O2Ir&z8s>TpEe}J9#?-<%bI!XG*1bSsQ{PQbdN7c z;Gje?D70t_W!Qg5_vCABFb(3ag03{@h(A0{9WDS0dny)SA)X?dL@fRo)Y-lLbS=m6 zGb?TmUcIW<_elr#w{Nb~;A9V-;ABU%wu2giMlgU14iW2~&_KR!43jf%gy`Ok%n^Tx zVgd!0js73dJt1SM#UBMeQpDTjVa8_LE4p7<;G{lZi;D{y++7l-KG7s4Gxd4fQd~pi z6p*tqgyk~z5GVDCVp394A2OCY_5YCWnaSv$jj2{hDs?cK4dEgZF3gfn^cdIu^h_mQ zJIN|?-s02mZd#aS+*xYXMSI9=?fTQlWSxty`m1!p%9?F{<J~rp-=Yl_bxNUlw<}#v zEx)$N(Z1u|aeIAgu3hlyamKrbTT<V-g=++E%~qGwc>?BA1(zmab9#AHue_gW!|HvE zVy2uPIa%|0i;h#<Ul{Q7{HAt#Zr4+))t*at8;dkG2rN_qEtK?JbIS*2o^3s(uivF= z;prpn)E>ufef?$ky^IMS!D|O?wQWQ9ljM|ELTe<kGS%km$EzXF$BUZ19ckZX;*ijo z-JgTHj5*cZHLs~_qD|w9&`dHwNNFXMkP<5$CPnPB?6cZswEych<Fy*@OMdcVVO-^! zS9c#D6Z&~!>r}cIdq}Nh`Z~x4kyE9;2jIl)wN7m}${#V!*{$sT&uf~MN^-Eg8~$Wa z>+z9MV<$Ih(llwsgxE)I<qRg%wn1i+C#EQE`Z!P6A)BV<$|1hq6hmMg7N_V+Z%N!m z8c@;2)*qnm3Go-vEChr=u6qjO_GA`U&8RX!(&mDHMc@QN!k9jeg;cs1W04z2fUBZ+ zJxsF^62|mjES%Ck+pACu;T?0cW598QgaN-7i?vF8tWa?n!8|=B$O!vbFjkgAMUX4( zt}b>*NO%JYQ-&i8)^ty(C^VtS5gQ?4N{P)mHFDfix{8O~4HAB|=sa`;ygAH<y=uwa zx!ZBZ__B-dSD(1j*T3`G-7$^aHYRWJx$F4!Ki{;Vfb8YUdeT#|1e)>X!eiLuJA+Fz z$25E;Jf;F%V$-!Tl9ek_3|j17WWFRICvt}UcXZF<p6t8Bbij~`AbVybDZUDpL;q>b z3HEbF<vZ2dv8UbX8QS0KF8aCPTFdX<TD)_f-AXG06>a-)i6HK}%%L?GXbVWLU9_RY z<S*`}e&c;Ikl!MoRX1}`(OwNxx42C*l+$^J+aLo}!4Wm1e{MuY`!vkT;ueX4THwPy z&XcAFfrTodg%b8H+NWXC6?aI0iOko(VI?%V#LA*=8s=2rLb7TN&Gb7~Lir%EQiw6X zwY@aiM(@k!s&ZP%054>NXziGtGyjjhvyP4`Y1(*aLLfLHxQ5`a!QC~udx8XacXwah z-4<tYcY^EUu8TVa`zmuYwwbw4*Cf5{clMn>-gDkVcJ8mMyQ{kDsoR4W=E(S+?u(@U z7hfLDy)@gLMUy_R3tYIWN72EB_bsX2=3UEijc%8WTq~NBm=wSfru@P*yxSXpEFRGP z8wcMC>&lm{3)BivVYpQt4M;vFS{J`;eWg}+Qq?XZ<IRP2&CAx0YUQRDtR-PS0m1)D z!j~CprmIHUv~|79){knXCWSwAh1UT3i?6MJ+!4aM7-s8awK9~#mL>!!zb}QbE|%GP zVJ&6gy|EsyYlYT2_?UgQ2%XrN-1K&%gRBO=$u{tX^DxkSS%%@*jX#(u2Hj1=`vF(^ zVaUX!z&ClWU>Ck{`f+MS%XV_Z>K>Q!`HdW(uFv@$oyHxg{AR?)vAf5#8@4ogjJZ8- zt8$Ow8?^Goj^7uLIC;gs>4ea95PP9OlOR-8`XmB^d{q1IWO|y^VlVV)DhE%5v6A_X zLX*9q8=~<Tof^s`rM^T2f0ZGExWA*{nHB55r9K*A{HnYU??oLyBGKnccQZ|C_vlpj zjE^GEc7uOGaT|S!!PMb`{!mkg>;*(kmx;`B#8xuDlueLfjn@AMI$RJeTjmeP4i}s9 zpKX*hrV+fem(|kO6gPW^2(9iYwe+RF<lnjU?WSK^+^!WI5WSsU`cgLew=8`G%U=5b zP>0J^s_!LZ&5)&tLn|BkMdA1`)OBmA1ViKTew%^!>^Se<W-wgyUUQ?}gs6R<Za6aj zd)JJGkF6_o-gkey-k*I-@=nK=XUhbRe50=B5D9O&1jhUlEBV?xZVi4W?&990U7JEV z5{@W0{m|10dw+Mi!PB-_0IqOq{9<LxApV>?y3weMrOvOqw7>As;f7mro@U9KDO%E_ z?s1<DO_iWS?y62M4G9yuKtgkZQ19HIg-50M-fDBcsBa#wsQzVLm70s(4b2*4%<`d^ z*VBNyyv&|uN2B-FHG-K^T!{NEbt(58M_2Wj9jAH5S)VfBE|snB_95BcuUnP7;<Uz@ zbiXF}A01X9(Kch)()F$1f%!*nMmgAHNRgrScdomVs@w5MZ@*T~a=-bN4tYI3MRAgn zj@yXRF!Fx+2Y6wQ&p+V07_s_H)Ed=2IwuPXFg)(@?ol_-PAQA$px$L4uayh>1T=EC z5r<MGgeh-KL%J4EAK?M@2^_Ig*vkhs7Z}Irr;0ddcY`~MJjN9aJ6zDwP3l`D0)l*2 z=Gbq08~v)nOJmRq5yG)gzi)J@9ays|U$Kzzs|N2ly&DPP*ryLNy3_c-ju7vdHEW7~ z6T-2>Z)5beJhvaNMwa&xLO6~HE=Fg}JAQ@pFwiQnL^sDFBgp8ic>+Z^4+HI3%P<^= zl=L5(EZzUc7g@w6O3M#JCO+P%`(z>B9PNIKU08_MZ&#J5HhKTi(*uw1>u`72-0p*V zlxuaedx=~vlBdbBHKiZ##RB<pgl_<yP<3i8JmRQJdZZG<-Vt641=<n2xpOo3uZo~( z2;mxG|2uV0d#Q~U2DPjLnceniZdLrTlhkPkfRLQZcx*y73aKwK6@O;#JzXVYm)0jP zr(5Ob_E+DXgZEC|mVMKN7)P?~x%sGYoxE-W{RN#N;GdZ4p6CzlWn)@!))FCJLD{PA zDP<F6Sflm-fx0JxWfy<KvF>R%$<rdXF}>;z*S>XDYPIz3rMTLGM$0axmcG=N{5zMv z-LzCYLo^Ex&b;D|)zX);$-iakBUtv*|A*?HSE%mk<YhX+%MtlS;rL*-wtUKE51%;O zpCt3_RksGmED%3;t5^d&bvsbiC(eNHs~eszyLH5tIpq`0pB#BlYSxywDVL#f8}{dj zQ&BX^)AIPx63f4Tz7})P!TtlYG~GM&!M^!fc6?5?q@CA^lXn`Z18{{?b96<P^Wtc) zquCY)-mRZ(bB|?)XZ7mm8T`KW_3L@7y$F~QFsby5@6@aVKGt55Wg-_yXiip26<*t8 z+U5iSJ!_0!_h*?7>t-ZtG3-v4;-lYQ=v^|m+pPDzx3Za(VEmTfBZ?E-w{rIl?`BuZ ze=gRi<LAom=^bTx)W!oVUfF%Rf8eQfdz~%uOPo^}wv5`bS@+4E4~@9%JLSQbr{BjH zGn9FA<IKf)L1JI&ci#`s_eSHj$@?s}q`VGpiqn_lt-uR&V1pIEi8_Y#Kc1agk#EWD ziLN`_?fbLe?<FquF~rZZI>pLpsavFf+uljc2pCh|n1<sn`6uH6?aL7>s<4-vYA&$2 z(NFO@M9g+KxTDBpJb%EtCpx-GeT#%smals{_S-H-zgmj50^}2Wi9rbA*rz8px>SEf za1y@2kUL7(kwQ53>Cuetl=o_^y!j*u@s4R#C)zS096S6OMqkT&Ge2C1AnzlDa2yeK z7@aY%<071gf!3)x1`Ed_W2Dhp^V;^qc^D}4Scc&^qzoO?W76%YJatlj7&7rO*4XhW z@#Ywq?&c;THqD5Wa(&d;;+20ZzlWaP=erJj)gnfaf0eg~(x=*U{{9(1G_y8wTz(wk z8$dgy9assExLYd!DfDA1c8>5`DA11Byfnr<;(t{HMUy5Goa7_yf2ZzgFSXIapq5qe z&JtF|A3I5%b^r*;sf@=aRHKmk5>xT#Nu4G`GI_;3?3%65&9&+0c3qKgXNvb13r<+} zU|PeTW9of#6X-7}Lc>2X)jiQ4+RMhY;H)J=Ja1}M{E@N=GOW@1|3KXn!Lo}#;aK<7 zd#UwLD*o_(^vIld1TROlIE0-fSUd8B<ezzvyR(T=yl2}<ZMAbsNK)C_$!E*#p5qxd z-Vk<@R_%oGP7B>U)!s6A2>@3(HRqE0j1dmc4%@3mdevd!ol5FV<N^uJC$?x+Vn25; zwc!20N`r<LKc3y|W|TSeFGTZbRkwNOd6AnXjGICwCHihN<*=GZFDDp2`Ky1X^(W`` zd9|@~ZMR0_{pW5Uw7=oR<<rt$;Jrx2nr((HBW8SZ_EBoX-qp*C?D)Lnbk<nIIxdbh zJXKJd(hZv&Uo&qPtu64eU+$wb2XY36vK?+yj~M#1J*^725tYtA>XfZQ-OK|%W*&S0 z?QZvn1FH7)9PvG0!P$#zZl9cRoF9O+l_@R8q_Zn}zPvFFz0XB#hX)iTXTBK1rVeQ1 z0<{vHmvaMhaYvEI7y(i7N5YlMA1ZB%i8dZrE93Frn>L@)p@Ad@A%sl{(Z(BViBv}T z80+;f4=3TX4R2ySrfxYqnOulBj&F2?yccM~l@PD>8@V4)6PIIGUD)U)YyLVT%kOTw zNXDTre_(W@O@HMu(6h~PNjP@)LyT_L=pl5!PT7*@%!cD&5NFEa5?>FfnhlxAb|!lb zSG+kcM%p}Fh(c+eEKAsC__3N#mghOxG5dp#H&5@bRL*@~%e?z1bf2{#9ZztR-{0XI z`r_@4dIyg<$ZgOTT3MQ|WG578iViPDG><r(VxR8Hr+<_PEAp}Nzf*9ru0-0zuaJX0 zPrkD%xERGhJCWN|0yVlbR2Pu?5>vrtndj5}S+e}K;P=u)lhpt8TjCMd4*3^KvNl=D zD?M7Y3tTqGO`yM^=nwzIRB%CmXeR;EqH0L)!Ru+TD!5451R2(7{ePg~f?)rx1((ZI za4CUYj^m;SS{x#D-l?5cOer6)H{Fsr(Y(TEht4Lo1BNM&>*eIQWp>Z2nYr(Y(0QVE zG#D2Wb91Q!aE0dCIJ459!covaeXDKDK~I|2FRqTz1rnN%j2*?&jPrfp9G{ol=j!{! z+v04CaX3-tfUg%mJbt$}@|&z9ctW3L5lKv>(SPU~!Av=S_u#x~68Q{@THYgKpWn~6 zym@!_+3SHV<L0f^qs8o2QSx`u{hHu^v_97|DbZ#yQ$`-}rdNT0Z72PzeLwcCvRm2R znIrntnSTG=&E1|8{;IZgu(NlP)0qP?7&;H0a|SQW+KndE6+zi%@2#_`V9L^SMt45^ zcE`d2j}~S->76pF&-n;z2bV5g*4;^C(y0?+$}dcV+fSFPctDLBwy7$tOK-L=P^)@5 z*)itgjv|k71xplMkXhspmDcq;TaT+%&UjZ7n$Op8#${rHu&&zKdSfjEQdJF-@HK`= z9#u(451oRUyzv{OBjmmLEpI*vLcG?8r|o}B2*<8^pV3RwTT<X-?Fz$n2=cp|ekIbO zFP~;~qY6u3Xg4zAl5p(o=Na8B?=sV0HXDwE!My#^$GwVK4lF6#_$ogPnaGx^{NAT{ za|EqzNH29H7}%!P!Kp#D-Q&l7S+@OavD+tqnTc<s9j%yYa-7H|-nH$oXdK}i`qH$% zO22i8mTBpF6>icmXd0y)d!axRQF1yr;&6(6=;0D!MLstEcM2|gGXEvYI(g31avY}V znD(&awhT+BjE=m0OPuL`t-sD4^yqDY?+X%kOmMfwpr6Uph+s+1UT`;+H+kJPyk}b~ zr?z3+l)vOh>&<Z*fW~dup6uLI5jsE8g03kwp*Rmd*1^{@c>3=UfGhlq$s1Cy7NK(^ zEuNav5>(W&_2eu<7f5K%ltSl5TDUZ2C4GPu!$gU`+e{fcHPWJC*^n^P6n&HP%Z*`6 zN3pJO;n#irT%Yyh-O6E^adNz9O&Ss&Ni+*D%yF;Z{}hHdJ@%Fu7SQ-i>m>7YPTEl3 zHB*rarw5hro_FnH!I4q?8r5>rm=t;uro1r?agzBQ!ULMJ?)U`}EJT^AP4*NXe<ued z;e_R5VzA0&-&bn29#0me{J~CQ5JFhjnQZ;2R^ln62u{M=8oHMqOmz_J8k4Ob)yg~d zejOoRrL&Txc`t-@0m|0NYNa3ESwVgUNElguUkYJeptAMC+F_q3g@p4k&?+!T6cIWl zF}dj(Mh8i^3xkjK0V14-f&8dt7>?a|vm-}y4eO`yJ{bgQSdg<_PP{qNO-fGXsANss z7hZFC{*8n~2FBb~F3+rY&A+_pcfXY1nq3~(0*k!=i`O?QKONy4v`$xwML)QJ409{i z!B0YH+Jjc@G98<(%l-+#^0Pg8$&XkfAjn6x|7Ci=%{Y<ZB4v7MSkq-W+|hL0srGxh zTbF{imU*%MaE7<v55IkNrPQg~u?MA|^tR;bv)k8-VEM;hST-pyB@{k8Sk$o>a7}s& z?{a+0xG5^3aT_8(deKV+>oxYmrAaB_-5|mOaD|9(Iy4<5f~6XJk<e83;&olH2wfnd zIaF9`Z?=KXlnI1ExkD34YaD#cl%dlREsptw1c)%GpqLW<g_+V(lxp~wf8NO#_I}~L zTWXnca=eJakhSVQH@q-M4FCB?{2n_}>Q}FxzpS$KSm5t&om1pL`?Y<vGUu0;DVt#J z$@Mt{+ksiJ4KWr>3YrL0eqkE+U0&7<4`_ar?QH}QpQkyyIwYL1d`tw|^StIPtFr<- znicwu5PijY9!)LyIDPCzaE1Z3lF)D71*;sUx{f{hK;aL|B0{`M--y%uga{Tm>^oVl z+!7O**mmE^uK<adD!(s<ur3POdSUIDp6XW)13la9t3~K!!sMne7#$?<jj&%f8;;%h zk=^w&WqidufXWX;CMNar9#IN!jsl6^Oc7$$iaba2fATrJp!fWFtx{*~Tff=Ok|jpJ znOEZen2Gt@PkyW_?+M?a74TsVDTByiY%BkfsyYtakV1~N(a~DAsb0&^T)0NH|7Ci? zncfA;^mu(8mQxc=$MtA+tBT5{9_D<MXL4Ha6NL<^cDHkj;@5IywNaDy7rI|aIA{bj zXBWJ#BHpug^?C|t9;{_*c{W8QG;YJ3BUSH<V2wm8zL|0oTXiA~FLNRQSBN;;CE^GX zERWcWgr<U3MRg`}frRFWXQ`Um20BwF;OwzqVj>xtUg&g0i(@-N0tD}n#9D3)TRMtT zb+6Q1Q0M&7pZT1eaf+&FO&U7yx|tU*%)>|C4HJJXNq26|#a$QtvPHVNs@wA96WbQ} z@n)Fo=zM{9n*{|XUCp})*J4Zxng~<gn1;8lzkI|4+HvX2G!d#7*6aeczM`m3+Fim4 z%V&BHdYjBg|As6`R$xc7LhXtADsMAhdx$)ogqJYHKUjO65W)I{sjg$M@Xu?14p&0F zO5<kxu~3L$X~Mpf)yggOtDNBDbUKYzfc(A`!n!DA>xH#rdNeSIFeI#a80gvNxF<p< z6DBu3*ytb?wmsuvpueyT!?7Fh88Km+RZ;pPi#VAt$i$?VZI|T6o1<)rilc-`Il2DP zX16BZsK57Jv9kA1ZX9ALle+94&nRUge@+nZ>*_J8l;ZFWTJ4kltbj-SI%@tOG%bH` zb2Wzot?4GWqL~ZVsP^B<^nm8vkU|;wSbJ})*JT~GR+(}K<1x7z_-?5$F}*IECvI+^ zQxA8pjNIa2r2XfkZaaUrNr|t6794K=VDYf|?m_L{1o{gaEc_GG>$2z%H5EiFubHwA zYyF`*7`kmdv3gxr$|lILM(h6rugfCXf9vbA=c&ly$C@Ea!a%k~i$fT-Cws??kZNFA zh0nGsG}@jGLXszE?`4zOJ!{XkUoGq;XIfOBtA)!j$l1v7u5fBjR`<Il9LDQ2jlVAc zaLLcvmnS7m<N^uJr=%XG|C}>5LWT7$UeDUy`*4#;`&$)0+-lLXLLc33m#XmO_Qfhr zE+Q#P^xbC4%$uJU7+0q4z08wFlsfNnZtLl*ryfs;(6eU5+&fM^&sHKbudT_l&7>&N zdN5ONuDarncNrrT$?NlZ?wi8B&jbb*z0f9lw6)%6JCuI&s981M{Y(~0I#418!}^T% zTjGV8bJ+3L!rezK_xw;R-`;2g7hG<9EW@owxieh6+B*H7#G5)L%GqVR(XZ=Hjdi%T zVA6RJVahK|L!kfc3wS_BN_V^_jJl1f-epG+;T@3819EXkk;iB$iPvS3S>#J4Mrp^c z$JNSJs@?~aiATbwRA%Fiwd95O<EX4c1hTMU;^So`A=$~ELcH-Jqa*a!UG~BMXub5q zl@PD>{JC7Hbnn<zPceGQV!v((^1GYbHXZu%Sw=VN^DBpeo^AH{!m+c@YIL)0&{wHj zP@LIt91Lc-T;HCsVNFHDkcn*Ve|YV{n`83!)YKoitM#^>>o?Xm%xII{H)lZp0&n*Y zO!7Wg;?mJ`u4(w*{oFyG?kB&$!#DIje!pQT9&z1u`{?JhL-Z4^FlR@(h~nJLg;VT9 z50?ll^0D#1Q*hCHUG^MhonFZ9HeSbk;0Z2*G;Mw%bC1j^52tw-G4PK^gI}k7)Hl`1 zfSHLWCBL3GXufv_VbsCw1b0(qG7OhA!Dm|)J#E6aDSt`n<hUsfK+iTbOT4(M2%R5k zLD!U;v{DD)3K4^H2elEQb0aODn$nU+>IhvRp*e1b&W*HiY065Ps-#5UZKe#J8fnq6 za7dUT_X|GOr$x&)lUQyHTRMt$Cnk?t<C|;n4qjW7g_0aE+!TR}@-D^;Gilcwg~ap1 zksoha*Zi;1$ImwFm%HkYY5m^LsIho@`rd7aZH&|FUB4K>l(t823nqnLgeh-K!)oss zh46rSrmy8Cj2co%waK11liA4uNjPEom}nG;?D|Tr)>DoJDSsf67=#ekbtYRss+D+( zDuR>Pe})8&&sG+~y2fPdN44^fs?G!nLcB`j<+w%XUF!mrt&`PCKM8-Gk>&TL5Y`1M zTQ95~_B;K`VW4N5BZ>%}l9=4|P@{wNLtkZca+BYW5(|nm8;;$0Prp~4KMdwwP$xeO znV9tTUa7fwbFBW@pSlbuo_zRt{rO8R-=v%6nbbFLgW12;JU!!iyLpi-uiic2*w_SF z6ir9?2CXqAC(~7lC<>l=UZ18#(;l>Hm+9DSUH0cmit;lj5fJ2~+W#`W;3n#`l<7Gu ze9&~n%aFUyxjXx^&g;LS#&w^#{n8w+y=`*kA+N{x9yR@3#EK<Eu>4~$ESr=UXRpMS zd3La<V=v&E^c0@Ex11Kq52A4!Dom|WSp@4f_QIt}DT&SU3@iXwi1_5$?cO3-s<9Ud zO=T}$U}q7!KtglGv((;f1Dz=oh@{Srw9dfCOc^>I(c)N{kO0AJp;To{M^P%n>0QZY zcUfNC*^Gl6FWeNj4bj`;g?aIPrG_HeqK?hF&M#eJ<-8Ro-i}Oo?r4Dm5x=euxOTGn z*&!pEc}M5v92R3z&_tN>3)3*=W7P$CK$&Z<EG&TdJd0Q4w+u+a5z5Czpgm_*)$J%T z2)Z0qUvZuh2W(W^<X`^OA>;0=9-FkC+Ve@}Fx7SJ$p@<5HkKg7t8~TK-2;RO7C7uX zS*_fX^w$|#eqRb<T@<qQ!rCz%yLIcTTez+j{AhDT5uuX_lbbGNbdYubf6RtsH=ejy zx7dxxsA@QniAjH~cq!q+-{p$7REVdkdUq@lHT#!(=Qn>%UwF^bbbmH48^33PRJAu9 z`Vp`8=6k#g8s%42_y(<v^-H$K?jS<{)AfaL*oG8xti_AjxqT!N5agrU|1!PcOz#Y3 zdcG`wVROhxRM@-4vYm5R9c%8@KC@SX<JVrbIGjB2#K=Jtj%8i`?BY)0pb^ZRT{Kqs zY+b#c!dVI@pG|=kjoT3IQEe9ytdVHNH&aext4=uk&YuK;D?}Xlx|Xj9mPhPGLQ}zt zSF^D!4GBUQNNA3Dma3U;pfhCxVdx}96Nz1!nKE=bqQ$Y;ApyeKZ5F<^bQGn^_sDlP z&5+iIoPG6}951q^VZr(w@$tgE?05Q{2x`Bsv2Ul->tpZjUa!#p&&hnARP)bqbySV| z^Vgkzk|o)(FkFF)Fy$Afp|RKI19(8k#yqbeLiNI$U7*%i)Wk_=L<<xRNIoVy=xs6| z{dvDjE`OAf7=#c&<?YE+qvhcw_Mf56u-c30XTwRKFx7SJ75;0p<~Upl@hZ(eD)lrW zf~5)jPF5?o<o$I+kl&X=SQmwCy|8vnSNNVO+Kr5eB0?t<CO6&J=pYr|sf>q#{=ys> zg=06KXMOE8kEilV?(+LWCMNkBI`_kyBj@1mGlls1VA_WC4YK<U%y>MyTdbKMM#UK$ zP-Rfkv#+8ykNy1MhbgKy2W5K5*z%jh5YY7JeLUj)757gTB2=5JITUD3H|Z6*1Brkj zAJzUlnI6!bGw{T7tJh^6wN{yO2cuJK1{Q<VmzZ9c{V=3qybj*${TKZ?b@ZcWgXg%N z%Jp(<O7Gq|zwDenzD<-%ZUX%U#clW}rq^ZBA8IOyR$en@9oG6oaxiq;Dznw=vQjod zhBaFMA9!6B!Twucmpx5I4recZBHN<HA&lCSy<<j5HIVm?gC&cWdA3!d(e`W*l03y{ ztxU_aWp>YyPF^{Mo#af5>X)@}$&)u&0IqOqMwH&^EgZ({*#@sDw=x_EgHVi?h6^M# zpOW@%NM3sM#RU)DdY_m*`DN41u@8LQy(-oG=lK#>Y`e>?_RlbsVlX9IBxcGS@g95& zSk}B<{?$824vZZ=*85%CqWdQ+(e7(QpGd35Rv6P0eUnX>8Edu~wk&$=)62tw#fB9- zHhIL;zYY{l6KRi6*1sCho|LwZf2GqyDp3C=_*fUHEtGWTK(;hA>oIFTUYOp|4|f(@ zeOsLmNV%@T)QWx&zpc+y@Z8<mB2}@$9a{d_U$)ufDuV(5q-|8OVA6RJVaglR5dD3+ z2Y5h<>t&rRjJl1f-epG+>EYafT-;IQF-Aa%*JY7e<PVibX~(X|)yh@HSwof2X=Gx8 zuql<<cw;SjQJDTB3mbmK@3c_}JK0l+H@;$Ygc%i?Pa>@0wI1(dhChUG?5h2ZUXs^9 zC%*zDh9JMYg>dZ4R~p@@D)~}s7-$uk<C1Xf>}wd^EYIctve|GP49>Lp+NjM3RWG{B zM7G+APcFinWAoUrsf0LNpnvx<f!mj^U)#9Kl=bO)EvtBCeexc)l4kI^o4RtojTsb{ zN{|PV-yDW}UpG*32z_Ds_A5RK5u%@Hg*iLQg_F19hg0lB8%ZLp$j8S2PQgX*b=gyt zb$TGXJ2(#0bkzRTX7A)w0k4v$TstUvlFKK*#vAanNt`_aC(d1JkTL$(dcvrK*$M8Z z$|SGYV>vy_Jlm@1X%n_h`3o;-Se{Km0gc;mdT+zqB6NPF1zl5WQp!ogO8~e+#3v67 zZX$GUq{UNHT0$>Sfsg$hM1s%-5}M;?=-fyPm!_;FCt!4xf=E%K?>1A0PK~r^xHlxs z^hV$0V4F!%q6KNDbQJ5-cPw!|OXdSlyq%;Z$BP&YS%Th2!wWOn;-$02iVDTI1~gwd ztI%YxYM<sm%8+G!i`w;fO`6*5yGPwsxvs}*?<6K=od{EYVH%G0*;Nt`D9@`^YlKll z3aK{P6KCQ%IUor~C?6Az0+C%`snvQqvLNNprxJspU;MDDGuir4t;EBtkjcYI>_0>7 zuO*%cVO?Xg^`lyOCzm4gNf6>y`h3ZVYC>2SplqG2R{BZ(>xLk|FNIBk%GL{Ohy4`4 zav12@W?wBrrz9pfeb4A1dA)hzy5u>t;n<Bg+Bv|bk0-5P@UcE+$PYs%CLIiTdIE2b z5A)+t&)Mr+Q!f;&>tFil!d7!C?=iU6m{2W4v1V~%bl$nK@s3gPT~dNk*q%e=#}U3k zYs$i)w0Oj`w@0Cl2Tgm>s$HgIvvt{@cUq7iu|z<Sk81zR^n#nHPg17G>prt&JTx8m zlVy+Bw2;r?{k<disyJ=6=$~(Q<4td3OiVeoW5nCnQhXP|@{hf+Y*Jo$cSZ1?9W3hD z3%Djdr3PzbTAodg360yZD`;;q5v<qP3zw!q)J+|LD@1hr-ld`lmTK%pLQ~m`_X--z zL@tof9Puo*H`_pG$^>X3f{%5iU{Zo_7G}!O>4+A`R)z$K&gh#QXL@M4F>L85N?qJt zbJU^T<;Nv(l9C)RqBPV_v~D|Im_Ivj$|bs%u2^~SxV;@-JZYTp`LXs#Z@iD3%&$!v zuNF<0tgf>!Zf4%$z%u0&G!dq}F%ABCM=Zw!%F%OeWC6tImGo{B_}E{=5>8k?CIaob zMj3$U>`_Ky5JCXO`Al&|a5C=xSm_=!sCAcA4pUvno_xS7PspE(Bna^;{q+4d{mN&s zz+vCXYUP$<zs|_=`%(z&qL8f@){g1CcelcICUCGaM-&k{nJ~HOibe;?d&fSUhk^X4 zWf+d#`12<9ho^XzL(!s=iAgWxWeC8V<M6biS1Hpw>JfWJl{7V)Upty7UzeCUMpVhv zW%H8)@5eUGQ}Nu%!y6PTgUHzOo5K*8aMmY0;$j(=B^1J88&b%zmiKEK@(WNRAjn6x z|4ya{l<V}odylP}s2#O=nQ{lCQ)>pcvDBBCny7c3`8m<Q;DF{^>o+gy8EHY{YYQ^P z9-IDKgJNAKx9M@OcXBs@{(_<+{1a0XHTpwM1<}fDrmVwSf5;AoZhJ7YYND312{NqF z`u{)^HG=(>P1H6eH`^#_Oe1*7zSYv#lqGwI2(8v9we+RF<lnjU?WSK^+&&&05P8*R ztEDexlYh(7N3iUrpWQo?cb8u6{5rJt&hK5xw+8*+X3hOuwQJh8i+BF)*@FLH7yr(! zI(BW<p*{UYF|YPbySD1y+^cJcHqG06wdl~<t84QvU0bzp>D^DSljB6#IysPE6pjx= zgSI_+@jXL6mSeQ!>9nihvpX$pedF<m-evqFrKpg1Xyuf?FJr_R73JraGq0Y#TNq_Y zyBJPBTPAR%X*oNW7!WDw%9A?R13R@naUkoUn{DQ7pEEPnmCV^b-G4e{)9Nc_d8Z@G z;3WWDp?PXNs9jmS?^bo+=kI3?RV#jLej)CX#1YFS-#Rl-<;cm?f3EI1-93e~O+FHY zE|AciAZ$$WZQ9P5>Gq}kykYb1H{FlqE#A6q-TrqzM#?sJPrq(aBc)O|kw)*W`}JnZ z?Tw??^^CWF;(*9yIxN}v{z<VWnG!DDJ$Z)zf&#nGOgu8*Q}=6v|IvO0Cwy($s#{R@ zt|Rj9Ui4SJ!3R42JpQq6zw?=!RvtUM^W9mA7tUT4hWZ}bkcQ^@(vHIm^V<F6Cq&TR zTvrB_jMP1Aj!ALL{V}Tc=r<cq9Q(d%W9$m43bpXa(Wk1D#*BddhWx@b9KAEB4IWUQ z^sfHGUOuR~Ku@EeD(&2W4DKlM7*{ZQf506b-K4%n!YRvVWsd!JeWPFHU6a8|Ezv@z zi|-uz^fE@5N|iG3vEJ+Qa1y@2(0jqe+|;G)(5Fu_y3+=L&(<4-D<R%7WiG#<i*Fn| z{E<dqOM4l7lo?sxM+o6KB8)LQ<HTSP3TJ{5-Gt+i;cax*_`CiUv*9?TjJ`ExQr70Y z7h2`_1vx(CRt)~pPd&q%Bhv4`Q#m1)+k=i%hpn$P#;xW}_m3OLUCHjdYN&7Sy7e#j z$yX?Hg<N$Mt*Y=1ped5xe~w37;qdbkLfAXPYoS0pVmlcS{#6kaO<K4{*#A!5Q!fJ! zqzst%>X9W8qv`0~`N7RP_rGS2RLkeaxYX-+empq5V#cvU7N<-wEk&*LEn11tX`gmP zFlAlNzC<qb?9d6F7W_@Ql(X449YfH#4L3_(E-OOkYFg+vrAa(x$6|O109T0EX49%i zB6OanMP*Zp<b$@P<E#yt$ORIbbIZ_qnih0T84^!9X4w(Pbu(q?G);@Ct3ra6vyEgD zv(2!jqlg*r$C}a8+xBn8yYt&(ON#Jl#tn0RoZW&K=JwSk--^k_lNRuf7U%BQ^~WCi zZ}rd6q3gUn%RJJ1j_n$2_`EfXR#$RzVNw7`nDWLn%sIJtI3Cc<?<F4y>&lm{3)Biv zyqmTyc9(F3@>!>K@ypg%YIP^xMw34tN(@2>>zbFXAJxiDy!|B)C$awwGY?n4B!qRn z%hr!-rKYs3MH{Y!c$MaH%NtP$>tdL#lhw*l3g2Z2zkMl$b+OFW3u`HZsys(xtuP{r z2%XrN+_bOJL3a6d3rgNg3gOs|r>>NFRo0sW6b(ZrCROf`|2y6sk-r4d@3f9dH9Yy4 z_3nq3rc7RaYraWuT5fC-uz$zxNC#qHYxp6RU(fQ2#u2_jD|yqpf8Y_Pue+9BzSMLO zd!ay+Akrxsu|z<Sk81zR^n%}II8K?KvkmJs9Y;RaS&}++rlakj_52WJZ_=ze>Na#; zko314zg>L)Hg}ow;{_>E_M);`1S-l}DmDik_-xXb?8RHNv=fF`veB~*-QG2yAxJv1 z7cI@AjhB;yr+9(@T;X3tJ@ezbAl1lTAT-y`oV`X*g3tvLnsX>~0nawhnG*qCmCLe- zq$trGnJGhMBU%`XV~P)%(Kk8Hn$c`CZ0R6K)tNT%fa_li*9`M>l9C)RqBKPMv(`Yo zFh`bbQ%?A;yclia)Gv)LzUf_i)4u0!(+|9uR(*Ts^e<*EYLorRv=UBUEhZ>vB20N> z8nz$lH31K(@$r)pguV_wrj@gHmvF-JF;QOz_YO+IS{(AJio_s<&=<c)-^!*4PQptV zf(~XIA_Pe#rm~J*4MNpPP=XMz((L7GjTeGc5(iFJtF|=ybw-xomqJ+8g#PA*wNrZG zUpWl)Y;!~rp>hecoBn2Wkp0kC*@P7N{V1`ZIJ4o{jZYr&d|Hk!O%)A8CMI=F+IAJ* z93xs>4elRU;C)LRO`Yalk$E?6Wu9>LV#RA~R?V5vBSlO10)bP4Iz&}8j_?gyd1rKu zf=9f&;?PV&IO>Qp9cy`7h5Q1P2ng~~?SGkGaHe-GY?<EmnQa1RoiFs-fA-?CFJ7hp zvTxPSLgU|_^tsw;jPJ~7F|!H#J!zKgB7n6yEQfSj3h>!_qJMBW<CT&u&n7>Jo^6;k zZ*v(z5{XuOGv_3>;zV&L2QLBO3K8Q@|FBk&I$}2xn(9?W)e*WtLUY737tQ__=uDYF zewCEyyUmoL(-AF>)ei{}yf-CT%Z*`6M^UQyrTy1EpSB3Th6Q}Ao0BY*<aptxD7UlS zd%Q6JSTXRX$S%@fG?Wi|R3%ES$<bnt={kL7t^GHjR+!#??ZIfJ7QJYg5<uFvf>|&r zXd+B`V;V;7h!GbLsCHGq#p3U6xfU0wH7D^DDa(K)9HD$nwBI0QIr`IkjNoIvI9P!l z&598EB5&$S3iBugXQ=sc^hdfuE$dBlUB_PCU*W+V5#m*PbHg=y>z0%W2ToQix6pYP ze4JYW5+O}~UkYJe6teZg+A-Y?48qoZ$S-86VW4N5BZ>%}OqksCQlo=Zl_E(E11&kr zFdVz_(zA|kY&d}D%;jf8CMLO`jWro>j*r6=trlWo@p3x@Ugt@^dibl^hBa|xZZuqs zI^w~PI=#h^L+56<Y!VaAtdog%_y(<w7h=T0BObTBE?rjr_g+~`DA0OtycLZ&T%+25 zC)3jtoP*suoGqILYW3=_-M%WT%z@@hh-TpHrM|@U>h6h#qpBV`9&6l@#H0IePgMS9 z*(H5jx}I&3!~O2Nf$#d|T<<2(Uyu`ne`0!T9sOaj2BH<$OgV?G`oQbRvU+t_$|lIL zM(h6rZ>=L(_N%+u!td2xtAd+tj0{O4csiTa(ht^^>>VLYl|HGZFZCt=&ZTcB`O>2H z?^-y_2zI^gQOauROWEY#vh)!wd+Gl}Z>=At`d&fS4B4cX$S(><N1?v%!sU3-q@VE= zK6~!%j~(mg?EY=c?nqPHUkhARCH?RTak}mq*7R&piJfN$C$8k=vt<Iu>biSpi8__i z?wWKzQHEjrng-r4a%xfPPgnl9S>@=BX#GkTaXozZ7B3^U7+wOv6~?yVXB!_8>66sR z@M(3#p{37E+)yW8*4Qh22ab;R`K52k3@+W%u8dQVcb5l?&;=5j69kVfYdc(Rbtl4c z58ok~;w9c*>3D$8z0$t#Do>6!-Or~{MSpb@Y4qN@UvH+Yls5nN-#VSS6#d#PkDJRc zE&RTJbj+ipcP{b2)o%IDzMqTo8Z1@Wvcf~364ghvb8*XBw?pMl*OT7f=8>}OTUWOS zZ}Pam=)Cz)XYVPXTnae@!>i9(=_POUXR{NGULvMmOf)!Ft_IOPyN>mXa_73|{nQmt zrV2<s{AT4yO>(F19?e-}QmTZWFTXGihGy5-;{mOCwDzh9oei2?U_+yyqPKLx$GUK0 zUL6K^6nTs*7{0ZRj&4%lLVtveOUnd(C>_h@>XOZ|-(G0+s~yny*yJkmMFELH&@XK} z^ywZ(m#XkhWMpAOclYkplJ3~2*EhP;u8PbTF0tv`-l=pRckJ*J8hvesUpEAKA0dR} zh;Yj2j8(k|BQX=kU9D?Hb957qLq>qnS@TYj^7~P07-&;ihT%A*9GzP}XdCmM9{FL& z#K$o+4VQ2@*}eSbEFp?4?i{^Ejjis7-=(}fAkMdHTl;UiTCKs>8}4uFM<1WA<${#D z(;EDb*6~Ds9N`;4Bkj5R3Xgbdv?e=+uy=&lLV<R~?&I8u|5Xtb4M8F}$w%1#PTf=Q zt@R_60f(W>WW%Fg^9lqGb?-5D?t{_0c6ucJ?Q77DxW9ewIet~Q;az|0CPJru+7ZE& zbzvWDy;02vzu;mJe0J!BP7D5~Tq+k@Z#GWC@@(?S=-Gx-3not!p>s7Ybeqzoa_RtF zA>yK)Su%^zd72iLO({|sx-yW7Tp*!2Y=zF#w4iIska*X{vnCR+PYY$JG);@COG1KG zJ9V?ou%)AjnJ?3~iBs+*K7~q(wvp3fOLDwu#to^{9DR%z=BLIjXNmfryU+XFOjSQq z^HPQ0)sA)i{g%{aN~F&;*<;{>*Cjpo%_!!iF)4r}OnGA(uB_dB6%Xi-X5|VA>&lm{ z3)Bivyb8R<?h=krJ|<chzifS_R(HbRWbLixk5v+b5W>3VW$Q<^a+9h~Vi|WIZDP&+ zLRi<kZ2hQKYNEvlKF*m>f)KCL&q0B7V}*4w%+|?jWhkB#lV1T6Ly+H>)Tm=sEVK2( zTFRj6Rx7DtfHh$Gr5_PGu`#*ndPWD?34N8#3Fg<$hC?_0U~bLZO&0UwxBM_<V$#dU z@&3e{!`C<ed?8v-^vrc3?y|Ub^FF_Q)ARD^DG_^3?!E77T(3N5Y80CmYj06S(-FQw ztK_Oe-SLPsh!J#^sHTJ13k8}4QAp8<B?1DDMIxk@`oBys_+5s>l<7HpPZv#x@4eZb ztH(T8=fkXMo95g(Id<f%k1n$tH2t~cQag{^A5&Bj!BUjHuxwI+{8>xI=70mA9V{@} z3%Dk2$639E+&Ox-!Ee*n86sFavKKB*stxaU2g~3k09+xWPjj(J1j|PDBB7~x7KZ!D zkcnI%p*e@LRPbyAohcLWbaD|%*pb#a_?Rg}rz2V%`w<c#Vt_AlltW2TB5Ru|9Yv|< zHIrSazB}zOXRp2{$BP&Yjh6cK#0#@x$LotlqJgzm_ucTvaNpju|A=%f*6O9dkI1<) z-KFy##g5%RNs`<x>7+3!Xd+Dcg=t85c*s#aph{~t+!R0vKULPr0ZBMv`IrcF@Bp4W zkUx@13_=K?ejjbkvY<Si#QrlpY}Ik85W!lBsjg#Bg!qMoc$NCZ{qRAEV41|elhw*C zk$;_$<@co!)<q#(FRUHYNel)br*m%XUci&BGQH5rgvm_@8Xcs<3-9nS&|jECj&SV8 zA7+Z&@O?tw-8k|)S0*NvNOXDw-W=6~Hc{JGr^w!(1)IbcXF9xXwcy&J#67pV=PL7C z?2eVH&HVB5)47^a(9AlSc!zJ$8gaka4Lss@Bd=VgOwUnERLHTG$iT<BeIyYO<fGbu zC({G^cRt>mXjTo~j#|!4xr6bT+zc!QsV^}#bYCs7sO0>kyEj!jA7$E<&*_t1+3X#A zXoGSe7A4G4GhaXNDQ*J&1;uUnC#H89&>w0lh*n-RWgXV~LlH1^+q1n@L${PokYSD1 z{|DY>K(OqF?r?mUK~K&;L`4o>QPh%alWo!B5Jv6E-Z3Mj8d#ULI(W~vDm2=j4MLKq zo=!enX7{|F(_@LSlbmT$J)agX>!|~9g;P_q_BVRh!cn}ARpE2K=Rvofy#Y<aL@tof zd`dch>Sl)w5&L$oo<08E`Oo7V6Ft7<?*FCc?2nIbWXjgLSUcXOT$V*7MTzFfOnEVS z&-jT`tq!cXc*3kIGlu7xRP34m$%loGZ&|h@U(cCYQVc-fWOD>!QlgD$rd+e?RN@yy zQyjZHV6a!kZL6<Oj^(qp&iIQvmW;U3EX7>60{HA;eQdE%(tn2-44zBcCcq1GU#j9Y z#GqVl?v$Rma(CqieP7QQG^xjOzj4z7nvC0&?$DH*`|=K+Udc&g(y0t#$}ddAjBc-% z-~l}tzHzWH>Nci&mmNXG$yX;_+)?B)MnKfiE#b=X!Z67PMrp^c$JNSJC}!K92;_4b zi9rZqQ!2CZ##-{i`&AHmI0;{4s4>@%x*F_cPa)pe-RKDEHfZp%-l5@2h}U|tX&p(N zbnL2k8ogv^FaT#)fP|6dcefCZeR(~j8&y^FlNtsxq1odL$Id>9(arM2o^V}IoY`<3 z47$gtP}?Vws#g?bBHOgaoqorgBUX~bDTEmErE#k#Hy;0WvgOlc%MV;$*>3KbzU@EE zZ0y=^SM5&giVWz8X4dAMAU_@98~XP4Tt5?!_<8Kq1BD3DPqf0E9p!?Tdz(ibPO%S} zTOzE;$HxCo!NsQhXA{7*lRVFPS`}P0mCH`(4yilReBsL@q`t&daB*!mY|8c()kZuR zldRXq84(LTE9+h;L-dZ{;?~TxH`D$*G28_D3-ajjPfP_D^oRB`AT6wF$p^1X+p6Fq zWfOFGGg|*2D7YZle`~?zAQfDyA(vz0;Vn59*%mDhVJGp_4l5x!pTELq+es(26GliP z7Y3OhjoUEe>7KH}PNJxt4aRCgx0I8Em)O3paB7Axh_OvLjQTE5&Uj=Tv^2RoLKjGA zJ~EbDGd|wKLxq-(2z=ZjPx<&SGDl8Ywtnjcw_>_&ZT8Nq<fgbPDbaVEDR(t%dG`H} z_1o6OT{!rOuOa!PM@cpo929@*S+`cT4fis4@<!j}V4F$IHp7<Hn)&;cc=oz)t+T!F z-^{Tx&yw|>2DK}<WNo!9-BwPIIx4c!Vd|1vr*jr(KxYoPDe}CkABY#`q<QK3h;|hU zT+Wo_<h?2ZJ)*9DJ}ACxvS~-$_qguL(xY*gj$h(TET)SX{EzlA>C}lZ<&9}5_S3Hj z9?-LTZ!-v++MA6F)XHA<og0vgJBmEU36&_gAhXCHDs2jQHXc_iouy_C)qK8&|CLNU z5;kQ!8*i+oKndVutQVF%oWw3RY;Asuerd{14i@5#R~sE6?<ai1l@PD>I;&z|62h^o z?q~FpO@5t`<#)Fbj(vFqqZ{Sz*>If+?553eNjP@)4UKNL`~Q#Ga2yQsc{ZqZ#Ya_( zjZ9=4pQ=+lyg4rR?@X6@m#<lJVE5STi%mR{;P$EPmD1D>IJ5BE+2Jk5zR&UIaKiSn zRb538zM*eNg3TlGh?hj^O|3Q|T8^Dips6Tu{n-R_^F9iv*oU4j5mw}5<A0~%VpBx4 z31Heu9+}<t1ZP!n(G)j3p*y5{X>^UKE+F+Krh?0^uk%*=dsivbYTNCadz*IXnlPb9 zioql1k1g!l{aWVbE<N1@`U{Hw@J~zy7xahrG9WFiYRLz$hrz1gB4ra~Sflm-fr1Ny z{gnk5yNQ(+YmF&Q3%K^J&zM$A-(Fg&9YwT^PHO2(eaXLb>Dx^Owdfx^IIQxt3ah0r zWs`r)(nqlDrT-7z)_H(xjcHg*-%?(nm5uzOaD1eSm7zghk*b)&XE&XF^@Uf)zU!tn zs(LkG?f!nN>y4=QZIh_dZdRMR-98R1$-CaiGH#i`vHnfD=%V(Z(*XfbcGbVoX<zDZ zHN9fh8Q!$Tm^V)@4xV2ALdMH(Z+UOmvjAM-)D&yxA5r+{>bfslhpD~Z_KMN^_ZfGS zH~N@&N%y%MGX?eESU+i>_Rs0<b?~wFiY!7GNNCQMX8P{@G5vV+wvFO;dfZ@6WB<H0 z&#WodZ*AKH9<7?KUv)bRKI(;m5{%#SzCr9dqF>Zp_ZEFzH@*71;kkRC9UY@@sX=4w zbj#uXec|B#J9rUBl`T(se6RJsXomG2wq5vMU~Mhm_v5cb^cdJFQSSzw8!g|QduC!Z zUYm2jg_7m~IRnGQPwnW(YtWyaxE6Dg7+yAI&v{P_fje((+4N_^zqa%$llxu#0{8MQ zJ=3{<zXdIt^4dczn3Qm#=gTilLjs?EgYbZEmztAH*vl$47udn*r+9CDn+IfYM~5!s z`2*D&-BJ9K`WA_RfVZltMa;3^Ze{eVC0PsAoS?%0N@5VSh8+6zE=HG{3O>f#Bgw<b zgr2^2?$Fa6`}8tKcS;)pe3TL59kVXdmd`>scKG#-zP2$KfNi!Ku11#k5p>6n!-x>Y z=!|)iXE+Z7na~`Ah2xNM%jm3mmo0_!Fpy8T48w6qnX`UNp~ydtj!xGq&g~1C_&6=e zb9%Q7jipiEw%$U--hHI?;4amgO&rxA;p-XwYCjlvKW)ij*~S&lF~lpz%t~W;@kD+) z!Z(0ct#h#!9`RL=$5f-WcZAnMfp*09(w(*7f3!Pu|EdUzh9D7~<Rk2Vr|zludeeT& zfRiD++bkXP;VZZx)9z;87lob%d6xfjbywMK=ccc0(X#ZH1JAl=oglJ4TAT2p2%Yw6 zM+8&W#VZZ+o*g=&(}KS#m*T0umS@v31dZF^_4MW<5jt1XLboYRB1Z;3)_ax(;0h6A z<?`(;Lg#5(R5qnZym-JObb*BCuoXH_(}J!kL#hR=XzTl!l<2$7l%dl!Ev9w~30Ax} z)tQuNL7FKYMa&^>#OoDj`?t%9#_PZtkmE%RhB_OrFT)FSc!zY!#HZJPK0ABt_O0%p z)*KkUuX2g%gNL@w7kO(y)-K&Wnr?~pG>em%6u=Rt{K7Oe^*OT%52(e{4Eu$3<;&Iu zYK131CkG_qgymzRb@9vAS88>qhAc?=W0k}pgs`r8+4@nf+>}ERoQ%8go+Q<BA*}0N zwtiGAH5K@Egm{(C-GB7F5Z1*oTPLfPp;Wy?B4K3teJO->vCP&BYbitQUpEstq?&!T z2%XrN-1J1FgDmzdhk^X4Wf+d#_<@7NFLnOJJBZ1<6`7c{G0WQ7cynax_mJKyJhpgP z?CxWx*Ytc+Wa!zQ9y{yg=o;hO`9u){H*9J+J>Q%1s;;sP-=GzA>Ow+1;{NGRM;AiV zLF|PBO@e5oXaPzD1o^1;zf3Rqw$6Q&>3OlH%W?#z>6r2=!Nc}XCtoc1HO{n+wV#|= zvFw)DvgMoa+`e?<z>kTyI*DK@%3fGDsX*}24i1(w&kh!t>;+ttwo?s0++m`H#%)-? zd;T;LtR2}4mnPMQw@)mFr?7|sT;X4=+EDPE2$qfPMM6{YEDZNxB0?8PXbu&Y3Z8AC zGi3r{c>4oWqD5k+44sZ>ajZ;8fZ*Nb#hPt~EgeOvpM|b&P1@~HcV3gNg_0aEvZdkn z&3H@k!pt%%sEVjO<jUeUi%*Sf7dLhFl11lciWcjS^NCy4j<zmqr^f3q$F1Syy$^zd zCc>0ArlDT@q!ICeVy}+%UH~CHN(r>ioOgusF%jtCw|GA!BYz~5@#X@k-*b2^JMwT6 z-qzre?>@ba9juj@>N@sB2!-!#phb;W>GyFHVhIr}lh}8%TDhe*Yng_tk>&TL5Y|N@ zTQ95~)7^gMFwnEj5k-VfCQNQRmeE0y0t7zRCzxM08;;$0p=Rqc^*f=eMk5oGYNd`? z18<J^`&#Xy&5<-`(=?rzRZ7x2M$h3L_5?0z5a;fq!O>>4?%eO)lmtbW`h&@^tvJh1 zNB9P<q6I1@#Usv8@!TYOv&d0PRLHTmm!c6%1O)l0_P<OoIMdrpnI2OT*_WU|BI5+p zbQmf$UiBqM#cRiomP*@eeZy~s=00lO_Hpsqk$;Q3W?9hQ!9q_@+(Xai^+LGjO<IZq zFMa5L(X$OF5+`l03$U92cwUAHFfpq>z%Bydot~HgZpHNhb`k*Zws0mu?;835I|v}M zaYpt2$2wjy0baGx2iQ&kyh1e-pjj_{fNca&RB!Oce+z>Ju8z?M*h&DrY9!MFzVq|} zwh#cb!<^>_4zAY+_=5m?tDJ(o2lW9q69BIbi8%#pF6jeoA^@i5%$ox5C;9*z34nKX z8q)&PgY*G55CF6C#<M`Q=q+@E(Ru>lC96ye3`(vKu#NzdsoVu0v+Dz_B>-k=kv9cx zO6miwA%OBKEpVrnKEUq;&{-uw%~tvVs|i5qA`I-K53q^=l%9x+jMoQPNdQXE1DhA< z1FRqbULk_%2hwlS2Ut!3xl}H~d584@mJtBu7T^<x6Orc?eSoC|pfnne{7WBT2>~!) zFXDN^@89$R788J$Xz9&D7^a|e%$B;*a1jAy(0jJ=-@*X!IE6mILIUWZ5}-jYeSif7 zz`NFw=?Bi0)(4nR01;JMpmbe*fO!O<bQ|t$qYp5b0F)*s+4}1P%pm~g4=eEez|x8O z0J908j><KVXt6%PECNt^9+>clKEO-@sI1Zg5sv8t%pic+Dgk<3(+8MN0KBd%rXza! zTpwT>0VvH4{eS8MOeFxN^?@rM0lLxfHv*`nat%~Ur4KNL0C=(za}6BGtq(An06bJ$ zAWu1cfJp?<PbI+b_4NTJ5`fa|I7NGXfC&VkG&`O)P#<7C0no4PfKM3Cgi)vH1B@d8 zU+{QaHIKOq1}@bH7)t<3PsJa$>H~}+fKn<g&^k~bU^D^n8YY-iaQlWnz$gOX>6=V| z8n5&LMiKyZ+k#IRcENF%R=UAx1OYIAB#L(^EgVN5U^oG^1>+CXHr$j(A7B^(C@t5g z%cl=8lmL|Og1Hs+0frDje3erWyOBP?U;<DY4M%j;2N*;EN~7Vo!TJCL2_Ub^Dd;p+ zA7B6hFn{fk=La4w*9YiN02NePp#BbhfPMs!QzgLJlllOC2_U^nfKs>h0s0U?QI!BY z-sl7LCV(m`0kTGDts4z{5kMQ2088TO1N0;S=9}@nZJ02<K0prwD5lZ^;|u5mbSHpj zDgj)5^#QsOKv9(dJ)7tQbR~d#Dgj<})(7Z90L(l3c#F_)m_9&f0#JG)`g6KIKqmrF zD&1CGr4P`N0F-u8?cb#j(18G$@7(a#K<+d80PP8YcheO!HCugGAD|rpDBT5K@AU!N z5`a?8XlleZy3w!=0Sr*-h@vFa2WU+I=~My?$fys{iU4@8LogTN`$GBv0R+%qr3G45 z(FbTr07~<MTYmZgEeJrVU{SrBK0tE<P};(AY=k~QGXjXGat#!kr4Qgw07{k9jlb&y z_z{3o!6NNmeSoF};H7d3=A6?9XhHx=vty43`T&gyps7j=4F9MP(1-w9s|5J!-c~mn zHY9+gDgins)(2=n0L<Huct^5_ne_qc6M)j>v|dqtfO-U=bQhedrVmh;0F*W`lx(gK zP=^4js$7KId*}nyCV=cJ0kVwN2dG5=O3wp}=ja2}B!GrI3*0>viQey{4|U<~oVB*v z(+nfryKnYgU23pPtd6IDrrXx3d$l=Ds=j;jsC+KN3Diqgg8(9_1VFuH)d?V>N&wVL zR*eAqsRTg1WK{{kOC<p6C96UJQB(q;Ub4yr!0e*o?E=(G=1Ty~Sil27y=0XLfSDKY z08lSkMFL=IMmzx2OIAU(1yC<pdDQ@@m#iECFf}9I6rf(RvIM|P&3FK)m#ho{F!KT) z0O}<xO#nSrdP3AoR*C@JRRW-1vXTVA?5yTZ0qP|yK>$p_f(L+l$%+#|ag|emddZ5Z zUIVC?tSAA*QE36xOICyc=z1LRv1w%DtpU_aR+s>ImvgxC08lSkAp&4tzVO*Sul7y` zy&%<dRlTz#lQx*w@Mf*FJKQ|8J**VJQ@R1=^F-)8yj{Ete|qTFCJNHC>j2yTt%<6| z7*BdCeJCeE&&HQ86d-_nDgn^t3;7A4fl2^$`9eMd=&lj~UA~Z)08*#~K$kD%A%Mav z0np_Oxd{M1-}a6*-Y!6wFZd7uQ?KFypvxC>5diazUmgIud?6<RFe~*u0Cf364gz2% z#ykLY`9gLAU=~Sv0O<0CYy_ZrcD=n|6Nz~M=<<cE1W;D**~Whh0|2^wAqxR8YZE*R zpvxCB69Dh`UtM_s=<<b31i)+`;Q^q_7cvrnR`S$a2w_+Q=<<aO1fVn+q01N26F>{S z!H0DhpvxE15dgD^inj*P<qK&EfZ0UF13;HAq#*!i{|XNPUA~Z-0GK}|%L71{FQg&> zre4JZK$kD1B!EmRcLBP5!J7a|s{}xoFQgy<reepN0(AL;7XdI^h<E_#@`dCCpwtl| z!7Ld8Fz-O&SpW%UNeLi_%0-9-vm^viT_pe#%n}m-Q!L?40TRp-5dib0YaRd+%n}lS z()1h&W(f$OhRQX71he=Az<kw^Hw8#Ai$?%T&jUy>i%S4Xi&RK3i$efiRIULen0XQa zvx$ng29RJDn*fx$VkDS(5CHRnPM!sjU>1u2n0gft010L>2_Qh_B1D2&3<6;Gukb8@ z1heP_P(-B#kYE;#0J^CJK!RCR0%)uf010MMR8IjC%pwy2vwwxR2$5jsP5?>^l}Ip) zL;%b;|3}vJ)T&BU;H*=jrdx$AJ!|CIcx2rC9W92pF3|1v{yOIie%U;%P|(Sl`u8qG zq-QfvV>_m7))p)YX6V^iFmodSW`&LifCRG$1i*adod<vfGgktr#&ZEY03?_h2!N@X z^8k=w=0X6>9moSff|(!yW^sfEfCRIjKiE}T9sm-|eh@%cm5UGwX5R@wsUJXs**5}+ zsL}#RF#AdX%#L#28bE?s5CJgXui^n9!R!kGWK}r@NHF_M04Y@hAi?Yt0i;(6fCRIT z1kgq$020hT5CBuR<}E@bn7t=}9x5$>1haPpz--{+SpW%UZwWxDA3%cH8v@9zate@O z_L=~gtpmI%K!VvT0$?UZJOCt^y(9poXF?>Hy&wSQW#K#vAi?Z80Wjqv9sm-|o)JJs zmAe25W`7X?vv+}K0VJ3`B>-j<6%POjW={y9jLIoMg4tsNsG$-731*K7fZ4min*t=5 zJtP2T6BQ2t31$xnfLWvD0U*KbJ^?T_OCA6c%<d6@(nW{_v%3VK)DIxR><$4aJr5wk z>^1=uROtthV0McDm~R*H79kSMZW2Htl@>sP*$veeK!VwI0!XgX0!T2sMgaJiNNsu< zd20X(W>*P7>4^vlW>*M+s@~ue1`8m;>`wwvnw%oR?6PVLAi?Ys0mK9o@V7U7c#9AT zW)}&7DH-wrkYIL!0DM(i010O234nP!DbE5(Fgr&8%-nEP%!1~dCnDYZ(PzN-UJLj9 zIqmARZ>#+WUGiMEGpC1V=MqQD?{f7@i$$xm1i)+^-~k}f>I?xe({mmG60J@X0Q2q* z9sm-pP7y#Z-Y(z)Akpe10pwN*fJCbk1khC_01~YN34mEA<V^t*t&Xb(K%&(#0;sQY z3Xo`ZlmPOn1VEzI5dz4d5&(%-hY5gr@dIxWBGKv)0n}4z0VG--BmkwZ7>QN~2q3LW z3n0;IKLNB>34lbaeFV@*B>)nw_7XsMl>kVz+Cu<JcL5Tub`t>e@(-RLK%&(y0#F)` zk!ZD(07|J`14y*mK>%q~0wB?9yJ`R=T5Tf$<`2m579kR?wh{odqn8JOM5`?Xz<kS# z2Y^JYKL~(%B_0m|iB_8lfO$J94*-c)n+SmUsv!>miB=m4pqNTOfJCbe1mLF<0Et%X z380}$03=$iBLJnRVkBCvB>?7y@w`QdM5{FfP*UX-Akpe~)l+~(tJMV1N~HymXtjy} zlpaWsXtk06daJYm60KGcKs1#ANVHl`0L4`TAkk_W0W?(!fJCdM1W;2Y01~a15CBuU z<#|FRS}i7k<|-|KM5{#v&{8D;60H^zKsl8FNVHl&07+B=Akk_*0WfcY;VnWWTFoN> zW=kgz0Et#}2|#Iy28mX42%s`=4NUBFIGORkpx%?I7b8d5Iq6mTz3ERpFMH9meTuwo zwwxb5Fx!I3t8eCb7_+_ZwTQFn*=2aoj?=2Tc25E6-RRj^Fq=gHOtFLqfCRId1i);l z<pChUYz6@^`&W1XNHCjD0L(r%9sm-|rV#+MIKl%!g4t98U?#>q03?|GMgUB;h6jKI zvnd3?tWoj+kYF~M0GQnyJOCt^O(FnhS2qs;31$-sfZ0^d13-e=1Oi~5#&`foFdI(* z%-RGG010N}2!L6i;sGGRY%BpV-}2%CAi-=50Vv%CNH7~s00UGWNRVJQiU62$5pN2R zU^bEfn2q&303?`=Ab=JsrvM3N!wG=-);G@rNH7~l0I^kC010M82_T(H03?_VApmAq zH*X4%U^bWllpaWsU^a*V@~E5wB$y2(0Hv-N31$NbfSDNc)&LUB`V&A6l~aHOvwj4? zypN4%0VJ69B>?7Y=R5!;nDrq5<}1fM03?|8CIF^Z!2>{oSuX-$s<u1;B$)Li0Ol_! z@c@uu)`I|;-JCoCB$#z404j8WkIl;!JOCt^bt3>~6BQ2t31(dhfcbt44*&^fT?im9 zn1H{%T)_iCf>~z*VD_)@0FYqTi2#^V0S^EPW*rGYX_X8KW*rD1vdT4p1he)8pwtf_ z!K@ttC_NJ*!K^I-#85c}NHA+d08LZ^Ai=CP0Yp^^fCRHv1i-w8hUW*6U=~0CO0#1m zn6)GTrLGtWW-SPSDH%S=Ttj;;i~L8;g!7kuUG${(O#fAlz8DI7r5s)7Zlo6L+H5O$ ze_qiA+gj=hX3go@%+kQyNS!pVMS>Z6HvVnnW(2@24e$U^PU24h9e6vC2Y_-CKLW_7 z5&-2SO$mT`8sk|2<s?lAfZ4pm13)=RV*-e!atcsR(ue?<nmNw`C?{!10I5`30OceN z2!Pp7&9eZ?N$L{-vvY(8fO3+01i-xfg9m_elDY)IyqA#&fO3*L1khLIB1Ab!Z318( zhIkf0IY})7VBS2z13)=RO#;x`Vf5y~rZ&L?KsiYb0%)xFY~#O$0RZJB)d_&v#>le( z%1Npb0Q2_(cmOCTsY(D!k7Ot(sX_pWRjvV)lT;>v1}XtiPU1@daa01JoTL%~Fn_}7 z;EwF(M!GGp>fKxZpl-q{`PZJ`nIL!FGi6@pi8AnX(+$lkc_&KWurY3=t4ILM_bhn; zsFAJ$0r>HzfCqpY>B_4HK#g?e2%wru3!p~2vIM{^5Amh|HPV$K0A`__2Y?#sN)teB zl~aHk=}HlRk4ga4NLP{o0#pK^M!FINkVqu}YNRVp0L*u5c#9A<(iI~BW{r{ufEwwF z5&%=T<^iBax*`NnR^=K%jdX<xfLWm6SpYTC6(Rto(GWG#6(oQpDyIN7(iI>8rO^;I z(&Z<BN-8aY8tL*8KrfX5sF5x&0Wgczyj_4A>GBYO_M(cO8EleM9sp{j%S`~xHZmRn zYNYcafKqycH~w1~EPxv6auEQtfre)R)JT_;0NSdw0BWSmK>$qIm}ddhNSB=e>Zr5; zYNX3X0L(Tro&``NT~-26dL%=lRTctJx($(Nm6-sTl~UdmAkiul0c23Q2$5)&kpP(0 za-Ic{XqABgd{tTiiB{<efZ0gLvj7sU(h)#?l@>svRaydQrV;>&R%r-8>45}^R;dYq z*-pw^14y(=MF1WurvQmoDG7l2mKV<gNVM`MfLbaofJCbl1kh0>01~ad2!Pqa!<zym zS|wKvfJCcg1i*Z?fM)?DS|ud_W)}?)0Et#f2!Q#P7Y_i5R*4C~Tjef5qE#XS=%f+= ziB<^-fT^1CrT~dn2?zihK-eUwNd{-s4)T;yts9c<w;{>)WLnTBXRQgY@h)a=db-fs zIDcgRdG6Zx4lVbr(QTxQPtWcPA8zyPuXz(2jQ<7wFM2i>%;FJ13Y7pzFpEn7o+<&5 zU>1h}m^le=3XovtNdQc}iU)uMv)BX>UF8%Y!OVjIn3sR>EPw>FSOmZ<lJWqMU>1`A z@~WHyB$&k@0A}+9&jLs=i>?{~31-m<prFbrK!RCR0%)!h010MM2!Pp2$Xf$QFpEq8 z%*$zc07x)%Cjh2i#REWsStJ5r)+l)ZNHB{?07_jk63pBPpn%F<fCRG$1i)18c~gJ{ zGgkuWtkMEVFf*vO020hx2%x=63n0Nv5CF44##;kOF#Gxa=T9${7C?g84+4PCw@r$8 z7C?g8cLK--3Br&WA;Ih$0cf3xdK6&*K!Vv<0$^&EyeU9}Sr7pz4Ms>X`$7QB79ySn zkYM(i0CMO}zwzI~um+G|_K5(PZ=CZifCRIT1i*aXng@UcvkwHoRP1;FNHBX(0L&&T z9sm-|-Vp$^LdOF@g4tUFU`ho%03?{bA%M&(w;>YDUK2oSl>kUEdqn_BkL5@(dr1Jy z8|ip!010L<2tetX5D8|_34r;M70&`lFndM-UMd$M63qT00A^D)&jLs=drAPzAFbd4 zAi?Yj0Whz=-~k}P>@fi-4aZ0@d!%{_kYM(Z0GRK+^QHg^W)BE}*}K34K!VwQ0$@sp zJOCt^-6Mc*JV(^CoV(V7OM=;v)_V^1ofUfoz0c(ntCvTwZMg=%8QwQut@P94<ay^Z zD4wohc9(Dch+mRvewzd{^lU7c-64RiyutGTkYIM30GLgDJOCt^-68<ydlftYB$(YK zfMP1A010L{2%w5e03?`QCje$~gf|69FuO(oF;!Xs31(LbfLWpASpW%UR|uejN(&&t z>`ww<zVgnq020hD696+S;{hPS>=FSm^HLrF63i|VfUn9mfCRG(1mLd{010O23BX+? z020j35diZr#9ISMFgr^C&;YiDavlH@%+3&i(qM!Hv(p4n8k)eSNXoMS63k8!Kt+`R zNH9A|08LZ^Ai?Ye0VoYdNH7Z|0Oo5AyfuIXv*QFn=X>x8!y-h2*)amh1RnplyJ2}2 zK!Vv(0$^5WcmPN+J3;_WRayWEW`_wtX)r>9*&zaGq|yRNFgr*9MO6YI!R!D5Ft6$6 zEkY!i?I!@{tFAl%B$(|Z0Os8rJOCt^?InPuD%SuK%=QpK36%gyFxyQ4%qyCCQ-B1s zT?C-CLV^Udodm#q$Bt(KB$(|WfQTyB020i$tDXWRm~A6~^eQcY1hcIKz^u~p)&LUB zwh%xOl@>sP*&hVJ?C9lL010NB34r-yc02$im~A3}sw$@d31%BrTL1}W8wjARN(&&t zY&`+AQ3-$qvvmZZ^i+%lv$X`^q0$0KFk3?aN*xgr%zh^TW`W{s%ED&Rs(0_b2MrUd zT`se%$ES$z3*X$+Y1`?>Yd2o)`)!4L;OSKpuxPcK0Jts1EC3{0ts;O}yfwhH01~ZM z5&+W^@&J%%wSoY+t%R&8K%&)h0$^Tyz_S1nt(Fmh_SU4{La-^(@Bol#wUhvu*QN6S zkZ84p0GMSu9sm-p785`@J?k6)EeunDM5{#vz<t@0wF{7FwU7X~P1P&_Bw8&XfWj)L z0Et%f34keD@fINxt>zIxMwJ#oqSagi@KOnYM5{Rj&{ib?60K$vfKoqzM5|c@&_tyL zkZ3iN0Me-hK%&(Q0$~1h25%c8(P}yYFuQ1Y07$f&MgUClng@VHtEmK#T;&=-qSbE% zz`PohX8|NyO(6hgosb8BM61aJz-(mV0U*(85&>{uyl0&UkZ3iL0F-V+Bw9@%0Oq}n zyeUAU)p!D^p>i7{(P|t4FdLb87C@raSOVy$(gH}d8bbh4RRSQ<YBT|)PziuUt5F2d zL?r+ctws_+B$WV2v>HJG+`e{}Cq$yvZ~{<zDn_E!Fals|$2>oPM600$z`cfsH3dkt z8bSb#RW3p#S`8+E1}XuNXf=ocnDRYu4It5KAOU1jX#pf!4IlvK&6GR~AknHn0rXU9 z0VG=WBLJp!%d-Fyt@;vx(&QA0R(%M7`<@%i5h2m4Hvup;Bi<As(W(~#q*S>Gk!aPE z0F)lfk!aO}0GP+}CrjsRB9Ds@jblcxzA~z)Uvg)sqNC&HjNpDCFnQ&Huj2J>)VNN| zXh}!wzU9@Op52LO{kP-pX#Jn`zv$Wc_l3I=0P{4)13)=RR{~(l#ykL&lXM{f=4D_! z0F;w-CV;vs*8s{%IuQV~I>WO7%1JsB05dD&0ic|u0|7AeQXT-xN!k+tvxkWXfO3*{ z1kgj}B1Ab!TLNgW5&-2SZ3uvQMKf;-P)^cX^%S6-q!j@$TL*X+KsiYO0Vv%CC?{!2 z0L&^a&jKhXX+Z!LRqg_mlQbuQrYZqYPST73n5Qw`6rh~Mp8%Aeh)_=AM*smTrvT+7 zO$i{nN&u9TG$8;ll>jIwX-oiJR05!!q!9s><pCV3lw4~>r<`QK@6}HnFdTjsDe=s) zx5giTxTxTnq6wqb>~g65`3&uAz5J+~lQg7fGyA9JmWWADr4QvK=-If5uK@uh<_(?) zfSUN~69BV+iU)w2`05b=vqa4UKuvsg34mD@-~pf}zB&X@OywFtO?<TpppZ%c)Wlbd z0FtN#Kuvr#380Kh0Mx`+g8-P9(eV}`YT~P|dJ0ezUo`?yx(HDdUsVEN_D}Jq05$Pd zApqv<&O89r#8;UBnAdRe08kU3F99$Q#5@4h#8-&`n7`u213*oD6$v1PN=Jm6_$m-U zJCy*aiLX2Xv{VUzn)u2QKyQ@*sEMyE0aRBBfSUNq5CHS`5#BC9O?;&Zfca(#4*)gs zl_CJ9V$1_TO?)K@Ail~qfSUM95I_Z$0H}$tH~}ylIeAlnn)r$lfKo?<n)r$m08^{r zSpYTh6(Im-4;>Ex31)=}pr*=2hy=4j1fVn;BEhU60Wh0+c~gJ{vjPOby#9m-fCRJr z1fbLtBEc*l0Vu7IAi*pz0mM|f3y@%zhX4|&1VDmWZUSKHRlG%r1T!B3Xs*%%NHEJq z0FhM!Ai*pr0Wcf5cvFA`vm6AVv_gUev+M-GeA$<00VJ4ZBLL?8D?9)sm}MmZrH%** zW?2Y;soL@^fCRJ51i*afo(F&gvrGiwrqT}}!7L*IbXN(01hWhTkWnQ763o&QfYSN^ z63o&OKwO>$QjQ&_-C0BR#RGL#k9jw)OU74AQ|uJCN)8w?%5zAkt<e)V%)DXvrgE2} zVbLlr0d!RffJCb_1dvQ601~ZI69BV&gEs|8v`R$)&;YhK)baq3XqA!xDnSC9TL*Xm zNVM`M0H$om13;ox3IcFdX#pf!c@aPpl>kVzN=^XGLn&_xkZ6^R0GNsi4*-c)NeO^? zBH{rc(JBc6FuOT<07$e-OaR_07a<a@5)lBikBw&mBw8gTfRZXLfJCbV1i-wjn`Z$e zTE!;-=Bq6{03=$)BLJo07>QPK380?JHGo8`I0V2{&v{dTL@Q4MU^cPv0FY=En*h?P zoB||Tc@RJvl>kVzibVjCR01H;DkcFab;U@uia`KO`JT53k!Tg20F)*sNVJMZ0L(HS z&jLuaib?=VkL5_Tib4QPy?|!{Bw9r#fNUzaArh_J2|($20Et$S2!L6t<xK$+ts)YD zkIE@PqLmu~3{VMxM5_n{;I9$@iB_%z&_g8v60Hmbz${eq79kR?TnK=9Eg}y9iB^ID zm@nM&0FY?)^PA#2Arh^A5P;Ie1c_GP380k9U4TTZZv;?HB>)nwz7hcQ$3u9F5Q$bn z1i-xbfd_y@t1kplM&%SB(dx76DL|stCj!vknb9*t7;42xwE9Q@%vLVm8bG4e2Le#4 zm>|*WJpnY;v%c})!Y~C$w0cJX1$Y2wZyeOB%d~b9-Z<_vD%q1UDIe5)aBusPZcTDO z4%(3`_pumj-+SEX5uu;%TV8MJ+06cxRIAr(E0)U3=-F5>d&3_*4*&^fuL+<p&-y$7 zB$&M-fMO~EkYM(b0GKyV@GO7?vlj%AN~HymVD_8<n8!h$1(0C&i~yLKIS&8{W`7X? z^DM#xK!Vv*)fPa4*%Ja_HdXU1fCRJ01dv_jE<l3WBLYaO5&#Ki4+((TP|KSFB$z!Q z0A>pj4*&^f_X(i5$|*pC**yYip%MTIW_Jmol}Z34nB5@&W@kTd4IshnHUTiD0v-So z%x)1tZIx4i1hbn2z-%4hSpW%UHwYlNN(&&t>^cE3Qv#j^kYIL=01~OR020iu5&%=L z;#mL*W>*NnOQi*nVD={gFxy9X7C?g8Wdfia4}5GAV;%q!%q|f?L-6>&{l+v8010Ln z34qzVzym;n*#!b%wi5CHkYIM60F-9ONH9A`08HhcX8|Oboh1OJXF?>HogsieDt7@A z%uW*kvx|#21xPSEMF7k)F%JL<W+w@tmdYtWg4qcIa90U{1hYT_P<kLig4uBbU|zt% zTLVZiJ4OI`RZamC%#IR3O_cyhFgrp3%vTM0Q-B1s!vw&r)bjw4V0MTAm@UOT03?_l zBmm|cK0E*<m>nPh=8snJ0FYp|p8(>i+yzK5+eZLiDglsSwwC}Js{}xT*&YH=>IaZu zwwnMl@GS5k(a6Nc|AM5eRj(RGDYLlxnL+*)uDxj2C0@<;?wi}TJ-Q%T)dWQkR_Z!M zS1{W}&t|^jR_f-#2*zhqGKHRv1+$$5z>LH^03?|0Ab>VJ>+=ARV78qAn8!gL020i$ z5dbqM;Q=7QY%2jUn|F8sNHE(%0L&|JcmPN+`-1?OMN%FB63jLefS1Z$fCRHm1kgYw z020hL5<m)-07x*~Kmg3Q3V3S(31;gFfSH-|0FYp|jsTeDAszq{%+?YBTmrW5+VTL9 zV77(;m|cWC03?|GP5^nJ32cg_JOCt^ttJ4bTEhcCg4rqp2vBJOB$%xvfT$_~kYKig z0F*{UB$zEH01uTGK!Vva0`O7^fCRIp1i+Mwc)I`zW=jY_sVhc;*<u1<riDBUAi-=A z0WkF{9sm-|77~EcQ!x_E77&2aSbzkx`2@hcgNHW-NHCj60L%&<4*&^fa|xi1N=JkQ zvpEF7eA}330VJ5sCIDt18xH^pX0r%DX<~u|vzY{-G%-Pf*$e_msB#e^!E8DKlu!wP z1hZ)b!2IPD-XcVT*;E2xwvq7wkYM&30WjY*<pChUYzhG|e?y7~fCRJ21i;j*cmPN+ zn?wLg%XCOEn@9jk&xA-Yn?L|ey^1#lNH7~u0L<&sc>qW-8%F?2^8zH8jU|ABDqS%W z%*GHv4V3^$FdIz(g;fF|!E6)(bW{m|1hbI@pj5Cxg4qZHU{**bocgZy{?Y$d?Y{ou zYu8gLQXe|9{?g*MX)2Bx{BGM+aqoWl=AIFXdbP#BFFc$8it?s_2Y~W|VFbXu{DTL8 z@`9lRz-*%80ie8K2mwS>IRz*$7)$_JRRW;AU=RUBR0)9cf`J6Ulx}%z0ObV(2!L55 z;sKz%pg#c=Q8@)DFX%@AUMc}lUeK2Slx{<m7xW>3xGF7x@`Bz35JM#Z$_siC0P|f( z-Y!6SK~Dl;-n+m9KzTtA0-#11@UaoCcmOCb=uQC4+>i%=@`7#zp!7t9@`A1ez&sQ3 zEP(QYE~+hn@`BC;z|;+S7C?DHCjw{<_Q2m>FW~{8yr3fiq*e)l@`4Toz&sD6iqY2H zh)n*Y?a4G7CL8`(8Zn^9Z%axZjj?*<#h2OZy&axvM$0rYC+>FDZKP{Y&t{g1FQxCM zc`eFG(6ezPT{{A3#IrsR05#IJB>?97;{l*Xx;6yBTz@<O)JWHw0GN^?4*)gNwITqf zRKNp3jdTG7&|KvrM2&PU3BXS!0BWRbK>*D96mJSpBVBU>U>=Bh0H~3!838bVJ%<N? z8tMEAAhXIffEwxi2tcVTMvZh$2|%eIK#g=w2!L5A=dA(MNY|JEQmI@6sFAJ_0WhmG zJPV*kx`qVctI`6fk*)y&Fz;dFSpYTC)hB@XDlLE->FN;x^M+)e1yCbhT>@YV=R5$^ zNLPmdn5r!g05#IpCIF?L5H-@(A^@gb#Ipcuq^n5)N{?iyk*)>-FngGI7C?=3)d?Vp zN<V-a>8cTccE6z>g-v~mX93hmSCs&Y={?){Z(#sHjdWEApovNVB$!nu0Hxs=31+?o z&`qTUkYHAc0DM#eAi=C60Yp~`fCRG&1i*afp0^E=U{;<0nEk9g03?`|Qw@Lwv$CoI zkYHAZ0F<7JkziJu0F;JfB$$;V0HtR_B$$;X0A`hzw+oP9R)PSSsx1!y31-C!Kxv5v z31-CzKxr&Mf>}`lD6cXWAi=B%0eGndK!RCe0#F)^kYH9wH2@OK3KBp$l~aHOvjPOb z6is=4010OK34r<5HxB>_X88z!`J&yobAz>a0bGQ5_WW?F_(P`t_-#g_SSLCZY?t__ z>&p7Yw(j)^96xHGTWl9y!7ML5n^`EIQnPgg<ANc<3_TkQW_kG5=K&zWEH?o#?*-)n zAi>Os0GQpxJOCt^<stxAo(tdsAi*pr0W?twfCRG~1W;Wi020iy6F^#(07x*)MgR#^ z0wBRGD*-TjX?cqf31(RcfIJ%b*i>hD07x*)OaRQE4&nhI!7LL2c!Kf&t#yS5fCRIQ z1dvfB020hH5CF4_kY@oTn58EGH<cDZf>}BOVD?Y(EPw>Fv;?5^K!OCbGz8$Uate@O zmYM*R9!QX2mWlwFZyEB|020hn5&*N6l?Q+XGj9TDuW}6_!7K#<FkkH8SpW%UUIfro zr3H{+mYe{XwF#aDkYJXK0E(-$020iS5&*M2#Ipbr%#sj*(nBc{%n}oT(rt(YvqS`- zbQd7OEFl3f-!kN_0VJ3uAb>O~cL5U2;u8S#UQnI|kYE;%0F>qhNHB{_04-Eb0TRsO z5I`oC07x+NB!D(50gzx8n*f;Cq45?W63jdZK<Swf31+bffZ15jvj7szViJH-SBwO+ z7z9vL<sw9aS#$zmUi`qD0wkD4BY-R_Er0~Gs06@#y@_W5B$!1ZfUGJlfCRJ11Q1Cj z020jH2|#HqK!RB$0$^U%&RYXWFpEe4MO97#63pBPK&dN6f>{ItU^dY3rT__Mt^~mB zXKkGDhIWXf{~g|X<e7S6!L!l#OQo8*`O?KD`P0O1G;gza>_c6q_Mi2t92Tt%1Q3n4 z26zBSv~nSUUMc~QXe9`MnV9e_fJCdGU)fjS@Bol#^@9MI<$4|f60N=y0Q09^c>qYX z`bGdu&4>qpM60g^kXq#~K%!L;0Wg~<cosmS)fWO_c60IokZARp0GOH)4*-c)p9nyy zBSNCpM*?W6auFiY>H`624H<eAHo_%u3Xo{^o&cCvU+@5sX!VW&lrBOfTD>IzW_r%E z01~a<5WoPv={Npc7}fw1tzHv=Qb&YDt5*cTJQee%0Et#F34r+<K0E*<TD>5Et}536 z60M#SfKpG0M5|{6P*tS`kZAQ60WgbHyfuJCtEU9OY^vq~Akpdx0WkXqcmPPWdQ1SB zRjvUfT0J6wzA6EbX!Vc)nA$OK3Xo{^fB={cwLAbMTHPlAW@kSS0Et%j2q2ZpHGo8` zy9B`0j(HY9qSYM&P#TPoXmy(an3YnV1(0ZUivaqoTmwk7x=8@ZR01H;>IMO%Qwe}X ztLp@y^hkz8t81#K0Et#t2_U7)DL|st6#_`25&(%-e-ePNN&qBUT_%7|Dglsab%_9& z?fpDYh(xQ41kgpL1(0ZUfdH7&Ezbf-v^q}!N>4;cv^qxsX;n@E60Ob>0P}TI-V`9w z>I?xWEzuy+>NElL;7vi-hXWHC{|gr((xlA%`F*3D9{JBNtyMGL)BA&Ob-9$XLgs3< zCmQ;CF7I?e_bsne^z3ZBXD6&YO)DyrV1}NJ1+$X`z)TBy07x)9K>*AbJ$V2~FbgCA z=4*~T03?_lCx8+v*8mdCju8O!EW)z@63mVg05d1y0U*Kb2mvtr*mwX)Fgr{D%qwts z07x)9L;%bdA|3z|%nlMjewDib31$ZfAgM|KB$(|d0A?>EZwioLwvPaqiX9IC31)i< zKxs5Yg4rI`7C?g8ZUSHyNqJL%1hZWPP*&wGK!Vv$0$`>DJPRPfYzF}_Qvx0U63n&} zKrxk5fCRH`1i(y;c@{u|*;WE*sL}#RFxx@^N`ny+%>Ez%W+xwS3Xov7nE;}woB|}6 zZ6W}r2NEQhZ6ts^DlLEnvke4LMI`_d%+?ct(rt(YvvmZ(Y#-t60wkENB>-lno(F&g zvo!?Zt#S<@!R&VeV78C&EPw>F)dWyRr3H{+wu%4>sRTfR*-8S)pb`KHW-AE5T_pe# z%$5^CER_IAFk40dOv#Y93y@&8lmL|G1xPSkLI7=5P5~0k785`_l>kUETSNd#>jOwI zTSx%8RayWEW(x=)he`k>n9U~urKMUVn9U;qrAIO(n9U^s=DQ6%M}!2kIRpTgfUxOj z<pChUY&HQ@hXi2&K!VvU0?@=CJ&G^@Ai-=V0aVa?w(;M>0DuIu83e$*dZ5H_+03HV z|Iv1q!CF^s`=-0Q*|c<bZMwU=ySqU}5xX$4P!R>|u@DhkK}E$t3<MMd6%<<(<vnNL zGtTVy!+p#-doDgaAO8FQ&hPMA>lfEL&b98Iw`M-MHv4TOx_7UBSIy;rrB-<CyfWF> z96H(M@XMc+{&?Md{(a$_1TfaCfCoT*!HohizluEo>I-fVfcY-)0H`n6B!KaeLqL7O z^#U-zioFU@UvQlO%>0T6Kz+fr0vHiF1k@K?BLFkW=T(6Ef~y5!ZnX0Ns4uum0A{M& z1E9X(N&%R`dJlm5f-3}&c(Ny(iRoTO9su<PmkXd|vTLXPEdv157hEQQ(6=G=1(yoI zOmTTbKz+eR0hp^~9su<Pmk6L@<Q$;BV1occCn5C(7Yo1))_X%heZfTn7#ukS)EBH5 zfEnTNDnNa~g#u_DSpn(`E)YQIbAbAS^95jj5w%!*W1^u~kZ#YN15?W7=<-><j~~u{ z;-1H@ZN4Yp1C@>qDs+5um6cUC|Ftt|kZzr>-OsE3(z%)cJ9&bx%|W`g0x)HX2S7o( zH3BeO0uO+KbgQEQC`h+T0A`NOs{jS*Rtmt}SK$FrkZy$l%rkgA01DDA7l66X(gUC% z-7*1~-y$9W1?iRw!2BHa04PYeL;(08Ous_s0Z@=`u>j0Su?Ijwx<vwLfh9=S5_kX< zq+2KeGeF}3P>^nc0L;$Z1E3(?d;yr9xd%W&x_JUHqXQlQ1?lDrU}EGXq#)fK0hpb+ zR{;vr%@)A4$O=%9Zk7NFM*>igZl(Z2zXvEtH$wnsu-=;k6r`Ij05d${0Z@=`ngC2& z;{i~RZmIyx@Pr3ILAogdFc(KW01DDg7C`OD+mM2ElLSy85`cnq69o|ZB%~nS1OZ?H zGV)DG!fd<%%%Ao2CLsy4aRM;67I*+8%*F~}8IC~)K1xZLjS+yk&CII+3A51xC>B`( z5@w?WU`C3)3Xm`xDF8E6?E#Q58zF#okwZYjY`6f%M*@&A8zz9zNl3zMr~t}FR)B=r z5CKe%1R!BHSOBKE_wE7`W`hJ^9un*UkT4r4fY4<+5@rJgV1}r?3Xm}CFMxTGlaPd2 zKLN~-1R!D7R{#n1k&Ge(-vcDf`UoI&iH3w(ZvmJm(0G%Ogjp{EBn(i{5RfqIDFE}Q zHQN+<K5??MgxSgIyH2l6Epx;Dr3%d4KJn4rsmn*VJ%4@S>MQ2e-~B?ppYBg8%zEhB zOOyR~r~NJ6{F}76`+p%mx;6{5?gB6me((TDm~|7t%*YCmFzYG+Q<iuYAYs-;09_+1 zK*FrE047BOkTB~cfOe4pB+NPrz;x!`93WxVK>(&I@Bm1dr3%2@SK$GWFl#RWQyF>y zB+S|gU~1$fBw^N80Ba)wNSL(|fEnKLhJb`wYXO+5zyly*)=B`O&jAu<Ed^k%(s~sj zVb($b=5I!L03^(s3&7lK>j983YbJoKk+&fUv!((FeH)T6Ya#%%G4_Ulgjr(&m|d9% zK*Fq1^c)~z)=&UlA}1jUvj))sB+TjyU~FUsNSM_VfVnv0O+pf8bp>FCCp-WWW_1K$ z9s=Y6kT9z)fY3)V3A0)PXc9RINto3XKxlhT!t6W&G>)tQ39}jks1XT3!mPRg%ynw- zE+Ao6O#r<jD?q}mssL6-0+2APA^`IoCT|Exm{k_QlE?~>Fsmeh&~-u*W+?(NkH++d zfP`5^0hmcX4}gSOh3Gjz!mNDs93Wv<P5?tA?*bBLWd)ED2|&WEi~!6Wn>Ptbn3Wbl z@5l;}Fe@bhbAydn0TN~<1rWMMM8d3u0L);$R{;`c#RXuRdk=twSup{at=SXJ`X)Z) zW%}md|IUGywWh52^}1zmw>mqj$@h)A)@uCC%O9`LS$6Nv$2UI4(yFKc%$Jb|K+>v+ z0LFW_p$9<Hs;~eSL;{esDkK2&r(L}YkhCf&0P{)c0g$vRAON#F_5es)<rl#0$T>jL zDxUzFMFNnt${Sq)l2&;HVD32g<^V~n+ydwjIRqrFatUBuBmhaPoB{})ge0wU2w;3< z1xQ+D7l0Y8_a-4pt84-=m+L(Ml2%y-5PBPuw8|m?bGxZm0g_gk1z_%R@&HI$WfFiH zqVfPpTAlmL_J$q+NvnSa5c*Y2(&`@p<cNF_k+eE10CRo78v>G6e+$4|Bk}-9TKy#e zbEVV+AZc|*0A`HG10ZSjrvMg3PC}Aae+a-lq1LMaNvq!l5c)DAY4w``Li+-eR=)}$ z^rMud)h`058950_TKy~lGsfdhLXuWL31CKK1xQ+*7J!+m^(sKp>PG>DzK%&+{U87{ zN##|5q}3?_n5U6>03@wW3Lx}0Bx&`%0792&NLqa-fY9dvNvm%K5c)wv(&~f&LYL`C zT74q`GuG?f1thJ$7JwP$@&HI$eI)?%xO5MIq}7)KSQYs)B58G80A`NJs{l!>F9Z;J z8<Mp8TmYeykfhZy0n~|{10=1E3cy^X`smZQ68&`MOqpsQ9ep-6`y=Id9qqCB&i;3H z`RAiI4jw#z%#=qPeziKs+D5aJ?(#aKYgh38<DXkmS69_P2{XDj3$xDzU}hOT01{@0 z1z@gGdH^KMJ{7>M$RQwM_K5(@FLJK}B+Nb*fcZJ-0gy2JNC0Mv%L5=`c1QqSBj*4K zvkwJex(crXB+L#9U_fLANSJ*f0Q1}huL2~@-WPy*_J#*Q!t6Z(REit|5@zoTpj{*Y z39|zNFk1p|2uPT{BLMRtC=Y;y+1t?-AYt~F0L)Vfy$X;p+b;k!M&<#KFndz~<|?fR zK*H<|0W6KY4M~{2E&%gKth@@4Fxw}9&_^)|v%S$3AYt~J06Ip_0TO1f3Lx}lM8fP9 z0hq?ln}j6HUKT*;ZAilGB>{wf6Ou4{Q2^!!8*d0mn7tr?LXmd?3A5(~5c)PGVfLH= zLVH6JW_tvXSZ+u*4(X1e@#X*tvu6cRI@z_;{+0m%5@x#v5ZWD+FndM-p-VI*%ytQ& zV&o8zFnd}6=DCdCBqU+BQvjwi^Z-bhJtY7$!Q%mtFndw}ts>_D39}~zkQxa<!t8MY zl!*i&VfL5+%p>u<IY7efe*!SAtp`BD>`?)<i5vnFW{(J<M<f6Vvxfy>8ar<YNSHk& zfX<N>AYt~P0ER~bkTBaJfY82xgxPihgnko}Fnd4%=2vmP?I#k7P2ZBQUo@lt2U~w_ zUw-gq1CN}0b;7ic+xE^}P=4^`zt#EdbfZV!ODfFn*R{=~FS>0jC{?C^`d_*>|F-cq z0gUwKp9era$$bJabCezc^(0#bVCE=20P0EZ6@dAZ4ITjXB=-owd<1v^)RWvT05jC@ z0Z>n}MF68B?*i&c?h-)1NC4_d?i4`2NC4_d?hwGxNC4_dZWn;LJmgJ6>Pc=Bz>3HU zP*1X10H!YTDnLEStpYGzg$F=A$t?mfx4e4*)RWvS0P`3m4}f}-n*?AcNj(7SNp2KC z=p>|`<OTtl2{Nw&)RSxyK;jE8*~1{+5}^k`J<0U~n49d{X@AQA0QDr-2_W>Fkb079 z1z=`ry&<5U<Qf5(s$llKI*BeubLZ}|WzIjo`S#s^&8_w52UlOewL!VxbI#v<a?GIx z6HaEiy!}NSq`O)G=0dp#KtZ~z1YjQ5?*UMd?n(ie&jAmBf^=61V6b-^dH@upyIcUK zxAp)iNOze48bwxsf^?S(pjspV1?e^lU`iwa1?eskfVt1on*$W2+aLh*7$gsXf^-)P zU`gZ<P>}8-0hq62uL2aLTQ7k6krkjI-Gu@$SLnP7P>}8d0hp%{c>oloJ6`}TB8Py2 zbn66ABocsvbZZ4*$`Wq~C`h+P0H!eW04PYeS^z5}hk$}~s{~+v6?+w+Al*s<n6ktJ zpdj4}0j!N20t(VC7l64`>s5e)bjt)VEV2R=q+1$22PjClL;&Uri8llkq+2WibBB)y zKtZ}i0;n802PjClPynH=8A+=J0;m^R0g_hp1<))KfTYzt0d$H4AZayM0FxpCNLtMi zKx!laNvqic2z?Haw3;OVQ&@NpB9c}!1z^U=JOGkbGX$_Kat@HRnl6CQZ$gq*)1m=L zT1^#zxxvPp10=1c2*AuRc>pA>CJSJ3<Rm0%HAw)by7ekR(rRM#93W{mK>+4%Pp<+b zt;P!=^f^G%YMcN<zXwQKjTL~I<nxArq}3P!bd9_XNm`8-fO+zSR{@e%qXaO)tH8z{ z7bh0><eGZFIBxj<##g@f{^*`RT$iO#vxko?Ex7USo3flbvF~W5s~TiW8l)SkYnws3 zXL|2Tz)G0WwON>r5I`yKKi&f%VK!U<=C%e8fP~pF0d$M3013090x$#JUIj>)4H1AD zBl7@Am<<+y`910ZkT4r0fN_y?fP~pV0hkM9UIj>)4G@62y~zV0Vb)&&rZ)BfNSO5# zK(WX<K*FrA0NO_akTB~bfaZ|^B+PmXz<d*XbAW_dF9Dd}qaFYWvz`Jlmj*ll5@tOF zP(5-EkTB~m05e48Re*$9HvyPG-{S$0FzYIS4v|AZ!mNt`W<~;#FzYM;eObf5bV)vM z2uPT95`dZD@c>AebreA87ZC}w4gxSwA@V9f!Yow)=IV?GK*FrO075^@Ntm@0KpD6P zGG)rZT|mODtpLmrl{W+=%-RSb^mR<athE4!MGgT8vsMBy&t>$6fP`5~0hnP*4}gSO z3jvIb90C$%%>@wJn2<1QCIEAV&Km*}W=#cPYGV(8gjo{-n42p+01{@61z@hydH^KM z8VSIR4tM}0%o+-yM&xZs!mNP+szw5kFsm;B^K4FU2uPUK6Ts@o3Xm|XD}WJ^03^)n z2%vi;0130&0x*S{HwQ?V)e=C*$O@1!t0@5U5FoDtB+SkeK<Mk3gjo#%gm%Xy%&H3@ zbP|#<t0n-`7i9YIjzkPwZGF*grI%K$RjFd;ul6jSSu@Y)6I%>v_xb43J6AT`F=b!Q zuPY}NW>s}<^C^6O&X$QE7mzTcYqKz`A^>x3!UG^-R#^b%Dy;`V!mN@2vU|@U4}gSO ziU68K0+2APD1bqc03^&R2*7*|ctb$Kth@lKMOJ`>SvdiiU*ui|NSKusfVn*60gx~& zBY*~xLqNi;v;fS_zFq}Ln3WR1gvbhzFe@p53XuRL%t{ErjE{IjK*FrJ0L=YW9smim zVge`_IRqrkiVDE|81gDW!mNk@Lf?iY%nA#@+*#sPfP`5g0hqfCJpdAB1qEPk^78;l zm=zF!sf|4V5@z`YP$Kd+Bw?0M0I87xB+T+g&jAu<c?1yJn2<2bEr8HTNWv_a0L&jQ z@$Lc=W;q3bb1=QJ^8iSg<q$w<cTB=8y8uGJib<Gd6M&iC@P>edSylnez)6tK+Ij#a z%(4i;-0bTCkTA<EfWna#AYqnC0L3E#NSK{FWA7^PhJb|GzXC{&tN;nKe*|EL`n?K} zFgq)N$&nQxVfMEGrbGgeF#AgYW_rUL0up9t1TZ$T0wm1-6u`nr01{?@2q3gOCSmrw z08Clp%>fc-zX`xR1jqv*VfL#4%m|SOK*H=70rZHRge1&<7J#|m+N%Hwv!4VI+82;8 zJ1v0FCm{*59|d6UwLLa=LAJD6BWX3`lkM-^QKDhbi|f8San462c6P6Pu70z6S4~@a z(NjY&-+tw9EUkX<=YR)5((04|%<lmYfTYz)0hrMN4}hfA_X6nYJqJ7hl2+ddz>JT0 z03@xx6+p?z3XrrqAprAT;8lR6)i(lI6IlV0R$mJscO(EwtFHu5HxhuP)t3SYorEN< zjtjv2BJw67NvkiSD?rlfa{=UvoC74SjtRj0D)xqeq}5RYBqAxv%8+i2$O9m0bwmK> zB9#X~(&{q-EJ*erpZ2#5RDh(_VFBRv(=XL}6(DK#sQ^rE=K+wk`a}TcmSYcqq}9g) zFwLn4K+@_X0aU_Ckby}^(&~@^sz(BlwE9p0W|q+#0+Ln-1yClk0wk?I5J2rn0FqYk z3n28Hkfhan0tjtRNm{)tfL4)1K+@`f07Ab9NLsxkfRT|EAZhis0L&i~^PU4Ft=<wq z)5r>twAwF#&`&awR&NR*^e!N2^+xm@AZhiw0L)0IHwj5v?Gu2RBk}-9TJ05pDX%>M zl2)$?z+9~M07zQB8a)R{TD>9wbG6*707<Kt1rYiqBx&`M074%`B&}W)fSIcGhJd8i z3j$ab`7$DD^}GN=*NRD6Jtu(B_MD{E9s$UFz`qQ%W+bhi6+q}G8A+?%0x)-2cy|Fw zt7imY_J)5BoLn|-$dp6;^ZJR0uf2O~^UrQ5f7u7a2M=z%ZDO&iZ-1Y4z-@1RIDGCM zi<0j0+NEooXYzf$W6yuWjIPbUFZ{Fs%ySn!0P0D03Lqa$|NnRRhX+7C$x{L_S7$r` z>Pemy!05;dP*3uN0L(zGR{`ot9v6W5E#d)CPx6=m%pjcyKt0L-1W+|{4p2|>r~u3_ za<2l^lRP4ToRJlvp5$Qxn4xN~0@RZ{Bmi@>r3XMg$%6tgSLi$d>PdD8z}#@_0Z>n} zT>zoa0qRK}5J0iWyMTI<`vqX`b@YaSdXjAdm>gLF>PhYsfGN(s3Q$k7RRCs$$OE9B z<lg8CP)~A?0L*ikyb4fHa<>4=MNUHMNwx?ej|Y(QYVpKkf<EP5n!lycvp+t4&vh66 zFmz##n@6-+^#0jfD)#$z_sdPPH(B!4lB7M!UAndz+_?W-lf-jdtt?%eLwt7%z|<5T z0EPJO5P;d0c>omRyIlb0+L#AGA->xLVE&}22S6dd%>pn#hCBcY@!cu_yaChaCOiNN z@!cYT#3Dm7jC3nQ9sq^-ZWci3T|gnen*?B{2D}PTi0?)LnBSuw0EPH&5Wv7>!=LuI z49o!v@of@7N+bY<_^ua#`910l0fqRk6TrmC3Q&meS^=1`1+M}W;=4uwiy|vPA-<~x zFfI~+LVQ;V!2BNdhJZqRR|;TCWCbY1cZC4fMgmZX?{Wc{TU)##pb+0>0x)BY9sq^- zE)@WdKt?`DD8#o>0M(En11}>A@m(SSbA8Gi0t)eM5P-Qz>H$!Q@8ak=Kq0=11Q2=~ zQiyN80L&FSZwM&FccB2xy|x|z39}0X5c()4VRpU%Lf?iY%+?8DUF3s^gxOjFn5#41 z93Ww~MgZm}KM#O}*=hj{iyQ(HW~&4c`Wzr(wo(A0t7Ih1RtR8h<PeZBTP^_eC@gOh zk}z8)fY47e5@t&U&>?aNNSG}VKuRP43A4olFb{t4<^Tz^MFN-~SpgDe3k5Je5`cu+ z0s)v|UT+9Un9Uc!q{s@8Fq<cU<&gj+%;pNfOcQ%UK*DT}0773zB+O<DASH4LNSMtM zz)BBbcF7ir<fZ<1?w>0c6nyN+Yp-TGf6U2s6R+*KeE(~;E0)OJwd&A2=Kb;0ZkARv z1<*VafTYz70hp(ccoiUNHC+H^d+q^{w3;RW^H4w!fTYz_0kn>s10=1c2*9*vUIj>6 zO%{N8?12YB(rS_bYD5kJNvnwhFn?dzs{l!>2?8)b%RK;+R^tU=E>?R0B(25?z})oj z0g$vBD*!V}=mC(l8Y6%Sk#_+}tI+~5zlyyIkhB^lfCiBjAZayH0H(I{DnQa|gaFI~ z<2?Y9R>K95H*yF_S`8C`xl-y?fTYz>0W68E07<JM0x(y}yb6%C8Z3bEkrg0mHAn!V zw;@TZfdVl1Hh4oo(rSPJ%n*wQK+>we0L)CY2SC!Qp8(AD0S|zrRbK%#i@Xa+TJ;ft zDJ;ASkhJP80CSnn10ZSDO918`Cl7$6RZjs7jhq7{t$GOHyhs3&R^0^<+M1EH>L!3` zkrg0m)l~pytlXP~B(1s#AasR<q*Z4Dq(%+_Nvlo*Fhi~05RkO$D1gvMF-fZq0$33_ z1SG9e1<*7SfTUG>0fgQKB(2&Bz|4?%laQoUTLGBj(gPrA)kXj_Bj*4~tJVVO8VNws zs+9oDLx8*?AZgW70DU7XK+>v(08DY|Re+>ba{&~HtN=-?W&$w32R7!+Tr>??AG299 z-Me(l-QRV~{@kVw_q;Lh_)nE96j?ht$4g}n)%vb*lP%km?(%A?Yp?eH<6GtE`QPsg z)3sTcH4#AVNB|OMjRjC45`ctRBLSF81KtpjFl#7)mXQ@8Vb(wZ=4M~70wm1p3&517 z9smimdIB(&p$9<1tZsA#NSM_TK%2-(NW!eP0L%q4ZwN@3)e?YdZ9M=IW;LS$NSK`$ zJqJjb)eu0f$Vo`TthxZqMN)4LkT9zz05j3+0gy1ODuCIMLqNi;iU7<dLazcO%qk1O zj1YMMB+M!aU`XT;kT6RTfN5*I3Xm|XD1fPv6(C_&K>%i3=v9D(S$P3ejI00&vvLA3 zrKwi|5@uxuU~aDP07#gX5r7$@@&HJfl@@?0&OHDUW~Br$JaQ6}Fe@p5wvhlN%t{Er zv^CxkkT5GQfSQpNAYoQa0A_y0s{jeJq5_x@SpgDeMFh|%5`ctR;pjO)!mN-0%<U!K z93Wv<PynSOhk%4x0RfnyYOew$%<>B$^oxjuSv~<QiyQ(HW_bk=x=2OBERO&}*N8}% z<raXsxx$--B+PONz>JT003^(E3Lx|@AYqn60HY)C0upA~1rT~0k}%6A08^ZMbAW_d zRsop0$O9l@mPG*lBIf`Jv&;f86Fgo8NSI|302Uzq87NQG*jqmB|3phWMSADT+UvS; zW%IAT`I`xKYkvFq;_<Imc<Js>F5EUf`<-8P>X1~Jo%_??Z9HRgjl{yTc9_w%S(yDR z0JA6Y07#hqBLMTKgFFBdW@iOZ3CBO(2{ax63A4WiV73Gv0130d1YrJJg9kvu?2G`q zMh*c9vp)r3K83vskTCm00EvC0$;yy{Nl3!%cLA8k9(WZXVfLE<%&##IfP~qv0w|NL z`e}d5zz~oy`$Yg|SLRiKgxSvmFu%q;01{?D3BYWMJOC1Arv)%Bat@F%`%wU<vGXcG z!t4hDn4g0l012~G0x;L7JOC1AC!^;83A677Ff4Ksk}&&D0Or;fZwN@3eJg;}$O@1! zJ0XC9kpLvjz7c>aOS~Z<VfM8Eaz|ExgxOaDFjr~43Xm}SQUK=qlm|e<?6?5TETacN z!t4tHn4P%?K*H>E0hoJhJOC1A#{^(1Ll1z2*--(6zK%(l9T9-}TZUc*NSJ*lfc%jU zA`)hYqlbWm*{1?9V`SbCkTCm10H!MN07#g9EP&A4kc8Ps0+<*%2}zh862Rg}01{>& z3Lx}BM8fQ#0L&jS@+Kh(vk#)@0131A1z>LM@G3yU>^%X5Hm4-a-i-zzVRj%IfP~pQ z0x)xI-W(ud_O<|8L_UZ}n7t){(3cSjv;6`HZA?g*y%}8r5@v4*pp`cVcD-BVKWX(t zl`d<)t+jku<ChN(+WGOBCbvA9yX!@lo;>!{{rP_=eC^7<{QJVM3!qvg0QCj?1YqV_ zy$VoYuvY->A}c_B!D|9ATQjc$)EB%efWna#puXT00pyAVpuXT`0hrFn8v^PJUJ^j) zbAbAS7X@IRO6XO9`hph(U~V(>0H`l`UI6Ci3J-w#g69OVI`S@{zF?04Om*v3fck=G z1yD7z0@N4m7Qo0z0O|{#5rCQM_J)A^f?WbIcX@dL)E7K0fH9FnKz+eZ0hpiVUInNx zcuD{bBP&3C!IJ_A{UoEl;0XaVimU+j1&<5BTqE-40QCir3BY_E-}_h3@@X|wknZe* zPi~u2c>Vr`(<@xix&HN2m+X6{)*F|cx#oq;?dDHA_SeHngLMDXwaxjr<m<x!^(1s{ z4$?g;0Mpuf02HKqL;wxE`R4&pknUjt%#8$~Al*aJ02HKqPykqf^hr{02q;LmLjdEE zAYF#Z1E3(?b^(|fCJ%subPot1^f^F5y88u?FLDSdNViP@^&$Z%NOzwA%si_%2PjCl zRRGN+D?mZIdj-%o5`cnq_Xwb1Bmf2J?iPS)?7TTZLAoshFkOWQKtZ~@qUQhw>FyLj zmB=|jLApBx5c)wvLAu)oU?%&$IY2?W+XT=zatJ6$w^;xkA^|8!cdGzGp92)6yF~yU zBP&2bx|;=Hx(aU+QjqQ@0hm!j4}gMnHwpkpAR}MJ6r{UB0PT?=17F1yq}wC_GfwIa z0R`!<7r?5>3Xm|nP5|Z!G+qTrm|ZJ?(6=E8vugxkp3CS}fP~rA0x)A_9smims{~-4 zNaq2NFuPI!T4#cP8F&tmFuOtkIpFe{GV&xOVRpFy%0>c^FuP0uiAA?$6d4!-5@weQ zz+9>KCLsy4jRNSE>_0y3ZyBfn3A0NCU<PWv3Xm|{AOKSvdjKTNE*3zU$RQwMc98(g z%@tk+NSLh`z|zPHkTAPY0A`%js{jeJ3j|>9ZSVj{n4K>G(^q)_B+S+czzo!S03^)T z3Sd;^BqU+BMgV4l$EyGdv(*AHvkRxMEtxm1X8MrX+PL4i4YT{7%C+~+=PvsBmwZ{r z4BU03Nz-k|+OK=&<vkx4NGi-$>Dp#fw14UMiO(mcj_BGf%vK6uoHzU)012}d0x;Jm zJOC1A%LTA9vH~Q`mI+{HBmfDsr2;UsGu{x8Fk2!3vnlcbNSG}aK;pL-l8r;U&p{7> zgxMkim^n%hfP~pX0W44UAD{NO3{-%G*#ZHWPhqbDB+TXupnqfqNSMtNfO#&cR{;`c za|K|240!+~%;pHd4E1{eB+O<DzzlSI03^(22_W=cK*DUM08ClpRe*%q3;~RYybVd1 zO&37uCm9K|X#$uNSpgDeQw3ly4R~{agxM4URFA9x3A4!ps22%9!fcWN#zq2=Fq<d< zvorVR012}R0x%=(9smim@d79pIRqrk#t9%>BmfDsu>vr+IeJ4t!fcEHOlj%?kT4r9 zfEJNMK*DU40L-89@+v^WY@`4ZOC8C|kb%B{gxLrIgnp2aFdHra^Jq+O2uPR>6Mz{X z@c>Ae4UMh<39}&r2z?HaFdHm@(DeZlW`hI}+M1Ct8z=yC!?!mHNtg`~fa$G001{^X z1yCs2Lon@c8F&(sFzY9P&?g}Yv%Uft5Lp2dW_<)OHxht^S#JSUhy);E)=L1DBLPU5 z^^6_@5@tOFU^+|hIY7d!y8uGp1tiS631D6193WxVRRCswrCO1riB?9^YDeFvZ_NAK z_)_h+)w^-+v@GpUY|Gbe-I?F!=HHO1z)jt6ILXqgivT)#74QH^T6GqHxwpXsAZgV} z0H!qc07zPO6hO1cAs}hhK>+64(5nDRt5gA)-p~UeY1Li;W_-j0AZgW30Ol{JcmO1= z+6us2s`UU!TD1{C<H);!q*ZGHm^=Nv3XrsF6<q<6RxJfEE^-J+TD1^>-fHkKU0>i0 z0ZFUo0x*Mg9so(JW&$uj$vgm(R!yUafTUFu0W5$S@c$ykUIj>6H5NeV7ZFLTMgqVB zqz_el6(DKVPynTnAOp7{Nvj3|2>m1@X;ohUrZe(}fTUGD0hlMycmO1=>Ixt=at@HR zsv`h%Yk^k*l2)|^U}i`>0FqX<1YquY_5es))f9j!EIa^`R_6(zP2?mbX;ni2%OU|t zT2&W7=%bjVRW$*GewLH8sw#l`kwZYzs)_*0M*@(vsw@CA*Y4ehB&{k5pmt;hNLr-` zz%(Xa1xQ*|6u`*H3Xrs_AOLfxpH~5rR^<g?no|#eq*XZqjE)=vl2&B}V6GK=6(DI< zMgXC=AxW#!0+=2-1SG9W2_W<?AZb-n0Olbq-W(ulRU#UIq*ZYN%!-@?B&~`GAoOiW z(yFKc%>4!493W{`L;yGf8Cf47X;oMN=E;DE&ty)BKHa`;mp|Jf-;Aw=8~yRszEV5- z^}pqV3qJql+PB}>xpQl+k<Y($An7izLb|r;Drz_AnFt+eX_2nY!mOYGCSdu~Esl5q zB+Lp3pnW6&3A6kH7#;~g!YrQvszd^iFv}}|(vbip%<>3eRU`ljv)lrx6bV4WESCVx z_=tBKk}%5|JqJjb<q&|`mwFW-VU}G0<_EC{K*B7W07^zqLK0?K1z>Kj@G3yUEQ<il zOtS|-!Ys1@%!P6ffP`5l0d$R=10>AO{c-MG@kjs?X8#JHdn5n}vwsB8HWGk@*;xUY zt25ptBw_Zq0L%oB2SCE?F9Ddpn&APEFgqgvvn%reNSOU808<rs03^)*5P+$RJOC1A zzYD-zsrLX#nEe(FK*H=-0nCeh5RowZMF62MBNApm3n27SOv3D^XaEvsrv)%Mat@F% z`%wVqBB^&9k}&&00G%T%K*H>l0H#C&kT5$b05ekT4FL(W@1p@on0+UJ#F|&Kamc_T z6$!I%1<*U$wbTBV0RR$aCj?-|$h<i~!t5IXnC9LCAYt~k01|7i$;KfALqNjpD*=Qq z(U36vQUIZA#U#v*3&7m@@67=cW?u-v+-T<kkTCmP09}&Jzl=TyNSGZHfcYCzUIj>) z9Th-mb4tSOhyYAq<yC-$*=GU>T_GW1c31$R%7%p5rvg~$-38xIIr-l%uYa@bJM`Y} z3TrPu_v1IG$Bf(mMXQc&4|N@RWYN4Uum0uBJe&FVg+CF1dHjS2Kz+f-0x*|qJpk$p zJ`%v}$RVJ<;E({!1G&5kP+#z&0LDjFfck=i0w@;=Kz+dn0x)-Zc|$;b!TSOj6j=f4 z3*Hle=?lCHP+#z_08C@z0Z?CXKmew?^#G_Zct-%{Cz%I8eZkuTFc&I40O||g5<rW{ zyMX$F{Q_7K2|#_pn*wMQ2|#_p8v-zeg*OMNFL+%5=GFoafck=c0x(a1@BpYU*eien zk#m6hg4YBvI1+&Rf>#A#o_*jA0rds12w+BJ1*k80SpdsDfQ^T?=1Tj&P>}BYXV({h zyiviF{Ff9z_kM}zA1--m?T4#W-2d+UC#Qb<?<YInO&X+oN!On0UAtASb-JqlDM&}x z<{;gR0x+|*9smXDUJ!u!4DtXdNcX$|>P8L$1?ip>K!ZpC3exQnfEgk3hJb=}&kDd? zr}h9SNVi)6<|aQ6fP!?-2*BL(?g3DcZkGT$MovNs(mgEzGf?YQfP!>81z;`@c>olo zdrAO_CwsDSNT&)s01DDQDS+<DuATO`3;<A&?g;^yKWgb!fP!?73&32V^8hGF_m}|8 z9p@eZ1?m1LfYp(6fP!?73Sd$s00rqD5kTVOE*V7z?g9$ZJuCpz+<S9?f^-iFz+5Et z04PZJpa9IDPw@aKNVh`(1CtGZ+TSuT2PjClT>#@E0VqiKfB^DD0#K0degT-q&YJ@i zq}wI{(^+}|6r{UP0HH4<3es&AfVn#3Re*wY_X?mx<Rm0vc8>stMgov9yITO+BLPU5 zZ4p3fBmfDsy98i{DZNQZ!t71~G>NPL39~x{Fh3H2gxT!^Fol^n1SHIE6M%X0ga<&v zY_kADKS)TJ-6{Z68G02UVRnlE%-?bH07#hKEP&AU0TO063BVNRUIj>)-6(+2#)O2~ z4FU+Age1&131DsHlaPej^#Z`_r{DDN%>fc-*9jo>dw_)5wE{4Gl~(~0X4gay0SU9K z1rWMUNW$zY0Sv%dn1SY$gxQq>FeAmwzZ;(jA8LWK*Y<&rmpzwtOx?G8Xa1zxV^<DO z`RJ|vh0Baw-?jcf-_Gm5BdIXELf1A=9q8KT@k9z=!i=uX!t8PZn6}UZAYpcy0L&FS z4}gT(r2;V5COiNVW*Y@C-n#)j01{@GL|1@>*#-fuiL3w#vx@~#FA{)+*+l{{KZd+H zK*DUj0L&Mm2SCE?LIIf36%T-f*#!bfjhq7{%+42pnIiNmK*DUD0D44LfP~pv0hn1@ zuL2~@)(Bu)WCci=trmb8pz$g|!fcfQszz3TgxN{~n5PhV6(C`@LICClFAso(*>VAd zz70v3EsF*qVYXBN6(c7h39}^vFlC812S}JL7QlIt6(C`@NC4(KwO0WWW(x&iigOQu zgxLZCm>DJyfP~q60W6E010>Am3BcU!>s5e+*<1lMjjR9(vpE6?eH)T6n=JtI@DFbY zNSMtMK(ELlAYnFB0Ok^*R{;`cGX&5mvH~Q`rVAjnGa_L&O#q7`D?q|*ssI{C0+2A9 zA^<bT=1oEpW|IYg1xUYA?*Wi7n<Ri%NRV!o)&n46Hc<fP7B>%ogxLfE)Q+qG3A6D6 z2z?omFdHWTGuiJA0SU9Q0tkH@k}w-1fY5b95@w?XFgJ1%k}w-30Eq|qmx1R13A2#` zC=Zwae?R5sO+pf8BLpxj5`cu+Z~>Uc&Z__kvta@-gLGxrevz0p`rp2P7W?+l&$~<X z-d^&Ock67}`NW<fop1mBjaJ1<Py6_);^n_!X*E;;W|YtaAZay30A`xg10ZQNSO8{- z$^#&2HAn!aFYo|JS`8GyMDI5A07zO55P-Se*#jVH)n5SS8j%M;(yE^TOm*u4khJP6 z0P}!Y4}hdqpXfP2(yF%r%x^-k0wk?^37})-ZAj9prvS|E*sB0Zs~!RfeHW0l>Mnq4 zkwZYzs+$1J&vI`FNLqCjK=sH9khJO|0Q2w<uL2~kItu^`kbZr@10ZSDNdRVh?g5ar z>L`HF+mNJH2LYHlBCi4@tx^RL`b9+2s=WZrFq>Bal2+{mU~aJS07zQ36@a<H#seT} z)kXlr@IjESJ@)`eTD2BHlSlxPR;>gO`b9+2s-*x-W8w_~NvjqDFmps607<Ln0tkH$ zkhE$hfYiuINYbilbOlISH4%WhO6JW0l2(lcU|KT|fTUF;0hl==4}hdqLjjn{Y7c;< zRRaN-VKxtdq*Z+ZjEKAqNm|ttfO!s%R{@e%bp>D^lk5SIw5lV3(A$utRc!%;_J$;_ zY6&3pdw`@>O#uvyybDNLohJZuucJ2!Nm|tqK<GCiNvrAtF!wro6(DI<O#tTUq#giC ztEvKM8950_T2&E1{YU_kR+R-{{%pd7{}fEj8tw9Gu)1WQZ*IJIYyKne{FJrJy^~Kp zGq~n`&1X&c?vb`#-ziryZ_-^}m2_=0*Isbqr`giVC1FO_W?_~hfXQC<JpdAB6$N0f z)O!FV%qj?=e`Eznn3WfRxk~F*fP`5&0bl{rFA;hGB+SYR!1Prf012})0w{$gNVhoR z0gx~&EdX<k(gPr2R!RVRn8CjcRDgt8NdcHILazcO%t{Er)I}Zu3A5q?2%Ur^%!&!X zO!j*fAYoQi0A*kb{=Wo|2SCEChycv&f(JmttgrygWWNVM!mN-0Mnw(*3A2LH6(C_& zKmehWkc3%&0i;9@0SU8w0tkH<kTA<DfHsj8AYqnA0H(3?ZbK4gxdmW)YY%{gSuO#D zPC^o9IRy}U8<H@~ApmoA#v1|>X4wU>Ch{&IVU|q*p&z9r%(4ogdt?Pjm}L<_pGW`_ zW|;+GZY}U8Aqlfg0%#Xm0TO2Cez%thy$X;p`&R&Fe#HYIVfK#z#zYPQ3A3{TSQiOE z!t8GWG>-%zVfL2*%#*0RIY7efi~!7Y89e|JW`7F6TqN}XNSOU00Gt9DS)?Li_PYRb zB0&aLNJyCd7Ci(c%zhO>-^dD(F#AOSW{%C9ge1&<7C^qp3Xm}SNdTei10>8&3n281 zh=kdX0x*vr@a6ysvmXQy`Wzr(c1i%<A}1jUvy%caTeBDD?ah&ftaXLI>vpLA>t}c8 zeR1}6oqDIXDbcgV$oua-H?rr`ZF`@)a97*Ek_xl$b!~HnuECf(iPa1VGrBhaw()oV zf4m1kJ;}EMFpZrDKt0I`0hn!}2S7c^Hv%wU10DeNBwq`_T%GX%s3-YK02RGQfCoT5 z$(I5!x43x#)RP<+z@W$qP*3uO0L;@zyb4fH^0@%a&fEi_p5&MS%m|wYKt0J(0hnoG z4}f}-BLXmwKk)#lC;3bO=BI!MKt0J}0W^rb4XG#jQ~--30jMYWL;!0e0jMYWSODe{ zp*IJpC;3PKW=r4!P)~A50HN;!>PbEnK;rW@*+fXUG~iW$dXj?z2>m9cp5y}om@D;O z1*j)^UjPl0RX^=->4xBjjR&)){lBU&c=pUAa~?W*c>1(nd4KPJW2=d^OW%Ix?iyuM zFRWJN=R61d+{!_^_XL2~Prp9p0Z@?cT>+R!;&}iRq&pyhDOiFG3;_k{-VuQ5t-T6R zknU{(n7^>>0Z@?cEdh*+90Cf`?H7Q#yU42m1?k=tK#j->P>}8o0rZRnpdj7r0x)+O zdP6`#x_tu36<Gla((M(1X=}U+P>}950hrqwJOB#Py($26bB_l=LAqB25c)c%Al=IX zm=rk)DM<H{0L;BL-Vjib?nMEZU&S5(1?gT8fO!^|2S7o(=LKMH^78;FNcUWH1t>_j zM*yLB0R`!v6~KhZ+mM2Ey9Howu<_;q1?irNt^ft;b_u{d_`$0H1?ip^fVo8D0Z@=` zrvS|E*aM&--BSV>5_uO;knTwV6psWTY4wBvLi+-eR*wt7++5+!0g_ga3BWuE$^#&2 z^*;fa`z$>Gl2(rjAW!5ZBx&`C0L(zGR{@e%4-3FFCLRDutA_+&MhQItl2#82pnc>V zAZfKj0H!<kDnQa|y8z6!Vh@0%)dK=Bg@p$|(&~Nzm;o9OfTYzn0fctPB(3ffz{<$G zfTYz{0fhDiB(3fhfVsKCn*$`R?h!z0<Peawx?2FD?*fumTLjQ5vH~Qn?h-)gN-0UJ zI|WcQvH~Qn?ht^v&+WkH0}{_piH_+H?m6_o6Xz8ebp3$m+fS?b;w!)GY=7IJO}{<z z+C{}u=Xc(fG)Q;5u07xTkDolK^M64)x;6{5+XP_tr5*qYv&{l9Re=XU!t7Q7n9|e( zAYpck0L&k+@c>Ae-7Em}=nD^kgxO63FdJhJfP~qN0tlUiB+PCQK-b9U012~A0x%DL z@P>ed+4TYlorEOJt`k6s$RQwMcC7%0M*@&AyG8)!$B;J%NSIwMfYy-}AYpcu0NO?Z zkTAPa0HF^e5@uHjz+9W~<^Tz^%LOnratKJ6T_ynY><zC1B+M=qfSKg;07#f^6hObo zAs}IPi2$ZY0+2A<AON#7_lAIk*~J0~?F&elT_gbWkZP|2B+S-F1CTJgPynVd^D02X z>;eH)io6R*n4K?x(A$uN**XCXj;sI)v$X;+eU&!{NSLh=fEge007#gv7QpDpAs}J4 zN&uma2??{60to#oCSkTh08Jx@fP~p{0W6FJAYryl0H!MN?gA2KOQQium@N@NmB=9= zVYXNR<|?f>1SHHB31CfR1xT1J6o9$I$EyGdvjqY$_d0q2B+TXuz&v@v10Z2GPXIk4 z=Ku+_xdJdxC-o{o!fcKJ@<&#HgxPEXtd0aAVKz$up&uk9%w`H8v^yqYHbVfRD<mY$ zrVGG)8J%u+b-A=zBXxCT&7U70Kb$gs$Zxg3`TfVz3r=?^@%R&e?D=u-oKa6bbhyWg zq{3{Pu5Esi=bQFZwzO+&hZ$X)h1paAEb?vu4}gT(6ajRM1R!BHSpeq2BVGkam`xIZ z>C8O<5@r(xU^;UTfP~ou0hlLGcmO2K#tXoF2zme{%*F}8{21~8NSKWkK*Pw}kc8P7 z0hp^ZUIj>)jTS)e$O@1!8zlg9jnb<C3A2#`FxRI%01{>+1Yj<XcmO2Kh6^C{T|mNY zm;k0kPC^o9Lj^EC5`cu+5CNEn(Rp)#gxO#LERU=J39~^0NR0#_VKz_zW{%Pu0up8e z1Q7Z?K*FrQ01}C~WaE(T)B&#oB+U8=z_c|U0130c0tkH@k}&Hdfd0v<pZ2#53;_wV z-U28e2|&WEmjF^C0Z5qj6hP>6fP`5O0j!Ly013110x(x;z1xt4SvLWgM`3vYB+R-B zpiATskTB~afVq(XB+NPsV0<J13A0WDm=Fm-!mOhJ%mj}&2}ziB5P-SC%L5=`mMQ=< z&*}k?Fl!$TK*Fq@08%0+Aqlg#0toF3NSL(|K)c8akT7d4fLxIPB+Oa~U`ZqZ3A2_0 zSQiOE!mNb=%<zQw93WxVTmWW>$^#%_)=U8AK~Nq53A3gGC>A*fNSHMdKxk(~!mP0X z21HhXgjpj2H1hy%Up(bMX*G0j(U&&=ymHXluV22k@#bsywJ7++?#`wEz52U7{VP_U zRC7N|tA+wFrKtx%(yD;~mPS^9q*Z+Z%!>pdX;n`EwITsXTGbUm)<^)7R&@kmp3CS> zLXuXs1z?^!-~o`dswDvPlgtAkX;o7IW^}*<AZc};0LDj7LXuWB1W-K^fTUG*0ThV@ zAZb-i0A`ZUn*$`RstUl&G<yIft*S)N0g_gg1rT}{khH2K05i+z4FO536aj?3j!9Zo z6o9Gky$X=Dsvv;wk<S5=R^<f{ItfWyl@mbd+mNJHSpk@Rfj0+8T9pxi8RhZ-NLrN^ zz|_b|NYbj50L()Hy$X=DDk%VSsn!D^X;nf1RU?Ohq*ZYNn2S_i1xQ*I6M(t9!vi2` zRa5}xYPknM(yE96LZ1U9tqKdEX5=I!X;nx7rnd8jfTUGH0fc^*le8)zfY8Q-q*Z<a zjE$TFB(3rZzznl_bAY5(UIBE9tN=-?JOU^b2|&^+w*az40+6)IC4k|P03@w)3ZQc& z07<JH0w@>>K+-C^0L%b`cN>zl$|iu-krg0ml~n+#kpLvEvIwAlBmhaP%mOfvq4DMb zNvli(2z?Zjv^w`&@aveQ)xQET_n3G?K+@_T0Sxgb;pnbEBtoFt<<%_Dk_qFE9I4fA zVwDZer*z(yyZFFE{Z=<9@oULD>f}s4_HNQ$UT1Y}b9cv^lgH_*`lt67U7LSj_-_H6 z=l#cf0MwKGB>;1;tp`9o$r%Bd;@ktEp5#vf%#Iua>Ph|(fSFzJDnLES?*cHBd>#Px zB)<v3Y>GSp>PdbTK)=X2Kt0JX(G{Sc<YxiQimU+jBtHot^fsiP<aG29P*3us04hfg z0rez52%uyn0QDrN1YmxRdCvjrNlpsD>`6QT>PfyAK-<V6pq}JA0fasWs3-YW0IMP^ zKt0I`0o02Gpq}I#0fc@LQBU%<0Ln&IfO?Xz1Q7Z<rk><W0hn3FI@i=MkXAEw2R}{N z(YfHuS#Q~MdgWa+OU^j=P}QqG{q2VnU9Nb3ZI-RQ{_2smCpoTbn~U`IFI${gP1FC< zwK>H1g#a3R!|wr5i0^X&^o|6e5Z^HYn5%<c1t`RKQ~+jI<^fQM?}z}*!)ZML3h{j= zfF_Z1fI@tS1u!QPfI@tq3c!rAdP6`VzE1>Tnj#N?LVO<!z<d#U02Jc;NB|uo=KzKH z4hdjVBmjl@J`{kt*VY>X3h^BjK-S0#P>AmX0hr&TUIi$`_r3tSMOJ`9eD4Xs6t-Rk zD8%=!0L=YW9sq^-4hSIhE}#(KI|4A52D}PTi0^Fyw2YjD6ykeJ03#v+D8#p40Osi< z-VjiT?@a;ph^zpG_}&nJxxdP*0EPHo7eMISkV1U>1dtLr1Qg=iD}cO_02JbTO#o)5 z-kSpy;(Jv9p?3iZvsVOQE{=E=AYt~h0L&bv2SCE?B>{xC=OoNt6o47%_9{Ta>;(aY zzKlqiJuiSfk<S4VX3q&=W+VU!vpoV>6bV4W>{$Vr0WNP6k}%sXfYA1wgxNC!2z?Ha zFxw@7HIZ|GgxS*qC>IGp!fdAi%<POe2}zheB>;1Smj^(?>`4Kb8#_Dz5@t^bASH4R zkT82(0EyNAWEAPnWAiFN!t5~tnA@8?01{^Z6F}&@fP~qj0!UW;#NRS71SHHJ5rDb5 z#~T6?W)BO%OcSTv&^ocOr^)-&i$}-j`h0Yqb(bxDxPR`Phs!+O^Kj)&1x}?DSXBJC zA>%u<w0cMY<~BzUfTY!f0x*~BJphtcI|R@PXJNWY=mC(l+AaWdozMdyY4v~rOl#`_ zkhHpA0Omo_9so(JZ337VIR{8u-6sIEFYqcr(rT*!Mn_hFq}9Cw!0Ttqz->s<>K*|s zMuH3gkhHp60IeedNLp<XK&?msl2&&Kz+9;G?gEllcM8CCMjil3t2+c>_5~gQNvqoh zU<T_w0FqX>31D#KBqV9ISpeo4JYEGzTHP8w2S{4oA^>xh%&P!NtD6O2F4ubiB&}`| zfVsuZ10ZR2qX5j-%mW~4b%OxRAd?3`(rS|c%uW9u07<Ls1z_e`Jphtc*9joBF(GMn ztpMsrK8i_NT_XT<hmSV|B(1I%z?jGikhHo=0HGhHB(1I#Kq8-;tPC0WDkf=lg#bdI zge0vl7eMG;K+@_m0hsv#?=B!|b*TUrCL8{=zhz(!khIz;fC`ZSB&{wHK=DWbl2#i8 z&@&Q%q}9a&m=Xy<(&{1sXo~>+%fKWgX|-MernK^ILy}e(3cxg{9so(J3j|>12Rs0h zR_6=AG^ZW_Nvm}Ns0mXrQ$`l4NLsBGfEnZQDnQa|jQ~QIXh>SE7C`7{IZ3Nk0$33_ z2S{426hP>5JxQw-0x%aUkClBc5d_vF{E8eUD_2SVJ!g}iP4|EPPu1)fJp90ln}6ui zZg$z{PM)ZB=}k#@c`etqO<i>J`_&R>RY;i8wON=g6M*>$@Bm1dEfs+I2=D+%m@N^2 zxjN$kkT6>;fM(tu=mC&0TO@$FkpLvj778GLBmfDs1<@5CVK!d?=Fu1493WvfPXH;A zLqNi8t^m450+2A9BY;Mc03^(23&1=Z)|&$)%w`E7aiCJNGNkKCJOC1AGX;<@*|pRD zmH_|~W-|m}E{=E=AYnFL0OmTi2SCDXngGnBFFXJeW>cd9NSI9#K%K}*NWyHg0L=4O zydfZAHc0@jA}c_`Y@z^6bMIAvgxLfEn5#1$013140x;L9JpdAB;{?zoat@F%8!G^F zbA?v{5@utf0Z5pQ7J&Kdx?TlHn2i#^#K<{7!fd1f)<y!5FdHEN)7W`KK*DUe0L*o2 z4}gT(Fad;ql#(zTDuC3;IY7c}hyZd&0+28pEP&9)goN230hEfY012~!0tlUiB+Lc~ zz;qSfZAikbzW~g2Y7c;fSw8_}jhq7{%=!wz%rJQsAYs-=0Ol4W4}gSOZvliph)9_A z62OAUIY7d!rvO41C`g#~5J2bx1qrk60x<Ke-XtVp)=dDRAEhMBx(dMDUgA}Ngjp8> z)Q!9gNSJjN0A4@6we>1M!mN`3%uMsKoG&Nt8+Fz9RT}=#8_#E2w0&OLTA44JTlnOL z5v>m%9<u6W=?7BljNf;DQeoCn*EaXo+`O=9Vq>KKm#)pitb+jD`DX!;FiRDHx!u{T z013190x*TG2SCECodDc#5o-uYn6(vv8RGLQK*Fqz0M_9%ApJtQRRI!atp#8{0=x>4 zFl!}%c99hzVb)Rr?n=Ei1SHH_2*BK1;|&1`v*rSD&An9t5@yW=5PBPuFl#D+l*ma) z!mNn^-0x9q2uPSU7C@!Q3Xm{sB!I?|03^&B3ZO<L012}O0;m%SK*FrP0NO?ZkT9z! z0QZaBx(i5{)fK?}$O@1!t0REWZ$c7gwFThzrPdITFsmg1H^XEBkT9z$fa#HQfP~q3 z0%#ZsK*Fqs0NiC_YY0e~RTn@a8kwvN8TcwDVOC85-IHBA?Qa<XAYoQj0Op~9-Zvo$ zvnm2eiL3w#v&sSpeGri_t0aI9krg0emLh<0kpLvjDhj|neZ-rDB+M!Zz*Pm-gNTG# zc>$Q`FnJXqVOB1B4v;V_D}a`flaPd283CB*G<!op!mP9a+(fT62}zih5`eo>Zvl`n zD=C1`H6jvbB?OQXISEOa6&HXTC$)xvgjq2G43De;3A3UC2>m7`VOB%{!y+p{!mO|W zLhk|+W`zV0`cX>4te^l~ZEW2IB+Lp3U~J?ZAYqnY0A`?e)|)*OibK-s^VNNuT{Efj zFE@QS=i5eK741=K{_HI&`DYwFn{w*I!v~ta#=kF|PXLv@3U~n27vvRy`9<UbP+yQo z0Oksb2S9y6ZULl54gvKAxddPy66{rg`huL%LqL5&4gr`8m0ks?FUT%{j*)YK`hsi% z$Q21deL+?M%#H-0z95SLQX>JVFUTwa^E5JV5>j7~NdRLaD?ok0xnF}{M${MlD*$uP zy*C8Z7yKgtbAiGGpuXU&0L<Rd1E9X(ZvmLv&I6#n;4cA~--I3j^#x}HV0uFjfck<z zqXDQd_(K5WBOgT67yK>&Gu7=40rdsH3BWvu>DTT*6ius{f^_|wpa0Q|rE2F`@<Nqy zD-Tq=y7BHuuGzU^MYji^dtu~(J}(bW8l?MG*EU;%6(tt^*OSn-IY{@50J?d@?*UMd z?q>m*0U8g0f^<I#pipE5C`fl&0Om@)R{;vr{V0H$krkjI-46mVGfZ9uC`flo0Omru z2S7o(lLD9;IRq4>`(6O!BLOH#_niRDwFz$sC`k9M0H#G&fP!=<1YkN#uL2aL`$hnv zcL4?Iz7~KPsP!s9LAtL5P%v^1P>}9R0hn7|y$Vo}?zjL<Vdeo)knRfsw2K@93etTp zfEkeh6r?*Q0Q2w<ZwM$zcT@moU+Mu+knV^8=0pww1?fH$fVtJxs{jS*4htakWkf-` zPX!SAB%~nSCju~|gx(NPknUpvREeB~6r}q|0PQ0IC`flm0HGfw6r}r503{+TK*H>x z0L)ER-XtVp_JIIQRp0@TFneDBp${SwX733g^e!M__O1ZT@Ps!6B+L#7z}#Bk0gy0z zM*ya)@Bm1dy)A%Fk<S4VW^W0gUnBqtv;6`vjh#0HB+T9vK(@#VkT82g0Ba)wNSM7Y z08<-#LqNi8p8!HvNJyCN6+pGfAs}J)ngBwZQxayc3ZO}31xT2^B7o54dJ<+Y3!r{v z1xT2^B!Ez3Lc;9D=pi6s_JRNgMGgT8v*!iS%L91!%kBROv+*U4-!QiB@eiwgS-gIw z`^r?h=;eDyj5&2~|E-VxyQ<cZ$;FZiv*&c}7T&ej&z|<5Fr#a;Fxw*lGs@}#kT82z z0E;3kK*DUd0L(3JUIj>)JtF{fnb-p$VYW*E=JqBJfP~r80x&al9smimodPhMA`gIs z*;4{&6L}YqFndw}=C_Df0TO0U2*6yQ@&HJfJuU$AtauNAgxO;PXdF2QNSOUk05u{3 zNSHk;0Q2}0ZwN@3JtBZrkrg0e_OJlV_=r~l5@rtxz)TT(03^&F6hMW@As}J4Lja~K z@G3yUY`Xw@M^=D@*#iPt5eY!T?0x}+z70v3Z4-bQA@b$`3A6hIusCuENSJLEz`#fV z5@z=bz|_Xx5RfptM*!s_D?q~RZUN+v1R!CyMF3`c!y5t;W_Jm|%+h)QB+Tv<z=X&l zAYpcg079RHB+PCXK<GCi3A5V-5c(h@VYXQS=3ZNG5|S{xRRE^9_5etj-6DX{yMTn* z%>oGhC?#QblK@O_?F|75vl|5v`Y0x0c7p(#Mm`Bim~9e3V%;+tMY>~<ydfZAcD(?G zC%bmq-!cF|!t6Q$gf3E%FuPU&p-(~*X4eQ{V&o8zFuPg+4I%+Zm|Z1+(7u3#*_8qa z?Tkp6T_J$b6%rC=mkVHd<QyPjc9{S|SIJ12T`B;xGy1f0`@|u7Su$nneNC%#PnOPg zaqhwUA07L6%Ss;}yr<ayMhi!0pS<S!>5G19$kJ+~0L<Rd10ZR2i2%$!b{+sps|^CE z=uJWofTY#M0x<Ke9so(Ji=qKYTCEpA^T;6}X?39hrbGgew7Nh5<_Wdl93W|Rz5qr> zR)D0{Isw#*1R!a(Rsd#u?hOG+t2F``A6WsCR;vYI{?NHs0g_g$1W+up0wk?g3c$>> zdKDmPwL$=<u<!s#S}hlVxyi}{AZfKs0A`la10ZR&Q~>5jsRuyPYKZ{M^#Konq}5^p zguV?)S}hVl&dBEgNvnkdFjvXEAs}hBKmg`%OnU$%t>z2BTqE)TNLtMkz@*4IK+<Zi z0ER>YkhGd30CTO_8v>G6vjt!-Qh5L*t!4?p+-&IqkhGd905i(v0g$wsA%M`&a*|fl z1rYiuCTTTI0A{M&8v>G6Qw1<D@;N}#YKj2N42f3(l2(%i&?d41B&{Y1AaoLvw3;Y@ zGLaP^X*EFrjUoX^T8$S#_ecPeR^tRvJraPV)mQ;kiUc5OHAVpD<_hmQK+<Zo0CGoG zfTYzZ0hq$Vs{l!>kpc+)AR%crLICCtAFl!=t%eJrMdTbHX*Em$`62;GS`Ce!10=16 z2q08gkhB^sfQ8-=94OZ#Pul-Q=1iG3FWYf?Ys)8hUU5&Z55NEA%l5}+ecAbg+DrQ0 z@cMi6x^C)vNzz?jgLG~4O<Z;NUR_oHB+TgAEX)Q9z*L4F012}J0vMh4-;?Zr(uF5H z01{^X1z;`>cmO2K`Uzlovj6zBzh$5TB+U8>z&sezs{jeJJ_0aT>OBAwX1$|_fP`5u z0ho=kR{;`cJq2J!iah`lW<8=SK*FrM0QyGWh9u0o3BcTN>kR=3v#tWD8Cd}mW?cjj zItfXbbryiRMCc6x3A0WD7!WxGB+NPrV0<J139}9YFc(L>As}IvDuB>QNW!eW0M<kf z0SU8q0x<Wvc|$<LtgQgbMpl4?SsMYgiUc5G)>;5LA^}L4wGx1tWAo+!3A2_0FtZCD z012}e0_YSu1SHIw3&1=I%c}qhvt|OQ8(9GoW=#c9B@%#ySrY-|jRYWJ)>r`MwsUU| zkT7c`fN_x(AYs-}0A_r|s{jeJ1_Cg*7I*+8%<2mubb*3|Sv>)Seif52t1E!kk&}>w zSsej{ewLFkt1STY2oi4+k}#_!0MlE003^(63c&moEf0W%*?9smw-$H+B+P0=&jAu< z)ddjxMMT1^ngD7<J_kscRTY4F1c^5XNSIX-fa$9|01{@E1u!Ra2uPS!5<sZ1AYqmw zfY4Pk5@r<zFg0=rNSIX+fVo8T?Br(?hw4gNjedN2kuUZ&z2<Pud_QfPyd}r2Rj%y0 zb?1l2ud4Fx){)1uuH)YqE-wI6Sa<-`7nBo#*&TZT)EAT$fSGIe0H`l0BLFj2?g3C= zP+9=y`K%rQ^#!E_VD9el0H`l0DF8Fo?Ez3<P(lFaj$aRe`hwyDDCa#1Jpk$piV48n z=jH)WUr<y4{UR$seL)ccgx&?z7ZetN8Km=ufck<$0x+9X4}kiDf&vJA5>j7KKmcZl z#j61I1^ESFHYOeb^#%C^&?oXXq`n}p0L+7Wy$VoYkVgQfu<!t=FUT!`m61b0eL*e( zn42rS3Q%8=Qvf|9D?oig4gs|H0PelHPxiF`3q{%%k2>D^(~B$b+FohYWn;&zS}<%) z=5zJ(eK{@9zUR8l?6`kq(jZ-SUE6#H{r1Oq30U<cbZrjOWfQ<!??2uHpdejV0hl{Y zJpc;QWf4Gu$O=%9F0%j<U1l<hbU`|=0u-dnBmgtc>;X`a?%Xf-9y<?!f^`21!2D%Z z4}gMn{|I1Uvf)qrTL$I;1?kQTU_m4R1?m14K(|N$3ex>0fC-TR6r?*Nfbx+56r}r8 z0Bs@xC`k8*0L%m9z1xt2biWJ0TqN}XC`k9402)LN0R`!PjjjL%>3$J_`9<yx0R`!P z7C^_yA)p}LPXf@l9sJ9{yMTgprv<PME}tn=1^_5X_oDzxM*>ig?gs&cK8PqtcS-<> ztvbodkbxnfAl*p;%u9Cdw7+ElfP!@23t)0200rs36F}&rn1XcQ3ZQdj1t>^&LICD6 zvG*vZAl)|tFuk=0K*H>60St{C0up9l37}vk012}%1u!cTfP~p`0fc@JkTCl~0Omru zHwj6YeJ+3|kwZYj?3e(|Fr`-k5@tsQP$;qjB+QNoplBoj3A4`xU~V<^hJb|GVF8#Y zPj~<%%sv%>dG3M-K*H=30hkdY4}gT(#{vlbCM03@kpRqOzgGbgW`_h|{%U~-K*H=p z0aS{74v;WAC;)SNiB|y<W*-P3bdidL+4}-8_c(bKAYt~N0L+7;JpdAB?+PGvfr5nD z0RfmxwQUM*PdF9{vylZh9DA`xjX`^MEWY%Kdb_6N+Pm@HzYmr9w|s&14bHywQJJK| z>>XX(?97kvxiqnyqW`69voL#G0Omu`10Z4cmH^COPVoRpnC%yU`3&*^NSM7T08`j{ z03^)b5WraPHQ)h|Fne79<^q`qK*DUF0L%|!4}gT(UI9#t90C$%uL;1+(s~sjVfLy3 z@<&#HgxM<sFrB4W0TN~}3&4C6djKTNUJ`)W6nOw7%wCM110>8|5P-Q%>{Wn-+4BN0 z1Kl0~3A5(}V77%G012}_0tlUiB+Q-_K>x@G5ec*10x*|}y&)iB_KW~VL{@-=*)9Pr ziv%EH_Ot*(zXwQ|?G!-hHz5hLrvzX&McyPNVfLf|%#EHN012}v1kf&W5|S``TmWXC z+N%Hwv&RHr>LL$-gxUWDU}hOT01{@83cyr`9smimM+9IVec=I+Fnd@4=IV?GK*H=H z0pyIl4M~_iD1e!f03^(I2%v2w013100$3FZK*H<+0rZUoAYpdD0L(zGcNdT_+a>^0 zmUsXp%<dC_c|x)WK*DUR08DM{0gy1eR{)`{840s{1YmA0@G3yU>}~;sew30h+aiF< zk<S4VW_Jl-d?Ww~vpWUQFcN@-*&PBf&Am4XNtoR(fHjd7AYpc!07AQC5@wqPP$jYg zB+PCVfSF&}xuu9ynf^&ybzYeI&6tH{`fsX{YvW&qa^7>nP4{Ox+xU;vjrkhw&wW+a z;w-Ih5rFBfJphtcHw(aYMjil3tD6L{$eRNm07<JG1z>)bdjKS@ZV-Uk8F>ICtu_h3 zv}PUvNvrDxFeq{kkhHo^04b3GB(1I$fa#9CAs}gWjR4Hou?IlX>S_U)X-*G-q}5dd zFn?v+10ZR2r2xi9PC}AaR|vq&wR;sHX?3{(%++!afTY!B0_YGq1SG946@Yp0gI58P zRvQJdG_nFDtu7IOxmfL0fTYz10hkBGdH^J?E*60KyA2)yNvn$lV4718fTY!W0hmW$ zcmO1=E);-y2#^Or(&_>MgnpEgv^rk^bt0bwB(2s7AoOKK(rT>$%#*0RIY82CjR4Mz z90HP7s|C;?5`d)DDgl`5gx(O4v|1^E&<_%lRx1QxF4ub%AZfK+03{;l07<K50x(z0 zy$X=DS}K6ykrg0mwL}0zA^}KREf#=z_<}bCB&`++ASJQ_B&`+-AoR1Gq}2ie<c_QW zNvrt+SR4sJ(rTUnOm*u`LXuW<1<)w60wk^G2q1KYgrwDM0fasWNLtMjz{JQQAZayI z0F5I7NLtMhK<IKkNvr7s2yISDT1^u`=v_e4YN`N2Kg&s4O%Z_Uj!zuRo9HH`u8J<- z*zKjC?=N<+TgM-+zJ6ZjVs|dPtJ|)wub(JC{msb>e}6FPF0aYDw%Hgz*0jZc!i=uX z!fcWNrg?Xu2SCDXq5#Y#LJxq1*#rTsh^zn!v+)8j*CxCQkT4r30CQ=;10Z2GRsiPN zupR&jvoQiN_c(a~B+Nz&V07dpBw;p60HL=b3A2#`Fe60X5Rfn%A%Mh#HQ6|%I|#}H zAYnFK0Okj=2SCDXm;lT;sRuy9Y^VUtjdmUY39}&rFjr|k01{?{1(0m|CH|IyNl3zM zkO0i@QLh3d%mxaeAC@2k6(C_YKmcZV!m9uYv;G1wH&=K7B+U8=z})BN0gy23D**E- zEDwN$Ssww^i=2cc%z6u;ZX^H+vt9xSeH)T6>nQ;9_!DmqkTB~Z0JAOh07#g17l4^z z@&HJfbrXQO;no8nVb)aup`Ya>%(@65v@;@M)>#0d%_#}9P6B8i`5+=;)=>cKA^}L4 zbr3+gNB|OMsRA$;$h_N-gjst5m>DJyfP`5)0fgQKB+S|hz&s1ds{jeJHUcnDC-neG zn6(x_Xm3cutd#&NMBauZ%vuT{^m~AWSqlM#_5~!&nhPMbHzZ-!OaQeb=Ku+_rUEec zI(oMu39}{w$RAk&5@wABP%9FEgjpj2gbE81W(@_fFtP$9%o+$Fv^^(bR$l-kyb9bl zCr9ENN<HPK?x&vocuCPdWmX;8zH!IqCt9cG&vkXzQ&*S%c-hh+N1A_~RG8J%wax8K zqn`OVTN-T^zBd21aa{qJ89EPudXhQ<FuO7jfO?YJ0x*v~@BpYMsU-mO@DC4wdXky~ z=<3}79su<u=Lx`Uj6DGANook7TVw^OC#fy~^IOEL0QDr*1YmCP@&KqOsVac1kwZW| zNfiNvJ_)HOsVo3<qo+3n)RR;afVn*60Z>npB7n(}bAWo1iUKerY+ePZC#fI+b60@} zKs`x$0hn!}2S7bZIRT7}oCDO8lof!vHsMu(dXh2%Fw?{y0QDrL1<*2b2&gA1C4dEy z0MwI|6hMtg0P0Cf2*6yUTyyy*bp-mS|NW>*_BCH^?*G8SXCG<*)gAYYf8d?J7HrLa z`e4nHkKXfElcS$;kgm7@dUzG^04PXTOaS#G0VqgUQ~+jQ>Q#V(bVUR(II;p1q$?}{ zGsEOnfP!>|qANf_x`G0j8aV_Mq$?l*b6bNq1QevpF96flcmNcn%O`+QkwZX1y1W7? z83{l^x;z3H8wo%`y4(UVb8Oxmpdei?0hqm^2S7o(oB~LR90Cf`<q&|mMB`O}f^^vh z5IPAdNS93j=Ee@M0u-dnDgZOr?g3DcE{g!nB%cRBLAuNWFn5}I02HLlB!DuJw;=`T z&ix$xRZKy;e+3Xa2`NbTj{rhHNGM2mRsiN<;oc;qAl=^rSRFYDDM<I108DM{Re*wY zX9Qrb4|o6+r2A6<B_fA_q}3k+NQnd>Y4y7R%rK=l1SG9~6F|Gj3Xrt=RRHGUpk4(? zTKyt`@{tuFY4x)JOmFQ~fTYz=0x-|&_5es)ofd$ZU-1A)TKy=1&?g~Ds~-fgB61Rv zv^pgKbFZT}1SG9a3Se4f1xQ+bFM!a_h@{nb0to#kBx&`n07BmdB&|*ez>JZ3laQp< zHv*^_ISENxeJy~{w;@TZuLRI0vH~Qnz7#;{qnM=C@#qSWwE98-q3t<ItIq|H;?02v zpWRp}?f*hSx&j+dU3%@?a~IEE_}YVSUa|Mb15akz{d2!O?`?hjz|pfg29Hk~q&uc- zoA04_Zan;-Fr#a;Fgq#$vnTNYNSGaot^f(M&jet8k9rj#VRl#mW>e$=kTCmH0H(9_ z07#g9A^>xvrw2g7?BnPmAYt~A06KclAg=->%nk{_-0bTCkTCmD0P`a&K*H>x06Ihh zkTCl|0OpyH-Vl&5dtU(NO1%d_!t6Z(jE)=v5@zoTz)bLX6(C`DKmg`RXdVCwvv&kw z#>hMX5@v4;z+5Qz07#g<B>;1I$O9l@wqF2qBkuwdW^W20@rjv?BHiI1UIj>)y&-_I z$*!IDw+sM~Fne79=H3Rc0wm1#37}GB1xT3f6~K&001{@e31CVj012~K1z_%N@a6ys zvsVNV`XC}<_ObxX{nlOuNSM7OfNYU-fP~qL0x(zVy$X;pdqDtZfW`wLVfMTLT15^4 z3A5(}kUbKBgxMYegnpEgFnd-2p<hHK%yvfukT82j00ScD012~Q0x;tv-fc+2>}dg1 zkE{R*vz-DM83{nb>?r}5c~)--NSHk-08^NG03^(w5J2cM9SO6?1z>JD_9{Ta>@fkP zL{35yX8#j_sSLdekT82x08Jw+K*H=10ferWlQ4T&0HLepB+MQXfNAc%IY7efK>?Tv z9uI(o*$x4ijmgb38zy$jOPKZUSnbOni;Vg`XR8ZGXYPB+#$%1THJbS9wztn5+B^O9 zzAeR*3bXCHws|n=!&!G^O}k~Zra{+cVfKIk%v}W@0131E1z^rU4}gT(HUV_=o<SY} z3A6hI&>|9mgxOXBtc?U9VRo+oszm~jFuO+pWg-DcnB6UaC6NFm%(e)?Jaxdk3rLvV zB>>ahdjKTN?i7Hz>E8n&VRnZA%t*TjK*H>H0hrMh4}gT(Z2~ZV#mxgCVYXQS<}$Gd zK*H=+0fasYNtoRtfM$^oA`)gd3&4yJc|$<L>?Q#;h^zn!vl|6qc4b}#NSNIq0Mp!i z03^&d2_W=AM8fQP0W^)A10>9@6M>@rHne*|h>Nk3sSPNSIwC0CT6Q2SCE?Y5{bK zoC74xt`b1#T|mO@N&%P=B5w#tm|Y=&s*yuL!t8PZ^o#@`VRo4S%uKyE1SHHZ6@YpE ziU&Z#Y@+}|S4c>hT_OO}S$Y*9VYWd4<^eDs012~;1rYjGOv3CU0n~`R4M~`-7eMHv zn1tDd0x)HXHwQ?VT_Aw*kwZYj?0f;3XY_g%AYryn0OKMnK*DUT0213Yl2N3Kk$Dv$ zVYWs9=E0C20130z0x<I{9smimRRRcItR`W$QUIls4S(9-GB5{7n5_^%Xk$XcY`FkJ zpM)gLmI=U&m3xzrgxOL7<cypHB+Qlwz`P5}UAFbVU0yRARG+=6<;iYE9~s`Rz++#Z zd8+5e_czvm@x=v=a<4Bo;z)6pR*MB-Zm{tHNLnotfSKO#07zOb6hKXH4tM}0triGi zdL#fztN8+0770MoYMua0XXFh5NvpX6Fjvbx0FqX71Yo`kJOGkbvjt$TmU{pst!4?p zR5l&}NvoLx=oNVvkhGd1fY3=u(rUT@CPh|&q}4P5m{CG+4v@5(DgZOr?g5arnj!%6 zbW#t1q}5~rm}|uz07<J!0%#aH2}xQ_6o9$M$*TZKs|f-y*9koUl2+pd5PBDov>GRX z(2r7*R$~QV=GeR;AZay50HY%B0+Lpv1z-l5yb6%C8YO_xNl4OaqyXkb4gpE45dsK( z6qB?XE`Z9B6(DIfOaNx2*qekTt%eG~Jekr1AZay30Hq>_fTY!60hqtt;Z=a7)gS>h zimU)htAPRt{Ujr4H9!ENpXDU2`U}8x$KD(uY1K~v^CRZ~NvpmBFn?3hs{l!>J_0b! zsRuyPs<!}4U*G|dwCW{*l*l<i(yFHbQX>IKTJ;b>=*x(tRd)fH8*IEeK+>w40A@uF z0ZFT_0x%O4UIj>6brC?z$O@3O>KqL~(yEgHOlRZ`0ZFTl0x-jD9so(J4gxT9#U21j zt5g9L^d{lPFRx2vue8hS?F%#K8*q5lnI`#rop|luTIa2Ovcrv;PIMde#8vgD{GRpB zlSy}Zwb!+ac-LMzd&GajjIPbUFWgQ5=Gue@Ks`xYfA~EB>PgxN!2A^O0H`NvEr1r0 zbAWo1RszsOhJWdz16~EFCuu1F(^Yr?)RVLjfEld!0H`NvE&#JD^8lzPX(j;kJT?!2 zdXlCBFxRO)0P0Da2q5$>pq`|$0L&PfR{`ot8VSH$B=rEOCut}EbAikQpq`|G08DG^ z0Z>m;UjQB9L7XX51|G%KlhhMH=*x(DlDYygk81aZfO?WT0x+8*4}f}-+5#}YM?C=Q zNoon8c;qCco}{J#7Dob5Pja3B%>6Ci5KvE2LjZ%l3e4|3F|kWpFR=>Wq^uu4@4)QZ zZxnB_Vank>htE5;D%*+6KK(k|ox|IY8CEB0Pf}giHn+B%eC_CeCr{9|ImA~@0H&z% z04T&)RRHEDKM#OHd{qRn!W(`MfI@tg1z;}FdH@vSt0aK2krkj2Uy1;hL;_HVuVQos zD8yGm06iirKq0>J0x-8Xd6SSreB}htDY60-;wu|n0SfVz5kQ^D3Q&lzv;fT2L2nLF zh_93Y=0#S3LVP6!V6IJg6`&Ab2?3bG)&rmrUvUAL=dXAG6yhr;0CSPv1E3IJQ2~U0 zl2M4Shye0N-USrmD=YwWq1+n+3h@;Z!1%}tP>8Rf07Bn}6yhr&fK`zdpb%ev0nCjA zpb%d^0fasWD8!dHdI%`Qmq!2#B8PxNe7OZ+MpwM&0EPH+3BX*X^#Dki<rIK<29F0o z!YqdXibl=>5@y*2U?$4F3Xm|%CV=IU6(C`jRRHGB60ZUz%(4g|^plK)S!MyGL=FK7 zvrGaAT_GW1cJ3$JTYGbWgxS9W2z?HaF#AUUW}4Wm0130R0to#iBVqQp08%6G0up9_ z3BZ&k-Vl&5J0k#dYl{a!!t750G>9Am5@vr0z}#)@Re*%q?*cG)mUsXp%zhI<#mFHb zVfL#4W<~;#F#AOSrnmNnfP~r40tj6tBVqQFUx6hxFG}P+6gzq4%GbYJmA&ES%kMn= z+*9`zytDavb*i2nFsVnAiA5^Sd*ziwEUiupz}#8l0g$x%Q2@=oN$3HPwE95+<{FU) zK+@`z00u->fTYz)0hq@gcoiUN^}PVF0O{i+9so(J?*uRf3DV_PJOGkb-wMFYE_eVW ztxiM_0ZFTG1YmZ@UIj>6eJy~+k#m5g)mH*&8wo(t>PrFCjRYWRbzA`E8j&{#NLqa% z0CT0(10ZSjxd6;VfII+_R>uU88aW3@S{;oBAZc|(0A^p{4FO53&je65atKIT9Tq_S zNC1*np9;XVX5J8xwE84^4v@6^SOD1~hk&HjM*=W6*my%g(&~@^hDTO_q}7K4Fk|Ij z1xQ*Q6o9$Q&;uZ8^??8yMGgT;tM>(9u9SKeAZhiU0L&de9so(JcLiV`6zu_!v^pSw zL`F8*M94sAMAGUV0ffGeNm{)v0Q1-bZwN?Qy(IuM$m9W#wAwF#TFHh#?Qa>F10=29 z6hP=25lO2z1h6Qw0wk?o7eFE=pNt{{LqO7Mp8!I?2}xS*jRqiT^_l=WC#!x&?*fum zuL=OKpOIBEl2)$>z}#NqJ%~tJy(|DTN#y~Mw0cPZ!*C2Ta2t}edQkwiBLPTSy&wQH zTkZ`3Nvr1tVCITF0FqYE37}x)5RkOmBLLGIdKDmP^{fB}dljhD<f+8+w$#<<cU0U} zYTV2_-h3*1?_noC`tjJ1kJ`5__|^wEmKfe^*lRtiB;Dn;Th}h+UAz9d7ZYEw5@vL5 z7G}=~z+9>K07#ha62R2R3Xm{+S^#4s0Z5qb6o5JZydfZA_LKljRp0@TFndw}vm%Fp zgxM1UF!L*31xT1ZE&$Wmc>pBL9ut5WEB63MnEg)x=K7QeK*H=%0gR5Ege1%!5x|5< z01{>o3t(v^012~)1kf)MfP~qD0x*x^@+Kh(vmF8my$eW~Z5KcykCSX1(zOI$1xT1Z zAOJJP<pGc|yI%mND)0bEm~9h)`P(rb0131E1Q7ZpBw@By0HIGp5@z=bAoO)i!t5Ra zm_Oy_%>fc-cMG6<vPVGL-!kwVAYrye0HN;!5@vS^!2Hb!ZwN@3-6??VkwZYj><$5> zMgov9yIlaLH1&pngxPHZFyo{i0130r0vHuJ1SHIE6@a-??^S?=*)0MvWr+ts!t7=N zn0p;P01{?53BXKoc>pBLZWKW2$Vo`T>;?gtkz%g`B+NEN4*?0Y>jhw*$>&vogxPfh zFn?3h10Z2`tpM6bPC^o9*9gG$)?Nijm|ZOZGr!^ikTAPS0HLiJ39~B&5c*k8!t4qG zgg%N%m|ZS_(3MgWW|s*d^oxju*`?6{B+NDnAk>(UFuOzmq3;3`W*Y=xHmB!ZJtKG8 z!&_@h+xl&KtIFv%g*#O{@aCq^7QeOrr6;%SK9~CO$?o^f-+ar0qe+F?#k#h+Mwung zmc)vdgc)6%h1o>{FnbaYfP~q40hpb+2SCE?LIDi*-ozdN39}0XkT(*5gxUE5Fuz5- z3Xm{cCjj#)>;aH4TPuKxkwZYjY>fcS#@MR>3A5D#7#CRq5@xFeU>*$VRe*%qN&)1G ztN;nK6#_8#*m)HoVYXZVq0a#lX3GT7B60{wm@O5+l1Km&W=jNM_NCq&AYryx097I@ zK*DU10L+DQuL2~@77D;TgU16PVYWa3l_H0LgxP!nm>D{+0wm1l2_O*)OIC(-w#EY> zVK!F)=H?y`fP~o`0Tf8~AD{NO3{-%G*=zyij|3oLHcJ5JZyS3<K*DUM0L;GB10Z2G zLjXM^hk%6HbOD$#GOq$8%%%yzj1qbPB+RA?AoP2HgxM4U)QX$~B+MoYplKuk3A0H8 z2z?TgFq<fV#DYt*GGyRUOu}q}06HYQcG}-E06@ZQya3GoRo-n#!fc!X%uRkC0130P z0x(^L2SCDXi~vHPge1&H3m~*NBw;p60HF^e5@sU>pe0xMmx0@mgxLrIRD{d_zn}5) zCLsy4;Q|O<At7NlOaSKYBCi4@%!Wn-kT4q}fY9#&5@v%15V}}R!fcQLOmFSY0TN~d z1z_e`JpdAB1EPn3gjs(9m|w*mZoDD!?9~6>+pTo%oA&3Ny5Wf}E%W}q?8I05cP?Bp z^7*yrpU!c7%ZQ_e`1ghT3BVNR9su<PeFcyZfXSZ6>D~n%0QCiZ1W-NMwbTBV0RZX? zdJDjelX?}PzMz)?%q1ERfck=-0x*~BJpk$pdI-Q=qVWKzFX%3SHIb8$`hso(C?5$x zeL+_Nm>;Fy5Kv#xMF7PjD?oigX90|f1fag4lK{*uM&1xmU(itir6VgqeL)8Sw2cIy zz93ZqW?$e90rds#1z@fbc>vTGv=czb$RVJ<psfJrMFLP?&_)1ebLtHN^#!d3V4hg- z0Z?DiN&se-(F35qprruJH6jmy`hpe$Fe4oIUi^OI$)Oe2$KHP9`8!IkD&FU=3oc#$ z{oZ$vW?8;#K>r^H&28O%Na-J5YLGNY*Id^&&;My!<dVd?u6h!>HV5gN380#H2YLV$ zq-!dGqLBa;q-!F8s*wN`q-!jIZjk^Kq-!LAl92!uq-!Vub8*C*gcPJ}AOJH_?g3Dc zuD$@wBN;sa3ewdRKuY8spdejc0hp0uuL2aLt0RCekrkjIU2OrFO9Ng7C`eaJ0Osn9 z2S7o(ngTFC2R#4^(w!#&^OS54fP!>21YmxVdjJ%qt1bZZN3J~p3er^*z`DrWkb-no z1z;xmyb4f|u8II=L{@-;bd?1#F%p1+bd>~PZf)^~fP!=>0;mvK0SeMp6hLTSKtZ|+ z0tmegDM(jd0A`}sn*$W2D<^=Qk#m58bY%q)dKXZTu8aW8HA-&?C`eaY0H!MN07#gX zimm_&vyuWZw-$I6AYoQQ0Orw{9smim;sP-Dxp@F2%!&!X%&~a@B+QBmz%+Iq012}q z0tkH$kT5GO05eqWRe*$9ApwMbmXk0mD1dg6FC!9W1q3i85`ctRegT*fB5w|mFv}-^ z(A$uNSzZBzK8i`0<q<&b$T>j5EVlsqMgov9%OwEwd{%D~k}%6DfVz<tAYqn60On!! zUIj>)Wfwr`A{7a<Yyt>fswH8TRRE#uge1(e2*7+2UNPgo#LhUWt3L*H8L?&iZM7@c zuR3k&+56V@8UMw(&${%xrOt#0_dQm*^0=hJEVHhi&|k^!f^-S8ZM(K4{{Kpt(Y0Ba zWfH)+WY<pnTLu6~n4LRqM_IiJkTCmK0OkUj2SCE?9|6pX90C$%X9ci45`cu+-vTi6 zQ{E7eF#AgY<svIU!t9Iy%ynw70wm1-6hNuS3Xm}SLjdOXCa(e{%zhVuxkBdwkTCmA z0D7jwzYIKzNtpdAfNXI2|F^Zps{jeJUj)!T5`cu+&jRQZ2|&W^CjpqNwB8VqFgq=P z5s?)jVfLc{%=Ia+0wm0S5P<2cJOC1ArvzZGO?Ut#%uWixYzsXA5@z2Ez&wY^10Z4c zodC?eH68#7vu_1po|f+ckT5$TfD)0<0TO242%vQ&0130N1rYj8NW$zZ0nCi7012}% z1rYi!AYpb~0KFnBK*H<`0hs56d$%D8v(E)!X6iiv5@yE)5c)bMVRlpi=JqD90wm0i z2*6yY_5etjeI@{NiO>TeVRl#mt0Qki5@w$YV0t6~3A0ZGU|L&m2uPTHEC6$>s|P^B z>>~kmjT{0JW`_hYKN5h1*@pr!BShX1kT5$afY3=u!t4V9m>a&m3Xm{+UjPLo=Ku+_ z_XJ?-BCi4@%-$71=qDKovjYMM{VXS8_KpC|ETcCBB+T9xK<I5q!t5;pbc(zSNSN&x zfVo_Mq}lC>rA__sOV{UUe%tfaX6AkFx}Hyzn$v5{cL#HhYw~TOBKJIfwA6_+lUQ24 zDS&}q1v~(fR&NNvT&VN_NLsxv0Q1LdJOGkb`vhQS7d!xxR(l0t253A0l2)$?U}@we zBx&`k0L&+$R{@e%uLz)HWCciCy)1ynkpLvEUJ`)0MB@zsNvjtH&?d41B&}W$fZ3dS z6(DK#yZ}Pq1thJW6Mz{X@hU*lYL5WS#cB_Lq}8(m=ovW)Nm}g|0A4>+I&<n(fTYzk z0$70r82}(@wMzh%BLPTSJsk}|(rTvwOk?8B0g_fv2_Spq5RkNbQUIxu03@xR5P;bo zdqY6d>Tv;>+sr%wl2(riAoN{8(&~Q#FxLsa3XrsVQ~)a@Cm~6zM+9J=0OD1Eq}9U$ zFnxgsK+@_V0fhF3B&{A4fEld!DnQa|hXBl@usi^gR@((&t`&O#B&{A0fN9M<0FqYs z3&7lD<pGei+9rU|+mNKyeFA71`6MK1wN(ISn9Umkl2-Q$AV*{cNLt+^0P{35uL2~k z?iN7k+mNKymgqS^(&{b&nC{pc0+LpD3SfBTBqV8dhXC?L0+6)2T>w=h0Z3ZiCV<e7 zQj%7iqX9@--70|4w;@TZTLe%xat@HRx>*3BlaQp<O#&F>Rp7QvXA@f@v_tETV<q?O zyuAGf#k!x$y7!tIOOKD5v9aDGFSN?})I-_xT(;v_(p_FR>e_j|YnRP5C=tb%Fr#a; zFuOqjH6sB?m~9fkvPb|DX4ebA{2KFyfP~p~0+<?E0TO1{3c%du<yC-$*)`DsB+RZB zfElLrDnP>QDglg)oC74xt`vZ&4801FFuOtkSb+2^^&S8Tv&#iwYGV(8gxO^RFh2)9 z01{@G3cw6ec>pBLHVPm=PJ(o@!~-B<c8LH?YwH1!Fxw!2(6=E8vx@~_Za4KRK*H=I z0pJwK$a8>%*?Iw(uEMJT39}0Y5c)14VRnH4QgIA2a2t{^J6`}zA^}L4trLK`K<3Q> z5@u@!5PBPuFk2%4Gu7=?fP~p<0nCV;10>8=2>`F3kp~e8vy}ocf5OQd0up8`1TYIr zkb&m_3A5z_Xb=fN!fcrU%ov$B1SHIs3cw7|cmO2KmIxqpfr5nDVgZD<W+coO37~Z3 zBqU+BPynIrISI1`0x*{dy-7&IY`y>%Mh*c9vv~qAy|q^X5@vG+5c(h@VKzqq<syfG zgxPEXXtfpoW#DB*!fciROjqH}0TO021z?`X<^hl}n;`%*JmCTSA8ltDtYy`<VY<7! zySuxjrMtVkr0pQYM#VsE5yb!uL{ShGMa4ixUr|9tL=*u<k?)+nXPDXFkLQ?k_FVjU z|1iGy!L`;M*E-I%9uj7g1kea(!2dgj#seT>Hc<efw;>6$2?7Xx5Rot&F90({<qZJ| zvvC42_c(a~B+SMNAas?CgxMGYn5V#a6(C_YS^%}Z+wfF_w=YSnr=QrmwAjsuTII`B zcY5y)JL+!Qbk&dDi}hdGx?tI&>py*_EC0UmC;^xoY&-z!3q}gS+~?*2P+u@Y0AnME zfck>r0+<yEKz+e50c48=puS+J0L(|RHwUOM7$N{OMCAccUocnzy&{Kz`hr0MFdxNU z1*k6=D1f<<6`;OgfB?)xSiA~QU(jCwwIVA(eL+6~w2lOzzM!uF%=~~i1k@Mw5kTnM zkotn&0x*|qy$VoY&`SX39w!fg`hv>^P$+T|QeV(h0A_pcRe<_}9s&q`8Bt%*T>zm^ zLh1{;31DR89H73Ss{m$10#IMjMF8eXX}{O!B=-ec+Bs8n*ShJImfp1J^ss7U7JolI zQ}+w&tM<IL!Hj<G=ZsiB^tXgTy3V?G74IKEyYQam|3E=Hx;6*tE)zh$NB|1bbrOKN zKIK(_f^;1PVD_aR00rqf2%uo(5Kxe=y#UO`5w8Liq-!UDN|6<yAYEGljEMxGAYB^) zbch6?AYE$#OpFAeAYCf~q>lukAYDrVn6}2d3n)m}LI5oyD?mZI<^nK#60ZUjq-!RC zmXQ^pAYD@dw2B0vAYBsygib;V(lr)9=m!Y}=^6<DM<8W>#hZi_q-!Vub8CwSKtZ|& z0x&;_Jpc;Q)fa#nBl7?#NLNn)m*XTzAx%913ewdTK<Gy)1?lQU4*><~Y73xy<PcDh zu9g5sM*>iguBHISM*>igu7&{2Fr{}FP>`;=0L*1#4}gMn)dXNlQxAZIS=Hz{K*Fqw z0775KB+M!cAoOiW!mN@2N=Dv>B+M!bpk^ch39||UFr$RtT|mODya3Ge*gOCdX5|FX zC2|Nzn3WYk=(~V~S()exkT5GPfY8@53A0iHFcZDrBqU*0QUGR*%mW}{Rzd)w>x3lC ziVGlgrIdtOF#(j0d=8K>D=L6tkpLvjiU=TdeSm~nVF8$@k9c<h39~{1F!#H903^%` z3ZP-+93Wv<KmehyV-jZh1z=9XhimjmPP|B%jT?1er{dpbo>OewZw+=oQhHXU3F|Y} zxc#XW3-13e=WFdIXGkc_^6A><UfVN&Jt9@6Kl)#~HVd=70x;JmJOC1Ac?4hvH#`6m zX1N8Be2hq<yCB8tj0Zr%ESCVLCc1Xg-=zY8gjr4jm?1u|0wm0G2*7NNJpdAB*#%&J zi+BJe%(4l<d=Gg5B+Rl3pl9SHBw?0C0OnKJs{jeJ%mT<4SpgDenFL^ldA$mdFv}=_ zagh}uVU{6!2uPTv7eL?03Xm{MCxE<>03^)P3c&13y-7&IER6ulMpl4?*~Q;3UMw65 zK*H=l0hl|?ydfZAc0mAnA}c_`>|X&4jRYWJ_KyIXL;{d7J1+n;Q}4|I5@vr3z+4>h z07#hqC4do;LqNjpoB%?<h)9^76+m(<Gf^2*(HD>~J0pP5uVNBre+nQ+qJMnS-=(4g zB+O0=AoOKK!t4(Lgm%Xy%zhWZw8$YKVRkASfP~p^0x*@K_ar1?c2WRlmeB(sVfL#4 z`b5qF5@sg^V4g(fRe*%qF9I;VwFf}L?6?4`Mh*c9v!4afHWGk@*-z1PfP~qP0%#Ul z0TO1%1Q7Z`Lc;8*0L&jQ@$Lc=W<LlZbcu$9+4ll4ql8`sNSJ*mfY2`@5@tsP5c()4 zVfL*6%%5!VhJb|G{{&!e^z;Bon0+IFa*+=r5@ufuz|1gpJC*;Ev}!i1bd@6&vVU0e ze@_)|-tMxc&Da0axnJXb@3hKPY1%z&pZJlb)nNgc+e<tEl2%^{pqn=Y9so(JF9l#m zh&%w2R$mC9VPpkJS{)LA`6TozK+@`S0c4J>07<LQ1YoWcdKDmP^{D{NwPFu|q}3+^ zFjvbx0FqV*1z?`N;Q^4e`d9#_zV`q~T74t{^DHh8fTY!j0w^DO8<Mm-Ab{bK03@wG z5WwU}0FqYk3&32g_T~UdtNj8nGtC|VNvrn+U<wNlfTY#C0to#gB5C!G0L%=DR{@e% z`vkBk@-850^|k<NMFNnt+A9EaiN+fOl2&^JV6GK=03@y65`cL`t_MKU>P-Puh@1l? zt#%6_Ya{?kt2YE-ZY}VJfTY#y0x+eO2SCzlmjD_?4gpE4*8~vS7m&2tDS*&#LXuXm z3Se2}5RkNbMF1Tm0Z3ZCECBQP3GXf-Y4wr-Ol#%=khIz%0P{C|JOGkb+XY~TT0H=g zR@(%Syy%u_CZ@3G9so(J7X{Ef(Y2HQE)@VItzHm7==T6gtLFtUHnIXFt)7bpAZfK# z0Olz$-XtVx^{fCwKS)SgJtF`!*6US(q}3Jyw2YjDB(0tnK<J~Gq}65tn8w5#0+Low z31CU&5RkNbQUGNl0Z3XsA%M`{kfhb)0x0EGU|iD^$+kIdnlvSI9NV9v<;P8q7yhr< zzFYS{zhlOrEiM20Cf!@_f8O!^S6@GvaF^F(y7p4<+T*8nO8$P+8=S7q!t7B2jEMvw zVfKgsrbhyhFnc(<0wl~f3BWvk#G3;o%pMYex#8ObAYryq0PP~@012}P1z>t>uL2~@ z9uPpT$O@1!yI%n2k$7GONSNIx0P|=}4}gT(1_5-A90C$%_X@z=@#|H9gxNg;FgtS( zfP~rI0x;vG9smim^#U+`l?On=>@ESApMxF%39~x|V8%&301{?*2*CVxT@QeS+3f<* zrxpB3u{PlWkTAPV02Sf#|L<3{JOC1Aw?<chgxM_uFoSen1xT2!6M$)JJOC1AHwz#` z<QyPjwpIXUg2$@>39~f<m>*dI5@xFf&^Qu+gxM+qjEn>zVRn-M%)O4@93WwKqX0rb zN=caAAOJJX=~aM)+4Tab9ytd{m|Z7;DUkpq%&rxH`NJjN5RfptMgV4r$^#%_cC`S^ zU0xml3A3vNFgkJ$kTAPa0A`rds{jeJl>#smJRSfEvlRj`x0!hWB+QlzpnT*UAYryl z0A_~Cs{jeJr2^;@SpgDeO9T-5MMT1Eu>j0myEg<R%&rhXiO3-!VYWyBMIr%6m@O1Q zXlF#iY=HpUL{@-=*?a+*w#J);B+TXsz}#l$0gy18D*!V_<^hl}n<D@-P<!}}M){Lw zjfB}N#|M<CIC9FGKd0}`Qf~Ie>ke&OSGCCTr&qTa+_>kMrK?{`D9mQ-+Ge1;dbhrp zgc)6%f7^JL0L-1H9su<uGX-G220Q@jNoEMZ>`OfW>Pe;x!1Prf0QDr(1klxc2zmh2 zlS~zW?j-n=VvW)Rpq^xk08C-#0Z>meSpcRk@&KqOnG_8`J;_7?n7YWT0QDpj1Yj-? zc>vUtj2D2p<J<$Fo@AT=YQs(V|5oZf0P0D`3Sdqo0QDqe1Yn*#;Z=ZolF<S%SLi$d z>PbckU_|5)P){;a0HI$*)RT-5K<M`X^(4auU^+{04p2`rOaSKckOx3L$xs2*jhuwk zlME4n8RYaTKt0J|0hr%}YuAmu)E69B)BKnH-AiVC<6wn9j$FI<lfHEqe}2!5#)tmR zv-XW|yDh$pgLH!gV5Yb{01DC#6u=eU9Pj`rNH;(LW@qF9P>`;_0J=w3fP!@W1YmCN z@hU(;y1oK17s@>V3exov!0gB&pdeju0St@;pdei@0hq?l8v+W_T`mAK$L0Z0kglfy zOjqFnP>`;N08C}*0Z@>xy8zlpPC^RObrXQOQ0`TLf^=O4Fg3CQ6r}4SfTEEA6r}4c zfU%JP6r{UM0OkR)-W;GHT_*vU3*{aF1?f5pz)W#@02HL_AOJJP<pEHTuDt+4KS(G@ z*G>ST-vbn+YbyZL*m*-hLAo{qFc&I401DEz7QnE`2N4D7S_!~htoABELAsU#s1aEK z3evR@Kxk`5LAvGwFvAnx5RkNLCV+mCLqO81sQ@NL0+6(7B7g~z03@v%3n281h@@2` z0hqyhZxWKUYA676ucHS*(yD;~%>6AM07<L*0x%b=Jphtc^#m|8@-850RaXF}Gx91x z(yERCLVH7!R<#AtH*yF_TGbLjau_5LMGATC4FO53ngTGBd>#Nvs~Q4mmFORz^mnPK z07<Lr0x*O1UIj>6Rg0bjB(16nz%(Xa1xQ*|5kTk%2}!HU0;m=_2}xR25`gIqy&)iJ zRZ#$;eE~_U3IZ^fYFD1md?`q`XYz?DleYh{q;Ab!h4XEA{Kfe@C!cPc@s(B$wjP^# zqWy{V34?Uyb#3z@Sf*LGOTvt<&BCml0L&Pp2SCECtN_ftwjKZpvoZpx@7;kO0130w z0x;V`4}gSODFJkftN;nKk^(SSXS@oKFe@Pd^JB;ZAYoQq0Om<(9smimVgfK1$~^!Q zW<>>Ho`U58kT5GEfY95Jgjrz$n0={N0TO0~1YoAPJOC1A1qCoV@<BwxtbhPoL;{d7 z%P)X3kpLvj@(CdHgM@@xUICcW)SHAP%<>4pJov!_AYqnU0H(S307#hS5`g(Z>;aH4 z%PD{!k#_+Jvm6324}$V4K*B7$0D4DOfP`5#0rZUoAYqnO00kleNSI|2z|cql5@wkN zFe(y&gjps5m<PgncL52ri~=xYWF7zsvkU?V{T?7;mR<m6cEPIv3A1zp7#=wZNtmS- z!171{5@u-xFg+50gxSTD_Q@0893Wx#p8(8NS`UDP*#!ZFcE=>l{uMx*$T>j5>>mM` zznb9<0SUA70w^6>0TO0^3&1>o#j5}bv%dsjI!h0LgxNU(n6YvXfP~pu0fhF3B+SkT zAoN{8!t750gmy+G%uWj+bg7nv*&hNhH(h&^kc8Rq0>~TrAR=LQN&tBx0Z5qrCIC|z zdP6|M?4$s)dKDOT{%G=lkv2`5?rY0uY*+Q)%xBN<Kk)7J@xAWY_~44=X<ohNkp{*8 z8QOU6rwN7Gue$bN@7g<V-KMMRk77@BZ5C!H1kgVcfP~pE0x%cKy$X;pJ1zh-z~upu zF#A~m=AL^GfP~pk0x-9@c>pBLeiT5N$Vo`T?3e(|rpT)R3A3XDFgJL403^(Q5J0kr zPc#lG(nB5q3A677U`AOz01{^33BcT0;sKB_J0bw{1SAiDgxR+OD4S^blm0FhbAW`| z{{&#BiM<MtF#ARTrm^z?NSJ*sfHsjsK*H>>0L%l5y$X;p`$_<2iqHcfVfLi}%=1?~ z01{?j2w+6y93WwKNC4(OORoYX%sv-D=#!9y*=GW%6FCGV%sv%B=m!Z2vrhz&DY612 z%nk~mX(Rv%vyTN}?ke!^0up8)31C`e1xT2ED1f$+03^%~2q5&Ekc8O>0x-k8-W(ud z_PzkhM-BlAv;6`v7fHPekT82s0HN(U3A1+vV48cc0wm1d5rFyQH68#7vwZ>xU7{gj z_O<}ZMBW7?%=QXkStI}nvpoVB770MY>@5MzjszfK_ND;lMFNm8+bsZ76?nHH39~l@ z5ZaoNFne79rY`a-K*DU707Cl$5@xRn!1PsK1xT3f6hP=&F$uF*1u!Y{HY8#8iU3S) z><s}4vzG-hAhH4^%w7_}!bkuTW;+C6ZZ9dmvEU_XHTL>1zTZ5*>h?b-^w{<Os1hqa zUb^V3+5hgSc=n5>C8wVJrWQ-9?E)}6BM*S2)iwc?@`k_zAZhiY0IEg;khFRsdI(5b zJud+B3?6R?NLoE70P~n+4}hfARsonBY&-yxR?iBca^xf=Y4wZ%%+GSK0wk@rL=OQ; ztEUBE{(6pA0g_gm1+X-74v@5ZN&w~;kyindR!<7RJgwXVAZhi40L+7;Jphtcj|(95 zWkk~IF#(vpp;rNtR*woG^oxk3)guDv7kL|!w0c+oQz8LKT5S@5scyYFK+@_V0hrCH z2SCzlqX5kH0S|zr)q?^soskDX(&_;LguV+%THP-I^KekF0wk^O6M(5~JOGkb8w6k; z4(b7rw7ORSW`4i}AZc}v0L+bc9so(Jy9LlA@=;9EYP|qVW#d(Vq}5#lFi(H*07zQh zDF9R1cmO1=?ht?(=kowaTHP)HQ{Q_4B&}`}K<JZ@q}8ngFnxhn0g_g?2q1KojHJ~% z0hrlxuL2~kZWh4!$R{C5tF;0!clvo1AZfKm0J$S8K+<Zp0Ln!IkhEGQfHsi;B&}`| zK*LA?l2$hgzzi^WlaQp<4FV_`Spkw(*9#!@gM_5jbpi;z4M|#ED}YgvLqO8%8Ud7u z1R!a3wE%{D02$8ylibcqUENTwa*ba<zO`qL^tCs9dE<tj9~9g0OZRz$s+O$T;Lgce z_hd=9%j+s#+k6O4pVv@V)t_{HZT@}XD+ORK5qbdBldKegx!u_Vpq^xf08Crs0Z>n} zTmYAQ^UnjIo@AK-%%`viKt0J)0gQ^Q0QDqG1Yj-`dljIbWU&CuG^YnZJ;@aUFrxz= z0QDq`1YkypJOJuR7DfY5PqIJ&=6lGi0QDsE1z;`>cmULs%o9L|$mam{By$B|9*5>t zfO?WS0x)y!9su<uvjt!pI}d<*l34<17dZ#0Cz&aLe31aulgto+xjy9$0re!)1z>JD z_5i3SnI-^pla&WRJ;_u7WRIK!)RRmRfT;|toH%`{C+S)Jw!Pc7?Vr%-_v3A=EGk_1 zuQ^YgINYspn}b_A{?xlo;c5wclF7PuP46GyE>D9?JqcZ#Lwu72U}_2vfI@r|1yCun z0u<t#AOLfD(yIW4_{IysYzsXA3h|8-K$*xPpb+0!0hpr3s{n=g#t0z!rb<+X6npMH z01EMq7Ql)`*G~GoQ~*$jZ<GMcr?6K63h|8;z=FsMP>64Y09r)?P>6510L)E(-VjiT zZ<qi=Cn1ISh6-SQ<PcDZZ-@X2M*>iYZ?FJzL;_HVZ;${&Z$k?44HUq*$O=%1Z-4-@ zMFLQWufG7y&fI$rP>8Re0Om$kfI@tI1<)oEfI@tI1aL(p0EPH^3&0F;d2@h5e7yu< zo`~oHP>Anx0St^B0t)f<6o47z^eR9hz8(U&EV2R=;_EH|Ge_xFfI@uTqANhctg8Ub z{FGM#5@uZlV5WyW01{@M1z^e&4}gT(Wdbmrr3XO5tdjsjzluqibrgWP*Vd~539}9Y z7!>&+B4O5E0A_5#s{jeJb^-|P4M~`_6@YnKzE=SfW^Duz`ZgqC)>;7OI<;2;5@xLg zVE(A32SCECr2r~N-i9R1S_r`W`5vzVB+Qye1CTIlCIEBCxmN)aW=#cvQy@($)(J_N zH4%U*&b<ndFl#ITbB~<|K*Fq%0L&n#2SCECp#aPrn+HI`tbqW`=5*s-wKF8mTLtMR z7yRJ$Vdc~Oc*nJyR%N{NnLVBMRPENSQuPTHbJbk&Q>zo%SX$K=fcZh<0g$w+Cjc|W z<pGeisw)6<k;(%gX;nu6=DCa>07<Lb0x$#J9so(JS^_ZNh8_S(tD4aOB&}))paH&( zQoM}33Xrs_E&y}6-UA?MRZRe$A}c`Bs;U5*M*@(vsv-bW*?2=h(yFomN=H_Jq*WyW zG>ZfvX;o1GW^3jR0ZFS00!WU-Bq~EHo&zMU$_v0;toABE(yE*QmL>YfC;eS2DnQbz ztN_e|A-xKav??QjrI8gNX;oSPSt9{RT9p!jY0bPLAZb-n0Oksb2SC!QgaFJ$uLnTV zs<;3`KS)Sg6%&AY^o3Uel2%0pP%QE;AZb-Z097IZNLm#ZfN4y;As}g0NC4(Kp$9<H zs-OVcL=FK-s{#V3770MoD!%~C1cf&QB(3rZAoNK{(kib2%&o3o1xQ-u5rDZ!<pGei z$}NC`k&}?5RW1Q!i3A{Nl~Vv_sMQ++l2$nc5ZWD+w8}03GurJ{fTUG60Su0u10=1o z3ZPyj07<JX0tj6vBx#jd0HKWuNvli(7#TSPB&{+Ez|0YOcL7PO3<5BJ$;tyDX_a08 zp${UGR_O!~YD`F4r4>NvgNUS68UchZ(U7#d_^W+n{?gJDlO>PdqJ3Ldy>V-igTszL zUh&AeyJ|J;@!{=P9%;Aw(={`)em%eQKhqQL^7>ELHaGju-BT!I(nCYSjIPbX?1BKy z4K^MC3A29%P}_S5dH^KM{t<xrLF@sLFgq^*bA`?WAYt~m0QyG`0SU9e1Yo`hy$X;p zJ12n4BP&3{?5qIH9Gh1G5@u%vV4lC?0gy2JQvl|ER}X-M*=Yfcjhq7{%>EES{YU^3 zX1@zyVI%+vvr_^vSL(evK*H=d0d$Y7012~`0tmegNtpdAfY2u)39}Od7#BGNB+Pyh zK=KDxB8n8o&YOfJ%#I7dT$}I!NSOUB0CSI%2SCE?Cjlgf!h(i?gxQY*n4aj`Nq?7$ zIY7efm;gfW0up9N1z?7#yg5L^?1$(fAYt~s075^>NSJ*mfJ%{*kc8P00hq_1cyoY+ z*|!3i5?KKfX8#j_86)#5K*H=B0fc^(k}&&P0A_Z<s{jeJ!vYBXC?#R`l>kEDh9u0s z6o45g^@f0i*%tyZBgGy739~~2Ft-|d03^&l7eK|x2N4Og&je5?5`cu+rvexq2|&W^ z69I&N6_YSKD1erc6(C{uu>eB92S}KGB!JLmIud3d3Sdm+5RfoCAb`-tY7%B22%t}7 z1xT2^F97q`bG%0}3A6nI=o(o85@zoSz&sbvs{jeJcLiV`$mIc$FndP;W`gI>PPZgC z^b%$pcGpQeIQ{T(i%#cBQ}mJFw>16X-T~7FeSOy*ndjHKe*Eq#35D4{UAw6_{C|&p zH~Bx1Fr#a;Fne17W=r4!kTBaT0P{8A0gy1;BY>HaLqNjpEdiKo6J7;Kn7t_g^K;Mx zAYry!0Oqf}djKTN-VngN$T>j5>~#U)^;2$l_9{TaY?lDc<Ip?+5@xRnAUTAPs17OC zC_MlYW;+GYB+<2#{w@^&B+OnFfSIZHDnP>Q6#<NjtN;nKmjz&c3V0PDVfK;$%zYIe z012}l0>~6O1SHJ13!q&j012~g0_YYAK*H=r0hs47d2@h-*$V<_5m^BeX3q=2T%+_V zK*H=f0W6NJ0130L0$36WK*H=<0kn<;AYt~508DZ2%>fc-TLfTk`1Sxum_03k0g*#M z!fdkuhD8F9FndY>=IV?$1SHI!6o8rL^Z-bhJs|+|7$gsXgxTW)=p8u+NSHk)0P{dN zuL2~@9u>g+$O@1!dqe={Z%BC+AYt~f074rR5@wqOP#|&$NSHk&0Q2{QydfZAwow2B zBP&3{>_Gv9-i9R19uPoiUqHg_egTB850EgsPXMN~^d=z*vkd~s961R|nB6M?bF;5k z0TO2S2q5%>goN4M0x)-&c@-dGwq5|C3lt>G?h=3*pz$g|!t71~gnko}FuOwlq1`bF zv)ctQBJw#v!t6Eym_fQ$@2*eYp)G0kQ@<CkEwuNQo@I*XFVXmcw)f_1d&j<!JInm` zd(XM!H%y+ChJRo9Rsjt6D&PT7UvP^6%=X*^puS+80L)3~0Z?CXvjEKFPdotX3)Tw2 z6z3iQ^#yALP(5-IQeUuI05c*1s4rM0fVz<Y)EC?&0CS1Pn*-Dr+$ezJkrkl6;06Jh zn=QQxP+xGp0NO`Zfck>#1Yox3UInNxxK;pWd+q^HUvP~8OnvVGP+xGh08D-F0Z?CX zl>l%KrnKiC0QCh|3ZOC)q;SU`0QChc1z;}MdjQlItPnt%$O=$juv`G?BLS!{SQcFY z>I;?%AoP2H`hq0_Fr$P!c0H54sH5(n#j>N_Pu{Sg@qj@`Y7csBYPBps4gT_znoT>+ zy1zoNGp`(*kT6KMSl4dk4gY|F<ufMz7wSpq+8m_2LI7rt%>$qy-68>uiL3wx=@ts0 zNF)FS=@tkeUnBqp>E;W-O!9eifP!@M1Q2=`P>^n}0L-1HUIi#fH%9<9BIf`F>1GR{ zV<Z3t>1GL_RwMug>1GPRTqO1800rr02w+xZ1t>^2T>z#q^D00=x@iJ1TLKS&f^<^_ z5c(XTAl(!Jl#QGN6r`Ih0P}cWZwM$zH%S1dF7f~<NH<Xcog#;Tf^-uEU~csEDnLQH z@d5~a5K)kBoB&K!;8lQvbYlgOKXMLGkZz0s%ne>%1t>^2S^(x5JRSfA=|%~_4AOZ3 z6r>v|0CRD~1E3(?2mus~oP-pl8!muqkpL8=8zumAq1+n+5@tgMU>Z9QfP~o)0hoL4 zJpdABg9T71at@F%8zcZTR_;}RgxNp=<cX{R39|tL2wkEfVb)&&=I#z}2uPUq6F}&5 zfP`6J0hmjKUIj>)^%21M$Vo`TthWHBL;{d7>m`8D&vFuGmkS_wWCci=^%OwpbAW_d z4*`U(l#(#(E`SP=LqNi;n*dB-<vj;Tm~|C^ndtQZNSJjIfElLr07#g17C_<1IY7ef zG69r`1R!D7NdOZf0Z5p26oA>B);Kf2SQ4^?+1?E&d+e+F<=!kE{`&1~t81!ts`U7> zZOxxp)bc=%DMim#u9r}lb<nlVbHHX!xjp&R3kfs2HVd=%0x+8*4}gSOI{}z&p$9<1 ztgQfQdh^c%AYs-<0Ldeoh$2O7!2=*+)>;6jvi1N-n6(msnWy#uNSL)0fVoQR0gy0j zA%N0}hCk`=QZWZem^BxGxw*%y012~Z0w@|;0TO0S1z;`_dKDmH)<ghZA}c_`tg!%= zMgov9Ya{@3pQSehB+MELU}9tiNSHMcK>tVp5@z)UFfI~+gjqcSn8wbV10>Aq3Se|( z1xT3H5rFwc?p1(<S#1G?eiM=~t0jQJkwZYjtfl~RL;{d7t091%kpLvjstdqeo$)3i z3A1Vfs2y1W5@uBeV5T>`3Xm|XA^>w^hX+8ytg-+?U&kcODha@}HC_csm{k;jxv#<l zAYoQP0A`la10Z2mUI6AnP#ypYvvLA3g_#FH!mO+S%uW9u012})0toF5Ntl%ufSKa* zDnP=llmJ4TQxaw+qboqdtb_o}t*+h>kT5GQfH{$`V-jY?1Q5DRN5ZUV^c)~zRzv{i zhHq~UkT5GOfXgE1012}~0x(ac^D02Xte^nOL{@-=Spfl<CslhDAYqnY01F~3K*B7a z0P05qkTA<D05iMb4FL(WJOXGLSpgDexdmW$$333fdr4YNt3GjX&H8mRU)A@Wk+1Hl zdi|Mp*FX1Tm#aIc?K9`%z1#QHV`-I30H(3?07zQp6oA>BdH^J?atOeD6ng+9t+ESX zm^TSM0FqYO1YoARJphtcSp{H52Rs0hR#^mKhABM&l2(}oVCL970FqXj1d#0E6V1dF z*31JSX_Zj`W^?KRkhIDm05d@20g$vxFMzR$s-N_CsTcy1R_O#_p26c)fTUGg0hEfY z07<Jf0x-Xbyb6%Cx_H9=-3AYUq}6`{2)zqPT3rx;qCoH`6?XwitA7PxYCCTTNLu|P zfY47el2+#hV5Vri3Xrt=TL9T$2Bb-O{D}uZ(&{e(m`4wI03@x>3BVMW9so(JvjUhO zIRqrF&Ilm%HY92FrvO6Vh9s>{3jjwTHFp6?t3L!_9*yZuLXuX$3qa9K_>+ov0ZFS< z0x&}?UIj>6{U(6P@b6F6laQp<NddHr1R!bks{lgZ1thIb2q5$>AZhiB08Dx9O+u1Z z#|03&NJY}>X90AKoP;E;eiDG0s`Z9|q}7iCFawPq07<K30+<~+1SGAF3ZO$I07<JK z1duZlfTY#;0x&Zq-W(ul^_>7hm+44a9T7mS$RQwU^{oKRqcOc9AZhhK0hlQo4}hfA zHv$N~3rJdhEr70(bAY7PVF4_U1R!bkl>kDG2}!Fj1yIAQK%F_elXoU*X(!W&8|v(A zyZzANmk*ZA|K6k9yIee2=+xai@6Z4FJKOSXO;;}AF0U_i?LpqPH<WxUebRrSR)Vh0 z!t9U$%x91XK*H>E0c44+0130t1YqvB_9{Ta>{9`lt1}(|3A0ZGV4jrj0gx~|C;;<4 z<N=T{`&a;tBPSsVvyTMOHWGk@*@pr!zsS8IAYpbu0L>yRK*H<;0c4B>AYt~t0L-6k z@P>ed*?s|-`4ta<gxPxnNPf2^8iy1MWF7zsvv&m$dK;23dq)6m68+<o{w@_2AYryo z0OmF`ZwN@3y)A%#krg0ewpRdVbik_s39~%{FqZ~A01{?z37~T15Rfo?Qvha$$*TYf zv)uxi8Cd}mW^V`}^j$#0>~#T{ow+vzB+PaRz|_Vb0130#1Q7ZhAYrys0LfiuqM4YA zcL52rR|POH(Y2HQE)@VI%w7>d=*x(N*~<bj_cnNwkc8Pw0vH=P1SHIM2*5ms#;X7c zv+V*f<D?z{3A1ei7#%qTB+OnEK#@oQ5@s(5AoR1GgxT`~Fn_?vn*$`wo)bWu$RQwM zwp9R2BLPU5Ju84|kpLvjo)JLk2MGzYEdmIA8<H@4S^%MI#U#u&3n274K*H=P0hs$; zz2^W4vnK@*`dLoG><IysjJyp=m_06l(AJEE*<%728Cd}mW{(QMjFWnkkc8PI0>~0s z0TN~p3!s1pu;%=<<m8+FcWVEhbr*kjVaq#n^1ks~pG8kKY<#BWJr&Dt|L(2KeGh(q z(>DHn;Y|WCx0iST)E7J?fEAGypuS+E0CGnHP+#z%0ER>YP+#zX04hWRP+xGr0L)J^ zZxT{paGwCo2ayLreZd9+l#3h!>I?1_fNAc%3Q%8gj{x#VR)G3~y9Hoo8NCWnU$9;P zW^3jFP+xGD02W0K0rdrU3c$2xUInNxxI+MDj?Dw0zTkENnA^-e0O|{F6M)$lcmUKF z+$sPwSnmN)UvP^68b#g()EBH1fSF_SDnNa~%>poU?H&O21#1PcEOH2_FIW>j2dFPt zEdcWbkPlz2nf(4#kna7Or@yMRuln2}FI=;K-Lf<FnmseN?H9McSiR)V_XhWR;ZW0r zLAq7Cw%Hh0c(Zr%YKD3ex;6*tZW4f*B=rC&NOz+E%ne>100rr85I}412JiqVNO!#e z%tW~dKta0e1W-7#0u-dXRsiNR$g2Pa>8=rgx#ishpdj7V0vH%M1QevZN&qb*0Vqg! zr2ra40#J}{r2yJQ0#J}{g#gU-hBpZ*NVi-7p-(~z(k&B!nPv1UKtZ~t0x(1U9smXD zmIz=}<RqjZ-C_aEj|89~-4y~bzsS8Ipdj5M0rZKi00rq53Lx|@pdj4>0pyLW00rsh z3&517-W;GH-8=!9=e2tP6r`Ig0CRVT2S7o(IRfYzIR_|6H(LPxA^|8!H%kEK8NJ>R zP>^n>04hdSfP!>01W+atfP!?>1<*MXfP~pJ0knz)AYnFD0Olg8Hwj6YO%cGz$O@1! zn=F9okpLvjCJCTdBmfDsi2^VWhV<qD39|_TFykX0013140;m}|1SHJH2_UpRCt)^L z0HMotB+SMLphV;lkT4r9fMJmUB+N!d4*?0Ykpc+)AR%EkLI5)&hk%6HZ~>SpF7H7^ z!fcoTLMI^!v!Md0961Ce%!UXcPb2^dv%v!B8wo(dY>)uVpZE19AqlgA0x&~V9smim z0RrgZ4Z-2LnX@PT7ZPS4v~I9qM$cY*7d%|`p1X^$=yv0rRbS^g-F14G8fn&+nDy1> zgu<-9u5GT)Jhk~JT~&W1%;?%I%=!tyjIMY9B+U8>z+9vB07#hi5rFwE;sKB_>n(t~ zNh6x*e^PAl@&HJf^%8)&tH1*wVRpFymL~egC;eS2DnP=lrvS!90+2B4A%M{501311 z0x&~--W(ud)=dCoB8Py4Syus=IZCerB+R-9z})KU0gy23EC5rMcmO2KE)zhZ$T>j5 ztdjuDr2(%3B+NPrpk8DJNSJjHfY}&(6(C{OUI1o@&jTP~)=mJ!BZq*5Sz7@#j07NI z)<ytkkkcCi5@xLhuq3hqB+Oa~AWI|w3A2_02)zqPn6(hVq{s@8Fl#OVGr{9cLK0@p z1Yn*K?E#Q5YbpTK)_4FU%$f+GXyhCqVb)jx=81G(1xT1R5<qBoOv0?80L)OoR{;`c z4FnMSBqU*0UjXKIXRiVz%<2iCdE{L{!mO?UIz$4HFsmbg(2r6QX0-({J+cBM%xVe1 z{8>+L5|S{hDS*&LDiUTj1h71E2uPS!7l0{CydfZAR!snnBP&3{tf~MiMFNm8t0I8p zW$#23saU2XVOCiHp$ilw%qj_BM52Fu(%+?`0wl~T3Ltb6k}#_vfY3=u!mPXi3P%nB z3A1tn2>m7`VOCZEB_k_9!mNw{%%iZ1@44xcw0e5N#<Ob%RDb!qd^s~;yCdg|H}~$e zsn(Mn^BpVtNuzBWE3Rf~RayY%+t33bX;n%9WxXNr07zPu6u{I-0FqWE1W+>)fTUG% z0hp<7ZwN?Q6%&B@DE0tIS``&Qwa6hLX;nl3W_ZG@07<LD0x*w1@c>9#6%v4X7?=k@ z(yE{U%>C9L07<I?0x-XbJOGkb`2}FM=N<q_t9$}5_cnL{B(3raz|0SL03@yQ2q5%H zNYW~|0J=p!2}xSz5<uu(K+-Cw0L<>#n*$`RatOc_79IdetLy@(6FCP+T4fVJ=STpO zR#^oQ`bkF8DvJQj5Q{elNLpnUfGMp!0FqXj1Q7aJPSPr)07genLXuV)1Yn*@=nVl$ ztMmde&*1R@NLr;6K=;TYAZe9W0FxsDNLr;4K<HgS((2+b7cX8OSpkw({|O-UbxhLg zf&fC_1thKh6@a<#-MbA*TKyvcC8Xg`iltf)fTY!V0hs47c>pA>{uV%1`1k+6pZWFx zNLu|RfY8Q-q}4eAgx-cEt<DOdf8-F5v^pbzUXcJKt^O2%8R76IAxW##(Euc^{t$q< z!^f)tNvq!l5IPA-TAdO==%bjV)o%hY6P4Z&khD4}0CTUS2SC#5R{?}B(U7z{Apr9T z60ZUzt$q<eKJQ7`V%PfQ!wRIXGLG4_cjr}gk2NX#)2Sz~-~IXF*FTta^s`q>UH!~U zJ%)6xoHyYvuj9IQe(&0wUb`;&meK#xwON?`EPyeQ03^(Q5<vDy01{?D3c$>@dqY6N z?3e(|0F4Jg!tAI3%%j>p01{?D2%vc693Wx#y#UPUfL8$$X5R^*N@N8{m>m&-87K8B zK*H=>0W^!O0131I3BWwA->U!#vu^|tdK;23`&t0z3Y}L05@v@5U~V<^07#g9C4hmE zlaPejmjW;s%DoDZF#AFP<{G63K*H>h0Ln!U0SU9u1z;|ac@-dG_L%@oW#|ErF#A*h ziz0`BgxMzoFwbZ8DnP>Qpa4u=<N=T{`&a<xacCX@3A2v`5c)bMVfLW_LO;n!m>m$n z(8#-hgxLoI7!?UX!t8wkguV+%nC%yUxzWzM3rLu~CxDreLqNjpT>+RYbY2BWn7tza zGu7<@kTBaP0CR!N10Z4cwg5uga}s8I1z;`{dlevIwnqS=PeKxAZwVmuNl3!%O#ztV z+#3QCX1fItx=2OB><s}-k9-o6Fne79=59}K2uPUiiUuHI_L>099Gh1G5@tIE5V}}R z!t7N6BySc;G!s*pd#?f{%w7>d=n4r5vzG-Bx=csH>?Hx1JAS<(AYryc0Amvkf70Kj zVh)fn+b#g}_XNEPkTBaO05i$w0gy0zQ2=JBy2OxG$xja5z8z*=w>fWy@1DPA#;z-` zDL!FYxz#t^UvT5ox4by<_p7e!c(!{&VfKQqZKekPIXgP}#UWuv*XG|geqI0zz4_+> zP*3t)bOop<*(!j{krkkx<XHij8@#+Bpq}Iz0hr3#1E8K{OLPUOCwW=`OCsk0^(31G z&>|9mdXlFEV1A2ubAWo1Ck0@(g&qL)Bu@ySdE^jKPx80`%<O_!0qRK}6M$*#JOJuR z9u+{F$RVJf<PiawTim<~P*3u(0A@#4fO?Wm0x*BR$EyJKBo7H7^oxjkl8pigeH~Lz z@}K}rSK$o-^&}4nz_c|U0QDsI3&4!9c>vUt+$Vt0uVU&+HVD96D8KH;Uy}14>I<@z z-rr}*OM8yjs(9+<M_#&R_k@+XUszfA%75~=u5mcm=tYY;NO!LQrg;w{4}gMn_XxlY z(s=+Bq`O-H=5xRUpdj6P0hqgsJOB#P-6a4szv2N<knT<aWQv@G6r{UD0Osn9R{;vr z-5xy$C`fmk0NO?l0R`!96@Yn4u{Q)1q`O4`?IJ5cLArGU2z?h&knUyyw2!O+1?kob zz+9p8<^Toh)(D_{WCbWlw^{(LA^|8!w@LsVA^|8!cas37L;_Hd?nVI=i3Fe^-3<aT zV`Sc4Kta0e1z<{34}gMn*9o9h<PcDh?pgsXjRc?|-8BLTorDymyIKI|kK1~4fP!>a z3BcT1-~mvO?n(ie2_6rCf^;hd5c)ErAl(W9gnkiGkZ!pE%!NvC2uNBj6M!ksJphtc zO9fCj@<Bw>YKZ_s+jEjuiv`dovH~Qnt`LB^Oy|u3l2(fZU~c;N07zOb6hP>0NYZM7 z0D4Bw0g_hp1rYi!AZayE0H(I{<^V~nxdJfbBOU-rt2xngfTY!I0hnP*uL2~kW(lB2 z<Xu40YNi0pZDw8tNLtMhfGMp!0FqYI1z_gbJOGkb(*zK@K0wlHssIK=PC}AaQv_fh zh2;$aNvp{MNFP}Nl2(%hU?%&$3Xrs#C;;>4)D|6@pM0>gUShj{E?TC+qWgAdzx}fB ziyi2@=8X&gZvAKTiElO^%)V>rXB(R(4AM=|wM}KXxAzxPW%{H4rE9Y=8!rI!=Y2f@ z5@zEB(Ab-Q9smimu>vp;B=i7Cn2iy@xX22SFdHoZvoZE6K*DU40L({#2SCDXqyQ#H z4gm?X5dz2(2|&VZxB$!;nKuL^%!UadV`K$Lm<<(x`6BcxK*DT@0Om(lfP~p#0pyMZ zAYnF009Ql;kT4r4fI*P}B+Lc~z+9W~CLsy4{sL$aSpgDe{RCj@BCi4@%=!wzR0SRY z39~)|Fc(KW01{@s1z@h!djKTNdI`V`Q+fa-%q|zevdFuDgjr7kggysInDr2V>8-sX zAYs;B0H!kZ07#g16TsNWIY7d!s{l+}<5hr!Sr-AA`4ta<gjr_+m=PimfP~p)0+<y! z2S}K862Oc|01{>$1<*1QfP`5G0hp__-W(ud)?NUiFC!9W?F10|K|;c;tpLp3#@-N+ zFl!?KbD7u!AYs;80G%W60upAe1dzOSHxWgO{nlOuNSL)0fO#I92SCECg#bcVN=cYC z7eMIu012~Z0tj8GBw^N60Okoa-W(ud)<giNxAp)?m^BuF87ubyNSHMefVs8610Z46 zPyksIJ%f_|E)@?V5@rnq&?gdrgjsz7n7^Fj4FL(WdIB)Du?IlHtgZk$dP7j;@uek` z{tGQ^Y-#ZJg1wF3E8Bcl&Q+`0WgGs~>MBnhy!+SN&v*a0W52uhE=(xQ>gd|$3f<Zj z#gZ46CCupBEX-;P!2BNd07#hC5`ei#>H&~2t0{nL-tc<>B+P0Ez&sJr10Z2mT>z%9 z@&HJfRTF@zi#z}lW>p1X9?9qdkT9zv0Q2Mt4}gSOWdWG)ArF9rStS9Kjl2y>m{k;j zx!2aK012}S0;nEY0TO2A1z;*euL2~@$_XI!T|mODtN?~Y4gm?XG6D#_3rLui7J!*w z@#X*tvr+;uk3sSPNSKurz@o@GK*Fqq074(dB+QBnz-)}YAs}H^OaSH<HxGb>Sy2HD zi<|=_%!&wLR3rciv%&%heGZT?D<lAOo!XlNB+Lp5z|66E03^%`2q5%HNWv_?0Ln#9 zLK0^A1Yp`4ZwN@3<rRRrG~fY{Fv}x=6_G<g!YsD{LOUZ8X1N3~I<f*J%yJ5#SR?=m zvm632vy9#(Bw?0a0A`5F10Z3RO#n?Jhk%4xRsn=Q2S}J@5rDbV)Efd4W|;-BFmeb; zm}L?GUO!EWm3prNB+N1jU=k9f0)T{B1_78quIyESgjsq4m@zUBfP`5(0fep(kT6Rt z0P{!Iy$X;pOCx|nk&}>w*~R1bX=GjnNSOU60CR7H2SCE?f&fChV-jZn3c$=RcoiUF z_KyI}=Rm>FmL;z&N?JWwu1Wqi9a@xl?Uyv88oa!w(TKJCE_`<6<hSLHv_1J!_nEU< zTAdd_8}Bag07zQ>EdX=Ny9Yqh>MsGziL3xgt8>wFfTYz~0gQ;O07<Je0x&<zy*WVA z>Q4bwiL3xgtJ4B77bv_6khJ<k0A_T+10ZSjy8z7aga<&<>XZP?LxMd3l2*S7z!aAr z07<Kp0x)049so(JU!#YBq}2%l6pwrkkhJ<m0OksbHv}ZDjtihvWCciC{Vagc2N6lD zp9D}cvH~QneiVRt{)#sTNLn2efVt7m10ZR2Q~>50kq1E1>IVUsK_(A?q}BHVs2Dj3 zNm_j;0CRhZR{@e%M+9JsOAmmg)wcpD7&!zat^OwfbEltI0g_hV2*C6O9so(JuLV#f zatKIT9TvcZNC1*nUkM;XBmhaPF9l!<3vUjPwE98-r6Vgq(&~@^Lf?iYtv(lknIG_m zfTY!D0tjtPNLqa=0P}24uL2~kJ`q5h$Vo`j>R|L7AZhin07Bbyl2#uHz|4?%bAY7P zhXN=NIR{8u9T33yNC1*n9|)j)BmhaP_XS{X@$lvVNvr(=XcJihl2-2tz})ZZRe+?` zy8<w`n|c5wt=<tp=vpyJt9=3(6*&h;TD>iR(7u4A)m{OZ?s!th&B-tDv}w{zpW3EC zuWCm(eN-ZAr`KD*mnTn^v8SJG+-uGAJqBmqcVDKT6YlcbqibjMs^6zdMyWFW(f`u5 z`S*q262O#50P0EJ6oC0P=2d`tlHCF@mj*ll>Pg-ZfSF<P0H`N<T>$3CkOx3L$u0rl z988(u@c^hNc})Q3mUj<;dXk+2n2IGx5h3ybs3&<<0H!wf0H`N<MF6I+@&KqOd07DF zujzRJ)RVj<fY3)V^&~q4P&slEQctp70COV&s3+Mb0Q1}hZw^pT@}dAjZ$s)yUJ$_I z$RVJf<aq&vJ_)HOc}@W4CM$0aP*1W|05}4vc^gts@~i;N0F74x>PemvfSF(M0H`O~ zB7n{~2B~-*Q%~}=04jL^58nM~@_{MpNs9cnul$`8hvfNe`_Jq5S3GyDUyCB^md~D( zcHOuIH=gU>;(WrMWV5bqo|N8sOC?=Zf7FxEwK>H1lmJX$>H$!Q?@0le&ma$gLVQmM zpr|+e9sq^-9v6W5E#d)Ci0?50n7IiLfI@ta3Ls155KxHk5dnnW1r*|YSO8@sD?lN> zO#(2#MZ7scA-;zMkUg>j6yn<`0CSPvs{n=g9uz>!$O=%1?*Rdri}YRvD8zTa0L)zl z9sq^-?h`<d$RVH*-v$AMJ_jhocdr22M^=DBeD?^TStJ03`0f^fdGdre2`R+4UI6AQ ztp`9MzPki4FLDSd#CN9v%0vQCi0=*om_3O%1Qg=CT>zn9#T4SZO#r5-@hU(ezFP%g zo|5eWP>Amq0hn=S4}d~^>jYrN7CZn7@!c$d<X<F9bT6jp%sl`K@vRkrnW6IlNSLh= zK<JZ@gxP8V<V{rlq`ynW5Rfoi6<q-mW;Y37c4P%enB5o+K*H<>0ffE_NSIwO05i_) z-G(I0t`k6~$T>j5>{<bYt`CqfyG8(5fRyXh-Vl&5yIKIlkRTNgA`)g-2_W=)fP~qV z0w^3=0TN~_1z<{3Zw`<!TOj}}Kx!r-3A5z_2<?tZm@N~4xwFI@0up9R1z?8wJOC1A zO9YS)CqXKn10>8A3m|l{nuOUE0vI1z0TO151W+v!fP~pX0hq7jBehzkPePWo`t98E zd_CTMw{V(AmK<!Kt^4Ew&F*V+bD7nDFFn?;$d74Pzr@mNfdF!N74QH^TFn=L*%x>K zB(3HNU`1pFNLtMmfEk|fDnQa|jsVI<R)D0{Yyp_Y#H#>Ft62hA7Fhw3Rx<@)w&z|2 zNLtMhz>>%ckhGdEfJu=6B(0_iV0k0}Nvo*>F!xz{bAY7P6ag%atN=-?$pSEQY+eOO zT1^tbz{m=aw3;XYGu7=?fTYy~0hs5pc>pA>#tR_yWkk|yoB+(lYOew$t;PzVTjV4p zX*EUwW{SqE07<LS0;m;P0g_gu1W+szfTYz(0aS?uAZay10OlDy-W(ulHCzB@gu??M zX*Em$BO`}^q}5OX437jLX*EOuqap!FS`8L}xlrlN0g_gO1Yjm8JOGkb0|ihiatKIT z4G=)+7ZFLT{sIX7A|h$kPXM8>W0F>V1<)mO4v@6!BY-B603@w?N6!J0R=os}DY612 ztu7aUxlrjnh)7!X6hLxTK2aG`ELM8}B&~V~Aatdaq*ZqTG)VN1Px`x5RDh&aHvxox z6_d2;DgZM<;mrY(R$T-Tx>iims<QyvM$Q3}R+kB2VI%-at4`4sAZgW60CgfOK+>v% z0L*<x-d#Y_s=WY0zlup(wG)7uEw8YtX3nHR(>tW+oOEq^H~#zD1G(Q?-|_TMRXacZ zz^=8Iz4!IWW=--xGOg{AguA@j>e^<2rr@#5q{{S1|4Y|qVb(?fjg$WG68%q#*MJ8= z!mPCbdL_Dc(%+>5fP`5q0hEXYAYs;00Os0+Hv}ZiS_r`W81eu}m^BxG`6l)NNSHMf zfGNy801{?R1z<{34}gSO69KqKFj)^G5@wABP&4v2Bw^M_0M#P_NSHMgz<@{q5@rnq zP(KoYgjsz7jEMvwVOCE7c>R<)Ht#khVOCcFS&<+WZ$lDhbp&9BsJsf0Fsm(q&<_$4 zX0-%h9)IFhfP`610d$C*10>99L=OQ8v+4o}eG-x|t0n+5$>+@h5@uBe5c)DAVOB)| zW_ZG@0130o0to#qCt+4e0R1CxLlR~c1z;LGZwN@3RS<x=LgxXHFe@(rGt1}!kT5GJ zfY8>Agjrbu%#WOeB+SYPz)W>}LqNi;v;a(F=K+u~D<uH)R6-Acgjq=eggysIn3WJf z>&Qt+!mPLe%w=M42uPR}6F}X_3Xm`>8Vx|gtcU<Y--aa23Jbst(s^@$gjpd0l!=@J zB+Lp5zzo!S6(C_&KmbD{D?q|5zW_=`0+2AvCxFle3KC{{1rYi=CSjIG0HK``3A5Y+ z2wkiuVU|k(q0a#lW;q2gHS#VXVU|MxlRbbm-JVH~VQc6zbp5h;#lwHzzPwbYk(Hl3 z_h;QVGM1?IM~=Cl9BsdN>y!6oODN2;>)H*yYrkIn*GoIh=-MpIvI(F?BmfDstO95h z2|&UuivU_h0+2AvEC6$D!kYsm%rXhU+}`8?kTA<AfZUNoK*B7808CrsRe*$9dI4mM ztN;nKbOIO>2|&UutpIvN0+29EBLMR_G;a=&FuVA(y}!x>AYt~O08DG^0gy1eAb_5c zbAW`|zXCA7N4*M=F#AUUrmyk<NSK`$K=#NXAYt~m0L)X0y$X;p`%3^_BP&3{?3@71 z9HmzQ5@u%wU^+_=fP~o@0ThfJ0up9_3Lx}*fP~p;0hmhz-Vl&5`$GVsk75#LzYD<p z0VA&hB+O0;!2Ag@4}gT(Zvw~|c^8l{J1GEjnb@lU3A0}XU@ne$03^*BLr=K+u~ z`$YgVBIf`Jv*Q9VS82TpkTCmM0HI$*B+PyiK<3CHAYt~S077p=5@yE)FgmgVB+QNq zAbHIz5k-m^nKubZnEfCC^Bg7*fP~ri0vMI(AD{Ghsi*)6v+o2D`XnS_c0>SWBP&3{ z>{|ikiUc5G_CEoHwq_*EzKI4PVfM8ELcfYhm>m{CXkS3W>?;A7XK{HCA`)g_3c!@6 z9smimF9cv74(b7rFgqlG(AO~uv(E)!=GwgqkTCm90A_2pWZ)kelAfK~<+WtpLlwV1 zcX3j)BiEEIdEn(dS?5$akpF=pv$tN?E7!i4msR247yeWLW}MUmpuXS}0hkdY4}kiD zg90#pfd@c+!N&qHKgm1*>I*)Ko&(eud?*0()B&#o)E68OfO+zS2S9zn2Ldo3#U23l z1@8->yZ1@v0Z?DCKY9*OU+|s)%rK=_0qP6h6@Y2aJpk$p-VuPgxxxdWzF?mK%<lmY zfck>B1z;v9JOJto_6opUuJ-__FW4i1_L0v4>I>cyfO#OCR{`n^-V}hj(ar;)zF@Zi z%s{ONKz+d*0x$!$9su<PuL~gbIY52EE&-SaL3tIRzTh<hm~qk~e~n1~jMXy#;4B3m zsM+Y5H_~ivboa?Kztvm0@1uW8&udrb&YHV>&d5^tu7p9lox1jN?-8)}>i3f6f_f6V zHV5fm6@b|odjJ%qdqn`|O1%d_LAsX(VEQT#fP!={3Bddy_5dhIw?hEt9q0j2kZ!vG z`b6FZ6r|f04M0J<7X@JUB;F8EknRNmm@h&PfP!?-3&30`_W&qJ_nZKRMNUEr(rp!h zc|NdL0SeMRD*!V{=K)ZV?im3zj2r?A(rpny=|}(y(mgGJMUem$q}wcj0+9d|q<cyL zD<T0XNcW@w%w=NlE}$UY69O<J#U20!=^hurWsyTbLAu8TFgOx`f^?4xz-$S;A)p}L zBLXl}Tpj=g=^hq9`N$!lAl)VbOpgShAl*X(Fi)WIhJb=}8wFrSh&%ua(mf~uHJR`y zMS8;npdj4?0tkH@k}$hp0Om@)R{;`c_X)sUCiVbGm~9Y%xzp4GAYpc|07Cl$5@z=Z zAoR1GgxTE!=m<Aqnv}<(c|$<LY`p*mMFNm8yGsC7BLPU5-6?>+kpLvj?hrue2MGzY z+XY~5w)7?;3A5V-V1}qX01{@m3Lx}#Ov3CI0ffGeNtmq@fO$r=Hv}ZiZWh3T$lH*F z*;)a#j07NIwnhM<4<Zs~s|7GGvH~Q`Rtdn=#@-|(VRn-MmPJ;8gxQS(s2mAE!t4eC zn7cbV&w4#swM$(s?OpxJji225R)N#ipKsOVyN3psxV3JLW9@6aKlQWf-xOPQAfYh3 zUe`9iMV@@?&E&|J9-ee<7G~E8z|7Ej03^(=6@b|kc>pBLt`UHF9G?e3!tCnk3Xm|n zN&tnuJJ72D39~B&P%#pKgxN{~m^n(X0wl~<L<5j8TP}c7kwZYjY?%O(pQ(u`QmoE+ zLqNi8sQ}DV2Rr~0W=jNMN>dMjgxO*N6iHP5q`ynW5RfptLI7r>+^YZyvqb_hf49a1 zAYryp0A(VFfP~os0gQ_TAYnFN0OrxG-Vl&5n<s!Jkrg0eHdg><Q{+{EgxMSc%#5r6 z3A5P(m=*~@!fciR%(V$`2uPUC6o45a@&HJf%@BZjI<5ym!fd(#=10x}5@yo`V0PwS z1xT1p6@Y2%JOC1AQv_f}2Rr~0W|IYA2D&`}5@wSGfO9aVtMC9wm`xPG6-bbZPcjl_ z69f?2o|7;eFMvXk6(C_YP5_~I0SU9Q0x*S{Hwj6YjS+xpYdioFW}~C$012~E0x)+K zcoiUFHc|l1BJTncW+Mb(#!0;jkT4rA0Ml1_03^(Y37}l$5Rfn%Du6tZ03^(Y2%vK$ z0130f0x(lt-W(udHb?-WU&SQM1`1$E<PeZB8z2C4r>QptB+U8?Ahb0jVb)Io!y|`) zgjrt!m>DK-2uPUq5rFwFC_eMS<U!N_{&(uZPYTvv^Fz%|y|O*<bh)R$Y`pEId#)b( zUiND;JW-_V%IYkwdJCYIHv}F4NvmE0F!wll03@w07XTI@Wn<z2khJP4fTc)~qA~FR zNLuv}K=Q`HL=>q2AZgV-dJd4Z>L!5EiT?3Pf0v31khJP5fOe4pB(1s#z>E%flaQoU zX91WWBpv`stIGsn_J$q+Nvlo*s1!K|NLqCifVo!eRe+>b2LYJ7J3IiAR_z5~evo(o zB(2&Bph@H$AZgWB09hgdNLsZKK$}Pal2)w+VD549<^V~nRst|r$vgm(RxJgPH*yF_ zTD1^B=m!Z&tL6eQGtJ%*khE$hfGLqfK+>wI07BmdB(0hVpiX23NLn=(K;}pQl2(lb zP%aXHq*X%!6o>>MY1Kdg`6B^HTGbao=vOgGt9k-3_d0qHB9c~h1z^VcJOGkbbp#Ol zMMTo7wg9R{PC}AawFD4)7m&27DS%#)6(DI<LjY!w$(w{Et*Q$kv^gbdRV}&#B(16n zU~=RfAZb-a0HI$*B&{k7AoNK{(yEdG%>4!4T|m;Rq5#ZOU_1blRuu$b{;Z-0K+>wb z0L(0z2SC!QoB+%%Mjil3tFi(xqum|=Nvkpf2>l))X;oSPW}42c07<J-0tkH&k+do) z05e^`VaufCPC{*cp$A@G->%A+>v!K={GKN3PISIvZnnK?H!qs<-M2f>RQn=L$%MPS zO6c0=*Vw%sZ%8hegc)6%g;{X{n0uT&01{@!1YqhS4}gSOQ2|W#J_S4g5@tmNV1AE! z03^%`3m|7?1xT0`5<uZd01{>e1z-kfydfZARzLuzF!KONnB^CMnc(pNNSNglK+niI zK*B7q0J=s3kTA<5fY1jK3A5Y+C=*!$5@xvsU^YeGBqU*$Qvhaq!vi2;mO}uclaPd2 zb^+9joC74xvI)RkoA8E!gjrSrn8A7vfP`5V0kn-A0upAK1z@hwc@-dGmPr7nt?>Xz zm}L||!^j~ZVU|GvMIr%6n57qhxy8sE0upBF1YqXcJpdABX$4@O#pMBzFiRr<GrQmc zkTARWlO3q_07#hqCxFl=Aqle!0x(ag^(sKZ>|X)2jC>A|F#AUUW}?@t013160x-R` z2SCE?ZvmLWdJlkv*<S)E5jh7)n4J@V86WW~K*H>-0754r39~Z-Fhf*c1xT3vDF9O$ zdH^KMP77dE<Rm0v_J;sMKgmd#{Vo9WFfeZjNSK`xfVtJs10Z4cn*huln+HI`?4$r@ zM@~W#X1@xcWF!Cyvl9ZS83{nb>=yxqewLFkJ1&4ukrg0e_Ok$nM*@&A`$+(yA0#Bq zeiT4fuL6~}wY>EE!qu-kH+A*+3is`M@&1N`>Ss#3vDEiRzbaOxc+Ug54ww40$Y=cf z!p8(~c_aY!1xE#7N>i@_)EE390JAai0H`ncUI6Bk&;y{p;5z}BoskDXeZdg{^o^W^ z)E9g!fRT{^)EE3u0OlHzHw4rdd?SGAkrkl6;A;Vx;?k=C^#zBc0jMwdN&tf*hk*Km zF9l$>X5J7`U+{$hmPJ;8`hr6OFk@t11*k9hTmWW<$pfIi;4=Z3-LVHieZi*!SQI%2 zs4w_L0HJR~>I)7Ez!VnV5Kv$6u>j28&;y{p;3EOFkDLS47knrHbA7<80QCh21W?<n zK$#8y6ioUrw64&i_tk4NXBoI9_iw#+*UGhXRi%>8+@JTttNZF_-#%g5*(cg24AOm| zYv=N=Jt^G>mx6S3Z4T1CF91`TdH@up+b;m~sB8~_f^_c*zzk1#02HKqR{+@~=Kuxi z-Vs3ZbWTK(;@kzV0u-d%CjfJG#si=r-P-~%KL<Sk3exQrfVnv00Z@=`j{wRh8vdle zOT`?ZAl+L6F!xz{6`&y9n*s=Z6jP9Hw*Y!a4gm$}-iRIo3evqU0Q2MtZw^q9ZkGVe zP5&MM1?gTBK<LYef^<6tU`C3)3Q&;lRRNes=6e7Xq<cjGp_7n;bT13Q{37=%KtZ~f z1W+vUK}12i9Rg?`2|z)*?E(nB4Jk;sO#q=^L=>cZQ2=!!hk$}~F9;yny(FSY#Rmxm z>7EyWd0e`88&Z(&IROk!^p8*ayHr$wf^=I2V2X3E0u-csHX4A0*)sw#(;Hp|NSJLA zfSF<P07#fUEdWy&c>pBLHVeSq;o||2FndY>$qO!t?!{Exh9u0M6o9$8!m9uYvnK># z?zi>;NSHk?fX0ccpV}uO3A4upP&yKTgxRA4FjwlmAs}J)hyWTyR)B=r!vYBXDkfpJ zNdTE5D?q~RApw{tReN)QgxN*`gx-cE%pMfL(#RnoVfKIk7DNJ&FuPv>IU)f_nB6CU z?vVf_%r*#ML?i$SvwH<FGZKJ=**yXXy$eW~-7Nrfji^BNUy?18`ib|?7OdWDWSPI8 z-nDVjkd}{+nm%-NuYTPhuDEh)&L{8Pzwb;!VYXh^HgglBSI@a5%;?%I%<hT?AYpc= z0L&Y}s{jeJI|N|H7(D<IX15EVt#=1{03^(A6M%XAjt4-(>{bDo*%=RjgxM_uFn?3h z10Z3xP5|cGga<&v>}CO&u>}u+gxOjFm~Ej4K*DT|0L-Sy10Z3xI(i65n5`0kxi;Zd zfP~pi0x+ei2SCE?Mgf>Dfd@ds>;?ghihLK4FuPs=RU!dMm|Z6TbHBAW1SHI^6@b~7 zdH^KMt`UHF{)z`c!t81R)QX$~B+RZ7K<HO739~B&Fd(u5B+OO{AoNj8!fb^A%oFLn zNl3zMxd3nkQvQOH2SCDXnE*n+h)9?%6+m7rL5h`nuL2~@mIxs9lZ=GfVgZ;DBCi4@ z%&riC871@pNSG}WK>5fyK*DUH079PwB+M2Fz)bXdLqNi8z5vW^4ITgqvv~qA)0`dv z3A4EZFptFZ07#h45rCQA@Bm1d%@%+u&OHDUX0rsaIPy6_!fd7h%=m~`0TO021TZ<W z0wm0)3&4z#c@-dGHcbGbA0#BqrV7AR1zrV6m`xEtXnRh=Y_b4~MovN!W|IV9Zm#f# zfP~pZ0hm!j4}gT(1Oa4>90C$%;{{;;(79Iu5@zEB5V~4U!fdPnOkuVo&8$l&Pt5AL zx^AhpV`moIcRtsuw~xNltxC@F_uO{z-S3yYGJR>c^E+5tjS+z9tvvveR-*-A{;a15 zK+<ZI08DZ20g$vBDS&z2ZRi1zv>G7*)7*OiB&~)Ez|1sz03@x32_ReK5RkMQDge{m zdlevQHADcjBP&4CYOnyzIH^|wl2(HRV0OnI07<KX0x(}j9so(J0Rk|O%Ju+ATJ;xz zdGdq@K+>w80L;_KJOGkbeFb112Ic{fwCW>(<&n<;l2*M15c(V-Y1K;rlOiiX(&};n zgnp2awCX8<`jHhNY1Kmjb0YyrT6GtIxlrldh9s@J31CcQ1xQ+T6@a<l)vEwWt1bdC zS4uqql2)AsV1`&c0FqXh3BYtl9so(JP6B8hISENxbris;NC1*n9R#p25`d&tdjX`2 z1R!bEP5`0b10=253ZQmm1xQ-85kTl?IZ3P50x*4n_Z%Q;)k*-NpJXJhS_+^=<QyPr z)j|N~CM$0UNLn=)K<E+;Nvmc8FwZ{lDnQbzY4i|~v}z&%^Y{s`0wk>(3&6By9so(J zMglOEjR!!|s-XZXM?MEgS~U=WnWpn9K+>wd0L;CP9so(JdIIPWIRqrF>I%TLW?ltI zTGbJNY0W$Ul2)~&0Z3Za5<q5e4pjJHWpeaMJ2S4@Tz^rTx|J>r%s#ZvzQ2xKwPo&Y z{SWMXV^!xnue@*Dx?3MfxXY`iu5EVapWeOuk}#udvoNb605eMH0gy1OE&y|nlLtV; zteOBOdc*GlkT9znT>%niRRmBXvH~Q`Dhps_BmfDsN&*-X2|&WEq5#Y_N^cU9FsmQ{ zb903UK*FrN0L;GB10Z2mE*gM@Sy=(}kDP=g%*qI0Xe0m$v(f@EzeT(`K*Fq)0L&<% z2SCECqyWsbH#`6mW+en*u1$CVB+QBnz?3B(012~V0x(zVJpdABMFn7XWgY+tvmyeR z6Zsq<VOCfG=59}~0wl}|3Bc^iJOC1A1qEQPQF;I*%nAsgOynFOVU}M2p-(~*X88mV z`cX>4EUy4UA4DX~@(3XGbxgu6w*btaboA~55@xvskUjD)AYqnM08JtRNSNgifSKm> zhJb`wb^(Nbl94dWCIIuebgu#=%(4m~YvddtVU|Sz=CO!g1xT1>7J#`->;aH4%On6Z zyWjzkFv}=_(C(OoSq1@wu9A^3OD_O(rQRC?5@zWHP%82^Bw?0T0HMzT5@u-xU>ZAb z2uPS+{4w~8h=kdH0x);@coiUFc0mB4FC!9W{|aDq<Xu3*>>mM`=V5t6K*H?20LDgE zfP~rK0+<pBK*H=V0hnhW%*%Evc|(eZZt&+Lb3VCa$Hn)LZ*RGxW$pj!zj$iE{%lpA zJ9p^R(I$5t%$iV`ozu0=pA;SZzz@k2M#(d}HvhKqSpk>_z<2=ElbjL2IB)np0P0Ep z6o9$s-UFbX<g@_HA5-)Is3-YD0A^$C0Z>o!y8z7BfCoT5$teL$i=2eill&$C^BLq- zfO?XX0$34Q0qRM96+neZ0P0Cj2*7*~c|$-w$u9yh16&>e^(4myV4gzc0Z>o!vjEI} z6&?WfBtHqDV&o*Gp5#XX^o#_cp5&MS%p|Ed1k{rp6@b~7dH~du{2%~xgO>+DJ<0b1 zFxMzO0P0D;6M(4-JOJuRjtIbPiaY@7Nxl_;xwFIrpq}J^0vP2z2YUVb@ueVL-fqht zth}#%w+uB}?Wi#S`9f!At;zD*zOoxiw)<-EOZ(ea;UL{N0w@y+KtZ~%1yDK?fP!>~ z1u!!bfP!>i3Ba^9-W;GH-IoHG5m^BW(tQy<2PjB)NC4)O&>I2@(tR!fbD7u!pdj66 z0x%cKJpc;QeJTL6FYo{;NcV{VOmFQ0P>}AR0754r1?fH(fVoEGRe*wY9|^!bB-jI> zAl-)oFnyH=KtZ|#0x;tv9smXDJ`jM}7kB^^q<dcgp-(~z((M<3c`Bh-0SeN+Cjish zdH@updshJFB9#X~LArMYFf8(ego1SY1W-E?fP!>y3n28Xn1XbB1<)|E0u-d%BY@D` zkb-n?37|-11t>`OrT{LF1fU?@ZULAFL3z&s3evqHfW?s&AZhiw07^yzkhIz*fbo$4 zB&}W(fVt7mn*$`Rb_yW$lZ>R*s{$~W>%9t)w0cDVq3t<ItCs~3`aM9>>Lme~+RhsS zl2$teki6)Y=w3|m%M~5~NvrJwD3s{hNq?6L0FqYQ1W-8=fTY!n0x*Bm&l>`gRxb#k zX=DXRT0JiSGg9nTfTY!P0w^3=0g_f*1u!BKfTY#40vHtuK+@_N0knw(AZfKl0JS0k zNLoEDfY82xq}65tn5PhVw;@TZrvzYbwDSN+T0JQMvoF~2{*C#QW{q^;l-V8HpQ*O~ zwqn;8x~*e@Kd(&p(DfhgdEmkB6Heay`#tq89!(gedqUSX(;Gvd8=XGs+6vOqwON=w zE&%gvSPy`N*<%7Q7s@>V5@wGIz+9#E07#fUA^@{3^Z-bhJuHAx-b2s>AYryi0A`@u z10Z4ckN~<xR)B=rMgf?oWP24LVfLT^nnhNCgxLcEFuO9Z0wm1t7l0X{@c>Ae-6w$g zkwZYjY=Z#IP5)j6NSNI#fNGHyAYpco0478NkTAPj0A{e>8v+t$>jhwbjd=hh%<d9E zmB=9=VRokg%rA1U0wm1t5P-Qr<^hl}yIlaYBZq*5*=+(arKwi|5@xpwz+9*H07#hK zB7jkmLqNi8od9}A0+2AfSpdBv0Z5pw6+q~1NWyH507Ab9NSLh_Kxk(~!fcfQLLWpV z%x)4u<H$)!!t6!?G>ilwVRnN6sz(BlFuPs=B_aVxm|Z6TGuiLG3rLt<D**H7{5${> zX4eQHv@;@McC`QsM9u*cW>*Oyb0h!>vnvG<x<Em~Y^4CQMOJ`>*$M%e&eFRJNSG}b zfa$9|01{@)1YoYzdjKTNmI`1&<QyPjwnPA-pJXJ=77HMBk&1-b6$0oHIRqrk7DW#M z3A2R)Fs-e37mzSpAb`;I0TO2OqX9^m%@aU<ZxUvCEo1VbITB{8PGneoN7t`TRek5{ zA8u-%w#J-=jjK+7Z`AZQM~W4Cb>y>eClqFLb?r*twTHZU^QDs~=-MpI<_N$%hRXvW zVK!R;=4M|HfP~pB0hq4B10Z2GQvl}jkOx4*Y=!`m{coa~m?FO90gy18E&%gDLJxq1 z*)#!|`zkyD5@u5c&?Zs!lm0FhLqNi8iU7<_|6T=1m`xUdxxL8)AYnF10OsO|2SCDX zq5#Y_N)Ld9*#rTYK~4{VgxPojm~UbafP~pN0j!9;4M~`d6+p{K01{?n1YoYtctb$K zY_tH%L{@-=*(d=d{|-+gic~y`Ntlfkz^FvmPWro40FW>nApkSO<jnyRX2S(wT3Zi* zgxN3wbdMYY5@tgMU@nk(6(C_YL;z-<+5;eAHdp}W{wfcEgxMegD3b_(QgIuSFdHa< z(9Vd2*#H5whJSyWG^wZn3A6qJXdVeb!mOVF+C~D9FzYJ-GtcVX1tiS+2%ubK1xT3n z7C>loO2Vv{0L%=NHv}ZiE*F5QjXeMoW<3QE`ZgqC)<XcMwe>1M!mPUhLca+~m~|5X z-i4`o6q7LPDu6afkcxK!39~K&FkOW=2S}K87JzAMJOC1AmkGd>B_03?vrYmS6*&h; zm~|Auz(@cRW*r1z25P+_AYs;C0OqNL9smimb^>S=IRqrk+6rK9BmfDsHUh{V2|&WE zwE#kwYDt*25&#w;<;!T?nW~qh)$tEEJzpUAwZr=lc<sAee=pax;uWX%zB6QXj@+f5 z(TVMcCb6_?DS+ijkm6<J0g$w6A%H=V03@xN3&0H0c@-dO)l2|+BP&4Cs;L0XgCD#K zkhE$d05eqW0g$w6ECBOu=mC(lY9xT1k#m5gRYL)oDK4)9B&`|<U}R(kNLtkwK(0st zl2-KuVD9$xhJd71T>+S>ZV!N@Rh{SxkhH2TfY1jKNvm1{$P_sVNm|tufVoub%>j~D zH3ZN%vH~QnstdqeC-f>n(yE#O7DiTpq*YY`m<yF&1xQ*|5r7%2_W(#*RThAG@Ph|H z(yEdGibT!<l2#Q3V4lO|Re+>b1pzFHtN=-?@&Xtd2|&`SoB%=}L?o@s3LvyEAZb-b z0K+4PfTUGv0hmAO=-mY*tx5^NT&VN_NLrN?fcax$9so(J5&|$c*mwXWt%?i4TrKwi zNLm#WK<E+;Nvom)2z?upv??Nis*%qDl2(NUV4lh6%>j~Dg#=*6csu}-Rs{tR+8vX$ zDj<N+RWg!R`2}F6YP}&KX_Zd^T_f)Tl2&;IU`D&W3XrtQBLMRR5D$Q)Rc--<ew325 z$|V4EzpGaPl2$pRhk&G24gr*oybDNLWfwqbUqI3-n*hu}qc;agT4fc0xmdmL(|O77 zPpPXrOMl(v>L1b_AHA>2>koZ$uE&ZlnI3QWTh-Nj=RVYQOv{r$CEVqeMb|b1G&k+8 zd+At2x;Fp5aApCRtF#^f^(2`DV7dwqfO?XQ0x;7X9su<u83a(-djxm@)RUwafY}y$ z0MwJD6M(rq<N;7ml2!ob*&7}J^(1KoVD5AC0H`Oqc<kcE29cAHdXoPHurv~YdXftQ zFt-?aLqI*rzXAw-6jM*~j{p`#4gvKf=LOI+5`cP=zXf2fQF?QLdXm2c&^WRJ)RUYO zfVn{CRe*YuvjP|vSpn)v&IrJird|c8C;3wVrmyk<s3$os0CR(l2S7c^9|E`{at=^W z^1A@c^oCaf>Pb!sz?7y<TD+P338S8*+r*L!U%Y<)!f(su`ToMgdp38i@MZl;pSBw| ze?_UP*&8*Rmar%JP1iO*h|f+upL}GITsvKxLwqL%V15vL02Jc;RRHD@OdbG*_)ZAG zTo>^GD8%=R09tu>pa(!9zT*NgHH8O2A-<mlU`l%rfI@sf3Bddo@c<~q_oD!sM$Q2W z@f{O@nWgnAKq0=P0x;V`4}d~^KM26wW#|D=i0}Jo01EMaCjc|f>{Wn5d`ARe9@Xvv zP>Ao_XaEZF{Z9bqrhl&j6yp0v0A(W|L=@utS^)hb0Vu?GSO8{M<_!Ub_`VW=zANER zihUIx0EPIz6hJY!{Qui=?g3DU?+XE#u>}u+LVSk=&@!?D6yp0_0Om5WR{;v~eI|fR zkrkj2-=_jF*CxCQP>Amn0fat?D8zSA0Os0+R{;v~eJp^fk#m4Td>;v*RwMukvkwIj z`ZgqCc0d5;@{l(NNSJ*f0CRD~10Z4cz5sGX&H)l;`vqXenY{{-Fndn`lOroY!t7lE zm@9N%1xT2^BLFkR=K+u~+b00?bW#t1gxT8y2<?nWnC%sSnVs<}K*DT~0L&xtJOC1A zZwbK6(0KqP%-$40=qecrv)uwPGjv`BNSM7LfQgY$LK0@L3t(m>012~Q0%#TqK*H=b z0py4TAYrys0HKqRgxRYC2>mD}VfKmurbG?_3A2|4P|^d~U-P|7((2ns<}`n)T;-LO ze;B&-f$WoOKep!YYU{q)o_EK!*>`n*`{vtNTD>Fy^L6Y2khIz%0CSDV10ZR&T>$2D zzyly@wM_u#1}_hQq}7W8Fi)iO07zQBAON#7@&HI$JuiUbk+&g9tLFq@_61%ANLp<b zK<HgS(&||O%!(WWl2*?MzzouPLqO7MivTJ`R)D0{(*iI*NW2P=wAw6yxseqhY4wx< z%mj~D0g_fv3cy^f_5es)Jt2T;kwZYz>Tv<|j07NQ^_T$6_S_o+l2(rjz|6CH03@v* z5y0TcAs}h>umHwH0+6)Y6b(Sq>Y?a4K+<ZX0D46Z0ZFR|1rYi!AZhi00L<>#yA4TN z-7kO|kwZYz>OKL4eh-ke+8}^|krg0mb*}(2M*@(vx<>#RBLPTS-7NrfudR0%khEGa z05eVJ0g$x1O8}u?L?o^56hOPkIY83t4gr|v)EfelR<{cvbd89l)olVWlhs}YNLt-0 zfY95Jq}43~2<?nWTCEd+dGLcb1SG9)7QooZ+mNKyS^<PEP>{4*BY@Bk5|UP{1z_fi zy*WVAYLx)YJ@*~}NvoR#&?RyblC-)}0HI&SB&}``fSD)shJd8i^#TZOOh{T?CxB38 zL(=M60hkLECq@iOj=?I8yWz)v6+fT)+>ky~D=p}>;K-2yjqCND{QMQS{PD$SA5Qsx z(3FI`yspu;&G%60hi|?l%;?%I%&rzdU+)g|07#f!B>?kt&;uZ0cBKH!eQq8A3A2>~ zFu%w>01{>^1du;+4v;Wg9t}XkY?%PC04aYl!5ab+W=jQNJ_J1g5@t&Ta2b{$#nu83 zfP~p%0hqrb<pGc|yFvhFh{^*XVYWyBW>@9`kT6>)fY9dv39|(PFgN{s6(C_YUjSx+ z#seT>HctR%bie~3VK!F)p?3iZvpE7Vmk7NIkT9Dq0MpiZ03^(23Bb%QcmO2KW(uHv z<hy``*$e>;j|3oLHeCSb?hbDVNSI9%fVs)a10Z2GRREzMr6kOz2%ux+93WvfSpa5s z!5ab+W|IUE+8L2Bn<#)ukwZYjY=QvH<0rf!AYnFM0O=wtK*DUC0L&k=^D02XY^(rU zL{@-=*%$$sON3qpNSKWlz`V!`kT4r1fKibEB+Nz%z&sez8v+t$BLpxxvH~Q`h6^C{ zK}5oAm;gdwMkLIJ3LvyEAYnE{0HL2`B+Ld!SAc}sAOQ@CybDN}4HUrqNB|OM0|XHI zC?;XnUjU))ISI3V0toF5NtpE&fa$HhcL52rJ_2YOISEOa^%lVFNB|OMy#z2J5`cu+ z<pMC5>8Aa9Q{g0J39}NVvfuXn<L928d+L0x5$P&+KeBcE7lU)Y@YBu`gO<Ph{-%=& zg;`HsyS(?0Z(Tb7C1FO_W?|Mt0On7IcmO2Kx(i@bWCci=brV2|NB|OMT?Jsi2)!X7 zVb(<e=8Mn+AYs;703#xYfP~p)0vH_$K*Fq(0L%oLHv}ZiItsw_RUQBdvkn4Cex@cG zhZM%n10Z46UI3;p@&HJfwG)6DXZ8R{n6(u^heXv+`nyyN0SU7<0$3giK*FrG0L;}H zZwN@3wGx2&Ip_h9Fl#A*#gRim!mNb=21WvqFl#OVvnle1fP`5y0St|-0130E0>}{w zK*Fqv0L=5)ydfZA)>r^$lGFnrVb(|h6(Wa#gjquYw2cHHVb(wZb0PsqnAI1+ut)$B zX7vQnITC<`SzQ5`#?HG7NSM_TK+(twkT9z)0P{35uL2~@Y6&3pNl3!1rU1+hUS0)A znAH%#+{igV!mPRgaz_G?Fsmj2Qx$kaK*Fr5074h3NSIX-fSKU&DnP=lvH;9Ib{+r; zvq}OO7dZ(@m{k-&=m!Z2vkC$z7g+%kX5|GC`Ys@0R!#t+AEhMB$_gM`<PeZBD<go= z-jIY@X#uQ=tN;nKQUVBFA0S~?QUIZ!WF*W=2q1KchJ;yh0rZKS10>9f37}0R0130A z0x*xlx~+1L3`xj}pAGwO(ysq5&vRAhPqrW4_2=O)2h^&1q5sSe>K;GPW5}1gH=g6) z7cL?I)0lVw)E5*MfT@i=0O|`03BbGyJOJto3JSp7W#|D=Ur;~*=4!bIKz%`e0krmR zLl1!Zf_wrnA4DDi^#yqaV0uFjfck<w0x(0>9su<PxdmXZlzITv7vvH^zQ{>PeL+qE zn2Xh31*k8`Apmo8g$F==L3RN&h#Ugy3$h6yPb2{K1z81PewKSfKz%_L0aT5w0QCi# z1<)-Lfck<=0%#NoKz%_*0hr76-W;I5AcFwR9lss`^#$n#Fe-8gs4qw-fY5gV^#y4K zV0OnHuIZS(FHAwYEhjrKuh2H@#~0K6F+JU(fmi0Jzh+#9F~=Vsa^pL7suyTqDq)Z= zjjnCVlAYfc)K&FIJqcZ#gLD^<+SvsUfP!@Y3Bc@0JOB#PT@XNJ?*{MyC`k9O0GdPs zP>}8)0hm!juL2aLJ1>A`krkjI-QNNTorDym`%3_!&jAY3ofAOT$RVI0-P!0Npdj5D z0hqgsyt{ycbbkuKH1{3=1?f%;zzk7&02HMALjZ##Cm{vteiwilEB7iuLAp}{7!_Fo z3ex>1fY1jK1?f%-!2BHahJb=}zY0K~R`4f9oYVuLAl(T8m@9N100rrO5di%2_1CGW z00rre3&2cqc@>}_-OmCr_u6^@6r}q}0Ok*ucmNcn`%wVq5}^k`LAqlCn2fV96_b#H zbVmg+BNBjubUz3n^rMu5bl(fWOz?PffP!@2MFWs9J0gJ4-jIaZw*oMKUDq1|5@!Ds zfEgq607#g9BY@Bc5ec)e1z;xmyb6#oJ1l_E4-yh)UkRW^<dcwu*_Q$s8wo(d><a-* ziUc5Gc1Qqbj?J5dB+Nb+fGJHq01{@O3BXhZ9smimPX%Be2Ic{fF#ALRjUy)^3A2L& z$Px)a!t7%Kgx-cE%svtT79cg95ec&o1<)M{Qt?$x!t8(m%t*0!7mzUfKmg|HBOU+= zv-bsH?)vrsNSN&xK<Ebv3A6VEu+*D`)ABbckn~?jT@`6p^ov)A9-5i^Xv51py|Z=c z(xOMtJ>TGt?pJl0lE20a?K&nDX7B3SW@Ego+KTi^*VacAU7Lm3I|49U0uO+M***bG z^s4UxkT82&0A^3(0gy1;D}b(%6(C`@M*t-v0Z5p=C4lLX03^)b6o7dUnKuVWnC%vT znVs<fNSM7LfWnbOK*H>G0W6FJAYryk0Bs@xNSM7Q0CSbrn*$`wb_&2e1Ihy+VfLy3 z%-^;307#g<A^<Z*=mC&0dszTIA}1jUvzG)gB@%#y*$x4i-r5@i5@y>4U>-!~0gy1; zCIB<Q<pGc|dr<&pg2w|OVfKOmMn+CT5@yc}phF}83A5(}V4er)4FL(Wtpey0SpgDe z&kDdy@OTv<VfKswLi+*|W?KZ1IdTX{m_03kR*?WC%r*<4N+bXYv!?`L9);yiLK0?A z3LrTio2U#a7RWpR5@t^bz}!{f0gy0zTma@)R}X-M*<%8zpQ!ptf0v3OAYt~X09r=^ zkT82h02w0zNSHk=0P|QxZw`<!+av%pyWjzkFndS<rmgV+NSJLDKxlhT!t6l-)Qg;i zB+MR&1|VT}zW_p4N=caACje8Jd6STY*#-fGcE=>l?iE0@$Vo`T>>dGx_5~!&?iN7Z z$O@1!TQ7jn=9GllT>>x<|M2bt5@vS_z})QX0gy1eLjdMh*H7zwf9d3jgBK2Lt9Ph= zfw%X4KXYEq9~zc8Q0lvx=U>0;uaWtCW^8fc086Xe1z<`m4}hfAZ35`;-31;1Nvm50 z&?^#vq}43~F!wfi6(DJ~P5`wcD?rlfW&xNhBwhtbTCEj;Y0W$Ul2&U3U@p^n03@we z3!qKp93W}6N&se(&#M4QtD6L1YC8{rq}7cAFuw^s0FqWW2*6ag9so(J>jjV;21zs% zQ>+ho03@xh6F|vC*G~GoQ~;2)x;7esq}4S7=p9)Bl2%s>!1RXR93W|Rl>p4MIXwW9 zR#yt3Pvj7gv|1?ubB)NW07<JA0x+GC2SCzlxd1}Hh)7y36M%UTlve?gR!aq7E>wB| zB(0VRz+5Nv07zOb7C`67+mNKy6#^I+2|&_nkpRpU5^o4dS}hcSne6ufNLnorz!i~0 zK+<Zy075^>NLtMkfa#9CAs}frR{)`(WF)QT2%uQx93W{mTL5N`$QuHZR<i^U`aM9> zYNi0DMh*c<s~G|aU8EvuHC+JazISg9khGd608?Ij03@xZ3LvyMBxyB80A`xbs{l!> z$pWYmc^8nhnj`=-P3KjBq}4<LjESrONvjD0=o<+@(rUZ_l2`u|QKVvlf~3_r0hl{{ zyg5M9YODavWVHuC(rSzVLZ5^rtwsx=cB0`=`ny!j0g_gu1W?`s7?ycUa`H$CtXA6} zI@A4hsns_uIX=1A@iDKiT>nkQ|CUef`)!WC-+XxBuOkU}d5zSy%?&o$Kb(C@n9;Ra zn2iv?2=5>70gx~oE&%fwBoBau*)Rc^O9LJN3A3RBSP(e`B+P~gzzk1#6(C_YSO66w zD?q|*kO0gB;k*ivFdHZUvn})hNSF-}z>vrxAYs;D0Os*0UIj>)^%Fpc$O@1!>nniq zkpLvj`Ut>GZ+JsM!mPId%wW9-K*Fq7^bn9RyIcTfq}Zzf3A3I8FqZ~A01{?B1YoXD zc>pBLx(gumQB1<Dn*d5jJ_kscbrry(NB|OMT?8;Z5`ctRX91Xvu{Q}xm|Z3SbAikQ zAYs-?0Fxt!fP`5`0hnExR{;`c9R$!bvH~Q`+6%zk<K$I<gjqWQm`j8n0130U0+<sy z1SHJb2*6yQ@+v^WthE5<Mpl4?St|jAzK%(lwfsNY&NAAnstwz8cQ=Rb?(XhxIHYuU z+6t(kqGD2ZVFxM(HrQg3A}Y3GWANSI+28OR=l!v-agQ^e^MgO<^<CF_=3HyfXI}SQ zTL9+y7H<ehn6(u^+sGjxVb(?f)gu8&n6(x_=!X#rvsMByH_E*^K*Fr007AEDNSL({ zK<&smK*FrK075^ENSHMfKx$+KNSHMhK<EYq39}{wFjL*$T|mODu>i~fjR!!&tdRiP zM9u*cW(@@px+*4N)<6K$BP&3{tiAxuK&>|iNSM_Vz~aaXkT9z&fY9EMgjpQ{gf7cT znAH}5c^f{{{QsZwdf?mkd#*@5b#cjA?Vis6OtzbfcG~&X?OzN%^!z9PR=cCshEx3g z!nFi2)|&$!0QChm1z>K`cmUKF)DS?A$O=$jP+b7CBLS!{s3rh2%jgXO^#xT0P&l#z z)E86{K<HgSeL-abnCjLW0_qDY2_SFe5Kv!`B7m%s0Mr*$6hMba0O|`W2*7+ztv3g# zFDNenGsWcrP+w3^0OlT%2S9y6Spm$AoCDMslo3FlNC4^!N(;c;Bl3oT`hrpdFi-q? z0Mr+h6oC7-a%)LOeL)EUn4xN~0@N227eI-~Nl1M`F#*hr1fag4r~pDg4XH0EA^=n0 zkNo!9glkoh?ogk+&G(Hfu)TD(ZTaTy?*CKk{!bm8`E-RTJuW-=>T8S3&q*4jE39jq z%faz^D<*PZdR;nQn}c+P1TfJXeh+|xbOi-q?ooOG6r?L4fQFG3pdej-0hph}UIi#f zmrnpgBP&2by1W7?7zsc@x;z3fWr;Tg6r{^7fOe4;pdei?0hrswUIi#fms0?tlaPXR zIilwP1?jR2z+8=aLqI{gYyzkhISDC9msJ2}n$xQQ1?jQ~z;qQJ00rqX3&2!{9smXD zG6}$pm3sgbq&s`k{t71#fP!@Y3cz%h9smXD{t<w=H{k(LknV2*n1_2j01DFmC4i!l z4<ZWEoe_Z95_lD$Al;t=F!!lF01DFmAprB;oE`uL>3$bL_sBUwLAu`rU<xy@0u-eC zRRE#4AqDAv5r7$@@+v?<x}OCQx+*4Nc3J?TAIBujeiDG0Y4(PIgxQY*NSql=b}yzo z=I8;CF#ACOt&&|k?ROafAYt~s0JO~mKN$cZVfLK>LYL(v%)S*sNBH|QrT<n<Zw`<! z`z9KIgxS{uF!!mw3Xm}SD!KwB%uYoEkTCmF0OkoFZwN@3eIWpIpV|W;VfMKI%!76w z012~`0!WE`4v;YWOaSJKqP+@`FgqcD&@CDgW}gbcd@G?>0TO1%1u!mh4v;WACIHje zc@-dGc2odMA}c_`?1%t*M*@&AJ1hV*K-0EF-9#s$mDJK94S%Up>{Pbm^LHN3aY>IX z@9$dO=ejE{edY2$KKt%eud=z53bRAHwwWNCyyKFDUXd`PYqK!>L;$9+^#DkieJlX| zCGeAOJ?a6FF#AXV=I)FKK*H=p0hr&I-~o^@`#=EIU;zGSLF@sLFgqxKwUGcM%-$D( z*_C+}AYt}ibOlJ5y(<87J?d3}gxNa+FoT>P0130V1<)jN5|S``O919BtycjOW^W3h zdSnGin7ttY^Ls<Q3Xm{6Ab@(26(C`@UjU^d0Z5p=E&ww+;0*x@v)2SrIkEyI%w82h z`A7f~X0He!bUi@A>}3I%#?G4qB+OnCfa$G001{>|3czd$JOC1A`vhPH={x`uW-kb! zQRH1f!t8kgnCB|I3Xm{+P5_}F$0W?26+qL-As}J4R{-W|V{ZsZm^~waj*%50VfM5D z%rkag1xT1ZC4d}}6(C`@M*z7Z0Z5oVDS*%?Aqlf51Q7ahOv3DO0hsTG^(G++v&W+6 z012~41rWL{Ct>!808Clp4FL(WhXv3r@-`%4_K*O~BW_*=NSHk+fRxAzkT82d0A`}s zs{jeJ-2w>xEFfWazW~hWfL8$$X7@!80SU8v1rWMNM8fPI0hr3r8v+t$cMBl&!-$00 zT>_XA`5Yi&cBcSBJ0lWicL<<sWCci=-7bLc9>4>={!E<Emg>2A>bVOhA8T~;s%|fg z+>_&rd!P7f^WRtR>-*f={@Xr%blc?pEUj)6K&MCml2*40pkpKeNvmA~Ftd!_5RkOm zDS#G{6(DJ~LjdMxwO0X>R@((oKe7TOt+ojuB@%$7)hz;O9tl9w>Sh5niv%EPb&~*0 zeeX>|l2$hgzzooM03@w$5P+HD@&HI$T`vH0lga}iX|+`VraSfkNLpPd0JAmo07zP0 zD}V)&w;@TZYXmSk5`d)D76F*Op*I91t*#b;`SK4BfTYz`0$3F}1SGAlj2;4#R+|Md zFtP$9tu_fD^e!N2b%g-T=G2>nB&{wNK<FeSX?2+ZLRUm2tu_iEbXiW)YJ&hmSH&c) z)(ar?Nl4P_QUQ#Nd=8Mbx<mlx>ruVikfhbc0%#ps0g_f12_SSyM$+m+0hpUq-Vl(q zx<CL`BZq*b)%gMlU6hivI!^#*gu@#Gl2+#mU{>T1khEGS05jU{Re+?`S^=a)R)D0{ z8Ugf=1R!a(S^(x*M{fv7TCEa5=p-a*wNe0mB8Pya)d~Srhy);MwOjzEGxFvDNvmZ7 zSQc3Ul2%IvV0uHZ0wk@L2q4rKkhEGH4M5UrkpRq7Hr^1Bv|1<t^O%_jK+<Y~0L&QA zy)Xa2EVd?Zj#nnsdc64J$}^wZGpNO=_K$pYecLSuj@LbXrf-8aR}Q>>M$%JW^L6b> z-W@pLjv?97{tJy7U7Lm3JOP+*NcI3on9UV{`9bIbkT9Dg0Q1PZ2SCDXwgAipu?IlH zY?c60A}1jUvzY=g&)RwwAYnE`0A`@p10Z2GT>$18Cl7#x**O9*pTZsh3A1SeFc(7} z0130H0x;Ji9smimDFO)nEFfVvSpcRm^D02XY*I7;3A2d;Fkgx1Re*$9ssIw7?#Z6V z>CQZR03^&N2%uuJYp4A#0{|q<#tXoFKdV;(5@zEB&?T}0B+SMNAap%I!fcEHLRUm2 z%ti~KZ{!e=FdHR+(B}XNvylQQ6<GliW+Mb(ZjgDmAqlhL0x&bp9smimVFEC>20Q=~ zW<v!~AaV|nFdHHOQx|y^AYnFG0Osiq4}gT(AOSRv90C$%0|k&02|&VZfB-@}BNAr) z1z^51-<ty@%=!r+^ifR0tgir;M$Q2eW_<)OC=!5#S#JTfj|3oL)=L0pj?J5dB+PmW zzzo)V03^(M2%vZ55RfqIE&%gYL|z3*m~|6C=z4&JSyutz2&8{IsaF9KW?cl(4+%2R z8<H^VEP&7r3KC|W1YoARy&)iB)=>avj?DugVb(za=Amm3fP`6l0j!Ojge1(`31Cem z0130U0_YkEK*Fqz4{+0mSrUO0?XWI<<o?aS*C>B%^ULj*EGm_wz{cr0uK23Jzn|96 zd$d)K5g(OJD$H8z+GdjUQ0KQ2hD*YXuFc<V+)4n`z3O`a)RVLnz{*Gf>PcD%pg|-6 z^(4&&U@ix}A)ub5nE=eQH68%<Buxd-F>(l~Cut%8^K;0n0QDq|1z>IydjQmvG!lT> zmwEuylQa~7`8nhPP*2i80H&|<0H`OaFMvvscLDVz^#ov^tMDp7JxN^wm`7bb0P0EV z2*5n_?*ULxQd<CKc*g^vo}`ul+C)x5>Pcz}V09z_^&~X}V6I2KA)ub5x&TaD;{i}l zQcVEnnR^d_dXlOFm>D?-s3)l+0P|dhR{`otDht4zgbka2_g`PIWa{|T?@qVc^wsx0 zj-Soa=DkYa9n0}ov9b5HYG1K=jsx3PaFDK&0L;x14}gMnDFQGbL>>SI=_>kjzyqKl zT?GMT_wE7@fP!@81z`3C9smXD$_c<cY3cz`kglu%Dn||h1?kENASDujf^?+?FgFr_ zf^?+>V21j=IY2?Wk^&eXSpf>tl@Nd#9q=kZLAv4sFgHm(01DC-6F}%~NI|-y0to#u zq99!n0nCn^gcPJJEPHJvB!JN800rp^3Ltb6Qjo5I0754r1?ln&pmXFLpdej7 z0St=-pdejd0pyMZpdeiy0hEsfpdejt0hrFx`z)X!T`mEb=?xEnf^<0rU~boY02HLl zA%IDdbAW<$*#%(k6?+w+AYC>A42i4&Nvo^^=otw>(khDp%v85G1SG983&8y93=e>$ zRVD$L0U8g0q}AEa?6VCX07<KV1z-khJphtc{|LZLad`kFt^ST40+LpL31C3vbAY7P z83Bau6Oy$0Qvjjs0g_gK2%uZ!5RkO`T>!%)0Z3Z?CIB<S;oXKLt$r22s>lkEwE9H= zr6U1ITKz15lt=)QR;L9J`f*Is>L&q&E=oyS{V0IY4GNN0KL{XnyPl-g_W}srswHXl zodC@3`k{NW=SsV86r`(mY*fF34c<I7`{vtrf7@m4yqX8DTJdt;m!4}e_UZw5?P}U6 zX^`$)U3-jo2mZ8ZvaYJ1EPQPiX5R<^ub)27>;aH4`&t0)kRV;0*#jV9_LTrqA^}L4 zof3e#IpS4-gxQzT03^)55P<m%@+v^W>~jH_5h4$OgxN^}n7cC`0130t1Yn*p^8iSg zoe;pf$lH*F*{1?9cj&wdkT5$g0CStz10Z2`OaKcbhk%6H(dZ!{VRl3SW`xKa0upA2 z1rYjaNW$!p047Av0TO1P2*3>1dqY6N>|+6#DJ~CygxN;|FgHm(01{>&3ZPfy93Wx# zfdEn>0Z5n~6aZd7BdcN(X739i5sOQPk%3h)3A6VE5c+9I!t7lEgx&=t%-#`z`T7&@ zHY8#8wg7S_8~(K4Wnd1FFndb?%_9Lwn7t{04v_#P%-#^dlt=&)W(NddW|+K5NWyHt z0LDjFfP~rW0>~2yK*H=b0hq4B8v+t$uL@vMWCci=y&{0ckpLvjUKT*xNB|OMFA2bm z6nk@kgxQM%zyf4sK|;c8p8(9`rd|a|n7tr?qF90qd>WE4dtLyc-7yKX=L8VCPe{V- zSpkfS90C$%dj(J@5`cu+GXe;G6q7J}S^$M2D?q~RDFLjF1R!CyM*wRg0Z5oVDS*%i z5ec&=1kgIN0wl~H7l3JPmuEWg-<u~UyuRn_qm}x;{^YqY4qaXIul2ca{C3l?HJ3K5 zHSh4$N~vGeOe)MC)3wdj*vmyvCt7I<GrBelvquGBZjgBZB+MQWz%+08JpdAB4-24w zBmfDshXi0g1icE7Fndq{6C*1?!t4P7nCnrm0wm0KM-KrBv-<_mJ8}p}nB6CU{E+}8 z%<dI{*_nHDfP~pS0x&-aJpdABcMG6o<PeZByGsC7A^}L4-6;U`jGZ?GB+Tv*fVmp; z07#hKE&$WkcmO2KZWDmn7<&LD%x)FHxX4LJ!fclS>P7;PFxweD2S}Lh5P<pq6>koZ zFxxHw(_4E0B+Rx6!2B9H4}gT(Edr<zISEOa-7ElecgCv#3A397P&l#zB+PCUfY}y$ z6(C`Dg8)MN0upA|3!q8l5Rfq2DuB=j5ec*F1W-A$0wm0?6@Zzi_9h_-vugy98d(7n zW?KYc?o)deAYpd302)VDfP~pq(L+GO>`DQcJ9OR<kTBaUfcB9?K*DU301^rLWEAOa zjaLB@W>*NnJmlvAkTAPk0OkwfJOC1AmkGekE_eVW%r*+ZJYVGjkTBa2JqJjbtrviK z&eE#@3A0ND5c+9I!t4?On3-m;0wl~X7C`4@&!Dv5W#B<X!t5degl<rfFuPCyrm^#e zfP~ov0x;jn=K+u~J6`~1gvbLRVRoJX%6gM9*Q7quRr=AtC90-wSoPre56?VYsZOR( zT6SAjzFOhOhP}P@gZY=YtoPKJd@QZb6~NF)0FqYg1duqjmW(3ZZRk~iq}5shn444{ z07<Jg0;rhmk5Btu1}Z?(YPA4NU*J`Mq}3_`m<K&Q0FqWK1z_gbJOGkbD+FNf5qSV4 zt(FVG+$;6~NLnouK#j<|fTYz@0hk#kuL2~kmP8K$Nvp*IF#7_p0wk>#31D*M93W}6 zPyl9o?p1)K)dB&8K8Q$K%@=_A4N6`GNLtMkK&!|(K+<Zi0P;lwkhGd305j9<4FO53 z*#f8@Spkw(vjkx3d#?f{t!4_q><v8tl2$VWVCs7hfTY!Q0hn909so(Ja|B?vW*z`Z zt7!r-oskDX(rT&zOmXP}khGd2fY22YNvp{M2z?Ndw3;M<(B}Y2tBC?I-+$rF0g_g! z0toF5Nm@-1z|_bOBa&9*1u!}ifTYzp0W^yQAZayL0HKqRq}3P!)QYSCNvqKU2<?tZ zT8$EbxmD{u2S{3t6oC0|P7i>j)d&HEK8i_N4Htl!pzta{(rTChLO%^jS`8IIvB=wy zq}31sBo2!tqsYKcDM_or0tju*NLmdNfO+oSn}j5-1`1$avg)V(E(1eA(rSPJLLbE> zt@;bV3^aN}K+>w80L)0I2SC!QuK>&?S<}PwOQp>Wsh+L}3blXyiKkw8_@Tc~KAi8T z@wHB0oO|%sNB$j|`r}=hTaIdz^psa0U3-W(|8jrRI$PR*Az?<>=I<BoEdbNjcmULs z^b&x119$+`lk^mT*_V0%)RXiOfVny10Z>oUT>woZCn5DD-J*wpdXlaJSQA+R>Pfl? zz*L6b9H5@0vjCPvR)BhvP6DVF2|ztbM*%F21fZUzg8)of;>`i-N!km*%&&L=)RVLm zfVm#^0H`NvD**GvuLnRqNgDx}#?Awvo}{$^%(szw0MwJT5<u_B+mL#amI5&ItX>7E zCut!7^LU8|Ks`xw0nCaV0_sVc37~u=0QDqI1&|U6Ks`wl0hsUPyR`PYf@#R=N%lXw zZf~y}X0<&hbJbVYWPf4hy=Oc8HF9^>Lk~ZHRk<%O{h)Nxo}{s^Z65eOv+aI$Bl^+5 zbZrjtH4=cCBJ=<##Me*&=2O@Mpb%dJ0hlXt4}d~^^#x$QuHOTo5MMn3^h}#l$^J>V zG2;PHh_9{ymM6P*+V3&|Kq0<50+<vDKq0=`0;n7bKq0<b0!Tbol2K$}2q?r?Qvl}X zh&Kr-#8*QA!;}5-X}`-r1t`Q<T>zyc0Vu>*O#o(&(i;K_@l_Rod9uU<pb%db0hmhx z4}d~^l?Biuat=_4uaW@F{FGM#3h|`~Aa7&^D8yG$0E;34D8yGm0A^e04FQGt$_v0W zMIHc!_{s^ud`YzjKq0=e(Q|-8d}RdCC~^`~h_AE&LLbEx;wvQp(-e7gfI@sF1z^63 z$^)PfUkL%2k#-M&LVU#qfO9bY`++?G3h@<-t^f(Mq5>F*CCI><kc3$g0hs$!-Vl&5 zD=dJ}2N4OgLIN;1%DoDZFe@m4&<`ULW(5RbZjyQxAYqnY0A`ri10Z3RPXMN^@c>Ae z<rRSW#U&m939~!`$Q}70B4L(W0HGU|B+PONz<l|KHv}ZiatdH<<PeZB%OL<WJ>*q@ zgjse0g!YCc%(4j}bc=?BSylm5iJSu@%(4g|bf1ufS!MwYjjR9(vrGbL6A3`V?Cc5q zRao9_NW$!20hlQ+4}gT(KLRlCf_rwA$(lB3+G8%TZ|=^?*St00=s72Myj=FZY^^q5 zR(a8|f?Im6JbC7ijdeG&wE9~BW}@5!AZhiN0L<)y2SC#5i~y#2cYy~$(&|qEn99Zj zAZhi70L&zx2SC#5cLA8oau0x{)o%hY&s%!{B&~iGK)J|CNYd&T0hnt-uL2~keilHz z$O@3OIxT?akpLvEeiDG0DEEedq}7iCFxztvfTYzA0x)+<Jphtc-wVJz+~Wa|wE9i} z>mny1Nvm%KVD1li6(DK#jR4F%s|P^R>T3a*Ar=pSq}5jfFs+#fK+@`z0E$IULXuWr z3c&1)yb6%C`a%Gqw;@TZ&jrvdatKITofN=?NC1*np9#R+C-mk3NvjhAF!zW&0FqXp z3cx(@?E#RqIxc{=k#m5g)iD8>-`(L=fTYz?0fhDiB(07Jpm5|6khD51fEkehB&`k! zAoNK{(&`fd%!#Z3Nvn?q5PBDowE9Q@%OWd4(&|G2n8|AIIY83t0|6vX&L%5EI(h8@ zkhD4|0P_Vf9so(J_XQBTKS0vzJpoKgR{gZ!Wnc(MTD>a((;Iq2K+@_R0fa6{NLsxu zfY8Q-q}5vj=oUE#NLsxq08`s}bAY7P8v<w&Spkw(2LxcA`1LA4(rUi|Lhk~SR<8>n zv^yqg^_l>RM9u+{R<8=clvYC@zbApLQ(lXvPTkdi`RAQ?&3v``hQ^I{H+txmVcQm7 zdBez&n-4tDcFfwOr@UU#war+0qt0#q6J~U67G^ICz|=(^012~~1W?->eh+|z*^2@& zb&&@^!fc-a%xz*1fP~o#0x&ys4}gT(^8zs6|KkCWFndk_W?Se1kT82z0K+2h0up9> z1+X9zfP~pI0x<Ke-Vl&5ds+bIa?k@HVfK^&%>5}3fP~o|0gR2D10>9z6o9FXy$X;p zdqMzMfb_X`4}gT(;{q_hxWoe>VfL5+LZ1U9%pMhhxgz%}K*H=10nEZlkghZL07#fU zEPzUp03^&FiUuHI_MiYJM^=D@*#iOyU6PS7+bw`bkrg0ecE12tM*@&AyH5ZEA^}L4 z-7A35B^e2`djw#<|H69^kubYk0I88fK*H=U0hr#}s{jeJI|a}-vH~Q`?hwH2NB|OM zw+q1B9Px&LgxPHZ=oMK35@xpwU_>MU3A0@SSP=<8!fdAi@<jrWFxw#j^E;%xNl3zM zy8ujE;{lK`+a`d}Nl3!%76F*X&Z__kvzrCbGIA1<FuO?rp}S-x%x)Aw!^jGdFuOqj zD<c6&m|ZV`&`C(bY^wl5*8?QXt`k6Lb4tSO+UPkz!t5FWgzgiPFxw)4_K|l13A3vO z5c(t}VRn@OQoRa1@o)dc8DVX14VYPVd!x+{SD4Ul#e~{r%QoJdv&XnEX5BfoTjq@^ zx30KkN>X8VrLJw>04472r?X}H(Z6(U7G|3TV4kb+07#f^5`eiN_5etjT_J#uX$4L8 zPr3~<4}gT(<pSuQ?AmF+%K!igv&#fvevO=00TN~#1u!wP0wl~f2*BK%@G3yUY`p-? z?I90<gxRG6Fwfe003^&V5rFyb4G(~X*~J2=961R|m|Y|QbCcAo012}T1z;ZX^8iSg zT_Au~kwZYj?0f;3ErC}75@zQKAhEJYR)!3G7LYJIR{-XTbFTs<%+?9O4DopYB+S+d zz}z1407#gv5kN|^;ZOTr2Ic?>v(*Ba8VNwcY*q9SkT6>*fHjd7AYryb0HY%TNSG}b zfSF_S?gA2K%LI@&vH~Q`mI|OuBmfDsB?4F+2|&VZu>k5s0+29UBmmP{dXtcZ*+K!B zfo>0ggxLZCgib;dX7i%~NSMtNK>f%`NWyHc0BS`7kT9DgfO8@NNSMtQK<I}N3A0%O z7#mpu5@s_6up|<IgxL%Ml!yc%VK!X=W`@ao5|S`GM*!xVCp-WWX43>PGja$>m`xQx zg-8GrW>W;vFA{)+*<=BjQ9^GHkT9DhfY8o}gxN#^gl^H0FiRCc;=E3>iI9Qjl!Vy? z0fa8eNSKWmK*3~xeA@3aPyrHV;{-4#5`cu+SOJ(HMhm|gng|<6S`B+9@7d|ACoaFb z;E6T6?>Nx5=IhH^jBeMf<>+Cr{Mcn*?JxQJg~te>npXi2fck>b0!WPnpuS*~0GdVu zP+u@o0IMPas4o~H05eSK%>n8Qh6}(<_Im)-7Yq}C`Q8N&fck==0%#mL2dFO?A^`K< zoL&W}FBmL<wUHH|zF<)F9H72npa42XR)G3~0Rjm9FrvPozW`DrD?oigKLMD#WZqps zeL-IVWQ(i-^#y$d&><3l`hwm9Fk|K35Kv#xO919BnFm09K~DiJj2r^$3wj8^)c0Nm zs4wU)0JAmo0H`nMCIEAb#si?fpsN4|dvl;vmSc%64F%~s-&*tMt~dNq;_Fq_Gk=x) z!gHz*zHrK+3m@F~{?H%xozvrjtC9xky6D>a|A3!#U0H$mNBq~5(6u>8*I589;PRQ$ zpSAS>C`i{y0Opt5dH@up>nMOukrkjIT?YY}IX15X6r^h}0CR7`1E3&XI{}y{OFRGy z(zO+U8Rqo>C`i{v0Onf61E3&XYXO*fRu6!JbgcwnntKm`f^;nfV0Pvn00rq<2*BJP z@&G7E*IWSRM!5$-LAquFFc-ug00rrq3cy^Ac>oloYa)QeJFSv^B4uDbKta030x-i9 zUIi#f*GK>(ll}2&zso=cC`i{(0OtObR{;vrH4uRLqH+&_f^_u-urhK8C`eaN0OcbA zC`eaV0H!qchJb=}bp+5kvH}#Ot1W=gB^d?jY6$=fkdelOf^;<n&<qJO@F1cfT@3-4 zQ9^GLQjo5?08CZj0Z@>xngBvSj!BqR6@Y2(y$X;pt0I8bk&}>wS!Ds3XB)f<kT9zx zfY2u)39}Rdgx&=t%qj|?edHV<VOBu^c>Rn#ib<H27r-(k$iSnRgjqQOw2K5FVOCZE z<{N0d+mM7=83CBDzVHA@n3Wd5q{ty4VOB~2q3t;dvyuV`-J&63Rzd)w8<ix?iVGmL zHzZ+JOaKicCm{*5q5_y02|&WEhyX$tr6kM>3n27KNW!d;0J=pE0SU8$0tnrvBVkrR z0ByVq6g%24f7*W`+12Hl=KDW8{?h4tpPsN~$=B<89=LhrH8tKnvh<Pahu*y;>#34S zg;{=G+YEA6TKWIqJVDoHVU|w-W~ko-AYqnQ0A{G)10Z3RM*yZQ@c>Ae<raXsAoc)A znB@{cSMLV!07#hS6o4u1JpdABIRs!H?(qOfm}M7$dAP>|AYqnG0Onf610Z3RRRHGK z$aw%H%(4hzUgTXs!Ys1@%x}%`DnP<4lK|RAR)B=r*-!13z^ecWvwsC(er<;bK*H=F z0ThZH0up9_3&30udlevI_Ll%cS41St&In+7<PeZB`%?g8A^}L4{ULzRB^e2`-vuxv zvH~Q`eiMNC`V;RiAYt~a0D4DOfP~pE0x+|*UIj>){Vae)C^1<X(ruD@03^&7kW z^Z-bh{Um_Z$^Q7X-({czB+PykK#NEK5@tULAha<dVfMWM`bJiOgxPljFkjE>O+pf8 z-$u^?5@z2BAaq$y!t84Sgnk&2F#AdXrZn~D012~G0x-YV)&n46_N4%7MBauZ%)W>Q zAYt~o0L-@%dP6|M?4$rfn^O{Ip9vszNk+o#gaASxL?p~U6~MU2yMTn*aRHe56>k!f zFgqpy^SreOK*H>(074feB+QNopjhM_AYpb`0Ba%vNSGZGz@kV15@w$Wpk^ch3A2v{ zU>^AP?gA2K9|^$RCF^)mC8;v~WXY6iOvgP%rfr#UX^kUS?RtCHKc7z8`qA?(@=Ra+ z+c%w?ewV*PR+d&D3cyTpc>pA>J`lioZw`0>B&`k#piCqHNvrn-P#_Y3q}6)@Ff&Zv z5RkNbR{*B6@c>9#y(55%kwZYz>TLm-5hAYwB(2^Oz}m<PkhFSJ04pK^NLsxi0JAsr zhJd8i0Rfo4zyly@wO;@QBZq*b)$0Nn7zseq>NNqFjfpn|B&}W*02Uy9pw<H*Y4wT# zIv_#1ol*~gq}9s;Fb`LF03@wm5`Y=w@c>9#y%=2ql2-c!VD6B36(DK#f&j8bPC}Aa z&kG=QMMTo-x#%GvY4xlC%<Xz_4v@6kD}btzbAY7PGXhA71R!bkv;ab%ge0w=5<t1g z3XrtgBY@DpfTY!v0tj7}leBt50A{M&yA4TNJuUz<OXdNPw0cYcraAQhNLoEA0Q2Cz z2SC#55dkcYybVcOJuCq8fQ?rHl2#81z}%|!07zOrD1guf2}!F51Ynv|uL2~kb_>8f z+u#9^w7OparZw{bNLt+|0P}5R9so(Jdj$}>EGKDoj{wXtn^ysnR(A^kAA}j{j!9bG zC4kVaT9Q_G3Lq6rkb(A`q}3e)2wj$ww7OjY9V071(&{z=gnkx~w7NBV4v@6kB>*#7 zo$}Ah#D5`mweJ20_O4rZUaL#TFK?5YW7-#={{8ihE6%n&eceO1UcLC(rnX5>dF|A- z%{%bUW}irv=|}(4wON?$5P<nP<N=T{+b#g}b!Z*{3A1eiNE9^LZJ6#E<N=T{yF~zI zpw<H*VRo|sQj-1gX}`-r1xT3PBmi?M;8lQx*^L4)y|o8G!t4eCn9m>&fP~rg0x%C( zcmO2KwhF-f9P$82m|Z6TGr!^ikTAPe0OoOL4}gT(H3Bewl?On=Y>NOoMLvi~m|ZP^ zj*$Q)%&ro^@JIj>W>*SeXe0m$v&{ksorEOJHVMGorS<Lt5@uHjz&zdI0gy1eTma@4 zp$9<1>@oqEDJ~CygxN*`gg%N%m~9Y1=xs>CY`p;HL_P;dm|ZFW^X;VG93WwKi2$$w z>33&501{>w3!otqWMElN!t5deB(j;wC^7&*!t6o;<V$w#wBKa_fP~ov0_YzJK*H>N z0hq?ln}j6H&J%zsO+5e-X6FjP)W#kF3A1$q2yM?vn5`9nsSLdekT6>#fccSk0SU9! z0tju-Ntmq?fcYg>-Vl&5TPc7EkwZYjY=r<q*Mua@mJ1*?vH~Q`mI<J9BmfDsr2^;@ z2|&VZi2y>^ge1%s3!qM91xT1J5<qBcM#5~N07AFvNSG}UK<E|?3A6bESQj}5NSMtN zz`{rX5@vG+5V})J!fcKJ%mh!d{8JOiGA#$EUe)Wx$6K|1pv|dbi{3uHY-pDCbvFJ! zyyyBwc~87n=1gDye&N{ysOt@Z2S9znECEc71fafPrU1;d4PFJPFPI^KNs$$xzF@il z%vG^h0qP6R5rBEP!ULebV447?L=FM<1ycnOdKXY%Fhv0728A~S)E7(^K-I`0puS*| z079Pw)E7(?KuTl<s4qwrfcZ`|Zw^pjFhKz3%fdYX>I=pTz}zSF0H`k*CxBX!bAbAS zu>vq799{*eFBl^LQ`>m})EA5vK<JZ@`hrmcFolIz0qP4z3cy?ydjQlIj1Yj?nt1@! z7YrA`g2>yD`hsBs$nOCh&VIaf+JB+RyZ74ROKy9t!2?yt+|p&~^tF#(a;C(*Eh85_ zH|MfbeM{b0xm401-B4ZIeD_A3Wh?*dN$A=fq#GiDmEIrk0Z@=`umH@phzCGHx<LXk zt*r+@LArqgFgM6N01DC#5P-QL_5dhI*IxjpxAp)iNY_sQp_7n;bbSS|Jn}ZAAYC5; zbch6?AYE?(q(%Zzkgk^i%oVve2`Na|Qvl^7D?mZI9s=kd2|z)*?gE$@2|z)*ZUP9s z4Jk<1RRE16D?mZIE&@o21fU>YX91Wyblz=9LAp)?FqeZK00rqf3SdU$5Kxe=g8&*t z0#J~yy#UP4+#3Q4(zO#nlgJ8Ckglx&%rvK00SeN!5rCOz^#CYH*IEGP7NG|~LAq7~ zFhf)x00rq<3ZPQtB%~l+3js`y1fU>Ya{-v*+#3QCX3Yc;+L(|qYbt<MkwZYjtcd_d zL;{d7Yb*dW$>+@h5@wAAP%p9qB+MELpiCqH39|+QFqNS<1SHJr3!q|T1xT3H6Mz{b z^D02XtgZmC0O?cR9smimIs!1?MCAdHFsm(q`dET=p=u9+gjp>C6pI8PVOCQB=DRt) z3Xm|XA%M^)AqlhU0x+GWR{;`c)dWx>at@F%t15sAkpLvjstBNUBmfDs$^tNzp*IIe zm{k(M_{a*7FiR1@fJgumW)%fszWd<E=7$rXpBlQ)8ci87>8E{T-<$X0_GyFOpE;@g z?Fa8|JF88W7wW9bRpzIYNrhPjUE90^^WD)UAvopQ>DnyJ$_v2!W>pV>gjqQOm_3OH zK*Fr708C-#0gx~&BY^zg4d4NgFe@zpbC1#kAYoQY0NEoeK*Fq~07^vykT5GDfS!>6 zB+QBnpim?L3A17XSQ-gH!mOwOnnwbVFe@Se(_4GDAqlg>0tmegNthK9z^uq2AYoQe z0H!qchJb`w0Rfm>10Dbgv-|?+9XSLf%<>5!B@%#ySzZB{#~QpLAYqnA0HY!+K*B6{ z^bn9R%OwEwq^UOqB+POOAaqem!YqdX#zoEn5@y*25c()4VU|q*r6Vgq!Yr!*Lf3>O z%(4i;R0ZB$K*B7u0L<MP4}gSOCIM85oC74x&K?h550EhXR{){w0TO2a2*CVmS8ooG zF#B5op&Jw=%>EL9nPc-RK*H>d08%6G0up9_3LtcUfP~o}0;n8W0TO1v3t(;}0130- z1Yjn3yh%vH>{kJpkzx;kgxN0wFw+|z013071+Xr14v;WAEdcXdGrS6rF#AaWg(E9K z!t6%@nD2`BDnP>Q2LbentN;nK?*)+9{ZB@bP8)j_AYt~M0L%c52SCE?TLGBf+5;eA z_Kg6{*CcxYB+R}RfEgq607#g9B>=NGeBz(}|DE#M-oC+_ts@`3Z{F{Zc5C&|FB@)o ztVqsUL!T`6-S>OW-Fh%32TQ9{0w|g621xr|y1T#wAZhib0D46NkhJ<j0OpFws{l!> z&jnz%=N<q_tCIp~7dZqZtv(aLoJatYRwo2t8WV2_NLqa=0P}Q*2SC#5xB$%PfCoU* z>X-lqN6rC~R!0SpB@%$7)e!-tMgowuIxGP5kd-$FNLn2dfawc70FqXp2q5&+kfhbe z0x-`ucoiUN^^pKfZRY`ywE9p0<}R5BK+@_10hpm`4}hfAK>-wxd=8MbdS3vclaQp< zdjc?D0OJh-Nvn4S5V{^9Y4wf(%+}1S07<L21z=_wJphtcZwX*o<Xu40>P-R6j|3oT z^@ae<Z8~oVNLn3;t^i4^{Q@xKq+SI`TD>lS(B6=w)oTJsiJXKatzH#?8R_(ffTYzc z0_Yl90g_fP3n28<kfha10tnq7AZhiY02W3L0ZFTU0!WPnAZhi208%0WNLoEFfZ34% zB(0tkK<-EYl2*?OAasL*q}5&lgmy+Gt)3A;uE-%EY4x-KLYL(vt)3D<=mrHzt33i( z894+bt)3LXibw#GR!<1Pl-J&RfTY#q0vHro0g_ga3BWvV>Q#WG)uRHa7Fhw3R*wk4 z{4Dsp=Kca{$U5b9_xSefpFY;KY~8;%eblS`=W8Y$d11x)3*PKq;MaDuulV55b4gEm zJ*;b+9|J>{Z%XXz>R-Ax3$up=V7`II10Z4cpa9Ia&;uZ0_J9DYd-Kl&AYry!0Bs`y zNSNI(fCiBOB+Tv;fO*u_8v+t$_X@y#`-lfX!t5Ra^p6|@5@vS`pj#vW3A4KdV0LBR z5RfptQvi!2D?q~R4gqwE1R!B{y8z6ua`T3OgxPJ;bAW`|tpYInQm+Ce%ytQ2M&ukI zVYX8MLm~l4nC%dNdCbfk0upB11<)a~0wm0~37}jg012~O1YjydZwN@3-7J8ykrg0e zc9Q_iM6Xu?5@t6FU`k{KNSNIqfEJMeB+RZCfVore4FL(Wtpb=7SpgDe*9pMfpYkd| z!t7cBgnkx~FuO(o=CO0H0wm0~2w+s?93WwKwE)auy;lJeW>-a5fP~qV0x-jrUIj>) zZ5Dtj&OHDUW}5^Mx<f+3><R&xIX15XB+M=sK<JW;gxO^RXcPGyAYryq0HF&K5@s8s zhk%6HdI2Q%T$7DMx@5mM2}zh;DgZOl>j983yF>t?oe>GMiv>_9S@qL?mw_Q5VRn%K zLO%^jm|Z9U^JsxL2S}J*Ab`-mfP~rk0!ZkGWD_9+bAW`|c>*v`eS1Sd!t7iDgl^Z9 zFk2^p_Q|TB(c6%O*;)b2^#Bf+o0u)_ztA@S;S**4C|di=)ld8~uHlojHl4nx>l5w1 zuDE4txtBNpS)~4vMoER)8eO}kckOR-zmWJ3G;itJ{N2W@1u#4kfO?Wu0_YkEKt0Jy z0hlpHZwRO-Ss{R?krkkxWVry$ZDOwi)RQa|fO*c+1E8K{sQ}Ek5_$mClPnQ{`F(;O z0QDq`1u!CV5>ijHNC4&sp;rOwNfrvAQe*|FCs`nX#*qNjlgt-@`PKn%2&gBSCjfJk z)B~WNWUc_r6XzZP^(1oy5c(jZo@BNF`bJJd>Pcn^pll=n^&~R|VD_cn9H5?Lh5))m zR)Bhv=>jlc2<KIRdXjSlVA>iFfO?W?0x;7X9su<uQw3n|(Cs{LZX$G~zF_sxMeU#I z)AdZn3%B*|dFHVhS6AKo;fCr{YQ4VW=oN2{`)mOR>81!^sy7Ke01DDg7J#`P@Bk=C zH%S2IgUAD*Al*a(n3K>0pdekU0L=7;2S7o(2?8*El?OmUy72-q^Q;~K1?k2KU{&O8 zNI|->0+<#FKtZ}O0x;iJ?hOG2=|&5nWMl;>NH<CVW}w@v00rqrMpuA>bRz^{3Nx<) z6r>w2fXb0`fP!?x1YqhSuL2aL8!7;Ef4~EvAl(oFl!zPx3epW0K<JW;f^>rffCWhZ zU2@(KP>^n*08C}*0Z@=`fB=eO3DVgb4}gMn{RI%ZAfX^#KLMDpzVIqQLAt&INT`ow z<B)+Npdeiz0n|%&?X=%z0DyvYy#)}uAfX^#F9Dcm8@xF{LAss-2<?n0NY_IE=9?+K z3XrtwE`W}alaQoUHvtrk1R!bEHF^k0T6GbC`PCWT93W}cSpcEW0g_go1Yid1y$X=D z>L`G$k&}?5RR;l>`-ENvNLsZQfN4xT0FqYiqUQiftF{7|5IF}(TD1{CXlq8&s<i;t zMpl5NRVx96HYOykS_&X^pOB<g3jvgm90HP7%>~ds5`d&tGXa=EI`2V5(yFNdaz<8w zq*W6EjEMvwY1LQ&=7C#p2uNBr5`cN`-2)(L)ldMYzOQ-Y+r%PH>Z)k5$DTU-&zbVK zeDmk%N!K4b|5T?3I}QH4`ej!QTY7h!hadYnX^^ggu5I=t=YQDvKVe4KW?@!e0Oor^ zJpdAB^#ow%S3Cd`W_1OCH(>hxDGz{zSsekGNj?vNgjsC?RKpUa+newJNSM_UK!r#E z5@t08&?yptgjo#%n1_43As}H^T>t|kD?q}mngGm=a<2j;%&H2&Tn>5wB+RM^z>E}o z03^&R3&2cqc>pBLDha?m+TsC_FiR0Y=yQOCSw#Vut1+(vB+M!Zz&z~h0gx~&FMt)1 z4<Zs~<pdCV7mzS3D**F+l{W+=%*qHL^fn}6R$2gkBIf`Jvr+=65(z-UtfT;nMFNm8 zD<OcCNB|OM#RV`l5`ctRF#*(y1R!BnQ~;r^840r@0x-9Syay2pv%&%x7C8hY%nAv> zeD{V|0TN~f1rXYrkuWPD05eABRe*$9egT*}^&S8TvwQ-W7&!?^nB^5f=$ep(Ssno_ zimU($v)lqOouxMiNSNgkfElRu07#hS6o7fQ!2=*+mO}t$cEJN6VU}G0p|>Fkvupwg zZA?g*Wfef^qnLzQ76J5#d=8K>%Pau%*ts_eNtk64K<G9d3A3}u?CgS90TO2a3ZQA^ z93Wx#j{rhfL?q1q7J#V?y&)iB_Ll(qMGgT8voiuP`+~Rg|C4BCGH1%P{k7MgykYN% zYTsA8wS0jGSCl)k=T!Ukw=OEy{JBRyU;Wd$*^>&hKXvVS-XA}u^P7pdk4~7;wON?` zApo-_@Bm1d{Vo7AN$LTRF#AmarZ4pXNSOU90P_*x0gy2JMF34ACm{*5p9N4c5`cu+ zX#uQ>1R!DdlK@g90Z5qrC;;<~h~6Y5VfKRn%(q~903^)57eKDaAs}J)odBjr0+2BK zRsi!O0Z5pABY^Rd03^)57C@dz01{?j3BYU#yt{ye*(m|kkE{R*vo8f;=Bd33kTCl~ z0M#QaK*H>E0hqGHs{jeJlLD9?SpgDep9#R+8t^JW!t8_qw6uqxbP*yCfP~qn0vHaL z&y+sJ<pGc|J1ziogUkaUVRkHf2uPS66@Z!I@+v^W?1%t5Ma}^dW`_k}ZWDVIAYpb$ z0P1q#Cj+-33A0ZG&<ie~q1%vz*~bDfzcs@f0up8)3BY_Eng>9_>_Y*BJ_$*feIS6+ zk#m5A*+BuAzRDW{5@zoUAT_cAB+T9uK=w!g5@zoTz)W*`LqNjp9RY;ih9u117C`7- zK*H=T0fcr&B+T9vfVolb%>fc-ZwSCl@OS_u%nk^^Jl){|kTBaX08<-#03^&_7eHud zM8fPf0gR1&5|S``RR9Yj0Z5p=B7h>103^&_7J#V?y-7&I>?Hx1uSfL&NSM7SfT7+H zv|Ls^@d2*o{Mt9Z`sCStr*_=*NS)Q^SK3_g>Nh*BXxaMq_CF50<E@o>bC+akwNC)% zHk}7R(&_~Pn7yF~K+@`Y0ho=62SC#5IRTi)!~-B{^{fEQV`d%zNvpjAFkcYs0g$wM zMgZoT&;uZ8^|SzHL_P;dT0JEIQ&@NvAZfKn0OqRL10ZSjqyWtKE_eVWt)37-!N@s4 z(&}*mn0<j)0g_ga2_QAH0wk>-6@Y2ay$X=DdPD$bW8wjjw0c+oD<g-1q}4+LSQQCC z(&|A0REh*3Y4v~r7Dob*wAw8Ivpx4FAxW$I1+Xl#0wk^O6M*Rry$X=Dx>o?9w;@TZ zdj!xvatKIT-7SEQkpLvE?h-)JNC1*ncM2f1FCb}khXBk?D(@~JX?42*T1O56Nvqog zV9IN+0wk?&6@VG#@&HI$?Gk{wMdJaGwAv|vHj#6Hq}2`qgl<rfwAwC!l*kH@wAvOu z1SG9)5rFx1YThIyX?3#zT0{;3NvoR#kQxa<(&|P5gsurmTHO#m2S{37F97r8zc&d< zT5T0T=!1x))pY_`5jhD-T3suE@sR)|t*#M3`$zziR$BznEfRpF)ztzB{WvCRb(H{8 zBP&4C>Pi8GZqt#p+AM(3RWV7cO#*1>4Z-^--%LEZw3@CtYS^OBmu;M}p;f_yg|^+^ z?`+;GOTNGHhlvHYb{u$O{d+}{p7Odv*EVfU;XK3s6J~U6{(j-h1z>jO9su<umkGd3 zad`mLlWY`#nP>F?s3+MF4M07~dI6ZZcCP}|lUynQ(^Yr?)RSByfY95JdXkF;V15pH z6`-EvA_17kO+5hWNiGzC8Km<7s3*BV0H!qc0H`N9UjXK5V-J9OlJf)*`Xr>D<Xi!m z878j+)RU|efce@34}f}-wE{3>WF7$ZBx?kKYoYYVOFRJTNmdJB1QMi6_Im)-ldKXz z+eiTFNmdFVH4=b&k`)5z9|=G`$#Mah-rAc3)RQa|z>>%cP*1W{06jc_<yW3ayvtHO zNtfvb3ubxznH|@(K3He;!j<pMI&pKu*B-vC%(Ztl-BYdVMPrlpBujK{b2*r!%D0Kr zIQo~a%^|+U0x;hX>;X`SZ;=2dd)4;<D8#o=0Qn*TD8#ow023ntD8x5k0A_f{8v+XP z&5N!8h4|(Qz&vm5Re(Z#a|B>+(0TwA;+ri1^C|2BP>64q08Crx0Z@o<rU1-ymL33w z_+|)TVdQgwLVVK&koZ_jMv-ng=v9D1eCG&YXtHak{VoFl6ylpEfT@uH6ylpI0CR`f z8v+XPO%Z?@==K08#5Y+0W?$+7P>64m0L(<W2S6ddiO~QQ;!72Pxk>L;fI@r|1dt>0 zHlz^WcmbHNL-Q&?A--_}2wjp<h;OU_%xz+?0u<sKBY;tnbAUp8qXl5v8m|Hr;u|G^ zzL6E65Z_1vnCB|I3Q&k|gaAxm<pGc|8!mtbkwZYjY?uH#Mgov98!7<vt%TkXkT4q} z05ePL0gx~oEP&8QF$uFl0!WFR10>7_3SeL)012}J0+=5OK*FrQ075^ENSO5#Kxk(~ z!mO_V21O1539~)|I42T-gjsI^WQznKVb)6kLm~l4nDrDu%}4+eW<3P3JQ9F}S$6@L z%Fz2TB4O4|0A_f?10Z46RRF6Zhk%4x7XfsR1R!D7SpcEkF$uFy0_YT30TN~%1+dry z7=QJy#IsY<s_6a`Cm(6v=jixd*&6lgeC<z%mcD+;vEk>B`*PABLyup5Yd@A&9RyGy z5`d&tdjXiw0j~lit=b7d?h$^{?UZ@|B(2&Cz?7yQ07<Jh0x(lt9so(J)&fX{0r;P{ z5_$k6ty&47Oe6qFtCj*Vb8KD(NLsZJK&!|KkhE$p0CS7Rs{l!>W&$wfwFf}bs;L0X z1&Ieh(yEC7%t*TjK+>vlGyqAfMglNTmUtB)Y1L2wW?$d|khE$L4M5VWz5vQaK8Q$K z)f0fZOXdv$Nvpa7=p9)Bl2&yDVD6B36(DI<TL9)>u?IlXs+IuEL;oHCNvoOyFyo{i z07<JF0;n1}2}xR2kDdc0t*QyYJZtL>0ZFT>0to#qAZb-a0Fxr;07<LL0x&nLy&)iJ zRY?Hmmk4<PB&|}Shk&G2MFCWcoC74SDhR;*u6b_=NLrN_fce$|4}hdqIRTj7&;uZ8 zRaO9@tr<zHG6FC+D!mGjv??7v2S{3#62OYc+mNJHNdeS~1R!ZuLI7rf!J7jlt%?gE zbUi@Qs+a&mHz-J26%~M)CG&=Wq*W0CnD1fo07zOD7C`8yAxW!30x*wwcoiUNRZsv^ zBA){!tqKSLub=*;pH~5rR`~^BzOCE?AZe9P0H!tb07zQp6+lxQgLKAZ<c!L>)BX#Y zmbS-p)Y_0~=lV--8UID6-50gEd(XoAvroRG!TAfH{yg)Cm(59f$}5kqZH6aqd2&m_ z??{-@wON?u7C>R|kM{sbnB@|HxjW+lkTA<B0CP3w0gy1uApkSi?g5Z6%Ps&@8+!mG z%(4l<RE8b^3A3yMSQdE~kTA<405iYhRe*$9W&xPq+5;eAmPr6+U+MvnFgttn?Ag(g zbAW`|zXE6*2|&W^9|4#zqw|J<gxTK$m>5|B5@vr1pl2ii39~Z-Fi(AZLqNjpPXU-; z-{S$0F#AIQW_G~?AYt~q0L(C@2SCE?HvvqGoP;FIeieZE<_WI?B+PyhfN5(y01{?D z3n28ffP~p;0nCh?10>9T5`g(4C~pWznEfaKGr{8lkTCl}09_-8fP~ri0x);zyb6#o z`%VC+x%U7_n0+gN{E<UI!t5IXgf=E5%)S<Ync(q;fP~ps0x$!$9smimQvzrnIR{9X zeJKDl$L3XlgxMDYzyhS-BJ==An0+pQVMvf}gUkaUVRljgiMOpLqsRaN3A4`xV7>#z zs{jeJ69Ook?2k|TT?Q&Z!t7H4gg%N%m>n0uqR0x6FgqrI(AJEE*--(Q`4w*xk}x|W zfY95JgxO&MOpTlaB+L#8U~VJ;3A0ZGP&yKTgxSXeFe60XBqU+>kpRp*s|P^B>_Y*B zw&x_wK8OY&VRlde=5Bezz5ga&UL<u@dt&Y<8|}+}<Ea8q7g(72j|Y!`a(&8^dGE;l z+z(^2JXn3kCrO3b`?|KdO?=ZMFG`i^NB`2bS(v>i0P{6S9smimcLiX!g&qJ2vv&m0 z&wB=W03^)b7J#`q;sKB_drJW3TEqh&VfLl~%pE!pfP~o_0!SF}WD_CXdej3TVRk?O zGm>39?ROafAYry&0A_T>s{jeJ*9DMxt|co&1}Z?p>@@+H%R#RKB+OnFfVoHM0gy0z zMF6>yRX?MXkc8RG0x(+wuL2~@UJ^j)gNTILivk!EIRqrk_6cA_BmfDs7X)AixV$+) z!t8kg<cX{R3A5(}V1_5W3Xm{+RsiNnQxAZI*<Jydvcv-*VfKsw7DUbg5@t^epnD_$ z3A3jJV1{|UAs}J4M*wDy(gPr2_M`wtMGgT8vnK?Q=rWU0WMD-^!t8MYm_a&k2uPSc zCV<e^jD*>v0#J(&KN%PT5@wGGz&vZ~4FL(WhXr7!i9G-kW)BG<bX82k>_Gt(gBkEY zuRrlBK*H<+0hkFM4}gT(ZULAZWF7zsv-<@Qx<Nt0>^=d6eio20yH^0_w>x`7K*H=E z0hlib^#Dki-7SF7eL@mucL~6>HC_csnB6IWj*$-{5@vS@z<l|KR{;`cw+kTjHY8zo zn*dfs4gm?XTLoYq_VtE<gxM|unD5^307#ha6hP<}4GFUy0%#RE2S}K07r^3301{@~ z1W?ZdxU&1biT^-byxoWFd#&MtPG9`C=Bf)e-F-oqzuG_kZtG9JdVSSRZw|chvwAK0 z`-N{2fVoxc0Z?CXvjEIfULFAT1vd%6d=Pm6)EC?+0JAsr0H`mxK>(&P@c^hVxLyFI zBJTp~3$_X%^fsiv;5q?xj;sLn1=k8-a3lcr1=mE+0qP632w-hw1*k8$S^%>n0jMvy zN&tl-0jMvyGI|bBU$9vK=3cS)B&5DzlK@P0>j6+-aD@O&eeVHKUvRkq%<q=<0H`mx zOaP`e^8lzX*cd$o)E8_JfZ3jV6`;Ogy#R_wK8UC<xKscIA_1r`xI_SrJb;!<Z%=IQ zYL|V`-rfB=@1Jnf9gmKid8p&5=Zk0lt?9p8hW~YZ@3HZxuKRv#(jeW%y0)2PTe{_& ztZB4*cG0ytNOzF{>Uw{?2S7o(3kA?55`cnq7YM*S=IB*`f^_E#Ab(^9C`fmn06Inj zP>}9i0hsUJ@P>ebbn65VdKXZTZmj_FMh*c5>DCCqJmBRG0R`z+3t&!U1t>_jN&u@P z0VqhfQUIZ!1r(%PApkQ>>CFKO(k&N&`EpthfP!?(1kfvT4p5M8sQ`*b0#J}{i2zJl z;tc@>=@tuMcw_}ANViA;r6U0-NViY`=8<=A2q;LmKmgq$D?mZI`2sL^X}t<ikZzs; z%si_HKtZ~>0x&noJOB#P%@IK8qnLtpvjt$rN4yG9kZzU$=0@HH6r`Ie0CSJhs{jS* zW(Xj35>k+Ex&X|bdanW`%+3)&YUCUsVKz+w{UQNKm`xQx=p-azHbnsIA}c_`Y_b4C z8xs;{lLU|wSpgDe69s_RPygx*?=~c1mMVbI&jJ!=69f?YX-L9sya4**7^F+|dP6|M zY@7f>?*bBLV+CLa>AVV%FdHL)(7u3#*=PZTZc>pj8zq31k&}>w*+>E8hy);EHbMaA zQA2MMk}w-C05eeQ0gx~oCV-U4As}HkQ~<Ri0Z5n)5kTmJh=kc-0rZTl012}}0x(|= zn(Nu4`O=Uj%)TktvDjnPn-wp4alPGDvb=b@_2wJ8b$s@%5#P1@`nQg|_FkG)m<`mm z%{%ah_N^0|U;omzS(ptFfVn^A0gy23FMuB2@OuCx%=!tyyaPP|5@vk`V73Gv012}` z0x&m8JpdABy#)|@7mzUPB>;1u+N%Hwvz`K|7I_ztFzX=zb1~#qfP`6h0hs43JpdAB z-2`B!i9G-kW?iG_012}$0+<vz2}ziB7C@Is01{@M1YmBIdvkz<Sw{hwZ%X$7NSJjH zz}UzkAYs;C0HIGp5@ziLP$jYgB+S|hpn4<#39~i=$R7zn!mPCbIz$4HFl!}%DUkpq z%vuVdeIx)0vlap{Ux(&Bh)9?<7l64*>H&~2YbJp4kwZYjtf>G(7bGOinh3x&_udeY zFl!uL0TO171W-P54v;WwD1f$+03^&B2q5%1K*FrP0L(bEHwj6Y)f0euu)_l&VOCcF ziFkIhiI7f~cmO2K>IfiokBEd>Z2?SA_Q$9FE&~-HVOC23q0a#lW;F$1$`Wr5kT9ze zJqJjbRTqHy4j!)pB+RM_pi<-{Bw<!n0A_f?s{jeJDgp?76q7KkEP&9~jD%Sw0o0G2 z10>8+1YjydZw`<!t0;ib+mM7=1p$}`zP$>NFe@*B(UEh2gjqQOgl^H0Fe@tnb3yXc z>7$8~Nm{iXovrn)m+jhj>iN`#x8%(6TDdLt_rLdc?L(jJ+jH&wQ(bnkv??Qj8r~3i z03@wS3&6~;cmO1=N(o?5WCciCl@x$!&AbYbv??Khl93f4X;oYR=0>Gg0g_h51kf?E z0wk@93LrHSfTUFs0ZfeqAZb-t0HMzTl2(NTV15{RlaQoUK>?V1L>>T1s{#VRDUd$R z=>d?m$}fN>NRX~M^#Dj(<r6@&NC1*nc?B>d5`d&t9sv}K1R!aZTL6nA0Z3Zq5`g&* z9&Zwow8|*}EI>wXLy}fG1TYQ>GH@G`w8}03^UV|95RkOWCIIuis|P^RDyslyM-Bl= zt1JR27YRVpDzgC0*QI+yK+-Cc079RHB(2UKu@75%6(DK#uK>&(kq1E1>K_4^r#(FY zl2(5UAbaFpK+@_j0fbIMl2&H~Fh8;aB(44wfcgC`-W(ul^@jjL*8?Q2eiy)+$RQwU z^_u|97sPr)K+@`00St|-07<J~1duHffTY#W0>~E$K+@{800u+?khJ<q0A_~7n}j5- zeiT6HhY?Au9|T~&63?puNvrP#VD6TC03@xx6M&hl_5es)eJcR-YrZ`Il2+dcAaqqs z(&}pgnC8^007<K_1TZi1K}6E(lmJ4vXh>RpDF9PkdP6|c>I(rR&P^p7hjjY`TUWhW zChdQ$Q(m3ly=~6mUshi?{Gm5ru0K52^go7|_~!kbOK-U+U*<BoiZ|Pw^pw}<y0#fB z|Nfz!iO+5^)3sTcofLqX?Dqgjn0+Py^NUM701{>=1Ymv;dH^KMJ{3TlWK%Egcj@Mz z2SCE?xB$%cs0Tp8?3e(|T)PKA!tAI3OmFQ0kT5$U0JA6Y07#e}7C`8Oh=kc80St<~ z3rLuKB7k9$03^&l7Jzx=-J1g>%svu;nPv0<NSJ*n0P}2v2SCE?0|A777LYJIC;+o9 z^eRBY?0o^`j=T#<n7t=}tdRgD%-$8iIgtP)%-#_|=*KY$v$qAXFtP$9%-#}!DbBsS zfP~qb0_YQ20TO0!2q1J#NW$!Z0L<@{^oD?h*?s|pPC^o9uL~eg<QyPj_L>09Ae}b^ zB+OnFfEge007#g<B7j7noopO3&>4|1dszVH=7?7T5@s(6z_c|U012}f1<);7_0xWr zfgvDawod?NqSvbc39}ajfCWgOU-1A)m_085^KgX+K*H=f0hoJ~9smimX9W<tM?}JG zuK?EKB*?&BK*H=90fasYNtit?fOU}-AYt~D0L-@%dXtcZ*&YEDjjR9(vnK@*x<^F9 z><Iyc?hlYKdt3l!u-=;kB+MQYK#|BfK*H=%0fa6}Ntit%05iYh4FL(WhXr6p2Rr~0 zW)BI#jFWl*B+MQZz{to+NW$y^0ZjA&Ha&V?VpB)bs{PH!yJgOuy>H=uJ<8l!a>>f) z@4EAij+Kh;960s))z{S>cOQSh@NNN^uc7e(s4uu*02L!EKz+e|0x-q7R{`n^?iGL; zpz#2xFSthlrm*k;s4uu%0H(M00H`mxO918p8xMf`f;$CZej0iJ)EC?#fK`#VA@v2f z3&6}WdKI9);5Gr&i>v_k1-A;IX(Ryk1-k?g`XHjdV5a~^MOJ|Nf*k@-4h4SFHK*Pr zq`qLg0L=E>1E9WOn*hwimL3501-A&md<~5UKz+f@0+;|ZAXEBHDi47Af|~?TC=!7B zf*Ygf0QCho2*BK?^M-)>g6joPHF5~3FW4#ovoRU^PNhU&pa<Cd({}tk@%ks)?f<S- zodb_A|M8oyzaQOLd%#Pp&YSXh#do%!P8y`UPS-ZOvIk$@kf@e=61p}A>8=%kxkcy! zP>}8#0o3(|-vgi^-InMIP>}9w0hq4Bs{jS*t`b18$RVI0-IW3`w~4(9P>^o30L&9+ z9smXDHVMGor}h9SNOy$*%xz*1fP!?F3!p{hB%~nSWddjr2|z)*jRNQ$2|z)*4FWLJ z8{QnCAl-Tagx-b}q`OoAqa%laf^?S%U_m4R1?espfVore%>fG1T_gbWYdt*x3esID z05d}50Z@?c0s(}sh$u*Rz5rH7PC^ROohJY@Oz8~)1?kQefSF<P04PYeP5>Puhk$}~ zYXx8)bMz`eLAo^p2we|QkZ!dAQX_|ef^@3{U>+~=hJb=}D+RDPvH}#OTOj~*qui?i z3A5z_7!p|l5@yQ;P%{#MgxOL7EQtglVYWm7W~|(s10>8A3!r3V1xT1J5`Y;i_bNcb zY@q<m_bzw<B+M2Fz;u=#0131C0x%ESc>pBL<_REg<Rm0vHdg?(BLPU5%@Kep&b=WZ zVK!R;q04d-X0rrf2I;&CkT9DmfSHkVfP~o$0hmELuL2~@rVAjnGa_MjjsQY^0SU8d z0w@?c2S}Jr6@cljy*WU_Y>EKpMOJ`>*<=BjF9Y)`K*DU2Ux9qr<V{3wB+SOF8uikL z8>S9Do_EZNJQuyb^W3e|-g|ccBU77HtUs~Ouf_T%6=oB4ZS%Z!&W#oS3-QslS(v2? zV7WK^9smim2?AIV2|&VZya3F@zFq}Ln2i&F`8nhPkT4r7fGLqfK*DT{0L-0wuL2~@ zMhn1fj6DDnW}^hqHgX6^n2i)b&qx3gW+Md9Iud|{*>C}v-yP%40TO1z1YmY$9smim zp#m^h<Q@PCvmpXViJSu@%mxd<>`T20kT4r00Mpuf03^%?3c$=RcmO2K1_;26F?s+b z%=!z!%ujg$B+U8=Aap%I!mO_VW<}nHB+U8<ph_eF3A5e;7#j&d!mO773Pb{sFzYD* zGrQp31tiRR2%vFf1xT267eMHmkc3$`0fe?@B+R-Bpm5|6kTB~a0CRuJn}j6HIt#$u z9`XQ4m~|3Bp2#5}Vb)OqlOq90m~{|9=%bi~S$hGP=H8nFB+S|gpjYG&kT7d2fY2=( z5@u}#5V|BIVb)pz<{>|C4v;WwC4kV@jD%TB0kn^tge1&b2*AuRc|$<LthoRdMpl4? zSu+9TiUc5G)>HuHBLPU5H4#9cNB|OMjRj!7i_4pYB+MEKz&vs80gy0jC;;<S?H&LL zvjze%^Q;~K3A6eF2<;0<nAH<NsmQy4gjrnyn9K4{m(NN>Zgk4)qkn$uxAgBqe^>9+ zBK6SgdmrdIbjefwHtxM|egE&W&uKHO2TQ9u0_fybzyly@Ra*e&$FT=M(yEpK%pjcy zK+>wF0L%xG2SC!Qh5*cyejWfxtLg$U7o{EmNvmoCFi#tM03@xd3c%c=@c>9#RS|$0 ztoHy&T2&T+o@nrs?$EynK+>v`04BlZ|L4TH2SCy)MF8fa)B_-CRZ#$DqSpf;X;nc0 zgCmE4q*ZwVm<tlG0wk@<Mb80}R%Hb+J#q+0T9pw%?MMKUR;2}CrntO0K+>v|0L(+z z9so(Jk^(SS#U21js}cej5jh7)S``;S=#q@2RWSjW8<pM=khCf)0JAsr07zOD5kT?C zIY82?umFlg0+6&SBmna@NZt^Tv??fo&`C(rs(=7OAH^iC@(aLxFQYdEB(3rZz<d#u z2SCy)uK+@qWF)Qf2%v1_ZAj88w*W%7Xh>S+5`byVyg5M9DyINCMh*c<s~iGY7zseq zDtq)0khIDsfY3D|Nvo^^=n**tB(1Utplu`oNvq5P7#Ima(khbx%=fW*&jFHFXAj%L z!UG^_^{)WT)1DpxNvnSZ&^dArkhJ<+0A`BDs{l!>zXV`LyFCDsR%Zk-EpiA*TKy>i zGuG=>fTYzQ0+<n50g_g~3&2!1T`yme*j-jbv%B8#9*2IqzgO!?9e-G{U_}18uZ%B! z<<RS!_POYuoR>`f<;J9^ynfTQ>v(_sKfhj|_z$$bOxI>%_NxHQ)5abE3A0}WV15jE z03^(Q7C^_yAs}IPS^zC00Z5qrB!K0S03^(Qj2;3KW<LmEO=JZ~n0+q*bAQUa3rLuK zCxDfa6(C{utpLoOdanW`%)SvolgJ8?F#B2nW?Sf0fP~ps0;m*O0TO1XqKANl*_Q$s z5Lp2dW?u*(cO(D_v(E*PFA{)+*+~HuiUc5G_L%_8vkl&DNW$!d0ES0afP~qn0x;jv z>s5e+*>M4wU6}_!!t9s;%ooCW03^(g3cxgW9smimBLb)#ISEOa9TtH3@&&H~B+L#8 zAZKI+NSJ*h0MpiZ6(C{uu>j1sKX?En%svu;8J_R}NSJ*n05ikn0gy2JKmc7LCm{*5 zgV94k!t8wknEO-S5Rfo?PXM8-ViIQW3Ly03n1tCo0tkH)k}!K)0IMSJ0up9#2_W=I zNW$z*0hp)0y}N*f*&6}~-J~L6c0d53laPejegT9&h)9^dE&x-OcyoY+*=qs_{WK(D z_NoBPm#}yhAYt~307Cl$5@s(8AoM{*!tAB!As}J)q5#ZXyEg|&nC%ll#mEmM5@s(5 zU{E9g3A5(~VD1qu@A6<G?;&B<VCAc;_ig@QNWD|r>b&s74>``x{rb-#Cx;z9w{)eC zb{x!;l2n*Ir)yX6{`iXzZb`^G2{XDjf4A|o0x<WfJpk%S_6lHWWCf@vc}4)HF7hfs zJ;~DoNQtZf^(0RTz&!5kRe*YuJpwRaec=I6Px7Py%s0|`0MwH_AprA$mj^&S$>Rbr z7sMU_^(2o8U~1%DKt0K$0x)HXR{`ot9*G8^p5$Qxm}?QQ0@RZ{B!H2TbAWo12L)iB zH1#S#J;?*nLqI*rZUKZo2dF2xUjU(xV(Llm6M*R~y*WTV$-M$FBSanm^(6NQ!0gOD z0P0EZ7Jzxe%mbjF<Sqd$ihK}JPjaUKN_hZ{XBYYJ%@a%NE}r($x;;zYd;hnTHmwE> zzOv(6XN%sk`hpeZ>zw!VyjEQ~NOy+-Iz<9dknVN?m`Ogb0u-dXO#tQ|r3XMkx?2U1 z8aV_Mq}wF`^VOJM1t>_jQvjnPD?mZI9Re`VRd^MkAl-HWn9%_bfP!?}1TZ&p2q;K* zivZ00idO*&(%me8?vWLsAl*#@I42T-f^;_upmQVu1?g@OfEg$C<^Toht`~s0N9h4j zkZ!90%somEfP!?_37}r&9H1cGwE{516J7-<NOz3@Le~Qnq}w8Z(9Z%2(p@cp&@~|i z>8=t$O5`M@Al;P$SQ`mILAuQXXcGxQLAp%>FjL*$ZAd}7D+JIrvH}#OyIcTfbLv%q zf^?S&z%+Iq00rqb3SdFx5KxeAg8)on;Z=a7)p`MxjI01jt4js2JQ9GU)g=Nb5(z-k z>S6(mjszfSb&&v?M*@(vx=;Y-cD;8OkhHo$0HN(UNvrb(V7_<3s{l!>^8^sun2@wO zR{#wnCm~6zbpi-okdU-mD}eTq6(DJ~MgSEe0Z3Y{7C`8S5lO360x*SzcN>zlS}6ci z-Fg5dtyT!YJmuv9khEGZfU=R3kfhZz0o05HAZfK!0HK@JB(0VRz&vv7%>j~Div`dk zatKITEfPQn51{HB&m}_03esKrSF;+u8lL~lKO@T=nV<dlCu`ie<MrBa-d*FzETc{~ z?bl;l(jeVJ|Bt_B{Eq*G8C{!&*#ZHW-<aS5kT9Ds0CPd?0gy18Cjj$v$O9l@Hdg@V zPQ3>}!fcKJs(Lqo2SCDXwg9?C0+2A96+Hwb%w`I}>`A;KAYnE`0F5JufP~p}0Zfbp zAYpcn0754r3A1SeFe60X93WvfRRE?e@c>AeO%Z@TQQ;@u>-s$a5@wSHpnN*~WB`DK z*(3p&uV(csK*DUI0L=BM2SCCsRRF_a0RHD26FdMCW)lQZHxht^*?0j|iv%EHHckNM z7Z!L!K*DUS0I&d=GH@G`FdHL)(2rvhW}^jQh9|rsAYnF20IhHgGB5-r%ti{Je<T12 zvk?L)7YRVZY`6eIKMP2h4HH0UUqHfar~pD2r6kOT2*6BndAA`6v%vyLjhuue%mxXd zawGr=vw;E_9tl9gY=8hlSH&dE`U@bmF(F~rPXMMa^6ml>W_<-PE^-c#FzX|L&@CDg zX1xVaC9(n}%z6pHd_S-^2S}Lp6hP=*K*Fqt0ER{m0SUA20tj7_kud8ffEtk%AYs;3 z0On4;Hwj6YbrFD>XY~L`m~|FF=p-az)=2=N+jJz%Itrj&<Rm0v)<FQFPeKxA?FC>S zvhpS&3A1(rXzC3?YUvV*<eRqla{qqU&+UKy;l$eF1)B_h_wDm`7tYgb`KzTmwOPNS zVXt3~E=VfO+UnZoGidp<xe_~C+S#LPvoLET05d`60gy0jEdcY?7ajl!vsMByqpThP z3A2_0FqZ-z012}e0x;V`4}gSOa{=HDn0|xI10Z46OaNwTzyly*)>Ht4umtJ$r#t`> zW=#Z8G!lS>Sz`g1%R#RKB+MEKV18r;NSHMgKq7{bj3NVbfP`5C0hr%y><s}4v-$#9 znCy>F`&|YqK*Fq^06InjkT9z&0Q1nlHv}Zi>Ih&?WCci=)fPb8NB|OMwFF?k9oHKI z5@t08U>Z9QfP`5M0VI~U$;KfAw;>6$>H;uzkyil{X4M2RCD|XJ_PY#JfP`690hl>9 zuL2~@szg_Sgjr<)<cS;t5@wYIV7@Ki8v+t$DFQH~gdPA1vx)*R-$LX8kT9ztfPs;7 zfP`6j0hs&LUIj>)l@q|Y$O@1!D=UDUkpLvj$_T*RB=v@Xgjs0;tc$Dw3A0iH7#Rsb z!mOkKLO+g4n3aeIAYoQq0HJ$CB+QBlpnBvSAYoQi0HL3TB+QBkz|1gt&jAu<g#{3L z8<H?9Bmnc3cwPlam=zR2=&G26Spfm$kGu;=nB^Bh=q42jvwQ;R6j=chW_bl*W}3Z8 zNWv_S02V}6fP`6Y0j!DyAYqnE0G%TNNSNgmKpzj_{<E(qg6R79<T;xT&b@Km6MIf~ z>VEH-tUH(dJ$BMX`K~#*@S2BKw_mogA4{to0x%E#djKS@vJ1fU1s(uNt84-o8#x3d zt+EQBUnBrYt1JST8VNwsDzgC0&jN1_khIDq0CT(E10ZR2_E7K;khJ<&0A_r|s{l!> ze*|FelzIRpt^O8(87K7sNLu|RfY8qZl2&H~P&)ECK+@_@0hq7E^M-(=)gJ;dx9L0p zl2*S9U|Qr5khJ<u0Onq?R{@e%zY3sTWCciC{UU&>kpLvEeindvzQr2?l2)e$V7`09 z10ZSjlK^H$4gpE49|bTg5`d)D4+1b>0^|(=NvrP#VD6H603@xx6F}&yn55OW0!TDk z$tFTNap_fnq}4akbAY7P*8(v22fPZ9wE9W_rnd6{NLrl|K<IOTq}7)KFprmb6(DK# zg#bd^bCOn{3m~*HA!&6|0H!zehJd8iX97s}2ul1e0}mpSRwo3|2njL(K+@_{0d$N6 zAZc}60KFptNLn2efEjG|CLu|yqXIC~^&S98t0Mvk{VX79byxuAp=+-KB&`k!U~=Rn zBx&`D0L)mgR{@e%9}6J#K}6E(BLRdiN=aIMD1gvCB9c}g2q0VJBqV8dPyiz$0Z3ZC zF96dUdUpXytM>#DItfWyy(@sF-Vpp)_3p$;D+$j=eHS$9k!50@3-@1I|NJAVm(9Fn z^AFDsnlg67=&7Ig`tZI(Nl$sbqidU)=F9#*lYmt>N7v@>7k*m+#l1h?1E8MdEdk_@ z1fZVeO#xJj1fZVe4FQyj1fZVefB*_d0#Hw~UjXJNsW%C!CwW}}g(53JJ;`eVFf&YE z1*j)^RRE^5^Z=+Qc|`zbn9>8Fp5$c#m`C0{0P0Cz5<uvKh<cJ21z>)Aj#mNdN%jfA zTnu>t)RVj*05i$w0Z>o!ya1L*K8UC%c}@U1A_1r;c~$_SpN7<v>=i(-$O=$T@{9ng zMFLPy^0WYYL;_Gx@{|CwMgmYzvPS^s*LHZ%0qRMf6oA>44K4Om;y8wSl9Lao*1dAt zw_nZcch92U18!*4p#Rv5vYg!Bq4B@ZmT2F)#*ImPk|%WS!Cv(jTsmA=)zAM8@xiq@ z#P_%W%twF+Kq0=z1YkOI4}d~^j|!kk<PcDZ?-2o*9|K+mD8%=$0479MfI@r^3BX(q zdKI7$--7}u5m^BW@jV~_Grr_ifI@t`1rYimq7dKx0x-WZ!K(m;`0f+HipV)YA-;PB zU>@%ADnKE=djt^rSwJDay9Hn#^z<q~A-=l=&@yrkP>AnN0rZRnpb+030x&~--VjiT z?{)#0s>%bP5Z`SAFkgS-0Z@qVRsqb8oC6f%+a&<gm3bAQ5Z_J#jESrOh4^*|z}%hj zDnKE=?E(m0lv0Rqn*hvL;CL0F5Z^5VC=)pcD8zTO0L&PpR{;v~-6Vjykrkj2-;Dxj z5eYycz8eH!rUtwrAYpdB08Cx!0gy1;Du6_{pKKh`<)=IV5@y#4z?7yQ012~e1u!Vt zAD{NS3{-%G*);-~770MYY>NPjL;{d7yIKIDYeEucR|z1rHzZ+pr2x!h4c=Wq!fbOi z012~A0vH%M2}zh;A%I1Z03^&V7r?Se01{@G2_SS$NWyHR02V}6fP~ow0fg=kkT6>> z0Q11N_Z%Q$cBuf&Qw1IX3A0NCkT-G;kTAPg0A_~Cs{jeJiv$q5O-I7)LIH$+7?Ci$ zz^_2opGPJRMCsqDS5GMVY`eQ&8a6ol6K_5J%Z?LoUp97hwio8MefZwD%Mbkd2urK; z1yI+UgdPA%tMdd<AQFJ2)wu#N8xyYrB(2s7z?4=V07<L00x-3)2SCzljR1y3&H<8E zs|7GV5`d)DDgl@a5^o4dTCEg7#mEYfv|1qmbEDF$07<Lm(Euc^mI=W8F!Cxu(rT#y z%;QZS07<JQ0x(Y*dH^J?77Ji`<Xu40YLNgsMgowuS||WB#pMkFNvj0{Fn7s30FqYo z1z>Jcc>pA>=0y(yNvpX62)zwSTFnuF87udOfTY!I0fc@WleC&8fX<Q60g_fT1rYji zOwwwG0OmzjfTY!Q0W69HAZc}u08Dr6-327ArU{^EWCciCO%*^Q9GZ+Gov`pKK+<Z8 z0L(YkdH^J?CJVsy1s(uNt4RVdt(gZv(rTgr%nXSKK+-Bz0F{!>zqH?FU=otFnjir4 zO;lb5NLq~-K-b6$khB^nfY8o}q}5mfn8(b#As}frMgXC$8A+?r0x*SzR{@e%qXb~a zdOZM=RwD&qCMY}rl2#)G5c*j_(rUN>%(stt6(DIfOaQGTA4DXrh6<o>BmhaPAp!_p z6_d0YEC5qpdvk!K)gS?wufFgANLmdPfGMv%0FqV%1W+e(5|Xs)F935r(Ds$(iBl<B zOAac$@bZ_pRQvr*qyDAVZ@Oa9<SGZcmTFV2=)c>4ys>ZDmwF~W<<(Eu9_jt@ySCQ+ zPnglQS(x<|fVmp;07#hi5rFBfJpdABy#-(@Ll1z2SuX)hikt%^%z6sId<&LW0TO0C z1Ymv)cmO2Kx(lFm<PeZB>n4DekpLvjx(Z-QBmfDsE&?#KjNTj|Vb)my=81C;fP`5m z0hqaV4}gSOM**1cfbsxHm~{|<dB({DAYs;C0A{Y;10Z46P5_M~Z$lDhZ3VD65`ctR z8v!KNH_0f{?N50_K*FrG074(dB+Oa~U_i1zKJ9lIr~nDGmIA052|&WEg#gU`DQ^yt zFl#P=f{_&<Vb)9l=F3043Xm{sDu7y%6(C{OL;&Wi2fPZ9Fl#J;!jTmqVb(|h=1#p= z0TN~n1z;w6JpdAB4Fq61OAmmAS$zS7Hm4-a>IuNyo$)F_!mO?U%-tCefP`5c0hp<7 z4}gSOZ2_3CYWDz0nAH-%)W`=B3A3647!e6T!mNe>W<&yzFsm*AbBoZM10>9<2>=U_ zDFbUl5@uBe&>9Ic06@a5iU2xA0+2APECAEmdUJq;StS8<iL3w#vlIcCuEMJT3A2g< zFkiyr0gy1OAb^RHLqNi;yZ}NQ6B1_S1W+il0wm1J3Ltb%NW!d)0L)Wf-XtVpR$2gN zj?DugVOB~2!@W7s^Xh5k(*6qxv-h*!I{v|uZ_F&vwneF@maN!a^uQGxZ*P5G*@mCj z8T!wvS1TqJW+ip)4&JqAj{iFG)Y7&RU7Lkj2?3ZlfCoUrthfNo#gGR;!mOA8%<r}J z07#e>6+o`YIY7d!hyYAi;Z=ZySz!T~2Rl3f5@v-2Fg<bzNSGBAz&VisB+Lp3z+8)X zLqNhTzW~hWfCoUrES~_(rpN;zVU||_<_?_)K*B7K08C-#0gy1uEr8jPcL52rTmr!B zr|(O>3Xm|%DS%Q)kghNF07#hS5Wt{F01{@|1u!QPfP`5#0hsS)^oD?hSylnmkE{R* zvn&Ew7YRVZEVBSiTjLD@3A0QBFps!-03^)LeiFPYCSmrk08DZ2Re*%qKLQAS5RowZ zTL7V*5ec)u1YnwbZwN@3oe@B<$makFvp)sUF%p1;*&hNhUzhF;0SU9;1yDJ%0wm0S z6M%WN#j5}bvtI?!B(ee|%zhC-_DBE{W<LwS+^6=2fP~p;0fg?5kTCm602LyKfP~qP z0tnrtB4PG}0L(C@HwQ?VeJ=nr)9e9|F#ApbW{}PUAYt~c0L*P-4}gT(Hv%xj6CMBw zv#$j(H}W<lVfK{(Rz(7kFgqmx^L6Ro5RfqYQUK-=HxGb>*%tyZ-^JwtkTCmP0A_;6 z10Z2`QUIYlr6kNg6F}%T9SO4&0x&;}?%tDCs!Tt6gpcUc@2|Nv#^<kmPqxZe-hOSh zTgD&RTI<fOC(gU0)$b{7x9#Nb7yeWLmAvPG2S9znaRJne1fag)Sab!bFE}aybF0=H z0_qEn2*8Y$djQlI92UUL$T>iL!65;dPeQK()E9gr0P~9@JOJtoJ{Ev^zQqHezThJP zggyzWFZfUZW^?LQfck<D1Yo8)Jpk$p4n_|F^#$(>ph4twfck>>1Yj=7ydj{z;9UXq zj;sLn1@8zT^f^F%!P^2bjfpn|)EB%Z0Q2P^9su<PZwkQNA@KmHFL*-$<_3iaKz+dh z0hsv#4}kiD{Q@v!JRSh`1+NRhv}O&vyqb7vj=F>E8Xe!i`qeiEuIW_u+iBnBob!E) zcb5)+wf9r6bU1JMm!I7Fe9|D@Yr1xM?-_LX=_CL3By?>K(!DBxc98%Sq<cjG`6B@+ zNcXY;%x91{1QeuuNdTrc_5dhI_o4vINV^9>LArecFtZCD00rq@5P;bhdH@updtLx- zBJTnU(mf{tGtli-fP!?-MgvfgZm$3m>F8wRkS@dIRe*wY&j_G)vTLXPE&~7*q<dNb zp_7n;bWaJu>`T2Npdj5I0fasYDM<IE0L&nrR{;vrJt2TGk&}>ubdL+5dn5n_=^hh+ z86WY6fP!?73LtbzMnSqq1Q0q2DM<IQ0L&daZwM$z_mBXFL{35q(mg1EVvzt8q<cUB zrmgXYfP!?p1z>KJdjJ%qyI%mqB8Py2boU8hU?czq>FyOk=$ep%boWF9kTAPj0H(S3 zCLsy4y98jq1jqv*VRokg%ndRRfP~o{(G?(JcDn$~M6Xu?5@xpvz%=(B012~O1z^TW zJpdABy98ivlzRXq%ytSObc2F~*$x4OZcvag+b#ez$L0+I3A1eiSP}VYNW$zE0ferK zNtoR%fGLp`AYpcs0L=V~HwQ?V-6(*Pkrg0ec7p&+VdhnUgxU21SQc3U5@uTkP%RRG zgxPfh2z?NdFuOK-2uPS+BY@E7012}#0!ZkuWD_CXM&*I+hZ8rh)YWf|w%6ZqWsW^x zKl5j$>nA_-R+-}4F08nH{ozN)mmYZWSNBg(D$K6dweuyrY})VAUAsk>N{Mp_nl^N8 z7G_roz>F<;03^(=6u^kc3Xm|{EP%X`03^&dMGpZ9vnvFUaIneBkby}^!t8PZR84m6 zwBKa_fP~p)0w@p(K*DUJ0L<MP?=~c1wm|^q_gQ)XB+S+ez}zVJ07#f!8Vx|g>=FT( zC(gYJkTAPg0OlvL2SCE?A_181-tYiOm|ZA<o{`T15@r`f1CTH~UjXKc+#3QCX6FgO z%ujg$B+SkgfSKU&07#gv6F{TLNl3zMtpLnOyH^1cW@`jsT3Zi*gxP8Vn0u5S012~I z0x)|L4}gT(N&$?EoP;FIRtO;UHY8!TTmWSwD?q|*nE;kY0+29UDuB>OF$uFJ(EudO z77Ji$<PeZBTO<Hen0e0u5@rhpVCo_dfP~os0W^&q0upBP1z>7puL2~@<_Vx<WCci= z%@u%|==CZ<!fcKJrbSkOgxT!qIY7c}mH<L;LlR~)1&|s!1SHI62*7+1ls5@Um`xXe z`Q`}^fP~pO0tj7@kT9DjfVz=$fP~pp0rZaqAYnE|0J$OoNSIBI9s&|(lLQdDPe{US zq5#YonRgqKFiRCc*2p<P!fb*7%wWA&0TO281z`4u0}J#|SWf*rYT}v|&tCF<=bu|` z%`<-PW52bVGU=zLqo114?91A1kG@;47E7yf0x&lyJOGkbV+GLJn*$yINvkmeNLavR z6zPnK2SCzlv;fRlxd%YfYE<+PkhB^p0CT6*s{l!>5dtWmZ1~fDmw`Dz(rUN>%uhqF z0wk@53BWWa9so(Jp#m_Ci3dQ^YKQ<PM$Q3}R)Ym#9x?JNK+<ZE0L-%u9so(JfdVk) zwFf}bYJdRDFr^1T(yG4z3Pw&sl2-i$V1_BZ3XrtwD**F^j|V`~s!uckNvqxhXdXES zNLuw0K<LLYNvoa$Fy*y32S{4=5P;bodjKS@x(lFH<QyPr)lC4iA^}KRbrnG9l8mHP z7XgH}W+bgT3!q};5RkO$B!JM{kfc>d0hm!P?=~c9)j<H}%fLJUl2+{nV9IL`fTUGB z0d$L;ge0xn3c%d1_bNcrs*M256FwdQNvqZZSRFY8B&}KrU}hu$NvoCuFf%0H5RkNL zA%NnM6(DKVTmWq&0Z3Xk6F`SZ0FqWs1z;XA^5y_Zt0n>%99aR9R*eN<>U*yOB&`|= z!1M(k07<Kc0x*x8dH^J?8VDeJ<QyPrRbK!LBLPTS)e}H!BmhaPx&l}b2|&`SjsVPK zKHelGX;oVQJt8YW(yEpKT6+McrrcRB?Z43Bn6k&JpZ@kt{}<c8aBxAh>e<Q{eSS-= zzdx-q_1x)iXUcN@^P7^M@~Ww8kM^#8#S6bC{EmbfU7Lkj4FQ-BK@Wh0S#<%JdlMc2 z3A1Yc@OuCx%&H2&+$8k?NSIX-fNAVJ01{@E1u!!5E+Ao6NdRVF>Q#V*S&9J6ZDJ3A zgjq!aEQuTf5@r<yV48cc0wm1J3&1?`?g5Z6D<=Rm%jf}+Fe@tn^Nf=RK*Fqy0CGl7 zLK0@B1z;XI_9{Tatds!Emw|ZzB+N<*pnK#HkT5GDfTEEAB+QBnAoM{*!mOA8umI`5 z<l379B+QBmz!c{m012}q0x)%v2SCECumD0ArT?e6I}hgSeg6lpP-F>-kkVeZM6#3; zDIrTKwAfPF$}UP9ZIUD{iWIGqRFskyv}uz{q{WiTk}XBF_+IaK@A=F$^ZUK7xp2?R zAI)dReBS5ry6*d&*E#ofKM$;7CI$fFj$T>?u!dQG01$(AGyv8x69oXVV@CsE4Kon{ ztV7Skzcx|P09eCJ7y!~N0a(LK2mmWt0<eZzKL8M)%xOb_HOvG7FqLHmu!flc0Ep27 zS_QC%SziDUV`ek})-dY>fK@Dq0Be}>13-u+0Be}>0f6b(G1f5S1%Lv}3SbSh-T+|w zXofY+dI5mgv7?;@Si_750OMH>0oE|<eAU_M%o2b#%zgua>9Zl$F#81n2bLAU8fHHM zfF8d)&jnb+><0i$P(e5Dh_HrP2LOlx8`^1zHO$%pz;vAuYnXip0C5WutpZrXtPKE6 zZ%VO-St|gDdzxt#z#3-X0KoLw5Nnuy1pw14;Xe(t{y8Qqx4kkimRoJLhEIVn?@OP> zr3)GY7rp<yd4*wW+fz-RNdc~RJR)aaJ^F4)Y<yOGl0{`phexH^s+`hCPxAJjum0;g zFg@|Vn@DJwT~3(zA!2O!{F<t<u?}hyDb?v2J3K7koj)Nm<aGa>QBoWmW-ajHiJN)v zzl#|3?^O$q{lx9mYvHKU_j2xjCFx_t)=W_}h&Y($^TzLd);Be^J|-NG{RNIqT%i5% za459t;0ON2j*U0#ngJmC?|+WdKYtaT2EdwiO#mQnpQ8b=W?dry6ghqPe}C7F3SiB; z1^^JB2x%3-nsxO6n9Q;QShMak0EpQxS_QCXT^#`YSyljR*3|;QfF%HH*3|%j7`3Ji z0oJUm27m&~3SiB;PXJ(g8e+}5j{pc{SplqB_W=OJKmlzIV9mNJ0E}W;0jyc~9so?Q zgjln#5&*=F8?+(7nspTbAU=-J09doG900`aOEdu1tSbY6E6YiUHS691fcQK_s{q!l zdkX;KK3*CCYu3F1fGW!&z?yZh0ieJVfHmt%0YL1N(1rkO*1ZCN8OsV_&AJi*5Z?nv zs{q!lD+a(AmKDI7buR%x+|5p_0M@K40szx1A=a#W0f0Zxx}3(L8;@pKv+g+nh%cd{ z4FT4ydj<evr-%l?nstQ$5ad+-e}C7FA;6k-PXR#O#z?CG)~qW4fELRNV9mNG03g2g zf>r^nS@#$KOwR(WS@#G4#4Z7?0$8)|ApnRwM`!@7S@!?{Ls(8itXY>20OE^BXcfSk zb@u^4Ocl@oShMaP0GQqtW6ip|08n8$2e4+{9oBOIYu4Qc0MlnftXY=_0OA`DXp<0Y z*5v|V8Ou3<HS2N!pw1G2HS2BxfVh#9HUwC+?j`_;oA_t|tXX#h08ASeSi0>x0GQsA zSvPY2LuT0kAU5r3Ly+Igjbq#H8UUCs*H4w?49Efiv1LuGK>BFTfU5w|XL%hMtHT*^ z1prDc0f$XF12O?XjJVN;K*F9g;4%P+!44W=n>S~`B>*s8EB+bE8IS=0rq2aF`#1yA z0l;*P=;JBQfQtYiZeyg)fkj!I0T%!;gXL-X^bu#kc>qjj2{0<-3`k=Q$ZF;cI0pdY zAFrX!f$@Cq9KQ`y0Wgf^5FD4{3^)q_rjt-+9A`iZ0GKY-?wZUQa0UQOpN@IWIRlab zz_fE3<j5It8UV5^Ct<xWXTT`{{CR@|Cq*|_N}acG2Al){)6=l{0B67n05E+zHao)^ za2x={*YVM=ggM!q0mlHqv~fA9fHNQo08AgxQz|$E5&=LA{nLg(;VWmrQ2-F5Ei}Ns zJ{}yu4UYi8l+z{P-`{oPI?zvsGavx~OfSV7lsE$pvz`NA^*96K0iefn2;3|=1L6Rn z$rA9+nKR%J0Nhyu<^^yD90b4$mVo=)I0Iq<z_e|rcZf6K008V*R^Z}U&Vc;@VA?$& zbCWY*9{`vx*T)xf2J8g@(;b!KRh$7a0FYxj2e!6y2J8XAVwQj(0-hYd4Wj|z#1h~w z#~H920BS4&A5=I4q5wdQm(XrV7V2{b>;eGs{VOy;!CcOONC3=XIRrD7aR%%J0P$sD zv<h5Z%^45@0H(X?RCjO&>;QlU%ON-x@5!UsshLu9NA#A3TGfJ|c3;nHj*Fh5+-5Q$ zR`;xMn#KrubDrHYM|F39NmU9CJ3I8geQZ?!Q9o5D*kAB&t?qUG*BYfyf87;lM*O#~ z*NcZIqK~D-GDUv7YrJOLTY43>PY6>uyRG8gT$P6w(Z#jj<Tze~!s)|*bX(@1^_=b= zdpjJPxIkM~5%s^fF=C$^4|r_@0I^d<17HEKtpJ!sn|d?=7Vz4_x&m0hYcl|d59PE9 zU;(c%01zKZX#gzX6$$|2D`{x}Ea0^X0FEptAr|o32!ORL0a(Cm0|1DRBeWsF0$%F@ zAi=T%Siox?0Ek;zX%)Z%ULgP=Zr-5*uz=TE00^@j0xaOQ1^~pJBeV)&0k2>H__M44 z7VruJ0DAnt-?%}m02c6C4FKZS6&e5wcm)Dr5?X@4?gVK7EZ`LY00ou+Ea2r20OAuN ztpZrU%MSodZ%VO%moET>SPlUe@bUqG3`+nO@bU(L14{rF@bUt{DwY5&;I#?>Odm|J zfY(X@c(bek7Vz=}z<=*B;lSv|l@JSfc>sWzx29c)uz;640OoS|?0<gMjS64^FE;=X z*T`uVzye;b03c@UXaFqWwE_UdKi)+HU;(e?0I*>>2e5$GG5`=?h)Jse7VvTb0I_FI z17HEKr2q(KIRse1%NYQ~urI9wSis8(0J<zIfCao90YD7-(JFuiyc}2$0T%GG2f&|~ zYH=EeZhRMD0k0(hn84}S|NgEU04(6O7y!gZ4Q&o!0k1^>AZ}Zr0kDAALIA91IRse1 z%MJj`Spu+tmn{ICSpu+tmkj_$umoTMuLS@g?i`^_LM-4l9{|K;2@QY+ysQDh^nL&f zc+CR<)9U~h@R|#NX)Grp7VxqH0Miu`EZ}7c0HzBRSis8y0MPtIe!B5(hy}dN0YH2O z4(&9=0$y_fFcA6tJl$EU#R6Vt0ATuXiUqt(0U*V)0$9My1OUXyJ8ceN0k7Er5MWsW zEZ}7f0H$XF7Vw${0AjR-HUwC}YbF4QAwL=b3wRj;U_Q$^fCao}0ALDB02c5v1ORa# zC2a_>fR_OPh*?`201J3c2LSP}HP8T9z)K$hOc$xJfY&qt5O<Q&Du4yNrUHQJay=IC z(gT1Z%hM1GcufHS)16dUz-ux9q*+z~3wY@QU@A)h7Vy#m0P*D?w6g#UcxeNG7<Huq zuz;5q0GKwduz=Sj01$(ov<hGWFHHbAvYdoiz-uA^bXWqgfR_dUnBJCS0WWm`5CdMc zIe-PcCIEoxB*X$<Y5-vRV1fm_#sk2G<s`%cUa9~fZtADa0W9F90syAlda;0)G60NN z4gnVMQUZVzO8^$|QUrh)O8^$|8V3NTH>Fs>Yb*eWK~LIQfCaq9upR;|;58ZmO!tsr z0k2U2ApRje+7Ms?uaN*?+B?PqULydY%<?qE0$#%bz_ee01-ym<fa!Gr3wS92fN9g} zpMaOMj=94m+bUlJ)1RaAy*4E8&Jfh`%c@y5YQp)u?RQj!40%3zIJ%@H-wnyxF~_aI z<4B@}-{?h`2aQX8x;o>kyXDZ6fAtG$`TtwjgFeIk4!(7}_x2t&&LOM4G{nnlReS4Q z(L)Zq9Wz&(S^r!j%Q4_J6h1uh?YJfHYyRB9!m;(QXJqA+E4M0!9@3s#zr$|++l;Z# zT~kk5ow(_e8@w-+<FSXpv5B#UvT^Oa|DG+dxQ`th4|vG~z>;?I(EwP$YcK$axe6Kp z3wX%^fcP{(17HC!Spayj90DxhB?AC2mH;f^H3$I2rvcg!U;!^_00gnD02c6)0swJ+ zlvV*O;585czAP(%1-v8y!1Of40$u|EKzt^q4FMMLk^lhlPLKw`0$$<(V0tOW0$ySO zAg+<qDu4yN`U8NtiH`=r0$!p3AVytj04(4o0)YN3uLD@XOBevAECE=+O9%k}-C1&A z{B<iz8v-og)eivr91i{GSKR<$0WU!S5SJ%u6~F>s0svro7GMFdz5pP0if9$U0$zOp zK-|nr17HC!egF`6j?e&Dz>5z6V_2RASip-H03s{_Siq|{0Eqi0XhVPnym|qE*fFL7 zuz(j20EnA;X#gzX)mhTn>Bn*oU;(e+02sg$fCapM0f4wjPa6U(;Pn##XaWA-M@a)< z0k0nbAok2@04(6u0RUpYiUz;}UhM!-K*yjPHzZiV>pK9LeivW?uQmV>7ieiifCao- z0T9A+2(W<HHvkZGmb40B0k5wB5Mo&YEa24w0H%-USitKG04!Km01J3E1Aw?tPMZT* zz^e%W#E>5ifCao70YH2Q4-J3?ycz(Y#&Ql|0k3)hFnv140$!g1AjYx+Siq|e0K`{c z(B=RZ@Tvs>(+d$6@TviTILjfx0$$YsASTRcLx2UmJ^_FjYoGzJfY(O=FkP(10$v{g z!1Rs?3wTulfcW+i+7Ms?ulE2jV|f-}0k2Bd04(5D0RRJ*6~F>s<p4mB-<@YeEZ|iJ z0H#+$Ea3GH08AIDuz=TF0Q5u0pc~JISitKI0GM6}uz=TV0GP9^02c5n1pqNuLAw%S z0k2m87|F5%Siq|U0QxKeSiq|o0P9!+uz=S~0Q6xAzye-H03iOY0@@_R0$wiwz;vY) z3wS*T0Mq4qEa3GF0CQN*0W9EE2!LTM0a(E6DFBwT1YiNL0suI&1YiNLCjcP+2{GDf zhy}bJ1AuA201J3M0)Q3EA;1D&4*@_7eA9*i3wS*Mz;Koozye<R03asJXcfQ$UiSe& z4EN9gSitKZ0GM8iv4GcI))l}4UUvY%bW0}|@VX5ErgubGz$*^`#5dH^CLtE^$^`&1 z)<6Sb0k0eYtYLW}!UA5m0HDAUfCap60>GXn01J5C0Dv`102c7N4gg}fhc*eZfLAsE zn68v!0k3NSU>fnj0$y1F_>&mnG!eS7M1uvqt^!~>r(^&7yKVrmfY%iOFzudW0k2E| zNU^K{7Vx?Z0H)uD{{*~_WV>fX$^{>A@Yy^!ZmXxYyueF0<)(pU8`D3$v^sM?Jea4T ze9^vdF1@OPT!dOf^%cL?Sgo^-7nyTdJlNiDd&`1tf6W2Dg(`na){BQ{`iara8?F!0 zlyf$EVpyy%=9?ClsbitvyUAJ6E=w<0gk#9+5`1{#N_|tI-=9u*caNO`$0qj7mmf>| z^WHZ27yI0Jz$+a9#CRtSfCaoR(yLDcU;(cS01&2~d^7+S@H!8Gc`N}~z$*;^#BB?- z3Sa@Ra{wUrNoW8p;FSshd6q+f1-#Azz>y^Y3wWgfK$j%|3wWIY0C68BZ4O`ouVest zv8(_V@H!0u;+-I^0$9N76aa`%gfsva@Hz<q;u9eafCaox0ALu)Ie-Pcjst+0v7=Q0 z3wRv^fGf)iU;(cr01*F{A*}*fz$*~|#7+G)02c5%3IHvZLx2UmjsQTCB>)R}B>-SF zO8^$|It&2f_9faJzye<J0APAsjs?8p0KoK0hy}b30bn}IIe-Pc4zjKQ7VwG%fDg+G zU;(cK0APAoj0L>*1AytbAr|o32Y?MMhX4zB?F9gF+XC%Egay1}0HDvZ0$9Ln4*-bU znQ0Zk0$$MoVESZ)1-y0xfaz^H7VwG!fCkGsfCapE0bnXi02c6y1ORc3oHhxufY(j{ z5JP@602c6y0Kia|Lx2Umb^w6sB*X$<;Q%mVSph8IwH*L@ECE=+Ya0MovIJlOudM(u zW(mLoURwa5z!HE3yfy>CktF~Nc!dFgxSN=EA;JP)p#UJh0EPy@0$!T{!1R6q3wUh= zfC$SufCaoZ0AL(T02c6C4}buc04(6O4gl&b0a(B*1OQCe2e5$GS^z9&Sph8IwFUsb zECE=+D;NMwFGN_tD+mA+SXKZFc&!Ei@x2SQOEDJk3IqUg^9~Jw1-t?PKz!{14S)r_ z`~kpp5@G=_KLD&}ISH|VmoEUAUWl-Omk$8?v#bCX@bU%#F>y|tgjm4K3jmfZD}V*O zRsmoxO8^$|S_uGImH;f^<p}^{)|NI0uz;5b0Ej!tXaFqW<qiO*H>Fs>%MAb)Eaw0g z@NxyfOqKvF;I#q(OxyQZz-u`G{@WDDp$>oTBBV`1Ea0^a0K`9}M+0C1FBbq1-@ifw zU;(eC0ARXKhy}cy0YD7*&?<lhyqo|)d|5aRfCao90l@U05DR!Y0Kl2U3Haw%-8c=g zfR{Z0{8<99fY%ZL5Z^>an*&(DYcT+r?xMj0UW)+0bh#c2cr63~)7^Afz{?H*Ot*Gp z0WVtsFnv770$w%%Af}6GX8{)QS^xm1_k>u$Yd!#GvAhsr0WWI+pvV9F6*#mZzye<L z0KjyS3JZA61waT|f^K{nVF52I01$(ov?0I(UX}nLzJrGbzye+ttmgn0@G=Jg(;byq zz-tZwR<oRhSis8+08D#E{{*}`${(y<qY_}#psn~NuCMlh<aRl$d+y6+hL?oezFj5Z zL(G`)h@E&*{ZG*#WM$#ow*B$fYqNH?Z%o*>%V}v*y48JU@#fmG0eor!szG~rcv~JT z1xK6pe&-Qk!8`E2NRCiV_|Lh<W7kg$_~CwZtUK|0h;(e#5wX8sK2zJOY9Ds=*%N&W z`I|eYG#>nTzDO+6an;8a$B6+~(y;@cZTsOGZg}ALP?4)5)o<Ske4o5XUgB42UH#}Q zSM44jA>N0Rjx9dYG(wfPW!i^2ehu5w3kSDmXY4S|`O=}6IYak{hOgsf+KeY1+kfP* zxyjE20;Z}=eZ5%s<OHkip;B+%Dyp+&Gjmi-+iwtGxkWm5OJ0?gXqvRaVD)|zoM*oK za!|`7Il<dwUGF2p)4Y#6%epcA-0dCls(f$vI|eAk{qS6$7F1V#PWX`OWdD(-dxji3 zxnG$0>`nUIbtB?po_7>kPRKZI6ue>UPjQ~NPCFkcKhBi%(K({CQ;T@BNji3G$-8`& z)du0W<J9Mg9_xMo%E#n|_fEZkW#*}re)z#IA>zs#>DVPpB3n#6Y9HKkXe$4$tbZm? z%JST_2K((>&92!g{M<8*c!x(iwu1LBL-DQWMXhi9WzQc_o{)Ycx@nn!U;mc5#x0eT z4t$bfIM@2-#U0Pcmm2;u%=_3!8EI*!_oe-JN_w3=v@d$JNMd7{6~klm2EIF-;7}Pk zWu9NJr~N+c-*QR)rhxXSrLVSlRi>F=6(nwoCDpuTPf@0?ZC=KEJ@Kd`87Z%YCEo{} zUn2ZsrPY4ffZv~_h>I(vW8c2^U};&^Rv%A+Gu6!|xj(;N>6~~gxa^#JR_9@Ur4_lv zduh_K70wr{tQZy)zvAZrp{2)aL@)K(yYOqmos}0pg)U92_B=>jTqYg6d}v$6gFD&1 zlRGC4IB23UvvH}I{NVi-1N&t}F1O6Idg{S&u9eHgh0VV=-QfA-sp46F{eKUZHMHt= zwj@XOSVsTdev|8ouWciJ?ukSALM1P0#Tg&7s|?t7;8UF8XiL@2v4yi_2aZ^?f2$&~ zu}3;~y190<l$gFqVQkuu$-|b)iA`_2A+bO%qa#3Edi=Z0Q-Ta@?s4h2+i)4Zn@)iV zkDlFMy4|VSZR{qmvuCd^+vKI%I9G?5K_h+cJ;EFMdC&QnDAT(|D{a$WSI@fQlQBWg z@?|qOjy|$$=?>!Sxk$(Ed&G5c(T?U!xh73*xv^i1Qli#=zbqPRG|ezsDYUavpXGRW z92=35AGKulLc339pWLNYU5lSNdAY4N{!%YHGPTrDjM%v#eeNAIHY#jsiap*OrQhpk zbKRxZ+FKPT`Qy#oG$ktcWDH-Z#&E7#iajmaVidhyMuE3p^0M}dB?Wd*?c44KNS7~p zef#AaId_J~PQH@%HR9L08)Ive!mHYJ0%F7)@^xlSbWw8LJ+4&E`zG;4Xr!8ZS2ive z{5*76SgE`G{`4^x4MQf5cb;0_>q4%+LwLc?EaIX7>DbH9m>dmRduovHn(A#v#p)MA z@}Di%P>i{9%fs*U6bb8>#C^o1W4jm3T4q@+b8mExRK+^p=l4q-u7AjXc<q{>N7EFc z-*04C9{aAzD4(;fA4RWS?=;*QyvD&>Ogyr7z?LWCvNvyheUR0JPPM-m<4B*|%KcsG z5&gV@t9s{IU;UV#qP?}=Wq54v(Ej<~T1PY{Jkm!G{?{@X>Db|qY#rJnWDCY#H(#)3 zuFL*u^+uXWw=OK+n^tqZ@uFKEafb})*fB~WTK7-CT`Bx(yP%d`Xw%A%r);#=R41(; z6tqL)h;2M^ix}zH(_&8Ac9fOxlFATv?KLhjym4%VeEQ5c+ZX=ONO|~JwtruSHP;+t zAr`a2@?C^a@#~u5bz|2bi5&1cL5|1rZXe?jG54H^y?D~+t~eQ2^>k{48(+YYq_9AK zn;0j{`!BXD_+1Zstsg3xl;p?obMGwoi%5L4U3TY)m;AEABGTU<?NK{fpm;;$(#s@M z#U+b~Z6DI-uG?9VqI}?q$cPa?UL6QiG#Xc|_B*6~t@XfjOG55`&NC&h^pcK!r{cxT zMcIz&O=mJ^C$0LC_x{#<6DPmz$+gAFC3gkHeT^B`{IP$d_7Sn_C*g@+p8AjVp4@r4 zzR>gJmGa&1he}i&nO8_`xsyKkq!qIQ_r1?Z@ip(&7V+iVvbt~i6%Jv|`meV&ro~2o z*JgR2I?mdC*RS<g-+78l$5cxV`Z8goi%PNHm#A4AdAt^+9^z;DY@l5)U6A@#+vC|t zmtG&gyBSEe@%qggw8m}=pOlfOz3_J8iZZF@^#`t`H7nTozjm7!VRd_vgVDmO8HLx= z6l(6|ng0IDGmjX@BOQDCY?HjTzOQy(RGleTtG21kNnFt4gV|D{=i!e6`(JN~WI4~% zwg_4TPSh9{ysp=$b!$5`%_QO-qfM>y+g{}s{oG|cVG6@@Ogv`lTiKwP^3r)~k21_l zV|PoRcjV1!UunFcxVo)oVhS;RMyh$k?`02et9zaZ-}5qIziw=F{L_BZ3^us@cG`K_ zKp;-FjrcwY(y`6NQ$vhRd~;sQuIt>+Z+lSc<*#ij=kjv~?{Z8#*f2wj<vMb)V^o54 zaKR;MF`3%Tij~GI)`YBfG|p8ybB^a=%XkG{K8EAH{B86yRqLk5!XK6#8hK)%@P4nw z5*oX5H|UQS*09blYaPY#*pDR>D(b~`_t`XDQ2$jwZ1Wh2DYoY;w)wpjauqk8tdO;k z;jw>Sj`kiY<=^2@?{Pl)lDb&9m-x0jNs_#$*Qu#~y`VdEIKyM>1)gd86r=QJ&XJgF zEr%m_EJ>{2cX_+fi<Aw?FBa(4eq{Mw(k!>S(9n0oT*ryG{YEXwNFViLUh?seDV8%H zG{2KRSX#{TUa?3%Q{Ug1_f>4@EWYmzd-^%)l(hS|y7XQ4W0$^geAy`CALt;R-|9X^ z1J^HZE7e;p_SN=OmDI2Uks^}Ec1($~y!XKMkk5p{497b>D(ORUl+1F|l=>8*rRgUe z6I^eXj|)4$N_$duOr`UWi42duE+ke*y-8f=OrylxgB{i}{ASalm7m1^Zt--hy_!`i zK-{WIs(EDaFHhy`We$U~Jypbc(u_I}-3-a!V0B$TuWZ@Jp^c3!*SN}LTGt<leKk>P z<xu0uacwS9!^e8xxH&5zM{?(tk%tDJ6k=HO{2c$clCR&d&78E=|69@-9Zl_+BJ;rQ zHqXKfJ~bpg)iq;y>>#;7DW}<A*6A8-8GTD{W<q1T+UNP9&R4XzmF(~h*DhvxU9(&K zP^`^Naj{s6R3Dk!s-xz6tMeZ<e;{xFVx{Z4ISWr~GW^^JQ^Id6&OXZDsk!^frlAqb zho~vItbHBc_vBcQ1BE<Qo|70J`%0(r=SMpaXKm4W;WU1M^URjm-Nx^8hJ@^@Pkw*j z?foT|eFMXWG{t)j<NBGb^8Oi{{KZoD#P;yfr_~Kwvo)TdiN5if<ug%wy!7DgkX|-h zJ?oWYZ_kad6pPZ37kd@<e98m8a|Ho=S?;yqH*eDCy?rS>C}-ThO_G;W-`;mM-#BJc zU8PuEVteth<q8bPJLKZ`ktq-7)b}<}@zdHn*Yc_RhR2dTrM#jmC3W;ZCC((qfJoQW z-~FVPym(fW=e}{hPt)zkWijP(kHibLt_=4I63<?3xKo?q=l&6%Y9yu{`o(J0jUCh6 zM|X5CofE=i@#V1S<fj_ReeXz*XL#%aNAuX5t<o90Z9ngNU}&>wZQIqQ7gHL-Tt6*- zTzG1X4$J*5E61&ii|&{(TBCf|$JhIHLehfn^tIOiZG0fI-(e+19ed&qThe$}uYWpQ zTI<A(yqPVJuSXb`$hYn}woai<!TR@LJ&8G?6V@@T`JGokgeKI->@5lM)IIaLrERQn z;25nJZ9#>rCri~P6r5stO|4q+;a*c^jO?u&hxaD!_8UKD^R24<)7q|KGp`=X9x><& z(`$>N(}})|)F+kqdmCyLuqwm7cEtX95d#GUEctwI{_MCjhGESwB~7@O(D9{CMDI?= zlLQ$@Z)Gua+4QHg47`)eZy(*px0K<rrPCKD4X$6O^x(;`ra)6Slg+j#`NzE!NgptL zs#J$t-Zhpr7d$K>H+WZ~o=k0!v}}UsW~-~O%YwEjWE54|r28EWN?`dt)^zRlxxiG3 zI;DMeRW>}bE9MTkBlhxG`%O{bP3PWdCfc*Sw#ceKf8VFl*kH&V)zYZAi9#_&KcBd( znz)<V1`i&TZ#9qQTJGvX^E!=ik8s|5S{vPY0%nI>yQ}Q|+FWFGx=>0tbkGgr+onj@ zwJ)7h>_oi;4wQ-8gn2Et*;}(tq$5}PoNhu#^F^I=tDg`zijs~kefL_H^ucf6)XoIR zpS6fKSo9<Jn%1d9r6=W@YS!k)2NN?Rq+|1FuDL5X`O3Xi(;MOjEz8TC!aoPZ?~9z= zd@k{na=u9l%X{R;d~FjKtz|XByA9^f;Xk!>@R50uH)3uG998z3m2TCtc@V>Ei;z_M z-Xas*D|4^6ELM@6?s36RR%Vyrd6^Q!>f5_zcT}((?@!?i#_gXMADF-Kn@Qh`-<)_` z7Ag$#e$sB`{(ivBP>mx23_rIT&w{WTqvk$BeTO=yoUcDMEw}Yk)X1bw+h&BVRSRBq zf|yw+%{Aw(x4a$0^VhB}b;^2n-$1;?>rjz*abx3c7rSc<JR1^cG5p+nr=RgT`e5a+ zn(XK%@0<j_!XdwEzvVni3R{!k{O#bJ3B))A>2v$MkkzZ4zsyX$Y?=4jiw|25ub8?c zdO&K`u~maUmL%tEdNKUm5$~#e%7??3XueUae^K8|+X{zG!xuRyrR6zBmOZ<x#j<aZ zIX}NyWRcoO*Xq|nb-Rj&*U$W9;#alC+U~ZrKv;g10n0Uyh9L!~Pp!%x_~EDT)J?P1 z;sezU-!E?+9CCN(ASvJ8;p15DZ*kF3;9Hn@tJXe4`Mt&F5mR4@if(ce+O#QlkDXqH z@SC$N@6Rtp-_8zQcsEun`~$yHQDfi4XEDh;Uitsr8~bpODFhz6+N<e}=M8#4{3r0h z319*M`z}uQ9s$e-Kv!3@djwz%fUZ8K^ax-U0G4ob2xbDHt3iYwselmxx_b8a2w(;P zx_Sxd5r82847fQ53;-~Kn}F#6(B&pT9{^pwz3q`XFbx1*eXi&cz*GRJa&rju03gLp zz!U&*_3L;t0J@ru>XA913xKXJ;`9hW2LL|YoCDeb;OZTb769gOvjUR<0Aq>#{J%Hh z_Q)L21VC52&OHK{2mnXq^Yi?Fwm|m?Km!0>%`x=|Kpg;GZNB#iU;+TTy7JK@05t$~ zbxFBL0OJAB)jh&J0#F5jJU7n*6##T~M_-RrK$+VBB>;4FO{PaGpa=l2-W87nz#?u= z!m$A0>X*?NZV$m|0C4rDbQA!%dQ&<Q09|df^~h;B0sz9?JPU>cfU7s9!vN6LbXJcH zfdT-y`fxfF0MocR2ZjKkt1qbOks*)=09S8H2LoUQH-|tD0RG$r$O2#-HvuvLFykg* z5CFJ(OC}8fIc`=!3IJSPt{(^h7j9NS5&+8F1PlOxDK`NU0O)Ekzem0c!~r17%?gMC zfU9l0{s7==zd#fKT)iz90f0U?=YTK(xVlUy1OO#&R-hjMq`3(Y1OQhTC<Fk&)#rk~ z0MO&+5cB~6SG#8X09e4y3h)5{JwD5R0WSc!dLil!fUbr!d*ptg7XU=iF<{uV;sHQc zUz5}$73eJH@^`^+0C065(JugWb;oLt48czTbTyLRBY+<OSkBF}paTG0T`O(}fFU<4 z@Erhw+yt}%psRa`dt?%}0$>d{EAR~fT)ip%3IGpoR-gp{T)hr_0YDHpE6@x8MQ#F` z0KnD7>P7%?bxUUh0JyqHRSy6QZq9+v0O0CMX&nIInvVQ1yeqB+09S9zYXHF2$Mb3c z3_}K>+k45(c;;{MRIrmDJ=@5w?PPLbpRq#%A2-<-PUGJrZkn<_lK5yAyR16GvKqpj z@HZ{cpIb)KUI!jcu`r9|6SvtL=-0bi<)h8*@oCdPjM*%IbD$m{`d|2K{*jLTrR~5l z9;M})CbhnM!i|PBMxXlf!PduS$nT^nrjZrnw=8CO>|YPJHWuBPr#CD!XHQzo)r1Ly zefWCsS(LZzbHO#<h#bohhR4p>Cou3$yo7|_u%CsNz4to|ejvWMBE<3dfz+V+QF7wi zzO-ZiZ<zo0KREpV6>Vq6M?9C3(zn0<`nl`IZI+`f`#Qe)xay+D&al`3nd`$7FMQi8 z;(gIyIdjuI@z1$eD(9_wnJRl$J+iL6|LWEHeIsgTM)<5a;5GTMa>4HdH%@;XbG^N0 zY?@{Jb(0#gB+0;*!;@s@eQ6zAGE!D&_Vmkgy?7?_Umg81oX7uh(JL|6$*c3WzP8y@ zx#LH)W_`qrNlybpmZnS#S~@rJ!lcQ4`&3{0+9#)vqjzhvX1$lyEj{gA-p_m*o8An* zb-46-P1>C*(<Tv_F&(FtDEvrDpD|u~@USZ$eD_?+Zv7bOm!1B#u%DvAIcFEK;yt0y zb7a0+#p^xOlelm&QSyWJvc`KpW0trsc1b<m;PUzViKEZeRUe3SuAh-1dE9){i|?%i zYV8wFn;NGW%al$EIP5+ra+$&8(9%OY2F%HP``G*4wOcc+$5;y#E6-7T=cs9O)>_M9 zUudMjsqkH|zQ?&9|C-*Jsc)0!XYc=w?{sQ$+!F(x!#t|Hbv4>WG8COfjd!QNFf(ZH zCx3tD#h4{_X9DY;J8q1Ow<_XUW2QLQUi`|fSw;tDnM##<rdCFGRy!0P$!&7V{FS#s zJ7mcM|MNi?Rm5d|j&&}L<GC#LbnA<iSF<(>mDwtVznyt=`hW>jCAV1bvAjCw<muc! zQp0)5>MHmBQrcQslXfDsNrA5|OXS+B`yQsjRT(Fn6%^f`%{aX`dxg-otO0MV_i0-d z2${Ltl?&+aKYB6SdF`g0y=sa}LX?kRl9}rAFmzK?x>1R!Vey+YeP$g_l9()(H$^im zx1+UizFoNX`4bEHee4u}>8-n-SYSOxO~QU(b6sxsL_vOC6<NX47hCS?NId%ZA!+%| zdor5ux9AT^X^eX*rz~|#^W@z-(|eC_+3GNP<sno1`OOziq)Sg^Owo3zZ9aNp?TI3f zGm4giqCu19mM%}wop`xHqHv|4?|>)qHSWI(8;34C&o4aRwZZu%|2XZl7LCPQyxUA% zh0JR^6cz^R<o18GOSCMr$Ue>PW_nKXxjeho`QvZQ3l`CG6dZWAvCnvygA)Snl7@&E z9QRkcxn`xP^C;7l&jrC-ZC$;7PnA5@z9Z8`@T8l+&@}4?@A`!yVhTp%^-C0tj!wJx zvTWDJI+bg-8#mOP{$|;zCvjlb)|20z?whDzQZ!Uuws7^7aNbLfy#)5H2y%+pC|t2a zV@mpx*xNZvGS8mj8`yhQy~yej&C3FWCK=uPA|q*dZTs^%b2{#QSrsK{>MAO7?#Pw< z>YZ9sbtK{hZQGO=ScDuJ{Q0+%RY;_gPk_~{fp=F#Dyll}badL4_~3-?j};Zx!5wEx z8?=g^^<PnL*_8Nu*i@;b=|3LjKIAF&GfdD}8fH3aefCdhF+r0u_s0j-*Ots5@*<%$ zICvW$f2jDiFx?wtY7H*t_bZgTaY0t#HE*U-ro8(*;j&wO?hN>4UU^M^No1^i=k8&H zOkC^w2#vHiE0i^CSU6IL$6UFl@t*&nl-pAZq~*(P-Ve6;bY$3M|L741f4e43dwM5T zVDhI^<4*5SwH{QoX^=|(@_8oTryNLlK3rWx+HTgFbwfvI^xauL*-#}@SMF2lFlD#q zA+NJVn>TA3R&0KBWm}wqws%~=eft7CmCn9V%3t$q{08TSRWEJCmb@4;?C{>hTMxfc zF@9{((YPhtZEx=qdxN7<y`vWBJLc|m_mleE(RZiqq|urW(mHn=?we(owKh&d$?n6< Owhiv~)87nzY4CsIje@`c literal 0 HcmV?d00001 diff --git a/crates/iota-e2e-tests/tests/passkey_e2e_tests.rs b/crates/iota-e2e-tests/tests/passkey_e2e_tests.rs index 0f7a1cf583a..82c9c4a9d91 100644 --- a/crates/iota-e2e-tests/tests/passkey_e2e_tests.rs +++ b/crates/iota-e2e-tests/tests/passkey_e2e_tests.rs @@ -17,11 +17,11 @@ use iota_types::{ transaction::{Transaction, TransactionData}, }; use p256::pkcs8::DecodePublicKey; -use passkey_authenticator::{Authenticator, UserValidationMethod}; +use passkey_authenticator::{Authenticator, UserCheck, UserValidationMethod}; use passkey_client::Client; use passkey_types::{ Bytes, Passkey, - ctap2::Aaguid, + ctap2::{Aaguid, Ctap2Error}, rand::random_vec, webauthn::{ AttestationConveyancePreference, CredentialCreationOptions, CredentialRequestOptions, @@ -35,14 +35,21 @@ use test_cluster::{TestCluster, TestClusterBuilder}; use url::Url; struct MyUserValidationMethod {} + #[async_trait::async_trait] impl UserValidationMethod for MyUserValidationMethod { - async fn check_user_presence(&self) -> bool { - true - } + type PasskeyItem = Passkey; - async fn check_user_verification(&self) -> bool { - true + async fn check_user<'a>( + &self, + _credential: Option<&'a Self::PasskeyItem>, + _presence: bool, + _verification: bool, + ) -> Result<UserCheck, Ctap2Error> { + Ok(UserCheck { + presence: true, + verification: true, + }) } fn is_verification_enabled(&self) -> Option<bool> { diff --git a/crates/iota-e2e-tests/tests/shared_objects_tests.rs b/crates/iota-e2e-tests/tests/shared_objects_tests.rs index 8525b378580..cbabd65cf64 100644 --- a/crates/iota-e2e-tests/tests/shared_objects_tests.rs +++ b/crates/iota-e2e-tests/tests/shared_objects_tests.rs @@ -512,7 +512,6 @@ async fn access_clock_object_test() { assert!(event.timestamp_ms <= finish.as_millis() as u64); let mut attempt = 0; - #[allow(clippy::never_loop)] // seem to be a bug in clippy with let else statement loop { let checkpoint = test_cluster .fullnode_handle diff --git a/crates/iota-faucet/src/faucet/simple_faucet.rs b/crates/iota-faucet/src/faucet/simple_faucet.rs index eafb50d4a4a..b130b529e9d 100644 --- a/crates/iota-faucet/src/faucet/simple_faucet.rs +++ b/crates/iota-faucet/src/faucet/simple_faucet.rs @@ -65,7 +65,7 @@ pub struct SimpleFaucet { ttl_expiration: u64, coin_amount: u64, /// Shuts down the batch transfer task. Used only in testing. - #[allow(unused)] + #[cfg_attr(not(test), expect(unused))] batch_transfer_shutdown: parking_lot::Mutex<Option<oneshot::Sender<()>>>, } diff --git a/crates/iota-genesis-builder/src/lib.rs b/crates/iota-genesis-builder/src/lib.rs index b3725eded9b..ac464c309ce 100644 --- a/crates/iota-genesis-builder/src/lib.rs +++ b/crates/iota-genesis-builder/src/lib.rs @@ -470,7 +470,7 @@ impl Builder { } = self.parameters.to_genesis_chain_parameters(); // In non-testing code, genesis type must always be V1. - #[allow(clippy::infallible_destructuring_match)] + #[expect(clippy::infallible_destructuring_match)] let system_state = match unsigned_genesis.iota_system_object() { IotaSystemState::V1(inner) => inner, #[cfg(msim)] diff --git a/crates/iota-genesis-builder/src/main.rs b/crates/iota-genesis-builder/src/main.rs index e0adc0db630..3c79fdc329b 100644 --- a/crates/iota-genesis-builder/src/main.rs +++ b/crates/iota-genesis-builder/src/main.rs @@ -4,26 +4,20 @@ //! Creating a stardust objects snapshot out of a Hornet snapshot. //! TIP that defines the Hornet snapshot file format: //! https://github.com/iotaledger/tips/blob/main/tips/TIP-0035/tip-0035.md -use std::{collections::BTreeMap, fs::File, io::BufWriter}; +use std::{fs::File, io::BufWriter}; -use anyhow::{Result, anyhow}; +use anyhow::Result; use clap::{Parser, Subcommand}; use iota_genesis_builder::{ OBJECT_SNAPSHOT_FILE_PATH, stardust::{ migration::{Migration, MigrationTargetNetwork}, parse::HornetSnapshotParser, - types::{address_swap_map::AddressSwapMap, output_header::OutputHeader}, + process_outputs::scale_amount_for_iota, + types::address_swap_map::AddressSwapMap, }, }; -use iota_sdk::types::block::{ - address::Address, - output::{ - AliasOutputBuilder, BasicOutputBuilder, FoundryOutputBuilder, NftOutputBuilder, Output, - unlock_condition::{AddressUnlockCondition, StorageDepositReturnUnlockCondition}, - }, -}; -use iota_types::{stardust::coin_type::CoinType, timelock::timelock::is_vested_reward}; +use iota_types::stardust::coin_type::CoinType; use tracing::Level; use tracing_subscriber::FmtSubscriber; @@ -104,182 +98,13 @@ fn main() -> Result<()> { match coin_type { CoinType::Iota => { - struct MergingIterator<I> { - unlocked_address_balances: BTreeMap<Address, OutputHeaderWithBalance>, - snapshot_timestamp_s: u32, - outputs: I, - } - - impl<I> MergingIterator<I> { - fn new(snapshot_timestamp_s: u32, outputs: I) -> Self { - Self { - unlocked_address_balances: Default::default(), - snapshot_timestamp_s, - outputs, - } - } - } - - impl<I: Iterator<Item = Result<(OutputHeader, Output)>>> Iterator for MergingIterator<I> { - type Item = I::Item; - - fn next(&mut self) -> Option<Self::Item> { - // First process all the outputs, building the unlocked_address_balances map as - // we go. - for res in self.outputs.by_ref() { - if let Ok((header, output)) = res { - fn mergeable_address( - header: &OutputHeader, - output: &Output, - snapshot_timestamp_s: u32, - ) -> Option<Address> { - // ignore all non-basic outputs and non vesting outputs - if !output.is_basic() - || !is_vested_reward(header.output_id(), output.as_basic()) - { - return None; - } - - if let Some(unlock_conditions) = output.unlock_conditions() { - // check if vesting unlock period is already done - if unlock_conditions.is_time_locked(snapshot_timestamp_s) { - return None; - } - unlock_conditions.address().map(|uc| *uc.address()) - } else { - None - } - } - - if let Some(address) = - mergeable_address(&header, &output, self.snapshot_timestamp_s) - { - // collect the unlocked vesting balances - self.unlocked_address_balances - .entry(address) - .and_modify(|x| x.balance += output.amount()) - .or_insert(OutputHeaderWithBalance { - output_header: header, - balance: output.amount(), - }); - continue; - } else { - return Some(Ok((header, output))); - } - } else { - return Some(res); - } - } - - // Now that we are out - self.unlocked_address_balances.pop_first().map( - |(address, output_header_with_balance)| { - // create a new basic output which holds the aggregated balance from - // unlocked vesting outputs for this address - let basic = BasicOutputBuilder::new_with_amount( - output_header_with_balance.balance, - ) - .add_unlock_condition(AddressUnlockCondition::new(address)) - .finish() - .expect("should be able to create a basic output"); - - Ok((output_header_with_balance.output_header, basic.into())) - }, - ) - } - } - - let merged_outputs = MergingIterator::new( + migration.run_for_iota( snapshot_parser.target_milestone_timestamp(), snapshot_parser.outputs(), - ) - .map(|res| { - let (header, mut output) = res?; - scale_output_amount_for_iota(&mut output)?; - - Ok::<_, anyhow::Error>((header, output)) - }); - itertools::process_results(merged_outputs, |outputs| { - migration.run(outputs, object_snapshot_writer) - })??; + object_snapshot_writer, + )?; } } Ok(()) } - -struct OutputHeaderWithBalance { - output_header: OutputHeader, - balance: u64, -} - -fn scale_output_amount_for_iota(output: &mut Output) -> Result<()> { - *output = match output { - Output::Basic(ref basic_output) => { - // Update amount - let mut builder = BasicOutputBuilder::from(basic_output) - .with_amount(scale_amount_for_iota(basic_output.amount())?); - - // Update amount in potential storage deposit return unlock condition - if let Some(sdr_uc) = basic_output - .unlock_conditions() - .get(StorageDepositReturnUnlockCondition::KIND) - { - let sdr_uc = sdr_uc.as_storage_deposit_return(); - builder = builder.replace_unlock_condition( - StorageDepositReturnUnlockCondition::new( - sdr_uc.return_address(), - scale_amount_for_iota(sdr_uc.amount())?, - u64::MAX, - ) - .unwrap(), - ); - }; - - Output::from(builder.finish()?) - } - Output::Alias(ref alias_output) => Output::from( - AliasOutputBuilder::from(alias_output) - .with_amount(scale_amount_for_iota(alias_output.amount())?) - .finish()?, - ), - Output::Foundry(ref foundry_output) => Output::from( - FoundryOutputBuilder::from(foundry_output) - .with_amount(scale_amount_for_iota(foundry_output.amount())?) - .finish()?, - ), - Output::Nft(ref nft_output) => { - // Update amount - let mut builder = NftOutputBuilder::from(nft_output) - .with_amount(scale_amount_for_iota(nft_output.amount())?); - - // Update amount in potential storage deposit return unlock condition - if let Some(sdr_uc) = nft_output - .unlock_conditions() - .get(StorageDepositReturnUnlockCondition::KIND) - { - let sdr_uc = sdr_uc.as_storage_deposit_return(); - builder = builder.replace_unlock_condition( - StorageDepositReturnUnlockCondition::new( - sdr_uc.return_address(), - scale_amount_for_iota(sdr_uc.amount())?, - u64::MAX, - ) - .unwrap(), - ); - }; - - Output::from(builder.finish()?) - } - Output::Treasury(_) => return Ok(()), - }; - Ok(()) -} - -fn scale_amount_for_iota(amount: u64) -> Result<u64> { - const IOTA_MULTIPLIER: u64 = 1000; - - amount - .checked_mul(IOTA_MULTIPLIER) - .ok_or_else(|| anyhow!("overflow multiplying amount {amount} by {IOTA_MULTIPLIER}")) -} diff --git a/crates/iota-genesis-builder/src/stardust/migration/migration.rs b/crates/iota-genesis-builder/src/stardust/migration/migration.rs index 96ef8c7fd2a..a1e0d49dd6f 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/migration.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/migration.rs @@ -32,6 +32,7 @@ use crate::stardust::{ verification::{created_objects::CreatedObjects, verify_outputs}, }, native_token::package_data::NativeTokenPackageData, + process_outputs::get_merged_outputs_for_iota, types::{address_swap_map::AddressSwapMap, output_header::OutputHeader}, }; @@ -163,6 +164,20 @@ impl Migration { Ok(()) } + /// Run all stages of the migration coming from a Hornet snapshot with IOTA + /// coin type. + pub fn run_for_iota<'a>( + self, + target_milestone_timestamp: u32, + outputs: impl Iterator<Item = Result<(OutputHeader, Output)>> + 'a, + writer: impl Write, + ) -> Result<()> { + itertools::process_results( + get_merged_outputs_for_iota(target_milestone_timestamp, outputs), + |outputs| self.run(outputs, writer), + )? + } + /// The migration objects. /// /// The system packages and underlying `init` objects diff --git a/crates/iota-genesis-builder/src/stardust/migration/mod.rs b/crates/iota-genesis-builder/src/stardust/migration/mod.rs index d9a04628723..198da0e1561 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/mod.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/mod.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 mod executor; -#[allow(clippy::module_inception)] +#[expect(clippy::module_inception)] mod migration; mod migration_target_network; #[cfg(test)] diff --git a/crates/iota-genesis-builder/src/stardust/mod.rs b/crates/iota-genesis-builder/src/stardust/mod.rs index 56a24edab30..b4e832eea96 100644 --- a/crates/iota-genesis-builder/src/stardust/mod.rs +++ b/crates/iota-genesis-builder/src/stardust/mod.rs @@ -8,6 +8,7 @@ pub mod migration; pub mod native_token; pub mod parse; +pub mod process_outputs; #[cfg(feature = "test-outputs")] pub mod test_outputs; pub mod types; diff --git a/crates/iota-genesis-builder/src/stardust/process_outputs.rs b/crates/iota-genesis-builder/src/stardust/process_outputs.rs new file mode 100644 index 00000000000..bb4c93b7ad0 --- /dev/null +++ b/crates/iota-genesis-builder/src/stardust/process_outputs.rs @@ -0,0 +1,208 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +use std::collections::BTreeMap; + +use anyhow::{Result, anyhow}; +use iota_sdk::types::block::{ + address::Address, + output::{ + AliasOutputBuilder, BasicOutputBuilder, FoundryOutputBuilder, NftOutputBuilder, Output, + unlock_condition::{AddressUnlockCondition, StorageDepositReturnUnlockCondition}, + }, +}; +use iota_types::timelock::timelock::is_vested_reward; + +use super::types::output_header::OutputHeader; + +/// Take an `amount` and scale it by a multiplier defined for the IOTA token. +pub fn scale_amount_for_iota(amount: u64) -> Result<u64> { + const IOTA_MULTIPLIER: u64 = 1000; + + amount + .checked_mul(IOTA_MULTIPLIER) + .ok_or_else(|| anyhow!("overflow multiplying amount {amount} by {IOTA_MULTIPLIER}")) +} + +/// Processes and merges outputs from a Hornet snapshot considering balances as +/// IOTA tokens. +/// +/// This function uses the `MergingIterator` to filter and aggregate vesting +/// balances and then scales the output amounts. +pub fn get_merged_outputs_for_iota<'a>( + target_milestone_timestamp: u32, + outputs: impl Iterator<Item = Result<(OutputHeader, Output)>> + 'a, +) -> impl Iterator<Item = Result<(OutputHeader, Output), anyhow::Error>> + 'a { + MergingIterator::new(target_milestone_timestamp, outputs).map(|res| { + let (header, mut output) = res?; + // Scale the output amount according to IOTA token multiplier + scale_output_amount_for_iota(&mut output)?; + Ok((header, output)) + }) +} + +struct OutputHeaderWithBalance { + output_header: OutputHeader, + balance: u64, +} + +/// An iterator that processes outputs, aggregates balances for eligible +/// addresses, and generates new "basic" outputs for unlocked vesting rewards. +/// +/// `MergingIterator` filters outputs based on conditions: +/// - Must be "basic" outputs. +/// - Must represent vesting rewards that are timelocked relative to a snapshot +/// timestamp. +/// +/// Eligible balances are aggregated into a map, and once all inputs are +/// processed, the iterator produces new outputs consolidating these balances. +/// +/// Non-eligible outputs are returned as-is. +struct MergingIterator<I> { + /// Stores aggregated balances for eligible addresses. + unlocked_address_balances: BTreeMap<Address, OutputHeaderWithBalance>, + /// Timestamp used to evaluate timelock conditions. + snapshot_timestamp_s: u32, + /// Iterator over `(OutputHeader, Output)` pairs. + outputs: I, +} + +impl<I> MergingIterator<I> { + fn new(snapshot_timestamp_s: u32, outputs: I) -> Self { + Self { + unlocked_address_balances: Default::default(), + snapshot_timestamp_s, + outputs, + } + } +} + +impl<I: Iterator<Item = Result<(OutputHeader, Output)>>> Iterator for MergingIterator<I> { + type Item = I::Item; + + fn next(&mut self) -> Option<Self::Item> { + // First process all the outputs, building the unlocked_address_balances map as + // we go. + for res in self.outputs.by_ref() { + if let Ok((header, output)) = res { + fn mergeable_address( + header: &OutputHeader, + output: &Output, + snapshot_timestamp_s: u32, + ) -> Option<Address> { + // ignore all non-basic outputs and non vesting outputs + if !output.is_basic() + || !is_vested_reward(header.output_id(), output.as_basic()) + { + return None; + } + + if let Some(unlock_conditions) = output.unlock_conditions() { + // check if vesting unlock period is already done + if unlock_conditions.is_time_locked(snapshot_timestamp_s) { + return None; + } + unlock_conditions.address().map(|uc| *uc.address()) + } else { + None + } + } + + if let Some(address) = + mergeable_address(&header, &output, self.snapshot_timestamp_s) + { + // collect the unlocked vesting balances + self.unlocked_address_balances + .entry(address) + .and_modify(|x| x.balance += output.amount()) + .or_insert(OutputHeaderWithBalance { + output_header: header, + balance: output.amount(), + }); + continue; + } else { + return Some(Ok((header, output))); + } + } else { + return Some(res); + } + } + + // Now that we are out + self.unlocked_address_balances + .pop_first() + .map(|(address, output_header_with_balance)| { + // create a new basic output which holds the aggregated balance from + // unlocked vesting outputs for this address + let basic = BasicOutputBuilder::new_with_amount(output_header_with_balance.balance) + .add_unlock_condition(AddressUnlockCondition::new(address)) + .finish() + .expect("should be able to create a basic output"); + + Ok((output_header_with_balance.output_header, basic.into())) + }) + } +} + +fn scale_output_amount_for_iota(output: &mut Output) -> Result<()> { + *output = match output { + Output::Basic(ref basic_output) => { + // Update amount + let mut builder = BasicOutputBuilder::from(basic_output) + .with_amount(scale_amount_for_iota(basic_output.amount())?); + + // Update amount in potential storage deposit return unlock condition + if let Some(sdr_uc) = basic_output + .unlock_conditions() + .get(StorageDepositReturnUnlockCondition::KIND) + { + let sdr_uc = sdr_uc.as_storage_deposit_return(); + builder = builder.replace_unlock_condition( + StorageDepositReturnUnlockCondition::new( + sdr_uc.return_address(), + scale_amount_for_iota(sdr_uc.amount())?, + u64::MAX, + ) + .unwrap(), + ); + }; + + Output::from(builder.finish()?) + } + Output::Alias(ref alias_output) => Output::from( + AliasOutputBuilder::from(alias_output) + .with_amount(scale_amount_for_iota(alias_output.amount())?) + .finish()?, + ), + Output::Foundry(ref foundry_output) => Output::from( + FoundryOutputBuilder::from(foundry_output) + .with_amount(scale_amount_for_iota(foundry_output.amount())?) + .finish()?, + ), + Output::Nft(ref nft_output) => { + // Update amount + let mut builder = NftOutputBuilder::from(nft_output) + .with_amount(scale_amount_for_iota(nft_output.amount())?); + + // Update amount in potential storage deposit return unlock condition + if let Some(sdr_uc) = nft_output + .unlock_conditions() + .get(StorageDepositReturnUnlockCondition::KIND) + { + let sdr_uc = sdr_uc.as_storage_deposit_return(); + builder = builder.replace_unlock_condition( + StorageDepositReturnUnlockCondition::new( + sdr_uc.return_address(), + scale_amount_for_iota(sdr_uc.amount())?, + u64::MAX, + ) + .unwrap(), + ); + }; + + Output::from(builder.finish()?) + } + Output::Treasury(_) => return Ok(()), + }; + Ok(()) +} diff --git a/crates/iota-graphql-config/src/lib.rs b/crates/iota-graphql-config/src/lib.rs index dac6e6ac1b2..236ef925b8f 100644 --- a/crates/iota-graphql-config/src/lib.rs +++ b/crates/iota-graphql-config/src/lib.rs @@ -17,7 +17,7 @@ use syn::{ /// field that ensures that if the field is not present during deserialization, /// it is replaced with its default value, from the `Default` implementation for /// the config struct. -#[allow(non_snake_case)] +#[expect(non_snake_case)] #[proc_macro_attribute] pub fn GraphQLConfig(_attr: TokenStream, input: TokenStream) -> TokenStream { let DeriveInput { diff --git a/crates/iota-graphql-rpc-client/src/response.rs b/crates/iota-graphql-rpc-client/src/response.rs index 40c24e93cf8..d26cab75d80 100644 --- a/crates/iota-graphql-rpc-client/src/response.rs +++ b/crates/iota-graphql-rpc-client/src/response.rs @@ -40,7 +40,7 @@ impl GraphqlResponse { }) } - #[allow(clippy::result_large_err)] + #[expect(clippy::result_large_err)] pub fn graphql_version(&self) -> Result<String, ClientError> { Ok(self .headers @@ -91,7 +91,7 @@ impl GraphqlResponse { self.full_response.errors.clone() } - #[allow(clippy::result_large_err)] + #[expect(clippy::result_large_err)] pub fn usage(&self) -> Result<Option<BTreeMap<String, u64>>, ClientError> { Ok(match self.full_response.extensions.get("usage").cloned() { Some(Value::Object(obj)) => Some( diff --git a/crates/iota-graphql-rpc-client/src/simple_client.rs b/crates/iota-graphql-rpc-client/src/simple_client.rs index f78f8ca3753..2b5dfac4649 100644 --- a/crates/iota-graphql-rpc-client/src/simple_client.rs +++ b/crates/iota-graphql-rpc-client/src/simple_client.rs @@ -117,7 +117,7 @@ impl SimpleClient { } } -#[allow(clippy::type_complexity, clippy::result_large_err)] +#[expect(clippy::type_complexity, clippy::result_large_err)] pub fn resolve_variables( vars: &[GraphqlQueryVariable], ) -> Result<(BTreeMap<String, String>, BTreeMap<String, Value>), ClientError> { diff --git a/crates/iota-graphql-rpc/src/raw_query.rs b/crates/iota-graphql-rpc/src/raw_query.rs index e6ed4a89b14..ce7bd23b2f6 100644 --- a/crates/iota-graphql-rpc/src/raw_query.rs +++ b/crates/iota-graphql-rpc/src/raw_query.rs @@ -66,7 +66,6 @@ impl RawQuery { /// Adds a `WHERE` condition to the query, combining it with existing /// conditions using `OR`. - #[allow(dead_code)] pub(crate) fn or_filter<T: std::fmt::Display>(mut self, condition: T) -> Self { self.where_ = match self.where_ { Some(where_) => Some(format!("({}) OR {}", where_, condition)), diff --git a/crates/iota-graphql-rpc/src/server/version.rs b/crates/iota-graphql-rpc/src/server/version.rs index ff65114fb7b..b1c58ddcb1d 100644 --- a/crates/iota-graphql-rpc/src/server/version.rs +++ b/crates/iota-graphql-rpc/src/server/version.rs @@ -17,7 +17,7 @@ use crate::{ pub(crate) static VERSION_HEADER: HeaderName = HeaderName::from_static("x-iota-rpc-version"); -#[allow(unused)] +#[expect(unused)] pub(crate) struct IotaRpcVersion(Vec<u8>, Vec<Vec<u8>>); const NAMED_VERSIONS: [&str; 3] = ["beta", "legacy", "stable"]; diff --git a/crates/iota-graphql-rpc/src/types/epoch.rs b/crates/iota-graphql-rpc/src/types/epoch.rs index 20a16d582c8..bbb9607c294 100644 --- a/crates/iota-graphql-rpc/src/types/epoch.rs +++ b/crates/iota-graphql-rpc/src/types/epoch.rs @@ -264,7 +264,6 @@ impl Epoch { ) -> Result<ScanConnection<String, TransactionBlock>> { let page = Page::from_params(ctx.data_unchecked(), first, after, last, before)?; - #[allow(clippy::unnecessary_lazy_evaluations)] // rust-lang/rust-clippy#9422 let Some(filter) = filter .unwrap_or_default() .intersect(TransactionBlockFilter { diff --git a/crates/iota-graphql-rpc/src/types/move_object.rs b/crates/iota-graphql-rpc/src/types/move_object.rs index 8f74494b841..405d9804be7 100644 --- a/crates/iota-graphql-rpc/src/types/move_object.rs +++ b/crates/iota-graphql-rpc/src/types/move_object.rs @@ -52,7 +52,7 @@ pub(crate) enum MoveObjectDowncastError { /// This interface is implemented by types that represent a Move object on-chain /// (A Move value whose type has `key`). -#[allow(clippy::duplicated_attributes)] +#[expect(clippy::duplicated_attributes)] #[derive(Interface)] #[graphql( name = "IMoveObject", diff --git a/crates/iota-graphql-rpc/src/types/object.rs b/crates/iota-graphql-rpc/src/types/object.rs index 4a57b49c764..ae2d53767f3 100644 --- a/crates/iota-graphql-rpc/src/types/object.rs +++ b/crates/iota-graphql-rpc/src/types/object.rs @@ -88,7 +88,7 @@ pub(crate) struct Object { pub(crate) struct ObjectImpl<'o>(pub &'o Object); #[derive(Clone, Debug)] -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] pub(crate) enum ObjectKind { /// An object loaded from serialized data, such as the contents of a /// transaction that hasn't been indexed yet. @@ -243,7 +243,7 @@ pub(crate) struct HistoricalObjectCursor { /// Interface implemented by on-chain values that are addressable by an ID (also /// referred to as its address). This includes Move objects and packages. -#[allow(clippy::duplicated_attributes)] +#[expect(clippy::duplicated_attributes)] #[derive(Interface)] #[graphql( name = "IObject", diff --git a/crates/iota-graphql-rpc/src/types/owner.rs b/crates/iota-graphql-rpc/src/types/owner.rs index 8f06599e691..d40b51e39bc 100644 --- a/crates/iota-graphql-rpc/src/types/owner.rs +++ b/crates/iota-graphql-rpc/src/types/owner.rs @@ -56,7 +56,7 @@ pub(crate) struct OwnerImpl { /// either the public key of an account or another object. The same address can /// only refer to an account or an object, never both, but it is not possible to /// know which up-front. -#[allow(clippy::duplicated_attributes)] +#[expect(clippy::duplicated_attributes)] #[derive(Interface)] #[graphql( name = "IOwner", diff --git a/crates/iota-indexer/src/apis/transaction_builder_api.rs b/crates/iota-indexer/src/apis/transaction_builder_api.rs index 274a57a64dc..c72ce245d12 100644 --- a/crates/iota-indexer/src/apis/transaction_builder_api.rs +++ b/crates/iota-indexer/src/apis/transaction_builder_api.rs @@ -21,7 +21,7 @@ pub(crate) struct TransactionBuilderApi<T: R2D2Connection + 'static> { } impl<T: R2D2Connection> TransactionBuilderApi<T> { - #[allow(clippy::new_ret_no_self)] + #[expect(clippy::new_ret_no_self)] pub fn new(inner: IndexerReader<T>) -> IotaTransactionBuilderApi { IotaTransactionBuilderApi::new_with_data_reader(std::sync::Arc::new(Self { inner })) } diff --git a/crates/iota-indexer/src/models/tx_indices.rs b/crates/iota-indexer/src/models/tx_indices.rs index 7ca593b6218..3bc562d01f8 100644 --- a/crates/iota-indexer/src/models/tx_indices.rs +++ b/crates/iota-indexer/src/models/tx_indices.rs @@ -96,7 +96,7 @@ pub struct StoredTxKind { pub tx_sequence_number: i64, } -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] impl TxIndex { pub fn split( self: TxIndex, diff --git a/crates/iota-indexer/src/store/indexer_store.rs b/crates/iota-indexer/src/store/indexer_store.rs index 00281bc11cf..b41b250f28e 100644 --- a/crates/iota-indexer/src/store/indexer_store.rs +++ b/crates/iota-indexer/src/store/indexer_store.rs @@ -18,7 +18,7 @@ use crate::{ }, }; -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] pub enum ObjectChangeToCommit { MutatedObject(StoredObject), DeletedObject(StoredDeletedObject), diff --git a/crates/iota-indexer/src/store/pg_indexer_store.rs b/crates/iota-indexer/src/store/pg_indexer_store.rs index d721a5e95e4..007fa538120 100644 --- a/crates/iota-indexer/src/store/pg_indexer_store.rs +++ b/crates/iota-indexer/src/store/pg_indexer_store.rs @@ -135,7 +135,7 @@ SET object_version = EXCLUDED.object_version, pub struct PgIndexerStoreConfig { pub parallel_chunk_size: usize, pub parallel_objects_chunk_size: usize, - #[allow(unused)] + #[expect(unused)] pub epochs_to_keep: Option<u64>, } diff --git a/crates/iota-indexer/tests/ingestion_tests.rs b/crates/iota-indexer/tests/ingestion_tests.rs index 4ed48a2c0f2..9082703db4c 100644 --- a/crates/iota-indexer/tests/ingestion_tests.rs +++ b/crates/iota-indexer/tests/ingestion_tests.rs @@ -2,7 +2,7 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -#[allow(dead_code)] +#[expect(dead_code)] #[cfg(feature = "pg_integration")] mod common; #[cfg(feature = "pg_integration")] diff --git a/crates/iota-indexer/tests/rpc-tests/main.rs b/crates/iota-indexer/tests/rpc-tests/main.rs index 0479b12703e..2b6e61a280d 100644 --- a/crates/iota-indexer/tests/rpc-tests/main.rs +++ b/crates/iota-indexer/tests/rpc-tests/main.rs @@ -4,7 +4,7 @@ #[cfg(feature = "shared_test_runtime")] mod coin_api; -#[allow(dead_code)] +#[expect(dead_code)] #[path = "../common/mod.rs"] mod common; #[cfg(feature = "shared_test_runtime")] diff --git a/crates/iota-json-rpc-tests/tests/read_api.rs b/crates/iota-json-rpc-tests/tests/read_api.rs index 8602e391c05..a38376ce97b 100644 --- a/crates/iota-json-rpc-tests/tests/read_api.rs +++ b/crates/iota-json-rpc-tests/tests/read_api.rs @@ -1487,104 +1487,108 @@ async fn try_get_past_object_version_not_found() { assert!(at_least_one_version_not_found) } -#[sim_test] -async fn try_get_past_object_deleted() { - let cluster = TestClusterBuilder::new().build().await; - let http_client = cluster.rpc_client(); - let address = cluster.get_address_0(); - - let objects = cluster - .get_owned_objects(address, Some(IotaObjectDataOptions::full_content())) - .await - .unwrap(); +mod move_tests { + use super::*; - assert_eq!(5, objects.len()); + #[sim_test] + async fn try_get_past_object_deleted() { + let cluster = TestClusterBuilder::new().build().await; + let http_client = cluster.rpc_client(); + let address = cluster.get_address_0(); - let tx_block_response = publish_move_package(&cluster).await; + let objects = cluster + .get_owned_objects(address, Some(IotaObjectDataOptions::full_content())) + .await + .unwrap(); - let package_id = tx_block_response - .object_changes - .unwrap() - .iter() - .filter_map(|obj_change| match obj_change { - ObjectChange::Published { package_id, .. } => Some(*package_id), - _ => None, - }) - .collect::<Vec<ObjectID>>()[0]; + assert_eq!(5, objects.len()); - let tx_block_response = cluster - .sign_and_execute_transaction( - &cluster - .test_transaction_builder() - .await - .move_call(package_id, "object_basics", "create", vec![ - 1u64.into(), - CallArg::Pure(address.to_vec()), - ]) - .build(), - ) - .await; + let tx_block_response = publish_move_package(&cluster).await; - let created_object_id = tx_block_response - .object_changes - .unwrap() - .iter() - .filter_map(|obj_change| match obj_change { - ObjectChange::Created { object_id, .. } => Some(*object_id), - _ => None, - }) - .collect::<Vec<ObjectID>>()[0]; + let package_id = tx_block_response + .object_changes + .unwrap() + .iter() + .filter_map(|obj_change| match obj_change { + ObjectChange::Published { package_id, .. } => Some(*package_id), + _ => None, + }) + .collect::<Vec<ObjectID>>()[0]; + + let tx_block_response = cluster + .sign_and_execute_transaction( + &cluster + .test_transaction_builder() + .await + .move_call(package_id, "object_basics", "create", vec![ + 1u64.into(), + CallArg::Pure(address.to_vec()), + ]) + .build(), + ) + .await; - let objects = cluster - .get_owned_objects(address, Some(IotaObjectDataOptions::full_content())) - .await - .unwrap(); + let created_object_id = tx_block_response + .object_changes + .unwrap() + .iter() + .filter_map(|obj_change| match obj_change { + ObjectChange::Created { object_id, .. } => Some(*object_id), + _ => None, + }) + .collect::<Vec<ObjectID>>()[0]; - let object_ids = objects - .iter() - .map(|a| a.object_id().unwrap()) - .collect::<Vec<ObjectID>>(); + let objects = cluster + .get_owned_objects(address, Some(IotaObjectDataOptions::full_content())) + .await + .unwrap(); - assert_eq!(7, objects.len()); - assert!(object_ids.contains(&created_object_id)); + let object_ids = objects + .iter() + .map(|a| a.object_id().unwrap()) + .collect::<Vec<ObjectID>>(); - let created_object = http_client - .get_object(created_object_id, None) - .await - .unwrap() - .data - .unwrap(); + assert_eq!(7, objects.len()); + assert!(object_ids.contains(&created_object_id)); - let arg = CallArg::Object(iota_types::transaction::ObjectArg::ImmOrOwnedObject(( - created_object.object_id, - created_object.version, - created_object.digest, - ))); + let created_object = http_client + .get_object(created_object_id, None) + .await + .unwrap() + .data + .unwrap(); - let tx_block_response = cluster - .sign_and_execute_transaction( - &cluster - .test_transaction_builder() - .await - .move_call(package_id, "object_basics", "delete", vec![arg]) - .build(), - ) - .await; + let arg = CallArg::Object(iota_types::transaction::ObjectArg::ImmOrOwnedObject(( + created_object.object_id, + created_object.version, + created_object.digest, + ))); + + let tx_block_response = cluster + .sign_and_execute_transaction( + &cluster + .test_transaction_builder() + .await + .move_call(package_id, "object_basics", "delete", vec![arg]) + .build(), + ) + .await; - assert_eq!( - tx_block_response.effects.as_ref().unwrap().deleted().len(), - 1 - ); + assert_eq!( + tx_block_response.effects.as_ref().unwrap().deleted().len(), + 1 + ); - let seq_num = SequenceNumber::from_u64(4); - let rpc_past_obj = http_client - .try_get_past_object(created_object_id, seq_num, None) - .await - .unwrap(); + let seq_num = SequenceNumber::from_u64(4); + let rpc_past_obj = http_client + .try_get_past_object(created_object_id, seq_num, None) + .await + .unwrap(); - assert!( - matches!(rpc_past_obj, IotaPastObjectResponse::ObjectDeleted(obj) if obj.object_id == created_object_id && obj.version == seq_num) - ); + assert!( + matches!(rpc_past_obj, IotaPastObjectResponse::ObjectDeleted(obj) if obj.object_id == created_object_id && obj.version == seq_num) + ); + } } #[sim_test] diff --git a/crates/iota-json-rpc-tests/tests/transaction_builder_api.rs b/crates/iota-json-rpc-tests/tests/transaction_builder_api.rs index cf7dc69998d..558a8cfa92d 100644 --- a/crates/iota-json-rpc-tests/tests/transaction_builder_api.rs +++ b/crates/iota-json-rpc-tests/tests/transaction_builder_api.rs @@ -298,49 +298,53 @@ async fn test_pay_all_iota() -> Result<(), anyhow::Error> { Ok(()) } -#[sim_test] -async fn test_publish() -> Result<(), anyhow::Error> { - let cluster = TestClusterBuilder::new().build().await; - let http_client = cluster.rpc_client(); - let address = cluster.get_address_0(); - - let objects = http_client - .get_owned_objects( - address, - Some(IotaObjectResponseQuery::new_with_options( - IotaObjectDataOptions::new() - .with_type() - .with_owner() - .with_previous_transaction(), - )), - None, - None, - ) - .await?; - let gas = objects.data.first().unwrap().object().unwrap(); - - let compiled_package = - BuildConfig::new_for_testing().build(Path::new("../../examples/move/basics"))?; - let compiled_modules_bytes = - compiled_package.get_package_base64(/* with_unpublished_deps */ false); - let dependencies = compiled_package.get_dependency_storage_package_ids(); - - let transaction_bytes: TransactionBlockBytes = http_client - .publish( - address, - compiled_modules_bytes, - dependencies, - Some(gas.object_id), - 100_000_000.into(), - ) - .await?; +mod move_tests { + use super::*; + + #[sim_test] + async fn test_publish() -> Result<(), anyhow::Error> { + let cluster = TestClusterBuilder::new().build().await; + let http_client = cluster.rpc_client(); + let address = cluster.get_address_0(); + + let objects = http_client + .get_owned_objects( + address, + Some(IotaObjectResponseQuery::new_with_options( + IotaObjectDataOptions::new() + .with_type() + .with_owner() + .with_previous_transaction(), + )), + None, + None, + ) + .await?; + let gas = objects.data.first().unwrap().object().unwrap(); + + let compiled_package = + BuildConfig::new_for_testing().build(Path::new("../../examples/move/basics"))?; + let compiled_modules_bytes = + compiled_package.get_package_base64(/* with_unpublished_deps */ false); + let dependencies = compiled_package.get_dependency_storage_package_ids(); + + let transaction_bytes: TransactionBlockBytes = http_client + .publish( + address, + compiled_modules_bytes, + dependencies, + Some(gas.object_id), + 100_000_000.into(), + ) + .await?; - let tx_response = execute_tx(&cluster, http_client, transaction_bytes) - .await - .unwrap(); + let tx_response = execute_tx(&cluster, http_client, transaction_bytes) + .await + .unwrap(); - matches!(tx_response, IotaTransactionBlockResponse {effects, ..} if effects.as_ref().unwrap().created().len() == 6); - Ok(()) + matches!(tx_response, IotaTransactionBlockResponse {effects, ..} if effects.as_ref().unwrap().created().len() == 6); + Ok(()) + } } #[sim_test] diff --git a/crates/iota-json-rpc-types/src/iota_object.rs b/crates/iota-json-rpc-types/src/iota_object.rs index 45d1eaff03d..8a7947d2b67 100644 --- a/crates/iota-json-rpc-types/src/iota_object.rs +++ b/crates/iota-json-rpc-types/src/iota_object.rs @@ -209,7 +209,6 @@ pub struct IotaObjectData { /// The Display metadata for frontend UI rendering, default to be None /// unless IotaObjectDataOptions.showContent is set to true This can also /// be None if the struct type does not have Display defined - /// See more details in <https://forums.iota.io/t/nft-object-display-proposal/4872> #[serde(skip_serializing_if = "Option::is_none")] pub display: Option<DisplayFieldsResponse>, /// Move object content or package content, default to be None unless diff --git a/crates/iota-json-rpc/src/authority_state.rs b/crates/iota-json-rpc/src/authority_state.rs index ef03f6576dd..e2b7df71d96 100644 --- a/crates/iota-json-rpc/src/authority_state.rs +++ b/crates/iota-json-rpc/src/authority_state.rs @@ -354,7 +354,6 @@ impl StateRead for AuthorityState { .await?) } - #[allow(clippy::type_complexity)] async fn dry_exec_transaction( &self, transaction: TransactionData, diff --git a/crates/iota-json-rpc/src/axum_router.rs b/crates/iota-json-rpc/src/axum_router.rs index 5957efdcb0d..8037cda0c3f 100644 --- a/crates/iota-json-rpc/src/axum_router.rs +++ b/crates/iota-json-rpc/src/axum_router.rs @@ -446,7 +446,6 @@ pub mod ws { } async fn ws_json_rpc_handler<L: Logger>(mut socket: WebSocket, service: JsonRpcService<L>) { - #[allow(clippy::disallowed_methods)] let (tx, mut rx) = mpsc::channel::<String>(MAX_WS_MESSAGE_BUFFER); let sink = MethodSink::new_with_limit(tx, MAX_RESPONSE_SIZE); let bounded_subscriptions = BoundedSubscriptions::new(100); diff --git a/crates/iota-json-rpc/src/transaction_execution_api.rs b/crates/iota-json-rpc/src/transaction_execution_api.rs index 0d128dd1914..32c865b5281 100644 --- a/crates/iota-json-rpc/src/transaction_execution_api.rs +++ b/crates/iota-json-rpc/src/transaction_execution_api.rs @@ -71,7 +71,7 @@ impl TransactionExecutionApi { Ok(data) } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] fn prepare_execute_transaction_block( &self, tx_bytes: Base64, diff --git a/crates/iota-json/src/tests.rs b/crates/iota-json/src/tests.rs index 6a899b12ebd..b97880f0efa 100644 --- a/crates/iota-json/src/tests.rs +++ b/crates/iota-json/src/tests.rs @@ -423,91 +423,95 @@ fn test_basic_args_linter_pure_args_good() { } } -#[test] -fn test_basic_args_linter_top_level() { - let path = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../examples/move/basics"); - let compiled_modules = BuildConfig::new_for_testing() - .build(&path) - .unwrap() - .into_modules(); - let example_package = Object::new_package_for_testing( - &compiled_modules, - TransactionDigest::genesis_marker(), - BuiltInFramework::genesis_move_packages(), - ) - .unwrap(); - let package = example_package.data.try_as_package().unwrap(); - - let module = Identifier::new("resolve_args").unwrap(); - let function = Identifier::new("foo").unwrap(); - - // Function signature: - // foo( - // _foo: &mut Foo, - // _bar: vector<Foo>, - // _name: vector<u8>, - // _index: u64, - // _flag: u8, - // _recipient: address, - // _ctx: &mut TxContext, - // ) - - let foo_id = ObjectID::random(); - let bar_id = ObjectID::random(); - let baz_id = ObjectID::random(); - let recipient_addr = IotaAddress::random_for_testing_only(); - - let foo = json!(foo_id.to_canonical_string(/* with_prefix */ true)); - let bar = json!([ - bar_id.to_canonical_string(/* with_prefix */ true), - baz_id.to_canonical_string(/* with_prefix */ true), - ]); - - let name = json!("Name"); - let index = json!("12345678"); - let flag = json!(89); - let recipient = json!(recipient_addr.to_string()); - - let args: Vec<_> = [ - foo.clone(), - bar.clone(), - name.clone(), - index.clone(), - flag, - recipient.clone(), - ] - .into_iter() - .map(|q| IotaJsonValue::new(q.clone()).unwrap()) - .collect(); - - let json_args: Vec<_> = - resolve_move_function_args(package, module.clone(), function.clone(), &[], args) +mod move_tests { + use super::*; + + #[test] + fn test_basic_args_linter_top_level() { + let path = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../examples/move/basics"); + let compiled_modules = BuildConfig::new_for_testing() + .build(&path) .unwrap() - .into_iter() - .map(|(arg, _)| arg) - .collect(); - - use ResolvedCallArg as RCA; - fn pure<T: Serialize>(t: &T) -> RCA { - RCA::Pure(bcs::to_bytes(t).unwrap()) - } - - assert_eq!(json_args, vec![ - RCA::Object(foo_id), - RCA::ObjVec(vec![bar_id, baz_id]), - pure(&"Name"), - pure(&12345678u64), - pure(&89u8), - pure(&recipient_addr), - ],); - - // Flag is u8 so too large - let args: Vec<_> = [foo, bar, name, index, json!(10000u64), recipient] + .into_modules(); + let example_package = Object::new_package_for_testing( + &compiled_modules, + TransactionDigest::genesis_marker(), + BuiltInFramework::genesis_move_packages(), + ) + .unwrap(); + let package = example_package.data.try_as_package().unwrap(); + + let module = Identifier::new("resolve_args").unwrap(); + let function = Identifier::new("foo").unwrap(); + + // Function signature: + // foo( + // _foo: &mut Foo, + // _bar: vector<Foo>, + // _name: vector<u8>, + // _index: u64, + // _flag: u8, + // _recipient: address, + // _ctx: &mut TxContext, + // ) + + let foo_id = ObjectID::random(); + let bar_id = ObjectID::random(); + let baz_id = ObjectID::random(); + let recipient_addr = IotaAddress::random_for_testing_only(); + + let foo = json!(foo_id.to_canonical_string(/* with_prefix */ true)); + let bar = json!([ + bar_id.to_canonical_string(/* with_prefix */ true), + baz_id.to_canonical_string(/* with_prefix */ true), + ]); + + let name = json!("Name"); + let index = json!("12345678"); + let flag = json!(89); + let recipient = json!(recipient_addr.to_string()); + + let args: Vec<_> = [ + foo.clone(), + bar.clone(), + name.clone(), + index.clone(), + flag, + recipient.clone(), + ] .into_iter() .map(|q| IotaJsonValue::new(q.clone()).unwrap()) .collect(); - assert!(resolve_move_function_args(package, module, function, &[], args,).is_err()); + let json_args: Vec<_> = + resolve_move_function_args(package, module.clone(), function.clone(), &[], args) + .unwrap() + .into_iter() + .map(|(arg, _)| arg) + .collect(); + + use ResolvedCallArg as RCA; + fn pure<T: Serialize>(t: &T) -> RCA { + RCA::Pure(bcs::to_bytes(t).unwrap()) + } + + assert_eq!(json_args, vec![ + RCA::Object(foo_id), + RCA::ObjVec(vec![bar_id, baz_id]), + pure(&"Name"), + pure(&12345678u64), + pure(&89u8), + pure(&recipient_addr), + ],); + + // Flag is u8 so too large + let args: Vec<_> = [foo, bar, name, index, json!(10000u64), recipient] + .into_iter() + .map(|q| IotaJsonValue::new(q.clone()).unwrap()) + .collect(); + + assert!(resolve_move_function_args(package, module, function, &[], args,).is_err()); + } } #[test] diff --git a/crates/iota-light-client/src/bin/light_client.rs b/crates/iota-light-client/src/bin/light_client.rs index 64f6f97df0b..1db8daab15f 100644 --- a/crates/iota-light-client/src/bin/light_client.rs +++ b/crates/iota-light-client/src/bin/light_client.rs @@ -142,7 +142,7 @@ mod tests { } // clippy ignore dead-code - #[allow(dead_code)] + #[expect(dead_code)] async fn write_full_checkpoint( checkpoint_path: &Path, checkpoint: &CheckpointData, diff --git a/crates/iota-macros/src/lib.rs b/crates/iota-macros/src/lib.rs index 672b381ceb0..366067ff0a4 100644 --- a/crates/iota-macros/src/lib.rs +++ b/crates/iota-macros/src/lib.rs @@ -413,7 +413,6 @@ mod test { #[test] #[should_panic] fn test_macro_overflow() { - #[allow(arithmetic_overflow)] fn f() { println!("{}", i32::MAX + 1); } @@ -603,7 +602,6 @@ mod test { #[test] #[should_panic] fn test_macro_overflow() { - #[allow(arithmetic_overflow)] fn f() { println!("{}", i32::MAX + 1); } diff --git a/crates/iota-metrics/src/metrics_network.rs b/crates/iota-metrics/src/metrics_network.rs index f5cb37402a4..e8131f2434e 100644 --- a/crates/iota-metrics/src/metrics_network.rs +++ b/crates/iota-metrics/src/metrics_network.rs @@ -364,7 +364,7 @@ impl MakeCallbackHandler for MetricsMakeCallbackHandler { pub struct MetricsResponseHandler { metrics: Arc<NetworkMetrics>, // The timer is held on to and "observed" once dropped - #[allow(unused)] + #[expect(unused)] timer: HistogramTimer, route: String, excessive_message_size: usize, diff --git a/crates/iota-metrics/src/monitored_mpsc.rs b/crates/iota-metrics/src/monitored_mpsc.rs index ce15ff7fed3..0806d06590b 100644 --- a/crates/iota-metrics/src/monitored_mpsc.rs +++ b/crates/iota-metrics/src/monitored_mpsc.rs @@ -563,7 +563,7 @@ impl<T> Unpin for UnboundedReceiver<T> {} /// and `UnboundedReceiver` pub fn unbounded_channel<T>(name: &str) -> (UnboundedSender<T>, UnboundedReceiver<T>) { let metrics = get_metrics(); - #[allow(clippy::disallowed_methods)] + #[expect(clippy::disallowed_methods)] let (sender, receiver) = mpsc::unbounded_channel(); ( UnboundedSender { diff --git a/crates/iota-move-build/src/lib.rs b/crates/iota-move-build/src/lib.rs index 260c2ce2ef8..309885fcbf1 100644 --- a/crates/iota-move-build/src/lib.rs +++ b/crates/iota-move-build/src/lib.rs @@ -204,7 +204,9 @@ pub fn decorate_warnings(warning_diags: Diagnostics, files: Option<&MappedFiles> report_warnings(f, warning_diags); } if any_linter_warnings { - eprintln!("Please report feedback on the linter warnings at https://forums.iota.io\n"); + eprintln!( + "Please report feedback on the linter warnings at https://github.com/iotaledger/iota/issues\n" + ); } if filtered_diags_num > 0 { eprintln!( diff --git a/crates/iota-network/src/discovery/builder.rs b/crates/iota-network/src/discovery/builder.rs index 0c7a22ecf86..801d322e1fd 100644 --- a/crates/iota-network/src/discovery/builder.rs +++ b/crates/iota-network/src/discovery/builder.rs @@ -29,7 +29,6 @@ pub struct Builder { } impl Builder { - #[allow(clippy::new_without_default)] pub fn new(trusted_peer_change_rx: watch::Receiver<TrustedPeerChangeEvent>) -> Self { Self { config: None, diff --git a/crates/iota-network/src/randomness/mod.rs b/crates/iota-network/src/randomness/mod.rs index 50ed7c09ee1..3bed5180149 100644 --- a/crates/iota-network/src/randomness/mod.rs +++ b/crates/iota-network/src/randomness/mod.rs @@ -920,7 +920,7 @@ impl RandomnessEventLoop { } } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] fn remove_partial_sigs_in_range( &mut self, range: ( @@ -952,7 +952,7 @@ impl RandomnessEventLoop { full_sig: Arc<OnceCell<RandomnessSignature>>, ) { // For simtests, we may test not sending partial signatures. - #[allow(unused_mut)] + #[expect(unused_mut)] let mut fail_point_skip_sending = false; fail_point_if!("rb-send-partial-signatures", || { fail_point_skip_sending = true; diff --git a/crates/iota-network/src/state_sync/builder.rs b/crates/iota-network/src/state_sync/builder.rs index 6734aceae26..496e65e08e0 100644 --- a/crates/iota-network/src/state_sync/builder.rs +++ b/crates/iota-network/src/state_sync/builder.rs @@ -32,7 +32,7 @@ pub struct Builder<S> { } impl Builder<()> { - #[allow(clippy::new_without_default)] + #[expect(clippy::new_without_default)] pub fn new() -> Self { Self { store: None, diff --git a/crates/iota-network/src/state_sync/server.rs b/crates/iota-network/src/state_sync/server.rs index 507b34310db..a213c44eec3 100644 --- a/crates/iota-network/src/state_sync/server.rs +++ b/crates/iota-network/src/state_sync/server.rs @@ -234,7 +234,7 @@ where } })?; - struct SemaphoreExtension(#[allow(unused)] OwnedSemaphorePermit); + struct SemaphoreExtension(#[expect(unused)] OwnedSemaphorePermit); inner.call(req).await.map(move |mut response| { // Insert permit as extension so it's not dropped until the response is sent. response diff --git a/crates/iota-node/src/lib.rs b/crates/iota-node/src/lib.rs index 1e2282ea92a..58443bb59e6 100644 --- a/crates/iota-node/src/lib.rs +++ b/crates/iota-node/src/lib.rs @@ -1896,7 +1896,7 @@ impl IotaNode { .store(new_value, Ordering::Relaxed); } - #[allow(unused_variables)] + #[expect(unused_variables)] async fn fetch_jwks( authority: AuthorityName, provider: &OIDCProvider, diff --git a/crates/iota-open-rpc/spec/openrpc.json b/crates/iota-open-rpc/spec/openrpc.json index 5a54a311381..95f08307724 100644 --- a/crates/iota-open-rpc/spec/openrpc.json +++ b/crates/iota-open-rpc/spec/openrpc.json @@ -9700,7 +9700,7 @@ ] }, "display": { - "description": "The Display metadata for frontend UI rendering, default to be None unless IotaObjectDataOptions.showContent is set to true This can also be None if the struct type does not have Display defined See more details in <https://forums.iota.io/t/nft-object-display-proposal/4872>", + "description": "The Display metadata for frontend UI rendering, default to be None unless IotaObjectDataOptions.showContent is set to true This can also be None if the struct type does not have Display defined", "anyOf": [ { "$ref": "#/components/schemas/DisplayFieldsResponse" diff --git a/crates/iota-proc-macros/src/lib.rs b/crates/iota-proc-macros/src/lib.rs index 68e16646ae2..e6542663586 100644 --- a/crates/iota-proc-macros/src/lib.rs +++ b/crates/iota-proc-macros/src/lib.rs @@ -234,7 +234,7 @@ pub fn sim_test(args: TokenStream, item: TokenStream) -> TokenStream { let sig = &input.sig; let body = &input.block; quote! { - #[allow(clippy::needless_return)] + #[expect(clippy::needless_return)] #[tokio::test] #ignore #sig { diff --git a/crates/iota-protocol-config-macros/src/lib.rs b/crates/iota-protocol-config-macros/src/lib.rs index 9d2497e6710..a479c8df658 100644 --- a/crates/iota-protocol-config-macros/src/lib.rs +++ b/crates/iota-protocol-config-macros/src/lib.rs @@ -153,7 +153,7 @@ pub fn accessors_macro(input: TokenStream) -> TokenStream { _ => panic!("Only structs supported."), }; - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] let ((getters, (test_setters, value_setters)), (value_lookup, field_names_str)): ( (Vec<_>, (Vec<_>, Vec<_>)), (Vec<_>, Vec<_>), @@ -201,7 +201,7 @@ pub fn accessors_macro(input: TokenStream) -> TokenStream { } } - #[allow(non_camel_case_types)] + #[expect(non_camel_case_types)] #[derive(Clone, Serialize, Debug, PartialEq, Deserialize, schemars::JsonSchema)] pub enum ProtocolConfigValue { #(#inner_types(#inner_types),)* diff --git a/crates/iota-protocol-config/src/lib.rs b/crates/iota-protocol-config/src/lib.rs index a216a4efefb..77c62e282f3 100644 --- a/crates/iota-protocol-config/src/lib.rs +++ b/crates/iota-protocol-config/src/lib.rs @@ -1150,7 +1150,7 @@ impl ProtocolConfig { /// potentially returning a protocol config that is incorrect for some /// feature flags. Definitely safe for testing and for protocol version /// 11 and prior. - #[allow(non_snake_case)] + #[expect(non_snake_case)] pub fn get_for_max_version_UNSAFE() -> Self { if Self::load_poison_get_for_min_version() { panic!("get_for_max_version_UNSAFE called on validator"); diff --git a/crates/iota-replay/src/fuzz.rs b/crates/iota-replay/src/fuzz.rs index cc2d5a09c58..d041e740ce8 100644 --- a/crates/iota-replay/src/fuzz.rs +++ b/crates/iota-replay/src/fuzz.rs @@ -183,7 +183,7 @@ impl ReplayFuzzer { } } -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] #[derive(Debug, Error, Clone)] pub enum ReplayFuzzError { #[error( diff --git a/crates/iota-replay/src/replay.rs b/crates/iota-replay/src/replay.rs index 0c40b5c52ff..b012b4c2cfc 100644 --- a/crates/iota-replay/src/replay.rs +++ b/crates/iota-replay/src/replay.rs @@ -512,7 +512,7 @@ impl LocalExec { } // TODO: remove this after `futures::executor::block_on` is removed. - #[allow(clippy::disallowed_methods)] + #[expect(clippy::disallowed_methods)] pub fn download_object( &self, object_id: &ObjectID, @@ -557,7 +557,7 @@ impl LocalExec { } // TODO: remove this after `futures::executor::block_on` is removed. - #[allow(clippy::disallowed_methods)] + #[expect(clippy::disallowed_methods)] pub fn download_latest_object( &self, object_id: &ObjectID, @@ -593,7 +593,7 @@ impl LocalExec { } } - #[allow(clippy::disallowed_methods)] + #[expect(clippy::disallowed_methods)] pub fn download_object_by_upper_bound( &self, object_id: &ObjectID, diff --git a/crates/iota-replay/src/types.rs b/crates/iota-replay/src/types.rs index 05c90fffe71..43efba9777d 100644 --- a/crates/iota-replay/src/types.rs +++ b/crates/iota-replay/src/types.rs @@ -75,7 +75,6 @@ fn unspecified_chain() -> Chain { Chain::Unknown } -#[allow(clippy::large_enum_variant)] #[derive(Debug, Error, Clone)] pub enum ReplayEngineError { #[error("IotaError: {:#?}", err)] diff --git a/crates/iota-rest-api/src/reader.rs b/crates/iota-rest-api/src/reader.rs index b387f30f832..0446a499a3f 100644 --- a/crates/iota-rest-api/src/reader.rs +++ b/crates/iota-rest-api/src/reader.rs @@ -265,7 +265,7 @@ impl Iterator for CheckpointTransactionsIter { pub struct CursorInfo { pub checkpoint: CheckpointSequenceNumber, pub timestamp_ms: u64, - #[allow(unused)] + #[expect(unused)] pub index: u64, // None if there are no more transactions in the store diff --git a/crates/iota-rosetta/resources/rosetta_cli.json b/crates/iota-rosetta/resources/rosetta_cli.json index 142f39a68e9..9c65a1d32d3 100644 --- a/crates/iota-rosetta/resources/rosetta_cli.json +++ b/crates/iota-rosetta/resources/rosetta_cli.json @@ -34,7 +34,7 @@ "log_balance_changes": false, "log_reconciliations": false, "ignore_reconciliation_error": false, - "historical_balance_disabled": false, + "historical_balance_disabled": true, "exempt_accounts": "", "bootstrap_balances": "", "interesting_accounts": "", @@ -55,4 +55,4 @@ } }, "perf": null -} \ No newline at end of file +} diff --git a/crates/iota-rosetta/src/errors.rs b/crates/iota-rosetta/src/errors.rs index 8cda43d91b5..854be4f1967 100644 --- a/crates/iota-rosetta/src/errors.rs +++ b/crates/iota-rosetta/src/errors.rs @@ -29,7 +29,6 @@ use crate::types::{BlockHash, IotaEnv, OperationType, PublicKey}; derive(Display, EnumIter), strum(serialize_all = "kebab-case") )] -#[allow(clippy::enum_variant_names)] pub enum Error { #[error("Unsupported blockchain: {0}")] UnsupportedBlockchain(String), diff --git a/crates/iota-rosetta/src/types.rs b/crates/iota-rosetta/src/types.rs index 8f84205fa94..eadf326efdd 100644 --- a/crates/iota-rosetta/src/types.rs +++ b/crates/iota-rosetta/src/types.rs @@ -753,7 +753,6 @@ pub struct BalanceExemption { #[derive(Serialize)] #[serde(rename_all = "snake_case")] -#[allow(dead_code)] pub enum ExemptionType { GreaterOrEqual, LessOrEqual, @@ -762,7 +761,6 @@ pub enum ExemptionType { #[derive(Serialize)] #[serde(rename_all = "snake_case")] -#[allow(clippy::enum_variant_names, dead_code)] pub enum Case { UpperCase, LowerCase, @@ -799,7 +797,6 @@ pub struct RelatedTransaction { #[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "lowercase")] -#[allow(dead_code)] pub enum Direction { Forward, Backward, diff --git a/crates/iota-rosetta/src/unit_tests/balance_changing_tx_tests.rs b/crates/iota-rosetta/src/unit_tests/balance_changing_tx_tests.rs index f6e3f1904f5..88c4cb16308 100644 --- a/crates/iota-rosetta/src/unit_tests/balance_changing_tx_tests.rs +++ b/crates/iota-rosetta/src/unit_tests/balance_changing_tx_tests.rs @@ -139,98 +139,102 @@ async fn test_transfer_object() { .await; } -#[tokio::test] -async fn test_publish_and_move_call() { - let network = TestClusterBuilder::new().build().await; - let client = network.wallet.get_client().await.unwrap(); - let keystore = network.wallet.config().keystore(); - let rgp = network.get_reference_gas_price().await; - - // Test publish - let addresses = network.get_addresses(); - let sender = get_random_address(&addresses, vec![]); - let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - path.extend(["..", "..", "examples", "move", "coin"]); - let compiled_package = BuildConfig::new_for_testing().build(&path).unwrap(); - let compiled_modules_bytes = - compiled_package.get_package_bytes(/* with_unpublished_deps */ false); - let dependencies = compiled_package.get_dependency_storage_package_ids(); +mod move_tests { + use super::*; + + #[tokio::test] + async fn test_publish_and_move_call() { + let network = TestClusterBuilder::new().build().await; + let client = network.wallet.get_client().await.unwrap(); + let keystore = network.wallet.config().keystore(); + let rgp = network.get_reference_gas_price().await; + + // Test publish + let addresses = network.get_addresses(); + let sender = get_random_address(&addresses, vec![]); + let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + path.extend(["..", "..", "examples", "move", "coin"]); + let compiled_package = BuildConfig::new_for_testing().build(&path).unwrap(); + let compiled_modules_bytes = + compiled_package.get_package_bytes(/* with_unpublished_deps */ false); + let dependencies = compiled_package.get_dependency_storage_package_ids(); + + let pt = { + let mut builder = ProgrammableTransactionBuilder::new(); + builder.publish_immutable(compiled_modules_bytes, dependencies); + builder.finish() + }; + let response = test_transaction( + &client, + keystore, + vec![], + sender, + pt, + vec![], + rgp * TEST_ONLY_GAS_UNIT_FOR_HEAVY_COMPUTATION_STORAGE, + rgp, + false, + ) + .await; + let object_changes = response.object_changes.unwrap(); - let pt = { - let mut builder = ProgrammableTransactionBuilder::new(); - builder.publish_immutable(compiled_modules_bytes, dependencies); - builder.finish() - }; - let response = test_transaction( - &client, - keystore, - vec![], - sender, - pt, - vec![], - rgp * TEST_ONLY_GAS_UNIT_FOR_HEAVY_COMPUTATION_STORAGE, - rgp, - false, - ) - .await; - let object_changes = response.object_changes.unwrap(); + // Test move call (reuse published module from above test) + let package = object_changes + .iter() + .find_map(|change| { + if let ObjectChange::Published { package_id, .. } = change { + Some(package_id) + } else { + None + } + }) + .unwrap(); - // Test move call (reuse published module from above test) - let package = object_changes - .iter() - .find_map(|change| { - if let ObjectChange::Published { package_id, .. } = change { - Some(package_id) - } else { - None + let treasury = find_module_object(&object_changes, |type_| { + if type_.name.as_str() != "TreasuryCap" { + return false; } - }) - .unwrap(); - let treasury = find_module_object(&object_changes, |type_| { - if type_.name.as_str() != "TreasuryCap" { - return false; - } + let Some(TypeTag::Struct(otw)) = type_.type_params.first() else { + return false; + }; - let Some(TypeTag::Struct(otw)) = type_.type_params.first() else { - return false; + otw.name.as_str() == "MY_COIN" + }); + + let treasury = treasury.clone().reference.to_object_ref(); + let recipient = *addresses.choose(&mut OsRng).unwrap(); + let pt = { + let mut builder = ProgrammableTransactionBuilder::new(); + builder + .move_call( + *package, + Identifier::from_str("my_coin").unwrap(), + Identifier::from_str("mint").unwrap(), + vec![], + vec![ + CallArg::Object(ObjectArg::ImmOrOwnedObject(treasury)), + CallArg::Pure(bcs::to_bytes(&10000u64).unwrap()), + CallArg::Pure(bcs::to_bytes(&recipient).unwrap()), + ], + ) + .unwrap(); + builder.finish() }; - otw.name.as_str() == "MY_COIN" - }); - - let treasury = treasury.clone().reference.to_object_ref(); - let recipient = *addresses.choose(&mut OsRng).unwrap(); - let pt = { - let mut builder = ProgrammableTransactionBuilder::new(); - builder - .move_call( - *package, - Identifier::from_str("my_coin").unwrap(), - Identifier::from_str("mint").unwrap(), - vec![], - vec![ - CallArg::Object(ObjectArg::ImmOrOwnedObject(treasury)), - CallArg::Pure(bcs::to_bytes(&10000u64).unwrap()), - CallArg::Pure(bcs::to_bytes(&recipient).unwrap()), - ], - ) - .unwrap(); - builder.finish() - }; - - test_transaction( - &client, - keystore, - vec![], - sender, - pt, - vec![], - rgp * TEST_ONLY_GAS_UNIT_FOR_GENERIC, - rgp, - false, - ) - .await; + test_transaction( + &client, + keystore, + vec![], + sender, + pt, + vec![], + rgp * TEST_ONLY_GAS_UNIT_FOR_GENERIC, + rgp, + false, + ) + .await; + } } #[tokio::test] diff --git a/crates/iota-rosetta/tests/gas_budget_tests.rs b/crates/iota-rosetta/tests/gas_budget_tests.rs index 2029cfaa9ef..6c4ee97465f 100644 --- a/crates/iota-rosetta/tests/gas_budget_tests.rs +++ b/crates/iota-rosetta/tests/gas_budget_tests.rs @@ -24,13 +24,13 @@ use test_cluster::TestClusterBuilder; use crate::rosetta_client::RosettaEndpoint; -#[allow(dead_code)] +#[expect(dead_code)] mod rosetta_client; #[derive(Deserialize, Debug)] #[serde(untagged)] enum TransactionIdentifierResponseResult { - #[allow(unused)] + #[expect(unused)] Success(TransactionIdentifierResponse), Error(RosettaSubmitGasError), } diff --git a/crates/iota-rpc-loadgen/src/payload/mod.rs b/crates/iota-rpc-loadgen/src/payload/mod.rs index 64dfa96d5df..57ec8890d06 100644 --- a/crates/iota-rpc-loadgen/src/payload/mod.rs +++ b/crates/iota-rpc-loadgen/src/payload/mod.rs @@ -173,7 +173,6 @@ impl Command { } #[derive(Clone)] -#[allow(dead_code)] pub enum CommandData { DryRun(DryRun), GetCheckpoints(GetCheckpoints), diff --git a/crates/iota-sdk/examples/utils.rs b/crates/iota-sdk/examples/utils.rs index 8c6b914143b..d9de6f91187 100644 --- a/crates/iota-sdk/examples/utils.rs +++ b/crates/iota-sdk/examples/utils.rs @@ -320,7 +320,7 @@ pub async fn sign_and_execute_transaction( // this function should not be used. It is only used to make clippy happy, // and to reduce the number of allow(dead_code) annotations to just this one -#[allow(dead_code)] +#[expect(dead_code)] async fn just_for_clippy() -> Result<(), anyhow::Error> { let (client, sender, _recipient) = setup_for_write().await?; let _digest = split_coin_digest(&client, &sender).await?; diff --git a/crates/iota-source-validation-service/tests/tests.rs b/crates/iota-source-validation-service/tests/tests.rs index 75c934b2e41..c0104ccaacc 100644 --- a/crates/iota-source-validation-service/tests/tests.rs +++ b/crates/iota-source-validation-service/tests/tests.rs @@ -38,7 +38,7 @@ use tokio::sync::oneshot; const LOCALNET_PORT: u16 = 9000; const TEST_FIXTURES_DIR: &str = "tests/fixture"; -#[allow(clippy::await_holding_lock)] +#[expect(clippy::await_holding_lock)] #[tokio::test] #[ignore] async fn test_end_to_end() -> anyhow::Result<()> { diff --git a/crates/iota-swarm/src/memory/swarm.rs b/crates/iota-swarm/src/memory/swarm.rs index 0824335e0e2..11d20ab51c2 100644 --- a/crates/iota-swarm/src/memory/swarm.rs +++ b/crates/iota-swarm/src/memory/swarm.rs @@ -69,7 +69,7 @@ pub struct SwarmBuilder<R = OsRng> { } impl SwarmBuilder { - #[allow(clippy::new_without_default)] + #[expect(clippy::new_without_default)] pub fn new() -> Self { Self { rng: OsRng, diff --git a/crates/iota-tool/src/commands.rs b/crates/iota-tool/src/commands.rs index 18416b2401f..f0c8625a389 100644 --- a/crates/iota-tool/src/commands.rs +++ b/crates/iota-tool/src/commands.rs @@ -488,7 +488,6 @@ async fn check_locked_object( } impl ToolCommand { - #[allow(clippy::format_in_format_args)] pub async fn execute(self, tracing_handle: TracingHandle) -> Result<(), anyhow::Error> { match self { ToolCommand::LockedObject { diff --git a/crates/iota-tool/src/lib.rs b/crates/iota-tool/src/lib.rs index 27fbe1d2839..da8e0de6d03 100644 --- a/crates/iota-tool/src/lib.rs +++ b/crates/iota-tool/src/lib.rs @@ -148,7 +148,7 @@ where } } -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] pub struct GroupedObjectOutput { pub grouped_results: BTreeMap< Option<( @@ -221,7 +221,6 @@ impl GroupedObjectOutput { } } -#[allow(clippy::format_in_format_args)] impl std::fmt::Display for GroupedObjectOutput { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { writeln!(f, "available stake: {}", self.available_voting_power)?; diff --git a/crates/iota-transactional-test-runner/src/lib.rs b/crates/iota-transactional-test-runner/src/lib.rs index 7e0667e4889..b0527d3b9bf 100644 --- a/crates/iota-transactional-test-runner/src/lib.rs +++ b/crates/iota-transactional-test-runner/src/lib.rs @@ -56,7 +56,6 @@ pub struct ValidatorWithFullnode { pub kv_store: Arc<TransactionKeyValueStore>, } -#[allow(unused_variables)] /// TODO: better name? #[async_trait::async_trait] pub trait TransactionalAdapter: Send + Sync + ReadStore { diff --git a/crates/iota-types/src/authenticator_state.rs b/crates/iota-types/src/authenticator_state.rs index c350b756723..054af6d6d9e 100644 --- a/crates/iota-types/src/authenticator_state.rs +++ b/crates/iota-types/src/authenticator_state.rs @@ -94,11 +94,10 @@ fn jwk_ord(a: &ActiveJwk, b: &ActiveJwk) -> std::cmp::Ordering { } } -#[allow(clippy::non_canonical_partial_ord_impl)] impl std::cmp::PartialOrd for ActiveJwk { // This must match the sort order defined by jwk_lt in authenticator_state.move fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> { - Some(jwk_ord(self, other)) + Some(self.cmp(other)) } } diff --git a/crates/iota-types/src/crypto.rs b/crates/iota-types/src/crypto.rs index a78c50b3ca7..7ea6d2cdece 100644 --- a/crates/iota-types/src/crypto.rs +++ b/crates/iota-types/src/crypto.rs @@ -152,7 +152,7 @@ pub fn verify_proof_of_possession( /// * accounts to interact with Iota. /// * Currently we support eddsa and ecdsa on Iota. -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] #[derive(Debug, From, PartialEq, Eq)] pub enum IotaKeyPair { Ed25519(Ed25519KeyPair), diff --git a/crates/iota-types/src/effects/effects_v1.rs b/crates/iota-types/src/effects/effects_v1.rs index 3f3458d42b0..5b7c5848c22 100644 --- a/crates/iota-types/src/effects/effects_v1.rs +++ b/crates/iota-types/src/effects/effects_v1.rs @@ -453,7 +453,6 @@ impl TransactionEffectsV1 { .unwrap() as u32 }); - #[allow(clippy::let_and_return)] let result = Self { status, executed_epoch, diff --git a/crates/iota-types/src/effects/mod.rs b/crates/iota-types/src/effects/mod.rs index 0843ffe0d55..2cab0289a9d 100644 --- a/crates/iota-types/src/effects/mod.rs +++ b/crates/iota-types/src/effects/mod.rs @@ -54,7 +54,6 @@ pub const APPROX_SIZE_OF_OWNER: usize = 48; /// The response from processing a transaction or a certified transaction #[enum_dispatch(TransactionEffectsAPI)] #[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize)] -#[allow(clippy::large_enum_variant)] pub enum TransactionEffects { V1(TransactionEffectsV1), } diff --git a/crates/iota-types/src/error.rs b/crates/iota-types/src/error.rs index bb89bc3444d..1b5eab9e489 100644 --- a/crates/iota-types/src/error.rs +++ b/crates/iota-types/src/error.rs @@ -675,7 +675,7 @@ pub enum IotaError { } #[repr(u64)] -#[allow(non_camel_case_types)] +#[expect(non_camel_case_types)] #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)] /// Sub-status codes for the `UNKNOWN_VERIFICATION_ERROR` VM Status Code which /// provides more context TODO: add more Vm Status errors. We use @@ -686,7 +686,7 @@ pub enum VMMVerifierErrorSubStatusCode { } #[repr(u64)] -#[allow(non_camel_case_types)] +#[expect(non_camel_case_types)] #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)] /// Sub-status codes for the `MEMORY_LIMIT_EXCEEDED` VM Status Code which /// provides more context diff --git a/crates/iota-types/src/gas.rs b/crates/iota-types/src/gas.rs index 5763c16de35..b8996eae528 100644 --- a/crates/iota-types/src/gas.rs +++ b/crates/iota-types/src/gas.rs @@ -201,7 +201,7 @@ pub mod checked { self.gas_used() as i64 - self.storage_rebate as i64 } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] pub fn new_from_txn_effects<'a>( transactions: impl Iterator<Item = &'a TransactionEffects>, ) -> GasCostSummary { diff --git a/crates/iota-types/src/gas_model/gas_v1.rs b/crates/iota-types/src/gas_model/gas_v1.rs index da872086f33..f173d7f7425 100644 --- a/crates/iota-types/src/gas_model/gas_v1.rs +++ b/crates/iota-types/src/gas_model/gas_v1.rs @@ -26,7 +26,7 @@ mod checked { /// After execution a call to `GasStatus::bucketize` will round the /// computation cost to `cost` for the bucket ([`min`, `max`]) the gas /// used falls into. - #[allow(dead_code)] + #[expect(dead_code)] pub(crate) struct ComputationBucket { min: u64, max: u64, @@ -165,7 +165,6 @@ mod checked { pub new_size: u64, } - #[allow(dead_code)] #[derive(Debug)] pub struct IotaGasStatus { // GasStatus as used by the VM, that is all the VM sees diff --git a/crates/iota-types/src/gas_model/tables.rs b/crates/iota-types/src/gas_model/tables.rs index 5959704e61b..77ad4819e9b 100644 --- a/crates/iota-types/src/gas_model/tables.rs +++ b/crates/iota-types/src/gas_model/tables.rs @@ -49,7 +49,6 @@ pub static INITIAL_COST_SCHEDULE: Lazy<CostTable> = Lazy::new(initial_cost_sched /// Provide all the proper guarantees about gas metering in the Move VM. /// /// Every client must use an instance of this type to interact with the Move VM. -#[allow(dead_code)] #[derive(Debug)] pub struct GasStatus { pub gas_model_version: u64, @@ -151,7 +150,7 @@ impl GasStatus { InternalGas::new(val * Self::INTERNAL_UNIT_MULTIPLIER) } - #[allow(dead_code)] + #[expect(dead_code)] fn to_nanos(&self, val: InternalGas) -> u64 { let gas: Gas = InternalGas::to_unit_round_down(val); u64::from(gas) * self.gas_price diff --git a/crates/iota-types/src/messages_checkpoint.rs b/crates/iota-types/src/messages_checkpoint.rs index 50a9f25d252..78cdffaeba2 100644 --- a/crates/iota-types/src/messages_checkpoint.rs +++ b/crates/iota-types/src/messages_checkpoint.rs @@ -60,7 +60,7 @@ pub struct CheckpointRequest { pub certified: bool, } -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] #[derive(Clone, Debug, Serialize, Deserialize)] pub enum CheckpointSummaryResponse { Certified(CertifiedCheckpointSummary), @@ -76,7 +76,6 @@ impl CheckpointSummaryResponse { } } -#[allow(clippy::large_enum_variant)] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CheckpointResponse { pub checkpoint: Option<CheckpointSummaryResponse>, diff --git a/crates/iota-types/src/messages_consensus.rs b/crates/iota-types/src/messages_consensus.rs index 77323a54518..a87ede12052 100644 --- a/crates/iota-types/src/messages_consensus.rs +++ b/crates/iota-types/src/messages_consensus.rs @@ -217,7 +217,6 @@ impl ConsensusTransactionKind { } #[derive(Clone, PartialEq, Eq, Serialize, Deserialize)] -#[allow(clippy::large_enum_variant)] pub enum VersionedDkgMessage { V1(dkg_v1::Message<bls12381::G2Element, bls12381::G2Element>), } diff --git a/crates/iota-types/src/object.rs b/crates/iota-types/src/object.rs index 4cfe292d222..63ef7c06824 100644 --- a/crates/iota-types/src/object.rs +++ b/crates/iota-types/src/object.rs @@ -375,7 +375,6 @@ impl MoveObject { } #[derive(Eq, PartialEq, Debug, Clone, Deserialize, Serialize, Hash)] -#[allow(clippy::large_enum_variant)] pub enum Data { /// An object whose governing logic lives in a published Move module Move(MoveObject), @@ -1058,7 +1057,6 @@ pub fn generate_test_gas_objects() -> Vec<Object> { GAS_OBJECTS.with(|v| v.clone()) } -#[allow(clippy::large_enum_variant)] #[derive(Serialize, Deserialize, Debug)] #[serde(tag = "status", content = "details")] pub enum ObjectRead { @@ -1117,7 +1115,6 @@ impl Display for ObjectRead { } } -#[allow(clippy::large_enum_variant)] #[derive(Serialize, Deserialize, Debug)] #[serde(tag = "status", content = "details")] pub enum PastObjectRead { diff --git a/crates/iota-types/src/timelock/mod.rs b/crates/iota-types/src/timelock/mod.rs index ad30def1808..9fa70613509 100644 --- a/crates/iota-types/src/timelock/mod.rs +++ b/crates/iota-types/src/timelock/mod.rs @@ -3,7 +3,7 @@ pub mod label; pub mod stardust_upgrade_label; -#[allow(clippy::module_inception)] +#[expect(clippy::module_inception)] pub mod timelock; pub mod timelocked_staked_iota; pub mod timelocked_staking; diff --git a/crates/iota-types/src/unit_tests/passkey_authenticator_test.rs b/crates/iota-types/src/unit_tests/passkey_authenticator_test.rs index 5d4f451ebe6..41645f17c22 100644 --- a/crates/iota-types/src/unit_tests/passkey_authenticator_test.rs +++ b/crates/iota-types/src/unit_tests/passkey_authenticator_test.rs @@ -11,11 +11,11 @@ use fastcrypto::{ traits::ToFromBytes, }; use p256::pkcs8::DecodePublicKey; -use passkey_authenticator::{Authenticator, UserValidationMethod}; +use passkey_authenticator::{Authenticator, UserCheck, UserValidationMethod}; use passkey_client::Client; use passkey_types::{ Bytes, Passkey, - ctap2::Aaguid, + ctap2::{Aaguid, Ctap2Error}, rand::random_vec, webauthn::{ AttestationConveyancePreference, CredentialCreationOptions, CredentialRequestOptions, @@ -41,15 +41,10 @@ use crate::{ /// Helper struct to initialize passkey client. pub struct MyUserValidationMethod {} + #[async_trait::async_trait] impl UserValidationMethod for MyUserValidationMethod { - async fn check_user_presence(&self) -> bool { - true - } - - async fn check_user_verification(&self) -> bool { - true - } + type PasskeyItem = Passkey; fn is_verification_enabled(&self) -> Option<bool> { Some(true) @@ -58,6 +53,18 @@ impl UserValidationMethod for MyUserValidationMethod { fn is_presence_enabled(&self) -> bool { true } + + async fn check_user<'a>( + &self, + _credential: Option<&'a Self::PasskeyItem>, + _presence: bool, + _verification: bool, + ) -> Result<UserCheck, Ctap2Error> { + Ok(UserCheck { + presence: true, + verification: true, + }) + } } /// Response with fields from passkey authentication. diff --git a/crates/iota-util-mem-derive/lib.rs b/crates/iota-util-mem-derive/lib.rs index d2f308c2e52..83939225beb 100644 --- a/crates/iota-util-mem-derive/lib.rs +++ b/crates/iota-util-mem-derive/lib.rs @@ -76,7 +76,7 @@ fn malloc_size_of_derive(s: synstructure::Structure) -> proc_macro2::TokenStream let tokens = quote! { impl #impl_generics iota_util_mem::MallocSizeOf for #name #ty_generics #where_clause { #[inline] - #[allow(unused_variables, unused_mut, unreachable_code)] + #[expect(unused_variables, unused_mut, unreachable_code)] fn size_of(&self, ops: &mut iota_util_mem::MallocSizeOfOps) -> usize { let mut sum = 0; match *self { diff --git a/crates/iota/src/client_ptb/builder.rs b/crates/iota/src/client_ptb/builder.rs index b8678f11e26..c64514e2f48 100644 --- a/crates/iota/src/client_ptb/builder.rs +++ b/crates/iota/src/client_ptb/builder.rs @@ -1163,7 +1163,7 @@ pub(crate) fn display_did_you_mean<S: AsRef<str> + std::fmt::Display>( // This lint is disabled because it's not good and doesn't look at what you're // actually iterating over. This seems to be a common problem with this lint. // See e.g., https://github.com/rust-lang/rust-clippy/issues/6075 -#[allow(clippy::needless_range_loop)] +#[expect(clippy::needless_range_loop)] fn edit_distance(a: &str, b: &str) -> usize { let mut cache = vec![vec![0; b.len() + 1]; a.len() + 1]; diff --git a/crates/iota/src/genesis_inspector.rs b/crates/iota/src/genesis_inspector.rs index 6cba3824f43..5ebfacb50f1 100644 --- a/crates/iota/src/genesis_inspector.rs +++ b/crates/iota/src/genesis_inspector.rs @@ -27,7 +27,6 @@ const STR_IOTA_DISTRIBUTION: &str = "Iota Distribution"; const STR_OBJECTS: &str = "Objects"; const STR_VALIDATORS: &str = "Validators"; -#[allow(clippy::or_fun_call)] pub(crate) fn examine_genesis_checkpoint(genesis: UnsignedGenesis) { let system_object = genesis .iota_system_object() @@ -52,7 +51,7 @@ pub(crate) fn examine_genesis_checkpoint(genesis: UnsignedGenesis) { let mut iota_distribution = BTreeMap::new(); let entry = iota_distribution .entry("Iota System".to_string()) - .or_insert(BTreeMap::new()); + .or_insert_with(BTreeMap::new); entry.insert( "Storage Fund".to_string(), ( @@ -150,7 +149,7 @@ pub(crate) fn examine_genesis_checkpoint(genesis: UnsignedGenesis) { } } -#[allow(clippy::ptr_arg)] +#[expect(clippy::ptr_arg)] fn examine_validators( validator_options: &Vec<&str>, validator_map: &BTreeMap<&str, &IotaValidatorGenesis>, diff --git a/crates/iota/src/iota_commands.rs b/crates/iota/src/iota_commands.rs index 54cad050dae..e607b8dc183 100644 --- a/crates/iota/src/iota_commands.rs +++ b/crates/iota/src/iota_commands.rs @@ -146,7 +146,6 @@ impl IndexerFeatureArgs { } } -#[allow(clippy::large_enum_variant)] #[derive(Parser)] #[clap(rename_all = "kebab-case")] pub enum IotaCommand { diff --git a/crates/iota/src/keytool.rs b/crates/iota/src/keytool.rs index 246848e4c10..95b5c427139 100644 --- a/crates/iota/src/keytool.rs +++ b/crates/iota/src/keytool.rs @@ -59,7 +59,6 @@ use crate::key_identity::{KeyIdentity, get_identity_address_from_keystore}; #[path = "unit_tests/keytool_tests.rs"] mod keytool_tests; -#[allow(clippy::large_enum_variant)] #[derive(Subcommand)] #[clap(rename_all = "kebab-case")] pub enum KeyToolCommand { diff --git a/crates/simulacrum/src/lib.rs b/crates/simulacrum/src/lib.rs index 6a09576cc08..2165600de93 100644 --- a/crates/simulacrum/src/lib.rs +++ b/crates/simulacrum/src/lib.rs @@ -67,7 +67,7 @@ use self::{epoch_state::EpochState, store::in_mem_store::KeyStore}; pub struct Simulacrum<R = OsRng, Store: SimulatorStore = InMemoryStore> { rng: R, keystore: KeyStore, - #[allow(unused)] + #[expect(unused)] genesis: genesis::Genesis, store: Store, checkpoint_builder: MockCheckpointBuilder, @@ -83,7 +83,7 @@ pub struct Simulacrum<R = OsRng, Store: SimulatorStore = InMemoryStore> { impl Simulacrum { /// Create a new, random Simulacrum instance using an `OsRng` as the source /// of randomness. - #[allow(clippy::new_without_default)] + #[expect(clippy::new_without_default)] pub fn new() -> Self { Self::new_with_rng(OsRng) } diff --git a/crates/simulacrum/src/store/in_mem_store.rs b/crates/simulacrum/src/store/in_mem_store.rs index cd05dc3e8a4..9433000e28d 100644 --- a/crates/simulacrum/src/store/in_mem_store.rs +++ b/crates/simulacrum/src/store/in_mem_store.rs @@ -329,7 +329,6 @@ impl ObjectStore for InMemoryStore { #[derive(Debug)] pub struct KeyStore { validator_keys: BTreeMap<AuthorityName, AuthorityKeyPair>, - #[allow(unused)] account_keys: BTreeMap<IotaAddress, AccountKeyPair>, } diff --git a/crates/telemetry-subscribers/src/lib.rs b/crates/telemetry-subscribers/src/lib.rs index acebb2fb213..03ce9b0ba6c 100644 --- a/crates/telemetry-subscribers/src/lib.rs +++ b/crates/telemetry-subscribers/src/lib.rs @@ -69,9 +69,10 @@ pub struct TelemetryConfig { } #[must_use] -#[allow(dead_code)] pub struct TelemetryGuards { + #[expect(unused)] worker_guard: WorkerGuard, + #[expect(unused)] provider: Option<TracerProvider>, } diff --git a/crates/typed-store-derive/src/lib.rs b/crates/typed-store-derive/src/lib.rs index 9c61652616a..e1997e40824 100644 --- a/crates/typed-store-derive/src/lib.rs +++ b/crates/typed-store-derive/src/lib.rs @@ -380,7 +380,7 @@ pub fn derive_dbmap_utils_general(input: TokenStream) -> TokenStream { /// Only one process is allowed to do this at a time /// `global_db_options_override` apply to the whole DB /// `tables_db_options_override` apply to each table. If `None`, the attributes from `default_options_override_fn` are used if any - #[allow(unused_parens)] + #[expect(unused_parens)] pub fn open_tables_read_write( path: std::path::PathBuf, metric_conf: typed_store::rocks::MetricConf, @@ -395,7 +395,7 @@ pub fn derive_dbmap_utils_general(input: TokenStream) -> TokenStream { } } - #[allow(unused_parens)] + #[expect(unused_parens)] pub fn open_tables_read_write_with_deprecation_option( path: std::path::PathBuf, metric_conf: typed_store::rocks::MetricConf, @@ -415,7 +415,7 @@ pub fn derive_dbmap_utils_general(input: TokenStream) -> TokenStream { /// Only one process is allowed to do this at a time /// `global_db_options_override` apply to the whole DB /// `tables_db_options_override` apply to each table. If `None`, the attributes from `default_options_override_fn` are used if any - #[allow(unused_parens)] + #[expect(unused_parens)] pub fn open_tables_transactional( path: std::path::PathBuf, metric_conf: typed_store::rocks::MetricConf, @@ -794,7 +794,7 @@ pub fn derive_sallydb_general(input: TokenStream) -> TokenStream { /// Only one process is allowed to do this at a time /// `global_db_options_override` apply to the whole DB /// `tables_db_options_override` apply to each table. If `None`, the attributes from `default_options_override_fn` are used if any - #[allow(unused_parens)] + #[expect(unused_parens)] pub fn init( db_options: typed_store::sally::SallyDBOptions ) -> Self { diff --git a/crates/typed-store/src/rocks/mod.rs b/crates/typed-store/src/rocks/mod.rs index d142afddf15..3787e540cfd 100644 --- a/crates/typed-store/src/rocks/mod.rs +++ b/crates/typed-store/src/rocks/mod.rs @@ -351,7 +351,7 @@ impl RocksDB { fail_point!("delete-cf-before"); let ret = delegate_call!(self.delete_cf_opt(cf, key, writeopts)); fail_point!("delete-cf-after"); - #[allow(clippy::let_and_return)] + #[expect(clippy::let_and_return)] ret } @@ -373,7 +373,7 @@ impl RocksDB { fail_point!("put-cf-before"); let ret = delegate_call!(self.put_cf_opt(cf, key, value, writeopts)); fail_point!("put-cf-after"); - #[allow(clippy::let_and_return)] + #[expect(clippy::let_and_return)] ret } @@ -414,7 +414,7 @@ impl RocksDB { )), }; fail_point!("batch-write-after"); - #[allow(clippy::let_and_return)] + #[expect(clippy::let_and_return)] ret } @@ -2837,7 +2837,7 @@ fn is_max(v: &[u8]) -> bool { v.iter().all(|&x| x == u8::MAX) } -#[allow(clippy::assign_op_pattern)] +#[expect(clippy::assign_op_pattern)] #[test] fn test_helpers() { let v = vec![]; diff --git a/deny.toml b/deny.toml index 73541741be8..04e8c2cb6f6 100644 --- a/deny.toml +++ b/deny.toml @@ -88,6 +88,7 @@ allow = [ "BSL-1.0", "Unicode-DFS-2016", "OpenSSL", + "Unicode-3.0", # "Apache-2.0 WITH LLVM-exception", ] # The confidence threshold for detecting a license from license text. @@ -98,7 +99,7 @@ confidence-threshold = 0.8 # Allow 1 or more licenses on a per-crate basis, so that particular licenses # aren't accepted for every possible crate as with the normal allow list exceptions = [ - { allow = ["GPL-2.0"], name = "mysqlclient-src" }, + # Each entry is the crate and version constraint, and its specific allow # list diff --git a/docs/content/_snippets/info-BST-2f1.mdx b/docs/content/_snippets/info-BST-2f1.mdx new file mode 100644 index 00000000000..7c6161c2ad8 --- /dev/null +++ b/docs/content/_snippets/info-BST-2f1.mdx @@ -0,0 +1,10 @@ +:::info + +In Byzantine Fault Tolerant (BFT) `f` represents the number of faulty validators. `2f+1` represents the minimum number of validators +needed to agree on a transaction to ensure integrity and finality, even if up to `f` validators are faulty. + +For example, if `f = 1`, this means 3 validators must confirm a transaction (a supermajority) to guarantee its +integrity, +ensuring that even if one validator is faulty, the correct decision still stands. + +::: \ No newline at end of file diff --git a/docs/content/_snippets/info-high-traffic.mdx b/docs/content/_snippets/info-high-traffic.mdx new file mode 100644 index 00000000000..734ea92ab9e --- /dev/null +++ b/docs/content/_snippets/info-high-traffic.mdx @@ -0,0 +1,7 @@ +:::info + +It is suggested to use dedicated nodes/shared services rather than public endpoints for production apps with high traffic volume. + +You can either run your own Full nodes, or outsource this to a professional infrastructure provider (preferred for apps that have high traffic). + +::: \ No newline at end of file diff --git a/docs/content/_snippets/warn-ml-rpcs.mdx b/docs/content/_snippets/warn-ml-rpcs.mdx deleted file mode 100644 index d54a7bd25aa..00000000000 --- a/docs/content/_snippets/warn-ml-rpcs.mdx +++ /dev/null @@ -1,9 +0,0 @@ -:::caution - -Use dedicated nodes/shared services rather than public endpoints for production apps. The public endpoints maintained -by the IOTA Foundation are rate-limited, and support only 100 requests -per 30 seconds. Do not use public endpoints in production applications with high traffic volume. - -You can either run your own Full nodes, or outsource this to a professional infrastructure provider (preferred for apps that have high traffic). - -::: \ No newline at end of file diff --git a/docs/content/about-iota/iota-architecture/epochs.mdx b/docs/content/about-iota/iota-architecture/epochs.mdx index e543edcc4d6..bfbbb3ade6d 100644 --- a/docs/content/about-iota/iota-architecture/epochs.mdx +++ b/docs/content/about-iota/iota-architecture/epochs.mdx @@ -1,3 +1,4 @@ +import BSTInfo from '../../_snippets/info-BST-2f1.mdx'; import Quiz from '@site/src/components/Quiz'; import {questions} from '../../../site/static/json/about-iota/iota-architecture/epochs.json'; @@ -37,6 +38,8 @@ validator set and stake distribution can be altered. ### 4. Protocol Upgrade +<BSTInfo/> + If 2f+1 validators agree, the network may upgrade to a new protocol version, which includes new features, bug fixes, and updates to the Move framework libraries. diff --git a/docs/content/about-iota/iota-architecture/iota-security.mdx b/docs/content/about-iota/iota-architecture/iota-security.mdx index bb6633c8fd9..f524ccf7030 100644 --- a/docs/content/about-iota/iota-architecture/iota-security.mdx +++ b/docs/content/about-iota/iota-architecture/iota-security.mdx @@ -47,7 +47,7 @@ Move allows for shared assets. Although these shared assets are public in princi ### Certification and Finalization -When you submit a transaction in IOTA, all the validators must agree that it's valid. Once they agree, they create a certificate to confirm its validity, and this certificate must also be shared with all validators. Even if some validators don't follow the rules, the transaction can still be finalized by the majority of validators who do follow the IOTA protocol. This process uses cryptographic methods to ensure that validators who don't follow the rules can't trick the system into accepting false information and that misbehaving validators can't stop the system from processing transactions. +When you submit a transaction in IOTA, all the validators must agree that it's valid. Once they agree, they create a _certificate_ to confirm its validity, and this _certificate_ must also be shared with all validators. Even if some validators don't follow the rules, the transaction can still be finalized by the majority of validators who do follow the IOTA protocol. This process uses cryptographic methods to ensure that validators who don't follow the rules can't trick the system into accepting false information and that misbehaving validators can't stop the system from processing transactions. ### Gas and Transaction Execution diff --git a/docs/content/about-iota/iota-architecture/transaction-lifecycle.mdx b/docs/content/about-iota/iota-architecture/transaction-lifecycle.mdx index f2146ee274a..599dff115f7 100644 --- a/docs/content/about-iota/iota-architecture/transaction-lifecycle.mdx +++ b/docs/content/about-iota/iota-architecture/transaction-lifecycle.mdx @@ -18,13 +18,13 @@ import ThemedImage from '@theme/ThemedImage'; 2. **Submit to Validators**: The IOTA protocol sends the transaction to every validator. The validators validate the transaction. If valid, the validators sign it and return the signed transaction to the client. -3. **Form a Transaction Certificate**: After collecting responses from a supermajority of validators, the client can form a transaction certificate. Unlike consensus-based blockchains, IOTA validators are not burdened by needing to propagate signatures or aggregate certificates; this is the responsibility of the client or gateway. +3. **Form a Transaction Certificate**: After collecting responses from a supermajority of validators, the client can form a transaction _certificate_. Unlike consensus-based blockchains, IOTA validators are not burdened by needing to propagate signatures or aggregate _certificate_s; this is the responsibility of the client or gateway. -4. **Send the Certificate**: The client sends the assembled certificate back to all validators. The validators check its validity and acknowledge receipt. If the transaction involves only owned objects, IOTA can process and execute it immediately without waiting for consensus (**fast path consensus**). All certificates are forwarded to the IOTA DAG-based consensus protocol. +4. **Send the Certificate**: The client sends the assembled _certificate_ back to all validators. The validators check its validity and acknowledge receipt. If the transaction involves only owned objects, IOTA can process and execute it immediately without waiting for consensus (**fast path consensus**). All _certificate_s are forwarded to the IOTA DAG-based consensus protocol. -5. **Consensus and Execution**: The IOTA DAG-based consensus protocol eventually produces a total order of certificates. Validators check and execute certificates that involve shared objects. +5. **Consensus and Execution**: The IOTA DAG-based consensus protocol eventually produces a total order of _certificate_s. Validators check and execute _certificate_s that involve shared objects. -6. **Effect Certificate**: Clients can gather responses from a supermajority of validators, assemble them into an effect certificate, and use it as proof that the transaction is settled. +6. **Effect Certificate**: Clients can gather responses from a supermajority of validators, assemble them into an effect _certificate_, and use it as proof that the transaction is settled. 7. **Checkpoints and Reconfiguration**: IOTA forms checkpoints for every consensus commit, which are also used to drive the reconfiguration protocol. @@ -42,13 +42,13 @@ Your wallet app sends the signed transaction to a full node, which then broadcas ### Transaction Certification -Validators receive the transaction from the full node. They check if it's valid and lock the involved objects to prevent double-spending. After validation, they send their signature back to the full node. When the full node collects enough validator signatures (a quorum), it creates a transaction certificate, which includes the transaction and the validator signatures. +Validators receive the transaction from the full node. They check if it's valid and lock the involved objects to prevent double-spending. After validation, they send their signature back to the full node. When the full node collects enough validator signatures (a quorum), it creates a transaction _certificate_, which includes the transaction and the validator signatures. ### Transaction Finalization -The full node broadcasts this transaction certificate to all validators. Validators verify the certificate, execute the transaction, and unlock the previously locked objects. They then sign the transaction effects (a detailed list of changes) and return these signed effects to the full node. The full node verifies these effects and, once it has enough signatures, forms an effects certificate. +The full node broadcasts this transaction _certificate_ to all validators. Validators verify the _certificate_, execute the transaction, and unlock the previously locked objects. They then sign the transaction effects (a detailed list of changes) and return these signed effects to the full node. The full node verifies these effects and, once it has enough signatures, forms an effects _certificate_. -Your wallet app receives this effects certificate, which you can show to the coffee shop to prove that the transaction is complete and irreversible. +Your wallet app receives this effects _certificate_, which you can show to the coffee shop to prove that the transaction is complete and irreversible. ## Transaction Life Cycle @@ -67,13 +67,13 @@ After submission to a full node, the certification process begins. The full node If these checks pass, the validator locks the input objects to the transaction, preventing double-spending, and proceeds to sign the transaction and returns the signature to the node. The node needs signatures from a majority of validators to certify the transaction. -The full node collects these signatures in parallel to speed up the process. Once it has enough signatures (a quorum), the transaction is certified, forming a **transaction certificate**. +The full node collects these signatures in parallel to speed up the process. Once it has enough signatures (a quorum), the transaction is certified, forming a **transaction _certificate_**. Even if some validators are dishonest, the principle of "quorum intersection" ensures that as long as most validators are honest, double-spending is prevented. An honest validator will not sign two transactions that try to use the same object at the same time. ### Execution -Certified transactions are then sent to validators for **execution**. Validators verify the certificate signatures to ensure the transaction is valid and not attempting to double-spend. +Certified transactions are then sent to validators for **execution**. Validators verify the _certificate_ signatures to ensure the transaction is valid and not attempting to double-spend. Depending on whether the transaction uses shared input objects, the validators will either: @@ -90,9 +90,9 @@ After the transaction is executed, the validator signs off on the effects of the * The amount of gas spent. * The transaction's execution status (either success or an error code). -The full node then gathers these signed effects from a majority of validators, forming an **effects certificate**, which guarantees that the transaction is final. +The full node then gathers these signed effects from a majority of validators, forming an **effects _certificate_**, which guarantees that the transaction is final. -Once you or the full node sees an effects certificate, you can be sure that the transaction will be included in a [checkpoint](#checkpoints), meaning it can't be undone. This certificate can also serve as proof that you sent the NFT to your friend since it can't be faked due to the validator signatures. +Once you or the full node sees an effects _certificate_, you can be sure that the transaction will be included in a [checkpoint](#checkpoints), meaning it can't be undone. This _certificate_ can also serve as proof that you sent the NFT to your friend since it can't be faked due to the validator signatures. ### Checkpoints @@ -109,25 +109,25 @@ Transaction finality means that once a transaction is executed, it can't be reve ### Settlement Finality -After executing a transaction, validators send back the signed effects to the network. When a majority of validators have executed the transaction and the [effects certificate](#effects-certificate) exists, the transaction's effects (like transfers or newly created objects) are implemented. This allows the network to process new transactions that depend on these effects. +After executing a transaction, validators send back the signed effects to the network. When a majority of validators have executed the transaction and the [effects _certificate_](#effects-certificate) exists, the transaction's effects (like transfers or newly created objects) are implemented. This allows the network to process new transactions that depend on these effects. Settlement finality depends on [object ownership](../../developer/iota-101/objects/object-ownership/object-ownership.mdx). For transactions involving only owned objects, this happens quickly, in under half a second. For those involving shared objects, it happens shortly after consensus, which can take a few seconds. At this point, the transaction reaches settlement finality, meaning the network can now process more transactions using the same input objects. ### Checkpoint Processing -The [real-world example](#real-world-example) at the beginning of the article demonstrates a finalized transaction through an effects certificate. However, if a full node goes offline before collecting all signatures, your wallet app will try another full node. If your phone dies during this process, the coffee shop will still see your payment on its terminal connected to a different full node, thanks to checkpoints. +The [real-world example](#real-world-example) at the beginning of the article demonstrates a finalized transaction through an effects _certificate_. However, if a full node goes offline before collecting all signatures, your wallet app will try another full node. If your phone dies during this process, the coffee shop will still see your payment on its terminal connected to a different full node, thanks to checkpoints. A checkpoint contains a list of transactions and is signed by a majority of validators, making it final. If a full node learns about your transaction through checkpoints, it ensures that the transaction will be finalized. ### Local Execution on a Full Node -Before sending back an effects certificate, a full node might execute the transaction locally if the request asks it to. This is more important for high-frequency applications like gaming but can add unnecessary delay for simple transactions like buying coffee. The `WaitForLocalExecution` parameter requests this local execution, while you can use the `WaitForEffects` parameter for a quicker response. +Before sending back an effects _certificate_, a full node might execute the transaction locally if the request asks it to. This is more important for high-frequency applications like gaming but can add unnecessary delay for simple transactions like buying coffee. The `WaitForLocalExecution` parameter requests this local execution, while you can use the `WaitForEffects` parameter for a quicker response. Additionally, when any app builds a transaction, the full node is usually in charge of choosing the object that is used to pay for the transaction's gas. Since gas is paid in IOTA, which is a shared object, if the full node is not up-to-date, it could potentially lead to an invalid transaction or even a [client equivocation](../../developer/iota-101/transactions/sponsored-transactions/about-sponsored-transactions.mdx#risk-considerations). You can avoid this unwanted behavior by sending the `WaitForLocalExecution` parameter. ### Epoch Change -Every ~24 hours, the IOTA network undergoes an epoch change, during which staking rewards are calculated and distributed, validator metadata is updated, and other network processes occur. User transactions are paused during this time. If your transaction is submitted at the epoch boundary, it may need resubmission in the new epoch. Transactions that were certified but not yet finalized will be reverted. Any transaction certificate from the previous epoch will become invalid, so the full node will resubmit the invalid transactions. +Every ~24 hours, the IOTA network undergoes an epoch change, during which staking rewards are calculated and distributed, validator metadata is updated, and other network processes occur. User transactions are paused during this time. If your transaction is submitted at the epoch boundary, it may need resubmission in the new epoch. Transactions that were certified but not yet finalized will be reverted. Any transaction _certificate_ from the previous epoch will become invalid, so the full node will resubmit the invalid transactions. ### Verifying Finality diff --git a/docs/content/about-iota/iota-wallet/how-to/integrate-ledger.mdx b/docs/content/about-iota/iota-wallet/how-to/integrate-ledger.mdx index 093140c0f72..735c8d02253 100644 --- a/docs/content/about-iota/iota-wallet/how-to/integrate-ledger.mdx +++ b/docs/content/about-iota/iota-wallet/how-to/integrate-ledger.mdx @@ -17,7 +17,10 @@ Before connecting your Ledger device to IOTA Wallet, ensure the following: ## Install the IOTA Rebased App on Your Ledger Device -To use IOTA Wallet with Ledger, install the IOTA Rebased app on your device through Ledger Live. +To use IOTA Wallet with Ledger, install the IOTA Rebased app on your device through Ledger Live or manually. +Ledger Live is preferred, but you need to install the app manually for deprecated devices like the Ledger Nano S. + +### Ledger Live (preferred) 1. Unlock your Ledger device. 2. Open Ledger Live and navigate to **My Ledger** in the left panel. @@ -26,6 +29,25 @@ To use IOTA Wallet with Ledger, install the IOTA Rebased app on your device thro 5. Click **Install** to download the IOTA Rebased app to your device. 6. Your device will show the installation progress. +### Manually (for deprecated devices such as Ledger Nano S) + +:::warning + +Make sure you have enough space left for an additional app on your device. + +::: + +1. Go to the latest release on https://github.com/iotaledger/ledger-app-iota/releases. +2. Download the archive matching your device, e.g. `nanos.tar.gz` for the Ledger Nano S. +3. Verify that the checksum (`shasum -a 256 nanos.tar.gz`) matches the one from the release. +4. Extract the archive `tar -xvzf nanos.tar.gz`. +5. Move to the app folder `cd nanos`. +6. Follow the steps on https://github.com/LedgerHQ/ledgerctl to install `ledgerctl`. +7. Install the app on your device `ledgerctl install -f app_nanos.json`. +8. Accept `Allow unsafe manager` on your device. +9. Accept `Perform installation` on your device. +10. Enter your pin on your device. + ## Import Accounts from Your Ledger Device To import accounts from your Ledger into IOTA Wallet: diff --git a/docs/content/developer/getting-started/getting-started.mdx b/docs/content/developer/getting-started/getting-started.mdx index 76a0fa944ef..ae2bdb4fff8 100644 --- a/docs/content/developer/getting-started/getting-started.mdx +++ b/docs/content/developer/getting-started/getting-started.mdx @@ -10,7 +10,7 @@ tags: # Getting Started IOTA Rebased introduces layer 1 Move smart contracts to the IOTA ecosystem. This valuable addition enhances IOTA by -offering programmability on layer1, complementing [IOTA EVM](../../about-iota/about-iota.mdx#iota-evm-and-shimmer-evm) on layer 2. +offering programmability on layer 1, complementing [IOTA EVM](../../about-iota/about-iota.mdx#iota-evm-and-shimmer-evm) on layer 2. The guides in this section will guide you as you start your IOTA Rebased journey. We recommend that you start by [setting up your development environment](iota-environment.mdx), and then move on diff --git a/docs/content/developer/getting-started/local-network.mdx b/docs/content/developer/getting-started/local-network.mdx index ff670dacf55..8451b219379 100644 --- a/docs/content/developer/getting-started/local-network.mdx +++ b/docs/content/developer/getting-started/local-network.mdx @@ -274,5 +274,4 @@ pnpm add <PATH_TO_YOUR_REPO>/sdk/typescript and the locally compiled version of `@iota/iota-sdk` package will be installed for your application. - <Quiz questions={questions} /> diff --git a/docs/content/developer/iota-101/using-events.mdx b/docs/content/developer/iota-101/using-events.mdx index e287fd30612..4505faeb763 100644 --- a/docs/content/developer/iota-101/using-events.mdx +++ b/docs/content/developer/iota-101/using-events.mdx @@ -28,13 +28,13 @@ An event object in IOTA consists of the following attributes: - `bcs`: Binary canonical serialization value. - `timestampMs`: Unix epoch timestamp in milliseconds. -## Exploring Available Events +### Exploring Available Events -To subscribe to on-chain events, you first need to identify which events are available. While you can easily track events emitted by your own code, discovering events from external packages can be more challenging. The IOTA RPC provides the [`queryEvents`](/iota-api-ref#iotax_queryevents) method, which allows you to query on-chain packages and obtain a list of events you can subscribe to. +To [subscribe to on-chain events](#subscribing-to-events), you first need to identify which events are available. While you can easily track events emitted by your own code, discovering events from external packages can be more challenging. The IOTA RPC provides the [`queryEvents`](/iota-api-ref#iotax_queryevents) method, which allows you to query on-chain packages and obtain a list of events you can subscribe to. -## Applying Event Filters +### Applying Event Filters -When targeting specific events for querying or subscribing, you can use filters to refine your results. Although the filtering options for querying and subscribing are similar, there are notable differences to be aware of. +When targeting specific events for [querying](#querying-events) or [subscribing](#subscribing-to-events), you can use [filters](#filtering-events) to refine your results. Although the filtering options for querying and subscribing are similar, there are notable differences to be aware of. ## Emitting Events in Move @@ -49,65 +49,117 @@ use iota::event; Then, within your function, you can emit an event using the [`emit`](../../references/framework/iota-framework/event.mdx#function-emit) function. For example: -```move -/// Take coin from `DonutShop` and transfer it to tx sender. -/// Requires authorization with `ShopOwnerCap`. -public fun collect_profits( _: &ShopOwnerCap, shop: &mut DonutShop, ctx: &mut TxContext ) { - let amount = balance::value(&shop.balance); - let profits = coin::take(&mut shop.balance, amount, ctx); - // simply create new type instance and emit it. - event::emit(ProfitsCollected { amount }); - transfer::public_transfer(profits, tx_context::sender(ctx)); -} +```move file=<rootDir>/examples/trading/contracts/escrow/sources/lock.move#L42-L63 ``` -## Subscribing to Events +## Querying Events + +<Tabs> + +<TabItem value="RPC" label="IOTA RPC"> +The IOTA RPC provides a [`queryEvents`](/iota-api-ref#iotax_queryevents) method to query on-chain packages and return available events. As an example, the following `curl` command queries the Deepbook package on Mainnet for a specific type of event: + +```sh +curl -X POST https://api.testnet.iota.cafe:443 \ +-H "Content-Type: application/json" \ +-d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "iotax_queryEvents", + "params": [ + { + "MoveModule": { + "package": "0x0000000000000000000000000000000000000000000000000000000000000002", + "module": "display", + "type": "0x0000…0002::display::Display<0xba68…286b::testnet_nft::TestnetNFT>" + } + }, + null, + 3, + false + ] +}' +``` + +The TypeScript SDK provides a wrapper for the `iotax_queryEvents` method: +[`client.queryEvents`](../../ts-sdk/api/client/classes/IotaClient#queryevents). -To react to events emitted by Move modules, you need to subscribe to them. -IOTA full nodes support event subscriptions via JSON-RPC notifications over WebSocket. You can interact with the [RPC directly][iotax_subscribeEvent](/iota-api-ref#iotax_subscribeevent), [iotax_subscribeTransaction](/iota-api-ref#iotax_subscribetransaction) or use an SDK like the [IOTA TypeScript SDK](../../ts-sdk/typescript/index.mdx). +</TabItem> +<TabItem value="rs" label="Rust"> -The following excerpt from one of the examples uses the TypeScript SDK to create an asynchronous subscription to the filter identified in the filter. +You can use the following as an example on how to query for events using the `query_events` function. You should update +the `PACKAGE_ID_CONST` with a package of your choice. -```move -let unsubscribe = await provider.subscribeEvent({ - filter: { <PACKAGE_ID> }, - onMessage: (event) => { - console.log("subscribeEvent", JSON.stringify(event, null, 2)) +```rust +use iota_sdk::{rpc_types::EventFilter, types::Identifier, IotaClientBuilder}; + +const PACKAGE_ID_CONST: &str = ""; + +#[tokio::main] +async fn main() -> Result<(), anyhow::Error> { + let iota_testnet = IotaClientBuilder::default() + .build("https://api.testnet.iota.cafe:443") + .await?; + + let events = iota_testnet + .event_api() + .query_events( + EventFilter::MoveModule { + package: PACKAGE_ID_CONST.parse()?, + module: Identifier::new("dev_trophy")?, + }, + None, + None, + false, + ) + .await?; + + for event in events.data { + println!("Event: {:?}", event.parsed_json); } -}); + + Ok(()) +} ``` +</TabItem> +<TabItem value="graphql" label="GraphQL"> -Move smart contracts can call other smart contracts that emit events. For example, `0x107a::nft` calls the `0x2::display::new_with_fields` smart contract and emits a `0x2::display::DisplayCreated` event. Note that using package and transaction module to query for `0x2::display` misses the following event even though it is actually an event the `0x2` package emits. The current workaround for this issue is to know all the `packageId`s you care about and search those in the `queryEvent` call. +You can use GraphQL to query events instead of JSON RPC. The following example queries are in the +[`iota-graphql-rpc` crate](https://github.com/iotaledger/iota/tree/develop/crates/iota-graphql-rpc/examples/event_connection) in the IOTA repo. -```json -{ - "id": { - "txDigest": "DrZmtQDDCUKooLzFCi29VhUB4w6AT8phCsT9d62BAf8g", - "eventSeq": "0" - }, - "packageId": "0x000000000000000000000000000000000000000000000000000000000000107a", - "transactionModule": "nft", - "sender": "0x0000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2::display::DisplayCreated<0x107a::nft::Nft>", - "parsedJson": { - "id": "0xa12d72c159d57d4c7f540b2b9e985327628d856b20c1d6cdfd3028a2a605abfe" - }, - "bcs": "CFbAeqXAwwkyTxUD36FtzTGEcMGrVj4zgcTR1G7AaRjb", - "timestampMs": "1521456213521" -} +#### Event Connection + +```graphql file=<rootDir>/crates/iota-graphql-rpc/examples/event_connection/event_connection.graphql +``` + +#### Filter Events By Sender + +```graphql file=<rootDir>/crates/iota-graphql-rpc/examples/event_connection/filter_by_sender.graphql ``` -## Examples +#### Filter Events By Emitting Package and Type -### Subscribe to Event +```graphql file=<rootDir>/crates/iota-graphql-rpc/examples/event_connection/filter_by_sender.graphql +``` + +:::tip + +The [TypeScript SDK](../../ts-sdk/api/graphql/classes/IotaGraphQLClient) provides functionality to +interact with the IOTA GraphQL service. + +::: + +</TabItem> +</Tabs> + + +## Subscribing to Events This example leverages the IOTA TypeScript SDK to subscribe to events the package with ID `<PACKAGE_ID>` emits. Each time the event fires, the code displays the response to the console. <Tabs> <TabItem value="rs" label="Rust"> -### Rust - See [Rust SDK](../../references/rust-sdk.mdx). ```rust @@ -132,8 +184,6 @@ async fn main() -> Result<()> { </TabItem> <TabItem value="ts" label="TypeScript"> -### TypeScript - To create the event subscription, you can use a basic Node.js app. You need the [IOTA TypeScript SDK](../../ts-sdk/typescript/index.mdx), so install the module using `npm install @iota/iota-sdk` at the root of your project. In your TypeScript code, import `JsonRpcProvider` and a connection from the library. ```ts @@ -199,9 +249,19 @@ subscribeEvent { </TabItem> </Tabs> +## Monitoring Events + +Firing events is not very useful in a vacuum. You also need the ability to respond to those events. +There are two methods from which to choose when you need to monitor on-chain events: +- Incorporate a [custom indexer](../advanced/custom-indexer.mdx) to take advantage of IOTA's micro-data ingestion framework. +- Poll the IOTA network on a schedule to query events. + +Using a custom indexer provides a near-real time monitoring of events, so is most useful when your project requires immediate reaction to the firing of events. Polling the network is most useful when the events you're monitoring don't fire often or the need to act on those events are not immediate. The following section provides a polling example. + + ## Filtering Events -You can filter events when querying or subscribing to receive only the events you are interested in. +You can filter events when [querying](#querying-events) or [subscribing](#subscribing-to-events) to receive only the events you are interested in. :::info diff --git a/docs/content/operator/genesis.mdx b/docs/content/operator/genesis.mdx index cd5d30a6146..c2f87446c06 100644 --- a/docs/content/operator/genesis.mdx +++ b/docs/content/operator/genesis.mdx @@ -2,7 +2,7 @@ title: Genesis --- -Genesis is the initial state of the IOTA blockchain. To launch a network, the initial committee of validators collaborate by providing their validator information (public keys, network addresses, and so on) to a shared workspace. After all of the initial validators have contributed their information, IOTA generates the initial, unsigned genesis checkpoint (checkpoint with sequence number 0) and each validator provides their signature. IOTA aggregates these signatures to form a certificate on the genesis checkpoint. IOTA bundles this checkpoint, as well as the initial objects, together into a single genesis.blob file that is used to initialize the state when running the `iota-node` binary for both validators and Full nodes. +Genesis is the initial state of the IOTA blockchain. To launch a network, the initial committee of validators collaborate by providing their validator information (public keys, network addresses, and so on) to a shared workspace. After all of the initial validators have contributed their information, IOTA generates the initial, unsigned genesis checkpoint (checkpoint with sequence number 0) and each validator provides their signature. IOTA aggregates these signatures to form a _certificate_ on the genesis checkpoint. IOTA bundles this checkpoint, as well as the initial objects, together into a single genesis.blob file that is used to initialize the state when running the `iota-node` binary for both validators and Full nodes. ## Genesis blob locations diff --git a/docs/content/operator/iota-full-node/overview.mdx b/docs/content/operator/iota-full-node/overview.mdx index 00f91922651..cdd63215d70 100644 --- a/docs/content/operator/iota-full-node/overview.mdx +++ b/docs/content/operator/iota-full-node/overview.mdx @@ -3,6 +3,7 @@ title: Overview description: Operate an IOTA Full Node to validate blockchain activities, like transactions, checkpoints, and epoch changes. --- import Quiz from '@site/src/components/Quiz'; +import BSTInfo from '../../_snippets/info-BST-2f1.mdx'; import questions from '/json/node-operators/iota-full-node/overview.json'; import WarningAdvanced from './../../_snippets/warning-advanced-instructions-node-setup.mdx' @@ -24,10 +25,12 @@ IOTA Full nodes: IOTA Full nodes sync with validators to receive new transactions on the network. -A transaction requires a few round trips to 2f+1 validators to form a transaction certificate (TxCert). +A transaction requires a few round trips to 2f+1 validators to form a transaction _certificate_ (TxCert). This synchronization process includes: +<BSTInfo/> + 1. Following 2f+1 validators and listening for newly committed transactions. 1. Making sure that 2f+1 validators recognize the transaction and that it reaches finality. 1. Executing the transaction locally and updating the local DB. diff --git a/docs/content/operator/observability.mdx b/docs/content/operator/observability.mdx index 03676ee1447..6467539eed0 100644 --- a/docs/content/operator/observability.mdx +++ b/docs/content/operator/observability.mdx @@ -99,7 +99,7 @@ To generate detailed span start and end logs, define the `IOTA_JSON_SPAN_LOGS` e You can send this output to a tool or service for indexing, alerts, aggregation, and analysis. -The following example output shows certificate processing in the authority with span logging. Note the `START` and `END` annotations, and notice how `DB_UPDATE_STATE` which is nested is embedded within `PROCESS_CERT`. Also notice `elapsed_milliseconds`, which logs the duration of each span. +The following example output shows _certificate_ processing in the authority with span logging. Note the `START` and `END` annotations, and notice how `DB_UPDATE_STATE` which is nested is embedded within `PROCESS_CERT`. Also notice `elapsed_milliseconds`, which logs the duration of each span. ```bash {"v":0,"name":"iota","msg":"[PROCESS_CERT - START]","level":20,"hostname":"Evan-MLbook.lan","pid":51425,"time":"2022-03-08T22:48:11.241421Z","target":"iota_core::authority_server","line":67,"file":"iota_core/src/authority_server.rs","tx_digest":"t#d1385064287c2ad67e4019dd118d487a39ca91a40e0fd8e678dbc32e112a1493"} diff --git a/docs/content/operator/validator-committee.mdx b/docs/content/operator/validator-committee.mdx index 598939eeffb..85920009733 100644 --- a/docs/content/operator/validator-committee.mdx +++ b/docs/content/operator/validator-committee.mdx @@ -1,6 +1,6 @@ --- title: Validator Committee -description: IOTA has a committee of validators to verify on-chain transactions. Epochs, quorums, transactions, certificates, and consensus are touch points for this committee. +description: IOTA has a committee of validators to verify on-chain transactions. Epochs, quorums, transactions, _certificate_s, and consensus are touch points for this committee. --- import Quiz from '@site/src/components/Quiz'; @@ -20,38 +20,38 @@ Operation of the IOTA network is temporally partitioned into non-overlapping, ap A quorum is a set of validators whose combined voting power is greater than two-thirds (>2/3) of the total during a particular epoch. For example, in an IOTA instance operated by four validators that all have the same voting power, any group containing three validators is a quorum. -The quorum size of >2/3 ensures Byzantine fault tolerance (BFT). A validator commits a transaction (durably store the transaction and update its internal state with the effects of the transaction) only if it is accompanied by cryptographic signatures from a quorum. IOTA calls the combination of the transaction and the quorum signatures on its bytes a *certificate*. The policy of committing only certificates ensures Byzantine fault tolerance: if >2/3 of the validators faithfully follow the protocol, they are guaranteed to eventually agree on both the set of committed certificates and their effects. +The quorum size of >2/3 ensures Byzantine fault tolerance (BFT). A validator commits a transaction (durably store the transaction and update its internal state with the effects of the transaction) only if it is accompanied by cryptographic signatures from a quorum. IOTA calls the combination of the transaction and the quorum signatures on its bytes a _certificate_. The policy of committing only _certificate_s ensures Byzantine fault tolerance: if >2/3 of the validators faithfully follow the protocol, they are guaranteed to eventually agree on both the set of committed _certificate_s and their effects. ## Write requests -A validator can handle two types of write requests: transactions and certificates. At a high level, a client: +A validator can handle two types of write requests: transactions and _certificate_s. At a high level, a client: -- Communicates a transaction to a quorum of validators to collect the signatures required to form a certificate. -- Submits a certificate to a validator to commit state changes on that validator. +- Communicates a transaction to a quorum of validators to collect the signatures required to form a _certificate_. +- Submits a _certificate_ to a validator to commit state changes on that validator. ### Transactions -When a validator receives a transaction from a client, it first performs transaction validity checks (validity of the sender's signature). If the checks pass, the validator locks all owned-objects and signs the transaction bytes, then returns the signature to the client. The client repeats this process with multiple validators until it has collected signatures on its transaction from a quorum, thereby forming a certificate. +When a validator receives a transaction from a client, it first performs transaction validity checks (validity of the sender's signature). If the checks pass, the validator locks all owned-objects and signs the transaction bytes, then returns the signature to the client. The client repeats this process with multiple validators until it has collected signatures on its transaction from a quorum, thereby forming a _certificate_. -The process of collecting validator signatures on a transaction into a certificate and the process of submitting certificates can be performed in parallel. The client can simultaneously multicast transactions/certificates to an arbitrary number of validators. Alternatively, a client can outsource either or both of these tasks to a third-party service provider. This provider must be trusted for liveness (it can refuse to form a certificate), but not for safety (it cannot change the effects of the transaction, and does not need the user's secret key). +The process of collecting validator signatures on a transaction into a _certificate_ and the process of submitting _certificate_s can be performed in parallel. The client can simultaneously multicast transactions/_certificate_s to an arbitrary number of validators. Alternatively, a client can outsource either or both of these tasks to a third-party service provider. This provider must be trusted for liveness (it can refuse to form a _certificate_), but not for safety (it cannot change the effects of the transaction, and does not need the user's secret key). ### Certificates -After the client forms a certificate, it submits it to the validators, which perform certificate validity checks. These checks ensure the signers are validators in the current epoch, and the signatures are cryptographically valid. If the checks pass, the validators execute the transaction inside the certificate. Execution of a transaction either succeeds and commits all of its effects or aborts and has no effect other than debiting the transaction's gas input. Some reasons a transaction might abort include an explicit abort instruction, a runtime error such as division by zero, or exceeding the maximum gas budget. Whether it succeeds or aborts, the validator durably stores the certificate indexed by the hash of its inner transaction. +After the client forms a _certificate_, it submits it to the validators, which perform _certificate_ validity checks. These checks ensure the signers are validators in the current epoch, and the signatures are cryptographically valid. If the checks pass, the validators execute the transaction inside the _certificate_. Execution of a transaction either succeeds and commits all of its effects or aborts and has no effect other than debiting the transaction's gas input. Some reasons a transaction might abort include an explicit abort instruction, a runtime error such as division by zero, or exceeding the maximum gas budget. Whether it succeeds or aborts, the validator durably stores the _certificate_ indexed by the hash of its inner transaction. -If a client collects a quorum of signatures on the effects of the transaction, then the client has a promise of finality. This means that transaction effects persist on the shared database and are actually committed and visible to everyone by the end of the epoch. This does not mean that the latency is a full epoch, because you can use the effects certificate to convince anyone of the transactions finality, as well as to access the effects and issue new transactions. As with transactions, you can parallelize the process of sharing a certificate with validators and (if desired) outsource to a third-party service provider. +If a client collects a quorum of signatures on the effects of the transaction, then the client has a promise of finality. This means that transaction effects persist on the shared database and are actually committed and visible to everyone by the end of the epoch. This does not mean that the latency is a full epoch, because you can use the effects _certificate_ to convince anyone of the transactions finality, as well as to access the effects and issue new transactions. As with transactions, you can parallelize the process of sharing a _certificate_ with validators and (if desired) outsource to a third-party service provider. ## The role of Narwhal and Bullshark IOTA takes advantage of Narwhal and Bullshark as its mempool and consensus engines. Narwhal/Bullshark (N/B) is also implemented in IOTA so that when Byzantine agreement is required it uses a high-throughput DAG-based consensus to manage shared locks while execution on different shared objects is parallelized. -Narwhal enables the parallel ordering of transactions into batches that are collected into concurrently proposed blocks, and Bullshark defines an algorithm for executing the DAG that these blocks form. N/B combined builds a DAG of blocks, concurrently proposed, and creates an order between those blocks as a byproduct of the building of the DAG. But that order is overlaid on top of the causal order of IOTA transactions (the "payload" of Narwhal/Bullshark here), and does not substitute for it: +Narwhal enables the parallel ordering of transactions into batches that are collected into concurrently proposed blocks, and Bullshark defines an algorithm for executing the DAG that these blocks form. N/B combined builds a DAG of blocks, concurrently proposed, and creates an order between those blocks as a byproduct of the building of the DAG. But that order is overlaid on top of the _causal order_ of IOTA transactions (the "payload" of Narwhal/Bullshark here), and does not substitute for it: - N/B operates in OX, rather than XO mode (O = order, X = execute); the execution occurs after the Narwhal/Bullshark ordering. - The output of N/B is therefore a sequence of transactions, with interdependencies stored in the transaction data itself. -Consensus sequences certificates of transactions. These represent transactions that have already been presented to 2/3 of validators that checked that all their owned objects are available to be operated on and signed the transaction. Upon a certificate being sequenced, IOTA sets the lock of the shared objects at the next available version to map to the execution of that certificate. So for example if you have a shared object X at version 2, and you sequence certificate T, IOTA stores T -> [(X, 2)]. That is all you do when IOTA reaches consensus, and as a result IOTA can ingest a lot of sequenced transactions. +Consensus sequences _certificate_s of transactions. These represent transactions that have already been presented to 2/3 of validators that checked that all their owned objects are available to be operated on and signed the transaction. Upon a _certificate_ being sequenced, IOTA sets the lock of the shared objects at the next available version to map to the execution of that _certificate_. So for example if you have a shared object X at version 2, and you sequence _certificate_ T, IOTA stores T -> [(X, 2)]. That is all you do when IOTA reaches consensus, and as a result IOTA can ingest a lot of sequenced transactions. -Now, after this is done IOTA can execute all certificates that have their locks set, on one or multiple cores. Obviously, transactions for earlier versions of objects need to be processed first (causally), and that reduces the degree of concurrency. The read and write set of the transaction can be statically determined from its versioned object inputs--execution can only read/write an object that was an input to the transaction, or that was created by the transaction. +Now, after this is done IOTA can execute all _certificate_s that have their locks set, on one or multiple cores. Obviously, transactions for earlier versions of objects need to be processed first (causally), and that reduces the degree of concurrency. The read and write set of the transaction can be statically determined from its versioned object inputs--execution can only read/write an object that was an input to the transaction, or that was created by the transaction. -<Quiz questions={questions} /> \ No newline at end of file +<Quiz questions={questions} /> diff --git a/docs/content/references/iota-api.mdx b/docs/content/references/iota-api.mdx index ac1d15e9f42..01a192f4c31 100644 --- a/docs/content/references/iota-api.mdx +++ b/docs/content/references/iota-api.mdx @@ -5,7 +5,7 @@ title: IOTA RPC :::info -The IOTA RPC is upgrading from JSON-RPC to GraphQL. See [GraphQL for IOTA RPC](../developer/graphql-rpc.mdx) for more information. +Checkout our experimental [GraphQL for IOTA RPC](../developer/graphql-rpc.mdx) as an alternative option. ::: diff --git a/docs/content/references/iota-api/rpc-best-practices.mdx b/docs/content/references/iota-api/rpc-best-practices.mdx index f7da7c10835..cae50a7227b 100644 --- a/docs/content/references/iota-api/rpc-best-practices.mdx +++ b/docs/content/references/iota-api/rpc-best-practices.mdx @@ -2,11 +2,11 @@ title: RPC Best Practices --- -import WarnMlRpcs from "../../_snippets/warn-ml-rpcs.mdx"; +import HighTrafficRpcs from "../../_snippets/info-high-traffic.mdx"; This topic provides some best practices for configuring your RPC settings to ensure a reliable infrastructure for your projects and services built on IOTA. -<WarnMlRpcs /> +<HighTrafficRpcs /> ## RPC provisioning guidance diff --git a/docs/content/references/iota-compared.mdx b/docs/content/references/iota-compared.mdx index 90de98f1d04..0126c647a66 100644 --- a/docs/content/references/iota-compared.mdx +++ b/docs/content/references/iota-compared.mdx @@ -29,16 +29,16 @@ This doesn't mean that IOTA as a platform never orders transactions with respect ## A collaborative approach to transaction submission -IOTA validates transactions individually, rather than batching them in the traditional blocks. The key advantage of this approach is low latency; each successful transaction quickly obtains a certificate of finality that proves to anyone that the transaction will persists its effects on the IOTA network. +IOTA validates transactions individually, rather than batching them in the traditional blocks. The key advantage of this approach is low latency; each successful transaction quickly obtains a _certificate_ of finality that proves to anyone that the transaction will persists its effects on the IOTA network. But the process of submitting a transaction is a bit more involved. That little more work occurs on the network. (With bandwidth getting cheaper, this is less of a concern.) Whereas a usual blockchain can accept a bunch of transactions from the same author in a fire-and-forget mode, IOTA transaction submission follows these steps: 1. Sender broadcasts a transaction to all IOTA validators. 1. IOTA validators send individual votes on this transaction to the sender. 1. Each vote has a certain weight since each validator has weight based upon the rules of [Proof of Stake](https://en.wikipedia.org/wiki/Proof_of_work). -1. Sender collects a Byzantine-resistant-majority of these votes into a _certificate_ and broadcasts it to all IOTA validators. +1. Sender collects a Byzantine-resistant-majority of these votes into a __certificate__ and broadcasts it to all IOTA validators. 1. The validators execute the transaction and sign the results. When the client receives a Byzantine-resistant-majority of the results _finality_ is reached, ie., assurance the transaction will not be dropped (revoked). -1. Optionally, the sender assembles the votes to a certificate detailing the effects of the transaction. +1. Optionally, the sender assembles the votes to a _certificate_ detailing the effects of the transaction. While those steps demand more of the sender, performing them efficiently can still yield a cryptographic proof of finality with minimum latency. Aside from crafting the original transaction itself, the session management for a transaction does not require access to any private keys and can be delegated to a third party. @@ -49,7 +49,7 @@ Because IOTA focuses on managing specific objects rather than a single aggregate - Every object in IOTA has a unique version number. - Every new version is created from a transaction that may involve several dependencies, themselves versioned objects. -As a consequence, a IOTA Validator can exhibit a causal history of an object, showing its history since genesis. IOTA explicitly makes the bet that in many cases, the ordering of that causal history with the causal history of another object is irrelevant; and in the few cases where this information is relevant, IOTA makes this relationship explicit in the data. +As a consequence, a IOTA Validator can exhibit a _causal history_ of an object, showing its history since genesis. IOTA explicitly makes the bet that in many cases, the ordering of that _causal history_ with the _causal history_ of another object is irrelevant; and in the few cases where this information is relevant, IOTA makes this relationship explicit in the data. ## Causal order vs. total order diff --git a/docs/content/references/iota-glossary.mdx b/docs/content/references/iota-glossary.mdx index d6b592a54d5..9593a486845 100644 --- a/docs/content/references/iota-glossary.mdx +++ b/docs/content/references/iota-glossary.mdx @@ -2,96 +2,8 @@ title: Glossary slug: /iota-glossary --- +import Glossary from '@site/src/components/Glossary'; Find terms used in IOTA defined below. -### Causal history - -Causal history is the relationship between an object in IOTA and its direct predecessors and successors. This history is essential to the causal order IOTA uses to process transactions. In contrast, other blockchains read the entire state of their world for each transaction, -introducing latency. - -### Causal order - -[Causal order](https://www.scattered-thoughts.net/writing/causal-ordering/) is a representation of the relationship between transactions and the objects they produce, laid out as dependencies. Validators cannot execute a transaction dependent on objects created by a prior transaction that has not finished. Rather than total order, IOTA uses causal order (a partial order). - -### Certificate - -A certificate is the mechanism proving a transaction was approved or certified. Validators vote on transactions, and aggregators collect a Byzantine-resistant-majority of these votes into a certificate and broadcasts it to all IOTA validators, thereby ensuring finality. - -### Epoch - -Operation of the IOTA network is temporally partitioned into non-overlapping, fixed-duration epochs. During a particular epoch, the set of validators participating in the network is fixed. - -### Equivocation - -Equivocation in blockchains is the malicious action of dishonest actors giving conflicting information for the same message, such as inconsistent or duplicate voting. - -### Eventual consistency - -[Eventual consistency](https://en.wikipedia.org/wiki/Eventual_consistency) is the consensus model employed by IOTA; if one honest validator -certifies the transaction, all of the other honest validators will too eventually. - -### Finality - -[Finality](https://medium.com/mechanism-labs/finality-in-blockchain-consensus-d1f83c120a9a) is the assurance a transaction will not be revoked. This stage is considered closure for an exchange or other blockchain transaction. - -### Gas - -[Gas](https://ethereum.org/en/developers/docs/gas/) refers to the computational effort required for executing operations on the IOTA network. In IOTA, gas is paid with the network's native currency IOTA. The cost of executing a transaction in IOTA units is referred to as the transaction fee. - -### Genesis - -Genesis is the initial act of creating accounts and gas objects for a IOTA network. IOTA provides a `genesis` command that allows users to create and inspect the genesis object setting up the network for operation. - -### Multi-writer objects - -Multi-writer objects are objects that are owned by more than one address. Transactions affecting multi-writer objects require consensus in IOTA. This contrasts with transactions affecting only single-writer objects, which require only a confirmation of the owner's address contents. - -### Object - -The basic unit of storage in IOTA is object. In contrast to many other blockchains, where storage is centered around address and each address contains a key-value store, IOTA's storage is centered around objects. IOTA objects have one of the following primary states: - -- _Immutable_ - the object cannot be modified. -- _Mutable_ - the object can be changed. - -Further, mutable objects are divided into these categories: - -- _Owned_ - the object can be modified only by its owner. -- _Shared_ - the object can be modified by anyone. - -Immutable objects do not need this distinction because they have no owner. - -### Proof-of-stake - -[Proof-of-stake](https://en.wikipedia.org/wiki/Proof_of_stake) is a blockchain consensus mechanism where the voting weights of validators or validators is proportional to a bonded amount of the network's native currency (called their stake in the network). This mitigates [Sybil attacks](https://en.wikipedia.org/wiki/Sybil_attack) by forcing bad actors to gain a large stake in the blockchain first. - -### Single-writer objects - -Single-writer objects are owned by one address. In IOTA, transactions affecting only single-writer objects owned by the same address may proceed with only a verification of the sender's address, greatly speeding transaction times. These are _simple transactions_. See Single-Writer Apps for example applications of this simple transaction model. - -### Smart contract - -A [smart contract](https://en.wikipedia.org/wiki/Smart_contract) is an agreement based upon the protocol for conducting transactions in a blockchain. In IOTA, smart contracts are written in [Solidity/EVM or Move](../developer/evm-to-move/evm-to-move.mdx). - -### IOTA - -IOTA refers to the IOTA blockchain, and the [IOTA open source project](https://github.com/iotaledger/iota/) as a whole, or the native token to the IOTA network. - -### Total order - -[Total order](https://en.wikipedia.org/wiki/Total_order) refers to the ordered presentation of the history of all transactions processed by a traditional blockchain up to a given time. This is maintained by many blockchain systems, as the only way to process transactions. In contrast, IOTA uses a causal (partial) order wherever possible and safe. - -### Transaction - -A transaction in IOTA is a change to the blockchain. This may be a _simple transaction_ affecting only single-writer, single-address objects, such as minting an NFT or transferring an NFT or another token. These transactions may bypass the consensus protocol in IOTA. - -More _complex transactions_ affecting objects that are shared or owned by multiple addresses, such as asset management and other DeFi use cases, do go through consensus. - -### Transfer - -A transfer is switching the owner address of a token to a new one via command in IOTA. This is accomplished via the IOTA CLI client command line interface. It is one of the more common of many commands available in the CLI client. - -### Validator - -A validator in IOTA plays a passive role analogous to the more active role of validators and minors in other blockchains. In IOTA, validators do not continuously participate in the consensus protocol but are called into action only when receiving a transaction or -certificate. +<Glossary/> diff --git a/docs/content/references/references.mdx b/docs/content/references/references.mdx index 03facf3dd25..e0d5d599583 100644 --- a/docs/content/references/references.mdx +++ b/docs/content/references/references.mdx @@ -11,7 +11,7 @@ Reference the IOTA framework and IOTA RPC documentation for details of the code <Cards> -<Card title="JSON-RPC" href="references/iota-api"> +<Card title="JSON-RPC" href="/references/iota-api"> A public service that enables interacting with the IOTA network. </Card> </Cards> @@ -21,7 +21,7 @@ A public service that enables interacting with the IOTA network. Move powers smart contract logic for the IOTA blockchain. Use these resources to learn Move or refresh your memory. <Cards> -<Card title="IOTA framework" href="references/framework"/> +<Card title="IOTA framework" href="/references/framework"/> <Card title="Move language" href="https://github.com/move-language/move/blob/main/language/documentation/book/src/introduction.md"> Documentation for the Move programming language on GitHub. </Card> @@ -32,13 +32,13 @@ Documentation for the Move programming language on GitHub. Interact directly with IOTA networks and its features using the IOTA command line interface (CLI). The CLI is divided into separate base commands that target a specific set of features. <Cards> -<Card title="IOTA Client CLI" href="references/cli/client"> +<Card title="IOTA Client CLI" href="/references/cli/client"> Create a client on a IOTA network to generate addresses, access networks, and more with the IOTA Client CLI. </Card> -<Card title="IOTA Client PTB CLI" href="references/cli/ptb"> +<Card title="IOTA Client PTB CLI" href="/references/cli/ptb"> Build, preview, and execute programmable transaction blocks directly from your terminal with the IOTA Client PTB CLI. </Card> -<Card title="IOTA Move CLI" href="references/cli/move"> +<Card title="IOTA Move CLI" href="/references/cli/move"> Access IOTA Move functions on chain using the IOTA Move CLI. </Card> </Cards> @@ -51,5 +51,5 @@ Official software development kits (SDKs) available for IOTA include the TypeScr <Card title="IOTA TypeScript SDK" href="ts-sdk/typescript"> The IOTA TypeScript SDK has its own microsite. Click this box to go there. </Card> -<Card title="IOTA Rust SDK" href="references/rust-sdk"/> +<Card title="IOTA Rust SDK" href="/references/rust-sdk"/> </Cards> diff --git a/docs/content/references/research-papers.mdx b/docs/content/references/research-papers.mdx index 49b064fd219..53ca90d660e 100644 --- a/docs/content/references/research-papers.mdx +++ b/docs/content/references/research-papers.mdx @@ -42,7 +42,7 @@ This document contains a list of research papers that are relevant to IOTA. to add strong privacy to FastPay transactions (but IOTA does not plan to do this). - **Summary:** We introduce Zef, the first Byzantine-Fault Tolerant (BFT) protocol to support payments in anonymous digital coins at arbitrary scale. Zef follows the communication and security model of FastPay: both protocols are asynchronous, low-latency, linearly-scalable, and powered by partially-trusted - sharded validators. Zef further introduces opaque coins represented as off-chain certificates that are bound to user accounts. In order to hide the face + sharded validators. Zef further introduces opaque coins represented as off-chain _certificate_s that are bound to user accounts. In order to hide the face values of coins when a payment operation consumes or creates them, Zef uses random commitments and NIZK proofs. Created coins are made unlinkable using the blind and randomizable threshold anonymous credentials of [Coconut](https://arxiv.org/pdf/1802.07344.pdf). To control storage costs associated with coin replay prevention, Zef accounts are designed so that data can be safely removed once an account is deactivated. Besides the specifications and a detailed diff --git a/docs/content/sidebars/developer.js b/docs/content/sidebars/developer.js index 46e45534194..8cadb600f0c 100644 --- a/docs/content/sidebars/developer.js +++ b/docs/content/sidebars/developer.js @@ -57,7 +57,6 @@ const developer = [ label: 'Typescript SDK', href: '/ts-sdk/typescript', }, - 'developer/iota-101/using-events', ], }, { @@ -70,6 +69,8 @@ const developer = [ 'developer/iota-101/move-overview/init', 'developer/iota-101/move-overview/visibility', 'developer/iota-101/move-overview/entry-functions', + 'developer/iota-101/using-events', + 'developer/iota-101/access-time', { type: 'category', label: 'Structs and Abilities', @@ -107,7 +108,6 @@ const developer = [ 'developer/iota-101/move-overview/patterns/id-pointer', ], }, - 'developer/iota-101/access-time', 'developer/iota-101/move-overview/conventions', ], }, diff --git a/docs/content/ts-sdk/typescript/index.mdx b/docs/content/ts-sdk/typescript/index.mdx index f155c2b3822..f1bc88e8908 100644 --- a/docs/content/ts-sdk/typescript/index.mdx +++ b/docs/content/ts-sdk/typescript/index.mdx @@ -1,5 +1,6 @@ import NetworkInfo from "@site/src/components/NetworkInfo/index.tsx"; import { Networks } from '@site/src/components/constant.tsx'; +import HighTrafficRpcs from "@site/../content/_snippets/info-high-traffic.mdx"; # IOTA TypeScript SDK Quick Start @@ -16,6 +17,9 @@ npm i @iota/iota-sdk The following table lists the locations for IOTA networks. +{ /* TODO: https://github.com/iotaledger/iota/issues/4497 */ } +<HighTrafficRpcs /> + ## IOTA Testnet <NetworkInfo.Move {...Networks['iota_move_testnet']}/> @@ -30,19 +34,6 @@ To create a local IOTA network, you can refer to [Local Development](/developer/ <NetworkInfo.Move {...Networks['iota_localnet']}/> -:::warning - -Use dedicated nodes/shared services rather than public endpoints for production apps. The public -endpoints maintained by the IOTA Foundation (`api.<NETWORK>.iota.cafe:443`) are rate-limited, and support -only 100 requests per 30 seconds or so. Do not use public endpoints in production applications with -high traffic volume. - -You can either run your own Full nodes, or outsource this to a professional infrastructure provider -(preferred for apps that have high traffic). You can find a list of reliable RPC endpoint providers -for IOTA on the [IOTA Dev Portal](https://iota.io/developers#dev-tools) using the **Node Service** tab. - -::: - ## Migrate to version 0.38.0 The IOTA TypeScript SDK was refactored beginning with version 0.38.0. If you are updating from an diff --git a/docs/site/config/jargon.js b/docs/site/config/jargon.js new file mode 100644 index 00000000000..669bc6d8cff --- /dev/null +++ b/docs/site/config/jargon.js @@ -0,0 +1,35 @@ +module.exports = { + 'causal history': 'Causal history is the relationship between an object in IOTA and its direct predecessors and successors. This history is essential to the causal order IOTA uses to process transactions. In contrast, other blockchains read the entire state of their world for each transaction, introducing latency.', + 'causal order': '<a href="https://www.scattered-thoughts.net/writing/causal-ordering/">Causal order</a> is a representation of the relationship between transactions and the objects they produce, laid out as dependencies. Validators cannot execute a transaction dependent on objects created by a prior transaction that has not finished. Rather than total order, IOTA uses causal order (a partial order).', + certificate: 'A certificate is the mechanism proving a transaction was approved or certified. Validators vote on transactions, and aggregators collect a Byzantine-resistant majority of these votes into a certificate and broadcasts it to all IOTA validators, thereby ensuring finality.', + epoch: 'Operation of the IOTA network is temporally partitioned into non-overlapping, fixed-duration epochs. During a particular epoch, the set of validators participating in the network is fixed.', + equivocation: 'Equivocation in blockchains is the malicious action of dishonest actors giving conflicting information for the same message, such as inconsistent or duplicate voting.', + 'eventual consistency': '<a href="https://en.wikipedia.org/wiki/Eventual_consistency">Eventual consistency</a> is the consensus model employed by IOTA; if one honest validator certifies the transaction, all of the other honest validators will too eventually.', + finality: '<a href="https://medium.com/mechanism-labs/finality-in-blockchain-consensus-d1f83c120a9a">Finality</a> is the assurance a transaction will not be revoked. This stage is considered closure for an exchange or other blockchain transaction.', + gas: '<a href="https://ethereum.org/en/developers/docs/gas/">Gas</a> refers to the computational effort required for executing operations on the IOTA network. In IOTA, gas is paid with the network\'s native currency IOTA. The cost of executing a transaction in IOTA units is referred to as the transaction fee.', + genesis: 'Genesis is the initial act of creating accounts and gas objects for a IOTA network. IOTA provides a `genesis` command that allows users to create and inspect the genesis object setting up the network for operation.', + 'multi-writer objects': 'Multi-writer objects are objects that are owned by more than one address. Transactions affecting multi-writer objects require consensus in IOTA. This contrasts with transactions affecting only single-writer objects, which require only a confirmation of the owner\'s address contents.', + object: ` + The basic unit of storage in IOTA is object. In contrast to many other blockchains, where storage is centered around address and each address contains a key-value store, IOTA\'s storage is centered around objects. IOTA objects have one of the following primary states:<br/> + <br/> + - <i>Immutable</i> - the object cannot be modified.<br/> + - <i>Mutable</i> - the object can be changed.<br/> + <br/> + Further, mutable objects are divided into these categories:<br/> + <br/> + - <i>Owned</i> - the object can be modified only by its owner.<br/> + - <i>Shared</i> - the object can be modified by anyone.<br/> + <br/> + Immutable objects do not need this distinction because they have no owner. + `, + PoS: '<a href="https://en.wikipedia.org/wiki/Proof_of_stake">Proof-of-stake</a> is a blockchain consensus mechanism where the voting weights of validators or validators is proportional to a bonded amount of the network\'s native currency (called their stake in the network). This mitigates <a href="https://en.wikipedia.org/wiki/Sybil_attack">Sybil attacks</a> by forcing bad actors to gain a large stake in the blockchain first.', + 'single-writer objects': 'Single-writer objects are owned by one address. In IOTA, transactions affecting only single-writer objects owned by the same address may proceed with only a verification of the sender\'s address, greatly speeding transaction times. These are simple transactions. See Single-Writer Apps for example applications of this simple transaction model.', + 'smart contract': 'A <a href="https://en.wikipedia.org/wiki/Smart_contract">smart contract</a> is an agreement based upon the protocol for conducting transactions in a blockchain. In IOTA, smart contracts are written in <a href="../developer/evm-to-move">Solidity/EVM or Move</a>.', + iota: 'IOTA refers to the IOTA blockchain, and the <a href="https://github.com/iotaledger/iota/">IOTA open source project</a> as a whole, or the native token to the IOTA network.', + 'total order': '<a href="https://en.wikipedia.org/wiki/Total_order">Total order</a> refers to the ordered presentation of the history of all transactions processed by a traditional blockchain up to a given time. This is maintained by many blockchain systems, as the only way to process transactions. In contrast, IOTA uses a causal (partial) order wherever possible and safe.', + transaction: ` + A transaction in IOTA is a change to the blockchain. This may be a <i>simple transaction</i> affecting only single-writer, single-address objects, such as minting an NFT or transferring an NFT or another token. These transactions may bypass the consensus protocol in IOTA.<br/> + More <i>complex transactions</i> affecting objects that are shared or owned by multiple addresses, such as asset management and other DeFi use cases, go through the<a href = "https://github.com/iotaledger/iota/tree/develop/narwhal">Narwhal and Bullshark</a> DAG - based mempool and efficient Byzantine Fault Tolerant(BFT) consensus. + `, + transfer: 'A transfer is switching the owner address of a token to a new one via command in IOTA. This is accomplished via the IOTA CLI client command line interface. It is one of the more common of many commands available in the CLI client.', + validator: 'A validator in IOTA plays a passive role analogous to the more active role of validators and minors in other blockchains. In IOTA, validators do not continuously participate in the consensus protocol but are called into action only when receiving a transaction or certificate.'}; diff --git a/docs/site/docusaurus.config.js b/docs/site/docusaurus.config.js index f4034a646cf..b7a2e478b65 100644 --- a/docs/site/docusaurus.config.js +++ b/docs/site/docusaurus.config.js @@ -10,6 +10,8 @@ import codeImport from "remark-code-import"; require("dotenv").config(); +const jargonConfig = require('./config/jargon.js'); + /** @type {import('@docusaurus/types').Config} */ const config = { title: "IOTA Documentation", @@ -114,197 +116,9 @@ const config = { createRedirects(existingPath) { const redirects = [ { - to: 'ts-sdk/typescript/install', - from: '/references/ts-sdk/typescript/install', - }, - { - to: 'ts-sdk/typescript/hello-iota', - from: '/references/ts-sdk/typescript/hello-iota', - }, - { - to: 'ts-sdk/typescript/faucet', - from: '/references/ts-sdk/typescript/faucet', - }, - { - to: 'ts-sdk/typescript/iota-client', - from: '/references/ts-sdk/typescript/iota-client', - }, - { - to: 'ts-sdk/typescript/graphql', - from: '/references/ts-sdk/typescript/graphql', - }, - { - to: 'ts-sdk/typescript/transaction-building/basics', - from: '/references/ts-sdk/typescript/transaction-building/basics', - }, - { - to: 'ts-sdk/typescript/transaction-building/gas', - from: '/references/ts-sdk/typescript/transaction-building/gas', - }, - { - to: 'ts-sdk/typescript/transaction-building/sponsored-transactions', - from: '/references/ts-sdk/typescript/transaction-building/sponsored-transactions', - }, - { - to: 'ts-sdk/typescript/transaction-building/offline', - from: '/references/ts-sdk/typescript/transaction-building/offline', - }, - { - to: 'ts-sdk/typescript/cryptography/keypairs', - from: '/references/ts-sdk/typescript/cryptography/keypairs', - }, - { - to: 'ts-sdk/typescript/cryptography/multisig', - from: '/references/ts-sdk/typescript/cryptography/multisig', - }, - { - to: 'ts-sdk/typescript/utils', - from: '/references/ts-sdk/typescript/utils', - }, - { - to: 'ts-sdk/typescript/bcs', - from: '/references/ts-sdk/typescript/bcs', - }, - { - to: 'ts-sdk/typescript/executors', - from: '/references/ts-sdk/typescript/executors', - }, - { - to: 'ts-sdk/typescript/plugins', - from: '/references/ts-sdk/typescript/plugins', - }, - { - to: 'ts-sdk/typescript/owned-object-pool/overview', - from: '/references/ts-sdk/typescript/owned-object-pool/overview', - }, - { - to: 'ts-sdk/typescript/owned-object-pool/local-development', - from: '/references/ts-sdk/typescript/owned-object-pool/local-development', - }, - { - to: 'ts-sdk/typescript/owned-object-pool/custom-split-strategy', - from: '/references/ts-sdk/typescript/owned-object-pool/custom-split-strategy', - }, - { - to: 'ts-sdk/typescript/owned-object-pool/examples', - from: '/references/ts-sdk/typescript/owned-object-pool/examples', - }, - { - to: 'ts-sdk/dapp-kit/create-dapp', - from: '/references/ts-sdk/dapp-kit/create-dapp', - }, - { - to: 'ts-sdk/dapp-kit/iota-client-provider', - from: '/references/ts-sdk/dapp-kit/iota-client-provider', - }, - { - to: 'ts-sdk/dapp-kit/rpc-hooks', - from: '/references/ts-sdk/dapp-kit/rpc-hooks', - }, - { - to: 'ts-sdk/dapp-kit/wallet-provider', - from: '/references/ts-sdk/dapp-kit/wallet-provider', - }, - { - to: 'ts-sdk/dapp-kit/wallet-components/ConnectButton', - from: '/references/ts-sdk/dapp-kit/wallet-components/ConnectButton', - }, - { - to: 'ts-sdk/dapp-kit/wallet-components/ConnectModal', - from: '/references/ts-sdk/dapp-kit/wallet-components/ConnectModal', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useWallets', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useWallets', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useAccounts', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useAccounts', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useCurrentWallet', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useCurrentAccount', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useAutoConnectWallet', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useConnectWallet', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useConnectWallet', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useDisconnectWallet', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useSwitchAccount', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useReportTransactionEffects', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useSignPersonalMessage', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useSignTransaction', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useSignTransaction', - }, - { - to: 'ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction', - from: '/references/ts-sdk/dapp-kit/wallet-hooks/useSignAndExecuteTransaction', - }, - { - to: 'ts-sdk/dapp-kit/themes', - from: '/references/ts-sdk/dapp-kit/themes', - }, - { - to: 'ts-sdk/kiosk/kiosk-client/introduction', - from: '/references/ts-sdk/kiosk/kiosk-client/introduction', - }, - { - to: 'ts-sdk/kiosk/kiosk-client/querying', - from: '/references/ts-sdk/kiosk/kiosk-client/querying', - }, - { - to: 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction', - from: '/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/kiosk-transaction', - }, - { - to: 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing', - from: '/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/managing', - }, - { - to: 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing', - from: '/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/purchasing', - }, - { - to: 'ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples', - from: '/references/ts-sdk/kiosk/kiosk-client/kiosk-transaction/examples', - }, - { - to: 'ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction', - from: '/references/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/introduction', - }, - { - to: 'ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager', - from: '/references/ts-sdk/kiosk/kiosk-client/transfer-policy-transaction/using-the-manager', - }, - { - to: 'ts-sdk/kiosk/advanced-examples', - from: '/references/ts-sdk/kiosk/advanced-examples', - }, - { - to: 'ts-sdk/bcs', - from: '/references/ts-sdk/bcs', - }, + from: '/references/ts-sdk', + to: '/ts-sdk', + }, ]; let paths = []; for (const redirect of redirects) { @@ -366,7 +180,10 @@ const config = { ], [codeImport, { rootDir: path.resolve(__dirname, `../../`) }], ], - rehypePlugins: [katex], + rehypePlugins: [ + katex, + [require('rehype-jargon'), { jargon: jargonConfig}] + ], }, theme: { customCss: [ @@ -394,29 +211,15 @@ const config = { type: "text/css", }, ], - themes: ["@docusaurus/theme-live-codeblock", "@docusaurus/theme-mermaid", 'docusaurus-theme-search-typesense', - '@saucelabs/theme-github-codeblock'], + themes: ["@docusaurus/theme-mermaid", + '@saucelabs/theme-github-codeblock', '@docusaurus/theme-live-codeblock'], themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ - typesense: { - // Replace this with the name of your index/collection. - // It should match the "index_name" entry in the scraper's "config.json" file. - typesenseCollectionName: 'IOTADocs', - typesenseServerConfig: { - nodes: [ - { - host: 'docs-search.iota.org', - port: '', - protocol: 'https', - }, - ], - apiKey: 'C!jA3iCujG*PjK!eUVWFBxnU', - }, - // Optional: Typesense search parameters: https://typesense.org/docs/0.24.0/api/search.html#search-parameters - typesenseSearchParameters: {}, - // Optional - contextualSearch: true, + algolia: { + apiKey: '24b141ea7e65db2181463e44dbe564a5', + appId: '9PMBZGRP3B', + indexName: 'iota', }, image: "img/iota-doc-og.png", docs: { diff --git a/docs/site/package.json b/docs/site/package.json index 6e0e328cdb4..410b2dd3bbf 100644 --- a/docs/site/package.json +++ b/docs/site/package.json @@ -20,6 +20,7 @@ }, "dependencies": { "@amplitude/analytics-browser": "^1.10.3", + "@artsy/to-title-case": "^1.1.0", "@docsearch/react": "^3.6.0", "@docusaurus/core": "3.5.2", "@docusaurus/plugin-client-redirects": "^3.5.2", @@ -43,12 +44,12 @@ "axios": "^1.7.4", "clsx": "^2.1.1", "copy-text-to-clipboard": "^3.2.0", - "docusaurus-theme-search-typesense": "0.20.0-0", "dotenv": "^16.4.5", "graphql": "^16.9.0", "graphql-config": "^5.0.3", "gray-matter": "^4.0.3", "hast-util-is-element": "^1.1.0", + "html-react-parser": "^5.1.18", "lodash": "^4.17.21", "markdown-to-jsx": "^7.4.7", "plugin-image-zoom": "github:flexanalytics/plugin-image-zoom", @@ -60,6 +61,7 @@ "react-scrollspy-navigation": "^1.0.3", "react-syntax-highlighter": "^15.5.0", "react-ui-scrollspy": "^2.3.0", + "rehype-jargon": "^3.1.0", "rehype-katex": "^7.0.0", "remark-math": "^6.0.0", "tailwindcss": "^3.3.3", diff --git a/docs/site/src/components/API/api-ref/refnav.js b/docs/site/src/components/API/api-ref/refnav.js index e88b41d0233..f594067ece1 100644 --- a/docs/site/src/components/API/api-ref/refnav.js +++ b/docs/site/src/components/API/api-ref/refnav.js @@ -44,7 +44,6 @@ const RefNav = (props) => { className={`menu__link font-medium block hover:no-underline text-base ${page === method.name && 'menu__link--active'}`} key={`link-${method.name.toLowerCase()}`} href={`#${method.name.toLowerCase()}`} - data-theme="dark" onClick={() => setPage(method.name)} > {method.name} diff --git a/docs/site/src/components/FeedbackForm/index.tsx b/docs/site/src/components/FeedbackForm/index.tsx index 8613ffdf7a3..5dcf5af6d40 100644 --- a/docs/site/src/components/FeedbackForm/index.tsx +++ b/docs/site/src/components/FeedbackForm/index.tsx @@ -20,7 +20,6 @@ const FeedbackForm = () => { return ( <div className="feedback-container"> - <div className="divider"></div> <div className={clsx("h3", "feedback-header")}>Feedback Form</div> <form onSubmit={handleSubmit}> <div className="form-group"> @@ -54,7 +53,6 @@ const FeedbackForm = () => { Submit Feedback </button> </form> - <div className="divider"></div> </div> ); }; diff --git a/docs/site/src/components/FeedbackForm/styles.css b/docs/site/src/components/FeedbackForm/styles.css index 4e742a9afb3..4aafcee2f8e 100644 --- a/docs/site/src/components/FeedbackForm/styles.css +++ b/docs/site/src/components/FeedbackForm/styles.css @@ -1,5 +1,15 @@ .feedback-container { - /* margin: 20px; */ + background-color: #0000001a; + padding-top: 0.25rem; + padding-left: 2rem; + padding-right: 2rem; + padding-bottom: 1.25rem; + margin-top: 1rem; + border-radius: 0.5rem; +} + +[data-theme="dark"] .feedback-container { + background-color: #1e1e1e; } .feedback-header { diff --git a/docs/site/src/components/Glossary/index.tsx b/docs/site/src/components/Glossary/index.tsx new file mode 100644 index 00000000000..1a495afe0a3 --- /dev/null +++ b/docs/site/src/components/Glossary/index.tsx @@ -0,0 +1,53 @@ +import React from 'react'; +import Heading from '@theme/Heading'; +import { toTitleCase } from '@artsy/to-title-case'; +import { clsx } from 'clsx'; +import parse from 'html-react-parser'; + +export default function Glossary() { + const glossary = require('@site/config/jargon.js'); + + const sortedGlossary = Object.keys(glossary) + .sort(function (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }) + .reduce((acc, key) => { + acc[key] = glossary[key]; + return acc; + }, {}); + + let char = ''; + return ( + <> + {Object.entries(sortedGlossary).map(([key, value]) => { + let heading = null; + if (key.charAt(0).toLowerCase() !== char.toLowerCase()) { + char = key.charAt(0); + heading = char; + } + + return ( + <> + {heading && ( + <Heading + as='h2' + id={char} + title={char} + > + {char.toUpperCase()} + </Heading> + )} + <Heading + as='h3' + id={key} + title={key} + > + {toTitleCase(key)} + </Heading> + <p>{parse(value)}</p> + </> + ); + })} + </> + ); +} \ No newline at end of file diff --git a/docs/site/src/css/custom.css b/docs/site/src/css/custom.css index 59c5136435d..eac62e74432 100644 --- a/docs/site/src/css/custom.css +++ b/docs/site/src/css/custom.css @@ -29,6 +29,7 @@ --ifm-font-family-base: "Inter", sans-serif; --ifm-menu-color: #011829; --ifm-menu-color-background-active: transparent; + --ifm-hover-overlay: var(--ifm-color-emphasis-100); --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); --iota-black: #111111; --iota-blue: #6fbcf0; @@ -89,7 +90,7 @@ } /* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme="dark"] { +html[data-theme="dark"] { --ifm-color-primary: #4ca2ff; --ifm-color-primary-dark: #2b91ff; --ifm-color-primary-darker: #1a88ff; @@ -102,6 +103,7 @@ --ifm-menu-color-background-active: transparent; --ifm-navbar-sidebar-link-color: #f7f7f8; --ifm-navbar-sidebar-background-color: black; + --ifm-hover-overlay: var(--ifm-color-emphasis-100); } .active-scroll-spy { @@ -112,16 +114,20 @@ [data-theme="dark"] img.balance-coin-token { filter: invert(1); } + .table-of-contents__link--active { color: #525860; font-weight: 600; } +/* Hide ToC from imported READMEs */ .hidden-text{ display: none; } + [data-theme="dark"] .table-of-contents__link--active { color: white; } + /** navbar overrides */ [data-theme="light"] .clean-btn:hover { background-color: #525860; @@ -129,14 +135,14 @@ [data-theme="dark"] .menu__link--active { font-weight: bold; - color: white; + color: #3b82f6; } @media (min-width: 997px) { [data-theme="light"] .menu__link:hover, [data-theme="light"] .menu__link--active{ font-weight: bold; - color: var(--ifm-menu-color) + color: #3b82f6 } } @media (max-width: 996px) { @@ -148,7 +154,7 @@ [data-theme="light"] .menu__list-item-collapsible--active, [data-theme="light"] .menu__link--active { font-weight: bold; - color: white; + color: #3b82f6; } [data-theme="light"] .menu__list-item-collapsible:hover, @@ -172,17 +178,21 @@ color: white; font-weight: 500; } + .pagination-nav__label--blue, .pagination-nav__sublabel--blue { color: white; } + .pagination-nav { display: flex; justify-content: space-between; } + [data-theme="light"] .pagination-nav__link { border: 1px solid #d8e1f4; } + .pagination-nav__link { background-color: transparent; border-radius: 0px; @@ -193,6 +203,7 @@ width: fit-content; min-width: 240px; } + .pagination-nav__label { color: white; } @@ -204,6 +215,7 @@ flex-direction: column; justify-content: space-between !important; } + .page-nav-content-light { display: flex; align-items: center; @@ -212,6 +224,7 @@ color: white !important; flex-direction: row-reverse; } + .page-nav-content-blue { display: flex; align-items: center; @@ -219,31 +232,38 @@ width: 100%; color: white !important; } + .page-nav-arrow--light, .pagination-nav__sublabel--light { color: white; } + .pagination-nav__label--light { color: black; } + [data-theme="dark"] .page-nav-arrow--light, .pagination-nav__sublabel--light, .pagination-nav__label--light { color: white; } + [data-theme="light"] .page-nav-arrow--light, .pagination-nav__label--light { color: black; } + [data-theme="light"] .pagination-nav__sublabel--light { color: #909fbe; } + [data-theme="dark"] .pagination-nav__label--light { color: white; } html[data-theme="dark"] { background-color: var(--iota-black); } + /** setup global style overrides */ body { font-family: var(--primaryFont); @@ -256,6 +276,7 @@ h1 { font-weight: 500; letter-spacing: -0.04em; } + .h1 { letter-spacing: -2.88px; margin-top: 0; @@ -273,6 +294,7 @@ h2 { line-height: 2.125rem; letter-spacing: -0.04em; } + .h2 { letter-spacing: -1.62px; margin-top: 0; @@ -316,24 +338,30 @@ h4 { line-height: 1.75rem; letter-spacing: -2%; } + @media screen and (max-width: 767px) { + h1, .h1 { font-size: 3.5rem; } + h2, .h2 { font-size: 2rem; } + h3, .h3 { font-size: 1.5rem; } + h4, .h4 { font-size: 1.2rem; } } + @media screen and (max-width: 599px) { .pagination-nav{ display: flex; @@ -350,10 +378,12 @@ h4 { .h2 { font-size: 1.7rem; } + h3, .h3 { font-size: 1.2rem; } + h4, .h4 { font-size: 1rem; @@ -365,19 +395,24 @@ h4 { border-bottom: 1px solid var(--iota-line); background-color: black; } + .navbar__title { width: 10px; } + .navbar__toggle path { stroke: var(--iota-white); } + .navbar__items { color: rgba(255, 255, 255, 0.7); } + .navbar__items .navbar__brand { width: 17%; color: rgba(255, 255, 255, 0.7); } + .navbar__items .navbar__item.navbar__link { /* font-family: var(--headerFont); */ font-size: 0.9375rem; @@ -408,10 +443,12 @@ h4 { [data-theme='light'] .DocSearch { --docsearch-searchbox-background: var(--ifm-background-color-dark); } + .DocSearch-Button-Container { width: 100%; justify-content: space-between; } + .DocSearch-Button { width: 12.5rem; height: 2.625rem !important; @@ -423,18 +460,22 @@ h4 { font-family: var(--primaryFont); letter-spacing: -0.01em; } + @media screen and (max-width: 599px) { .DocSearch-Button { width: initial; } } + .DocSearch-Search-Icon { order: 2; margin-left: auto; } + .DocSearch-Search-Icon path { stroke: var(--iota-white); } + .DocSearch-Button-Keys { display: none !important; } @@ -443,6 +484,7 @@ h4 { row-gap: 1rem; column-gap: 1rem; } + .markdown h1:first-child { margin-top: 1rem; } @@ -453,12 +495,15 @@ h4 { color: var(--iota-white); background: var(--iota-hero-dark); } -.button--success{ + +.button--success { background: var(--iota-success-dark); } -.button--danger{ + +.button--danger { background: var(--iota-issue-dark); } + .button-cta { letter-spacing: -0.3px; cursor: pointer; @@ -480,22 +525,26 @@ h4 { justify-content: center; gap: 1rem; } + .button-cta:hover { background-color: var(--iota-button-hover); color: var(--iota-white); text-decoration: none; } + .button-cta:after { content: url("data:image/svg+xml,%3Csvg width='18' height='19' viewBox='0 0 18 19' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 5.5H14V14.5' stroke='%23ABBDCC' stroke-width='2'/%3E%3Cpath d='M14 5.5L3 16.5' stroke='%23ABBDCC' stroke-width='2'/%3E%3C/svg%3E"); width: 18px; height: 18px; padding-bottom: 2px; } + @media (max-width: 1050px) { .navbar .button-cta { display: none; } } + .footer { background-color: black; } @@ -504,10 +553,57 @@ h4 { .text-white { color: var(--iota-white); } + .text-gray { color: var(--iota-gray); } +/*------------Jargon---------------*/ +/* Add a dashed line under jargon terms */ +.jargon-term { + text-decoration: underline var(--ifm-color-primary-light); +} + +/* Add a question mark behind/above jargon terms */ +.jargon-term::after { + content: '?'; + font-weight: bold; + display: inline-block; + transform: translate(0, -0.5em); + font-size: 75%; + color: var(--ifm-color-primary-light); + margin-left: 3px; +} + +/* Hover behavior for the therm itself */ +.jargon-term:hover { + position: relative; + text-decoration: none; + cursor: help; +} + +/* Hide info by default */ +.jargon-term .jargon-info { + display: none; +} + +/* Show info on hover */ +.jargon-term:hover .jargon-info { + display: block; + position: absolute; + top: 1.5em; + left: 0; + background: var(--ifm-hover-overlay); + border: 1px solid var(--ifm-color-primary-light); + padding: 1rem; + border-radius: 4px; + font-size: 90%; + min-width: 250px; + max-width: 450px; + z-index: 1; +} +/*---------------------------------*/ + /* Ensure equations are scrollable on smaller screens */ .katex-display { overflow-x: scroll; @@ -526,4 +622,4 @@ h4 { .katex-display { max-width: 100%; overflow-wrap: break-word; -} \ No newline at end of file +} diff --git a/docs/site/src/theme/CodeBlock/index.tsx b/docs/site/src/theme/CodeBlock/index.tsx new file mode 100644 index 00000000000..11c54f01d83 --- /dev/null +++ b/docs/site/src/theme/CodeBlock/index.tsx @@ -0,0 +1,29 @@ +/** + * SWIZZLED VERSION: 3.5.2 + * REASONS: + * - Add check for reference CodeBlock so it can coexist with the original CodeBlock and the live code block + */ +import React from 'react'; +import CodeBlock from '@theme-original/CodeBlock'; +import ReferenceCodeBlock from '@saucelabs/theme-github-codeblock/build/theme/ReferenceCodeBlock'; +import { ReferenceCodeBlockProps } from '@saucelabs/theme-github-codeblock/build/theme/types'; +import type CodeBlockType from '@theme/CodeBlock'; +import type {WrapperProps} from '@docusaurus/types'; + +type Props = WrapperProps<typeof CodeBlockType>; + +function isReferenceCodeBlockType(props: object): props is ReferenceCodeBlockProps { + return 'reference' in props + || ('metastring' in props && typeof props.metastring === 'string' && props.metastring.split(' ').includes('reference')); +} + +// Wrap CodeBlock to check if it is a reference (saucepans) CodeBlock. +// If it isn't, we just return the live plugin CodeBlock which will check, +// if the CodeBlock is a live CodeBlock or the original CodeBlock +export default function CodeBlockWrapper(props: ReferenceCodeBlockProps | Props): JSX.Element { + return ( + <> + {isReferenceCodeBlockType(props) ? <ReferenceCodeBlock {...props} /> : <CodeBlock {...props} />} + </> + ); +} diff --git a/docs/site/static/img/concepts/execution-architecture/dark/iota-architecture.svg b/docs/site/static/img/concepts/execution-architecture/dark/iota-architecture.svg index 7b929d828ab..ab6607556e2 100644 --- a/docs/site/static/img/concepts/execution-architecture/dark/iota-architecture.svg +++ b/docs/site/static/img/concepts/execution-architecture/dark/iota-architecture.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Do not edit this file with editors other than draw.io --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1157px" height="747px" viewBox="-0.5 -0.5 1157 747" content="<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17"> <diagram name="Page-1" id="jhOoJUkd9Zucpb-pnEYY"> <mxGraphModel dx="1623" dy="1938" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="none" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="3kIInuhs_YmBb0iZ2eFI-7" value="&lt;b&gt;Execution layer&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=west;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;strokeWidth=1;shadow=1;" parent="1" vertex="1"> <mxGeometry x="495" y="25" width="440" height="450" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-63" value="" style="rounded=1;whiteSpace=wrap;html=1;hachureGap=4;fontFamily=Helvetica;strokeColor=default;fillColor=default;glass=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="10.003376623376589" y="39.550041395623865" width="393.8931818181818" height="227.41573033707866" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-8" value="&lt;b&gt;Adapter&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry width="170" height="190" relative="1" as="geometry"> <mxPoint x="30" y="55" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-43" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="38.86363636363636" y="304.0449438202247" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-9" value="&lt;b&gt;MoveVM&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-41" value="move-execution/move-vm-runtime" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-44" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="296.59090909090907" y="306.51685393258424" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-13" value="&lt;b&gt;Framework&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-42" value="iota-framework crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-56" value="Init" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=45;entryPerimeter=0;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-39" target="3kIInuhs_YmBb0iZ2eFI-9" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-58" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="46.16883116883113" y="88.98824364281488" width="378.4090909090909" height="168.0904080425784" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-40" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1" connectable="0"> <mxGeometry width="128.57142857142858" height="138.42696629213484" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-10" value="&lt;b&gt;Execution-engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-40" vertex="1"> <mxGeometry width="128.57142857142856" height="92.63157894736842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-39" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-adapter/execution-engine" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1"> <mxGeometry x="5.849999999999999" y="92.6274157303371" width="109.575" height="45.79955056179776" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-61" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=45;exitDy=100;exitPerimeter=0;entryX=1;entryY=0.206;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-13" target="3kIInuhs_YmBb0iZ2eFI-8" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-62" value="&lt;h4&gt;&lt;font face=&quot;Helvetica&quot;&gt;native fns etc&lt;/font&gt;&lt;/h4&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-61" vertex="1" connectable="0"> <mxGeometry x="-0.1741" y="-1" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-45" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="276.1363636363636" y="98.87640449438204" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-48" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-45" vertex="1" connectable="0"> <mxGeometry width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-46" value="&lt;b&gt;Object runtime&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-47" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-move-natives" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-64" value="&lt;span style=&quot;caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;&quot;&gt;&lt;b style=&quot;&quot;&gt;iota-execution crate&lt;/b&gt;&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;fillColor=default;fontColor=default;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="268.5363636363636" y="49.43820224719101" width="117.47045454545454" height="29.662921348314605" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-15" value="&lt;b&gt;Nodes network(Iota node)&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;shadow=1;strokeWidth=1;" parent="1" vertex="1"> <mxGeometry x="-210" y="30" width="380" height="430" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-16" value="&lt;b&gt;Node&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry width="330" height="370" relative="1" as="geometry"> <mxPoint x="20" y="40" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-17" value="&lt;b&gt;API&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="42.2239247311828" y="92.97297297297297" width="85.80645161290323" height="267.2972972972973" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-18" value="&lt;b&gt;Ledger storage&lt;/b&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="253.33129032258068" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-65" value="&lt;b&gt;Indexer&lt;/b&gt;&lt;div&gt;&lt;b&gt;(read/sync db)&lt;/b&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="153.22580645161293" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-19" value="&lt;b&gt;Consensus engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="142.5" y="81.91" width="97.5" height="78.09" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-20" value="&lt;b&gt;Network&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="141.25" y="185.91" width="97.5" height="81.43" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-1" value="&lt;b&gt;Core&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="251.77" y="150" width="75.11" height="60" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-34" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="500" width="120" height="74.55" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-31" value="&lt;b&gt;iota-json-rpc&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry width="120" height="50" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-32" value="&lt;div&gt;iota-json-rpc crate&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry x="20" y="50.00454545454545" width="80" height="24.545454545454547" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-36" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="670" width="100" height="70" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-28" value="&lt;b&gt;iota-cli&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry width="100" height="40" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-35" value="iota-cli crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry y="40" width="90" height="30" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-49" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=45;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=0;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-28" target="3kIInuhs_YmBb0iZ2eFI-32" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-50" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=55;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-31" target="3kIInuhs_YmBb0iZ2eFI-65" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-6" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-7" target="3kIInuhs_YmBb0iZ2eFI-18" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-11" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=32.385;exitDy=0;exitPerimeter=0;entryX=0.407;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;strokeWidth=1;shadow=1;" parent="1" source="C7P2nbfdh_euxFz_vEXo-1" target="3kIInuhs_YmBb0iZ2eFI-7" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> "><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-7"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 710 31 L 1140 31 L 1150 41 L 1150 481 L 720 481 L 710 471 L 710 31 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(180,930,256)" pointer-events="all"/><path d="M 720 481 L 720 41 L 710 31 M 720 41 L 1150 41" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(180,930,256)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 423px; height: 1px; padding-top: 38px; margin-left: 717px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution layer</b></div></div></div></foreignObject><text x="717" y="50" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px">Execution layer</text></switch></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-63"><g><rect x="720" y="70.55" width="393.89" height="227.42" rx="34.11" ry="34.11" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-8"><g><path d="M 730 96 L 910 96 L 920 106 L 920 266 L 740 266 L 730 256 L 730 96 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,825,181)" pointer-events="all"/><path d="M 740 266 L 740 106 L 730 96 M 740 106 L 920 106" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,825,181)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 153px; height: 1px; padding-top: 103px; margin-left: 746px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Adapter</b></div></div></div></foreignObject><text x="823" y="115" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Adapter</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-43"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-9"><g><path d="M 760.45 323.46 L 829.55 323.46 L 839.55 333.46 L 839.55 425.73 L 770.45 425.73 L 760.45 415.73 L 760.45 323.46 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,800,374.6)" pointer-events="all"/><path d="M 770.45 425.73 L 770.45 333.46 L 760.45 323.46 M 770.45 333.46 L 839.55 333.46" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,800,374.6)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 352px; margin-left: 755px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>MoveVM</b></div></div></div></foreignObject><text x="798" y="364" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">MoveVM</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-41"><g><rect x="748.86" y="414.15" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 434px; margin-left: 750px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">move-execution/move-vm-runtime</div></div></div></foreignObject><text x="795" y="438" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">move-execution/...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-44"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-13"><g><path d="M 1018.18 325.93 L 1087.28 325.93 L 1097.28 335.93 L 1097.28 428.2 L 1028.18 428.2 L 1018.18 418.2 L 1018.18 325.93 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1057.73,377.07)" pointer-events="all"/><path d="M 1028.18 428.2 L 1028.18 335.93 L 1018.18 325.93 M 1028.18 335.93 L 1097.28 335.93" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1057.73,377.07)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 355px; margin-left: 1013px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Framework</b></div></div></div></foreignObject><text x="1055" y="367" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Framework</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-42"><g><rect x="1006.59" y="416.62" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 436px; margin-left: 1008px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-framework crate</div></div></div></foreignObject><text x="1053" y="440" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-framework...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-56"><g><path d="M 816.81 258.42 L 816.8 286.7 Q 816.8 296.7 811.45 296.7 L 808.78 296.7 Q 806.1 296.7 806.11 306.7 L 806.13 328.68" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 806.14 333.93 L 802.63 326.93 L 806.13 328.68 L 809.63 326.92 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 297px; margin-left: 811px;"><div data-drawio-colors="color: rgb(240, 240, 240); background-color: rgb(24, 20, 29); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; background-color: rgb(24, 20, 29); white-space: nowrap;">Init</div></div></div></foreignObject><text x="811" y="300" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="11px" text-anchor="middle">Init</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-58"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-40"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-10"><g><path d="M 774.14 102.02 L 856.77 102.02 L 866.77 112.02 L 866.77 230.59 L 784.14 230.59 L 774.14 220.59 L 774.14 102.02 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,820.45,166.3)" pointer-events="all"/><path d="M 784.14 230.59 L 784.14 112.02 L 774.14 102.02 M 784.14 112.02 L 866.77 112.02" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,820.45,166.3)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 137px; margin-left: 762px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution-engine</b></div></div></div></foreignObject><text x="818" y="149" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Execution-engine</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-39"><g><rect x="762.02" y="212.62" width="109.58" height="45.8" rx="6.87" ry="6.87" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 236px; margin-left: 763px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-adapter/execution-engine</div></div></div></foreignObject><text x="817" y="239" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">...execution/iota-...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-61"><g><path d="M 1008.86 382.52 L 885 382.5 Q 875 382.5 875 372.5 L 874.98 282.37" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 874.98 277.12 L 878.48 284.12 L 874.98 282.37 L 871.48 284.12 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-62"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 382px; margin-left: 910px;"><div data-drawio-colors="color: rgb(240, 240, 240); background-color: rgb(24, 20, 29); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: "Architects Daughter"; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; background-color: rgb(24, 20, 29); white-space: nowrap;"><h4><font face="Helvetica">native fns etc</font></h4></div></div></div></foreignObject><text x="910" y="385" fill="rgb(240, 240, 240)" font-family=""Architects Daughter"" font-size="11px" text-anchor="middle">native fns etc</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-45"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-48"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-46"><g><path d="M 997.72 118.29 L 1066.82 118.29 L 1076.82 128.29 L 1076.82 220.56 L 1007.72 220.56 L 997.72 210.56 L 997.72 118.29 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1037.27,169.43)" pointer-events="all"/><path d="M 1007.72 220.56 L 1007.72 128.29 L 997.72 118.29 M 1007.72 128.29 L 1076.82 128.29" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1037.27,169.43)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 147px; margin-left: 992px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Object runtime</b></div></div></div></foreignObject><text x="1035" y="159" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Object runtime</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-47"><g><rect x="986.14" y="208.98" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 229px; margin-left: 987px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-move-natives</div></div></div></foreignObject><text x="1032" y="232" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">...execution/io...</text></switch></g></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-64"><g><rect x="978.54" y="80.44" width="117.47" height="29.66" rx="4.45" ry="4.45" fill="rgb(24, 20, 29)" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 115px; height: 1px; padding-top: 87px; margin-left: 981px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: "Architects Daughter"; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;"><b style="">iota-execution crate</b></span></div></div></div></foreignObject><text x="981" y="99" fill="rgb(240, 240, 240)" font-family=""Architects Daughter"" font-size="12px">iota-execution crate</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-15"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M -20 61 L 400 61 L 410 71 L 410 441 L -10 441 L -20 431 L -20 61 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,251)" pointer-events="all"/><path d="M -10 441 L -10 71 L -20 61 M -10 71 L 410 71" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,251)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 363px; height: 1px; padding-top: 53px; margin-left: 12px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Nodes network(Iota node)</b></div></div></div></foreignObject><text x="12" y="65" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px">Nodes network(Iota node)</text></switch></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-16"><g><path d="M 5 96 L 365 96 L 375 106 L 375 426 L 15 426 L 5 416 L 5 96 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,190,261)" pointer-events="all"/><path d="M 15 426 L 15 106 L 5 96 M 15 106 L 375 106" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,190,261)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 313px; height: 1px; padding-top: 93px; margin-left: 31px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Node</b></div></div></div></foreignObject><text x="188" y="105" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Node</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-17"><g><path d="M -43.52 219.72 L 213.78 219.72 L 223.78 229.72 L 223.78 305.52 L -33.52 305.52 L -43.52 295.52 L -43.52 219.72 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,90.13,262.62)" pointer-events="all"/><path d="M -33.52 305.52 L -33.52 229.72 L -43.52 219.72 M -33.52 229.72 L 223.78 229.72" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,90.13,262.62)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 69px; height: 1px; padding-top: 146px; margin-left: 53px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>API</b></div></div></div></foreignObject><text x="88" y="158" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">API</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-18"><g><path d="M 258.33 347.9 C 258.33 339.62 274.8 332.9 295.11 332.9 C 304.86 332.9 314.21 334.48 321.11 337.3 C 328.01 340.11 331.88 343.93 331.88 347.9 L 331.88 410.88 C 331.88 419.16 315.42 425.88 295.11 425.88 C 274.8 425.88 258.33 419.16 258.33 410.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/><path d="M 331.88 347.9 C 331.88 356.19 315.42 362.9 295.11 362.9 C 274.8 362.9 258.33 356.19 258.33 347.9" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 392px; margin-left: 259px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Ledger storage</b></div></div></div></foreignObject><text x="295" y="395" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Ledger stora...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-65"><g><path d="M 158.23 347.9 C 158.23 339.62 174.69 332.9 195 332.9 C 204.75 332.9 214.11 334.48 221 337.3 C 227.9 340.11 231.77 343.93 231.77 347.9 L 231.77 410.88 C 231.77 419.16 215.31 425.88 195 425.88 C 174.69 425.88 158.23 419.16 158.23 410.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/><path d="M 231.77 347.9 C 231.77 356.19 215.31 362.9 195 362.9 C 174.69 362.9 158.23 356.19 158.23 347.9" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 392px; margin-left: 159px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Indexer</b><div><b>(read/sync db)</b></div></div></div></div></foreignObject><text x="195" y="395" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Indexer...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-19"><g><path d="M 157.2 108.2 L 225.29 108.2 L 235.29 118.2 L 235.29 205.7 L 167.2 205.7 L 157.2 195.7 L 157.2 108.2 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,196.25,156.95)" pointer-events="all"/><path d="M 167.2 205.7 L 167.2 118.2 L 157.2 108.2 M 167.2 118.2 L 235.29 118.2" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,196.25,156.95)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 135px; margin-left: 154px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Consensus engine</b></div></div></div></foreignObject><text x="194" y="147" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Consensus engi...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-20"><g><path d="M 154.28 213.88 L 225.72 213.88 L 235.72 223.88 L 235.72 311.38 L 164.28 311.38 L 154.28 301.38 L 154.28 213.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,262.63)" pointer-events="all"/><path d="M 164.28 311.38 L 164.28 223.88 L 154.28 213.88 M 164.28 223.88 L 235.72 223.88" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,262.63)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 239px; margin-left: 152px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Network</b></div></div></div></foreignObject><text x="193" y="251" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Network</text></switch></g></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-1"><g><path d="M 264.32 178.44 L 314.32 178.44 L 324.32 188.44 L 324.32 253.56 L 274.32 253.56 L 264.32 243.56 L 264.32 178.44 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,294.33,216)" pointer-events="all"/><path d="M 274.32 253.56 L 274.32 188.44 L 264.32 178.44 M 274.32 188.44 L 324.32 188.44" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,294.33,216)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 203px; margin-left: 263px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Core</b></div></div></div></foreignObject><text x="292" y="215" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Core</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-34"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-31"><g><path d="M 100 471 L 140 471 L 150 481 L 150 591 L 110 591 L 100 581 L 100 471 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,125,531)" pointer-events="all"/><path d="M 110 591 L 110 481 L 100 471 M 110 481 L 150 481" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,125,531)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 103px; height: 1px; padding-top: 523px; margin-left: 71px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-json-rpc</b></div></div></div></foreignObject><text x="123" y="535" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-json-rpc</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-32"><g><rect x="85" y="556" width="80" height="24.55" rx="3.68" ry="3.68" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 568px; margin-left: 86px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div>iota-json-rpc crate<br /></div></div></div></div></foreignObject><text x="125" y="572" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-json-rpc...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-36"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-28"><g><path d="M 95 646 L 125 646 L 135 656 L 135 746 L 105 746 L 95 736 L 95 646 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,115,696)" pointer-events="all"/><path d="M 105 746 L 105 656 L 95 646 M 105 656 L 135 656" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,115,696)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 693px; margin-left: 71px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-cli</b></div></div></div></foreignObject><text x="113" y="705" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-cli</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-35"><g><rect x="65" y="716" width="90" height="30" rx="4.5" ry="4.5" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 731px; margin-left: 66px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-cli crate</div></div></div></foreignObject><text x="110" y="735" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-cli crate</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-49"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 120 676 L 120 638.3 Q 120 628.3 122.5 628.3 L 123.75 628.3 Q 125 628.3 125 618.3 L 125 586.92" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 125 581.67 L 128.5 588.67 L 125 586.92 L 121.5 588.67 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-50"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 130 506 L 130 476 Q 130 466 140 466 L 185 466 Q 195 466 195 456 L 195 432.25" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 195 427 L 198.5 434 L 195 432.25 L 191.5 434 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-6"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 710 256 L 530.9 256 Q 520.9 256 520.9 266 L 520.9 369.4 Q 520.9 379.4 510.9 379.4 L 338.25 379.39" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 333 379.39 L 340 375.89 L 338.25 379.39 L 340 382.89 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-11"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 331.88 218.38 L 511 218.4 Q 521 218.4 521 208.4 L 521 21 Q 521 11 531 11 L 960.9 11 Q 970.9 11 970.91 17.82 L 970.91 24.63" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 970.92 29.88 L 967.41 22.89 L 970.91 24.63 L 974.41 22.88 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1157px" height="747px" viewBox="-0.5 -0.5 1157 747" content="<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17"> <diagram name="Page-1" id="jhOoJUkd9Zucpb-pnEYY"> <mxGraphModel dx="1623" dy="1938" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="none" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="3kIInuhs_YmBb0iZ2eFI-7" value="&lt;b&gt;Execution layer&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=west;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;strokeWidth=1;shadow=1;" parent="1" vertex="1"> <mxGeometry x="495" y="25" width="440" height="450" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-63" value="" style="rounded=1;whiteSpace=wrap;html=1;hachureGap=4;fontFamily=Helvetica;strokeColor=default;fillColor=default;glass=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="10.003376623376589" y="39.550041395623865" width="393.8931818181818" height="227.41573033707866" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-8" value="&lt;b&gt;Adapter&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry width="170" height="190" relative="1" as="geometry"> <mxPoint x="30" y="55" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-43" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="38.86363636363636" y="304.0449438202247" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-9" value="&lt;b&gt;MoveVM&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-41" value="move-execution/move-vm-runtime" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-44" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="296.59090909090907" y="306.51685393258424" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-13" value="&lt;b&gt;Framework&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-42" value="iota-framework crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-56" value="Init" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=45;entryPerimeter=0;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-39" target="3kIInuhs_YmBb0iZ2eFI-9" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-58" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="46.16883116883113" y="88.98824364281488" width="378.4090909090909" height="168.0904080425784" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-40" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1" connectable="0"> <mxGeometry width="128.57142857142858" height="138.42696629213484" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-10" value="&lt;b&gt;Execution-engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-40" vertex="1"> <mxGeometry width="128.57142857142856" height="92.63157894736842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-39" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-adapter/execution-engine" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1"> <mxGeometry x="5.849999999999999" y="92.6274157303371" width="109.575" height="45.79955056179776" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-61" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=45;exitDy=100;exitPerimeter=0;entryX=1;entryY=0.206;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-13" target="3kIInuhs_YmBb0iZ2eFI-8" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-62" value="&lt;h4&gt;&lt;font face=&quot;Helvetica&quot;&gt;native fns etc&lt;/font&gt;&lt;/h4&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-61" vertex="1" connectable="0"> <mxGeometry x="-0.1741" y="-1" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-45" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="276.1363636363636" y="98.87640449438204" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-48" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-45" vertex="1" connectable="0"> <mxGeometry width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-46" value="&lt;b&gt;Object runtime&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-47" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-move-natives" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-64" value="&lt;span style=&quot;caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;&quot;&gt;&lt;b style=&quot;&quot;&gt;iota-execution crate&lt;/b&gt;&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;fillColor=default;fontColor=default;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="268.5363636363636" y="49.43820224719101" width="117.47045454545454" height="29.662921348314605" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-15" value="&lt;b&gt;Nodes network(Iota node)&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;shadow=1;strokeWidth=1;" parent="1" vertex="1"> <mxGeometry x="-210" y="30" width="380" height="430" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-16" value="&lt;b&gt;Node&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry width="330" height="370" relative="1" as="geometry"> <mxPoint x="20" y="40" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-17" value="&lt;b&gt;API&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="42.2239247311828" y="92.97297297297297" width="85.80645161290323" height="267.2972972972973" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-18" value="&lt;b&gt;Ledger storage&lt;/b&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="253.33129032258068" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-65" value="&lt;b&gt;Indexer&lt;/b&gt;&lt;div&gt;&lt;b&gt;(read/sync db)&lt;/b&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="153.22580645161293" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-19" value="&lt;b&gt;Consensus engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="142.5" y="81.91" width="97.5" height="78.09" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-20" value="&lt;b&gt;Network&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="141.25" y="185.91" width="97.5" height="81.43" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-1" value="&lt;b&gt;Core&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="251.77" y="150" width="75.11" height="60" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-34" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="500" width="120" height="74.55" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-31" value="&lt;b&gt;iota-json-rpc&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry width="120" height="50" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-32" value="&lt;div&gt;iota-json-rpc crate&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry x="20" y="50.00454545454545" width="80" height="24.545454545454547" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-36" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="670" width="100" height="70" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-28" value="&lt;b&gt;iota-cli&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry width="100" height="40" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-35" value="iota crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry y="40" width="90" height="30" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-49" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=45;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=0;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-28" target="3kIInuhs_YmBb0iZ2eFI-32" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-50" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=55;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-31" target="3kIInuhs_YmBb0iZ2eFI-65" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-6" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-7" target="3kIInuhs_YmBb0iZ2eFI-18" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-11" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=32.385;exitDy=0;exitPerimeter=0;entryX=0.407;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;strokeWidth=1;shadow=1;" parent="1" source="C7P2nbfdh_euxFz_vEXo-1" target="3kIInuhs_YmBb0iZ2eFI-7" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> "><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-7"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 710 31 L 1140 31 L 1150 41 L 1150 481 L 720 481 L 710 471 L 710 31 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(180,930,256)" pointer-events="all"/><path d="M 720 481 L 720 41 L 710 31 M 720 41 L 1150 41" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(180,930,256)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 423px; height: 1px; padding-top: 38px; margin-left: 717px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution layer</b></div></div></div></foreignObject><text x="717" y="50" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px">Execution layer</text></switch></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-63"><g><rect x="720" y="70.55" width="393.89" height="227.42" rx="34.11" ry="34.11" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-8"><g><path d="M 730 96 L 910 96 L 920 106 L 920 266 L 740 266 L 730 256 L 730 96 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,825,181)" pointer-events="all"/><path d="M 740 266 L 740 106 L 730 96 M 740 106 L 920 106" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,825,181)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 153px; height: 1px; padding-top: 103px; margin-left: 746px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Adapter</b></div></div></div></foreignObject><text x="823" y="115" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Adapter</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-43"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-9"><g><path d="M 760.45 323.46 L 829.55 323.46 L 839.55 333.46 L 839.55 425.73 L 770.45 425.73 L 760.45 415.73 L 760.45 323.46 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,800,374.6)" pointer-events="all"/><path d="M 770.45 425.73 L 770.45 333.46 L 760.45 323.46 M 770.45 333.46 L 839.55 333.46" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,800,374.6)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 352px; margin-left: 755px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>MoveVM</b></div></div></div></foreignObject><text x="798" y="364" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">MoveVM</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-41"><g><rect x="748.86" y="414.15" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 434px; margin-left: 750px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">move-execution/move-vm-runtime</div></div></div></foreignObject><text x="795" y="438" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">move-execution/...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-44"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-13"><g><path d="M 1018.18 325.93 L 1087.28 325.93 L 1097.28 335.93 L 1097.28 428.2 L 1028.18 428.2 L 1018.18 418.2 L 1018.18 325.93 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1057.73,377.07)" pointer-events="all"/><path d="M 1028.18 428.2 L 1028.18 335.93 L 1018.18 325.93 M 1028.18 335.93 L 1097.28 335.93" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1057.73,377.07)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 355px; margin-left: 1013px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Framework</b></div></div></div></foreignObject><text x="1055" y="367" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Framework</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-42"><g><rect x="1006.59" y="416.62" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 436px; margin-left: 1008px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-framework crate</div></div></div></foreignObject><text x="1053" y="440" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-framework...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-56"><g><path d="M 816.81 258.42 L 816.8 286.7 Q 816.8 296.7 811.45 296.7 L 808.78 296.7 Q 806.1 296.7 806.11 306.7 L 806.13 328.68" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 806.14 333.93 L 802.63 326.93 L 806.13 328.68 L 809.63 326.92 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 297px; margin-left: 811px;"><div data-drawio-colors="color: rgb(240, 240, 240); background-color: rgb(24, 20, 29); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; background-color: rgb(24, 20, 29); white-space: nowrap;">Init</div></div></div></foreignObject><text x="811" y="300" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="11px" text-anchor="middle">Init</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-58"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-40"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-10"><g><path d="M 774.14 102.02 L 856.77 102.02 L 866.77 112.02 L 866.77 230.59 L 784.14 230.59 L 774.14 220.59 L 774.14 102.02 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,820.45,166.3)" pointer-events="all"/><path d="M 784.14 230.59 L 784.14 112.02 L 774.14 102.02 M 784.14 112.02 L 866.77 112.02" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,820.45,166.3)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 137px; margin-left: 762px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution-engine</b></div></div></div></foreignObject><text x="818" y="149" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Execution-engine</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-39"><g><rect x="762.02" y="212.62" width="109.58" height="45.8" rx="6.87" ry="6.87" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 236px; margin-left: 763px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-adapter/execution-engine</div></div></div></foreignObject><text x="817" y="239" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">...execution/iota-...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-61"><g><path d="M 1008.86 382.52 L 885 382.5 Q 875 382.5 875 372.5 L 874.98 282.37" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 874.98 277.12 L 878.48 284.12 L 874.98 282.37 L 871.48 284.12 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-62"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 382px; margin-left: 910px;"><div data-drawio-colors="color: rgb(240, 240, 240); background-color: rgb(24, 20, 29); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: "Architects Daughter"; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; background-color: rgb(24, 20, 29); white-space: nowrap;"><h4><font face="Helvetica">native fns etc</font></h4></div></div></div></foreignObject><text x="910" y="385" fill="rgb(240, 240, 240)" font-family=""Architects Daughter"" font-size="11px" text-anchor="middle">native fns etc</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-45"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-48"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-46"><g><path d="M 997.72 118.29 L 1066.82 118.29 L 1076.82 128.29 L 1076.82 220.56 L 1007.72 220.56 L 997.72 210.56 L 997.72 118.29 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1037.27,169.43)" pointer-events="all"/><path d="M 1007.72 220.56 L 1007.72 128.29 L 997.72 118.29 M 1007.72 128.29 L 1076.82 128.29" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1037.27,169.43)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 147px; margin-left: 992px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Object runtime</b></div></div></div></foreignObject><text x="1035" y="159" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Object runtime</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-47"><g><rect x="986.14" y="208.98" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 229px; margin-left: 987px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-move-natives</div></div></div></foreignObject><text x="1032" y="232" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">...execution/io...</text></switch></g></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-64"><g><rect x="978.54" y="80.44" width="117.47" height="29.66" rx="4.45" ry="4.45" fill="rgb(24, 20, 29)" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 115px; height: 1px; padding-top: 87px; margin-left: 981px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: "Architects Daughter"; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;"><b style="">iota-execution crate</b></span></div></div></div></foreignObject><text x="981" y="99" fill="rgb(240, 240, 240)" font-family=""Architects Daughter"" font-size="12px">iota-execution crate</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-15"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M -20 61 L 400 61 L 410 71 L 410 441 L -10 441 L -20 431 L -20 61 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,251)" pointer-events="all"/><path d="M -10 441 L -10 71 L -20 61 M -10 71 L 410 71" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,251)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 363px; height: 1px; padding-top: 53px; margin-left: 12px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Nodes network(Iota node)</b></div></div></div></foreignObject><text x="12" y="65" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px">Nodes network(Iota node)</text></switch></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-16"><g><path d="M 5 96 L 365 96 L 375 106 L 375 426 L 15 426 L 5 416 L 5 96 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,190,261)" pointer-events="all"/><path d="M 15 426 L 15 106 L 5 96 M 15 106 L 375 106" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,190,261)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 313px; height: 1px; padding-top: 93px; margin-left: 31px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Node</b></div></div></div></foreignObject><text x="188" y="105" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Node</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-17"><g><path d="M -43.52 219.72 L 213.78 219.72 L 223.78 229.72 L 223.78 305.52 L -33.52 305.52 L -43.52 295.52 L -43.52 219.72 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,90.13,262.62)" pointer-events="all"/><path d="M -33.52 305.52 L -33.52 229.72 L -43.52 219.72 M -33.52 229.72 L 223.78 229.72" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,90.13,262.62)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 69px; height: 1px; padding-top: 146px; margin-left: 53px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>API</b></div></div></div></foreignObject><text x="88" y="158" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">API</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-18"><g><path d="M 258.33 347.9 C 258.33 339.62 274.8 332.9 295.11 332.9 C 304.86 332.9 314.21 334.48 321.11 337.3 C 328.01 340.11 331.88 343.93 331.88 347.9 L 331.88 410.88 C 331.88 419.16 315.42 425.88 295.11 425.88 C 274.8 425.88 258.33 419.16 258.33 410.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/><path d="M 331.88 347.9 C 331.88 356.19 315.42 362.9 295.11 362.9 C 274.8 362.9 258.33 356.19 258.33 347.9" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 392px; margin-left: 259px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Ledger storage</b></div></div></div></foreignObject><text x="295" y="395" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Ledger stora...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-65"><g><path d="M 158.23 347.9 C 158.23 339.62 174.69 332.9 195 332.9 C 204.75 332.9 214.11 334.48 221 337.3 C 227.9 340.11 231.77 343.93 231.77 347.9 L 231.77 410.88 C 231.77 419.16 215.31 425.88 195 425.88 C 174.69 425.88 158.23 419.16 158.23 410.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/><path d="M 231.77 347.9 C 231.77 356.19 215.31 362.9 195 362.9 C 174.69 362.9 158.23 356.19 158.23 347.9" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 392px; margin-left: 159px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Indexer</b><div><b>(read/sync db)</b></div></div></div></div></foreignObject><text x="195" y="395" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Indexer...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-19"><g><path d="M 157.2 108.2 L 225.29 108.2 L 235.29 118.2 L 235.29 205.7 L 167.2 205.7 L 157.2 195.7 L 157.2 108.2 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,196.25,156.95)" pointer-events="all"/><path d="M 167.2 205.7 L 167.2 118.2 L 157.2 108.2 M 167.2 118.2 L 235.29 118.2" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,196.25,156.95)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 135px; margin-left: 154px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Consensus engine</b></div></div></div></foreignObject><text x="194" y="147" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Consensus engi...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-20"><g><path d="M 154.28 213.88 L 225.72 213.88 L 235.72 223.88 L 235.72 311.38 L 164.28 311.38 L 154.28 301.38 L 154.28 213.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,262.63)" pointer-events="all"/><path d="M 164.28 311.38 L 164.28 223.88 L 154.28 213.88 M 164.28 223.88 L 235.72 223.88" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,262.63)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 239px; margin-left: 152px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Network</b></div></div></div></foreignObject><text x="193" y="251" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Network</text></switch></g></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-1"><g><path d="M 264.32 178.44 L 314.32 178.44 L 324.32 188.44 L 324.32 253.56 L 274.32 253.56 L 264.32 243.56 L 264.32 178.44 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,294.33,216)" pointer-events="all"/><path d="M 274.32 253.56 L 274.32 188.44 L 264.32 178.44 M 274.32 188.44 L 324.32 188.44" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,294.33,216)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 203px; margin-left: 263px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Core</b></div></div></div></foreignObject><text x="292" y="215" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Core</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-34"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-31"><g><path d="M 100 471 L 140 471 L 150 481 L 150 591 L 110 591 L 100 581 L 100 471 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,125,531)" pointer-events="all"/><path d="M 110 591 L 110 481 L 100 471 M 110 481 L 150 481" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,125,531)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 103px; height: 1px; padding-top: 523px; margin-left: 71px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-json-rpc</b></div></div></div></foreignObject><text x="123" y="535" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-json-rpc</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-32"><g><rect x="85" y="556" width="80" height="24.55" rx="3.68" ry="3.68" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 568px; margin-left: 86px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div>iota-json-rpc crate<br /></div></div></div></div></foreignObject><text x="125" y="572" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-json-rpc...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-36"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-28"><g><path d="M 95 646 L 125 646 L 135 656 L 135 746 L 105 746 L 95 736 L 95 646 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,115,696)" pointer-events="all"/><path d="M 105 746 L 105 656 L 95 646 M 105 656 L 135 656" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,115,696)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 693px; margin-left: 71px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-cli</b></div></div></div></foreignObject><text x="113" y="705" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-cli</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-35"><g><rect x="65" y="716" width="90" height="30" rx="4.5" ry="4.5" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 731px; margin-left: 66px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota crate</div></div></div></foreignObject><text x="110" y="735" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota crate</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-49"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 120 676 L 120 638.3 Q 120 628.3 122.5 628.3 L 123.75 628.3 Q 125 628.3 125 618.3 L 125 586.92" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 125 581.67 L 128.5 588.67 L 125 586.92 L 121.5 588.67 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-50"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 130 506 L 130 476 Q 130 466 140 466 L 185 466 Q 195 466 195 456 L 195 432.25" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 195 427 L 198.5 434 L 195 432.25 L 191.5 434 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-6"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 710 256 L 530.9 256 Q 520.9 256 520.9 266 L 520.9 369.4 Q 520.9 379.4 510.9 379.4 L 338.25 379.39" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 333 379.39 L 340 375.89 L 338.25 379.39 L 340 382.89 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-11"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 331.88 218.38 L 511 218.4 Q 521 218.4 521 208.4 L 521 21 Q 521 11 531 11 L 960.9 11 Q 970.9 11 970.91 17.82 L 970.91 24.63" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 970.92 29.88 L 967.41 22.89 L 970.91 24.63 L 974.41 22.88 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file diff --git a/docs/site/static/img/concepts/execution-architecture/iota-architecture.svg b/docs/site/static/img/concepts/execution-architecture/iota-architecture.svg index 90113451977..ba261ecd774 100644 --- a/docs/site/static/img/concepts/execution-architecture/iota-architecture.svg +++ b/docs/site/static/img/concepts/execution-architecture/iota-architecture.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Do not edit this file with editors other than draw.io --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1151px" height="711px" viewBox="-0.5 -0.5 1151 711" content="<mxfile host="app.diagrams.net" modified="2024-06-06T13:06:20.290Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15" etag="_bzW2ujPehIvRME25DFx" version="24.4.13" type="device"> <diagram name="Page-1" id="jhOoJUkd9Zucpb-pnEYY"> <mxGraphModel dx="2074" dy="816" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="#ffffff" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="3kIInuhs_YmBb0iZ2eFI-7" value="&lt;b&gt;Execution layer&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="1" vertex="1"> <mxGeometry x="490" y="30" width="450" height="440" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-63" value="" style="rounded=1;whiteSpace=wrap;html=1;hachureGap=4;fontFamily=Helvetica;strokeColor=default;fillColor=default;glass=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="10.003376623376589" y="39.550041395623865" width="393.8931818181818" height="227.41573033707866" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-8" value="&lt;b&gt;Adapter&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry width="170" height="190" relative="1" as="geometry"> <mxPoint x="30" y="55" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-43" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="38.86363636363636" y="304.0449438202247" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-9" value="&lt;b&gt;MoveVM&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-41" value="move-execution/move-vm-runtime" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-44" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="296.59090909090907" y="306.51685393258424" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-13" value="&lt;b&gt;Framework&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-42" value="iota-framework crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-56" value="Init" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=45;entryPerimeter=0;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-39" target="3kIInuhs_YmBb0iZ2eFI-9" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-58" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="46.16883116883113" y="88.98824364281488" width="378.4090909090909" height="168.0904080425784" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-40" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1" connectable="0"> <mxGeometry width="128.57142857142858" height="138.42696629213484" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-10" value="&lt;b&gt;Execution-engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-40" vertex="1"> <mxGeometry width="128.57142857142856" height="92.63157894736842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-39" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-adapter/execution-engine" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1"> <mxGeometry x="5.849999999999999" y="92.6274157303371" width="109.575" height="45.79955056179776" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-61" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=45;exitDy=100;exitPerimeter=0;entryX=1;entryY=0.206;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-13" target="3kIInuhs_YmBb0iZ2eFI-8" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-62" value="&lt;h4&gt;&lt;font face=&quot;Helvetica&quot;&gt;native fns etc&lt;/font&gt;&lt;/h4&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-61" vertex="1" connectable="0"> <mxGeometry x="-0.1741" y="-1" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-45" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="276.1363636363636" y="98.87640449438204" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-48" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-45" vertex="1" connectable="0"> <mxGeometry width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-46" value="&lt;b&gt;Object runtime&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-47" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-move-natives" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-64" value="&lt;span style=&quot;caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(251, 251, 251); text-decoration: none; float: none; display: inline !important;&quot;&gt;&lt;b&gt;iota-execution crate&lt;/b&gt;&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="268.5363636363636" y="49.43820224719101" width="117.47045454545454" height="29.662921348314605" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-15" value="&lt;b&gt;Nodes network(Iota node)&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="1" vertex="1"> <mxGeometry x="-210" y="30" width="380" height="430" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-16" value="&lt;b&gt;Node&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry width="330" height="370" relative="1" as="geometry"> <mxPoint x="20" y="40" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-17" value="&lt;b&gt;API&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="42.2239247311828" y="92.97297297297297" width="85.80645161290323" height="267.2972972972973" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-18" value="&lt;b&gt;Ledger storage&lt;/b&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="253.33129032258068" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-65" value="&lt;b&gt;Indexer&lt;/b&gt;&lt;div&gt;&lt;b&gt;(read/sync db)&lt;/b&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="153.22580645161293" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-19" value="&lt;b&gt;Consensus engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="142.5" y="81.91" width="97.5" height="78.09" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-20" value="&lt;b&gt;Network&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="141.25" y="185.91" width="97.5" height="81.43" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-1" value="&lt;b&gt;Core&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" vertex="1" parent="3kIInuhs_YmBb0iZ2eFI-15"> <mxGeometry x="251.77" y="150" width="75.11" height="60" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-34" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="500" width="120" height="74.55" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-31" value="&lt;b&gt;iota-json-rpc&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry width="120" height="50" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-32" value="&lt;div&gt;iota-json-rpc crate&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry x="20" y="50.00454545454545" width="80" height="24.545454545454547" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-36" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="670" width="100" height="70" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-28" value="&lt;b&gt;iota-cli&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry width="100" height="40" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-35" value="iota-cli crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry y="40" width="90" height="30" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-49" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=45;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=0;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-28" target="3kIInuhs_YmBb0iZ2eFI-32" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-50" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=55;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-31" target="3kIInuhs_YmBb0iZ2eFI-65" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-6" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;" edge="1" parent="1" source="3kIInuhs_YmBb0iZ2eFI-7" target="3kIInuhs_YmBb0iZ2eFI-18"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-11" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=32.385;exitDy=0;exitPerimeter=0;entryX=0.407;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;" edge="1" parent="1" source="C7P2nbfdh_euxFz_vEXo-1" target="3kIInuhs_YmBb0iZ2eFI-7"> <mxGeometry relative="1" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> " style="background-color: rgb(255, 255, 255);"><defs/><rect fill="#ffffff" width="100%" height="100%" x="0" y="0"/><g><g><path d="M 705 -5 L 1135 -5 L 1145 5 L 1145 445 L 715 445 L 705 435 L 705 -5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,925,220)" pointer-events="all"/><path d="M 715 445 L 715 5 L 705 -5 M 715 5 L 1145 5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,925,220)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 433px; height: 1px; padding-top: 17px; margin-left: 707px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution layer</b></div></div></div></foreignObject><text x="707" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Execution layer</text></switch></g></g><g><rect x="710" y="39.55" width="393.89" height="227.42" rx="34.11" ry="34.11" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><path d="M 720 65 L 900 65 L 910 75 L 910 235 L 730 235 L 720 225 L 720 65 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,815,150)" pointer-events="all"/><path d="M 730 235 L 730 75 L 720 65 M 730 75 L 910 75" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,815,150)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 153px; height: 1px; padding-top: 72px; margin-left: 736px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Adapter</b></div></div></div></foreignObject><text x="813" y="84" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Adapter</text></switch></g></g><g/><g><path d="M 750.45 292.46 L 819.55 292.46 L 829.55 302.46 L 829.55 394.73 L 760.45 394.73 L 750.45 384.73 L 750.45 292.46 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,790,343.6)" pointer-events="all"/><path d="M 760.45 394.73 L 760.45 302.46 L 750.45 292.46 M 760.45 302.46 L 829.55 302.46" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,790,343.6)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 321px; margin-left: 745px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>MoveVM</b></div></div></div></foreignObject><text x="788" y="333" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">MoveVM</text></switch></g></g><g><rect x="738.86" y="383.15" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 403px; margin-left: 740px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">move-execution/move-vm-runtime</div></div></div></foreignObject><text x="785" y="407" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">move-execution/...</text></switch></g></g><g/><g><path d="M 1008.18 294.93 L 1077.28 294.93 L 1087.28 304.93 L 1087.28 397.2 L 1018.18 397.2 L 1008.18 387.2 L 1008.18 294.93 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1047.73,346.07)" pointer-events="all"/><path d="M 1018.18 397.2 L 1018.18 304.93 L 1008.18 294.93 M 1018.18 304.93 L 1087.28 304.93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1047.73,346.07)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 324px; margin-left: 1003px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Framework</b></div></div></div></foreignObject><text x="1045" y="336" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Framework</text></switch></g></g><g><rect x="996.59" y="385.62" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 405px; margin-left: 998px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-framework crate</div></div></div></foreignObject><text x="1043" y="409" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-framework...</text></switch></g></g><g><path d="M 806.81 227.42 L 806.8 255.7 Q 806.8 265.7 801.45 265.7 L 798.77 265.7 Q 796.1 265.7 796.11 275.7 L 796.13 297.68" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 796.14 302.93 L 792.63 295.93 L 796.13 297.68 L 799.63 295.92 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 266px; margin-left: 801px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Init</div></div></div></foreignObject><text x="801" y="269" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Init</text></switch></g></g><g/><g/><g><path d="M 764.14 71.02 L 846.77 71.02 L 856.77 81.02 L 856.77 199.59 L 774.14 199.59 L 764.14 189.59 L 764.14 71.02 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,810.45,135.3)" pointer-events="all"/><path d="M 774.14 199.59 L 774.14 81.02 L 764.14 71.02 M 774.14 81.02 L 856.77 81.02" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,810.45,135.3)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 106px; margin-left: 752px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution-engine</b></div></div></div></foreignObject><text x="808" y="118" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Execution-engine</text></switch></g></g><g><rect x="752.02" y="181.62" width="109.58" height="45.8" rx="6.87" ry="6.87" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 205px; margin-left: 753px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-adapter/execution-engine</div></div></div></foreignObject><text x="807" y="208" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">...execution/iota-...</text></switch></g></g><g><path d="M 998.86 351.52 L 875 351.5 Q 865 351.5 865 341.5 L 864.98 251.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 864.98 246.12 L 868.48 253.12 L 864.98 251.37 L 861.48 253.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 351px; margin-left: 900px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: "Architects Daughter"; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"><h4><font face="Helvetica">native fns etc</font></h4></div></div></div></foreignObject><text x="900" y="354" fill="rgb(0, 0, 0)" font-family="Architects Daughter" font-size="11px" text-anchor="middle">native fns etc</text></switch></g></g><g/><g/><g><path d="M 987.72 87.29 L 1056.82 87.29 L 1066.82 97.29 L 1066.82 189.56 L 997.72 189.56 L 987.72 179.56 L 987.72 87.29 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1027.27,138.43)" pointer-events="all"/><path d="M 997.72 189.56 L 997.72 97.29 L 987.72 87.29 M 997.72 97.29 L 1066.82 97.29" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1027.27,138.43)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 116px; margin-left: 982px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Object runtime</b></div></div></div></foreignObject><text x="1025" y="128" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Object runtime</text></switch></g></g><g><rect x="976.14" y="177.98" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 198px; margin-left: 977px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-move-natives</div></div></div></foreignObject><text x="1022" y="201" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">...execution/io...</text></switch></g></g><g><rect x="968.54" y="49.44" width="117.47" height="29.66" rx="4.45" ry="4.45" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 115px; height: 1px; padding-top: 56px; margin-left: 971px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: "Architects Daughter"; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(251, 251, 251); text-decoration: none; float: none; display: inline !important;"><b>iota-execution crate</b></span></div></div></div></foreignObject><text x="971" y="68" fill="rgb(0, 0, 0)" font-family="Architects Daughter" font-size="12px">iota-execution crate</text></switch></g></g><g><path d="M -25 25 L 395 25 L 405 35 L 405 405 L -15 405 L -25 395 L -25 25 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,215)" pointer-events="all"/><path d="M -15 405 L -15 35 L -25 25 M -15 35 L 405 35" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,215)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 363px; height: 1px; padding-top: 17px; margin-left: 7px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Nodes network(Iota node)</b></div></div></div></foreignObject><text x="7" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Nodes network(Iota node)</text></switch></g></g><g><path d="M 0 60 L 360 60 L 370 70 L 370 390 L 10 390 L 0 380 L 0 60 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,185,225)" pointer-events="all"/><path d="M 10 390 L 10 70 L 0 60 M 10 70 L 370 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,185,225)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 313px; height: 1px; padding-top: 57px; margin-left: 26px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Node</b></div></div></div></foreignObject><text x="183" y="69" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Node</text></switch></g></g><g><path d="M -48.52 183.72 L 208.78 183.72 L 218.78 193.72 L 218.78 269.52 L -38.52 269.52 L -48.52 259.52 L -48.52 183.72 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,85.13,226.62)" pointer-events="all"/><path d="M -38.52 269.52 L -38.52 193.72 L -48.52 183.72 M -38.52 193.72 L 218.78 193.72" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,85.13,226.62)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 69px; height: 1px; padding-top: 110px; margin-left: 48px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>API</b></div></div></div></foreignObject><text x="83" y="122" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">API</text></switch></g></g><g><path d="M 253.33 311.9 C 253.33 303.62 269.8 296.9 290.11 296.9 C 299.86 296.9 309.21 298.48 316.11 301.3 C 323.01 304.11 326.88 307.93 326.88 311.9 L 326.88 374.88 C 326.88 383.16 310.42 389.88 290.11 389.88 C 269.8 389.88 253.33 383.16 253.33 374.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 326.88 311.9 C 326.88 320.19 310.42 326.9 290.11 326.9 C 269.8 326.9 253.33 320.19 253.33 311.9" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 356px; margin-left: 254px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Ledger storage</b></div></div></div></foreignObject><text x="290" y="359" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Ledger stora...</text></switch></g></g><g><path d="M 153.23 311.9 C 153.23 303.62 169.69 296.9 190 296.9 C 199.75 296.9 209.11 298.48 216 301.3 C 222.9 304.11 226.77 307.93 226.77 311.9 L 226.77 374.88 C 226.77 383.16 210.31 389.88 190 389.88 C 169.69 389.88 153.23 383.16 153.23 374.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 226.77 311.9 C 226.77 320.19 210.31 326.9 190 326.9 C 169.69 326.9 153.23 320.19 153.23 311.9" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 356px; margin-left: 154px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Indexer</b><div><b>(read/sync db)</b></div></div></div></div></foreignObject><text x="190" y="359" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Indexer...</text></switch></g></g><g><path d="M 152.2 72.2 L 220.29 72.2 L 230.29 82.2 L 230.29 169.7 L 162.2 169.7 L 152.2 159.7 L 152.2 72.2 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,191.25,120.95)" pointer-events="all"/><path d="M 162.2 169.7 L 162.2 82.2 L 152.2 72.2 M 162.2 82.2 L 230.29 82.2" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,191.25,120.95)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 99px; margin-left: 149px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Consensus engine</b></div></div></div></foreignObject><text x="189" y="111" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Consensus engi...</text></switch></g></g><g><path d="M 149.29 177.88 L 220.72 177.88 L 230.72 187.88 L 230.72 275.38 L 159.29 275.38 L 149.29 265.38 L 149.29 177.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,226.63)" pointer-events="all"/><path d="M 159.29 275.38 L 159.29 187.88 L 149.29 177.88 M 159.29 187.88 L 230.72 187.88" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,226.63)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 203px; margin-left: 147px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Network</b></div></div></div></foreignObject><text x="188" y="215" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Network</text></switch></g></g><g><path d="M 259.32 142.45 L 309.32 142.45 L 319.32 152.45 L 319.32 217.56 L 269.32 217.56 L 259.32 207.56 L 259.32 142.45 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,289.32,180)" pointer-events="all"/><path d="M 269.32 217.56 L 269.32 152.45 L 259.32 142.45 M 269.32 152.45 L 319.32 152.45" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,289.32,180)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 167px; margin-left: 258px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Core</b></div></div></div></foreignObject><text x="287" y="179" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Core</text></switch></g></g><g/><g><path d="M 95 435 L 135 435 L 145 445 L 145 555 L 105 555 L 95 545 L 95 435 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,120,495)" pointer-events="all"/><path d="M 105 555 L 105 445 L 95 435 M 105 445 L 145 445" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,120,495)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 103px; height: 1px; padding-top: 487px; margin-left: 66px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-json-rpc</b></div></div></div></foreignObject><text x="118" y="499" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-json-rpc</text></switch></g></g><g><rect x="80" y="520" width="80" height="24.55" rx="3.68" ry="3.68" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 532px; margin-left: 81px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div>iota-json-rpc crate<br /></div></div></div></div></foreignObject><text x="120" y="536" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-json-rpc...</text></switch></g></g><g/><g><path d="M 90 610 L 120 610 L 130 620 L 130 710 L 100 710 L 90 700 L 90 610 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,110,660)" pointer-events="all"/><path d="M 100 710 L 100 620 L 90 610 M 100 620 L 130 620" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,110,660)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 657px; margin-left: 66px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-cli</b></div></div></div></foreignObject><text x="108" y="669" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-cli</text></switch></g></g><g><rect x="60" y="680" width="90" height="30" rx="4.5" ry="4.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 695px; margin-left: 61px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-cli crate</div></div></div></foreignObject><text x="105" y="699" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-cli crate</text></switch></g></g><g><path d="M 115 640 L 115 602.3 Q 115 592.3 117.5 592.3 L 118.75 592.3 Q 120 592.3 120 582.3 L 120 550.92" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 120 545.67 L 123.5 552.67 L 120 550.92 L 116.5 552.67 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 125 470 L 125 440 Q 125 430 135 430 L 180 430 Q 190 430 190 420 L 190 396.25" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190 391 L 193.5 398 L 190 396.25 L 186.5 398 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 700 220 L 523.4 220 Q 513.4 220 513.4 230 L 513.4 333.4 Q 513.4 343.4 503.4 343.4 L 333.25 343.39" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 328 343.39 L 335 339.89 L 333.25 343.39 L 335 346.89 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 326.88 182.39 L 503.5 182.4 Q 513.5 182.4 513.5 180.75 L 513.5 179.92 Q 513.5 179.1 523.5 179.1 L 693.63 179.08" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 698.88 179.08 L 691.88 182.58 L 693.63 179.08 L 691.88 175.58 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1151px" height="711px" viewBox="-0.5 -0.5 1151 711" content="<mxfile host="app.diagrams.net" modified="2024-06-06T13:06:20.290Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15" etag="_bzW2ujPehIvRME25DFx" version="24.4.13" type="device"> <diagram name="Page-1" id="jhOoJUkd9Zucpb-pnEYY"> <mxGraphModel dx="2074" dy="816" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="#ffffff" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="3kIInuhs_YmBb0iZ2eFI-7" value="&lt;b&gt;Execution layer&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="1" vertex="1"> <mxGeometry x="490" y="30" width="450" height="440" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-63" value="" style="rounded=1;whiteSpace=wrap;html=1;hachureGap=4;fontFamily=Helvetica;strokeColor=default;fillColor=default;glass=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="10.003376623376589" y="39.550041395623865" width="393.8931818181818" height="227.41573033707866" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-8" value="&lt;b&gt;Adapter&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry width="170" height="190" relative="1" as="geometry"> <mxPoint x="30" y="55" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-43" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="38.86363636363636" y="304.0449438202247" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-9" value="&lt;b&gt;MoveVM&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-41" value="move-execution/move-vm-runtime" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-44" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="296.59090909090907" y="306.51685393258424" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-13" value="&lt;b&gt;Framework&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-42" value="iota-framework crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-56" value="Init" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=45;entryPerimeter=0;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-39" target="3kIInuhs_YmBb0iZ2eFI-9" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-58" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="46.16883116883113" y="88.98824364281488" width="378.4090909090909" height="168.0904080425784" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-40" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1" connectable="0"> <mxGeometry width="128.57142857142858" height="138.42696629213484" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-10" value="&lt;b&gt;Execution-engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-40" vertex="1"> <mxGeometry width="128.57142857142856" height="92.63157894736842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-39" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-adapter/execution-engine" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1"> <mxGeometry x="5.849999999999999" y="92.6274157303371" width="109.575" height="45.79955056179776" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-61" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=45;exitDy=100;exitPerimeter=0;entryX=1;entryY=0.206;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-13" target="3kIInuhs_YmBb0iZ2eFI-8" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-62" value="&lt;h4&gt;&lt;font face=&quot;Helvetica&quot;&gt;native fns etc&lt;/font&gt;&lt;/h4&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-61" vertex="1" connectable="0"> <mxGeometry x="-0.1741" y="-1" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-45" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="276.1363636363636" y="98.87640449438204" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-48" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-45" vertex="1" connectable="0"> <mxGeometry width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-46" value="&lt;b&gt;Object runtime&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-47" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-move-natives" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-64" value="&lt;span style=&quot;caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(251, 251, 251); text-decoration: none; float: none; display: inline !important;&quot;&gt;&lt;b&gt;iota-execution crate&lt;/b&gt;&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="268.5363636363636" y="49.43820224719101" width="117.47045454545454" height="29.662921348314605" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-15" value="&lt;b&gt;Nodes network(Iota node)&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="1" vertex="1"> <mxGeometry x="-210" y="30" width="380" height="430" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-16" value="&lt;b&gt;Node&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry width="330" height="370" relative="1" as="geometry"> <mxPoint x="20" y="40" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-17" value="&lt;b&gt;API&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="42.2239247311828" y="92.97297297297297" width="85.80645161290323" height="267.2972972972973" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-18" value="&lt;b&gt;Ledger storage&lt;/b&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="253.33129032258068" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-65" value="&lt;b&gt;Indexer&lt;/b&gt;&lt;div&gt;&lt;b&gt;(read/sync db)&lt;/b&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="153.22580645161293" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-19" value="&lt;b&gt;Consensus engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="142.5" y="81.91" width="97.5" height="78.09" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-20" value="&lt;b&gt;Network&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="141.25" y="185.91" width="97.5" height="81.43" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-1" value="&lt;b&gt;Core&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" vertex="1" parent="3kIInuhs_YmBb0iZ2eFI-15"> <mxGeometry x="251.77" y="150" width="75.11" height="60" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-34" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="500" width="120" height="74.55" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-31" value="&lt;b&gt;iota-json-rpc&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry width="120" height="50" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-32" value="&lt;div&gt;iota-json-rpc crate&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry x="20" y="50.00454545454545" width="80" height="24.545454545454547" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-36" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="670" width="100" height="70" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-28" value="&lt;b&gt;iota-cli&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry width="100" height="40" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-35" value="iota crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry y="40" width="90" height="30" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-49" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=45;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=0;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-28" target="3kIInuhs_YmBb0iZ2eFI-32" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-50" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=55;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-31" target="3kIInuhs_YmBb0iZ2eFI-65" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-6" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;" edge="1" parent="1" source="3kIInuhs_YmBb0iZ2eFI-7" target="3kIInuhs_YmBb0iZ2eFI-18"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-11" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=32.385;exitDy=0;exitPerimeter=0;entryX=0.407;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;" edge="1" parent="1" source="C7P2nbfdh_euxFz_vEXo-1" target="3kIInuhs_YmBb0iZ2eFI-7"> <mxGeometry relative="1" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> " style="background-color: rgb(255, 255, 255);"><defs/><rect fill="#ffffff" width="100%" height="100%" x="0" y="0"/><g><g><path d="M 705 -5 L 1135 -5 L 1145 5 L 1145 445 L 715 445 L 705 435 L 705 -5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,925,220)" pointer-events="all"/><path d="M 715 445 L 715 5 L 705 -5 M 715 5 L 1145 5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,925,220)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 433px; height: 1px; padding-top: 17px; margin-left: 707px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution layer</b></div></div></div></foreignObject><text x="707" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Execution layer</text></switch></g></g><g><rect x="710" y="39.55" width="393.89" height="227.42" rx="34.11" ry="34.11" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><path d="M 720 65 L 900 65 L 910 75 L 910 235 L 730 235 L 720 225 L 720 65 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,815,150)" pointer-events="all"/><path d="M 730 235 L 730 75 L 720 65 M 730 75 L 910 75" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,815,150)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 153px; height: 1px; padding-top: 72px; margin-left: 736px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Adapter</b></div></div></div></foreignObject><text x="813" y="84" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Adapter</text></switch></g></g><g/><g><path d="M 750.45 292.46 L 819.55 292.46 L 829.55 302.46 L 829.55 394.73 L 760.45 394.73 L 750.45 384.73 L 750.45 292.46 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,790,343.6)" pointer-events="all"/><path d="M 760.45 394.73 L 760.45 302.46 L 750.45 292.46 M 760.45 302.46 L 829.55 302.46" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,790,343.6)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 321px; margin-left: 745px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>MoveVM</b></div></div></div></foreignObject><text x="788" y="333" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">MoveVM</text></switch></g></g><g><rect x="738.86" y="383.15" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 403px; margin-left: 740px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">move-execution/move-vm-runtime</div></div></div></foreignObject><text x="785" y="407" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">move-execution/...</text></switch></g></g><g/><g><path d="M 1008.18 294.93 L 1077.28 294.93 L 1087.28 304.93 L 1087.28 397.2 L 1018.18 397.2 L 1008.18 387.2 L 1008.18 294.93 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1047.73,346.07)" pointer-events="all"/><path d="M 1018.18 397.2 L 1018.18 304.93 L 1008.18 294.93 M 1018.18 304.93 L 1087.28 304.93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1047.73,346.07)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 324px; margin-left: 1003px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Framework</b></div></div></div></foreignObject><text x="1045" y="336" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Framework</text></switch></g></g><g><rect x="996.59" y="385.62" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 405px; margin-left: 998px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-framework crate</div></div></div></foreignObject><text x="1043" y="409" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-framework...</text></switch></g></g><g><path d="M 806.81 227.42 L 806.8 255.7 Q 806.8 265.7 801.45 265.7 L 798.77 265.7 Q 796.1 265.7 796.11 275.7 L 796.13 297.68" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 796.14 302.93 L 792.63 295.93 L 796.13 297.68 L 799.63 295.92 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 266px; margin-left: 801px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Init</div></div></div></foreignObject><text x="801" y="269" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Init</text></switch></g></g><g/><g/><g><path d="M 764.14 71.02 L 846.77 71.02 L 856.77 81.02 L 856.77 199.59 L 774.14 199.59 L 764.14 189.59 L 764.14 71.02 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,810.45,135.3)" pointer-events="all"/><path d="M 774.14 199.59 L 774.14 81.02 L 764.14 71.02 M 774.14 81.02 L 856.77 81.02" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,810.45,135.3)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 106px; margin-left: 752px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution-engine</b></div></div></div></foreignObject><text x="808" y="118" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Execution-engine</text></switch></g></g><g><rect x="752.02" y="181.62" width="109.58" height="45.8" rx="6.87" ry="6.87" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 205px; margin-left: 753px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-adapter/execution-engine</div></div></div></foreignObject><text x="807" y="208" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">...execution/iota-...</text></switch></g></g><g><path d="M 998.86 351.52 L 875 351.5 Q 865 351.5 865 341.5 L 864.98 251.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 864.98 246.12 L 868.48 253.12 L 864.98 251.37 L 861.48 253.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 351px; margin-left: 900px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: "Architects Daughter"; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"><h4><font face="Helvetica">native fns etc</font></h4></div></div></div></foreignObject><text x="900" y="354" fill="rgb(0, 0, 0)" font-family="Architects Daughter" font-size="11px" text-anchor="middle">native fns etc</text></switch></g></g><g/><g/><g><path d="M 987.72 87.29 L 1056.82 87.29 L 1066.82 97.29 L 1066.82 189.56 L 997.72 189.56 L 987.72 179.56 L 987.72 87.29 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1027.27,138.43)" pointer-events="all"/><path d="M 997.72 189.56 L 997.72 97.29 L 987.72 87.29 M 997.72 97.29 L 1066.82 97.29" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1027.27,138.43)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 116px; margin-left: 982px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Object runtime</b></div></div></div></foreignObject><text x="1025" y="128" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Object runtime</text></switch></g></g><g><rect x="976.14" y="177.98" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 198px; margin-left: 977px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-move-natives</div></div></div></foreignObject><text x="1022" y="201" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">...execution/io...</text></switch></g></g><g><rect x="968.54" y="49.44" width="117.47" height="29.66" rx="4.45" ry="4.45" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 115px; height: 1px; padding-top: 56px; margin-left: 971px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: "Architects Daughter"; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(251, 251, 251); text-decoration: none; float: none; display: inline !important;"><b>iota-execution crate</b></span></div></div></div></foreignObject><text x="971" y="68" fill="rgb(0, 0, 0)" font-family="Architects Daughter" font-size="12px">iota-execution crate</text></switch></g></g><g><path d="M -25 25 L 395 25 L 405 35 L 405 405 L -15 405 L -25 395 L -25 25 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,215)" pointer-events="all"/><path d="M -15 405 L -15 35 L -25 25 M -15 35 L 405 35" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,215)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 363px; height: 1px; padding-top: 17px; margin-left: 7px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Nodes network(Iota node)</b></div></div></div></foreignObject><text x="7" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Nodes network(Iota node)</text></switch></g></g><g><path d="M 0 60 L 360 60 L 370 70 L 370 390 L 10 390 L 0 380 L 0 60 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,185,225)" pointer-events="all"/><path d="M 10 390 L 10 70 L 0 60 M 10 70 L 370 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,185,225)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 313px; height: 1px; padding-top: 57px; margin-left: 26px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Node</b></div></div></div></foreignObject><text x="183" y="69" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Node</text></switch></g></g><g><path d="M -48.52 183.72 L 208.78 183.72 L 218.78 193.72 L 218.78 269.52 L -38.52 269.52 L -48.52 259.52 L -48.52 183.72 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,85.13,226.62)" pointer-events="all"/><path d="M -38.52 269.52 L -38.52 193.72 L -48.52 183.72 M -38.52 193.72 L 218.78 193.72" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,85.13,226.62)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 69px; height: 1px; padding-top: 110px; margin-left: 48px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>API</b></div></div></div></foreignObject><text x="83" y="122" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">API</text></switch></g></g><g><path d="M 253.33 311.9 C 253.33 303.62 269.8 296.9 290.11 296.9 C 299.86 296.9 309.21 298.48 316.11 301.3 C 323.01 304.11 326.88 307.93 326.88 311.9 L 326.88 374.88 C 326.88 383.16 310.42 389.88 290.11 389.88 C 269.8 389.88 253.33 383.16 253.33 374.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 326.88 311.9 C 326.88 320.19 310.42 326.9 290.11 326.9 C 269.8 326.9 253.33 320.19 253.33 311.9" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 356px; margin-left: 254px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Ledger storage</b></div></div></div></foreignObject><text x="290" y="359" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Ledger stora...</text></switch></g></g><g><path d="M 153.23 311.9 C 153.23 303.62 169.69 296.9 190 296.9 C 199.75 296.9 209.11 298.48 216 301.3 C 222.9 304.11 226.77 307.93 226.77 311.9 L 226.77 374.88 C 226.77 383.16 210.31 389.88 190 389.88 C 169.69 389.88 153.23 383.16 153.23 374.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 226.77 311.9 C 226.77 320.19 210.31 326.9 190 326.9 C 169.69 326.9 153.23 320.19 153.23 311.9" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 356px; margin-left: 154px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Indexer</b><div><b>(read/sync db)</b></div></div></div></div></foreignObject><text x="190" y="359" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Indexer...</text></switch></g></g><g><path d="M 152.2 72.2 L 220.29 72.2 L 230.29 82.2 L 230.29 169.7 L 162.2 169.7 L 152.2 159.7 L 152.2 72.2 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,191.25,120.95)" pointer-events="all"/><path d="M 162.2 169.7 L 162.2 82.2 L 152.2 72.2 M 162.2 82.2 L 230.29 82.2" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,191.25,120.95)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 99px; margin-left: 149px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Consensus engine</b></div></div></div></foreignObject><text x="189" y="111" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Consensus engi...</text></switch></g></g><g><path d="M 149.29 177.88 L 220.72 177.88 L 230.72 187.88 L 230.72 275.38 L 159.29 275.38 L 149.29 265.38 L 149.29 177.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,226.63)" pointer-events="all"/><path d="M 159.29 275.38 L 159.29 187.88 L 149.29 177.88 M 159.29 187.88 L 230.72 187.88" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,226.63)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 203px; margin-left: 147px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Network</b></div></div></div></foreignObject><text x="188" y="215" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Network</text></switch></g></g><g><path d="M 259.32 142.45 L 309.32 142.45 L 319.32 152.45 L 319.32 217.56 L 269.32 217.56 L 259.32 207.56 L 259.32 142.45 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,289.32,180)" pointer-events="all"/><path d="M 269.32 217.56 L 269.32 152.45 L 259.32 142.45 M 269.32 152.45 L 319.32 152.45" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,289.32,180)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 167px; margin-left: 258px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Core</b></div></div></div></foreignObject><text x="287" y="179" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Core</text></switch></g></g><g/><g><path d="M 95 435 L 135 435 L 145 445 L 145 555 L 105 555 L 95 545 L 95 435 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,120,495)" pointer-events="all"/><path d="M 105 555 L 105 445 L 95 435 M 105 445 L 145 445" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,120,495)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 103px; height: 1px; padding-top: 487px; margin-left: 66px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-json-rpc</b></div></div></div></foreignObject><text x="118" y="499" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-json-rpc</text></switch></g></g><g><rect x="80" y="520" width="80" height="24.55" rx="3.68" ry="3.68" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 532px; margin-left: 81px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div>iota-json-rpc crate<br /></div></div></div></div></foreignObject><text x="120" y="536" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-json-rpc...</text></switch></g></g><g/><g><path d="M 90 610 L 120 610 L 130 620 L 130 710 L 100 710 L 90 700 L 90 610 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,110,660)" pointer-events="all"/><path d="M 100 710 L 100 620 L 90 610 M 100 620 L 130 620" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,110,660)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 657px; margin-left: 66px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-cli</b></div></div></div></foreignObject><text x="108" y="669" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-cli</text></switch></g></g><g><rect x="60" y="680" width="90" height="30" rx="4.5" ry="4.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 695px; margin-left: 61px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota crate</div></div></div></foreignObject><text x="105" y="699" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota crate</text></switch></g></g><g><path d="M 115 640 L 115 602.3 Q 115 592.3 117.5 592.3 L 118.75 592.3 Q 120 592.3 120 582.3 L 120 550.92" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 120 545.67 L 123.5 552.67 L 120 550.92 L 116.5 552.67 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 125 470 L 125 440 Q 125 430 135 430 L 180 430 Q 190 430 190 420 L 190 396.25" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190 391 L 193.5 398 L 190 396.25 L 186.5 398 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 700 220 L 523.4 220 Q 513.4 220 513.4 230 L 513.4 333.4 Q 513.4 343.4 503.4 343.4 L 333.25 343.39" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 328 343.39 L 335 339.89 L 333.25 343.39 L 335 346.89 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 326.88 182.39 L 503.5 182.4 Q 513.5 182.4 513.5 180.75 L 513.5 179.92 Q 513.5 179.1 523.5 179.1 L 693.63 179.08" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 698.88 179.08 L 691.88 182.58 L 693.63 179.08 L 691.88 175.58 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file diff --git a/docs/site/static/json/developer/getting-started/connect.json b/docs/site/static/json/developer/getting-started/connect.json index 9f62706071a..7e155759c20 100644 --- a/docs/site/static/json/developer/getting-started/connect.json +++ b/docs/site/static/json/developer/getting-started/connect.json @@ -11,7 +11,7 @@ { "questionText": "When first running the 'iota client' command, what happens if you press Enter without specifying a node URL?", "answerOptions": [ - { "answerText": "It connects to the Devnet", "isCorrect": true }, + { "answerText": "It connects to the Testnet", "isCorrect": true }, { "answerText": "It exits the program", "isCorrect": false }, { "answerText": "It connects to the Mainnet", "isCorrect": false }, { "answerText": "It shows an error message", "isCorrect": false } diff --git a/docs/site/static/json/developer/getting-started/create-a-package.json b/docs/site/static/json/developer/getting-started/create-a-package.json index d2411c38815..23a5799d24d 100644 --- a/docs/site/static/json/developer/getting-started/create-a-package.json +++ b/docs/site/static/json/developer/getting-started/create-a-package.json @@ -1,29 +1,38 @@ [ { - "questionText": "What is the purpose of the `key` ability in a struct declaration in Move?", + "questionText": "What is the command to create a new IOTA Move package called 'my_first_package'?", "answerOptions": [ - { "answerText": "It allows a struct to be stored and transferred.", "isCorrect": true }, - { "answerText": "It allows a struct to be copied.", "isCorrect": false }, - { "answerText": "It allows a struct to be dropped or discarded.", "isCorrect": false }, - { "answerText": "It allows a struct to be stored within structs with the `key` ability.", "isCorrect": false } + { "answerText": "iota move new my_first_package", "isCorrect": true }, + { "answerText": "iota create package my_first_package", "isCorrect": false }, + { "answerText": "iota new package my_first_package", "isCorrect": false }, + { "answerText": "iota init my_first_package", "isCorrect": false } ] }, { - "questionText": "Which ability allows a struct to be discarded in Move?", + "questionText": "What is the purpose of the Move.toml file in an IOTA Move package?", "answerOptions": [ - { "answerText": "`copy`", "isCorrect": false }, - { "answerText": "`drop`", "isCorrect": true }, - { "answerText": "`key`", "isCorrect": false }, - { "answerText": "`store`", "isCorrect": false } + { "answerText": "It is the package's manifest that describes the package and its dependencies.", "isCorrect": true }, + { "answerText": "It contains the source code of the modules.", "isCorrect": false }, + { "answerText": "It stores compiled bytecode.", "isCorrect": false }, + { "answerText": "It is used to manage version control.", "isCorrect": false } ] }, { - "questionText": "How do you denote a comment in a `.move` file?", + "questionText": "In .toml files, which character is used to denote a comment?", "answerOptions": [ - { "answerText": "Using double slashes `//`", "isCorrect": true }, - { "answerText": "Using `/* ... */`", "isCorrect": false }, - { "answerText": "Using `#`", "isCorrect": false }, - { "answerText": "Using `--`", "isCorrect": false } + { "answerText": "Hash mark (#)", "isCorrect": true }, + { "answerText": "Double slash (//)", "isCorrect": false }, + { "answerText": "Semicolon (;)", "isCorrect": false }, + { "answerText": "Percent sign (%)", "isCorrect": false } + ] + }, + { + "questionText": "How can you resolve version conflicts in dependencies in the [dependencies] section?", + "answerOptions": [ + { "answerText": "By adding the 'override' field to the dependency", "isCorrect": true }, + { "answerText": "By removing the conflicting dependency", "isCorrect": false }, + { "answerText": "By renaming the dependency", "isCorrect": false }, + { "answerText": "By using a different package manager", "isCorrect": false } ] } ] diff --git a/docs/site/static/json/developer/getting-started/local-network.json b/docs/site/static/json/developer/getting-started/local-network.json index 23a5799d24d..4396fab85bb 100644 --- a/docs/site/static/json/developer/getting-started/local-network.json +++ b/docs/site/static/json/developer/getting-started/local-network.json @@ -1,38 +1,86 @@ [ - { - "questionText": "What is the command to create a new IOTA Move package called 'my_first_package'?", - "answerOptions": [ - { "answerText": "iota move new my_first_package", "isCorrect": true }, - { "answerText": "iota create package my_first_package", "isCorrect": false }, - { "answerText": "iota new package my_first_package", "isCorrect": false }, - { "answerText": "iota init my_first_package", "isCorrect": false } - ] - }, - { - "questionText": "What is the purpose of the Move.toml file in an IOTA Move package?", - "answerOptions": [ - { "answerText": "It is the package's manifest that describes the package and its dependencies.", "isCorrect": true }, - { "answerText": "It contains the source code of the modules.", "isCorrect": false }, - { "answerText": "It stores compiled bytecode.", "isCorrect": false }, - { "answerText": "It is used to manage version control.", "isCorrect": false } - ] - }, - { - "questionText": "In .toml files, which character is used to denote a comment?", - "answerOptions": [ - { "answerText": "Hash mark (#)", "isCorrect": true }, - { "answerText": "Double slash (//)", "isCorrect": false }, - { "answerText": "Semicolon (;)", "isCorrect": false }, - { "answerText": "Percent sign (%)", "isCorrect": false } - ] - }, - { - "questionText": "How can you resolve version conflicts in dependencies in the [dependencies] section?", - "answerOptions": [ - { "answerText": "By adding the 'override' field to the dependency", "isCorrect": true }, - { "answerText": "By removing the conflicting dependency", "isCorrect": false }, - { "answerText": "By renaming the dependency", "isCorrect": false }, - { "answerText": "By using a different package manager", "isCorrect": false } - ] - } -] + { + "questionText": "What command is used to start a local IOTA network with a test token faucet?", + "answerOptions": [ + { + "answerText": "RUST_LOG=\"off,iota_node=info\" cargo run --bin iota iota", + "isCorrect": false + }, + { + "answerText": "RUST_LOG=\"off,iota_node=info\" cargo run --bin iota start --force-regenesis --with-faucet", + "isCorrect": true + }, + { + "answerText": "RUST_LOG=\"off,iota_node=info\" cargo run --bin iota client", + "isCorrect": false + }, + { + "answerText": "cargo run --bin iota stop", + "isCorrect": false + } + ] + }, + { + "questionText": "Which flag should be used to persist data on the local network instead of using --force-regenesis?", + "answerOptions": [ + { + "answerText": "--config-dir", + "isCorrect": true + }, + { + "answerText": "--persist-data", + "isCorrect": false + }, + { + "answerText": "--save-state", + "isCorrect": false + }, + { + "answerText": "--data-dir", + "isCorrect": false + } + ] + }, + { + "questionText": "How can you retrieve the total transaction count from your local network using cURL?", + "answerOptions": [ + { + "answerText": "curl --location --request GET 'http://127.0.0.1:9000' --header 'Content-Type: application/json' --data-raw '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"iota_getTotalTransactionBlocks\", \"params\": []}'", + "isCorrect": false + }, + { + "answerText": "curl --location --request POST 'http://127.0.0.1:9000' --header 'Content-Type: application/json' --data-raw '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"iota_getTotalTransactionBlocks\", \"params\": []}'", + "isCorrect": true + }, + { + "answerText": "curl --location --request POST 'http://127.0.0.1:9000' --header 'Content-Type: application/json' --data-raw '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"iota_getTransactionCount\", \"params\": []}'", + "isCorrect": false + }, + { + "answerText": "curl --location --request GET 'http://127.0.0.1:9000' --header 'Content-Type: application/json' --data-raw '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"iota_getTransactionCount\", \"params\": []}'", + "isCorrect": false + } + ] + }, + { + "questionText": "What command is used to create a new environment for the IOTA Client CLI with an alias local and RPC URL http://127.0.0.1:9000?", + "answerOptions": [ + { + "answerText": "iota client new-env --alias local --rpc http://127.0.0.1:9000", + "isCorrect": true + }, + { + "answerText": "iota client create-env --alias local --rpc http://127.0.0.1:9000", + "isCorrect": false + }, + { + "answerText": "iota client setup-env --alias local --rpc http://127.0.0.1:9000", + "isCorrect": false + }, + { + "answerText": "iota client init-env --alias local --rpc http://127.0.0.1:9000", + "isCorrect": false + } + ] + } +] \ No newline at end of file diff --git a/examples/tic-tac-toe/cli/src/turn_cap.rs b/examples/tic-tac-toe/cli/src/turn_cap.rs index 73af874cc6e..9ee96ed8435 100644 --- a/examples/tic-tac-toe/cli/src/turn_cap.rs +++ b/examples/tic-tac-toe/cli/src/turn_cap.rs @@ -2,12 +2,11 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use serde::Deserialize; use iota_types::base_types::ObjectID; +use serde::Deserialize; -/// Rust representation of a Move `owned::TurnCap`, suitable for deserializing from their BCS -/// representation. -#[allow(dead_code)] +/// Rust representation of a Move `owned::TurnCap`, suitable for deserializing +/// from their BCS representation. #[derive(Deserialize)] pub(crate) struct TurnCap { pub id: ObjectID, diff --git a/iota-execution/latest/iota-adapter/src/gas_charger.rs b/iota-execution/latest/iota-adapter/src/gas_charger.rs index d83e38ba39b..be082050188 100644 --- a/iota-execution/latest/iota-adapter/src/gas_charger.rs +++ b/iota-execution/latest/iota-adapter/src/gas_charger.rs @@ -28,14 +28,14 @@ pub mod checked { /// All the information about gas is stored in this object. /// The objective here is two-fold: /// 1- Isolate al version info into a single entry point. This file and the - /// other gas related files are the only one that check for gas + /// other gas related files are the only one that check for gas /// version. 2- Isolate all gas accounting into a single implementation. - /// Gas objects are not passed around, and they are retrieved from + /// Gas objects are not passed around, and they are retrieved from /// this instance. - #[allow(dead_code)] #[derive(Debug)] pub struct GasCharger { tx_digest: TransactionDigest, + #[expect(unused)] gas_model_version: u64, gas_coins: Vec<ObjectRef>, // this is the first gas coin in `gas_coins` and the one that all others will diff --git a/iota-execution/latest/iota-adapter/src/programmable_transactions/execution.rs b/iota-execution/latest/iota-adapter/src/programmable_transactions/execution.rs index b382a447ffc..60dff0ae180 100644 --- a/iota-execution/latest/iota-adapter/src/programmable_transactions/execution.rs +++ b/iota-execution/latest/iota-adapter/src/programmable_transactions/execution.rs @@ -844,7 +844,7 @@ mod checked { /// instances using the protocol's binary configuration. The function /// ensures that the module list is not empty and converts any /// deserialization errors into an `ExecutionError`. - #[allow(clippy::extra_unused_type_parameters)] + #[expect(clippy::extra_unused_type_parameters)] fn deserialize_modules<Mode: ExecutionMode>( context: &mut ExecutionContext<'_, '_, '_>, module_bytes: &[Vec<u8>], diff --git a/iota-execution/latest/iota-move-natives/src/object_runtime/object_store.rs b/iota-execution/latest/iota-move-natives/src/object_runtime/object_store.rs index 50ef7d78cc3..fcada9506e3 100644 --- a/iota-execution/latest/iota-move-natives/src/object_runtime/object_store.rs +++ b/iota-execution/latest/iota-move-natives/src/object_runtime/object_store.rs @@ -229,7 +229,6 @@ impl Inner<'_> { Ok(obj_opt) } - #[allow(clippy::map_entry)] fn get_or_fetch_object_from_store( &mut self, parent: ObjectID, diff --git a/nre/docker/README.md b/nre/docker/README.md index 640e94dabd3..bc80d87cca3 100644 --- a/nre/docker/README.md +++ b/nre/docker/README.md @@ -9,7 +9,7 @@ Tested using: 1. Confirm you have either [Docker Engine](https://docs.docker.com/engine/install/) or [Docker Desktop](https://docs.docker.com/desktop/install/linux-install/) installed, as well as [Docker Compose](https://github.com/docker/compose#linux). -2. Update [validator.yaml](../config/validator.yaml) and place it in the same directory as `docker-compose.yaml`. +2. Update [validator.yaml](../config/validator.yaml) and place it in the same directory as [`docker-compose.yaml`](https://github.com/iotaledger/iota/blob/testnet/nre/docker/docker-compose.yaml). Add the paths to your private keys to validator.yaml. If you chose to put them in `/opt/iota/key-pairs`, you can use the following example: @@ -22,7 +22,7 @@ network-key-pair: path: /opt/iota/key-pairs/network.key ``` -3. Place `genesis.blob` in the same directory as `docker-compose.yaml`. (available post genesis ceremony) +3. Place `genesis.blob` in the same directory as [`docker-compose.yaml`](https://github.com/iotaledger/iota/blob/testnet/nre/docker/docker-compose.yaml). (available post genesis ceremony) ## Connectivity diff --git a/nre/validator_tasks.md b/nre/validator_tasks.md index 06d741d4131..ce7c4c1ee43 100644 --- a/nre/validator_tasks.md +++ b/nre/validator_tasks.md @@ -27,7 +27,6 @@ This document focuses on running the Iota Node software as a Validator. - [Chain Operations](#chain-operations) - [Updating On-chain Metadata](#updating-on-chain-metadata) - [Operation Cap](#operation-cap) - - [Updating the Gas Price Survey Quote](#updating-the-gas-price-survey-quote) - [Reporting/Un-reporting Validators](#reportingun-reporting-validators) - [Joining the Validator Set](#joining-the-validator-set) - [Leaving the Validator Set](#leaving-the-validator-set) @@ -364,16 +363,6 @@ setting the holder as the active address. <!-- Will be fixed by issue 1867. --> <!-- Or go to the [explorer](https://explorer.rebased.iota.org/object/0x0000000000000000000000000000000000000005) and look for `operation_cap_id` of that validator in the `validators` module. --> -### Updating the Gas Price Survey Quote - -To update the Gas Price Survey Quote of a validator, which is used to calculate the Reference Gas Price at the end of -the epoch, the sender needs to hold a valid [`UnverifiedValidatorOperationCap`](#operation-cap). The sender could be the -validator itself, or a trusted delegatee. To do so, call `iota_system::request_set_gas_price`: - -```shell -iota client call --package 0x3 --module iota_system --function request_set_gas_price --args 0x5 {cap_object_id} {new_gas_price} --gas-budget 10000 -``` - ### Reporting/Un-reporting Validators To report a validator or undo an existing report, the sender needs to hold a valid [`UnverifiedValidatorOperationCap`](#operation-cap). The sender could be the validator itself, or a trusted delegatee. To diff --git a/nre/validator_tool.md b/nre/validator_tool.md index 3c6c3291463..2dd32ef695c 100644 --- a/nre/validator_tool.md +++ b/nre/validator_tool.md @@ -106,22 +106,6 @@ Operation Cap allows a validator to authorizer another account to perform certai The Operation Cap holder (either the validator itself or the delegatee) updates its Gas Price and reports validator peers with the Operation Cap. -#### Update Gas Price - -To update Gas Price, run - -```bash -$IOTA_BINARY validator update-gas-price <gas-price> -``` - -if the account itself is a validator and holds the Operation Cap. Or - -```bash -$IOTA_BINARY validator update-gas-price --operation-cap-id <operation-cap-id> <gas-price> -``` - -if the account is a delegatee. - #### Report Validators To report validators peers, run diff --git a/package.json b/package.json index 653580fe2fc..9ceeb891cd9 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "semver@<7.5.2": ">=7.5.2", "postcss@<8.4.31": ">=8.4.31", "braces": ">=3.0.3", - "path-to-regexp@0.1.7": "0.1.10", + "path-to-regexp@<0.1.12": "0.1.12", "path-to-regexp@2.2.1": "3.3.0", "path-to-regexp@3.2.0": "3.3.0", "body-parser": ">=1.20.3", @@ -45,7 +45,13 @@ "eslint": "8.57.1", "mermaid@10.9.1": "10.9.3", "http-proxy-middleware": "2.0.7", - "cross-spawn": "7.0.5" + "cross-spawn": "7.0.5", + "axios@<0.28.0": "0.28.0", + "tough-cookie@<4.1.3": "4.1.3", + "ws": "8.18.0", + "@sentry/browser": "7.120.2", + "nanoid@3.3.7": "3.3.8", + "nanoid@5.0.7": "5.0.9" } }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e655b68433..2d2bcfb5276 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ overrides: semver@<7.5.2: '>=7.5.2' postcss@<8.4.31: '>=8.4.31' braces: '>=3.0.3' - path-to-regexp@0.1.7: 0.1.10 + path-to-regexp@<0.1.12: 0.1.12 path-to-regexp@2.2.1: 3.3.0 path-to-regexp@3.2.0: 3.3.0 body-parser: '>=1.20.3' @@ -21,6 +21,12 @@ overrides: mermaid@10.9.1: 10.9.3 http-proxy-middleware: 2.0.7 cross-spawn: 7.0.5 + axios@<0.28.0: 0.28.0 + tough-cookie@<4.1.3: 4.1.3 + ws: 8.18.0 + '@sentry/browser': 7.120.2 + nanoid@3.3.7: 3.3.8 + nanoid@5.0.7: 5.0.9 importers: @@ -653,8 +659,8 @@ importers: specifier: ^5.3.3 version: 5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0) vite-plugin-dts: - specifier: ^3.9.1 - version: 3.9.1(@types/node@20.16.9)(rollup@4.22.4)(typescript@5.6.2)(vite@5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0)) + specifier: ^4.3.0 + version: 4.3.0(@types/node@20.16.9)(rollup@4.22.4)(typescript@5.6.2)(vite@5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0)) vite-tsconfig-paths: specifier: ^4.2.0 version: 4.3.2(typescript@5.6.2)(vite@5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0)) @@ -752,8 +758,8 @@ importers: specifier: ^1.3.0 version: 1.4.0 '@sentry/browser': - specifier: ^7.61.0 - version: 7.119.0 + specifier: 7.120.2 + version: 7.120.2 '@tanstack/react-query': specifier: ^5.50.1 version: 5.56.2(react@18.3.1) @@ -796,9 +802,6 @@ importers: idb-keyval: specifier: ^6.2.1 version: 6.2.1 - jose: - specifier: ^5.2.3 - version: 5.9.3 mitt: specifier: ^3.0.1 version: 3.0.1 @@ -990,8 +993,8 @@ importers: specifier: ^2.0.1 version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) web-ext: - specifier: ^7.6.2 - version: 7.12.0(body-parser@1.20.3) + specifier: ^8.3.0 + version: 8.3.0(body-parser@1.20.3) webpack: specifier: ^5.79.0 version: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) @@ -1025,6 +1028,9 @@ importers: '@iota/ui-icons': specifier: workspace:* version: link:../ui-icons + '@iota/wallet-standard': + specifier: workspace:* + version: link:../../sdk/wallet-standard '@tanstack/react-query': specifier: ^5.50.1 version: 5.56.2(react@18.3.1) @@ -1038,8 +1044,8 @@ importers: specifier: ^2.4.2 version: 2.4.6(react@18.3.1) next: - specifier: 14.2.10 - version: 14.2.10(@babel/core@7.25.2)(@playwright/test@1.47.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.79.3) + specifier: 14.2.15 + version: 14.2.15(@babel/core@7.25.2)(@playwright/test@1.47.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.79.3) react: specifier: ^18.3.1 version: 18.3.1 @@ -1311,6 +1317,9 @@ importers: '@amplitude/analytics-browser': specifier: ^1.10.3 version: 1.13.6 + '@artsy/to-title-case': + specifier: ^1.1.0 + version: 1.1.0 '@docsearch/react': specifier: ^3.6.0 version: 3.6.1(@algolia/client-search@4.24.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1380,9 +1389,6 @@ importers: copy-text-to-clipboard: specifier: ^3.2.0 version: 3.2.0 - docusaurus-theme-search-typesense: - specifier: 0.20.0-0 - version: 0.20.0-0(@algolia/client-search@4.24.0)(@babel/runtime@7.25.6)(@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.9)(algoliasearch@4.24.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) dotenv: specifier: ^16.4.5 version: 16.4.5 @@ -1398,6 +1404,9 @@ importers: hast-util-is-element: specifier: ^1.1.0 version: 1.1.0 + html-react-parser: + specifier: ^5.1.18 + version: 5.1.18(@types/react@18.3.9)(react@18.3.1) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -1431,6 +1440,9 @@ importers: react-ui-scrollspy: specifier: ^2.3.0 version: 2.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rehype-jargon: + specifier: ^3.1.0 + version: 3.1.0 rehype-katex: specifier: ^7.0.0 version: 7.0.1 @@ -1553,128 +1565,6 @@ importers: specifier: ^5.5.3 version: 5.6.2 - sdk/create-dapp/templates/react-client-dapp: - dependencies: - '@iota/dapp-kit': - specifier: workspace:* - version: link:../../../dapp-kit - '@iota/iota-sdk': - specifier: workspace:* - version: link:../../../typescript - '@radix-ui/colors': - specifier: ^3.0.0 - version: 3.0.0 - '@radix-ui/react-icons': - specifier: ^1.3.0 - version: 1.3.0(react@18.3.1) - '@radix-ui/themes': - specifier: ^3.1.1 - version: 3.1.4(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-query': - specifier: ^5.50.1 - version: 5.56.2(react@18.3.1) - react: - specifier: ^18.3.1 - version: 18.3.1 - react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) - devDependencies: - '@types/react': - specifier: ^18.3.3 - version: 18.3.9 - '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.0 - '@typescript-eslint/eslint-plugin': - specifier: ^7.16.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/parser': - specifier: ^7.16.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.6.2) - '@vitejs/plugin-react-swc': - specifier: ^3.7.0 - version: 3.7.0(@swc/helpers@0.5.5)(vite@5.4.8(@types/node@22.7.3)(sass@1.79.3)(terser@5.34.0)) - eslint: - specifier: 8.57.1 - version: 8.57.1 - eslint-plugin-react-hooks: - specifier: ^4.6.2 - version: 4.6.2(eslint@8.57.1) - eslint-plugin-react-refresh: - specifier: ^0.4.7 - version: 0.4.12(eslint@8.57.1) - prettier: - specifier: ^3.3.2 - version: 3.3.3 - typescript: - specifier: ^5.5.3 - version: 5.6.2 - vite: - specifier: ^5.3.3 - version: 5.4.8(@types/node@22.7.3)(sass@1.79.3)(terser@5.34.0) - - sdk/create-dapp/templates/react-e2e-counter: - dependencies: - '@iota/dapp-kit': - specifier: workspace:* - version: link:../../../dapp-kit - '@iota/iota-sdk': - specifier: workspace:* - version: link:../../../typescript - '@radix-ui/colors': - specifier: ^3.0.0 - version: 3.0.0 - '@radix-ui/react-icons': - specifier: ^1.3.0 - version: 1.3.0(react@18.3.1) - '@radix-ui/themes': - specifier: ^3.1.1 - version: 3.1.4(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-query': - specifier: ^5.50.1 - version: 5.56.2(react@18.3.1) - react: - specifier: ^18.3.1 - version: 18.3.1 - react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) - devDependencies: - '@types/react': - specifier: ^18.3.3 - version: 18.3.9 - '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.0 - '@typescript-eslint/eslint-plugin': - specifier: ^6.1.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/parser': - specifier: ^6.1.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.6.2) - '@vitejs/plugin-react-swc': - specifier: ^3.7.0 - version: 3.7.0(@swc/helpers@0.5.5)(vite@5.4.8(@types/node@22.7.3)(sass@1.79.3)(terser@5.34.0)) - eslint: - specifier: 8.57.1 - version: 8.57.1 - eslint-plugin-react-hooks: - specifier: ^4.6.2 - version: 4.6.2(eslint@8.57.1) - eslint-plugin-react-refresh: - specifier: ^0.4.7 - version: 0.4.12(eslint@8.57.1) - prettier: - specifier: ^3.3.2 - version: 3.3.3 - typescript: - specifier: ^5.5.3 - version: 5.6.2 - vite: - specifier: ^5.3.3 - version: 5.4.8(@types/node@22.7.3)(sass@1.79.3)(terser@5.34.0) - sdk/dapp-kit: dependencies: '@iota/iota-sdk': @@ -2013,7 +1903,7 @@ importers: specifier: ^7.2.0 version: 7.2.0 ws: - specifier: ^8.18.0 + specifier: 8.18.0 version: 8.18.0 sdk/wallet-standard: @@ -2057,9 +1947,6 @@ packages: '@adraffy/ens-normalize@1.11.0': resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==} - '@algolia/autocomplete-core@1.8.2': - resolution: {integrity: sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==} - '@algolia/autocomplete-core@1.9.3': resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} @@ -2068,21 +1955,12 @@ packages: peerDependencies: search-insights: '>= 1 < 3' - '@algolia/autocomplete-preset-algolia@1.8.2': - resolution: {integrity: sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - '@algolia/autocomplete-preset-algolia@1.9.3': resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/autocomplete-shared@1.8.2': - resolution: {integrity: sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==} - '@algolia/autocomplete-shared@1.9.3': resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} peerDependencies: @@ -2227,6 +2105,9 @@ packages: resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} engines: {node: '>=14'} + '@artsy/to-title-case@1.1.0': + resolution: {integrity: sha512-n2GISILNv3X9xVjkUC1thoOl7rVKPeDskobQJsC5G8poFpF4HNxxSJD97NjvCK3Ai1RplSMsN2MCmMAy7plx9Q==} + '@aw-web-design/x-default-browser@1.4.126': resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} hasBin: true @@ -2912,10 +2793,6 @@ packages: resolution: {integrity: sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.21.0': - resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.25.6': resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} @@ -3271,8 +3148,8 @@ packages: resolution: {integrity: sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==} engines: {node: '>= 0.10.4'} - '@devicefarmer/adbkit@3.2.3': - resolution: {integrity: sha512-wK9rVrabs4QU0oK8Jnwi+HRBEm+s1x/o63kgthUe0y7K1bfcYmgLuQf41/adsj/5enddlSxzkJavl2EwOu+r1g==} + '@devicefarmer/adbkit@3.2.6': + resolution: {integrity: sha512-8lO1hSeTgtxcOHhp4tTWq/JaOysp5KNbbyFoxNEBnwkCDZu/Bji3ZfOaG++Riv9jN6c9bgdLBOZqJTC5VJPRKQ==} engines: {node: '>= 0.10.4'} hasBin: true @@ -3300,14 +3177,6 @@ packages: search-insights: optional: true - '@docusaurus/core@3.4.0': - resolution: {integrity: sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w==} - engines: {node: '>=18.0'} - hasBin: true - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - '@docusaurus/core@3.5.2': resolution: {integrity: sha512-4Z1WkhCSkX4KO0Fw5m/Vuc7Q3NxBG53NE5u59Rs96fWkMPZVSrzEPP16/Nk6cWb/shK7xXPndTmalJtw7twL/w==} engines: {node: '>=18.0'} @@ -3317,29 +3186,14 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/cssnano-preset@3.4.0': - resolution: {integrity: sha512-qwLFSz6v/pZHy/UP32IrprmH5ORce86BGtN0eBtG75PpzQJAzp9gefspox+s8IEOr0oZKuQ/nhzZ3xwyc3jYJQ==} - engines: {node: '>=18.0'} - '@docusaurus/cssnano-preset@3.5.2': resolution: {integrity: sha512-D3KiQXOMA8+O0tqORBrTOEQyQxNIfPm9jEaJoALjjSjc2M/ZAWcUfPQEnwr2JB2TadHw2gqWgpZckQmrVWkytA==} engines: {node: '>=18.0'} - '@docusaurus/logger@3.4.0': - resolution: {integrity: sha512-bZwkX+9SJ8lB9kVRkXw+xvHYSMGG4bpYHKGXeXFvyVc79NMeeBSGgzd4TQLHH+DYeOJoCdl8flrFJVxlZ0wo/Q==} - engines: {node: '>=18.0'} - '@docusaurus/logger@3.5.2': resolution: {integrity: sha512-LHC540SGkeLfyT3RHK3gAMK6aS5TRqOD4R72BEU/DE2M/TY8WwEUAMY576UUc/oNJXv8pGhBmQB6N9p3pt8LQw==} engines: {node: '>=18.0'} - '@docusaurus/mdx-loader@3.4.0': - resolution: {integrity: sha512-kSSbrrk4nTjf4d+wtBA9H+FGauf2gCax89kV8SUSJu3qaTdSIKdWERlngsiHaCFgZ7laTJ8a67UFf+xlFPtuTw==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - '@docusaurus/mdx-loader@3.5.2': resolution: {integrity: sha512-ku3xO9vZdwpiMIVd8BzWV0DCqGEbCP5zs1iHfKX50vw6jX8vQo0ylYo1YJMZyz6e+JFJ17HYHT5FzVidz2IflA==} engines: {node: '>=18.0'} @@ -3347,12 +3201,6 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/module-type-aliases@3.4.0': - resolution: {integrity: sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==} - peerDependencies: - react: '*' - react-dom: '*' - '@docusaurus/module-type-aliases@3.5.2': resolution: {integrity: sha512-Z+Xu3+2rvKef/YKTMxZHsEXp1y92ac0ngjDiExRdqGTmEKtCUpkbNYH8v5eXo5Ls+dnW88n6WTa+Q54kLOkwPg==} peerDependencies: @@ -3374,13 +3222,6 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/plugin-content-docs@3.4.0': - resolution: {integrity: sha512-HkUCZffhBo7ocYheD9oZvMcDloRnGhBMOZRyVcAQRFmZPmNqSyISlXA1tQCIxW+r478fty97XXAGjNYzBjpCsg==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - '@docusaurus/plugin-content-docs@3.5.2': resolution: {integrity: sha512-Bt+OXn/CPtVqM3Di44vHjE7rPCEsRCB/DMo2qoOuozB9f7+lsdrHvD0QCHdBs0uhz6deYJDppAr2VgqybKPlVQ==} engines: {node: '>=18.0'} @@ -3482,10 +3323,6 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/theme-translations@3.4.0': - resolution: {integrity: sha512-zSxCSpmQCCdQU5Q4CnX/ID8CSUUI3fvmq4hU/GNP/XoAWtXo9SAVnM3TzpU8Gb//H3WCsT8mJcTfyOk3d9ftNg==} - engines: {node: '>=18.0'} - '@docusaurus/theme-translations@3.5.2': resolution: {integrity: sha512-GPZLcu4aT1EmqSTmbdpVrDENGR2yObFEX8ssEFYTCiAIVc0EihNSdOIBTazUvgNqwvnoU1A8vIs1xyzc3LITTw==} engines: {node: '>=18.0'} @@ -3493,27 +3330,12 @@ packages: '@docusaurus/tsconfig@3.5.2': resolution: {integrity: sha512-rQ7toURCFnWAIn8ubcquDs0ewhPwviMzxh6WpRjBW7sJVCXb6yzwUaY3HMNa0VXCFw+qkIbFywrMTf+Pb4uHWQ==} - '@docusaurus/types@3.4.0': - resolution: {integrity: sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - '@docusaurus/types@3.5.2': resolution: {integrity: sha512-N6GntLXoLVUwkZw7zCxwy9QiuEXIcTVzA9AkmNw16oc0AP3SXLrMmDMMBIfgqwuKWa6Ox6epHol9kMtJqekACw==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/utils-common@3.4.0': - resolution: {integrity: sha512-NVx54Wr4rCEKsjOH5QEVvxIqVvm+9kh7q8aYTU5WzUU9/Hctd6aTrcZ3G0Id4zYJ+AeaG5K5qHA4CY5Kcm2iyQ==} - engines: {node: '>=18.0'} - peerDependencies: - '@docusaurus/types': '*' - peerDependenciesMeta: - '@docusaurus/types': - optional: true - '@docusaurus/utils-common@3.5.2': resolution: {integrity: sha512-i0AZjHiRgJU6d7faQngIhuHKNrszpL/SHQPgF1zH4H+Ij6E9NBYGy6pkcGWToIv7IVPbs+pQLh1P3whn0gWXVg==} engines: {node: '>=18.0'} @@ -3523,23 +3345,10 @@ packages: '@docusaurus/types': optional: true - '@docusaurus/utils-validation@3.4.0': - resolution: {integrity: sha512-hYQ9fM+AXYVTWxJOT1EuNaRnrR2WGpRdLDQG07O8UOpsvCPWUVOeo26Rbm0JWY2sGLfzAb+tvJ62yF+8F+TV0g==} - engines: {node: '>=18.0'} - '@docusaurus/utils-validation@3.5.2': resolution: {integrity: sha512-m+Foq7augzXqB6HufdS139PFxDC5d5q2QKZy8q0qYYvGdI6nnlNsGH4cIGsgBnV7smz+mopl3g4asbSDvMV0jA==} engines: {node: '>=18.0'} - '@docusaurus/utils@3.4.0': - resolution: {integrity: sha512-fRwnu3L3nnWaXOgs88BVBmG1yGjcQqZNHG+vInhEa2Sz2oQB+ZjbEMO5Rh9ePFpZ0YDiDUhpaVjwmS+AU2F14g==} - engines: {node: '>=18.0'} - peerDependencies: - '@docusaurus/types': '*' - peerDependenciesMeta: - '@docusaurus/types': - optional: true - '@docusaurus/utils@3.5.2': resolution: {integrity: sha512-33QvcNFh+Gv+C2dP9Y9xWEzMgf3JzrpL2nW9PopidiohS1nDcyknKRx2DWaFvyVTTYIkkABVSr073VTj/NITNA==} engines: {node: '>=18.0'} @@ -4642,8 +4451,8 @@ packages: resolution: {integrity: sha512-3lBouSuF7CqlseLB+FKES0K4FQ02JrbEoRtJhxnsyB1s5v4AP03gsoohN8jp7DcOImhaR9scYdztq3/sLfk/qQ==} engines: {node: '>=14.18.0'} - '@mdn/browser-compat-data@5.5.29': - resolution: {integrity: sha512-NHdG3QOiAsxh8ygBSKMa/WaNJwpNt87uVqW+S2RlnSqgeRdk+L3foNWTX6qd0I3NHSlCFb47rgopeNCJtRDY5A==} + '@mdn/browser-compat-data@5.6.0': + resolution: {integrity: sha512-xArvLyzuk0r2m6hFVjTMYoLvhWwys3h7W8pO15tjSAea+U39cErWDNfoUs4g2C08HVg6bDHyDMBc0LC6FKRpVw==} '@mdx-js/mdx@3.0.1': resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} @@ -4678,19 +4487,25 @@ packages: resolution: {integrity: sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw==} engines: {node: '>=12.0.0'} - '@microsoft/api-extractor-model@7.28.13': - resolution: {integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==} + '@microsoft/api-extractor-model@7.30.1': + resolution: {integrity: sha512-CTS2PlASJHxVY8hqHORVb1HdECWOEMcMnM6/kDkPr0RZapAFSIHhg9D4jxuE8g+OWYHtPc10LCpmde5pylTRlA==} - '@microsoft/api-extractor@7.43.0': - resolution: {integrity: sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==} + '@microsoft/api-extractor@7.48.1': + resolution: {integrity: sha512-HN9Osa1WxqLM66RaqB5nPAadx+nTIQmY/XtkFdaJvusjG8Tus++QqZtD7KPZDSkhEMGHsYeSyeU8qUzCDUXPjg==} hasBin: true '@microsoft/tsdoc-config@0.16.2': resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + '@microsoft/tsdoc-config@0.17.1': + resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} + '@microsoft/tsdoc@0.14.2': resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + '@microsoft/tsdoc@0.15.1': + resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + '@mswjs/interceptors@0.35.8': resolution: {integrity: sha512-PFfqpHplKa7KMdoQdj5td03uG05VK2Ng1dG0sP4pT9h0dGSX2v9txYt/AnrzPb/vAmfyBBC0NQV7VaBEX+efgQ==} engines: {node: '>=18'} @@ -4862,62 +4677,62 @@ packages: '@nestjs/platform-express': optional: true - '@next/env@14.2.10': - resolution: {integrity: sha512-dZIu93Bf5LUtluBXIv4woQw2cZVZ2DJTjax5/5DOs3lzEOeKLy7GxRSr4caK9/SCPdaW6bCgpye6+n4Dh9oJPw==} + '@next/env@14.2.15': + resolution: {integrity: sha512-S1qaj25Wru2dUpcIZMjxeMVSwkt8BK4dmWHHiBuRstcIyOsMapqT4A4jSB6onvqeygkSSmOkyny9VVx8JIGamQ==} '@next/eslint-plugin-next@14.2.3': resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==} - '@next/swc-darwin-arm64@14.2.10': - resolution: {integrity: sha512-V3z10NV+cvMAfxQUMhKgfQnPbjw+Ew3cnr64b0lr8MDiBJs3eLnM6RpGC46nhfMZsiXgQngCJKWGTC/yDcgrDQ==} + '@next/swc-darwin-arm64@14.2.15': + resolution: {integrity: sha512-Rvh7KU9hOUBnZ9TJ28n2Oa7dD9cvDBKua9IKx7cfQQ0GoYUwg9ig31O2oMwH3wm+pE3IkAQ67ZobPfEgurPZIA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.10': - resolution: {integrity: sha512-Y0TC+FXbFUQ2MQgimJ/7Ina2mXIKhE7F+GUe1SgnzRmwFY3hX2z8nyVCxE82I2RicspdkZnSWMn4oTjIKz4uzA==} + '@next/swc-darwin-x64@14.2.15': + resolution: {integrity: sha512-5TGyjFcf8ampZP3e+FyCax5zFVHi+Oe7sZyaKOngsqyaNEpOgkKB3sqmymkZfowy3ufGA/tUgDPPxpQx931lHg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.10': - resolution: {integrity: sha512-ZfQ7yOy5zyskSj9rFpa0Yd7gkrBnJTkYVSya95hX3zeBG9E55Z6OTNPn1j2BTFWvOVVj65C3T+qsjOyVI9DQpA==} + '@next/swc-linux-arm64-gnu@14.2.15': + resolution: {integrity: sha512-3Bwv4oc08ONiQ3FiOLKT72Q+ndEMyLNsc/D3qnLMbtUYTQAmkx9E/JRu0DBpHxNddBmNT5hxz1mYBphJ3mfrrw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.10': - resolution: {integrity: sha512-n2i5o3y2jpBfXFRxDREr342BGIQCJbdAUi/K4q6Env3aSx8erM9VuKXHw5KNROK9ejFSPf0LhoSkU/ZiNdacpQ==} + '@next/swc-linux-arm64-musl@14.2.15': + resolution: {integrity: sha512-k5xf/tg1FBv/M4CMd8S+JL3uV9BnnRmoe7F+GWC3DxkTCD9aewFRH1s5rJ1zkzDa+Do4zyN8qD0N8c84Hu96FQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.10': - resolution: {integrity: sha512-GXvajAWh2woTT0GKEDlkVhFNxhJS/XdDmrVHrPOA83pLzlGPQnixqxD8u3bBB9oATBKB//5e4vpACnx5Vaxdqg==} + '@next/swc-linux-x64-gnu@14.2.15': + resolution: {integrity: sha512-kE6q38hbrRbKEkkVn62reLXhThLRh6/TvgSP56GkFNhU22TbIrQDEMrO7j0IcQHcew2wfykq8lZyHFabz0oBrA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.10': - resolution: {integrity: sha512-opFFN5B0SnO+HTz4Wq4HaylXGFV+iHrVxd3YvREUX9K+xfc4ePbRrxqOuPOFjtSuiVouwe6uLeDtabjEIbkmDA==} + '@next/swc-linux-x64-musl@14.2.15': + resolution: {integrity: sha512-PZ5YE9ouy/IdO7QVJeIcyLn/Rc4ml9M2G4y3kCM9MNf1YKvFY4heg3pVa/jQbMro+tP6yc4G2o9LjAz1zxD7tQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.10': - resolution: {integrity: sha512-9NUzZuR8WiXTvv+EiU/MXdcQ1XUvFixbLIMNQiVHuzs7ZIFrJDLJDaOF1KaqttoTujpcxljM/RNAOmw1GhPPQQ==} + '@next/swc-win32-arm64-msvc@14.2.15': + resolution: {integrity: sha512-2raR16703kBvYEQD9HNLyb0/394yfqzmIeyp2nDzcPV4yPjqNUG3ohX6jX00WryXz6s1FXpVhsCo3i+g4RUX+g==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.10': - resolution: {integrity: sha512-fr3aEbSd1GeW3YUMBkWAu4hcdjZ6g4NBl1uku4gAn661tcxd1bHs1THWYzdsbTRLcCKLjrDZlNp6j2HTfrw+Bg==} + '@next/swc-win32-ia32-msvc@14.2.15': + resolution: {integrity: sha512-fyTE8cklgkyR1p03kJa5zXEaZ9El+kDNM5A+66+8evQS5e/6v0Gk28LqA0Jet8gKSOyP+OTm/tJHzMlGdQerdQ==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@next/swc-win32-x64-msvc@14.2.10': - resolution: {integrity: sha512-UjeVoRGKNL2zfbcQ6fscmgjBAS/inHBh63mjIlfPg/NG8Yn2ztqylXt5qilYb6hoHIwaU2ogHknHWWmahJjgZQ==} + '@next/swc-win32-x64-msvc@14.2.15': + resolution: {integrity: sha512-SzqGbsLsP9OwKNUG9nekShTwhj6JSB9ZLMWQ8g1gG6hdE5gQLncbnbymrwy2yVmH9nikSLYRYxYMFu78Ggp7/g==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -5163,15 +4978,9 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@radix-ui/colors@3.0.0': - resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} - '@radix-ui/number@1.0.1': resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} - '@radix-ui/number@1.1.0': - resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} - '@radix-ui/primitive@1.0.0': resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} @@ -5181,32 +4990,6 @@ packages: '@radix-ui/primitive@1.1.0': resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} - '@radix-ui/react-accessible-icon@1.1.0': - resolution: {integrity: sha512-i9Zg4NOSXlfUva0agzI2DjWrvFJm9uO4L6CMW7nmMa5CIOOX/Yin894W7WwjodFQWPwe5kmAJ4JF33R8slKI2g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-alert-dialog@1.1.1': - resolution: {integrity: sha512-wmCoJwj7byuVuiLKqDLlX7ClSUU0vd9sdCeM+2Ls+uf13+cpSJoMgwysHq1SGVVkJj5Xn0XWi1NoRCdkMpr6Mw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-arrow@1.0.3': resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: @@ -5233,45 +5016,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-aspect-ratio@1.1.0': - resolution: {integrity: sha512-dP87DM/Y7jFlPgUZTlhx6FF5CEzOiaxp2rBCKlaXlpH5Ip/9Fg5zZ9lDOQ5o/MOfUlf36eak14zoWYpgcgGoOg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-avatar@1.1.0': - resolution: {integrity: sha512-Q/PbuSMk/vyAd/UoIShVGZ7StHHeRFYU7wXmi5GV+8cLXflZAEpHL/F697H1klrzxKXNtZ97vWiC0q3RKUH8UA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-checkbox@1.1.0': - resolution: {integrity: sha512-3+kSzVfMONtP3B6CvaOrXLVTyGYws7tGmG5kOY0AfyH9sexkLytIwciNwjZhY0RoGOEbxI7bMS21XYB8H5itWQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-checkbox@1.1.1': resolution: {integrity: sha512-0i/EKJ222Afa1FE0C6pNJxDq1itzcl3HChE9DwskA4th4KRse8ojx8a1nVcOjwJdbpDLcz7uol77yYnQNMHdKw==} peerDependencies: @@ -5347,19 +5091,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-context-menu@2.2.1': - resolution: {integrity: sha512-wvMKKIeb3eOrkJ96s722vcidZ+2ZNfcYZWBPRHIB1VWrF+fiF851Io6LX0kmK5wTDQFKdulCCKJk2c3SBaQHvA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-context@1.0.0': resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} peerDependencies: @@ -5520,37 +5251,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-form@0.1.0': - resolution: {integrity: sha512-1/oVYPDjbFILOLIarcGcMKo+y6SbTVT/iUKVEw59CF4offwZgBgC3ZOeSBewjqU0vdA6FWTPWTN63obj55S/tQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-hover-card@1.1.1': - resolution: {integrity: sha512-IwzAOP97hQpDADYVKrEEHUH/b2LA+9MgB0LgdmnbFO2u/3M5hmEofjjr2M6CyzUblaAqJdFm6B7oFtU72DPXrA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-icons@1.3.0': - resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==} - peerDependencies: - react: ^16.x || ^17.x || ^18.x - '@radix-ui/react-id@1.0.0': resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} peerDependencies: @@ -5735,32 +5435,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-progress@1.1.0': - resolution: {integrity: sha512-aSzvnYpP725CROcxAOEBVZZSIQVQdHgBr2QQFKySsaD14u8dNT0batuXI+AAGDdAHfXH8rbnHmjYFqVJ21KkRg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-radio-group@1.2.0': - resolution: {integrity: sha512-yv+oiLaicYMBpqgfpSPw6q+RyXlLdIpQWDHZbUKURxe+nEh53hFXPPlfhfQQtYkS5MMK/5IWIa76SksleQZSzw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-roving-focus@1.1.0': resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} peerDependencies: @@ -5774,19 +5448,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-scroll-area@1.1.0': - resolution: {integrity: sha512-9ArIZ9HWhsrfqS765h+GZuLoxaRHD/j0ZWOWilsCvYTpYJp8XwCqNG7Dt9Nu/TItKOdgLGkOPCodQvDc+UMwYg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-select@1.2.2': resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} peerDependencies: @@ -5800,19 +5461,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-select@2.1.1': - resolution: {integrity: sha512-8iRDfyLtzxlprOo9IicnzvpsO1wNCkuwzzCM+Z5Rb5tNOpCdMvcc2AkzX0Fz+Tz9v6NJ5B/7EEgyZveo4FBRfQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-separator@1.1.0': resolution: {integrity: sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==} peerDependencies: @@ -5826,19 +5474,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slider@1.2.0': - resolution: {integrity: sha512-dAHCDA4/ySXROEPaRtaMV5WHL8+JB/DbtyTbJjYkY0RXmKMO2Ln8DFZhywG5/mVQ4WqHDBc8smc14yPXPqZHYA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-slot@1.0.0': resolution: {integrity: sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==} peerDependencies: @@ -5927,19 +5562,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-tooltip@1.1.1': - resolution: {integrity: sha512-LLE8nzNE4MzPMw3O2zlVlkLFid3y9hMUs7uCbSHyKSo+tCN4yMCf+ZCCcfrYgsOC0TiHBPQ1mtpJ2liY3ZT3SQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-use-callback-ref@1.0.0': resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} peerDependencies: @@ -6118,19 +5740,6 @@ packages: '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@radix-ui/themes@3.1.4': - resolution: {integrity: sha512-HmyU8UpoYPmdfXSQIwbEnJS2Wv/5wbzxe/Niw/sMLMJTrlZiUKM/dEOM7N+bc7w2OMpUaQ8OH9czCGpcjHx98w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: 16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: 16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@reduxjs/toolkit@1.9.7': resolution: {integrity: sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==} peerDependencies: @@ -6244,27 +5853,27 @@ packages: '@rushstack/eslint-patch@1.10.4': resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} - '@rushstack/node-core-library@4.0.2': - resolution: {integrity: sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==} + '@rushstack/node-core-library@5.10.1': + resolution: {integrity: sha512-BSb/KcyBHmUQwINrgtzo6jiH0HlGFmrUy33vO6unmceuVKTEyL2q+P0fQq2oB5hvXVWOEUhxB2QvlkZluvUEmg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/rig-package@0.5.2': - resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==} + '@rushstack/rig-package@0.5.3': + resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} - '@rushstack/terminal@0.10.0': - resolution: {integrity: sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==} + '@rushstack/terminal@0.14.4': + resolution: {integrity: sha512-NxACqERW0PHq8Rpq1V6v5iTHEwkRGxenjEW+VWqRYQ8T9puUzgmGHmEZUaUEDHAe9Qyvp0/Ew04sAiQw9XjhJg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@4.19.1': - resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==} + '@rushstack/ts-command-line@4.23.2': + resolution: {integrity: sha512-JJ7XZX5K3ThBBva38aomgsPv1L7FV6XmSOcR6HtM7HDFZJkepqT65imw26h9ggGqMjsY0R9jcl30tzKcVj9aOQ==} '@saucelabs/theme-github-codeblock@0.3.0': resolution: {integrity: sha512-+8xWxBfN+I8StJ0QXERMbGf+BHwRXHWV3mFl9uDayXERiZ/rR93d0nAS3s9s/rKjqh/YSm/4dThEkBNBLnGs4Q==} @@ -6284,20 +5893,20 @@ packages: '@scure/bip39@1.4.0': resolution: {integrity: sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==} - '@sentry-internal/feedback@7.119.0': - resolution: {integrity: sha512-om8TkAU5CQGO8nkmr7qsSBVkP+/vfeS4JgtW3sjoTK0fhj26+DljR6RlfCGWtYQdPSP6XV7atcPTjbSnsmG9FQ==} + '@sentry-internal/feedback@7.120.2': + resolution: {integrity: sha512-AAKW/Qii2qFA/jIZc9HK/CgQLfJ/9zBCqC9FF3bUTnAxzZAbJHO1TLnHqDl5k5wYtt449NrpObHORpopSk7TBg==} engines: {node: '>=12'} - '@sentry-internal/replay-canvas@7.119.0': - resolution: {integrity: sha512-NL02VQx6ekPxtVRcsdp1bp5Tb5w6vnfBKSIfMKuDRBy5A10Uc3GSoy/c3mPyHjOxB84452A+xZSx6bliEzAnuA==} + '@sentry-internal/replay-canvas@7.120.2': + resolution: {integrity: sha512-2Xm9rJxUA5/CCUYRHNH4VxG13eQpXvM05/cHQKn+pmjaPq/+3fbOHrZZM84gF1FSHjeN8Kg1igoMSekU2kavOQ==} engines: {node: '>=12'} - '@sentry-internal/tracing@7.119.0': - resolution: {integrity: sha512-oKdFJnn+56f0DHUADlL8o9l8jTib3VDLbWQBVkjD9EprxfaCwt2m8L5ACRBdQ8hmpxCEo4I8/6traZ7qAdBUqA==} + '@sentry-internal/tracing@7.120.2': + resolution: {integrity: sha512-eo2F8cP6X+vr54Mp6vu+NoQEDz0M5O24Tz8jPY0T1CpiWdwCmHb7Sln+oLXeQ3/LlWdVQihBfKDBZfBdUfsBTg==} engines: {node: '>=8'} - '@sentry/browser@7.119.0': - resolution: {integrity: sha512-WwmW1Y4D764kVGeKmdsNvQESZiAn9t8LmCWO0ucBksrjL2zw9gBPtOpRcO6l064sCLeSxxzCN+kIxhRm1gDFEA==} + '@sentry/browser@7.120.2': + resolution: {integrity: sha512-o5ll2Yv5MfnblbWxTvMlKK3RVXIbeJ+SPC+uw12b4j/pkrQg+/y7dyTLBXh6t0EgokSOsRUyYosQwSvxG/xs/Q==} engines: {node: '>=8'} '@sentry/cli@1.77.3': @@ -6313,12 +5922,16 @@ packages: resolution: {integrity: sha512-CS2kUv9rAJJEjiRat6wle3JATHypB0SyD7pt4cpX5y0dN5dZ1JrF57oLHRMnga9fxRivydHz7tMTuBhSSwhzjw==} engines: {node: '>=8'} + '@sentry/core@7.120.2': + resolution: {integrity: sha512-eurLBFQJC7WWWYoEna25Z9I/GJjqAmH339tv52XP8sqXV7B5hRcHDcfrsT/UGHpU316M24p3lWhj0eimtCZ0SQ==} + engines: {node: '>=8'} + '@sentry/hub@6.19.7': resolution: {integrity: sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==} engines: {node: '>=6'} - '@sentry/integrations@7.119.0': - resolution: {integrity: sha512-OHShvtsRW0A+ZL/ZbMnMqDEtJddPasndjq+1aQXw40mN+zeP7At/V1yPZyFaURy86iX7Ucxw5BtmzuNy7hLyTA==} + '@sentry/integrations@7.120.2': + resolution: {integrity: sha512-bMvL2fD3TGLM5YAUoQ2Qz6bYeVU8f7YRFNSjKNxK4EbvFgAU9j1FD6EKg0V0RNOJYnJjGIZYMmcWTXBbVTJL6w==} engines: {node: '>=8'} '@sentry/minimal@6.19.7': @@ -6335,8 +5948,8 @@ packages: peerDependencies: react: 15.x || 16.x || 17.x || 18.x - '@sentry/replay@7.119.0': - resolution: {integrity: sha512-BnNsYL+X5I4WCH6wOpY6HQtp4MgVt0NVlhLUsEyrvMUiTs0bPkDBrulsgZQBUKJsbOr3l9nHrFoNVB/0i6WNLA==} + '@sentry/replay@7.120.2': + resolution: {integrity: sha512-UAw0anHwXeej0Rfx+7qZVbRb3rj3mQ0DuHqdpPTSd9WpfRGOvCfthMIKD7rfHX7GjMnPMgdmsaU8K3lpe60h+w==} engines: {node: '>=12'} '@sentry/types@6.19.7': @@ -6347,6 +5960,10 @@ packages: resolution: {integrity: sha512-27qQbutDBPKGbuJHROxhIWc1i0HJaGLA90tjMu11wt0E4UNxXRX+UQl4Twu68v4EV3CPvQcEpQfgsViYcXmq+w==} engines: {node: '>=8'} + '@sentry/types@7.120.2': + resolution: {integrity: sha512-FWVoiblHQJ892GaOqdXx/5/n5XDLF28z81vJ0lCY49PMh8waz8LJ0b9RSmt9tasSDl0OQ7eUlPl1xu1jTrv1NA==} + engines: {node: '>=8'} + '@sentry/utils@6.19.7': resolution: {integrity: sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==} engines: {node: '>=6'} @@ -6355,6 +5972,10 @@ packages: resolution: {integrity: sha512-ZwyXexWn2ZIe2bBoYnXJVPc2esCSbKpdc6+0WJa8eutXfHq3FRKg4ohkfCBpfxljQGEfP1+kfin945lA21Ka+A==} engines: {node: '>=8'} + '@sentry/utils@7.120.2': + resolution: {integrity: sha512-jgnQlw11mRfQrQRAXbq4zEd+tbYwHel5eqeS/oU6EImXRjmHNtS79nB8MHvJeQu1FMCpFs1Ymrrs5FICwS6VeQ==} + engines: {node: '>=8'} + '@sentry/webpack-plugin@1.21.0': resolution: {integrity: sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==} engines: {node: '>= 8'} @@ -7723,14 +7344,14 @@ packages: '@vitest/utils@2.1.1': resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} - '@volar/language-core@1.11.1': - resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} + '@volar/language-core@2.4.11': + resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==} - '@volar/source-map@1.11.1': - resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} + '@volar/source-map@2.4.11': + resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==} - '@volar/typescript@1.11.1': - resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} + '@volar/typescript@2.4.11': + resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==} '@vue/compiler-core@3.5.9': resolution: {integrity: sha512-KE1sCdwqSKq0CQ/ltg3XnlMTKeinjegIkuFsuq9DKvNPmqLGdmI51ChZdGBBRXIvEYTLm8X/JxOuBQ1HqF/+PA==} @@ -7738,8 +7359,11 @@ packages: '@vue/compiler-dom@3.5.9': resolution: {integrity: sha512-gEAURwPo902AsJF50vl59VaWR+Cx6cX9SoqLYHu1jq9hDbmQlXvpZyYNIIbxa2JTJ+FD/oBQweVUwuTQv79KTg==} - '@vue/language-core@1.8.27': - resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + + '@vue/language-core@2.1.6': + resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -7938,19 +7562,24 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - addons-linter@6.28.0: - resolution: {integrity: sha512-fCTjXL/yG4hwq74JG8tQdrvEu0OvGrEN9yU+Df0020RDtHl3g/tTCyMeC4G1uyk8IuyMzp4myCBNnOGC7MWSQQ==} - engines: {node: '>=16.0.0'} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + addons-linter@7.1.0: + resolution: {integrity: sha512-UmkUB3dZSpf8bqhlulGDbpoxBwcfOk8JvaJTRvJ+AAXKHvTjqeNlFC+GRMqa0EjJJh/0yqpBaJzyaUIx+fjl+A==} + engines: {node: '>=18.0.0'} hasBin: true addons-moz-compare@1.3.0: resolution: {integrity: sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==} - addons-scanner-utils@9.10.1: - resolution: {integrity: sha512-Tz9OUQx9Ja0TyQ+H2GakB9KlJ50myI6ESBGRlA8N80nHBzMjjPRFGm0APADSaCd5NP74SrFtEvL4TRpDwZXETA==} + addons-scanner-utils@9.11.0: + resolution: {integrity: sha512-X95V8ymnue9EHmOLz3zJTGHvHDFlWKiavlH+kJKOlv2sJDWFvD3TWeJMHJgxS9GKOqT/545mOXvX3vuuGGum+g==} peerDependencies: body-parser: '>=1.20.3' - express: 4.18.3 + express: 4.19.2 node-fetch: 2.6.11 safe-compare: 1.1.4 peerDependenciesMeta: @@ -7987,9 +7616,20 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -8166,17 +7806,10 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - asn1js@3.0.5: resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} engines: {node: '>=12.0.0'} - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} @@ -8199,9 +7832,6 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true - async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - async@3.2.2: resolution: {integrity: sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==} @@ -8216,6 +7846,9 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + auto-bind@4.0.0: resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} engines: {node: '>=8'} @@ -8231,18 +7864,12 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - - aws4@1.13.2: - resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - axe-core@4.10.0: resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} - axios@0.26.1: - resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + axios@0.28.0: + resolution: {integrity: sha512-Tu7NYoGY4Yoc7I+Npf9HhUMtEEpV7ZiLH9yndTCoNhcpBH0kwcvFbzYN9/u5QKI5A6uefjsNNWaz5olJVYS62Q==} axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} @@ -8336,9 +7963,6 @@ packages: batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - bech32@2.0.0: resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} @@ -8395,6 +8019,10 @@ packages: resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} engines: {node: '>=14.16'} + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + bplist-parser@0.2.0: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} @@ -8433,9 +8061,6 @@ packages: buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -8448,10 +8073,9 @@ packages: builtins@1.0.3: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} - bunyan@1.8.15: - resolution: {integrity: sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==} - engines: {'0': node >=0.10.0} - hasBin: true + bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} @@ -8519,6 +8143,10 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} @@ -8532,9 +8160,6 @@ packages: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} hasBin: true - caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -8634,8 +8259,8 @@ packages: '@chromatic-com/playwright': optional: true - chrome-launcher@0.15.1: - resolution: {integrity: sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==} + chrome-launcher@1.1.2: + resolution: {integrity: sha512-YclTJey34KUm5jB1aEJCq807bSievi7Nb/TU4Gu504fUYi3jw3KCIaH6L7nFWQhdEgH3V+wCh+kKD1P5cXnfxw==} engines: {node: '>=12.13.0'} hasBin: true @@ -8656,9 +8281,6 @@ packages: class-variance-authority@0.7.0: resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} - classnames@2.3.2: - resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} - classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -8741,10 +8363,6 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - clsx@1.2.1: - resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} - engines: {node: '>=6'} - clsx@2.0.0: resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} engines: {node: '>=6'} @@ -8863,6 +8481,9 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} @@ -8896,6 +8517,9 @@ packages: confbox@0.1.7: resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -8903,6 +8527,10 @@ packages: resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} engines: {node: '>=12'} + configstore@7.0.0: + resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} + engines: {node: '>=18'} + connect-history-api-fallback@2.0.0: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} @@ -8969,15 +8597,9 @@ packages: core-js-pure@3.38.1: resolution: {integrity: sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==} - core-js@3.29.0: - resolution: {integrity: sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==} - core-js@3.38.1: resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==} - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -9348,18 +8970,10 @@ packages: damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} - dashify@2.0.0: resolution: {integrity: sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==} engines: {node: '>=4'} - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} @@ -9465,9 +9079,6 @@ packages: deep-object-diff@1.1.9: resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} - deepcopy@2.1.0: - resolution: {integrity: sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==} - deepmerge@2.2.1: resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} engines: {node: '>=0.10.0'} @@ -9480,6 +9091,10 @@ packages: resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} engines: {node: '>=12'} + default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + default-gateway@6.0.3: resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} engines: {node: '>= 10'} @@ -9499,6 +9114,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -9627,15 +9246,6 @@ packages: peerDependencies: typedoc-plugin-markdown: '>=4.0.0' - docusaurus-theme-search-typesense@0.20.0-0: - resolution: {integrity: sha512-MW6fLJsZYfKKDRXC6pTe77OMhyQBishJO/L1M14hZymavKW2IyYFy+Mczp8TXL9QqvkLsW7Ja7YtnWXjmt5sCw==} - engines: {node: '>=18'} - peerDependencies: - '@docusaurus/core': 3.4.0 - '@docusaurus/theme-common': 3.4.0 - react: ^18.0.0 - react-dom: ^18.0.0 - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -9689,6 +9299,10 @@ packages: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} engines: {node: '>=10'} + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} + dotenv-expand@10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} engines: {node: '>=12'} @@ -9705,10 +9319,6 @@ packages: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} - dtrace-provider@0.8.8: - resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==} - engines: {node: '>=0.10'} - duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -9718,12 +9328,6 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -9846,10 +9450,6 @@ packages: es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - es6-promisify@7.0.0: - resolution: {integrity: sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==} - engines: {node: '>=6'} - esbuild-plugin-alias@0.2.1: resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} @@ -10003,11 +9603,6 @@ packages: peerDependencies: eslint: 8.57.1 - eslint-plugin-react-refresh@0.4.12: - resolution: {integrity: sha512-9neVjoGv20FwYtCP6CB1dzR1vr57ZDNOXst21wd2xJ/cTlM2xLq0GWVlSNTdMn/4BtP6cHYBMCSp1wFBJ9jBsg==} - peerDependencies: - eslint: 8.57.1 - eslint-plugin-react@7.37.0: resolution: {integrity: sha512-IHBePmfWH5lKhJnJ7WB1V+v/GolbB0rjS8XYVCSQCZKaQCAUhMoVoOEn1Ef8Z8Wf0a7l8KTJvuZg5/e4qrZ6nA==} engines: {node: '>=4'} @@ -10070,8 +9665,8 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - espree@10.0.1: - resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@9.6.1: @@ -10170,6 +9765,10 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -10220,10 +9819,6 @@ packages: resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} hasBin: true - extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} @@ -10309,10 +9904,6 @@ packages: resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} engines: {node: '>=0.4.0'} - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - fetch-retry@5.0.6: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} @@ -10390,8 +9981,9 @@ packages: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - firefox-profile@4.3.2: - resolution: {integrity: sha512-/C+Eqa0YgIsQT2p66p7Ygzqe7NlE/GNTbhw2SBCm5V3OsWDPITNdTPEcH2Q2fe7eMpYYNPKdUcuVioZBZiR6kA==} + firefox-profile@4.7.0: + resolution: {integrity: sha512-aGApEu5bfCNbA4PGUZiRJAIU6jKmghV2UVdklXAofnNtiDjqYw0czLS46W7IfFqVKgKhFB8Ao2YoNGHY4BoIMQ==} + engines: {node: '>=18'} hasBin: true first-chunk-stream@3.0.0: @@ -10429,9 +10021,6 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - fork-ts-checker-webpack-plugin@6.5.3: resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} @@ -10457,10 +10046,6 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} - form-data@3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} @@ -10473,10 +10058,6 @@ packages: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - formidable@2.1.2: resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} @@ -10517,10 +10098,6 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-extra@11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} - engines: {node: '>=14.14'} - fs-extra@11.1.1: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} @@ -10537,10 +10114,6 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} - fs-extra@9.0.1: - resolution: {integrity: sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==} - engines: {node: '>=10'} - fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -10636,9 +10209,6 @@ packages: get-tsconfig@4.8.1: resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} - getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - giget@1.2.3: resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} hasBin: true @@ -10671,11 +10241,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - glob@10.4.1: - resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} - engines: {node: '>=16 || 14 >=14.18'} - hasBin: true - glob@10.4.2: resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} engines: {node: '>=16 || 14 >=14.18'} @@ -10685,10 +10250,6 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - glob@6.0.4: - resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} - deprecated: Glob versions prior to v9 are no longer supported - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -10698,6 +10259,10 @@ packages: engines: {node: '>=12'} deprecated: Glob versions prior to v9 are no longer supported + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} @@ -10837,15 +10402,6 @@ packages: resolution: {integrity: sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg==} engines: {node: '>=18.0.0'} - har-schema@2.0.0: - resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} - engines: {node: '>=4'} - - har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported - has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -10890,6 +10446,9 @@ packages: hast-util-from-html-isomorphic@2.0.0: resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + hast-util-from-html@2.0.1: + resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + hast-util-from-html@2.0.3: resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} @@ -10964,6 +10523,9 @@ packages: hpack.js@2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + html-dom-parser@5.0.10: + resolution: {integrity: sha512-GwArYL3V3V8yU/mLKoFF7HlLBv80BZ2Ey1BzfVNRpAci0cEKhFHI/Qh8o8oyt3qlAMLlK250wsxLdYX4viedvg==} + html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -10984,6 +10546,15 @@ packages: engines: {node: ^14.13.1 || >=16.0.0} hasBin: true + html-react-parser@5.1.18: + resolution: {integrity: sha512-65BwC0zzrdeW96jB2FRr5f1ovBhRMpLPJNvwkY5kA8Ay5xdL9t/RH2/uUTM7p+cl5iM88i6dDk4LXtfMnRmaJQ==} + peerDependencies: + '@types/react': 0.14 || 15 || 16 || 17 || 18 + react: 0.14 || 15 || 16 || 17 || 18 + peerDependenciesMeta: + '@types/react': + optional: true + html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} @@ -11009,6 +10580,9 @@ packages: htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} @@ -11047,10 +10621,6 @@ packages: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} - http-signature@1.2.0: - resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} - engines: {node: '>=0.8', npm: '>=1.3.7'} - http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -11078,6 +10648,10 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -11186,6 +10760,14 @@ packages: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} engines: {node: '>=10'} + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -11331,6 +10913,11 @@ packages: engines: {node: '>=8'} hasBin: true + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -11376,10 +10963,24 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} + engines: {node: '>=18'} + hasBin: true + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} + is-installed-globally@1.0.0: + resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} + engines: {node: '>=18'} + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -11391,9 +10992,6 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - is-mergeable-object@1.1.1: - resolution: {integrity: sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==} - is-nan@1.3.2: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} @@ -11433,6 +11031,10 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + is-plain-obj@3.0.0: resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} engines: {node: '>=10'} @@ -11573,10 +11175,7 @@ packages: isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: - ws: '*' - - isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + ws: 8.18.0 istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} @@ -11774,8 +11373,8 @@ packages: joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} - jose@4.13.1: - resolution: {integrity: sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==} + jose@5.9.2: + resolution: {integrity: sha512-ILI2xx/I57b20sd7rHZvgiiQrmp2mcotwsAH+5ajbpFQbrYVQdNHYlQhoA5cFb78CgtBOxtC05TeA+mcgkuCqQ==} jose@5.9.3: resolution: {integrity: sha512-egLIoYSpcd+QUF+UHgobt5YzI2Pkw/H39ou9suW687MY6PmCwPmkNV/4TNjn1p2tX5xO3j0d0sq5hiYE24bSlg==} @@ -11791,9 +11390,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jscodeshift@0.15.2: resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} hasBin: true @@ -11833,6 +11429,10 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-rpc-engine@6.1.0: resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} engines: {node: '>=10.0.0'} @@ -11850,15 +11450,9 @@ packages: json-schema-typed@7.0.3: resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json-to-pretty-yaml@1.2.2: resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} engines: {node: '>= 0.2.0'} @@ -11884,14 +11478,6 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonwebtoken@9.0.0: - resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==} - engines: {node: '>=12', npm: '>=6'} - - jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} - engines: {node: '>=0.6.0'} - jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -11899,12 +11485,6 @@ packages: jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} - jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} - - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - katex@0.16.11: resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} hasBin: true @@ -11930,6 +11510,10 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + ky@1.7.3: + resolution: {integrity: sha512-Sz49ZWR/BjNOq+2UK1k9ONZUVq8eyuCj30Zgc8VrRNtFlTBZduzuvehUd5kjQF6/Fms3Ir3EYqzJryw9tRvsSw==} + engines: {node: '>=18'} + language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -11941,6 +11525,10 @@ packages: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} + latest-version@9.0.0: + resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} + engines: {node: '>=18'} + launch-editor@2.9.1: resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} @@ -11973,8 +11561,8 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lighthouse-logger@1.4.2: - resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + lighthouse-logger@2.0.1: + resolution: {integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==} lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} @@ -12024,6 +11612,10 @@ packages: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + localforage@1.10.0: resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} @@ -12052,11 +11644,11 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + lodash.deburr@4.1.0: + resolution: {integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==} - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -12073,6 +11665,9 @@ packages: lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -12096,10 +11691,6 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} - longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -12659,6 +12250,9 @@ packages: mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + mlly@1.7.3: + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} + modern-ahocorasick@1.0.1: resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} @@ -12689,8 +12283,8 @@ packages: typescript: optional: true - muggle-string@0.3.1: - resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} multer@1.4.4-lts.1: resolution: {integrity: sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==} @@ -12711,23 +12305,16 @@ packages: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - mv@2.1.1: - resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} - engines: {node: '>=0.8.0'} - mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.20.0: - resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.0.7: - resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} + nanoid@5.0.9: + resolution: {integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==} engines: {node: ^18 || >=20} hasBin: true @@ -12740,10 +12327,6 @@ packages: natural-orderby@2.0.3: resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} - ncp@2.0.0: - resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} - hasBin: true - negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -12751,8 +12334,8 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next@14.2.10: - resolution: {integrity: sha512-sDDExXnh33cY3RkS9JuFEKaS4HmlWmDKP1VJioucCG6z5KuA008DPsDZOzi8UfqEk3Ii+2NCQSJrfbEWtZZfww==} + next@14.2.15: + resolution: {integrity: sha512-h9ctmOokpoDphRvMGnwOJAedT6zKhwqyZML9mDtspgf4Rh3Pn7UTYKqePNoDvhsWBAO5GoPNYshnAUGIazVGmw==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -12782,10 +12365,6 @@ packages: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} engines: {node: '>= 0.10.5'} - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} @@ -12805,10 +12384,6 @@ packages: encoding: optional: true - node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -12873,9 +12448,6 @@ packages: engines: {node: ^14.16.0 || >=16.10.0} hasBin: true - oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -12968,6 +12540,10 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -13069,6 +12645,10 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-json@10.0.1: + resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} + engines: {node: '>=18'} + package-json@8.1.1: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} @@ -13112,9 +12692,9 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse-json@6.0.2: - resolution: {integrity: sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} @@ -13189,8 +12769,8 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@0.1.10: - resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} path-to-regexp@1.9.0: resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} @@ -13221,9 +12801,6 @@ packages: pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} @@ -13264,10 +12841,17 @@ packages: pino-std-serializers@6.2.2: resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + pino@8.20.0: resolution: {integrity: sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==} hasBin: true + pino@9.4.0: + resolution: {integrity: sha512-nbkQb5+9YPhQRz/BeQmrWpEknAaqjpAqRK8NwJpmrX/JHu7JuZC5G1CeAwJDJfGes4h+YihC6in3Q2nGb+Y09w==} + hasBin: true + pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -13294,6 +12878,9 @@ packages: pkg-types@1.2.0: resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==} + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} @@ -13899,6 +13486,9 @@ packages: process-warning@3.0.0: resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + process-warning@4.0.0: + resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -13999,10 +13589,6 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} - qs@6.5.3: - resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} - engines: {node: '>=0.6'} - querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -14166,6 +13752,9 @@ packages: react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-property@2.0.2: + resolution: {integrity: sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==} + react-redux@8.1.3: resolution: {integrity: sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==} peerDependencies: @@ -14191,16 +13780,6 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-remove-scroll-bar@2.3.4: - resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - react-remove-scroll-bar@2.3.6: resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} engines: {node: '>=10'} @@ -14422,9 +14001,6 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -14465,6 +14041,10 @@ packages: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true + rehype-jargon@3.1.0: + resolution: {integrity: sha512-DTvSVI0MPa9Gen7oiob71ROG+ztagQ2KIDbM/1vUsZvrh0f8G2YyxrNoS4AL0WQHbHwwNzg/wLz301B3u+Tq7Q==} + engines: {node: '>=18', npm: '>=9'} + rehype-katex@7.0.1: resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} @@ -14537,11 +14117,6 @@ packages: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} - request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -14621,11 +14196,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@2.4.5: - resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -14669,6 +14239,10 @@ packages: engines: {node: '>=12.0.0'} hasBin: true + run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -14700,9 +14274,6 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-json-stringify@1.2.0: - resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==} - safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -14786,11 +14357,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} - engines: {node: '>=10'} - hasBin: true - semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} @@ -14840,10 +14406,6 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true - shallow-clone@3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} @@ -14883,10 +14445,6 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - sign-addon@5.3.0: - resolution: {integrity: sha512-7nHlCzhQgVMLBNiXVEgbG/raq48awOW0lYMN5uo1BaB3mp0+k8M8pvDwbfTlr3apcxZJsk9HQsAW1POwoJugpQ==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -14951,6 +14509,9 @@ packages: sonic-boom@3.8.1: resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + sort-css-media-queries@2.2.0: resolution: {integrity: sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==} engines: {node: '>= 6.3.0'} @@ -15035,11 +14596,6 @@ packages: resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} engines: {node: '>=12'} - sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true - stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -15090,13 +14646,6 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - stream-to-array@2.3.0: - resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} - - stream-to-promise@3.0.0: - resolution: {integrity: sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==} - engines: {node: '>= 10'} - streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -15221,10 +14770,16 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-json-comments@5.0.0: - resolution: {integrity: sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==} + strip-json-comments@5.0.1: + resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==} engines: {node: '>=14.16'} + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + + style-to-js@1.1.16: + resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} + style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -15413,6 +14968,9 @@ packages: thread-stream@2.7.0: resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + throttle-debounce@5.0.2: resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} engines: {node: '>=12.22'} @@ -15463,14 +15021,14 @@ packages: title-case@3.0.3: resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} - tmp@0.2.1: - resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} - engines: {node: '>=8.17.0'} - tmp@0.2.3: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} @@ -15502,18 +15060,10 @@ packages: toposort@2.0.2: resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} - tosource@1.0.0: - resolution: {integrity: sha512-N6g8eQ1eerw6Y1pBhdgkubWIiPFwXa2POSUrlL8jth5CyyEWNWzoGKRkO3CaO7Jx27hlJP54muB3btIAbx4MPg==} - engines: {node: '>=0.4.0'} - totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} - tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -15683,9 +15233,6 @@ packages: tween-functions@1.2.0: resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==} - tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - tweetnacl@1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} @@ -15697,10 +15244,6 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - type-fest@0.16.0: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} @@ -15729,6 +15272,10 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + type-fest@4.26.1: resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} @@ -15811,35 +15358,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - typesense-docsearch-css@0.4.1: - resolution: {integrity: sha512-mN8K18pfIpCrhzsMAJBzoS7l/YDcC4P3f9vsScenUceXmC8n3FCPldmF10dKDJmK3Lr7aAScQt70jCA5126y2w==} - - typesense-docsearch-react@3.4.1: - resolution: {integrity: sha512-d0PQym/B/p5oP+hfdFEOH6goiKa1JLR63bikZSDGq1+jT2FtuwNrdMGVBZZMNFUsXVsJRA8ULHJpsREmfSJmVw==} - peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: '>= 16.8.0 < 19.0.0' - react-dom: '>= 16.8.0 < 19.0.0' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true - - typesense-instantsearch-adapter@2.8.0: - resolution: {integrity: sha512-2q4QVpHoUV0ncf1XOqIC0dufOTkFRxQ0mHzg//H3WK02ZYqdNNPCAacZODhQlltl1cNJdTI8Y4uuGVd6fJuGzw==} - engines: {node: '>=16'} - peerDependencies: - '@babel/runtime': ^7.17.2 - - typesense@1.8.2: - resolution: {integrity: sha512-aBpePjA99Qvo+OP2pJwMpvga4Jrm1Y2oV5NsrWXBxlqUDNEUCPZBIksPv2Hq0jxQxHhLLyJVbjXjByXsvpCDVA==} - engines: {node: '>=18'} - peerDependencies: - '@babel/runtime': ^7.23.2 - ua-parser-js@1.0.39: resolution: {integrity: sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==} hasBin: true @@ -15959,10 +15477,6 @@ packages: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} - universalify@1.0.0: - resolution: {integrity: sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==} - engines: {node: '>= 10.0.0'} - universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -16002,6 +15516,10 @@ packages: resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} engines: {node: '>=14.16'} + update-notifier@7.3.1: + resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} + engines: {node: '>=18'} + upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} @@ -16110,11 +15628,6 @@ packages: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} hasBin: true - uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -16144,10 +15657,6 @@ packages: validate-npm-package-name@3.0.0: resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} - validator@13.12.0: - resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} - engines: {node: '>= 0.10'} - value-equal@1.0.1: resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} @@ -16162,10 +15671,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} - vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -16191,8 +15696,8 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-plugin-dts@3.9.1: - resolution: {integrity: sha512-rVp2KM9Ue22NGWB8dNtWEr+KekN3rIgz1tWD050QnRGlriUCmaDwa7qA5zDEjbXg5lAXhYMSBJtx3q3hQIJZSg==} + vite-plugin-dts@4.3.0: + resolution: {integrity: sha512-LkBJh9IbLwL6/rxh0C1/bOurDrIEmRE7joC+jFdOEEciAFPbpEKOLSAr5nNh5R7CJ45cMbksTrFfy52szzC5eA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -16270,19 +15775,13 @@ packages: jsdom: optional: true + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + vue-parser@1.1.6: resolution: {integrity: sha512-v3/R7PLbaFVF/c8IIzWs1HgRpT2gN0dLRkaLIT5q+zJGVgmhN4VuZJF4Y9N4hFtFjS4B1EHxAOP6/tzqM4Ug2g==} engines: {node: '>= 4.0.0', npm: '>= 3.0.0'} - vue-template-compiler@2.7.16: - resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} - - vue-tsc@1.8.27: - resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} - hasBin: true - peerDependencies: - typescript: '*' - w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -16304,10 +15803,6 @@ packages: resolution: {integrity: sha512-AmboGZEnZoIcVCzSlkLEmNFEqJN+IwgshJ5S7pi30uNUTce4LvWkifQzsQRxnWj47G8gkqZxlyGlyQplsnIS7w==} hasBin: true - watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} - watchpack@2.4.2: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} @@ -16318,9 +15813,9 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-ext@7.12.0: - resolution: {integrity: sha512-h+uWOYBlHlPKy5CqxuZKocgOdL8J7I4ctMw/rAGbQl7jq7tr+NmY/Lhh2FPMSlJ1Y0T2VeUqwBVighK0MM1+zA==} - engines: {node: '>=14.0.0', npm: '>=6.9.0'} + web-ext@8.3.0: + resolution: {integrity: sha512-mXSOiDtmm3n0KNpSuQ65fJpypAoNLAmZv3QkdlVbJ6etn0BK+hl/k+tjHefSIKdbzGUIeFbhn2oxWMe9Tdyrdg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true web-namespaces@2.0.1: @@ -16538,6 +16033,9 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + when-exit@2.1.3: + resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} + when@3.7.7: resolution: {integrity: sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==} @@ -16585,6 +16083,10 @@ packages: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} @@ -16627,41 +16129,6 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ws@6.2.3: - resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -16686,8 +16153,8 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} - xml2js@0.5.0: - resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + xml2js@0.6.2: + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} engines: {node: '>=4.0.0'} xmlbuilder@11.0.1: @@ -16734,10 +16201,6 @@ packages: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} - yargs@17.7.1: - resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} - engines: {node: '>=12'} - yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -16764,11 +16227,6 @@ packages: yup@1.4.0: resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==} - z-schema@5.0.5: - resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} - engines: {node: '>=8.0.0'} - hasBin: true - zip-dir@2.0.0: resolution: {integrity: sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==} @@ -16812,10 +16270,6 @@ snapshots: '@adraffy/ens-normalize@1.11.0': {} - '@algolia/autocomplete-core@1.8.2': - dependencies: - '@algolia/autocomplete-shared': 1.8.2 - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': dependencies: '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) @@ -16832,20 +16286,12 @@ snapshots: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.8.2(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': - dependencies: - '@algolia/autocomplete-shared': 1.8.2 - '@algolia/client-search': 4.24.0 - algoliasearch: 4.24.0 - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': dependencies: '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) '@algolia/client-search': 4.24.0 algoliasearch: 4.24.0 - '@algolia/autocomplete-shared@1.8.2': {} - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': dependencies: '@algolia/client-search': 4.24.0 @@ -17130,6 +16576,12 @@ snapshots: transitivePeerDependencies: - encoding + '@artsy/to-title-case@1.1.0': + dependencies: + lodash.deburr: 4.1.0 + lodash.isnumber: 3.0.3 + lodash.upperfirst: 4.3.1 + '@aw-web-design/x-default-browser@1.4.126': dependencies: default-browser-id: 3.0.0 @@ -18021,10 +17473,6 @@ snapshots: core-js-pure: 3.38.1 regenerator-runtime: 0.14.1 - '@babel/runtime@7.21.0': - dependencies: - regenerator-runtime: 0.13.11 - '@babel/runtime@7.25.6': dependencies: regenerator-runtime: 0.14.1 @@ -18481,7 +17929,7 @@ snapshots: '@devicefarmer/adbkit-monkey@1.2.1': {} - '@devicefarmer/adbkit@3.2.3': + '@devicefarmer/adbkit@3.2.6': dependencies: '@devicefarmer/adbkit-logcat': 2.1.3 '@devicefarmer/adbkit-monkey': 1.2.1 @@ -18510,97 +17958,6 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/core@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': - dependencies: - '@babel/core': 7.25.2 - '@babel/generator': 7.25.6 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-runtime': 7.25.4(@babel/core@7.25.2) - '@babel/preset-env': 7.25.4(@babel/core@7.25.2) - '@babel/preset-react': 7.24.7(@babel/core@7.25.2) - '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) - '@babel/runtime': 7.25.6 - '@babel/runtime-corejs3': 7.25.6 - '@babel/traverse': 7.25.6 - '@docusaurus/cssnano-preset': 3.4.0 - '@docusaurus/logger': 3.4.0 - '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) - autoprefixer: 10.4.20(postcss@8.4.47) - babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.95.0) - babel-plugin-dynamic-import-node: 2.3.3 - boxen: 6.2.1 - chalk: 4.1.2 - chokidar: 3.6.0 - clean-css: 5.3.3 - cli-table3: 0.6.5 - combine-promises: 1.2.0 - commander: 5.1.0 - copy-webpack-plugin: 11.0.0(webpack@5.95.0) - core-js: 3.38.1 - css-loader: 6.11.0(webpack@5.95.0) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.95.0) - cssnano: 6.1.2(postcss@8.4.47) - del: 6.1.1 - detect-port: 1.6.1 - escape-html: 1.0.3 - eta: 2.2.0 - eval: 0.1.8 - file-loader: 6.2.0(webpack@5.95.0) - fs-extra: 11.2.0 - html-minifier-terser: 7.2.0 - html-tags: 3.3.1 - html-webpack-plugin: 5.6.0(webpack@5.95.0) - leven: 3.1.0 - lodash: 4.17.21 - mini-css-extract-plugin: 2.9.1(webpack@5.95.0) - p-map: 4.0.0 - postcss: 8.4.47 - postcss-loader: 7.3.4(postcss@8.4.47)(typescript@5.6.2)(webpack@5.95.0) - prompts: 2.4.2 - react: 18.3.1 - react-dev-utils: 12.0.1(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0) - react-dom: 18.3.1(react@18.3.1) - react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.95.0) - react-router: 5.3.4(react@18.3.1) - react-router-config: 5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1) - react-router-dom: 5.3.4(react@18.3.1) - rtl-detect: 1.1.2 - semver: 7.6.3 - serve-handler: 6.1.5 - shelljs: 0.8.5 - terser-webpack-plugin: 5.3.10(webpack@5.95.0) - tslib: 2.7.0 - update-notifier: 6.0.2 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) - webpack: 5.95.0 - webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack@5.95.0) - webpack-merge: 5.10.0 - webpackbar: 5.0.2(webpack@5.95.0) - transitivePeerDependencies: - - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - '@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: '@babel/core': 7.25.2 @@ -18693,13 +18050,6 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/cssnano-preset@3.4.0': - dependencies: - cssnano-preset-advanced: 6.1.2(postcss@8.4.47) - postcss: 8.4.47 - postcss-sort-media-queries: 5.2.0(postcss@8.4.47) - tslib: 2.7.0 - '@docusaurus/cssnano-preset@3.5.2': dependencies: cssnano-preset-advanced: 6.1.2(postcss@8.4.47) @@ -18707,53 +18057,11 @@ snapshots: postcss-sort-media-queries: 5.2.0(postcss@8.4.47) tslib: 2.7.0 - '@docusaurus/logger@3.4.0': - dependencies: - chalk: 4.1.2 - tslib: 2.7.0 - '@docusaurus/logger@3.5.2': dependencies: chalk: 4.1.2 tslib: 2.7.0 - '@docusaurus/mdx-loader@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': - dependencies: - '@docusaurus/logger': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) - '@mdx-js/mdx': 3.0.1 - '@slorber/remark-comment': 1.0.0 - escape-html: 1.0.3 - estree-util-value-to-estree: 3.1.2 - file-loader: 6.2.0(webpack@5.95.0) - fs-extra: 11.2.0 - image-size: 1.1.1 - mdast-util-mdx: 3.0.0 - mdast-util-to-string: 4.0.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - rehype-raw: 7.0.0 - remark-directive: 3.0.0 - remark-emoji: 4.0.1 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.0 - stringify-object: 3.3.0 - tslib: 2.7.0 - unified: 11.0.5 - unist-util-visit: 5.0.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) - vfile: 6.0.3 - webpack: 5.95.0 - transitivePeerDependencies: - - '@docusaurus/types' - - '@swc/core' - - esbuild - - supports-color - - typescript - - uglify-js - - webpack-cli - '@docusaurus/mdx-loader@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.5.2 @@ -18791,24 +18099,6 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@types/history': 4.7.11 - '@types/react': 18.3.9 - '@types/react-router-config': 5.0.11 - '@types/react-router-dom': 5.3.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-helmet-async: 2.0.5(react@18.3.1) - react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - transitivePeerDependencies: - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - webpack-cli - '@docusaurus/module-type-aliases@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -18902,44 +18192,6 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.4.0(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': - dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/logger': 3.4.0 - '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/module-type-aliases': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) - '@types/react-router-config': 5.0.11 - combine-promises: 1.2.0 - fs-extra: 11.2.0 - js-yaml: 4.1.0 - lodash: 4.17.21 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - tslib: 2.7.0 - utility-types: 3.11.0 - webpack: 5.95.0 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - '@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) @@ -19390,11 +18642,6 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-translations@3.4.0': - dependencies: - fs-extra: 11.2.0 - tslib: 2.7.0 - '@docusaurus/theme-translations@3.5.2': dependencies: fs-extra: 11.2.0 @@ -19402,26 +18649,6 @@ snapshots: '@docusaurus/tsconfig@3.5.2': {} - '@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@mdx-js/mdx': 3.0.1 - '@types/history': 4.7.11 - '@types/react': 18.3.9 - commander: 5.1.0 - joi: 17.13.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - utility-types: 3.11.0 - webpack: 5.95.0 - webpack-merge: 5.10.0 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - webpack-cli - '@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@mdx-js/mdx': 3.0.1 @@ -19442,62 +18669,12 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': - dependencies: - tslib: 2.7.0 - optionalDependencies: - '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - - '@docusaurus/utils-common@3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': - dependencies: - tslib: 2.7.0 - optionalDependencies: - '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: tslib: 2.7.0 optionalDependencies: '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': - dependencies: - '@docusaurus/logger': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - fs-extra: 11.2.0 - joi: 17.13.3 - js-yaml: 4.1.0 - lodash: 4.17.21 - tslib: 2.7.0 - transitivePeerDependencies: - - '@docusaurus/types' - - '@swc/core' - - esbuild - - supports-color - - typescript - - uglify-js - - webpack-cli - - '@docusaurus/utils-validation@3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': - dependencies: - '@docusaurus/logger': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - fs-extra: 11.2.0 - joi: 17.13.3 - js-yaml: 4.1.0 - lodash: 4.17.21 - tslib: 2.7.0 - transitivePeerDependencies: - - '@docusaurus/types' - - '@swc/core' - - esbuild - - supports-color - - typescript - - uglify-js - - webpack-cli - '@docusaurus/utils-validation@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.5.2 @@ -19517,70 +18694,6 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': - dependencies: - '@docusaurus/logger': 3.4.0 - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@svgr/webpack': 8.1.0(typescript@5.6.2) - escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.95.0) - fs-extra: 11.2.0 - github-slugger: 1.5.0 - globby: 11.1.0 - gray-matter: 4.0.3 - jiti: 1.21.6 - js-yaml: 4.1.0 - lodash: 4.17.21 - micromatch: 4.0.8 - prompts: 2.4.2 - resolve-pathname: 3.0.0 - shelljs: 0.8.5 - tslib: 2.7.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) - utility-types: 3.11.0 - webpack: 5.95.0 - optionalDependencies: - '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - transitivePeerDependencies: - - '@swc/core' - - esbuild - - supports-color - - typescript - - uglify-js - - webpack-cli - - '@docusaurus/utils@3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': - dependencies: - '@docusaurus/logger': 3.4.0 - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@svgr/webpack': 8.1.0(typescript@5.6.2) - escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.95.0) - fs-extra: 11.2.0 - github-slugger: 1.5.0 - globby: 11.1.0 - gray-matter: 4.0.3 - jiti: 1.21.6 - js-yaml: 4.1.0 - lodash: 4.17.21 - micromatch: 4.0.8 - prompts: 2.4.2 - resolve-pathname: 3.0.0 - shelljs: 0.8.5 - tslib: 2.7.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) - utility-types: 3.11.0 - webpack: 5.95.0 - optionalDependencies: - '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - transitivePeerDependencies: - - '@swc/core' - - esbuild - - supports-color - - typescript - - uglify-js - - webpack-cli - '@docusaurus/utils@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.5.2 @@ -20956,7 +20069,7 @@ snapshots: jju: 1.4.0 js-yaml: 4.1.0 - '@mdn/browser-compat-data@5.5.29': {} + '@mdn/browser-compat-data@5.6.0': {} '@mdx-js/mdx@3.0.1': dependencies: @@ -21025,23 +20138,23 @@ snapshots: '@metamask/safe-event-emitter@3.1.1': {} - '@microsoft/api-extractor-model@7.28.13(@types/node@20.16.9)': + '@microsoft/api-extractor-model@7.30.1(@types/node@20.16.9)': dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2(@types/node@20.16.9) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.10.1(@types/node@20.16.9) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.43.0(@types/node@20.16.9)': + '@microsoft/api-extractor@7.48.1(@types/node@20.16.9)': dependencies: - '@microsoft/api-extractor-model': 7.28.13(@types/node@20.16.9) - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2(@types/node@20.16.9) - '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.10.0(@types/node@20.16.9) - '@rushstack/ts-command-line': 4.19.1(@types/node@20.16.9) + '@microsoft/api-extractor-model': 7.30.1(@types/node@20.16.9) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.10.1(@types/node@20.16.9) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.14.4(@types/node@20.16.9) + '@rushstack/ts-command-line': 4.23.2(@types/node@20.16.9) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.8 @@ -21058,8 +20171,17 @@ snapshots: jju: 1.4.0 resolve: 1.19.0 + '@microsoft/tsdoc-config@0.17.1': + dependencies: + '@microsoft/tsdoc': 0.15.1 + ajv: 8.12.0 + jju: 1.4.0 + resolve: 1.22.8 + '@microsoft/tsdoc@0.14.2': {} + '@microsoft/tsdoc@0.15.1': {} + '@mswjs/interceptors@0.35.8': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -21266,37 +20388,37 @@ snapshots: optionalDependencies: '@nestjs/platform-express': 10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4) - '@next/env@14.2.10': {} + '@next/env@14.2.15': {} '@next/eslint-plugin-next@14.2.3': dependencies: glob: 10.3.10 - '@next/swc-darwin-arm64@14.2.10': + '@next/swc-darwin-arm64@14.2.15': optional: true - '@next/swc-darwin-x64@14.2.10': + '@next/swc-darwin-x64@14.2.15': optional: true - '@next/swc-linux-arm64-gnu@14.2.10': + '@next/swc-linux-arm64-gnu@14.2.15': optional: true - '@next/swc-linux-arm64-musl@14.2.10': + '@next/swc-linux-arm64-musl@14.2.15': optional: true - '@next/swc-linux-x64-gnu@14.2.10': + '@next/swc-linux-x64-gnu@14.2.15': optional: true - '@next/swc-linux-x64-musl@14.2.10': + '@next/swc-linux-x64-musl@14.2.15': optional: true - '@next/swc-win32-arm64-msvc@14.2.10': + '@next/swc-win32-arm64-msvc@14.2.15': optional: true - '@next/swc-win32-ia32-msvc@14.2.10': + '@next/swc-win32-ia32-msvc@14.2.15': optional: true - '@next/swc-win32-x64-msvc@14.2.10': + '@next/swc-win32-x64-msvc@14.2.15': optional: true '@noble/curves@1.4.2': @@ -21613,14 +20735,10 @@ snapshots: '@popperjs/core@2.11.8': {} - '@radix-ui/colors@3.0.0': {} - '@radix-ui/number@1.0.1': dependencies: '@babel/runtime': 7.25.6 - '@radix-ui/number@1.1.0': {} - '@radix-ui/primitive@1.0.0': dependencies: '@babel/runtime': 7.25.6 @@ -21631,29 +20749,6 @@ snapshots: '@radix-ui/primitive@1.1.0': {} - '@radix-ui/react-accessible-icon@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - - '@radix-ui/react-alert-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-dialog': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.9)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 @@ -21673,43 +20768,6 @@ snapshots: '@types/react': 18.3.9 '@types/react-dom': 18.3.0 - '@radix-ui/react-aspect-ratio@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - - '@radix-ui/react-avatar@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.9)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - - '@radix-ui/react-checkbox@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.9)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - '@radix-ui/react-checkbox@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -21785,20 +20843,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.9 - '@radix-ui/react-context-menu@2.2.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.9)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - '@radix-ui/react-context@1.0.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 @@ -21977,41 +21021,6 @@ snapshots: '@types/react': 18.3.9 '@types/react-dom': 18.3.0 - '@radix-ui/react-form@0.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-label': 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - - '@radix-ui/react-hover-card@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.9)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - - '@radix-ui/react-icons@1.3.0(react@18.3.1)': - dependencies: - react: 18.3.1 - '@radix-ui/react-id@1.0.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 @@ -22221,34 +21230,6 @@ snapshots: '@types/react': 18.3.9 '@types/react-dom': 18.3.0 - '@radix-ui/react-progress@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - - '@radix-ui/react-radio-group@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.9)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -22266,23 +21247,6 @@ snapshots: '@types/react': 18.3.9 '@types/react-dom': 18.3.0 - '@radix-ui/react-scroll-area@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/number': 1.1.0 - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.9)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - '@radix-ui/react-select@1.2.2(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 @@ -22313,35 +21277,6 @@ snapshots: '@types/react': 18.3.9 '@types/react-dom': 18.3.0 - '@radix-ui/react-select@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/number': 1.1.0 - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - aria-hidden: 1.2.4 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.3.9)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - '@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -22351,25 +21286,6 @@ snapshots: '@types/react': 18.3.9 '@types/react-dom': 18.3.0 - '@radix-ui/react-slider@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/number': 1.1.0 - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.9)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - '@radix-ui/react-slot@1.0.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 @@ -22463,26 +21379,6 @@ snapshots: '@types/react': 18.3.9 '@types/react-dom': 18.3.0 - '@radix-ui/react-tooltip@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - '@radix-ui/react-use-callback-ref@1.0.0(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 @@ -22629,49 +21525,6 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@radix-ui/themes@3.1.4(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/colors': 3.0.0 - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-accessible-icon': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-alert-dialog': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-aspect-ratio': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-avatar': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-checkbox': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-context-menu': 2.2.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-dialog': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-dropdown-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-form': 0.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-hover-card': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-navigation-menu': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-popover': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-progress': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-radio-group': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-scroll-area': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-select': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slider': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-switch': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-tabs': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-toggle-group': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-tooltip': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.9)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - classnames: 2.3.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-remove-scroll-bar: 2.3.4(@types/react@18.3.9)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.9 - '@types/react-dom': 18.3.0 - '@reduxjs/toolkit@1.9.7(react-redux@8.1.3(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1))(react@18.3.1)': dependencies: immer: 9.0.21 @@ -22746,32 +21599,34 @@ snapshots: '@rushstack/eslint-patch@1.10.4': {} - '@rushstack/node-core-library@4.0.2(@types/node@20.16.9)': + '@rushstack/node-core-library@5.10.1(@types/node@20.16.9)': dependencies: + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1 fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.8 semver: 7.5.4 - z-schema: 5.0.5 optionalDependencies: '@types/node': 20.16.9 - '@rushstack/rig-package@0.5.2': + '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.10.0(@types/node@20.16.9)': + '@rushstack/terminal@0.14.4(@types/node@20.16.9)': dependencies: - '@rushstack/node-core-library': 4.0.2(@types/node@20.16.9) + '@rushstack/node-core-library': 5.10.1(@types/node@20.16.9) supports-color: 8.1.1 optionalDependencies: '@types/node': 20.16.9 - '@rushstack/ts-command-line@4.19.1(@types/node@20.16.9)': + '@rushstack/ts-command-line@4.23.2(@types/node@20.16.9)': dependencies: - '@rushstack/terminal': 0.10.0(@types/node@20.16.9) + '@rushstack/terminal': 0.14.4(@types/node@20.16.9) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -22804,35 +21659,35 @@ snapshots: '@noble/hashes': 1.5.0 '@scure/base': 1.1.9 - '@sentry-internal/feedback@7.119.0': + '@sentry-internal/feedback@7.120.2': dependencies: - '@sentry/core': 7.119.0 - '@sentry/types': 7.119.0 - '@sentry/utils': 7.119.0 + '@sentry/core': 7.120.2 + '@sentry/types': 7.120.2 + '@sentry/utils': 7.120.2 - '@sentry-internal/replay-canvas@7.119.0': + '@sentry-internal/replay-canvas@7.120.2': dependencies: - '@sentry/core': 7.119.0 - '@sentry/replay': 7.119.0 - '@sentry/types': 7.119.0 - '@sentry/utils': 7.119.0 + '@sentry/core': 7.120.2 + '@sentry/replay': 7.120.2 + '@sentry/types': 7.120.2 + '@sentry/utils': 7.120.2 - '@sentry-internal/tracing@7.119.0': + '@sentry-internal/tracing@7.120.2': dependencies: - '@sentry/core': 7.119.0 - '@sentry/types': 7.119.0 - '@sentry/utils': 7.119.0 + '@sentry/core': 7.120.2 + '@sentry/types': 7.120.2 + '@sentry/utils': 7.120.2 - '@sentry/browser@7.119.0': + '@sentry/browser@7.120.2': dependencies: - '@sentry-internal/feedback': 7.119.0 - '@sentry-internal/replay-canvas': 7.119.0 - '@sentry-internal/tracing': 7.119.0 - '@sentry/core': 7.119.0 - '@sentry/integrations': 7.119.0 - '@sentry/replay': 7.119.0 - '@sentry/types': 7.119.0 - '@sentry/utils': 7.119.0 + '@sentry-internal/feedback': 7.120.2 + '@sentry-internal/replay-canvas': 7.120.2 + '@sentry-internal/tracing': 7.120.2 + '@sentry/core': 7.120.2 + '@sentry/integrations': 7.120.2 + '@sentry/replay': 7.120.2 + '@sentry/types': 7.120.2 + '@sentry/utils': 7.120.2 '@sentry/cli@1.77.3': dependencies: @@ -22859,17 +21714,22 @@ snapshots: '@sentry/types': 7.119.0 '@sentry/utils': 7.119.0 + '@sentry/core@7.120.2': + dependencies: + '@sentry/types': 7.120.2 + '@sentry/utils': 7.120.2 + '@sentry/hub@6.19.7': dependencies: '@sentry/types': 6.19.7 '@sentry/utils': 6.19.7 tslib: 1.14.1 - '@sentry/integrations@7.119.0': + '@sentry/integrations@7.120.2': dependencies: - '@sentry/core': 7.119.0 - '@sentry/types': 7.119.0 - '@sentry/utils': 7.119.0 + '@sentry/core': 7.120.2 + '@sentry/types': 7.120.2 + '@sentry/utils': 7.120.2 localforage: 1.10.0 '@sentry/minimal@6.19.7': @@ -22893,24 +21753,26 @@ snapshots: '@sentry/react@7.119.0(react@18.3.1)': dependencies: - '@sentry/browser': 7.119.0 + '@sentry/browser': 7.120.2 '@sentry/core': 7.119.0 '@sentry/types': 7.119.0 '@sentry/utils': 7.119.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 - '@sentry/replay@7.119.0': + '@sentry/replay@7.120.2': dependencies: - '@sentry-internal/tracing': 7.119.0 - '@sentry/core': 7.119.0 - '@sentry/types': 7.119.0 - '@sentry/utils': 7.119.0 + '@sentry-internal/tracing': 7.120.2 + '@sentry/core': 7.120.2 + '@sentry/types': 7.120.2 + '@sentry/utils': 7.120.2 '@sentry/types@6.19.7': {} '@sentry/types@7.119.0': {} + '@sentry/types@7.120.2': {} + '@sentry/utils@6.19.7': dependencies: '@sentry/types': 6.19.7 @@ -22920,6 +21782,10 @@ snapshots: dependencies: '@sentry/types': 7.119.0 + '@sentry/utils@7.120.2': + dependencies: + '@sentry/types': 7.120.2 + '@sentry/webpack-plugin@1.21.0': dependencies: '@sentry/cli': 1.77.3 @@ -22982,7 +21848,7 @@ snapshots: '@size-limit/esbuild@11.1.5(size-limit@11.1.5)': dependencies: esbuild: 0.23.1 - nanoid: 5.0.7 + nanoid: 5.0.9 size-limit: 11.1.5 '@size-limit/file@11.1.5(size-limit@11.1.5)': @@ -24907,13 +23773,6 @@ snapshots: transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.5)(vite@5.4.8(@types/node@22.7.3)(sass@1.79.3)(terser@5.34.0))': - dependencies: - '@swc/core': 1.7.28(@swc/helpers@0.5.5) - vite: 5.4.8(@types/node@22.7.3)(sass@1.79.3)(terser@5.34.0) - transitivePeerDependencies: - - '@swc/helpers' - '@vitejs/plugin-react@3.1.0(vite@5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0))': dependencies: '@babel/core': 7.25.2 @@ -25036,18 +23895,17 @@ snapshots: loupe: 3.1.1 tinyrainbow: 1.2.0 - '@volar/language-core@1.11.1': + '@volar/language-core@2.4.11': dependencies: - '@volar/source-map': 1.11.1 + '@volar/source-map': 2.4.11 - '@volar/source-map@1.11.1': - dependencies: - muggle-string: 0.3.1 + '@volar/source-map@2.4.11': {} - '@volar/typescript@1.11.1': + '@volar/typescript@2.4.11': dependencies: - '@volar/language-core': 1.11.1 + '@volar/language-core': 2.4.11 path-browserify: 1.0.1 + vscode-uri: 3.0.8 '@vue/compiler-core@3.5.9': dependencies: @@ -25062,17 +23920,21 @@ snapshots: '@vue/compiler-core': 3.5.9 '@vue/shared': 3.5.9 - '@vue/language-core@1.8.27(typescript@5.6.2)': + '@vue/compiler-vue2@2.7.16': dependencies: - '@volar/language-core': 1.11.1 - '@volar/source-map': 1.11.1 + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/language-core@2.1.6(typescript@5.6.2)': + dependencies: + '@volar/language-core': 2.4.11 '@vue/compiler-dom': 3.5.9 + '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.9 computeds: 0.0.1 minimatch: 9.0.5 - muggle-string: 0.3.1 + muggle-string: 0.4.1 path-browserify: 1.0.1 - vue-template-compiler: 2.7.16 optionalDependencies: typescript: 5.6.2 @@ -25290,13 +24152,15 @@ snapshots: acorn@8.12.1: {} - addons-linter@6.28.0(body-parser@1.20.3)(node-fetch@3.3.1): + acorn@8.14.0: {} + + addons-linter@7.1.0(body-parser@1.20.3): dependencies: '@fluent/syntax': 0.19.0 - '@mdn/browser-compat-data': 5.5.29 + '@mdn/browser-compat-data': 5.6.0 addons-moz-compare: 1.3.0 - addons-scanner-utils: 9.10.1(body-parser@1.20.3)(node-fetch@3.3.1) - ajv: 8.13.0 + addons-scanner-utils: 9.11.0(body-parser@1.20.3) + ajv: 8.17.1 chalk: 4.1.2 cheerio: 1.0.0-rc.12 columnify: 1.6.0 @@ -25305,21 +24169,17 @@ snapshots: eslint: 8.57.1 eslint-plugin-no-unsanitized: 4.0.2(eslint@8.57.1) eslint-visitor-keys: 4.0.0 - espree: 10.0.1 + espree: 10.1.0 esprima: 4.0.1 fast-json-patch: 3.1.1 - glob: 10.4.1 image-size: 1.1.1 - is-mergeable-object: 1.1.1 jed: 1.1.1 json-merge-patch: 1.0.2 os-locale: 5.0.0 pino: 8.20.0 relaxed-json: 1.0.3 - semver: 7.6.2 - sha.js: 2.4.11 + semver: 7.6.3 source-map-support: 0.5.21 - tosource: 1.0.0 upath: 2.0.1 yargs: 17.7.2 yauzl: 2.10.0 @@ -25332,7 +24192,7 @@ snapshots: addons-moz-compare@1.3.0: {} - addons-scanner-utils@9.10.1(body-parser@1.20.3)(node-fetch@3.3.1): + addons-scanner-utils@9.11.0(body-parser@1.20.3): dependencies: '@types/yauzl': 2.10.3 common-tags: 1.8.2 @@ -25342,7 +24202,6 @@ snapshots: yauzl: 2.10.0 optionalDependencies: body-parser: 1.20.3 - node-fetch: 3.3.1 address@1.2.2: {} @@ -25367,10 +24226,18 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 + ajv-draft-04@1.0.0(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + ajv-formats@2.1.1: dependencies: ajv: 8.17.1 + ajv-formats@3.0.1: + dependencies: + ajv: 8.17.1 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -25581,18 +24448,12 @@ snapshots: asap@2.0.6: {} - asn1@0.2.6: - dependencies: - safer-buffer: 2.1.2 - asn1js@3.0.5: dependencies: pvtsutils: 1.3.5 pvutils: 1.1.3 tslib: 2.7.0 - assert-plus@1.0.0: {} - assert@2.1.0: dependencies: call-bind: 1.0.7 @@ -25613,8 +24474,6 @@ snapshots: astring@1.9.0: {} - async-limiter@1.0.1: {} - async@3.2.2: {} asynckit@0.4.0: {} @@ -25623,6 +24482,11 @@ snapshots: atomic-sleep@1.0.0: {} + atomically@2.0.3: + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.3 + auto-bind@4.0.0: {} autoprefixer@10.4.20(postcss@8.4.47): @@ -25639,15 +24503,13 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - aws-sign2@0.7.0: {} - - aws4@1.13.2: {} - axe-core@4.10.0: {} - axios@0.26.1: + axios@0.28.0: dependencies: follow-redirects: 1.15.9(debug@4.3.7) + form-data: 4.0.0 + proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -25808,10 +24670,6 @@ snapshots: batch@0.6.1: {} - bcrypt-pbkdf@1.0.2: - dependencies: - tweetnacl: 0.14.5 - bech32@2.0.0: {} better-opn@3.0.2: @@ -25832,7 +24690,7 @@ snapshots: binary-install@1.1.0: dependencies: - axios: 0.26.1 + axios: 0.28.0 rimraf: 3.0.2 tar: 6.2.1 transitivePeerDependencies: @@ -25894,6 +24752,17 @@ snapshots: widest-line: 4.0.1 wrap-ansi: 8.1.0 + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.3.0 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.26.1 + widest-line: 5.0.0 + wrap-ansi: 9.0.0 + bplist-parser@0.2.0: dependencies: big-integer: 1.6.52 @@ -25938,8 +24807,6 @@ snapshots: buffer-crc32@0.2.13: {} - buffer-equal-constant-time@1.0.1: {} - buffer-from@1.1.2: {} buffer@5.7.1: @@ -25954,12 +24821,9 @@ snapshots: builtins@1.0.3: {} - bunyan@1.8.15: - optionalDependencies: - dtrace-provider: 0.8.8 - moment: 2.30.1 - mv: 2.1.1 - safe-json-stringify: 1.2.0 + bundle-name@3.0.0: + dependencies: + run-applescript: 5.0.0 busboy@1.6.0: dependencies: @@ -26019,6 +24883,8 @@ snapshots: camelcase@7.0.1: {} + camelcase@8.0.0: {} + caniuse-api@3.0.0: dependencies: browserslist: 4.24.0 @@ -26039,8 +24905,6 @@ snapshots: ansicolors: 0.3.2 redeyed: 2.1.1 - caseless@0.12.0: {} - ccount@2.0.1: {} chai@5.1.1: @@ -26160,12 +25024,12 @@ snapshots: chromatic@11.10.4: {} - chrome-launcher@0.15.1: + chrome-launcher@1.1.2: dependencies: '@types/node': 20.16.9 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 - lighthouse-logger: 1.4.2 + lighthouse-logger: 2.0.1 transitivePeerDependencies: - supports-color @@ -26183,8 +25047,6 @@ snapshots: dependencies: clsx: 2.0.0 - classnames@2.3.2: {} - classnames@2.5.1: {} clean-css@5.3.3: @@ -26289,8 +25151,6 @@ snapshots: clone@1.0.4: {} - clsx@1.2.1: {} - clsx@2.0.0: {} clsx@2.1.1: {} @@ -26378,6 +25238,8 @@ snapshots: commondir@1.0.1: {} + compare-versions@6.1.1: {} + component-emitter@1.3.1: {} compressible@2.0.18: @@ -26434,6 +25296,8 @@ snapshots: confbox@0.1.7: {} + confbox@0.1.8: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -26447,6 +25311,13 @@ snapshots: write-file-atomic: 3.0.3 xdg-basedir: 5.1.0 + configstore@7.0.0: + dependencies: + atomically: 2.0.3 + dot-prop: 9.0.0 + graceful-fs: 4.2.11 + xdg-basedir: 5.1.0 + connect-history-api-fallback@2.0.0: {} consola@2.15.3: {} @@ -26509,12 +25380,8 @@ snapshots: core-js-pure@3.38.1: {} - core-js@3.29.0: {} - core-js@3.38.1: {} - core-util-is@1.0.2: {} - core-util-is@1.0.3: {} cors@2.8.5: @@ -26975,14 +25842,8 @@ snapshots: damerau-levenshtein@1.0.8: {} - dashdash@1.14.1: - dependencies: - assert-plus: 1.0.0 - dashify@2.0.0: {} - data-uri-to-buffer@4.0.1: {} - data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 @@ -27083,10 +25944,6 @@ snapshots: deep-object-diff@1.1.9: {} - deepcopy@2.1.0: - dependencies: - type-detect: 4.1.0 - deepmerge@2.2.1: {} deepmerge@4.3.1: {} @@ -27096,6 +25953,13 @@ snapshots: bplist-parser: 0.2.0 untildify: 4.0.0 + default-browser@4.0.0: + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + default-gateway@6.0.3: dependencies: execa: 5.1.1 @@ -27114,6 +25978,8 @@ snapshots: define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -27224,49 +26090,6 @@ snapshots: dependencies: typedoc-plugin-markdown: 4.2.10(typedoc@0.26.11(typescript@5.6.2)) - docusaurus-theme-search-typesense@0.20.0-0(@algolia/client-search@4.24.0)(@babel/runtime@7.25.6)(@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.9)(algoliasearch@4.24.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16): - dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/logger': 3.4.0 - '@docusaurus/plugin-content-docs': 3.4.0(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/theme-translations': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) - algoliasearch-helper: 3.22.5(algoliasearch@4.24.0) - clsx: 1.2.1 - eta: 2.2.0 - fs-extra: 10.1.0 - lodash: 4.17.21 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - tslib: 2.7.0 - typesense-docsearch-react: 3.4.1(@algolia/client-search@4.24.0)(@babel/runtime@7.25.6)(@types/react@18.3.9)(algoliasearch@4.24.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - typesense-instantsearch-adapter: 2.8.0(@babel/runtime@7.25.6) - utility-types: 3.11.0 - transitivePeerDependencies: - - '@algolia/client-search' - - '@babel/runtime' - - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - '@types/react' - - algoliasearch - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -27331,6 +26154,10 @@ snapshots: dependencies: is-obj: 2.0.0 + dot-prop@9.0.0: + dependencies: + type-fest: 4.26.1 + dotenv-expand@10.0.0: {} dotenv@16.4.5: {} @@ -27339,11 +26166,6 @@ snapshots: dset@3.1.4: {} - dtrace-provider@0.8.8: - dependencies: - nan: 2.20.0 - optional: true - duplexer@0.1.2: {} duplexify@3.7.1: @@ -27355,15 +26177,6 @@ snapshots: eastasianwidth@0.2.0: {} - ecc-jsbn@0.1.2: - dependencies: - jsbn: 0.1.1 - safer-buffer: 2.1.2 - - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: 5.2.1 - ee-first@1.1.1: {} ejs@3.1.10: @@ -27530,8 +26343,6 @@ snapshots: es6-error@4.1.1: {} - es6-promisify@7.0.0: {} - esbuild-plugin-alias@0.2.1: {} esbuild-register@3.6.0(esbuild@0.18.20): @@ -27802,10 +26613,6 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-react-refresh@0.4.12(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - eslint-plugin-react@7.37.0(eslint@8.57.1): dependencies: array-includes: 3.1.8 @@ -27915,7 +26722,7 @@ snapshots: transitivePeerDependencies: - supports-color - espree@10.0.1: + espree@10.1.0: dependencies: acorn: 8.12.1 acorn-jsx: 5.3.2(acorn@8.12.1) @@ -28039,6 +26846,18 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 + execa@7.2.0: + dependencies: + cross-spawn: 7.0.5 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + execa@8.0.1: dependencies: cross-spawn: 7.0.5 @@ -28082,7 +26901,7 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.10 + path-to-regexp: 0.1.12 proxy-addr: 2.0.7 qs: 6.13.0 range-parser: 1.2.1 @@ -28130,8 +26949,6 @@ snapshots: transitivePeerDependencies: - supports-color - extsprintf@1.3.0: {} - fast-decode-uri-component@1.0.1: {} fast-deep-equal@2.0.1: {} @@ -28218,11 +27035,6 @@ snapshots: dependencies: xml-js: 1.6.11 - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - fetch-retry@5.0.6: {} fflate@0.8.2: {} @@ -28310,13 +27122,13 @@ snapshots: locate-path: 7.2.0 path-exists: 5.0.0 - firefox-profile@4.3.2: + firefox-profile@4.7.0: dependencies: adm-zip: 0.5.16 - fs-extra: 9.0.1 - ini: 2.0.0 + fs-extra: 11.2.0 + ini: 4.1.3 minimist: 1.2.8 - xml2js: 0.5.0 + xml2js: 0.6.2 first-chunk-stream@3.0.0: {} @@ -28366,7 +27178,6 @@ snapshots: webpack: 5.95.0 optionalDependencies: eslint: 8.57.1 - vue-template-compiler: 2.7.16 fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.94.0(@swc/core@1.7.28)): dependencies: @@ -28387,12 +27198,6 @@ snapshots: form-data-encoder@2.1.4: {} - form-data@2.3.3: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - form-data@3.0.1: dependencies: asynckit: 0.4.0 @@ -28407,10 +27212,6 @@ snapshots: format@0.2.2: {} - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - formidable@2.1.2: dependencies: dezalgo: 1.0.4 @@ -28454,12 +27255,6 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 - fs-extra@11.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - fs-extra@11.1.1: dependencies: graceful-fs: 4.2.11 @@ -28484,13 +27279,6 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 - fs-extra@9.0.1: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 1.0.0 - fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 @@ -28576,10 +27364,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - getpass@0.1.7: - dependencies: - assert-plus: 1.0.0 - giget@1.2.3: dependencies: citty: 0.1.6 @@ -28622,14 +27406,6 @@ snapshots: minipass: 7.1.2 path-scurry: 1.11.1 - glob@10.4.1: - dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - path-scurry: 1.11.1 - glob@10.4.2: dependencies: foreground-child: 3.3.0 @@ -28648,15 +27424,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@6.0.4: - dependencies: - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - optional: true - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -28674,6 +27441,10 @@ snapshots: minimatch: 5.1.6 once: 1.4.0 + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + global-dirs@3.0.1: dependencies: ini: 2.0.0 @@ -28889,13 +27660,6 @@ snapshots: webidl-conversions: 7.0.0 whatwg-mimetype: 3.0.0 - har-schema@2.0.0: {} - - har-validator@5.1.5: - dependencies: - ajv: 6.12.6 - har-schema: 2.0.0 - has-bigints@1.0.2: {} has-flag@3.0.0: {} @@ -28935,6 +27699,15 @@ snapshots: hast-util-from-html: 2.0.3 unist-util-remove-position: 5.0.0 + hast-util-from-html@2.0.1: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.1 + parse5: 7.1.2 + vfile: 6.0.3 + vfile-message: 4.0.2 + hast-util-from-html@2.0.3: dependencies: '@types/hast': 3.0.4 @@ -29110,6 +27883,11 @@ snapshots: readable-stream: 2.3.8 wbuf: 1.7.3 + html-dom-parser@5.0.10: + dependencies: + domhandler: 5.0.3 + htmlparser2: 9.1.0 + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 @@ -29138,6 +27916,16 @@ snapshots: relateurl: 0.2.7 terser: 5.34.0 + html-react-parser@5.1.18(@types/react@18.3.9)(react@18.3.1): + dependencies: + domhandler: 5.0.3 + html-dom-parser: 5.0.10 + react: 18.3.1 + react-property: 2.0.2 + style-to-js: 1.1.16 + optionalDependencies: + '@types/react': 18.3.9 + html-tags@3.3.1: {} html-void-elements@3.0.0: {} @@ -29176,6 +27964,13 @@ snapshots: domutils: 3.1.0 entities: 4.5.0 + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + http-cache-semantics@4.1.1: {} http-call@5.3.0: @@ -29235,12 +28030,6 @@ snapshots: transitivePeerDependencies: - debug - http-signature@1.2.0: - dependencies: - assert-plus: 1.0.0 - jsprim: 1.4.2 - sshpk: 1.18.0 - http2-wrapper@2.2.1: dependencies: quick-lru: 5.1.1 @@ -29273,6 +28062,8 @@ snapshots: human-signals@2.1.0: {} + human-signals@4.3.1: {} + human-signals@5.0.0: {} husky@9.1.6: {} @@ -29348,6 +28139,10 @@ snapshots: ini@2.0.0: {} + ini@4.1.1: {} + + ini@4.1.3: {} + inline-style-parser@0.1.1: {} inline-style-parser@0.2.4: {} @@ -29507,6 +28302,8 @@ snapshots: is-docker@2.2.1: {} + is-docker@3.0.0: {} + is-extendable@0.1.1: {} is-extglob@2.1.1: {} @@ -29539,11 +28336,22 @@ snapshots: is-hexadecimal@2.0.1: {} + is-in-ci@1.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-installed-globally@0.4.0: dependencies: global-dirs: 3.0.1 is-path-inside: 3.0.3 + is-installed-globally@1.0.0: + dependencies: + global-directory: 4.0.1 + is-path-inside: 4.0.0 + is-interactive@1.0.0: {} is-lower-case@2.0.2: @@ -29552,8 +28360,6 @@ snapshots: is-map@2.0.3: {} - is-mergeable-object@1.1.1: {} - is-nan@1.3.2: dependencies: call-bind: 1.0.7 @@ -29579,6 +28385,8 @@ snapshots: is-path-inside@3.0.3: {} + is-path-inside@4.0.0: {} + is-plain-obj@3.0.0: {} is-plain-obj@4.1.0: {} @@ -29687,8 +28495,6 @@ snapshots: dependencies: ws: 8.18.0 - isstream@0.1.2: {} - istanbul-lib-coverage@3.2.2: {} istanbul-lib-instrument@5.2.1: @@ -30099,7 +28905,7 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 - jose@4.13.1: {} + jose@5.9.2: {} jose@5.9.3: {} @@ -30114,8 +28920,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsbn@0.1.1: {} - jscodeshift@0.15.2(@babel/preset-env@7.25.4(@babel/core@7.25.2)): dependencies: '@babel/core': 7.25.2 @@ -30185,6 +28989,8 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@3.0.2: {} + json-rpc-engine@6.1.0: dependencies: '@metamask/safe-event-emitter': 2.0.0 @@ -30202,12 +29008,8 @@ snapshots: json-schema-typed@7.0.3: {} - json-schema@0.4.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - json-stringify-safe@5.0.1: {} - json-to-pretty-yaml@1.2.2: dependencies: remedial: 1.0.8 @@ -30233,20 +29035,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonwebtoken@9.0.0: - dependencies: - jws: 3.2.2 - lodash: 4.17.21 - ms: 2.1.3 - semver: 7.6.3 - - jsprim@1.4.2: - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -30261,17 +29049,6 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 - jwa@1.4.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jws@3.2.2: - dependencies: - jwa: 1.4.1 - safe-buffer: 5.2.1 - katex@0.16.11: dependencies: commander: 8.3.0 @@ -30290,6 +29067,8 @@ snapshots: kolorist@1.8.0: {} + ky@1.7.3: {} + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -30300,6 +29079,10 @@ snapshots: dependencies: package-json: 8.1.1 + latest-version@9.0.0: + dependencies: + package-json: 10.0.1 + launch-editor@2.9.1: dependencies: picocolors: 1.1.0 @@ -30334,7 +29117,7 @@ snapshots: dependencies: immediate: 3.0.6 - lighthouse-logger@1.4.2: + lighthouse-logger@2.0.1: dependencies: debug: 2.6.9 marky: 1.2.5 @@ -30400,6 +29183,11 @@ snapshots: loader-utils@3.3.1: {} + local-pkg@0.5.1: + dependencies: + mlly: 1.7.3 + pkg-types: 1.2.1 + localforage@1.10.0: dependencies: lie: 3.1.1 @@ -30427,9 +29215,9 @@ snapshots: lodash.debounce@4.0.8: {} - lodash.get@4.4.2: {} + lodash.deburr@4.1.0: {} - lodash.isequal@4.5.0: {} + lodash.isnumber@3.0.3: {} lodash.memoize@4.1.2: {} @@ -30441,6 +29229,8 @@ snapshots: lodash.uniq@4.5.0: {} + lodash.upperfirst@4.3.1: {} + lodash@4.17.21: {} log-chopper@1.0.2: @@ -30471,8 +29261,6 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 9.0.0 - loglevel@1.9.2: {} - longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -31424,6 +30212,13 @@ snapshots: pkg-types: 1.2.0 ufo: 1.5.4 + mlly@1.7.3: + dependencies: + acorn: 8.14.0 + pathe: 1.1.2 + pkg-types: 1.2.1 + ufo: 1.5.4 + modern-ahocorasick@1.0.1: {} moment@2.30.1: {} @@ -31458,7 +30253,7 @@ snapshots: optionalDependencies: typescript: 5.6.2 - muggle-string@0.3.1: {} + muggle-string@0.4.1: {} multer@1.4.4-lts.1: dependencies: @@ -31486,25 +30281,15 @@ snapshots: mute-stream@1.0.0: {} - mv@2.1.1: - dependencies: - mkdirp: 0.5.6 - ncp: 2.0.0 - rimraf: 2.4.5 - optional: true - mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.20.0: - optional: true - - nanoid@3.3.7: {} + nanoid@3.3.8: {} - nanoid@5.0.7: {} + nanoid@5.0.9: {} nanospinner@1.1.0: dependencies: @@ -31514,16 +30299,13 @@ snapshots: natural-orderby@2.0.3: {} - ncp@2.0.0: - optional: true - negotiator@0.6.3: {} neo-async@2.6.2: {} - next@14.2.10(@babel/core@7.25.2)(@playwright/test@1.47.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.79.3): + next@14.2.15(@babel/core@7.25.2)(@playwright/test@1.47.2)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.79.3): dependencies: - '@next/env': 14.2.10 + '@next/env': 14.2.15 '@swc/helpers': 0.5.5 busboy: 1.6.0 caniuse-lite: 1.0.30001664 @@ -31533,15 +30315,15 @@ snapshots: react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.1(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.10 - '@next/swc-darwin-x64': 14.2.10 - '@next/swc-linux-arm64-gnu': 14.2.10 - '@next/swc-linux-arm64-musl': 14.2.10 - '@next/swc-linux-x64-gnu': 14.2.10 - '@next/swc-linux-x64-musl': 14.2.10 - '@next/swc-win32-arm64-msvc': 14.2.10 - '@next/swc-win32-ia32-msvc': 14.2.10 - '@next/swc-win32-x64-msvc': 14.2.10 + '@next/swc-darwin-arm64': 14.2.15 + '@next/swc-darwin-x64': 14.2.15 + '@next/swc-linux-arm64-gnu': 14.2.15 + '@next/swc-linux-arm64-musl': 14.2.15 + '@next/swc-linux-x64-gnu': 14.2.15 + '@next/swc-linux-x64-musl': 14.2.15 + '@next/swc-win32-arm64-msvc': 14.2.15 + '@next/swc-win32-ia32-msvc': 14.2.15 + '@next/swc-win32-x64-msvc': 14.2.15 '@playwright/test': 1.47.2 sass: 1.79.3 transitivePeerDependencies: @@ -31561,8 +30343,6 @@ snapshots: dependencies: minimatch: 3.1.2 - node-domexception@1.0.0: {} - node-emoji@1.11.0: dependencies: lodash: 4.17.21 @@ -31580,12 +30360,6 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-fetch@3.3.1: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - node-forge@1.3.1: {} node-int64@0.4.0: {} @@ -31649,8 +30423,6 @@ snapshots: pkg-types: 1.2.0 ufo: 1.5.4 - oauth-sign@0.9.0: {} - object-assign@4.1.1: {} object-hash@3.0.0: {} @@ -31751,6 +30523,13 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + open@9.1.0: + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + opener@1.5.2: {} optionator@0.9.4: @@ -31854,6 +30633,13 @@ snapshots: package-json-from-dist@1.0.1: {} + package-json@10.0.1: + dependencies: + ky: 1.7.3 + registry-auth-token: 5.0.2 + registry-url: 6.0.1 + semver: 7.6.3 + package-json@8.1.1: dependencies: got: 12.6.1 @@ -31916,12 +30702,13 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-json@6.0.2: + parse-json@7.1.1: dependencies: '@babel/code-frame': 7.24.7 error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 + json-parse-even-better-errors: 3.0.2 lines-and-columns: 2.0.4 + type-fest: 3.13.1 parse-numeric-range@1.3.0: {} @@ -31986,7 +30773,7 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.10: {} + path-to-regexp@0.1.12: {} path-to-regexp@1.9.0: dependencies: @@ -32014,8 +30801,6 @@ snapshots: pend@1.2.0: {} - performance-now@2.1.0: {} - periscopic@3.1.0: dependencies: '@types/estree': 1.0.6 @@ -32045,6 +30830,8 @@ snapshots: pino-std-serializers@6.2.2: {} + pino-std-serializers@7.0.0: {} + pino@8.20.0: dependencies: atomic-sleep: 1.0.0 @@ -32059,6 +30846,20 @@ snapshots: sonic-boom: 3.8.1 thread-stream: 2.7.0 + pino@9.4.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 7.0.0 + process-warning: 4.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + pirates@4.0.6: {} pkce-challenge@2.2.0: {} @@ -32085,6 +30886,12 @@ snapshots: mlly: 1.7.1 pathe: 1.1.2 + pkg-types@1.2.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.3 + pathe: 1.1.2 + pkg-up@3.1.0: dependencies: find-up: 3.0.0 @@ -32618,13 +31425,13 @@ snapshots: postcss@8.4.31: dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.0 source-map-js: 1.2.1 postcss@8.4.47: dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.0 source-map-js: 1.2.1 @@ -32679,6 +31486,8 @@ snapshots: process-warning@3.0.0: {} + process-warning@4.0.0: {} + process@0.11.10: {} progress@2.0.3: {} @@ -32764,7 +31573,7 @@ snapshots: progress: 2.0.3 proxy-from-env: 1.1.0 rimraf: 2.7.1 - ws: 6.2.3 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - supports-color @@ -32786,8 +31595,6 @@ snapshots: dependencies: side-channel: 1.0.6 - qs@6.5.3: {} - querystringify@2.2.0: {} queue-microtask@1.2.3: {} @@ -32978,6 +31785,8 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-property@2.0.2: {} + react-redux@8.1.3(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1): dependencies: '@babel/runtime': 7.25.6 @@ -32995,14 +31804,6 @@ snapshots: react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.4(@types/react@18.3.9)(react@18.3.1): - dependencies: - react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.9)(react@18.3.1) - tslib: 2.7.0 - optionalDependencies: - '@types/react': 18.3.9 - react-remove-scroll-bar@2.3.6(@types/react@18.3.9)(react@18.3.1): dependencies: react: 18.3.1 @@ -33277,8 +32078,6 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.13.11: {} - regenerator-runtime@0.14.1: {} regenerator-transform@0.15.2: @@ -33330,6 +32129,11 @@ snapshots: dependencies: jsesc: 0.5.0 + rehype-jargon@3.1.0: + dependencies: + hast-util-from-html: 2.0.1 + unist-util-visit: 5.0.0 + rehype-katex@7.0.1: dependencies: '@types/hast': 3.0.4 @@ -33473,29 +32277,6 @@ snapshots: repeat-string@1.6.1: {} - request@2.88.2: - dependencies: - aws-sign2: 0.7.0 - aws4: 1.13.2 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.3.3 - har-validator: 5.1.5 - http-signature: 1.2.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - oauth-sign: 0.9.0 - performance-now: 2.1.0 - qs: 6.5.3 - safe-buffer: 5.2.1 - tough-cookie: 2.5.0 - tunnel-agent: 0.6.0 - uuid: 3.4.0 - require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -33561,11 +32342,6 @@ snapshots: rfdc@1.4.1: {} - rimraf@2.4.5: - dependencies: - glob: 6.0.4 - optional: true - rimraf@2.6.3: dependencies: glob: 7.2.3 @@ -33621,6 +32397,10 @@ snapshots: postcss: 8.4.47 strip-json-comments: 3.1.1 + run-applescript@5.0.0: + dependencies: + execa: 5.1.1 + run-async@2.4.1: {} run-async@3.0.0: {} @@ -33650,9 +32430,6 @@ snapshots: safe-buffer@5.2.1: {} - safe-json-stringify@1.2.0: - optional: true - safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 @@ -33732,8 +32509,6 @@ snapshots: dependencies: lru-cache: 6.0.0 - semver@7.6.2: {} - semver@7.6.3: {} send@0.19.0: @@ -33826,11 +32601,6 @@ snapshots: setprototypeof@1.2.0: {} - sha.js@2.4.11: - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - shallow-clone@3.0.1: dependencies: kind-of: 6.0.3 @@ -33873,19 +32643,6 @@ snapshots: siginfo@2.0.0: {} - sign-addon@5.3.0: - dependencies: - common-tags: 1.8.2 - core-js: 3.29.0 - deepcopy: 2.1.0 - es6-error: 4.1.1 - es6-promisify: 7.0.0 - jsonwebtoken: 9.0.0 - mz: 2.7.0 - request: 2.88.2 - source-map-support: 0.5.21 - stream-to-promise: 3.0.0 - signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -33962,6 +32719,10 @@ snapshots: dependencies: atomic-sleep: 1.0.0 + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + sort-css-media-queries@2.2.0: {} source-map-js@1.2.1: {} @@ -34053,18 +32814,6 @@ snapshots: srcset@4.0.0: {} - sshpk@1.18.0: - dependencies: - asn1: 0.2.6 - assert-plus: 1.0.0 - bcrypt-pbkdf: 1.0.2 - dashdash: 1.14.1 - ecc-jsbn: 0.1.2 - getpass: 0.1.7 - jsbn: 0.1.1 - safer-buffer: 2.1.2 - tweetnacl: 0.14.5 - stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -34133,16 +32882,6 @@ snapshots: stream-shift@1.0.3: {} - stream-to-array@2.3.0: - dependencies: - any-promise: 1.3.0 - - stream-to-promise@3.0.0: - dependencies: - any-promise: 1.3.0 - end-of-stream: 1.4.4 - stream-to-array: 2.3.0 - streamsearch@1.1.0: {} strict-event-emitter@0.5.1: {} @@ -34282,7 +33021,13 @@ snapshots: strip-json-comments@3.1.1: {} - strip-json-comments@5.0.0: {} + strip-json-comments@5.0.1: {} + + stubborn-fs@1.2.5: {} + + style-to-js@1.1.16: + dependencies: + style-to-object: 1.0.8 style-to-object@0.4.4: dependencies: @@ -34575,6 +33320,10 @@ snapshots: dependencies: real-require: 0.2.0 + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + throttle-debounce@5.0.2: {} through2@2.0.5: @@ -34613,14 +33362,12 @@ snapshots: dependencies: tslib: 2.7.0 + titleize@3.0.0: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - tmp@0.2.1: - dependencies: - rimraf: 3.0.2 - tmp@0.2.3: {} tmpl@1.0.5: {} @@ -34646,15 +33393,8 @@ snapshots: toposort@2.0.2: {} - tosource@1.0.0: {} - totalist@3.0.1: {} - tough-cookie@2.5.0: - dependencies: - psl: 1.9.0 - punycode: 2.3.1 - tough-cookie@4.1.4: dependencies: psl: 1.9.0 @@ -34860,8 +33600,6 @@ snapshots: tween-functions@1.2.0: {} - tweetnacl@0.14.5: {} - tweetnacl@1.0.3: {} type-check@0.4.0: @@ -34870,8 +33608,6 @@ snapshots: type-detect@4.0.8: {} - type-detect@4.1.0: {} - type-fest@0.16.0: {} type-fest@0.20.2: {} @@ -34886,6 +33622,8 @@ snapshots: type-fest@2.19.0: {} + type-fest@3.13.1: {} + type-fest@4.26.1: {} type-is@1.6.18: @@ -34979,40 +33717,6 @@ snapshots: typescript@5.6.2: {} - typesense-docsearch-css@0.4.1: {} - - typesense-docsearch-react@3.4.1(@algolia/client-search@4.24.0)(@babel/runtime@7.25.6)(@types/react@18.3.9)(algoliasearch@4.24.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@algolia/autocomplete-core': 1.8.2 - '@algolia/autocomplete-preset-algolia': 1.8.2(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) - typesense: 1.8.2(@babel/runtime@7.25.6) - typesense-docsearch-css: 0.4.1 - typesense-instantsearch-adapter: 2.8.0(@babel/runtime@7.25.6) - optionalDependencies: - '@types/react': 18.3.9 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@algolia/client-search' - - '@babel/runtime' - - algoliasearch - - debug - - typesense-instantsearch-adapter@2.8.0(@babel/runtime@7.25.6): - dependencies: - '@babel/runtime': 7.25.6 - typesense: 1.8.2(@babel/runtime@7.25.6) - transitivePeerDependencies: - - debug - - typesense@1.8.2(@babel/runtime@7.25.6): - dependencies: - '@babel/runtime': 7.25.6 - axios: 1.7.7(debug@4.3.7) - loglevel: 1.9.2 - transitivePeerDependencies: - - debug - ua-parser-js@1.0.39: {} uc.micro@2.1.0: {} @@ -35147,8 +33851,6 @@ snapshots: universalify@0.2.0: {} - universalify@1.0.0: {} - universalify@2.0.1: {} unixify@1.0.0: @@ -35191,6 +33893,19 @@ snapshots: semver-diff: 4.0.0 xdg-basedir: 5.1.0 + update-notifier@7.3.1: + dependencies: + boxen: 8.0.1 + chalk: 5.3.0 + configstore: 7.0.0 + is-in-ci: 1.0.0 + is-installed-globally: 1.0.0 + is-npm: 6.0.0 + latest-version: 9.0.0 + pupa: 3.1.0 + semver: 7.6.3 + xdg-basedir: 5.1.0 + upper-case-first@2.0.2: dependencies: tslib: 2.7.0 @@ -35285,8 +34000,6 @@ snapshots: uuid@10.0.0: {} - uuid@3.4.0: {} - uuid@8.3.2: {} uuid@9.0.1: {} @@ -35317,8 +34030,6 @@ snapshots: dependencies: builtins: 1.0.3 - validator@13.12.0: {} - value-equal@1.0.1: {} value-or-promise@1.0.12: {} @@ -35327,12 +34038,6 @@ snapshots: vary@1.1.2: {} - verror@1.10.0: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 - vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -35430,16 +34135,18 @@ snapshots: - supports-color - terser - vite-plugin-dts@3.9.1(@types/node@20.16.9)(rollup@4.22.4)(typescript@5.6.2)(vite@5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0)): + vite-plugin-dts@4.3.0(@types/node@20.16.9)(rollup@4.22.4)(typescript@5.6.2)(vite@5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0)): dependencies: - '@microsoft/api-extractor': 7.43.0(@types/node@20.16.9) + '@microsoft/api-extractor': 7.48.1(@types/node@20.16.9) '@rollup/pluginutils': 5.1.2(rollup@4.22.4) - '@vue/language-core': 1.8.27(typescript@5.6.2) + '@volar/typescript': 2.4.11 + '@vue/language-core': 2.1.6(typescript@5.6.2) + compare-versions: 6.1.1 debug: 4.3.7(supports-color@8.1.1) kolorist: 1.8.0 + local-pkg: 0.5.1 magic-string: 0.30.11 typescript: 5.6.2 - vue-tsc: 1.8.27(typescript@5.6.2) optionalDependencies: vite: 5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0) transitivePeerDependencies: @@ -35575,22 +34282,12 @@ snapshots: - supports-color - terser + vscode-uri@3.0.8: {} + vue-parser@1.1.6: dependencies: parse5: 3.0.3 - vue-template-compiler@2.7.16: - dependencies: - de-indent: 1.0.2 - he: 1.2.0 - - vue-tsc@1.8.27(typescript@5.6.2): - dependencies: - '@volar/typescript': 1.11.1 - '@vue/language-core': 1.8.27(typescript@5.6.2) - semver: 7.6.3 - typescript: 5.6.2 - w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 @@ -35625,11 +34322,6 @@ snapshots: transitivePeerDependencies: - debug - watchpack@2.4.0: - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 @@ -35643,44 +34335,41 @@ snapshots: dependencies: defaults: 1.0.4 - web-ext@7.12.0(body-parser@1.20.3): + web-ext@8.3.0(body-parser@1.20.3): dependencies: - '@babel/runtime': 7.21.0 - '@devicefarmer/adbkit': 3.2.3 - addons-linter: 6.28.0(body-parser@1.20.3)(node-fetch@3.3.1) - bunyan: 1.8.15 - camelcase: 7.0.1 - chrome-launcher: 0.15.1 + '@babel/runtime': 7.25.6 + '@devicefarmer/adbkit': 3.2.6 + addons-linter: 7.1.0(body-parser@1.20.3) + camelcase: 8.0.0 + chrome-launcher: 1.1.2 debounce: 1.2.1 decamelize: 6.0.0 es6-error: 4.1.1 - firefox-profile: 4.3.2 - fs-extra: 11.1.0 + firefox-profile: 4.7.0 fx-runner: 1.4.0 - import-fresh: 3.3.0 - jose: 4.13.1 - mkdirp: 1.0.4 + https-proxy-agent: 7.0.5 + jose: 5.9.2 + jszip: 3.10.1 multimatch: 6.0.0 - mz: 2.7.0 - node-fetch: 3.3.1 node-notifier: 10.0.0 - open: 8.4.2 - parse-json: 6.0.2 + open: 9.1.0 + parse-json: 7.1.1 + pino: 9.4.0 promise-toolbox: 0.21.0 - sign-addon: 5.3.0 source-map-support: 0.5.21 strip-bom: 5.0.0 - strip-json-comments: 5.0.0 - tmp: 0.2.1 - update-notifier: 6.0.2 - watchpack: 2.4.0 - ws: 8.13.0 - yargs: 17.7.1 + strip-json-comments: 5.0.1 + tmp: 0.2.3 + update-notifier: 7.3.1 + watchpack: 2.4.2 + ws: 8.18.0 + yargs: 17.7.2 zip-dir: 2.0.0 transitivePeerDependencies: - body-parser - bufferutil - express + - node-fetch - safe-compare - supports-color - utf-8-validate @@ -35949,7 +34638,7 @@ snapshots: opener: 1.5.2 picocolors: 1.1.0 sirv: 2.0.4 - ws: 7.5.10 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -36188,6 +34877,8 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + when-exit@2.1.3: {} + when@3.7.7: {} which-boxed-primitive@1.0.2: @@ -36256,6 +34947,10 @@ snapshots: dependencies: string-width: 5.1.2 + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + wildcard@2.0.1: {} winreg@0.0.12: {} @@ -36308,14 +35003,6 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@6.2.3: - dependencies: - async-limiter: 1.0.1 - - ws@7.5.10: {} - - ws@8.13.0: {} - ws@8.18.0: {} xdg-basedir@5.1.0: {} @@ -36326,7 +35013,7 @@ snapshots: xml-name-validator@5.0.0: {} - xml2js@0.5.0: + xml2js@0.6.2: dependencies: sax: 1.4.1 xmlbuilder: 11.0.1 @@ -36370,16 +35057,6 @@ snapshots: y18n: 4.0.3 yargs-parser: 18.1.3 - yargs@17.7.1: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -36410,14 +35087,6 @@ snapshots: toposort: 2.0.2 type-fest: 2.19.0 - z-schema@5.0.5: - dependencies: - lodash.get: 4.4.2 - lodash.isequal: 4.5.0 - validator: 13.12.0 - optionalDependencies: - commander: 9.5.0 - zip-dir@2.0.0: dependencies: async: 3.2.2 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 58699ae570b..3ad2792cd72 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,7 +5,7 @@ packages: - "sdk/**" - "!**/dist/**" - "!**/.next/**" - - "!sdk/create-dapp/templates" + - "!sdk/create-dapp/templates/*" - "!sdk/typescript/bcs" - "!sdk/typescript/client" - "!sdk/typescript/cryptography" diff --git a/scripts/simtest/clippy.sh b/scripts/simtest/clippy.sh index 951e372c211..9b64233cc5e 100755 --- a/scripts/simtest/clippy.sh +++ b/scripts/simtest/clippy.sh @@ -5,6 +5,7 @@ # verify that git repo is clean if [[ -n $(git status -s) ]]; then echo "Working directory is not clean. Please commit all changes before running this script." + git status -s exit 1 fi diff --git a/scripts/simtest/simtest-cov.sh b/scripts/simtest/simtest-cov.sh index a8701b87c0c..acd415165eb 100755 --- a/scripts/simtest/simtest-cov.sh +++ b/scripts/simtest/simtest-cov.sh @@ -6,7 +6,7 @@ # verify that git repo is clean if [[ -n $(git status -s) ]]; then echo "Working directory is not clean. Please commit all changes before running this script." - echo $(git status -s) + git status -s exit 1 fi diff --git a/sdk/create-dapp/CHANGELOG.md b/sdk/create-dapp/CHANGELOG.md index d04a319a617..567b062afe9 100644 --- a/sdk/create-dapp/CHANGELOG.md +++ b/sdk/create-dapp/CHANGELOG.md @@ -1,5 +1,12 @@ # @iota/create-dapp +## 0.3.0 + +### Minor Changes + +- 8c3a220: Update some outdated eslint dependencies of the `@iota/create-dapp` templates, to their + eslint v9-compatible versions + ## 0.2.2 ### Patch Changes diff --git a/sdk/create-dapp/package.json b/sdk/create-dapp/package.json index af64537e99e..fa6117294d6 100644 --- a/sdk/create-dapp/package.json +++ b/sdk/create-dapp/package.json @@ -3,7 +3,7 @@ "author": "IOTA Foundation <info@iota.org>", "description": "A CLI for creating new IOTA dApps", "homepage": "https://docs.iota.org/ts-sdk/typescript/", - "version": "0.2.2", + "version": "0.3.0", "license": "Apache-2.0", "files": [ "CHANGELOG.md", diff --git a/sdk/create-dapp/templates/react-client-dapp/eslint.config.js b/sdk/create-dapp/templates/react-client-dapp/eslint.config.js new file mode 100644 index 00000000000..7c663262678 --- /dev/null +++ b/sdk/create-dapp/templates/react-client-dapp/eslint.config.js @@ -0,0 +1,28 @@ +import eslint from "@eslint/js"; +import tseslint from "typescript-eslint"; +import react from "eslint-plugin-react"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; + +export default tseslint.config( + { + files: ["**/*.{js,jsx,mjs,cjs,ts,tsx}"], + plugins: { + react, + reactHooks, + reactRefresh, + }, + settings: { + version: "18", + }, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + }, + eslint.configs.recommended, + tseslint.configs.recommended, +); diff --git a/sdk/create-dapp/templates/react-client-dapp/package.json b/sdk/create-dapp/templates/react-client-dapp/package.json index 8e79c61bd6b..611f666329d 100644 --- a/sdk/create-dapp/templates/react-client-dapp/package.json +++ b/sdk/create-dapp/templates/react-client-dapp/package.json @@ -6,28 +6,30 @@ "scripts": { "dev": "vite", "build": "tsc && vite build", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" + "lint": "eslint .", + "preview": "vite preview", + "format": "prettier -w ." }, "dependencies": { "@iota/dapp-kit": "workspace:*", "@iota/iota-sdk": "workspace:*", - "@radix-ui/colors": "^3.0.0", - "@radix-ui/react-icons": "^1.3.0", "@radix-ui/themes": "^3.1.1", "@tanstack/react-query": "^5.50.1", "react": "^18.3.1", "react-dom": "^18.3.1" }, "devDependencies": { + "@eslint/js": "^9.17.0", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^7.16.0", - "@typescript-eslint/parser": "^7.16.0", + "@typescript-eslint/eslint-plugin": "^8.18.0", + "@typescript-eslint/parser": "^8.18.0", "@vitejs/plugin-react-swc": "^3.7.0", - "eslint": "^9.6.0", - "eslint-plugin-react-hooks": "^4.6.2", + "eslint": "^9.17.0", + "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.7", + "eslint-plugin-react": "^7.37.2", + "typescript-eslint": "^8.18.0", "prettier": "^3.3.2", "typescript": "^5.5.3", "vite": "^5.3.3" diff --git a/sdk/create-dapp/templates/react-e2e-counter/eslint.config.js b/sdk/create-dapp/templates/react-e2e-counter/eslint.config.js new file mode 100644 index 00000000000..7c663262678 --- /dev/null +++ b/sdk/create-dapp/templates/react-e2e-counter/eslint.config.js @@ -0,0 +1,28 @@ +import eslint from "@eslint/js"; +import tseslint from "typescript-eslint"; +import react from "eslint-plugin-react"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; + +export default tseslint.config( + { + files: ["**/*.{js,jsx,mjs,cjs,ts,tsx}"], + plugins: { + react, + reactHooks, + reactRefresh, + }, + settings: { + version: "18", + }, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + }, + eslint.configs.recommended, + tseslint.configs.recommended, +); diff --git a/sdk/create-dapp/templates/react-e2e-counter/package.json b/sdk/create-dapp/templates/react-e2e-counter/package.json index 607acf6b606..0be7053cb16 100644 --- a/sdk/create-dapp/templates/react-e2e-counter/package.json +++ b/sdk/create-dapp/templates/react-e2e-counter/package.json @@ -6,28 +6,30 @@ "scripts": { "dev": "vite", "build": "tsc && vite build", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" + "lint": "eslint .", + "preview": "vite preview", + "format": "prettier -w ." }, "dependencies": { "@iota/dapp-kit": "workspace:*", "@iota/iota-sdk": "workspace:*", - "@radix-ui/colors": "^3.0.0", - "@radix-ui/react-icons": "^1.3.0", "@radix-ui/themes": "^3.1.1", "@tanstack/react-query": "^5.50.1", "react": "^18.3.1", "react-dom": "^18.3.1" }, "devDependencies": { + "@eslint/js": "^9.17.0", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^6.1.0", - "@typescript-eslint/parser": "^6.1.0", + "@typescript-eslint/eslint-plugin": "^8.18.0", + "@typescript-eslint/parser": "^8.18.0", "@vitejs/plugin-react-swc": "^3.7.0", - "eslint": "^8.45.0", - "eslint-plugin-react-hooks": "^4.6.2", + "eslint": "^9.17.0", + "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.7", + "eslint-plugin-react": "^7.37.2", + "typescript-eslint": "^8.18.0", "prettier": "^3.3.2", "typescript": "^5.5.3", "vite": "^5.3.3" diff --git a/sdk/typescript/src/client/types/generated.ts b/sdk/typescript/src/client/types/generated.ts index 113119521fe..26c4f5a9d2f 100644 --- a/sdk/typescript/src/client/types/generated.ts +++ b/sdk/typescript/src/client/types/generated.ts @@ -1020,7 +1020,7 @@ export interface IotaObjectData { /** * The Display metadata for frontend UI rendering, default to be None unless * IotaObjectDataOptions.showContent is set to true This can also be None if the struct type does not - * have Display defined See more details in <https://forums.iota.io/t/nft-object-display-proposal/4872> + * have Display defined */ display?: DisplayFieldsResponse | null; objectId: string; diff --git a/sdk/typescript/src/client/types/params.ts b/sdk/typescript/src/client/types/params.ts index feb1c6ccf3c..6d6a88d5b48 100644 --- a/sdk/typescript/src/client/types/params.ts +++ b/sdk/typescript/src/client/types/params.ts @@ -326,7 +326,8 @@ export interface GetValidatorsApyParams {} /** Return list of events for a specified query criteria. */ export interface QueryEventsParams { /** - * The event query criteria. See [Event filter](https://docs.iota.org/developer/iota-101/using-events#applying-event-filters) + * The event query criteria. See + * [Event filter](https://docs.iota.org/developer/iota-101/using-events#applying-event-filters) * documentation for examples. */ query: RpcTypes.IotaEventFilter; @@ -353,7 +354,8 @@ export type QueryTransactionBlocksParams = { export interface SubscribeEventParams { /** * The filter criteria of the event stream. See - * [Event filter](https://docs.iota.org/developer/iota-101/using-events#applying-event-filters) documentation for examples. + * [Event filter](https://docs.iota.org/developer/iota-101/using-events#applying-event-filters) + * documentation for examples. */ filter: RpcTypes.IotaEventFilter; }