feature(claimcodes) claimcodes now have a UNIX time to be claimed and an amount of time they can be used

This commit is contained in:
Tanner Shaw
2023-09-05 16:25:57 -05:00
parent b37e80961d
commit 1609422ff0
5 changed files with 38 additions and 24 deletions

32
package-lock.json generated
View File

@@ -13,7 +13,7 @@
"@ethersproject/keccak256": "^5.7.0",
"@ethersproject/strings": "^5.7.0",
"@faker-js/faker": "^8.0.2",
"@prisma/client": "^5.0.0",
"@prisma/client": "^5.2.0",
"body-parser": "^1.20.2",
"cors": "^2.8.5",
"discreetly-claimcodes": "^1.1.5",
@@ -44,7 +44,7 @@
"eslint": "^8.46.0",
"jest": "^29.6.2",
"nodemon": "^3.0.1",
"prisma": "^5.1.1",
"prisma": "^5.2.0",
"rollup": "^3.26.2",
"rollup-plugin-cleaner": "^1.0.0",
"rollup-plugin-include-sourcemaps": "^0.7.0",
@@ -1670,12 +1670,12 @@
}
},
"node_modules/@prisma/client": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.0.0.tgz",
"integrity": "sha512-XlO5ELNAQ7rV4cXIDJUNBEgdLwX3pjtt9Q/RHqDpGf43szpNJx2hJnggfFs7TKNx0cOFsl6KJCSfqr5duEU/bQ==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.2.0.tgz",
"integrity": "sha512-AiTjJwR4J5Rh6Z/9ZKrBBLel3/5DzUNntMohOy7yObVnVoTNVFi2kvpLZlFuKO50d7yDspOtW6XBpiAd0BVXbQ==",
"hasInstallScript": true,
"dependencies": {
"@prisma/engines-version": "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584"
"@prisma/engines-version": "5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f"
},
"engines": {
"node": ">=16.13"
@@ -1690,16 +1690,16 @@
}
},
"node_modules/@prisma/engines": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.1.1.tgz",
"integrity": "sha512-NV/4nVNWFZSJCCIA3HIFJbbDKO/NARc9ej0tX5S9k2EVbkrFJC4Xt9b0u4rNZWL4V+F5LAjvta8vzEUw0rw+HA==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.2.0.tgz",
"integrity": "sha512-dT7FOLUCdZmq+AunLqB1Iz+ZH/IIS1Fz2THmKZQ6aFONrQD/BQ5ecJ7g2wGS2OgyUFf4OaLam6/bxmgdOBDqig==",
"devOptional": true,
"hasInstallScript": true
},
"node_modules/@prisma/engines-version": {
"version": "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584.tgz",
"integrity": "sha512-HHiUF6NixsldsP3JROq07TYBLEjXFKr6PdH8H4gK/XAoTmIplOJBCgrIUMrsRAnEuGyRoRLXKXWUb943+PFoKQ=="
"version": "5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f.tgz",
"integrity": "sha512-jsnKT5JIDIE01lAeCj2ghY9IwxkedhKNvxQeoyLs6dr4ZXynetD0vTy7u6wMJt8vVPv8I5DPy/I4CFaoXAgbtg=="
},
"node_modules/@rollup/plugin-commonjs": {
"version": "25.0.2",
@@ -6463,13 +6463,13 @@
}
},
"node_modules/prisma": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-5.1.1.tgz",
"integrity": "sha512-WJFG/U7sMmcc6TjJTTifTfpI6Wjoh55xl4AzopVwAdyK68L9/ogNo8QQ2cxuUjJf/Wa82z/uhyh3wMzvRIBphg==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-5.2.0.tgz",
"integrity": "sha512-FfFlpjVCkZwrqxDnP4smlNYSH1so+CbfjgdpioFzGGqlQAEm6VHAYSzV7jJgC3ebtY9dNOhDMS2+4/1DDSM7bQ==",
"devOptional": true,
"hasInstallScript": true,
"dependencies": {
"@prisma/engines": "5.1.1"
"@prisma/engines": "5.2.0"
},
"bin": {
"prisma": "build/index.js"

View File

@@ -27,7 +27,7 @@
"@ethersproject/keccak256": "^5.7.0",
"@ethersproject/strings": "^5.7.0",
"@faker-js/faker": "^8.0.2",
"@prisma/client": "^5.0.0",
"@prisma/client": "^5.2.0",
"body-parser": "^1.20.2",
"cors": "^2.8.5",
"discreetly-claimcodes": "^1.1.5",
@@ -58,7 +58,7 @@
"eslint": "^8.46.0",
"jest": "^29.6.2",
"nodemon": "^3.0.1",
"prisma": "^5.1.1",
"prisma": "^5.2.0",
"rollup": "^3.26.2",
"rollup-plugin-cleaner": "^1.0.0",
"rollup-plugin-include-sourcemaps": "^0.7.0",

View File

@@ -36,6 +36,8 @@ model ClaimCodes {
claimcode String @unique
claimed Boolean @default(false)
roomIds String[] @default([]) @db.ObjectId
expiresAt Int
usesLeft Int @default(-1)
rooms Rooms[] @relation(fields: [roomIds], references: [id])
}

View File

@@ -13,6 +13,7 @@ const prisma = new PrismaClient();
interface CodeStatus {
claimed: boolean;
roomIds: string[];
expiresAt: number;
}
interface RoomsFromClaimCode {
@@ -358,7 +359,6 @@ export function createSystemMessages(
});
}
export interface BandadaRoom extends RoomI {
bandadaAPIKey: string;
}
@@ -390,7 +390,6 @@ export function removeIdentityFromRoom(
limiter == rateCommitmentsToUpdate ? '0' : (limiter as string)
) ?? [];
return prisma.rooms
.update({
where: { id: room.id },

View File

@@ -143,7 +143,7 @@ export function initEndpoints(app: Express, adminAuth: RequestHandler) {
console.debug('Invite Code:', code);
const codeStatus = await findClaimCode(code);
if (!codeStatus || codeStatus.claimed) {
if (!codeStatus || codeStatus.expiresAt < Date.now()) {
res.status(400).json({ message: 'Claim code already used' });
return;
}
@@ -309,13 +309,19 @@ export function initEndpoints(app: Express, adminAuth: RequestHandler) {
['/addcode', '/api/addcode'],
adminAuth,
asyncHandler(async (req: Request, res: Response) => {
const { numCodes, rooms, all } = req.body as {
const { numCodes, rooms, all, expires } = req.body as {
numCodes: number;
rooms: string[];
all: boolean;
expires: number;
};
const currentDate = new Date();
const threeMonthsLater = new Date(currentDate).setMonth(currentDate.getMonth() + 3);
const codeExpires = expires ? expires : threeMonthsLater
const query = all ? undefined : { where: { roomId: { in: rooms } } };
const codes = genClaimCodeArray(numCodes);
return await prisma.rooms.findMany(query).then((rooms) => {
const roomIds = rooms.map((room) => room.id);
@@ -324,7 +330,8 @@ export function initEndpoints(app: Express, adminAuth: RequestHandler) {
data: {
claimcode: code.claimcode,
claimed: false,
roomIds: roomIds
roomIds: roomIds,
expiresAt: codeExpires
}
}).then((newCode) => {
const updatePromises = rooms.map((room) => {
@@ -373,9 +380,14 @@ export function initEndpoints(app: Express, adminAuth: RequestHandler) {
adminAuth,
(req, res) => {
const { roomId } = req.params;
const { numCodes } = req.body as { numCodes: number };
const { numCodes, expires } = req.body as { numCodes: number, expires: number };
const codes = genClaimCodeArray(numCodes);
const currentDate = new Date();
const threeMonthsLater = new Date(currentDate).setMonth(currentDate.getMonth() + 3);
const codeExpires = expires ? expires : threeMonthsLater
prisma.rooms
.findUnique({
where: { roomId: roomId },
@@ -392,6 +404,7 @@ export function initEndpoints(app: Express, adminAuth: RequestHandler) {
data: {
claimcode: code.claimcode,
claimed: false,
expiresAt: codeExpires,
rooms: {
connect: {
roomId: roomId