This commit is contained in:
Rahul 2024-02-29 09:33:34 +01:00
parent 501d8a8d8e
commit 3226975910
76 changed files with 48623 additions and 3401 deletions

111
utils/auth.js Normal file
View 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
View 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
View 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