{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n  ConnectorPlatform,\n  LoginType,\n  BlockchainSdkOptions,\n  LoginInfo,\n  PublicCoreSdk,\n  InitChannelData,\n} from '@nufi/dapp-client-core'\nimport {isSupportedWeb3AuthProvider} from '@nufi/dapp-client-core'\n\nimport type {CardanoDappConnectorConfig} from './connector'\nimport {createInjectedConnectorFactory} from './connector'\nimport {nufiIcon, nufiMetamaskIcon} from './icons'\nimport {getCardanoSdkInfo, sdkInfoReporter} from './sdkInfo'\n\nexport * from './connector'\n\ntype GetDappConfigParams = {\n  loginType: LoginType\n}\n\nconst loginTypeProps = {\n  metamask: {\n    icon: nufiMetamaskIcon,\n    connectorPlatform: 'snap',\n    name: 'Cardano Wallet',\n  },\n  web3Auth: {\n    icon: nufiIcon,\n    connectorPlatform: 'sso',\n    name: 'NUFI Connect',\n  },\n} as const\n\nconst getDappConnectorsConfig = ({\n  loginType,\n}: GetDappConfigParams): CardanoDappConnectorConfig => {\n  const {icon, connectorPlatform, name} = loginTypeProps[loginType]\n\n  return {\n    appId: 'nufi',\n    connectorPlatform,\n    icons: {\n      default: icon,\n    },\n    name,\n    connectors: {\n      cardano: {},\n    },\n  }\n}\n\nexport type CardanoFeaturedToken = {\n  assetNameHex: string\n  policyIdHex: string\n}\n\nexport const initNufiDappCardanoSdk = (\n  sdk: PublicCoreSdk,\n  type: Extract<ConnectorPlatform, 'sso' | 'snap'>,\n  options?: BlockchainSdkOptions<CardanoFeaturedToken>,\n) => {\n  sdk.__logger.debug('\"initNufiDappCardanoSdk')\n  const {ensureWidgetEmbeddedInIframe, ensureChannelIsReady, injectConnectors} =\n    sdk.__getContext()\n\n  const loginType = (\n    {\n      sso: 'web3Auth',\n      snap: 'metamask',\n    } as const\n  )[type]\n\n  if (\n    options?.provider != null &&\n    !isSupportedWeb3AuthProvider(options?.provider)\n  ) {\n    throw new Error('Unsupported web3Auth provider.')\n  }\n\n  const encodedFeaturedTokens = (() => {\n    if (!options?.featuredTokens) return ''\n\n    const featuredTokens = options.featuredTokens\n    const tokens = featuredTokens.map((t) => t.policyIdHex + t.assetNameHex)\n    return encodeURIComponent(JSON.stringify(tokens))\n  })()\n\n  const loginInfo: LoginInfo = {\n    loginType,\n    ...(type === 'sso' && options?.provider\n      ? {provider: options.provider}\n      : {}),\n    ...(encodedFeaturedTokens ? {featuredTokens: encodedFeaturedTokens} : {}),\n  }\n\n  const queryString = new URLSearchParams({\n    blockchain: 'cardano',\n    ...loginInfo,\n  }).toString()\n\n  const {\n    sendPortPostMessage,\n    sendSimplePostMessage,\n    showWidget,\n    getWidgetVisibilityStatus,\n    iframeDidRefresh,\n  } = ensureWidgetEmbeddedInIframe({\n    type: 'updateQueryString',\n    query: `?${queryString}`,\n  })\n\n  const config = getDappConnectorsConfig({\n    loginType,\n  })\n\n  if (iframeDidRefresh) {\n    const initChannelData: InitChannelData = {\n      type: 'widget',\n      data: {\n        connectorKind: 'cardano',\n        connectorPlatform: config.connectorPlatform,\n      },\n    }\n\n    injectConnectors({\n      connectorsToInject: {\n        cardano: createInjectedConnectorFactory({\n          beforeEnable: async (client) => {\n            if (!client.isConnected()) {\n              // As in the current state we can not assign the same `priorityTimestamp` to\n              // both `connect` and `enable`, we are not awaiting\n              // `connect` which does not have to be awaited in case of the widget\n              client.connect()\n            }\n          },\n        }),\n      },\n      config,\n      currentContext: 'sdk',\n      targetContext: 'widget',\n      sendPortPostMessage,\n      onBeforeFirstSend: async () => {\n        sdk.__logger.debug(\n          '\"initNufiDappCardanoSdk: onBeforeRequest\" onBeforeFirstSend',\n        )\n        await ensureChannelIsReady(\n          config.appId,\n          config.connectorPlatform,\n          'cardano',\n          sendSimplePostMessage,\n        )\n\n        sdkInfoReporter.tryReportingOnce(sendSimplePostMessage, [\n          sdk.__getSdkInfo(),\n          getCardanoSdkInfo(),\n        ])\n      },\n      // As dapp developers have to be aware of integrating NuFi, wallet\n      // overrides do not make much sense\n      overridableWallets: [],\n      onBeforeRequest: ({connectorKind, method}) => {\n        sdk.__logger.debug('\"initNufiDappCardanoSdk: onBeforeRequest\"', {\n          connectorKind,\n          method,\n        })\n        if (connectorKind !== 'cardano') return\n        if (getWidgetVisibilityStatus() === 'hidden' && method === 'connect') {\n          sdk.__logger.debug(\n            '\"initNufiDappCardanoSdk: onBeforeRequest\" showWidget',\n          )\n          showWidget('closed')\n        }\n      },\n      initChannelData,\n    })\n  }\n}\n"],"mappings":"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","names":[]}