From ee11c451394627ff719ba32ed1eddacc9c7413a2 Mon Sep 17 00:00:00 2001 From: Nicolas Mahe Date: Mon, 27 Jan 2025 16:46:51 +0700 Subject: [PATCH] remove notification webhook and send of email --- emails/AccountCreatedReferral.ts | 29 ----- emails/BidAccepted.ts | 47 ------- emails/BidCreated.ts | 52 -------- emails/BidExpired.ts | 46 ------- emails/OfferExpired.ts | 29 ----- emails/OfferPurchased.ts | 42 ------- package-lock.json | 204 +------------------------------ package.json | 3 - pages/api/notification.ts | 69 ----------- 9 files changed, 2 insertions(+), 519 deletions(-) delete mode 100644 emails/AccountCreatedReferral.ts delete mode 100644 emails/BidAccepted.ts delete mode 100644 emails/BidCreated.ts delete mode 100644 emails/BidExpired.ts delete mode 100644 emails/OfferExpired.ts delete mode 100644 emails/OfferPurchased.ts delete mode 100644 pages/api/notification.ts diff --git a/emails/AccountCreatedReferral.ts b/emails/AccountCreatedReferral.ts deleted file mode 100644 index 32d8c978..00000000 --- a/emails/AccountCreatedReferral.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Events } from '@nft/webhook' -import invariant from 'ts-invariant' - -export default function AccountCreatedReferral({ - address, - username, - referrer, -}: Events['ACCOUNT_CREATED']): { - html: string - subject: string - to: string -} | null { - invariant(process.env.NEXT_PUBLIC_BASE_URL) - if (!referrer?.email) return null - return { - to: referrer.email, - subject: `${ - username || address - } successfully registered with your referral link`, - html: `Hi ${referrer.username || referrer.address},
-
-We are pleased to let you know that ${ - username || address - } successfully registered on ${ - process.env.NEXT_PUBLIC_BASE_URL - } with your referral link.
-
`, - } -} diff --git a/emails/BidAccepted.ts b/emails/BidAccepted.ts deleted file mode 100644 index c81226f1..00000000 --- a/emails/BidAccepted.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber' -import { formatUnits } from '@ethersproject/units' -import { Events } from '@nft/webhook' -import invariant from 'ts-invariant' - -export default function BidAccepted({ - unitPrice, - currency, - quantity, - buyer, - seller, - offer: { asset, type }, -}: Events['TRADE_CREATED']): { - html: string - subject: string - to: string -} | null { - invariant(process.env.NEXT_PUBLIC_BASE_URL) - if (type !== 'BUY') return null - if (!buyer?.email) return null - return { - to: buyer.email, - subject: `Your bid for ${quantity} edition${ - BigNumber.from(quantity).gt(1) ? 's' : '' - } of ${asset.name} for ${formatUnits(unitPrice, currency.decimals)} ${ - currency.symbol - }${BigNumber.from(quantity).gt(1) ? ' each' : ''} has been accepted`, - html: `Hi ${buyer.username || buyer.address},
-
- We are pleased to let you know that your bid for ${quantity} edition${ - BigNumber.from(quantity).gt(1) ? 's' : '' - } of the NFT ${asset.name} for ${formatUnits( - unitPrice, - currency.decimals, - )} ${currency.symbol}${ - BigNumber.from(quantity).gt(1) ? ' each' : '' - } has been accepted by ${ - seller.username || seller.address - }.
-
- The NFT ownership has been transferred. No additional actions are required on your side.
-
- View my NFT
`, - } -} diff --git a/emails/BidCreated.ts b/emails/BidCreated.ts deleted file mode 100644 index 9ac6c016..00000000 --- a/emails/BidCreated.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber' -import { formatUnits } from '@ethersproject/units' -import { Events } from '@nft/webhook' -import invariant from 'ts-invariant' -import { formatDate } from '../utils' - -export default function BidCreated({ - asset, - maker, - taker, - unitPrice, - currency, - quantity, - expiredAt, -}: Events['BID_CREATED']): { - html: string - subject: string - to: string -} | null { - invariant(process.env.NEXT_PUBLIC_BASE_URL) - if (!taker?.email) return null - return { - to: taker.email, - subject: `New bid received for ${quantity} edition${ - BigNumber.from(quantity).gt(1) ? 's' : '' - } of ${asset.name} for ${formatUnits(unitPrice, currency.decimals)} ${ - currency.symbol - }${BigNumber.from(quantity).gt(1) ? ' each' : ''}`, - html: `Hi ${taker.username || taker.address},
-
- We are pleased to let you know that you have received a new bid from ${ - maker.username || maker.address - } for ${quantity} edition${ - BigNumber.from(quantity).gt(1) ? 's' : '' - } of your NFT ${asset.name} for ${formatUnits( - unitPrice, - currency.decimals, - )} ${currency.symbol}${ - BigNumber.from(quantity).gt(1) ? ' each' : '' - }.
-
- You have until the ${formatDate( - expiredAt, - )} to accept it. After that the bid will be expired.
-
- To do so just click the link below that will redirect you to it.
-
- Go to the NFT page
`, - } -} diff --git a/emails/BidExpired.ts b/emails/BidExpired.ts deleted file mode 100644 index 21385d6e..00000000 --- a/emails/BidExpired.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber' -import { formatUnits } from '@ethersproject/units' -import { Events } from '@nft/webhook' -import invariant from 'ts-invariant' - -export default function BidExpired({ - asset, - maker, - unitPrice, - currency, - quantity, -}: Events['BID_EXPIRED']): { - html: string - subject: string - to: string -} | null { - invariant(process.env.NEXT_PUBLIC_BASE_URL) - const amount = BigNumber.from(quantity).mul(unitPrice) - if (!maker?.email) return null - return { - to: maker.email, - subject: `Your bid for ${quantity} edition${ - BigNumber.from(quantity).gt(1) ? 's' : '' - } of ${asset.name} for ${formatUnits(unitPrice, currency.decimals)} ${ - currency.symbol - }${ - BigNumber.from(quantity).gt(1) ? ' each' : '' - } has met the expiration date`, - html: `Hi ${maker.username || maker.address},
-
- Your bid for ${quantity} edition${ - BigNumber.from(quantity).gt(1) ? 's' : '' - } of the NFT ${asset.name} for ${formatUnits( - amount, - currency.decimals, - )} ${currency.symbol}${ - BigNumber.from(quantity).gt(1) ? ' each' : '' - } has met the expiration date. The bid has been canceled.
-
- You can place a new bid for this NFT at anytime. To do so just click the link below that will redirect you to it.
-
- Place a new bid
`, - } -} diff --git a/emails/OfferExpired.ts b/emails/OfferExpired.ts deleted file mode 100644 index cd932962..00000000 --- a/emails/OfferExpired.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Events } from '@nft/webhook' -import invariant from 'ts-invariant' - -export default function OfferExpired({ - asset, - maker, -}: Events['OFFER_EXPIRED']): { - html: string - subject: string - to: string -} | null { - invariant(process.env.NEXT_PUBLIC_BASE_URL) - if (!maker?.email) return null - return { - to: maker.email, - subject: `The expiration date has been met for your sale on ${asset.name}`, - html: `Hi ${maker.username || maker.address},
-
- The expiration date has been met for ${ - asset.name - }. The sale has been canceled.
-
- You can create a new sale for this NFT at anytime. To do so just click the link below that will redirect you to it.
-
- Create a new sale
`, - } -} diff --git a/emails/OfferPurchased.ts b/emails/OfferPurchased.ts deleted file mode 100644 index d7e52dbf..00000000 --- a/emails/OfferPurchased.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber' -import { formatUnits } from '@ethersproject/units' -import { Events } from '@nft/webhook' -import invariant from 'ts-invariant' - -export default function OfferPurchased({ - unitPrice, - currency, - quantity, - buyer, - seller, - offer: { asset, type }, -}: Events['TRADE_CREATED']): { - html: string - subject: string - to: string -} | null { - invariant(process.env.NEXT_PUBLIC_BASE_URL) - if (type !== 'SALE') return null - if (!seller?.email) return null - return { - to: seller.email, - subject: `You sold ${quantity} edition${ - BigNumber.from(quantity).gt(1) ? 's' : '' - } of ${asset.name}`, - html: `Hi ${seller.username || seller.address},
-
- We are pleased to let you know that you have sold ${quantity} edition${ - BigNumber.from(quantity).gt(1) ? 's' : '' - } of your NFT ${asset.name} to ${ - buyer?.username || buyer.address - } for ${formatUnits(unitPrice, currency.decimals)} ${ - currency.symbol - }${BigNumber.from(quantity).gt(1) ? ' each' : ''}.
-
- No additional actions are required on your side. The NFT ownership has been transferred and your wallet has been credited with the funds.
-
- Check my wallet balance`, - } -} diff --git a/package-lock.json b/package-lock.json index 52b9e0f3..711863ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "starter-kit", - "version": "2.1.1", + "version": "3.6.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "starter-kit", - "version": "2.1.1", + "version": "3.6.1", "dependencies": { "@apollo/client": "^3.8.9", "@bugsnag/js": "^7.22.3", @@ -19,7 +19,6 @@ "@magiclabs/wagmi-connector": "^1.1.6", "@metamask/jazzicon": "^2.0.0", "@nft/chat": "^0.2.0", - "@nft/webhook": "^1.0.0-beta.51", "@rainbow-me/rainbowkit": "^1.3.3", "@react-icons/all-files": "^4.1.0", "@uiw/react-markdown-preview": "^5.0.7", @@ -33,7 +32,6 @@ "next-remove-imports": "^1.0.12", "next-translate": "^2.6.2", "nextjs-google-analytics": "^2.3.3", - "nodemailer": "^6.9.8", "nprogress": "^0.2.0", "numbro": "^2.4.0", "react": "^18.2.0", @@ -54,7 +52,6 @@ "@graphql-eslint/eslint-plugin": "^3.20.1", "@next/bundle-analyzer": "^14.0.4", "@nft/api-graphql": "^1.0.0-beta.60", - "@types/nodemailer": "^6.4.14", "@types/nprogress": "^0.2.3", "@types/react": "^18.2.48", "@types/react-linkify": "^1.0.4", @@ -6551,26 +6548,6 @@ "react-dom": ">=17" } }, - "node_modules/@nft/webhook": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@nft/webhook/-/webhook-1.0.0-beta.51.tgz", - "integrity": "sha512-gX9Rj+wBga2uGQ6yfY3ZcHu0dh5VSVMcfUcfZg5ObkeupJSvLBB7R42dY4DKz0CzfQVMtNnsu1J03gnmE8VCMQ==", - "dependencies": { - "raw-body": "^2.5.1", - "ts-invariant": "^0.9.4" - } - }, - "node_modules/@nft/webhook/node_modules/ts-invariant": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.9.4.tgz", - "integrity": "sha512-63jtX/ZSwnUNi/WhXjnK8kz4cHHpYS60AnmA6ixz17l7E12a5puCWFlNpkne5Rl0J8TBPVHpGjsj4fxs8ObVLQ==", - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@noble/curves": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", @@ -7637,15 +7614,6 @@ "undici-types": "~5.26.4" } }, - "node_modules/@types/nodemailer": { - "version": "6.4.14", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.14.tgz", - "integrity": "sha512-fUWthHO9k9DSdPCSPRqcu6TWhYyxTBg382vlNIttSe9M7XfsT06y0f24KHXtbnijPGGRIcVvdKHTNikOI6qiHA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", @@ -9867,14 +9835,6 @@ "node": ">=0.10.0" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", @@ -10925,14 +10885,6 @@ "node": ">=0.10" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -13566,21 +13518,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/http-https": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", @@ -16504,14 +16441,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, - "node_modules/nodemailer": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.8.tgz", - "integrity": "sha512-cfrYUk16e67Ks051i4CntM9kshRYei1/o/Gi8K1d+R34OIs21xdFnW7Pt7EucmVKA0LKtqUGNcjMZ7ehjl49mQ==", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -17584,20 +17513,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -18818,11 +18733,6 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -19183,14 +19093,6 @@ "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/std-env": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", @@ -19710,14 +19612,6 @@ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/totalist": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", @@ -20339,14 +20233,6 @@ "node": ">=0.10.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/unstorage": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.10.1.tgz", @@ -26351,25 +26237,6 @@ "react-emoji-render": "^1.2.4" } }, - "@nft/webhook": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@nft/webhook/-/webhook-1.0.0-beta.51.tgz", - "integrity": "sha512-gX9Rj+wBga2uGQ6yfY3ZcHu0dh5VSVMcfUcfZg5ObkeupJSvLBB7R42dY4DKz0CzfQVMtNnsu1J03gnmE8VCMQ==", - "requires": { - "raw-body": "^2.5.1", - "ts-invariant": "^0.9.4" - }, - "dependencies": { - "ts-invariant": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.9.4.tgz", - "integrity": "sha512-63jtX/ZSwnUNi/WhXjnK8kz4cHHpYS60AnmA6ixz17l7E12a5puCWFlNpkne5Rl0J8TBPVHpGjsj4fxs8ObVLQ==", - "requires": { - "tslib": "^2.1.0" - } - } - } - }, "@noble/curves": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", @@ -27137,15 +27004,6 @@ "undici-types": "~5.26.4" } }, - "@types/nodemailer": { - "version": "6.4.14", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.14.tgz", - "integrity": "sha512-fUWthHO9k9DSdPCSPRqcu6TWhYyxTBg382vlNIttSe9M7XfsT06y0f24KHXtbnijPGGRIcVvdKHTNikOI6qiHA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", @@ -28963,11 +28821,6 @@ "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==" }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, "call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", @@ -29735,11 +29588,6 @@ "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, "dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -31760,18 +31608,6 @@ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==" }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, "http-https": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", @@ -33819,11 +33655,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, - "nodemailer": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.8.tgz", - "integrity": "sha512-cfrYUk16e67Ks051i4CntM9kshRYei1/o/Gi8K1d+R34OIs21xdFnW7Pt7EucmVKA0LKtqUGNcjMZ7ehjl49mQ==" - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -34618,17 +34449,6 @@ "safe-buffer": "^5.1.0" } }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -35490,11 +35310,6 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -35781,11 +35596,6 @@ "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, "std-env": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", @@ -36159,11 +35969,6 @@ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, "totalist": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", @@ -36618,11 +36423,6 @@ "normalize-path": "^2.1.1" } }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, "unstorage": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.10.1.tgz", diff --git a/package.json b/package.json index 2e9c5237..91e3c673 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "@magiclabs/wagmi-connector": "^1.1.6", "@metamask/jazzicon": "^2.0.0", "@nft/chat": "^0.2.0", - "@nft/webhook": "^1.0.0-beta.51", "@rainbow-me/rainbowkit": "^1.3.3", "@react-icons/all-files": "^4.1.0", "@uiw/react-markdown-preview": "^5.0.7", @@ -41,7 +40,6 @@ "next-remove-imports": "^1.0.12", "next-translate": "^2.6.2", "nextjs-google-analytics": "^2.3.3", - "nodemailer": "^6.9.8", "nprogress": "^0.2.0", "numbro": "^2.4.0", "react": "^18.2.0", @@ -62,7 +60,6 @@ "@graphql-eslint/eslint-plugin": "^3.20.1", "@next/bundle-analyzer": "^14.0.4", "@nft/api-graphql": "^1.0.0-beta.60", - "@types/nodemailer": "^6.4.14", "@types/nprogress": "^0.2.3", "@types/react": "^18.2.48", "@types/react-linkify": "^1.0.4", diff --git a/pages/api/notification.ts b/pages/api/notification.ts deleted file mode 100644 index 4637b165..00000000 --- a/pages/api/notification.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Events, parseAndVerifyRequest } from '@nft/webhook' -import { NextApiRequest, NextApiResponse } from 'next' -import nodemailer, { SendMailOptions } from 'nodemailer' -import invariant from 'ts-invariant' -import AccountCreatedReferral from '../../emails/AccountCreatedReferral' -import BidAccepted from '../../emails/BidAccepted' -import BidCreated from '../../emails/BidCreated' -import BidExpired from '../../emails/BidExpired' -import OfferExpired from '../../emails/OfferExpired' -import OfferPurchased from '../../emails/OfferPurchased' - -invariant(process.env.EMAIL_HOST, 'env EMAIL_HOST is required') -invariant(process.env.EMAIL_PORT, 'env EMAIL_PORT is required') -invariant(process.env.EMAIL_USERNAME, 'env EMAIL_USERNAME is required') -invariant(process.env.EMAIL_PASSWORD, 'env EMAIL_PASSWORD is required') -invariant( - process.env.LITEFLOW_WEBHOOK_SECRET, - 'env LITEFLOW_WEBHOOK_SECRET is required', -) -const liteflowSecret = process.env.LITEFLOW_WEBHOOK_SECRET - -const transporter = nodemailer.createTransport({ - host: process.env.EMAIL_HOST, - port: Number(process.env.EMAIL_PORT), - auth: { - user: process.env.EMAIL_USERNAME, - pass: process.env.EMAIL_PASSWORD, - }, -}) - -const emails = new Map SendMailOptions | null)[]>( - [ - ['BID_CREATED', [BidCreated]], - ['OFFER_CREATED', []], - ['BID_EXPIRED', [BidExpired]], - ['OFFER_EXPIRED', [OfferExpired]], - ['TRADE_CREATED', [BidAccepted, OfferPurchased]], - ['ACCOUNT_CREATED', [AccountCreatedReferral]], - ], -) - -export default async function notification( - req: NextApiRequest, - res: NextApiResponse, -): Promise { - const { data, type } = await parseAndVerifyRequest(req, liteflowSecret) - const emailTemplates = emails.get(type) - if (!emailTemplates) - throw new Error(`Email template for event ${type} does not exist`) - await Promise.all( - emailTemplates - .map((template) => template(data)) - .filter(Boolean) - .map((email) => - transporter.sendMail({ - ...email, - from: process.env.EMAIL_FROM, - }), - ), - ) - - res.status(200).end() -} - -export const config = { - api: { - bodyParser: false, - }, -}