@credenza3/passport-evm 0.3.14 → 0.3.15

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 (70) hide show
  1. package/README.md +2 -2
  2. package/dist/{App-BSUbcs5N.js → App-CK6khfTH.js} +18 -18
  3. package/dist/{App-BSUbcs5N.js.map → App-CK6khfTH.js.map} +1 -1
  4. package/dist/{Button-Do331Sio.js → Button-BRJIRnNj.js} +4 -4
  5. package/dist/{Button-Do331Sio.js.map → Button-BRJIRnNj.js.map} +1 -1
  6. package/dist/{ButtonBack-COpQSSbA.js → ButtonBack-C7ohWbYv.js} +4 -4
  7. package/dist/{ButtonBack-COpQSSbA.js.map → ButtonBack-C7ohWbYv.js.map} +1 -1
  8. package/dist/{ButtonLink-7sr68aXy.js → ButtonLink-DyJlCY8b.js} +3 -3
  9. package/dist/{ButtonLink-7sr68aXy.js.map → ButtonLink-DyJlCY8b.js.map} +1 -1
  10. package/dist/{ConfirmAccount-CUp76RaC.js → ConfirmAccount-DSluerxo.js} +9 -9
  11. package/dist/{ConfirmAccount-CUp76RaC.js.map → ConfirmAccount-DSluerxo.js.map} +1 -1
  12. package/dist/{ContentHeader-BEtMQDCY.js → ContentHeader-LNw3sQg0.js} +3 -3
  13. package/dist/{ContentHeader-BEtMQDCY.js.map → ContentHeader-LNw3sQg0.js.map} +1 -1
  14. package/dist/{Error-DIE0qjZW.js → Error-Dunm2cMW.js} +5 -5
  15. package/dist/{Error-DIE0qjZW.js.map → Error-Dunm2cMW.js.map} +1 -1
  16. package/dist/{Input-CwKuey2u.js → Input-DN8dySsL.js} +4 -4
  17. package/dist/{Input-CwKuey2u.js.map → Input-DN8dySsL.js.map} +1 -1
  18. package/dist/{Label-B1E79bWR.js → Label-BPeK08-x.js} +3 -3
  19. package/dist/{Label-B1E79bWR.js.map → Label-BPeK08-x.js.map} +1 -1
  20. package/dist/{Loader-BJi-IZD4.js → Loader-DgyxIpZ6.js} +3 -3
  21. package/dist/{Loader-BJi-IZD4.js.map → Loader-DgyxIpZ6.js.map} +1 -1
  22. package/dist/{Login-BZwxqrJo.js → Login-D2zgoEdd.js} +9 -9
  23. package/dist/{Login-BZwxqrJo.js.map → Login-D2zgoEdd.js.map} +1 -1
  24. package/dist/{Logout-CVOl93tE.js → Logout-CRuaF6rG.js} +6 -6
  25. package/dist/{Logout-CVOl93tE.js.map → Logout-CRuaF6rG.js.map} +1 -1
  26. package/dist/{Nav-D2XU3cdF.js → Nav-CCHGS9eY.js} +5 -5
  27. package/dist/{Nav-D2XU3cdF.js.map → Nav-CCHGS9eY.js.map} +1 -1
  28. package/dist/{PassportId-BVES8VD0.js → PassportId-yBon5KIf.js} +6 -6
  29. package/dist/{PassportId-BVES8VD0.js.map → PassportId-yBon5KIf.js.map} +1 -1
  30. package/dist/{Payment-99Or-v_m.js → Payment-CGjddhde.js} +335 -332
  31. package/dist/Payment-CGjddhde.js.map +1 -0
  32. package/dist/{PaymentResult-tps5kYly.js → PaymentResult-C_0_mIlJ.js} +4 -4
  33. package/dist/{PaymentResult-tps5kYly.js.map → PaymentResult-C_0_mIlJ.js.map} +1 -1
  34. package/dist/{Profile-CMUhjUBZ.js → Profile-Bvp4yZbP.js} +7 -7
  35. package/dist/{Profile-CMUhjUBZ.js.map → Profile-Bvp4yZbP.js.map} +1 -1
  36. package/dist/{ProgressVideo-BnvjmIfk.js → ProgressVideo-BiUOuBa9.js} +5 -5
  37. package/dist/{ProgressVideo-BnvjmIfk.js.map → ProgressVideo-BiUOuBa9.js.map} +1 -1
  38. package/dist/{RichAlert-CPTVnOly.js → RichAlert-NrgZSS3T.js} +5 -5
  39. package/dist/{RichAlert-CPTVnOly.js.map → RichAlert-NrgZSS3T.js.map} +1 -1
  40. package/dist/{Scanner-BK6r11ag.js → Scanner-BxVZaKBr.js} +6 -6
  41. package/dist/{Scanner-BK6r11ag.js.map → Scanner-BxVZaKBr.js.map} +1 -1
  42. package/dist/{SendTokens-CY0x-dNv.js → SendTokens-BjaqaayL.js} +7 -7
  43. package/dist/{SendTokens-CY0x-dNv.js.map → SendTokens-BjaqaayL.js.map} +1 -1
  44. package/dist/{Sign-BtMALc-L.js → Sign-Dhe4XD6W.js} +6 -6
  45. package/dist/{Sign-BtMALc-L.js.map → Sign-Dhe4XD6W.js.map} +1 -1
  46. package/dist/{Stripe.service-CmkodGA4.js → Stripe.service-qI7X_QFH.js} +3 -3
  47. package/dist/{Stripe.service-CmkodGA4.js.map → Stripe.service-qI7X_QFH.js.map} +1 -1
  48. package/dist/{UpdateProfile-BpDEoygB.js → UpdateProfile-RpnS1-gC.js} +10 -10
  49. package/dist/{UpdateProfile-BpDEoygB.js.map → UpdateProfile-RpnS1-gC.js.map} +1 -1
  50. package/dist/{UserInfo-CybjgUPr.js → UserInfo-B03zRsLh.js} +4 -4
  51. package/dist/{UserInfo-CybjgUPr.js.map → UserInfo-B03zRsLh.js.map} +1 -1
  52. package/dist/{Wallet-DOr2QsdF.js → Wallet-WkxAFaIA.js} +7 -7
  53. package/dist/{Wallet-DOr2QsdF.js.map → Wallet-WkxAFaIA.js.map} +1 -1
  54. package/dist/{each-BGWW2yNi.js → each-DDspCtgR.js} +2 -2
  55. package/dist/{each-BGWW2yNi.js.map → each-DDspCtgR.js.map} +1 -1
  56. package/dist/{html-B5PuXdLp.js → html-B79vtFau.js} +3 -3
  57. package/dist/{html-B5PuXdLp.js.map → html-B79vtFau.js.map} +1 -1
  58. package/dist/{index-BZcOD1tg.js → index-CeCdfdju.js} +1866 -1863
  59. package/dist/{index-BZcOD1tg.js.map → index-CeCdfdju.js.map} +1 -1
  60. package/dist/{index-client-Y_-1H35w.js → index-client-CHAC5Y-M.js} +2 -2
  61. package/dist/{index-client-Y_-1H35w.js.map → index-client-CHAC5Y-M.js.map} +1 -1
  62. package/dist/{input-DNdiLHPp.js → input-COCJf_Ww.js} +2 -2
  63. package/dist/{input-DNdiLHPp.js.map → input-COCJf_Ww.js.map} +1 -1
  64. package/dist/{legacy-B_pXyAF3.js → legacy-DYwhQppf.js} +2 -2
  65. package/dist/{legacy-B_pXyAF3.js.map → legacy-DYwhQppf.js.map} +1 -1
  66. package/dist/passport.es.js +2 -2
  67. package/dist/passport.umd.js +69 -69
  68. package/dist/passport.umd.js.map +1 -1
  69. package/package.json +1 -1
  70. package/dist/Payment-99Or-v_m.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@credenza3/passport-evm",
3
- "version": "0.3.14",
3
+ "version": "0.3.15",
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-99Or-v_m.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 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,\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 = [];\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.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.STRIPE,\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 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 { 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 isStripeDisabled: $pageOptsStore.payments?.stripe?.disabled,\n isCredezaValueDisabled: !totalSumCents || $pageOptsStore.payments?.credenzaStoredValue?.disabled,\n isPriceLoading,\n totalSumCents,\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","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","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","ReceiptTarget","successCount","target","result","getClientConfigByClientId","afterPaymentProcess","purchaseConfig","toastAlert","fn","config","failedOrdersMessage","TransactionTypes","userStore","analytics","getAddress","waitVideoEnded","pageOptsStore","pageStore","Pages","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","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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"}