From 7de40adffe461f6bd5aa6db1aa4ab1d7238e0d11 Mon Sep 17 00:00:00 2001 From: Dmitriy Date: Mon, 22 Jul 2024 19:43:35 +0200 Subject: [PATCH] chore: cleanup & simplify environment variables --- apps/ticketing/.env.example | 18 +++++- apps/ticketing/src/hooks/useDrops.ts | 2 +- apps/ticketing/src/hooks/useEvents.ts | 2 +- .../ticketing/src/hooks/useNearInitializer.ts | 3 +- .../src/hooks/usePurchasedTickets.ts | 2 +- apps/ticketing/src/hooks/useStripe.ts | 2 +- .../src/hooks/useWalletInitializer.ts | 2 +- .../src/pages/events/[eventId]/index.tsx | 6 +- .../src/pages/events/[eventId]/tickets.tsx | 2 +- apps/ticketing/src/pages/events/new.tsx | 2 +- .../ticketing/src/pages/tickets/purchased.tsx | 10 +-- apps/ticketing/src/stores/stripe.ts | 2 +- apps/ticketing/src/utils/common.ts | 62 ------------------- apps/ticketing/src/utils/config.ts | 11 +++- apps/ticketing/src/utils/helpers.ts | 34 +--------- apps/ticketing/src/utils/local-storage.ts | 13 ---- apps/ticketing/src/utils/purchase.ts | 13 ++-- apps/ticketing/src/utils/rpc.ts | 3 +- 18 files changed, 50 insertions(+), 139 deletions(-) delete mode 100644 apps/ticketing/src/utils/common.ts delete mode 100644 apps/ticketing/src/utils/local-storage.ts diff --git a/apps/ticketing/.env.example b/apps/ticketing/.env.example index 60a3bf0..4f09537 100644 --- a/apps/ticketing/.env.example +++ b/apps/ticketing/.env.example @@ -4,5 +4,21 @@ APPLE_WALLET_CERTIFICATE_PASSWORD= # Public (Server + Client): +# testnet NEXT_PUBLIC_HOSTNAME=http://localhost:3000 -NEXT_PUBLIC_NETWORK_ID=testnet \ No newline at end of file +NEXT_PUBLIC_NETWORK_ID=testnet +NEXT_PUBLIC_NETWORK_NODE_URL=https://rpc.testnet.near.org +NEXT_PUBLIC_EVENTS_WORKER_BASE=https://stripe-worker-template.keypom.workers.dev +NEXT_PUBLIC_KEYPOM_CONTRACT_ID=v2.keypom.testnet +NEXT_PUBLIC_KEYPOM_EVENTS_CONTRACT_ID=1717013187496-kp-ticketing.testnet +NEXT_PUBLIC_KEYPOM_MARKETPLACE_CONTRACT_ID=1717013187496-marketplace.testnet +NEXT_PUBLIC_CLOUDFLARE_IPFS=https://cloudflare-ipfs.com/ipfs + +# mainnet +# NEXT_PUBLIC_NETWORK_ID=mainnet +# NEXT_PUBLIC_NETWORK_NODE_URL=https://rpc.mainnet.near.org +# NEXT_PUBLIC_EVENTS_WORKER_BASE=https://stripe-worker-production.keypom.workers.dev +# NEXT_PUBLIC_KEYPOM_CONTRACT_ID=v2.keypom.near +# NEXT_PUBLIC_KEYPOM_EVENTS_CONTRACT_ID=ticketing-v1.keypom.near +# NEXT_PUBLIC_KEYPOM_MARKETPLACE_CONTRACT_ID=marketplace-v1.keypom.near +# NEXT_PUBLIC_CLOUDFLARE_IPFS=https://cloudflare-ipfs.com/ipfs diff --git a/apps/ticketing/src/hooks/useDrops.ts b/apps/ticketing/src/hooks/useDrops.ts index c6e6fca..c2fc1e5 100644 --- a/apps/ticketing/src/hooks/useDrops.ts +++ b/apps/ticketing/src/hooks/useDrops.ts @@ -2,7 +2,7 @@ import { handleClientError } from '@pagoda/ui/src/utils/error'; import { useQuery } from '@tanstack/react-query'; import { useNearStore } from '@/stores/near'; -import { KEYPOM_EVENTS_CONTRACT_ID } from '@/utils/common'; +import { KEYPOM_EVENTS_CONTRACT_ID } from '@/utils/config'; import { EventDrop, TicketMetadataExtra } from '@/utils/helpers'; import { validateDateAndTime } from '@/utils/time'; diff --git a/apps/ticketing/src/hooks/useEvents.ts b/apps/ticketing/src/hooks/useEvents.ts index da26240..f6dc513 100644 --- a/apps/ticketing/src/hooks/useEvents.ts +++ b/apps/ticketing/src/hooks/useEvents.ts @@ -2,7 +2,7 @@ import { handleClientError } from '@pagoda/ui/src/utils/error'; import { useQuery } from '@tanstack/react-query'; import { useNearStore } from '@/stores/near'; -import { KEYPOM_EVENTS_CONTRACT_ID } from '@/utils/common'; +import { KEYPOM_EVENTS_CONTRACT_ID } from '@/utils/config'; import { FunderEventMetadata } from '@/utils/helpers'; export function useEvents(accountId: string | undefined) { diff --git a/apps/ticketing/src/hooks/useNearInitializer.ts b/apps/ticketing/src/hooks/useNearInitializer.ts index 3fb1394..9c903f3 100644 --- a/apps/ticketing/src/hooks/useNearInitializer.ts +++ b/apps/ticketing/src/hooks/useNearInitializer.ts @@ -3,8 +3,7 @@ import { useRef } from 'react'; import { useEffect } from 'react'; import { useNearStore } from '@/stores/near'; -import { KEYPOM_CONTRACT_ID } from '@/utils/common'; -import { NETWORK_ID, NETWORK_NODE_URL } from '@/utils/config'; +import { KEYPOM_CONTRACT_ID, NETWORK_ID, NETWORK_NODE_URL } from '@/utils/config'; export function useNearInitializer() { const connectPromise = useRef | null>(null); diff --git a/apps/ticketing/src/hooks/usePurchasedTickets.ts b/apps/ticketing/src/hooks/usePurchasedTickets.ts index e9dfe4f..7b09cd5 100644 --- a/apps/ticketing/src/hooks/usePurchasedTickets.ts +++ b/apps/ticketing/src/hooks/usePurchasedTickets.ts @@ -4,7 +4,7 @@ import { useQuery } from '@tanstack/react-query'; import { Account } from 'near-api-js'; import { useNearStore } from '@/stores/near'; -import { KEYPOM_EVENTS_CONTRACT_ID } from '@/utils/common'; +import { KEYPOM_EVENTS_CONTRACT_ID } from '@/utils/config'; import { EventDrop, FunderEventMetadata, TicketMetadataExtra } from '@/utils/helpers'; export function usePurchasedTickets(secretKeys: string[]) { diff --git a/apps/ticketing/src/hooks/useStripe.ts b/apps/ticketing/src/hooks/useStripe.ts index b4c2559..99ea17f 100644 --- a/apps/ticketing/src/hooks/useStripe.ts +++ b/apps/ticketing/src/hooks/useStripe.ts @@ -4,7 +4,7 @@ import { v4 as uuidv4 } from 'uuid'; import { useNearStore } from '@/stores/near'; import { useStripeStore } from '@/stores/stripe'; -import { EVENTS_WORKER_BASE, KEYPOM_MARKETPLACE_CONTRACT_ID } from '@/utils/common'; +import { EVENTS_WORKER_BASE, KEYPOM_MARKETPLACE_CONTRACT_ID } from '@/utils/config'; export function useStripe(accountId: string | undefined, stripeCheckout: boolean) { const viewAccount = useNearStore((store) => store.viewAccount); diff --git a/apps/ticketing/src/hooks/useWalletInitializer.ts b/apps/ticketing/src/hooks/useWalletInitializer.ts index 110f2cb..875485f 100644 --- a/apps/ticketing/src/hooks/useWalletInitializer.ts +++ b/apps/ticketing/src/hooks/useWalletInitializer.ts @@ -4,7 +4,7 @@ import { useRef } from 'react'; import { useEffect } from 'react'; import { useWalletStore } from '@/stores/wallet'; -import { KEYPOM_CONTRACT_ID } from '@/utils/common'; +import { KEYPOM_CONTRACT_ID } from '@/utils/config'; import { WALLET_SELECTOR_PARAMS } from '@/utils/wallet'; export function useWalletInitializer() { diff --git a/apps/ticketing/src/pages/events/[eventId]/index.tsx b/apps/ticketing/src/pages/events/[eventId]/index.tsx index c8dceb2..0c5fab8 100644 --- a/apps/ticketing/src/pages/events/[eventId]/index.tsx +++ b/apps/ticketing/src/pages/events/[eventId]/index.tsx @@ -15,7 +15,7 @@ import { useRouter } from 'next/router'; import { useDefaultLayout } from '@/hooks/useLayout'; import { useWalletStore } from '@/stores/wallet'; -import { CLOUDFLARE_IPFS } from '@/utils/common'; +import { CLOUDFLARE_IPFS } from '@/utils/config'; import { HOSTNAME } from '@/utils/config'; import { displayEventDate } from '@/utils/date'; import { parseEventIdQueryParam } from '@/utils/event-id'; @@ -24,8 +24,8 @@ import { fetchEventFromJsonRpc } from '@/utils/rpc'; import type { EventDetails, NextPageWithLayout } from '@/utils/types'; /* - NOTE: This page is a bit of an outlier. Due to this particular page being frequently shared - via social media, it's important to fetch the event data on the server side so that we can + NOTE: This page is a bit of an outlier. Due to this particular page being frequently shared + via social media, it's important to fetch the event data on the server side so that we can properly render meta tags to populate dynamic preview content when shared. */ diff --git a/apps/ticketing/src/pages/events/[eventId]/tickets.tsx b/apps/ticketing/src/pages/events/[eventId]/tickets.tsx index 0ebcb30..cd6c190 100644 --- a/apps/ticketing/src/pages/events/[eventId]/tickets.tsx +++ b/apps/ticketing/src/pages/events/[eventId]/tickets.tsx @@ -24,7 +24,7 @@ import { useDrops } from '@/hooks/useDrops'; import { useEvent } from '@/hooks/useEvents'; import { useDefaultLayout } from '@/hooks/useLayout'; import { useNearStore } from '@/stores/near'; -import { CLOUDFLARE_IPFS } from '@/utils/common'; +import { CLOUDFLARE_IPFS } from '@/utils/config'; import { displayEventDate } from '@/utils/date'; import { formatDollar, formatTicketPrice } from '@/utils/dollar'; import { formatEventIdQueryParam, parseEventIdQueryParam } from '@/utils/event-id'; diff --git a/apps/ticketing/src/pages/events/new.tsx b/apps/ticketing/src/pages/events/new.tsx index 16d5c83..ec79124 100644 --- a/apps/ticketing/src/pages/events/new.tsx +++ b/apps/ticketing/src/pages/events/new.tsx @@ -38,7 +38,7 @@ import { useStripe } from '@/hooks/useStripe'; import { useNearStore } from '@/stores/near'; import { useStripeStore } from '@/stores/stripe'; import { useWalletStore } from '@/stores/wallet'; -import { EVENTS_WORKER_BASE, KEYPOM_EVENTS_CONTRACT_ID } from '@/utils/common'; +import { EVENTS_WORKER_BASE, KEYPOM_EVENTS_CONTRACT_ID } from '@/utils/config'; import { createPayload, estimateCosts, diff --git a/apps/ticketing/src/pages/tickets/purchased.tsx b/apps/ticketing/src/pages/tickets/purchased.tsx index 7dd32ee..d068eb9 100644 --- a/apps/ticketing/src/pages/tickets/purchased.tsx +++ b/apps/ticketing/src/pages/tickets/purchased.tsx @@ -1,5 +1,5 @@ /* - NOTE: This page supports rendering single or multiple purchased tickets based on + NOTE: This page supports rendering single or multiple purchased tickets based on the number of comma separated values that exist in the URL hash: - Single ticket: /tickets/purchased#1 @@ -29,7 +29,7 @@ import { AddToAppleWallet } from '@/components/AddToAppleWallet'; import { AddToGoogleWallet } from '@/components/AddToGoogleWallet'; import { useDefaultLayout } from '@/hooks/useLayout'; import { usePurchasedTickets } from '@/hooks/usePurchasedTickets'; -import { CLOUDFLARE_IPFS } from '@/utils/common'; +import { CLOUDFLARE_IPFS } from '@/utils/config'; import { displayEventDate } from '@/utils/date'; import { formatEventIdQueryParam } from '@/utils/event-id'; import { convertToSafeFilename } from '@/utils/file'; @@ -45,10 +45,10 @@ const PurchasedTickets: NextPageWithLayout = () => { useEffect(() => { /* - NOTE: The secret keys are stored and read from "location.hash" instead of - a query param to help provide an extra layer of privacy since URI fragments + NOTE: The secret keys are stored and read from "location.hash" instead of + a query param to help provide an extra layer of privacy since URI fragments are never sent to the server (they're client side only). - + https://en.wikipedia.org/wiki/URI_fragment */ diff --git a/apps/ticketing/src/stores/stripe.ts b/apps/ticketing/src/stores/stripe.ts index 056ea60..7f1aa8e 100644 --- a/apps/ticketing/src/stores/stripe.ts +++ b/apps/ticketing/src/stores/stripe.ts @@ -3,7 +3,7 @@ import { useQuery } from '@tanstack/react-query'; import { v4 as uuidv4 } from 'uuid'; import { create } from 'zustand'; -import { EVENTS_WORKER_BASE, KEYPOM_MARKETPLACE_CONTRACT_ID } from '@/utils/common'; +import { EVENTS_WORKER_BASE, KEYPOM_MARKETPLACE_CONTRACT_ID } from '@/utils/config'; import { useNearStore } from './near'; diff --git a/apps/ticketing/src/utils/common.ts b/apps/ticketing/src/utils/common.ts deleted file mode 100644 index 9325dbf..0000000 --- a/apps/ticketing/src/utils/common.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { NETWORK_ID } from './config'; - -// Matches with optional protocol and URL with one dot -export const urlRegex = /(?:(?:https?:\/\/)?[\w.-]*\.[\w]{2,3})/; - -export const CLOUDFLARE_IPFS = 'https://cloudflare-ipfs.com/ipfs'; - -export const DROP_TYPE = { - TOKEN: 'TOKEN', - TICKET: 'TICKET', - EVENT: 'EVENT', - TRIAL: 'TRIAL', - NFT: 'NFT', - SIMPLE: 'SIMPLE', - OTHER: 'OTHER', -} as const; - -type DROP_TYPE_KEYS = keyof typeof DROP_TYPE; -export type DROP_TYPES = (typeof DROP_TYPE)[DROP_TYPE_KEYS]; - -export const PURCHASED_LOCAL_STORAGE_PREFIX = 'TICKETS_PURCHASED'; -export const MASTER_KEY = 'MASTER_KEY'; -export const WORKER_BASE_URL = 'https://keypom-nft-storage.keypom.workers.dev/'; -export const EVENTS_WORKER_IPFS_PINNING = - NETWORK_ID === 'mainnet' - ? 'https://stripe-worker-production.keypom.workers.dev/ipfs-pin' - : 'https://stripe-worker.keypom.workers-dev.dev/ipfs-pin'; -export const EVENTS_WORKER_BASE = - process.env.REACT_APP_NETWORK_ID === 'mainnet' - ? 'https://stripe-worker-production.keypom.workers.dev' - : 'https://stripe-worker-template.keypom.workers.dev'; -export const EMAIL_WORKER_BASE = 'https://email-worker.keypom.workers.dev'; - -export const KEYPOM_GLOBAL_SIGNING_KEYS = [ - 'ed25519:3SoKRJxQj29Kczj6TiMNNxq3c6S3WcA4MUb6oBEcHMEDyhLWxzJyWxXn69sKt3RKCs8akb5KHkNvjdq4mJLYCYGA', - 'ed25519:36s6Po4JAJVhQdZLmXx8gJh4HP6T4AtMYJb5UgWhiYLntxpTX5piAc2pGExdUYrFJujYi18ZevU1z52CRkL6kpLF', - 'ed25519:3c4EMC5d2DEvXjHxQZN7ef7pj8FDK7B9y4QfuvossLSBwntPorYsqxbyuh4vAqTEr397Dgabxjz1RTe9p4CiKs8C', - 'ed25519:5bx66kw3oPfa3vNXe2hXKcN6M5jqMJyC5WHAx8hFzDG4j68QXu8E4wdkaY1H1SvUzbdkxGpyio5Gxmfx8SrBjrg3', - 'ed25519:5JiAyefRbZsy8Yc4gBMJRJpsTFekxYCtvnZgBJUtQzqmRhX6VVB8ZwAnYcy3rdzquN5WPSrw9fUuwhD612L5RqzA', - 'ed25519:oNpuBdJY4HSGZhi1oSEeUWxErdSTjzLmJdx5erMDrV9hzrGVE8peAjRb2QVY4aP81ctf96YpWe419Fr2wqrc7mG', - 'ed25519:nzf775uk2hBRoZXk41kXMqLRofKK2E5qGi3jUjfQnKZvq22f7qhkzCyhenxuRqQMac4tFgGcSsogmFCmimNWkq5', - 'ed25519:2DwsKo8ZwVotcTtTLLRwx6iHamgxG9qFHo6T5G6udMQMyLNxeqo2oy3Z7UFwFJc5ztdqGCc3b4SidJUDcAhkF7V8', - 'ed25519:3PjnkrRdAmWEfoKBkdSXXfGs6AWB6rTG5Sva9EEJBAnAKnkbNwk5VsXPx43zFmKJJhfHwzgFM76FVGqmZQjh6wWh', - 'ed25519:2nP3KsnqWb96k6HKNXHiyumtGH6pmoBLvVqUAbNBAQFMBzTjho3Nw7Yo5fwDMZFwgPeaEeYMcGCqkmX1eoL8Abw1', -]; - -export const MIN_NEAR_SELL = 0.1; - -const MAINNET_KEYPOM_CONTRACT_ID = 'v2.keypom.near'; - -const TESTNET_KEYPOM_CONTRACT_ID = 'v2.keypom.testnet'; -export const KEYPOM_CONTRACT_ID = NETWORK_ID === 'mainnet' ? MAINNET_KEYPOM_CONTRACT_ID : TESTNET_KEYPOM_CONTRACT_ID; - -const MAINNET_KEYPOM_EVENTS_CONTRACT_ID = 'ticketing-v1.keypom.near'; -const TESTNET_KEYPOM_EVENTS_CONTRACT_ID = '1717013187496-kp-ticketing.testnet'; -export const KEYPOM_EVENTS_CONTRACT_ID = - NETWORK_ID === 'mainnet' ? MAINNET_KEYPOM_EVENTS_CONTRACT_ID : TESTNET_KEYPOM_EVENTS_CONTRACT_ID; - -const MAINNET_KEYPOM_MARKETPLACE_CONTRACT_ID = 'marketplace-v1.keypom.near'; -const TESTNET_KEYPOM_MARKETPLACE_CONTRACT_ID = '1717013187496-marketplace.testnet'; -export const KEYPOM_MARKETPLACE_CONTRACT_ID = - NETWORK_ID === 'mainnet' ? MAINNET_KEYPOM_MARKETPLACE_CONTRACT_ID : TESTNET_KEYPOM_MARKETPLACE_CONTRACT_ID; diff --git a/apps/ticketing/src/utils/config.ts b/apps/ticketing/src/utils/config.ts index 1f28d3f..049cbb4 100644 --- a/apps/ticketing/src/utils/config.ts +++ b/apps/ticketing/src/utils/config.ts @@ -4,5 +4,12 @@ export const APPLE_WALLET_CERTIFICATE_PASSWORD = process.env.APPLE_WALLET_CERTIF export const APPLE_WALLET_CERTIFICATE_PEM = process.env.PASS_COM_PAGODA_TICKETING_PEM; export const HOSTNAME = process.env.NEXT_PUBLIC_HOSTNAME || 'http://localhost:3000'; export const NETWORK_ID: NetworkId = (process.env.NEXT_PUBLIC_NETWORK_ID as NetworkId) || 'testnet'; -export const NETWORK_NODE_URL = - NETWORK_ID === 'mainnet' ? 'https://rpc.mainnet.near.org' : 'https://rpc.testnet.near.org'; +export const NETWORK_NODE_URL = process.env.NEXT_PUBLIC_NETWORK_NODE_URL || 'https://rpc.testnet.near.org'; +export const EVENTS_WORKER_BASE = + process.env.NEXT_PUBLIC_EVENTS_WORKER_BASE || 'https://stripe-worker-template.keypom.workers.dev'; +export const KEYPOM_CONTRACT_ID = process.env.NEXT_PUBLIC_KEYPOM_CONTRACT_ID || 'v2.keypom.testnet'; +export const KEYPOM_EVENTS_CONTRACT_ID = + process.env.NEXT_PUBLIC_KEYPOM_EVENTS_CONTRACT_ID || '1717013187496-kp-ticketing.testnet'; +export const KEYPOM_MARKETPLACE_CONTRACT_ID = + process.env.NEXT_PUBLIC_KEYPOM_MARKETPLACE_CONTRACT_ID || '1717013187496-marketplace.testnet'; +export const CLOUDFLARE_IPFS = process.env.NEXT_PUBLIC_CLOUDFLARE_IPFS || 'https://cloudflare-ipfs.com/ipfs'; diff --git a/apps/ticketing/src/utils/helpers.ts b/apps/ticketing/src/utils/helpers.ts index 66e0ee0..bc1cc2e 100644 --- a/apps/ticketing/src/utils/helpers.ts +++ b/apps/ticketing/src/utils/helpers.ts @@ -2,9 +2,8 @@ import { type Action } from '@near-wallet-selector/core'; import { utils } from 'near-api-js'; import { parseNearAmount } from 'near-api-js/lib/utils/format'; -import { KEYPOM_MARKETPLACE_CONTRACT_ID } from './common'; +import { KEYPOM_MARKETPLACE_CONTRACT_ID } from './config'; import { getByteSize } from './crypto-helpers'; -import { localStorageGet } from './local-storage'; export interface DateAndTimeInfo { startDate: number; // Milliseconds from Unix Epoch @@ -232,11 +231,6 @@ function arrayBufferToBase64(buffer: any) { export const estimateCosts = ({ formData }: { formData: FormSchema }) => { const eventId = Date.now().toString(); - const masterKey = localStorageGet('MASTER_KEY') ?? ''; - if (!masterKey) { - console.warn('Missing local storage value MASTER_KEY inside createPayload()'); - } - const eventMetadata: FunderEventMetadata = { name: formData.name, dateCreated: Date.now().toString(), @@ -293,11 +287,6 @@ export const createPayload = async ({ eventId: string; stripeAccountId: string; }): Promise<{ actions: Action[]; dropIds: string[] }> => { - const masterKey = localStorageGet('MASTER_KEY') ?? ''; - if (!masterKey) { - console.warn('Missing local storage value MASTER_KEY inside createPayload()'); - } - const funderMetadata: FunderMetadata = {}; const eventMetadata: FunderEventMetadata = { @@ -313,26 +302,9 @@ export const createPayload = async ({ }, artwork: eventArtworkCid, sellable: formData.sellable, - // questions: formData.questions.map((question: { question: any; isRequired: any; }) => ({ - // question: question.question, - // required: question.isRequired || false, - // })), id: eventId.toString(), }; - // if (formData.questions.length > 0) { - // const { publicKey, privateKey } = await generateKeyPair(); - // const saltBytes = window.crypto.getRandomValues(new Uint8Array(16)); - // const saltBase64 = uint8ArrayToBase64(saltBytes); - // const symmetricKey = await deriveKeyFromPassword(masterKey, saltBase64); - // const { encryptedPrivateKeyBase64, ivBase64 } = await encryptPrivateKey(privateKey, symmetricKey); - - // eventMetadata.pubKey = await exportPublicKeyToBase64(publicKey); - // eventMetadata.encPrivKey = encryptedPrivateKeyBase64; - // eventMetadata.iv = ivBase64; - // eventMetadata.salt = saltBase64; - // } - funderMetadata[eventId] = eventMetadata; const drop_ids: string[] = []; @@ -356,7 +328,6 @@ export const createPayload = async ({ const ticketExtra: TicketMetadataExtra = { dateCreated: Date.now().toString(), - // price: parseNearAmount(ticket.price)!.toString(), priceNear: ticket.priceNear, priceFiat: ticket.priceFiat, salesValidThrough: ticket.salesValidThrough, @@ -378,9 +349,6 @@ export const createPayload = async ({ price: parseNearAmount(ticket.priceNear || '0')!.toString(), sale_start: Date.now() || undefined, sale_end: Date.parse(formData.date) || undefined, - // ------------ pattern for allowing start and end sales date individually for each ticket - // sale_start: ticket.salesValidThrough.startDate || undefined, - // sale_end: ticket.salesValidThrough.endDate || undefined, }; const dropConfig = { diff --git a/apps/ticketing/src/utils/local-storage.ts b/apps/ticketing/src/utils/local-storage.ts deleted file mode 100644 index 09cfba8..0000000 --- a/apps/ticketing/src/utils/local-storage.ts +++ /dev/null @@ -1,13 +0,0 @@ -export function localStorageGet(key: string) { - const value = localStorage.getItem(key); - if (value !== null) { - if (!/\{|\[/.test(value?.charAt(0))) { - return value as T; - } - try { - return JSON.parse(value) as T; - } catch (e) { - console.error(e); - } - } -} diff --git a/apps/ticketing/src/utils/purchase.ts b/apps/ticketing/src/utils/purchase.ts index 40ffed8..5763065 100644 --- a/apps/ticketing/src/utils/purchase.ts +++ b/apps/ticketing/src/utils/purchase.ts @@ -2,10 +2,9 @@ import assert from 'assert'; import { Account } from 'near-api-js'; import { DropsByEventId } from '@/hooks/useDrops'; -import { KEYPOM_MARKETPLACE_CONTRACT_ID } from '@/utils/common'; import { botCheck } from './bot-check'; -import { EVENTS_WORKER_BASE } from './common'; +import { CLOUDFLARE_IPFS, EVENTS_WORKER_BASE, KEYPOM_MARKETPLACE_CONTRACT_ID } from './config'; import { FunderEventMetadata } from './helpers'; type PurchaseWorkerPayload = { @@ -89,10 +88,8 @@ export async function purchaseTickets({ //const publicKey = await base64ToPublicKey(publicKeyBase64); //const buyerAnswers = await encryptWithPublicKey(JSON.stringify({ questions: {} }), publicKey); // TODO: Eventually support questions in our UI and record answers here - const eventImageUrl = event.artwork ? `https://cloudflare-ipfs.com/ipfs/${event.artwork}` : ''; - const ticketImageUrl = drop.ticket.artwork - ? `https://cloudflare-ipfs.com/ipfs/${drop.ticket.artwork}` - : eventImageUrl ?? ''; + const eventImageUrl = event.artwork ? `${CLOUDFLARE_IPFS}/${event.artwork}` : ''; + const ticketImageUrl = drop.ticket.artwork ? `${CLOUDFLARE_IPFS}/${drop.ticket.artwork}` : eventImageUrl ?? ''; const workerPayload: PurchaseWorkerPayload = { name: null, @@ -142,8 +139,8 @@ export async function purchaseTickets({ data.tickets.forEach((t) => purchases.push({ secretKey: t.secret_key })); } else { /* - TODO: We'll need to think through how we redirect to Stripe after exiting this loop. - We need to make sure any and all free tickets are handled first before redirecting + TODO: We'll need to think through how we redirect to Stripe after exiting this loop. + We need to make sure any and all free tickets are handled first before redirecting to Stripe. */ console.error(response); diff --git a/apps/ticketing/src/utils/rpc.ts b/apps/ticketing/src/utils/rpc.ts index 7c7ebb8..57d8695 100644 --- a/apps/ticketing/src/utils/rpc.ts +++ b/apps/ticketing/src/utils/rpc.ts @@ -1,5 +1,4 @@ -import { KEYPOM_EVENTS_CONTRACT_ID } from './common'; -import { NETWORK_NODE_URL } from './config'; +import { KEYPOM_EVENTS_CONTRACT_ID, NETWORK_NODE_URL } from './config'; import { FunderEventMetadata } from './helpers'; function encodeJsonRpcArgs(args: Record) {