How to use ApiKey/Secret
Introducción
Este documento explica cómo utilizar tu API key y secret para interactuar con la API de Peppermint. A continuación, encontrarás ejemplos de código en JavaScript que muestran cómo generar y firmar mensajes para realizar solicitudes seguras.
Uso del SDK
Para simplificar la interacción con nuestra API, también puedes utilizar nuestro SDK. Está disponible en GitHub e incluye soporte para TypeScript.
Puedes encontrar más información y la documentación completa del SDK en Docs/sdk.
Generación de Claves y Firma de Mensajes
El siguiente ejemplo demuestra cómo generar un mensaje y firmarlo usando una clave secreta. Este proceso asegura que las solicitudes a la API sean autenticadas correctamente.
import CryptoJS from 'crypto-js'
// Función para generar el mensaje a firmar
function generateMessage(
nonce: number,
url: string,
body: unknown,
query: Record<string, string | number | boolean>,
) {
const queryString =
query && Object.keys(query).length > 0
? '?' +
Object.keys(query)
.map(
key =>
`${encodeURIComponent(key)}=${encodeURIComponent(query[key])}`,
)
.join('&')
: ''
const hasBody = body && Object.keys(body).length > 0
return hasBody
? `${nonce}:${url}${queryString}:${JSON.stringify(body)}`
: `${nonce}:${url}${queryString}`
}
// Función para firmar el mensaje
function signMessage(message: string, secret: string) {
const hash = CryptoJS.SHA256(message)
const wordArray = CryptoJS.enc.Hex.parse(hash.toString())
const hmac = CryptoJS.HmacSHA512(wordArray, secret)
return CryptoJS.enc.Base64.stringify(hmac)
}
// Función para crear el encabezado de la solicitud
export function makeRequestHeader(
url: string,
body: unknown,
query: Record<string, string | number | boolean>,
apiKey?: string,
apiSecret?: string,
) {
if (!apiKey || !apiSecret) return undefined
const NONCE = Date.now()
const messageToSign = generateMessage(NONCE, url, body, query)
return {
'x-api-key': apiKey,
'x-nonce': NONCE.toString(),
'api-signature': signMessage(messageToSign, apiSecret),
}
}
Ejemplo de Solicitud
A continuación, se muestra un ejemplo de cómo realizar una solicitud a nuestra API utilizando la función makeRequestHeader
. Este ejemplo ilustra cómo configurar los encabezados de autenticación y realizar una solicitud HTTP.
async _request<T>({ method, path, body, query }: RequestOptions) {
const url = new URL(this.baseUrl + path)
if (query) {
Object.keys(query).forEach(key =>
url.searchParams.append(key, query[key].toString()),
)
}
const authHeaders = makeRequestHeader(
path,
body,
query || {},
'<apiKey>',
'<secretKey>',
)
const headers: Record<string, string> = authHeaders!
if (body) {
headers['Content-Type'] = 'application/json'
}
const response = await fetch(url.toString(), {
method,
headers,
body: body ? JSON.stringify(body) : undefined,
})
return response.json() as T
}
// Ejemplo de uso de la solicitud
async exampleRequest() {
return this._request({
method: 'GET',
path: '/api/v1/blockchains/',
query: { param1: 'value1', param2: 'value2' },
})
}
Este documento proporciona una guía completa para generar y firmar mensajes, así como realizar solicitudes a nuestra API. Utiliza los ejemplos proporcionados o el SDK para facilitar tu integración con nuestra plataforma.