From 3b93fa970b770caf48714da7f3d3e5d942abb1ee Mon Sep 17 00:00:00 2001 From: Idan Yael Date: Wed, 2 Nov 2022 14:38:56 +0200 Subject: [PATCH 1/9] add NFT endpoints --- fireblocks_sdk/sdk.py | 64 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index b8ebb9e..a176293 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -47,6 +47,70 @@ def __init__(self, private_key, api_key, api_base_url="https://api.fireblocks.io self.token_provider = SdkTokenProvider(private_key, api_key) self.timeout = timeout + def get_nft_by_id(self, token_id: str): + url = "/v1/nfts/tokens/" + token_id + + return self._get_request(url) + + def get_nft_list(self, ids: str): + """ + Example list: "1,2,3,4" + """ + url = f"/v1/nfts/tokens" + + params = {"ids": ids} + + if params: + url = url + "?" + urllib.parse.urlencode(params) + + return self._get_request(url) + + def refresh_token_metadata(self, token_id: str): + """ + + :param token_id: + :return: + """ + url = "/v1/nfts/tokens/" + token_id + return self._put_request(path=url) + + def update_nft_balance(self, blockchain_descriptor: str, vault_id: str): + """ + + :param blockchain_descriptor: + :param vault_id: + :return: + """ + url = "/v1/nfts/ownership/tokens" + body = { + "blockchainDescriptor": blockchain_descriptor, + "vaultAccountId": vault_id + } + + return self._put_request(path=url, body=body) + + def fetch_all_nfts(self, blockchain_descriptor: str, vault_account_id: str, ids: str = ""): + """ + + """ + url = f"/v1/nfts/ownership/tokens" + + params = {} + + if blockchain_descriptor: + params['blockchainDescriptor'] = blockchain_descriptor + + if vault_account_id: + params['vaultAccountId'] = vault_account_id + + if ids: + params['ids'] = ids + + if params: + url = url + "?" + urllib.parse.urlencode(params) + + return self._get_request(url) + def get_supported_assets(self): """Gets all assets that are currently supported by Fireblocks""" From bc85ef9a57f45726f6104f6bf06f7e3dde4c675d Mon Sep 17 00:00:00 2001 From: Idan Yael Date: Wed, 2 Nov 2022 15:49:03 +0200 Subject: [PATCH 2/9] sync names with JS --- fireblocks_sdk/sdk.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index a176293..a88c796 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -47,12 +47,12 @@ def __init__(self, private_key, api_key, api_base_url="https://api.fireblocks.io self.token_provider = SdkTokenProvider(private_key, api_key) self.timeout = timeout - def get_nft_by_id(self, token_id: str): + def get_nft(self, token_id: str): url = "/v1/nfts/tokens/" + token_id return self._get_request(url) - def get_nft_list(self, ids: str): + def get_nfts(self, ids: str): """ Example list: "1,2,3,4" """ @@ -65,7 +65,7 @@ def get_nft_list(self, ids: str): return self._get_request(url) - def refresh_token_metadata(self, token_id: str): + def refresh_nft_metadata(self, token_id: str): """ :param token_id: @@ -74,7 +74,7 @@ def refresh_token_metadata(self, token_id: str): url = "/v1/nfts/tokens/" + token_id return self._put_request(path=url) - def update_nft_balance(self, blockchain_descriptor: str, vault_id: str): + def refresh_nft_ownership_by_vault(self, blockchain_descriptor: str, vault_id: str): """ :param blockchain_descriptor: @@ -89,7 +89,7 @@ def update_nft_balance(self, blockchain_descriptor: str, vault_id: str): return self._put_request(path=url, body=body) - def fetch_all_nfts(self, blockchain_descriptor: str, vault_account_id: str, ids: str = ""): + def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, ids: str = ""): """ """ From 652530f31c2163f35d7d5866016c8f2dbdf28937 Mon Sep 17 00:00:00 2001 From: Idan Yael Date: Wed, 2 Nov 2022 16:44:40 +0200 Subject: [PATCH 3/9] change param name --- fireblocks_sdk/sdk.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index a88c796..a91e7df 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -52,13 +52,13 @@ def get_nft(self, token_id: str): return self._get_request(url) - def get_nfts(self, ids: str): + def get_nfts(self, token_ids: str): """ Example list: "1,2,3,4" """ url = f"/v1/nfts/tokens" - params = {"ids": ids} + params = {"ids": token_ids} if params: url = url + "?" + urllib.parse.urlencode(params) @@ -89,7 +89,7 @@ def refresh_nft_ownership_by_vault(self, blockchain_descriptor: str, vault_id: s return self._put_request(path=url, body=body) - def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, ids: str = ""): + def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, token_ids: str = ""): """ """ @@ -103,8 +103,8 @@ def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, ids: if vault_account_id: params['vaultAccountId'] = vault_account_id - if ids: - params['ids'] = ids + if token_ids: + params['ids'] = token_ids if params: url = url + "?" + urllib.parse.urlencode(params) From 3574141de71fac2719fc466afc1670dbf77bb332 Mon Sep 17 00:00:00 2001 From: Idan Yael Date: Thu, 3 Nov 2022 13:46:06 +0200 Subject: [PATCH 4/9] fix --- fireblocks_sdk/sdk.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index a91e7df..86ed9a9 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -74,20 +74,26 @@ def refresh_nft_metadata(self, token_id: str): url = "/v1/nfts/tokens/" + token_id return self._put_request(path=url) - def refresh_nft_ownership_by_vault(self, blockchain_descriptor: str, vault_id: str): + def refresh_nft_ownership_by_vault(self, blockchain_descriptor: str, vault_account_id: str): """ :param blockchain_descriptor: - :param vault_id: + :param vault_account_id: :return: """ url = "/v1/nfts/ownership/tokens" - body = { - "blockchainDescriptor": blockchain_descriptor, - "vaultAccountId": vault_id - } - return self._put_request(path=url, body=body) + params = {} + if blockchain_descriptor: + params['blockchainDescriptor'] = blockchain_descriptor + + if vault_account_id: + params['vaultAccountId'] = vault_account_id + + if params: + url = url + "?" + urllib.parse.urlencode(params) + + return self._put_request(path=url) def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, token_ids: str = ""): """ From ab0423902e436dfe067c2945fffce9f3b213b93c Mon Sep 17 00:00:00 2001 From: Idan Yael Date: Wed, 9 Nov 2022 10:11:12 +0200 Subject: [PATCH 5/9] add NFT pagination --- fireblocks_sdk/sdk.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index 86ed9a9..7831857 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -52,13 +52,23 @@ def get_nft(self, token_id: str): return self._get_request(url) - def get_nfts(self, token_ids: str): + def get_nfts(self, token_ids: str, page_cursor: str = '', page_size: int = 100): """ Example list: "1,2,3,4" """ url = f"/v1/nfts/tokens" - params = {"ids": token_ids} + params = { + "ids": token_ids, + "pageCursor": page_cursor, + "pageSize": page_size, + } + + if page_cursor: + params['pageCursor'] = page_cursor + + if page_size: + params['pageSize'] = page_size if params: url = url + "?" + urllib.parse.urlencode(params) @@ -95,7 +105,8 @@ def refresh_nft_ownership_by_vault(self, blockchain_descriptor: str, vault_accou return self._put_request(path=url) - def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, token_ids: str = ""): + def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, token_ids: str = "", + page_cursor: str = '', page_size: int = 100): """ """ @@ -112,6 +123,12 @@ def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, toke if token_ids: params['ids'] = token_ids + if page_cursor: + params['pageCursor'] = page_cursor + + if page_size: + params['pageSize'] = page_size + if params: url = url + "?" + urllib.parse.urlencode(params) From 426eeb197ddb1f3af87fdbf5ecf14bd8e85b85ce Mon Sep 17 00:00:00 2001 From: Idan Yael Date: Wed, 9 Nov 2022 10:15:06 +0200 Subject: [PATCH 6/9] add NFT pagination --- fireblocks_sdk/sdk.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index 7831857..aa98018 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -1,4 +1,5 @@ from operator import attrgetter +from typing import List import requests import urllib @@ -52,16 +53,17 @@ def get_nft(self, token_id: str): return self._get_request(url) - def get_nfts(self, token_ids: str, page_cursor: str = '', page_size: int = 100): + def get_nfts(self, token_ids: List[str], page_cursor: str = '', page_size: int = 100): """ Example list: "1,2,3,4" """ url = f"/v1/nfts/tokens" + if len(token_ids) <= 0: + raise FireblocksApiException("Invalid token_ids. Should contain at least 1 token id") + params = { - "ids": token_ids, - "pageCursor": page_cursor, - "pageSize": page_size, + "ids": ",".join(token_ids), } if page_cursor: From 2af88ea245bb5eaa90b575140d27f846e8b81882 Mon Sep 17 00:00:00 2001 From: Idan Yael Date: Wed, 9 Nov 2022 10:16:03 +0200 Subject: [PATCH 7/9] add NFT pagination --- fireblocks_sdk/sdk.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index aa98018..8a0691c 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -107,7 +107,7 @@ def refresh_nft_ownership_by_vault(self, blockchain_descriptor: str, vault_accou return self._put_request(path=url) - def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, token_ids: str = "", + def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, token_ids: List[str] = None, page_cursor: str = '', page_size: int = 100): """ @@ -123,7 +123,7 @@ def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, toke params['vaultAccountId'] = vault_account_id if token_ids: - params['ids'] = token_ids + params['ids'] = ",".join(token_ids) if page_cursor: params['pageCursor'] = page_cursor From 53cadf727add9123822dd8e9cfaa769a4a70a1be Mon Sep 17 00:00:00 2001 From: Idan Yael Date: Wed, 9 Nov 2022 10:19:35 +0200 Subject: [PATCH 8/9] refactor query params in GET requests --- fireblocks_sdk/sdk.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index 8a0691c..2f4f403 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -1,5 +1,5 @@ from operator import attrgetter -from typing import List +from typing import List, Dict import requests import urllib @@ -72,10 +72,7 @@ def get_nfts(self, token_ids: List[str], page_cursor: str = '', page_size: int = if page_size: params['pageSize'] = page_size - if params: - url = url + "?" + urllib.parse.urlencode(params) - - return self._get_request(url) + return self._get_request(url, query_params=params) def refresh_nft_metadata(self, token_id: str): """ @@ -102,10 +99,7 @@ def refresh_nft_ownership_by_vault(self, blockchain_descriptor: str, vault_accou if vault_account_id: params['vaultAccountId'] = vault_account_id - if params: - url = url + "?" + urllib.parse.urlencode(params) - - return self._put_request(path=url) + return self._get_request(url, query_params=params) def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, token_ids: List[str] = None, page_cursor: str = '', page_size: int = 100): @@ -131,10 +125,7 @@ def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, toke if page_size: params['pageSize'] = page_size - if params: - url = url + "?" + urllib.parse.urlencode(params) - - return self._get_request(url) + return self._get_request(url, query_params=params) def get_supported_assets(self): """Gets all assets that are currently supported by Fireblocks""" @@ -1570,7 +1561,11 @@ def remove_fee_payer_configuration(self, base_asset): return self._delete_request(url) - def _get_request(self, path, page_mode=False): + def _get_request(self, path, page_mode=False, query_params: Dict = None): + + if query_params: + path = path + "?" + urllib.parse.urlencode(query_params) + token = self.token_provider.sign_jwt(path) headers = { "X-API-Key": self.api_key, From db7ff6b36fd07f98c709e547a281c44dd1efa7d5 Mon Sep 17 00:00:00 2001 From: Idan Yael Date: Thu, 24 Nov 2022 13:45:12 +0200 Subject: [PATCH 9/9] tokenid -> id to avoid confusion with the contract tokenid field --- fireblocks_sdk/sdk.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index 2f4f403..b390283 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -48,22 +48,22 @@ def __init__(self, private_key, api_key, api_base_url="https://api.fireblocks.io self.token_provider = SdkTokenProvider(private_key, api_key) self.timeout = timeout - def get_nft(self, token_id: str): - url = "/v1/nfts/tokens/" + token_id + def get_nft(self, id: str): + url = "/v1/nfts/tokens/" + id return self._get_request(url) - def get_nfts(self, token_ids: List[str], page_cursor: str = '', page_size: int = 100): + def get_nfts(self, ids: List[str], page_cursor: str = '', page_size: int = 100): """ Example list: "1,2,3,4" """ url = f"/v1/nfts/tokens" - if len(token_ids) <= 0: + if len(ids) <= 0: raise FireblocksApiException("Invalid token_ids. Should contain at least 1 token id") params = { - "ids": ",".join(token_ids), + "ids": ",".join(ids), } if page_cursor: @@ -74,13 +74,13 @@ def get_nfts(self, token_ids: List[str], page_cursor: str = '', page_size: int = return self._get_request(url, query_params=params) - def refresh_nft_metadata(self, token_id: str): + def refresh_nft_metadata(self, id: str): """ - :param token_id: + :param id: :return: """ - url = "/v1/nfts/tokens/" + token_id + url = "/v1/nfts/tokens/" + id return self._put_request(path=url) def refresh_nft_ownership_by_vault(self, blockchain_descriptor: str, vault_account_id: str): @@ -101,7 +101,7 @@ def refresh_nft_ownership_by_vault(self, blockchain_descriptor: str, vault_accou return self._get_request(url, query_params=params) - def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, token_ids: List[str] = None, + def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, ids: List[str] = None, page_cursor: str = '', page_size: int = 100): """ @@ -116,8 +116,8 @@ def get_owned_nfts(self, blockchain_descriptor: str, vault_account_id: str, toke if vault_account_id: params['vaultAccountId'] = vault_account_id - if token_ids: - params['ids'] = ",".join(token_ids) + if ids: + params['ids'] = ",".join(ids) if page_cursor: params['pageCursor'] = page_cursor