Code Examples
JavaScript (Node.js)
const crypto = require('crypto');
function canonicalizeJSON(obj, seenObjects = new WeakSet()) {
if (obj === null) return 'null';
if (typeof obj === 'undefined') return 'undefined';
if (typeof obj === 'boolean' || typeof obj === 'number') return String(obj);
if (typeof obj === 'string') return JSON.stringify(obj);
if (obj instanceof Date) return JSON.stringify(obj.toISOString());
if (Array.isArray(obj)) {
if (seenObjects.has(obj)) return '[Circular]';
seenObjects.add(obj);
const items = obj.map(item => canonicalizeJSON(item, seenObjects));
seenObjects.delete(obj);
return `[${items.join(',')}]`;
}
if (typeof obj === 'object') {
if (seenObjects.has(obj)) return '{Circular}';
seenObjects.add(obj);
const sortedKeys = Object.keys(obj).sort();
const pairs = sortedKeys.map(key => {
const value = canonicalizeJSON(obj[key], seenObjects);
return `${JSON.stringify(key)}:${value}`;
});
seenObjects.delete(obj);
return `{${pairs.join(',')}}`;
}
return JSON.stringify(obj);
}
function generateSignature(body, clientSecret) {
const canonicalBody = body ? canonicalizeJSON(body) : '';
return crypto
.createHmac('sha256', clientSecret)
.update(canonicalBody)
.digest('hex');
}
// Add to request headers
const headers = {
'x-client-id': clientId,
'x-signature': generateSignature(requestBody, clientSecret),
'x-timestamp': Date.now().toString(),
'Content-Type': 'application/json'
};Python
cURL
Last updated