// Edge runtime equivalent:
async function generateSha256ArrayBuffer(token: string) {
const data = new TextEncoder().encode(token);
return await crypto.subtle.digest('SHA-256', data);
}
async function generateHmacSha256HexString(key: ArrayBuffer, data: string) {
const hmacKey = await crypto.subtle.importKey(
'raw',
key,
{ name: 'HMAC', hash: 'SHA-256' },
false,
['sign']
);
const signatureBuffer = await crypto.subtle.sign(
'HMAC',
hmacKey,
new TextEncoder().encode(data)
);
const signatureArray = Array.from(new Uint8Array(signatureBuffer));
const signatureHex = signatureArray
.map((b) => b.toString(16).padStart(2, '0'))
.join('');
return signatureHex;
}
// actual calls to functions
const key = await generateSha256ArrayBuffer(BOT_TOKEN) // this is different from the Node.js equivalent when run on edge, but is the same when run on Node.js
const result = await generateHmacSha256HexString(key, data)
// Edge runtime equivalent:
async function generateSha256ArrayBuffer(token: string) {
const data = new TextEncoder().encode(token);
return await crypto.subtle.digest('SHA-256', data);
}
async function generateHmacSha256HexString(key: ArrayBuffer, data: string) {
const hmacKey = await crypto.subtle.importKey(
'raw',
key,
{ name: 'HMAC', hash: 'SHA-256' },
false,
['sign']
);
const signatureBuffer = await crypto.subtle.sign(
'HMAC',
hmacKey,
new TextEncoder().encode(data)
);
const signatureArray = Array.from(new Uint8Array(signatureBuffer));
const signatureHex = signatureArray
.map((b) => b.toString(16).padStart(2, '0'))
.join('');
return signatureHex;
}
// actual calls to functions
const key = await generateSha256ArrayBuffer(BOT_TOKEN) // this is different from the Node.js equivalent when run on edge, but is the same when run on Node.js
const result = await generateHmacSha256HexString(key, data)