In a function node, you could use something like this:
This was created using AI, we cannot test it as we don't have your details (nor should we).
In the setup tab of the function node, add a 'module': crypto
-> import as crypto
// Replace these with your actual credentials and endpoint
const APP_ID = 'your-app-id';
const APP_SECRET = 'your-app-secret';
const BASE_URL = 'https://api.apsystemsema.com:9282';
const REQUEST_PATH = '/your/api/endpoint'; // e.g., '/v1/data'
const HTTP_METHOD = 'GET'; // or 'POST', 'DELETE', etc.
// Step 1: Prepare headers
const timestamp = Date.now().toString();
const nonce = crypto.randomBytes(16).toString('hex'); // 32-char hex string
const signatureMethod = 'HmacSHA256'; // or 'HmacSHA1'
// Step 2: Construct stringToSign
const stringToSign = [
timestamp,
nonce,
APP_ID,
REQUEST_PATH,
HTTP_METHOD,
signatureMethod,
].join('/');
// Step 3: Calculate signature
function calculateSignature(secret, stringToSign, method) {
const algo = method === 'HmacSHA1' ? 'sha1' : 'sha256';
const hmac = crypto.createHmac(algo, secret);
hmac.update(stringToSign, 'utf8');
return hmac.digest('base64');
}
const signature = calculateSignature(APP_SECRET, stringToSign, signatureMethod);
// Step 4: Set headers
const headers = {
'X-CA-AppId': APP_ID,
'X-CA-Timestamp': timestamp,
'X-CA-Nonce': nonce,
'X-CA-Signature-Method': signatureMethod,
'X-CA-Signature': signature
};
msg.url = `${BASE_URL}${REQUEST_PATH}`
msg.headers = headers
msg.method = HTTP_METHOD
return msg;
output
example flow
[{"id":"bbec24edee469140","type":"inject","z":"99edd4530f071b75","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":220,"y":260,"wires":[["0548990c537a2ae2"]]},{"id":"0548990c537a2ae2","type":"function","z":"99edd4530f071b75","name":"function 8","func":"\n// Replace these with your actual credentials and endpoint\nconst APP_ID = 'your-app-id';\nconst APP_SECRET = 'your-app-secret';\nconst BASE_URL = 'https://api.apsystemsema.com:9282';\nconst REQUEST_PATH = '/your/api/endpoint'; // e.g., '/v1/data'\nconst HTTP_METHOD = 'GET'; // or 'POST', 'DELETE', etc.\n\n// Step 1: Prepare headers\nconst timestamp = Date.now().toString();\nconst nonce = crypto.randomBytes(16).toString('hex'); // 32-char hex string\nconst signatureMethod = 'HmacSHA256'; // or 'HmacSHA1'\n\n// Step 2: Construct stringToSign\nconst stringToSign = [\n timestamp,\n nonce,\n APP_ID,\n REQUEST_PATH, \n HTTP_METHOD,\n signatureMethod,\n].join('/');\n\n// Step 3: Calculate signature\nfunction calculateSignature(secret, stringToSign, method) {\n const algo = method === 'HmacSHA1' ? 'sha1' : 'sha256';\n const hmac = crypto.createHmac(algo, secret);\n hmac.update(stringToSign, 'utf8');\n return hmac.digest('base64');\n}\n\nconst signature = calculateSignature(APP_SECRET, stringToSign, signatureMethod);\n\n// Step 4: Set headers\nconst headers = {\n 'X-CA-AppId': APP_ID,\n 'X-CA-Timestamp': timestamp,\n 'X-CA-Nonce': nonce,\n 'X-CA-Signature-Method': signatureMethod,\n 'X-CA-Signature': signature\n};\n\nmsg.url = `${BASE_URL}${REQUEST_PATH}`\nmsg.headers = headers\nmsg.method = HTTP_METHOD \n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"crypto","module":"crypto"}],"x":400,"y":260,"wires":[["28445f3da922c7fc"]]},{"id":"28445f3da922c7fc","type":"debug","z":"99edd4530f071b75","name":"debug 33","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":600,"y":260,"wires":[]}]
When providing the details, you should be able to pass this through a http request node (set the method to msg.method
)