UNPKG

@shopify/shopify-api

Version:

Shopify API Library for Node - accelerate development with support for authentication, graphql proxy, webhooks

1 lines 4.33 kB
{"version":3,"file":"utils.mjs","sources":["../../../../../../runtime/crypto/utils.ts"],"sourcesContent":["import {ShopifyError} from '../../lib/error';\n\nimport {HashFormat} from './types';\n\nexport async function createSHA256HMAC(\n secret: string,\n payload: string,\n returnFormat: HashFormat = HashFormat.Base64,\n): Promise<string> {\n const cryptoLib =\n typeof (crypto as any)?.webcrypto === 'undefined'\n ? crypto\n : (crypto as any).webcrypto;\n\n const enc = new TextEncoder();\n const key = await cryptoLib.subtle.importKey(\n 'raw',\n enc.encode(secret),\n {\n name: 'HMAC',\n hash: {name: 'SHA-256'},\n },\n false,\n ['sign'],\n );\n\n const signature = await cryptoLib.subtle.sign(\n 'HMAC',\n key,\n enc.encode(payload),\n );\n return returnFormat === HashFormat.Base64\n ? asBase64(signature)\n : asHex(signature);\n}\n\nexport function asHex(buffer: ArrayBuffer): string {\n return [...new Uint8Array(buffer)]\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('');\n}\n\nconst LookupTable =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nexport function asBase64(buffer: ArrayBuffer): string {\n let output = '';\n\n const input = new Uint8Array(buffer);\n for (let i = 0; i < input.length; ) {\n const byte1 = input[i++];\n const byte2 = input[i++];\n const byte3 = input[i++];\n\n const enc1 = byte1 >> 2;\n const enc2 = ((byte1 & 0b00000011) << 4) | (byte2 >> 4);\n let enc3 = ((byte2 & 0b00001111) << 2) | (byte3 >> 6);\n let enc4 = byte3 & 0b00111111;\n\n if (isNaN(byte2)) {\n enc3 = 64;\n }\n if (isNaN(byte3)) {\n enc4 = 64;\n }\n\n output +=\n LookupTable[enc1] +\n LookupTable[enc2] +\n LookupTable[enc3] +\n LookupTable[enc4];\n }\n return output;\n}\n\nexport function hashString(str: string, returnFormat: HashFormat): string {\n const buffer = new TextEncoder().encode(str);\n\n switch (returnFormat) {\n case HashFormat.Base64:\n return asBase64(buffer);\n case HashFormat.Hex:\n return asHex(buffer);\n default:\n throw new ShopifyError(`Unrecognized hash format '${returnFormat}'`);\n }\n}\n"],"names":[],"mappings":"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"}