{"version":3,"file":"getWebSocketUrl.mjs","names":["hostParts: string[]","pathname: string"],"sources":["../../common/getWebSocketUrl.ts"],"sourcesContent":["import { fromNodeProviderChain } from '@aws-sdk/credential-providers';\nimport { Credentials } from '@aws-sdk/types';\nimport * as aws4 from 'aws4';\n\n// \"\"wss://m6g3w6ttdh.execute-api.eu-west-1.amazonaws.com/prod\";\"\n\nexport async function getSignedWebSocketUrl(\n  url: string,\n  credentials?: Credentials\n) {\n  let hostParts: string[];\n  let pathname: string;\n\n  if (!url) {\n    throw new Error(`Missing websocket URL`);\n  }\n\n  try {\n    new URL(url); //validate URL\n\n    const urlParsed = parseUrl(url);\n    pathname = urlParsed!.pathname!;\n    hostParts = urlParsed!.host.split('.');\n  } catch {\n    throw new Error(`Invalid websocket URL ${url}`);\n  }\n\n  if (!credentials) {\n    const credentialsProvider = fromNodeProviderChain();\n    credentials = await credentialsProvider();\n  }\n\n  const AWS_REGION = hostParts[2]; // The region of your API-gateway\n  const SOCKET_HOST = hostParts[0]; // Your API-gateway ID\n  const ENV = pathname.replace(/^\\//, ''); // The stage of your target deployment\n  const WEBSOCKET_URL = `${SOCKET_HOST}.execute-api.${AWS_REGION}.amazonaws.com`; // Don't prepend with wss!\n  // const AWS_REGION = \"eu-west-1\"; // The region of your API-gateway\n  // const SOCKET_HOST = \"m6g3w6ttdh\"; // Your API-gateway ID\n  // const ENV = \"prod\"; // The stage of your target deployment\n  // const WEBSOCKET_URL = `${SOCKET_HOST}.execute-api.${AWS_REGION}.amazonaws.com`; // Don't prepend with wss!\n\n  // Get a signed path\n  const { path } = aws4.sign(\n    {\n      method: 'GET',\n      host: WEBSOCKET_URL,\n      // path: `/${ENV}?X-Amz-Security-Token=${encodeURIComponent(\n      //   credentials!.SessionToken!\n      // )}`,\n      path: `/${ENV}`,\n      service: 'execute-api',\n      region: AWS_REGION,\n      signQuery: true,\n    },\n    {\n      accessKeyId: credentials.accessKeyId,\n      secretAccessKey: credentials.secretAccessKey,\n      sessionToken: credentials.sessionToken,\n    }\n  );\n\n  const url2 = `wss://${WEBSOCKET_URL}${path}`;\n  return url2;\n}\n\nfunction parseUrl(href: string) {\n  const match = href.match(\n    /^(wss?:)\\/\\/(([^:/?#]*)(?::([0-9]+))?)([/]{0,1}[^?#]*)(\\?[^#]*|)(#.*|)$/\n  );\n  return (\n    match && {\n      href,\n      protocol: match[1],\n      host: match[2],\n      hostname: match[3],\n      port: match[4],\n      pathname: match[5],\n      search: match[6],\n      hash: match[7],\n    }\n  );\n}\n"],"mappings":";;;;;AAMA,eAAsB,sBACpB,KACA,aACA;CACA,IAAIA;CACJ,IAAIC;AAEJ,KAAI,CAAC,IACH,OAAM,IAAI,MAAM,wBAAwB;AAG1C,KAAI;AACF,MAAI,IAAI,IAAI;EAEZ,MAAM,YAAY,SAAS,IAAI;AAC/B,aAAW,UAAW;AACtB,cAAY,UAAW,KAAK,MAAM,IAAI;SAChC;AACN,QAAM,IAAI,MAAM,yBAAyB,MAAM;;AAGjD,KAAI,CAAC,YAEH,eAAc,MADc,uBAAuB,EACV;CAG3C,MAAM,aAAa,UAAU;CAC7B,MAAM,cAAc,UAAU;CAC9B,MAAM,MAAM,SAAS,QAAQ,OAAO,GAAG;CACvC,MAAM,gBAAgB,GAAG,YAAY,eAAe,WAAW;CAO/D,MAAM,EAAE,SAAS,KAAK,KACpB;EACE,QAAQ;EACR,MAAM;EAIN,MAAM,IAAI;EACV,SAAS;EACT,QAAQ;EACR,WAAW;EACZ,EACD;EACE,aAAa,YAAY;EACzB,iBAAiB,YAAY;EAC7B,cAAc,YAAY;EAC3B,CACF;AAGD,QADa,SAAS,gBAAgB;;AAIxC,SAAS,SAAS,MAAc;CAC9B,MAAM,QAAQ,KAAK,MACjB,0EACD;AACD,QACE,SAAS;EACP;EACA,UAAU,MAAM;EAChB,MAAM,MAAM;EACZ,UAAU,MAAM;EAChB,MAAM,MAAM;EACZ,UAAU,MAAM;EAChB,QAAQ,MAAM;EACd,MAAM,MAAM;EACb"}