1st push
This commit is contained in:
parent
501d8a8d8e
commit
3226975910
76 changed files with 48623 additions and 3401 deletions
111
utils/auth.js
Normal file
111
utils/auth.js
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
// utils/auth.js
|
||||
import bcrypt from "bcryptjs"
|
||||
|
||||
import { jwtVerify, SignJWT } from "jose"
|
||||
|
||||
const secret = new TextEncoder().encode("Swe4g7c?UBm5Nrd96vhsVDtkyJFbqKMTm!TMw5BDRLtaCFAXNvbq?s4rGKQSZnUP")
|
||||
|
||||
///
|
||||
|
||||
async function generateToken(payload, expiresIn) {
|
||||
const algo = "HS256"
|
||||
const t = await new SignJWT(payload)
|
||||
.setProtectedHeader({ alg: algo })
|
||||
.setIssuedAt()
|
||||
.setExpirationTime(expiresIn)
|
||||
.sign(secret)
|
||||
|
||||
console.log(t)
|
||||
return t
|
||||
}
|
||||
|
||||
// Function to create both access and refresh tokens
|
||||
export async function createTokens(userId) {
|
||||
const accessTokenPayload = {
|
||||
userId: userId,
|
||||
// exp: Math.floor(Date.now() / 1000) + (15 * 60), // Access token expires in 15 minutes
|
||||
// iss: 'your_issuer_here', // Replace with your actual issuer
|
||||
// aud: 'your_audience_here', // Replace with your actual audience
|
||||
purpose: "access", // Indicate the purpose of this token
|
||||
}
|
||||
|
||||
const refreshTokenPayload = {
|
||||
userId: userId,
|
||||
// exp: Math.floor(Date.now() / 1000) + (7 * 24 * 60 * 60), // Refresh token expires in 7 days
|
||||
// iss: 'your_issuer_here', // Replace with your actual issuer
|
||||
// aud: 'your_audience_here', // Replace with your actual audience
|
||||
purpose: "refresh", // Indicate the purpose of this token
|
||||
}
|
||||
|
||||
const accessToken = await generateToken(accessTokenPayload, "15m") // 15 minutes expiry
|
||||
const refreshToken = await generateToken(refreshTokenPayload, "2d") // 2 days expiry
|
||||
|
||||
return { accessToken, refreshToken }
|
||||
}
|
||||
///
|
||||
|
||||
export const hashPassword = async (password) => {
|
||||
const salt = await bcrypt.genSalt(10)
|
||||
return bcrypt.hash(password, salt)
|
||||
}
|
||||
|
||||
export const verifyPassword = async (password, hashedPassword) => {
|
||||
return bcrypt.compare(password, hashedPassword)
|
||||
}
|
||||
|
||||
export const issueAccessToken = async (userId) => {
|
||||
const algo = "HS256"
|
||||
const accessTokenPayload = {
|
||||
userId: userId,
|
||||
// exp: Math.floor(Date.now() / 1000) + (15 * 60), // Access token expires in 15 minutes
|
||||
// iss: 'your_issuer_here', // Replace with your actual issuer
|
||||
// aud: 'your_audience_here', // Replace with your actual audience
|
||||
purpose: "access", // Indicate the purpose of this token
|
||||
}
|
||||
|
||||
const accessToken = await generateToken(accessTokenPayload, "1m") // 15 minutes expiry
|
||||
|
||||
return accessToken
|
||||
}
|
||||
|
||||
// This function verifies a refresh token using a shared secret key
|
||||
export async function verifyRefreshToken(refreshToken) {
|
||||
try {
|
||||
// Verify the refresh token using the shared secret key
|
||||
|
||||
const { payload, protectedHeader } = await jwtVerify(refreshToken, secret)
|
||||
console.log(payload)
|
||||
// Ensure the token has necessary fields and is not expired
|
||||
if (!payload.userId) {
|
||||
throw new Error("Invalid token format")
|
||||
}
|
||||
|
||||
// Optionally, you can also check if the token is intended for refresh purposes only
|
||||
if (payload.purpose !== "refresh") {
|
||||
throw new Error("Invalid token purpose")
|
||||
}
|
||||
|
||||
// Token is valid, return the decoded token
|
||||
return payload
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
throw new Error("Invalid refresh token")
|
||||
}
|
||||
}
|
||||
|
||||
export async function refreshAccessToken(refreshToken) {
|
||||
try {
|
||||
const response = await fetch("http://localhost:3000/api/refreshtoken", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({ refreshToken }),
|
||||
})
|
||||
const data = await response.json()
|
||||
return data.accessToken
|
||||
} catch (error) {
|
||||
console.error("Error refreshing access token:", error)
|
||||
throw new Error("Failed to refresh access token")
|
||||
}
|
||||
}
|
||||
567
utils/categories.js
Normal file
567
utils/categories.js
Normal file
|
|
@ -0,0 +1,567 @@
|
|||
export const categoriesjson = [
|
||||
{
|
||||
category: "Clothes men",
|
||||
subcategories: [
|
||||
{
|
||||
item: "suits",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Cookwares",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Kadhai",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Tawa",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Mixer",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Kitchen Equipments",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Fryer",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Oven",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Minifridge",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Holidays & travel",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Camping",
|
||||
hassub: 1,
|
||||
subs: ["Tents", "Camping Chairs", "Cooking Equipment", "Other Camping Equipments"],
|
||||
},
|
||||
{
|
||||
item: "Luggage",
|
||||
hassub: 1,
|
||||
subs: ["Suitcases", "Travellers Backpacks", "Backpacks", "Other Luggage"],
|
||||
},
|
||||
{
|
||||
item: "Pool/Sea Toys",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Other Holiday & Travel",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Party & events",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Special Effects",
|
||||
hassub: 1,
|
||||
subs: ["Disco Lighting, Lasers & Strobe", "Bubble Machines", "Smoke MAchines", "Other Special Effects"],
|
||||
},
|
||||
{
|
||||
item: "Staging",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Entertainment",
|
||||
hassub: 1,
|
||||
subs: ["Karaoke Equipment", "Photo Booths", "Adult Party Games", "Other Event Entertainment"],
|
||||
},
|
||||
{
|
||||
item: "Catering Equipment",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Display Cabinets / Fridges",
|
||||
"Hot Plates",
|
||||
"Walk-in Fridge Trailers",
|
||||
"Cooking Equipment",
|
||||
"Cutlery, Crockery & Glassware",
|
||||
"Other CAtering Equipment",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Special Effects",
|
||||
hassub: 1,
|
||||
subs: ["Wedding Decorations", "Christmas Decorations", "Centerpieces", "Other Decorations"],
|
||||
},
|
||||
{
|
||||
item: "Portaloos",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Event Furniture",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Seating",
|
||||
"Bars",
|
||||
"Smoke MAchines",
|
||||
"LED furniture",
|
||||
"Tables",
|
||||
"Furniture Accessories",
|
||||
"Other Furniture",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Tents & Marquees",
|
||||
hassub: 1,
|
||||
subs: ["Gazebose", "Marquees", "MArquee Accessories"],
|
||||
},
|
||||
{
|
||||
item: "Event Lighting",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"DJ, Disco & Stage Lights",
|
||||
"Fairy & Festoon Lights",
|
||||
"Light-up Numbers & Letters",
|
||||
"Other Event Lighting",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Party Package Deals",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Other PArty",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Film & Photography",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Cameras",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"DSLR Cameras",
|
||||
"Digital Cinema Cameras",
|
||||
"Camcorders",
|
||||
"GoPros & Headcams",
|
||||
"Film Cameras",
|
||||
"Polaroid",
|
||||
"360 Cameras",
|
||||
"Mirrorless Cameras",
|
||||
"Other Cameras",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Lenses",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Cinema Prime Lenses",
|
||||
"DLSR Lenses",
|
||||
"Medium Format Lenses",
|
||||
"Mirrorless Lenses",
|
||||
"Lens Accessories",
|
||||
"Other Lenses",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Accessories",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Tripods & Heads",
|
||||
"Rigs / Stabiliserws / Gimbals",
|
||||
"Bags and Storage",
|
||||
"Dollies / Sliders",
|
||||
"Grips / Stands / Clamps",
|
||||
"Flashes",
|
||||
"Follow Focus & Lens Support",
|
||||
"Other Accessories",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Lighting",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Continuous Lighting",
|
||||
"Backgrounds & Supports",
|
||||
"Stands , Mounts & Accessories",
|
||||
"Otehr Film & Photography Lighting",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Cameras With Operators",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Photography Studios",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Camera Package Deals / Kits",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Other Film & Photography",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Drones",
|
||||
subcategories: [
|
||||
{
|
||||
item: "DJI Drones",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Spark Series",
|
||||
"Mavic Series",
|
||||
"Phantom Series",
|
||||
"Inspire Series",
|
||||
"Industrial Drones",
|
||||
"Other DJI Drones",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Drones With Operators",
|
||||
hassub: 0,
|
||||
subs: [],
|
||||
},
|
||||
{
|
||||
item: "Drone Accessories",
|
||||
hassub: 1,
|
||||
subs: ["Cases & Bags", "Batteries", "Other Drone Accessories"],
|
||||
},
|
||||
{
|
||||
item: "Drone PAckage Deals",
|
||||
hassub: 0,
|
||||
subs: [],
|
||||
},
|
||||
{
|
||||
item: "Other Drones",
|
||||
hassub: 0,
|
||||
subs: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Sports",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Racket Sports",
|
||||
hassub: 1,
|
||||
subs: ["Squash", "Tennis", "Badminton", "Table Tennis", "Other Racket Sport Equipment"],
|
||||
},
|
||||
{
|
||||
item: "Gym Equipment",
|
||||
hassub: 1,
|
||||
subs: ["Free Weights", "Gym MAchines", "Other Gym Equipments"],
|
||||
},
|
||||
{
|
||||
item: "Water Sports",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Swimming Goggles",
|
||||
"Wetsuits",
|
||||
"Snorkelling Equipment",
|
||||
"Kiteboarding Equipment",
|
||||
"Sailing & Boats",
|
||||
"Kayak & Canoes",
|
||||
"Surfboards",
|
||||
"Windsurfing Equipment",
|
||||
"Jet Skis",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Winter Sports",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Skis",
|
||||
"Snowboards",
|
||||
"Ski Boots",
|
||||
"Snowboard Boots",
|
||||
"Ski & Snowboard Clothing",
|
||||
"Ski & Snowboard Accessories",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Outdoor Sports",
|
||||
hassub: 1,
|
||||
subs: ["Golf", "Rugby", "Cricket", "Football", "Triathalon", "Hiking", "Surfboards", "Other Outdoor Sports"],
|
||||
},
|
||||
{
|
||||
item: "Gym Equipment",
|
||||
hassub: 1,
|
||||
subs: ["Free Weights", "Gym MAchines", "Other Gym Equipments"],
|
||||
},
|
||||
{
|
||||
item: "Country Sports",
|
||||
hassub: 1,
|
||||
subs: ["Fishing Equipment", "Horse Riding Equipment", "Shooting Equipment"],
|
||||
},
|
||||
{
|
||||
item: "Sports Package Deals",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Other Sports",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Kids",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Babies & Toddlers",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Baby Car Seats",
|
||||
"Booster Seats",
|
||||
"Baby Carriers & Backpacks",
|
||||
"Prams & Pushchairs",
|
||||
"Highchairs",
|
||||
"Bouncers / Swings",
|
||||
"Breast Pumps",
|
||||
"Cots",
|
||||
"Baby Monitors",
|
||||
"Play Pens",
|
||||
"Bottle Sterilisers",
|
||||
"Baby Toys",
|
||||
"Baby Toys",
|
||||
"Other Babies & Toddlers",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Kids",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Hoverboards, Scooters & Rollerblades",
|
||||
"Water Toys",
|
||||
"Bikes",
|
||||
"Beanbags",
|
||||
"Other Toys",
|
||||
"Lawn Toys",
|
||||
"Other Kids",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Kids Parties",
|
||||
hassub: 1,
|
||||
subs: ["Bouncy Castles", "Inflatables", "Soft Play", "Other Kids Parties"],
|
||||
},
|
||||
{
|
||||
item: "Kids & Baby Package Deals",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Other Kids & Baby",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Audio Visual Equipment",
|
||||
subcategories: [
|
||||
{
|
||||
item: "PA Systems",
|
||||
hassub: 1,
|
||||
subs: ["Small Venues (<100 people)", "Medium Venues (100-300 people)", "Large Venues (300+ people)"],
|
||||
},
|
||||
{
|
||||
item: "Speakers",
|
||||
hassub: 1,
|
||||
subs: ["Speaker Systems", "Portable Speakers", "Moniter Systems", "Other Speakers"],
|
||||
},
|
||||
{
|
||||
item: "Microphones",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Recording Mics",
|
||||
"Wireless Mics / Systems",
|
||||
"Condenser Mics",
|
||||
"Condenser Mics",
|
||||
"USB Mics",
|
||||
"Standard Mics",
|
||||
"Other Mics",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Recording Equipment",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Recorders",
|
||||
"Studio, Samplers & Sequencers",
|
||||
"Interfaces, Consoles & Controllers",
|
||||
"Headphones",
|
||||
"Sound Blimps",
|
||||
"Other Recording Equipment",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Recording Studios",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Audio Visual PAckage Deals",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Other Audio Visual",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Dj Equipment",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Decks & Turntables",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Mixers",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Controllers",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "DJ Equipment with Operator",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "DJ Equipment Package Deals",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Other DJ Equipment",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Electronics",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Computer",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Laptops",
|
||||
"Ipads & Tablets",
|
||||
"Desktops",
|
||||
"PC Moniters",
|
||||
"Printers & Scanners",
|
||||
"Servers",
|
||||
"Computer Accessories",
|
||||
"Other Computer",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Entertainment & Gaming",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"TVs",
|
||||
"TV Accessories",
|
||||
"Kindles",
|
||||
"Xbox Consoles & Games",
|
||||
"Playstation Consoles & Games",
|
||||
"Nintendo Consoles & Games",
|
||||
"Other Entertainment & Gaming",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Virtual Reality",
|
||||
hassub: 1,
|
||||
subs: ["Headsets", "Games", "Other Virtual Reality"],
|
||||
},
|
||||
{
|
||||
item: "Personal Electronics",
|
||||
hassub: 1,
|
||||
subs: [
|
||||
"Mobile Phones",
|
||||
"Smartwatches",
|
||||
"Headphones",
|
||||
"Fitbits & Fitness Electronics",
|
||||
"Other Personal Electronics",
|
||||
],
|
||||
},
|
||||
{
|
||||
item: "Electronics Package Deals",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Other Electronics",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Musical Instrument",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Guitars",
|
||||
hassub: 1,
|
||||
subs: ["Acoustic", "Bass", "Electric", "Pedals", "Guitar Accessories", "Other Guitars"],
|
||||
},
|
||||
{
|
||||
item: "Amps",
|
||||
hassub: 1,
|
||||
subs: ["Guitar Amps", "Bass Amps", "Piano Amps", "Other Amps"],
|
||||
},
|
||||
{
|
||||
item: "Keyboards & Synthesisers",
|
||||
hassub: 1,
|
||||
subs: ["Electric Keyboards", "Synthesisers", "Pianos", "Other Keyboards"],
|
||||
},
|
||||
{
|
||||
item: "String Instruments",
|
||||
hassub: 1,
|
||||
subs: ["Violins", "Double Bass", "Banjos", "Ouds", "Mandolins", "Ukuele", "Other String Instruments"],
|
||||
},
|
||||
{
|
||||
item: "Brass",
|
||||
hassub: 1,
|
||||
subs: ["Trumpet", "Trombone", "Cornet", "Other Brass"],
|
||||
},
|
||||
{
|
||||
item: "Woodwind",
|
||||
hassub: 1,
|
||||
subs: ["Saxophone", "Fluter", "Carinet", "Recorders", "Other Woodwind"],
|
||||
},
|
||||
{
|
||||
item: "Percussion",
|
||||
hassub: 1,
|
||||
subs: ["Drums", "Cymbals", "Other Percussion"],
|
||||
},
|
||||
{
|
||||
item: "Instrument Accessories",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Musical Instruments Deals",
|
||||
hassub: 0,
|
||||
},
|
||||
{
|
||||
item: "Other Musical Instrument",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
category: "Others",
|
||||
subcategories: [
|
||||
{
|
||||
item: "Other things",
|
||||
hassub: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
28
utils/themes.js
Normal file
28
utils/themes.js
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
import { extendTheme } from "@chakra-ui/react"
|
||||
|
||||
const colors = {
|
||||
primary: {
|
||||
100: "#B5FCF1",
|
||||
200: "#27EF96",
|
||||
300: "#10DE82",
|
||||
400: "#0EBE6F",
|
||||
500: "#0CA25F",
|
||||
600: "#0A864F",
|
||||
700: "#086F42",
|
||||
800: "#075C37",
|
||||
900: "#064C2E",
|
||||
},
|
||||
}
|
||||
|
||||
const breakpoints = {
|
||||
base: "0em", // 0px
|
||||
sm: "30em", // ~480px. em is a relative unit and is dependant on the font size.
|
||||
md: "48em", // ~768px
|
||||
lg: "62em", // ~992px
|
||||
xl: "80em", // ~1280px
|
||||
"2xl": "96em", // ~1536px
|
||||
}
|
||||
|
||||
const customTheme = extendTheme({ colors, breakpoints })
|
||||
|
||||
export default customTheme
|
||||
Loading…
Add table
Add a link
Reference in a new issue