@credenza3/passport-evm 0.3.16 → 0.3.17

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 (73) hide show
  1. package/dist/{App-tKHSD4Kn.js → App-CanFU0id.js} +18 -18
  2. package/dist/{App-tKHSD4Kn.js.map → App-CanFU0id.js.map} +1 -1
  3. package/dist/{Button-DCiKyboZ.js → Button-CxIvDvFK.js} +4 -4
  4. package/dist/{Button-DCiKyboZ.js.map → Button-CxIvDvFK.js.map} +1 -1
  5. package/dist/{ButtonBack-l2pouuyt.js → ButtonBack-DSwOaTcC.js} +4 -4
  6. package/dist/{ButtonBack-l2pouuyt.js.map → ButtonBack-DSwOaTcC.js.map} +1 -1
  7. package/dist/{ButtonLink-CUjPS0bz.js → ButtonLink-CCxv4UWh.js} +3 -3
  8. package/dist/{ButtonLink-CUjPS0bz.js.map → ButtonLink-CCxv4UWh.js.map} +1 -1
  9. package/dist/{ConfirmAccount-BRg5PYpD.js → ConfirmAccount-AjJ81eO0.js} +9 -9
  10. package/dist/{ConfirmAccount-BRg5PYpD.js.map → ConfirmAccount-AjJ81eO0.js.map} +1 -1
  11. package/dist/{ContentHeader-CayTg8kM.js → ContentHeader-Ch9zGhC2.js} +3 -3
  12. package/dist/{ContentHeader-CayTg8kM.js.map → ContentHeader-Ch9zGhC2.js.map} +1 -1
  13. package/dist/{Error-Bpaw-9z0.js → Error-B6pgND_C.js} +5 -5
  14. package/dist/{Error-Bpaw-9z0.js.map → Error-B6pgND_C.js.map} +1 -1
  15. package/dist/{Input-C97TgXQB.js → Input-Cgo8a7CN.js} +4 -4
  16. package/dist/{Input-C97TgXQB.js.map → Input-Cgo8a7CN.js.map} +1 -1
  17. package/dist/{Label-Ds2N1teB.js → Label-CeKxLCHz.js} +3 -3
  18. package/dist/{Label-Ds2N1teB.js.map → Label-CeKxLCHz.js.map} +1 -1
  19. package/dist/{Loader-C-zgzLck.js → Loader-CSmxivr0.js} +3 -3
  20. package/dist/{Loader-C-zgzLck.js.map → Loader-CSmxivr0.js.map} +1 -1
  21. package/dist/{Login-C2d4VKkK.js → Login-Cs3-BL_H.js} +9 -9
  22. package/dist/{Login-C2d4VKkK.js.map → Login-Cs3-BL_H.js.map} +1 -1
  23. package/dist/{Logout-DvRWxjDS.js → Logout-CkFfClrM.js} +6 -6
  24. package/dist/{Logout-DvRWxjDS.js.map → Logout-CkFfClrM.js.map} +1 -1
  25. package/dist/{Nav-B97guiir.js → Nav-C_prox_b.js} +216 -217
  26. package/dist/{Nav-B97guiir.js.map → Nav-C_prox_b.js.map} +1 -1
  27. package/dist/{PassportId-C3ZQeGRX.js → PassportId-Bo-HFYek.js} +6 -6
  28. package/dist/{PassportId-C3ZQeGRX.js.map → PassportId-Bo-HFYek.js.map} +1 -1
  29. package/dist/{Payment-5Z6W2S2Z.js → Payment-DmFa9B8g.js} +212 -213
  30. package/dist/Payment-DmFa9B8g.js.map +1 -0
  31. package/dist/{PaymentResult-C81tCa8j.js → PaymentResult-D4RCY13e.js} +4 -4
  32. package/dist/{PaymentResult-C81tCa8j.js.map → PaymentResult-D4RCY13e.js.map} +1 -1
  33. package/dist/{Profile-D7zQzJwn.js → Profile-CX_eMAiA.js} +7 -7
  34. package/dist/{Profile-D7zQzJwn.js.map → Profile-CX_eMAiA.js.map} +1 -1
  35. package/dist/{ProgressVideo-b9Pq9OEy.js → ProgressVideo-CLqVP33y.js} +5 -5
  36. package/dist/{ProgressVideo-b9Pq9OEy.js.map → ProgressVideo-CLqVP33y.js.map} +1 -1
  37. package/dist/{RichAlert-D3-5Qi7t.js → RichAlert-D6u_Mwz4.js} +5 -5
  38. package/dist/{RichAlert-D3-5Qi7t.js.map → RichAlert-D6u_Mwz4.js.map} +1 -1
  39. package/dist/{Scanner-I4xN822J.js → Scanner-BLy2sDRu.js} +6 -6
  40. package/dist/{Scanner-I4xN822J.js.map → Scanner-BLy2sDRu.js.map} +1 -1
  41. package/dist/SendTokens-BIN9i14X.js +360 -0
  42. package/dist/SendTokens-BIN9i14X.js.map +1 -0
  43. package/dist/{Sign-uEMO_pgj.js → Sign-CNg2p87X.js} +6 -6
  44. package/dist/{Sign-uEMO_pgj.js.map → Sign-CNg2p87X.js.map} +1 -1
  45. package/dist/{Stripe.service-Dnkm5UnA.js → Stripe.service-NHf-uI1F.js} +3 -3
  46. package/dist/{Stripe.service-Dnkm5UnA.js.map → Stripe.service-NHf-uI1F.js.map} +1 -1
  47. package/dist/{UpdateProfile-BkzMoTSd.js → UpdateProfile-Em1EcHJp.js} +10 -10
  48. package/dist/{UpdateProfile-BkzMoTSd.js.map → UpdateProfile-Em1EcHJp.js.map} +1 -1
  49. package/dist/{UserInfo-DqEWseCA.js → UserInfo-DkUmsLYp.js} +4 -4
  50. package/dist/{UserInfo-DqEWseCA.js.map → UserInfo-DkUmsLYp.js.map} +1 -1
  51. package/dist/{Wallet-DVDaKNLv.js → Wallet-HGVIOJHc.js} +7 -7
  52. package/dist/{Wallet-DVDaKNLv.js.map → Wallet-HGVIOJHc.js.map} +1 -1
  53. package/dist/{each-CspjR91w.js → each-9VZsbwex.js} +2 -2
  54. package/dist/{each-CspjR91w.js.map → each-9VZsbwex.js.map} +1 -1
  55. package/dist/{html-COPb0vI7.js → html-C0FHk8Xg.js} +3 -3
  56. package/dist/{html-COPb0vI7.js.map → html-C0FHk8Xg.js.map} +1 -1
  57. package/dist/{index-CQrnbnoz.js → index-DNQhfOgj.js} +1858 -1858
  58. package/dist/{index-CQrnbnoz.js.map → index-DNQhfOgj.js.map} +1 -1
  59. package/dist/{index-client-DfEPCtKn.js → index-client-la_93dBE.js} +2 -2
  60. package/dist/{index-client-DfEPCtKn.js.map → index-client-la_93dBE.js.map} +1 -1
  61. package/dist/{input-Dy2lLICW.js → input-BbeLOXf2.js} +2 -2
  62. package/dist/{input-Dy2lLICW.js.map → input-BbeLOXf2.js.map} +1 -1
  63. package/dist/{legacy-Cs2YMqnj.js → legacy-emYZq_hG.js} +2 -2
  64. package/dist/{legacy-Cs2YMqnj.js.map → legacy-emYZq_hG.js.map} +1 -1
  65. package/dist/passport.es.js +1 -1
  66. package/dist/passport.umd.js +73 -73
  67. package/dist/passport.umd.js.map +1 -1
  68. package/package.json +1 -1
  69. package/dist/Payment-5Z6W2S2Z.js.map +0 -1
  70. package/dist/SendTokens-D-GXxLSW.js +0 -365
  71. package/dist/SendTokens-D-GXxLSW.js.map +0 -1
  72. package/dist/strings-B-rKL311.js +0 -5
  73. package/dist/strings-B-rKL311.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@credenza3/passport-evm",
3
- "version": "0.3.16",
3
+ "version": "0.3.17",
4
4
  "type": "module",
5
5
  "description": "Credenza Passport",
6
6
  "types": "dist/types/index.d.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"Payment-5Z6W2S2Z.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/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 isCardDisabled: boolean\n isCredezaValueDisabled: boolean\n }\n \n let { user, title, subtitle, onBackClick, isCardDisabled } = options\n let activeTab = isCardDisabled ? PaymentViews.CREDENZA_BALANCE : PaymentViews.CREDIT_CARD\n\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 </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={isCardDisabled}\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-[15px]\" />\n {#if activeTab === PaymentViews.CREDIT_CARD}\n <slot name=\"card-provider-switch\" />\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,\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\n\nexport const validateTxs = (txs: string[] | null[], message: string) => {\n if (txs.every((item) => item === null)) {\n throw new Error(`All transactions failed. \\n${message}`);\n }\n}\n\nexport const validateOrderItems = (\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 (orders?.every(item => item.status === \"ERROR\")) {\n throw new Error(`All transactions failed.}`);\n }\n return errorMessages;\n};\n","import { get } from 'svelte/store'\nimport { accessTokenStore, fn } from '@packages/stores'\nimport { ReceiptTarget } from '@packages/utils/enums'\nimport { configStore } from '@src/stores/config'\nimport { getClientConfigByClientId } from '@lib/clients'\nimport type { TLicensePaymentData, TMembershipPaymentData, TTokenPaymentData } from './oders.types'\nimport { dispatch, PassportEvents } from '@lib/events/events'\nimport { TransactionTypes } from '@packages/utils/enums'\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 { validateOrderItems, validateTxs } from '@lib/orders'\nimport type { TPaymentReturn } from '@packages/utils/types'\n\n\nexport const requestReceipt = async ({\n hash,\n stripeChargeId,\n title,\n subtitle,\n amount,\n currency,\n}: {\n hash?: string\n stripeChargeId?: string\n title?: string\n subtitle?: string\n amount?: number\n currency?: string\n}) => {\n const { credenza, receiptTarget, clientId } = get(configStore)\n\n const targets = !receiptTarget \n ? [ReceiptTarget.EMAIL]\n : receiptTarget.filter(target => {\n const user = get(userStore);\n if(!user) return;\n return user[target]\n }\n );\n let successCount = 0;\n \n for (const target of targets) {\n const result = await fetch(`${credenza.evmApiUrl}/contracts/receipt`, {\n method: 'POST',\n body: JSON.stringify({\n ...(hash ? { tx: hash } : { charge_id: stripeChargeId }),\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 (res: TPaymentReturn, priceCents: number, purchaseConfig: {\n title: string\n subtitle: string\n tokens: TTokenPaymentData[]\n memberships: TMembershipPaymentData[]\n licenses: TLicensePaymentData[]\n}) => {\n const { toastAlert } = get(fn)\n const config = get(configStore)\n\n const failedOrdersMessage = validateOrderItems(res.items)\n if (!!purchaseConfig.tokens?.length || !!purchaseConfig.memberships?.length) validateTxs(res.chain_txs, failedOrdersMessage)\n \n dispatch(PassportEvents.PAYMENT, {\n type: TransactionTypes.CARD,\n results: { ...res, tokens: purchaseConfig.tokens, memberships: purchaseConfig.memberships, licenses: purchaseConfig.licenses },\n })\n toastAlert('Your payment was successful')\n dispatch(PassportEvents.RECHECK_BALANCE, res.chain_txs)\n\n const user = get(userStore)\n if (user) {\n analytics.track('cp_payment_fiat', {\n $email: user.email,\n $phone: user.phone,\n chain: config.chainId,\n clientId: config.clientId,\n address: await getAddress(),\n location: window.location.href,\n tokens: purchaseConfig?.tokens,\n memberships: purchaseConfig?.memberships,\n licenses: purchaseConfig?.licenses,\n total: priceCents / 100,\n description: (purchaseConfig?.title ?? '') + `(${purchaseConfig?.subtitle ?? ''})`,\n })\n }\n\n await waitVideoEnded()\n\n if (priceCents === 0) pageOptsStore.set({ subtitle: 'Your claim was successful!', receipt: false })\n\n if (failedOrdersMessage) {\n pageOptsStore.set({\n title: 'Done!',\n subtitle: 'Your payment was partly successful',\n orders: res.items,\n })\n }\n pageStore.set(Pages.PAYMENT_RESULT)\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 import { configStore } from '@src/stores/config'\n import { getClientConfigByClientId } from '@lib/clients'\n import { afterPaymentProcess } from '../Payment.service'\n import type { TLicensePaymentData, TMembershipPaymentData, TTokenPaymentData } from '../oders.types'\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: {\n title: string\n subtitle: string\n tokens: TTokenPaymentData[]\n memberships: TMembershipPaymentData[]\n licenses: TLicensePaymentData[]\n }\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\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 res = await processPayment(tokenId)\n await afterPaymentProcess(res, priceCents, purchaseConfig)\n } catch (err) {\n toastAlert(`Payment error: ${err.message || err}`, 'failure')\n pageOptsStore.set({ errorMessage: err.message || err })\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 }}\n/>\n\n{#if stripe && stripeElements}\n <WalletPay {doPayment} {stripe} {stripeElements} {priceCents} bind:isLoading />\n{/if}\n","<script lang=\"ts\">\n import { ethers } from '@credenza3/core-web-evm-ext'\n import { get } from 'svelte/store'\n import { onMount } from 'svelte'\n import { Pages } from '@packages/utils/enums'\n import { clientPublicStore, fn, pageOptsStore, pageStore, userStore } from '@packages/stores'\n import { dispatch, PassportEvents } from '@lib/events/events'\n import { TransactionTypes } from '@packages/utils/enums'\n import { sendContractTx, getTxScanAddress } from '@src/lib/tx/tx'\n import { requestReceipt } from '@pages/payment/Payment.service'\n import { analytics } from '@lib/mixpanel/mixpanel'\n import { waitVideoEnded } from '@components/progress/ProgressVideo.service'\n import { type TEvmContract, type TPaymentItem } from '@packages/utils/types'\n import { getCryptoCurrencySymbol } from '@lib/strings/strings'\n import { CredenzaBalance } from '@packages/ui'\n import { getAddress } from '@src/passport/blockchain'\n import { configStore, providerStore } from '@src/stores'\n import Loader from '@packages/ui/main/shared/Loader.svelte'\n import { abi as license_abi } from '@credenza3/contracts/artifacts/LicenseNftContract.json'\n\n export let totalPriceToken: number\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n export let purchaseConfig: any\n export let isLoading: boolean\n export let isPriceLoading: boolean\n export let pricesByToken: { [key: string]: number }\n\n const { getCREDContract, toastAlert } = get(fn)\n const { chainId, clientId } = get(configStore)\n\n let isBalanceLoading: boolean = false\n let balance: bigint = BigInt(0)\n let formattedBalance: string\n let symbol: string = ''\n let contract: ethers.Contract\n let decimals: number\n let userAddress: string\n let signer: ethers.Signer\n let credContract: {\n address: string\n decimals: number\n contract: ethers.Contract\n }\n\n const afterPayment = async (index: number, result: ethers.TransactionResponse, priceToken: number) => {\n toastAlert(`<a href=\"${getTxScanAddress(result.hash)}\" target=\"_blank\">Purchase TX #${index}</a> was created`)\n dispatch(PassportEvents.PAYMENT, { type: TransactionTypes.ERC20, data: result })\n dispatch(PassportEvents.RECHECK_BALANCE)\n\n await requestReceipt({\n hash: result.hash,\n title: purchaseConfig.title,\n subtitle: purchaseConfig.subtitle,\n currency: 'CRED',\n amount: +ethers.formatUnits(priceToken, decimals),\n })\n dispatch(PassportEvents.RECEIPT, { hash: result.hash })\n }\n\n const processPaymentItem = async (item: TPaymentItem, index: number) => {\n try {\n const { credenzaSellableMinAbi } = await import('@src/lib/abi')\n const credenzaSellableContract = new ethers.Contract(item.contractAddress, credenzaSellableMinAbi, signer)\n const tokenOrTypeId = item.tokenId ? item.tokenId : (item.typeId as string)\n const priceToken = pricesByToken[`${item.contractAddress}/${tokenOrTypeId}`]\n\n const approveTx = await contract.approve.populateTransaction(\n await credenzaSellableContract.getAddress(),\n priceToken,\n )\n\n await sendContractTx(approveTx, contract)\n const buyTx = await credenzaSellableContract.buyWithToken.populateTransaction(\n tokenOrTypeId,\n item.amount || 1,\n userAddress,\n )\n\n const result = await sendContractTx(buyTx, credenzaSellableContract)\n\n await afterPayment(index, result, priceToken)\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 const processLicensePaymentItem = async (item: TPaymentItem, index: number) => {\n if (!item.licenseContractAddress) return\n\n try {\n const licenseContract = new ethers.Contract(item.licenseContractAddress, license_abi, signer)\n const priceToken = pricesByToken[`${item.contractAddress}/${item.contentTokenId}`]\n\n const approveTx = await contract.approve.populateTransaction(\n await licenseContract.getAddress(),\n priceToken,\n )\n\n await sendContractTx(approveTx, contract)\n await new Promise(resolve => setTimeout(resolve, 3000)); // pause for debugging\n\n const buyLicenseWithTokenFunction = licenseContract.interface.getFunction('buyLicenseWithToken', ['uint', 'address', 'uint']);\n if (!buyLicenseWithTokenFunction) throw new Error('buyLicenseWithToken function not found');\n const buyTx =await licenseContract[\n buyLicenseWithTokenFunction.format()\n ].populateTransaction(\n item.contentTokenId,\n userAddress,\n item.licenseType\n )\n\n const result = await sendContractTx(buyTx, licenseContract)\n await afterPayment(index, result, priceToken)\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 const payWithCredenza = async () => {\n try {\n if (BigInt(totalPriceToken) > balance) return\n\n isLoading = true\n const tokensAndMembershipsPaymentPromises = [...(purchaseConfig.tokens || []), ...(purchaseConfig.memberships || [])].map(\n (item, index) => processPaymentItem(item, index + 1),\n )\n\n const licensesPaymentPromises = [...(purchaseConfig.licenses || [])].map(\n (item, index) => processLicensePaymentItem(item, index + 1),\n )\n\n await Promise.all([...tokensAndMembershipsPaymentPromises, ...licensesPaymentPromises])\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 chain: chainId,\n clientId,\n address: userAddress,\n location: window.location.href,\n tokens: purchaseConfig.tokens,\n memberships: purchaseConfig.memberships,\n total: totalPriceToken,\n description: (purchaseConfig?.title ?? '') + `(${purchaseConfig?.subtitle ?? ''})`,\n })\n }\n\n await waitVideoEnded()\n\n if (totalPriceToken === 0) pageOptsStore.set({ subtitle: 'Your claim was successful!', receipt: false })\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 try {\n isBalanceLoading = true\n credContract = (await getCREDContract()) as TEvmContract\n\n const provider = get(providerStore)\n if(!provider) return\n signer = await provider.getSigner()\n contract = credContract.contract\n decimals = credContract.decimals\n ;[userAddress, symbol] = await Promise.all([getAddress(), contract.symbol()])\n balance = await contract.balanceOf(userAddress)\n\n formattedBalance = `${ethers.formatUnits(BigInt(balance) - BigInt(totalPriceToken), decimals)} ${getCryptoCurrencySymbol(symbol, 'cred')}`\n } catch (err) {\n console.log(err)\n } finally {\n isBalanceLoading = false\n }\n })\n</script>\n\n{#if isBalanceLoading}\n <div class=\"crtw-w-full crtw-justify-items-center crtw-my-5\">\n <Loader />\n </div>\n{:else}\n <CredenzaBalance\n options={{\n formattedBalance,\n balance: Number((+ethers.formatUnits(BigInt(balance), decimals)).toFixed(2)),\n credAlias: $clientPublicStore?.ui_settings.cred_alias,\n onPay: payWithCredenza,\n onGetCred: () => pageStore.set(Pages.WALLET),\n totalToPay: (+ethers.formatUnits(totalPriceToken, decimals)).toFixed(2),\n isLoading,\n isPaymentDisabled: !Number(balance) || BigInt(totalPriceToken) > balance || isPriceLoading,\n }}\n />\n{/if}\n","<script lang=\"ts\">\n import { Pages } from '@packages/utils/enums'\n import { onDestroy } from 'svelte'\n import { get } from 'svelte/store'\n import { ethers } from '@credenza3/core-web-evm-ext'\n\n import { pageOptsStore, userStore, pageStore, fn } from '@packages/stores'\n import { DEFAULT_TOKEN_ID } from '@packages/utils/constants'\n import { dispatch, PassportEvents } from '@lib/events/events'\n import type { TPaymentItem } from '@packages/utils/types'\n import { Payment } from '@packages/ui'\n import Stripe from './stripe/Stripe.svelte'\n import CredenzaBalance from './credenza-balance/CredenzaBalance.svelte'\n import { configStore, providerStore, contractsStore } from '@src/stores'\n import { abi as content_abi } from '@credenza3/contracts/artifacts/ContentNftContract.json'\n\n const { close } = get(fn)\n const chainId = get(configStore).chainId\n\n $: if ($configStore.chainId !== chainId) close()\n\n let totalSumCents: number = 0\n let totalSumToken: number = 0\n let isPriceLoading: boolean = false\n let isLoading: boolean = false\n\n let pricesByToken: { [key: string]: number } = {}\n\n const getTokenPrice = async (contractAddress: string, tokenId: number, licenseType?: string): Promise<[number, number]> => {\n let priceCents = 0\n let priceToken = 0\n if (licenseType) {\n const contract = new ethers.Contract(contractAddress, content_abi, $providerStore)\n priceCents = await contract.getLicensePriceFiat(String(tokenId), licenseType).then((result) => Number(result))\n priceToken = await contract.getLicensePriceToken(String(tokenId), licenseType).then((result) => Number(result))\n return [priceCents, priceToken]\n }\n \n const { credenzaSellableMinAbi } = await import('@src/lib/abi')\n const sellableContract = new ethers.Contract(contractAddress, credenzaSellableMinAbi, $providerStore)\n priceCents = await sellableContract.getPriceFiat(tokenId).then((result) => Number(result))\n priceToken = 0\n\n if (priceCents === 0) {\n ;[priceCents, priceToken] = await Promise.all([\n sellableContract.getPriceFiat(DEFAULT_TOKEN_ID).then((result) => Number(result)),\n sellableContract.getPriceToken(DEFAULT_TOKEN_ID).then((result) => Number(result)),\n ])\n } else {\n priceToken = await sellableContract.getPriceToken(tokenId).then((result) => Number(result))\n }\n\n return [priceCents, priceToken]\n }\n\n const calculateTotalPrice = async (items: TPaymentItem[]): Promise<void> => {\n try {\n isPriceLoading = true\n for (const token of items) {\n if (token.contractAddress === $contractsStore.erc20Cred.address) {\n totalSumCents += token.amount * 100\n } else {\n \n const tokenId = token.tokenId || (token.typeId as string) || (token.contentTokenId as string) || DEFAULT_TOKEN_ID\n\n let [priceCents, priceToken] = await getTokenPrice(token.contractAddress, +tokenId, token.licenseType)\n\n if (token?.amount && token?.amount !== 0) {\n priceCents *= token.amount\n priceToken *= token.amount\n }\n\n totalSumCents += priceCents\n totalSumToken += priceToken\n\n pricesByToken[`${token.contractAddress}/${tokenId}`] = priceToken\n console.log(pricesByToken, totalSumToken)\n }\n }\n } catch (err) {\n dispatch(PassportEvents.ERROR, err)\n } finally {\n isPriceLoading = false\n }\n }\n\n const unsub = pageOptsStore.subscribe(async (store) => {\n if (!store?.tokens?.length && !store?.memberships?.length && !store?.licenses?.length) return\n\n await calculateTotalPrice([...(store?.tokens || []), ...(store?.memberships || []), ...(store?.licenses || [])])\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 isCardDisabled: $pageOptsStore.payments?.card?.disabled,\n isCredezaValueDisabled: !totalSumCents || $pageOptsStore.payments?.credenzaStoredValue?.disabled\n }}\n>\n <div slot=\"credit-card\">\n <Stripe priceCents={totalSumCents} {isPriceLoading} purchaseConfig={$pageOptsStore} bind:isLoading />\n </div>\n <div slot=\"cred-balance\">\n <CredenzaBalance\n {pricesByToken}\n totalPriceToken={totalSumToken}\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","user","title","subtitle","onBackClick","isCardDisabled","activeTab","PaymentViews","isCredezaValueDisabled","isPaymentDisabled","totalToPay","isCardFocused","onPay","currencySymbol","credAlias","onGetCred","formattedBalance","balance","$.get","__awaiter","thisArg","_arguments","P","generator","onMount","stripe","priceCents","paymentRequest","walletPayElement","stripeElements","event","doPayment","err","dispatch","PassportEvents","stripeStyles","loadScript","src","resolve","reject","script","getCompmletedOrderDetails","apiUrl","orderId","maxRetries","attempts","res","get","accessTokenStore","validateTxs","txs","message","item","validateOrderItems","orders","errorMessages","requestReceipt","hash","stripeChargeId","amount","currency","credenza","receiptTarget","clientId","configStore","targets","target","userStore","ReceiptTarget","successCount","result","getClientConfigByClientId","afterPaymentProcess","purchaseConfig","toastAlert","fn","config","failedOrdersMessage","TransactionTypes","analytics","getAddress","waitVideoEnded","pageOptsStore","pageStore","Pages","isPriceLoading","Stripe","$.mutable_source","cardElement","clientName","$.set","_a","isButtonActive","handleSubmit","tokenId","processPayment","pricesByToken","isBalanceLoading","symbol","contract","decimals","userAddress","signer","credContract","afterPayment","index","priceToken","getTxScanAddress","ethers","processPaymentItem","credenzaSellableMinAbi","credenzaSellableContract","tokenOrTypeId","approveTx","sendContractTx","buyTx","processLicensePaymentItem","licenseContract","license_abi","buyLicenseWithTokenFunction","payWithCredenza","totalPriceToken","tokensAndMembershipsPaymentPromises","licensesPaymentPromises","chainId","_b","getCREDContract","provider","providerStore","close","totalSumCents","totalSumToken","getTokenPrice","contractAddress","licenseType","content_abi","$providerStore","sellableContract","DEFAULT_TOKEN_ID","calculateTotalPrice","items","token","$contractsStore","unsub","store","_c","onDestroy","$configStore","$.await","node_1","module","$pageOptsStore"],"mappings":"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"}
@@ -1,365 +0,0 @@
1
- import { c as $e, p as ue, h as Be, f as ce, i as se, k as Me, r as me, s as Ve, e as je, b as ee, d as Te, u as Re, t as Fe, o as fe, n as ze } from "./legacy-Cs2YMqnj.js";
2
- import { z as Ee, v as g, I as n, m as s, A as y, J as e, w as Ie, x as Xe, Z as J, E as m, B as _, C as b, D as pe, G as oe, y as De, u as ge, N as ie, M as Se, Q as qe, a3 as G, a1 as Ce, R as Ge, a2 as Je, T as he, V as Ae, a5 as Ke, bg as Qe, O as xe, P as we, bh as We, bi as Ye } from "./index-CQrnbnoz.js";
3
- import "./scanner.es-DK9KxX60.js";
4
- import { C as Ze } from "./ContentHeader-CayTg8kM.js";
5
- import { B as et } from "./ButtonBack-l2pouuyt.js";
6
- import { B as _e } from "./Button-DCiKyboZ.js";
7
- import { I as ke } from "./Input-C97TgXQB.js";
8
- import { S as tt } from "./scanner-Bm3Pvpfs.js";
9
- import { g as be } from "./strings-B-rKL311.js";
10
- var nt = ce('<div>ChainId: <span class="crtw-font-bold"> </span></div>'), rt = ce('<label class="crtw-text-[10px] crtw-text-warningTextColor cpui-send-tokens-validation-message" for="recipientAddress">Provided address is not valid.</label>'), at = ce('<div class="crtw-ml-2.5 crtw-w-16 crtw-min-w-16"><!></div>'), st = ce('<!> <div class="crtw-w-full crtw-p-0 crtw-relative"><div id="cpuiCredScanner"></div> <!> <div>Your balance: <span class="crtw-font-bold"><!> </span></div> <div class="crtw-mb-2.5 crtw-flex crtw-items-start crtw-justify-between crtw-w-full"><div class="crtw-flex crtw-flex-col crtw-w-full"><!> <!></div> <div class="crtw-ml-2.5 crtw-cursor-pointer"><img width="53px" alt="" class="crtw-h-[53px]"/></div></div> <div class="crtw-mb-2.5 crtw-flex crtw-items-start crtw-justify-between crtw-w-full"><!> <div class="crtw-ml-2.5 crtw-w-16 crtw-min-w-16"><!></div> <!></div> <!></div> <div class="crtw-mt-0.5 crtw-mb-3 crtw-w-full"><!></div>', 1);
11
- function Le(K, E) {
12
- if (new.target) return $e({ component: Le, ...K });
13
- Ee(E, !1);
14
- const I = s(), te = s(), U = s(), Q = s(), H = s(), h = s(), N = s(), M = s(), j = s(), F = s();
15
- let V = ue(E, "recipientAddress", 12), D = ue(E, "amount", 12), a = ue(E, "options", 12), {
16
- onChangeCurrency: A,
17
- onSetMaxAmount: l,
18
- onBackClicked: f,
19
- onSendTokens: z,
20
- title: w,
21
- chainId: x,
22
- onScannerClicked: X,
23
- credAlias: T,
24
- isNativeCurrecyTransferAllowed: k = !0
25
- } = a();
26
- const L = (t) => Math.floor(t * 100) / 100;
27
- g(() => y(a()), () => {
28
- n(I, a().balance);
29
- }), g(() => y(a()), () => {
30
- n(te, a().isLoading);
31
- }), g(() => y(a()), () => {
32
- n(U, a().isSubmitDisabled);
33
- }), g(() => y(a()), () => {
34
- n(Q, a().isRecipientAddressValid);
35
- }), g(() => y(a()), () => {
36
- n(H, a().isScannerHidden);
37
- }), g(() => y(a()), () => {
38
- n(h, a().activeCurrency);
39
- }), g(() => y(a()), () => {
40
- n(N, a().symbol);
41
- }), g(() => y(a()), () => {
42
- n(M, a().nativeSymbol);
43
- }), g(() => y(a()), () => {
44
- n(j, a().nativeBalance);
45
- }), g(() => e(h), () => {
46
- n(F, be(e(h), T));
47
- }), Ie(), Be();
48
- var R = st(), P = Xe(R);
49
- {
50
- let t = J(() => e(H) ? "" : "Scan Passport Id");
51
- Ze(P, {
52
- get text() {
53
- return w;
54
- },
55
- get description() {
56
- return e(t);
57
- }
58
- });
59
- }
60
- var q = m(P, 2), $ = _(q);
61
- let ne;
62
- var re = m($, 2);
63
- {
64
- var de = (t) => {
65
- var o = nt(), O = m(_(o)), ve = _(O, !0);
66
- b(O), b(o), pe(() => me(ve, x)), ee(t, o);
67
- };
68
- se(re, (t) => {
69
- x && t(de);
70
- });
71
- }
72
- var W = m(re, 2), i = m(_(W)), r = _(i);
73
- {
74
- var c = (t) => {
75
- var o = Fe();
76
- pe((O) => me(o, `${O ?? ""} ${e(M) ?? ""} /`), [
77
- () => (e(j), oe(() => L(+e(j))))
78
- ]), ee(t, o);
79
- };
80
- se(r, (t) => {
81
- k && t(c);
82
- });
83
- }
84
- var v = m(r);
85
- b(i), b(W);
86
- var S = m(W, 2), p = _(S), u = _(p);
87
- ke(u, {
88
- name: "recipientAddress",
89
- type: "text",
90
- placeholder: "Address 0x...",
91
- get value() {
92
- return V();
93
- },
94
- set value(t) {
95
- V(t);
96
- },
97
- $$legacy: !0
98
- });
99
- var Y = m(u, 2);
100
- {
101
- var Z = (t) => {
102
- var o = rt();
103
- ee(t, o);
104
- };
105
- se(Y, (t) => {
106
- V() && !e(Q) && t(Z);
107
- });
108
- }
109
- b(p);
110
- var B = m(p, 2), d = _(B);
111
- b(B), b(S);
112
- var C = m(S, 2), ae = _(C);
113
- {
114
- let t = J(() => `${e(F)} amount`);
115
- ke(ae, {
116
- type: "number",
117
- min: "0",
118
- step: "0.001",
119
- get placeholder() {
120
- return e(t);
121
- },
122
- get value() {
123
- return D();
124
- },
125
- set value(o) {
126
- D(o);
127
- },
128
- $$legacy: !0
129
- });
130
- }
131
- var le = m(ae, 2), Pe = _(le);
132
- {
133
- let t = J(() => +e(I) <= 0);
134
- _e(Pe, {
135
- get onClick() {
136
- return l;
137
- },
138
- text: "MAX",
139
- get disabled() {
140
- return e(t);
141
- }
142
- });
143
- }
144
- b(le);
145
- var Oe = m(le, 2);
146
- {
147
- var Ue = (t) => {
148
- var o = at(), O = _(o);
149
- {
150
- let ve = J(() => !e(h));
151
- _e(O, {
152
- get onClick() {
153
- return A;
154
- },
155
- get text() {
156
- return e(F);
157
- },
158
- get disabled() {
159
- return e(ve);
160
- }
161
- });
162
- }
163
- b(o), ee(t, o);
164
- };
165
- se(Oe, (t) => {
166
- k && t(Ue);
167
- });
168
- }
169
- b(C);
170
- var He = m(C, 2);
171
- {
172
- let t = J(() => `Send ${D() || ""} ${e(F)}`);
173
- _e(He, {
174
- get onClick() {
175
- return z;
176
- },
177
- get text() {
178
- return e(t);
179
- },
180
- get isLoading() {
181
- return e(te);
182
- },
183
- get disabled() {
184
- return e(U);
185
- }
186
- });
187
- }
188
- b(q);
189
- var ye = m(q, 2), Ne = _(ye);
190
- return et(Ne, {
191
- get onClick() {
192
- return f;
193
- }
194
- }), b(ye), pe(
195
- (t, o, O) => {
196
- ne = Me($, 1, "crtw-absolute crtw-top-0 crtw-bottom-0 crtw-left-0 crtw-right-0 crtw-z-10 crtw-border crtw-border-gray-300 crtw-rounded-lg crtw-backdrop-blur-lg", null, ne, t), me(v, ` ${o ?? ""} ${O ?? ""}`), Ve(d, "src", tt);
197
- },
198
- [
199
- () => ({
200
- "crtw-hidden": e(H),
201
- "crtw-z-[-1]": e(H)
202
- }),
203
- () => (e(I), oe(() => L(+e(I)))),
204
- () => (y(be), e(N), oe(() => be(e(N), T)))
205
- ]
206
- ), je("click", d, X), ee(K, R), De({
207
- get recipientAddress() {
208
- return V();
209
- },
210
- set recipientAddress(t) {
211
- V(t), ge();
212
- },
213
- get amount() {
214
- return D();
215
- },
216
- set amount(t) {
217
- D(t), ge();
218
- },
219
- get options() {
220
- return a();
221
- },
222
- set options(t) {
223
- a(t), ge();
224
- },
225
- $set: Re,
226
- $on: (t, o) => Te(E, t, o)
227
- });
228
- }
229
- function it(K, E) {
230
- if (new.target) return $e({ component: it, ...K });
231
- Ee(E, !1);
232
- const [I, te] = ze(), U = () => fe(Se, "$configStore", I), Q = () => fe(Ce, "$providerStore", I), H = () => fe(Ke, "$clientPublicStore", I), h = s(), N = s();
233
- var M = this && this.__awaiter || function(i, r, c, v) {
234
- function S(p) {
235
- return p instanceof c ? p : new c(function(u) {
236
- u(p);
237
- });
238
- }
239
- return new (c || (c = Promise))(function(p, u) {
240
- function Y(d) {
241
- try {
242
- B(v.next(d));
243
- } catch (C) {
244
- u(C);
245
- }
246
- }
247
- function Z(d) {
248
- try {
249
- B(v.throw(d));
250
- } catch (C) {
251
- u(C);
252
- }
253
- }
254
- function B(d) {
255
- d.done ? p(d.value) : S(d.value).then(Y, Z);
256
- }
257
- B((v = v.apply(i, r || [])).next());
258
- });
259
- };
260
- const j = ie(Se), { sendTokens: F, getCREDContract: V, toastAlert: D } = ie(qe);
261
- let a = "", A = s(""), l = s(), f = s(""), z = 18, w = s("-"), x = s(""), X = 18, T = s("-"), k = s(""), L = s(!0), R = s(!1), P, q, $;
262
- const ne = () => M(void 0, void 0, void 0, function* () {
263
- const { Scanner: i } = yield import("./scanner.es-DK9KxX60.js");
264
- $ = new i({ target: "#cpuiCredScanner" }), We(we.UI_CLOSED, $.close), yield $.scan(), $.on(i.events.CAPTURE, (r) => M(void 0, [r], void 0, function* ({ sub: c }) {
265
- const { address: v } = yield Ye(c);
266
- n(A, v), $.close();
267
- })), $.on(i.events.CANCEL, () => n(L, !0)), $.on(i.events.ERROR, (r) => {
268
- (r?.message || r).includes("Permission") && alert("In order to scan please allow the current page to access your camera and try again."), n(L, !0);
269
- }), n(L, !1);
270
- }), re = () => M(void 0, void 0, void 0, function* () {
271
- const i = e(f) === e(w);
272
- n(R, !0);
273
- try {
274
- const r = G.parseUnits(String(e(l)), i ? z : X), c = yield F({
275
- address: e(A),
276
- amount: r,
277
- instance: i ? P : void 0
278
- });
279
- D(`<a href="${Qe(c.hash)}" target="_blank">Send TX</a> was created`), n(A, ""), n(l, void 0);
280
- const [v, S] = yield Promise.all([
281
- P.balanceOf(a),
282
- q.provider.getBalance(a)
283
- ]);
284
- n(x, G.formatUnits(v, z)), n(k, parseFloat(G.formatUnits(S, X)).toFixed(4)), xe(we.RECHECK_BALANCE, [c.hash]);
285
- } catch (r) {
286
- D(r?.message || r || "An error occurred while sending tokens", "failure"), xe(we.ERROR, { error: r });
287
- }
288
- n(R, !1);
289
- }), de = () => M(void 0, void 0, void 0, function* () {
290
- var i, r, c, v, S, p;
291
- const u = ie(Ge);
292
- n(A, u?.to || ""), n(l, u?.amount || void 0);
293
- const { decimals: Y, contract: Z } = yield V();
294
- z = Y, P = Z;
295
- const B = ie(Ce);
296
- if (!B) return;
297
- q = yield B.getSigner(), a = yield Je();
298
- const d = yield Promise.all([
299
- P.symbol(),
300
- P.balanceOf(a),
301
- B.getBalance(a),
302
- fetch("https://chainid.network/chains.json").then((C) => C.json()).then((C) => C.find((ae) => String(ae.chainId) === j.chainId))
303
- ]);
304
- n(w, d[0]), n(x, G.formatUnits(d[1], z)), X = (c = (r = (i = d[3]) === null || i === void 0 ? void 0 : i.nativeCurrency) === null || r === void 0 ? void 0 : r.decimals) !== null && c !== void 0 ? c : 18, n(k, parseFloat(G.formatUnits(d[2], X)).toFixed(4)), n(T, (p = (S = (v = d[3]) === null || v === void 0 ? void 0 : v.nativeCurrency) === null || S === void 0 ? void 0 : S.symbol) !== null && p !== void 0 ? p : "ETH"), n(f, e(w));
305
- });
306
- g(() => (U(), Q()), () => {
307
- U().chainId && Q() && de();
308
- }), g(() => e(A), () => {
309
- n(h, !!G.isAddress(e(A)));
310
- }), g(
311
- () => (e(R), e(l), e(h), e(f), e(w), e(x), e(T), e(k)),
312
- () => {
313
- n(N, e(R) || !e(l) || !e(h) || e(f) === e(w) && e(l) > +e(x) || e(f) === e(T) && e(l) > +e(k));
314
- }
315
- ), Ie(), Be();
316
- {
317
- let i = J(() => (U(), e(L), e(x), e(h), y(he), y(Ae), e(f), e(w), e(T), e(l), e(k), e(R), e(N), H(), oe(() => ({
318
- title: "Send stored value",
319
- isNativeCurrecyTransferAllowed: U().transferTokens?.nativeCurrency !== !1,
320
- isScannerHidden: e(L),
321
- balance: e(x),
322
- chainId: j.chainId,
323
- isRecipientAddressValid: e(h),
324
- onScannerClicked: ne,
325
- onSendTokens: re,
326
- onBackClicked: () => he.set(Ae.WALLET),
327
- onChangeCurrency: () => e(f) === e(w) ? n(f, e(T)) : n(f, e(w)),
328
- onSetMaxAmount: () => e(f) === e(w) ? n(l, +e(x)) : n(l, +e(k)),
329
- isLoading: e(R),
330
- isSubmitDisabled: e(N),
331
- credAlias: H()?.ui_settings.cred_alias,
332
- activeCurrency: e(f),
333
- symbol: e(w),
334
- nativeSymbol: e(T),
335
- nativeBalance: e(k)
336
- }))));
337
- Le(K, {
338
- get options() {
339
- return e(i);
340
- },
341
- get recipientAddress() {
342
- return e(A);
343
- },
344
- set recipientAddress(r) {
345
- n(A, r);
346
- },
347
- get amount() {
348
- return e(l);
349
- },
350
- set amount(r) {
351
- n(l, r);
352
- },
353
- $$legacy: !0
354
- });
355
- }
356
- var W = De({
357
- $set: Re,
358
- $on: (i, r) => Te(E, i, r)
359
- });
360
- return te(), W;
361
- }
362
- export {
363
- it as default
364
- };
365
- //# sourceMappingURL=SendTokens-D-GXxLSW.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SendTokens-D-GXxLSW.js","sources":["../../ui/main/send-tokens/SendTokens.svelte","../src/app/pages/send-tokens/SendTokens.svelte"],"sourcesContent":["<script lang=\"ts\">\n import ContentHeader from \"../shared/ContentHeader.svelte\";\n import ButtonBack from \"../shared/inputs/button-back/ButtonBack.svelte\";\n import Button from \"../shared/inputs/button/Button.svelte\";\n import Input from \"../shared/inputs/input/Input.svelte\";\n import ScanIcon from \"../../images/scanner.svg\";\n\n import { getCryptoCurrencySymbol } from \"../../../utils/lib/strings/strings\";\n\n export let recipientAddress: string;\n export let amount: number | undefined;\n\n export let options: {\n title: string;\n isScannerHidden: boolean;\n balance: string;\n chainId?: string;\n isRecipientAddressValid: boolean;\n onScannerClicked: () => void;\n onSendTokens: () => void;\n onBackClicked: () => void;\n onChangeCurrency: () => void;\n onSetMaxAmount: () => void;\n isLoading: boolean;\n isSubmitDisabled: boolean;\n credAlias: string;\n activeCurrency: string;\n symbol: string;\n nativeSymbol: string;\n nativeBalance: string;\n isNativeCurrecyTransferAllowed?: boolean;\n };\n\n let {\n onChangeCurrency,\n onSetMaxAmount,\n onBackClicked,\n onSendTokens,\n title,\n chainId,\n onScannerClicked,\n credAlias,\n isNativeCurrecyTransferAllowed = true\n } = options;\n\n $: balance = options.balance;\n $: isLoading = options.isLoading;\n $: isSubmitDisabled = options.isSubmitDisabled;\n $: isRecipientAddressValid = options.isRecipientAddressValid;\n $: isScannerHidden = options.isScannerHidden;\n $: activeCurrency = options.activeCurrency;\n $: symbol = options.symbol;\n $: nativeSymbol = options.nativeSymbol;\n $: nativeBalance = options.nativeBalance;\n\n $: activeCurrencySymbol = getCryptoCurrencySymbol(activeCurrency, credAlias);\n const round = (num: number) => Math.floor(num * 100) / 100\n</script>\n\n<ContentHeader\n text={title}\n description={isScannerHidden\n ? ``\n : \"Scan Passport Id\"}\n/>\n<div class=\"crtw-w-full crtw-p-0 crtw-relative\">\n <div\n id=\"cpuiCredScanner\"\n class=\"crtw-absolute crtw-top-0 crtw-bottom-0 crtw-left-0 crtw-right-0 crtw-z-10 crtw-border crtw-border-gray-300 crtw-rounded-lg crtw-backdrop-blur-lg\"\n class:crtw-hidden={isScannerHidden}\n class:crtw-z-[-1]={isScannerHidden}\n ></div>\n {#if chainId}\n <div>ChainId: <span class=\"crtw-font-bold\">{chainId}</span></div>\n {/if}\n <div>\n Your balance: \n <span class=\"crtw-font-bold\">\n {#if isNativeCurrecyTransferAllowed}\n {round(+nativeBalance)} {nativeSymbol} / \n {/if}\n\n {round(+balance)} {getCryptoCurrencySymbol(symbol, credAlias)}\n </span>\n </div>\n <div\n class=\"crtw-mb-2.5 crtw-flex crtw-items-start crtw-justify-between crtw-w-full\"\n >\n <div class=\"crtw-flex crtw-flex-col crtw-w-full\">\n <Input\n name=\"recipientAddress\"\n type=\"text\"\n placeholder=\"Address 0x...\"\n bind:value={recipientAddress}\n />\n {#if recipientAddress && !isRecipientAddressValid}\n <label\n class=\"crtw-text-[10px] crtw-text-warningTextColor cpui-send-tokens-validation-message\"\n for=\"recipientAddress\">Provided address is not valid.</label\n >\n {/if}\n </div>\n\n <div class=\"crtw-ml-2.5 crtw-cursor-pointer\">\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\n <img\n src={ScanIcon}\n on:click={onScannerClicked}\n width=\"53px\"\n alt=\"\"\n class=\"crtw-h-[53px]\"\n />\n </div>\n </div>\n\n <div\n class=\"crtw-mb-2.5 crtw-flex crtw-items-start crtw-justify-between crtw-w-full\"\n >\n <Input\n type=\"number\"\n min=\"0\"\n step=\"0.001\"\n placeholder={`${activeCurrencySymbol} amount`}\n bind:value={amount}\n />\n <div class=\"crtw-ml-2.5 crtw-w-16 crtw-min-w-16\">\n <Button onClick={onSetMaxAmount} text={`MAX`} disabled={+balance <= 0} />\n </div>\n\n {#if isNativeCurrecyTransferAllowed}\n <div class=\"crtw-ml-2.5 crtw-w-16 crtw-min-w-16\">\n <Button\n onClick={onChangeCurrency}\n text={activeCurrencySymbol}\n disabled={!activeCurrency}\n />\n </div>\n {/if}\n </div>\n <Button\n onClick={onSendTokens}\n text={`Send ${amount || \"\"} ${activeCurrencySymbol}`}\n {isLoading}\n disabled={isSubmitDisabled}\n />\n</div>\n<div class=\"crtw-mt-0.5 crtw-mb-3 crtw-w-full\">\n <ButtonBack onClick={onBackClicked} />\n</div>\n","<script lang=\"ts\">\n import { ethers } from '@credenza3/core-web-evm-ext'\n import { get } from 'svelte/store'\n import { type Scanner } from '@credenza3/scanner-lib'\n\n import { clientPublicStore, fn, pageOptsStore, pageStore } from '@packages/stores'\n import { dispatch, once, PassportEvents } from '@lib/events/events'\n import { Pages } from '@packages/utils/enums'\n import { getTxScanAddress } from '@src/lib/tx/tx'\n import { SendTokens } from '@packages/ui'\n import { getAddress } from '@src/passport/blockchain'\n import { configStore } from '@src/stores/config'\n import type { TEvmContract } from '@packages/utils/types'\n import { providerStore } from '@src/stores'\n import { getUserAddressBySub } from '@src/Passport.service'\n\n const config = get(configStore)\n const { sendTokens, getCREDContract, toastAlert } = get(fn)\n\n let userAddress = ''\n let recipientAddress = ''\n let amount: number | undefined\n\n let activeCurrency = ''\n\n let decimals = 18\n let symbol = '-'\n let balance = ''\n\n let nativeDecimals = 18\n let nativeSymbol = '-'\n let nativeBalance = ''\n\n let isScannerHidden = true\n let isLoading = false\n\n let contract: ethers.Contract\n let signer: ethers.JsonRpcSigner\n let scanner: Scanner\n\n const onScannerClicked = async () => {\n const { Scanner } = await import('@credenza3/scanner-lib')\n scanner = new Scanner({ target: '#cpuiCredScanner' })\n once(PassportEvents.UI_CLOSED, scanner.close)\n await scanner.scan()\n scanner.on(Scanner.events.CAPTURE, async ({ sub }: { sub: string }) => {\n const { address } = await getUserAddressBySub(sub)\n recipientAddress = address\n scanner.close()\n })\n scanner.on(Scanner.events.CANCEL, () => (isScannerHidden = true))\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 isScannerHidden = true\n })\n isScannerHidden = false\n }\n\n const sendTokensToRecipient = async () => {\n const isTCRED = activeCurrency === symbol\n isLoading = true\n try {\n const weiBn = ethers.parseUnits(String(amount), isTCRED ? decimals : nativeDecimals)\n const result = (await sendTokens({\n address: recipientAddress,\n amount: weiBn,\n instance: isTCRED ? contract : undefined,\n })) as { hash: string; wait: () => Promise<void> }\n toastAlert(\n `<a href=\"${getTxScanAddress(result.hash)}\" target=\"_blank\">Send TX</a> was created`,\n )\n recipientAddress = ''\n amount = undefined\n\n const [weiBalance, weiNativeBalance] = await Promise.all([\n contract.balanceOf(userAddress),\n signer.provider.getBalance(userAddress),\n ])\n\n balance = ethers.formatUnits(weiBalance, decimals)\n nativeBalance = parseFloat(ethers.formatUnits(weiNativeBalance, nativeDecimals)).toFixed(4)\n dispatch(PassportEvents.RECHECK_BALANCE, [result.hash])\n } catch (err) {\n toastAlert(err?.message || err || 'An error occurred while sending tokens', 'failure')\n dispatch(PassportEvents.ERROR, { error: err })\n }\n isLoading = false\n }\n\n const init = async () => {\n const pageOpts = get(pageOptsStore)\n recipientAddress = pageOpts?.to || ''\n amount = pageOpts?.amount || undefined\n const { decimals: contractDecimals, contract: credContract } = (await getCREDContract()) as TEvmContract\n decimals = contractDecimals\n contract = credContract\n const provider = get(providerStore)\n if(!provider) return\n signer = await provider.getSigner()\n userAddress = await getAddress()\n const results = await Promise.all([\n contract.symbol(),\n contract.balanceOf(userAddress),\n provider.getBalance(userAddress),\n fetch('https://chainid.network/chains.json')\n .then((result) => result.json())\n .then((networks) =>\n networks.find((network: { chainId: number }) => String(network.chainId) === config.chainId),\n ),\n ])\n symbol = results[0]\n balance = ethers.formatUnits(results[1], decimals)\n nativeDecimals = results[3]?.nativeCurrency?.decimals ?? 18\n nativeBalance = parseFloat(ethers.formatUnits(results[2], nativeDecimals)).toFixed(4)\n nativeSymbol = results[3]?.nativeCurrency?.symbol ?? 'ETH'\n activeCurrency = symbol\n }\n\n $: $configStore.chainId && $providerStore && init()\n $: isRecipientAddressValid = !!ethers.isAddress(recipientAddress)\n $: isSubmitDisabled =\n isLoading ||\n !amount ||\n !isRecipientAddressValid ||\n (activeCurrency === symbol && amount > +balance) ||\n (activeCurrency === nativeSymbol && amount > +nativeBalance)\n</script>\n\n<SendTokens\n bind:recipientAddress\n bind:amount\n options={{\n title: `Send stored value`,\n isNativeCurrecyTransferAllowed: $configStore.transferTokens?.nativeCurrency !== false,\n isScannerHidden,\n balance,\n chainId: config.chainId,\n isRecipientAddressValid,\n onScannerClicked,\n onSendTokens: sendTokensToRecipient,\n onBackClicked: () => pageStore.set(Pages.WALLET),\n onChangeCurrency: () => (activeCurrency === symbol ? (activeCurrency = nativeSymbol) : (activeCurrency = symbol)),\n onSetMaxAmount: () => (activeCurrency === symbol ? (amount = +balance) : (amount = +nativeBalance)),\n isLoading,\n isSubmitDisabled,\n credAlias: $clientPublicStore?.ui_settings.cred_alias,\n activeCurrency,\n symbol,\n nativeSymbol,\n nativeBalance,\n }}\n/>\n"],"names":["$.prop","$$props","amount","options","onChangeCurrency","onSetMaxAmount","onBackClicked","onSendTokens","title","chainId","onScannerClicked","credAlias","isNativeCurrecyTransferAllowed","round","num","isLoading","isSubmitDisabled","isRecipientAddressValid","isScannerHidden","activeCurrency","symbol","nativeSymbol","nativeBalance","$.set","activeCurrencySymbol","getCryptoCurrencySymbol","$.get","$0","$.derived_safe_equal","$$render","consequent","consequent_1","recipientAddress","consequent_2","ScanIcon","balance","__awaiter","thisArg","_arguments","P","generator","config","get","configStore","sendTokens","getCREDContract","toastAlert","fn","userAddress","$.mutable_source","decimals","nativeDecimals","contract","signer","scanner","Scanner","once","PassportEvents","_a","sub","address","getUserAddressBySub","sendTokensToRecipient","isTCRED","weiBn","ethers","result","getTxScanAddress","weiBalance","weiNativeBalance","dispatch","err","init","pageOpts","pageOptsStore","contractDecimals","credContract","provider","providerStore","getAddress","networks","network","_c","_b","results","_f","_e","_d","$configStore","$providerStore","pageStore","Pages"],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- const t = (r, e) => r.toLowerCase() === "cred" ? e : r;
2
- export {
3
- t as g
4
- };
5
- //# sourceMappingURL=strings-B-rKL311.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"strings-B-rKL311.js","sources":["../../utils/lib/strings/strings.ts"],"sourcesContent":["export const capitalizeFirstLetter = (string: string) => {\n return string.charAt(0).toUpperCase() + string.toLowerCase().slice(1);\n};\n\nexport const getCryptoCurrencySymbol = (symbol: string, alias: string) => {\n if (symbol.toLowerCase() === \"cred\") return alias;\n return symbol;\n};\n"],"names":["getCryptoCurrencySymbol","symbol","alias"],"mappings":"AAIO,MAAMA,IAA0B,CAACC,GAAgBC,MAClDD,EAAO,kBAAkB,SAAeC,IACrCD;"}