Client - Connect to Partners
Overview
Create a connection to a partner platform, so you can trade assets, custodied at BitGo Trust, on their platform. In order to activate the partner in your Go Network, you must first have an account on the partner's platform. You can connect with multiple partners and you can also have multiple connections to the same partner.
Prerequisites
- Get Started
- Generate an access token and a read-only API key from your account on the partner platform
Steps
Endpoint: Connect to Partner
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
curl -X POST \
https://app.bitgo-test.com/api/network/v1/enterprises/$ENTERPRISE_ID/clients/connections \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer $ACCESS_TOKEN' \
-d '{
"payload": "string",
"signature": "string",
"nonce": "string",
"partnerId": "string",
"name": "string",
"connectionKey": {
"schema": "token",
"connectionToken": "string"
}
}'
import { BitGoAPI } from '@bitgo/sdk-api';
import { Ecdsa } from '@bitgo/sdk-core/dist/src/bitgo/ecdsa';
import { createHash } from 'crypto';
import * as dotenv from 'dotenv';
const {
ACCESS_TOKEN,
ENTERPRISE_ID,
PARTNER_ID,
PARTNER_ACCESS_TOKEN,
PARTNER_SIGNING_SECRET,
} = process.env;
const bitgo = new BitGoAPI({
accessToken: ACCESS_TOKEN,
env: 'test', // Use 'prod' for the production environment
customRootURI: 'https://app.bitgo-test.com',
});
async function createClientConnection() {
if (!ENTERPRISE_ID || !PARTNER_ID || !PARTNER_ACCESS_TOKEN || !PARTNER_SIGNING_SECRET) {
console.error('Error: Missing required environment variables.');
return;
}
try {
console.log(`Fetching enterprise: ${ENTERPRISE_ID}`);
const enterprise = await bitgo.enterprises().get({ id: ENTERPRISE_ID });
console.log('Fetching signing payload from BitGo...');
const { payload, nonce } = await enterprise.clientConnections().getSigningPayload({ partnerId: PARTNER_ID });
console.log(`Received payload to sign: "${payload}"`);
console.log('Signing the payload locally...');
const ecdsa = new Ecdsa(PARTNER_SIGNING_SECRET);
const payloadHash = createHash('sha256').update(payload).digest();
const partnerSignature = ecdsa.sign(payloadHash).toString('hex');
console.log('Generated Signature:', partnerSignature);
const connectionParams = {
payload: payload, // The payload received from BitGo
signature: partnerSignature, // Your generated signature of that payload
nonce: nonce, // The nonce received from BitGo
partnerId: PARTNER_ID,
name: 'My New API Connection', // A friendly name for the connection
connectionKey: {
schema: 'token',
connectionToken: PARTNER_ACCESS_TOKEN,
},
};
console.log('Sending signed request to create connection...');
const connection = await enterprise.clientConnections().create(connectionParams);
console.log('Connection created successfully!');
console.dir(connection, { depth: null });
} catch (error) {
console.error('Failed to create connection:', error);
}
}
createClientConnection();
Step Result
{
"connection": {
"createdAt": "2019-08-24",
"updatedAt": "2019-08-24",
"partnersConnectionId": {},
"partnersClientId": {},
"initialized": true,
"id": "string",
"name": "string",
"clientId": "string",
"partnerId": "string",
"networkAccountId": "string",
"active": true,
"proof": "string",
"nonce": "string"
}
}
Next
See Also
Updated 1 day ago