bennycode / coinbase-pro-node

Coinbase API written in TypeScript and covered by tests.
https://bennycode.com/coinbase-pro-node
MIT License
254 stars 62 forks source link

Is TransferInformation Interface Incorrect? #872

Closed AutomationD closed 12 months ago

AutomationD commented 1 year ago

Hello again, it may be rooting in the same situation - server-side key, but I have to ask of you know anything about it.

I'm retrieving the withdrawals like this:

const auth = {
    apiKey: process.env.COINBASE_API_KEY || "",
    apiSecret: process.env.COINBASE_API_SECRET || "",
    passphrase: process.env.COINBASE_API_PASSPHRASE || "",
    useSandbox: false,
};

const coinbase = new CoinbasePro(auth);
const withdrawals = await coinbase.rest.transfer.getTransfers(TransferType.WITHDRAW, profile?.id)

The TransferInformation interface looks like this (notice there is no optional fee or network or subtotal or tx_service_transaction_id attribute in details):

export interface TransferInformation {
    account_id: string;
    amount: string;
    canceled_at?: ISO_8601_MS_UTC;
    completed_at?: ISO_8601_MS_UTC;
    created_at: ISO_8601_MS_UTC;
    details: {
        coinbase_account_id?: string;
        coinbase_payment_method_id?: string;
        coinbase_transaction_id?: string;
        coinbase_withdrawal_id?: string;
        crypto_address?: string;
        crypto_transaction_hash?: string;
        crypto_transaction_id?: string;
        destination_tag: string;
        destination_tag_name?: string;
        sent_to_address?: string;
    };
    id: string;
    processed_at?: ISO_8601_MS_UTC;
    type: string;
    user_id: string;
    user_nonce?: string;
}

But the transaction looks like this: Those fields are present.

{
  "id": "00000000-0000-0000-a249-9f72b3e373b4",
  "type": "withdraw",
  "created_at": "2023-00-00 20:07:49.929025+00",
  "completed_at": "2023-00-00 20:12:09.972825+00",
  "account_id": "00000000-0000-0000-8b8b-5065a0a3c1e5",
  "user_id": "000000000000000000087b7a",
  "amount": "904.26148600",
  "details": {
    "fee": "4.261486",
    "network": "ethereum",
    "subtotal": "900",
    "sent_to_address": "0xe000000000000000000058f8494b3bdf7cedd516",
    "coinbase_account_id": "00000000-0000-0000-8ac2-fd4cb3ec5b64",
    "crypto_transaction_hash": "000000000000000000002cd52e3178b503dbebacf800ba19cf2992349452506e61",
    "tx_service_transaction_id": "00000000060",
    "coinbase_payment_method_id": ""
  },
  "canceled_at": null,
  "processed_at": "2023-00-00 20:12:09.976673+00",
  "user_nonce": "1685649938128",
  "idem": "00000000-0000-0000-877a-09d42dd82201",
  "profile_id": "00000000-0000-0000-80b9-5c5281357c65",
  "currency": "USDT"
}
bennycode commented 12 months ago

@AutomationD your observation is correct. There are attributes that Coinbase has added over time. Unfortunately, they don't have a complete documentation on their own website as it just lists there properties:

image

Saying that, it is very helpful that you reported your observation and I am accepting Pull Requests to add the missing properties. 👍

bennycode commented 12 months ago

@AutomationD I will create a new major version of "coinbase-pro-node" with response validation using Zod. This will make the code defensive and flag unmatched properties. Latest changes are in https://github.com/bennycode/coinbase-pro-node/pull/874.