├── .gitignore
├── README.md
├── components
└── Paystack.tsx
├── lib
├── index.html
└── script.js
├── next-env.d.ts
├── next.config.js
├── package.json
├── pages
├── _app.tsx
├── api
│ └── verify
│ │ └── [reference].ts
└── index.tsx
├── public
├── ads.txt
├── favicon.ico
├── logo192.png
├── logo512.png
└── manifest.json
├── sass
├── App.scss
└── _base.scss
├── tsconfig.json
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env
29 | .env.local
30 | .env.development.local
31 | .env.test.local
32 | .env.production.local
33 |
34 | # vercel
35 | .vercel
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Paystack
2 |
3 | Paystack functionality demo in Next.js with TypeScript.
4 |
--------------------------------------------------------------------------------
/components/Paystack.tsx:
--------------------------------------------------------------------------------
1 | import { FormEventHandler, useEffect, useState } from "react";
2 | import { PaystackButton } from "react-paystack";
3 | import { PaystackProps } from "react-paystack/dist/types";
4 |
5 | type referenceObj = {
6 | message: string;
7 | reference: string;
8 | status: "sucess" | "failure";
9 | trans: string;
10 | transaction: string;
11 | trxref: string;
12 | };
13 |
14 | const Paystack: React.FC = (): JSX.Element => {
15 | const [ref, setRef] = useState("");
16 | const [email, setEmail] = useState("");
17 | const [amount, setAmount] = useState(0);
18 | const [name, setName] = useState("");
19 | const [surname, setSurname] = useState("");
20 | const [success, setSuccess] = useState(false);
21 |
22 | useEffect(() => {
23 | setSuccess(false);
24 | setRef("" + Math.floor(Math.random() * 1000000000 + 1));
25 | }, [success]);
26 |
27 | const config: PaystackProps = {
28 | reference: ref,
29 | email: email,
30 | firstname: name,
31 | lastname: surname,
32 | label: name + " " + surname,
33 | amount: (amount * 100) | 0,
34 | publicKey: process.env.PAYSTACK_PUBLIC_TEST_KEY as string,
35 | currency: "ZAR",
36 | };
37 |
38 |
39 |
40 | const onSuccess = async (reference: referenceObj) => {
41 | const res = await fetch(`/api/verify/${reference.reference}`);
42 | const verifyData = await res.json();
43 |
44 | if (verifyData.data.status === "success") {
45 | setSuccess(true);
46 | setEmail("");
47 | setAmount(0);
48 | setName("");
49 | setSurname("");
50 | }
51 | };
52 |
53 | const onClose = () => {
54 | alert("Payment cancelled.");
55 | };
56 |
57 | const componentProps = {
58 | ...config,
59 | text: `Pay R${amount | 0}`,
60 | // onSuccess,
61 | onClose
62 | };
63 |
64 |
65 |
66 | return (
67 |
111 | );
112 | };
113 |
114 | export default Paystack;
115 |
--------------------------------------------------------------------------------
/lib/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Paystack
8 |
9 |
10 |
11 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/lib/script.js:
--------------------------------------------------------------------------------
1 | const paymentForm = document.getElementById("paymentForm");
2 | paymentForm.addEventListener("submit", payWithPaystack, false);
3 | function payWithPaystack(e) {
4 | e.preventDefault();
5 | let handler = PaystackPop.setup({
6 | key: process.env.PAYSTACK_PUBLIC_KEY, // Replace with your public key
7 | email: document.getElementById("email-address").value,
8 | amount: document.getElementById("amount").value * 100,
9 | currency: "ZAR",
10 | ref: "" + Math.floor(Math.random() * 1000000000 + 1), // generates a pseudo-unique reference. Please replace with a reference you generated. Or remove the line entirely so our API will generate one for you
11 | // label: "Optional string that replaces customer email"
12 | onClose: function () {
13 | alert("Window closed.");
14 | },
15 | callback: function (response) {
16 | let message = "Payment complete! Reference: " + response.reference;
17 | alert(message);
18 | },
19 | });
20 | handler.openIframe();
21 | }
22 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | PAYSTACK_PUBLIC_TEST_KEY: process.env.PAYSTACK_PUBLIC_TEST_KEY,
4 | PAYSTACK_SECRET_TEST_KEY: process.env.PAYSTACK_SECRET_TEST_KEY,
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "paystack",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start"
9 | },
10 | "dependencies": {
11 | "next": "latest",
12 | "node-fetch": "latest",
13 | "react": "latest",
14 | "react-dom": "latest",
15 | "react-paystack": "latest"
16 | },
17 | "devDependencies": {
18 | "@types/node-fetch": "latest",
19 | "@types/react": "latest",
20 | "sass": "latest",
21 | "typescript": "latest"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/pages/_app.tsx:
--------------------------------------------------------------------------------
1 | import type { AppProps } from "next/app";
2 | import Script from "next/script";
3 |
4 | import "../sass/App.scss";
5 |
6 | function MyApp({ Component, pageProps }: AppProps) {
7 | return (
8 | <>
9 |
10 |
14 | >
15 | );
16 | }
17 | export default MyApp;
18 |
--------------------------------------------------------------------------------
/pages/api/verify/[reference].ts:
--------------------------------------------------------------------------------
1 | import type { NextApiRequest, NextApiResponse } from "next";
2 | import fetch from "node-fetch";
3 |
4 | type Data = {
5 | success: boolean;
6 | data?: Object;
7 | };
8 |
9 | export default async (req: NextApiRequest, resp: NextApiResponse) => {
10 | const {
11 | query: { reference },
12 | } = req;
13 |
14 | try {
15 | const res = await fetch(
16 | `https://api.paystack.co/transaction/verify/${reference}`,
17 | {
18 | method: "GET",
19 | headers: {
20 | Authorization: `Bearer ${process.env.PAYSTACK_SECRET_TEST_KEY}`,
21 | },
22 | }
23 | );
24 | const data:any = await res.json();
25 | resp.status(200).json({ success: true, data: data.data });
26 | } catch (error) {
27 | resp.status(400).json({ success: false });
28 | }
29 | };
30 |
--------------------------------------------------------------------------------
/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import Head from "next/head";
2 |
3 | import Paystack from "../components/Paystack";
4 |
5 | const Home: React.FC = (): JSX.Element => {
6 | return (
7 | <>
8 |
9 | Paystack Playground
10 |
11 |
16 |
17 |
18 |
19 |
20 | >
21 | );
22 | };
23 |
24 | export default Home;
25 |
--------------------------------------------------------------------------------
/public/ads.txt:
--------------------------------------------------------------------------------
1 | google.com, pub-4288512793572771, DIRECT, f08c47fec0942fa0
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TinoMuzambi/Paystack/62c7d0346f5ac02ac44e79752f725821082b9946/public/favicon.ico
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TinoMuzambi/Paystack/62c7d0346f5ac02ac44e79752f725821082b9946/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TinoMuzambi/Paystack/62c7d0346f5ac02ac44e79752f725821082b9946/public/logo512.png
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "Paystack",
3 | "name": "Paystack Functionality Demo.",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/sass/App.scss:
--------------------------------------------------------------------------------
1 | @import "base";
2 |
--------------------------------------------------------------------------------
/sass/_base.scss:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Yanone+Kaffeesatz:wght@200..700&display=swap");
2 |
3 | body {
4 | background: whitesmoke;
5 | display: grid;
6 | place-content: center;
7 | min-height: 100vh;
8 | font-family: "Yanone Kaffeesatz", sans-serif;
9 | font-weight: 100;
10 | font-size: 20px;
11 |
12 | #paymentForm {
13 | display: flex;
14 | flex-direction: column;
15 | gap: 0.5rem;
16 |
17 | .form-group {
18 | display: flex;
19 | align-items: center;
20 | gap: 0.5rem;
21 | justify-content: space-between;
22 | }
23 | input,
24 | button {
25 | font-family: inherit;
26 | font-weight: inherit;
27 | font-size: inherit;
28 | outline: none;
29 | border: none;
30 | padding: 0.5rem 1rem;
31 |
32 | &:hover,
33 | &:focus {
34 | box-shadow: 0 0 0 1px rgba($color: #000000, $alpha: 0.6);
35 | }
36 | }
37 |
38 | button {
39 | cursor: pointer;
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "strict": true,
12 | "forceConsistentCasingInFileNames": true,
13 | "noEmit": true,
14 | "esModuleInterop": true,
15 | "module": "esnext",
16 | "moduleResolution": "node",
17 | "resolveJsonModule": true,
18 | "isolatedModules": true,
19 | "jsx": "preserve",
20 | "incremental": true
21 | },
22 | "include": [
23 | "next-env.d.ts",
24 | "**/*.ts",
25 | "**/*.tsx"
26 | ],
27 | "exclude": [
28 | "node_modules"
29 | ]
30 | }
31 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@next/env@13.4.19":
6 | version "13.4.19"
7 | resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.19.tgz#46905b4e6f62da825b040343cbc233144e9578d3"
8 | integrity sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==
9 |
10 | "@next/swc-darwin-arm64@13.4.19":
11 | version "13.4.19"
12 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz#77ad462b5ced4efdc26cb5a0053968d2c7dac1b6"
13 | integrity sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==
14 |
15 | "@next/swc-darwin-x64@13.4.19":
16 | version "13.4.19"
17 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz#aebe38713a4ce536ee5f2a291673e14b715e633a"
18 | integrity sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==
19 |
20 | "@next/swc-linux-arm64-gnu@13.4.19":
21 | version "13.4.19"
22 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz#ec54db65b587939c7b94f9a84800f003a380f5a6"
23 | integrity sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==
24 |
25 | "@next/swc-linux-arm64-musl@13.4.19":
26 | version "13.4.19"
27 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz#1f5e2c1ea6941e7d530d9f185d5d64be04279d86"
28 | integrity sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==
29 |
30 | "@next/swc-linux-x64-gnu@13.4.19":
31 | version "13.4.19"
32 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz#96b0882492a2f7ffcce747846d3680730f69f4d1"
33 | integrity sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==
34 |
35 | "@next/swc-linux-x64-musl@13.4.19":
36 | version "13.4.19"
37 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz#f276b618afa321d2f7b17c81fc83f429fb0fd9d8"
38 | integrity sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==
39 |
40 | "@next/swc-win32-arm64-msvc@13.4.19":
41 | version "13.4.19"
42 | resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz#1599ae0d401da5ffca0947823dac577697cce577"
43 | integrity sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==
44 |
45 | "@next/swc-win32-ia32-msvc@13.4.19":
46 | version "13.4.19"
47 | resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz#55cdd7da90818f03e4da16d976f0cb22045d16fd"
48 | integrity sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==
49 |
50 | "@next/swc-win32-x64-msvc@13.4.19":
51 | version "13.4.19"
52 | resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz#648f79c4e09279212ac90d871646ae12d80cdfce"
53 | integrity sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==
54 |
55 | "@swc/helpers@0.5.1":
56 | version "0.5.1"
57 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.1.tgz#e9031491aa3f26bfcc974a67f48bd456c8a5357a"
58 | integrity sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==
59 | dependencies:
60 | tslib "^2.4.0"
61 |
62 | "@types/node-fetch@latest":
63 | version "2.6.4"
64 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660"
65 | integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==
66 | dependencies:
67 | "@types/node" "*"
68 | form-data "^3.0.0"
69 |
70 | "@types/node@*":
71 | version "20.5.9"
72 | resolved "https://registry.npmjs.org/@types/node/-/node-20.5.9.tgz"
73 | integrity sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==
74 |
75 | "@types/prop-types@*":
76 | version "15.7.5"
77 | resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz"
78 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
79 |
80 | "@types/react@latest":
81 | version "18.2.21"
82 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.21.tgz#774c37fd01b522d0b91aed04811b58e4e0514ed9"
83 | integrity sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==
84 | dependencies:
85 | "@types/prop-types" "*"
86 | "@types/scheduler" "*"
87 | csstype "^3.0.2"
88 |
89 | "@types/scheduler@*":
90 | version "0.16.3"
91 | resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz"
92 | integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==
93 |
94 | anymatch@~3.1.2:
95 | version "3.1.3"
96 | resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
97 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
98 | dependencies:
99 | normalize-path "^3.0.0"
100 | picomatch "^2.0.4"
101 |
102 | asynckit@^0.4.0:
103 | version "0.4.0"
104 | resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
105 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
106 |
107 | binary-extensions@^2.0.0:
108 | version "2.2.0"
109 | resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
110 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
111 |
112 | braces@~3.0.2:
113 | version "3.0.2"
114 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
115 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
116 | dependencies:
117 | fill-range "^7.0.1"
118 |
119 | busboy@1.6.0:
120 | version "1.6.0"
121 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
122 | integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
123 | dependencies:
124 | streamsearch "^1.1.0"
125 |
126 | caniuse-lite@^1.0.30001406:
127 | version "1.0.30001525"
128 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz#d2e8fdec6116ffa36284ca2c33ef6d53612fe1c8"
129 | integrity sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==
130 |
131 | "chokidar@>=3.0.0 <4.0.0":
132 | version "3.5.3"
133 | resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
134 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
135 | dependencies:
136 | anymatch "~3.1.2"
137 | braces "~3.0.2"
138 | glob-parent "~5.1.2"
139 | is-binary-path "~2.1.0"
140 | is-glob "~4.0.1"
141 | normalize-path "~3.0.0"
142 | readdirp "~3.6.0"
143 | optionalDependencies:
144 | fsevents "~2.3.2"
145 |
146 | client-only@0.0.1:
147 | version "0.0.1"
148 | resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
149 | integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
150 |
151 | combined-stream@^1.0.8:
152 | version "1.0.8"
153 | resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
154 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
155 | dependencies:
156 | delayed-stream "~1.0.0"
157 |
158 | csstype@^3.0.2:
159 | version "3.1.2"
160 | resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz"
161 | integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
162 |
163 | data-uri-to-buffer@^4.0.0:
164 | version "4.0.1"
165 | resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e"
166 | integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==
167 |
168 | delayed-stream@~1.0.0:
169 | version "1.0.0"
170 | resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
171 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
172 |
173 | fetch-blob@^3.1.2, fetch-blob@^3.1.4:
174 | version "3.2.0"
175 | resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9"
176 | integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==
177 | dependencies:
178 | node-domexception "^1.0.0"
179 | web-streams-polyfill "^3.0.3"
180 |
181 | fill-range@^7.0.1:
182 | version "7.0.1"
183 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
184 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
185 | dependencies:
186 | to-regex-range "^5.0.1"
187 |
188 | form-data@^3.0.0:
189 | version "3.0.1"
190 | resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz"
191 | integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
192 | dependencies:
193 | asynckit "^0.4.0"
194 | combined-stream "^1.0.8"
195 | mime-types "^2.1.12"
196 |
197 | formdata-polyfill@^4.0.10:
198 | version "4.0.10"
199 | resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423"
200 | integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==
201 | dependencies:
202 | fetch-blob "^3.1.2"
203 |
204 | fsevents@~2.3.2:
205 | version "2.3.3"
206 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
207 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
208 |
209 | glob-parent@~5.1.2:
210 | version "5.1.2"
211 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
212 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
213 | dependencies:
214 | is-glob "^4.0.1"
215 |
216 | glob-to-regexp@^0.4.1:
217 | version "0.4.1"
218 | resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz"
219 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
220 |
221 | graceful-fs@^4.1.2:
222 | version "4.2.11"
223 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
224 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
225 |
226 | immutable@^4.0.0:
227 | version "4.3.4"
228 | resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz"
229 | integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==
230 |
231 | is-binary-path@~2.1.0:
232 | version "2.1.0"
233 | resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
234 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
235 | dependencies:
236 | binary-extensions "^2.0.0"
237 |
238 | is-extglob@^2.1.1:
239 | version "2.1.1"
240 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
241 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
242 |
243 | is-glob@^4.0.1, is-glob@~4.0.1:
244 | version "4.0.3"
245 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
246 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
247 | dependencies:
248 | is-extglob "^2.1.1"
249 |
250 | is-number@^7.0.0:
251 | version "7.0.0"
252 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
253 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
254 |
255 | "js-tokens@^3.0.0 || ^4.0.0":
256 | version "4.0.0"
257 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
258 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
259 |
260 | loose-envify@^1.1.0:
261 | version "1.4.0"
262 | resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
263 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
264 | dependencies:
265 | js-tokens "^3.0.0 || ^4.0.0"
266 |
267 | mime-db@1.52.0:
268 | version "1.52.0"
269 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
270 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
271 |
272 | mime-types@^2.1.12:
273 | version "2.1.35"
274 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
275 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
276 | dependencies:
277 | mime-db "1.52.0"
278 |
279 | nanoid@^3.3.4:
280 | version "3.3.6"
281 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
282 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
283 |
284 | next@latest:
285 | version "13.4.19"
286 | resolved "https://registry.yarnpkg.com/next/-/next-13.4.19.tgz#2326e02aeedee2c693d4f37b90e4f0ed6882b35f"
287 | integrity sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==
288 | dependencies:
289 | "@next/env" "13.4.19"
290 | "@swc/helpers" "0.5.1"
291 | busboy "1.6.0"
292 | caniuse-lite "^1.0.30001406"
293 | postcss "8.4.14"
294 | styled-jsx "5.1.1"
295 | watchpack "2.4.0"
296 | zod "3.21.4"
297 | optionalDependencies:
298 | "@next/swc-darwin-arm64" "13.4.19"
299 | "@next/swc-darwin-x64" "13.4.19"
300 | "@next/swc-linux-arm64-gnu" "13.4.19"
301 | "@next/swc-linux-arm64-musl" "13.4.19"
302 | "@next/swc-linux-x64-gnu" "13.4.19"
303 | "@next/swc-linux-x64-musl" "13.4.19"
304 | "@next/swc-win32-arm64-msvc" "13.4.19"
305 | "@next/swc-win32-ia32-msvc" "13.4.19"
306 | "@next/swc-win32-x64-msvc" "13.4.19"
307 |
308 | node-domexception@^1.0.0:
309 | version "1.0.0"
310 | resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
311 | integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
312 |
313 | node-fetch@latest:
314 | version "3.3.2"
315 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b"
316 | integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==
317 | dependencies:
318 | data-uri-to-buffer "^4.0.0"
319 | fetch-blob "^3.1.4"
320 | formdata-polyfill "^4.0.10"
321 |
322 | normalize-path@^3.0.0, normalize-path@~3.0.0:
323 | version "3.0.0"
324 | resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
325 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
326 |
327 | picocolors@^1.0.0:
328 | version "1.0.0"
329 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
330 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
331 |
332 | picomatch@^2.0.4, picomatch@^2.2.1:
333 | version "2.3.1"
334 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
335 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
336 |
337 | postcss@8.4.14:
338 | version "8.4.14"
339 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
340 | integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
341 | dependencies:
342 | nanoid "^3.3.4"
343 | picocolors "^1.0.0"
344 | source-map-js "^1.0.2"
345 |
346 | react-dom@latest:
347 | version "18.2.0"
348 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
349 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
350 | dependencies:
351 | loose-envify "^1.1.0"
352 | scheduler "^0.23.0"
353 |
354 | react-paystack@latest:
355 | version "4.0.3"
356 | resolved "https://registry.yarnpkg.com/react-paystack/-/react-paystack-4.0.3.tgz#f4a38966295e990a5bcbf587966083a5f0b5f5ab"
357 | integrity sha512-ruu94Qrvi7QHK1axrHRShUebka68G3UyGIndVFPCjs3rddBOkLiorF6GJ98FW9lq4ov5M4adh4g03F6aOuJmRA==
358 |
359 | react@latest:
360 | version "18.2.0"
361 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
362 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
363 | dependencies:
364 | loose-envify "^1.1.0"
365 |
366 | readdirp@~3.6.0:
367 | version "3.6.0"
368 | resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
369 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
370 | dependencies:
371 | picomatch "^2.2.1"
372 |
373 | sass@latest:
374 | version "1.66.1"
375 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.66.1.tgz#04b51c4671e4650aa393740e66a4e58b44d055b1"
376 | integrity sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==
377 | dependencies:
378 | chokidar ">=3.0.0 <4.0.0"
379 | immutable "^4.0.0"
380 | source-map-js ">=0.6.2 <2.0.0"
381 |
382 | scheduler@^0.23.0:
383 | version "0.23.0"
384 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
385 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
386 | dependencies:
387 | loose-envify "^1.1.0"
388 |
389 | "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
390 | version "1.0.2"
391 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
392 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
393 |
394 | streamsearch@^1.1.0:
395 | version "1.1.0"
396 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
397 | integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
398 |
399 | styled-jsx@5.1.1:
400 | version "5.1.1"
401 | resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f"
402 | integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==
403 | dependencies:
404 | client-only "0.0.1"
405 |
406 | to-regex-range@^5.0.1:
407 | version "5.0.1"
408 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
409 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
410 | dependencies:
411 | is-number "^7.0.0"
412 |
413 | tslib@^2.4.0:
414 | version "2.6.2"
415 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
416 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
417 |
418 | typescript@latest:
419 | version "5.2.2"
420 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
421 | integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
422 |
423 | watchpack@2.4.0:
424 | version "2.4.0"
425 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
426 | integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
427 | dependencies:
428 | glob-to-regexp "^0.4.1"
429 | graceful-fs "^4.1.2"
430 |
431 | web-streams-polyfill@^3.0.3:
432 | version "3.2.1"
433 | resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6"
434 | integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==
435 |
436 | zod@3.21.4:
437 | version "3.21.4"
438 | resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db"
439 | integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==
440 |
--------------------------------------------------------------------------------