@credenza3/passport-sui 0.2.1-alpha.0 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/{App-9Yt0fLo_.js → App-DMjoqoZI.js} +18 -18
  2. package/dist/{App-9Yt0fLo_.js.map → App-DMjoqoZI.js.map} +1 -1
  3. package/dist/{Button-zK2HdlEH.js → Button-69xpr_s2.js} +4 -4
  4. package/dist/{Button-zK2HdlEH.js.map → Button-69xpr_s2.js.map} +1 -1
  5. package/dist/{ButtonBack-CwezCDmC.js → ButtonBack-eiZlUP5b.js} +4 -4
  6. package/dist/{ButtonBack-CwezCDmC.js.map → ButtonBack-eiZlUP5b.js.map} +1 -1
  7. package/dist/{ButtonLink-De6uI_v0.js → ButtonLink-0xz3HRlH.js} +3 -3
  8. package/dist/{ButtonLink-De6uI_v0.js.map → ButtonLink-0xz3HRlH.js.map} +1 -1
  9. package/dist/{ConfirmAccount-yxhIaEuY.js → ConfirmAccount-xgFv9hNK.js} +9 -9
  10. package/dist/{ConfirmAccount-yxhIaEuY.js.map → ConfirmAccount-xgFv9hNK.js.map} +1 -1
  11. package/dist/{ContentHeader-DEEEVdU1.js → ContentHeader-36qt_g7F.js} +3 -3
  12. package/dist/{ContentHeader-DEEEVdU1.js.map → ContentHeader-36qt_g7F.js.map} +1 -1
  13. package/dist/{Error-BQWTujuf.js → Error-BK7ZLiVO.js} +5 -5
  14. package/dist/{Error-BQWTujuf.js.map → Error-BK7ZLiVO.js.map} +1 -1
  15. package/dist/{Input-DZtVDb-g.js → Input-DAxd1tLB.js} +4 -4
  16. package/dist/{Input-DZtVDb-g.js.map → Input-DAxd1tLB.js.map} +1 -1
  17. package/dist/{Label-BlXNFlEg.js → Label-DepYgrao.js} +3 -3
  18. package/dist/{Label-BlXNFlEg.js.map → Label-DepYgrao.js.map} +1 -1
  19. package/dist/{Loader-CYTyaD5Q.js → Loader-D4rTMy8b.js} +3 -3
  20. package/dist/{Loader-CYTyaD5Q.js.map → Loader-D4rTMy8b.js.map} +1 -1
  21. package/dist/{Login-2EuD58pX.js → Login-B2s1dHJz.js} +9 -9
  22. package/dist/{Login-2EuD58pX.js.map → Login-B2s1dHJz.js.map} +1 -1
  23. package/dist/{Logout-23i6x_IY.js → Logout-C6NAooAk.js} +6 -6
  24. package/dist/{Logout-23i6x_IY.js.map → Logout-C6NAooAk.js.map} +1 -1
  25. package/dist/{Nav-s_f45WBl.js → Nav-DOV6cYcx.js} +6 -6
  26. package/dist/{Nav-s_f45WBl.js.map → Nav-DOV6cYcx.js.map} +1 -1
  27. package/dist/{PassportId-D34Mpkys.js → PassportId-oKWNLelI.js} +7 -7
  28. package/dist/{PassportId-D34Mpkys.js.map → PassportId-oKWNLelI.js.map} +1 -1
  29. package/dist/Payment-exJAIgZE.js +1233 -0
  30. package/dist/Payment-exJAIgZE.js.map +1 -0
  31. package/dist/{PaymentResult-CjVw_qMT.js → PaymentResult-B2r8rxy0.js} +4 -4
  32. package/dist/{PaymentResult-CjVw_qMT.js.map → PaymentResult-B2r8rxy0.js.map} +1 -1
  33. package/dist/{Profile-BrK8JMPe.js → Profile-D2bpRbfe.js} +7 -7
  34. package/dist/{Profile-BrK8JMPe.js.map → Profile-D2bpRbfe.js.map} +1 -1
  35. package/dist/{ProgressVideo-BPJ0n_bS.js → ProgressVideo-01D-uEhA.js} +6 -6
  36. package/dist/{ProgressVideo-BPJ0n_bS.js.map → ProgressVideo-01D-uEhA.js.map} +1 -1
  37. package/dist/{ProgressVideo.service-CNFQYBrU.js → ProgressVideo.service-D6suMNMc.js} +2 -2
  38. package/dist/{ProgressVideo.service-CNFQYBrU.js.map → ProgressVideo.service-D6suMNMc.js.map} +1 -1
  39. package/dist/{RichAlert-BTBvPnl-.js → RichAlert-vukUSrZA.js} +5 -5
  40. package/dist/{RichAlert-BTBvPnl-.js.map → RichAlert-vukUSrZA.js.map} +1 -1
  41. package/dist/{Scanner-Ci6WuRAH.js → Scanner-CWBrtSO-.js} +13 -13
  42. package/dist/Scanner-CWBrtSO-.js.map +1 -0
  43. package/dist/{SendTokens-B_P4ttKI.js → SendTokens-QbdToxL9.js} +7 -7
  44. package/dist/{SendTokens-B_P4ttKI.js.map → SendTokens-QbdToxL9.js.map} +1 -1
  45. package/dist/{Sign-DeyX7zQV.js → Sign-Z4_JUSR-.js} +7 -7
  46. package/dist/{Sign-DeyX7zQV.js.map → Sign-Z4_JUSR-.js.map} +1 -1
  47. package/dist/{Stripe.service-CkjagyRm.js → Stripe.service-BkXnxKqQ.js} +3 -3
  48. package/dist/{Stripe.service-CkjagyRm.js.map → Stripe.service-BkXnxKqQ.js.map} +1 -1
  49. package/dist/{UpdateProfile-2Rk57DEr.js → UpdateProfile-CnE6y3Pf.js} +10 -10
  50. package/dist/{UpdateProfile-2Rk57DEr.js.map → UpdateProfile-CnE6y3Pf.js.map} +1 -1
  51. package/dist/{UserInfo-CXbgHvBy.js → UserInfo-DdRVoH0D.js} +4 -4
  52. package/dist/{UserInfo-CXbgHvBy.js.map → UserInfo-DdRVoH0D.js.map} +1 -1
  53. package/dist/{Wallet-BGzcpzoe.js → Wallet-Cwo66Q1r.js} +8 -8
  54. package/dist/{Wallet-BGzcpzoe.js.map → Wallet-Cwo66Q1r.js.map} +1 -1
  55. package/dist/{each-BZ-OcbLT.js → each-BNaL_Vtx.js} +41 -41
  56. package/dist/{each-BZ-OcbLT.js.map → each-BNaL_Vtx.js.map} +1 -1
  57. package/dist/{html-CTtp1KP9.js → html-u5owNQ_k.js} +3 -3
  58. package/dist/{html-CTtp1KP9.js.map → html-u5owNQ_k.js.map} +1 -1
  59. package/dist/{index-Gs5EZ6VP.js → index-CzZFSuqM.js} +4673 -4665
  60. package/dist/index-CzZFSuqM.js.map +1 -0
  61. package/dist/{index-client-BAaDltqw.js → index-client-GmX4pXIJ.js} +2 -2
  62. package/dist/{index-client-BAaDltqw.js.map → index-client-GmX4pXIJ.js.map} +1 -1
  63. package/dist/{input-BkRWsbst.js → input-Dlpr9jGf.js} +2 -2
  64. package/dist/{input-BkRWsbst.js.map → input-Dlpr9jGf.js.map} +1 -1
  65. package/dist/{legacy-CgTG0fzr.js → legacy-BNwW5YWH.js} +2 -2
  66. package/dist/{legacy-CgTG0fzr.js.map → legacy-BNwW5YWH.js.map} +1 -1
  67. package/dist/passport.es.js +2 -2
  68. package/dist/passport.umd.js +153 -153
  69. package/dist/passport.umd.js.map +1 -1
  70. package/dist/{socket-io-BbfgVEmD.js → socket-io-C6E3tcOo.js} +2 -2
  71. package/dist/{socket-io-BbfgVEmD.js.map → socket-io-C6E3tcOo.js.map} +1 -1
  72. package/dist/types/app/pages/payment/payment.constants.d.ts +4 -0
  73. package/dist/types/app/pages/scanner/Scanner.service.d.ts +2 -2
  74. package/package.json +1 -1
  75. package/dist/Payment-DTUr8B6Z.js +0 -1182
  76. package/dist/Payment-DTUr8B6Z.js.map +0 -1
  77. package/dist/Scanner-Ci6WuRAH.js.map +0 -1
  78. package/dist/index-Gs5EZ6VP.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"Payment-DTUr8B6Z.js","sources":["../../ui/images/lock.svg","../../ui/main/payment/PaymentSwitchButton.svelte","../../ui/main/payment/Payment.svelte","../../ui/main/payment/Stripe.svelte","../../ui/main/payment/CredenzaBalance.svelte","../src/app/pages/payment/stripe/wallet-pay/WalletPay.svelte","../src/app/pages/payment/stripe/Stripe.styles.ts","../../utils/lib/scripts/scripts.ts","../../utils/lib/orders/index.ts","../src/app/pages/payment/Payment.service.ts","../src/app/pages/payment/stripe/Stripe.svelte","../src/app/pages/payment/credenza-balance/CredenzaBalance.svelte","../src/app/pages/payment/order.service.ts","../src/app/pages/payment/paystack/Paystack.svelte","../src/app/pages/payment/Payment.svelte"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='22'%20height='22'%20viewBox='0%200%2024%2024'%3e%3cpath%20fill='%23bbb'%20d='M17%209.761v-4.761c0-2.761-2.238-5-5-5-2.763%200-5%202.239-5%205v4.761c-1.827%201.466-3%203.714-3%206.239%200%204.418%203.582%208%208%208s8-3.582%208-8c0-2.525-1.173-4.773-3-6.239zm-8-4.761c0-1.654%201.346-3%203-3s3%201.346%203%203v3.587c-.927-.376-1.938-.587-3-.587s-2.073.211-3%20.587v-3.587zm4%2011.723v2.277h-2v-2.277c-.596-.347-1-.984-1-1.723%200-1.104.896-2%202-2s2%20.896%202%202c0%20.738-.404%201.376-1%201.723z'/%3e%3c/svg%3e\"","<style>\n .active {\n background-color: #ffff;\n font-weight: 500;\n color: #000;\n }\n .btn-disabled {\n pointer-events: none;\n background-color: #d0d2d5;\n }\n</style>\n\n<script lang=\"ts\">\n import Loader from '../shared/Loader.svelte'\n \n export let onClick: (...args: unknown[]) => unknown\n export let text: string\n export let disabled: boolean = false\n export let isLoading: boolean = false\n export let isActive: boolean = false\n</script>\n\n<button\n type=\"submit\"\n class=\"crtw-flex crtw-justify-center crtw-items-center crtw-w-full crtw-h-[50px] crtw-cursor-pointer crtw-border crtw-border-gray-300\n crtw-rounded crtw-font-['poppins'] crtw-text-gray-600\"\n class:btn-disabled={disabled || isLoading}\n class:active={isActive}\n on:click|preventDefault={onClick}\n>\n {#if isLoading}\n <Loader />\n {:else}\n {text}\n {/if}\n</button>","<script lang=\"ts\">\n import { PaymentViews } from '../../../utils/enums';\n import ButtonBack from '../shared/inputs/button-back/ButtonBack.svelte';\n import LockIcon from '../../images/lock.svg'\n import type { TUser } from '../../../utils/types';\n import PaymentSwitchButton from './PaymentSwitchButton.svelte';\n\n export let isLoading: boolean\n export let options: {\n user: TUser| null\n title: string\n subtitle?: string\n onBackClick: () => void\n isStripeDisabled: boolean\n isCredezaValueDisabled: boolean,\n isPriceLoading: boolean\n totalSumCents: number,\n currencySymbol?: string\n }\n\n \n let { user, title, subtitle, onBackClick, isStripeDisabled, currencySymbol = '$' } = options\n let activeTab = isStripeDisabled ? PaymentViews.CREDENZA_BALANCE : PaymentViews.CREDIT_CARD\n\n $: isPriceLoading = options.isPriceLoading\n $: totalSumCents = options.totalSumCents\n $: isCredezaValueDisabled = options.isCredezaValueDisabled\n</script>\n\n<div class=\"cpui-payment crtw-text-left crtw-w-full\" class:crtw-hidden={isLoading}>\n <div class=\"crtw-text-right crtw-text-[13px] crtw-text-gray-400 crtw-mb-6\">\n <div class=\"crtw-break-words\">{user?.email || user?.pending?.email || ''}</div>\n <div>{user?.phone || user?.pending?.phone || ''}</div>\n </div>\n <div class=\"crtw-font-bold crtw-text-xl\">{title}</div>\n <div class=\"crtw-flex crtw-justify-between crtw-mb-3 crtw-text-gray-600 crtw-font-bold\">\n {#if subtitle}\n <div>{subtitle}</div>\n {/if}\n {#if isPriceLoading}\n <div>Getting price...</div>\n {:else if totalSumCents}\n <div>{currencySymbol}{(+totalSumCents / 100).toFixed(2)}</div>\n {/if}\n </div>\n <div class=\"crtw-flex crtw-bg-gray-200 crtw-rounded-md crtw-p-px\">\n <PaymentSwitchButton\n text=\"Credit Card\"\n onClick={() => (activeTab = PaymentViews.CREDIT_CARD)}\n isActive={activeTab === PaymentViews.CREDIT_CARD}\n disabled={isStripeDisabled}\n />\n <PaymentSwitchButton\n text=\"Credenza Balance\"\n onClick={() => (activeTab = PaymentViews.CREDENZA_BALANCE)}\n isActive={activeTab === PaymentViews.CREDENZA_BALANCE}\n disabled={isCredezaValueDisabled}\n />\n </div>\n <hr class=\"crtw-block crtw-border-t-2 crtw-border-gray-200 crtw-w-1/2 crtw-mx-auto crtw-mt-3.5 crtw-mb-[30px]\" />\n {#if activeTab === PaymentViews.CREDIT_CARD}\n <slot name=\"credit-card\" />\n {:else if activeTab === PaymentViews.CREDENZA_BALANCE}\n <slot name=\"cred-balance\" />\n {/if}\n <div class=\"crtw-flex crtw-w-full crtw-justify-center crtw-items-center\">\n <img src={LockIcon} alt=\"\" /><span class=\"crtw-text-sm crtw-text-gray-400 crtw-ml-1\"\n >Payments are secure and encrypted</span\n >\n </div>\n <div class=\"crtw-mt-1.5\">\n <ButtonBack onClick={onBackClick} />\n </div>\n</div>\n","<script lang=\"ts\">\n import Button from \"../shared/inputs/button/Button.svelte\";\n\n export let options: {\n isCardFocused: boolean\n onPay: () => void\n currencySymbol?: string\n }\n export let isPaymentDisabled: boolean\n export let isLoading: boolean\n export let totalToPay: string\n\n let { isCardFocused, onPay, currencySymbol = '$' } = options\n</script>\n\n<div class=\"crtw-text-base crtw-mb-1.5\">Credit card details</div>\n<div\n id=\"cpui-card-element\"\n class=\"crtw-border crtw-border-gray-300 crtw-rounded crtw-px-2.5 crtw-py-4 crtw-mb-2.5 crtw-w-full\"\n style={isCardFocused ? 'border-color: #121e2b' : ''}\n/>\n<!-- Used to display Element errors. -->\n<div id=\"card-errors\" role=\"alert\" />\n<Button\n text={`Pay ${currencySymbol}${totalToPay}`}\n onClick={onPay}\n disabled={isPaymentDisabled}\n bind:isLoading\n/>","<script lang=\"ts\">\n import Button from \"../shared/inputs/button/Button.svelte\";\n\n export let options: {\n formattedBalance: string\n balance: number\n credAlias: string\n onPay: () => void\n onGetCred: () => void\n totalToPay: string\n isLoading: boolean\n isPaymentDisabled: boolean\n }\n\n let { credAlias, onPay, onGetCred } = options\n\n $: isLoading = options.isLoading\n $: isPaymentDisabled = options.isPaymentDisabled\n $: formattedBalance = options.formattedBalance\n $: totalToPay = options.totalToPay\n $: balance = options.balance\n</script>\n\n<div class=\"crtw-w-full crtw-text-center crtw-my-5\">\n <div class=\"crtw-text-3xl crtw-text-black crtw-font-bold\">\n {#if Number(totalToPay) > balance}\n INSUFFICIENT FUNDS\n {:else}\n {formattedBalance}\n {/if}\n \n </div>\n <div class=\"crtw-mb-5 crtw-text-gray-600\">\n {#if Number(totalToPay) > balance}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n You do not have enough stored value to make this payment. \n <span\n class=\"crtw-text-black crtw-cursor-pointer\"\n role=\"button\"\n tabindex=\"0\"\n on:click={onGetCred}\n >\n Click to get some {credAlias}\n </span>\n {:else}\n Your balance after purchase\n {/if}\n </div>\n\n <Button\n text={`Pay ${totalToPay} ${credAlias}`}\n onClick={onPay}\n disabled={isPaymentDisabled}\n {isLoading}\n />\n</div>","<script lang=\"ts\">\n import { onMount } from 'svelte'\n import { dispatch, PassportEvents } from '@lib/events/events'\n\n export let doPayment: (stripeTokenId: string) => Promise<void>\n export let stripe: Window['Stripe']\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n export let stripeElements: any\n export let priceCents: number\n export let isLoading: boolean\n\n onMount(async () => {\n const paymentRequest = stripe.paymentRequest({\n country: 'US',\n currency: 'usd',\n total: {\n label: 'Apple/Google payment',\n amount: priceCents / 100,\n },\n requestPayerName: true,\n requestPayerEmail: true,\n })\n const canMakePayment = await paymentRequest.canMakePayment()\n if (!canMakePayment) return\n\n const walletPayElement = document.getElementById('ctui-wallet-pay')\n if (walletPayElement) walletPayElement.style.display = 'crtw-block'\n\n const prButton = stripeElements.create('paymentRequestButton', {\n paymentRequest: paymentRequest,\n style: {\n paymentRequestButton: {\n height: '48px',\n },\n },\n })\n prButton.mount('#ctui-payment-request-button')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n paymentRequest.on('token', async (event: any) => {\n isLoading = true\n try {\n await doPayment(event.token.id)\n await event.complete('success')\n } catch (err) {\n await event.complete('error')\n dispatch(PassportEvents.ERROR, { error: err })\n }\n isLoading = false\n })\n })\n</script>\n\n<div id=\"ctui-wallet-pay\" class=\"crtw-w-full crtw-my-4\" style=\"dispay: none;\">\n <div id=\"ctui-payment-request-button\"></div>\n</div>\n","export const stripeStyles = {\n base: {\n color: '#121e2b',\n fontSize: '12px',\n '::placeholder': {\n color: '#d9d9d9',\n },\n },\n invalid: {\n color: '#fa755a',\n },\n}\n","export const loadScript = (src: string) => {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script')\n script.src = src\n document.body.appendChild(script)\n script.addEventListener('load', () => resolve(script))\n script.addEventListener('error', () => reject(script))\n })\n}\n","import { get } from \"svelte/store\";\nimport { accessTokenStore } from \"../../../stores\";\nimport type { TPaymentReturn } from \"@packages/utils/types\";\n\nexport const getOrderDetails = async (apiUrl: string, orderId: string): Promise<TPaymentReturn> => {\n const res = await fetch(`${apiUrl}/orders/${orderId}`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${get(accessTokenStore)}`,\n },\n method: \"GET\",\n });\n if (!res.ok) throw new Error(\"Failed to get order details\");\n return await res.json();\n}\nexport const getCompmletedOrderDetails = async (\n apiUrl: string,\n orderId: string,\n maxRetries = 5\n) => {\n let attempts = 0;\n\n while (attempts < maxRetries) {\n const res = await fetch(`${apiUrl}/orders/completed/${orderId}`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${get(accessTokenStore)}`,\n },\n method: \"GET\",\n });\n\n if (res.status === 204) {\n attempts++;\n if (attempts < maxRetries) {\n continue;\n } else {\n throw new Error(\"No content received after multiple attempts\");\n }\n }\n\n if (!res.ok) throw new Error(\"Failed to get order details\");\n return await res.json();\n }\n};\n\nexport const validateOrderItems = (\n txs: string[] | null[],\n orders: TPaymentReturn[\"items\"],\n): string => {\n const errorMessages = orders\n .filter((item) => item.error)\n .map(\n (item) =>\n `Name: ${item.metadata?.name || item.directive.resource_id}, reason: ${item.error}`\n )\n .join(\"\\n\");\n if (txs.every((item) => item === null)) {\n throw new Error(`All transactions failed. \\n${errorMessages}`);\n } else if (orders?.every(item => item.status === \"ERROR\")) {\n throw new Error(`All transactions failed.}`);\n }\n return errorMessages;\n};\n","import { ReceiptTarget } from '@packages/utils/enums'\nimport { accessTokenStore } from '@packages/stores'\nimport { get } from 'svelte/store'\nimport { configStore } from '@src/stores/config'\nimport { getClientConfigByClientId } from '@lib/clients'\nimport { initSuiClient } from '@src/libs/sui'\nimport type { TPaymentAsset } from './payment.constants'\nimport { pageOptsStore, pageStore, userStore } from '@packages/stores'\nimport { Pages } from '@packages/utils/enums'\nimport { analytics } from '@lib/mixpanel/mixpanel'\nimport { waitVideoEnded } from '@components/progress/ProgressVideo.service'\nimport { getAddress } from '@src/passport/blockchain'\nimport type { TPaymentReturn } from '@packages/utils/types'\nimport { validateOrderItems } from '@lib/orders'\n\n\nexport const requestSuiReceipt = async ({\n stripeChargeId,\n title,\n digest,\n subtitle,\n amount,\n currency,\n}: {\n stripeChargeId?: string\n digest?: string\n amount?: number\n currency?: string\n title: string\n subtitle: string\n}) => {\n const { credenza, receiptTarget, clientId } = get(configStore)\n\n const targets = [];\n if (!receiptTarget) {\n targets.push(ReceiptTarget.EMAIL)\n } else {\n targets.push(...receiptTarget)\n }\n\n let successCount = 0;\n \n for (const target of targets) {\n const result = await fetch(`${credenza.suiApiUrl}/tokens/receipt`, {\n method: 'POST',\n body: JSON.stringify({\n ...(stripeChargeId ? { charge_id: stripeChargeId } : {}),\n ...(digest ? { digest } : {}),\n ...(amount ? { amount } : {}),\n ...(currency ? { currency } : {}),\n target,\n title,\n subtitle,\n source: getClientConfigByClientId(clientId).name,\n }),\n headers: {\n Authorization: `Bearer ${get(accessTokenStore)}`,\n 'Content-Type': 'application/json',\n },\n })\n\n if (result.ok) {\n successCount++;\n } else {\n console.warn(`Failed to send receipt to ${target}:`, result.status)\n }\n }\n\n return successCount > 0\n}\n\nexport const afterPaymentProcess = async ({\n res,\n priceCents,\n purchaseConfig\n}: {\n res: TPaymentReturn\n priceCents: number,\n purchaseConfig: { assets: TPaymentAsset[], title: string, subtitle: string }\n}) => {\n const config = get(configStore)\n\n const { chain_txs, items } = res\n const failedOrdersMessage = validateOrderItems(chain_txs, items)\n \n const user = get(userStore)\n if (user) {\n analytics.track('cp_payment_fiat', {\n $email: user.email,\n $phone: user.phone,\n suiNetwork: config.suiNetwork,\n clientId: config.clientId,\n address: await getAddress(),\n location: window.location.href,\n assets: purchaseConfig?.assets,\n total: priceCents / 100,\n description: (purchaseConfig?.title ?? '') + `(${purchaseConfig?.subtitle ?? ''})`,\n })\n }\n\n await waitVideoEnded()\n\n if (failedOrdersMessage) {\n pageOptsStore.set({\n title: 'Done!',\n subtitle: 'Your payment was partly successful',\n orders: items,\n })\n }\n pageStore.set(Pages.PAYMENT_RESULT)\n}\n\nexport const enrichAssetsWithMetadata = async (\n items: TPaymentReturn['items'], \n) => {\n for (const item of items) {\n const client = await initSuiClient(item?.asset?.packageId as string)\n \n let metadata = null\n if (item?.asset?.assetId) {\n metadata = await client.CredenzaAssetCollection.getAssetMetadata(+item?.asset?.assetId)\n item.asset.metadata = metadata\n }\n }\n}\n","<script lang=\"ts\">\n import WalletPay from './wallet-pay/WalletPay.svelte'\n import { onMount } from 'svelte'\n import { get } from 'svelte/store'\n import { stripeStyles } from '@pages/payment/stripe/Stripe.styles'\n import { dispatch, PassportEvents } from '@lib/events/events'\n import { loadScript } from '@lib/scripts/scripts'\n import { pageOptsStore, pageStore, fn } from '@packages/stores'\n import { Pages } from '@packages/utils/enums'\n import { Stripe as StripeComponent } from '@packages/ui'\n\n import { configStore } from '@src/stores/config'\n import { getClientConfigByClientId } from '@lib/clients'\n import type { TPaymentAsset } from '../payment.constants'\n import { afterPaymentProcess } from '../Payment.service'\n\n export let priceCents: number\n export let isLoading: boolean\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n export let purchaseConfig: { assets: TPaymentAsset[], title: string, subtitle: string }\n export let isPriceLoading: boolean\n\n const { toastAlert } = get(fn)\n const config = get(configStore)\n\n let Stripe: Window['Stripe']\n let stripe: Window['Stripe']\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let stripeElements: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let cardElement: any\n let isButtonActive: boolean\n\n let isCardFocused = false\n onMount(async () => {\n try {\n if (!Stripe) {\n if (!window.Stripe) {\n await loadScript('https://js.stripe.com/v3/')\n if (!window.Stripe) throw {}\n }\n Stripe = window.Stripe\n }\n } catch (err) {\n return console.log('Please include stripe to use payments.')\n }\n if (stripe) return\n const clientName = getClientConfigByClientId(config.clientId).name\n stripe = Stripe(config.stripe.pk[clientName] ?? config.stripe.pk.DEFAULT)\n stripeElements = stripe.elements()\n cardElement = stripeElements.create('card', { style: stripeStyles })\n cardElement.mount('#cpui-card-element')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cardElement.on('change', (event: any) => {\n isButtonActive = event.complete && !event.error\n })\n cardElement.on('focus', () => (isCardFocused = true))\n cardElement.on('blur', () => (isCardFocused = false))\n })\n\n const handleSubmit = async () => {\n try {\n if (!isButtonActive) return\n isLoading = true\n const result = await stripe.createToken(cardElement)\n if (result.error) throw result.error\n await doPayment(result.token.id)\n } catch (err) {\n dispatch(PassportEvents.ERROR, { error: err })\n }\n isLoading = false\n }\n\n const doPayment = async (tokenId: string) => {\n try {\n const { processPayment } = await import('@pages/payment/stripe/Stripe.service')\n\n const { assets } = purchaseConfig\n if (!assets?.length) throw new Error('No purchase config assets found')\n\n const res = await processPayment(tokenId, assets)\n await afterPaymentProcess({res, priceCents, purchaseConfig})\n } catch (err) {\n toastAlert(`Payment error: ${err.message || err}`, 'failure')\n pageOptsStore.set({ errorMessage: err.message })\n pageStore.set(Pages.ERROR)\n dispatch(PassportEvents.ERROR, { error: err })\n }\n }\n\n $: isPaymentDisabled = !isButtonActive || isLoading || isPriceLoading\n $: totalToPay = (priceCents / 100).toFixed(2)\n</script>\n\n<StripeComponent\n bind:isPaymentDisabled\n bind:isLoading\n bind:totalToPay\n options={{\n isCardFocused,\n onPay: handleSubmit,\n currencySymbol: getClientConfigByClientId(config.clientId).currencySymbol,\n }}\n/>\n\n{#if stripe && stripeElements}\n <WalletPay {doPayment} {stripe} {stripeElements} {priceCents} bind:isLoading />\n{/if}\n","<script lang=\"ts\">\n import { onMount } from 'svelte'\n import { Pages } from '@packages/utils/enums'\n import { pageOptsStore, fn, pageStore, userStore, clientPublicStore } from '@packages/stores'\n import { dispatch, PassportEvents } from '@lib/events/events'\n import { CredenzaBalance } from '@packages/ui'\n import { get } from 'svelte/store'\n import { analytics } from '@lib/mixpanel/mixpanel'\n import { configStore } from '@src/stores/config'\n import { buyWithCred, getAddress, getBalance } from '@src/passport/blockchain'\n import { getCryptoCurrencySymbol } from '@lib/strings/strings'\n import { waitVideoEnded } from '@components/progress/ProgressVideo.service'\n import { requestSuiReceipt } from '../Payment.service'\n\n export let totalPriceToken: number\n export let purchaseConfig: {\n assets: { type: string; packageId: string; assetId?: number; amount?: number }[]\n title: string\n subtitle: string\n }\n export let isLoading: boolean\n export let isPriceLoading: boolean\n export let pricesByAsset: number[] = []\n\n const { toastAlert } = get(fn)\n const config = get(configStore)\n\n let balance = 0\n\n const processPaymentTx = async (\n asset: { type: string; packageId: string; assetId?: number; amount?: number },\n index: number,\n ) => {\n const { type, packageId, assetId, amount } = asset\n const paymentRes = await buyWithCred(type, packageId, { assetId, amount })\n const { title, subtitle } = purchaseConfig\n dispatch(PassportEvents.PAYMENT)\n dispatch(PassportEvents.RECHECK_BALANCE)\n await requestSuiReceipt({\n digest: paymentRes.digest,\n title,\n subtitle,\n amount: pricesByAsset[index],\n currency: 'CRED',\n })\n dispatch(PassportEvents.RECEIPT, { digest: paymentRes.digest })\n }\n\n const payWithCredenza = async () => {\n try {\n if (BigInt(totalPriceToken) > balance) return\n\n isLoading = true\n const { assets } = purchaseConfig\n\n for (const [index, asset] of assets.entries()) {\n await processPaymentTx(asset, index)\n\n await new Promise((resolve) => setTimeout(resolve, 1000))\n }\n\n const user = get(userStore)\n if (user) {\n analytics.track('cp_payment_stored_value', {\n $email: user.email,\n $phone: user.phone,\n suiNetwork: config.suiNetwork,\n clientId: config.clientId,\n location: window.location.href,\n address: await getAddress(),\n assets,\n total: totalPriceToken,\n description: (purchaseConfig?.title ?? '') + `(${purchaseConfig?.subtitle ?? ''})`,\n })\n }\n await waitVideoEnded()\n\n pageStore.set(Pages.PAYMENT_RESULT)\n } catch (err) {\n toastAlert(`Payment error: ${err.message || err}`, 'failure')\n pageOptsStore.set({ errorMessage: err.message })\n pageStore.set(Pages.ERROR)\n dispatch(PassportEvents.ERROR, { error: err })\n } finally {\n isLoading = false\n }\n }\n\n onMount(async () => {\n balance = Number(await getBalance())\n })\n\n $: formattedBalance = `${(balance - totalPriceToken).toFixed(2)} ${getCryptoCurrencySymbol('cred', 'cred')}`\n</script>\n\n<CredenzaBalance\n options={{\n formattedBalance,\n balance,\n credAlias:$clientPublicStore.ui_settings.cred_alias,\n onPay: payWithCredenza,\n onGetCred: () => pageStore.set(Pages.WALLET),\n totalToPay: String(totalPriceToken),\n isLoading,\n isPaymentDisabled: !Number(balance) || totalPriceToken > balance || isPriceLoading,\n }}\n/>\n","import { accessTokenStore, pageOptsStore } from \"@packages/stores\"\nimport type { TBasicPaymentData } from \"./oder.types\"\nimport { get } from \"svelte/store\"\nimport { configStore } from \"@src/stores/config\"\nimport type { TPaymentReturn } from \"@packages/utils/types\"\nimport { getCompmletedOrderDetails } from \"@lib/orders\"\nimport { enrichAssetsWithMetadata, requestSuiReceipt } from \"./Payment.service\"\nimport { dispatch, PassportEvents } from \"@lib/events/events\"\nimport type { TPaymentAsset } from \"./payment.constants\"\n\n\nexport const createOrder = async (paymentData: TBasicPaymentData): Promise<string> => {\n const { assets, ...rest } = paymentData\n const assetGroups = mapAssetsToGroups(assets)\n const res = await fetch(get(configStore).credenza.suiApiUrl + '/assets/buy', {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${get(accessTokenStore)}`,\n },\n method: 'POST',\n body: JSON.stringify({...rest, ...assetGroups}),\n })\n if (!res.ok) throw new Error('Failed to create order')\n const { _id }: { _id: string } = await res.json()\n return _id\n}\n\nexport const processOrder = async (orderId: string): Promise<TPaymentReturn> => {\n const config = get(configStore)\n const { title, subtitle } = get(pageOptsStore)\n const data = (await getCompmletedOrderDetails(config.credenza.generalApiUrl, orderId)) as TPaymentReturn\n if (data.items[0].error) throw new Error(data.items[0].error)\n\n if (data.payment_provider_tx) {\n await requestSuiReceipt({ stripeChargeId: data.payment_provider_tx, title, subtitle })\n dispatch(PassportEvents.RECEIPT, { stripeChargeId: data.payment_provider_tx })\n }\n await enrichAssetsWithMetadata(data.items)\n return data\n}\n\nconst mapAssetsToGroups = (assets: TPaymentAsset[]) => {\n const typeMap: { [key: string]: string } = {\n credenza_asset_collection: \"collection\",\n decom: \"decom\",\n cred: \"coin\",\n membership: \"membership\",\n };\n\n const result = assets.reduce((acc: { [key: string]: { asset_type: string; asset_id?: number; amount?: number }[] }, asset) => {\n const key = typeMap[asset.type];\n if (!key) return acc;\n\n const entry: { asset_type: string; asset_id?: number; amount?: number } = {\n asset_type: `${asset.packageId}::${asset.type}::${asset.type.toUpperCase()}`,\n };\n\n if (asset.assetId) {\n entry.asset_id = +asset.assetId\n }\n if (asset.amount) {\n entry.amount = asset.amount\n }\n\n acc[key] = acc[key] || [];\n acc[key].push(entry);\n\n return acc;\n }, { collection: [], decom: [], coin: [], membership: [] });\n\n return result;\n}","<script lang=\"ts\">\n import { dispatch, PassportEvents } from \"@lib/events/events\"\n import { loadScript } from \"@lib/scripts/scripts\"\n import { pageOptsStore, pageStore } from \"@packages/stores\"\n import { Pages } from \"@packages/utils/enums\"\n import { toastAlert } from \"@src/passport/ui\"\n import { onMount } from \"svelte\"\n import { createOrder, processOrder } from \"../order.service\"\n import { afterPaymentProcess } from \"../Payment.service\"\n import { get } from \"svelte/store\"\n import { configStore } from \"@src/stores/config\"\n import { getOrderDetails } from \"@lib/orders\"\n\n let { priceCents, purchaseConfig, isLoading = $bindable() } = $props()\n\n let Paystack: Window['PaystackPop']\n\n onMount(async () => {\n try {\n if (!Paystack) {\n if (!window.PaystackPop) {\n await loadScript('https://js.paystack.co/v2/inline.js')\n }\n Paystack = window.PaystackPop\n }\n\n await doPayment()\n } catch (err) {\n return console.log('Please include paystack to use payments.')\n }\n })\n\n const externalErrorHandler = (err: Error) => {\n isLoading = false\n toastAlert(`Payment error: ${err.message || err}`, 'failure')\n pageOptsStore.set({ errorMessage: err.message })\n pageStore.set(Pages.ERROR)\n dispatch(PassportEvents.ERROR, { error: err })\n };\n\n const doPayment = async () => {\n try {\n const { assets } = purchaseConfig\n const config = get(configStore)\n if (!assets?.length) throw new Error('No purchase config assets found')\n isLoading = true\n const orderId = await createOrder({assets, payment_provider: \"paystack\", client_id: get(configStore).clientId, currency: \"GHS\"})\n const res = await getOrderDetails(config.credenza.generalApiUrl, orderId)\n\n if (!res.payment_provider_data?.access_code) throw new Error('Payment is unavailable now')\n const popup = new Paystack()\n \n const result = popup.resumeTransaction(res.payment_provider_data?.access_code)\n result.onSuccess = async () => {\n try {\n const res = await processOrder(orderId);\n await afterPaymentProcess({\n res,\n priceCents,\n purchaseConfig\n });\n } catch (err) {\n externalErrorHandler(err)\n } finally {\n isLoading = false;\n }\n }\n\n result.onError = (err: unknown) => {\n isLoading = false\n throw err\n }\n } catch (err) {\n externalErrorHandler(err)\n }\n }\n</script>\n","<script lang=\"ts\">\n import { Pages } from '@packages/utils/enums'\n import { onDestroy } from 'svelte'\n\n import { pageOptsStore, userStore, pageStore } from '@packages/stores'\n import { dispatch, PassportEvents } from '@lib/events/events'\n import { Payment } from '@packages/ui'\n import Stripe from './stripe/Stripe.svelte'\n import { getSuiCredCoinType, getSellableConfigId, getSuiObject, getAssetPrice } from '@src/utils/blockchain'\n import type { TSuiPaymentItem } from '@app/types'\n import { toastAlert } from '@src/passport/ui'\n import CredenzaBalance from './credenza-balance/CredenzaBalance.svelte'\n import { SUI_CRED_DECIMALS } from '@src/constants/blockchain'\n import { AssetType } from './payment.constants'\n import { getClientConfigByClientId } from '@lib/clients'\n import { configStore } from '@src/stores/config'\n import { get } from 'svelte/store'\n import Paystack from './paystack/Paystack.svelte'\n\n let isPriceLoading: boolean = false\n let isLoading: boolean = false\n let pricesByAsset: number[] = []\n\n let totalSumCents: number = 0\n let totalSumCoins: number = 0\n\n const getTokenPrice = async (packageId: string, type: string, assetId?: string): Promise<[number, number]> => {\n if (assetId && type === AssetType.CREDENZA_ASSET_COLLECTION) {\n return await getAssetPrice(packageId, assetId)\n }\n\n const sellableConfigId = await getSellableConfigId(packageId, type)\n const sellableObj = await getSuiObject(sellableConfigId)\n\n const {\n content: {\n fields: { price_fiat, price_coin },\n },\n } = sellableObj\n return [+price_fiat, +price_coin]\n }\n\n const calculateTotalPrice = async (assets: TSuiPaymentItem[]): Promise<void> => {\n try {\n isPriceLoading = true\n\n for (const asset of assets) {\n const { packageId, type, amount, assetId } = asset\n const packageIdWCoinType = `${packageId}::${type}::${type.toUpperCase()}`\n if (packageIdWCoinType === getSuiCredCoinType() && amount) {\n totalSumCents += amount * 100\n } else {\n let [cents, coins] = await getTokenPrice(packageId, type, assetId)\n if (amount && amount !== 0) {\n cents *= amount\n coins *= amount\n }\n\n totalSumCents += cents\n totalSumCoins += coins / SUI_CRED_DECIMALS\n\n pricesByAsset.push(coins / SUI_CRED_DECIMALS)\n }\n }\n } catch (err) {\n console.log(err)\n toastAlert('Error calculating the price', 'failure')\n dispatch(PassportEvents.ERROR, err)\n } finally {\n isPriceLoading = false\n }\n }\n\n const unsub = pageOptsStore.subscribe(async (store) => {\n if (!store?.assets || !store.assets.length) return\n await calculateTotalPrice(store.assets)\n })\n\n onDestroy(unsub)\n</script>\n\n{#if isLoading}\n {#await import('@components/progress/ProgressVideo.svelte') then module}\n <svelte:component this={module.default} />\n {/await}\n{/if}\n\n<Payment\n bind:isLoading\n options={{\n user: $userStore,\n title: $pageOptsStore.title || `Order Summary`,\n subtitle: $pageOptsStore.subtitle,\n onBackClick: () => pageStore.set(Pages.WALLET),\n isStripeDisabled: $pageOptsStore.payments?.stripe?.disabled,\n isCredezaValueDisabled: !totalSumCents || $pageOptsStore.payments?.credenzaStoredValue?.disabled,\n isPriceLoading,\n totalSumCents: totalSumCents,\n currencySymbol: getClientConfigByClientId(get(configStore).clientId).currencySymbol,\n }}\n>\n <div slot=\"credit-card\">\n {#if getClientConfigByClientId(get(configStore).clientId).payment === 'paystack'}\n <Paystack priceCents={totalSumCents} purchaseConfig={$pageOptsStore} bind:isLoading/>\n {:else}\n <Stripe priceCents={totalSumCents} {isPriceLoading} purchaseConfig={$pageOptsStore} bind:isLoading />\n {/if}\n </div>\n <div slot=\"cred-balance\">\n <CredenzaBalance\n {pricesByAsset}\n totalPriceToken={totalSumCoins}\n {isPriceLoading}\n purchaseConfig={$pageOptsStore}\n bind:isLoading\n />\n </div>\n</Payment>\n"],"names":["LockIcon","onClick","$.prop","$$props","text","disabled","isLoading","$$render","consequent","alternate","isActive","$$args","options","subtitle","onBackClick","isStripeDisabled","currencySymbol","activeTab","PaymentViews","isPriceLoading","totalSumCents","isCredezaValueDisabled","$0","$.untrack","$.get","consequent_2","consequent_1","user","title","isPaymentDisabled","totalToPay","isCardFocused","onPay","credAlias","onGetCred","formattedBalance","balance","__awaiter","thisArg","_arguments","P","generator","onMount","stripe","priceCents","paymentRequest","walletPayElement","stripeElements","event","doPayment","err","dispatch","PassportEvents","stripeStyles","loadScript","src","resolve","reject","script","getOrderDetails","apiUrl","orderId","res","get","accessTokenStore","getCompmletedOrderDetails","maxRetries","attempts","validateOrderItems","txs","orders","errorMessages","item","requestSuiReceipt","stripeChargeId","digest","amount","currency","credenza","receiptTarget","clientId","configStore","targets","ReceiptTarget","successCount","target","result","getClientConfigByClientId","afterPaymentProcess","purchaseConfig","config","chain_txs","items","failedOrdersMessage","userStore","analytics","getAddress","waitVideoEnded","pageOptsStore","pageStore","Pages","enrichAssetsWithMetadata","client","initSuiClient","metadata","fn","Stripe","$.mutable_source","cardElement","isButtonActive","clientName","$.set","_a","handleSubmit","tokenId","processPayment","assets","totalPriceToken","pricesByAsset","asset","index","type","packageId","assetId","paymentRes","buyWithCred","payWithCredenza","_b","toastAlert","getBalance","getCryptoCurrencySymbol","$clientPublicStore","createOrder","paymentData","rest","assetGroups","mapAssetsToGroups","_id","processOrder","data","typeMap","acc","key","entry","Paystack","externalErrorHandler","totalSumCoins","getTokenPrice","AssetType","sellableConfigId","getSellableConfigId","sellableObj","getSuiObject","price_fiat","price_coin","getSuiCredCoinType","cents","coins","SUI_CRED_DECIMALS","unsub","store","onDestroy","$.await","node_1","module","$.component","node_2","$$anchor","$$component","$pageOptsStore"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Scanner-Ci6WuRAH.js","sources":["../../ui/main/scanner/Scanner.svelte","../src/app/pages/scanner/Scanner.service.ts","../src/app/pages/scanner/Scanner.svelte"],"sourcesContent":["<script lang=\"ts\">\n import ContentHeader from \"../shared/ContentHeader.svelte\";\n import Loader from \"../shared/Loader.svelte\";\n\n export let options: {\n isScannerLoaded: boolean\n }\n\n $: isScannerLoaded = options.isScannerLoaded\n</script>\n\n<ContentHeader text=\"Scan PassScan Code\" />\n<div class=\"crtw-w-full\">\n {#if !isScannerLoaded}\n <div\n class=\"crtw-w-full crtw-h-64 crtw-rounded-[10px] crtw-flex crtw-items-center crtw-justify-center\"\n style=\"background-color: rgb(238, 238, 238)\"\n >\n <Loader />\n </div>\n {/if}\n <div\n id=\"cpuiScanner\"\n class=\"crtw-w-full crtw-h-64 crtw-rounded-lg crtw-flex crtw-items-center crtw-justify-center\"\n class:crtw-hidden={!isScannerLoaded}\n style=\"background-color: rgb(238, 238, 238)\"\n />\n</div>\n ","import { waitVideoEnded } from '@components/progress/ProgressVideo.service'\nimport { fn, pageOptsStore, pageStore, suiFn } from '@packages/stores'\nimport { Pages } from '@packages/utils/enums'\nimport { type TSendToPassportId } from '@packages/utils/types'\nimport { fetchAssetMetadata } from '@src/passport/blockchain'\nimport { type TSuiAirDropAsset, type TSuiAirDropCoin } from '@src/utils/types'\nimport { get } from 'svelte/store'\n\nexport const goToSendTokens = ({ userAddress, amount }: TSendToPassportId) => {\n pageOptsStore.set({ to: userAddress, amount })\n pageStore.set(Pages.SEND_TOKENS)\n}\n\nexport const processAirDropCoin = async (data: TSuiAirDropCoin) => {\n const { requestAirDropCoin } = get(suiFn)\n try {\n pageOptsStore.set({ loaderText: 'Issuing AirDropped Token...' })\n pageStore.set(Pages.LOADER)\n await requestAirDropCoin(data)\n await waitVideoEnded()\n\n pageOptsStore.set({ subtitle: 'The air drop was successful!', receipt: false })\n pageStore.set(Pages.PAYMENT_RESULT)\n } catch (err) {\n pageOptsStore.set({ errorMessage: err.message })\n pageStore.set(Pages.ERROR)\n }\n}\n\nexport const processAirDropAsset = async (data: TSuiAirDropAsset) => {\n const metadata = await fetchAssetMetadata(data.packageId, data.assetId)\n const { requestAirDropAsset } = get(suiFn)\n try {\n pageOptsStore.set({ loaderText: `AirDropping Token: ${metadata?.name || data.title || ''}` })\n pageStore.set(Pages.LOADER)\n await requestAirDropAsset(data)\n await waitVideoEnded()\n\n pageOptsStore.set({\n subtitle: `Your account has a new token: ${metadata?.name || data.title || ''}`,\n tokenImage: metadata?.assetImage,\n receipt: false\n })\n pageStore.set(Pages.PAYMENT_RESULT)\n } catch (err) {\n console.log(err)\n pageOptsStore.set({ errorMessage: err.message })\n pageStore.set(Pages.ERROR)\n }\n}\n\nexport const goToPayment = ({\n title,\n assets,\n isStripeDisabled,\n}: {\n isStripeDisabled?: boolean\n title: string\n assets: { packageId: string; type: string }[]\n}) => {\n pageOptsStore.set({\n ...(isStripeDisabled\n ? {\n payments: {\n stripe: {\n disabled: true,\n },\n },\n }\n : {}),\n subtitle: title,\n assets,\n })\n pageStore.set(Pages.PAYMENT)\n}\n\nexport const processRequestLoyaltyPoints = async ({ eventId, packageId }: { eventId: number; packageId: string }) => {\n const { requestLoyaltyPoints } = get(fn)\n try {\n pageOptsStore.set({ loaderText: 'Issuing Loyalty points..', progressVideos: [] })\n pageStore.set(Pages.LOADER)\n\n if (requestLoyaltyPoints) await requestLoyaltyPoints(eventId, packageId)\n\n pageOptsStore.set({ subtitle: 'The request for loyalty points was successful!', description: '', receipt: false })\n pageStore.set(Pages.PAYMENT_RESULT)\n } catch (err) {\n pageOptsStore.set({ description: err.message, title: 'The request failed' })\n pageStore.set(Pages.ERROR)\n }\n}\n\n","<script lang=\"ts\">\n import { onMount } from 'svelte'\n import { get } from 'svelte/store'\n import type { Scanner } from '@credenza3/scanner-lib'\n\n import { pageStore, fn } from '@packages/stores'\n import { ScanTypes } from '@packages/utils/enums'\n import { once, PassportEvents } from '@lib/events/events'\n import {\n goToPayment,\n goToSendTokens,\n processAirDropAsset,\n processAirDropCoin,\n processRequestLoyaltyPoints,\n } from '@pages/scanner/Scanner.service'\n import { Scanner as ScannerComponent } from '@packages/ui'\n import { getUserAddressBySub } from '@src/Passport.service'\n\n const { close } = get(fn)\n let scanner: Scanner\n let isScannerLoaded = false\n\n const onCapture = async ({ message, sub, scanType }: { sub: string; message: string; scanType: string }) => {\n scanner.close()\n switch (scanType) {\n case ScanTypes.PASSPORT_ID_PASS:\n case ScanTypes.PASSPORT_ID: {\n const parsed = JSON.parse(message)\n const { address } = await getUserAddressBySub(sub)\n goToSendTokens({ userAddress: address, amount: parsed?.amount })\n break\n }\n case ScanTypes.TOKENS_PURCHASE: {\n goToPayment(JSON.parse(message))\n break\n }\n case ScanTypes.AIR_DROP_COIN: {\n await processAirDropCoin(JSON.parse(message))\n break\n }\n case ScanTypes.AIR_DROP_ASSET: {\n await processAirDropAsset(JSON.parse(message))\n break\n }\n case ScanTypes.REQUEST_LOYALTY_POINTS: {\n await processRequestLoyaltyPoints(JSON.parse(message))\n break\n }\n default: {\n close()\n pageStore.set(null)\n }\n }\n }\n\n onMount(async () => {\n const { Scanner } = await import('@credenza3/scanner-lib')\n scanner = new Scanner({ target: '#cpuiScanner' })\n once(PassportEvents.UI_CLOSED, () => {\n scanner.close()\n pageStore.set(null)\n })\n await scanner.scan({ isCloseButton: false })\n isScannerLoaded = true\n scanner.on(Scanner.events.CAPTURE, onCapture)\n scanner.on(Scanner.events.ERROR, (err) => {\n const message = err?.message || err\n if (message.includes('Permission'))\n alert('In order to scan please allow the current page to access your camera and try again.')\n })\n })\n</script>\n\n<ScannerComponent options={{ isScannerLoaded }} />\n"],"names":["options","$.prop","$$props","isScannerLoaded","$$render","consequent","goToSendTokens","userAddress","amount","pageOptsStore","pageStore","Pages","processAirDropCoin","data","requestAirDropCoin","get","suiFn","waitVideoEnded","err","processAirDropAsset","metadata","fetchAssetMetadata","requestAirDropAsset","goToPayment","title","assets","isStripeDisabled","processRequestLoyaltyPoints","eventId","packageId","requestLoyaltyPoints","fn","__awaiter","thisArg","_arguments","P","generator","close","scanner","onCapture","_a","message","sub","scanType","ScanTypes","parsed","address","getUserAddressBySub","onMount","Scanner","once","PassportEvents"],"mappings":";;;;;;;iBAAA;;;;MASQA,IAEPC,EAAAC,GAAA,WAAA,EAAA;;MAEGC,GAAmBH,EAAA,EAAA,eAAA;AAAA;;;;;;;;;;QAKhBG,CAAQ,KAAAC,EAAAC,CAAA;AAAA;;;;;;;;;;;;;;AAJf;ACNO,MAAMC,KAAiB,CAAC,EAAE,aAAAC,GAAa,QAAAC,QAAgC;AAC5E,EAAAC,EAAc,IAAI,EAAE,IAAIF,GAAa,QAAAC,GAAQ,GAC7CE,EAAU,IAAIC,EAAM,WAAW;AACjC,GAEaC,KAAqB,OAAOC,MAA0B;AACjE,QAAM,EAAE,oBAAAC,EAAA,IAAuBC,EAAIC,CAAK;AACxC,MAAI;AACF,IAAAP,EAAc,IAAI,EAAE,YAAY,8BAAA,CAA+B,GAC/DC,EAAU,IAAIC,EAAM,MAAM,GAC1B,MAAMG,EAAmBD,CAAI,GAC7B,MAAMI,EAAA,GAENR,EAAc,IAAI,EAAE,UAAU,gCAAgC,SAAS,IAAO,GAC9EC,EAAU,IAAIC,EAAM,cAAc;AAAA,EACpC,SAASO,GAAK;AACZ,IAAAT,EAAc,IAAI,EAAE,cAAcS,EAAI,SAAS,GAC/CR,EAAU,IAAIC,EAAM,KAAK;AAAA,EAC3B;AACF,GAEaQ,KAAsB,OAAON,MAA2B;AACnE,QAAMO,IAAW,MAAMC,EAAmBR,EAAK,WAAWA,EAAK,OAAO,GAChE,EAAE,qBAAAS,EAAA,IAAwBP,EAAIC,CAAK;AACzC,MAAI;AACF,IAAAP,EAAc,IAAI,EAAE,YAAY,sBAAsBW,GAAU,QAAQP,EAAK,SAAS,EAAE,GAAA,CAAI,GAC5FH,EAAU,IAAIC,EAAM,MAAM,GAC1B,MAAMW,EAAoBT,CAAI,GAC9B,MAAMI,EAAA,GAENR,EAAc,IAAI;AAAA,MAChB,UAAU,iCAAiCW,GAAU,QAAQP,EAAK,SAAS,EAAE;AAAA,MAC7E,YAAYO,GAAU;AAAA,MACtB,SAAS;AAAA,IAAA,CACV,GACDV,EAAU,IAAIC,EAAM,cAAc;AAAA,EACpC,SAASO,GAAK;AACZ,YAAQ,IAAIA,CAAG,GACfT,EAAc,IAAI,EAAE,cAAcS,EAAI,SAAS,GAC/CR,EAAU,IAAIC,EAAM,KAAK;AAAA,EAC3B;AACF,GAEaY,KAAc,CAAC;AAAA,EAC1B,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,kBAAAC;AACF,MAIM;AACJ,EAAAjB,EAAc,IAAI;AAAA,IAChB,GAAIiB,IACA;AAAA,MACA,UAAU;AAAA,QACR,QAAQ;AAAA,UACN,UAAU;AAAA,QAAA;AAAA,MACZ;AAAA,IACF,IAEA,CAAA;AAAA,IACJ,UAAUF;AAAA,IACV,QAAAC;AAAA,EAAA,CACD,GACDf,EAAU,IAAIC,EAAM,OAAO;AAC7B,GAEagB,KAA8B,OAAO,EAAE,SAAAC,GAAS,WAAAC,QAAwD;AACnH,QAAM,EAAE,sBAAAC,EAAA,IAAyBf,EAAIgB,CAAE;AACvC,MAAI;AACF,IAAAtB,EAAc,IAAI,EAAE,YAAY,4BAA4B,gBAAgB,CAAA,GAAI,GAChFC,EAAU,IAAIC,EAAM,MAAM,GAEtBmB,KAAsB,MAAMA,EAAqBF,GAASC,CAAS,GAEvEpB,EAAc,IAAI,EAAE,UAAU,kDAAkD,aAAa,IAAI,SAAS,IAAO,GACjHC,EAAU,IAAIC,EAAM,cAAc;AAAA,EACpC,SAASO,GAAK;AACZ,IAAAT,EAAc,IAAI,EAAE,aAAaS,EAAI,SAAS,OAAO,sBAAsB,GAC3ER,EAAU,IAAIC,EAAM,KAAK;AAAA,EAC3B;AACF;kBC1FA;;;AAAiB,MAAAqB,IAAA,QAAA,KAAA,aAAA,SAAAC,GAAAC,GAAAC,GAAAC,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;UAmBX,OAAAC,EAAgB,IAAAtB,EAAAgB,CAAA;MAChBO,GAEEnC,MAAmG,EAAE;QAEzGoC,KAAgBC,MAAER,EAAA,QAAA,CAAAQ,CAAA,GAAA,QAAA,WAAA,EAAA,SAAAC,GAAA,KAAAC,GAAA,UAAAC,EAAA,GAAA;cAChB,MAAK,GACLA,GAAK;AAAA,MACH,KAAAC;;AAEA,cAAAC,IAAA,KAAe,MAAEJ,CAAW,KAC5B,SAAAK,EAAA,IAAA,MAAAC,GAAAL,CAAA;AACF,QAAApC,GAAA;AAAA,UAAA,aAAAwC;AAAA,UAAA,QAAAD,GAAA;AAAA;;MAEE;AAAA,MACA,KAAAD,EAAA,iBAAA;AACF,QAAArB,GAAA,KAAA,MAAAkB,CAAA,CAAA;;;MAGE,KAAAG,EAAA,eAAA;AACF,cAAAhC,GAAA,KAAA,MAAA6B,CAAA,CAAA;;;MAGE,KAAAG,EAAA,gBAAA;AACF,cAAAzB,GAAA,KAAA,MAAAsB,CAAA,CAAA;;;MAGE,KAAAG,EAAA,wBAAA;AACF,cAAAjB,GAAA,KAAA,MAAAc,CAAA,CAAA;;MAEE;AAAA;AAEF,QAAAJ,EAAA,GACF3B,EAAA,IAAA,IAAA;AAAA;;AAMA,EAAAsC,EAAK,MAAAhB,EAAA,QAAA,QAAA,QAAA,aAAA;AACH,UAAA,EAAA,SAAAiB,mBAAe,0BAAA;AACf,IAAAX,IAAA,IAAUW,EAAI,EAAK,QAAA,eAAA,CAAA,GACrBC,EAAEC,GAAA,WAAA,MAAA;AACF,MAAAb,EAAM,MAAQ,GACd5B,EAAA,QAAkB;AAAA,IAClB,CAAA,GACA,MAAA4B,EAAW,KAAO,EAAC,eAAe,GAAO,CAAA,QAC1B,EAAG,GAChBA,EAAI,GAAAW,EAAQ,iBAAsB,KAChC,GAAAA;AAEJ,OADE/B,GAAA,WAAAA,GACF,SAAA,YAAA,KACI,MAAA,qFAAA;AAAA;EAEP,CAAA,CAAA;;;;;;;;;;;;;;"}