import crypto from "crypto";
import { axios } from "@pipedream/platform";
// Helper function to generate HMAC SHA256 signature
function generateSignature(secret, path, queryString, expiry, body = "") {
// Concatenate according to Phemex rules: Path + QueryString + Expiry + Body
const signedString = `${path}${queryString}${expiry}${body}`;
return crypto.createHmac("sha256", secret).update(signedString).digest("hex");
}
export default defineComponent({
props: {
phemex: {
type: "app",
app: "phemex",
}
},
async run({ steps, $ }) {
const path = "/accounts/accountPositions"; //Your Phemex API URL Path, QueryString, and body as needed
const queryString = "currency=BTC";
const body = ""; // For GET requests, no body
// Expiry: current Unix time + 60 seconds
const expiry = Math.floor(Date.now() / 1000) + 60;
// Generate signature
const signature = generateSignature(
this.phemex.$auth.api_secret,
path,
queryString,
expiry,
body
);
// Build headers
const headers = {
"x-phemex-access-token": this.phemex.$auth.api_key,
"x-phemex-request-expiry": expiry,
"x-phemex-request-signature": signature,
};
// Construct full URL
const url = `${this.phemex.$auth.api_url}${path}?${queryString}`;
// Make request
return await axios($, {
method: "GET", //Change the HTTP method accordingly, add body if needed
url,
headers,
});
},
})
Phemex uses API keys for authentication. When you connect your Phemex account, Pipedream securely stores the keys so you can easily authenticate to Phemex APIs in both code and no-code steps.