{"version":3,"file":"messaging-signing-snap-requests.cjs","sourceRoot":"","sources":["../../../src/sdk/utils/messaging-signing-snap-requests.ts"],"names":[],"mappings":";;;AAUa,QAAA,WAAW,GAAG,oCAAoC,CAAC;AAEhE;;;;;GAKG;AACI,KAAK,UAAU,WAAW,CAAC,QAAyB;IACzD,MAAM,MAAM,GAAW,MAAM,QAAQ,CAAC,OAAO,CAAC;QAC5C,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE;YACN,CAAC,mBAAW,CAAC,EAAE,EAAE;SAClB;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AATD,kCASC;AAED;;;;;GAKG;AACI,KAAK,UAAU,QAAQ,CAC5B,QAAyB;IAEzB,MAAM,MAAM,GAAqB,MAAM,QAAQ,CAAC,OAAO,CAAC;QACtD,MAAM,EAAE,iBAAiB;KAC1B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACI,KAAK,UAAU,eAAe,CACnC,QAAyB;IAEzB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,mBAAW,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAbD,0CAaC;AAEY,QAAA,oBAAoB,GAAG;IAClC,KAAK,CAAC,YAAY,CAAC,QAAyB,EAAE,eAAwB;QACpE,MAAM,SAAS,GAAW,MAAM,QAAQ,CAAC,OAAO,CAAC;YAC/C,MAAM,EAAE,mBAAmB;YAC3B,MAAM,EAAE;gBACN,MAAM,EAAE,mBAAW;gBACnB,OAAO,EAAE;oBACP,MAAM,EAAE,cAAc;oBACtB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5D;aACF;SACF,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAAyB,EACzB,OAA6B,EAC7B,eAAwB;QAExB,MAAM,aAAa,GAAW,MAAM,QAAQ,EAAE,OAAO,CAAC;YACpD,MAAM,EAAE,mBAAmB;YAC3B,MAAM,EAAE;gBACN,MAAM,EAAE,mBAAW;gBACnB,OAAO,EAAE;oBACP,MAAM,EAAE,aAAa;oBACrB,MAAM,EAAE;wBACN,OAAO;wBACP,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAChD;iBACF;aACF;SACF,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC;IACvB,CAAC;CACF,CAAC;AAEF;;;;GAIG;AACH,SAAgB,+BAA+B,CAC7C,OAAe;IAEf,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAND,0EAMC","sourcesContent":["import type { Eip1193Provider } from 'ethers';\n\nexport type Snap = {\n  permissionName: string;\n  id: string;\n  version: string;\n  initialPermissions: Record<string, unknown>;\n};\nexport type GetSnapsResponse = Record<string, Snap>;\n\nexport const SNAP_ORIGIN = 'npm:@metamask/message-signing-snap';\n\n/**\n * Requests Connection to the Message Signing Snap\n *\n * @param provider - MetaMask Wallet Provider\n * @returns snap connect result\n */\nexport async function connectSnap(provider: Eip1193Provider): Promise<string> {\n  const result: string = await provider.request({\n    method: 'wallet_requestSnaps',\n    params: {\n      [SNAP_ORIGIN]: {},\n    },\n  });\n\n  return result;\n}\n\n/**\n * Gets Snaps from a MetaMask Wallet\n *\n * @param provider - MetaMask Wallet Provider\n * @returns All currently installed snaps.\n */\nexport async function getSnaps(\n  provider: Eip1193Provider,\n): Promise<GetSnapsResponse> {\n  const result: GetSnapsResponse = await provider.request({\n    method: 'wallet_getSnaps',\n  });\n\n  return result;\n}\n\n/**\n * Check if snap is connected\n *\n * @param provider - MetaMask Wallet Provider\n * @returns if snap is connected\n */\nexport async function isSnapConnected(\n  provider: Eip1193Provider,\n): Promise<boolean> {\n  try {\n    const snaps = await getSnaps(provider);\n    if (!snaps) {\n      return false;\n    }\n    return Object.keys(snaps).includes(SNAP_ORIGIN);\n  } catch (e) {\n    console.error('Failed to determine if snap is connected', e);\n    return false;\n  }\n}\n\nexport const MESSAGE_SIGNING_SNAP = {\n  async getPublicKey(provider: Eip1193Provider, entropySourceId?: string) {\n    const publicKey: string = await provider.request({\n      method: 'wallet_invokeSnap',\n      params: {\n        snapId: SNAP_ORIGIN,\n        request: {\n          method: 'getPublicKey',\n          ...(entropySourceId ? { params: { entropySourceId } } : {}),\n        },\n      },\n    });\n\n    return publicKey;\n  },\n\n  async signMessage(\n    provider: Eip1193Provider,\n    message: `metamask:${string}`,\n    entropySourceId?: string,\n  ) {\n    const signedMessage: string = await provider?.request({\n      method: 'wallet_invokeSnap',\n      params: {\n        snapId: SNAP_ORIGIN,\n        request: {\n          method: 'signMessage',\n          params: {\n            message,\n            ...(entropySourceId ? { entropySourceId } : {}),\n          },\n        },\n      },\n    });\n\n    return signedMessage;\n  },\n};\n\n/**\n * Asserts that a message starts with \"metamask:\"\n *\n * @param message - The message to check.\n */\nexport function assertMessageStartsWithMetamask(\n  message: string,\n): asserts message is `metamask:${string}` {\n  if (!message.startsWith('metamask:')) {\n    throw new Error('Message must start with \"metamask:\"');\n  }\n}\n"]}