{"version":3,"file":"utils.cjs","sources":["../../src/utils.ts"],"sourcesContent":["import type {HydrogenSession} from '@shopify/hydrogen'\n\nimport type {QueryParams, QueryWithoutParams} from './client'\n\n/**\n * Create an SHA-256 hash as a hex string\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string\n */\nexport async function sha256(message: string): Promise<string> {\n  // encode as UTF-8\n  const messageBuffer = await new TextEncoder().encode(message)\n  // hash the message\n  const hashBuffer = await crypto.subtle.digest('SHA-256', messageBuffer)\n  // convert bytes to hex string\n  return Array.from(new Uint8Array(hashBuffer))\n    .map((b) => b.toString(16).padStart(2, '0'))\n    .join('')\n}\n\n/**\n * Hash query and its parameters for use as cache key\n * NOTE: Oxygen deployment will break if the cache key is long or contains `\\n`\n */\nexport function hashQuery(\n  query: string,\n  params: QueryParams | QueryWithoutParams,\n): Promise<string> {\n  let hash = query\n\n  if (params) {\n    hash += JSON.stringify(params)\n  }\n\n  return sha256(hash)\n}\n\nexport function assertSession(session: unknown): session is HydrogenSession {\n  return (\n    !!session &&\n    typeof session === 'object' &&\n    'get' in session &&\n    typeof session.get === 'function' &&\n    'set' in session &&\n    typeof session.set === 'function' &&\n    'unset' in session &&\n    typeof session.unset === 'function' &&\n    'commit' in session &&\n    typeof session.commit === 'function'\n  )\n}\n"],"names":["exports","a","session","get","set","unset","commit","h","query","params","hash","JSON","stringify","async","message","messageBuffer","TextEncoder","encode","hashBuffer","crypto","subtle","digest","Array","from","Uint8Array","map","b","toString","padStart","join","sha256"],"mappings":"aAiDAA,QAAAC,EAbO,SAAuBC,GAC5B,QACIA,GACiB,iBAAZA,GACP,QAASA,GACc,mBAAhBA,EAAQC,KACf,QAASD,GACc,mBAAhBA,EAAQE,KACf,UAAWF,GACc,mBAAlBA,EAAQG,OACf,WAAYH,GACc,mBAAnBA,EAAQI,MAEnB,EAAAN,QAAAO,EA1BgB,SACdC,EACAC,GAEA,IAAIC,EAAOF,EAEX,OAAIC,IACFC,GAAQC,KAAKC,UAAUH,IAtB3BI,eAA6BC,GAE3B,MAAMC,QAAsB,IAAIC,aAAcC,OAAOH,GAE/CI,QAAmBC,OAAOC,OAAOC,OAAO,UAAWN,GAElD,OAAAO,MAAMC,KAAK,IAAIC,WAAWN,IAC9BO,KAAKC,GAAMA,EAAEC,SAAS,IAAIC,SAAS,EAAG,OACtCC,KAAK,GACV,CAgBSC,CAAOpB,EAChB"}