diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index 60e33e40..618cad5e 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -53,16 +53,18 @@ docs/AddressNotAvailableError.md docs/AddressRegistryAddVaultOptOutsRequest.md docs/AddressRegistryAddVaultOptOutsRequestVaultAccountIdsInner.md docs/AddressRegistryAddVaultOptOutsResponse.md -docs/AddressRegistryError.md +docs/AddressRegistryCreateProofOfOwnershipRequest.md +docs/AddressRegistryCreateProofOfOwnershipResponse.md docs/AddressRegistryGetVaultOptOutResponse.md docs/AddressRegistryLegalEntity.md docs/AddressRegistryListVaultOptOutsResponse.md docs/AddressRegistryRemoveAllVaultOptOutsResponse.md docs/AddressRegistryRemoveVaultOptOutResponse.md docs/AddressRegistryTenantRegistryResponse.md -docs/AddressRegistryTravelRuleProvider.md docs/AddressRegistryVaultListOrder.md docs/AddressRegistryVaultOptOutItem.md +docs/AddressRegistryVerifyProofOfOwnershipRequest.md +docs/AddressRegistryVerifyProofOfOwnershipResponse.md docs/AddressReverseLookupResponse.md docs/AddressesFilters.md docs/AlertExposureTypeEnum.md @@ -194,11 +196,17 @@ docs/CantonCall.md docs/CantonCallAllocationWithdraw.md docs/CantonCallAllowListAdd.md docs/CantonCallAllowListRemove.md +docs/CantonCallDetails.md docs/CantonCallEndInvestorInvite.md docs/CantonCallEndInvestorInviteCancel.md docs/CantonCallEndInvestorOffboard.md docs/CantonCallParticipantOnboarding.md docs/CantonCallTransferWithdraw.md +docs/CantonDetails.md +docs/CantonDomainEnum.md +docs/CantonOfferResponseDetails.md +docs/CantonSettlementDetails.md +docs/CantonVendorEnum.md docs/ChainDescriptor.md docs/ChainInfoResponse.md docs/ChannelDvnConfigWithConfirmations.md @@ -253,7 +261,7 @@ docs/ConnectedAccountTradingPair.md docs/ConnectedAccountTradingPairSupportedType.md docs/ConnectedAccountTradingPairsResponse.md docs/ConnectedAccountType.md -docs/ConnectedAccountsBetaApi.md +docs/ConnectedAccountsApi.md docs/ConnectedAccountsResponse.md docs/ConnectedSingleAccount.md docs/ConnectedSingleAccountResponse.md @@ -356,6 +364,7 @@ docs/CreateVaultAccountConnectionRequest.md docs/CreateVaultAccountRequest.md docs/CreateVaultAssetResponse.md docs/CreateWalletRequest.md +docs/CreateWebhookMtlsConfigRequest.md docs/CreateWebhookOauthRequest.md docs/CreateWebhookRequest.md docs/CreateWorkflowExecutionRequestParamsInner.md @@ -370,6 +379,7 @@ docs/DelegationBlockchainPositionInfo.md docs/DelegationSummary.md docs/DeleteNetworkConnectionResponse.md docs/DeleteNetworkIdResponse.md +docs/DeleteWebhookMtlsConfigResponse.md docs/DeleteWebhookOauthResponse.md docs/DeployLayerZeroAdaptersRequest.md docs/DeployableAddressResponse.md @@ -419,6 +429,7 @@ docs/EarnCurator.md docs/EarnMetadata.md docs/EarnProvider.md docs/EditGasStationConfigurationResponse.md +docs/EffectiveUtxoSelectionConfig.md docs/EmbeddedWallet.md docs/EmbeddedWalletAccount.md docs/EmbeddedWalletAddressDetails.md @@ -501,6 +512,7 @@ docs/FiatTransfer.md docs/FixedAmountTypeEnum.md docs/FixedFee.md docs/FlowDirection.md +docs/FokTimeInForce.md docs/FpsHkAddress.md docs/FpsHkDestination.md docs/FpsHkPaymentInfo.md @@ -622,6 +634,10 @@ docs/LegacyPublishResult.md docs/LegacySrcOrDestAttributesInner.md docs/LegalEntityRegistration.md docs/LeiStatus.md +docs/LimitExecutionRequestDetails.md +docs/LimitExecutionResponseDetails.md +docs/LimitTypeDetails.md +docs/LimitTypeEnum.md docs/LinkedTokensCount.md docs/ListApprovalApiKeysResponse.md docs/ListApprovalsResponse.md @@ -790,6 +806,8 @@ docs/PolicyVerdictActionEnum2.md docs/Position.md docs/Position2.md docs/PositionRelatedTransaction.md +docs/PostTradeSettlement.md +docs/PostTradeSettlementType.md docs/PostalAddress.md docs/PreScreening.md docs/PrefundedSettlement.md @@ -1128,6 +1146,7 @@ docs/TagsPagedResponse.md docs/TemplatesPaginatedResponse.md docs/ThirdPartyRouting.md docs/TimeBasedTrigger.md +docs/TimeInForce.md docs/TimePeriodConfig.md docs/TimePeriodMatchType.md docs/ToCollateralTransaction.md @@ -1278,10 +1297,12 @@ docs/UpdateTagRequest.md docs/UpdateTokenOwnershipStatusDto.md docs/UpdateVaultAccountAssetAddressRequest.md docs/UpdateVaultAccountRequest.md +docs/UpdateWebhookMtlsConfigRequest.md docs/UpdateWebhookOauthRequest.md docs/UpdateWebhookRequest.md docs/UpdateWorkflowStatusRequest.md docs/UpdateWorkflowStatusResponse.md +docs/UpsertUtxoSelectionConfigRequest.md docs/UsWirePaymentInfo.md docs/UsdcGatewayWalletAsset.md docs/UsdcGatewayWalletInfoResponse.md @@ -1300,9 +1321,15 @@ docs/UtxoIdentifier.md docs/UtxoInput.md docs/UtxoInput2.md docs/UtxoInputSelection.md +docs/UtxoLabelFailure.md +docs/UtxoLabelsErrorResponse.md docs/UtxoOutput.md +docs/UtxoSelectionConfigEntry.md +docs/UtxoSelectionConfigResponse.md +docs/UtxoSelectionConfigSourceEnum.md docs/UtxoSelectionFilters.md docs/UtxoSelectionParams.md +docs/UtxoSelectionStrategyEnum.md docs/ValidateAddressResponse.md docs/ValidateLayerZeroChannelResponse.md docs/ValidationKeyDto.md @@ -1328,7 +1355,7 @@ docs/Web3ConnectionsApi.md docs/Webhook.md docs/WebhookEvent.md docs/WebhookMetric.md -docs/WebhookMtls.md +docs/WebhookMtlsConfig.md docs/WebhookMtlsCsrResponse.md docs/WebhookMtlsKeyAlgorithm.md docs/WebhookOauthCredentials.md @@ -1359,7 +1386,7 @@ fireblocks/api/blockchains_assets_api.py fireblocks/api/compliance_api.py fireblocks/api/compliance_orchestrator_beta_api.py fireblocks/api/compliance_screening_configuration_api.py -fireblocks/api/connected_accounts_beta_api.py +fireblocks/api/connected_accounts_api.py fireblocks/api/console_user_api.py fireblocks/api/contacts_api.py fireblocks/api/contract_interactions_api.py @@ -1468,16 +1495,18 @@ fireblocks/models/address_not_available_error.py fireblocks/models/address_registry_add_vault_opt_outs_request.py fireblocks/models/address_registry_add_vault_opt_outs_request_vault_account_ids_inner.py fireblocks/models/address_registry_add_vault_opt_outs_response.py -fireblocks/models/address_registry_error.py +fireblocks/models/address_registry_create_proof_of_ownership_request.py +fireblocks/models/address_registry_create_proof_of_ownership_response.py fireblocks/models/address_registry_get_vault_opt_out_response.py fireblocks/models/address_registry_legal_entity.py fireblocks/models/address_registry_list_vault_opt_outs_response.py fireblocks/models/address_registry_remove_all_vault_opt_outs_response.py fireblocks/models/address_registry_remove_vault_opt_out_response.py fireblocks/models/address_registry_tenant_registry_response.py -fireblocks/models/address_registry_travel_rule_provider.py fireblocks/models/address_registry_vault_list_order.py fireblocks/models/address_registry_vault_opt_out_item.py +fireblocks/models/address_registry_verify_proof_of_ownership_request.py +fireblocks/models/address_registry_verify_proof_of_ownership_response.py fireblocks/models/address_reverse_lookup_response.py fireblocks/models/addresses_filters.py fireblocks/models/alert_exposure_type_enum.py @@ -1605,11 +1634,17 @@ fireblocks/models/canton_call.py fireblocks/models/canton_call_allocation_withdraw.py fireblocks/models/canton_call_allow_list_add.py fireblocks/models/canton_call_allow_list_remove.py +fireblocks/models/canton_call_details.py fireblocks/models/canton_call_end_investor_invite.py fireblocks/models/canton_call_end_investor_invite_cancel.py fireblocks/models/canton_call_end_investor_offboard.py fireblocks/models/canton_call_participant_onboarding.py fireblocks/models/canton_call_transfer_withdraw.py +fireblocks/models/canton_details.py +fireblocks/models/canton_domain_enum.py +fireblocks/models/canton_offer_response_details.py +fireblocks/models/canton_settlement_details.py +fireblocks/models/canton_vendor_enum.py fireblocks/models/chain_descriptor.py fireblocks/models/chain_info_response.py fireblocks/models/channel_dvn_config_with_confirmations.py @@ -1757,6 +1792,7 @@ fireblocks/models/create_vault_account_connection_request.py fireblocks/models/create_vault_account_request.py fireblocks/models/create_vault_asset_response.py fireblocks/models/create_wallet_request.py +fireblocks/models/create_webhook_mtls_config_request.py fireblocks/models/create_webhook_oauth_request.py fireblocks/models/create_webhook_request.py fireblocks/models/create_workflow_execution_request_params_inner.py @@ -1769,6 +1805,7 @@ fireblocks/models/delegation_blockchain_position_info.py fireblocks/models/delegation_summary.py fireblocks/models/delete_network_connection_response.py fireblocks/models/delete_network_id_response.py +fireblocks/models/delete_webhook_mtls_config_response.py fireblocks/models/delete_webhook_oauth_response.py fireblocks/models/deploy_layer_zero_adapters_request.py fireblocks/models/deployable_address_response.py @@ -1817,6 +1854,7 @@ fireblocks/models/earn_curator.py fireblocks/models/earn_metadata.py fireblocks/models/earn_provider.py fireblocks/models/edit_gas_station_configuration_response.py +fireblocks/models/effective_utxo_selection_config.py fireblocks/models/embedded_wallet.py fireblocks/models/embedded_wallet_account.py fireblocks/models/embedded_wallet_address_details.py @@ -1896,6 +1934,7 @@ fireblocks/models/fiat_transfer.py fireblocks/models/fixed_amount_type_enum.py fireblocks/models/fixed_fee.py fireblocks/models/flow_direction.py +fireblocks/models/fok_time_in_force.py fireblocks/models/fps_hk_address.py fireblocks/models/fps_hk_destination.py fireblocks/models/fps_hk_payment_info.py @@ -2012,6 +2051,10 @@ fireblocks/models/legacy_publish_result.py fireblocks/models/legacy_src_or_dest_attributes_inner.py fireblocks/models/legal_entity_registration.py fireblocks/models/lei_status.py +fireblocks/models/limit_execution_request_details.py +fireblocks/models/limit_execution_response_details.py +fireblocks/models/limit_type_details.py +fireblocks/models/limit_type_enum.py fireblocks/models/linked_tokens_count.py fireblocks/models/list_approval_api_keys_response.py fireblocks/models/list_approvals_response.py @@ -2171,6 +2214,8 @@ fireblocks/models/policy_verdict_action_enum2.py fireblocks/models/position.py fireblocks/models/position2.py fireblocks/models/position_related_transaction.py +fireblocks/models/post_trade_settlement.py +fireblocks/models/post_trade_settlement_type.py fireblocks/models/postal_address.py fireblocks/models/pre_screening.py fireblocks/models/prefunded_settlement.py @@ -2412,6 +2457,7 @@ fireblocks/models/tags_paged_response.py fireblocks/models/templates_paginated_response.py fireblocks/models/third_party_routing.py fireblocks/models/time_based_trigger.py +fireblocks/models/time_in_force.py fireblocks/models/time_period_config.py fireblocks/models/time_period_match_type.py fireblocks/models/to_collateral_transaction.py @@ -2645,10 +2691,12 @@ fireblocks/models/update_tag_request.py fireblocks/models/update_token_ownership_status_dto.py fireblocks/models/update_vault_account_asset_address_request.py fireblocks/models/update_vault_account_request.py +fireblocks/models/update_webhook_mtls_config_request.py fireblocks/models/update_webhook_oauth_request.py fireblocks/models/update_webhook_request.py fireblocks/models/update_workflow_status_request.py fireblocks/models/update_workflow_status_response.py +fireblocks/models/upsert_utxo_selection_config_request.py fireblocks/models/us_wire_address.py fireblocks/models/us_wire_destination.py fireblocks/models/us_wire_payment_info.py @@ -2667,9 +2715,15 @@ fireblocks/models/utxo_identifier.py fireblocks/models/utxo_input.py fireblocks/models/utxo_input2.py fireblocks/models/utxo_input_selection.py +fireblocks/models/utxo_label_failure.py +fireblocks/models/utxo_labels_error_response.py fireblocks/models/utxo_output.py +fireblocks/models/utxo_selection_config_entry.py +fireblocks/models/utxo_selection_config_response.py +fireblocks/models/utxo_selection_config_source_enum.py fireblocks/models/utxo_selection_filters.py fireblocks/models/utxo_selection_params.py +fireblocks/models/utxo_selection_strategy_enum.py fireblocks/models/validate_address_response.py fireblocks/models/validate_layer_zero_channel_response.py fireblocks/models/validation_key_dto.py @@ -2693,7 +2747,7 @@ fireblocks/models/wallet_asset_additional_info.py fireblocks/models/webhook.py fireblocks/models/webhook_event.py fireblocks/models/webhook_metric.py -fireblocks/models/webhook_mtls.py +fireblocks/models/webhook_mtls_config.py fireblocks/models/webhook_mtls_csr_response.py fireblocks/models/webhook_mtls_key_algorithm.py fireblocks/models/webhook_oauth_credentials.py @@ -2783,16 +2837,18 @@ test/test_address_not_available_error.py test/test_address_registry_add_vault_opt_outs_request.py test/test_address_registry_add_vault_opt_outs_request_vault_account_ids_inner.py test/test_address_registry_add_vault_opt_outs_response.py -test/test_address_registry_error.py +test/test_address_registry_create_proof_of_ownership_request.py +test/test_address_registry_create_proof_of_ownership_response.py test/test_address_registry_get_vault_opt_out_response.py test/test_address_registry_legal_entity.py test/test_address_registry_list_vault_opt_outs_response.py test/test_address_registry_remove_all_vault_opt_outs_response.py test/test_address_registry_remove_vault_opt_out_response.py test/test_address_registry_tenant_registry_response.py -test/test_address_registry_travel_rule_provider.py test/test_address_registry_vault_list_order.py test/test_address_registry_vault_opt_out_item.py +test/test_address_registry_verify_proof_of_ownership_request.py +test/test_address_registry_verify_proof_of_ownership_response.py test/test_address_reverse_lookup_response.py test/test_addresses_filters.py test/test_alert_exposure_type_enum.py @@ -2925,11 +2981,17 @@ test/test_canton_call.py test/test_canton_call_allocation_withdraw.py test/test_canton_call_allow_list_add.py test/test_canton_call_allow_list_remove.py +test/test_canton_call_details.py test/test_canton_call_end_investor_invite.py test/test_canton_call_end_investor_invite_cancel.py test/test_canton_call_end_investor_offboard.py test/test_canton_call_participant_onboarding.py test/test_canton_call_transfer_withdraw.py +test/test_canton_details.py +test/test_canton_domain_enum.py +test/test_canton_offer_response_details.py +test/test_canton_settlement_details.py +test/test_canton_vendor_enum.py test/test_chain_descriptor.py test/test_chain_info_response.py test/test_channel_dvn_config_with_confirmations.py @@ -2984,7 +3046,7 @@ test/test_connected_account_trading_pair.py test/test_connected_account_trading_pair_supported_type.py test/test_connected_account_trading_pairs_response.py test/test_connected_account_type.py -test/test_connected_accounts_beta_api.py +test/test_connected_accounts_api.py test/test_connected_accounts_response.py test/test_connected_single_account.py test/test_connected_single_account_response.py @@ -3087,6 +3149,7 @@ test/test_create_vault_account_connection_request.py test/test_create_vault_account_request.py test/test_create_vault_asset_response.py test/test_create_wallet_request.py +test/test_create_webhook_mtls_config_request.py test/test_create_webhook_oauth_request.py test/test_create_webhook_request.py test/test_create_workflow_execution_request_params_inner.py @@ -3099,6 +3162,7 @@ test/test_delegation_blockchain_position_info.py test/test_delegation_summary.py test/test_delete_network_connection_response.py test/test_delete_network_id_response.py +test/test_delete_webhook_mtls_config_response.py test/test_delete_webhook_oauth_response.py test/test_deploy_layer_zero_adapters_request.py test/test_deployable_address_response.py @@ -3149,6 +3213,7 @@ test/test_earn_curator.py test/test_earn_metadata.py test/test_earn_provider.py test/test_edit_gas_station_configuration_response.py +test/test_effective_utxo_selection_config.py test/test_embedded_wallet.py test/test_embedded_wallet_account.py test/test_embedded_wallet_address_details.py @@ -3232,6 +3297,7 @@ test/test_fiat_transfer.py test/test_fixed_amount_type_enum.py test/test_fixed_fee.py test/test_flow_direction.py +test/test_fok_time_in_force.py test/test_fps_hk_address.py test/test_fps_hk_destination.py test/test_fps_hk_payment_info.py @@ -3353,6 +3419,10 @@ test/test_legacy_publish_result.py test/test_legacy_src_or_dest_attributes_inner.py test/test_legal_entity_registration.py test/test_lei_status.py +test/test_limit_execution_request_details.py +test/test_limit_execution_response_details.py +test/test_limit_type_details.py +test/test_limit_type_enum.py test/test_linked_tokens_count.py test/test_list_approval_api_keys_response.py test/test_list_approvals_response.py @@ -3521,6 +3591,8 @@ test/test_policy_verdict_action_enum2.py test/test_position.py test/test_position2.py test/test_position_related_transaction.py +test/test_post_trade_settlement.py +test/test_post_trade_settlement_type.py test/test_postal_address.py test/test_pre_screening.py test/test_prefunded_settlement.py @@ -3768,6 +3840,7 @@ test/test_tags_paged_response.py test/test_templates_paginated_response.py test/test_third_party_routing.py test/test_time_based_trigger.py +test/test_time_in_force.py test/test_time_period_config.py test/test_time_period_match_type.py test/test_to_collateral_transaction.py @@ -4006,10 +4079,12 @@ test/test_update_tag_request.py test/test_update_token_ownership_status_dto.py test/test_update_vault_account_asset_address_request.py test/test_update_vault_account_request.py +test/test_update_webhook_mtls_config_request.py test/test_update_webhook_oauth_request.py test/test_update_webhook_request.py test/test_update_workflow_status_request.py test/test_update_workflow_status_response.py +test/test_upsert_utxo_selection_config_request.py test/test_us_wire_address.py test/test_us_wire_destination.py test/test_us_wire_payment_info.py @@ -4030,10 +4105,16 @@ test/test_utxo_identifier.py test/test_utxo_input.py test/test_utxo_input2.py test/test_utxo_input_selection.py +test/test_utxo_label_failure.py +test/test_utxo_labels_error_response.py test/test_utxo_management_beta_api.py test/test_utxo_output.py +test/test_utxo_selection_config_entry.py +test/test_utxo_selection_config_response.py +test/test_utxo_selection_config_source_enum.py test/test_utxo_selection_filters.py test/test_utxo_selection_params.py +test/test_utxo_selection_strategy_enum.py test/test_validate_address_response.py test/test_validate_layer_zero_channel_response.py test/test_validation_key_dto.py @@ -4059,7 +4140,7 @@ test/test_web3_connections_api.py test/test_webhook.py test/test_webhook_event.py test/test_webhook_metric.py -test/test_webhook_mtls.py +test/test_webhook_mtls_config.py test/test_webhook_mtls_csr_response.py test/test_webhook_mtls_key_algorithm.py test/test_webhook_oauth_credentials.py diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 379634b8..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,290 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v32.0.0](https://github.com/fireblocks/py-sdk/compare/v24.0.0...v32.0.0) - 2026-09-23 - -### Merged - -- Generated SDK #2874610640 [`#161`](https://github.com/fireblocks/py-sdk/pull/161) - -## [v24.0.0](https://github.com/fireblocks/py-sdk/compare/v23.0.0...v24.0.0) - 2026-07-23 - -### Merged - -- Generated SDK #2700459745 (major) [`#146`](https://github.com/fireblocks/py-sdk/pull/146) - -## [v23.0.0](https://github.com/fireblocks/py-sdk/compare/v22.0.0...v23.0.0) - 2026-07-01 - -### Merged - -- Generated SDK #1180 [`#145`](https://github.com/fireblocks/py-sdk/pull/145) - -## [v22.0.0](https://github.com/fireblocks/py-sdk/compare/v21.0.0...v22.0.0) - 2026-06-28 - -### Merged - -- Generated SDK #5347 [`#144`](https://github.com/fireblocks/py-sdk/pull/144) - -## [v21.0.0](https://github.com/fireblocks/py-sdk/compare/v20.0.0...v21.0.0) - 2026-06-11 - -### Merged - -- Generated SDK #5364 [`#142`](https://github.com/fireblocks/py-sdk/pull/142) - -## [v20.0.0](https://github.com/fireblocks/py-sdk/compare/v19.1.0...v20.0.0) - 2026-06-02 - -### Merged - -- Generated SDK #2839 (major) [`#141`](https://github.com/fireblocks/py-sdk/pull/141) - -## [v19.1.0](https://github.com/fireblocks/py-sdk/compare/v19.0.0...v19.1.0) - 2026-05-27 - -### Merged - -- Generated SDK #2710 (minor) [`#140`](https://github.com/fireblocks/py-sdk/pull/140) - -## [v19.0.0](https://github.com/fireblocks/py-sdk/compare/v18.0.0...v19.0.0) - 2026-05-17 - -### Merged - -- Generated SDK #7742 (major) [`#139`](https://github.com/fireblocks/py-sdk/pull/139) - -## [v18.0.0](https://github.com/fireblocks/py-sdk/compare/v17.0.0...v18.0.0) - 2026-05-07 - -### Merged - -- Generated SDK #3222 (major) [`#138`](https://github.com/fireblocks/py-sdk/pull/138) - -## [v17.0.0](https://github.com/fireblocks/py-sdk/compare/v16.0.0...v17.0.0) - 2026-04-20 - -### Merged - -- Generated SDK #9605 (major) [`#137`](https://github.com/fireblocks/py-sdk/pull/137) - -## [v16.0.0](https://github.com/fireblocks/py-sdk/compare/v15.0.0...v16.0.0) - 2026-04-06 - -### Merged - -- Generated SDK #3331 [`#135`](https://github.com/fireblocks/py-sdk/pull/135) - -## [v15.0.0](https://github.com/fireblocks/py-sdk/compare/v14.1.0...v15.0.0) - 2026-03-15 - -### Merged - -- Generated SDK #3733 (major) [`#129`](https://github.com/fireblocks/py-sdk/pull/129) - -## [v14.1.0](https://github.com/fireblocks/py-sdk/compare/v14.0.0...v14.1.0) - 2026-02-26 - -### Merged - -- Generated SDK #2167 [`#127`](https://github.com/fireblocks/py-sdk/pull/127) - -## [v14.0.0](https://github.com/fireblocks/py-sdk/compare/v13.0.0...v14.0.0) - 2026-02-03 - -### Merged - -- Generated SDK #4746 [`#123`](https://github.com/fireblocks/py-sdk/pull/123) - -## [v13.0.0](https://github.com/fireblocks/py-sdk/compare/v12.1.2...v13.0.0) - 2025-11-13 - -### Merged - -- Generated SDK #5834 [`#121`](https://github.com/fireblocks/py-sdk/pull/121) - -## [v12.1.2](https://github.com/fireblocks/py-sdk/compare/v12.1.1...v12.1.2) - 2025-10-22 - -### Merged - -- Generated SDK #8293 [`#120`](https://github.com/fireblocks/py-sdk/pull/120) - -## [v12.1.1](https://github.com/fireblocks/py-sdk/compare/v12.1.0...v12.1.1) - 2025-09-29 - -### Merged - -- Generated SDK #6061 [`#119`](https://github.com/fireblocks/py-sdk/pull/119) - -## [v12.1.0](https://github.com/fireblocks/py-sdk/compare/v12.0.0...v12.1.0) - 2025-09-09 - -### Merged - -- Generated SDK #4521 [`#118`](https://github.com/fireblocks/py-sdk/pull/118) - -## [v12.0.0](https://github.com/fireblocks/py-sdk/compare/v11.2.0...v12.0.0) - 2025-09-01 - -### Merged - -- Generated SDK #7741 [`#117`](https://github.com/fireblocks/py-sdk/pull/117) - -## [v11.2.0](https://github.com/fireblocks/py-sdk/compare/v11.1.0...v11.2.0) - 2025-08-18 - -### Merged - -- Generated SDK #3302 [`#116`](https://github.com/fireblocks/py-sdk/pull/116) - -## [v11.1.0](https://github.com/fireblocks/py-sdk/compare/v11.0.0...v11.1.0) - 2025-08-11 - -### Merged - -- Generated SDK #1782 [`#115`](https://github.com/fireblocks/py-sdk/pull/115) - -## [v11.0.0](https://github.com/fireblocks/py-sdk/compare/v10.4.0...v11.0.0) - 2025-07-15 - -### Merged - -- Generated SDK #5610 [`#114`](https://github.com/fireblocks/py-sdk/pull/114) - -## [v10.4.0](https://github.com/fireblocks/py-sdk/compare/v10.3.0...v10.4.0) - 2025-06-29 - -### Merged - -- Generated SDK #1492 [`#113`](https://github.com/fireblocks/py-sdk/pull/113) - -## [v10.3.0](https://github.com/fireblocks/py-sdk/compare/v10.2.0...v10.3.0) - 2025-06-18 - -### Merged - -- Generated SDK #4009 [`#112`](https://github.com/fireblocks/py-sdk/pull/112) - -## [v10.2.0](https://github.com/fireblocks/py-sdk/compare/v10.1.1...v10.2.0) - 2025-06-04 - -### Merged - -- Generated SDK #8912 [`#111`](https://github.com/fireblocks/py-sdk/pull/111) - -## [v10.1.1](https://github.com/fireblocks/py-sdk/compare/v10.1.0...v10.1.1) - 2025-05-18 - -### Merged - -- Generated SDK #5019 [`#110`](https://github.com/fireblocks/py-sdk/pull/110) - -## [v10.1.0](https://github.com/fireblocks/py-sdk/compare/v10.0.0...v10.1.0) - 2025-05-07 - -### Merged - -- Generated SDK #7076 [`#107`](https://github.com/fireblocks/py-sdk/pull/107) - -## [v10.0.0](https://github.com/fireblocks/py-sdk/compare/v9.0.1...v10.0.0) - 2025-04-20 - -### Merged - -- Generated SDK #4794 [`#105`](https://github.com/fireblocks/py-sdk/pull/105) - -## [v9.0.1](https://github.com/fireblocks/py-sdk/compare/v9.0.0...v9.0.1) - 2025-04-07 - -### Merged - -- Generated SDK #3065 [`#104`](https://github.com/fireblocks/py-sdk/pull/104) - -## [v9.0.0](https://github.com/fireblocks/py-sdk/compare/v8.0.0...v9.0.0) - 2025-03-27 - -### Merged - -- Generated SDK #619 [`#102`](https://github.com/fireblocks/py-sdk/pull/102) - -## [v8.0.0](https://github.com/fireblocks/py-sdk/compare/v7.1.0...v8.0.0) - 2025-03-17 - -### Merged - -- Generated SDK #645 [`#101`](https://github.com/fireblocks/py-sdk/pull/101) -- Generated SDK #726 [`#99`](https://github.com/fireblocks/py-sdk/pull/99) - -## [v7.1.0](https://github.com/fireblocks/py-sdk/compare/v7.0.1...v7.1.0) - 2025-02-25 - -### Merged - -- Generated SDK #9833 [`#96`](https://github.com/fireblocks/py-sdk/pull/96) - -## [v7.0.1](https://github.com/fireblocks/py-sdk/compare/v7.0.0...v7.0.1) - 2025-02-12 - -### Merged - -- Generated SDK #4262 [`#95`](https://github.com/fireblocks/py-sdk/pull/95) - -## [v7.0.0](https://github.com/fireblocks/py-sdk/compare/v6.0.0...v7.0.0) - 2025-02-02 - -### Merged - -- Generated SDK #538 [`#92`](https://github.com/fireblocks/py-sdk/pull/92) - -## [v6.0.0](https://github.com/fireblocks/py-sdk/compare/v5.0.0...v6.0.0) - 2025-01-08 - -### Merged - -- Generated SDK #8699 [`#89`](https://github.com/fireblocks/py-sdk/pull/89) - -## [v5.0.0](https://github.com/fireblocks/py-sdk/compare/v4.0.0...v5.0.0) - 2024-12-05 - -### Merged - -- Generated SDK #1430 [`#85`](https://github.com/fireblocks/py-sdk/pull/85) -- Update python-package.yml, deprecate macos-12 [`#86`](https://github.com/fireblocks/py-sdk/pull/86) - -## [v4.0.0](https://github.com/fireblocks/py-sdk/compare/v3.0.0...v4.0.0) - 2024-10-31 - -### Merged - -- Generated SDK #5184 [`#82`](https://github.com/fireblocks/py-sdk/pull/82) - -## [v3.0.0](https://github.com/fireblocks/py-sdk/compare/v2.1.0...v3.0.0) - 2024-09-17 - -### Merged - -- Generated SDK #237 [`#81`](https://github.com/fireblocks/py-sdk/pull/81) - -## [v2.1.0](https://github.com/fireblocks/py-sdk/compare/v2.0.0...v2.1.0) - 2024-07-25 - -### Merged - -- Generated SDK #6749 [`#78`](https://github.com/fireblocks/py-sdk/pull/78) - -## [v2.0.0](https://github.com/fireblocks/py-sdk/compare/v1.0.4...v2.0.0) - 2024-07-17 - -### Merged - -- Generated SDK #6152 [`#76`](https://github.com/fireblocks/py-sdk/pull/76) -- Generated SDK #7647 [`#73`](https://github.com/fireblocks/py-sdk/pull/73) -- Generated SDK #7984 [`#70`](https://github.com/fireblocks/py-sdk/pull/70) - -## [v1.0.4](https://github.com/fireblocks/py-sdk/compare/v1.0.3...v1.0.4) - 2024-06-26 - -### Merged - -- Generated SDK #5779 [`#69`](https://github.com/fireblocks/py-sdk/pull/69) -- Generated SDK #913 [`#68`](https://github.com/fireblocks/py-sdk/pull/68) -- Generated SDK #1353 [`#67`](https://github.com/fireblocks/py-sdk/pull/67) -- Generated SDK #9982 [`#66`](https://github.com/fireblocks/py-sdk/pull/66) -- Generated SDK #1362 [`#65`](https://github.com/fireblocks/py-sdk/pull/65) -- Generated SDK #3652 [`#64`](https://github.com/fireblocks/py-sdk/pull/64) - -## [v1.0.3](https://github.com/fireblocks/py-sdk/compare/v1.0.2...v1.0.3) - 2024-06-06 - -### Merged - -- Generated SDK #2648 [`#30`](https://github.com/fireblocks/py-sdk/pull/30) - -## [v1.0.2](https://github.com/fireblocks/py-sdk/compare/v0.0.2-beta...v1.0.2) - 2024-06-04 - -### Merged - -- version 1.0.2 [`#25`](https://github.com/fireblocks/py-sdk/pull/25) -- version 1.0.0 [`#24`](https://github.com/fireblocks/py-sdk/pull/24) - -## v0.0.2-beta - 2024-05-30 - -### Merged - -- version 0.0.2-beta [`#23`](https://github.com/fireblocks/py-sdk/pull/23) -- Update .bumpversion.cfg [`#14`](https://github.com/fireblocks/py-sdk/pull/14) -- Update setup.py [`#13`](https://github.com/fireblocks/py-sdk/pull/13) -- Bug Fixes [`#12`](https://github.com/fireblocks/py-sdk/pull/12) -- update support for beta in bumpversion [`#11`](https://github.com/fireblocks/py-sdk/pull/11) -- Update setup.py [`#10`](https://github.com/fireblocks/py-sdk/pull/10) -- Update setup.py [`#9`](https://github.com/fireblocks/py-sdk/pull/9) -- Added Idempotency & NCW headers support [`#7`](https://github.com/fireblocks/py-sdk/pull/7) -- Added Idempotency & NCW headers support [`#8`](https://github.com/fireblocks/py-sdk/pull/8) -- Update setup.py [`#5`](https://github.com/fireblocks/py-sdk/pull/5) -- API Support Updates [`#4`](https://github.com/fireblocks/py-sdk/pull/4) diff --git a/README.md b/README.md index bdee0e46..d2cfcddc 100644 --- a/README.md +++ b/README.md @@ -265,6 +265,7 @@ Class | Method | HTTP request | Description *ComplianceApi* | [**activate_byork_config**](docs/ComplianceApi.md#activate_byork_config) | **POST** /screening/byork/config/activate | Activate BYORK Light *ComplianceApi* | [**add_address_registry_vault_opt_outs**](docs/ComplianceApi.md#add_address_registry_vault_opt_outs) | **POST** /address_registry/vaults | Add vault accounts to the address registry opt-out list *ComplianceApi* | [**assign_vaults_to_legal_entity**](docs/ComplianceApi.md#assign_vaults_to_legal_entity) | **POST** /legal_entities/{legalEntityId}/vaults | Assign vault accounts to a legal entity +*ComplianceApi* | [**create_address_registry_proof_of_ownership**](docs/ComplianceApi.md#create_address_registry_proof_of_ownership) | **POST** /address_registry/proof_of_ownership_exports | Create a Proof of Ownership PDF for an address *ComplianceApi* | [**create_counterparty_group**](docs/ComplianceApi.md#create_counterparty_group) | **POST** /counterparty_groups | Create a counterparty group *ComplianceApi* | [**deactivate_ars_config**](docs/ComplianceApi.md#deactivate_ars_config) | **POST** /screening/ars/config/deactivate | Deactivate ARS (Address Registry Screening) *ComplianceApi* | [**deactivate_byork_config**](docs/ComplianceApi.md#deactivate_byork_config) | **POST** /screening/byork/config/deactivate | Deactivate BYORK Light @@ -301,26 +302,28 @@ Class | Method | HTTP request | Description *ComplianceApi* | [**update_legal_entity**](docs/ComplianceApi.md#update_legal_entity) | **PUT** /legal_entities/{legalEntityId} | Update legal entity *ComplianceApi* | [**update_screening_configuration**](docs/ComplianceApi.md#update_screening_configuration) | **PUT** /screening/configurations | Tenant - Screening Configuration *ComplianceApi* | [**update_travel_rule_config**](docs/ComplianceApi.md#update_travel_rule_config) | **PUT** /screening/travel_rule/policy_configuration | Update Travel Rule Configuration +*ComplianceApi* | [**verify_address_registry_proof_of_ownership**](docs/ComplianceApi.md#verify_address_registry_proof_of_ownership) | **POST** /address_registry/proof_of_ownership_exports/verify | Verify a Proof of Ownership export *ComplianceOrchestratorBetaApi* | [**get_screening_result**](docs/ComplianceOrchestratorBetaApi.md#get_screening_result) | **GET** /compliance/orchestrator/screenings/{screeningId} | Get a Compliance Orchestrator screening's result *ComplianceOrchestratorBetaApi* | [**get_workflow**](docs/ComplianceOrchestratorBetaApi.md#get_workflow) | **GET** /compliance/orchestrator/workflows/{workflowId} | Get a Compliance Orchestrator workflow *ComplianceOrchestratorBetaApi* | [**trigger_screening**](docs/ComplianceOrchestratorBetaApi.md#trigger_screening) | **POST** /compliance/orchestrator/screenings | Trigger a Compliance Orchestrator screening *ComplianceOrchestratorBetaApi* | [**update_workflow_status**](docs/ComplianceOrchestratorBetaApi.md#update_workflow_status) | **PATCH** /compliance/orchestrator/workflows/{workflowId}/status | Update a Compliance Orchestrator workflow's status *ComplianceScreeningConfigurationApi* | [**get_aml_screening_configuration**](docs/ComplianceScreeningConfigurationApi.md#get_aml_screening_configuration) | **GET** /screening/aml/policy_configuration | Get AML Screening Policy Configuration *ComplianceScreeningConfigurationApi* | [**get_screening_configuration**](docs/ComplianceScreeningConfigurationApi.md#get_screening_configuration) | **GET** /screening/travel_rule/policy_configuration | Get Travel Rule Screening Policy Configuration -*ConnectedAccountsBetaApi* | [**add_connected_account**](docs/ConnectedAccountsBetaApi.md#add_connected_account) | **POST** /connected_accounts | Add a connected account -*ConnectedAccountsBetaApi* | [**disconnect_connected_account**](docs/ConnectedAccountsBetaApi.md#disconnect_connected_account) | **DELETE** /connected_accounts/{accountId} | Disconnect connected account -*ConnectedAccountsBetaApi* | [**get_connected_account**](docs/ConnectedAccountsBetaApi.md#get_connected_account) | **GET** /connected_accounts/{accountId} | Get connected account -*ConnectedAccountsBetaApi* | [**get_connected_account_allowlist**](docs/ConnectedAccountsBetaApi.md#get_connected_account_allowlist) | **GET** /connected_accounts/{accountId}/allowlist | Get allowlist for connected account -*ConnectedAccountsBetaApi* | [**get_connected_account_allowlist_entry**](docs/ConnectedAccountsBetaApi.md#get_connected_account_allowlist_entry) | **GET** /connected_accounts/{accountId}/allowlist/{allowlistId} | Get a single allowlist entry for a connected account -*ConnectedAccountsBetaApi* | [**get_connected_account_balances**](docs/ConnectedAccountsBetaApi.md#get_connected_account_balances) | **GET** /connected_accounts/{accountId}/balances | Get balances for an account -*ConnectedAccountsBetaApi* | [**get_connected_account_rates**](docs/ConnectedAccountsBetaApi.md#get_connected_account_rates) | **GET** /connected_accounts/{accountId}/rates | Get exchange rates for an account -*ConnectedAccountsBetaApi* | [**get_connected_account_trading_pairs**](docs/ConnectedAccountsBetaApi.md#get_connected_account_trading_pairs) | **GET** /connected_accounts/{accountId}/manifest/capabilities/trading/pairs | Get supported trading pairs for an account -*ConnectedAccountsBetaApi* | [**get_connected_accounts**](docs/ConnectedAccountsBetaApi.md#get_connected_accounts) | **GET** /connected_accounts | Get connected accounts -*ConnectedAccountsBetaApi* | [**get_connected_accounts_credentials_public_key**](docs/ConnectedAccountsBetaApi.md#get_connected_accounts_credentials_public_key) | **GET** /connected_accounts/credentials/public_key | Get public key to encrypt connected account credentials -*ConnectedAccountsBetaApi* | [**rename_connected_account**](docs/ConnectedAccountsBetaApi.md#rename_connected_account) | **POST** /connected_accounts/{accountId}/rename | Rename Connected Account -*ConnectedAccountsBetaApi* | [**sync_connected_account_allowlist**](docs/ConnectedAccountsBetaApi.md#sync_connected_account_allowlist) | **POST** /connected_accounts/{accountId}/allowlist/sync | Sync allowlist for connected account -*ConnectedAccountsBetaApi* | [**update_connected_account_credentials**](docs/ConnectedAccountsBetaApi.md#update_connected_account_credentials) | **POST** /connected_accounts/{accountId}/credentials | Update connected account credentials +*ConnectedAccountsApi* | [**add_connected_account**](docs/ConnectedAccountsApi.md#add_connected_account) | **POST** /connected_accounts | Add a connected account +*ConnectedAccountsApi* | [**disconnect_connected_account**](docs/ConnectedAccountsApi.md#disconnect_connected_account) | **DELETE** /connected_accounts/{accountId} | Disconnect connected account +*ConnectedAccountsApi* | [**get_connected_account**](docs/ConnectedAccountsApi.md#get_connected_account) | **GET** /connected_accounts/{accountId} | Get connected account +*ConnectedAccountsApi* | [**get_connected_account_allowlist**](docs/ConnectedAccountsApi.md#get_connected_account_allowlist) | **GET** /connected_accounts/{accountId}/allowlist | Get allowlist for connected account +*ConnectedAccountsApi* | [**get_connected_account_allowlist_entry**](docs/ConnectedAccountsApi.md#get_connected_account_allowlist_entry) | **GET** /connected_accounts/{accountId}/allowlist/{allowlistId} | Get a single allowlist entry for a connected account +*ConnectedAccountsApi* | [**get_connected_account_balances**](docs/ConnectedAccountsApi.md#get_connected_account_balances) | **GET** /connected_accounts/{accountId}/balances | Get balances for an account +*ConnectedAccountsApi* | [**get_connected_account_rates**](docs/ConnectedAccountsApi.md#get_connected_account_rates) | **GET** /connected_accounts/{accountId}/rates | Get exchange rates for an account +*ConnectedAccountsApi* | [**get_connected_account_trading_pairs**](docs/ConnectedAccountsApi.md#get_connected_account_trading_pairs) | **GET** /connected_accounts/{accountId}/manifest/capabilities/trading/pairs | Get supported trading pairs for an account +*ConnectedAccountsApi* | [**get_connected_accounts**](docs/ConnectedAccountsApi.md#get_connected_accounts) | **GET** /connected_accounts | Get connected accounts +*ConnectedAccountsApi* | [**get_connected_accounts_credentials_public_key**](docs/ConnectedAccountsApi.md#get_connected_accounts_credentials_public_key) | **GET** /connected_accounts/credentials/public_key | Get public key to encrypt connected account credentials +*ConnectedAccountsApi* | [**rename_connected_account**](docs/ConnectedAccountsApi.md#rename_connected_account) | **POST** /connected_accounts/{accountId}/rename | Rename Connected Account +*ConnectedAccountsApi* | [**sync_connected_account_allowlist**](docs/ConnectedAccountsApi.md#sync_connected_account_allowlist) | **POST** /connected_accounts/{accountId}/allowlist/sync | Sync allowlist for connected account +*ConnectedAccountsApi* | [**update_connected_account_credentials**](docs/ConnectedAccountsApi.md#update_connected_account_credentials) | **POST** /connected_accounts/{accountId}/credentials | Update connected account credentials *ConsoleUserApi* | [**create_console_user**](docs/ConsoleUserApi.md#create_console_user) | **POST** /management/users | Create console user +*ConsoleUserApi* | [**delete_console_user**](docs/ConsoleUserApi.md#delete_console_user) | **DELETE** /management/users/{id} | Request deletion of a console user *ConsoleUserApi* | [**get_console_users**](docs/ConsoleUserApi.md#get_console_users) | **GET** /management/users | Get console users *ContactsApi* | [**get_contacts**](docs/ContactsApi.md#get_contacts) | **GET** /contacts | List contacts *ContractInteractionsApi* | [**decode_contract_data**](docs/ContractInteractionsApi.md#decode_contract_data) | **POST** /contract_interactions/base_asset_id/{baseAssetId}/contract_address/{contractAddress}/decode | Decode a function call data, error, or event log @@ -629,8 +632,12 @@ Class | Method | HTTP request | Description *TravelRuleApi* | [**set_vasp_for_vault**](docs/TravelRuleApi.md#set_vasp_for_vault) | **POST** /screening/travel_rule/vault/{vaultAccountId}/vasp | Assign VASP to vault *TravelRuleApi* | [**update_vasp**](docs/TravelRuleApi.md#update_vasp) | **PUT** /screening/travel_rule/vasp/update | Add jsonDidKey to VASP details *TravelRuleApi* | [**validate_full_travel_rule_transaction**](docs/TravelRuleApi.md#validate_full_travel_rule_transaction) | **POST** /screening/travel_rule/transaction/validate/full | Validate Full Travel Rule Transaction +*UTXOManagementBetaApi* | [**get_utxo_selection_config**](docs/UTXOManagementBetaApi.md#get_utxo_selection_config) | **GET** /utxo_management/selection_config | Get UTXO selection config *UTXOManagementBetaApi* | [**get_utxos**](docs/UTXOManagementBetaApi.md#get_utxos) | **GET** /utxo_management/{vaultAccountId}/{assetId}/unspent_outputs | List unspent outputs (UTXOs) +*UTXOManagementBetaApi* | [**get_vault_asset_utxo_selection_config**](docs/UTXOManagementBetaApi.md#get_vault_asset_utxo_selection_config) | **GET** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Get vault and asset UTXO selection config *UTXOManagementBetaApi* | [**update_utxo_labels**](docs/UTXOManagementBetaApi.md#update_utxo_labels) | **PATCH** /utxo_management/{vaultAccountId}/{assetId}/labels | Attach or detach labels to/from UTXOs +*UTXOManagementBetaApi* | [**upsert_utxo_selection_config**](docs/UTXOManagementBetaApi.md#upsert_utxo_selection_config) | **PUT** /utxo_management/selection_config | Upsert UTXO selection config +*UTXOManagementBetaApi* | [**upsert_vault_asset_utxo_selection_config**](docs/UTXOManagementBetaApi.md#upsert_vault_asset_utxo_selection_config) | **PUT** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Upsert vault and asset UTXO selection config *UserGroupsBetaApi* | [**create_user_group**](docs/UserGroupsBetaApi.md#create_user_group) | **POST** /management/user_groups | Create user group *UserGroupsBetaApi* | [**delete_user_group**](docs/UserGroupsBetaApi.md#delete_user_group) | **DELETE** /management/user_groups/{groupId} | Delete user group *UserGroupsBetaApi* | [**get_user_group**](docs/UserGroupsBetaApi.md#get_user_group) | **GET** /management/user_groups/{groupId} | Get user group @@ -682,8 +689,10 @@ Class | Method | HTTP request | Description *WebhooksApi* | [**resend_transaction_webhooks**](docs/WebhooksApi.md#resend_transaction_webhooks) | **POST** /webhooks/resend/{txId} | Resend webhooks for a transaction by ID *WebhooksApi* | [**resend_webhooks**](docs/WebhooksApi.md#resend_webhooks) | **POST** /webhooks/resend | Resend failed webhooks *WebhooksV2Api* | [**create_webhook**](docs/WebhooksV2Api.md#create_webhook) | **POST** /webhooks | Create a new webhook +*WebhooksV2Api* | [**create_webhook_mtls_config**](docs/WebhooksV2Api.md#create_webhook_mtls_config) | **POST** /webhooks_settings/mtls | Create an mTLS configuration *WebhooksV2Api* | [**create_webhook_oauth**](docs/WebhooksV2Api.md#create_webhook_oauth) | **POST** /webhooks_settings/oauth | Create OAuth credentials *WebhooksV2Api* | [**delete_webhook**](docs/WebhooksV2Api.md#delete_webhook) | **DELETE** /webhooks/{webhookId} | Delete webhook +*WebhooksV2Api* | [**delete_webhook_mtls_config**](docs/WebhooksV2Api.md#delete_webhook_mtls_config) | **DELETE** /webhooks_settings/mtls/{webhookMtlsId} | Delete an mTLS configuration *WebhooksV2Api* | [**delete_webhook_oauth**](docs/WebhooksV2Api.md#delete_webhook_oauth) | **DELETE** /webhooks_settings/oauth/{webhookOauthId} | Delete OAuth credentials *WebhooksV2Api* | [**get_metrics**](docs/WebhooksV2Api.md#get_metrics) | **GET** /webhooks/{webhookId}/metrics/{metricName} | Get webhook metrics *WebhooksV2Api* | [**get_mtls_csr**](docs/WebhooksV2Api.md#get_mtls_csr) | **GET** /webhooks_settings/mtls_csr | Get mTLS CSR @@ -693,6 +702,8 @@ Class | Method | HTTP request | Description *WebhooksV2Api* | [**get_resend_by_query_job_status**](docs/WebhooksV2Api.md#get_resend_by_query_job_status) | **GET** /webhooks/{webhookId}/notifications/resend_by_query/jobs/{jobId} | Get resend by query job status *WebhooksV2Api* | [**get_resend_job_status**](docs/WebhooksV2Api.md#get_resend_job_status) | **GET** /webhooks/{webhookId}/notifications/resend_failed/jobs/{jobId} | Get resend job status *WebhooksV2Api* | [**get_webhook**](docs/WebhooksV2Api.md#get_webhook) | **GET** /webhooks/{webhookId} | Get webhook by id +*WebhooksV2Api* | [**get_webhook_mtls_config**](docs/WebhooksV2Api.md#get_webhook_mtls_config) | **GET** /webhooks_settings/mtls/{webhookMtlsId} | Get an mTLS configuration by id +*WebhooksV2Api* | [**get_webhook_mtls_configs**](docs/WebhooksV2Api.md#get_webhook_mtls_configs) | **GET** /webhooks_settings/mtls | List the uploaded mTLS configurations *WebhooksV2Api* | [**get_webhook_oauth**](docs/WebhooksV2Api.md#get_webhook_oauth) | **GET** /webhooks_settings/oauth/{webhookOauthId} | Get OAuth credentials by id *WebhooksV2Api* | [**get_webhook_oauths**](docs/WebhooksV2Api.md#get_webhook_oauths) | **GET** /webhooks_settings/oauth | Get all OAuth credentials *WebhooksV2Api* | [**get_webhooks**](docs/WebhooksV2Api.md#get_webhooks) | **GET** /webhooks | Get all webhooks @@ -701,6 +712,7 @@ Class | Method | HTTP request | Description *WebhooksV2Api* | [**resend_notifications_by_query**](docs/WebhooksV2Api.md#resend_notifications_by_query) | **POST** /webhooks/{webhookId}/notifications/resend_by_query | Resend notifications by query *WebhooksV2Api* | [**resend_notifications_by_resource_id**](docs/WebhooksV2Api.md#resend_notifications_by_resource_id) | **POST** /webhooks/{webhookId}/notifications/resend_by_resource | Resend notifications by resource Id *WebhooksV2Api* | [**update_webhook**](docs/WebhooksV2Api.md#update_webhook) | **PATCH** /webhooks/{webhookId} | Update webhook +*WebhooksV2Api* | [**update_webhook_mtls_config**](docs/WebhooksV2Api.md#update_webhook_mtls_config) | **PATCH** /webhooks_settings/mtls/{webhookMtlsId} | Update an mTLS configuration *WebhooksV2Api* | [**update_webhook_oauth**](docs/WebhooksV2Api.md#update_webhook_oauth) | **PATCH** /webhooks_settings/oauth/{webhookOauthId} | Update OAuth credentials *WorkspaceApi* | [**get_workspace**](docs/WorkspaceApi.md#get_workspace) | **GET** /workspace | Get workspace *WorkspaceStatusBetaApi* | [**get_workspace_status**](docs/WorkspaceStatusBetaApi.md#get_workspace_status) | **GET** /management/workspace_status | Returns current workspace status @@ -760,16 +772,18 @@ Class | Method | HTTP request | Description - [AddressRegistryAddVaultOptOutsRequest](docs/AddressRegistryAddVaultOptOutsRequest.md) - [AddressRegistryAddVaultOptOutsRequestVaultAccountIdsInner](docs/AddressRegistryAddVaultOptOutsRequestVaultAccountIdsInner.md) - [AddressRegistryAddVaultOptOutsResponse](docs/AddressRegistryAddVaultOptOutsResponse.md) - - [AddressRegistryError](docs/AddressRegistryError.md) + - [AddressRegistryCreateProofOfOwnershipRequest](docs/AddressRegistryCreateProofOfOwnershipRequest.md) + - [AddressRegistryCreateProofOfOwnershipResponse](docs/AddressRegistryCreateProofOfOwnershipResponse.md) - [AddressRegistryGetVaultOptOutResponse](docs/AddressRegistryGetVaultOptOutResponse.md) - [AddressRegistryLegalEntity](docs/AddressRegistryLegalEntity.md) - [AddressRegistryListVaultOptOutsResponse](docs/AddressRegistryListVaultOptOutsResponse.md) - [AddressRegistryRemoveAllVaultOptOutsResponse](docs/AddressRegistryRemoveAllVaultOptOutsResponse.md) - [AddressRegistryRemoveVaultOptOutResponse](docs/AddressRegistryRemoveVaultOptOutResponse.md) - [AddressRegistryTenantRegistryResponse](docs/AddressRegistryTenantRegistryResponse.md) - - [AddressRegistryTravelRuleProvider](docs/AddressRegistryTravelRuleProvider.md) - [AddressRegistryVaultListOrder](docs/AddressRegistryVaultListOrder.md) - [AddressRegistryVaultOptOutItem](docs/AddressRegistryVaultOptOutItem.md) + - [AddressRegistryVerifyProofOfOwnershipRequest](docs/AddressRegistryVerifyProofOfOwnershipRequest.md) + - [AddressRegistryVerifyProofOfOwnershipResponse](docs/AddressRegistryVerifyProofOfOwnershipResponse.md) - [AddressReverseLookupResponse](docs/AddressReverseLookupResponse.md) - [AddressesFilters](docs/AddressesFilters.md) - [AlertExposureTypeEnum](docs/AlertExposureTypeEnum.md) @@ -896,11 +910,17 @@ Class | Method | HTTP request | Description - [CantonCallAllocationWithdraw](docs/CantonCallAllocationWithdraw.md) - [CantonCallAllowListAdd](docs/CantonCallAllowListAdd.md) - [CantonCallAllowListRemove](docs/CantonCallAllowListRemove.md) + - [CantonCallDetails](docs/CantonCallDetails.md) - [CantonCallEndInvestorInvite](docs/CantonCallEndInvestorInvite.md) - [CantonCallEndInvestorInviteCancel](docs/CantonCallEndInvestorInviteCancel.md) - [CantonCallEndInvestorOffboard](docs/CantonCallEndInvestorOffboard.md) - [CantonCallParticipantOnboarding](docs/CantonCallParticipantOnboarding.md) - [CantonCallTransferWithdraw](docs/CantonCallTransferWithdraw.md) + - [CantonDetails](docs/CantonDetails.md) + - [CantonDomainEnum](docs/CantonDomainEnum.md) + - [CantonOfferResponseDetails](docs/CantonOfferResponseDetails.md) + - [CantonSettlementDetails](docs/CantonSettlementDetails.md) + - [CantonVendorEnum](docs/CantonVendorEnum.md) - [ChainDescriptor](docs/ChainDescriptor.md) - [ChainInfoResponse](docs/ChainInfoResponse.md) - [ChannelDvnConfigWithConfirmations](docs/ChannelDvnConfigWithConfirmations.md) @@ -1048,6 +1068,7 @@ Class | Method | HTTP request | Description - [CreateVaultAccountRequest](docs/CreateVaultAccountRequest.md) - [CreateVaultAssetResponse](docs/CreateVaultAssetResponse.md) - [CreateWalletRequest](docs/CreateWalletRequest.md) + - [CreateWebhookMtlsConfigRequest](docs/CreateWebhookMtlsConfigRequest.md) - [CreateWebhookOauthRequest](docs/CreateWebhookOauthRequest.md) - [CreateWebhookRequest](docs/CreateWebhookRequest.md) - [CreateWorkflowExecutionRequestParamsInner](docs/CreateWorkflowExecutionRequestParamsInner.md) @@ -1062,6 +1083,7 @@ Class | Method | HTTP request | Description - [DelegationSummary](docs/DelegationSummary.md) - [DeleteNetworkConnectionResponse](docs/DeleteNetworkConnectionResponse.md) - [DeleteNetworkIdResponse](docs/DeleteNetworkIdResponse.md) + - [DeleteWebhookMtlsConfigResponse](docs/DeleteWebhookMtlsConfigResponse.md) - [DeleteWebhookOauthResponse](docs/DeleteWebhookOauthResponse.md) - [DeployLayerZeroAdaptersRequest](docs/DeployLayerZeroAdaptersRequest.md) - [DeployableAddressResponse](docs/DeployableAddressResponse.md) @@ -1109,6 +1131,7 @@ Class | Method | HTTP request | Description - [EarnMetadata](docs/EarnMetadata.md) - [EarnProvider](docs/EarnProvider.md) - [EditGasStationConfigurationResponse](docs/EditGasStationConfigurationResponse.md) + - [EffectiveUtxoSelectionConfig](docs/EffectiveUtxoSelectionConfig.md) - [EmbeddedWallet](docs/EmbeddedWallet.md) - [EmbeddedWalletAccount](docs/EmbeddedWalletAccount.md) - [EmbeddedWalletAddressDetails](docs/EmbeddedWalletAddressDetails.md) @@ -1187,6 +1210,7 @@ Class | Method | HTTP request | Description - [FixedAmountTypeEnum](docs/FixedAmountTypeEnum.md) - [FixedFee](docs/FixedFee.md) - [FlowDirection](docs/FlowDirection.md) + - [FokTimeInForce](docs/FokTimeInForce.md) - [FpsHkAddress](docs/FpsHkAddress.md) - [FpsHkDestination](docs/FpsHkDestination.md) - [FpsHkPaymentInfo](docs/FpsHkPaymentInfo.md) @@ -1303,6 +1327,10 @@ Class | Method | HTTP request | Description - [LegacySrcOrDestAttributesInner](docs/LegacySrcOrDestAttributesInner.md) - [LegalEntityRegistration](docs/LegalEntityRegistration.md) - [LeiStatus](docs/LeiStatus.md) + - [LimitExecutionRequestDetails](docs/LimitExecutionRequestDetails.md) + - [LimitExecutionResponseDetails](docs/LimitExecutionResponseDetails.md) + - [LimitTypeDetails](docs/LimitTypeDetails.md) + - [LimitTypeEnum](docs/LimitTypeEnum.md) - [LinkedTokensCount](docs/LinkedTokensCount.md) - [ListApprovalApiKeysResponse](docs/ListApprovalApiKeysResponse.md) - [ListApprovalsResponse](docs/ListApprovalsResponse.md) @@ -1462,6 +1490,8 @@ Class | Method | HTTP request | Description - [Position](docs/Position.md) - [Position2](docs/Position2.md) - [PositionRelatedTransaction](docs/PositionRelatedTransaction.md) + - [PostTradeSettlement](docs/PostTradeSettlement.md) + - [PostTradeSettlementType](docs/PostTradeSettlementType.md) - [PostalAddress](docs/PostalAddress.md) - [PreScreening](docs/PreScreening.md) - [PrefundedSettlement](docs/PrefundedSettlement.md) @@ -1793,6 +1823,7 @@ Class | Method | HTTP request | Description - [TemplatesPaginatedResponse](docs/TemplatesPaginatedResponse.md) - [ThirdPartyRouting](docs/ThirdPartyRouting.md) - [TimeBasedTrigger](docs/TimeBasedTrigger.md) + - [TimeInForce](docs/TimeInForce.md) - [TimePeriodConfig](docs/TimePeriodConfig.md) - [TimePeriodMatchType](docs/TimePeriodMatchType.md) - [ToCollateralTransaction](docs/ToCollateralTransaction.md) @@ -1938,10 +1969,12 @@ Class | Method | HTTP request | Description - [UpdateTokenOwnershipStatusDto](docs/UpdateTokenOwnershipStatusDto.md) - [UpdateVaultAccountAssetAddressRequest](docs/UpdateVaultAccountAssetAddressRequest.md) - [UpdateVaultAccountRequest](docs/UpdateVaultAccountRequest.md) + - [UpdateWebhookMtlsConfigRequest](docs/UpdateWebhookMtlsConfigRequest.md) - [UpdateWebhookOauthRequest](docs/UpdateWebhookOauthRequest.md) - [UpdateWebhookRequest](docs/UpdateWebhookRequest.md) - [UpdateWorkflowStatusRequest](docs/UpdateWorkflowStatusRequest.md) - [UpdateWorkflowStatusResponse](docs/UpdateWorkflowStatusResponse.md) + - [UpsertUtxoSelectionConfigRequest](docs/UpsertUtxoSelectionConfigRequest.md) - [UsWirePaymentInfo](docs/UsWirePaymentInfo.md) - [UsdcGatewayWalletAsset](docs/UsdcGatewayWalletAsset.md) - [UsdcGatewayWalletInfoResponse](docs/UsdcGatewayWalletInfoResponse.md) @@ -1958,9 +1991,15 @@ Class | Method | HTTP request | Description - [UtxoInput](docs/UtxoInput.md) - [UtxoInput2](docs/UtxoInput2.md) - [UtxoInputSelection](docs/UtxoInputSelection.md) + - [UtxoLabelFailure](docs/UtxoLabelFailure.md) + - [UtxoLabelsErrorResponse](docs/UtxoLabelsErrorResponse.md) - [UtxoOutput](docs/UtxoOutput.md) + - [UtxoSelectionConfigEntry](docs/UtxoSelectionConfigEntry.md) + - [UtxoSelectionConfigResponse](docs/UtxoSelectionConfigResponse.md) + - [UtxoSelectionConfigSourceEnum](docs/UtxoSelectionConfigSourceEnum.md) - [UtxoSelectionFilters](docs/UtxoSelectionFilters.md) - [UtxoSelectionParams](docs/UtxoSelectionParams.md) + - [UtxoSelectionStrategyEnum](docs/UtxoSelectionStrategyEnum.md) - [ValidateAddressResponse](docs/ValidateAddressResponse.md) - [ValidateLayerZeroChannelResponse](docs/ValidateLayerZeroChannelResponse.md) - [ValidationKeyDto](docs/ValidationKeyDto.md) @@ -1984,7 +2023,7 @@ Class | Method | HTTP request | Description - [Webhook](docs/Webhook.md) - [WebhookEvent](docs/WebhookEvent.md) - [WebhookMetric](docs/WebhookMetric.md) - - [WebhookMtls](docs/WebhookMtls.md) + - [WebhookMtlsConfig](docs/WebhookMtlsConfig.md) - [WebhookMtlsCsrResponse](docs/WebhookMtlsCsrResponse.md) - [WebhookMtlsKeyAlgorithm](docs/WebhookMtlsKeyAlgorithm.md) - [WebhookOauthCredentials](docs/WebhookOauthCredentials.md) diff --git a/docs/AddressRegistryCreateProofOfOwnershipRequest.md b/docs/AddressRegistryCreateProofOfOwnershipRequest.md new file mode 100644 index 00000000..3de68e4b --- /dev/null +++ b/docs/AddressRegistryCreateProofOfOwnershipRequest.md @@ -0,0 +1,30 @@ +# AddressRegistryCreateProofOfOwnershipRequest + +Request body for creating an Address Registry Proof of Ownership PDF export. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**address** | **str** | Blockchain address to prove ownership for (must resolve to the caller's workspace). Same format expectations as the `address` path parameter on `GET /v1/address_registry/legal_entities/{address}`. | + +## Example + +```python +from fireblocks.models.address_registry_create_proof_of_ownership_request import AddressRegistryCreateProofOfOwnershipRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of AddressRegistryCreateProofOfOwnershipRequest from a JSON string +address_registry_create_proof_of_ownership_request_instance = AddressRegistryCreateProofOfOwnershipRequest.from_json(json) +# print the JSON string representation of the object +print(AddressRegistryCreateProofOfOwnershipRequest.to_json()) + +# convert the object into a dict +address_registry_create_proof_of_ownership_request_dict = address_registry_create_proof_of_ownership_request_instance.to_dict() +# create an instance of AddressRegistryCreateProofOfOwnershipRequest from a dict +address_registry_create_proof_of_ownership_request_from_dict = AddressRegistryCreateProofOfOwnershipRequest.from_dict(address_registry_create_proof_of_ownership_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AddressRegistryCreateProofOfOwnershipResponse.md b/docs/AddressRegistryCreateProofOfOwnershipResponse.md new file mode 100644 index 00000000..1295911b --- /dev/null +++ b/docs/AddressRegistryCreateProofOfOwnershipResponse.md @@ -0,0 +1,33 @@ +# AddressRegistryCreateProofOfOwnershipResponse + +Address Registry Proof of Ownership PDF export, created successfully. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**pdf** | **bytearray** | Base64-encoded Proof of Ownership PDF bytes. Fireblocks does not store the PDF: save it immediately, there is no re-download route. | +**export_id** | **str** | Stable id of the online-verifiable export record. | +**verification_hash** | **str** | Verification hash bound to the export (also printed on the PDF). | +**expires_at** | **str** | Inclusive last UTC calendar day online verification is available (`YYYY-MM-DD`). | + +## Example + +```python +from fireblocks.models.address_registry_create_proof_of_ownership_response import AddressRegistryCreateProofOfOwnershipResponse + +# TODO update the JSON string below +json = "{}" +# create an instance of AddressRegistryCreateProofOfOwnershipResponse from a JSON string +address_registry_create_proof_of_ownership_response_instance = AddressRegistryCreateProofOfOwnershipResponse.from_json(json) +# print the JSON string representation of the object +print(AddressRegistryCreateProofOfOwnershipResponse.to_json()) + +# convert the object into a dict +address_registry_create_proof_of_ownership_response_dict = address_registry_create_proof_of_ownership_response_instance.to_dict() +# create an instance of AddressRegistryCreateProofOfOwnershipResponse from a dict +address_registry_create_proof_of_ownership_response_from_dict = AddressRegistryCreateProofOfOwnershipResponse.from_dict(address_registry_create_proof_of_ownership_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AddressRegistryError.md b/docs/AddressRegistryError.md deleted file mode 100644 index 1802f0a5..00000000 --- a/docs/AddressRegistryError.md +++ /dev/null @@ -1,31 +0,0 @@ -# AddressRegistryError - -Error body for address registry operations (4xx and 5xx). - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**code** | **int** | Application error code when present. For HTTP 400 on legal-entity lookup, distinguish: 4100 — request validation (e.g. missing, empty, or whitespace-only `address` after trim); 2140 — workspace not opted in to the address registry (`AR_OPT_IN_REQUIRED`). 2142 — not found (404). Other codes may appear, including on server errors. | [optional] -**message** | **str** | Human-readable error message | - -## Example - -```python -from fireblocks.models.address_registry_error import AddressRegistryError - -# TODO update the JSON string below -json = "{}" -# create an instance of AddressRegistryError from a JSON string -address_registry_error_instance = AddressRegistryError.from_json(json) -# print the JSON string representation of the object -print(AddressRegistryError.to_json()) - -# convert the object into a dict -address_registry_error_dict = address_registry_error_instance.to_dict() -# create an instance of AddressRegistryError from a dict -address_registry_error_from_dict = AddressRegistryError.from_dict(address_registry_error_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/AddressRegistryLegalEntity.md b/docs/AddressRegistryLegalEntity.md index 6e2e127d..41ec5ff1 100644 --- a/docs/AddressRegistryLegalEntity.md +++ b/docs/AddressRegistryLegalEntity.md @@ -10,8 +10,9 @@ Name | Type | Description | Notes **entity_name** | **str** | Legal entity display name. | **jurisdiction** | **str** | Jurisdiction (e.g. ISO 3166-1 alpha-2 country code). | **lei** | **str** | Legal Entity Identifier when available. Empty when `leiData` is `false`. | -**travel_rule_providers** | [**List[AddressRegistryTravelRuleProvider]**](AddressRegistryTravelRuleProvider.md) | | +**travel_rule_providers** | **List[str]** | | **email** | **str** | Travel Rule contact email when available. | +**proof_of_ownership_available** | **bool** | Whether the caller can currently create a Proof of Ownership PDF for this address (`POST /v1/address_registry/proof_of_ownership_exports`). | ## Example diff --git a/docs/AddressRegistryTravelRuleProvider.md b/docs/AddressRegistryTravelRuleProvider.md deleted file mode 100644 index 526e3181..00000000 --- a/docs/AddressRegistryTravelRuleProvider.md +++ /dev/null @@ -1,17 +0,0 @@ -# AddressRegistryTravelRuleProvider - -Travel Rule provider identifier (string enum value). - -## Enum - -* `TRAVEL_RULE_PROVIDER_NOTABENE` (value: `'TRAVEL_RULE_PROVIDER_NOTABENE'`) - -* `TRAVEL_RULE_PROVIDER_SYGNA` (value: `'TRAVEL_RULE_PROVIDER_SYGNA'`) - -* `TRAVEL_RULE_PROVIDER_TRISA` (value: `'TRAVEL_RULE_PROVIDER_TRISA'`) - -* `TRAVEL_RULE_PROVIDER_OPENVASP` (value: `'TRAVEL_RULE_PROVIDER_OPENVASP'`) - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/AddressRegistryVerifyProofOfOwnershipRequest.md b/docs/AddressRegistryVerifyProofOfOwnershipRequest.md new file mode 100644 index 00000000..5c8d58c8 --- /dev/null +++ b/docs/AddressRegistryVerifyProofOfOwnershipRequest.md @@ -0,0 +1,33 @@ +# AddressRegistryVerifyProofOfOwnershipRequest + +Request body for verifying an Address Registry Proof of Ownership export. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**export_id** | **str** | Export id from create / the PDF. | +**verification_hash** | **str** | Verification hash from create / the PDF (exact match required). | +**address** | **str** | Address from the PDF (exact UTF-8 match to the stored export). | +**expires_at** | **str** | Optional but recommended: the PDF's \"Online verification available until\" date (`YYYY-MM-DD`), which speeds up the lookup. A wrong value yields `valid: false` even if the export exists — copy it exactly from the PDF, or omit it. | [optional] + +## Example + +```python +from fireblocks.models.address_registry_verify_proof_of_ownership_request import AddressRegistryVerifyProofOfOwnershipRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of AddressRegistryVerifyProofOfOwnershipRequest from a JSON string +address_registry_verify_proof_of_ownership_request_instance = AddressRegistryVerifyProofOfOwnershipRequest.from_json(json) +# print the JSON string representation of the object +print(AddressRegistryVerifyProofOfOwnershipRequest.to_json()) + +# convert the object into a dict +address_registry_verify_proof_of_ownership_request_dict = address_registry_verify_proof_of_ownership_request_instance.to_dict() +# create an instance of AddressRegistryVerifyProofOfOwnershipRequest from a dict +address_registry_verify_proof_of_ownership_request_from_dict = AddressRegistryVerifyProofOfOwnershipRequest.from_dict(address_registry_verify_proof_of_ownership_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AddressRegistryVerifyProofOfOwnershipResponse.md b/docs/AddressRegistryVerifyProofOfOwnershipResponse.md new file mode 100644 index 00000000..c56f7579 --- /dev/null +++ b/docs/AddressRegistryVerifyProofOfOwnershipResponse.md @@ -0,0 +1,31 @@ +# AddressRegistryVerifyProofOfOwnershipResponse + +Online verification result. Authenticated calls always return HTTP 200 with this body (`valid: true` or `valid: false`); unknown/expired exports do not use 404. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**valid** | **bool** | Whether the stored export matches the supplied verification hash and address within retention. | +**expires_at** | **str** | Inclusive last UTC calendar day (`YYYY-MM-DD`) when `valid` is true; empty string when `valid` is false. | + +## Example + +```python +from fireblocks.models.address_registry_verify_proof_of_ownership_response import AddressRegistryVerifyProofOfOwnershipResponse + +# TODO update the JSON string below +json = "{}" +# create an instance of AddressRegistryVerifyProofOfOwnershipResponse from a JSON string +address_registry_verify_proof_of_ownership_response_instance = AddressRegistryVerifyProofOfOwnershipResponse.from_json(json) +# print the JSON string representation of the object +print(AddressRegistryVerifyProofOfOwnershipResponse.to_json()) + +# convert the object into a dict +address_registry_verify_proof_of_ownership_response_dict = address_registry_verify_proof_of_ownership_response_instance.to_dict() +# create an instance of AddressRegistryVerifyProofOfOwnershipResponse from a dict +address_registry_verify_proof_of_ownership_response_from_dict = AddressRegistryVerifyProofOfOwnershipResponse.from_dict(address_registry_verify_proof_of_ownership_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AllocationWithdrawPayload.md b/docs/AllocationWithdrawPayload.md index 4ae3e76f..b8669a5b 100644 --- a/docs/AllocationWithdrawPayload.md +++ b/docs/AllocationWithdrawPayload.md @@ -5,8 +5,6 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**vault_account_id** | **str** | The vault account whose Canton wallet acts here. | -**asset** | **str** | Chain asset — `CANTON` or `CANTON_TEST`. | **allocation_transaction_id** | **str** | The Fireblocks transaction id of the outgoing response that created the allocation. The allocation is resolved from it — Canton contract ids are never accepted here. | ## Example diff --git a/docs/CantonCallDetails.md b/docs/CantonCallDetails.md new file mode 100644 index 00000000..eed1ff42 --- /dev/null +++ b/docs/CantonCallDetails.md @@ -0,0 +1,34 @@ +# CantonCallDetails + +A call made through the Canton calls endpoint. Written once and never changed. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**version** | **int** | The shape of this block. Stamped at creation and never changed, so a reader always knows which version it is holding. | [optional] +**domain** | [**CantonDomainEnum**](CantonDomainEnum.md) | | [optional] +**type** | **str** | The call type, matching the `type` sent when the call was created. | [optional] +**vendor** | [**CantonVendorEnum**](CantonVendorEnum.md) | | [optional] +**original_transaction_id** | **str** | The transaction this call acts on. On a withdraw it is the allocation that was withdrawn, so the withdraw transaction read on its own still says what it withdrew. | [optional] + +## Example + +```python +from fireblocks.models.canton_call_details import CantonCallDetails + +# TODO update the JSON string below +json = "{}" +# create an instance of CantonCallDetails from a JSON string +canton_call_details_instance = CantonCallDetails.from_json(json) +# print the JSON string representation of the object +print(CantonCallDetails.to_json()) + +# convert the object into a dict +canton_call_details_dict = canton_call_details_instance.to_dict() +# create an instance of CantonCallDetails from a dict +canton_call_details_from_dict = CantonCallDetails.from_dict(canton_call_details_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CantonDetails.md b/docs/CantonDetails.md new file mode 100644 index 00000000..ff3a4ab6 --- /dev/null +++ b/docs/CantonDetails.md @@ -0,0 +1,32 @@ +# CantonDetails + +Canton transaction context. Present on transactions that belong to a Canton flow, and the authoritative signal that a transaction IS one — do not branch on `operation`, which is `CANTON_CALL` for customer-initiated calls but `TRANSFER` for an incoming Canton transfer offer. **No `cantonDetails` at all means the transaction is not a Canton item.** The service sets exactly one of `offerResponse`, `call` or `settlement`. That is a guarantee about what is sent, NOT a constraint this schema enforces: the three are declared as independent optional properties on purpose, so that a response carrying a block a client does not yet know about — or a row written before a block type existed — still validates. Response schemas here stay additive. Read the block you recognise; do not reject a payload for the shape of the others. Every block carries `version`, stamped when the transaction is created and never changed — a transaction written today keeps its shape, so `version` is how you know which shape you are reading. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**offer_response** | [**CantonOfferResponseDetails**](CantonOfferResponseDetails.md) | | [optional] +**call** | [**CantonCallDetails**](CantonCallDetails.md) | | [optional] +**settlement** | [**CantonSettlementDetails**](CantonSettlementDetails.md) | | [optional] + +## Example + +```python +from fireblocks.models.canton_details import CantonDetails + +# TODO update the JSON string below +json = "{}" +# create an instance of CantonDetails from a JSON string +canton_details_instance = CantonDetails.from_json(json) +# print the JSON string representation of the object +print(CantonDetails.to_json()) + +# convert the object into a dict +canton_details_dict = canton_details_instance.to_dict() +# create an instance of CantonDetails from a dict +canton_details_from_dict = CantonDetails.from_dict(canton_details_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CantonDomainEnum.md b/docs/CantonDomainEnum.md new file mode 100644 index 00000000..61306101 --- /dev/null +++ b/docs/CantonDomainEnum.md @@ -0,0 +1,15 @@ +# CantonDomainEnum + +The Canton domain a transaction belongs to. Singular, and it matches the prefix of the `type` / `responseType` values in the same domain character for character. + +## Enum + +* `ONBOARDING` (value: `'ONBOARDING'`) + +* `ALLOCATION` (value: `'ALLOCATION'`) + +* `TRANSFER` (value: `'TRANSFER'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CantonOfferResponseDetails.md b/docs/CantonOfferResponseDetails.md new file mode 100644 index 00000000..1b2bb0b1 --- /dev/null +++ b/docs/CantonOfferResponseDetails.md @@ -0,0 +1,37 @@ +# CantonOfferResponseDetails + +The transaction belongs to an offer conversation: the offer itself, the response to it, or a leg that carries no answer of its own. The only block that changes over a transaction's lifetime. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**version** | **int** | The shape of this block. Stamped at creation and never changed, so a reader always knows which version it is holding. | [optional] +**domain** | [**CantonDomainEnum**](CantonDomainEnum.md) | | [optional] +**vendor** | [**CantonVendorEnum**](CantonVendorEnum.md) | | [optional] +**available_responses** | **List[str]** | The responses that can be sent for this offer right now. An empty array means nothing is answerable on this transaction — which is the difference between an actionable offer and a linked leg that shares its sub-status. | [optional] +**expires_at** | **datetime** | When the offer expires, where it has a deadline. | [optional] +**approval_transaction_id** | **str** | The response transaction, once one has been dispatched for this offer. | [optional] +**original_transaction_id** | **str** | The transaction this one relates to — the offer a response answered. | [optional] +**verdict** | **str** | The outcome, set once the transaction reaches a terminal status. | [optional] + +## Example + +```python +from fireblocks.models.canton_offer_response_details import CantonOfferResponseDetails + +# TODO update the JSON string below +json = "{}" +# create an instance of CantonOfferResponseDetails from a JSON string +canton_offer_response_details_instance = CantonOfferResponseDetails.from_json(json) +# print the JSON string representation of the object +print(CantonOfferResponseDetails.to_json()) + +# convert the object into a dict +canton_offer_response_details_dict = canton_offer_response_details_instance.to_dict() +# create an instance of CantonOfferResponseDetails from a dict +canton_offer_response_details_from_dict = CantonOfferResponseDetails.from_dict(canton_offer_response_details_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CantonSettlementDetails.md b/docs/CantonSettlementDetails.md new file mode 100644 index 00000000..2d48f988 --- /dev/null +++ b/docs/CantonSettlementDetails.md @@ -0,0 +1,33 @@ +# CantonSettlementDetails + +The credit side of a delivery-versus-payment: a venue settled an allocation. Written once, at creation — the transaction is already complete when it appears. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**version** | **int** | The shape of this block. Stamped at creation and never changed, so a reader always knows which version it is holding. | [optional] +**domain** | [**CantonDomainEnum**](CantonDomainEnum.md) | | [optional] +**type** | **str** | The settlement type. | [optional] +**original_transaction_id** | **str** | The allocation this receipt settles. | [optional] + +## Example + +```python +from fireblocks.models.canton_settlement_details import CantonSettlementDetails + +# TODO update the JSON string below +json = "{}" +# create an instance of CantonSettlementDetails from a JSON string +canton_settlement_details_instance = CantonSettlementDetails.from_json(json) +# print the JSON string representation of the object +print(CantonSettlementDetails.to_json()) + +# convert the object into a dict +canton_settlement_details_dict = canton_settlement_details_instance.to_dict() +# create an instance of CantonSettlementDetails from a dict +canton_settlement_details_from_dict = CantonSettlementDetails.from_dict(canton_settlement_details_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CantonVendorEnum.md b/docs/CantonVendorEnum.md new file mode 100644 index 00000000..75c87f72 --- /dev/null +++ b/docs/CantonVendorEnum.md @@ -0,0 +1,13 @@ +# CantonVendorEnum + +The vendor whose flow this is. Present only where the flow is vendor-specific — absent on vendor-neutral Splice operations such as allocation withdraw. + +## Enum + +* `DTCC` (value: `'DTCC'`) + +* `TRADEWEB` (value: `'TRADEWEB'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ComplianceApi.md b/docs/ComplianceApi.md index 6f80e80e..a14a6111 100644 --- a/docs/ComplianceApi.md +++ b/docs/ComplianceApi.md @@ -8,6 +8,7 @@ Method | HTTP request | Description [**activate_byork_config**](ComplianceApi.md#activate_byork_config) | **POST** /screening/byork/config/activate | Activate BYORK Light [**add_address_registry_vault_opt_outs**](ComplianceApi.md#add_address_registry_vault_opt_outs) | **POST** /address_registry/vaults | Add vault accounts to the address registry opt-out list [**assign_vaults_to_legal_entity**](ComplianceApi.md#assign_vaults_to_legal_entity) | **POST** /legal_entities/{legalEntityId}/vaults | Assign vault accounts to a legal entity +[**create_address_registry_proof_of_ownership**](ComplianceApi.md#create_address_registry_proof_of_ownership) | **POST** /address_registry/proof_of_ownership_exports | Create a Proof of Ownership PDF for an address [**create_counterparty_group**](ComplianceApi.md#create_counterparty_group) | **POST** /counterparty_groups | Create a counterparty group [**deactivate_ars_config**](ComplianceApi.md#deactivate_ars_config) | **POST** /screening/ars/config/deactivate | Deactivate ARS (Address Registry Screening) [**deactivate_byork_config**](ComplianceApi.md#deactivate_byork_config) | **POST** /screening/byork/config/deactivate | Deactivate BYORK Light @@ -44,6 +45,7 @@ Method | HTTP request | Description [**update_legal_entity**](ComplianceApi.md#update_legal_entity) | **PUT** /legal_entities/{legalEntityId} | Update legal entity [**update_screening_configuration**](ComplianceApi.md#update_screening_configuration) | **PUT** /screening/configurations | Tenant - Screening Configuration [**update_travel_rule_config**](ComplianceApi.md#update_travel_rule_config) | **PUT** /screening/travel_rule/policy_configuration | Update Travel Rule Configuration +[**verify_address_registry_proof_of_ownership**](ComplianceApi.md#verify_address_registry_proof_of_ownership) | **POST** /address_registry/proof_of_ownership_exports/verify | Verify a Proof of Ownership export # **activate_ars_config** @@ -355,6 +357,91 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **create_address_registry_proof_of_ownership** +> AddressRegistryCreateProofOfOwnershipResponse create_address_registry_proof_of_ownership(address_registry_create_proof_of_ownership_request, idempotency_key=idempotency_key) + +Create a Proof of Ownership PDF for an address + +Creates a Proof of Ownership PDF for a blockchain address owned by the authenticated workspace — for example, to share with a counterparty or bank as compliance evidence. Recipients can confirm it with `POST /v1/address_registry/proof_of_ownership_exports/verify`. + +Check `proofOfOwnershipAvailable` on `GET /v1/address_registry/legal_entities/{address}` first if you want to know whether create is likely to succeed. + +### Example + + +```python +from fireblocks.models.address_registry_create_proof_of_ownership_request import AddressRegistryCreateProofOfOwnershipRequest +from fireblocks.models.address_registry_create_proof_of_ownership_response import AddressRegistryCreateProofOfOwnershipResponse +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + address_registry_create_proof_of_ownership_request = fireblocks.AddressRegistryCreateProofOfOwnershipRequest() # AddressRegistryCreateProofOfOwnershipRequest | + idempotency_key = 'idempotency_key_example' # str | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. (optional) + + try: + # Create a Proof of Ownership PDF for an address + api_response = fireblocks.compliance.create_address_registry_proof_of_ownership(address_registry_create_proof_of_ownership_request, idempotency_key=idempotency_key).result() + print("The response of ComplianceApi->create_address_registry_proof_of_ownership:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ComplianceApi->create_address_registry_proof_of_ownership: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **address_registry_create_proof_of_ownership_request** | [**AddressRegistryCreateProofOfOwnershipRequest**](AddressRegistryCreateProofOfOwnershipRequest.md)| | + **idempotency_key** | **str**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] + +### Return type + +[**AddressRegistryCreateProofOfOwnershipResponse**](AddressRegistryCreateProofOfOwnershipResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | PDF export created | * X-Request-ID -
| +**400** | - Missing, empty, or whitespace-only `address`. Error code 4100. - Workspace not opted in to the address registry. Error code 2140. | * X-Request-ID -
| +**403** | This workspace is blocked from creating Proof of Ownership exports. Error code 2146. | * X-Request-ID -
| +**404** | Address not found, not owned by this workspace, or not usable for export. Error code 2142. | * X-Request-ID -
| +**429** | Rate limited. Error code 2145. Retry-safe after backing off. | * X-Request-ID -
| +**500** | Internal error. No PDF is returned. Not retry-safe. Error code 2143. | * X-Request-ID -
| +**503** | Rate-limit infrastructure temporarily unavailable. Safe to retry with backoff. Error code 2143 — same as the 500 case; use the HTTP status to tell them apart. | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **create_counterparty_group** > CounterpartyGroup create_counterparty_group(create_counterparty_group_request, idempotency_key=idempotency_key) @@ -1386,8 +1473,10 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | Legal entity found | * X-Request-ID -
| -**400** | Bad request — either request validation (path `{address}` empty or whitespace-only after trim, e.g. encoded spaces only; numeric code 4100), or the authenticated workspace is not opted in to the address registry (numeric code 2140). The `message` field describes the failure; use `code` to distinguish. | * X-Request-ID -
| -**404** | Not found (error code 2142) — unresolved address, no legal entity for a resolved address, or the same not-found outcome in other cases. | * X-Request-ID -
| +**400** | - `{address}` empty or whitespace-only after trim. Error code 4100. - Workspace not opted in to the address registry. Error code 2140. | * X-Request-ID -
| +**403** | This workspace is blocked from Address Registry public lookup. Error code 2146. | * X-Request-ID -
| +**404** | Address not found, owner not opted in, or legal entity not usable for lookup. Error code 2142. | * X-Request-ID -
| +**429** | Rate limited. Error code 2145. Retry-safe after backing off. | * X-Request-ID -
| **0** | Error Response | * X-Request-ID -
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -3074,3 +3163,81 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **verify_address_registry_proof_of_ownership** +> AddressRegistryVerifyProofOfOwnershipResponse verify_address_registry_proof_of_ownership(address_registry_verify_proof_of_ownership_request, idempotency_key=idempotency_key) + +Verify a Proof of Ownership export + +Verifies a Proof of Ownership export against the record Fireblocks stored at creation. Returns `valid: false` (not 404) for an unknown, expired, or mismatched export. Available to any authenticated Fireblocks workspace, not just the export's original owner. + +### Example + + +```python +from fireblocks.models.address_registry_verify_proof_of_ownership_request import AddressRegistryVerifyProofOfOwnershipRequest +from fireblocks.models.address_registry_verify_proof_of_ownership_response import AddressRegistryVerifyProofOfOwnershipResponse +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + address_registry_verify_proof_of_ownership_request = fireblocks.AddressRegistryVerifyProofOfOwnershipRequest() # AddressRegistryVerifyProofOfOwnershipRequest | + idempotency_key = 'idempotency_key_example' # str | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. (optional) + + try: + # Verify a Proof of Ownership export + api_response = fireblocks.compliance.verify_address_registry_proof_of_ownership(address_registry_verify_proof_of_ownership_request, idempotency_key=idempotency_key).result() + print("The response of ComplianceApi->verify_address_registry_proof_of_ownership:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ComplianceApi->verify_address_registry_proof_of_ownership: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **address_registry_verify_proof_of_ownership_request** | [**AddressRegistryVerifyProofOfOwnershipRequest**](AddressRegistryVerifyProofOfOwnershipRequest.md)| | + **idempotency_key** | **str**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] + +### Return type + +[**AddressRegistryVerifyProofOfOwnershipResponse**](AddressRegistryVerifyProofOfOwnershipResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Verification result | * X-Request-ID -
| +**400** | Missing, empty, or whitespace-only `exportId`, `verificationHash`, or `address`, or `expiresAt` not empty and not a valid `YYYY-MM-DD` date. Error code 4100. | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/ConnectedAccountsBetaApi.md b/docs/ConnectedAccountsApi.md similarity index 82% rename from docs/ConnectedAccountsBetaApi.md rename to docs/ConnectedAccountsApi.md index 68765bc1..a515f1ce 100644 --- a/docs/ConnectedAccountsBetaApi.md +++ b/docs/ConnectedAccountsApi.md @@ -1,22 +1,22 @@ -# fireblocks.ConnectedAccountsBetaApi +# fireblocks.ConnectedAccountsApi All URIs are relative to *https://api.fireblocks.io/v1* Method | HTTP request | Description ------------- | ------------- | ------------- -[**add_connected_account**](ConnectedAccountsBetaApi.md#add_connected_account) | **POST** /connected_accounts | Add a connected account -[**disconnect_connected_account**](ConnectedAccountsBetaApi.md#disconnect_connected_account) | **DELETE** /connected_accounts/{accountId} | Disconnect connected account -[**get_connected_account**](ConnectedAccountsBetaApi.md#get_connected_account) | **GET** /connected_accounts/{accountId} | Get connected account -[**get_connected_account_allowlist**](ConnectedAccountsBetaApi.md#get_connected_account_allowlist) | **GET** /connected_accounts/{accountId}/allowlist | Get allowlist for connected account -[**get_connected_account_allowlist_entry**](ConnectedAccountsBetaApi.md#get_connected_account_allowlist_entry) | **GET** /connected_accounts/{accountId}/allowlist/{allowlistId} | Get a single allowlist entry for a connected account -[**get_connected_account_balances**](ConnectedAccountsBetaApi.md#get_connected_account_balances) | **GET** /connected_accounts/{accountId}/balances | Get balances for an account -[**get_connected_account_rates**](ConnectedAccountsBetaApi.md#get_connected_account_rates) | **GET** /connected_accounts/{accountId}/rates | Get exchange rates for an account -[**get_connected_account_trading_pairs**](ConnectedAccountsBetaApi.md#get_connected_account_trading_pairs) | **GET** /connected_accounts/{accountId}/manifest/capabilities/trading/pairs | Get supported trading pairs for an account -[**get_connected_accounts**](ConnectedAccountsBetaApi.md#get_connected_accounts) | **GET** /connected_accounts | Get connected accounts -[**get_connected_accounts_credentials_public_key**](ConnectedAccountsBetaApi.md#get_connected_accounts_credentials_public_key) | **GET** /connected_accounts/credentials/public_key | Get public key to encrypt connected account credentials -[**rename_connected_account**](ConnectedAccountsBetaApi.md#rename_connected_account) | **POST** /connected_accounts/{accountId}/rename | Rename Connected Account -[**sync_connected_account_allowlist**](ConnectedAccountsBetaApi.md#sync_connected_account_allowlist) | **POST** /connected_accounts/{accountId}/allowlist/sync | Sync allowlist for connected account -[**update_connected_account_credentials**](ConnectedAccountsBetaApi.md#update_connected_account_credentials) | **POST** /connected_accounts/{accountId}/credentials | Update connected account credentials +[**add_connected_account**](ConnectedAccountsApi.md#add_connected_account) | **POST** /connected_accounts | Add a connected account +[**disconnect_connected_account**](ConnectedAccountsApi.md#disconnect_connected_account) | **DELETE** /connected_accounts/{accountId} | Disconnect connected account +[**get_connected_account**](ConnectedAccountsApi.md#get_connected_account) | **GET** /connected_accounts/{accountId} | Get connected account +[**get_connected_account_allowlist**](ConnectedAccountsApi.md#get_connected_account_allowlist) | **GET** /connected_accounts/{accountId}/allowlist | Get allowlist for connected account +[**get_connected_account_allowlist_entry**](ConnectedAccountsApi.md#get_connected_account_allowlist_entry) | **GET** /connected_accounts/{accountId}/allowlist/{allowlistId} | Get a single allowlist entry for a connected account +[**get_connected_account_balances**](ConnectedAccountsApi.md#get_connected_account_balances) | **GET** /connected_accounts/{accountId}/balances | Get balances for an account +[**get_connected_account_rates**](ConnectedAccountsApi.md#get_connected_account_rates) | **GET** /connected_accounts/{accountId}/rates | Get exchange rates for an account +[**get_connected_account_trading_pairs**](ConnectedAccountsApi.md#get_connected_account_trading_pairs) | **GET** /connected_accounts/{accountId}/manifest/capabilities/trading/pairs | Get supported trading pairs for an account +[**get_connected_accounts**](ConnectedAccountsApi.md#get_connected_accounts) | **GET** /connected_accounts | Get connected accounts +[**get_connected_accounts_credentials_public_key**](ConnectedAccountsApi.md#get_connected_accounts_credentials_public_key) | **GET** /connected_accounts/credentials/public_key | Get public key to encrypt connected account credentials +[**rename_connected_account**](ConnectedAccountsApi.md#rename_connected_account) | **POST** /connected_accounts/{accountId}/rename | Rename Connected Account +[**sync_connected_account_allowlist**](ConnectedAccountsApi.md#sync_connected_account_allowlist) | **POST** /connected_accounts/{accountId}/allowlist/sync | Sync allowlist for connected account +[**update_connected_account_credentials**](ConnectedAccountsApi.md#update_connected_account_credentials) | **POST** /connected_accounts/{accountId}/credentials | Update connected account credentials # **add_connected_account** @@ -33,8 +33,6 @@ The `providerType` is derived server-side from the `providerId` — callers do n Endpoint Permission: Editor, Admin, Non-Signing Admin. -**Note:** This endpoint is currently in beta and might be subject to changes. - ### Example @@ -67,11 +65,11 @@ with Fireblocks(configuration) as fireblocks: try: # Add a connected account - api_response = fireblocks.connected_accounts_beta.add_connected_account(add_connected_account_request, idempotency_key=idempotency_key).result() - print("The response of ConnectedAccountsBetaApi->add_connected_account:\n") + api_response = fireblocks.connected_accounts.add_connected_account(add_connected_account_request, idempotency_key=idempotency_key).result() + print("The response of ConnectedAccountsApi->add_connected_account:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->add_connected_account: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->add_connected_account: %s\n" % e) ``` @@ -118,9 +116,6 @@ Disconnect connected account Disconnect a connected account by ID. -**Note**: -- This endpoint is currently in beta and might be subject to changes. - ### Example @@ -149,9 +144,9 @@ with Fireblocks(configuration) as fireblocks: try: # Disconnect connected account - fireblocks.connected_accounts_beta.disconnect_connected_account(account_id).result() + fireblocks.connected_accounts.disconnect_connected_account(account_id).result() except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->disconnect_connected_account: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->disconnect_connected_account: %s\n" % e) ``` @@ -192,8 +187,6 @@ Get connected account Retrieve detailed information about a specific connected account by ID. -**Note:** This endpoint is currently in beta and might be subject to changes. - ### Example @@ -224,11 +217,11 @@ with Fireblocks(configuration) as fireblocks: try: # Get connected account - api_response = fireblocks.connected_accounts_beta.get_connected_account(account_id).result() - print("The response of ConnectedAccountsBetaApi->get_connected_account:\n") + api_response = fireblocks.connected_accounts.get_connected_account(account_id).result() + print("The response of ConnectedAccountsApi->get_connected_account:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->get_connected_account: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->get_connected_account: %s\n" % e) ``` @@ -269,7 +262,7 @@ Get allowlist for connected account Retrieves the address allowlist for a specified connected account. -**Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. +**Note:** Currently supports CoinbaseExchange/Binance accounts only. ### Example @@ -309,11 +302,11 @@ with Fireblocks(configuration) as fireblocks: try: # Get allowlist for connected account - api_response = fireblocks.connected_accounts_beta.get_connected_account_allowlist(account_id, status=status, asset_id=asset_id, network_id=network_id, address=address, page_cursor=page_cursor, page_size=page_size, order=order).result() - print("The response of ConnectedAccountsBetaApi->get_connected_account_allowlist:\n") + api_response = fireblocks.connected_accounts.get_connected_account_allowlist(account_id, status=status, asset_id=asset_id, network_id=network_id, address=address, page_cursor=page_cursor, page_size=page_size, order=order).result() + print("The response of ConnectedAccountsApi->get_connected_account_allowlist:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->get_connected_account_allowlist: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->get_connected_account_allowlist: %s\n" % e) ``` @@ -362,7 +355,7 @@ Get a single allowlist entry for a connected account Retrieves a single allowlist entry by its Fireblocks identifier for a specified connected account. -**Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. +**Note:** Currently supports CoinbaseExchange/Binance accounts only. ### Example @@ -395,11 +388,11 @@ with Fireblocks(configuration) as fireblocks: try: # Get a single allowlist entry for a connected account - api_response = fireblocks.connected_accounts_beta.get_connected_account_allowlist_entry(account_id, allowlist_id).result() - print("The response of ConnectedAccountsBetaApi->get_connected_account_allowlist_entry:\n") + api_response = fireblocks.connected_accounts.get_connected_account_allowlist_entry(account_id, allowlist_id).result() + print("The response of ConnectedAccountsApi->get_connected_account_allowlist_entry:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->get_connected_account_allowlist_entry: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->get_connected_account_allowlist_entry: %s\n" % e) ``` @@ -442,8 +435,6 @@ Get balances for an account Retrieve current asset balances for a specific connected account as a flat list (one row per `assetId`, `balanceType`). -**Note:** This endpoint is currently in beta and might be subject to changes. - ### Example @@ -476,11 +467,11 @@ with Fireblocks(configuration) as fireblocks: try: # Get balances for an account - api_response = fireblocks.connected_accounts_beta.get_connected_account_balances(account_id, page_size=page_size, page_cursor=page_cursor).result() - print("The response of ConnectedAccountsBetaApi->get_connected_account_balances:\n") + api_response = fireblocks.connected_accounts.get_connected_account_balances(account_id, page_size=page_size, page_cursor=page_cursor).result() + print("The response of ConnectedAccountsApi->get_connected_account_balances:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->get_connected_account_balances: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->get_connected_account_balances: %s\n" % e) ``` @@ -523,8 +514,6 @@ Get exchange rates for an account Retrieve current exchange rates for converting between specific assets in a connected account. -**Note:** This endpoint is currently in beta and might be subject to changes. - ### Example @@ -557,11 +546,11 @@ with Fireblocks(configuration) as fireblocks: try: # Get exchange rates for an account - api_response = fireblocks.connected_accounts_beta.get_connected_account_rates(account_id, base_asset_id, quote_asset_id).result() - print("The response of ConnectedAccountsBetaApi->get_connected_account_rates:\n") + api_response = fireblocks.connected_accounts.get_connected_account_rates(account_id, base_asset_id, quote_asset_id).result() + print("The response of ConnectedAccountsApi->get_connected_account_rates:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->get_connected_account_rates: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->get_connected_account_rates: %s\n" % e) ``` @@ -604,8 +593,6 @@ Get supported trading pairs for an account Retrieve all asset trading pairs supported by a specific connected account, including the pair type (`quote`, `market`, `onOffRamp`). -**Note:** This endpoint is currently in beta and might be subject to changes. - ### Example @@ -638,11 +625,11 @@ with Fireblocks(configuration) as fireblocks: try: # Get supported trading pairs for an account - api_response = fireblocks.connected_accounts_beta.get_connected_account_trading_pairs(account_id, page_size=page_size, page_cursor=page_cursor).result() - print("The response of ConnectedAccountsBetaApi->get_connected_account_trading_pairs:\n") + api_response = fireblocks.connected_accounts.get_connected_account_trading_pairs(account_id, page_size=page_size, page_cursor=page_cursor).result() + print("The response of ConnectedAccountsApi->get_connected_account_trading_pairs:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->get_connected_account_trading_pairs: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->get_connected_account_trading_pairs: %s\n" % e) ``` @@ -685,8 +672,6 @@ Get connected accounts Returns all connected accounts. -**Note:** This endpoint is currently in beta and might be subject to changes. - ### Example @@ -719,11 +704,11 @@ with Fireblocks(configuration) as fireblocks: try: # Get connected accounts - api_response = fireblocks.connected_accounts_beta.get_connected_accounts(main_accounts=main_accounts, page_size=page_size, page_cursor=page_cursor).result() - print("The response of ConnectedAccountsBetaApi->get_connected_accounts:\n") + api_response = fireblocks.connected_accounts.get_connected_accounts(main_accounts=main_accounts, page_size=page_size, page_cursor=page_cursor).result() + print("The response of ConnectedAccountsApi->get_connected_accounts:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->get_connected_accounts: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->get_connected_accounts: %s\n" % e) ``` @@ -768,8 +753,6 @@ Returns the RSA public key used to encrypt the `creds` field before calling `POS The key is a singleton resource scoped to the connected-accounts credentials domain — there is one per tenant context. -**Note:** This endpoint is currently in beta and might be subject to changes. - ### Example @@ -799,11 +782,11 @@ with Fireblocks(configuration) as fireblocks: try: # Get public key to encrypt connected account credentials - api_response = fireblocks.connected_accounts_beta.get_connected_accounts_credentials_public_key().result() - print("The response of ConnectedAccountsBetaApi->get_connected_accounts_credentials_public_key:\n") + api_response = fireblocks.connected_accounts.get_connected_accounts_credentials_public_key().result() + print("The response of ConnectedAccountsApi->get_connected_accounts_credentials_public_key:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->get_connected_accounts_credentials_public_key: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->get_connected_accounts_credentials_public_key: %s\n" % e) ``` @@ -841,8 +824,6 @@ Rename Connected Account Rename a connected account by account ID. -**Note:** This endpoint is currently in beta and might be subject to changes. - ### Example @@ -876,11 +857,11 @@ with Fireblocks(configuration) as fireblocks: try: # Rename Connected Account - api_response = fireblocks.connected_accounts_beta.rename_connected_account(account_id, rename_connected_account_request, idempotency_key=idempotency_key).result() - print("The response of ConnectedAccountsBetaApi->rename_connected_account:\n") + api_response = fireblocks.connected_accounts.rename_connected_account(account_id, rename_connected_account_request, idempotency_key=idempotency_key).result() + print("The response of ConnectedAccountsApi->rename_connected_account:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->rename_connected_account: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->rename_connected_account: %s\n" % e) ``` @@ -930,7 +911,7 @@ Triggers an on-demand sync from the exchange, bypassing the cache and fetching l **Rate limit:** 1 request per minute per connected account. -**Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. +**Note:** Currently supports CoinbaseExchange/Binance accounts only. ### Example @@ -961,9 +942,9 @@ with Fireblocks(configuration) as fireblocks: try: # Sync allowlist for connected account - fireblocks.connected_accounts_beta.sync_connected_account_allowlist(account_id, idempotency_key=idempotency_key).result() + fireblocks.connected_accounts.sync_connected_account_allowlist(account_id, idempotency_key=idempotency_key).result() except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->sync_connected_account_allowlist: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->sync_connected_account_allowlist: %s\n" % e) ``` @@ -1018,8 +999,6 @@ affected accounts are disconnected in the meantime. Endpoint Permission: Admin, Non-Signing Admin. -**Note:** This endpoint is currently in beta and might be subject to changes. - ### Example @@ -1053,11 +1032,11 @@ with Fireblocks(configuration) as fireblocks: try: # Update connected account credentials - api_response = fireblocks.connected_accounts_beta.update_connected_account_credentials(account_id, update_connected_account_credentials_request, idempotency_key=idempotency_key).result() - print("The response of ConnectedAccountsBetaApi->update_connected_account_credentials:\n") + api_response = fireblocks.connected_accounts.update_connected_account_credentials(account_id, update_connected_account_credentials_request, idempotency_key=idempotency_key).result() + print("The response of ConnectedAccountsApi->update_connected_account_credentials:\n") pprint(api_response) except Exception as e: - print("Exception when calling ConnectedAccountsBetaApi->update_connected_account_credentials: %s\n" % e) + print("Exception when calling ConnectedAccountsApi->update_connected_account_credentials: %s\n" % e) ``` diff --git a/docs/ConsoleUserApi.md b/docs/ConsoleUserApi.md index 0f93e911..c85ea146 100644 --- a/docs/ConsoleUserApi.md +++ b/docs/ConsoleUserApi.md @@ -5,6 +5,7 @@ All URIs are relative to *https://api.fireblocks.io/v1* Method | HTTP request | Description ------------- | ------------- | ------------- [**create_console_user**](ConsoleUserApi.md#create_console_user) | **POST** /management/users | Create console user +[**delete_console_user**](ConsoleUserApi.md#delete_console_user) | **DELETE** /management/users/{id} | Request deletion of a console user [**get_console_users**](ConsoleUserApi.md#get_console_users) | **GET** /management/users | Get console users @@ -88,6 +89,92 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **delete_console_user** +> ConsoleUser delete_console_user(id, force=force) + +Request deletion of a console user + +Requests deletion of a console user. The request is asynchronous: it goes through the workspace's configured "Delete users" approval policy (Settings > Quorums), exactly as deleting a user from the console does, and the user is removed only once that approval completes. +- Track progress by polling GET /management/users; deletion is complete when the user is disabled. +- Please note that this endpoint is available only for API keys with Admin/Non Signing Admin permissions. +Endpoint Permission: Admin, Non-Signing Admin. +**Note:** This endpoint is currently in beta and might be subject to changes. + +### Example + + +```python +from fireblocks.models.console_user import ConsoleUser +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + id = 'id_example' # str | The ID of the console user to delete + force = False # bool | Acknowledges the impact of removing this user and proceeds anyway. Overrides both USER_REFERENCED_IN_TAP and QUORUM_INTEGRITY, the same way the acknowledgement checkbox does in the console. (optional) (default to False) + + try: + # Request deletion of a console user + api_response = fireblocks.console_user.delete_console_user(id, force=force).result() + print("The response of ConsoleUserApi->delete_console_user:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ConsoleUserApi->delete_console_user: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| The ID of the console user to delete | + **force** | **bool**| Acknowledges the impact of removing this user and proceeds anyway. Overrides both USER_REFERENCED_IN_TAP and QUORUM_INTEGRITY, the same way the acknowledgement checkbox does in the console. | [optional] [default to False] + +### Return type + +[**ConsoleUser**](ConsoleUser.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**202** | Deletion request accepted. Returns the console user that will be removed once the workspace's configured approval completes. | * X-Request-ID -
| +**401** | Unauthorized. Missing / invalid JWT token in Authorization header. | * X-Request-ID -
| +**403** | Lacking permissions, or the target cannot be deleted: the user is the workspace Owner, or the caller is the target. | * X-Request-ID -
| +**404** | Console user not found. Also returned for users in other workspaces and for API users, so the endpoint does not reveal whether an ID exists. | * X-Request-ID -
| +**409** | PENDING_REQUEST_EXISTS - a deletion request for this user is already awaiting approval; USER_REFERENCED_IN_TAP - the user is referenced by the workspace transaction authorization policy (can be overridden with force=true); or USER_PENDING_ONBOARDING - the user has not completed onboarding, so there is nothing to delete yet. Revoke the invitation from the console instead. | * X-Request-ID -
| +**422** | QUORUM_INTEGRITY - the user is required to complete the workspace's admin approval quorum. Can be overridden with force=true, matching the console's acknowledgement checkbox. | * X-Request-ID -
| +**5XX** | Internal error. | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **get_console_users** > GetConsoleUsersResponse get_console_users() diff --git a/docs/CreateWebhookMtlsConfigRequest.md b/docs/CreateWebhookMtlsConfigRequest.md new file mode 100644 index 00000000..74ed8721 --- /dev/null +++ b/docs/CreateWebhookMtlsConfigRequest.md @@ -0,0 +1,30 @@ +# CreateWebhookMtlsConfigRequest + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | A label for this mTLS configuration, to tell several certificates apart. Letters, digits and spaces only. | [optional] +**signed_cert** | **str** | Signed client certificate PEM, issued for the CSR from `GET /v1/webhooks_settings/mtls_csr`. The private key it belongs to is derived from the certificate itself. | + +## Example + +```python +from fireblocks.models.create_webhook_mtls_config_request import CreateWebhookMtlsConfigRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateWebhookMtlsConfigRequest from a JSON string +create_webhook_mtls_config_request_instance = CreateWebhookMtlsConfigRequest.from_json(json) +# print the JSON string representation of the object +print(CreateWebhookMtlsConfigRequest.to_json()) + +# convert the object into a dict +create_webhook_mtls_config_request_dict = create_webhook_mtls_config_request_instance.to_dict() +# create an instance of CreateWebhookMtlsConfigRequest from a dict +create_webhook_mtls_config_request_from_dict = CreateWebhookMtlsConfigRequest.from_dict(create_webhook_mtls_config_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CreateWebhookOauthRequest.md b/docs/CreateWebhookOauthRequest.md index e853f33e..d4e48e11 100644 --- a/docs/CreateWebhookOauthRequest.md +++ b/docs/CreateWebhookOauthRequest.md @@ -14,7 +14,7 @@ Name | Type | Description | Notes **custom_jwt_claims** | **Dict[str, object]** | Extra claims for the JWT assertion. Used only when `authMethod` is `client_secret_jwt`. The usual one to set is `aud`, which defaults to the token endpoint URL; some authorization servers expect their own identifier instead. A value may be any JSON type except `null` — `null` is reserved for deleting a claim on update. `iss`, `sub`, `jti`, `iat` and `exp` are set by Fireblocks and cannot be overridden. Names are case-sensitive. The whole object must be under 16 KB. Values are write-only; responses return only the claim names. On update this merges claim by claim rather than replacing — see `WebhookOauthCustomJwtClaimsUpdate`. | [optional] **custom_body_params** | **Dict[str, str]** | Extra parameters for the token request body — `scope` most commonly, sometimes `audience` or `resource`. Applies to every authentication method. Values must be strings, because the token request body is form-encoded rather than JSON. An empty string is allowed. `grant_type`, `client_id`, `client_secret`, `client_assertion` and `client_assertion_type` are set by Fireblocks and cannot be overridden. Names are case-sensitive. The whole object must be under 16 KB. Values are write-only; responses return only the parameter names. On update this merges key by key rather than replacing — see `WebhookOauthCustomBodyParamsUpdate`. | [optional] **custom_headers** | **Dict[str, str]** | Extra HTTP headers for **the token request to your authorization server** — not for the webhook delivery, which has its own separate `customHeaders`. A gateway API key is the usual case. Values must be strings; an empty string is allowed. Names are matched case-insensitively, so two names differing only in case are a duplicate. Names are stored and returned lowercased, so `X-Api-Key` comes back as `x-api-key`. `Content-Type`, `Content-Length` and `Host` are set by Fireblocks and cannot be overridden. `Authorization` can be set with `client_secret_post` or `client_secret_jwt`, which send the credentials in the body — useful when your token endpoint sits behind a gateway. It is rejected with `client_secret_basic`, which sends the credentials in that header. Values have no length limit of their own; the whole object must be under 16 KB when serialized as UTF-8. Values are write-only; responses return only the header names. On update this merges name by name rather than replacing — see `WebhookOauthCustomHeadersUpdate`. | [optional] -**mtls_client_signed_cert** | **str** | PEM-encoded client certificate for mTLS when fetching tokens. Must be a valid X.509 certificate inside its validity window. | [optional] +**webhook_mtls_id** | **str** | The id of the mTLS configuration presented to the token endpoint, from `/v1/webhooks_settings/mtls`. It can be the same configuration a webhook uses, so one certificate, signed from `GET /v1/webhooks_settings/mtls_csr`, serves both the token endpoint and the receiver. Omit, or send `null`, for a token request without mTLS. Requires the mTLS feature to be enabled for the workspace (`403` otherwise), a configuration of this workspace (`404` otherwise), and one linked to a private key (`400` otherwise). | [optional] ## Example diff --git a/docs/CreateWebhookRequest.md b/docs/CreateWebhookRequest.md index cc0daa1d..adf10c01 100644 --- a/docs/CreateWebhookRequest.md +++ b/docs/CreateWebhookRequest.md @@ -9,7 +9,7 @@ Name | Type | Description | Notes **description** | **str** | description of the webhook. should not contain special characters. | [optional] **events** | [**List[WebhookEvent]**](WebhookEvent.md) | event types the webhook will subscribe to | **enabled** | **bool** | The status of the webhook. If false, the webhook will not receive notifications. | [optional] [default to True] -**mtls** | [**WebhookMtls**](WebhookMtls.md) | | [optional] +**webhook_mtls_id** | **str** | The id of the mTLS configuration this webhook presents when delivering, from `/v1/webhooks_settings/mtls`. Several webhooks may share one configuration, so replacing its certificate covers all of them at once. Send `null` to stop using mTLS for this webhook. | [optional] **webhook_oauth_id** | **str** | The id of the OAuth credentials this webhook authenticates with, from `/v1/webhooks_settings/oauth`. Several webhooks may share one credential set, so rotating its client secret covers all of them at once. Send `null` to stop using OAuth for this webhook. Cannot be combined with an `authorization` custom header on the same webhook; a request that would leave both set is rejected. | [optional] **custom_headers** | **Dict[str, object]** | Custom HTTP headers attached to every notification delivered by this webhook. A value is a string, sent as one header line, or an array of strings, sent as one header line per element under the same name. `Cookie` and `Authorization` accept only a string. An empty array is rejected — leave the name out instead. At most 10 headers, counted by name — an array value counts once, however many lines it sends. Names must be valid HTTP header tokens, are case-insensitive, and are at most 128 characters. A value may be empty and has no length limit of its own; the whole object must be under 16 KB when serialized as UTF-8. A value that large may still be refused by your own endpoint, since web servers commonly cap the whole request header block at around 8 KB. Reserved names: `Host`, `Content-Type`, `Content-Length`, `Transfer-Encoding`, `Connection`, `User-Agent`, `Accept`, `Accept-Encoding`, `Fireblocks-Signature`, `Fireblocks-Webhook-Signature`. `Authorization` may be set, but not together with `webhookOauthId`; a request that would leave both set is rejected. Values are write-only; responses return only the header names. | [optional] diff --git a/docs/DeleteWebhookMtlsConfigResponse.md b/docs/DeleteWebhookMtlsConfigResponse.md new file mode 100644 index 00000000..dff2a985 --- /dev/null +++ b/docs/DeleteWebhookMtlsConfigResponse.md @@ -0,0 +1,37 @@ +# DeleteWebhookMtlsConfigResponse + +The deleted mTLS configuration, plus the ids of any webhooks and OAuth credentials the delete detached from it. They are only detached by `forceDelete=true`; without it a delete is refused with `409` while anything still references the configuration. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | The unique identifier of the mTLS configuration, to be set as `webhookMtlsId` on a webhook or on OAuth credentials. | +**name** | **str** | The label given to this mTLS configuration. | [optional] +**signed_cert** | **str** | The signed client certificate PEM. | +**expires_at** | **int** | When the certificate itself expires, in milliseconds since the epoch. | +**created_at** | **int** | When the certificate was uploaded, in milliseconds since the epoch. | +**updated_at** | **int** | When this configuration was last changed, in milliseconds since the epoch. Differs from createdAt once the certificate has been replaced or the configuration renamed. | +**detached_webhook_ids** | **List[str]** | Webhooks whose `webhookMtlsId` was cleared. The webhooks themselves are not deleted and keep delivering, just without a client certificate. Empty unless `forceDelete=true` detached something. | +**detached_webhook_oauth_ids** | **List[str]** | OAuth credentials whose `webhookMtlsId` was cleared. Their token requests continue without a client certificate. Empty unless `forceDelete=true` detached something. | + +## Example + +```python +from fireblocks.models.delete_webhook_mtls_config_response import DeleteWebhookMtlsConfigResponse + +# TODO update the JSON string below +json = "{}" +# create an instance of DeleteWebhookMtlsConfigResponse from a JSON string +delete_webhook_mtls_config_response_instance = DeleteWebhookMtlsConfigResponse.from_json(json) +# print the JSON string representation of the object +print(DeleteWebhookMtlsConfigResponse.to_json()) + +# convert the object into a dict +delete_webhook_mtls_config_response_dict = delete_webhook_mtls_config_response_instance.to_dict() +# create an instance of DeleteWebhookMtlsConfigResponse from a dict +delete_webhook_mtls_config_response_from_dict = DeleteWebhookMtlsConfigResponse.from_dict(delete_webhook_mtls_config_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/DeleteWebhookOauthResponse.md b/docs/DeleteWebhookOauthResponse.md index 094e6daa..10b4d182 100644 --- a/docs/DeleteWebhookOauthResponse.md +++ b/docs/DeleteWebhookOauthResponse.md @@ -14,7 +14,7 @@ Name | Type | Description | Notes **custom_jwt_claims** | **List[str]** | Names of the additional claims placed in the JWT assertion. Claim values are write-only and are never returned. Absent when no custom claims are configured. | [optional] **custom_body_params** | **List[str]** | Names of the additional parameters added to the token request body. Parameter values are write-only and are never returned. Absent when no custom parameters are configured. | [optional] **custom_headers** | **List[str]** | Names of the additional HTTP headers added to **the token request sent to the authorization server** — not to the webhook delivery, which has its own separate `customHeaders`. Header values are write-only and are never returned. Absent when no custom headers are configured. | [optional] -**mtls_client_signed_cert** | **str** | PEM-encoded client certificate used for mTLS when fetching OAuth tokens. | [optional] +**webhook_mtls_id** | **str** | The id of the mTLS configuration presented to the token endpoint. Absent when the token request does not use mTLS. Read the certificate from `/v1/webhooks_settings/mtls/{id}`. | [optional] **created_at** | **int** | The date and time the OAuth credentials were created, in milliseconds. | **updated_at** | **int** | The date and time the OAuth credentials were last updated, in milliseconds. | **detached_webhook_ids** | **List[str]** | Webhooks whose `webhookOauthId` was cleared. The webhooks themselves are not deleted and keep delivering, just without an `Authorization` header. Empty unless `forceDelete=true` detached something. | diff --git a/docs/EffectiveUtxoSelectionConfig.md b/docs/EffectiveUtxoSelectionConfig.md new file mode 100644 index 00000000..775bc68d --- /dev/null +++ b/docs/EffectiveUtxoSelectionConfig.md @@ -0,0 +1,30 @@ +# EffectiveUtxoSelectionConfig + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**strategy** | [**UtxoSelectionStrategyEnum**](UtxoSelectionStrategyEnum.md) | | +**source** | [**UtxoSelectionConfigSourceEnum**](UtxoSelectionConfigSourceEnum.md) | | + +## Example + +```python +from fireblocks.models.effective_utxo_selection_config import EffectiveUtxoSelectionConfig + +# TODO update the JSON string below +json = "{}" +# create an instance of EffectiveUtxoSelectionConfig from a JSON string +effective_utxo_selection_config_instance = EffectiveUtxoSelectionConfig.from_json(json) +# print the JSON string representation of the object +print(EffectiveUtxoSelectionConfig.to_json()) + +# convert the object into a dict +effective_utxo_selection_config_dict = effective_utxo_selection_config_instance.to_dict() +# create an instance of EffectiveUtxoSelectionConfig from a dict +effective_utxo_selection_config_from_dict = EffectiveUtxoSelectionConfig.from_dict(effective_utxo_selection_config_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ExecutionRequestDetails.md b/docs/ExecutionRequestDetails.md index 9b17a3ed..c1397e0b 100644 --- a/docs/ExecutionRequestDetails.md +++ b/docs/ExecutionRequestDetails.md @@ -6,7 +6,7 @@ Order execution details Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**type** | [**QuoteExecutionTypeEnum**](QuoteExecutionTypeEnum.md) | | +**type** | [**LimitTypeEnum**](LimitTypeEnum.md) | | **side** | [**Side**](Side.md) | | **base_amount** | **str** | Amount in baseAssetId. BUY = base amount to receive; SELL = base amount to sell. | **base_asset_id** | **str** | The asset you receive on BUY / give on SELL. | @@ -15,6 +15,8 @@ Name | Type | Description | Notes **quote_asset_rail** | [**TransferRail**](TransferRail.md) | | [optional] **quote_id** | **str** | Quote ID for quote orders | **re_quote** | [**ReQuoteDetailsReQuote**](ReQuoteDetailsReQuote.md) | | [optional] +**price** | **str** | Limit price for the order | +**time_in_force** | [**TimeInForce**](TimeInForce.md) | | ## Example diff --git a/docs/ExecutionRequestDetailsType.md b/docs/ExecutionRequestDetailsType.md index 24bb3e08..54a9b8ff 100644 --- a/docs/ExecutionRequestDetailsType.md +++ b/docs/ExecutionRequestDetailsType.md @@ -8,6 +8,8 @@ Execution type supported by the provider * `MARKET` (value: `'MARKET'`) +* `LIMIT` (value: `'LIMIT'`) + [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/ExecutionResponseDetails.md b/docs/ExecutionResponseDetails.md index 432cf20b..ddc3dd73 100644 --- a/docs/ExecutionResponseDetails.md +++ b/docs/ExecutionResponseDetails.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**type** | [**QuoteExecutionTypeEnum**](QuoteExecutionTypeEnum.md) | | +**type** | [**LimitTypeEnum**](LimitTypeEnum.md) | | **side** | [**Side**](Side.md) | | **base_amount** | **str** | Amount to convert | **base_asset_id** | **str** | Source asset identifier | @@ -15,6 +15,8 @@ Name | Type | Description | Notes **quote_id** | **str** | Quote ID for quote orders | **quote_amount** | **str** | Quote amount for quote orders | **re_quote** | [**ReQuoteDetailsReQuote**](ReQuoteDetailsReQuote.md) | | [optional] +**price** | **str** | Limit price for the order | +**time_in_force** | [**TimeInForce**](TimeInForce.md) | | ## Example diff --git a/docs/FailureReason.md b/docs/FailureReason.md index 2585ee36..116429b0 100644 --- a/docs/FailureReason.md +++ b/docs/FailureReason.md @@ -61,6 +61,16 @@ * `MISSING_WORKSPACE_DETAILS` (value: `'MISSING_WORKSPACE_DETAILS'`) +* `CREDIT_LIMIT_EXCEEDED` (value: `'CREDIT_LIMIT_EXCEEDED'`) + +* `QUOTE_EXPIRED` (value: `'QUOTE_EXPIRED'`) + +* `DESK_REJECTED` (value: `'DESK_REJECTED'`) + +* `REQUOTE_WORSE_PRICE` (value: `'REQUOTE_WORSE_PRICE'`) + +* `FOK_KILLED` (value: `'FOK_KILLED'`) + [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/FokTimeInForce.md b/docs/FokTimeInForce.md new file mode 100644 index 00000000..b251d18f --- /dev/null +++ b/docs/FokTimeInForce.md @@ -0,0 +1,30 @@ +# FokTimeInForce + +Fill-or-kill - the order must be filled in full at the limit price immediately, or not at all. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | Discriminator for the fill-or-kill time-in-force type. | + +## Example + +```python +from fireblocks.models.fok_time_in_force import FokTimeInForce + +# TODO update the JSON string below +json = "{}" +# create an instance of FokTimeInForce from a JSON string +fok_time_in_force_instance = FokTimeInForce.from_json(json) +# print the JSON string representation of the object +print(FokTimeInForce.to_json()) + +# convert the object into a dict +fok_time_in_force_dict = fok_time_in_force_instance.to_dict() +# create an instance of FokTimeInForce from a dict +fok_time_in_force_from_dict = FokTimeInForce.from_dict(fok_time_in_force_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LimitExecutionRequestDetails.md b/docs/LimitExecutionRequestDetails.md new file mode 100644 index 00000000..0d1e9595 --- /dev/null +++ b/docs/LimitExecutionRequestDetails.md @@ -0,0 +1,37 @@ +# LimitExecutionRequestDetails + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | [**LimitTypeEnum**](LimitTypeEnum.md) | | +**price** | **str** | Limit price for the order | +**time_in_force** | [**TimeInForce**](TimeInForce.md) | | +**side** | [**Side**](Side.md) | | +**base_amount** | **str** | Amount in baseAssetId. BUY = base amount to receive; SELL = base amount to sell. | +**base_asset_id** | **str** | The asset you receive on BUY / give on SELL. | +**base_asset_rail** | [**TransferRail**](TransferRail.md) | | [optional] +**quote_asset_id** | **str** | Counter asset used to pay/receive | +**quote_asset_rail** | [**TransferRail**](TransferRail.md) | | [optional] + +## Example + +```python +from fireblocks.models.limit_execution_request_details import LimitExecutionRequestDetails + +# TODO update the JSON string below +json = "{}" +# create an instance of LimitExecutionRequestDetails from a JSON string +limit_execution_request_details_instance = LimitExecutionRequestDetails.from_json(json) +# print the JSON string representation of the object +print(LimitExecutionRequestDetails.to_json()) + +# convert the object into a dict +limit_execution_request_details_dict = limit_execution_request_details_instance.to_dict() +# create an instance of LimitExecutionRequestDetails from a dict +limit_execution_request_details_from_dict = LimitExecutionRequestDetails.from_dict(limit_execution_request_details_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LimitExecutionResponseDetails.md b/docs/LimitExecutionResponseDetails.md new file mode 100644 index 00000000..30c61ffe --- /dev/null +++ b/docs/LimitExecutionResponseDetails.md @@ -0,0 +1,37 @@ +# LimitExecutionResponseDetails + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | [**LimitTypeEnum**](LimitTypeEnum.md) | | +**price** | **str** | Limit price for the order | +**time_in_force** | [**TimeInForce**](TimeInForce.md) | | +**side** | [**Side**](Side.md) | | +**base_amount** | **str** | Amount to convert | +**base_asset_id** | **str** | Source asset identifier | +**base_asset_rail** | [**TransferRail**](TransferRail.md) | | [optional] +**quote_asset_id** | **str** | Target asset identifier | +**quote_asset_rail** | [**TransferRail**](TransferRail.md) | | [optional] + +## Example + +```python +from fireblocks.models.limit_execution_response_details import LimitExecutionResponseDetails + +# TODO update the JSON string below +json = "{}" +# create an instance of LimitExecutionResponseDetails from a JSON string +limit_execution_response_details_instance = LimitExecutionResponseDetails.from_json(json) +# print the JSON string representation of the object +print(LimitExecutionResponseDetails.to_json()) + +# convert the object into a dict +limit_execution_response_details_dict = limit_execution_response_details_instance.to_dict() +# create an instance of LimitExecutionResponseDetails from a dict +limit_execution_response_details_from_dict = LimitExecutionResponseDetails.from_dict(limit_execution_response_details_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LimitTypeDetails.md b/docs/LimitTypeDetails.md new file mode 100644 index 00000000..172d9ded --- /dev/null +++ b/docs/LimitTypeDetails.md @@ -0,0 +1,31 @@ +# LimitTypeDetails + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | [**LimitTypeEnum**](LimitTypeEnum.md) | | +**price** | **str** | Limit price for the order | +**time_in_force** | [**TimeInForce**](TimeInForce.md) | | + +## Example + +```python +from fireblocks.models.limit_type_details import LimitTypeDetails + +# TODO update the JSON string below +json = "{}" +# create an instance of LimitTypeDetails from a JSON string +limit_type_details_instance = LimitTypeDetails.from_json(json) +# print the JSON string representation of the object +print(LimitTypeDetails.to_json()) + +# convert the object into a dict +limit_type_details_dict = limit_type_details_instance.to_dict() +# create an instance of LimitTypeDetails from a dict +limit_type_details_from_dict = LimitTypeDetails.from_dict(limit_type_details_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LimitTypeEnum.md b/docs/LimitTypeEnum.md new file mode 100644 index 00000000..e300879d --- /dev/null +++ b/docs/LimitTypeEnum.md @@ -0,0 +1,11 @@ +# LimitTypeEnum + +Order type for limit orders + +## Enum + +* `LIMIT` (value: `'LIMIT'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Offer.md b/docs/Offer.md index 1a25c0b0..d20e0a71 100644 --- a/docs/Offer.md +++ b/docs/Offer.md @@ -21,7 +21,7 @@ Name | Type | Description | Notes **execution_steps** | [**List[QuoteExecutionStep]**](QuoteExecutionStep.md) | Ordered list of execution steps for the quote. | [optional] **general_fees** | [**List[Fee]**](Fee.md) | General fees associated with the quote. | [optional] **side** | [**Side**](Side.md) | | -**expires_at** | **str** | The expiration time of the quote in ISO 8601 format. | +**expires_at** | **str** | The expiration time of the quote in ISO 8601 format, taken verbatim from the provider. This is not safety-margined by the server — integrators must apply their own margin if one is needed. | **required_participants_identification_on_order** | **str** | A JSON Schema Draft-7 document in string format describing the fields required when creating an order so clients can validate their order payload before sending. | [optional] **type** | **str** | The type of the quote. | diff --git a/docs/OnboardingResponse.md b/docs/OnboardingResponse.md index 92e7763e..8d90fa3a 100644 --- a/docs/OnboardingResponse.md +++ b/docs/OnboardingResponse.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. | +**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | **reason** | **str** | Why the offer is being rejected. Recorded on-chain, where the counterparty can read it. | ## Example diff --git a/docs/OnboardingResponseDtccAccept.md b/docs/OnboardingResponseDtccAccept.md index 511b8821..03dcd7fd 100644 --- a/docs/OnboardingResponseDtccAccept.md +++ b/docs/OnboardingResponseDtccAccept.md @@ -6,7 +6,7 @@ Accept a DTCC end-investor onboarding offer. Carries no arguments. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. | +**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | ## Example diff --git a/docs/OnboardingResponseDtccReject.md b/docs/OnboardingResponseDtccReject.md index c1a6afdd..a6f9b343 100644 --- a/docs/OnboardingResponseDtccReject.md +++ b/docs/OnboardingResponseDtccReject.md @@ -6,7 +6,7 @@ Reject a DTCC end-investor onboarding offer. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. | +**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | **reason** | **str** | Why the offer is being rejected. Recorded on-chain, where the counterparty can read it. | ## Example diff --git a/docs/OnboardingResponseTradewebAccept.md b/docs/OnboardingResponseTradewebAccept.md index 11024d8c..8d03f636 100644 --- a/docs/OnboardingResponseTradewebAccept.md +++ b/docs/OnboardingResponseTradewebAccept.md @@ -6,7 +6,7 @@ Accept a Tradeweb co-signing delegation offer. Carries no arguments. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. | +**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | ## Example diff --git a/docs/OnboardingResponseTradewebReject.md b/docs/OnboardingResponseTradewebReject.md index a2917dc4..434f954a 100644 --- a/docs/OnboardingResponseTradewebReject.md +++ b/docs/OnboardingResponseTradewebReject.md @@ -6,7 +6,7 @@ Reject a Tradeweb co-signing delegation offer. Carries no arguments — the DAR Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`. | +**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | ## Example diff --git a/docs/ParticipantOnboardingPayload.md b/docs/ParticipantOnboardingPayload.md index 16055988..5ff76993 100644 --- a/docs/ParticipantOnboardingPayload.md +++ b/docs/ParticipantOnboardingPayload.md @@ -9,10 +9,10 @@ Name | Type | Description | Notes **asset** | **str** | Chain asset — CANTON or CANTON_TEST. | **expires_at** | **datetime** | When the onboarding request expires if it has not been answered. RFC 3339. | [optional] **operator** | **str** | DTCC infra operator party id. | -**provider** | **str** | DTCC provider party id. | **compliance** | **str** | DTCC compliance party id. | **registrar** | **str** | DTCC registrar party id — co-signs the accept. | **client_onboarder** | **str** | DTCC client onboarder party id — co-signs the accept. | +**upgrader** | **str** | DTCC upgrader party id — the Model Upgrade Tool authority. Supplied by DTCC during the off-chain registration, alongside the other party ids. | ## Example diff --git a/docs/PostTradeSettlement.md b/docs/PostTradeSettlement.md new file mode 100644 index 00000000..407e50fe --- /dev/null +++ b/docs/PostTradeSettlement.md @@ -0,0 +1,30 @@ +# PostTradeSettlement + +Nothing moves on-platform; settlement happens bilaterally, provider-side, after execution. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | [**PostTradeSettlementType**](PostTradeSettlementType.md) | | + +## Example + +```python +from fireblocks.models.post_trade_settlement import PostTradeSettlement + +# TODO update the JSON string below +json = "{}" +# create an instance of PostTradeSettlement from a JSON string +post_trade_settlement_instance = PostTradeSettlement.from_json(json) +# print the JSON string representation of the object +print(PostTradeSettlement.to_json()) + +# convert the object into a dict +post_trade_settlement_dict = post_trade_settlement_instance.to_dict() +# create an instance of PostTradeSettlement from a dict +post_trade_settlement_from_dict = PostTradeSettlement.from_dict(post_trade_settlement_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/PostTradeSettlementType.md b/docs/PostTradeSettlementType.md new file mode 100644 index 00000000..0d94e8eb --- /dev/null +++ b/docs/PostTradeSettlementType.md @@ -0,0 +1,10 @@ +# PostTradeSettlementType + + +## Enum + +* `POST_TRADE` (value: `'POST_TRADE'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Quote.md b/docs/Quote.md index 334f9682..316a3105 100644 --- a/docs/Quote.md +++ b/docs/Quote.md @@ -20,7 +20,7 @@ Name | Type | Description | Notes **execution_steps** | [**List[QuoteExecutionStep]**](QuoteExecutionStep.md) | Ordered list of execution steps for the quote. | [optional] **general_fees** | [**List[Fee]**](Fee.md) | General fees associated with the quote. | [optional] **side** | [**Side**](Side.md) | | -**expires_at** | **str** | The expiration time of the quote in ISO 8601 format. | +**expires_at** | **str** | The expiration time of the quote in ISO 8601 format, taken verbatim from the provider. This is not safety-margined by the server — integrators must apply their own margin if one is needed. | **required_participants_identification_on_order** | **str** | A JSON Schema Draft-7 document in string format describing the fields required when creating an order so clients can validate their order payload before sending. | [optional] **type** | **str** | The type of the quote. | diff --git a/docs/QuoteOffer.md b/docs/QuoteOffer.md index 66140326..c8563497 100644 --- a/docs/QuoteOffer.md +++ b/docs/QuoteOffer.md @@ -19,7 +19,7 @@ Name | Type | Description | Notes **execution_steps** | [**List[QuoteExecutionStep]**](QuoteExecutionStep.md) | Ordered list of execution steps for the quote. | [optional] **general_fees** | [**List[Fee]**](Fee.md) | General fees associated with the quote. | [optional] **side** | [**Side**](Side.md) | | -**expires_at** | **str** | The expiration time of the quote in ISO 8601 format. | +**expires_at** | **str** | The expiration time of the quote in ISO 8601 format, taken verbatim from the provider. This is not safety-margined by the server — integrators must apply their own margin if one is needed. | **required_participants_identification_on_order** | **str** | A JSON Schema Draft-7 document in string format describing the fields required when creating an order so clients can validate their order payload before sending. | [optional] **type** | **str** | The type of the quote. | **offer_type** | **str** | The type of offer — QUOTE for executable committed quotes. | diff --git a/docs/RatesRequest.md b/docs/RatesRequest.md index a09bd50c..0f4c95ea 100644 --- a/docs/RatesRequest.md +++ b/docs/RatesRequest.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **scope** | [**List[ScopeItem]**](ScopeItem.md) | One or more providers/accounts to request rates from. At least one scope item is required. | **base_asset_id** | **str** | The source asset identifier. | **quote_asset_id** | **str** | The target asset identifier. | +**base_amount** | **str** | The amount to convert from | [optional] ## Example diff --git a/docs/Settlement.md b/docs/Settlement.md index 9e7aed99..bea5eff6 100644 --- a/docs/Settlement.md +++ b/docs/Settlement.md @@ -6,7 +6,7 @@ Settlement configuration for the order Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**type** | [**DVPSettlementType**](DVPSettlementType.md) | | +**type** | [**PostTradeSettlementType**](PostTradeSettlementType.md) | | **destination_account** | [**AccountReference**](AccountReference.md) | | **source_account** | [**SettlementSourceAccount**](SettlementSourceAccount.md) | | diff --git a/docs/SettlementTypeEnum.md b/docs/SettlementTypeEnum.md index 4820431e..a02575ed 100644 --- a/docs/SettlementTypeEnum.md +++ b/docs/SettlementTypeEnum.md @@ -8,6 +8,8 @@ Settlement type supported by the provider * `PREFUNDED` (value: `'PREFUNDED'`) +* `POST_TRADE` (value: `'POST_TRADE'`) + [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/TimeInForce.md b/docs/TimeInForce.md new file mode 100644 index 00000000..59c4944d --- /dev/null +++ b/docs/TimeInForce.md @@ -0,0 +1,30 @@ +# TimeInForce + +Time in force for limit orders + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | Discriminator for the fill-or-kill time-in-force type. | + +## Example + +```python +from fireblocks.models.time_in_force import TimeInForce + +# TODO update the JSON string below +json = "{}" +# create an instance of TimeInForce from a JSON string +time_in_force_instance = TimeInForce.from_json(json) +# print the JSON string representation of the object +print(TimeInForce.to_json()) + +# convert the object into a dict +time_in_force_dict = time_in_force_instance.to_dict() +# create an instance of TimeInForce from a dict +time_in_force_from_dict = TimeInForce.from_dict(time_in_force_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/TransactionOperation.md b/docs/TransactionOperation.md index 907b7a61..b2f2cd88 100644 --- a/docs/TransactionOperation.md +++ b/docs/TransactionOperation.md @@ -1,6 +1,6 @@ # TransactionOperation -* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address. * `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains. * `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains. * `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions. * `PROGRAM_CALL` - Execute multiple instructions on Solana blockchain. The @solana/web3.js library is recommended for building program call transactions. * `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing). * `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing) * `APPROVE` - Enables the approve function for a smart contract or wallet to withdraw from a designated wallet. [Learn more](https://support.fireblocks.io/hc/en-us/articles/4404616097426-Amount-Cap-for-Approve-transactions). * `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account. +* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address. * `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains. * `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains. * `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions. * `PROGRAM_CALL` - Execute multiple instructions on Solana blockchain. The @solana/web3.js library is recommended for building program call transactions. * `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing). * `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing) * `APPROVE` - Enables the approve function for a smart contract or wallet to withdraw from a designated wallet. [Learn more](https://support.fireblocks.io/hc/en-us/articles/4404616097426-Amount-Cap-for-Approve-transactions). * `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account. * `CANTON_CALL` - A customer-initiated Canton operation, such as withdrawing an allocation or responding to an onboarding offer. Note that not every Canton transaction carries this operation — an incoming Canton transfer offer is a `TRANSFER` — so use the top-level `cantonDetails` rather than `operation` to identify a Canton transaction. ## Enum @@ -22,6 +22,8 @@ * `ENABLE_ASSET` (value: `'ENABLE_ASSET'`) +* `CANTON_CALL` (value: `'CANTON_CALL'`) + [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/TransactionResponse.md b/docs/TransactionResponse.md index 38614f71..d6151829 100644 --- a/docs/TransactionResponse.md +++ b/docs/TransactionResponse.md @@ -29,6 +29,7 @@ Name | Type | Description | Notes **fee_info** | [**FeeInfo**](FeeInfo.md) | | [optional] **fee_currency** | **str** | The asset which was withdrawn to pay the transaction fee, for example ETH for EVM-based blockchains, BTC for Tether Omni. | [optional] **requested_fee_currency** | **str** | The fee-paying asset requested at transaction creation via the `feeCurrency` field, if any. | [optional] +**canton_details** | [**CantonDetails**](CantonDetails.md) | | [optional] **network_records** | [**List[NetworkRecord]**](NetworkRecord.md) | In case a single transaction resulted with multiple transfers, for example a result of a contract call, then this parameter specifies each transfer that took place on the blockchain. In case of a single transfer transaction, this parameter is empty. | [optional] **created_at** | **float** | The transaction’s creation date and time, in unix timestamp. | [optional] **last_updated** | **float** | The transaction’s last update date and time, in unix timestamp. | [optional] diff --git a/docs/TravelRuleIssuers.md b/docs/TravelRuleIssuers.md index 6430a06a..e84e0ca0 100644 --- a/docs/TravelRuleIssuers.md +++ b/docs/TravelRuleIssuers.md @@ -7,9 +7,9 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **year_founded** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | **is_regulated** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | -**regulatory_authorities** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | +**regulatory_authorities** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | [optional] **name** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | -**logo** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | +**logo** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | [optional] **website** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | **legal_name** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | **legal_structure** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | @@ -18,7 +18,7 @@ Name | Type | Description | Notes **address_line1** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | **city** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | **country** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | -**description** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | +**description** | [**TravelRuleIssuer**](TravelRuleIssuer.md) | | [optional] ## Example diff --git a/docs/UTXOManagementBetaApi.md b/docs/UTXOManagementBetaApi.md index a9e2f557..8da171b4 100644 --- a/docs/UTXOManagementBetaApi.md +++ b/docs/UTXOManagementBetaApi.md @@ -4,10 +4,86 @@ All URIs are relative to *https://api.fireblocks.io/v1* Method | HTTP request | Description ------------- | ------------- | ------------- +[**get_utxo_selection_config**](UTXOManagementBetaApi.md#get_utxo_selection_config) | **GET** /utxo_management/selection_config | Get UTXO selection config [**get_utxos**](UTXOManagementBetaApi.md#get_utxos) | **GET** /utxo_management/{vaultAccountId}/{assetId}/unspent_outputs | List unspent outputs (UTXOs) +[**get_vault_asset_utxo_selection_config**](UTXOManagementBetaApi.md#get_vault_asset_utxo_selection_config) | **GET** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Get vault and asset UTXO selection config [**update_utxo_labels**](UTXOManagementBetaApi.md#update_utxo_labels) | **PATCH** /utxo_management/{vaultAccountId}/{assetId}/labels | Attach or detach labels to/from UTXOs +[**upsert_utxo_selection_config**](UTXOManagementBetaApi.md#upsert_utxo_selection_config) | **PUT** /utxo_management/selection_config | Upsert UTXO selection config +[**upsert_vault_asset_utxo_selection_config**](UTXOManagementBetaApi.md#upsert_vault_asset_utxo_selection_config) | **PUT** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Upsert vault and asset UTXO selection config +# **get_utxo_selection_config** +> UtxoSelectionConfigResponse get_utxo_selection_config() + +Get UTXO selection config + +Returns the workspace-level configured selection strategy and the effective strategy after runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this workspace, otherwise `ASC`. +**Note:** These endpoints are currently in beta and might be subject to changes. +Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + +### Example + + +```python +from fireblocks.models.utxo_selection_config_response import UtxoSelectionConfigResponse +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + + try: + # Get UTXO selection config + api_response = fireblocks.utxo_management_beta.get_utxo_selection_config().result() + print("The response of UTXOManagementBetaApi->get_utxo_selection_config:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling UTXOManagementBetaApi->get_utxo_selection_config: %s\n" % e) +``` + + + +### Parameters + +This endpoint does not need any parameter. + +### Return type + +[**UtxoSelectionConfigResponse**](UtxoSelectionConfigResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Current UTXO selection config | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **get_utxos** > ListUtxosResponse get_utxos(vault_account_id, asset_id, page_cursor=page_cursor, page_size=page_size, sort=sort, order=order, include_all_labels=include_all_labels, include_any_labels=include_any_labels, exclude_any_labels=exclude_any_labels, include_statuses=include_statuses, address=address, tx_hash=tx_hash, tx_id=tx_id, min_amount=min_amount, max_amount=max_amount) @@ -112,15 +188,113 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **get_vault_asset_utxo_selection_config** +> UtxoSelectionConfigResponse get_vault_asset_utxo_selection_config(vault_account_id, asset_id) + +Get vault and asset UTXO selection config + +Returns the config stored at this vault-and-asset scope, if any, and the effective strategy after workspace fallback and runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored at this scope and none is inherited from the workspace (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this scope, otherwise `ASC`. +**Note:** These endpoints are currently in beta and might be subject to changes. +Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + +### Example + + +```python +from fireblocks.models.utxo_selection_config_response import UtxoSelectionConfigResponse +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + vault_account_id = 'vault_account_id_example' # str | The ID of the vault account. + asset_id = 'asset_id_example' # str | The ID of the asset + + try: + # Get vault and asset UTXO selection config + api_response = fireblocks.utxo_management_beta.get_vault_asset_utxo_selection_config(vault_account_id, asset_id).result() + print("The response of UTXOManagementBetaApi->get_vault_asset_utxo_selection_config:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling UTXOManagementBetaApi->get_vault_asset_utxo_selection_config: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **vault_account_id** | **str**| The ID of the vault account. | + **asset_id** | **str**| The ID of the asset | + +### Return type + +[**UtxoSelectionConfigResponse**](UtxoSelectionConfigResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Current UTXO selection config | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **update_utxo_labels** > AttachDetachUtxoLabelsResponse update_utxo_labels(vault_account_id, asset_id, attach_detach_utxo_labels_request, idempotency_key=idempotency_key) Attach or detach labels to/from UTXOs -Attach or detach labels to/from UTXOs in a vault account. Labels can be used for organizing and filtering UTXOs. -Labels are applied additively — `labelsToAttach` adds to the existing label set and `labelsToDetach` removes from it. Neither operation replaces the full set. -**Note:** These endpoints are currently in beta and might be subject to changes. -Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. +Attach or detach labels to/from UTXOs in a vault account. Labels can be +used for organizing and filtering UTXOs. + +Labels are applied additively — `labelsToAttach` adds to the existing +label set and `labelsToDetach` removes from it. Neither operation +replaces the full set. + +The request is all-or-nothing: if any identifier cannot be labelled, no +UTXO is labelled and the request fails with `400`. The response lists +every failed identifier in `failures`, each with its own `reason` — use +it, not the status, to decide what to do: +- `NOT_FOUND` — not found in this vault and asset. +- `NOT_LABELLABLE` — spent, or removed, and can no longer be labelled. + +A UTXO removed within the last hour is reported as `NOT_FOUND` with +`utxoStatus: REMOVED`; if it does not reappear, it becomes +`NOT_LABELLABLE` after about an hour. A `400` without `failures` means +the request itself is malformed. + +**Note:** These endpoints are currently in beta and might be subject to +changes. + +Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, +Editor. ### Example @@ -192,6 +366,169 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | UTXOs with updated labels | * X-Request-ID -
| +**400** | Some identifiers could not be labelled (listed in `failures`), or the request is malformed. No UTXO was labelled. | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **upsert_utxo_selection_config** +> UtxoSelectionConfigResponse upsert_utxo_selection_config(upsert_utxo_selection_config_request, idempotency_key=idempotency_key) + +Upsert UTXO selection config + +Creates or updates the workspace-level UTXO selection strategy. `ADAPTIVE` is recommended. +**Note:** These endpoints are currently in beta and might be subject to changes. +Endpoint Permission: Admin, Non-Signing Admin. + +### Example + + +```python +from fireblocks.models.upsert_utxo_selection_config_request import UpsertUtxoSelectionConfigRequest +from fireblocks.models.utxo_selection_config_response import UtxoSelectionConfigResponse +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + upsert_utxo_selection_config_request = fireblocks.UpsertUtxoSelectionConfigRequest() # UpsertUtxoSelectionConfigRequest | + idempotency_key = 'idempotency_key_example' # str | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. (optional) + + try: + # Upsert UTXO selection config + api_response = fireblocks.utxo_management_beta.upsert_utxo_selection_config(upsert_utxo_selection_config_request, idempotency_key=idempotency_key).result() + print("The response of UTXOManagementBetaApi->upsert_utxo_selection_config:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling UTXOManagementBetaApi->upsert_utxo_selection_config: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **upsert_utxo_selection_config_request** | [**UpsertUtxoSelectionConfigRequest**](UpsertUtxoSelectionConfigRequest.md)| | + **idempotency_key** | **str**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] + +### Return type + +[**UtxoSelectionConfigResponse**](UtxoSelectionConfigResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Updated UTXO selection config | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **upsert_vault_asset_utxo_selection_config** +> UtxoSelectionConfigResponse upsert_vault_asset_utxo_selection_config(vault_account_id, asset_id, upsert_utxo_selection_config_request, idempotency_key=idempotency_key) + +Upsert vault and asset UTXO selection config + +Creates or updates the UTXO selection strategy for this vault account and asset. `ADAPTIVE` is recommended. +**Note:** These endpoints are currently in beta and might be subject to changes. +Endpoint Permission: Admin, Non-Signing Admin. + +### Example + + +```python +from fireblocks.models.upsert_utxo_selection_config_request import UpsertUtxoSelectionConfigRequest +from fireblocks.models.utxo_selection_config_response import UtxoSelectionConfigResponse +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + vault_account_id = 'vault_account_id_example' # str | The ID of the vault account. + asset_id = 'asset_id_example' # str | The ID of the asset + upsert_utxo_selection_config_request = fireblocks.UpsertUtxoSelectionConfigRequest() # UpsertUtxoSelectionConfigRequest | + idempotency_key = 'idempotency_key_example' # str | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. (optional) + + try: + # Upsert vault and asset UTXO selection config + api_response = fireblocks.utxo_management_beta.upsert_vault_asset_utxo_selection_config(vault_account_id, asset_id, upsert_utxo_selection_config_request, idempotency_key=idempotency_key).result() + print("The response of UTXOManagementBetaApi->upsert_vault_asset_utxo_selection_config:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling UTXOManagementBetaApi->upsert_vault_asset_utxo_selection_config: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **vault_account_id** | **str**| The ID of the vault account. | + **asset_id** | **str**| The ID of the asset | + **upsert_utxo_selection_config_request** | [**UpsertUtxoSelectionConfigRequest**](UpsertUtxoSelectionConfigRequest.md)| | + **idempotency_key** | **str**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] + +### Return type + +[**UtxoSelectionConfigResponse**](UtxoSelectionConfigResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Updated UTXO selection config | * X-Request-ID -
| **0** | Error Response | * X-Request-ID -
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/UpdateWebhookMtlsConfigRequest.md b/docs/UpdateWebhookMtlsConfigRequest.md new file mode 100644 index 00000000..58cab67d --- /dev/null +++ b/docs/UpdateWebhookMtlsConfigRequest.md @@ -0,0 +1,31 @@ +# UpdateWebhookMtlsConfigRequest + +At least one property must be provided. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | A new label for this mTLS configuration, or `null` to remove it. Letters, digits and spaces only. | [optional] +**signed_cert** | **str** | A replacement signed certificate PEM. Every webhook and OAuth credentials set using this configuration switches to it, and the private key it was issued for is re-derived from the certificate. | [optional] + +## Example + +```python +from fireblocks.models.update_webhook_mtls_config_request import UpdateWebhookMtlsConfigRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UpdateWebhookMtlsConfigRequest from a JSON string +update_webhook_mtls_config_request_instance = UpdateWebhookMtlsConfigRequest.from_json(json) +# print the JSON string representation of the object +print(UpdateWebhookMtlsConfigRequest.to_json()) + +# convert the object into a dict +update_webhook_mtls_config_request_dict = update_webhook_mtls_config_request_instance.to_dict() +# create an instance of UpdateWebhookMtlsConfigRequest from a dict +update_webhook_mtls_config_request_from_dict = UpdateWebhookMtlsConfigRequest.from_dict(update_webhook_mtls_config_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UpdateWebhookOauthRequest.md b/docs/UpdateWebhookOauthRequest.md index 22e0e2dd..a833faa2 100644 --- a/docs/UpdateWebhookOauthRequest.md +++ b/docs/UpdateWebhookOauthRequest.md @@ -1,6 +1,6 @@ # UpdateWebhookOauthRequest -A partial update. Every field is optional and an omitted field is left as it is, so `{ \"clientSecret\": \"new-secret\" }` rotates the secret and changes nothing else. A rotation applies to every webhook referencing these credentials. The three custom maps merge. A key with a value is upserted, a key with `null` is deleted, a key you leave out is untouched, and the whole field set to `null` clears the map. There is no ambiguity between the two uses of `null` — one names an entry, the other names the field. `mtlsClientSignedCert` is a scalar, so `null` there removes it. +A partial update. Every field is optional and an omitted field is left as it is, so `{ \"clientSecret\": \"new-secret\" }` rotates the secret and changes nothing else. A rotation applies to every webhook referencing these credentials. The three custom maps merge. A key with a value is upserted, a key with `null` is deleted, a key you leave out is untouched, and the whole field set to `null` clears the map. There is no ambiguity between the two uses of `null` — one names an entry, the other names the field. `webhookMtlsId` is a scalar, so `null` there removes it. ## Properties @@ -14,7 +14,7 @@ Name | Type | Description | Notes **custom_jwt_claims** | **Dict[str, object]** | A delta applied to the JWT assertion claims. A claim with a value is added or replaced, a claim with `null` is deleted, and a claim you leave out is untouched. So `{ \"aud\": \"https://auth.example.com\", \"resource\": null }` sets `aud`, drops `resource`, and changes nothing else. Send `customJwtClaims: null` to clear every claim in one call. That does not collide with a `null` value on a name: one names the claim to delete, the other names the whole field. Same rules as on create: any JSON type except `null`, `iss`/`sub`/`jti`/`iat`/`exp` reserved, names case-sensitive, resulting set under 16 KB, values write-only. | [optional] **custom_body_params** | **Dict[str, Optional[str]]** | A delta applied to the token request body parameters. A parameter with a value is added or replaced, a parameter with `null` is deleted, and one you leave out is untouched. So `{ \"scope\": \"payments.read\", \"audience\": null }` sets `scope`, drops `audience`, and changes nothing else. Send `customBodyParams: null` to clear every parameter in one call. That does not collide with a `null` value on a name: one names the parameter to delete, the other names the whole field. Same rules as on create: string values only, `grant_type`/`client_id`/`client_secret`/ `client_assertion`/`client_assertion_type` reserved, names case-sensitive, resulting set under 16 KB, values write-only. | [optional] **custom_headers** | **Dict[str, Optional[str]]** | A delta applied to the token request headers — not the webhook delivery headers. A header with a value is added or replaced, a header with `null` is deleted, and one you leave out is untouched. So `{ \"X-Api-Key\": \"new-key\", \"X-Tenant\": null }` rotates `X-Api-Key`, drops `X-Tenant`, and changes nothing else. Send `customHeaders: null` to clear every header in one call. That does not collide with a `null` value on a name: one names the header to delete, the other names the whole field. Names are case-insensitive, so a `null` under one casing deletes a header stored under another, and names are stored and returned lowercased. Same rules as on create: string values only, `Content-Type`, `Content-Length` and `Host` reserved, `Authorization` only with `client_secret_post` or `client_secret_jwt`, resulting set under 16 KB, values write-only. | [optional] -**mtls_client_signed_cert** | **str** | PEM-encoded client certificate for mTLS. Must be a valid X.509 certificate inside its validity window. Omit to leave it unchanged, or send `null` to remove it. | [optional] +**webhook_mtls_id** | **str** | The id of the mTLS configuration presented to the token endpoint, from `/v1/webhooks_settings/mtls`. Omit to leave it unchanged, or send `null` to stop using mTLS for the token request. Requires the mTLS feature to be enabled for the workspace (`403` otherwise), a configuration of this workspace (`404` otherwise), and one linked to a private key (`400` otherwise). | [optional] ## Example diff --git a/docs/UpdateWebhookRequest.md b/docs/UpdateWebhookRequest.md index dcd0e7ad..4d9ca948 100644 --- a/docs/UpdateWebhookRequest.md +++ b/docs/UpdateWebhookRequest.md @@ -9,7 +9,7 @@ Name | Type | Description | Notes **description** | **str** | description of the webhook of what it is used for.should not contain special characters. | [optional] **events** | [**List[WebhookEvent]**](WebhookEvent.md) | The events that the webhook will be subscribed to | [optional] **enabled** | **bool** | The status of the webhook | [optional] -**mtls** | [**WebhookMtls**](WebhookMtls.md) | | [optional] +**webhook_mtls_id** | **str** | The id of the mTLS configuration this webhook presents when delivering, from `/v1/webhooks_settings/mtls`. Several webhooks may share one configuration, so replacing its certificate covers all of them at once. Send `null` to stop using mTLS for this webhook. | [optional] **webhook_oauth_id** | **str** | The id of the OAuth credentials this webhook authenticates with, from `/v1/webhooks_settings/oauth`. Several webhooks may share one credential set, so rotating its client secret covers all of them at once. Send `null` to stop using OAuth for this webhook. Cannot be combined with an `authorization` custom header on the same webhook; a request that would leave both set is rejected. | [optional] **custom_headers** | **Dict[str, object]** | A delta applied to the delivery headers. A header with a value is added or replaced, a header with `null` is deleted, and one you leave out is untouched. A value replaces what is stored under that name rather than adding to it, so an array is the complete new set of lines for that header. Send `customHeaders: null` to clear every header in one call. That does not collide with a `null` value on a name: one names the header to delete, the other names the whole field. Names are case-insensitive, so a `null` under one casing deletes a header stored under another. Same rules as on create: string or non-empty array, `Cookie` and `Authorization` string-only, 10 headers and under 16 KB in the resulting set, the same reserved names, and values write-only. Entries set to `null` do not count towards the limit. `Authorization` cannot be combined with `webhookOauthId`, though one request may add it and detach the credentials together. | [optional] diff --git a/docs/UpsertUtxoSelectionConfigRequest.md b/docs/UpsertUtxoSelectionConfigRequest.md new file mode 100644 index 00000000..f16170db --- /dev/null +++ b/docs/UpsertUtxoSelectionConfigRequest.md @@ -0,0 +1,29 @@ +# UpsertUtxoSelectionConfigRequest + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**strategy** | [**UtxoSelectionStrategyEnum**](UtxoSelectionStrategyEnum.md) | | + +## Example + +```python +from fireblocks.models.upsert_utxo_selection_config_request import UpsertUtxoSelectionConfigRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UpsertUtxoSelectionConfigRequest from a JSON string +upsert_utxo_selection_config_request_instance = UpsertUtxoSelectionConfigRequest.from_json(json) +# print the JSON string representation of the object +print(UpsertUtxoSelectionConfigRequest.to_json()) + +# convert the object into a dict +upsert_utxo_selection_config_request_dict = upsert_utxo_selection_config_request_instance.to_dict() +# create an instance of UpsertUtxoSelectionConfigRequest from a dict +upsert_utxo_selection_config_request_from_dict = UpsertUtxoSelectionConfigRequest.from_dict(upsert_utxo_selection_config_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UtxoIdentifier.md b/docs/UtxoIdentifier.md index 0147d001..90449a82 100644 --- a/docs/UtxoIdentifier.md +++ b/docs/UtxoIdentifier.md @@ -7,7 +7,7 @@ Identifies a UTXO by either a Fireblocks transaction ID (targets all outputs of Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **tx_id** | **str** | Fireblocks transaction ID | [optional] -**tx_hash** | **str** | On-chain transaction hash | [optional] +**tx_hash** | **str** | On-chain transaction hash, in lowercase hex as the chain reports it. Matched case-sensitively, so an uppercase hash is never found. | [optional] **index** | **int** | Output index (vout) | [optional] ## Example diff --git a/docs/UtxoLabelFailure.md b/docs/UtxoLabelFailure.md new file mode 100644 index 00000000..d020d971 --- /dev/null +++ b/docs/UtxoLabelFailure.md @@ -0,0 +1,32 @@ +# UtxoLabelFailure + +A requested identifier that blocked the label request, with the reason it could not be labelled. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**identifier** | [**UtxoIdentifier**](UtxoIdentifier.md) | The identifier exactly as it was sent in the request. | +**reason** | **str** | Why the identifier could not be labelled: - `NOT_FOUND` — no UTXO for it in this vault and asset. Retrying can work once it is indexed. - `NOT_LABELLABLE` — the UTXO exists but can no longer be labelled (spent, or removed; for a transaction ID, every output). Retrying will not help. | +**utxo_status** | **str** | The UTXO status behind the reason, when one explains it. With `NOT_FOUND`, `REMOVED` means the UTXO was removed within the last hour and may still reappear; if it does not, the same request returns `NOT_LABELLABLE` after about an hour. | [optional] + +## Example + +```python +from fireblocks.models.utxo_label_failure import UtxoLabelFailure + +# TODO update the JSON string below +json = "{}" +# create an instance of UtxoLabelFailure from a JSON string +utxo_label_failure_instance = UtxoLabelFailure.from_json(json) +# print the JSON string representation of the object +print(UtxoLabelFailure.to_json()) + +# convert the object into a dict +utxo_label_failure_dict = utxo_label_failure_instance.to_dict() +# create an instance of UtxoLabelFailure from a dict +utxo_label_failure_from_dict = UtxoLabelFailure.from_dict(utxo_label_failure_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UtxoLabelsErrorResponse.md b/docs/UtxoLabelsErrorResponse.md new file mode 100644 index 00000000..84d73acc --- /dev/null +++ b/docs/UtxoLabelsErrorResponse.md @@ -0,0 +1,31 @@ +# UtxoLabelsErrorResponse + +Returned when a label request is rejected. The request is all-or-nothing, so no UTXO was labelled. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**message** | **str** | Summary of the rejection. When `failures` is present, it names the identifiers that blocked the request. | +**failures** | [**List[UtxoLabelFailure]**](UtxoLabelFailure.md) | Every identifier that blocked the request, each with its own reason. Identifiers not listed were valid; resend them without the failed ones. Absent when the request itself was invalid (e.g. a malformed label). | [optional] + +## Example + +```python +from fireblocks.models.utxo_labels_error_response import UtxoLabelsErrorResponse + +# TODO update the JSON string below +json = "{}" +# create an instance of UtxoLabelsErrorResponse from a JSON string +utxo_labels_error_response_instance = UtxoLabelsErrorResponse.from_json(json) +# print the JSON string representation of the object +print(UtxoLabelsErrorResponse.to_json()) + +# convert the object into a dict +utxo_labels_error_response_dict = utxo_labels_error_response_instance.to_dict() +# create an instance of UtxoLabelsErrorResponse from a dict +utxo_labels_error_response_from_dict = UtxoLabelsErrorResponse.from_dict(utxo_labels_error_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UtxoSelectionConfigEntry.md b/docs/UtxoSelectionConfigEntry.md new file mode 100644 index 00000000..ba1848fa --- /dev/null +++ b/docs/UtxoSelectionConfigEntry.md @@ -0,0 +1,31 @@ +# UtxoSelectionConfigEntry + +Config row stored at exactly the requested scope. Omitted from the parent object when none exists; the server does not emit JSON `null`. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**strategy** | [**UtxoSelectionStrategyEnum**](UtxoSelectionStrategyEnum.md) | | +**updated_at** | **datetime** | Time at which this configured row was last updated. | + +## Example + +```python +from fireblocks.models.utxo_selection_config_entry import UtxoSelectionConfigEntry + +# TODO update the JSON string below +json = "{}" +# create an instance of UtxoSelectionConfigEntry from a JSON string +utxo_selection_config_entry_instance = UtxoSelectionConfigEntry.from_json(json) +# print the JSON string representation of the object +print(UtxoSelectionConfigEntry.to_json()) + +# convert the object into a dict +utxo_selection_config_entry_dict = utxo_selection_config_entry_instance.to_dict() +# create an instance of UtxoSelectionConfigEntry from a dict +utxo_selection_config_entry_from_dict = UtxoSelectionConfigEntry.from_dict(utxo_selection_config_entry_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UtxoSelectionConfigResponse.md b/docs/UtxoSelectionConfigResponse.md new file mode 100644 index 00000000..9c26b9f3 --- /dev/null +++ b/docs/UtxoSelectionConfigResponse.md @@ -0,0 +1,31 @@ +# UtxoSelectionConfigResponse + +`effective` is always present. `configured` is omitted when no row is stored at the requested scope (the server does not emit `\"configured\": null`). PUT responses always include `configured`. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**configured** | [**UtxoSelectionConfigEntry**](UtxoSelectionConfigEntry.md) | | [optional] +**effective** | [**EffectiveUtxoSelectionConfig**](EffectiveUtxoSelectionConfig.md) | | + +## Example + +```python +from fireblocks.models.utxo_selection_config_response import UtxoSelectionConfigResponse + +# TODO update the JSON string below +json = "{}" +# create an instance of UtxoSelectionConfigResponse from a JSON string +utxo_selection_config_response_instance = UtxoSelectionConfigResponse.from_json(json) +# print the JSON string representation of the object +print(UtxoSelectionConfigResponse.to_json()) + +# convert the object into a dict +utxo_selection_config_response_dict = utxo_selection_config_response_instance.to_dict() +# create an instance of UtxoSelectionConfigResponse from a dict +utxo_selection_config_response_from_dict = UtxoSelectionConfigResponse.from_dict(utxo_selection_config_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UtxoSelectionConfigSourceEnum.md b/docs/UtxoSelectionConfigSourceEnum.md new file mode 100644 index 00000000..865d6724 --- /dev/null +++ b/docs/UtxoSelectionConfigSourceEnum.md @@ -0,0 +1,15 @@ +# UtxoSelectionConfigSourceEnum + +Where the effective strategy was resolved from. `DEFAULT` means no stored row applies at this scope or any scope it inherits from - `effective.strategy` reports whichever strategy currently applies. `WORKSPACE` and `VAULT_ASSET` are stored rows. + +## Enum + +* `DEFAULT` (value: `'DEFAULT'`) + +* `WORKSPACE` (value: `'WORKSPACE'`) + +* `VAULT_ASSET` (value: `'VAULT_ASSET'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UtxoSelectionStrategyEnum.md b/docs/UtxoSelectionStrategyEnum.md new file mode 100644 index 00000000..d2287483 --- /dev/null +++ b/docs/UtxoSelectionStrategyEnum.md @@ -0,0 +1,15 @@ +# UtxoSelectionStrategyEnum + +UTXO selection strategy. `ADAPTIVE` is recommended: the engine chooses inputs at selection time. `ASC` spends smallest UTXOs first. `DESC` spends largest first. + +## Enum + +* `ASC` (value: `'ASC'`) + +* `DESC` (value: `'DESC'`) + +* `ADAPTIVE` (value: `'ADAPTIVE'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Webhook.md b/docs/Webhook.md index f3b594b5..26dfa186 100644 --- a/docs/Webhook.md +++ b/docs/Webhook.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **status** | **str** | The status of the webhook | **created_at** | **int** | The date and time the webhook was created in milliseconds | **updated_at** | **int** | The date and time the webhook was last updated in milliseconds | -**mtls** | [**WebhookMtls**](WebhookMtls.md) | | [optional] +**webhook_mtls_id** | **str** | The id of the mTLS configuration this webhook presents when delivering, from `/v1/webhooks_settings/mtls`. Absent when the webhook does not use mTLS. | [optional] **webhook_oauth_id** | **str** | The id of the OAuth credentials this webhook authenticates with. Absent when the webhook does not use OAuth. Read the credentials themselves from `/v1/webhooks_settings/oauth/{webhookOauthId}`. | [optional] **custom_headers** | **List[str]** | Names of the custom headers configured for this webhook. Header values are never returned. | [optional] diff --git a/docs/WebhookMtls.md b/docs/WebhookMtls.md deleted file mode 100644 index f5024a04..00000000 --- a/docs/WebhookMtls.md +++ /dev/null @@ -1,30 +0,0 @@ -# WebhookMtls - -mTLS configuration for the webhook. On responses, present only when a signed client certificate is set. On requests, provide a signed client certificate to enable mTLS, or null to remove it. - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**client_signed_cert** | **str** | Signed client certificate PEM used for mTLS when delivering notifications. | - -## Example - -```python -from fireblocks.models.webhook_mtls import WebhookMtls - -# TODO update the JSON string below -json = "{}" -# create an instance of WebhookMtls from a JSON string -webhook_mtls_instance = WebhookMtls.from_json(json) -# print the JSON string representation of the object -print(WebhookMtls.to_json()) - -# convert the object into a dict -webhook_mtls_dict = webhook_mtls_instance.to_dict() -# create an instance of WebhookMtls from a dict -webhook_mtls_from_dict = WebhookMtls.from_dict(webhook_mtls_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/WebhookMtlsConfig.md b/docs/WebhookMtlsConfig.md new file mode 100644 index 00000000..9193cfa6 --- /dev/null +++ b/docs/WebhookMtlsConfig.md @@ -0,0 +1,35 @@ +# WebhookMtlsConfig + +A signed client certificate stored for the workspace, and the id a webhook or OAuth credentials set references to use it. Several of them may share one configuration, so replacing the certificate here switches all of them at once. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | The unique identifier of the mTLS configuration, to be set as `webhookMtlsId` on a webhook or on OAuth credentials. | +**name** | **str** | The label given to this mTLS configuration. | [optional] +**signed_cert** | **str** | The signed client certificate PEM. | +**expires_at** | **int** | When the certificate itself expires, in milliseconds since the epoch. | +**created_at** | **int** | When the certificate was uploaded, in milliseconds since the epoch. | +**updated_at** | **int** | When this configuration was last changed, in milliseconds since the epoch. Differs from createdAt once the certificate has been replaced or the configuration renamed. | + +## Example + +```python +from fireblocks.models.webhook_mtls_config import WebhookMtlsConfig + +# TODO update the JSON string below +json = "{}" +# create an instance of WebhookMtlsConfig from a JSON string +webhook_mtls_config_instance = WebhookMtlsConfig.from_json(json) +# print the JSON string representation of the object +print(WebhookMtlsConfig.to_json()) + +# convert the object into a dict +webhook_mtls_config_dict = webhook_mtls_config_instance.to_dict() +# create an instance of WebhookMtlsConfig from a dict +webhook_mtls_config_from_dict = WebhookMtlsConfig.from_dict(webhook_mtls_config_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/WebhookOauthCredentials.md b/docs/WebhookOauthCredentials.md index 199086c3..58e5aec2 100644 --- a/docs/WebhookOauthCredentials.md +++ b/docs/WebhookOauthCredentials.md @@ -14,7 +14,7 @@ Name | Type | Description | Notes **custom_jwt_claims** | **List[str]** | Names of the additional claims placed in the JWT assertion. Claim values are write-only and are never returned. Absent when no custom claims are configured. | [optional] **custom_body_params** | **List[str]** | Names of the additional parameters added to the token request body. Parameter values are write-only and are never returned. Absent when no custom parameters are configured. | [optional] **custom_headers** | **List[str]** | Names of the additional HTTP headers added to **the token request sent to the authorization server** — not to the webhook delivery, which has its own separate `customHeaders`. Header values are write-only and are never returned. Absent when no custom headers are configured. | [optional] -**mtls_client_signed_cert** | **str** | PEM-encoded client certificate used for mTLS when fetching OAuth tokens. | [optional] +**webhook_mtls_id** | **str** | The id of the mTLS configuration presented to the token endpoint. Absent when the token request does not use mTLS. Read the certificate from `/v1/webhooks_settings/mtls/{id}`. | [optional] **created_at** | **int** | The date and time the OAuth credentials were created, in milliseconds. | **updated_at** | **int** | The date and time the OAuth credentials were last updated, in milliseconds. | diff --git a/docs/WebhooksV2Api.md b/docs/WebhooksV2Api.md index c5883305..3a4510af 100644 --- a/docs/WebhooksV2Api.md +++ b/docs/WebhooksV2Api.md @@ -5,8 +5,10 @@ All URIs are relative to *https://api.fireblocks.io/v1* Method | HTTP request | Description ------------- | ------------- | ------------- [**create_webhook**](WebhooksV2Api.md#create_webhook) | **POST** /webhooks | Create a new webhook +[**create_webhook_mtls_config**](WebhooksV2Api.md#create_webhook_mtls_config) | **POST** /webhooks_settings/mtls | Create an mTLS configuration [**create_webhook_oauth**](WebhooksV2Api.md#create_webhook_oauth) | **POST** /webhooks_settings/oauth | Create OAuth credentials [**delete_webhook**](WebhooksV2Api.md#delete_webhook) | **DELETE** /webhooks/{webhookId} | Delete webhook +[**delete_webhook_mtls_config**](WebhooksV2Api.md#delete_webhook_mtls_config) | **DELETE** /webhooks_settings/mtls/{webhookMtlsId} | Delete an mTLS configuration [**delete_webhook_oauth**](WebhooksV2Api.md#delete_webhook_oauth) | **DELETE** /webhooks_settings/oauth/{webhookOauthId} | Delete OAuth credentials [**get_metrics**](WebhooksV2Api.md#get_metrics) | **GET** /webhooks/{webhookId}/metrics/{metricName} | Get webhook metrics [**get_mtls_csr**](WebhooksV2Api.md#get_mtls_csr) | **GET** /webhooks_settings/mtls_csr | Get mTLS CSR @@ -16,6 +18,8 @@ Method | HTTP request | Description [**get_resend_by_query_job_status**](WebhooksV2Api.md#get_resend_by_query_job_status) | **GET** /webhooks/{webhookId}/notifications/resend_by_query/jobs/{jobId} | Get resend by query job status [**get_resend_job_status**](WebhooksV2Api.md#get_resend_job_status) | **GET** /webhooks/{webhookId}/notifications/resend_failed/jobs/{jobId} | Get resend job status [**get_webhook**](WebhooksV2Api.md#get_webhook) | **GET** /webhooks/{webhookId} | Get webhook by id +[**get_webhook_mtls_config**](WebhooksV2Api.md#get_webhook_mtls_config) | **GET** /webhooks_settings/mtls/{webhookMtlsId} | Get an mTLS configuration by id +[**get_webhook_mtls_configs**](WebhooksV2Api.md#get_webhook_mtls_configs) | **GET** /webhooks_settings/mtls | List the uploaded mTLS configurations [**get_webhook_oauth**](WebhooksV2Api.md#get_webhook_oauth) | **GET** /webhooks_settings/oauth/{webhookOauthId} | Get OAuth credentials by id [**get_webhook_oauths**](WebhooksV2Api.md#get_webhook_oauths) | **GET** /webhooks_settings/oauth | Get all OAuth credentials [**get_webhooks**](WebhooksV2Api.md#get_webhooks) | **GET** /webhooks | Get all webhooks @@ -24,6 +28,7 @@ Method | HTTP request | Description [**resend_notifications_by_query**](WebhooksV2Api.md#resend_notifications_by_query) | **POST** /webhooks/{webhookId}/notifications/resend_by_query | Resend notifications by query [**resend_notifications_by_resource_id**](WebhooksV2Api.md#resend_notifications_by_resource_id) | **POST** /webhooks/{webhookId}/notifications/resend_by_resource | Resend notifications by resource Id [**update_webhook**](WebhooksV2Api.md#update_webhook) | **PATCH** /webhooks/{webhookId} | Update webhook +[**update_webhook_mtls_config**](WebhooksV2Api.md#update_webhook_mtls_config) | **PATCH** /webhooks_settings/mtls/{webhookMtlsId} | Update an mTLS configuration [**update_webhook_oauth**](WebhooksV2Api.md#update_webhook_oauth) | **PATCH** /webhooks_settings/oauth/{webhookOauthId} | Update OAuth credentials @@ -107,6 +112,90 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **create_webhook_mtls_config** +> WebhookMtlsConfig create_webhook_mtls_config(create_webhook_mtls_config_request, idempotency_key=idempotency_key) + +Create an mTLS configuration + +Stores a certificate signed against the CSR from `GET /v1/webhooks_settings/mtls_csr` and returns its id, which is then set as `webhookMtlsId` on a webhook or on OAuth credentials. The private key the certificate was issued for is derived from the certificate, so it is never named by the caller. + +Re-uploading a certificate already stored returns the existing id rather than creating a second configuration, so several webhooks and OAuth credentials can share one certificate. + +A certificate that was not issued for a private key this workspace holds is rejected with a `400`. + +**Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + + +### Example + + +```python +from fireblocks.models.create_webhook_mtls_config_request import CreateWebhookMtlsConfigRequest +from fireblocks.models.webhook_mtls_config import WebhookMtlsConfig +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + create_webhook_mtls_config_request = fireblocks.CreateWebhookMtlsConfigRequest() # CreateWebhookMtlsConfigRequest | + idempotency_key = 'idempotency_key_example' # str | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. (optional) + + try: + # Create an mTLS configuration + api_response = fireblocks.webhooks_v2.create_webhook_mtls_config(create_webhook_mtls_config_request, idempotency_key=idempotency_key).result() + print("The response of WebhooksV2Api->create_webhook_mtls_config:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WebhooksV2Api->create_webhook_mtls_config: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **create_webhook_mtls_config_request** | [**CreateWebhookMtlsConfigRequest**](CreateWebhookMtlsConfigRequest.md)| | + **idempotency_key** | **str**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] + +### Return type + +[**WebhookMtlsConfig**](WebhookMtlsConfig.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | The stored mTLS configuration | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **create_webhook_oauth** > WebhookOauthCredentials create_webhook_oauth(create_webhook_oauth_request, idempotency_key=idempotency_key) @@ -264,6 +353,90 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **delete_webhook_mtls_config** +> DeleteWebhookMtlsConfigResponse delete_webhook_mtls_config(webhook_mtls_id, force_delete=force_delete) + +Delete an mTLS configuration + +Deletes an mTLS configuration. By default the delete is refused while the configuration is still in use: if any webhook or OAuth credentials reference it, nothing is deleted and the request fails with `409 Conflict`, naming the reason and listing the ids of what references it. This protects a shared configuration from being removed out from under the webhooks and token requests that depend on it. + +Pass `forceDelete=true` to delete anyway. That detaches everything referencing it — it clears `webhookMtlsId` on each webhook and OAuth credentials, it does **not** delete them — then deletes the configuration and returns the deleted resource together with `detachedWebhookIds` and `detachedWebhookOauthIds`. Detached webhooks keep delivering notifications, and detached OAuth credentials keep requesting tokens, but without a client certificate, so an endpoint that requires mTLS will reject them from that point on. + +When nothing references the configuration the delete succeeds either way, and both lists come back empty. + +**Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + + +### Example + + +```python +from fireblocks.models.delete_webhook_mtls_config_response import DeleteWebhookMtlsConfigResponse +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + webhook_mtls_id = '44fcead0-7053-4831-a53a-df7fb90d440f' # str | The unique identifier of the mTLS configuration + force_delete = False # bool | Delete the configuration even while webhooks or OAuth credentials still reference it, detaching them instead of refusing; their ids are returned in `detachedWebhookIds` and `detachedWebhookOauthIds`. Leave it unset, or `false`, to get a `409 Conflict` whenever anything still references the configuration. (optional) (default to False) + + try: + # Delete an mTLS configuration + api_response = fireblocks.webhooks_v2.delete_webhook_mtls_config(webhook_mtls_id, force_delete=force_delete).result() + print("The response of WebhooksV2Api->delete_webhook_mtls_config:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WebhooksV2Api->delete_webhook_mtls_config: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **webhook_mtls_id** | **str**| The unique identifier of the mTLS configuration | + **force_delete** | **bool**| Delete the configuration even while webhooks or OAuth credentials still reference it, detaching them instead of refusing; their ids are returned in `detachedWebhookIds` and `detachedWebhookOauthIds`. Leave it unset, or `false`, to get a `409 Conflict` whenever anything still references the configuration. | [optional] [default to False] + +### Return type + +[**DeleteWebhookMtlsConfigResponse**](DeleteWebhookMtlsConfigResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The deleted mTLS configuration, plus the ids of any webhooks and OAuth credentials that were detached from it | * X-Request-ID -
| +**409** | Webhooks or OAuth credentials still reference this configuration and `forceDelete` was not set. Nothing was deleted. The error message names the reason and the ids of what references it — detach those webhooks and OAuth credentials, or retry with `forceDelete=true`. | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **delete_webhook_oauth** > DeleteWebhookOauthResponse delete_webhook_oauth(webhook_oauth_id, force_delete=force_delete) @@ -988,6 +1161,158 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **get_webhook_mtls_config** +> WebhookMtlsConfig get_webhook_mtls_config(webhook_mtls_id) + +Get an mTLS configuration by id + +Retrieve one stored mTLS configuration by its id. + + +### Example + + +```python +from fireblocks.models.webhook_mtls_config import WebhookMtlsConfig +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + webhook_mtls_id = '44fcead0-7053-4831-a53a-df7fb90d440f' # str | The unique identifier of the mTLS configuration + + try: + # Get an mTLS configuration by id + api_response = fireblocks.webhooks_v2.get_webhook_mtls_config(webhook_mtls_id).result() + print("The response of WebhooksV2Api->get_webhook_mtls_config:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WebhooksV2Api->get_webhook_mtls_config: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **webhook_mtls_id** | **str**| The unique identifier of the mTLS configuration | + +### Return type + +[**WebhookMtlsConfig**](WebhookMtlsConfig.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | An mTLS configuration | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_webhook_mtls_configs** +> List[WebhookMtlsConfig] get_webhook_mtls_configs(ids=ids) + +List the uploaded mTLS configurations + +Lists the workspace's mTLS configurations, newest first. Pass `ids` to ask about +particular ones instead — useful for resolving the `webhookMtlsId` values on a set of +webhooks in one call. + + +### Example + + +```python +from fireblocks.models.webhook_mtls_config import WebhookMtlsConfig +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + ids = ['[\"6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f\"]'] # List[str] | Return only the configurations with these ids, instead of all of them. Repeat the parameter for each id. An id belonging to another workspace, or to nothing, is left out of the response rather than failing the request. (optional) + + try: + # List the uploaded mTLS configurations + api_response = fireblocks.webhooks_v2.get_webhook_mtls_configs(ids=ids).result() + print("The response of WebhooksV2Api->get_webhook_mtls_configs:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WebhooksV2Api->get_webhook_mtls_configs: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **ids** | [**List[str]**](str.md)| Return only the configurations with these ids, instead of all of them. Repeat the parameter for each id. An id belonging to another workspace, or to nothing, is left out of the response rather than failing the request. | [optional] + +### Return type + +[**List[WebhookMtlsConfig]**](WebhookMtlsConfig.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The workspace's mTLS configurations | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **get_webhook_oauth** > WebhookOauthCredentials get_webhook_oauth(webhook_oauth_id) @@ -1614,6 +1939,91 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **update_webhook_mtls_config** +> WebhookMtlsConfig update_webhook_mtls_config(webhook_mtls_id, update_webhook_mtls_config_request) + +Update an mTLS configuration + +Renames a configuration, replaces its certificate, or both. Only the fields present in the request are changed; anything omitted is left as it is, and a request with neither field is rejected with a `400`. + +Replacing `signedCert` switches every webhook and OAuth credentials set using this configuration over to the new certificate in one write, and the private key it was issued for is re-derived from the certificate. A replacement that was not issued for a private key this workspace holds is rejected with a `400`. + +Sending `name: null` removes the label. + +**Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + + +### Example + + +```python +from fireblocks.models.update_webhook_mtls_config_request import UpdateWebhookMtlsConfigRequest +from fireblocks.models.webhook_mtls_config import WebhookMtlsConfig +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + webhook_mtls_id = '44fcead0-7053-4831-a53a-df7fb90d440f' # str | The unique identifier of the mTLS configuration + update_webhook_mtls_config_request = fireblocks.UpdateWebhookMtlsConfigRequest() # UpdateWebhookMtlsConfigRequest | + + try: + # Update an mTLS configuration + api_response = fireblocks.webhooks_v2.update_webhook_mtls_config(webhook_mtls_id, update_webhook_mtls_config_request).result() + print("The response of WebhooksV2Api->update_webhook_mtls_config:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling WebhooksV2Api->update_webhook_mtls_config: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **webhook_mtls_id** | **str**| The unique identifier of the mTLS configuration | + **update_webhook_mtls_config_request** | [**UpdateWebhookMtlsConfigRequest**](UpdateWebhookMtlsConfigRequest.md)| | + +### Return type + +[**WebhookMtlsConfig**](WebhookMtlsConfig.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The updated mTLS configuration | * X-Request-ID -
| +**400** | Neither `name` nor `signedCert` was provided, so there is nothing to change, or the replacement certificate was rejected — it is not valid X.509, or it was not issued for a private key this workspace holds. | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **update_webhook_oauth** > WebhookOauthCredentials update_webhook_oauth(webhook_oauth_id, update_webhook_oauth_request) @@ -1621,7 +2031,7 @@ Update OAuth credentials Updates only the fields present in the request; anything omitted is left as it is. Sending `clientSecret` on its own rotates the secret for every webhook using these credentials. -`customJwtClaims`, `customBodyParams` and `customHeaders` are all merged key by key rather than replaced, the same way a webhook's own `customHeaders` behaves: a key sent with a value is added or overwritten, a key sent with a `null` value is deleted, and a key you omit is left alone. Setting one of the three to `null` as a whole clears that map, which is the quick way to empty it without naming every key. There is no ambiguity between the two uses of `null` — one names an entry to delete, the other names the field. A claim cannot be set to JSON `null`, though, on this endpoint or on create, because `null` is spent on deletion. `mtlsClientSignedCert` is a scalar rather than a map, so `null` there does remove it. +`customJwtClaims`, `customBodyParams` and `customHeaders` are all merged key by key rather than replaced, the same way a webhook's own `customHeaders` behaves: a key sent with a value is added or overwritten, a key sent with a `null` value is deleted, and a key you omit is left alone. Setting one of the three to `null` as a whole clears that map, which is the quick way to empty it without naming every key. There is no ambiguity between the two uses of `null` — one names an entry to delete, the other names the field. A claim cannot be set to JSON `null`, though, on this endpoint or on create, because `null` is spent on deletion. `webhookMtlsId` is a scalar rather than a map, so `null` there does remove it. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. diff --git a/fireblocks/__init__.py b/fireblocks/__init__.py index c1abc239..fb72272c 100644 --- a/fireblocks/__init__.py +++ b/fireblocks/__init__.py @@ -14,7 +14,7 @@ Do not edit the class manually. """ # noqa: E501 -__version__ = "32.0.0" +__version__ = "0.0.0" # import apis into sdk package from fireblocks.api.api_user_api import ApiUserApi @@ -29,7 +29,7 @@ from fireblocks.api.compliance_screening_configuration_api import ( ComplianceScreeningConfigurationApi, ) -from fireblocks.api.connected_accounts_beta_api import ConnectedAccountsBetaApi +from fireblocks.api.connected_accounts_api import ConnectedAccountsApi from fireblocks.api.console_user_api import ConsoleUserApi from fireblocks.api.contacts_api import ContactsApi from fireblocks.api.contract_interactions_api import ContractInteractionsApi @@ -163,7 +163,12 @@ from fireblocks.models.address_registry_add_vault_opt_outs_response import ( AddressRegistryAddVaultOptOutsResponse, ) -from fireblocks.models.address_registry_error import AddressRegistryError +from fireblocks.models.address_registry_create_proof_of_ownership_request import ( + AddressRegistryCreateProofOfOwnershipRequest, +) +from fireblocks.models.address_registry_create_proof_of_ownership_response import ( + AddressRegistryCreateProofOfOwnershipResponse, +) from fireblocks.models.address_registry_get_vault_opt_out_response import ( AddressRegistryGetVaultOptOutResponse, ) @@ -180,15 +185,18 @@ from fireblocks.models.address_registry_tenant_registry_response import ( AddressRegistryTenantRegistryResponse, ) -from fireblocks.models.address_registry_travel_rule_provider import ( - AddressRegistryTravelRuleProvider, -) from fireblocks.models.address_registry_vault_list_order import ( AddressRegistryVaultListOrder, ) from fireblocks.models.address_registry_vault_opt_out_item import ( AddressRegistryVaultOptOutItem, ) +from fireblocks.models.address_registry_verify_proof_of_ownership_request import ( + AddressRegistryVerifyProofOfOwnershipRequest, +) +from fireblocks.models.address_registry_verify_proof_of_ownership_response import ( + AddressRegistryVerifyProofOfOwnershipResponse, +) from fireblocks.models.address_reverse_lookup_response import ( AddressReverseLookupResponse, ) @@ -347,6 +355,7 @@ ) from fireblocks.models.canton_call_allow_list_add import CantonCallAllowListAdd from fireblocks.models.canton_call_allow_list_remove import CantonCallAllowListRemove +from fireblocks.models.canton_call_details import CantonCallDetails from fireblocks.models.canton_call_end_investor_invite import ( CantonCallEndInvestorInvite, ) @@ -360,6 +369,11 @@ CantonCallParticipantOnboarding, ) from fireblocks.models.canton_call_transfer_withdraw import CantonCallTransferWithdraw +from fireblocks.models.canton_details import CantonDetails +from fireblocks.models.canton_domain_enum import CantonDomainEnum +from fireblocks.models.canton_offer_response_details import CantonOfferResponseDetails +from fireblocks.models.canton_settlement_details import CantonSettlementDetails +from fireblocks.models.canton_vendor_enum import CantonVendorEnum from fireblocks.models.chain_descriptor import ChainDescriptor from fireblocks.models.chain_info_response import ChainInfoResponse from fireblocks.models.channel_dvn_config_with_confirmations import ( @@ -599,6 +613,9 @@ from fireblocks.models.create_vault_account_request import CreateVaultAccountRequest from fireblocks.models.create_vault_asset_response import CreateVaultAssetResponse from fireblocks.models.create_wallet_request import CreateWalletRequest +from fireblocks.models.create_webhook_mtls_config_request import ( + CreateWebhookMtlsConfigRequest, +) from fireblocks.models.create_webhook_oauth_request import CreateWebhookOauthRequest from fireblocks.models.create_webhook_request import CreateWebhookRequest from fireblocks.models.create_workflow_execution_request_params_inner import ( @@ -619,6 +636,9 @@ DeleteNetworkConnectionResponse, ) from fireblocks.models.delete_network_id_response import DeleteNetworkIdResponse +from fireblocks.models.delete_webhook_mtls_config_response import ( + DeleteWebhookMtlsConfigResponse, +) from fireblocks.models.delete_webhook_oauth_response import DeleteWebhookOauthResponse from fireblocks.models.deploy_layer_zero_adapters_request import ( DeployLayerZeroAdaptersRequest, @@ -704,6 +724,9 @@ from fireblocks.models.edit_gas_station_configuration_response import ( EditGasStationConfigurationResponse, ) +from fireblocks.models.effective_utxo_selection_config import ( + EffectiveUtxoSelectionConfig, +) from fireblocks.models.embedded_wallet import EmbeddedWallet from fireblocks.models.embedded_wallet_account import EmbeddedWalletAccount from fireblocks.models.embedded_wallet_address_details import ( @@ -824,6 +847,7 @@ from fireblocks.models.fixed_amount_type_enum import FixedAmountTypeEnum from fireblocks.models.fixed_fee import FixedFee from fireblocks.models.flow_direction import FlowDirection +from fireblocks.models.fok_time_in_force import FokTimeInForce from fireblocks.models.fps_hk_address import FpsHkAddress from fireblocks.models.fps_hk_destination import FpsHkDestination from fireblocks.models.fps_hk_payment_info import FpsHkPaymentInfo @@ -1004,6 +1028,14 @@ ) from fireblocks.models.legal_entity_registration import LegalEntityRegistration from fireblocks.models.lei_status import LeiStatus +from fireblocks.models.limit_execution_request_details import ( + LimitExecutionRequestDetails, +) +from fireblocks.models.limit_execution_response_details import ( + LimitExecutionResponseDetails, +) +from fireblocks.models.limit_type_details import LimitTypeDetails +from fireblocks.models.limit_type_enum import LimitTypeEnum from fireblocks.models.linked_tokens_count import LinkedTokensCount from fireblocks.models.list_approval_api_keys_response import ( ListApprovalApiKeysResponse, @@ -1217,6 +1249,8 @@ from fireblocks.models.position import Position from fireblocks.models.position2 import Position2 from fireblocks.models.position_related_transaction import PositionRelatedTransaction +from fireblocks.models.post_trade_settlement import PostTradeSettlement +from fireblocks.models.post_trade_settlement_type import PostTradeSettlementType from fireblocks.models.postal_address import PostalAddress from fireblocks.models.pre_screening import PreScreening from fireblocks.models.prefunded_settlement import PrefundedSettlement @@ -1730,6 +1764,7 @@ from fireblocks.models.templates_paginated_response import TemplatesPaginatedResponse from fireblocks.models.third_party_routing import ThirdPartyRouting from fireblocks.models.time_based_trigger import TimeBasedTrigger +from fireblocks.models.time_in_force import TimeInForce from fireblocks.models.time_period_config import TimePeriodConfig from fireblocks.models.time_period_match_type import TimePeriodMatchType from fireblocks.models.to_collateral_transaction import ToCollateralTransaction @@ -1989,12 +2024,18 @@ UpdateVaultAccountAssetAddressRequest, ) from fireblocks.models.update_vault_account_request import UpdateVaultAccountRequest +from fireblocks.models.update_webhook_mtls_config_request import ( + UpdateWebhookMtlsConfigRequest, +) from fireblocks.models.update_webhook_oauth_request import UpdateWebhookOauthRequest from fireblocks.models.update_webhook_request import UpdateWebhookRequest from fireblocks.models.update_workflow_status_request import UpdateWorkflowStatusRequest from fireblocks.models.update_workflow_status_response import ( UpdateWorkflowStatusResponse, ) +from fireblocks.models.upsert_utxo_selection_config_request import ( + UpsertUtxoSelectionConfigRequest, +) from fireblocks.models.us_wire_payment_info import UsWirePaymentInfo from fireblocks.models.usdc_gateway_wallet_asset import UsdcGatewayWalletAsset from fireblocks.models.usdc_gateway_wallet_info_response import ( @@ -2015,9 +2056,17 @@ from fireblocks.models.utxo_input import UtxoInput from fireblocks.models.utxo_input2 import UtxoInput2 from fireblocks.models.utxo_input_selection import UtxoInputSelection +from fireblocks.models.utxo_label_failure import UtxoLabelFailure +from fireblocks.models.utxo_labels_error_response import UtxoLabelsErrorResponse from fireblocks.models.utxo_output import UtxoOutput +from fireblocks.models.utxo_selection_config_entry import UtxoSelectionConfigEntry +from fireblocks.models.utxo_selection_config_response import UtxoSelectionConfigResponse +from fireblocks.models.utxo_selection_config_source_enum import ( + UtxoSelectionConfigSourceEnum, +) from fireblocks.models.utxo_selection_filters import UtxoSelectionFilters from fireblocks.models.utxo_selection_params import UtxoSelectionParams +from fireblocks.models.utxo_selection_strategy_enum import UtxoSelectionStrategyEnum from fireblocks.models.validate_address_response import ValidateAddressResponse from fireblocks.models.validate_layer_zero_channel_response import ( ValidateLayerZeroChannelResponse, @@ -2055,7 +2104,7 @@ from fireblocks.models.webhook import Webhook from fireblocks.models.webhook_event import WebhookEvent from fireblocks.models.webhook_metric import WebhookMetric -from fireblocks.models.webhook_mtls import WebhookMtls +from fireblocks.models.webhook_mtls_config import WebhookMtlsConfig from fireblocks.models.webhook_mtls_csr_response import WebhookMtlsCsrResponse from fireblocks.models.webhook_mtls_key_algorithm import WebhookMtlsKeyAlgorithm from fireblocks.models.webhook_oauth_credentials import WebhookOauthCredentials diff --git a/fireblocks/api/__init__.py b/fireblocks/api/__init__.py index d568d45f..b5e3e3f8 100644 --- a/fireblocks/api/__init__.py +++ b/fireblocks/api/__init__.py @@ -9,7 +9,7 @@ from fireblocks.api.compliance_api import ComplianceApi from fireblocks.api.compliance_orchestrator_beta_api import ComplianceOrchestratorBetaApi from fireblocks.api.compliance_screening_configuration_api import ComplianceScreeningConfigurationApi -from fireblocks.api.connected_accounts_beta_api import ConnectedAccountsBetaApi +from fireblocks.api.connected_accounts_api import ConnectedAccountsApi from fireblocks.api.console_user_api import ConsoleUserApi from fireblocks.api.contacts_api import ContactsApi from fireblocks.api.contract_interactions_api import ContractInteractionsApi diff --git a/fireblocks/api/compliance_api.py b/fireblocks/api/compliance_api.py index e1e56e5d..cfbfdd73 100644 --- a/fireblocks/api/compliance_api.py +++ b/fireblocks/api/compliance_api.py @@ -23,6 +23,8 @@ from typing_extensions import Annotated from fireblocks.models.address_registry_add_vault_opt_outs_request import AddressRegistryAddVaultOptOutsRequest from fireblocks.models.address_registry_add_vault_opt_outs_response import AddressRegistryAddVaultOptOutsResponse +from fireblocks.models.address_registry_create_proof_of_ownership_request import AddressRegistryCreateProofOfOwnershipRequest +from fireblocks.models.address_registry_create_proof_of_ownership_response import AddressRegistryCreateProofOfOwnershipResponse from fireblocks.models.address_registry_get_vault_opt_out_response import AddressRegistryGetVaultOptOutResponse from fireblocks.models.address_registry_legal_entity import AddressRegistryLegalEntity from fireblocks.models.address_registry_list_vault_opt_outs_response import AddressRegistryListVaultOptOutsResponse @@ -30,6 +32,8 @@ from fireblocks.models.address_registry_remove_vault_opt_out_response import AddressRegistryRemoveVaultOptOutResponse from fireblocks.models.address_registry_tenant_registry_response import AddressRegistryTenantRegistryResponse from fireblocks.models.address_registry_vault_list_order import AddressRegistryVaultListOrder +from fireblocks.models.address_registry_verify_proof_of_ownership_request import AddressRegistryVerifyProofOfOwnershipRequest +from fireblocks.models.address_registry_verify_proof_of_ownership_response import AddressRegistryVerifyProofOfOwnershipResponse from fireblocks.models.aml_verdict_manual_request import AmlVerdictManualRequest from fireblocks.models.aml_verdict_manual_response import AmlVerdictManualResponse from fireblocks.models.ars_config_response import ArsConfigResponse @@ -395,7 +399,7 @@ def add_address_registry_vault_opt_outs( _response_types_map: Dict[str, Optional[str]] = { '200': "AddressRegistryAddVaultOptOutsResponse", - '400': "AddressRegistryError", + '400': "ErrorSchema", 'default': "ErrorSchema", } @@ -641,6 +645,160 @@ def _assign_vaults_to_legal_entity_serialize( + @validate_call + def create_address_registry_proof_of_ownership( + self, + address_registry_create_proof_of_ownership_request: AddressRegistryCreateProofOfOwnershipRequest, + idempotency_key: Annotated[Optional[StrictStr], Field(description="A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[AddressRegistryCreateProofOfOwnershipResponse]]: + """Create a Proof of Ownership PDF for an address + + Creates a Proof of Ownership PDF for a blockchain address owned by the authenticated workspace — for example, to share with a counterparty or bank as compliance evidence. Recipients can confirm it with `POST /v1/address_registry/proof_of_ownership_exports/verify`. Check `proofOfOwnershipAvailable` on `GET /v1/address_registry/legal_entities/{address}` first if you want to know whether create is likely to succeed. + + :param address_registry_create_proof_of_ownership_request: (required) + :type address_registry_create_proof_of_ownership_request: AddressRegistryCreateProofOfOwnershipRequest + :param idempotency_key: A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + :type idempotency_key: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + + _param = self._create_address_registry_proof_of_ownership_serialize( + address_registry_create_proof_of_ownership_request=address_registry_create_proof_of_ownership_request, + idempotency_key=idempotency_key, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '201': "AddressRegistryCreateProofOfOwnershipResponse", + '400': "ErrorSchema", + '403': "ErrorSchema", + '404': "ErrorSchema", + '429': "ErrorSchema", + '500': "ErrorSchema", + '503': "ErrorSchema", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _create_address_registry_proof_of_ownership_serialize( + self, + address_registry_create_proof_of_ownership_request, + idempotency_key, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + if idempotency_key is not None: + _header_params['Idempotency-Key'] = idempotency_key + # process the form parameters + # process the body parameter + if address_registry_create_proof_of_ownership_request is not None: + _body_params = address_registry_create_proof_of_ownership_request + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/address_registry/proof_of_ownership_exports', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def create_counterparty_group( self, @@ -1485,7 +1643,7 @@ def get_address_registry_vault_opt_out( _response_types_map: Dict[str, Optional[str]] = { '200': "AddressRegistryGetVaultOptOutResponse", - '400': "AddressRegistryError", + '400': "ErrorSchema", 'default': "ErrorSchema", } @@ -2371,8 +2529,10 @@ def get_legal_entity_for_address( _response_types_map: Dict[str, Optional[str]] = { '200': "AddressRegistryLegalEntity", - '400': "AddressRegistryError", - '404': "AddressRegistryError", + '400': "ErrorSchema", + '403': "ErrorSchema", + '404': "ErrorSchema", + '429': "ErrorSchema", 'default': "ErrorSchema", } @@ -2878,7 +3038,7 @@ def list_address_registry_vault_opt_outs( _response_types_map: Dict[str, Optional[str]] = { '200': "AddressRegistryListVaultOptOutsResponse", - '400': "AddressRegistryError", + '400': "ErrorSchema", 'default': "ErrorSchema", } @@ -3855,7 +4015,7 @@ def remove_address_registry_vault_opt_out( _response_types_map: Dict[str, Optional[str]] = { '200': "AddressRegistryRemoveVaultOptOutResponse", - '400': "AddressRegistryError", + '400': "ErrorSchema", 'default': "ErrorSchema", } @@ -5507,3 +5667,152 @@ def _update_travel_rule_config_serialize( ) + + + @validate_call + def verify_address_registry_proof_of_ownership( + self, + address_registry_verify_proof_of_ownership_request: AddressRegistryVerifyProofOfOwnershipRequest, + idempotency_key: Annotated[Optional[StrictStr], Field(description="A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[AddressRegistryVerifyProofOfOwnershipResponse]]: + """Verify a Proof of Ownership export + + Verifies a Proof of Ownership export against the record Fireblocks stored at creation. Returns `valid: false` (not 404) for an unknown, expired, or mismatched export. Available to any authenticated Fireblocks workspace, not just the export's original owner. + + :param address_registry_verify_proof_of_ownership_request: (required) + :type address_registry_verify_proof_of_ownership_request: AddressRegistryVerifyProofOfOwnershipRequest + :param idempotency_key: A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + :type idempotency_key: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + + _param = self._verify_address_registry_proof_of_ownership_serialize( + address_registry_verify_proof_of_ownership_request=address_registry_verify_proof_of_ownership_request, + idempotency_key=idempotency_key, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "AddressRegistryVerifyProofOfOwnershipResponse", + '400': "ErrorSchema", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _verify_address_registry_proof_of_ownership_serialize( + self, + address_registry_verify_proof_of_ownership_request, + idempotency_key, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + if idempotency_key is not None: + _header_params['Idempotency-Key'] = idempotency_key + # process the form parameters + # process the body parameter + if address_registry_verify_proof_of_ownership_request is not None: + _body_params = address_registry_verify_proof_of_ownership_request + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/address_registry/proof_of_ownership_exports/verify', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + diff --git a/fireblocks/api/connected_accounts_beta_api.py b/fireblocks/api/connected_accounts_api.py similarity index 98% rename from fireblocks/api/connected_accounts_beta_api.py rename to fireblocks/api/connected_accounts_api.py index bdb30938..859e639b 100644 --- a/fireblocks/api/connected_accounts_beta_api.py +++ b/fireblocks/api/connected_accounts_api.py @@ -43,7 +43,7 @@ from fireblocks.validation_utils import validate_not_empty_string -class ConnectedAccountsBetaApi: +class ConnectedAccountsApi: """NOTE: This class is auto generated by OpenAPI Generator Ref: https://openapi-generator.tech @@ -76,7 +76,7 @@ def add_connected_account( ) -> Future[ApiResponse[AddConnectedAccountResponse]]: """Add a connected account - Creates a new connected account for the authenticated tenant. The `creds` field must be a Base64-encoded RSA-encrypted credential blob. Use `GET /connected_accounts/credentials/public_key` to retrieve the public key for encryption. The `providerType` is derived server-side from the `providerId` — callers do not supply it. Endpoint Permission: Editor, Admin, Non-Signing Admin. **Note:** This endpoint is currently in beta and might be subject to changes. + Creates a new connected account for the authenticated tenant. The `creds` field must be a Base64-encoded RSA-encrypted credential blob. Use `GET /connected_accounts/credentials/public_key` to retrieve the public key for encryption. The `providerType` is derived server-side from the `providerId` — callers do not supply it. Endpoint Permission: Editor, Admin, Non-Signing Admin. :param add_connected_account_request: (required) :type add_connected_account_request: AddConnectedAccountRequest @@ -228,7 +228,7 @@ def disconnect_connected_account( ) -> Future[ApiResponse[None]]: """Disconnect connected account - Disconnect a connected account by ID. **Note**: - This endpoint is currently in beta and might be subject to changes. + Disconnect a connected account by ID. :param account_id: The ID of the account to disconnect. (required) :type account_id: str @@ -357,7 +357,7 @@ def get_connected_account( ) -> Future[ApiResponse[ConnectedSingleAccountResponse]]: """Get connected account - Retrieve detailed information about a specific connected account by ID. **Note:** This endpoint is currently in beta and might be subject to changes. + Retrieve detailed information about a specific connected account by ID. :param account_id: The ID of the account to fetch. (required) :type account_id: str @@ -493,7 +493,7 @@ def get_connected_account_allowlist( ) -> Future[ApiResponse[AllowlistResponse]]: """Get allowlist for connected account - Retrieves the address allowlist for a specified connected account. **Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. + Retrieves the address allowlist for a specified connected account. **Note:** Currently supports CoinbaseExchange/Binance accounts only. :param account_id: The connected account identifier (required) :type account_id: str @@ -680,7 +680,7 @@ def get_connected_account_allowlist_entry( ) -> Future[ApiResponse[AllowlistEntryResponse]]: """Get a single allowlist entry for a connected account - Retrieves a single allowlist entry by its Fireblocks identifier for a specified connected account. **Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. + Retrieves a single allowlist entry by its Fireblocks identifier for a specified connected account. **Note:** Currently supports CoinbaseExchange/Binance accounts only. :param account_id: The connected account identifier (required) :type account_id: str @@ -819,7 +819,7 @@ def get_connected_account_balances( ) -> Future[ApiResponse[ConnectedAccountBalancesResponse]]: """Get balances for an account - Retrieve current asset balances for a specific connected account as a flat list (one row per `assetId`, `balanceType`). **Note:** This endpoint is currently in beta and might be subject to changes. + Retrieve current asset balances for a specific connected account as a flat list (one row per `assetId`, `balanceType`). :param account_id: The ID of the account to fetch balances for. (required) :type account_id: str @@ -966,7 +966,7 @@ def get_connected_account_rates( ) -> Future[ApiResponse[ConnectedAccountRateResponse]]: """Get exchange rates for an account - Retrieve current exchange rates for converting between specific assets in a connected account. **Note:** This endpoint is currently in beta and might be subject to changes. + Retrieve current exchange rates for converting between specific assets in a connected account. :param account_id: The ID of the account to fetch rates for. (required) :type account_id: str @@ -1115,7 +1115,7 @@ def get_connected_account_trading_pairs( ) -> Future[ApiResponse[ConnectedAccountTradingPairsResponse]]: """Get supported trading pairs for an account - Retrieve all asset trading pairs supported by a specific connected account, including the pair type (`quote`, `market`, `onOffRamp`). **Note:** This endpoint is currently in beta and might be subject to changes. + Retrieve all asset trading pairs supported by a specific connected account, including the pair type (`quote`, `market`, `onOffRamp`). :param account_id: The ID of the account to fetch supported pairs for. (required) :type account_id: str @@ -1262,7 +1262,7 @@ def get_connected_accounts( ) -> Future[ApiResponse[ConnectedAccountsResponse]]: """Get connected accounts - Returns all connected accounts. **Note:** This endpoint is currently in beta and might be subject to changes. + Returns all connected accounts. :param main_accounts: Whether to include only main accounts in the response. :type main_accounts: bool @@ -1407,7 +1407,7 @@ def get_connected_accounts_credentials_public_key( ) -> Future[ApiResponse[GetConnectedAccountsCredentialsPublicKeyResponse]]: """Get public key to encrypt connected account credentials - Returns the RSA public key used to encrypt the `creds` field before calling `POST /connected_accounts`. The key is a singleton resource scoped to the connected-accounts credentials domain — there is one per tenant context. **Note:** This endpoint is currently in beta and might be subject to changes. + Returns the RSA public key used to encrypt the `creds` field before calling `POST /connected_accounts`. The key is a singleton resource scoped to the connected-accounts credentials domain — there is one per tenant context. :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -1531,7 +1531,7 @@ def rename_connected_account( ) -> Future[ApiResponse[RenameConnectedAccountResponse]]: """Rename Connected Account - Rename a connected account by account ID. **Note:** This endpoint is currently in beta and might be subject to changes. + Rename a connected account by account ID. :param account_id: The unique identifier of the connected account (required) :type account_id: str @@ -1691,7 +1691,7 @@ def sync_connected_account_allowlist( ) -> Future[ApiResponse[None]]: """Sync allowlist for connected account - Triggers an on-demand sync from the exchange, bypassing the cache and fetching live data immediately. **Rate limit:** 1 request per minute per connected account. **Note:** This endpoint is currently in beta and might be subject to changes. Currently supports CoinbaseExchange/Binance accounts only. + Triggers an on-demand sync from the exchange, bypassing the cache and fetching live data immediately. **Rate limit:** 1 request per minute per connected account. **Note:** Currently supports CoinbaseExchange/Binance accounts only. :param account_id: The connected account identifier (required) :type account_id: str @@ -1828,7 +1828,7 @@ def update_connected_account_credentials( ) -> Future[ApiResponse[UpdateConnectedAccountCredentialsResponse]]: """Update connected account credentials - Replace the API credentials (secret + API key) of a connected account. Credentials belong to an API key, which can back a single account or an entire hierarchy. Updating them affects all accounts sharing that key, so the endpoint returns an array of modified accounts. The `creds` field must be a Base64-encoded RSA-encrypted credential blob; use `GET /connected_accounts/credentials/public_key` to retrieve the public key for encryption. Both `creds` and `apiKey` are mandatory. Validation against the exchange is synchronous, but the update itself is **pending mobile approval** — the existing credentials stay live until the change is approved, so none of the affected accounts are disconnected in the meantime. Endpoint Permission: Admin, Non-Signing Admin. **Note:** This endpoint is currently in beta and might be subject to changes. + Replace the API credentials (secret + API key) of a connected account. Credentials belong to an API key, which can back a single account or an entire hierarchy. Updating them affects all accounts sharing that key, so the endpoint returns an array of modified accounts. The `creds` field must be a Base64-encoded RSA-encrypted credential blob; use `GET /connected_accounts/credentials/public_key` to retrieve the public key for encryption. Both `creds` and `apiKey` are mandatory. Validation against the exchange is synchronous, but the update itself is **pending mobile approval** — the existing credentials stay live until the change is approved, so none of the affected accounts are disconnected in the meantime. Endpoint Permission: Admin, Non-Signing Admin. :param account_id: The unique identifier of the connected account whose API key credentials are being replaced. (required) :type account_id: str diff --git a/fireblocks/api/console_user_api.py b/fireblocks/api/console_user_api.py index 26041e6b..20aad46a 100644 --- a/fireblocks/api/console_user_api.py +++ b/fireblocks/api/console_user_api.py @@ -18,9 +18,10 @@ from typing import Any, Dict, List, Optional, Tuple, Union from typing_extensions import Annotated -from pydantic import Field, StrictStr +from pydantic import Field, StrictBool, StrictStr from typing import Optional from typing_extensions import Annotated +from fireblocks.models.console_user import ConsoleUser from fireblocks.models.create_console_user import CreateConsoleUser from fireblocks.models.get_console_users_response import GetConsoleUsersResponse @@ -195,6 +196,150 @@ def _create_console_user_serialize( + @validate_call + def delete_console_user( + self, + id: Annotated[StrictStr, Field(description="The ID of the console user to delete")], + force: Annotated[Optional[StrictBool], Field(description="Acknowledges the impact of removing this user and proceeds anyway. Overrides both USER_REFERENCED_IN_TAP and QUORUM_INTEGRITY, the same way the acknowledgement checkbox does in the console.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[ConsoleUser]]: + """Request deletion of a console user + + Requests deletion of a console user. The request is asynchronous: it goes through the workspace's configured \"Delete users\" approval policy (Settings > Quorums), exactly as deleting a user from the console does, and the user is removed only once that approval completes. - Track progress by polling GET /management/users; deletion is complete when the user is disabled. - Please note that this endpoint is available only for API keys with Admin/Non Signing Admin permissions. Endpoint Permission: Admin, Non-Signing Admin. **Note:** This endpoint is currently in beta and might be subject to changes. + + :param id: The ID of the console user to delete (required) + :type id: str + :param force: Acknowledges the impact of removing this user and proceeds anyway. Overrides both USER_REFERENCED_IN_TAP and QUORUM_INTEGRITY, the same way the acknowledgement checkbox does in the console. + :type force: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + validate_not_empty_string(function_name="delete_console_user", param_name="id", param_value=id) + + _param = self._delete_console_user_serialize( + id=id, + force=force, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "ConsoleUser", + '401': "ErrorSchema", + '403': "ErrorSchema", + '404': "ErrorSchema", + '409': "ErrorSchema", + '422': "ErrorSchema", + '5XX': "ErrorSchema", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _delete_console_user_serialize( + self, + id, + force, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params['id'] = id + # process the query parameters + if force is not None: + + _query_params.append(('force', force)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='DELETE', + resource_path='/management/users/{id}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def get_console_users( self, diff --git a/fireblocks/api/utxo_management_beta_api.py b/fireblocks/api/utxo_management_beta_api.py index 951f0d8c..d23d2c34 100644 --- a/fireblocks/api/utxo_management_beta_api.py +++ b/fireblocks/api/utxo_management_beta_api.py @@ -24,6 +24,8 @@ from fireblocks.models.attach_detach_utxo_labels_request import AttachDetachUtxoLabelsRequest from fireblocks.models.attach_detach_utxo_labels_response import AttachDetachUtxoLabelsResponse from fireblocks.models.list_utxos_response import ListUtxosResponse +from fireblocks.models.upsert_utxo_selection_config_request import UpsertUtxoSelectionConfigRequest +from fireblocks.models.utxo_selection_config_response import UtxoSelectionConfigResponse from fireblocks.api_client import ApiClient, RequestSerialized from fireblocks.api_response import ApiResponse @@ -44,6 +46,127 @@ def __init__(self, api_client=None) -> None: self.api_client = api_client + @validate_call + def get_utxo_selection_config( + self, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[UtxoSelectionConfigResponse]]: + """Get UTXO selection config + + Returns the workspace-level configured selection strategy and the effective strategy after runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this workspace, otherwise `ASC`. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + + _param = self._get_utxo_selection_config_serialize( + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "UtxoSelectionConfigResponse", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _get_utxo_selection_config_serialize( + self, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/utxo_management/selection_config', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def get_utxos( self, @@ -302,6 +425,143 @@ def _get_utxos_serialize( + @validate_call + def get_vault_asset_utxo_selection_config( + self, + vault_account_id: Annotated[StrictStr, Field(description="The ID of the vault account.")], + asset_id: Annotated[StrictStr, Field(description="The ID of the asset")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[UtxoSelectionConfigResponse]]: + """Get vault and asset UTXO selection config + + Returns the config stored at this vault-and-asset scope, if any, and the effective strategy after workspace fallback and runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored at this scope and none is inherited from the workspace (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this scope, otherwise `ASC`. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + + :param vault_account_id: The ID of the vault account. (required) + :type vault_account_id: str + :param asset_id: The ID of the asset (required) + :type asset_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + validate_not_empty_string(function_name="get_vault_asset_utxo_selection_config", param_name="vault_account_id", param_value=vault_account_id) + validate_not_empty_string(function_name="get_vault_asset_utxo_selection_config", param_name="asset_id", param_value=asset_id) + + _param = self._get_vault_asset_utxo_selection_config_serialize( + vault_account_id=vault_account_id, + asset_id=asset_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "UtxoSelectionConfigResponse", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _get_vault_asset_utxo_selection_config_serialize( + self, + vault_account_id, + asset_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if vault_account_id is not None: + _path_params['vaultAccountId'] = vault_account_id + if asset_id is not None: + _path_params['assetId'] = asset_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/utxo_management/{vaultAccountId}/{assetId}/selection_config', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def update_utxo_labels( self, @@ -324,7 +584,7 @@ def update_utxo_labels( ) -> Future[ApiResponse[AttachDetachUtxoLabelsResponse]]: """Attach or detach labels to/from UTXOs - Attach or detach labels to/from UTXOs in a vault account. Labels can be used for organizing and filtering UTXOs. Labels are applied additively — `labelsToAttach` adds to the existing label set and `labelsToDetach` removes from it. Neither operation replaces the full set. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. + Attach or detach labels to/from UTXOs in a vault account. Labels can be used for organizing and filtering UTXOs. Labels are applied additively — `labelsToAttach` adds to the existing label set and `labelsToDetach` removes from it. Neither operation replaces the full set. The request is all-or-nothing: if any identifier cannot be labelled, no UTXO is labelled and the request fails with `400`. The response lists every failed identifier in `failures`, each with its own `reason` — use it, not the status, to decide what to do: - `NOT_FOUND` — not found in this vault and asset. - `NOT_LABELLABLE` — spent, or removed, and can no longer be labelled. A UTXO removed within the last hour is reported as `NOT_FOUND` with `utxoStatus: REMOVED`; if it does not reappear, it becomes `NOT_LABELLABLE` after about an hour. A `400` without `failures` means the request itself is malformed. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. :param vault_account_id: The ID of the vault account (required) :type vault_account_id: str @@ -372,6 +632,7 @@ def update_utxo_labels( _response_types_map: Dict[str, Optional[str]] = { '200': "AttachDetachUtxoLabelsResponse", + '400': "UtxoLabelsErrorResponse", 'default': "ErrorSchema", } @@ -464,3 +725,315 @@ def _update_utxo_labels_serialize( ) + + + @validate_call + def upsert_utxo_selection_config( + self, + upsert_utxo_selection_config_request: UpsertUtxoSelectionConfigRequest, + idempotency_key: Annotated[Optional[StrictStr], Field(description="A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[UtxoSelectionConfigResponse]]: + """Upsert UTXO selection config + + Creates or updates the workspace-level UTXO selection strategy. `ADAPTIVE` is recommended. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin. + + :param upsert_utxo_selection_config_request: (required) + :type upsert_utxo_selection_config_request: UpsertUtxoSelectionConfigRequest + :param idempotency_key: A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + :type idempotency_key: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + + _param = self._upsert_utxo_selection_config_serialize( + upsert_utxo_selection_config_request=upsert_utxo_selection_config_request, + idempotency_key=idempotency_key, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "UtxoSelectionConfigResponse", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _upsert_utxo_selection_config_serialize( + self, + upsert_utxo_selection_config_request, + idempotency_key, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + if idempotency_key is not None: + _header_params['Idempotency-Key'] = idempotency_key + # process the form parameters + # process the body parameter + if upsert_utxo_selection_config_request is not None: + _body_params = upsert_utxo_selection_config_request + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='PUT', + resource_path='/utxo_management/selection_config', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def upsert_vault_asset_utxo_selection_config( + self, + vault_account_id: Annotated[StrictStr, Field(description="The ID of the vault account.")], + asset_id: Annotated[StrictStr, Field(description="The ID of the asset")], + upsert_utxo_selection_config_request: UpsertUtxoSelectionConfigRequest, + idempotency_key: Annotated[Optional[StrictStr], Field(description="A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[UtxoSelectionConfigResponse]]: + """Upsert vault and asset UTXO selection config + + Creates or updates the UTXO selection strategy for this vault account and asset. `ADAPTIVE` is recommended. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin. + + :param vault_account_id: The ID of the vault account. (required) + :type vault_account_id: str + :param asset_id: The ID of the asset (required) + :type asset_id: str + :param upsert_utxo_selection_config_request: (required) + :type upsert_utxo_selection_config_request: UpsertUtxoSelectionConfigRequest + :param idempotency_key: A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + :type idempotency_key: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + validate_not_empty_string(function_name="upsert_vault_asset_utxo_selection_config", param_name="vault_account_id", param_value=vault_account_id) + validate_not_empty_string(function_name="upsert_vault_asset_utxo_selection_config", param_name="asset_id", param_value=asset_id) + + _param = self._upsert_vault_asset_utxo_selection_config_serialize( + vault_account_id=vault_account_id, + asset_id=asset_id, + upsert_utxo_selection_config_request=upsert_utxo_selection_config_request, + idempotency_key=idempotency_key, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "UtxoSelectionConfigResponse", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _upsert_vault_asset_utxo_selection_config_serialize( + self, + vault_account_id, + asset_id, + upsert_utxo_selection_config_request, + idempotency_key, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if vault_account_id is not None: + _path_params['vaultAccountId'] = vault_account_id + if asset_id is not None: + _path_params['assetId'] = asset_id + # process the query parameters + # process the header parameters + if idempotency_key is not None: + _header_params['Idempotency-Key'] = idempotency_key + # process the form parameters + # process the body parameter + if upsert_utxo_selection_config_request is not None: + _body_params = upsert_utxo_selection_config_request + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='PUT', + resource_path='/utxo_management/{vaultAccountId}/{assetId}/selection_config', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + diff --git a/fireblocks/api/webhooks_v2_api.py b/fireblocks/api/webhooks_v2_api.py index d4d54299..765f501c 100644 --- a/fireblocks/api/webhooks_v2_api.py +++ b/fireblocks/api/webhooks_v2_api.py @@ -21,8 +21,10 @@ from pydantic import Field, StrictBool, StrictFloat, StrictInt, StrictStr, field_validator from typing import List, Optional, Union from typing_extensions import Annotated +from fireblocks.models.create_webhook_mtls_config_request import CreateWebhookMtlsConfigRequest from fireblocks.models.create_webhook_oauth_request import CreateWebhookOauthRequest from fireblocks.models.create_webhook_request import CreateWebhookRequest +from fireblocks.models.delete_webhook_mtls_config_response import DeleteWebhookMtlsConfigResponse from fireblocks.models.delete_webhook_oauth_response import DeleteWebhookOauthResponse from fireblocks.models.notification_attempts_paginated_response import NotificationAttemptsPaginatedResponse from fireblocks.models.notification_paginated_response import NotificationPaginatedResponse @@ -34,11 +36,13 @@ from fireblocks.models.resend_failed_notifications_request import ResendFailedNotificationsRequest from fireblocks.models.resend_failed_notifications_response import ResendFailedNotificationsResponse from fireblocks.models.resend_notifications_by_resource_id_request import ResendNotificationsByResourceIdRequest +from fireblocks.models.update_webhook_mtls_config_request import UpdateWebhookMtlsConfigRequest from fireblocks.models.update_webhook_oauth_request import UpdateWebhookOauthRequest from fireblocks.models.update_webhook_request import UpdateWebhookRequest from fireblocks.models.webhook import Webhook from fireblocks.models.webhook_event import WebhookEvent from fireblocks.models.webhook_metric import WebhookMetric +from fireblocks.models.webhook_mtls_config import WebhookMtlsConfig from fireblocks.models.webhook_mtls_csr_response import WebhookMtlsCsrResponse from fireblocks.models.webhook_oauth_credentials import WebhookOauthCredentials from fireblocks.models.webhook_paginated_response import WebhookPaginatedResponse @@ -210,6 +214,154 @@ def _create_webhook_serialize( + @validate_call + def create_webhook_mtls_config( + self, + create_webhook_mtls_config_request: CreateWebhookMtlsConfigRequest, + idempotency_key: Annotated[Optional[StrictStr], Field(description="A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[WebhookMtlsConfig]]: + """Create an mTLS configuration + + Stores a certificate signed against the CSR from `GET /v1/webhooks_settings/mtls_csr` and returns its id, which is then set as `webhookMtlsId` on a webhook or on OAuth credentials. The private key the certificate was issued for is derived from the certificate, so it is never named by the caller. Re-uploading a certificate already stored returns the existing id rather than creating a second configuration, so several webhooks and OAuth credentials can share one certificate. A certificate that was not issued for a private key this workspace holds is rejected with a `400`. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + + :param create_webhook_mtls_config_request: (required) + :type create_webhook_mtls_config_request: CreateWebhookMtlsConfigRequest + :param idempotency_key: A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + :type idempotency_key: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + + _param = self._create_webhook_mtls_config_serialize( + create_webhook_mtls_config_request=create_webhook_mtls_config_request, + idempotency_key=idempotency_key, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '201': "WebhookMtlsConfig", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _create_webhook_mtls_config_serialize( + self, + create_webhook_mtls_config_request, + idempotency_key, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + if idempotency_key is not None: + _header_params['Idempotency-Key'] = idempotency_key + # process the form parameters + # process the body parameter + if create_webhook_mtls_config_request is not None: + _body_params = create_webhook_mtls_config_request + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/webhooks_settings/mtls', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def create_webhook_oauth( self, @@ -487,6 +639,145 @@ def _delete_webhook_serialize( + @validate_call + def delete_webhook_mtls_config( + self, + webhook_mtls_id: Annotated[StrictStr, Field(description="The unique identifier of the mTLS configuration")], + force_delete: Annotated[Optional[StrictBool], Field(description="Delete the configuration even while webhooks or OAuth credentials still reference it, detaching them instead of refusing; their ids are returned in `detachedWebhookIds` and `detachedWebhookOauthIds`. Leave it unset, or `false`, to get a `409 Conflict` whenever anything still references the configuration.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[DeleteWebhookMtlsConfigResponse]]: + """Delete an mTLS configuration + + Deletes an mTLS configuration. By default the delete is refused while the configuration is still in use: if any webhook or OAuth credentials reference it, nothing is deleted and the request fails with `409 Conflict`, naming the reason and listing the ids of what references it. This protects a shared configuration from being removed out from under the webhooks and token requests that depend on it. Pass `forceDelete=true` to delete anyway. That detaches everything referencing it — it clears `webhookMtlsId` on each webhook and OAuth credentials, it does **not** delete them — then deletes the configuration and returns the deleted resource together with `detachedWebhookIds` and `detachedWebhookOauthIds`. Detached webhooks keep delivering notifications, and detached OAuth credentials keep requesting tokens, but without a client certificate, so an endpoint that requires mTLS will reject them from that point on. When nothing references the configuration the delete succeeds either way, and both lists come back empty. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + + :param webhook_mtls_id: The unique identifier of the mTLS configuration (required) + :type webhook_mtls_id: str + :param force_delete: Delete the configuration even while webhooks or OAuth credentials still reference it, detaching them instead of refusing; their ids are returned in `detachedWebhookIds` and `detachedWebhookOauthIds`. Leave it unset, or `false`, to get a `409 Conflict` whenever anything still references the configuration. + :type force_delete: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + validate_not_empty_string(function_name="delete_webhook_mtls_config", param_name="webhook_mtls_id", param_value=webhook_mtls_id) + + _param = self._delete_webhook_mtls_config_serialize( + webhook_mtls_id=webhook_mtls_id, + force_delete=force_delete, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "DeleteWebhookMtlsConfigResponse", + '409': "ErrorSchema", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _delete_webhook_mtls_config_serialize( + self, + webhook_mtls_id, + force_delete, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if webhook_mtls_id is not None: + _path_params['webhookMtlsId'] = webhook_mtls_id + # process the query parameters + if force_delete is not None: + + _query_params.append(('forceDelete', force_delete)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='DELETE', + resource_path='/webhooks_settings/mtls/{webhookMtlsId}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def delete_webhook_oauth( self, @@ -1810,9 +2101,269 @@ def _get_webhook_serialize( @validate_call - def get_webhook_oauth( + def get_webhook_mtls_config( self, - webhook_oauth_id: Annotated[StrictStr, Field(description="The unique identifier of the OAuth credentials")], + webhook_mtls_id: Annotated[StrictStr, Field(description="The unique identifier of the mTLS configuration")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[WebhookMtlsConfig]]: + """Get an mTLS configuration by id + + Retrieve one stored mTLS configuration by its id. + + :param webhook_mtls_id: The unique identifier of the mTLS configuration (required) + :type webhook_mtls_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + validate_not_empty_string(function_name="get_webhook_mtls_config", param_name="webhook_mtls_id", param_value=webhook_mtls_id) + + _param = self._get_webhook_mtls_config_serialize( + webhook_mtls_id=webhook_mtls_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "WebhookMtlsConfig", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _get_webhook_mtls_config_serialize( + self, + webhook_mtls_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if webhook_mtls_id is not None: + _path_params['webhookMtlsId'] = webhook_mtls_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/webhooks_settings/mtls/{webhookMtlsId}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_webhook_mtls_configs( + self, + ids: Annotated[Optional[Annotated[List[StrictStr], Field(max_length=100)]], Field(description="Return only the configurations with these ids, instead of all of them. Repeat the parameter for each id. An id belonging to another workspace, or to nothing, is left out of the response rather than failing the request.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[List[WebhookMtlsConfig]]]: + """List the uploaded mTLS configurations + + Lists the workspace's mTLS configurations, newest first. Pass `ids` to ask about particular ones instead — useful for resolving the `webhookMtlsId` values on a set of webhooks in one call. + + :param ids: Return only the configurations with these ids, instead of all of them. Repeat the parameter for each id. An id belonging to another workspace, or to nothing, is left out of the response rather than failing the request. + :type ids: List[str] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + + _param = self._get_webhook_mtls_configs_serialize( + ids=ids, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[WebhookMtlsConfig]", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _get_webhook_mtls_configs_serialize( + self, + ids, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + 'ids': 'multi', + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if ids is not None: + + _query_params.append(('ids', ids)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/webhooks_settings/mtls', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_webhook_oauth( + self, + webhook_oauth_id: Annotated[StrictStr, Field(description="The unique identifier of the OAuth credentials")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2970,6 +3521,156 @@ def _update_webhook_serialize( + @validate_call + def update_webhook_mtls_config( + self, + webhook_mtls_id: Annotated[StrictStr, Field(description="The unique identifier of the mTLS configuration")], + update_webhook_mtls_config_request: UpdateWebhookMtlsConfigRequest, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[WebhookMtlsConfig]]: + """Update an mTLS configuration + + Renames a configuration, replaces its certificate, or both. Only the fields present in the request are changed; anything omitted is left as it is, and a request with neither field is rejected with a `400`. Replacing `signedCert` switches every webhook and OAuth credentials set using this configuration over to the new certificate in one write, and the private key it was issued for is re-derived from the certificate. A replacement that was not issued for a private key this workspace holds is rejected with a `400`. Sending `name: null` removes the label. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + + :param webhook_mtls_id: The unique identifier of the mTLS configuration (required) + :type webhook_mtls_id: str + :param update_webhook_mtls_config_request: (required) + :type update_webhook_mtls_config_request: UpdateWebhookMtlsConfigRequest + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + validate_not_empty_string(function_name="update_webhook_mtls_config", param_name="webhook_mtls_id", param_value=webhook_mtls_id) + + _param = self._update_webhook_mtls_config_serialize( + webhook_mtls_id=webhook_mtls_id, + update_webhook_mtls_config_request=update_webhook_mtls_config_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "WebhookMtlsConfig", + '400': "ErrorSchema", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + ) + + def _update_webhook_mtls_config_serialize( + self, + webhook_mtls_id, + update_webhook_mtls_config_request, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if webhook_mtls_id is not None: + _path_params['webhookMtlsId'] = webhook_mtls_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if update_webhook_mtls_config_request is not None: + _body_params = update_webhook_mtls_config_request + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='PATCH', + resource_path='/webhooks_settings/mtls/{webhookMtlsId}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def update_webhook_oauth( self, @@ -2990,7 +3691,7 @@ def update_webhook_oauth( ) -> Future[ApiResponse[WebhookOauthCredentials]]: """Update OAuth credentials - Updates only the fields present in the request; anything omitted is left as it is. Sending `clientSecret` on its own rotates the secret for every webhook using these credentials. `customJwtClaims`, `customBodyParams` and `customHeaders` are all merged key by key rather than replaced, the same way a webhook's own `customHeaders` behaves: a key sent with a value is added or overwritten, a key sent with a `null` value is deleted, and a key you omit is left alone. Setting one of the three to `null` as a whole clears that map, which is the quick way to empty it without naming every key. There is no ambiguity between the two uses of `null` — one names an entry to delete, the other names the field. A claim cannot be set to JSON `null`, though, on this endpoint or on create, because `null` is spent on deletion. `mtlsClientSignedCert` is a scalar rather than a map, so `null` there does remove it. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + Updates only the fields present in the request; anything omitted is left as it is. Sending `clientSecret` on its own rotates the secret for every webhook using these credentials. `customJwtClaims`, `customBodyParams` and `customHeaders` are all merged key by key rather than replaced, the same way a webhook's own `customHeaders` behaves: a key sent with a value is added or overwritten, a key sent with a `null` value is deleted, and a key you omit is left alone. Setting one of the three to `null` as a whole clears that map, which is the quick way to empty it without naming every key. There is no ambiguity between the two uses of `null` — one names an entry to delete, the other names the field. A claim cannot be set to JSON `null`, though, on this endpoint or on create, because `null` is spent on deletion. `webhookMtlsId` is a scalar rather than a map, so `null` there does remove it. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. :param webhook_oauth_id: The unique identifier of the OAuth credentials (required) :type webhook_oauth_id: str diff --git a/fireblocks/client.py b/fireblocks/client.py index 29e84737..245e9970 100644 --- a/fireblocks/client.py +++ b/fireblocks/client.py @@ -26,7 +26,7 @@ from fireblocks.api.compliance_screening_configuration_api import ( ComplianceScreeningConfigurationApi, ) -from fireblocks.api.connected_accounts_beta_api import ConnectedAccountsBetaApi +from fireblocks.api.connected_accounts_api import ConnectedAccountsApi from fireblocks.api.console_user_api import ConsoleUserApi from fireblocks.api.contacts_api import ContactsApi from fireblocks.api.contract_interactions_api import ContractInteractionsApi @@ -93,7 +93,7 @@ def __init__(self, configuration: ClientConfiguration = None): self._compliance = None self._compliance_orchestrator_beta = None self._compliance_screening_configuration = None - self._connected_accounts_beta = None + self._connected_accounts = None self._console_user = None self._contacts = None self._contract_interactions = None @@ -204,10 +204,10 @@ def compliance_screening_configuration(self) -> ComplianceScreeningConfiguration return self._compliance_screening_configuration @property - def connected_accounts_beta(self) -> ConnectedAccountsBetaApi: - if self._connected_accounts_beta is None: - self._connected_accounts_beta = ConnectedAccountsBetaApi(self._api_client) - return self._connected_accounts_beta + def connected_accounts(self) -> ConnectedAccountsApi: + if self._connected_accounts is None: + self._connected_accounts = ConnectedAccountsApi(self._api_client) + return self._connected_accounts @property def console_user(self) -> ConsoleUserApi: diff --git a/fireblocks/configuration.py b/fireblocks/configuration.py index a359e893..c1a025c0 100644 --- a/fireblocks/configuration.py +++ b/fireblocks/configuration.py @@ -550,7 +550,7 @@ def to_debug_report(self) -> str: "OS: {env}\n" "Python Version: {pyversion}\n" "Version of the API: 1.6.2\n" - "SDK Package Version: 32.0.0".format(env=sys.platform, pyversion=sys.version) + "SDK Package Version: 0.0.0".format(env=sys.platform, pyversion=sys.version) ) def get_host_settings(self) -> List[HostSetting]: diff --git a/fireblocks/models/__init__.py b/fireblocks/models/__init__.py index dae08fdf..1bb76e9f 100644 --- a/fireblocks/models/__init__.py +++ b/fireblocks/models/__init__.py @@ -66,16 +66,18 @@ from fireblocks.models.address_registry_add_vault_opt_outs_request import AddressRegistryAddVaultOptOutsRequest from fireblocks.models.address_registry_add_vault_opt_outs_request_vault_account_ids_inner import AddressRegistryAddVaultOptOutsRequestVaultAccountIdsInner from fireblocks.models.address_registry_add_vault_opt_outs_response import AddressRegistryAddVaultOptOutsResponse -from fireblocks.models.address_registry_error import AddressRegistryError +from fireblocks.models.address_registry_create_proof_of_ownership_request import AddressRegistryCreateProofOfOwnershipRequest +from fireblocks.models.address_registry_create_proof_of_ownership_response import AddressRegistryCreateProofOfOwnershipResponse from fireblocks.models.address_registry_get_vault_opt_out_response import AddressRegistryGetVaultOptOutResponse from fireblocks.models.address_registry_legal_entity import AddressRegistryLegalEntity from fireblocks.models.address_registry_list_vault_opt_outs_response import AddressRegistryListVaultOptOutsResponse from fireblocks.models.address_registry_remove_all_vault_opt_outs_response import AddressRegistryRemoveAllVaultOptOutsResponse from fireblocks.models.address_registry_remove_vault_opt_out_response import AddressRegistryRemoveVaultOptOutResponse from fireblocks.models.address_registry_tenant_registry_response import AddressRegistryTenantRegistryResponse -from fireblocks.models.address_registry_travel_rule_provider import AddressRegistryTravelRuleProvider from fireblocks.models.address_registry_vault_list_order import AddressRegistryVaultListOrder from fireblocks.models.address_registry_vault_opt_out_item import AddressRegistryVaultOptOutItem +from fireblocks.models.address_registry_verify_proof_of_ownership_request import AddressRegistryVerifyProofOfOwnershipRequest +from fireblocks.models.address_registry_verify_proof_of_ownership_response import AddressRegistryVerifyProofOfOwnershipResponse from fireblocks.models.address_reverse_lookup_response import AddressReverseLookupResponse from fireblocks.models.addresses_filters import AddressesFilters from fireblocks.models.alert_exposure_type_enum import AlertExposureTypeEnum @@ -202,11 +204,17 @@ from fireblocks.models.canton_call_allocation_withdraw import CantonCallAllocationWithdraw from fireblocks.models.canton_call_allow_list_add import CantonCallAllowListAdd from fireblocks.models.canton_call_allow_list_remove import CantonCallAllowListRemove +from fireblocks.models.canton_call_details import CantonCallDetails from fireblocks.models.canton_call_end_investor_invite import CantonCallEndInvestorInvite from fireblocks.models.canton_call_end_investor_invite_cancel import CantonCallEndInvestorInviteCancel from fireblocks.models.canton_call_end_investor_offboard import CantonCallEndInvestorOffboard from fireblocks.models.canton_call_participant_onboarding import CantonCallParticipantOnboarding from fireblocks.models.canton_call_transfer_withdraw import CantonCallTransferWithdraw +from fireblocks.models.canton_details import CantonDetails +from fireblocks.models.canton_domain_enum import CantonDomainEnum +from fireblocks.models.canton_offer_response_details import CantonOfferResponseDetails +from fireblocks.models.canton_settlement_details import CantonSettlementDetails +from fireblocks.models.canton_vendor_enum import CantonVendorEnum from fireblocks.models.chain_descriptor import ChainDescriptor from fireblocks.models.chain_info_response import ChainInfoResponse from fireblocks.models.channel_dvn_config_with_confirmations import ChannelDvnConfigWithConfirmations @@ -354,6 +362,7 @@ from fireblocks.models.create_vault_account_request import CreateVaultAccountRequest from fireblocks.models.create_vault_asset_response import CreateVaultAssetResponse from fireblocks.models.create_wallet_request import CreateWalletRequest +from fireblocks.models.create_webhook_mtls_config_request import CreateWebhookMtlsConfigRequest from fireblocks.models.create_webhook_oauth_request import CreateWebhookOauthRequest from fireblocks.models.create_webhook_request import CreateWebhookRequest from fireblocks.models.create_workflow_execution_request_params_inner import CreateWorkflowExecutionRequestParamsInner @@ -368,6 +377,7 @@ from fireblocks.models.delegation_summary import DelegationSummary from fireblocks.models.delete_network_connection_response import DeleteNetworkConnectionResponse from fireblocks.models.delete_network_id_response import DeleteNetworkIdResponse +from fireblocks.models.delete_webhook_mtls_config_response import DeleteWebhookMtlsConfigResponse from fireblocks.models.delete_webhook_oauth_response import DeleteWebhookOauthResponse from fireblocks.models.deploy_layer_zero_adapters_request import DeployLayerZeroAdaptersRequest from fireblocks.models.deployable_address_response import DeployableAddressResponse @@ -415,6 +425,7 @@ from fireblocks.models.earn_metadata import EarnMetadata from fireblocks.models.earn_provider import EarnProvider from fireblocks.models.edit_gas_station_configuration_response import EditGasStationConfigurationResponse +from fireblocks.models.effective_utxo_selection_config import EffectiveUtxoSelectionConfig from fireblocks.models.embedded_wallet import EmbeddedWallet from fireblocks.models.embedded_wallet_account import EmbeddedWalletAccount from fireblocks.models.embedded_wallet_address_details import EmbeddedWalletAddressDetails @@ -493,6 +504,7 @@ from fireblocks.models.fixed_amount_type_enum import FixedAmountTypeEnum from fireblocks.models.fixed_fee import FixedFee from fireblocks.models.flow_direction import FlowDirection +from fireblocks.models.fok_time_in_force import FokTimeInForce from fireblocks.models.fps_hk_address import FpsHkAddress from fireblocks.models.fps_hk_destination import FpsHkDestination from fireblocks.models.fps_hk_payment_info import FpsHkPaymentInfo @@ -609,6 +621,10 @@ from fireblocks.models.legacy_src_or_dest_attributes_inner import LegacySrcOrDestAttributesInner from fireblocks.models.legal_entity_registration import LegalEntityRegistration from fireblocks.models.lei_status import LeiStatus +from fireblocks.models.limit_execution_request_details import LimitExecutionRequestDetails +from fireblocks.models.limit_execution_response_details import LimitExecutionResponseDetails +from fireblocks.models.limit_type_details import LimitTypeDetails +from fireblocks.models.limit_type_enum import LimitTypeEnum from fireblocks.models.linked_tokens_count import LinkedTokensCount from fireblocks.models.list_approval_api_keys_response import ListApprovalApiKeysResponse from fireblocks.models.list_approvals_response import ListApprovalsResponse @@ -768,6 +784,8 @@ from fireblocks.models.position import Position from fireblocks.models.position2 import Position2 from fireblocks.models.position_related_transaction import PositionRelatedTransaction +from fireblocks.models.post_trade_settlement import PostTradeSettlement +from fireblocks.models.post_trade_settlement_type import PostTradeSettlementType from fireblocks.models.postal_address import PostalAddress from fireblocks.models.pre_screening import PreScreening from fireblocks.models.prefunded_settlement import PrefundedSettlement @@ -1099,6 +1117,7 @@ from fireblocks.models.templates_paginated_response import TemplatesPaginatedResponse from fireblocks.models.third_party_routing import ThirdPartyRouting from fireblocks.models.time_based_trigger import TimeBasedTrigger +from fireblocks.models.time_in_force import TimeInForce from fireblocks.models.time_period_config import TimePeriodConfig from fireblocks.models.time_period_match_type import TimePeriodMatchType from fireblocks.models.to_collateral_transaction import ToCollateralTransaction @@ -1244,10 +1263,12 @@ from fireblocks.models.update_token_ownership_status_dto import UpdateTokenOwnershipStatusDto from fireblocks.models.update_vault_account_asset_address_request import UpdateVaultAccountAssetAddressRequest from fireblocks.models.update_vault_account_request import UpdateVaultAccountRequest +from fireblocks.models.update_webhook_mtls_config_request import UpdateWebhookMtlsConfigRequest from fireblocks.models.update_webhook_oauth_request import UpdateWebhookOauthRequest from fireblocks.models.update_webhook_request import UpdateWebhookRequest from fireblocks.models.update_workflow_status_request import UpdateWorkflowStatusRequest from fireblocks.models.update_workflow_status_response import UpdateWorkflowStatusResponse +from fireblocks.models.upsert_utxo_selection_config_request import UpsertUtxoSelectionConfigRequest from fireblocks.models.us_wire_payment_info import UsWirePaymentInfo from fireblocks.models.usdc_gateway_wallet_asset import UsdcGatewayWalletAsset from fireblocks.models.usdc_gateway_wallet_info_response import UsdcGatewayWalletInfoResponse @@ -1264,9 +1285,15 @@ from fireblocks.models.utxo_input import UtxoInput from fireblocks.models.utxo_input2 import UtxoInput2 from fireblocks.models.utxo_input_selection import UtxoInputSelection +from fireblocks.models.utxo_label_failure import UtxoLabelFailure +from fireblocks.models.utxo_labels_error_response import UtxoLabelsErrorResponse from fireblocks.models.utxo_output import UtxoOutput +from fireblocks.models.utxo_selection_config_entry import UtxoSelectionConfigEntry +from fireblocks.models.utxo_selection_config_response import UtxoSelectionConfigResponse +from fireblocks.models.utxo_selection_config_source_enum import UtxoSelectionConfigSourceEnum from fireblocks.models.utxo_selection_filters import UtxoSelectionFilters from fireblocks.models.utxo_selection_params import UtxoSelectionParams +from fireblocks.models.utxo_selection_strategy_enum import UtxoSelectionStrategyEnum from fireblocks.models.validate_address_response import ValidateAddressResponse from fireblocks.models.validate_layer_zero_channel_response import ValidateLayerZeroChannelResponse from fireblocks.models.validation_key_dto import ValidationKeyDto @@ -1290,7 +1317,7 @@ from fireblocks.models.webhook import Webhook from fireblocks.models.webhook_event import WebhookEvent from fireblocks.models.webhook_metric import WebhookMetric -from fireblocks.models.webhook_mtls import WebhookMtls +from fireblocks.models.webhook_mtls_config import WebhookMtlsConfig from fireblocks.models.webhook_mtls_csr_response import WebhookMtlsCsrResponse from fireblocks.models.webhook_mtls_key_algorithm import WebhookMtlsKeyAlgorithm from fireblocks.models.webhook_oauth_credentials import WebhookOauthCredentials diff --git a/fireblocks/models/webhook_mtls.py b/fireblocks/models/address_registry_create_proof_of_ownership_request.py similarity index 78% rename from fireblocks/models/webhook_mtls.py rename to fireblocks/models/address_registry_create_proof_of_ownership_request.py index c664d3e7..4ba0e24c 100644 --- a/fireblocks/models/webhook_mtls.py +++ b/fireblocks/models/address_registry_create_proof_of_ownership_request.py @@ -23,12 +23,12 @@ from typing import Optional, Set from typing_extensions import Self -class WebhookMtls(BaseModel): +class AddressRegistryCreateProofOfOwnershipRequest(BaseModel): """ - mTLS configuration for the webhook. On responses, present only when a signed client certificate is set. On requests, provide a signed client certificate to enable mTLS, or null to remove it. + Request body for creating an Address Registry Proof of Ownership PDF export. """ # noqa: E501 - client_signed_cert: StrictStr = Field(description="Signed client certificate PEM used for mTLS when delivering notifications.", alias="clientSignedCert") - __properties: ClassVar[List[str]] = ["clientSignedCert"] + address: StrictStr = Field(description="Blockchain address to prove ownership for (must resolve to the caller's workspace). Same format expectations as the `address` path parameter on `GET /v1/address_registry/legal_entities/{address}`.") + __properties: ClassVar[List[str]] = ["address"] model_config = ConfigDict( populate_by_name=True, @@ -48,7 +48,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of WebhookMtls from a JSON string""" + """Create an instance of AddressRegistryCreateProofOfOwnershipRequest from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -73,7 +73,7 @@ def to_dict(self) -> Dict[str, Any]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of WebhookMtls from a dict""" + """Create an instance of AddressRegistryCreateProofOfOwnershipRequest from a dict""" if obj is None: return None @@ -81,7 +81,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate({ - "clientSignedCert": obj.get("clientSignedCert") + "address": obj.get("address") }) return _obj diff --git a/fireblocks/models/address_registry_create_proof_of_ownership_response.py b/fireblocks/models/address_registry_create_proof_of_ownership_response.py new file mode 100644 index 00000000..8cc1f7c5 --- /dev/null +++ b/fireblocks/models/address_registry_create_proof_of_ownership_response.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictStr +from typing import Any, ClassVar, Dict, List, Union +from typing import Optional, Set +from typing_extensions import Self + +class AddressRegistryCreateProofOfOwnershipResponse(BaseModel): + """ + Address Registry Proof of Ownership PDF export, created successfully. + """ # noqa: E501 + pdf: Union[StrictBytes, StrictStr] = Field(description="Base64-encoded Proof of Ownership PDF bytes. Fireblocks does not store the PDF: save it immediately, there is no re-download route.") + export_id: StrictStr = Field(description="Stable id of the online-verifiable export record.", alias="exportId") + verification_hash: StrictStr = Field(description="Verification hash bound to the export (also printed on the PDF).", alias="verificationHash") + expires_at: StrictStr = Field(description="Inclusive last UTC calendar day online verification is available (`YYYY-MM-DD`).", alias="expiresAt") + __properties: ClassVar[List[str]] = ["pdf", "exportId", "verificationHash", "expiresAt"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AddressRegistryCreateProofOfOwnershipResponse from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AddressRegistryCreateProofOfOwnershipResponse from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "pdf": obj.get("pdf"), + "exportId": obj.get("exportId"), + "verificationHash": obj.get("verificationHash"), + "expiresAt": obj.get("expiresAt") + }) + return _obj + + diff --git a/fireblocks/models/address_registry_legal_entity.py b/fireblocks/models/address_registry_legal_entity.py index b48a23b5..e089b1e7 100644 --- a/fireblocks/models/address_registry_legal_entity.py +++ b/fireblocks/models/address_registry_legal_entity.py @@ -20,7 +20,6 @@ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr from typing import Any, ClassVar, Dict, List -from fireblocks.models.address_registry_travel_rule_provider import AddressRegistryTravelRuleProvider from typing import Optional, Set from typing_extensions import Self @@ -32,9 +31,10 @@ class AddressRegistryLegalEntity(BaseModel): entity_name: StrictStr = Field(description="Legal entity display name.", alias="entityName") jurisdiction: StrictStr = Field(description="Jurisdiction (e.g. ISO 3166-1 alpha-2 country code).") lei: StrictStr = Field(description="Legal Entity Identifier when available. Empty when `leiData` is `false`.") - travel_rule_providers: List[AddressRegistryTravelRuleProvider] = Field(alias="travelRuleProviders") + travel_rule_providers: List[StrictStr] = Field(alias="travelRuleProviders") email: StrictStr = Field(description="Travel Rule contact email when available.") - __properties: ClassVar[List[str]] = ["leiData", "entityName", "jurisdiction", "lei", "travelRuleProviders", "email"] + proof_of_ownership_available: StrictBool = Field(description="Whether the caller can currently create a Proof of Ownership PDF for this address (`POST /v1/address_registry/proof_of_ownership_exports`).", alias="proofOfOwnershipAvailable") + __properties: ClassVar[List[str]] = ["leiData", "entityName", "jurisdiction", "lei", "travelRuleProviders", "email", "proofOfOwnershipAvailable"] model_config = ConfigDict( populate_by_name=True, @@ -92,7 +92,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "jurisdiction": obj.get("jurisdiction"), "lei": obj.get("lei"), "travelRuleProviders": obj.get("travelRuleProviders"), - "email": obj.get("email") + "email": obj.get("email"), + "proofOfOwnershipAvailable": obj.get("proofOfOwnershipAvailable") }) return _obj diff --git a/fireblocks/models/address_registry_verify_proof_of_ownership_request.py b/fireblocks/models/address_registry_verify_proof_of_ownership_request.py new file mode 100644 index 00000000..4374f487 --- /dev/null +++ b/fireblocks/models/address_registry_verify_proof_of_ownership_request.py @@ -0,0 +1,105 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from typing import Optional, Set +from typing_extensions import Self + +class AddressRegistryVerifyProofOfOwnershipRequest(BaseModel): + """ + Request body for verifying an Address Registry Proof of Ownership export. + """ # noqa: E501 + export_id: Annotated[str, Field(min_length=1, strict=True)] = Field(description="Export id from create / the PDF.", alias="exportId") + verification_hash: Annotated[str, Field(min_length=1, strict=True)] = Field(description="Verification hash from create / the PDF (exact match required).", alias="verificationHash") + address: Annotated[str, Field(min_length=1, strict=True)] = Field(description="Address from the PDF (exact UTF-8 match to the stored export).") + expires_at: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="Optional but recommended: the PDF's \"Online verification available until\" date (`YYYY-MM-DD`), which speeds up the lookup. A wrong value yields `valid: false` even if the export exists — copy it exactly from the PDF, or omit it.", alias="expiresAt") + __properties: ClassVar[List[str]] = ["exportId", "verificationHash", "address", "expiresAt"] + + @field_validator('expires_at') + def expires_at_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^$|^\d{4}-\d{2}-\d{2}$", value): + raise ValueError(r"must validate the regular expression /^$|^\d{4}-\d{2}-\d{2}$/") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AddressRegistryVerifyProofOfOwnershipRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AddressRegistryVerifyProofOfOwnershipRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "exportId": obj.get("exportId"), + "verificationHash": obj.get("verificationHash"), + "address": obj.get("address"), + "expiresAt": obj.get("expiresAt") + }) + return _obj + + diff --git a/fireblocks/models/address_registry_verify_proof_of_ownership_response.py b/fireblocks/models/address_registry_verify_proof_of_ownership_response.py new file mode 100644 index 00000000..0124d212 --- /dev/null +++ b/fireblocks/models/address_registry_verify_proof_of_ownership_response.py @@ -0,0 +1,90 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr +from typing import Any, ClassVar, Dict, List +from typing import Optional, Set +from typing_extensions import Self + +class AddressRegistryVerifyProofOfOwnershipResponse(BaseModel): + """ + Online verification result. Authenticated calls always return HTTP 200 with this body (`valid: true` or `valid: false`); unknown/expired exports do not use 404. + """ # noqa: E501 + valid: StrictBool = Field(description="Whether the stored export matches the supplied verification hash and address within retention.") + expires_at: StrictStr = Field(description="Inclusive last UTC calendar day (`YYYY-MM-DD`) when `valid` is true; empty string when `valid` is false.", alias="expiresAt") + __properties: ClassVar[List[str]] = ["valid", "expiresAt"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AddressRegistryVerifyProofOfOwnershipResponse from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AddressRegistryVerifyProofOfOwnershipResponse from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "valid": obj.get("valid"), + "expiresAt": obj.get("expiresAt") + }) + return _obj + + diff --git a/fireblocks/models/allocation_withdraw_payload.py b/fireblocks/models/allocation_withdraw_payload.py index a0e84035..4e67253e 100644 --- a/fireblocks/models/allocation_withdraw_payload.py +++ b/fireblocks/models/allocation_withdraw_payload.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator +from pydantic import BaseModel, ConfigDict, Field, StrictStr from typing import Any, ClassVar, Dict, List from typing import Optional, Set from typing_extensions import Self @@ -27,17 +27,8 @@ class AllocationWithdrawPayload(BaseModel): """ AllocationWithdrawPayload """ # noqa: E501 - vault_account_id: StrictStr = Field(description="The vault account whose Canton wallet acts here.", alias="vaultAccountId") - asset: StrictStr = Field(description="Chain asset — `CANTON` or `CANTON_TEST`.") allocation_transaction_id: StrictStr = Field(description="The Fireblocks transaction id of the outgoing response that created the allocation. The allocation is resolved from it — Canton contract ids are never accepted here.", alias="allocationTransactionId") - __properties: ClassVar[List[str]] = ["vaultAccountId", "asset", "allocationTransactionId"] - - @field_validator('asset') - def asset_validate_enum(cls, value): - """Validates the enum""" - if value not in set(['CANTON', 'CANTON_TEST']): - raise ValueError("must be one of enum values ('CANTON', 'CANTON_TEST')") - return value + __properties: ClassVar[List[str]] = ["allocationTransactionId"] model_config = ConfigDict( populate_by_name=True, @@ -90,8 +81,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate({ - "vaultAccountId": obj.get("vaultAccountId"), - "asset": obj.get("asset"), "allocationTransactionId": obj.get("allocationTransactionId") }) return _obj diff --git a/fireblocks/models/attach_detach_utxo_labels_request.py b/fireblocks/models/attach_detach_utxo_labels_request.py index 49c411f3..28636161 100644 --- a/fireblocks/models/attach_detach_utxo_labels_request.py +++ b/fireblocks/models/attach_detach_utxo_labels_request.py @@ -29,7 +29,7 @@ class AttachDetachUtxoLabelsRequest(BaseModel): """ AttachDetachUtxoLabelsRequest """ # noqa: E501 - utxo_identifiers: Annotated[List[UtxoIdentifier], Field(min_length=1, max_length=200)] = Field(description="List of UTXO identifiers to apply label changes to", alias="utxoIdentifiers") + utxo_identifiers: Annotated[List[UtxoIdentifier], Field(min_length=1, max_length=50)] = Field(description="List of UTXO identifiers to apply label changes to", alias="utxoIdentifiers") labels_to_attach: Optional[Annotated[List[Annotated[str, Field(strict=True, max_length=30)]], Field(min_length=1, max_length=5)]] = Field(default=None, description="Labels to attach to the specified UTXOs. At least one of labelsToAttach or labelsToDetach must be provided.", alias="labelsToAttach") labels_to_detach: Optional[Annotated[List[Annotated[str, Field(strict=True, max_length=30)]], Field(min_length=1, max_length=5)]] = Field(default=None, description="Labels to detach from the specified UTXOs. At least one of labelsToAttach or labelsToDetach must be provided.", alias="labelsToDetach") __properties: ClassVar[List[str]] = ["utxoIdentifiers", "labelsToAttach", "labelsToDetach"] diff --git a/fireblocks/models/canton_call_details.py b/fireblocks/models/canton_call_details.py new file mode 100644 index 00000000..22bcfe20 --- /dev/null +++ b/fireblocks/models/canton_call_details.py @@ -0,0 +1,98 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.canton_domain_enum import CantonDomainEnum +from fireblocks.models.canton_vendor_enum import CantonVendorEnum +from typing import Optional, Set +from typing_extensions import Self + +class CantonCallDetails(BaseModel): + """ + A call made through the Canton calls endpoint. Written once and never changed. + """ # noqa: E501 + version: Optional[StrictInt] = Field(default=None, description="The shape of this block. Stamped at creation and never changed, so a reader always knows which version it is holding.") + domain: Optional[CantonDomainEnum] = None + type: Optional[StrictStr] = Field(default=None, description="The call type, matching the `type` sent when the call was created.") + vendor: Optional[CantonVendorEnum] = None + original_transaction_id: Optional[StrictStr] = Field(default=None, description="The transaction this call acts on. On a withdraw it is the allocation that was withdrawn, so the withdraw transaction read on its own still says what it withdrew.", alias="originalTransactionId") + __properties: ClassVar[List[str]] = ["version", "domain", "type", "vendor", "originalTransactionId"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CantonCallDetails from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CantonCallDetails from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "version": obj.get("version"), + "domain": obj.get("domain"), + "type": obj.get("type"), + "vendor": obj.get("vendor"), + "originalTransactionId": obj.get("originalTransactionId") + }) + return _obj + + diff --git a/fireblocks/models/canton_details.py b/fireblocks/models/canton_details.py new file mode 100644 index 00000000..5875d5a6 --- /dev/null +++ b/fireblocks/models/canton_details.py @@ -0,0 +1,104 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field +from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.canton_call_details import CantonCallDetails +from fireblocks.models.canton_offer_response_details import CantonOfferResponseDetails +from fireblocks.models.canton_settlement_details import CantonSettlementDetails +from typing import Optional, Set +from typing_extensions import Self + +class CantonDetails(BaseModel): + """ + Canton transaction context. Present on transactions that belong to a Canton flow, and the authoritative signal that a transaction IS one — do not branch on `operation`, which is `CANTON_CALL` for customer-initiated calls but `TRANSFER` for an incoming Canton transfer offer. **No `cantonDetails` at all means the transaction is not a Canton item.** The service sets exactly one of `offerResponse`, `call` or `settlement`. That is a guarantee about what is sent, NOT a constraint this schema enforces: the three are declared as independent optional properties on purpose, so that a response carrying a block a client does not yet know about — or a row written before a block type existed — still validates. Response schemas here stay additive. Read the block you recognise; do not reject a payload for the shape of the others. Every block carries `version`, stamped when the transaction is created and never changed — a transaction written today keeps its shape, so `version` is how you know which shape you are reading. + """ # noqa: E501 + offer_response: Optional[CantonOfferResponseDetails] = Field(default=None, alias="offerResponse") + call: Optional[CantonCallDetails] = None + settlement: Optional[CantonSettlementDetails] = None + __properties: ClassVar[List[str]] = ["offerResponse", "call", "settlement"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CantonDetails from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of offer_response + if self.offer_response: + _dict['offerResponse'] = self.offer_response.to_dict() + # override the default output from pydantic by calling `to_dict()` of call + if self.call: + _dict['call'] = self.call.to_dict() + # override the default output from pydantic by calling `to_dict()` of settlement + if self.settlement: + _dict['settlement'] = self.settlement.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CantonDetails from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "offerResponse": CantonOfferResponseDetails.from_dict(obj["offerResponse"]) if obj.get("offerResponse") is not None else None, + "call": CantonCallDetails.from_dict(obj["call"]) if obj.get("call") is not None else None, + "settlement": CantonSettlementDetails.from_dict(obj["settlement"]) if obj.get("settlement") is not None else None + }) + return _obj + + diff --git a/fireblocks/models/address_registry_travel_rule_provider.py b/fireblocks/models/canton_domain_enum.py similarity index 65% rename from fireblocks/models/address_registry_travel_rule_provider.py rename to fireblocks/models/canton_domain_enum.py index b308f5f9..a788bde9 100644 --- a/fireblocks/models/address_registry_travel_rule_provider.py +++ b/fireblocks/models/canton_domain_enum.py @@ -19,22 +19,21 @@ from typing_extensions import Self -class AddressRegistryTravelRuleProvider(str, Enum): +class CantonDomainEnum(str, Enum): """ - Travel Rule provider identifier (string enum value). + The Canton domain a transaction belongs to. Singular, and it matches the prefix of the `type` / `responseType` values in the same domain character for character. """ """ allowed enum values """ - TRAVEL_RULE_PROVIDER_NOTABENE = 'TRAVEL_RULE_PROVIDER_NOTABENE' - TRAVEL_RULE_PROVIDER_SYGNA = 'TRAVEL_RULE_PROVIDER_SYGNA' - TRAVEL_RULE_PROVIDER_TRISA = 'TRAVEL_RULE_PROVIDER_TRISA' - TRAVEL_RULE_PROVIDER_OPENVASP = 'TRAVEL_RULE_PROVIDER_OPENVASP' + ONBOARDING = 'ONBOARDING' + ALLOCATION = 'ALLOCATION' + TRANSFER = 'TRANSFER' @classmethod def from_json(cls, json_str: str) -> Self: - """Create an instance of AddressRegistryTravelRuleProvider from a JSON string""" + """Create an instance of CantonDomainEnum from a JSON string""" return cls(json.loads(json_str)) diff --git a/fireblocks/models/canton_offer_response_details.py b/fireblocks/models/canton_offer_response_details.py new file mode 100644 index 00000000..dc15ad69 --- /dev/null +++ b/fireblocks/models/canton_offer_response_details.py @@ -0,0 +1,115 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.canton_domain_enum import CantonDomainEnum +from fireblocks.models.canton_vendor_enum import CantonVendorEnum +from typing import Optional, Set +from typing_extensions import Self + +class CantonOfferResponseDetails(BaseModel): + """ + The transaction belongs to an offer conversation: the offer itself, the response to it, or a leg that carries no answer of its own. The only block that changes over a transaction's lifetime. + """ # noqa: E501 + version: Optional[StrictInt] = Field(default=None, description="The shape of this block. Stamped at creation and never changed, so a reader always knows which version it is holding.") + domain: Optional[CantonDomainEnum] = None + vendor: Optional[CantonVendorEnum] = None + available_responses: Optional[List[StrictStr]] = Field(default=None, description="The responses that can be sent for this offer right now. An empty array means nothing is answerable on this transaction — which is the difference between an actionable offer and a linked leg that shares its sub-status.", alias="availableResponses") + expires_at: Optional[datetime] = Field(default=None, description="When the offer expires, where it has a deadline.", alias="expiresAt") + approval_transaction_id: Optional[StrictStr] = Field(default=None, description="The response transaction, once one has been dispatched for this offer.", alias="approvalTransactionId") + original_transaction_id: Optional[StrictStr] = Field(default=None, description="The transaction this one relates to — the offer a response answered.", alias="originalTransactionId") + verdict: Optional[StrictStr] = Field(default=None, description="The outcome, set once the transaction reaches a terminal status.") + __properties: ClassVar[List[str]] = ["version", "domain", "vendor", "availableResponses", "expiresAt", "approvalTransactionId", "originalTransactionId", "verdict"] + + @field_validator('verdict') + def verdict_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in set(['ACCEPTED', 'REJECTED']): + raise ValueError("must be one of enum values ('ACCEPTED', 'REJECTED')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CantonOfferResponseDetails from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CantonOfferResponseDetails from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "version": obj.get("version"), + "domain": obj.get("domain"), + "vendor": obj.get("vendor"), + "availableResponses": obj.get("availableResponses"), + "expiresAt": obj.get("expiresAt"), + "approvalTransactionId": obj.get("approvalTransactionId"), + "originalTransactionId": obj.get("originalTransactionId"), + "verdict": obj.get("verdict") + }) + return _obj + + diff --git a/fireblocks/models/canton_settlement_details.py b/fireblocks/models/canton_settlement_details.py new file mode 100644 index 00000000..4c80b922 --- /dev/null +++ b/fireblocks/models/canton_settlement_details.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.canton_domain_enum import CantonDomainEnum +from typing import Optional, Set +from typing_extensions import Self + +class CantonSettlementDetails(BaseModel): + """ + The credit side of a delivery-versus-payment: a venue settled an allocation. Written once, at creation — the transaction is already complete when it appears. + """ # noqa: E501 + version: Optional[StrictInt] = Field(default=None, description="The shape of this block. Stamped at creation and never changed, so a reader always knows which version it is holding.") + domain: Optional[CantonDomainEnum] = None + type: Optional[StrictStr] = Field(default=None, description="The settlement type.") + original_transaction_id: Optional[StrictStr] = Field(default=None, description="The allocation this receipt settles.", alias="originalTransactionId") + __properties: ClassVar[List[str]] = ["version", "domain", "type", "originalTransactionId"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CantonSettlementDetails from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CantonSettlementDetails from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "version": obj.get("version"), + "domain": obj.get("domain"), + "type": obj.get("type"), + "originalTransactionId": obj.get("originalTransactionId") + }) + return _obj + + diff --git a/fireblocks/models/canton_vendor_enum.py b/fireblocks/models/canton_vendor_enum.py new file mode 100644 index 00000000..1eecb7d7 --- /dev/null +++ b/fireblocks/models/canton_vendor_enum.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class CantonVendorEnum(str, Enum): + """ + The vendor whose flow this is. Present only where the flow is vendor-specific — absent on vendor-neutral Splice operations such as allocation withdraw. + """ + + """ + allowed enum values + """ + DTCC = 'DTCC' + TRADEWEB = 'TRADEWEB' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of CantonVendorEnum from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/fireblocks/models/create_webhook_mtls_config_request.py b/fireblocks/models/create_webhook_mtls_config_request.py new file mode 100644 index 00000000..0204c66f --- /dev/null +++ b/fireblocks/models/create_webhook_mtls_config_request.py @@ -0,0 +1,101 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from typing import Optional, Set +from typing_extensions import Self + +class CreateWebhookMtlsConfigRequest(BaseModel): + """ + CreateWebhookMtlsConfigRequest + """ # noqa: E501 + name: Optional[Annotated[str, Field(strict=True, max_length=255)]] = Field(default=None, description="A label for this mTLS configuration, to tell several certificates apart. Letters, digits and spaces only.") + signed_cert: StrictStr = Field(description="Signed client certificate PEM, issued for the CSR from `GET /v1/webhooks_settings/mtls_csr`. The private key it belongs to is derived from the certificate itself.", alias="signedCert") + __properties: ClassVar[List[str]] = ["name", "signedCert"] + + @field_validator('name') + def name_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^[a-zA-Z0-9 ]*$", value): + raise ValueError(r"must validate the regular expression /^[a-zA-Z0-9 ]*$/") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CreateWebhookMtlsConfigRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CreateWebhookMtlsConfigRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "name": obj.get("name"), + "signedCert": obj.get("signedCert") + }) + return _obj + + diff --git a/fireblocks/models/create_webhook_oauth_request.py b/fireblocks/models/create_webhook_oauth_request.py index e492e09a..3c587aab 100644 --- a/fireblocks/models/create_webhook_oauth_request.py +++ b/fireblocks/models/create_webhook_oauth_request.py @@ -36,8 +36,8 @@ class CreateWebhookOauthRequest(BaseModel): custom_jwt_claims: Optional[Dict[str, Any]] = Field(default=None, description="Extra claims for the JWT assertion. Used only when `authMethod` is `client_secret_jwt`. The usual one to set is `aud`, which defaults to the token endpoint URL; some authorization servers expect their own identifier instead. A value may be any JSON type except `null` — `null` is reserved for deleting a claim on update. `iss`, `sub`, `jti`, `iat` and `exp` are set by Fireblocks and cannot be overridden. Names are case-sensitive. The whole object must be under 16 KB. Values are write-only; responses return only the claim names. On update this merges claim by claim rather than replacing — see `WebhookOauthCustomJwtClaimsUpdate`.", alias="customJwtClaims") custom_body_params: Optional[Dict[str, StrictStr]] = Field(default=None, description="Extra parameters for the token request body — `scope` most commonly, sometimes `audience` or `resource`. Applies to every authentication method. Values must be strings, because the token request body is form-encoded rather than JSON. An empty string is allowed. `grant_type`, `client_id`, `client_secret`, `client_assertion` and `client_assertion_type` are set by Fireblocks and cannot be overridden. Names are case-sensitive. The whole object must be under 16 KB. Values are write-only; responses return only the parameter names. On update this merges key by key rather than replacing — see `WebhookOauthCustomBodyParamsUpdate`.", alias="customBodyParams") custom_headers: Optional[Dict[str, StrictStr]] = Field(default=None, description="Extra HTTP headers for **the token request to your authorization server** — not for the webhook delivery, which has its own separate `customHeaders`. A gateway API key is the usual case. Values must be strings; an empty string is allowed. Names are matched case-insensitively, so two names differing only in case are a duplicate. Names are stored and returned lowercased, so `X-Api-Key` comes back as `x-api-key`. `Content-Type`, `Content-Length` and `Host` are set by Fireblocks and cannot be overridden. `Authorization` can be set with `client_secret_post` or `client_secret_jwt`, which send the credentials in the body — useful when your token endpoint sits behind a gateway. It is rejected with `client_secret_basic`, which sends the credentials in that header. Values have no length limit of their own; the whole object must be under 16 KB when serialized as UTF-8. Values are write-only; responses return only the header names. On update this merges name by name rather than replacing — see `WebhookOauthCustomHeadersUpdate`.", alias="customHeaders") - mtls_client_signed_cert: Optional[StrictStr] = Field(default=None, description="PEM-encoded client certificate for mTLS when fetching tokens. Must be a valid X.509 certificate inside its validity window.", alias="mtlsClientSignedCert") - __properties: ClassVar[List[str]] = ["name", "clientId", "clientSecret", "url", "authMethod", "customJwtClaims", "customBodyParams", "customHeaders", "mtlsClientSignedCert"] + webhook_mtls_id: Optional[StrictStr] = Field(default=None, description="The id of the mTLS configuration presented to the token endpoint, from `/v1/webhooks_settings/mtls`. It can be the same configuration a webhook uses, so one certificate, signed from `GET /v1/webhooks_settings/mtls_csr`, serves both the token endpoint and the receiver. Omit, or send `null`, for a token request without mTLS. Requires the mTLS feature to be enabled for the workspace (`403` otherwise), a configuration of this workspace (`404` otherwise), and one linked to a private key (`400` otherwise).", alias="webhookMtlsId") + __properties: ClassVar[List[str]] = ["name", "clientId", "clientSecret", "url", "authMethod", "customJwtClaims", "customBodyParams", "customHeaders", "webhookMtlsId"] @field_validator('url') def url_validate_regular_expression(cls, value): @@ -100,6 +100,11 @@ def to_dict(self) -> Dict[str, Any]: if self.custom_headers is None and "custom_headers" in self.model_fields_set: _dict['customHeaders'] = None + # set to None if webhook_mtls_id (nullable) is None + # and model_fields_set contains the field + if self.webhook_mtls_id is None and "webhook_mtls_id" in self.model_fields_set: + _dict['webhookMtlsId'] = None + return _dict @classmethod @@ -120,7 +125,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "customJwtClaims": obj.get("customJwtClaims"), "customBodyParams": obj.get("customBodyParams"), "customHeaders": obj.get("customHeaders"), - "mtlsClientSignedCert": obj.get("mtlsClientSignedCert") + "webhookMtlsId": obj.get("webhookMtlsId") }) return _obj diff --git a/fireblocks/models/create_webhook_request.py b/fireblocks/models/create_webhook_request.py index 5f830152..7946b404 100644 --- a/fireblocks/models/create_webhook_request.py +++ b/fireblocks/models/create_webhook_request.py @@ -22,7 +22,6 @@ from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated from fireblocks.models.webhook_event import WebhookEvent -from fireblocks.models.webhook_mtls import WebhookMtls from typing import Optional, Set from typing_extensions import Self @@ -34,10 +33,10 @@ class CreateWebhookRequest(BaseModel): description: Optional[Annotated[str, Field(min_length=1, strict=True)]] = Field(default=None, description="description of the webhook. should not contain special characters.") events: List[WebhookEvent] = Field(description="event types the webhook will subscribe to") enabled: Optional[StrictBool] = Field(default=True, description="The status of the webhook. If false, the webhook will not receive notifications.") - mtls: Optional[WebhookMtls] = None + webhook_mtls_id: Optional[StrictStr] = Field(default=None, description="The id of the mTLS configuration this webhook presents when delivering, from `/v1/webhooks_settings/mtls`. Several webhooks may share one configuration, so replacing its certificate covers all of them at once. Send `null` to stop using mTLS for this webhook.", alias="webhookMtlsId") webhook_oauth_id: Optional[StrictStr] = Field(default=None, description="The id of the OAuth credentials this webhook authenticates with, from `/v1/webhooks_settings/oauth`. Several webhooks may share one credential set, so rotating its client secret covers all of them at once. Send `null` to stop using OAuth for this webhook. Cannot be combined with an `authorization` custom header on the same webhook; a request that would leave both set is rejected.", alias="webhookOauthId") custom_headers: Optional[Dict[str, Any]] = Field(default=None, description="Custom HTTP headers attached to every notification delivered by this webhook. A value is a string, sent as one header line, or an array of strings, sent as one header line per element under the same name. `Cookie` and `Authorization` accept only a string. An empty array is rejected — leave the name out instead. At most 10 headers, counted by name — an array value counts once, however many lines it sends. Names must be valid HTTP header tokens, are case-insensitive, and are at most 128 characters. A value may be empty and has no length limit of its own; the whole object must be under 16 KB when serialized as UTF-8. A value that large may still be refused by your own endpoint, since web servers commonly cap the whole request header block at around 8 KB. Reserved names: `Host`, `Content-Type`, `Content-Length`, `Transfer-Encoding`, `Connection`, `User-Agent`, `Accept`, `Accept-Encoding`, `Fireblocks-Signature`, `Fireblocks-Webhook-Signature`. `Authorization` may be set, but not together with `webhookOauthId`; a request that would leave both set is rejected. Values are write-only; responses return only the header names.", alias="customHeaders") - __properties: ClassVar[List[str]] = ["url", "description", "events", "enabled", "mtls", "webhookOauthId", "customHeaders"] + __properties: ClassVar[List[str]] = ["url", "description", "events", "enabled", "webhookMtlsId", "webhookOauthId", "customHeaders"] model_config = ConfigDict( populate_by_name=True, @@ -78,13 +77,10 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of mtls - if self.mtls: - _dict['mtls'] = self.mtls.to_dict() - # set to None if mtls (nullable) is None + # set to None if webhook_mtls_id (nullable) is None # and model_fields_set contains the field - if self.mtls is None and "mtls" in self.model_fields_set: - _dict['mtls'] = None + if self.webhook_mtls_id is None and "webhook_mtls_id" in self.model_fields_set: + _dict['webhookMtlsId'] = None # set to None if webhook_oauth_id (nullable) is None # and model_fields_set contains the field @@ -107,7 +103,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "description": obj.get("description"), "events": obj.get("events"), "enabled": obj.get("enabled") if obj.get("enabled") is not None else True, - "mtls": WebhookMtls.from_dict(obj["mtls"]) if obj.get("mtls") is not None else None, + "webhookMtlsId": obj.get("webhookMtlsId"), "webhookOauthId": obj.get("webhookOauthId"), "customHeaders": obj.get("customHeaders") }) diff --git a/fireblocks/models/delete_webhook_mtls_config_response.py b/fireblocks/models/delete_webhook_mtls_config_response.py new file mode 100644 index 00000000..7c5ee4d8 --- /dev/null +++ b/fireblocks/models/delete_webhook_mtls_config_response.py @@ -0,0 +1,102 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + +class DeleteWebhookMtlsConfigResponse(BaseModel): + """ + The deleted mTLS configuration, plus the ids of any webhooks and OAuth credentials the delete detached from it. They are only detached by `forceDelete=true`; without it a delete is refused with `409` while anything still references the configuration. + """ # noqa: E501 + id: StrictStr = Field(description="The unique identifier of the mTLS configuration, to be set as `webhookMtlsId` on a webhook or on OAuth credentials.") + name: Optional[StrictStr] = Field(default=None, description="The label given to this mTLS configuration.") + signed_cert: StrictStr = Field(description="The signed client certificate PEM.", alias="signedCert") + expires_at: StrictInt = Field(description="When the certificate itself expires, in milliseconds since the epoch.", alias="expiresAt") + created_at: StrictInt = Field(description="When the certificate was uploaded, in milliseconds since the epoch.", alias="createdAt") + updated_at: StrictInt = Field(description="When this configuration was last changed, in milliseconds since the epoch. Differs from createdAt once the certificate has been replaced or the configuration renamed.", alias="updatedAt") + detached_webhook_ids: List[StrictStr] = Field(description="Webhooks whose `webhookMtlsId` was cleared. The webhooks themselves are not deleted and keep delivering, just without a client certificate. Empty unless `forceDelete=true` detached something.", alias="detachedWebhookIds") + detached_webhook_oauth_ids: List[StrictStr] = Field(description="OAuth credentials whose `webhookMtlsId` was cleared. Their token requests continue without a client certificate. Empty unless `forceDelete=true` detached something.", alias="detachedWebhookOauthIds") + __properties: ClassVar[List[str]] = ["id", "name", "signedCert", "expiresAt", "createdAt", "updatedAt", "detachedWebhookIds", "detachedWebhookOauthIds"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of DeleteWebhookMtlsConfigResponse from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of DeleteWebhookMtlsConfigResponse from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "id": obj.get("id"), + "name": obj.get("name"), + "signedCert": obj.get("signedCert"), + "expiresAt": obj.get("expiresAt"), + "createdAt": obj.get("createdAt"), + "updatedAt": obj.get("updatedAt"), + "detachedWebhookIds": obj.get("detachedWebhookIds"), + "detachedWebhookOauthIds": obj.get("detachedWebhookOauthIds") + }) + return _obj + + diff --git a/fireblocks/models/delete_webhook_oauth_response.py b/fireblocks/models/delete_webhook_oauth_response.py index e806e087..995915e3 100644 --- a/fireblocks/models/delete_webhook_oauth_response.py +++ b/fireblocks/models/delete_webhook_oauth_response.py @@ -35,11 +35,11 @@ class DeleteWebhookOauthResponse(BaseModel): custom_jwt_claims: Optional[List[StrictStr]] = Field(default=None, description="Names of the additional claims placed in the JWT assertion. Claim values are write-only and are never returned. Absent when no custom claims are configured.", alias="customJwtClaims") custom_body_params: Optional[List[StrictStr]] = Field(default=None, description="Names of the additional parameters added to the token request body. Parameter values are write-only and are never returned. Absent when no custom parameters are configured.", alias="customBodyParams") custom_headers: Optional[List[StrictStr]] = Field(default=None, description="Names of the additional HTTP headers added to **the token request sent to the authorization server** — not to the webhook delivery, which has its own separate `customHeaders`. Header values are write-only and are never returned. Absent when no custom headers are configured.", alias="customHeaders") - mtls_client_signed_cert: Optional[StrictStr] = Field(default=None, description="PEM-encoded client certificate used for mTLS when fetching OAuth tokens.", alias="mtlsClientSignedCert") + webhook_mtls_id: Optional[StrictStr] = Field(default=None, description="The id of the mTLS configuration presented to the token endpoint. Absent when the token request does not use mTLS. Read the certificate from `/v1/webhooks_settings/mtls/{id}`.", alias="webhookMtlsId") created_at: StrictInt = Field(description="The date and time the OAuth credentials were created, in milliseconds.", alias="createdAt") updated_at: StrictInt = Field(description="The date and time the OAuth credentials were last updated, in milliseconds.", alias="updatedAt") detached_webhook_ids: List[StrictStr] = Field(description="Webhooks whose `webhookOauthId` was cleared. The webhooks themselves are not deleted and keep delivering, just without an `Authorization` header. Empty unless `forceDelete=true` detached something.", alias="detachedWebhookIds") - __properties: ClassVar[List[str]] = ["id", "name", "clientId", "url", "authMethod", "customJwtClaims", "customBodyParams", "customHeaders", "mtlsClientSignedCert", "createdAt", "updatedAt", "detachedWebhookIds"] + __properties: ClassVar[List[str]] = ["id", "name", "clientId", "url", "authMethod", "customJwtClaims", "customBodyParams", "customHeaders", "webhookMtlsId", "createdAt", "updatedAt", "detachedWebhookIds"] model_config = ConfigDict( populate_by_name=True, @@ -100,7 +100,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "customJwtClaims": obj.get("customJwtClaims"), "customBodyParams": obj.get("customBodyParams"), "customHeaders": obj.get("customHeaders"), - "mtlsClientSignedCert": obj.get("mtlsClientSignedCert"), + "webhookMtlsId": obj.get("webhookMtlsId"), "createdAt": obj.get("createdAt"), "updatedAt": obj.get("updatedAt"), "detachedWebhookIds": obj.get("detachedWebhookIds") diff --git a/fireblocks/models/address_registry_error.py b/fireblocks/models/effective_utxo_selection_config.py similarity index 70% rename from fireblocks/models/address_registry_error.py rename to fireblocks/models/effective_utxo_selection_config.py index 95617f11..76430cce 100644 --- a/fireblocks/models/address_registry_error.py +++ b/fireblocks/models/effective_utxo_selection_config.py @@ -18,18 +18,20 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr -from typing import Any, ClassVar, Dict, List, Optional +from pydantic import BaseModel, ConfigDict +from typing import Any, ClassVar, Dict, List +from fireblocks.models.utxo_selection_config_source_enum import UtxoSelectionConfigSourceEnum +from fireblocks.models.utxo_selection_strategy_enum import UtxoSelectionStrategyEnum from typing import Optional, Set from typing_extensions import Self -class AddressRegistryError(BaseModel): +class EffectiveUtxoSelectionConfig(BaseModel): """ - Error body for address registry operations (4xx and 5xx). + EffectiveUtxoSelectionConfig """ # noqa: E501 - code: Optional[StrictInt] = Field(default=None, description="Application error code when present. For HTTP 400 on legal-entity lookup, distinguish: 4100 — request validation (e.g. missing, empty, or whitespace-only `address` after trim); 2140 — workspace not opted in to the address registry (`AR_OPT_IN_REQUIRED`). 2142 — not found (404). Other codes may appear, including on server errors. ") - message: StrictStr = Field(description="Human-readable error message") - __properties: ClassVar[List[str]] = ["code", "message"] + strategy: UtxoSelectionStrategyEnum + source: UtxoSelectionConfigSourceEnum + __properties: ClassVar[List[str]] = ["strategy", "source"] model_config = ConfigDict( populate_by_name=True, @@ -49,7 +51,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of AddressRegistryError from a JSON string""" + """Create an instance of EffectiveUtxoSelectionConfig from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -74,7 +76,7 @@ def to_dict(self) -> Dict[str, Any]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of AddressRegistryError from a dict""" + """Create an instance of EffectiveUtxoSelectionConfig from a dict""" if obj is None: return None @@ -82,8 +84,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return cls.model_validate(obj) _obj = cls.model_validate({ - "code": obj.get("code"), - "message": obj.get("message") + "strategy": obj.get("strategy"), + "source": obj.get("source") }) return _obj diff --git a/fireblocks/models/execution_request_details.py b/fireblocks/models/execution_request_details.py index 0fab0ab9..5418968e 100644 --- a/fireblocks/models/execution_request_details.py +++ b/fireblocks/models/execution_request_details.py @@ -18,13 +18,14 @@ import pprint from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator from typing import Any, List, Optional +from fireblocks.models.limit_execution_request_details import LimitExecutionRequestDetails from fireblocks.models.market_execution_request_details import MarketExecutionRequestDetails from fireblocks.models.quote_execution_with_requote_request_details import QuoteExecutionWithRequoteRequestDetails from pydantic import StrictStr, Field from typing import Union, List, Set, Optional, Dict from typing_extensions import Literal, Self -EXECUTIONREQUESTDETAILS_ONE_OF_SCHEMAS = ["MarketExecutionRequestDetails", "QuoteExecutionWithRequoteRequestDetails"] +EXECUTIONREQUESTDETAILS_ONE_OF_SCHEMAS = ["LimitExecutionRequestDetails", "MarketExecutionRequestDetails", "QuoteExecutionWithRequoteRequestDetails"] class ExecutionRequestDetails(BaseModel): """ @@ -34,8 +35,10 @@ class ExecutionRequestDetails(BaseModel): oneof_schema_1_validator: Optional[MarketExecutionRequestDetails] = None # data type: QuoteExecutionWithRequoteRequestDetails oneof_schema_2_validator: Optional[QuoteExecutionWithRequoteRequestDetails] = None - actual_instance: Optional[Union[MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails]] = None - one_of_schemas: Set[str] = { "MarketExecutionRequestDetails", "QuoteExecutionWithRequoteRequestDetails" } + # data type: LimitExecutionRequestDetails + oneof_schema_3_validator: Optional[LimitExecutionRequestDetails] = None + actual_instance: Optional[Union[LimitExecutionRequestDetails, MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails]] = None + one_of_schemas: Set[str] = { "LimitExecutionRequestDetails", "MarketExecutionRequestDetails", "QuoteExecutionWithRequoteRequestDetails" } model_config = ConfigDict( validate_assignment=True, @@ -71,12 +74,17 @@ def actual_instance_must_validate_oneof(cls, v): error_messages.append(f"Error! Input type `{type(v)}` is not `QuoteExecutionWithRequoteRequestDetails`") else: match += 1 + # validate data type: LimitExecutionRequestDetails + if not isinstance(v, LimitExecutionRequestDetails): + error_messages.append(f"Error! Input type `{type(v)}` is not `LimitExecutionRequestDetails`") + else: + match += 1 if match > 1: # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in ExecutionRequestDetails with oneOf schemas: MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails. Details: " + ", ".join(error_messages)) + raise ValueError("Multiple matches found when setting `actual_instance` in ExecutionRequestDetails with oneOf schemas: LimitExecutionRequestDetails, MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails. Details: " + ", ".join(error_messages)) elif match == 0: # no match - raise ValueError("No match found when setting `actual_instance` in ExecutionRequestDetails with oneOf schemas: MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails. Details: " + ", ".join(error_messages)) + raise ValueError("No match found when setting `actual_instance` in ExecutionRequestDetails with oneOf schemas: LimitExecutionRequestDetails, MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails. Details: " + ", ".join(error_messages)) else: return v @@ -103,13 +111,19 @@ def from_json(cls, json_str: str) -> Self: match += 1 except (ValidationError, ValueError) as e: error_messages.append(str(e)) + # deserialize data into LimitExecutionRequestDetails + try: + instance.actual_instance = LimitExecutionRequestDetails.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) if match > 1: # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into ExecutionRequestDetails with oneOf schemas: MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails. Details: " + ", ".join(error_messages)) + raise ValueError("Multiple matches found when deserializing the JSON string into ExecutionRequestDetails with oneOf schemas: LimitExecutionRequestDetails, MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails. Details: " + ", ".join(error_messages)) elif match == 0: # no match - raise ValueError("No match found when deserializing the JSON string into ExecutionRequestDetails with oneOf schemas: MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails. Details: " + ", ".join(error_messages)) + raise ValueError("No match found when deserializing the JSON string into ExecutionRequestDetails with oneOf schemas: LimitExecutionRequestDetails, MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails. Details: " + ", ".join(error_messages)) else: return instance @@ -123,7 +137,7 @@ def to_json(self) -> str: else: return json.dumps(self.actual_instance) - def to_dict(self) -> Optional[Union[Dict[str, Any], MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails]]: + def to_dict(self) -> Optional[Union[Dict[str, Any], LimitExecutionRequestDetails, MarketExecutionRequestDetails, QuoteExecutionWithRequoteRequestDetails]]: """Returns the dict representation of the actual instance""" if self.actual_instance is None: return None diff --git a/fireblocks/models/execution_request_details_type.py b/fireblocks/models/execution_request_details_type.py index 390d3c65..2293803b 100644 --- a/fireblocks/models/execution_request_details_type.py +++ b/fireblocks/models/execution_request_details_type.py @@ -29,6 +29,7 @@ class ExecutionRequestDetailsType(str, Enum): """ QUOTE = 'QUOTE' MARKET = 'MARKET' + LIMIT = 'LIMIT' @classmethod def from_json(cls, json_str: str) -> Self: diff --git a/fireblocks/models/execution_response_details.py b/fireblocks/models/execution_response_details.py index ce7cbbbb..9eafc330 100644 --- a/fireblocks/models/execution_response_details.py +++ b/fireblocks/models/execution_response_details.py @@ -18,13 +18,14 @@ import pprint from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator from typing import Any, List, Optional +from fireblocks.models.limit_execution_response_details import LimitExecutionResponseDetails from fireblocks.models.market_execution_response_details import MarketExecutionResponseDetails from fireblocks.models.quote_execution_with_requote_response_details import QuoteExecutionWithRequoteResponseDetails from pydantic import StrictStr, Field from typing import Union, List, Set, Optional, Dict from typing_extensions import Literal, Self -EXECUTIONRESPONSEDETAILS_ONE_OF_SCHEMAS = ["MarketExecutionResponseDetails", "QuoteExecutionWithRequoteResponseDetails"] +EXECUTIONRESPONSEDETAILS_ONE_OF_SCHEMAS = ["LimitExecutionResponseDetails", "MarketExecutionResponseDetails", "QuoteExecutionWithRequoteResponseDetails"] class ExecutionResponseDetails(BaseModel): """ @@ -34,8 +35,10 @@ class ExecutionResponseDetails(BaseModel): oneof_schema_1_validator: Optional[MarketExecutionResponseDetails] = None # data type: QuoteExecutionWithRequoteResponseDetails oneof_schema_2_validator: Optional[QuoteExecutionWithRequoteResponseDetails] = None - actual_instance: Optional[Union[MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails]] = None - one_of_schemas: Set[str] = { "MarketExecutionResponseDetails", "QuoteExecutionWithRequoteResponseDetails" } + # data type: LimitExecutionResponseDetails + oneof_schema_3_validator: Optional[LimitExecutionResponseDetails] = None + actual_instance: Optional[Union[LimitExecutionResponseDetails, MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails]] = None + one_of_schemas: Set[str] = { "LimitExecutionResponseDetails", "MarketExecutionResponseDetails", "QuoteExecutionWithRequoteResponseDetails" } model_config = ConfigDict( validate_assignment=True, @@ -71,12 +74,17 @@ def actual_instance_must_validate_oneof(cls, v): error_messages.append(f"Error! Input type `{type(v)}` is not `QuoteExecutionWithRequoteResponseDetails`") else: match += 1 + # validate data type: LimitExecutionResponseDetails + if not isinstance(v, LimitExecutionResponseDetails): + error_messages.append(f"Error! Input type `{type(v)}` is not `LimitExecutionResponseDetails`") + else: + match += 1 if match > 1: # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in ExecutionResponseDetails with oneOf schemas: MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails. Details: " + ", ".join(error_messages)) + raise ValueError("Multiple matches found when setting `actual_instance` in ExecutionResponseDetails with oneOf schemas: LimitExecutionResponseDetails, MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails. Details: " + ", ".join(error_messages)) elif match == 0: # no match - raise ValueError("No match found when setting `actual_instance` in ExecutionResponseDetails with oneOf schemas: MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails. Details: " + ", ".join(error_messages)) + raise ValueError("No match found when setting `actual_instance` in ExecutionResponseDetails with oneOf schemas: LimitExecutionResponseDetails, MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails. Details: " + ", ".join(error_messages)) else: return v @@ -103,13 +111,19 @@ def from_json(cls, json_str: str) -> Self: match += 1 except (ValidationError, ValueError) as e: error_messages.append(str(e)) + # deserialize data into LimitExecutionResponseDetails + try: + instance.actual_instance = LimitExecutionResponseDetails.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) if match > 1: # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into ExecutionResponseDetails with oneOf schemas: MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails. Details: " + ", ".join(error_messages)) + raise ValueError("Multiple matches found when deserializing the JSON string into ExecutionResponseDetails with oneOf schemas: LimitExecutionResponseDetails, MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails. Details: " + ", ".join(error_messages)) elif match == 0: # no match - raise ValueError("No match found when deserializing the JSON string into ExecutionResponseDetails with oneOf schemas: MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails. Details: " + ", ".join(error_messages)) + raise ValueError("No match found when deserializing the JSON string into ExecutionResponseDetails with oneOf schemas: LimitExecutionResponseDetails, MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails. Details: " + ", ".join(error_messages)) else: return instance @@ -123,7 +137,7 @@ def to_json(self) -> str: else: return json.dumps(self.actual_instance) - def to_dict(self) -> Optional[Union[Dict[str, Any], MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails]]: + def to_dict(self) -> Optional[Union[Dict[str, Any], LimitExecutionResponseDetails, MarketExecutionResponseDetails, QuoteExecutionWithRequoteResponseDetails]]: """Returns the dict representation of the actual instance""" if self.actual_instance is None: return None diff --git a/fireblocks/models/failure_reason.py b/fireblocks/models/failure_reason.py index 87fd8c60..0e0c3a95 100644 --- a/fireblocks/models/failure_reason.py +++ b/fireblocks/models/failure_reason.py @@ -56,6 +56,11 @@ class FailureReason(str, Enum): DESTINATION_NOT_WHITELISTED = 'DESTINATION_NOT_WHITELISTED' MISSING_DESTINATION_DETAILS = 'MISSING_DESTINATION_DETAILS' MISSING_WORKSPACE_DETAILS = 'MISSING_WORKSPACE_DETAILS' + CREDIT_LIMIT_EXCEEDED = 'CREDIT_LIMIT_EXCEEDED' + QUOTE_EXPIRED = 'QUOTE_EXPIRED' + DESK_REJECTED = 'DESK_REJECTED' + REQUOTE_WORSE_PRICE = 'REQUOTE_WORSE_PRICE' + FOK_KILLED = 'FOK_KILLED' @classmethod def from_json(cls, json_str: str) -> Self: diff --git a/fireblocks/models/fok_time_in_force.py b/fireblocks/models/fok_time_in_force.py new file mode 100644 index 00000000..ae62c406 --- /dev/null +++ b/fireblocks/models/fok_time_in_force.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List +from typing import Optional, Set +from typing_extensions import Self + +class FokTimeInForce(BaseModel): + """ + Fill-or-kill - the order must be filled in full at the limit price immediately, or not at all. + """ # noqa: E501 + type: StrictStr = Field(description="Discriminator for the fill-or-kill time-in-force type.") + __properties: ClassVar[List[str]] = ["type"] + + @field_validator('type') + def type_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['FOK']): + raise ValueError("must be one of enum values ('FOK')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of FokTimeInForce from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of FokTimeInForce from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "type": obj.get("type") + }) + return _obj + + diff --git a/fireblocks/models/limit_execution_request_details.py b/fireblocks/models/limit_execution_request_details.py new file mode 100644 index 00000000..66c55b0a --- /dev/null +++ b/fireblocks/models/limit_execution_request_details.py @@ -0,0 +1,111 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.limit_type_enum import LimitTypeEnum +from fireblocks.models.side import Side +from fireblocks.models.time_in_force import TimeInForce +from fireblocks.models.transfer_rail import TransferRail +from typing import Optional, Set +from typing_extensions import Self + +class LimitExecutionRequestDetails(BaseModel): + """ + LimitExecutionRequestDetails + """ # noqa: E501 + type: LimitTypeEnum + price: StrictStr = Field(description="Limit price for the order") + time_in_force: TimeInForce = Field(alias="timeInForce") + side: Side + base_amount: StrictStr = Field(description="Amount in baseAssetId. BUY = base amount to receive; SELL = base amount to sell.", alias="baseAmount") + base_asset_id: StrictStr = Field(description="The asset you receive on BUY / give on SELL.", alias="baseAssetId") + base_asset_rail: Optional[TransferRail] = Field(default=None, alias="baseAssetRail") + quote_asset_id: StrictStr = Field(description="Counter asset used to pay/receive", alias="quoteAssetId") + quote_asset_rail: Optional[TransferRail] = Field(default=None, alias="quoteAssetRail") + __properties: ClassVar[List[str]] = ["type", "price", "timeInForce", "side", "baseAmount", "baseAssetId", "baseAssetRail", "quoteAssetId", "quoteAssetRail"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of LimitExecutionRequestDetails from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of time_in_force + if self.time_in_force: + _dict['timeInForce'] = self.time_in_force.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of LimitExecutionRequestDetails from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "type": obj.get("type"), + "price": obj.get("price"), + "timeInForce": TimeInForce.from_dict(obj["timeInForce"]) if obj.get("timeInForce") is not None else None, + "side": obj.get("side"), + "baseAmount": obj.get("baseAmount"), + "baseAssetId": obj.get("baseAssetId"), + "baseAssetRail": obj.get("baseAssetRail"), + "quoteAssetId": obj.get("quoteAssetId"), + "quoteAssetRail": obj.get("quoteAssetRail") + }) + return _obj + + diff --git a/fireblocks/models/limit_execution_response_details.py b/fireblocks/models/limit_execution_response_details.py new file mode 100644 index 00000000..98be9d26 --- /dev/null +++ b/fireblocks/models/limit_execution_response_details.py @@ -0,0 +1,111 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.limit_type_enum import LimitTypeEnum +from fireblocks.models.side import Side +from fireblocks.models.time_in_force import TimeInForce +from fireblocks.models.transfer_rail import TransferRail +from typing import Optional, Set +from typing_extensions import Self + +class LimitExecutionResponseDetails(BaseModel): + """ + LimitExecutionResponseDetails + """ # noqa: E501 + type: LimitTypeEnum + price: StrictStr = Field(description="Limit price for the order") + time_in_force: TimeInForce = Field(alias="timeInForce") + side: Side + base_amount: StrictStr = Field(description="Amount to convert", alias="baseAmount") + base_asset_id: StrictStr = Field(description="Source asset identifier", alias="baseAssetId") + base_asset_rail: Optional[TransferRail] = Field(default=None, alias="baseAssetRail") + quote_asset_id: StrictStr = Field(description="Target asset identifier", alias="quoteAssetId") + quote_asset_rail: Optional[TransferRail] = Field(default=None, alias="quoteAssetRail") + __properties: ClassVar[List[str]] = ["type", "price", "timeInForce", "side", "baseAmount", "baseAssetId", "baseAssetRail", "quoteAssetId", "quoteAssetRail"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of LimitExecutionResponseDetails from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of time_in_force + if self.time_in_force: + _dict['timeInForce'] = self.time_in_force.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of LimitExecutionResponseDetails from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "type": obj.get("type"), + "price": obj.get("price"), + "timeInForce": TimeInForce.from_dict(obj["timeInForce"]) if obj.get("timeInForce") is not None else None, + "side": obj.get("side"), + "baseAmount": obj.get("baseAmount"), + "baseAssetId": obj.get("baseAssetId"), + "baseAssetRail": obj.get("baseAssetRail"), + "quoteAssetId": obj.get("quoteAssetId"), + "quoteAssetRail": obj.get("quoteAssetRail") + }) + return _obj + + diff --git a/fireblocks/models/limit_type_details.py b/fireblocks/models/limit_type_details.py new file mode 100644 index 00000000..a14b741f --- /dev/null +++ b/fireblocks/models/limit_type_details.py @@ -0,0 +1,97 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List +from fireblocks.models.limit_type_enum import LimitTypeEnum +from fireblocks.models.time_in_force import TimeInForce +from typing import Optional, Set +from typing_extensions import Self + +class LimitTypeDetails(BaseModel): + """ + LimitTypeDetails + """ # noqa: E501 + type: LimitTypeEnum + price: StrictStr = Field(description="Limit price for the order") + time_in_force: TimeInForce = Field(alias="timeInForce") + __properties: ClassVar[List[str]] = ["type", "price", "timeInForce"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of LimitTypeDetails from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of time_in_force + if self.time_in_force: + _dict['timeInForce'] = self.time_in_force.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of LimitTypeDetails from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "type": obj.get("type"), + "price": obj.get("price"), + "timeInForce": TimeInForce.from_dict(obj["timeInForce"]) if obj.get("timeInForce") is not None else None + }) + return _obj + + diff --git a/fireblocks/models/limit_type_enum.py b/fireblocks/models/limit_type_enum.py new file mode 100644 index 00000000..f7c0a464 --- /dev/null +++ b/fireblocks/models/limit_type_enum.py @@ -0,0 +1,37 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class LimitTypeEnum(str, Enum): + """ + Order type for limit orders + """ + + """ + allowed enum values + """ + LIMIT = 'LIMIT' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of LimitTypeEnum from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/fireblocks/models/offer_response_allocation.py b/fireblocks/models/offer_response_allocation.py index 779affbf..082561e1 100644 --- a/fireblocks/models/offer_response_allocation.py +++ b/fireblocks/models/offer_response_allocation.py @@ -35,8 +35,8 @@ class OfferResponseAllocation(BaseModel): @field_validator('domain') def domain_validate_enum(cls, value): """Validates the enum""" - if value not in set(['ALLOCATIONS']): - raise ValueError("must be one of enum values ('ALLOCATIONS')") + if value not in set(['ALLOCATION']): + raise ValueError("must be one of enum values ('ALLOCATION')") return value model_config = ConfigDict( diff --git a/fireblocks/models/offer_response_transfer.py b/fireblocks/models/offer_response_transfer.py index 2a753fb3..1efbfd9d 100644 --- a/fireblocks/models/offer_response_transfer.py +++ b/fireblocks/models/offer_response_transfer.py @@ -35,8 +35,8 @@ class OfferResponseTransfer(BaseModel): @field_validator('domain') def domain_validate_enum(cls, value): """Validates the enum""" - if value not in set(['TRANSFERS']): - raise ValueError("must be one of enum values ('TRANSFERS')") + if value not in set(['TRANSFER']): + raise ValueError("must be one of enum values ('TRANSFER')") return value model_config = ConfigDict( diff --git a/fireblocks/models/onboarding_response_dtcc_accept.py b/fireblocks/models/onboarding_response_dtcc_accept.py index 20291092..9a06ea1d 100644 --- a/fireblocks/models/onboarding_response_dtcc_accept.py +++ b/fireblocks/models/onboarding_response_dtcc_accept.py @@ -27,7 +27,7 @@ class OnboardingResponseDtccAccept(BaseModel): """ Accept a DTCC end-investor onboarding offer. Carries no arguments. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/onboarding_response_dtcc_reject.py b/fireblocks/models/onboarding_response_dtcc_reject.py index 96206a6a..fda22712 100644 --- a/fireblocks/models/onboarding_response_dtcc_reject.py +++ b/fireblocks/models/onboarding_response_dtcc_reject.py @@ -28,7 +28,7 @@ class OnboardingResponseDtccReject(BaseModel): """ Reject a DTCC end-investor onboarding offer. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") reason: Annotated[str, Field(min_length=1, strict=True, max_length=512)] = Field(description="Why the offer is being rejected. Recorded on-chain, where the counterparty can read it.") __properties: ClassVar[List[str]] = ["responseType", "reason"] diff --git a/fireblocks/models/onboarding_response_tradeweb_accept.py b/fireblocks/models/onboarding_response_tradeweb_accept.py index 7437283f..c4e9daef 100644 --- a/fireblocks/models/onboarding_response_tradeweb_accept.py +++ b/fireblocks/models/onboarding_response_tradeweb_accept.py @@ -27,7 +27,7 @@ class OnboardingResponseTradewebAccept(BaseModel): """ Accept a Tradeweb co-signing delegation offer. Carries no arguments. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/onboarding_response_tradeweb_reject.py b/fireblocks/models/onboarding_response_tradeweb_reject.py index eae7985c..a96ea2c0 100644 --- a/fireblocks/models/onboarding_response_tradeweb_reject.py +++ b/fireblocks/models/onboarding_response_tradeweb_reject.py @@ -27,7 +27,7 @@ class OnboardingResponseTradewebReject(BaseModel): """ Reject a Tradeweb co-signing delegation offer. Carries no arguments — the DAR has nowhere on-ledger to record a reason, so none is accepted. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values currently listed in the transaction's `additionalInfo.cantonDetails.offerResponse.availableResponses`.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/participant_onboarding_payload.py b/fireblocks/models/participant_onboarding_payload.py index 3d27c2a1..0fb29392 100644 --- a/fireblocks/models/participant_onboarding_payload.py +++ b/fireblocks/models/participant_onboarding_payload.py @@ -32,11 +32,11 @@ class ParticipantOnboardingPayload(BaseModel): asset: StrictStr = Field(description="Chain asset — CANTON or CANTON_TEST.") expires_at: Optional[datetime] = Field(default=None, description="When the onboarding request expires if it has not been answered. RFC 3339.", alias="expiresAt") operator: StrictStr = Field(description="DTCC infra operator party id.") - provider: StrictStr = Field(description="DTCC provider party id.") compliance: StrictStr = Field(description="DTCC compliance party id.") registrar: StrictStr = Field(description="DTCC registrar party id — co-signs the accept.") client_onboarder: StrictStr = Field(description="DTCC client onboarder party id — co-signs the accept.", alias="clientOnboarder") - __properties: ClassVar[List[str]] = ["vaultAccountId", "asset", "expiresAt", "operator", "provider", "compliance", "registrar", "clientOnboarder"] + upgrader: StrictStr = Field(description="DTCC upgrader party id — the Model Upgrade Tool authority. Supplied by DTCC during the off-chain registration, alongside the other party ids.") + __properties: ClassVar[List[str]] = ["vaultAccountId", "asset", "expiresAt", "operator", "compliance", "registrar", "clientOnboarder", "upgrader"] @field_validator('asset') def asset_validate_enum(cls, value): @@ -100,10 +100,10 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "asset": obj.get("asset"), "expiresAt": obj.get("expiresAt"), "operator": obj.get("operator"), - "provider": obj.get("provider"), "compliance": obj.get("compliance"), "registrar": obj.get("registrar"), - "clientOnboarder": obj.get("clientOnboarder") + "clientOnboarder": obj.get("clientOnboarder"), + "upgrader": obj.get("upgrader") }) return _obj diff --git a/fireblocks/models/post_trade_settlement.py b/fireblocks/models/post_trade_settlement.py new file mode 100644 index 00000000..2e00a289 --- /dev/null +++ b/fireblocks/models/post_trade_settlement.py @@ -0,0 +1,89 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict +from typing import Any, ClassVar, Dict, List +from fireblocks.models.post_trade_settlement_type import PostTradeSettlementType +from typing import Optional, Set +from typing_extensions import Self + +class PostTradeSettlement(BaseModel): + """ + Nothing moves on-platform; settlement happens bilaterally, provider-side, after execution. + """ # noqa: E501 + type: PostTradeSettlementType + __properties: ClassVar[List[str]] = ["type"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of PostTradeSettlement from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of PostTradeSettlement from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "type": obj.get("type") + }) + return _obj + + diff --git a/fireblocks/models/post_trade_settlement_type.py b/fireblocks/models/post_trade_settlement_type.py new file mode 100644 index 00000000..87ef3654 --- /dev/null +++ b/fireblocks/models/post_trade_settlement_type.py @@ -0,0 +1,37 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class PostTradeSettlementType(str, Enum): + """ + PostTradeSettlementType + """ + + """ + allowed enum values + """ + POST_TRADE = 'POST_TRADE' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of PostTradeSettlementType from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/fireblocks/models/quote.py b/fireblocks/models/quote.py index b8dee1c0..25f874ea 100644 --- a/fireblocks/models/quote.py +++ b/fireblocks/models/quote.py @@ -46,7 +46,7 @@ class Quote(BaseModel): execution_steps: Optional[List[QuoteExecutionStep]] = Field(default=None, description="Ordered list of execution steps for the quote.", alias="executionSteps") general_fees: Optional[List[Fee]] = Field(default=None, description="General fees associated with the quote.", alias="generalFees") side: Side - expires_at: StrictStr = Field(description="The expiration time of the quote in ISO 8601 format.", alias="expiresAt") + expires_at: StrictStr = Field(description="The expiration time of the quote in ISO 8601 format, taken verbatim from the provider. This is not safety-margined by the server — integrators must apply their own margin if one is needed. ", alias="expiresAt") required_participants_identification_on_order: Optional[StrictStr] = Field(default=None, description="A JSON Schema Draft-7 document in string format describing the fields required when creating an order so clients can validate their order payload before sending. ", alias="requiredParticipantsIdentificationOnOrder") type: StrictStr = Field(description="The type of the quote.") __properties: ClassVar[List[str]] = ["via", "id", "quoteAssetId", "quoteAssetRail", "baseAssetId", "baseAssetRail", "baseAmount", "quoteAmount", "priceImpact", "quoteMinAmount", "isSlippageApplied", "executionSteps", "generalFees", "side", "expiresAt", "requiredParticipantsIdentificationOnOrder", "type"] diff --git a/fireblocks/models/quote_offer.py b/fireblocks/models/quote_offer.py index edd2d5eb..903b0156 100644 --- a/fireblocks/models/quote_offer.py +++ b/fireblocks/models/quote_offer.py @@ -46,7 +46,7 @@ class QuoteOffer(BaseModel): execution_steps: Optional[List[QuoteExecutionStep]] = Field(default=None, description="Ordered list of execution steps for the quote.", alias="executionSteps") general_fees: Optional[List[Fee]] = Field(default=None, description="General fees associated with the quote.", alias="generalFees") side: Side - expires_at: StrictStr = Field(description="The expiration time of the quote in ISO 8601 format.", alias="expiresAt") + expires_at: StrictStr = Field(description="The expiration time of the quote in ISO 8601 format, taken verbatim from the provider. This is not safety-margined by the server — integrators must apply their own margin if one is needed. ", alias="expiresAt") required_participants_identification_on_order: Optional[StrictStr] = Field(default=None, description="A JSON Schema Draft-7 document in string format describing the fields required when creating an order so clients can validate their order payload before sending. ", alias="requiredParticipantsIdentificationOnOrder") type: StrictStr = Field(description="The type of the quote.") offer_type: StrictStr = Field(description="The type of offer — QUOTE for executable committed quotes.", alias="offerType") diff --git a/fireblocks/models/rates_request.py b/fireblocks/models/rates_request.py index 4ab6bf81..c163452e 100644 --- a/fireblocks/models/rates_request.py +++ b/fireblocks/models/rates_request.py @@ -18,8 +18,8 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictStr -from typing import Any, ClassVar, Dict, List +from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated from fireblocks.models.scope_item import ScopeItem from typing import Optional, Set @@ -32,7 +32,18 @@ class RatesRequest(BaseModel): scope: Annotated[List[ScopeItem], Field(min_length=1)] = Field(description="One or more providers/accounts to request rates from. At least one scope item is required.") base_asset_id: StrictStr = Field(description="The source asset identifier.", alias="baseAssetId") quote_asset_id: StrictStr = Field(description="The target asset identifier.", alias="quoteAssetId") - __properties: ClassVar[List[str]] = ["scope", "baseAssetId", "quoteAssetId"] + base_amount: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The amount to convert from", alias="baseAmount") + __properties: ClassVar[List[str]] = ["scope", "baseAssetId", "quoteAssetId", "baseAmount"] + + @field_validator('base_amount') + def base_amount_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^\d+(\.\d+)?$", value): + raise ValueError(r"must validate the regular expression /^\d+(\.\d+)?$/") + return value model_config = ConfigDict( populate_by_name=True, @@ -94,7 +105,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "scope": [ScopeItem.from_dict(_item) for _item in obj["scope"]] if obj.get("scope") is not None else None, "baseAssetId": obj.get("baseAssetId"), - "quoteAssetId": obj.get("quoteAssetId") + "quoteAssetId": obj.get("quoteAssetId"), + "baseAmount": obj.get("baseAmount") }) return _obj diff --git a/fireblocks/models/settlement.py b/fireblocks/models/settlement.py index 7bf7f208..b72726e9 100644 --- a/fireblocks/models/settlement.py +++ b/fireblocks/models/settlement.py @@ -19,12 +19,13 @@ from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator from typing import Any, List, Optional from fireblocks.models.dvp_settlement import DVPSettlement +from fireblocks.models.post_trade_settlement import PostTradeSettlement from fireblocks.models.prefunded_settlement import PrefundedSettlement from pydantic import StrictStr, Field from typing import Union, List, Set, Optional, Dict from typing_extensions import Literal, Self -SETTLEMENT_ONE_OF_SCHEMAS = ["DVPSettlement", "PrefundedSettlement"] +SETTLEMENT_ONE_OF_SCHEMAS = ["DVPSettlement", "PostTradeSettlement", "PrefundedSettlement"] class Settlement(BaseModel): """ @@ -34,8 +35,10 @@ class Settlement(BaseModel): oneof_schema_1_validator: Optional[PrefundedSettlement] = None # data type: DVPSettlement oneof_schema_2_validator: Optional[DVPSettlement] = None - actual_instance: Optional[Union[DVPSettlement, PrefundedSettlement]] = None - one_of_schemas: Set[str] = { "DVPSettlement", "PrefundedSettlement" } + # data type: PostTradeSettlement + oneof_schema_3_validator: Optional[PostTradeSettlement] = None + actual_instance: Optional[Union[DVPSettlement, PostTradeSettlement, PrefundedSettlement]] = None + one_of_schemas: Set[str] = { "DVPSettlement", "PostTradeSettlement", "PrefundedSettlement" } model_config = ConfigDict( validate_assignment=True, @@ -71,12 +74,17 @@ def actual_instance_must_validate_oneof(cls, v): error_messages.append(f"Error! Input type `{type(v)}` is not `DVPSettlement`") else: match += 1 + # validate data type: PostTradeSettlement + if not isinstance(v, PostTradeSettlement): + error_messages.append(f"Error! Input type `{type(v)}` is not `PostTradeSettlement`") + else: + match += 1 if match > 1: # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in Settlement with oneOf schemas: DVPSettlement, PrefundedSettlement. Details: " + ", ".join(error_messages)) + raise ValueError("Multiple matches found when setting `actual_instance` in Settlement with oneOf schemas: DVPSettlement, PostTradeSettlement, PrefundedSettlement. Details: " + ", ".join(error_messages)) elif match == 0: # no match - raise ValueError("No match found when setting `actual_instance` in Settlement with oneOf schemas: DVPSettlement, PrefundedSettlement. Details: " + ", ".join(error_messages)) + raise ValueError("No match found when setting `actual_instance` in Settlement with oneOf schemas: DVPSettlement, PostTradeSettlement, PrefundedSettlement. Details: " + ", ".join(error_messages)) else: return v @@ -103,13 +111,19 @@ def from_json(cls, json_str: str) -> Self: match += 1 except (ValidationError, ValueError) as e: error_messages.append(str(e)) + # deserialize data into PostTradeSettlement + try: + instance.actual_instance = PostTradeSettlement.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) if match > 1: # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into Settlement with oneOf schemas: DVPSettlement, PrefundedSettlement. Details: " + ", ".join(error_messages)) + raise ValueError("Multiple matches found when deserializing the JSON string into Settlement with oneOf schemas: DVPSettlement, PostTradeSettlement, PrefundedSettlement. Details: " + ", ".join(error_messages)) elif match == 0: # no match - raise ValueError("No match found when deserializing the JSON string into Settlement with oneOf schemas: DVPSettlement, PrefundedSettlement. Details: " + ", ".join(error_messages)) + raise ValueError("No match found when deserializing the JSON string into Settlement with oneOf schemas: DVPSettlement, PostTradeSettlement, PrefundedSettlement. Details: " + ", ".join(error_messages)) else: return instance @@ -123,7 +137,7 @@ def to_json(self) -> str: else: return json.dumps(self.actual_instance) - def to_dict(self) -> Optional[Union[Dict[str, Any], DVPSettlement, PrefundedSettlement]]: + def to_dict(self) -> Optional[Union[Dict[str, Any], DVPSettlement, PostTradeSettlement, PrefundedSettlement]]: """Returns the dict representation of the actual instance""" if self.actual_instance is None: return None diff --git a/fireblocks/models/settlement_type_enum.py b/fireblocks/models/settlement_type_enum.py index bfaeb469..56507c53 100644 --- a/fireblocks/models/settlement_type_enum.py +++ b/fireblocks/models/settlement_type_enum.py @@ -29,6 +29,7 @@ class SettlementTypeEnum(str, Enum): """ DVP = 'DVP' PREFUNDED = 'PREFUNDED' + POST_TRADE = 'POST_TRADE' @classmethod def from_json(cls, json_str: str) -> Self: diff --git a/fireblocks/models/time_in_force.py b/fireblocks/models/time_in_force.py new file mode 100644 index 00000000..f6a6e629 --- /dev/null +++ b/fireblocks/models/time_in_force.py @@ -0,0 +1,127 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +import pprint +from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator +from typing import Any, List, Optional +from fireblocks.models.fok_time_in_force import FokTimeInForce +from pydantic import StrictStr, Field +from typing import Union, List, Set, Optional, Dict +from typing_extensions import Literal, Self + +TIMEINFORCE_ONE_OF_SCHEMAS = ["FokTimeInForce"] + +class TimeInForce(BaseModel): + """ + Time in force for limit orders + """ + # data type: FokTimeInForce + oneof_schema_1_validator: Optional[FokTimeInForce] = None + actual_instance: Optional[Union[FokTimeInForce]] = None + one_of_schemas: Set[str] = { "FokTimeInForce" } + + model_config = ConfigDict( + validate_assignment=True, + protected_namespaces=(), + ) + + + discriminator_value_class_map: Dict[str, str] = { + } + + def __init__(self, *args, **kwargs) -> None: + if args: + if len(args) > 1: + raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") + if kwargs: + raise ValueError("If a position argument is used, keyword arguments cannot be used.") + super().__init__(actual_instance=args[0]) + else: + super().__init__(**kwargs) + + @field_validator('actual_instance') + def actual_instance_must_validate_oneof(cls, v): + instance = TimeInForce.model_construct() + error_messages = [] + match = 0 + # validate data type: FokTimeInForce + if not isinstance(v, FokTimeInForce): + error_messages.append(f"Error! Input type `{type(v)}` is not `FokTimeInForce`") + else: + match += 1 + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when setting `actual_instance` in TimeInForce with oneOf schemas: FokTimeInForce. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when setting `actual_instance` in TimeInForce with oneOf schemas: FokTimeInForce. Details: " + ", ".join(error_messages)) + else: + return v + + @classmethod + def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: + return cls.from_json(json.dumps(obj)) + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Returns the object represented by the json string""" + instance = cls.model_construct() + error_messages = [] + match = 0 + + # deserialize data into FokTimeInForce + try: + instance.actual_instance = FokTimeInForce.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when deserializing the JSON string into TimeInForce with oneOf schemas: FokTimeInForce. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when deserializing the JSON string into TimeInForce with oneOf schemas: FokTimeInForce. Details: " + ", ".join(error_messages)) + else: + return instance + + def to_json(self) -> str: + """Returns the JSON representation of the actual instance""" + if self.actual_instance is None: + return "null" + + if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): + return self.actual_instance.to_json() + else: + return json.dumps(self.actual_instance) + + def to_dict(self) -> Optional[Union[Dict[str, Any], FokTimeInForce]]: + """Returns the dict representation of the actual instance""" + if self.actual_instance is None: + return None + + if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): + return self.actual_instance.to_dict() + else: + # primitive type + return self.actual_instance + + def to_str(self) -> str: + """Returns the string representation of the actual instance""" + return pprint.pformat(self.model_dump()) + + diff --git a/fireblocks/models/transaction_operation.py b/fireblocks/models/transaction_operation.py index a7a8a537..672f6787 100644 --- a/fireblocks/models/transaction_operation.py +++ b/fireblocks/models/transaction_operation.py @@ -21,7 +21,7 @@ class TransactionOperation(str, Enum): """ - * `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address. * `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains. * `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains. * `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions. * `PROGRAM_CALL` - Execute multiple instructions on Solana blockchain. The @solana/web3.js library is recommended for building program call transactions. * `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing). * `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing) * `APPROVE` - Enables the approve function for a smart contract or wallet to withdraw from a designated wallet. [Learn more](https://support.fireblocks.io/hc/en-us/articles/4404616097426-Amount-Cap-for-Approve-transactions). * `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account. + * `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address. * `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains. * `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains. * `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions. * `PROGRAM_CALL` - Execute multiple instructions on Solana blockchain. The @solana/web3.js library is recommended for building program call transactions. * `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing). * `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing) * `APPROVE` - Enables the approve function for a smart contract or wallet to withdraw from a designated wallet. [Learn more](https://support.fireblocks.io/hc/en-us/articles/4404616097426-Amount-Cap-for-Approve-transactions). * `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account. * `CANTON_CALL` - A customer-initiated Canton operation, such as withdrawing an allocation or responding to an onboarding offer. Note that not every Canton transaction carries this operation — an incoming Canton transfer offer is a `TRANSFER` — so use the top-level `cantonDetails` rather than `operation` to identify a Canton transaction. """ """ @@ -36,6 +36,7 @@ class TransactionOperation(str, Enum): TYPED_MESSAGE = 'TYPED_MESSAGE' APPROVE = 'APPROVE' ENABLE_ASSET = 'ENABLE_ASSET' + CANTON_CALL = 'CANTON_CALL' @classmethod def from_json(cls, json_str: str) -> Self: diff --git a/fireblocks/models/transaction_response.py b/fireblocks/models/transaction_response.py index 49e7cf30..a3a0474f 100644 --- a/fireblocks/models/transaction_response.py +++ b/fireblocks/models/transaction_response.py @@ -24,6 +24,7 @@ from fireblocks.models.amount_info import AmountInfo from fireblocks.models.authorization_info import AuthorizationInfo from fireblocks.models.block_info import BlockInfo +from fireblocks.models.canton_details import CantonDetails from fireblocks.models.compliance_results import ComplianceResults from fireblocks.models.destination_transfer_peer_path_response import DestinationTransferPeerPathResponse from fireblocks.models.extra_parameters import ExtraParameters @@ -70,6 +71,7 @@ class TransactionResponse(BaseModel): fee_info: Optional[FeeInfo] = Field(default=None, alias="feeInfo") fee_currency: Optional[StrictStr] = Field(default=None, description="The asset which was withdrawn to pay the transaction fee, for example ETH for EVM-based blockchains, BTC for Tether Omni.", alias="feeCurrency") requested_fee_currency: Optional[StrictStr] = Field(default=None, description="The fee-paying asset requested at transaction creation via the `feeCurrency` field, if any.", alias="requestedFeeCurrency") + canton_details: Optional[CantonDetails] = Field(default=None, alias="cantonDetails") network_records: Optional[List[NetworkRecord]] = Field(default=None, description="In case a single transaction resulted with multiple transfers, for example a result of a contract call, then this parameter specifies each transfer that took place on the blockchain. In case of a single transfer transaction, this parameter is empty.", alias="networkRecords") created_at: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The transaction’s creation date and time, in unix timestamp.", alias="createdAt") last_updated: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The transaction’s last update date and time, in unix timestamp.", alias="lastUpdated") @@ -109,7 +111,7 @@ class TransactionResponse(BaseModel): replaced_tx_hash: Optional[StrictStr] = Field(default=None, description="if the transaction is a replace by fee (RBF) transaction, this is the hash of the transsaction that was replaced", alias="replacedTxHash") nonce: Optional[StrictStr] = Field(default=None, description="blockchain nonce for the transaction") blockchain_info: Optional[Dict[str, Any]] = Field(default=None, description="A JSON used to store additional data that is blockchain-specific.", alias="blockchainInfo") - __properties: ClassVar[List[str]] = ["id", "externalTxId", "status", "subStatus", "txHash", "operation", "note", "assetId", "assetType", "source", "sourceAddress", "tag", "destination", "destinations", "destinationAddress", "destinationAddressDescription", "destinationTag", "contractCallDecodedData", "programCallDecodedData", "amountInfo", "treatAsGrossAmount", "feeInfo", "feeCurrency", "requestedFeeCurrency", "networkRecords", "createdAt", "lastUpdated", "expiresAt", "createdBy", "signedBy", "rejectedBy", "authorizationInfo", "exchangeTxId", "customerRefId", "travelRuleMessageId", "amlScreeningResult", "complianceResults", "notBroadcastByFireblocks", "dappUrl", "gasLimit", "blockchainIndex", "paidRent", "extraParameters", "signedMessages", "numOfConfirmations", "blockInfo", "index", "rewardInfo", "feePayerInfo", "gaslessInfo", "systemMessages", "addressType", "requestedAmount", "amount", "netAmount", "amountUSD", "serviceFee", "fee", "networkFee", "errorDescription", "replacedTxHash", "nonce", "blockchainInfo"] + __properties: ClassVar[List[str]] = ["id", "externalTxId", "status", "subStatus", "txHash", "operation", "note", "assetId", "assetType", "source", "sourceAddress", "tag", "destination", "destinations", "destinationAddress", "destinationAddressDescription", "destinationTag", "contractCallDecodedData", "programCallDecodedData", "amountInfo", "treatAsGrossAmount", "feeInfo", "feeCurrency", "requestedFeeCurrency", "cantonDetails", "networkRecords", "createdAt", "lastUpdated", "expiresAt", "createdBy", "signedBy", "rejectedBy", "authorizationInfo", "exchangeTxId", "customerRefId", "travelRuleMessageId", "amlScreeningResult", "complianceResults", "notBroadcastByFireblocks", "dappUrl", "gasLimit", "blockchainIndex", "paidRent", "extraParameters", "signedMessages", "numOfConfirmations", "blockInfo", "index", "rewardInfo", "feePayerInfo", "gaslessInfo", "systemMessages", "addressType", "requestedAmount", "amount", "netAmount", "amountUSD", "serviceFee", "fee", "networkFee", "errorDescription", "replacedTxHash", "nonce", "blockchainInfo"] @field_validator('address_type') def address_type_validate_enum(cls, value): @@ -189,6 +191,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of fee_info if self.fee_info: _dict['feeInfo'] = self.fee_info.to_dict() + # override the default output from pydantic by calling `to_dict()` of canton_details + if self.canton_details: + _dict['cantonDetails'] = self.canton_details.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in network_records (list) _items = [] if self.network_records: @@ -275,6 +280,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "feeInfo": FeeInfo.from_dict(obj["feeInfo"]) if obj.get("feeInfo") is not None else None, "feeCurrency": obj.get("feeCurrency"), "requestedFeeCurrency": obj.get("requestedFeeCurrency"), + "cantonDetails": CantonDetails.from_dict(obj["cantonDetails"]) if obj.get("cantonDetails") is not None else None, "networkRecords": [NetworkRecord.from_dict(_item) for _item in obj["networkRecords"]] if obj.get("networkRecords") is not None else None, "createdAt": obj.get("createdAt"), "lastUpdated": obj.get("lastUpdated"), diff --git a/fireblocks/models/travel_rule_issuers.py b/fireblocks/models/travel_rule_issuers.py index 548dcbe0..0532e5e7 100644 --- a/fireblocks/models/travel_rule_issuers.py +++ b/fireblocks/models/travel_rule_issuers.py @@ -19,7 +19,7 @@ import json from pydantic import BaseModel, ConfigDict, Field -from typing import Any, ClassVar, Dict, List +from typing import Any, ClassVar, Dict, List, Optional from fireblocks.models.travel_rule_issuer import TravelRuleIssuer from typing import Optional, Set from typing_extensions import Self @@ -30,9 +30,9 @@ class TravelRuleIssuers(BaseModel): """ # noqa: E501 year_founded: TravelRuleIssuer = Field(alias="yearFounded") is_regulated: TravelRuleIssuer = Field(alias="isRegulated") - regulatory_authorities: TravelRuleIssuer = Field(alias="regulatoryAuthorities") + regulatory_authorities: Optional[TravelRuleIssuer] = Field(default=None, alias="regulatoryAuthorities") name: TravelRuleIssuer - logo: TravelRuleIssuer + logo: Optional[TravelRuleIssuer] = None website: TravelRuleIssuer legal_name: TravelRuleIssuer = Field(alias="legalName") legal_structure: TravelRuleIssuer = Field(alias="legalStructure") @@ -41,7 +41,7 @@ class TravelRuleIssuers(BaseModel): address_line1: TravelRuleIssuer = Field(alias="addressLine1") city: TravelRuleIssuer country: TravelRuleIssuer - description: TravelRuleIssuer + description: Optional[TravelRuleIssuer] = None __properties: ClassVar[List[str]] = ["yearFounded", "isRegulated", "regulatoryAuthorities", "name", "logo", "website", "legalName", "legalStructure", "incorporationCountry", "businessNumber", "addressLine1", "city", "country", "description"] model_config = ConfigDict( diff --git a/fireblocks/models/travel_rule_vasp.py b/fireblocks/models/travel_rule_vasp.py index 03d195e7..a701c6a1 100644 --- a/fireblocks/models/travel_rule_vasp.py +++ b/fireblocks/models/travel_rule_vasp.py @@ -161,11 +161,46 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of issuers if self.issuers: _dict['issuers'] = self.issuers.to_dict() + # set to None if address_line2 (nullable) is None + # and model_fields_set contains the field + if self.address_line2 is None and "address_line2" in self.model_fields_set: + _dict['addressLine2'] = None + + # set to None if logo (nullable) is None + # and model_fields_set contains the field + if self.logo is None and "logo" in self.model_fields_set: + _dict['logo'] = None + + # set to None if other_names (nullable) is None + # and model_fields_set contains the field + if self.other_names is None and "other_names" in self.model_fields_set: + _dict['otherNames'] = None + + # set to None if identification_country (nullable) is None + # and model_fields_set contains the field + if self.identification_country is None and "identification_country" in self.model_fields_set: + _dict['identificationCountry'] = None + + # set to None if regulatory_authorities (nullable) is None + # and model_fields_set contains the field + if self.regulatory_authorities is None and "regulatory_authorities" in self.model_fields_set: + _dict['regulatoryAuthorities'] = None + # set to None if division (nullable) is None # and model_fields_set contains the field if self.division is None and "division" in self.model_fields_set: _dict['division'] = None + # set to None if street (nullable) is None + # and model_fields_set contains the field + if self.street is None and "street" in self.model_fields_set: + _dict['street'] = None + + # set to None if unit (nullable) is None + # and model_fields_set contains the field + if self.unit is None and "unit" in self.model_fields_set: + _dict['unit'] = None + # set to None if other_legal_name (nullable) is None # and model_fields_set contains the field if self.other_legal_name is None and "other_legal_name" in self.model_fields_set: @@ -231,6 +266,61 @@ def to_dict(self) -> Dict[str, Any]: if self.hq_country is None and "hq_country" in self.model_fields_set: _dict['hqCountry'] = None + # set to None if certificates (nullable) is None + # and model_fields_set contains the field + if self.certificates is None and "certificates" in self.model_fields_set: + _dict['certificates'] = None + + # set to None if description (nullable) is None + # and model_fields_set contains the field + if self.description is None and "description" in self.model_fields_set: + _dict['description'] = None + + # set to None if travel_rule_openvasp (nullable) is None + # and model_fields_set contains the field + if self.travel_rule_openvasp is None and "travel_rule_openvasp" in self.model_fields_set: + _dict['travelRule_OPENVASP'] = None + + # set to None if travel_rule_sygna (nullable) is None + # and model_fields_set contains the field + if self.travel_rule_sygna is None and "travel_rule_sygna" in self.model_fields_set: + _dict['travelRule_SYGNA'] = None + + # set to None if travel_rule_trisa (nullable) is None + # and model_fields_set contains the field + if self.travel_rule_trisa is None and "travel_rule_trisa" in self.model_fields_set: + _dict['travelRule_TRISA'] = None + + # set to None if travel_rule_email (nullable) is None + # and model_fields_set contains the field + if self.travel_rule_email is None and "travel_rule_email" in self.model_fields_set: + _dict['travelRule_EMAIL'] = None + + # set to None if travel_rule_trp (nullable) is None + # and model_fields_set contains the field + if self.travel_rule_trp is None and "travel_rule_trp" in self.model_fields_set: + _dict['travelRule_TRP'] = None + + # set to None if travel_rule_shyft (nullable) is None + # and model_fields_set contains the field + if self.travel_rule_shyft is None and "travel_rule_shyft" in self.model_fields_set: + _dict['travelRule_SHYFT'] = None + + # set to None if travel_rule_ustravelrulewg (nullable) is None + # and model_fields_set contains the field + if self.travel_rule_ustravelrulewg is None and "travel_rule_ustravelrulewg" in self.model_fields_set: + _dict['travelRule_USTRAVELRULEWG'] = None + + # set to None if created_by (nullable) is None + # and model_fields_set contains the field + if self.created_by is None and "created_by" in self.model_fields_set: + _dict['createdBy'] = None + + # set to None if documents (nullable) is None + # and model_fields_set contains the field + if self.documents is None and "documents" in self.model_fields_set: + _dict['documents'] = None + # set to None if regulatory_status (nullable) is None # and model_fields_set contains the field if self.regulatory_status is None and "regulatory_status" in self.model_fields_set: diff --git a/fireblocks/models/update_webhook_mtls_config_request.py b/fireblocks/models/update_webhook_mtls_config_request.py new file mode 100644 index 00000000..fd73ec97 --- /dev/null +++ b/fireblocks/models/update_webhook_mtls_config_request.py @@ -0,0 +1,106 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from typing import Optional, Set +from typing_extensions import Self + +class UpdateWebhookMtlsConfigRequest(BaseModel): + """ + At least one property must be provided. + """ # noqa: E501 + name: Optional[Annotated[str, Field(strict=True, max_length=255)]] = Field(default=None, description="A new label for this mTLS configuration, or `null` to remove it. Letters, digits and spaces only.") + signed_cert: Optional[StrictStr] = Field(default=None, description="A replacement signed certificate PEM. Every webhook and OAuth credentials set using this configuration switches to it, and the private key it was issued for is re-derived from the certificate.", alias="signedCert") + __properties: ClassVar[List[str]] = ["name", "signedCert"] + + @field_validator('name') + def name_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^[a-zA-Z0-9 ]*$", value): + raise ValueError(r"must validate the regular expression /^[a-zA-Z0-9 ]*$/") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UpdateWebhookMtlsConfigRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # set to None if name (nullable) is None + # and model_fields_set contains the field + if self.name is None and "name" in self.model_fields_set: + _dict['name'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UpdateWebhookMtlsConfigRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "name": obj.get("name"), + "signedCert": obj.get("signedCert") + }) + return _obj + + diff --git a/fireblocks/models/update_webhook_oauth_request.py b/fireblocks/models/update_webhook_oauth_request.py index 2c0e6e40..75e1844f 100644 --- a/fireblocks/models/update_webhook_oauth_request.py +++ b/fireblocks/models/update_webhook_oauth_request.py @@ -26,7 +26,7 @@ class UpdateWebhookOauthRequest(BaseModel): """ - A partial update. Every field is optional and an omitted field is left as it is, so `{ \"clientSecret\": \"new-secret\" }` rotates the secret and changes nothing else. A rotation applies to every webhook referencing these credentials. The three custom maps merge. A key with a value is upserted, a key with `null` is deleted, a key you leave out is untouched, and the whole field set to `null` clears the map. There is no ambiguity between the two uses of `null` — one names an entry, the other names the field. `mtlsClientSignedCert` is a scalar, so `null` there removes it. + A partial update. Every field is optional and an omitted field is left as it is, so `{ \"clientSecret\": \"new-secret\" }` rotates the secret and changes nothing else. A rotation applies to every webhook referencing these credentials. The three custom maps merge. A key with a value is upserted, a key with `null` is deleted, a key you leave out is untouched, and the whole field set to `null` clears the map. There is no ambiguity between the two uses of `null` — one names an entry, the other names the field. `webhookMtlsId` is a scalar, so `null` there removes it. """ # noqa: E501 name: Optional[Annotated[str, Field(min_length=1, strict=True, max_length=128)]] = Field(default=None, description="A label for this credential set. Omit to leave it unchanged.") client_id: Optional[Annotated[str, Field(min_length=1, strict=True, max_length=255)]] = Field(default=None, description="OAuth client ID. Omit to leave it unchanged.", alias="clientId") @@ -36,8 +36,8 @@ class UpdateWebhookOauthRequest(BaseModel): custom_jwt_claims: Optional[Dict[str, Any]] = Field(default=None, description="A delta applied to the JWT assertion claims. A claim with a value is added or replaced, a claim with `null` is deleted, and a claim you leave out is untouched. So `{ \"aud\": \"https://auth.example.com\", \"resource\": null }` sets `aud`, drops `resource`, and changes nothing else. Send `customJwtClaims: null` to clear every claim in one call. That does not collide with a `null` value on a name: one names the claim to delete, the other names the whole field. Same rules as on create: any JSON type except `null`, `iss`/`sub`/`jti`/`iat`/`exp` reserved, names case-sensitive, resulting set under 16 KB, values write-only.", alias="customJwtClaims") custom_body_params: Optional[Dict[str, Optional[StrictStr]]] = Field(default=None, description="A delta applied to the token request body parameters. A parameter with a value is added or replaced, a parameter with `null` is deleted, and one you leave out is untouched. So `{ \"scope\": \"payments.read\", \"audience\": null }` sets `scope`, drops `audience`, and changes nothing else. Send `customBodyParams: null` to clear every parameter in one call. That does not collide with a `null` value on a name: one names the parameter to delete, the other names the whole field. Same rules as on create: string values only, `grant_type`/`client_id`/`client_secret`/ `client_assertion`/`client_assertion_type` reserved, names case-sensitive, resulting set under 16 KB, values write-only.", alias="customBodyParams") custom_headers: Optional[Dict[str, Optional[StrictStr]]] = Field(default=None, description="A delta applied to the token request headers — not the webhook delivery headers. A header with a value is added or replaced, a header with `null` is deleted, and one you leave out is untouched. So `{ \"X-Api-Key\": \"new-key\", \"X-Tenant\": null }` rotates `X-Api-Key`, drops `X-Tenant`, and changes nothing else. Send `customHeaders: null` to clear every header in one call. That does not collide with a `null` value on a name: one names the header to delete, the other names the whole field. Names are case-insensitive, so a `null` under one casing deletes a header stored under another, and names are stored and returned lowercased. Same rules as on create: string values only, `Content-Type`, `Content-Length` and `Host` reserved, `Authorization` only with `client_secret_post` or `client_secret_jwt`, resulting set under 16 KB, values write-only.", alias="customHeaders") - mtls_client_signed_cert: Optional[StrictStr] = Field(default=None, description="PEM-encoded client certificate for mTLS. Must be a valid X.509 certificate inside its validity window. Omit to leave it unchanged, or send `null` to remove it.", alias="mtlsClientSignedCert") - __properties: ClassVar[List[str]] = ["name", "clientId", "clientSecret", "url", "authMethod", "customJwtClaims", "customBodyParams", "customHeaders", "mtlsClientSignedCert"] + webhook_mtls_id: Optional[StrictStr] = Field(default=None, description="The id of the mTLS configuration presented to the token endpoint, from `/v1/webhooks_settings/mtls`. Omit to leave it unchanged, or send `null` to stop using mTLS for the token request. Requires the mTLS feature to be enabled for the workspace (`403` otherwise), a configuration of this workspace (`404` otherwise), and one linked to a private key (`400` otherwise).", alias="webhookMtlsId") + __properties: ClassVar[List[str]] = ["name", "clientId", "clientSecret", "url", "authMethod", "customJwtClaims", "customBodyParams", "customHeaders", "webhookMtlsId"] @field_validator('url') def url_validate_regular_expression(cls, value): @@ -103,10 +103,10 @@ def to_dict(self) -> Dict[str, Any]: if self.custom_headers is None and "custom_headers" in self.model_fields_set: _dict['customHeaders'] = None - # set to None if mtls_client_signed_cert (nullable) is None + # set to None if webhook_mtls_id (nullable) is None # and model_fields_set contains the field - if self.mtls_client_signed_cert is None and "mtls_client_signed_cert" in self.model_fields_set: - _dict['mtlsClientSignedCert'] = None + if self.webhook_mtls_id is None and "webhook_mtls_id" in self.model_fields_set: + _dict['webhookMtlsId'] = None return _dict @@ -128,7 +128,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "customJwtClaims": obj.get("customJwtClaims"), "customBodyParams": obj.get("customBodyParams"), "customHeaders": obj.get("customHeaders"), - "mtlsClientSignedCert": obj.get("mtlsClientSignedCert") + "webhookMtlsId": obj.get("webhookMtlsId") }) return _obj diff --git a/fireblocks/models/update_webhook_request.py b/fireblocks/models/update_webhook_request.py index 873cecd7..99537aa3 100644 --- a/fireblocks/models/update_webhook_request.py +++ b/fireblocks/models/update_webhook_request.py @@ -22,7 +22,6 @@ from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated from fireblocks.models.webhook_event import WebhookEvent -from fireblocks.models.webhook_mtls import WebhookMtls from typing import Optional, Set from typing_extensions import Self @@ -34,10 +33,10 @@ class UpdateWebhookRequest(BaseModel): description: Optional[Annotated[str, Field(min_length=1, strict=True)]] = Field(default=None, description="description of the webhook of what it is used for.should not contain special characters.") events: Optional[List[WebhookEvent]] = Field(default=None, description="The events that the webhook will be subscribed to") enabled: Optional[StrictBool] = Field(default=None, description="The status of the webhook") - mtls: Optional[WebhookMtls] = None + webhook_mtls_id: Optional[StrictStr] = Field(default=None, description="The id of the mTLS configuration this webhook presents when delivering, from `/v1/webhooks_settings/mtls`. Several webhooks may share one configuration, so replacing its certificate covers all of them at once. Send `null` to stop using mTLS for this webhook.", alias="webhookMtlsId") webhook_oauth_id: Optional[StrictStr] = Field(default=None, description="The id of the OAuth credentials this webhook authenticates with, from `/v1/webhooks_settings/oauth`. Several webhooks may share one credential set, so rotating its client secret covers all of them at once. Send `null` to stop using OAuth for this webhook. Cannot be combined with an `authorization` custom header on the same webhook; a request that would leave both set is rejected.", alias="webhookOauthId") custom_headers: Optional[Dict[str, Any]] = Field(default=None, description="A delta applied to the delivery headers. A header with a value is added or replaced, a header with `null` is deleted, and one you leave out is untouched. A value replaces what is stored under that name rather than adding to it, so an array is the complete new set of lines for that header. Send `customHeaders: null` to clear every header in one call. That does not collide with a `null` value on a name: one names the header to delete, the other names the whole field. Names are case-insensitive, so a `null` under one casing deletes a header stored under another. Same rules as on create: string or non-empty array, `Cookie` and `Authorization` string-only, 10 headers and under 16 KB in the resulting set, the same reserved names, and values write-only. Entries set to `null` do not count towards the limit. `Authorization` cannot be combined with `webhookOauthId`, though one request may add it and detach the credentials together.", alias="customHeaders") - __properties: ClassVar[List[str]] = ["url", "description", "events", "enabled", "mtls", "webhookOauthId", "customHeaders"] + __properties: ClassVar[List[str]] = ["url", "description", "events", "enabled", "webhookMtlsId", "webhookOauthId", "customHeaders"] model_config = ConfigDict( populate_by_name=True, @@ -78,13 +77,10 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of mtls - if self.mtls: - _dict['mtls'] = self.mtls.to_dict() - # set to None if mtls (nullable) is None + # set to None if webhook_mtls_id (nullable) is None # and model_fields_set contains the field - if self.mtls is None and "mtls" in self.model_fields_set: - _dict['mtls'] = None + if self.webhook_mtls_id is None and "webhook_mtls_id" in self.model_fields_set: + _dict['webhookMtlsId'] = None # set to None if webhook_oauth_id (nullable) is None # and model_fields_set contains the field @@ -112,7 +108,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "description": obj.get("description"), "events": obj.get("events"), "enabled": obj.get("enabled"), - "mtls": WebhookMtls.from_dict(obj["mtls"]) if obj.get("mtls") is not None else None, + "webhookMtlsId": obj.get("webhookMtlsId"), "webhookOauthId": obj.get("webhookOauthId"), "customHeaders": obj.get("customHeaders") }) diff --git a/fireblocks/models/upsert_utxo_selection_config_request.py b/fireblocks/models/upsert_utxo_selection_config_request.py new file mode 100644 index 00000000..e5781dc6 --- /dev/null +++ b/fireblocks/models/upsert_utxo_selection_config_request.py @@ -0,0 +1,89 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict +from typing import Any, ClassVar, Dict, List +from fireblocks.models.utxo_selection_strategy_enum import UtxoSelectionStrategyEnum +from typing import Optional, Set +from typing_extensions import Self + +class UpsertUtxoSelectionConfigRequest(BaseModel): + """ + UpsertUtxoSelectionConfigRequest + """ # noqa: E501 + strategy: UtxoSelectionStrategyEnum + __properties: ClassVar[List[str]] = ["strategy"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UpsertUtxoSelectionConfigRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UpsertUtxoSelectionConfigRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "strategy": obj.get("strategy") + }) + return _obj + + diff --git a/fireblocks/models/utxo_identifier.py b/fireblocks/models/utxo_identifier.py index 58636ad9..ec2e03b9 100644 --- a/fireblocks/models/utxo_identifier.py +++ b/fireblocks/models/utxo_identifier.py @@ -18,8 +18,9 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated from typing import Optional, Set from typing_extensions import Self @@ -28,10 +29,20 @@ class UtxoIdentifier(BaseModel): Identifies a UTXO by either a Fireblocks transaction ID (targets all outputs of that transaction) or a specific on-chain UTXO (txHash + index). Exactly one of these two forms must be provided. """ # noqa: E501 tx_id: Optional[StrictStr] = Field(default=None, description="Fireblocks transaction ID", alias="txId") - tx_hash: Optional[StrictStr] = Field(default=None, description="On-chain transaction hash", alias="txHash") + tx_hash: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="On-chain transaction hash, in lowercase hex as the chain reports it. Matched case-sensitively, so an uppercase hash is never found.", alias="txHash") index: Optional[StrictInt] = Field(default=None, description="Output index (vout)") __properties: ClassVar[List[str]] = ["txId", "txHash", "index"] + @field_validator('tx_hash') + def tx_hash_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^[0-9a-fA-F]{1,64}$", value): + raise ValueError(r"must validate the regular expression /^[0-9a-fA-F]{1,64}$/") + return value + model_config = ConfigDict( populate_by_name=True, validate_assignment=True, diff --git a/fireblocks/models/utxo_label_failure.py b/fireblocks/models/utxo_label_failure.py new file mode 100644 index 00000000..87b1a23e --- /dev/null +++ b/fireblocks/models/utxo_label_failure.py @@ -0,0 +1,113 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.utxo_identifier import UtxoIdentifier +from typing import Optional, Set +from typing_extensions import Self + +class UtxoLabelFailure(BaseModel): + """ + A requested identifier that blocked the label request, with the reason it could not be labelled. + """ # noqa: E501 + identifier: UtxoIdentifier = Field(description="The identifier exactly as it was sent in the request.") + reason: StrictStr = Field(description="Why the identifier could not be labelled: - `NOT_FOUND` — no UTXO for it in this vault and asset. Retrying can work once it is indexed. - `NOT_LABELLABLE` — the UTXO exists but can no longer be labelled (spent, or removed; for a transaction ID, every output). Retrying will not help.") + utxo_status: Optional[StrictStr] = Field(default=None, description="The UTXO status behind the reason, when one explains it. With `NOT_FOUND`, `REMOVED` means the UTXO was removed within the last hour and may still reappear; if it does not, the same request returns `NOT_LABELLABLE` after about an hour.", alias="utxoStatus") + __properties: ClassVar[List[str]] = ["identifier", "reason", "utxoStatus"] + + @field_validator('reason') + def reason_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['NOT_FOUND', 'NOT_LABELLABLE', 'UNUSABLE_IDENTIFIER']): + raise ValueError("must be one of enum values ('NOT_FOUND', 'NOT_LABELLABLE', 'UNUSABLE_IDENTIFIER')") + return value + + @field_validator('utxo_status') + def utxo_status_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in set(['SPENT', 'REMOVED']): + raise ValueError("must be one of enum values ('SPENT', 'REMOVED')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UtxoLabelFailure from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of identifier + if self.identifier: + _dict['identifier'] = self.identifier.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UtxoLabelFailure from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "identifier": UtxoIdentifier.from_dict(obj["identifier"]) if obj.get("identifier") is not None else None, + "reason": obj.get("reason"), + "utxoStatus": obj.get("utxoStatus") + }) + return _obj + + diff --git a/fireblocks/models/utxo_labels_error_response.py b/fireblocks/models/utxo_labels_error_response.py new file mode 100644 index 00000000..db3fd980 --- /dev/null +++ b/fireblocks/models/utxo_labels_error_response.py @@ -0,0 +1,98 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.utxo_label_failure import UtxoLabelFailure +from typing import Optional, Set +from typing_extensions import Self + +class UtxoLabelsErrorResponse(BaseModel): + """ + Returned when a label request is rejected. The request is all-or-nothing, so no UTXO was labelled. + """ # noqa: E501 + message: StrictStr = Field(description="Summary of the rejection. When `failures` is present, it names the identifiers that blocked the request.") + failures: Optional[List[UtxoLabelFailure]] = Field(default=None, description="Every identifier that blocked the request, each with its own reason. Identifiers not listed were valid; resend them without the failed ones. Absent when the request itself was invalid (e.g. a malformed label).") + __properties: ClassVar[List[str]] = ["message", "failures"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UtxoLabelsErrorResponse from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in failures (list) + _items = [] + if self.failures: + for _item_failures in self.failures: + if _item_failures: + _items.append(_item_failures.to_dict()) + _dict['failures'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UtxoLabelsErrorResponse from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "message": obj.get("message"), + "failures": [UtxoLabelFailure.from_dict(_item) for _item in obj["failures"]] if obj.get("failures") is not None else None + }) + return _obj + + diff --git a/fireblocks/models/utxo_selection_config_entry.py b/fireblocks/models/utxo_selection_config_entry.py new file mode 100644 index 00000000..e19a3957 --- /dev/null +++ b/fireblocks/models/utxo_selection_config_entry.py @@ -0,0 +1,92 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from pydantic import BaseModel, ConfigDict, Field +from typing import Any, ClassVar, Dict, List +from fireblocks.models.utxo_selection_strategy_enum import UtxoSelectionStrategyEnum +from typing import Optional, Set +from typing_extensions import Self + +class UtxoSelectionConfigEntry(BaseModel): + """ + Config row stored at exactly the requested scope. Omitted from the parent object when none exists; the server does not emit JSON `null`. + """ # noqa: E501 + strategy: UtxoSelectionStrategyEnum + updated_at: datetime = Field(description="Time at which this configured row was last updated.", alias="updatedAt") + __properties: ClassVar[List[str]] = ["strategy", "updatedAt"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UtxoSelectionConfigEntry from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UtxoSelectionConfigEntry from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "strategy": obj.get("strategy"), + "updatedAt": obj.get("updatedAt") + }) + return _obj + + diff --git a/fireblocks/models/utxo_selection_config_response.py b/fireblocks/models/utxo_selection_config_response.py new file mode 100644 index 00000000..411c4db2 --- /dev/null +++ b/fireblocks/models/utxo_selection_config_response.py @@ -0,0 +1,98 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict +from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.effective_utxo_selection_config import EffectiveUtxoSelectionConfig +from fireblocks.models.utxo_selection_config_entry import UtxoSelectionConfigEntry +from typing import Optional, Set +from typing_extensions import Self + +class UtxoSelectionConfigResponse(BaseModel): + """ + `effective` is always present. `configured` is omitted when no row is stored at the requested scope (the server does not emit `\"configured\": null`). PUT responses always include `configured`. + """ # noqa: E501 + configured: Optional[UtxoSelectionConfigEntry] = None + effective: EffectiveUtxoSelectionConfig + __properties: ClassVar[List[str]] = ["configured", "effective"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of UtxoSelectionConfigResponse from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of configured + if self.configured: + _dict['configured'] = self.configured.to_dict() + # override the default output from pydantic by calling `to_dict()` of effective + if self.effective: + _dict['effective'] = self.effective.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UtxoSelectionConfigResponse from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "configured": UtxoSelectionConfigEntry.from_dict(obj["configured"]) if obj.get("configured") is not None else None, + "effective": EffectiveUtxoSelectionConfig.from_dict(obj["effective"]) if obj.get("effective") is not None else None + }) + return _obj + + diff --git a/fireblocks/models/utxo_selection_config_source_enum.py b/fireblocks/models/utxo_selection_config_source_enum.py new file mode 100644 index 00000000..3a8ee9d7 --- /dev/null +++ b/fireblocks/models/utxo_selection_config_source_enum.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class UtxoSelectionConfigSourceEnum(str, Enum): + """ + Where the effective strategy was resolved from. `DEFAULT` means no stored row applies at this scope or any scope it inherits from - `effective.strategy` reports whichever strategy currently applies. `WORKSPACE` and `VAULT_ASSET` are stored rows. + """ + + """ + allowed enum values + """ + DEFAULT = 'DEFAULT' + WORKSPACE = 'WORKSPACE' + VAULT_ASSET = 'VAULT_ASSET' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of UtxoSelectionConfigSourceEnum from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/fireblocks/models/utxo_selection_strategy_enum.py b/fireblocks/models/utxo_selection_strategy_enum.py new file mode 100644 index 00000000..cca7d39d --- /dev/null +++ b/fireblocks/models/utxo_selection_strategy_enum.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class UtxoSelectionStrategyEnum(str, Enum): + """ + UTXO selection strategy. `ADAPTIVE` is recommended: the engine chooses inputs at selection time. `ASC` spends smallest UTXOs first. `DESC` spends largest first. + """ + + """ + allowed enum values + """ + ASC = 'ASC' + DESC = 'DESC' + ADAPTIVE = 'ADAPTIVE' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of UtxoSelectionStrategyEnum from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/fireblocks/models/webhook.py b/fireblocks/models/webhook.py index f060f489..7c2ec124 100644 --- a/fireblocks/models/webhook.py +++ b/fireblocks/models/webhook.py @@ -22,7 +22,6 @@ from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated from fireblocks.models.webhook_event import WebhookEvent -from fireblocks.models.webhook_mtls import WebhookMtls from typing import Optional, Set from typing_extensions import Self @@ -37,10 +36,10 @@ class Webhook(BaseModel): status: StrictStr = Field(description="The status of the webhook") created_at: StrictInt = Field(description="The date and time the webhook was created in milliseconds", alias="createdAt") updated_at: StrictInt = Field(description="The date and time the webhook was last updated in milliseconds", alias="updatedAt") - mtls: Optional[WebhookMtls] = None + webhook_mtls_id: Optional[StrictStr] = Field(default=None, description="The id of the mTLS configuration this webhook presents when delivering, from `/v1/webhooks_settings/mtls`. Absent when the webhook does not use mTLS.", alias="webhookMtlsId") webhook_oauth_id: Optional[StrictStr] = Field(default=None, description="The id of the OAuth credentials this webhook authenticates with. Absent when the webhook does not use OAuth. Read the credentials themselves from `/v1/webhooks_settings/oauth/{webhookOauthId}`.", alias="webhookOauthId") custom_headers: Optional[List[StrictStr]] = Field(default=None, description="Names of the custom headers configured for this webhook. Header values are never returned.", alias="customHeaders") - __properties: ClassVar[List[str]] = ["id", "url", "description", "events", "status", "createdAt", "updatedAt", "mtls", "webhookOauthId", "customHeaders"] + __properties: ClassVar[List[str]] = ["id", "url", "description", "events", "status", "createdAt", "updatedAt", "webhookMtlsId", "webhookOauthId", "customHeaders"] @field_validator('status') def status_validate_enum(cls, value): @@ -88,14 +87,6 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of mtls - if self.mtls: - _dict['mtls'] = self.mtls.to_dict() - # set to None if mtls (nullable) is None - # and model_fields_set contains the field - if self.mtls is None and "mtls" in self.model_fields_set: - _dict['mtls'] = None - return _dict @classmethod @@ -115,7 +106,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "status": obj.get("status"), "createdAt": obj.get("createdAt"), "updatedAt": obj.get("updatedAt"), - "mtls": WebhookMtls.from_dict(obj["mtls"]) if obj.get("mtls") is not None else None, + "webhookMtlsId": obj.get("webhookMtlsId"), "webhookOauthId": obj.get("webhookOauthId"), "customHeaders": obj.get("customHeaders") }) diff --git a/fireblocks/models/webhook_mtls_config.py b/fireblocks/models/webhook_mtls_config.py new file mode 100644 index 00000000..6283a51a --- /dev/null +++ b/fireblocks/models/webhook_mtls_config.py @@ -0,0 +1,98 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + +class WebhookMtlsConfig(BaseModel): + """ + A signed client certificate stored for the workspace, and the id a webhook or OAuth credentials set references to use it. Several of them may share one configuration, so replacing the certificate here switches all of them at once. + """ # noqa: E501 + id: StrictStr = Field(description="The unique identifier of the mTLS configuration, to be set as `webhookMtlsId` on a webhook or on OAuth credentials.") + name: Optional[StrictStr] = Field(default=None, description="The label given to this mTLS configuration.") + signed_cert: StrictStr = Field(description="The signed client certificate PEM.", alias="signedCert") + expires_at: StrictInt = Field(description="When the certificate itself expires, in milliseconds since the epoch.", alias="expiresAt") + created_at: StrictInt = Field(description="When the certificate was uploaded, in milliseconds since the epoch.", alias="createdAt") + updated_at: StrictInt = Field(description="When this configuration was last changed, in milliseconds since the epoch. Differs from createdAt once the certificate has been replaced or the configuration renamed.", alias="updatedAt") + __properties: ClassVar[List[str]] = ["id", "name", "signedCert", "expiresAt", "createdAt", "updatedAt"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of WebhookMtlsConfig from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of WebhookMtlsConfig from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "id": obj.get("id"), + "name": obj.get("name"), + "signedCert": obj.get("signedCert"), + "expiresAt": obj.get("expiresAt"), + "createdAt": obj.get("createdAt"), + "updatedAt": obj.get("updatedAt") + }) + return _obj + + diff --git a/fireblocks/models/webhook_oauth_credentials.py b/fireblocks/models/webhook_oauth_credentials.py index 221b9435..16f5cbc2 100644 --- a/fireblocks/models/webhook_oauth_credentials.py +++ b/fireblocks/models/webhook_oauth_credentials.py @@ -35,10 +35,10 @@ class WebhookOauthCredentials(BaseModel): custom_jwt_claims: Optional[List[StrictStr]] = Field(default=None, description="Names of the additional claims placed in the JWT assertion. Claim values are write-only and are never returned. Absent when no custom claims are configured.", alias="customJwtClaims") custom_body_params: Optional[List[StrictStr]] = Field(default=None, description="Names of the additional parameters added to the token request body. Parameter values are write-only and are never returned. Absent when no custom parameters are configured.", alias="customBodyParams") custom_headers: Optional[List[StrictStr]] = Field(default=None, description="Names of the additional HTTP headers added to **the token request sent to the authorization server** — not to the webhook delivery, which has its own separate `customHeaders`. Header values are write-only and are never returned. Absent when no custom headers are configured.", alias="customHeaders") - mtls_client_signed_cert: Optional[StrictStr] = Field(default=None, description="PEM-encoded client certificate used for mTLS when fetching OAuth tokens.", alias="mtlsClientSignedCert") + webhook_mtls_id: Optional[StrictStr] = Field(default=None, description="The id of the mTLS configuration presented to the token endpoint. Absent when the token request does not use mTLS. Read the certificate from `/v1/webhooks_settings/mtls/{id}`.", alias="webhookMtlsId") created_at: StrictInt = Field(description="The date and time the OAuth credentials were created, in milliseconds.", alias="createdAt") updated_at: StrictInt = Field(description="The date and time the OAuth credentials were last updated, in milliseconds.", alias="updatedAt") - __properties: ClassVar[List[str]] = ["id", "name", "clientId", "url", "authMethod", "customJwtClaims", "customBodyParams", "customHeaders", "mtlsClientSignedCert", "createdAt", "updatedAt"] + __properties: ClassVar[List[str]] = ["id", "name", "clientId", "url", "authMethod", "customJwtClaims", "customBodyParams", "customHeaders", "webhookMtlsId", "createdAt", "updatedAt"] model_config = ConfigDict( populate_by_name=True, @@ -99,7 +99,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "customJwtClaims": obj.get("customJwtClaims"), "customBodyParams": obj.get("customBodyParams"), "customHeaders": obj.get("customHeaders"), - "mtlsClientSignedCert": obj.get("mtlsClientSignedCert"), + "webhookMtlsId": obj.get("webhookMtlsId"), "createdAt": obj.get("createdAt"), "updatedAt": obj.get("updatedAt") }) diff --git a/pyproject.toml b/pyproject.toml index 89b60fcd..08a27f53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fireblocks" -version = "32.0.0" +version = "0.0.0" description = "Fireblocks API" authors = ["Fireblocks "] license = "MIT License" diff --git a/setup.py b/setup.py index dd5d506c..8e55f57b 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ # prerequisite: setuptools # http://pypi.python.org/pypi/setuptools NAME = "fireblocks" -VERSION = "32.0.0" +VERSION = "0.0.0" PYTHON_REQUIRES = ">= 3.8" REQUIRES = [ "urllib3 >= 2.1.0, < 3.0.0", diff --git a/test/fireblocks/test_client.py b/test/fireblocks/test_client.py index a0ed765d..34ba266b 100644 --- a/test/fireblocks/test_client.py +++ b/test/fireblocks/test_client.py @@ -24,7 +24,7 @@ from fireblocks.api.compliance_api import ComplianceApi from fireblocks.api.compliance_orchestrator_beta_api import ComplianceOrchestratorBetaApi from fireblocks.api.compliance_screening_configuration_api import ComplianceScreeningConfigurationApi -from fireblocks.api.connected_accounts_beta_api import ConnectedAccountsBetaApi +from fireblocks.api.connected_accounts_api import ConnectedAccountsApi from fireblocks.api.console_user_api import ConsoleUserApi from fireblocks.api.contacts_api import ContactsApi from fireblocks.api.contract_interactions_api import ContractInteractionsApi @@ -110,8 +110,8 @@ def test_get_compliance_orchestrator_beta(fireblocks_instance): def test_get_compliance_screening_configuration(fireblocks_instance): assert isinstance(fireblocks_instance.compliance_screening_configuration, ComplianceScreeningConfigurationApi) -def test_get_connected_accounts_beta(fireblocks_instance): - assert isinstance(fireblocks_instance.connected_accounts_beta, ConnectedAccountsBetaApi) +def test_get_connected_accounts(fireblocks_instance): + assert isinstance(fireblocks_instance.connected_accounts, ConnectedAccountsApi) def test_get_console_user(fireblocks_instance): assert isinstance(fireblocks_instance.console_user, ConsoleUserApi) diff --git a/test/test_add_connected_account_request.py b/test/test_add_connected_account_request.py index bd79d65d..00cfd649 100644 --- a/test/test_add_connected_account_request.py +++ b/test/test_add_connected_account_request.py @@ -38,7 +38,7 @@ def make_instance(self, include_optional) -> AddConnectedAccountRequest: return AddConnectedAccountRequest( provider_id = 'BINANCE', display_name = 'My Binance Account', - creds = '[B@17269017', + creds = '[B@6aca4933', api_key = 'api_key_abc123', main_account_id = 'acc-parent-001', account_id = 'provider-acc-001', @@ -47,7 +47,7 @@ def make_instance(self, include_optional) -> AddConnectedAccountRequest: else: return AddConnectedAccountRequest( provider_id = 'BINANCE', - creds = '[B@17269017', + creds = '[B@6aca4933', api_key = 'api_key_abc123', ) """ diff --git a/test/test_address_registry_create_proof_of_ownership_request.py b/test/test_address_registry_create_proof_of_ownership_request.py new file mode 100644 index 00000000..6ab5142e --- /dev/null +++ b/test/test_address_registry_create_proof_of_ownership_request.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.address_registry_create_proof_of_ownership_request import ( + AddressRegistryCreateProofOfOwnershipRequest, +) + + +class TestAddressRegistryCreateProofOfOwnershipRequest(unittest.TestCase): + """AddressRegistryCreateProofOfOwnershipRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional + ) -> AddressRegistryCreateProofOfOwnershipRequest: + """Test AddressRegistryCreateProofOfOwnershipRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `AddressRegistryCreateProofOfOwnershipRequest` + """ + model = AddressRegistryCreateProofOfOwnershipRequest() + if include_optional: + return AddressRegistryCreateProofOfOwnershipRequest( + address = '0x742d35cc6634c0532925a3b844bc9e7595f0beb0' + ) + else: + return AddressRegistryCreateProofOfOwnershipRequest( + address = '0x742d35cc6634c0532925a3b844bc9e7595f0beb0', + ) + """ + + def testAddressRegistryCreateProofOfOwnershipRequest(self): + """Test AddressRegistryCreateProofOfOwnershipRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_address_registry_create_proof_of_ownership_response.py b/test/test_address_registry_create_proof_of_ownership_response.py new file mode 100644 index 00000000..9ecc8f8d --- /dev/null +++ b/test/test_address_registry_create_proof_of_ownership_response.py @@ -0,0 +1,64 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.address_registry_create_proof_of_ownership_response import ( + AddressRegistryCreateProofOfOwnershipResponse, +) + + +class TestAddressRegistryCreateProofOfOwnershipResponse(unittest.TestCase): + """AddressRegistryCreateProofOfOwnershipResponse unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional + ) -> AddressRegistryCreateProofOfOwnershipResponse: + """Test AddressRegistryCreateProofOfOwnershipResponse + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `AddressRegistryCreateProofOfOwnershipResponse` + """ + model = AddressRegistryCreateProofOfOwnershipResponse() + if include_optional: + return AddressRegistryCreateProofOfOwnershipResponse( + pdf = '[B@442bdf69', + export_id = '3fa85f64-5717-4562-b3fc-2c963f66afa6', + verification_hash = 'BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA', + expires_at = '2027-08-17' + ) + else: + return AddressRegistryCreateProofOfOwnershipResponse( + pdf = '[B@442bdf69', + export_id = '3fa85f64-5717-4562-b3fc-2c963f66afa6', + verification_hash = 'BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA', + expires_at = '2027-08-17', + ) + """ + + def testAddressRegistryCreateProofOfOwnershipResponse(self): + """Test AddressRegistryCreateProofOfOwnershipResponse""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_address_registry_legal_entity.py b/test/test_address_registry_legal_entity.py index e9c02488..0c41dedd 100644 --- a/test/test_address_registry_legal_entity.py +++ b/test/test_address_registry_legal_entity.py @@ -40,8 +40,9 @@ def make_instance(self, include_optional) -> AddressRegistryLegalEntity: entity_name = 'ACME Corporation', jurisdiction = 'US', lei = '254900GC33RBE6FQA817', - travel_rule_providers = ["TRAVEL_RULE_PROVIDER_NOTABENE","TRAVEL_RULE_PROVIDER_SYGNA"], - email = 'compliance@example.com' + travel_rule_providers = ["NOTABENE","SYGNA"], + email = 'compliance@example.com', + proof_of_ownership_available = False ) else: return AddressRegistryLegalEntity( @@ -49,8 +50,9 @@ def make_instance(self, include_optional) -> AddressRegistryLegalEntity: entity_name = 'ACME Corporation', jurisdiction = 'US', lei = '254900GC33RBE6FQA817', - travel_rule_providers = ["TRAVEL_RULE_PROVIDER_NOTABENE","TRAVEL_RULE_PROVIDER_SYGNA"], + travel_rule_providers = ["NOTABENE","SYGNA"], email = 'compliance@example.com', + proof_of_ownership_available = False, ) """ diff --git a/test/test_address_registry_verify_proof_of_ownership_request.py b/test/test_address_registry_verify_proof_of_ownership_request.py new file mode 100644 index 00000000..7e01234b --- /dev/null +++ b/test/test_address_registry_verify_proof_of_ownership_request.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.address_registry_verify_proof_of_ownership_request import ( + AddressRegistryVerifyProofOfOwnershipRequest, +) + + +class TestAddressRegistryVerifyProofOfOwnershipRequest(unittest.TestCase): + """AddressRegistryVerifyProofOfOwnershipRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional + ) -> AddressRegistryVerifyProofOfOwnershipRequest: + """Test AddressRegistryVerifyProofOfOwnershipRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `AddressRegistryVerifyProofOfOwnershipRequest` + """ + model = AddressRegistryVerifyProofOfOwnershipRequest() + if include_optional: + return AddressRegistryVerifyProofOfOwnershipRequest( + export_id = '3fa85f64-5717-4562-b3fc-2c963f66afa6', + verification_hash = 'BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA', + address = '0x742d35cc6634c0532925a3b844bc9e7595f0beb0', + expires_at = '2027-08-17' + ) + else: + return AddressRegistryVerifyProofOfOwnershipRequest( + export_id = '3fa85f64-5717-4562-b3fc-2c963f66afa6', + verification_hash = 'BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA', + address = '0x742d35cc6634c0532925a3b844bc9e7595f0beb0', + ) + """ + + def testAddressRegistryVerifyProofOfOwnershipRequest(self): + """Test AddressRegistryVerifyProofOfOwnershipRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_address_registry_verify_proof_of_ownership_response.py b/test/test_address_registry_verify_proof_of_ownership_response.py new file mode 100644 index 00000000..3f32c0c3 --- /dev/null +++ b/test/test_address_registry_verify_proof_of_ownership_response.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.address_registry_verify_proof_of_ownership_response import ( + AddressRegistryVerifyProofOfOwnershipResponse, +) + + +class TestAddressRegistryVerifyProofOfOwnershipResponse(unittest.TestCase): + """AddressRegistryVerifyProofOfOwnershipResponse unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional + ) -> AddressRegistryVerifyProofOfOwnershipResponse: + """Test AddressRegistryVerifyProofOfOwnershipResponse + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `AddressRegistryVerifyProofOfOwnershipResponse` + """ + model = AddressRegistryVerifyProofOfOwnershipResponse() + if include_optional: + return AddressRegistryVerifyProofOfOwnershipResponse( + valid = True, + expires_at = '2027-08-17' + ) + else: + return AddressRegistryVerifyProofOfOwnershipResponse( + valid = True, + expires_at = '2027-08-17', + ) + """ + + def testAddressRegistryVerifyProofOfOwnershipResponse(self): + """Test AddressRegistryVerifyProofOfOwnershipResponse""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_allocation_withdraw_payload.py b/test/test_allocation_withdraw_payload.py index 02337ae1..2e714ed1 100644 --- a/test/test_allocation_withdraw_payload.py +++ b/test/test_allocation_withdraw_payload.py @@ -36,14 +36,10 @@ def make_instance(self, include_optional) -> AllocationWithdrawPayload: model = AllocationWithdrawPayload() if include_optional: return AllocationWithdrawPayload( - vault_account_id = '12', - asset = 'CANTON', allocation_transaction_id = '5a1d8b0f-2c31-4c7e-9d0a-118e7b6c4a21' ) else: return AllocationWithdrawPayload( - vault_account_id = '12', - asset = 'CANTON', allocation_transaction_id = '5a1d8b0f-2c31-4c7e-9d0a-118e7b6c4a21', ) """ diff --git a/test/test_audit_log_entry.py b/test/test_audit_log_entry.py index 887eb311..85df6e6c 100644 --- a/test/test_audit_log_entry.py +++ b/test/test_audit_log_entry.py @@ -38,13 +38,13 @@ def make_instance(self, include_optional) -> AuditLogEntry: return AuditLogEntry( timestamp = '1700000000', event_type = 'STATUS_TRANSITION', - data = '[B@71d3ee2a' + data = '[B@7f8712c' ) else: return AuditLogEntry( timestamp = '1700000000', event_type = 'STATUS_TRANSITION', - data = '[B@71d3ee2a', + data = '[B@7f8712c', ) """ diff --git a/test/test_canton_call_allocation_withdraw.py b/test/test_canton_call_allocation_withdraw.py index 6419d914..c99c4fca 100644 --- a/test/test_canton_call_allocation_withdraw.py +++ b/test/test_canton_call_allocation_withdraw.py @@ -40,16 +40,12 @@ def make_instance(self, include_optional) -> CantonCallAllocationWithdraw: return CantonCallAllocationWithdraw( type = 'ALLOCATION_WITHDRAW', payload = fireblocks.models.allocation_withdraw_payload.AllocationWithdrawPayload( - vault_account_id = '12', - asset = 'CANTON', allocation_transaction_id = '5a1d8b0f-2c31-4c7e-9d0a-118e7b6c4a21', ) ) else: return CantonCallAllocationWithdraw( type = 'ALLOCATION_WITHDRAW', payload = fireblocks.models.allocation_withdraw_payload.AllocationWithdrawPayload( - vault_account_id = '12', - asset = 'CANTON', allocation_transaction_id = '5a1d8b0f-2c31-4c7e-9d0a-118e7b6c4a21', ), ) """ diff --git a/test/test_address_registry_error.py b/test/test_canton_call_details.py similarity index 59% rename from test/test_address_registry_error.py rename to test/test_canton_call_details.py index dcc99622..5a552569 100644 --- a/test/test_address_registry_error.py +++ b/test/test_canton_call_details.py @@ -14,11 +14,11 @@ import unittest -from fireblocks.models.address_registry_error import AddressRegistryError +from fireblocks.models.canton_call_details import CantonCallDetails -class TestAddressRegistryError(unittest.TestCase): - """AddressRegistryError unit test stubs""" +class TestCantonCallDetails(unittest.TestCase): + """CantonCallDetails unit test stubs""" def setUp(self): pass @@ -26,27 +26,29 @@ def setUp(self): def tearDown(self): pass - def make_instance(self, include_optional) -> AddressRegistryError: - """Test AddressRegistryError + def make_instance(self, include_optional) -> CantonCallDetails: + """Test CantonCallDetails include_optional is a boolean, when False only required params are included, when True both required and optional params are included""" - # uncomment below to create an instance of `AddressRegistryError` + # uncomment below to create an instance of `CantonCallDetails` """ - model = AddressRegistryError() + model = CantonCallDetails() if include_optional: - return AddressRegistryError( - code = 2140, - message = 'Address registry opt-in required for this workspace.' + return CantonCallDetails( + version = 1, + domain = 'ALLOCATION', + type = 'ALLOCATION_WITHDRAW', + vendor = 'DTCC', + original_transaction_id = '9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488' ) else: - return AddressRegistryError( - message = 'Address registry opt-in required for this workspace.', + return CantonCallDetails( ) """ - def testAddressRegistryError(self): - """Test AddressRegistryError""" + def testCantonCallDetails(self): + """Test CantonCallDetails""" # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) diff --git a/test/test_canton_call_participant_onboarding.py b/test/test_canton_call_participant_onboarding.py index 6dc74956..1de4bf27 100644 --- a/test/test_canton_call_participant_onboarding.py +++ b/test/test_canton_call_participant_onboarding.py @@ -44,10 +44,10 @@ def make_instance(self, include_optional) -> CantonCallParticipantOnboarding: asset = 'CANTON', expires_at = '2026-12-31T23:59:59Z', operator = 'dtcc-operator::1220abc…', - provider = 'dtcc-provider::1220abc…', compliance = 'dtcc-compliance::1220abc…', registrar = 'dtcc-registrar::1220abc…', - client_onboarder = 'dtcc-onboarder::1220abc…', ) + client_onboarder = 'dtcc-onboarder::1220abc…', + upgrader = 'dtcc-upgrader::1220abc…', ) ) else: return CantonCallParticipantOnboarding( @@ -57,10 +57,10 @@ def make_instance(self, include_optional) -> CantonCallParticipantOnboarding: asset = 'CANTON', expires_at = '2026-12-31T23:59:59Z', operator = 'dtcc-operator::1220abc…', - provider = 'dtcc-provider::1220abc…', compliance = 'dtcc-compliance::1220abc…', registrar = 'dtcc-registrar::1220abc…', - client_onboarder = 'dtcc-onboarder::1220abc…', ), + client_onboarder = 'dtcc-onboarder::1220abc…', + upgrader = 'dtcc-upgrader::1220abc…', ), ) """ diff --git a/test/test_canton_details.py b/test/test_canton_details.py new file mode 100644 index 00000000..cbb85485 --- /dev/null +++ b/test/test_canton_details.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.canton_details import CantonDetails + + +class TestCantonDetails(unittest.TestCase): + """CantonDetails unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CantonDetails: + """Test CantonDetails + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `CantonDetails` + """ + model = CantonDetails() + if include_optional: + return CantonDetails( + offer_response = {"version":1,"domain":"ONBOARDING","vendor":"DTCC","availableResponses":["DTCC_END_INVESTOR_ONBOARDING_ACCEPT","DTCC_END_INVESTOR_ONBOARDING_REJECT"],"expiresAt":"2026-12-31T23:59:59Z"}, + call = {"version":1,"domain":"ALLOCATION","type":"ALLOCATION_WITHDRAW","originalTransactionId":"9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488"}, + settlement = {"version":1,"domain":"ALLOCATION","type":"ALLOCATION_SETTLEMENT","originalTransactionId":"9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488"} + ) + else: + return CantonDetails( + ) + """ + + def testCantonDetails(self): + """Test CantonDetails""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_canton_domain_enum.py b/test/test_canton_domain_enum.py new file mode 100644 index 00000000..93148209 --- /dev/null +++ b/test/test_canton_domain_enum.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.canton_domain_enum import CantonDomainEnum + + +class TestCantonDomainEnum(unittest.TestCase): + """CantonDomainEnum unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCantonDomainEnum(self): + """Test CantonDomainEnum""" + # inst = CantonDomainEnum() + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_canton_offer_response_details.py b/test/test_canton_offer_response_details.py new file mode 100644 index 00000000..437f7f9c --- /dev/null +++ b/test/test_canton_offer_response_details.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.canton_offer_response_details import CantonOfferResponseDetails + + +class TestCantonOfferResponseDetails(unittest.TestCase): + """CantonOfferResponseDetails unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CantonOfferResponseDetails: + """Test CantonOfferResponseDetails + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `CantonOfferResponseDetails` + """ + model = CantonOfferResponseDetails() + if include_optional: + return CantonOfferResponseDetails( + version = 1, + domain = 'ALLOCATION', + vendor = 'DTCC', + available_responses = ["DTCC_END_INVESTOR_ONBOARDING_ACCEPT","DTCC_END_INVESTOR_ONBOARDING_REJECT"], + expires_at = '2026-12-31T23:59:59Z', + approval_transaction_id = '2a7f4c31-9d08-4b52-8e6a-1f3c70b9d485', + original_transaction_id = '9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488', + verdict = 'ACCEPTED' + ) + else: + return CantonOfferResponseDetails( + ) + """ + + def testCantonOfferResponseDetails(self): + """Test CantonOfferResponseDetails""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_canton_settlement_details.py b/test/test_canton_settlement_details.py new file mode 100644 index 00000000..f2a6bda2 --- /dev/null +++ b/test/test_canton_settlement_details.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.canton_settlement_details import CantonSettlementDetails + + +class TestCantonSettlementDetails(unittest.TestCase): + """CantonSettlementDetails unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CantonSettlementDetails: + """Test CantonSettlementDetails + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `CantonSettlementDetails` + """ + model = CantonSettlementDetails() + if include_optional: + return CantonSettlementDetails( + version = 1, + domain = 'ALLOCATION', + type = 'ALLOCATION_SETTLEMENT', + original_transaction_id = '9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488' + ) + else: + return CantonSettlementDetails( + ) + """ + + def testCantonSettlementDetails(self): + """Test CantonSettlementDetails""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_canton_vendor_enum.py b/test/test_canton_vendor_enum.py new file mode 100644 index 00000000..b76f89b2 --- /dev/null +++ b/test/test_canton_vendor_enum.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.canton_vendor_enum import CantonVendorEnum + + +class TestCantonVendorEnum(unittest.TestCase): + """CantonVendorEnum unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCantonVendorEnum(self): + """Test CantonVendorEnum""" + # inst = CantonVendorEnum() + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_compliance_api.py b/test/test_compliance_api.py index 0c2afc7b..e0ff4800 100644 --- a/test/test_compliance_api.py +++ b/test/test_compliance_api.py @@ -54,6 +54,13 @@ def test_assign_vaults_to_legal_entity(self) -> None: """ pass + def test_create_address_registry_proof_of_ownership(self) -> None: + """Test case for create_address_registry_proof_of_ownership + + Create a Proof of Ownership PDF for an address + """ + pass + def test_create_counterparty_group(self) -> None: """Test case for create_counterparty_group @@ -306,6 +313,13 @@ def test_update_travel_rule_config(self) -> None: """ pass + def test_verify_address_registry_proof_of_ownership(self) -> None: + """Test case for verify_address_registry_proof_of_ownership + + Verify a Proof of Ownership export + """ + pass + if __name__ == "__main__": unittest.main() diff --git a/test/test_connected_accounts_beta_api.py b/test/test_connected_accounts_api.py similarity index 93% rename from test/test_connected_accounts_beta_api.py rename to test/test_connected_accounts_api.py index c0b3cda0..b81009d3 100644 --- a/test/test_connected_accounts_beta_api.py +++ b/test/test_connected_accounts_api.py @@ -14,14 +14,14 @@ import unittest -from fireblocks.api.connected_accounts_beta_api import ConnectedAccountsBetaApi +from fireblocks.api.connected_accounts_api import ConnectedAccountsApi -class TestConnectedAccountsBetaApi(unittest.TestCase): - """ConnectedAccountsBetaApi unit test stubs""" +class TestConnectedAccountsApi(unittest.TestCase): + """ConnectedAccountsApi unit test stubs""" def setUp(self) -> None: - self.api = ConnectedAccountsBetaApi() + self.api = ConnectedAccountsApi() def tearDown(self) -> None: pass diff --git a/test/test_console_user_api.py b/test/test_console_user_api.py index a6938c36..10cc63d1 100644 --- a/test/test_console_user_api.py +++ b/test/test_console_user_api.py @@ -33,6 +33,13 @@ def test_create_console_user(self) -> None: """ pass + def test_delete_console_user(self) -> None: + """Test case for delete_console_user + + Request deletion of a console user + """ + pass + def test_get_console_users(self) -> None: """Test case for get_console_users diff --git a/test/test_create_webhook_mtls_config_request.py b/test/test_create_webhook_mtls_config_request.py new file mode 100644 index 00000000..46c1c942 --- /dev/null +++ b/test/test_create_webhook_mtls_config_request.py @@ -0,0 +1,61 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.create_webhook_mtls_config_request import ( + CreateWebhookMtlsConfigRequest, +) + + +class TestCreateWebhookMtlsConfigRequest(unittest.TestCase): + """CreateWebhookMtlsConfigRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateWebhookMtlsConfigRequest: + """Test CreateWebhookMtlsConfigRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `CreateWebhookMtlsConfigRequest` + """ + model = CreateWebhookMtlsConfigRequest() + if include_optional: + return CreateWebhookMtlsConfigRequest( + name = 'Production gateway 2026', + signed_cert = '-----BEGIN CERTIFICATE----- +... +-----END CERTIFICATE-----' + ) + else: + return CreateWebhookMtlsConfigRequest( + signed_cert = '-----BEGIN CERTIFICATE----- +... +-----END CERTIFICATE-----', + ) + """ + + def testCreateWebhookMtlsConfigRequest(self): + """Test CreateWebhookMtlsConfigRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_create_webhook_oauth_request.py b/test/test_create_webhook_oauth_request.py index d09654bd..62ad1637 100644 --- a/test/test_create_webhook_oauth_request.py +++ b/test/test_create_webhook_oauth_request.py @@ -44,9 +44,7 @@ def make_instance(self, include_optional) -> CreateWebhookOauthRequest: custom_jwt_claims = {"aud":"https://auth.example.com","email_verified":true}, custom_body_params = {"scope":"payments.read payments.write"}, custom_headers = {"x-api-key":"gateway-key"}, - mtls_client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----' + webhook_mtls_id = '6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f' ) else: return CreateWebhookOauthRequest( diff --git a/test/test_create_webhook_request.py b/test/test_create_webhook_request.py index a8761e4a..6cebf2a0 100644 --- a/test/test_create_webhook_request.py +++ b/test/test_create_webhook_request.py @@ -40,10 +40,7 @@ def make_instance(self, include_optional) -> CreateWebhookRequest: description = 'This webhook is used for transactions notifications', events = ["transaction.created","transaction.status.updated"], enabled = False, - mtls = fireblocks.models.webhook_mtls.WebhookMtls( - client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----', ), + webhook_mtls_id = '6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f', webhook_oauth_id = '123e4567-e89b-12d3-a456-426614174000', custom_headers = {"X-Gateway-Key":"abc123","X-Region-Tag":"eu","X-Forwarded-For":["203.0.113.7","198.51.100.4"]} ) diff --git a/test/test_delete_webhook_mtls_config_response.py b/test/test_delete_webhook_mtls_config_response.py new file mode 100644 index 00000000..54450857 --- /dev/null +++ b/test/test_delete_webhook_mtls_config_response.py @@ -0,0 +1,73 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.delete_webhook_mtls_config_response import ( + DeleteWebhookMtlsConfigResponse, +) + + +class TestDeleteWebhookMtlsConfigResponse(unittest.TestCase): + """DeleteWebhookMtlsConfigResponse unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> DeleteWebhookMtlsConfigResponse: + """Test DeleteWebhookMtlsConfigResponse + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `DeleteWebhookMtlsConfigResponse` + """ + model = DeleteWebhookMtlsConfigResponse() + if include_optional: + return DeleteWebhookMtlsConfigResponse( + id = '44fcead0-7053-4831-a53a-df7fb90d440f', + name = 'Production gateway 2026', + signed_cert = '-----BEGIN CERTIFICATE----- +... +-----END CERTIFICATE-----', + expires_at = 1726108200000, + created_at = 1694572200000, + updated_at = 1726108200000, + detached_webhook_ids = ["44fcead0-7053-4831-a53a-df7fb90d440f"], + detached_webhook_oauth_ids = ["6e5daa9a-56cd-4975-ac16-bb9d1b48dff5"] + ) + else: + return DeleteWebhookMtlsConfigResponse( + id = '44fcead0-7053-4831-a53a-df7fb90d440f', + signed_cert = '-----BEGIN CERTIFICATE----- +... +-----END CERTIFICATE-----', + expires_at = 1726108200000, + created_at = 1694572200000, + updated_at = 1726108200000, + detached_webhook_ids = ["44fcead0-7053-4831-a53a-df7fb90d440f"], + detached_webhook_oauth_ids = ["6e5daa9a-56cd-4975-ac16-bb9d1b48dff5"], + ) + """ + + def testDeleteWebhookMtlsConfigResponse(self): + """Test DeleteWebhookMtlsConfigResponse""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_delete_webhook_oauth_response.py b/test/test_delete_webhook_oauth_response.py index cdb4160c..2d90bb3a 100644 --- a/test/test_delete_webhook_oauth_response.py +++ b/test/test_delete_webhook_oauth_response.py @@ -44,9 +44,7 @@ def make_instance(self, include_optional) -> DeleteWebhookOauthResponse: custom_jwt_claims = [aud, resource], custom_body_params = [scope], custom_headers = [X-Api-Key], - mtls_client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----', + webhook_mtls_id = '6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f', created_at = 1625097600000, updated_at = 1625097600000, detached_webhook_ids = ["44fcead0-7053-4831-a53a-df7fb90d440f"] diff --git a/test/test_effective_utxo_selection_config.py b/test/test_effective_utxo_selection_config.py new file mode 100644 index 00000000..45c3c133 --- /dev/null +++ b/test/test_effective_utxo_selection_config.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.effective_utxo_selection_config import ( + EffectiveUtxoSelectionConfig, +) + + +class TestEffectiveUtxoSelectionConfig(unittest.TestCase): + """EffectiveUtxoSelectionConfig unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> EffectiveUtxoSelectionConfig: + """Test EffectiveUtxoSelectionConfig + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `EffectiveUtxoSelectionConfig` + """ + model = EffectiveUtxoSelectionConfig() + if include_optional: + return EffectiveUtxoSelectionConfig( + strategy = 'ADAPTIVE', + source = 'DEFAULT' + ) + else: + return EffectiveUtxoSelectionConfig( + strategy = 'ADAPTIVE', + source = 'DEFAULT', + ) + """ + + def testEffectiveUtxoSelectionConfig(self): + """Test EffectiveUtxoSelectionConfig""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_execution_request_details.py b/test/test_execution_request_details.py index 42d57601..fcb96d07 100644 --- a/test/test_execution_request_details.py +++ b/test/test_execution_request_details.py @@ -36,7 +36,7 @@ def make_instance(self, include_optional) -> ExecutionRequestDetails: model = ExecutionRequestDetails() if include_optional: return ExecutionRequestDetails( - type = 'QUOTE', + type = 'LIMIT', side = 'BUY', base_amount = '', base_asset_id = '', @@ -44,16 +44,20 @@ def make_instance(self, include_optional) -> ExecutionRequestDetails: quote_asset_id = '', quote_asset_rail = 'BLOCKCHAIN', quote_id = '', - re_quote = None + re_quote = None, + price = '60000.00', + time_in_force = None ) else: return ExecutionRequestDetails( - type = 'QUOTE', + type = 'LIMIT', side = 'BUY', base_amount = '', base_asset_id = '', quote_asset_id = '', quote_id = '', + price = '60000.00', + time_in_force = None, ) """ diff --git a/test/test_execution_response_details.py b/test/test_execution_response_details.py index b4cac72e..44c53925 100644 --- a/test/test_execution_response_details.py +++ b/test/test_execution_response_details.py @@ -36,7 +36,7 @@ def make_instance(self, include_optional) -> ExecutionResponseDetails: model = ExecutionResponseDetails() if include_optional: return ExecutionResponseDetails( - type = 'QUOTE', + type = 'LIMIT', side = 'BUY', base_amount = '', base_asset_id = '', @@ -45,17 +45,21 @@ def make_instance(self, include_optional) -> ExecutionResponseDetails: quote_asset_rail = 'BLOCKCHAIN', quote_id = '', quote_amount = '', - re_quote = None + re_quote = None, + price = '60000.00', + time_in_force = None ) else: return ExecutionResponseDetails( - type = 'QUOTE', + type = 'LIMIT', side = 'BUY', base_amount = '', base_asset_id = '', quote_asset_id = '', quote_id = '', quote_amount = '', + price = '60000.00', + time_in_force = None, ) """ diff --git a/test/test_fok_time_in_force.py b/test/test_fok_time_in_force.py new file mode 100644 index 00000000..233aae4f --- /dev/null +++ b/test/test_fok_time_in_force.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.fok_time_in_force import FokTimeInForce + + +class TestFokTimeInForce(unittest.TestCase): + """FokTimeInForce unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> FokTimeInForce: + """Test FokTimeInForce + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `FokTimeInForce` + """ + model = FokTimeInForce() + if include_optional: + return FokTimeInForce( + type = 'FOK' + ) + else: + return FokTimeInForce( + type = 'FOK', + ) + """ + + def testFokTimeInForce(self): + """Test FokTimeInForce""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_limit_execution_request_details.py b/test/test_limit_execution_request_details.py new file mode 100644 index 00000000..bab3f33f --- /dev/null +++ b/test/test_limit_execution_request_details.py @@ -0,0 +1,70 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.limit_execution_request_details import ( + LimitExecutionRequestDetails, +) + + +class TestLimitExecutionRequestDetails(unittest.TestCase): + """LimitExecutionRequestDetails unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> LimitExecutionRequestDetails: + """Test LimitExecutionRequestDetails + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `LimitExecutionRequestDetails` + """ + model = LimitExecutionRequestDetails() + if include_optional: + return LimitExecutionRequestDetails( + type = 'LIMIT', + price = '60000.00', + time_in_force = None, + side = 'BUY', + base_amount = '', + base_asset_id = '', + base_asset_rail = 'BLOCKCHAIN', + quote_asset_id = '', + quote_asset_rail = 'BLOCKCHAIN' + ) + else: + return LimitExecutionRequestDetails( + type = 'LIMIT', + price = '60000.00', + time_in_force = None, + side = 'BUY', + base_amount = '', + base_asset_id = '', + quote_asset_id = '', + ) + """ + + def testLimitExecutionRequestDetails(self): + """Test LimitExecutionRequestDetails""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_limit_execution_response_details.py b/test/test_limit_execution_response_details.py new file mode 100644 index 00000000..30dff482 --- /dev/null +++ b/test/test_limit_execution_response_details.py @@ -0,0 +1,70 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.limit_execution_response_details import ( + LimitExecutionResponseDetails, +) + + +class TestLimitExecutionResponseDetails(unittest.TestCase): + """LimitExecutionResponseDetails unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> LimitExecutionResponseDetails: + """Test LimitExecutionResponseDetails + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `LimitExecutionResponseDetails` + """ + model = LimitExecutionResponseDetails() + if include_optional: + return LimitExecutionResponseDetails( + type = 'LIMIT', + price = '60000.00', + time_in_force = None, + side = 'BUY', + base_amount = '', + base_asset_id = '', + base_asset_rail = 'BLOCKCHAIN', + quote_asset_id = '', + quote_asset_rail = 'BLOCKCHAIN' + ) + else: + return LimitExecutionResponseDetails( + type = 'LIMIT', + price = '60000.00', + time_in_force = None, + side = 'BUY', + base_amount = '', + base_asset_id = '', + quote_asset_id = '', + ) + """ + + def testLimitExecutionResponseDetails(self): + """Test LimitExecutionResponseDetails""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_limit_type_details.py b/test/test_limit_type_details.py new file mode 100644 index 00000000..792e2739 --- /dev/null +++ b/test/test_limit_type_details.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.limit_type_details import LimitTypeDetails + + +class TestLimitTypeDetails(unittest.TestCase): + """LimitTypeDetails unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> LimitTypeDetails: + """Test LimitTypeDetails + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `LimitTypeDetails` + """ + model = LimitTypeDetails() + if include_optional: + return LimitTypeDetails( + type = 'LIMIT', + price = '60000.00', + time_in_force = None + ) + else: + return LimitTypeDetails( + type = 'LIMIT', + price = '60000.00', + time_in_force = None, + ) + """ + + def testLimitTypeDetails(self): + """Test LimitTypeDetails""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_limit_type_enum.py b/test/test_limit_type_enum.py new file mode 100644 index 00000000..97767518 --- /dev/null +++ b/test/test_limit_type_enum.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.limit_type_enum import LimitTypeEnum + + +class TestLimitTypeEnum(unittest.TestCase): + """LimitTypeEnum unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testLimitTypeEnum(self): + """Test LimitTypeEnum""" + # inst = LimitTypeEnum() + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_offer_response.py b/test/test_offer_response.py index 6019cc60..110b81f4 100644 --- a/test/test_offer_response.py +++ b/test/test_offer_response.py @@ -36,12 +36,12 @@ def make_instance(self, include_optional) -> OfferResponse: model = OfferResponse() if include_optional: return OfferResponse( - domain = 'TRANSFERS', + domain = 'TRANSFER', response = None ) else: return OfferResponse( - domain = 'TRANSFERS', + domain = 'TRANSFER', response = None, ) """ diff --git a/test/test_offer_response_allocation.py b/test/test_offer_response_allocation.py index bef81fd4..d93975e4 100644 --- a/test/test_offer_response_allocation.py +++ b/test/test_offer_response_allocation.py @@ -36,12 +36,12 @@ def make_instance(self, include_optional) -> OfferResponseAllocation: model = OfferResponseAllocation() if include_optional: return OfferResponseAllocation( - domain = 'ALLOCATIONS', + domain = 'ALLOCATION', response = None ) else: return OfferResponseAllocation( - domain = 'ALLOCATIONS', + domain = 'ALLOCATION', response = None, ) """ diff --git a/test/test_offer_response_transfer.py b/test/test_offer_response_transfer.py index 8161f9b5..44be1919 100644 --- a/test/test_offer_response_transfer.py +++ b/test/test_offer_response_transfer.py @@ -36,12 +36,12 @@ def make_instance(self, include_optional) -> OfferResponseTransfer: model = OfferResponseTransfer() if include_optional: return OfferResponseTransfer( - domain = 'TRANSFERS', + domain = 'TRANSFER', response = None ) else: return OfferResponseTransfer( - domain = 'TRANSFERS', + domain = 'TRANSFER', response = None, ) """ diff --git a/test/test_participant_onboarding_payload.py b/test/test_participant_onboarding_payload.py index e69da056..e6032038 100644 --- a/test/test_participant_onboarding_payload.py +++ b/test/test_participant_onboarding_payload.py @@ -42,20 +42,20 @@ def make_instance(self, include_optional) -> ParticipantOnboardingPayload: asset = 'CANTON', expires_at = '2026-12-31T23:59:59Z', operator = 'dtcc-operator::1220abc…', - provider = 'dtcc-provider::1220abc…', compliance = 'dtcc-compliance::1220abc…', registrar = 'dtcc-registrar::1220abc…', - client_onboarder = 'dtcc-onboarder::1220abc…' + client_onboarder = 'dtcc-onboarder::1220abc…', + upgrader = 'dtcc-upgrader::1220abc…' ) else: return ParticipantOnboardingPayload( vault_account_id = '12', asset = 'CANTON', operator = 'dtcc-operator::1220abc…', - provider = 'dtcc-provider::1220abc…', compliance = 'dtcc-compliance::1220abc…', registrar = 'dtcc-registrar::1220abc…', client_onboarder = 'dtcc-onboarder::1220abc…', + upgrader = 'dtcc-upgrader::1220abc…', ) """ diff --git a/test/test_webhook_mtls.py b/test/test_post_trade_settlement.py similarity index 65% rename from test/test_webhook_mtls.py rename to test/test_post_trade_settlement.py index c92f9cfb..01b9aed3 100644 --- a/test/test_webhook_mtls.py +++ b/test/test_post_trade_settlement.py @@ -14,11 +14,11 @@ import unittest -from fireblocks.models.webhook_mtls import WebhookMtls +from fireblocks.models.post_trade_settlement import PostTradeSettlement -class TestWebhookMtls(unittest.TestCase): - """WebhookMtls unit test stubs""" +class TestPostTradeSettlement(unittest.TestCase): + """PostTradeSettlement unit test stubs""" def setUp(self): pass @@ -26,30 +26,26 @@ def setUp(self): def tearDown(self): pass - def make_instance(self, include_optional) -> WebhookMtls: - """Test WebhookMtls + def make_instance(self, include_optional) -> PostTradeSettlement: + """Test PostTradeSettlement include_optional is a boolean, when False only required params are included, when True both required and optional params are included""" - # uncomment below to create an instance of `WebhookMtls` + # uncomment below to create an instance of `PostTradeSettlement` """ - model = WebhookMtls() + model = PostTradeSettlement() if include_optional: - return WebhookMtls( - client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----' + return PostTradeSettlement( + type = 'POST_TRADE' ) else: - return WebhookMtls( - client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----', + return PostTradeSettlement( + type = 'POST_TRADE', ) """ - def testWebhookMtls(self): - """Test WebhookMtls""" + def testPostTradeSettlement(self): + """Test PostTradeSettlement""" # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) diff --git a/test/test_post_trade_settlement_type.py b/test/test_post_trade_settlement_type.py new file mode 100644 index 00000000..f861e657 --- /dev/null +++ b/test/test_post_trade_settlement_type.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.post_trade_settlement_type import PostTradeSettlementType + + +class TestPostTradeSettlementType(unittest.TestCase): + """PostTradeSettlementType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testPostTradeSettlementType(self): + """Test PostTradeSettlementType""" + # inst = PostTradeSettlementType() + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_rates_request.py b/test/test_rates_request.py index 772f9473..57f753d8 100644 --- a/test/test_rates_request.py +++ b/test/test_rates_request.py @@ -40,7 +40,8 @@ def make_instance(self, include_optional) -> RatesRequest: {"providerId":"prov_8c3f1a4b2d6e9f7c","accountId":"acc_5e9a2d1c4b7f3e8a"} ], base_asset_id = 'BTC', - quote_asset_id = 'USD' + quote_asset_id = 'USD', + base_amount = '100.00' ) else: return RatesRequest( diff --git a/test/test_settlement.py b/test/test_settlement.py index e9657974..a3244645 100644 --- a/test/test_settlement.py +++ b/test/test_settlement.py @@ -36,13 +36,13 @@ def make_instance(self, include_optional) -> Settlement: model = Settlement() if include_optional: return Settlement( - type = 'DVP', + type = 'POST_TRADE', destination_account = None, source_account = None ) else: return Settlement( - type = 'DVP', + type = 'POST_TRADE', destination_account = None, source_account = None, ) diff --git a/test/test_time_in_force.py b/test/test_time_in_force.py new file mode 100644 index 00000000..dc41477f --- /dev/null +++ b/test/test_time_in_force.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.time_in_force import TimeInForce + + +class TestTimeInForce(unittest.TestCase): + """TimeInForce unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> TimeInForce: + """Test TimeInForce + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `TimeInForce` + """ + model = TimeInForce() + if include_optional: + return TimeInForce( + type = 'FOK' + ) + else: + return TimeInForce( + type = 'FOK', + ) + """ + + def testTimeInForce(self): + """Test TimeInForce""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_transaction_response.py b/test/test_transaction_response.py index 9d0696d3..d9938b72 100644 --- a/test/test_transaction_response.py +++ b/test/test_transaction_response.py @@ -145,6 +145,7 @@ def make_instance(self, include_optional) -> TransactionResponse: fee_usd = '0.0013', ), fee_currency = '', requested_fee_currency = 'PATH_USD', + canton_details = {"call":{"version":1,"domain":"ALLOCATION","type":"ALLOCATION_WITHDRAW","originalTransactionId":"9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488"}}, network_records = [ fireblocks.models.network_record.NetworkRecord( source = fireblocks.models.source_transfer_peer_path_response.SourceTransferPeerPathResponse( diff --git a/test/test_travel_rule_issuers.py b/test/test_travel_rule_issuers.py index 57a657ec..ce467b92 100644 --- a/test/test_travel_rule_issuers.py +++ b/test/test_travel_rule_issuers.py @@ -103,18 +103,10 @@ def make_instance(self, include_optional) -> TravelRuleIssuers: issuer_did = 'did:ethr:0x7947578140ed0fa32cb025d9ad9a6c6e72c52686', issued_date = '2024-07-20T13:27:30.958Z', issuer_name = 'GLEIF', ), - regulatory_authorities = fireblocks.models.travel_rule_issuer.TravelRuleIssuer( - issuer_did = 'did:ethr:0x7947578140ed0fa32cb025d9ad9a6c6e72c52686', - issued_date = '2024-07-20T13:27:30.958Z', - issuer_name = 'GLEIF', ), name = fireblocks.models.travel_rule_issuer.TravelRuleIssuer( issuer_did = 'did:ethr:0x7947578140ed0fa32cb025d9ad9a6c6e72c52686', issued_date = '2024-07-20T13:27:30.958Z', issuer_name = 'GLEIF', ), - logo = fireblocks.models.travel_rule_issuer.TravelRuleIssuer( - issuer_did = 'did:ethr:0x7947578140ed0fa32cb025d9ad9a6c6e72c52686', - issued_date = '2024-07-20T13:27:30.958Z', - issuer_name = 'GLEIF', ), website = fireblocks.models.travel_rule_issuer.TravelRuleIssuer( issuer_did = 'did:ethr:0x7947578140ed0fa32cb025d9ad9a6c6e72c52686', issued_date = '2024-07-20T13:27:30.958Z', @@ -147,10 +139,6 @@ def make_instance(self, include_optional) -> TravelRuleIssuers: issuer_did = 'did:ethr:0x7947578140ed0fa32cb025d9ad9a6c6e72c52686', issued_date = '2024-07-20T13:27:30.958Z', issuer_name = 'GLEIF', ), - description = fireblocks.models.travel_rule_issuer.TravelRuleIssuer( - issuer_did = 'did:ethr:0x7947578140ed0fa32cb025d9ad9a6c6e72c52686', - issued_date = '2024-07-20T13:27:30.958Z', - issuer_name = 'GLEIF', ), ) """ diff --git a/test/test_update_connected_account_credentials_request.py b/test/test_update_connected_account_credentials_request.py index f94525da..51c36125 100644 --- a/test/test_update_connected_account_credentials_request.py +++ b/test/test_update_connected_account_credentials_request.py @@ -40,12 +40,12 @@ def make_instance( model = UpdateConnectedAccountCredentialsRequest() if include_optional: return UpdateConnectedAccountCredentialsRequest( - creds = '[B@70fe91a4', + creds = '[B@490c96c1', api_key = 'api_key_new_abc123' ) else: return UpdateConnectedAccountCredentialsRequest( - creds = '[B@70fe91a4', + creds = '[B@490c96c1', api_key = 'api_key_new_abc123', ) """ diff --git a/test/test_update_webhook_mtls_config_request.py b/test/test_update_webhook_mtls_config_request.py new file mode 100644 index 00000000..10fa21b6 --- /dev/null +++ b/test/test_update_webhook_mtls_config_request.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.update_webhook_mtls_config_request import ( + UpdateWebhookMtlsConfigRequest, +) + + +class TestUpdateWebhookMtlsConfigRequest(unittest.TestCase): + """UpdateWebhookMtlsConfigRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UpdateWebhookMtlsConfigRequest: + """Test UpdateWebhookMtlsConfigRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `UpdateWebhookMtlsConfigRequest` + """ + model = UpdateWebhookMtlsConfigRequest() + if include_optional: + return UpdateWebhookMtlsConfigRequest( + name = 'Production gateway 2027', + signed_cert = '-----BEGIN CERTIFICATE----- +... +-----END CERTIFICATE-----' + ) + else: + return UpdateWebhookMtlsConfigRequest( + ) + """ + + def testUpdateWebhookMtlsConfigRequest(self): + """Test UpdateWebhookMtlsConfigRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_update_webhook_oauth_request.py b/test/test_update_webhook_oauth_request.py index edd7af10..a5e75b79 100644 --- a/test/test_update_webhook_oauth_request.py +++ b/test/test_update_webhook_oauth_request.py @@ -44,9 +44,7 @@ def make_instance(self, include_optional) -> UpdateWebhookOauthRequest: custom_jwt_claims = {"aud":"https://auth.example.com","resource":null}, custom_body_params = {"scope":"payments.read payments.write","audience":null}, custom_headers = {"x-api-key":"gateway-key","x-tenant":null}, - mtls_client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----' + webhook_mtls_id = '6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f' ) else: return UpdateWebhookOauthRequest( diff --git a/test/test_update_webhook_request.py b/test/test_update_webhook_request.py index 07e4186e..b133a1b2 100644 --- a/test/test_update_webhook_request.py +++ b/test/test_update_webhook_request.py @@ -40,10 +40,7 @@ def make_instance(self, include_optional) -> UpdateWebhookRequest: description = 'This webhook is used for transactions notifications', events = ["transaction.created","transaction.status.updated"], enabled = False, - mtls = fireblocks.models.webhook_mtls.WebhookMtls( - client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----', ), + webhook_mtls_id = '6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f', webhook_oauth_id = '123e4567-e89b-12d3-a456-426614174000', custom_headers = {"X-Gateway-Key":"abc123","X-Forwarded-For":["203.0.113.7","198.51.100.4"],"X-Region-Tag":null} ) diff --git a/test/test_upsert_utxo_selection_config_request.py b/test/test_upsert_utxo_selection_config_request.py new file mode 100644 index 00000000..4bfa7bd2 --- /dev/null +++ b/test/test_upsert_utxo_selection_config_request.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.upsert_utxo_selection_config_request import ( + UpsertUtxoSelectionConfigRequest, +) + + +class TestUpsertUtxoSelectionConfigRequest(unittest.TestCase): + """UpsertUtxoSelectionConfigRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UpsertUtxoSelectionConfigRequest: + """Test UpsertUtxoSelectionConfigRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `UpsertUtxoSelectionConfigRequest` + """ + model = UpsertUtxoSelectionConfigRequest() + if include_optional: + return UpsertUtxoSelectionConfigRequest( + strategy = 'ADAPTIVE' + ) + else: + return UpsertUtxoSelectionConfigRequest( + strategy = 'ADAPTIVE', + ) + """ + + def testUpsertUtxoSelectionConfigRequest(self): + """Test UpsertUtxoSelectionConfigRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_utxo_label_failure.py b/test/test_utxo_label_failure.py new file mode 100644 index 00000000..83f6917e --- /dev/null +++ b/test/test_utxo_label_failure.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.utxo_label_failure import UtxoLabelFailure + + +class TestUtxoLabelFailure(unittest.TestCase): + """UtxoLabelFailure unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UtxoLabelFailure: + """Test UtxoLabelFailure + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `UtxoLabelFailure` + """ + model = UtxoLabelFailure() + if include_optional: + return UtxoLabelFailure( + identifier = fireblocks.models.utxo_identifier.UtxoIdentifier( + tx_id = 'b70701f4-d7b1-4795-a8ee-b09cdb5b850e', + tx_hash = 'b34f0c3ce612f1e5a5c19d6b1e6b5e3e7f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c', + index = 0, ), + reason = 'NOT_LABELLABLE', + utxo_status = 'SPENT' + ) + else: + return UtxoLabelFailure( + identifier = fireblocks.models.utxo_identifier.UtxoIdentifier( + tx_id = 'b70701f4-d7b1-4795-a8ee-b09cdb5b850e', + tx_hash = 'b34f0c3ce612f1e5a5c19d6b1e6b5e3e7f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c', + index = 0, ), + reason = 'NOT_LABELLABLE', + ) + """ + + def testUtxoLabelFailure(self): + """Test UtxoLabelFailure""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_utxo_labels_error_response.py b/test/test_utxo_labels_error_response.py new file mode 100644 index 00000000..20bc1015 --- /dev/null +++ b/test/test_utxo_labels_error_response.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.utxo_labels_error_response import UtxoLabelsErrorResponse + + +class TestUtxoLabelsErrorResponse(unittest.TestCase): + """UtxoLabelsErrorResponse unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UtxoLabelsErrorResponse: + """Test UtxoLabelsErrorResponse + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `UtxoLabelsErrorResponse` + """ + model = UtxoLabelsErrorResponse() + if include_optional: + return UtxoLabelsErrorResponse( + message = 'Cannot label the requested UTXOs: not labellable in its current status: b70701f4-d7b1-4795-a8ee-b09cdb5b850e', + failures = [{"identifier":{"txId":"b70701f4-d7b1-4795-a8ee-b09cdb5b850e"},"reason":"NOT_LABELLABLE","utxoStatus":"SPENT"}] + ) + else: + return UtxoLabelsErrorResponse( + message = 'Cannot label the requested UTXOs: not labellable in its current status: b70701f4-d7b1-4795-a8ee-b09cdb5b850e', + ) + """ + + def testUtxoLabelsErrorResponse(self): + """Test UtxoLabelsErrorResponse""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_utxo_management_beta_api.py b/test/test_utxo_management_beta_api.py index a36b4d4e..c59b2422 100644 --- a/test/test_utxo_management_beta_api.py +++ b/test/test_utxo_management_beta_api.py @@ -26,6 +26,13 @@ def setUp(self) -> None: def tearDown(self) -> None: pass + def test_get_utxo_selection_config(self) -> None: + """Test case for get_utxo_selection_config + + Get UTXO selection config + """ + pass + def test_get_utxos(self) -> None: """Test case for get_utxos @@ -33,6 +40,13 @@ def test_get_utxos(self) -> None: """ pass + def test_get_vault_asset_utxo_selection_config(self) -> None: + """Test case for get_vault_asset_utxo_selection_config + + Get vault and asset UTXO selection config + """ + pass + def test_update_utxo_labels(self) -> None: """Test case for update_utxo_labels @@ -40,6 +54,20 @@ def test_update_utxo_labels(self) -> None: """ pass + def test_upsert_utxo_selection_config(self) -> None: + """Test case for upsert_utxo_selection_config + + Upsert UTXO selection config + """ + pass + + def test_upsert_vault_asset_utxo_selection_config(self) -> None: + """Test case for upsert_vault_asset_utxo_selection_config + + Upsert vault and asset UTXO selection config + """ + pass + if __name__ == "__main__": unittest.main() diff --git a/test/test_utxo_selection_config_entry.py b/test/test_utxo_selection_config_entry.py new file mode 100644 index 00000000..5a931b16 --- /dev/null +++ b/test/test_utxo_selection_config_entry.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.utxo_selection_config_entry import UtxoSelectionConfigEntry + + +class TestUtxoSelectionConfigEntry(unittest.TestCase): + """UtxoSelectionConfigEntry unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UtxoSelectionConfigEntry: + """Test UtxoSelectionConfigEntry + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `UtxoSelectionConfigEntry` + """ + model = UtxoSelectionConfigEntry() + if include_optional: + return UtxoSelectionConfigEntry( + strategy = 'ADAPTIVE', + updated_at = '2026-09-09T15:00Z' + ) + else: + return UtxoSelectionConfigEntry( + strategy = 'ADAPTIVE', + updated_at = '2026-09-09T15:00Z', + ) + """ + + def testUtxoSelectionConfigEntry(self): + """Test UtxoSelectionConfigEntry""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_utxo_selection_config_response.py b/test/test_utxo_selection_config_response.py new file mode 100644 index 00000000..482afb2b --- /dev/null +++ b/test/test_utxo_selection_config_response.py @@ -0,0 +1,61 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.utxo_selection_config_response import UtxoSelectionConfigResponse + + +class TestUtxoSelectionConfigResponse(unittest.TestCase): + """UtxoSelectionConfigResponse unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UtxoSelectionConfigResponse: + """Test UtxoSelectionConfigResponse + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `UtxoSelectionConfigResponse` + """ + model = UtxoSelectionConfigResponse() + if include_optional: + return UtxoSelectionConfigResponse( + configured = fireblocks.models.utxo_selection_config_entry.UtxoSelectionConfigEntry( + strategy = 'ADAPTIVE', + updated_at = '2026-09-09T15:00Z', ), + effective = fireblocks.models.effective_utxo_selection_config.EffectiveUtxoSelectionConfig( + strategy = 'ADAPTIVE', + source = 'DEFAULT', ) + ) + else: + return UtxoSelectionConfigResponse( + effective = fireblocks.models.effective_utxo_selection_config.EffectiveUtxoSelectionConfig( + strategy = 'ADAPTIVE', + source = 'DEFAULT', ), + ) + """ + + def testUtxoSelectionConfigResponse(self): + """Test UtxoSelectionConfigResponse""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_address_registry_travel_rule_provider.py b/test/test_utxo_selection_config_source_enum.py similarity index 64% rename from test/test_address_registry_travel_rule_provider.py rename to test/test_utxo_selection_config_source_enum.py index 27402e45..162d7c20 100644 --- a/test/test_address_registry_travel_rule_provider.py +++ b/test/test_utxo_selection_config_source_enum.py @@ -14,13 +14,13 @@ import unittest -from fireblocks.models.address_registry_travel_rule_provider import ( - AddressRegistryTravelRuleProvider, +from fireblocks.models.utxo_selection_config_source_enum import ( + UtxoSelectionConfigSourceEnum, ) -class TestAddressRegistryTravelRuleProvider(unittest.TestCase): - """AddressRegistryTravelRuleProvider unit test stubs""" +class TestUtxoSelectionConfigSourceEnum(unittest.TestCase): + """UtxoSelectionConfigSourceEnum unit test stubs""" def setUp(self): pass @@ -28,9 +28,9 @@ def setUp(self): def tearDown(self): pass - def testAddressRegistryTravelRuleProvider(self): - """Test AddressRegistryTravelRuleProvider""" - # inst = AddressRegistryTravelRuleProvider() + def testUtxoSelectionConfigSourceEnum(self): + """Test UtxoSelectionConfigSourceEnum""" + # inst = UtxoSelectionConfigSourceEnum() if __name__ == "__main__": diff --git a/test/test_utxo_selection_strategy_enum.py b/test/test_utxo_selection_strategy_enum.py new file mode 100644 index 00000000..95e6c926 --- /dev/null +++ b/test/test_utxo_selection_strategy_enum.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.utxo_selection_strategy_enum import UtxoSelectionStrategyEnum + + +class TestUtxoSelectionStrategyEnum(unittest.TestCase): + """UtxoSelectionStrategyEnum unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testUtxoSelectionStrategyEnum(self): + """Test UtxoSelectionStrategyEnum""" + # inst = UtxoSelectionStrategyEnum() + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_webhook.py b/test/test_webhook.py index 5e2e0bb6..6a82a77f 100644 --- a/test/test_webhook.py +++ b/test/test_webhook.py @@ -43,10 +43,7 @@ def make_instance(self, include_optional) -> Webhook: status = 'ENABLED', created_at = 1625126400000, updated_at = 1625126400000, - mtls = fireblocks.models.webhook_mtls.WebhookMtls( - client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----', ), + webhook_mtls_id = '6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f', webhook_oauth_id = '123e4567-e89b-12d3-a456-426614174000', custom_headers = ["x-gateway-key","x-region-tag"] ) diff --git a/test/test_webhook_mtls_config.py b/test/test_webhook_mtls_config.py new file mode 100644 index 00000000..219a83ad --- /dev/null +++ b/test/test_webhook_mtls_config.py @@ -0,0 +1,67 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.webhook_mtls_config import WebhookMtlsConfig + + +class TestWebhookMtlsConfig(unittest.TestCase): + """WebhookMtlsConfig unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> WebhookMtlsConfig: + """Test WebhookMtlsConfig + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `WebhookMtlsConfig` + """ + model = WebhookMtlsConfig() + if include_optional: + return WebhookMtlsConfig( + id = '44fcead0-7053-4831-a53a-df7fb90d440f', + name = 'Production gateway 2026', + signed_cert = '-----BEGIN CERTIFICATE----- +... +-----END CERTIFICATE-----', + expires_at = 1726108200000, + created_at = 1694572200000, + updated_at = 1726108200000 + ) + else: + return WebhookMtlsConfig( + id = '44fcead0-7053-4831-a53a-df7fb90d440f', + signed_cert = '-----BEGIN CERTIFICATE----- +... +-----END CERTIFICATE-----', + expires_at = 1726108200000, + created_at = 1694572200000, + updated_at = 1726108200000, + ) + """ + + def testWebhookMtlsConfig(self): + """Test WebhookMtlsConfig""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_webhook_oauth_credentials.py b/test/test_webhook_oauth_credentials.py index 5b6cfa0e..97e3ac90 100644 --- a/test/test_webhook_oauth_credentials.py +++ b/test/test_webhook_oauth_credentials.py @@ -44,9 +44,7 @@ def make_instance(self, include_optional) -> WebhookOauthCredentials: custom_jwt_claims = ["aud","resource"], custom_body_params = ["scope"], custom_headers = ["X-Api-Key"], - mtls_client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----', + webhook_mtls_id = '6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f', created_at = 1625097600000, updated_at = 1625097600000 ) diff --git a/test/test_webhook_paginated_response.py b/test/test_webhook_paginated_response.py index 489a7785..0938530b 100644 --- a/test/test_webhook_paginated_response.py +++ b/test/test_webhook_paginated_response.py @@ -45,10 +45,7 @@ def make_instance(self, include_optional) -> WebhookPaginatedResponse: status = 'ENABLED', created_at = 1625126400000, updated_at = 1625126400000, - mtls = fireblocks.models.webhook_mtls.WebhookMtls( - client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----', ), + webhook_mtls_id = '6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f', webhook_oauth_id = '123e4567-e89b-12d3-a456-426614174000', custom_headers = ["x-gateway-key","x-region-tag"], ) ], @@ -65,10 +62,7 @@ def make_instance(self, include_optional) -> WebhookPaginatedResponse: status = 'ENABLED', created_at = 1625126400000, updated_at = 1625126400000, - mtls = fireblocks.models.webhook_mtls.WebhookMtls( - client_signed_cert = '-----BEGIN CERTIFICATE----- -... ------END CERTIFICATE-----', ), + webhook_mtls_id = '6f1b7c62-0f2e-4f1a-9a5e-9f2b1c3d4e5f', webhook_oauth_id = '123e4567-e89b-12d3-a456-426614174000', custom_headers = ["x-gateway-key","x-region-tag"], ) ], diff --git a/test/test_webhooks_v2_api.py b/test/test_webhooks_v2_api.py index 605bdec7..b069498b 100644 --- a/test/test_webhooks_v2_api.py +++ b/test/test_webhooks_v2_api.py @@ -33,6 +33,13 @@ def test_create_webhook(self) -> None: """ pass + def test_create_webhook_mtls_config(self) -> None: + """Test case for create_webhook_mtls_config + + Create an mTLS configuration + """ + pass + def test_create_webhook_oauth(self) -> None: """Test case for create_webhook_oauth @@ -47,6 +54,13 @@ def test_delete_webhook(self) -> None: """ pass + def test_delete_webhook_mtls_config(self) -> None: + """Test case for delete_webhook_mtls_config + + Delete an mTLS configuration + """ + pass + def test_delete_webhook_oauth(self) -> None: """Test case for delete_webhook_oauth @@ -110,6 +124,20 @@ def test_get_webhook(self) -> None: """ pass + def test_get_webhook_mtls_config(self) -> None: + """Test case for get_webhook_mtls_config + + Get an mTLS configuration by id + """ + pass + + def test_get_webhook_mtls_configs(self) -> None: + """Test case for get_webhook_mtls_configs + + List the uploaded mTLS configurations + """ + pass + def test_get_webhook_oauth(self) -> None: """Test case for get_webhook_oauth @@ -166,6 +194,13 @@ def test_update_webhook(self) -> None: """ pass + def test_update_webhook_mtls_config(self) -> None: + """Test case for update_webhook_mtls_config + + Update an mTLS configuration + """ + pass + def test_update_webhook_oauth(self) -> None: """Test case for update_webhook_oauth