@credenza3/passport-sui 0.2.3 → 0.2.4
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.
- package/dist/{App-DMjoqoZI.js → App-Drnh90jg.js} +18 -18
- package/dist/{App-DMjoqoZI.js.map → App-Drnh90jg.js.map} +1 -1
- package/dist/{Button-69xpr_s2.js → Button-BwbAl06j.js} +4 -4
- package/dist/{Button-69xpr_s2.js.map → Button-BwbAl06j.js.map} +1 -1
- package/dist/{ButtonBack-eiZlUP5b.js → ButtonBack-2V8btHHE.js} +4 -4
- package/dist/{ButtonBack-eiZlUP5b.js.map → ButtonBack-2V8btHHE.js.map} +1 -1
- package/dist/{ButtonLink-0xz3HRlH.js → ButtonLink-CYeDF-q5.js} +3 -3
- package/dist/{ButtonLink-0xz3HRlH.js.map → ButtonLink-CYeDF-q5.js.map} +1 -1
- package/dist/{ConfirmAccount-xgFv9hNK.js → ConfirmAccount-CXgxwivy.js} +9 -9
- package/dist/{ConfirmAccount-xgFv9hNK.js.map → ConfirmAccount-CXgxwivy.js.map} +1 -1
- package/dist/{ContentHeader-36qt_g7F.js → ContentHeader-Bzt4m2P2.js} +3 -3
- package/dist/{ContentHeader-36qt_g7F.js.map → ContentHeader-Bzt4m2P2.js.map} +1 -1
- package/dist/{Error-BK7ZLiVO.js → Error-ca34C-yw.js} +5 -5
- package/dist/{Error-BK7ZLiVO.js.map → Error-ca34C-yw.js.map} +1 -1
- package/dist/{Input-DAxd1tLB.js → Input-uaiib1E3.js} +4 -4
- package/dist/{Input-DAxd1tLB.js.map → Input-uaiib1E3.js.map} +1 -1
- package/dist/{Label-DepYgrao.js → Label-CXL16w_q.js} +3 -3
- package/dist/{Label-DepYgrao.js.map → Label-CXL16w_q.js.map} +1 -1
- package/dist/{Loader-D4rTMy8b.js → Loader-DFIi9xwx.js} +3 -3
- package/dist/{Loader-D4rTMy8b.js.map → Loader-DFIi9xwx.js.map} +1 -1
- package/dist/{Login-B2s1dHJz.js → Login-i7699gm4.js} +9 -9
- package/dist/{Login-B2s1dHJz.js.map → Login-i7699gm4.js.map} +1 -1
- package/dist/{Logout-C6NAooAk.js → Logout-BhbGbpeS.js} +6 -6
- package/dist/{Logout-C6NAooAk.js.map → Logout-BhbGbpeS.js.map} +1 -1
- package/dist/{Nav-DOV6cYcx.js → Nav-DjQhprqh.js} +5 -5
- package/dist/{Nav-DOV6cYcx.js.map → Nav-DjQhprqh.js.map} +1 -1
- package/dist/{PassportId-oKWNLelI.js → PassportId-H0BukUWQ.js} +7 -7
- package/dist/{PassportId-oKWNLelI.js.map → PassportId-H0BukUWQ.js.map} +1 -1
- package/dist/Payment-QdXmFZsK.js +1192 -0
- package/dist/Payment-QdXmFZsK.js.map +1 -0
- package/dist/{PaymentResult-B2r8rxy0.js → PaymentResult-Qsgi-ARD.js} +4 -4
- package/dist/{PaymentResult-B2r8rxy0.js.map → PaymentResult-Qsgi-ARD.js.map} +1 -1
- package/dist/{Profile-D2bpRbfe.js → Profile-DfBS1mAR.js} +7 -7
- package/dist/{Profile-D2bpRbfe.js.map → Profile-DfBS1mAR.js.map} +1 -1
- package/dist/{ProgressVideo-01D-uEhA.js → ProgressVideo-pUcxTOos.js} +6 -6
- package/dist/{ProgressVideo-01D-uEhA.js.map → ProgressVideo-pUcxTOos.js.map} +1 -1
- package/dist/{ProgressVideo.service-D6suMNMc.js → ProgressVideo.service-DUa0a8mZ.js} +2 -2
- package/dist/{ProgressVideo.service-D6suMNMc.js.map → ProgressVideo.service-DUa0a8mZ.js.map} +1 -1
- package/dist/{RichAlert-vukUSrZA.js → RichAlert-sD_C1nMy.js} +5 -5
- package/dist/{RichAlert-vukUSrZA.js.map → RichAlert-sD_C1nMy.js.map} +1 -1
- package/dist/{Scanner-CWBrtSO-.js → Scanner-7AMriAOE.js} +7 -7
- package/dist/{Scanner-CWBrtSO-.js.map → Scanner-7AMriAOE.js.map} +1 -1
- package/dist/{SendTokens-QbdToxL9.js → SendTokens-ZHXHYLq8.js} +7 -7
- package/dist/{SendTokens-QbdToxL9.js.map → SendTokens-ZHXHYLq8.js.map} +1 -1
- package/dist/{Sign-Z4_JUSR-.js → Sign-DIUczOq2.js} +7 -7
- package/dist/{Sign-Z4_JUSR-.js.map → Sign-DIUczOq2.js.map} +1 -1
- package/dist/{Stripe.service-BkXnxKqQ.js → Stripe.service-CAFb5yn2.js} +3 -3
- package/dist/{Stripe.service-BkXnxKqQ.js.map → Stripe.service-CAFb5yn2.js.map} +1 -1
- package/dist/{UpdateProfile-CnE6y3Pf.js → UpdateProfile-C1JgXXbB.js} +10 -10
- package/dist/{UpdateProfile-CnE6y3Pf.js.map → UpdateProfile-C1JgXXbB.js.map} +1 -1
- package/dist/{UserInfo-DdRVoH0D.js → UserInfo-COvt0nYz.js} +4 -4
- package/dist/{UserInfo-DdRVoH0D.js.map → UserInfo-COvt0nYz.js.map} +1 -1
- package/dist/{Wallet-Cwo66Q1r.js → Wallet-CLLeUbtT.js} +8 -8
- package/dist/{Wallet-Cwo66Q1r.js.map → Wallet-CLLeUbtT.js.map} +1 -1
- package/dist/{each-BNaL_Vtx.js → each-DfuNhFy6.js} +2 -2
- package/dist/{each-BNaL_Vtx.js.map → each-DfuNhFy6.js.map} +1 -1
- package/dist/{html-u5owNQ_k.js → html-DDxtrLnm.js} +3 -3
- package/dist/{html-u5owNQ_k.js.map → html-DDxtrLnm.js.map} +1 -1
- package/dist/{index-client-GmX4pXIJ.js → index-client-1rOYJlfv.js} +2 -2
- package/dist/{index-client-GmX4pXIJ.js.map → index-client-1rOYJlfv.js.map} +1 -1
- package/dist/{index-CzZFSuqM.js → index-kGcNqRGJ.js} +2233 -2233
- package/dist/{index-CzZFSuqM.js.map → index-kGcNqRGJ.js.map} +1 -1
- package/dist/{input-Dlpr9jGf.js → input-DGESq0UR.js} +2 -2
- package/dist/{input-Dlpr9jGf.js.map → input-DGESq0UR.js.map} +1 -1
- package/dist/{legacy-BNwW5YWH.js → legacy-UOievsK_.js} +2 -2
- package/dist/{legacy-BNwW5YWH.js.map → legacy-UOievsK_.js.map} +1 -1
- package/dist/passport.es.js +1 -1
- package/dist/passport.umd.js +115 -115
- package/dist/passport.umd.js.map +1 -1
- package/dist/{socket-io-C6E3tcOo.js → socket-io-DiMxoZcO.js} +2 -2
- package/dist/{socket-io-C6E3tcOo.js.map → socket-io-DiMxoZcO.js.map} +1 -1
- package/package.json +1 -1
- package/dist/Payment-exJAIgZE.js +0 -1233
- package/dist/Payment-exJAIgZE.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Payment-exJAIgZE.js","sources":["../../ui/images/lock.svg","../../ui/main/payment/PaymentSwitchButton.svelte","../../ui/main/payment/Payment.svelte","../../ui/main/payment/Stripe.svelte","../../ui/main/payment/CredenzaBalance.svelte","../src/app/pages/payment/stripe/wallet-pay/WalletPay.svelte","../src/app/pages/payment/stripe/Stripe.styles.ts","../../utils/lib/scripts/scripts.ts","../../utils/lib/orders/index.ts","../src/app/pages/payment/Payment.service.ts","../src/app/pages/payment/stripe/Stripe.svelte","../src/app/pages/payment/credenza-balance/CredenzaBalance.svelte","../src/app/pages/payment/order.service.ts","../src/app/pages/payment/paystack/Paystack.svelte","../src/app/pages/payment/Payment.svelte"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='22'%20height='22'%20viewBox='0%200%2024%2024'%3e%3cpath%20fill='%23bbb'%20d='M17%209.761v-4.761c0-2.761-2.238-5-5-5-2.763%200-5%202.239-5%205v4.761c-1.827%201.466-3%203.714-3%206.239%200%204.418%203.582%208%208%208s8-3.582%208-8c0-2.525-1.173-4.773-3-6.239zm-8-4.761c0-1.654%201.346-3%203-3s3%201.346%203%203v3.587c-.927-.376-1.938-.587-3-.587s-2.073.211-3%20.587v-3.587zm4%2011.723v2.277h-2v-2.277c-.596-.347-1-.984-1-1.723%200-1.104.896-2%202-2s2%20.896%202%202c0%20.738-.404%201.376-1%201.723z'/%3e%3c/svg%3e\"","<style>\n .active {\n background-color: #ffff;\n font-weight: 500;\n color: #000;\n }\n .btn-disabled {\n pointer-events: none;\n background-color: #d0d2d5;\n }\n</style>\n\n<script lang=\"ts\">\n import Loader from '../shared/Loader.svelte'\n \n export let onClick: (...args: unknown[]) => unknown\n export let text: string\n export let disabled: boolean = false\n export let isLoading: boolean = false\n export let isActive: boolean = false\n</script>\n\n<button\n type=\"submit\"\n class=\"crtw-flex crtw-justify-center crtw-items-center crtw-w-full crtw-h-[50px] crtw-cursor-pointer crtw-border crtw-border-gray-300\n crtw-rounded crtw-font-['poppins'] crtw-text-gray-600\"\n class:btn-disabled={disabled || isLoading}\n class:active={isActive}\n on:click|preventDefault={onClick}\n>\n {#if isLoading}\n <Loader />\n {:else}\n {text}\n {/if}\n</button>","<script lang=\"ts\">\n import { PaymentViews } from '../../../utils/enums';\n import ButtonBack from '../shared/inputs/button-back/ButtonBack.svelte';\n import LockIcon from '../../images/lock.svg'\n import type { TUser } from '../../../utils/types';\n import PaymentSwitchButton from './PaymentSwitchButton.svelte';\n\n export let isLoading: boolean\n export let options: {\n user: TUser| null\n title: string\n subtitle?: string\n onBackClick: () => void\n isCardDisabled: boolean\n isCredezaValueDisabled: boolean,\n isPriceLoading: boolean\n totalSumCents: number,\n currencySymbol?: string\n }\n\n \n let { user, title, subtitle, onBackClick, isCardDisabled, currencySymbol = '$' } = options\n let activeTab = isCardDisabled ? 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={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 / 100,\n },\n requestPayerName: true,\n requestPayerEmail: true,\n })\n const canMakePayment = await paymentRequest.canMakePayment()\n if (!canMakePayment) return\n\n const walletPayElement = document.getElementById('ctui-wallet-pay')\n if (walletPayElement) walletPayElement.style.display = 'crtw-block'\n\n const prButton = stripeElements.create('paymentRequestButton', {\n paymentRequest: paymentRequest,\n style: {\n paymentRequestButton: {\n height: '48px',\n },\n },\n })\n prButton.mount('#ctui-payment-request-button')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n paymentRequest.on('token', async (event: any) => {\n isLoading = true\n try {\n await doPayment(event.token.id)\n await event.complete('success')\n } catch (err) {\n await event.complete('error')\n dispatch(PassportEvents.ERROR, { error: err })\n }\n isLoading = false\n })\n })\n</script>\n\n<div id=\"ctui-wallet-pay\" class=\"crtw-w-full crtw-my-4\" style=\"dispay: none;\">\n <div id=\"ctui-payment-request-button\"></div>\n</div>\n","export const stripeStyles = {\n base: {\n color: '#121e2b',\n fontSize: '12px',\n '::placeholder': {\n color: '#d9d9d9',\n },\n },\n invalid: {\n color: '#fa755a',\n },\n}\n","export const loadScript = (src: string) => {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script')\n script.src = src\n document.body.appendChild(script)\n script.addEventListener('load', () => resolve(script))\n script.addEventListener('error', () => reject(script))\n })\n}\n","import { get } from \"svelte/store\";\nimport { accessTokenStore } from \"../../../stores\";\nimport type { TPaymentReturn } from \"@packages/utils/types\";\n\nexport const getOrderDetails = async (apiUrl: string, orderId: string): Promise<TPaymentReturn> => {\n const res = await fetch(`${apiUrl}/orders/${orderId}`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${get(accessTokenStore)}`,\n },\n method: \"GET\",\n });\n if (!res.ok) throw new Error(\"Failed to get order details\");\n return await res.json();\n}\nexport const getCompmletedOrderDetails = async (\n apiUrl: string,\n orderId: string,\n maxRetries = 5\n) => {\n let attempts = 0;\n\n while (attempts < maxRetries) {\n const res = await fetch(`${apiUrl}/orders/completed/${orderId}`, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${get(accessTokenStore)}`,\n },\n method: \"GET\",\n });\n\n if (res.status === 204) {\n attempts++;\n if (attempts < maxRetries) {\n continue;\n } else {\n throw new Error(\"No content received after multiple attempts\");\n }\n }\n\n if (!res.ok) throw new Error(\"Failed to get order details\");\n return await res.json();\n }\n};\n\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 { ReceiptTarget, TransactionTypes } from '@packages/utils/enums'\nimport { accessTokenStore } from '@packages/stores'\nimport { get } from 'svelte/store'\nimport { configStore } from '@src/stores/config'\nimport { getClientConfigByClientId } from '@lib/clients'\nimport { initSuiClient } from '@src/libs/sui'\nimport type { TPaymentAsset } from './payment.constants'\nimport { pageOptsStore, pageStore, userStore } from '@packages/stores'\nimport { Pages } from '@packages/utils/enums'\nimport { analytics } from '@lib/mixpanel/mixpanel'\nimport { waitVideoEnded } from '@components/progress/ProgressVideo.service'\nimport { getAddress } from '@src/passport/blockchain'\nimport type { TPaymentReturn } from '@packages/utils/types'\nimport { validateOrderItems, validateTxs } from '@lib/orders'\nimport { dispatch, PassportEvents } from '@lib/events/events'\n\n\nexport const requestSuiReceipt = async ({\n stripeChargeId,\n title,\n digest,\n subtitle,\n amount,\n currency,\n}: {\n stripeChargeId?: string\n digest?: string\n amount?: number\n currency?: string\n title: string\n subtitle: string\n}) => {\n const { credenza, receiptTarget, clientId } = get(configStore)\n\n const targets = !receiptTarget \n ? [ReceiptTarget.EMAIL]\n : receiptTarget.filter(target => {\n const user = get(userStore);\n if(!user) return;\n return user[target]\n }\n );\n\n let successCount = 0;\n \n for (const target of targets) {\n const result = await fetch(`${credenza.suiApiUrl}/tokens/receipt`, {\n method: 'POST',\n body: JSON.stringify({\n ...(stripeChargeId ? { charge_id: stripeChargeId } : {}),\n ...(digest ? { digest } : {}),\n ...(amount ? { amount } : {}),\n ...(currency ? { currency } : {}),\n target,\n title,\n subtitle,\n source: getClientConfigByClientId(clientId).name,\n }),\n headers: {\n Authorization: `Bearer ${get(accessTokenStore)}`,\n 'Content-Type': 'application/json',\n },\n })\n\n if (result.ok) {\n successCount++;\n } else {\n console.warn(`Failed to send receipt to ${target}:`, result.status)\n }\n }\n\n return successCount > 0\n}\n\nexport const afterPaymentProcess = async ({\n res,\n priceCents,\n purchaseConfig\n}: {\n res: TPaymentReturn\n priceCents: number,\n purchaseConfig: { assets: TPaymentAsset[], title: string, subtitle: string }\n}) => {\n const config = get(configStore)\n\n const { chain_txs, items } = res\n const failedOrdersMessage = validateOrderItems(items)\n validateTxs(chain_txs, failedOrdersMessage)\n \n dispatch(PassportEvents.PAYMENT, { type: TransactionTypes.CARD })\n dispatch(PassportEvents.RECHECK_BALANCE)\n const user = get(userStore)\n if (user) {\n analytics.track('cp_payment_fiat', {\n $email: user.email,\n $phone: user.phone,\n suiNetwork: config.suiNetwork,\n clientId: config.clientId,\n address: await getAddress(),\n location: window.location.href,\n assets: purchaseConfig?.assets,\n total: priceCents / 100,\n description: (purchaseConfig?.title ?? '') + `(${purchaseConfig?.subtitle ?? ''})`,\n })\n }\n\n await waitVideoEnded()\n\n if (failedOrdersMessage) {\n pageOptsStore.set({\n title: 'Done!',\n subtitle: 'Your payment was partly successful',\n orders: items,\n })\n }\n pageStore.set(Pages.PAYMENT_RESULT)\n}\n\nexport const enrichAssetsWithMetadata = async (\n items: TPaymentReturn['items'], \n) => {\n for (const item of items) {\n const client = await initSuiClient(item?.asset?.packageId as string)\n \n let metadata = null\n if (item?.asset?.assetId) {\n metadata = await client.CredenzaAssetCollection.getAssetMetadata(+item?.asset?.assetId)\n item.asset.metadata = metadata\n }\n }\n}\n","<script lang=\"ts\">\n import WalletPay from './wallet-pay/WalletPay.svelte'\n import { onMount } from 'svelte'\n import { get } from 'svelte/store'\n import { stripeStyles } from '@pages/payment/stripe/Stripe.styles'\n import { dispatch, PassportEvents } from '@lib/events/events'\n import { loadScript } from '@lib/scripts/scripts'\n import { pageOptsStore, pageStore, fn } from '@packages/stores'\n import { Pages } from '@packages/utils/enums'\n import { Stripe as StripeComponent } from '@packages/ui'\n\n import { configStore } from '@src/stores/config'\n import { getClientConfigByClientId } from '@lib/clients'\n import type { TPaymentAsset } from '../payment.constants'\n import { afterPaymentProcess } from '../Payment.service'\n\n export let priceCents: number\n export let isLoading: boolean\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n export let purchaseConfig: { assets: TPaymentAsset[], title: string, subtitle: string }\n export let isPriceLoading: boolean\n\n const { toastAlert } = get(fn)\n const config = get(configStore)\n\n let Stripe: Window['Stripe']\n let stripe: Window['Stripe']\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let stripeElements: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let cardElement: any\n let isButtonActive: boolean\n\n let isCardFocused = false\n onMount(async () => {\n try {\n if (!Stripe) {\n if (!window.Stripe) {\n await loadScript('https://js.stripe.com/v3/')\n if (!window.Stripe) throw {}\n }\n Stripe = window.Stripe\n }\n } catch (err) {\n return console.log('Please include stripe to use payments.')\n }\n if (stripe) return\n const clientName = getClientConfigByClientId(config.clientId).name\n stripe = Stripe(config.stripe.pk[clientName] ?? config.stripe.pk.DEFAULT)\n stripeElements = stripe.elements()\n cardElement = stripeElements.create('card', { style: stripeStyles })\n cardElement.mount('#cpui-card-element')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cardElement.on('change', (event: any) => {\n isButtonActive = event.complete && !event.error\n })\n cardElement.on('focus', () => (isCardFocused = true))\n cardElement.on('blur', () => (isCardFocused = false))\n })\n\n const handleSubmit = async () => {\n try {\n if (!isButtonActive) return\n isLoading = true\n const result = await stripe.createToken(cardElement)\n if (result.error) throw result.error\n await doPayment(result.token.id)\n } catch (err) {\n dispatch(PassportEvents.ERROR, { error: err })\n }\n isLoading = false\n }\n\n const doPayment = async (tokenId: string) => {\n try {\n const { processPayment } = await import('@pages/payment/stripe/Stripe.service')\n\n const { assets } = purchaseConfig\n if (!assets?.length) throw new Error('No purchase config assets found')\n\n const res = await processPayment(tokenId, assets)\n await afterPaymentProcess({res, priceCents, purchaseConfig})\n } catch (err) {\n toastAlert(`Payment error: ${err.message || err}`, 'failure')\n pageOptsStore.set({ errorMessage: err.message })\n pageStore.set(Pages.ERROR)\n dispatch(PassportEvents.ERROR, { error: err })\n }\n }\n\n $: isPaymentDisabled = !isButtonActive || isLoading || isPriceLoading\n $: totalToPay = (priceCents / 100).toFixed(2)\n</script>\n\n<StripeComponent\n bind:isPaymentDisabled\n bind:isLoading\n bind:totalToPay\n options={{\n isCardFocused,\n onPay: handleSubmit,\n }}\n/>\n\n{#if stripe && stripeElements}\n <WalletPay {doPayment} {stripe} {stripeElements} {priceCents} bind:isLoading />\n{/if}\n","<script lang=\"ts\">\n import { onMount } from 'svelte'\n import { Pages } from '@packages/utils/enums'\n import { pageOptsStore, fn, pageStore, userStore, clientPublicStore } from '@packages/stores'\n import { dispatch, PassportEvents } from '@lib/events/events'\n import { CredenzaBalance } from '@packages/ui'\n import { get } from 'svelte/store'\n import { analytics } from '@lib/mixpanel/mixpanel'\n import { configStore } from '@src/stores/config'\n import { buyWithCred, getAddress, getBalance } from '@src/passport/blockchain'\n import { getCryptoCurrencySymbol } from '@lib/strings/strings'\n import { waitVideoEnded } from '@components/progress/ProgressVideo.service'\n import { requestSuiReceipt } from '../Payment.service'\n\n export let totalPriceToken: number\n export let purchaseConfig: {\n assets: { type: string; packageId: string; assetId?: number; amount?: number }[]\n title: string\n subtitle: string\n }\n export let isLoading: boolean\n export let isPriceLoading: boolean\n export let pricesByAsset: number[] = []\n\n const { toastAlert } = get(fn)\n const config = get(configStore)\n\n let balance = 0\n\n const processPaymentTx = async (\n asset: { type: string; packageId: string; assetId?: number; amount?: number },\n index: number,\n ) => {\n const { type, packageId, assetId, amount } = asset\n const paymentRes = await buyWithCred(type, packageId, { assetId, amount })\n const { title, subtitle } = purchaseConfig\n dispatch(PassportEvents.PAYMENT)\n dispatch(PassportEvents.RECHECK_BALANCE)\n await requestSuiReceipt({\n digest: paymentRes.digest,\n title,\n subtitle,\n amount: pricesByAsset[index],\n currency: 'CRED',\n })\n dispatch(PassportEvents.RECEIPT, { digest: paymentRes.digest })\n }\n\n const payWithCredenza = async () => {\n try {\n if (BigInt(totalPriceToken) > balance) return\n\n isLoading = true\n const { assets } = purchaseConfig\n\n for (const [index, asset] of assets.entries()) {\n await processPaymentTx(asset, index)\n\n await new Promise((resolve) => setTimeout(resolve, 1000))\n }\n\n const user = get(userStore)\n if (user) {\n analytics.track('cp_payment_stored_value', {\n $email: user.email,\n $phone: user.phone,\n suiNetwork: config.suiNetwork,\n clientId: config.clientId,\n location: window.location.href,\n address: await getAddress(),\n assets,\n total: totalPriceToken,\n description: (purchaseConfig?.title ?? '') + `(${purchaseConfig?.subtitle ?? ''})`,\n })\n }\n await waitVideoEnded()\n\n pageStore.set(Pages.PAYMENT_RESULT)\n } catch (err) {\n toastAlert(`Payment error: ${err.message || err}`, 'failure')\n pageOptsStore.set({ errorMessage: err.message })\n pageStore.set(Pages.ERROR)\n dispatch(PassportEvents.ERROR, { error: err })\n } finally {\n isLoading = false\n }\n }\n\n onMount(async () => {\n balance = Number(await getBalance())\n })\n\n $: formattedBalance = `${(balance - totalPriceToken).toFixed(2)} ${getCryptoCurrencySymbol('cred', 'cred')}`\n</script>\n\n<CredenzaBalance\n options={{\n formattedBalance,\n balance,\n credAlias:$clientPublicStore.ui_settings.cred_alias,\n onPay: payWithCredenza,\n onGetCred: () => pageStore.set(Pages.WALLET),\n totalToPay: String(totalPriceToken),\n isLoading,\n isPaymentDisabled: !Number(balance) || totalPriceToken > balance || isPriceLoading,\n }}\n/>\n","import { accessTokenStore, pageOptsStore } from \"@packages/stores\"\nimport type { TBasicPaymentData } from \"./oder.types\"\nimport { get } from \"svelte/store\"\nimport { configStore } from \"@src/stores/config\"\nimport type { TPaymentReturn } from \"@packages/utils/types\"\nimport { getCompmletedOrderDetails } from \"@lib/orders\"\nimport { enrichAssetsWithMetadata, requestSuiReceipt } from \"./Payment.service\"\nimport { dispatch, PassportEvents } from \"@lib/events/events\"\nimport type { TPaymentAsset } from \"./payment.constants\"\n\n\nexport const createOrder = async (paymentData: TBasicPaymentData): Promise<string> => {\n const { assets, ...rest } = paymentData\n const assetGroups = mapAssetsToGroups(assets)\n const res = await fetch(get(configStore).credenza.suiApiUrl + '/assets/buy', {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${get(accessTokenStore)}`,\n },\n method: 'POST',\n body: JSON.stringify({...rest, ...assetGroups}),\n })\n if (!res.ok) throw new Error('Failed to create order')\n const { _id }: { _id: string } = await res.json()\n return _id\n}\n\nexport const processOrder = async (orderId: string): Promise<TPaymentReturn> => {\n const config = get(configStore)\n const { title, subtitle } = get(pageOptsStore)\n const data = (await getCompmletedOrderDetails(config.credenza.generalApiUrl, orderId)) as TPaymentReturn\n if (data.items[0].error) throw new Error(data.items[0].error)\n\n if (data.payment_provider_tx && data.payment_provider !== \"paystack\") {\n await requestSuiReceipt({ stripeChargeId: data.payment_provider_tx, title, subtitle, currency: data.currency })\n dispatch(PassportEvents.RECEIPT, { stripeChargeId: data.payment_provider_tx })\n }\n await enrichAssetsWithMetadata(data.items)\n return data\n}\n\nconst mapAssetsToGroups = (assets: TPaymentAsset[]) => {\n const typeMap: { [key: string]: string } = {\n credenza_asset_collection: \"collection\",\n decom: \"decom\",\n cred: \"coin\",\n membership: \"membership\",\n };\n\n const result = assets.reduce((acc: { [key: string]: { asset_type: string; asset_id?: number; amount?: number }[] }, asset) => {\n const key = typeMap[asset.type];\n if (!key) return acc;\n\n const entry: { asset_type: string; asset_id?: number; amount?: number } = {\n asset_type: `${asset.packageId}::${asset.type}::${asset.type.toUpperCase()}`,\n };\n\n if (asset.assetId) {\n entry.asset_id = +asset.assetId\n }\n if (asset.amount) {\n entry.amount = asset.amount\n }\n\n acc[key] = acc[key] || [];\n acc[key].push(entry);\n\n return acc;\n }, { collection: [], decom: [], coin: [], membership: [] });\n\n return result;\n}","<script lang=\"ts\">\n import { dispatch, PassportEvents } from \"@lib/events/events\"\n import { loadScript } from \"@lib/scripts/scripts\"\n import { pageOptsStore, pageStore } from \"@packages/stores\"\n import { Pages } from \"@packages/utils/enums\"\n import { toastAlert } from \"@src/passport/ui\"\n import { onMount } from \"svelte\"\n import { createOrder, processOrder } from \"../order.service\"\n import { afterPaymentProcess } from \"../Payment.service\"\n import { get } from \"svelte/store\"\n import { configStore } from \"@src/stores/config\"\n import Button from \"@packages/ui/main/shared/inputs/button/Button.svelte\"\n import { getClientConfigByClientId } from \"@lib/clients\"\n import { getOrderDetails } from \"@lib/orders\"\n\n let { priceCents, purchaseConfig, isLoading = $bindable() } = $props()\n\n let Paystack: Window['PaystackPop']\n\n onMount(async () => {\n try {\n if (!Paystack) {\n if (!window.PaystackPop) {\n await loadScript('https://js.paystack.co/v2/inline.js')\n }\n Paystack = window.PaystackPop\n }\n\n await doPayment()\n } catch (err) {\n return console.log('Please include paystack to use payments.')\n }\n })\n\n const externalErrorHandler = (err: Error) => {\n isLoading = false\n toastAlert(`Payment error: ${err.message || err}`, 'failure')\n pageOptsStore.set({ errorMessage: err.message })\n pageStore.set(Pages.ERROR)\n dispatch(PassportEvents.ERROR, { error: err })\n };\n\n const doPayment = async () => {\n try {\n const { assets } = purchaseConfig\n const config = get(configStore)\n if (!assets?.length) throw new Error('No purchase config assets found')\n isLoading = true\n\n const currency = getClientConfigByClientId(get(configStore).clientId).payment.paystack!\n const orderId = await createOrder({assets, payment_provider: \"paystack\", client_id: get(configStore).clientId, currency })\n const res = await getOrderDetails(config.credenza.generalApiUrl, orderId)\n\n if (!res.payment_provider_data?.access_code) throw new Error('Payment is unavailable now')\n const popup = new Paystack()\n \n const result = popup.resumeTransaction(res.payment_provider_data?.access_code)\n result.onSuccess = async () => {\n try {\n const res = await processOrder(orderId);\n await afterPaymentProcess({\n res,\n priceCents,\n purchaseConfig\n });\n } catch (err) {\n externalErrorHandler(err)\n } finally {\n isLoading = false;\n }\n }\n\n result.onError = (err: unknown) => {\n isLoading = false\n throw err\n }\n\n result.onCancel = () => {\n isLoading = false\n throw new Error(\"Payment was not finished\")\n }\n } catch (err) {\n externalErrorHandler(err)\n }\n }\n</script>\n\n\n<div class=\"crtw-w-full crtw-text-center crtw-my-5\">\n <Button\n text={`Pay with Paystack`}\n onClick={doPayment}\n disabled={false}\n isLoading={false}\n />\n</div>\n","<script lang=\"ts\">\n import { Pages } from '@packages/utils/enums'\n import { onDestroy } from 'svelte'\n\n import { pageOptsStore, userStore, pageStore } from '@packages/stores'\n import { dispatch, PassportEvents } from '@lib/events/events'\n import { Payment } from '@packages/ui'\n import Stripe from './stripe/Stripe.svelte'\n import { getSuiCredCoinType, getSellableConfigId, getSuiObject, getAssetPrice } from '@src/utils/blockchain'\n import type { TSuiPaymentItem } from '@app/types'\n import { toastAlert } from '@src/passport/ui'\n import CredenzaBalance from './credenza-balance/CredenzaBalance.svelte'\n import { SUI_CRED_DECIMALS } from '@src/constants/blockchain'\n import { AssetType, CardPaymentProvider } from './payment.constants'\n import { getClientConfigByClientId } from '@lib/clients'\n import { configStore } from '@src/stores/config'\n import { get } from 'svelte/store'\n import Paystack from './paystack/Paystack.svelte'\n import Button from '@packages/ui/main/shared/inputs/button/Button.svelte'\n import { initSuiClient } from '@src/libs/sui'\n\n let isPriceLoading: boolean = false\n let isLoading: boolean = false\n let pricesByAsset: number[] = []\n\n let totalSumCentsUSD: number = 0\n let totalSumCentsGHS: number = 0\n let totalSumCoins: number = 0\n\n let cardPaymentProvider = CardPaymentProvider.STRIPE\n\n const getTokenPrice = async (packageId: string, type: string, assetId?: string): Promise<[number, number]> => {\n if (assetId && type === AssetType.CREDENZA_ASSET_COLLECTION) {\n return await getAssetPrice(packageId, assetId)\n }\n\n const sellableConfigId = await getSellableConfigId(packageId, type)\n const sellableObj = await getSuiObject(sellableConfigId)\n\n const {\n content: {\n fields: { price_fiat, price_coin },\n },\n } = sellableObj\n return [+price_fiat, +price_coin]\n }\n\n const getCredPrice = async (packageId: string, type: string) => {\n const sellableConfigId = await getSellableConfigId(packageId, type)\n const { suiNetwork } = get(configStore)\n const client = await initSuiClient(packageId, suiNetwork)\n\n const priceCentsUSD = await client.Sellable.getPriceFiat(sellableConfigId, \"USD\")\n let priceCentsGHS = 0\n\n if (getClientConfigByClientId(get(configStore).clientId).payment.paystack) {\n priceCentsGHS = await client.Sellable.getPriceFiat(sellableConfigId, \"GHS\")\n }\n return [priceCentsUSD, priceCentsGHS]\n }\n\n const calculateTotalPrice = async (assets: TSuiPaymentItem[]): Promise<void> => {\n try {\n isPriceLoading = true\n\n for (const asset of assets) {\n const { packageId, type, amount, assetId } = asset\n const packageIdWCoinType = `${packageId}::${type}::${type.toUpperCase()}`\n if (packageIdWCoinType === getSuiCredCoinType() && amount) {\n const [priceCentsUSD, priceCentsGHS] = await getCredPrice(packageId, type)\n totalSumCentsUSD += amount * priceCentsUSD\n totalSumCentsGHS += amount * priceCentsGHS\n } else {\n let [cents, coins] = await getTokenPrice(packageId, type, assetId)\n if (amount && amount !== 0) {\n cents *= amount\n coins *= amount\n }\n\n totalSumCentsUSD += cents\n totalSumCoins += coins / SUI_CRED_DECIMALS\n\n pricesByAsset.push(coins / SUI_CRED_DECIMALS)\n }\n }\n } catch (err) {\n console.log(err)\n toastAlert('Error calculating the price', 'failure')\n dispatch(PassportEvents.ERROR, err)\n } finally {\n isPriceLoading = false\n }\n }\n\n const unsub = pageOptsStore.subscribe(async (store) => {\n if (!store?.assets || !store.assets.length) return\n await calculateTotalPrice(store.assets)\n })\n\n const onChangeCardProvider = () => {\n if (cardPaymentProvider === CardPaymentProvider.PAYSTACK) {\n cardPaymentProvider = CardPaymentProvider.STRIPE;\n } else {\n cardPaymentProvider = CardPaymentProvider.PAYSTACK;\n }\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: !totalSumCentsUSD || $pageOptsStore.payments?.credenzaStoredValue?.disabled,\n isPriceLoading,\n totalSumCents: totalSumCentsUSD,\n }}\n>\n <div slot=\"card-provider-switch\" class=\"crtw-mb-[15px]\">\n {#if getClientConfigByClientId(get(configStore).clientId).payment.paystack}\n <Button\n text={`Try another payment provider`}\n onClick={onChangeCardProvider}\n disabled={false}\n isLoading={false}\n />\n {/if}\n </div>\n <div slot=\"credit-card\">\n {#if cardPaymentProvider === CardPaymentProvider.PAYSTACK}\n <Paystack priceCents={totalSumCentsGHS} purchaseConfig={$pageOptsStore} bind:isLoading/>\n {:else if cardPaymentProvider === CardPaymentProvider.STRIPE}\n <Stripe priceCents={totalSumCentsUSD} {isPriceLoading} purchaseConfig={$pageOptsStore} bind:isLoading />\n {/if}\n </div>\n <div slot=\"cred-balance\">\n <CredenzaBalance\n {pricesByAsset}\n totalPriceToken={totalSumCoins}\n {isPriceLoading}\n purchaseConfig={$pageOptsStore}\n bind:isLoading\n />\n </div>\n\n</Payment>\n"],"names":["LockIcon","onClick","$.prop","$$props","text","disabled","isLoading","$$render","consequent","alternate","isActive","$$args","options","subtitle","onBackClick","isCardDisabled","currencySymbol","activeTab","PaymentViews","isPriceLoading","totalSumCents","isCredezaValueDisabled","$0","$.untrack","$.get","consequent_2","consequent_1","user","title","isPaymentDisabled","totalToPay","isCardFocused","onPay","credAlias","onGetCred","formattedBalance","balance","__awaiter","thisArg","_arguments","P","generator","onMount","stripe","priceCents","paymentRequest","walletPayElement","stripeElements","event","doPayment","err","dispatch","PassportEvents","stripeStyles","loadScript","src","resolve","reject","script","getOrderDetails","apiUrl","orderId","res","get","accessTokenStore","getCompmletedOrderDetails","maxRetries","attempts","validateTxs","txs","message","item","validateOrderItems","orders","errorMessages","requestSuiReceipt","stripeChargeId","digest","amount","currency","credenza","receiptTarget","clientId","configStore","targets","target","userStore","ReceiptTarget","successCount","result","getClientConfigByClientId","afterPaymentProcess","purchaseConfig","config","chain_txs","items","failedOrdersMessage","TransactionTypes","analytics","getAddress","waitVideoEnded","pageOptsStore","pageStore","Pages","enrichAssetsWithMetadata","client","initSuiClient","metadata","fn","Stripe","$.mutable_source","cardElement","isButtonActive","clientName","$.set","_a","handleSubmit","tokenId","processPayment","assets","totalPriceToken","pricesByAsset","asset","index","type","packageId","assetId","paymentRes","buyWithCred","payWithCredenza","_b","toastAlert","getBalance","getCryptoCurrencySymbol","$clientPublicStore","createOrder","paymentData","rest","assetGroups","mapAssetsToGroups","_id","processOrder","data","typeMap","acc","key","entry","Paystack","externalErrorHandler","totalSumCentsUSD","totalSumCentsGHS","totalSumCoins","cardPaymentProvider","CardPaymentProvider","getTokenPrice","AssetType","getAssetPrice","sellableConfigId","getSellableConfigId","sellableObj","getSuiObject","price_fiat","price_coin","getCredPrice","suiNetwork","priceCentsUSD","priceCentsGHS","getSuiCredCoinType","cents","coins","SUI_CRED_DECIMALS","unsub","store","calculateTotalPrice","onChangeCardProvider","onDestroy","module","$.component","node_2","$$anchor","$$component","$userStore","$pageOptsStore","consequent_3"],"mappings":"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"}
|