diff --git a/appwrite.json b/appwrite.json index cc3fab6..b2a95d0 100644 --- a/appwrite.json +++ b/appwrite.json @@ -184,7 +184,7 @@ "value": "64a521785f5be62b796f" }, { - "key": "ROOMS_COLLECTION_ID", + "key": "ROOMS_TABLE_ID", "value": "64a5217e695bf2c4ec9c" } ], diff --git a/functions/create-room/package-lock.json b/functions/create-room/package-lock.json index af6dae6..08ce856 100644 --- a/functions/create-room/package-lock.json +++ b/functions/create-room/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "dependencies": { "livekit-server-sdk": "^1.2.6", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" @@ -320,14 +320,20 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/node-appwrite": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-9.0.0.tgz", - "integrity": "sha512-iTcHbuaJfr6bP/HFkRVV+FcaumKkbINqZyypQdl+tYxv6Dx0bkB/YKUXGYfTkgP18TLPWQQB++OGQhi98dlo2w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", + "license": "BSD-3-Clause", "dependencies": { - "axios": "^1.3.6", - "form-data": "^4.0.0" + "node-fetch-native-with-agent": "1.7.2" } }, + "node_modules/node-fetch-native-with-agent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz", + "integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==", + "license": "MIT" + }, "node_modules/prettier": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", @@ -684,14 +690,18 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node-appwrite": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-9.0.0.tgz", - "integrity": "sha512-iTcHbuaJfr6bP/HFkRVV+FcaumKkbINqZyypQdl+tYxv6Dx0bkB/YKUXGYfTkgP18TLPWQQB++OGQhi98dlo2w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", "requires": { - "axios": "^1.3.6", - "form-data": "^4.0.0" + "node-fetch-native-with-agent": "1.7.2" } }, + "node-fetch-native-with-agent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz", + "integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==" + }, "prettier": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", @@ -751,4 +761,4 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } -} \ No newline at end of file +} diff --git a/functions/create-room/package.json b/functions/create-room/package.json index faf6d61..629db38 100644 --- a/functions/create-room/package.json +++ b/functions/create-room/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "livekit-server-sdk": "^1.2.6", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" diff --git a/functions/create-room/src/appwrite.js b/functions/create-room/src/appwrite.js index 9019e8e..f48ad47 100644 --- a/functions/create-room/src/appwrite.js +++ b/functions/create-room/src/appwrite.js @@ -1,4 +1,4 @@ -import { Client, Databases, ID } from "node-appwrite"; +import { Client, TablesDB, ID } from "node-appwrite"; class AppwriteService { constructor() { @@ -9,18 +9,18 @@ class AppwriteService { ) .setProject(process.env.APPWRITE_FUNCTION_PROJECT_ID) .setKey(process.env.APPWRITE_API_KEY); - this.databases = new Databases(client); + this.tables = new TablesDB(client); } async createRoom(newRoomData) { - const newRoomDocRef = await this.databases.createDocument( - process.env.MASTER_DATABASE_ID, - process.env.ROOMS_COLLECTION_ID, - ID.unique(), - newRoomData - ); + const rowId = ID.unique(); + const newRoomRows = await this.tables.createRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.ROOMS_TABLE_ID, + rows: [{ $id: rowId, ...newRoomData }] + }); - return newRoomDocRef.$id; + return newRoomRows.rows[0].$id; } } diff --git a/functions/create-room/src/main.js b/functions/create-room/src/main.js index 7a1e63b..c8c800e 100644 --- a/functions/create-room/src/main.js +++ b/functions/create-room/src/main.js @@ -6,7 +6,7 @@ export default async ({ req, res, log, error }) => { throwIfMissing(process.env, [ "APPWRITE_API_KEY", "MASTER_DATABASE_ID", - "ROOMS_COLLECTION_ID", + "ROOMS_TABLE_ID", "LIVEKIT_HOST", "LIVEKIT_API_KEY", "LIVEKIT_API_SECRET", diff --git a/functions/database-cleaner/package-lock.json b/functions/database-cleaner/package-lock.json index 8edda96..fedffc7 100644 --- a/functions/database-cleaner/package-lock.json +++ b/functions/database-cleaner/package-lock.json @@ -8,106 +8,27 @@ "name": "database-cleaner", "version": "1.0.0", "dependencies": { - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/node-appwrite": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-9.0.0.tgz", - "integrity": "sha512-iTcHbuaJfr6bP/HFkRVV+FcaumKkbINqZyypQdl+tYxv6Dx0bkB/YKUXGYfTkgP18TLPWQQB++OGQhi98dlo2w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", + "license": "BSD-3-Clause", "dependencies": { - "axios": "^1.3.6", - "form-data": "^4.0.0" + "node-fetch-native-with-agent": "1.7.2" } }, + "node_modules/node-fetch-native-with-agent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz", + "integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==", + "license": "MIT" + }, "node_modules/prettier": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", @@ -122,11 +43,6 @@ "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" } } -} \ No newline at end of file +} diff --git a/functions/database-cleaner/package.json b/functions/database-cleaner/package.json index 9274794..81c5176 100644 --- a/functions/database-cleaner/package.json +++ b/functions/database-cleaner/package.json @@ -9,7 +9,7 @@ "format": "prettier --write ." }, "dependencies": { - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" diff --git a/functions/database-cleaner/src/appwrite.js b/functions/database-cleaner/src/appwrite.js index 298c3e4..5cec513 100644 --- a/functions/database-cleaner/src/appwrite.js +++ b/functions/database-cleaner/src/appwrite.js @@ -1,4 +1,4 @@ -import { Client, Databases, Query } from "node-appwrite"; +import { Client, TablesDB, Query } from "node-appwrite"; import { getExpiryDate } from "./utils.js"; class AppwriteService { @@ -11,17 +11,17 @@ class AppwriteService { .setProject(process.env.APPWRITE_FUNCTION_PROJECT_ID) .setKey(process.env.APPWRITE_API_KEY); - this.databases = new Databases(client); + this.tables = new TablesDB(client); } async doesRoomExist(roomId) { try { - await this.databases.getDocument( - process.env.MASTER_DATABASE_ID, - process.env.ROOMS_COLLECTION_ID, - roomId - ); - return true; + const result = await this.tables.getRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.ROOMS_TABLE_ID, + queries: [Query.equal("$id", [roomId])] + }); + return result.rows.length > 0; } catch (err) { if (err.code !== 404) throw err; return false; @@ -29,23 +29,23 @@ class AppwriteService { } async cleanParticipantsCollection() { - const participantDocs = await this.databases.listDocuments( - process.env.MASTER_DATABASE_ID, - process.env.PARTICIPANTS_COLLECTION_ID - ); + const participantsList = await this.tables.listRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.PARTICIPANTS_TABLE_ID + }); await Promise.all( - participantDocs.documents.map(async(participantDoc)=>{ + participantsList.rows.map(async(participantRow)=>{ try{ - if(!(await this.doesRoomExist(participantDoc.roomId))){ - await this.databases.deleteDocument( - process.env.MASTER_DATABASE_ID, - process.env.PARTICIPANTS_COLLECTION_ID, - participantDoc.$id - ); + if(!(await this.doesRoomExist(participantRow.roomId))){ + await this.tables.deleteRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.PARTICIPANTS_TABLE_ID, + queries: [Query.equal("$id", [participantRow.$id])] + }); } }catch(error){ - console.error(`Failed to clean participant ${participantDoc.$id}:`, error); + console.error(`Failed to clean participant ${participantRow.$id}:`, error); } }) ); @@ -58,21 +58,21 @@ class AppwriteService { Query.limit(25), ]; do { - const activePairDocs = await this.databases.listDocuments( - process.env.MASTER_DATABASE_ID, - process.env.ACTIVE_PAIRS_COLLECTION_ID, + const activePairsList = await this.tables.listRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.ACTIVE_PAIRS_TABLE_ID, queries - ); - await Promise.all( - activePairDocs.documents.map((activePairDoc) => - this.databases.deleteDocument( - process.env.MASTER_DATABASE_ID, - process.env.ACTIVE_PAIRS_COLLECTION_ID, - activePairDoc.$id - ) - ) - ); - done = activePairDocs.total === 0; + }); + + if (activePairsList.rows.length > 0) { + await this.tables.deleteRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.ACTIVE_PAIRS_TABLE_ID, + queries: [Query.equal("$id", activePairsList.rows.map(r => r.$id))] + }); + } + + done = activePairsList.total === 0; } while (!done); } @@ -92,21 +92,19 @@ class AppwriteService { // do { - const oneDayOldOTPs = await this.databases.listDocuments( - process.env.VERIFICATION_DATABASE_ID, - process.env.OTP_COLLECTION_ID, + const oneDayOldOTPs = await this.tables.listRows({ + databaseId: process.env.VERIFICATION_DATABASE_ID, + tableId: process.env.OTP_TABLE_ID, queries - ); + }); - await Promise.all( - oneDayOldOTPs.documents.map(async (otp) => { - await this.databases.deleteDocument( - process.env.VERIFICATION_DATABASE_ID, - process.env.OTP_COLLECTION_ID, - otp.$id - ); - }) - ) + if (oneDayOldOTPs.rows.length > 0) { + await this.tables.deleteRows({ + databaseId: process.env.VERIFICATION_DATABASE_ID, + tableId: process.env.OTP_TABLE_ID, + queries: [Query.equal("$id", oneDayOldOTPs.rows.map(r => r.$id))] + }); + } done = oneDayOldOTPs.total === 0; diff --git a/functions/database-cleaner/src/main.js b/functions/database-cleaner/src/main.js index 8c397dc..8d33548 100644 --- a/functions/database-cleaner/src/main.js +++ b/functions/database-cleaner/src/main.js @@ -4,12 +4,12 @@ import { throwIfMissing } from "./utils.js"; export default async (context) => { throwIfMissing(process.env, [ "APPWRITE_API_KEY", - "ROOMS_COLLECTION_ID", - "PARTICIPANTS_COLLECTION_ID", - "ACTIVE_PAIRS_COLLECTION_ID", + "ROOMS_TABLE_ID", + "PARTICIPANTS_TABLE_ID", + "ACTIVE_PAIRS_TABLE_ID", "RETENTION_PERIOD_DAYS", "VERIFICATION_DATABASE_ID", - "OTP_COLLECTION_ID", + "OTP_TABLE_ID", ]); const appwrite = new AppwriteService(); diff --git a/functions/delete-room/package-lock.json b/functions/delete-room/package-lock.json index 84e5344..60cd344 100644 --- a/functions/delete-room/package-lock.json +++ b/functions/delete-room/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "dependencies": { "livekit-server-sdk": "^1.2.6", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" @@ -320,14 +320,20 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/node-appwrite": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-9.0.0.tgz", - "integrity": "sha512-iTcHbuaJfr6bP/HFkRVV+FcaumKkbINqZyypQdl+tYxv6Dx0bkB/YKUXGYfTkgP18TLPWQQB++OGQhi98dlo2w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", + "license": "BSD-3-Clause", "dependencies": { - "axios": "^1.3.6", - "form-data": "^4.0.0" + "node-fetch-native-with-agent": "1.7.2" } }, + "node_modules/node-fetch-native-with-agent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz", + "integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==", + "license": "MIT" + }, "node_modules/prettier": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", @@ -684,14 +690,18 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node-appwrite": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-9.0.0.tgz", - "integrity": "sha512-iTcHbuaJfr6bP/HFkRVV+FcaumKkbINqZyypQdl+tYxv6Dx0bkB/YKUXGYfTkgP18TLPWQQB++OGQhi98dlo2w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", "requires": { - "axios": "^1.3.6", - "form-data": "^4.0.0" + "node-fetch-native-with-agent": "1.7.2" } }, + "node-fetch-native-with-agent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz", + "integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==" + }, "prettier": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", @@ -751,4 +761,4 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } -} \ No newline at end of file +} diff --git a/functions/delete-room/package.json b/functions/delete-room/package.json index a179e8c..7ae39f9 100644 --- a/functions/delete-room/package.json +++ b/functions/delete-room/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "livekit-server-sdk": "^1.2.6", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" diff --git a/functions/delete-room/src/main.js b/functions/delete-room/src/main.js index 67a8c0d..963a8c8 100644 --- a/functions/delete-room/src/main.js +++ b/functions/delete-room/src/main.js @@ -1,4 +1,4 @@ -import { Client, Databases, Query } from "node-appwrite"; +import { Client, TablesDB, Query } from "node-appwrite"; import { RoomServiceClient } from "livekit-server-sdk"; import { throwIfMissing } from "./utils.js"; @@ -6,14 +6,14 @@ export default async ({ req, res, log, error }) => { throwIfMissing(process.env, [ "APPWRITE_API_KEY", "MASTER_DATABASE_ID", - "ROOMS_COLLECTION_ID", - "PARTICIPANTS_COLLECTION_ID", + "ROOMS_TABLE_ID", + "PARTICIPANTS_TABLE_ID", "LIVEKIT_HOST", "LIVEKIT_API_KEY", "LIVEKIT_API_SECRET", ]); - const databases = new Databases( + const tables = new TablesDB( new Client() .setEndpoint( process.env.APPWRITE_ENDPOINT ?? "https://cloud.appwrite.io/v1" @@ -38,11 +38,18 @@ export default async ({ req, res, log, error }) => { log(req); const { appwriteRoomDocId, livekitToken } = JSON.parse(req.body); - const appwriteRoom = await databases.getDocument( - process.env.MASTER_DATABASE_ID, - process.env.ROOMS_COLLECTION_ID, - appwriteRoomDocId - ); + const roomResult = await tables.getRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.ROOMS_TABLE_ID, + queries: [Query.equal("$id", [appwriteRoomDocId])] + }); + + if (roomResult.rows.length === 0) { + log("Room not found"); + return res.json({ msg: "Room not found" }, 404); + } + + const appwriteRoom = roomResult.rows[0]; const roomAdminUid = req.headers["x-appwrite-user-id"]; if (appwriteRoom.adminUid !== roomAdminUid) { @@ -51,26 +58,28 @@ export default async ({ req, res, log, error }) => { } //Delete Appwrite room doc - await databases.deleteDocument( - process.env.MASTER_DATABASE_ID, - process.env.ROOMS_COLLECTION_ID, - appwriteRoomDocId - ); + await tables.deleteRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.ROOMS_TABLE_ID, + queries: [Query.equal("$id", [appwriteRoomDocId])] + }); // Removing participants from collection - const participantColRef = await databases.listDocuments( - process.env.MASTER_DATABASE_ID, - process.env.PARTICIPANTS_COLLECTION_ID, - [Query.equal("roomId", [appwriteRoomDocId])] - ); - log(participantColRef); - participantColRef.documents.forEach(async (participant) => { - await databases.deleteDocument( - process.env.MASTER_DATABASE_ID, - process.env.PARTICIPANTS_COLLECTION_ID, - participant.$id - ); + const participantColRef = await tables.listRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.PARTICIPANTS_TABLE_ID, + queries: [Query.equal("roomId", [appwriteRoomDocId])] }); + log(participantColRef); + + if (participantColRef.rows.length > 0) { + const participantIds = participantColRef.rows.map(p => p.$id); + await tables.deleteRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.PARTICIPANTS_TABLE_ID, + queries: [Query.equal("$id", participantIds)] + }); + } // Delete livekit room await roomServiceClient.deleteRoom(appwriteRoomDocId); diff --git a/functions/livekit-webhook/package-lock.json b/functions/livekit-webhook/package-lock.json index e1b37b8..6d35032 100644 --- a/functions/livekit-webhook/package-lock.json +++ b/functions/livekit-webhook/package-lock.json @@ -1,435 +1,441 @@ { - "name": "starter-template", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "starter-template", - "version": "1.0.0", - "dependencies": { - "livekit-server-sdk": "^1.2.6", - "node-appwrite": "^17.0.0" - }, - "devDependencies": { - "prettier": "^3.0.0" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@types/node": { - "version": "20.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz", - "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/livekit-server-sdk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/livekit-server-sdk/-/livekit-server-sdk-1.2.6.tgz", - "integrity": "sha512-Oc3lArzsyS3zzjQcTMqb3mnzHXTch0g8p4GqOcuaDaeo7J7vbf0soFUd94vURgqBq5h7wOTOOi7DlC2S0nj6LA==", - "dependencies": { - "axios": "^1.3.6", - "camelcase-keys": "^7.0.0", - "jsonwebtoken": "^9.0.0", - "long": "^5.0.0", - "protobufjs": "^7.2.4" - } - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/node-appwrite": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-9.0.0.tgz", - "integrity": "sha512-iTcHbuaJfr6bP/HFkRVV+FcaumKkbINqZyypQdl+tYxv6Dx0bkB/YKUXGYfTkgP18TLPWQQB++OGQhi98dlo2w==", - "dependencies": { - "axios": "^1.3.6", - "form-data": "^4.0.0" - } - }, - "node_modules/prettier": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", - "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "name": "livekit-webhook", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "livekit-webhook", + "version": "1.0.0", + "dependencies": { + "livekit-server-sdk": "^1.2.6", + "node-appwrite": "^18.0.0" + }, + "devDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@types/node": { + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz", + "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/livekit-server-sdk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/livekit-server-sdk/-/livekit-server-sdk-1.2.6.tgz", + "integrity": "sha512-Oc3lArzsyS3zzjQcTMqb3mnzHXTch0g8p4GqOcuaDaeo7J7vbf0soFUd94vURgqBq5h7wOTOOi7DlC2S0nj6LA==", + "dependencies": { + "axios": "^1.3.6", + "camelcase-keys": "^7.0.0", + "jsonwebtoken": "^9.0.0", + "long": "^5.0.0", + "protobufjs": "^7.2.4" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/node-appwrite": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", + "license": "BSD-3-Clause", + "dependencies": { + "node-fetch-native-with-agent": "1.7.2" + } + }, + "node_modules/node-fetch-native-with-agent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz", + "integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==", + "license": "MIT" + }, + "node_modules/prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", + "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/protobufjs": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", + "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } - ] - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } - } -} \ No newline at end of file +} diff --git a/functions/livekit-webhook/package.json b/functions/livekit-webhook/package.json index 8f47081..002ca46 100644 --- a/functions/livekit-webhook/package.json +++ b/functions/livekit-webhook/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "livekit-server-sdk": "^1.2.6", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" diff --git a/functions/livekit-webhook/src/appwrite.js b/functions/livekit-webhook/src/appwrite.js index 66e261e..0f8ae7f 100644 --- a/functions/livekit-webhook/src/appwrite.js +++ b/functions/livekit-webhook/src/appwrite.js @@ -1,4 +1,4 @@ -import { Client, Databases } from 'node-appwrite'; +import { Client, TablesDB, Query } from 'node-appwrite'; class AppwriteService { constructor() { @@ -10,17 +10,17 @@ class AppwriteService { .setProject(process.env.APPWRITE_FUNCTION_PROJECT_ID) .setKey(process.env.APPWRITE_API_KEY); - this.databases = new Databases(client); + this.tables = new TablesDB(client); } async doesRoomExist(roomId) { try { - await this.databases.getDocument( - process.env.MASTER_DATABASE_ID, - process.env.ROOMS_COLLECTION_ID, - roomId - ); - return true; + const result = await this.tables.getRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.ROOMS_TABLE_ID, + queries: [Query.equal('$id', [roomId])] + }); + return result.rows.length > 0; } catch (err) { if (err.code !== 404) throw err; return false; @@ -28,26 +28,28 @@ class AppwriteService { } async deleteRoom(roomId) { - // Deleting room doc inside rooms collection in master database - await this.databases.deleteDocument( - process.env.MASTER_DATABASE_ID, - process.env.ROOMS_COLLECTION_ID, - roomId - ); + // Deleting room doc inside rooms table in master database + await this.tables.deleteRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.ROOMS_TABLE_ID, + queries: [Query.equal('$id', [roomId])] + }); - // Removing participants from collection - const participantColRef = await this.databases.listDocuments( - process.env.MASTER_DATABASE_ID, - process.env.PARTICIPANTS_COLLECTION_ID, - [Query.equal('roomId', [roomId])] - ); - participantColRef.documents.forEach(async (participant) => { - await this.databases.deleteDocument( - process.env.MASTER_DATABASE_ID, - process.env.PARTICIPANTS_COLLECTION_ID, - participant.$id - ); + // Removing participants from table + const participantColRef = await this.tables.listRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.PARTICIPANTS_TABLE_ID, + queries: [Query.equal('roomId', [roomId])] }); + + if (participantColRef.rows.length > 0) { + const participantIds = participantColRef.rows.map(p => p.$id); + await this.tables.deleteRows({ + databaseId: process.env.MASTER_DATABASE_ID, + tableId: process.env.PARTICIPANTS_TABLE_ID, + queries: [Query.equal('$id', participantIds)] + }); + } } } diff --git a/functions/livekit-webhook/src/main.js b/functions/livekit-webhook/src/main.js index 5ac26bb..678dabc 100644 --- a/functions/livekit-webhook/src/main.js +++ b/functions/livekit-webhook/src/main.js @@ -8,8 +8,8 @@ export default async (context) => { throwIfMissing(process.env, [ 'APPWRITE_API_KEY', 'MASTER_DATABASE_ID', - 'ROOMS_COLLECTION_ID', - 'PARTICIPANTS_COLLECTION_ID', + 'ROOMS_TABLE_ID', + 'PARTICIPANTS_TABLE_ID', 'LIVEKIT_API_KEY', 'LIVEKIT_API_SECRET', ]); diff --git a/functions/match-maker/package-lock.json b/functions/match-maker/package-lock.json index cc6a575..c62349b 100644 --- a/functions/match-maker/package-lock.json +++ b/functions/match-maker/package-lock.json @@ -1,132 +1,48 @@ { - "name": "starter-template", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "starter-template", - "version": "1.0.0", - "dependencies": { - "node-appwrite": "^17.0.0" - }, - "devDependencies": { - "prettier": "^3.0.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "name": "match-maker", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "match-maker", + "version": "1.0.0", + "dependencies": { + "node-appwrite": "^18.0.0" + }, + "devDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/node-appwrite": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", + "license": "BSD-3-Clause", + "dependencies": { + "node-fetch-native-with-agent": "1.7.2" + } + }, + "node_modules/node-fetch-native-with-agent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz", + "integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==", + "license": "MIT" + }, + "node_modules/prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", + "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-appwrite": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-9.0.0.tgz", - "integrity": "sha512-iTcHbuaJfr6bP/HFkRVV+FcaumKkbINqZyypQdl+tYxv6Dx0bkB/YKUXGYfTkgP18TLPWQQB++OGQhi98dlo2w==", - "dependencies": { - "axios": "^1.3.6", - "form-data": "^4.0.0" - } - }, - "node_modules/prettier": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", - "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" } - } -} \ No newline at end of file +} diff --git a/functions/match-maker/package.json b/functions/match-maker/package.json index 9dce7c6..af3a398 100644 --- a/functions/match-maker/package.json +++ b/functions/match-maker/package.json @@ -9,7 +9,7 @@ "format": "prettier --write ." }, "dependencies": { - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" diff --git a/functions/match-maker/src/main.js b/functions/match-maker/src/main.js index d578cae..935b587 100644 --- a/functions/match-maker/src/main.js +++ b/functions/match-maker/src/main.js @@ -1,12 +1,12 @@ -import { Client, Databases, ID, Query } from 'node-appwrite'; +import { Client, TablesDB, ID, Query } from 'node-appwrite'; import { throwIfMissing } from './utils.js'; export default async ({ req, res, log, error }) => { throwIfMissing(process.env, [ 'APPWRITE_API_KEY', 'DATABASE_ID', - 'REQUESTS_COLLECTION_ID', - 'ACTIVE_PAIRS_COLLECTION_ID', + 'REQUESTS_TABLE_ID', + 'ACTIVE_PAIRS_TABLE_ID', ]); const client = new Client() @@ -16,74 +16,77 @@ export default async ({ req, res, log, error }) => { .setProject(process.env.APPWRITE_FUNCTION_PROJECT_ID) .setKey(process.env.APPWRITE_API_KEY); - const db = new Databases(client); + const db = new TablesDB(client); log(req.headers); const triggerEvent = req.headers['x-appwrite-event']; const newRequestDocId = triggerEvent.split('.')[5]; log(newRequestDocId); - const newRequestDoc = await db.getDocument( - process.env.DATABASE_ID, - process.env.REQUESTS_COLLECTION_ID, - newRequestDocId - ); + const newRequestResult = await db.getRows({ + databaseId: process.env.DATABASE_ID, + tableId: process.env.REQUESTS_TABLE_ID, + queries: [Query.equal('$id', [newRequestDocId])] + }); + + if (newRequestResult.rows.length === 0) { + return res.json({ + message: 'Request not found', + }); + } + + const newRequestDoc = newRequestResult.rows[0]; if (!newRequestDoc.isRandom) { return res.json({ message: 'Request is not Random', }); } - const requestDocsRef = await db.listDocuments( - process.env.DATABASE_ID, - process.env.REQUESTS_COLLECTION_ID, - [ + const requestDocsRef = await db.listRows({ + databaseId: process.env.DATABASE_ID, + tableId: process.env.REQUESTS_TABLE_ID, + queries: [ Query.notEqual('$id', [newRequestDocId]), Query.equal('languageIso', [newRequestDoc.languageIso]), Query.equal('isAnonymous', [newRequestDoc.isAnonymous]), Query.equal('isRandom', [true]), Query.orderAsc('$createdAt'), Query.limit(25), - ] - ); - log(requestDocsRef.documents); // We get all the requests + }); + log(requestDocsRef.rows); // We get all the requests //Check if any other request can be matched for (let index = 0; index < requestDocsRef.total; index++) { try { // Create an active pair document (Gives error if a record with same userDocId exists and then we move to the next request) - const newPairDoc = await db.createDocument( - process.env.DATABASE_ID, - process.env.ACTIVE_PAIRS_COLLECTION_ID, - ID.unique(), - { + const newPairResult = await db.createRows({ + databaseId: process.env.DATABASE_ID, + tableId: process.env.ACTIVE_PAIRS_TABLE_ID, + rows: [{ + $id: ID.unique(), uid1: newRequestDoc.uid, - uid2: requestDocsRef.documents[index].uid, + uid2: requestDocsRef.rows[index].uid, userDocId1: newRequestDocId, - userDocId2: requestDocsRef.documents[index].$id, + userDocId2: requestDocsRef.rows[index].$id, ...(newRequestDoc.isAnonymous ? {} : { userName1: newRequestDoc.userName, userName2: - requestDocsRef.documents[index].userName, + requestDocsRef.rows[index].userName, }), - } - ); + }] + }); + const newPairDoc = newPairResult.rows[0]; log(newPairDoc); // Delete requests since we have paired them - await db.deleteDocument( - process.env.DATABASE_ID, - process.env.REQUESTS_COLLECTION_ID, - requestDocsRef.documents[index].$id - ); - await db.deleteDocument( - process.env.DATABASE_ID, - process.env.REQUESTS_COLLECTION_ID, - newRequestDocId - ); + await db.deleteRows({ + databaseId: process.env.DATABASE_ID, + tableId: process.env.REQUESTS_TABLE_ID, + queries: [Query.equal('$id', [requestDocsRef.rows[index].$id, newRequestDocId])] + }); return res.json({ message: 'Request was paired', diff --git a/functions/send-otp/package-lock.json b/functions/send-otp/package-lock.json index 08548f1..02f1fb6 100644 --- a/functions/send-otp/package-lock.json +++ b/functions/send-otp/package-lock.json @@ -1,141 +1,57 @@ { - "name": "starter-template", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "starter-template", - "version": "1.0.0", - "dependencies": { - "node-appwrite": "^17.0.0", - "nodemailer": "^6.9.5" - }, - "devDependencies": { - "prettier": "^3.0.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "name": "send-otp", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "send-otp", + "version": "1.0.0", + "dependencies": { + "node-appwrite": "^18.0.0", + "nodemailer": "^6.9.5" + }, + "devDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/node-appwrite": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", + "license": "BSD-3-Clause", + "dependencies": { + "node-fetch-native-with-agent": "1.7.2" + } + }, + "node_modules/node-fetch-native-with-agent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz", + "integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==", + "license": "MIT" + }, + "node_modules/nodemailer": { + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.5.tgz", + "integrity": "sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", + "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-appwrite": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-9.0.0.tgz", - "integrity": "sha512-iTcHbuaJfr6bP/HFkRVV+FcaumKkbINqZyypQdl+tYxv6Dx0bkB/YKUXGYfTkgP18TLPWQQB++OGQhi98dlo2w==", - "dependencies": { - "axios": "^1.3.6", - "form-data": "^4.0.0" - } - }, - "node_modules/nodemailer": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.5.tgz", - "integrity": "sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/prettier": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", - "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" } - } -} \ No newline at end of file +} diff --git a/functions/send-otp/package.json b/functions/send-otp/package.json index 73b4a81..98c8d4f 100644 --- a/functions/send-otp/package.json +++ b/functions/send-otp/package.json @@ -9,7 +9,7 @@ "format": "prettier --write ." }, "dependencies": { - "node-appwrite": "^17.0.0", + "node-appwrite": "^18.0.0", "nodemailer": "^6.9.5" }, "devDependencies": { diff --git a/functions/send-otp/src/appwrite.js b/functions/send-otp/src/appwrite.js index b65dcc8..5aab39f 100644 --- a/functions/send-otp/src/appwrite.js +++ b/functions/send-otp/src/appwrite.js @@ -1,4 +1,4 @@ -import { Client, Databases } from 'node-appwrite'; +import { Client, TablesDB } from 'node-appwrite'; class AppwriteService { constructor() { @@ -9,19 +9,19 @@ class AppwriteService { .setProject(process.env.APPWRITE_FUNCTION_PROJECT_ID) .setKey(process.env.APPWRITE_API_KEY); - this.databases = new Databases(client); + this.tables = new TablesDB(client); } async createOtpDocument(otpId, otp, date) { - await this.databases.createDocument( - process.env.VERIFICATION_DATABASE_ID, - process.env.OTP_COLLECTION_ID, - otpId, - { + await this.tables.createRows({ + databaseId: process.env.VERIFICATION_DATABASE_ID, + tableId: process.env.OTP_TABLE_ID, + rows: [{ + $id: otpId, otp, date - } - ); + }] + }); } } diff --git a/functions/send-otp/src/main.js b/functions/send-otp/src/main.js index 9449abc..1acf5d7 100644 --- a/functions/send-otp/src/main.js +++ b/functions/send-otp/src/main.js @@ -7,7 +7,7 @@ export default async ({ req, res, log, error }) => { throwIfMissing(process.env, [ "APPWRITE_API_KEY", "VERIFICATION_DATABASE_ID", - "OTP_COLLECTION_ID", + "OTP_TABLE_ID", "SENDER_MAIL", "SENDER_PASSWORD", ]); diff --git a/functions/send-story-notification/package-lock.json b/functions/send-story-notification/package-lock.json index 42659e9..f89c498 100644 --- a/functions/send-story-notification/package-lock.json +++ b/functions/send-story-notification/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "firebase-admin": "^11.11.0", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" } }, "node_modules/@babel/parser": { @@ -1586,9 +1586,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/node-appwrite": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-17.0.0.tgz", - "integrity": "sha512-5Moi5ENPnoAfU1/6CZP9K2NTuB6Nm3dSyhokno+24RDuP7czjXCdwzfeyjmyHieggbrLkN89AYSOv9W1XkCL9w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", "license": "BSD-3-Clause", "dependencies": { "node-fetch-native-with-agent": "1.7.2" diff --git a/functions/send-story-notification/package.json b/functions/send-story-notification/package.json index 9452f66..9ad2c4d 100644 --- a/functions/send-story-notification/package.json +++ b/functions/send-story-notification/package.json @@ -11,6 +11,6 @@ "license": "ISC", "dependencies": { "firebase-admin": "^11.11.0", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" } } \ No newline at end of file diff --git a/functions/send-story-notification/src/main.js b/functions/send-story-notification/src/main.js index db28ac4..a30cbb7 100644 --- a/functions/send-story-notification/src/main.js +++ b/functions/send-story-notification/src/main.js @@ -10,7 +10,7 @@ const app = admin.initializeApp({ module.exports = async function ({ req, res, log, error }) { var subscribersTokens = []; const client = new sdk.Client(); - const database = new sdk.Databases(client); + const database = new sdk.TablesDB(client); const query = sdk.Query; const { creatorId, payload } = JSON.parse(req.body); @@ -24,7 +24,18 @@ module.exports = async function ({ req, res, log, error }) { log("Send Notification"); log(creatorId); log(payload); - let creatorDoc = await database.getDocument(process.env.UserDataDatabaseID, process.env.UsersCollectionID, creatorId); + let creatorResult = await database.getRows({ + databaseId: process.env.UserDataDatabaseID, + tableId: process.env.UsersCollectionID, + queries: [query.equal('$id', [creatorId])] + }); + + if (creatorResult.rows.length === 0) { + log('Creator not found'); + return res.json({ message: 'Creator not found' }); + } + + let creatorDoc = creatorResult.rows[0]; log("Creator document retrieved"); // Extract FCM tokens from followers diff --git a/functions/sync-all-documents-with-meilisearch/package-lock.json b/functions/sync-all-documents-with-meilisearch/package-lock.json index fd21154..33200fe 100644 --- a/functions/sync-all-documents-with-meilisearch/package-lock.json +++ b/functions/sync-all-documents-with-meilisearch/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "dependencies": { "meilisearch": "^0.40.0", - "node-appwrite": "^14.1.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.2.5" @@ -32,9 +32,9 @@ } }, "node_modules/node-appwrite": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-14.1.0.tgz", - "integrity": "sha512-kuKAZrdaAcGYOMUXtxNb1j+uIy+FIMiiU1dFkgwTXLsMLeLvC6HJ8/FH/kN9JyrWR2a2zcGN7gWfyQgWYoLMTA==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", "license": "BSD-3-Clause", "dependencies": { "node-fetch-native-with-agent": "1.7.2" diff --git a/functions/sync-all-documents-with-meilisearch/package.json b/functions/sync-all-documents-with-meilisearch/package.json index 27080e2..3498c73 100644 --- a/functions/sync-all-documents-with-meilisearch/package.json +++ b/functions/sync-all-documents-with-meilisearch/package.json @@ -10,7 +10,7 @@ "keywords": [], "dependencies": { "meilisearch": "^0.40.0", - "node-appwrite": "^14.1.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.2.5" diff --git a/functions/sync-all-documents-with-meilisearch/src/main.js b/functions/sync-all-documents-with-meilisearch/src/main.js index b808897..9e8b40c 100644 --- a/functions/sync-all-documents-with-meilisearch/src/main.js +++ b/functions/sync-all-documents-with-meilisearch/src/main.js @@ -1,4 +1,4 @@ -import { Client, Databases, Query } from 'node-appwrite'; +import { Client, TablesDB, Query } from 'node-appwrite'; import { throwIfMissing } from './utils.js'; import { MeiliSearch } from 'meilisearch'; @@ -14,7 +14,7 @@ export default async ({ req, res, log }) => { .setProject(process.env.APPWRITE_FUNCTION_PROJECT_ID) .setKey(process.env.APPWRITE_API_KEY); - const databases = new Databases(client); + const databases = new TablesDB(client); const meilisearch = new MeiliSearch({ host: process.env.MEILISEARCH_ENDPOINT, @@ -32,11 +32,13 @@ export default async ({ req, res, log }) => { queries.push(Query.cursorAfter(storiesCursor)); } - const { documents } = await databases.listDocuments( - "stories", - "670259e900321c12a5a2", + const result = await databases.listRows({ + databaseId: "stories", + tableId: "670259e900321c12a5a2", queries - ); + }); + + const documents = result.rows; if (documents.length > 0) { storiesCursor = documents[documents.length - 1].$id; @@ -61,11 +63,13 @@ export default async ({ req, res, log }) => { queries.push(Query.cursorAfter(usersCursor)); } - const { documents } = await databases.listDocuments( - "64a1319104a149e16f5c", - "64a52f0a6c41ded09def", + const result = await databases.listRows({ + databaseId: "64a1319104a149e16f5c", + tableId: "64a52f0a6c41ded09def", queries - ); + }); + + const documents = result.rows; if (documents.length > 0) { usersCursor = documents[documents.length - 1].$id; diff --git a/functions/upcomingRoom-Message-Notification/package-lock.json b/functions/upcomingRoom-Message-Notification/package-lock.json index 42659e9..f89c498 100644 --- a/functions/upcomingRoom-Message-Notification/package-lock.json +++ b/functions/upcomingRoom-Message-Notification/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "firebase-admin": "^11.11.0", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" } }, "node_modules/@babel/parser": { @@ -1586,9 +1586,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/node-appwrite": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-17.0.0.tgz", - "integrity": "sha512-5Moi5ENPnoAfU1/6CZP9K2NTuB6Nm3dSyhokno+24RDuP7czjXCdwzfeyjmyHieggbrLkN89AYSOv9W1XkCL9w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", "license": "BSD-3-Clause", "dependencies": { "node-fetch-native-with-agent": "1.7.2" diff --git a/functions/upcomingRoom-Message-Notification/package.json b/functions/upcomingRoom-Message-Notification/package.json index 9452f66..9ad2c4d 100644 --- a/functions/upcomingRoom-Message-Notification/package.json +++ b/functions/upcomingRoom-Message-Notification/package.json @@ -11,6 +11,6 @@ "license": "ISC", "dependencies": { "firebase-admin": "^11.11.0", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" } } \ No newline at end of file diff --git a/functions/upcomingRoom-Message-Notification/src/main.js b/functions/upcomingRoom-Message-Notification/src/main.js index 9b7c3c9..8cd113f 100644 --- a/functions/upcomingRoom-Message-Notification/src/main.js +++ b/functions/upcomingRoom-Message-Notification/src/main.js @@ -10,7 +10,7 @@ const app = admin.initializeApp({ module.exports = async function ({ req, res, log, error }) { var subscribersTokens = []; const client = new sdk.Client(); - const database = new sdk.Databases(client); + const database = new sdk.TablesDB(client); const query = sdk.Query; const { roomId, payload } = JSON.parse(req.body); @@ -24,14 +24,29 @@ module.exports = async function ({ req, res, log, error }) { log("Send Notification"); log(roomId); log(payload); - let subscriberList = await database.listDocuments(process.env.UpcomingRoomsDataBaseID, process.env.SubscriberCollectionID, [query.equal('upcomingRoomId', [roomId])]); + let subscriberList = await database.listRows({ + databaseId: process.env.UpcomingRoomsDataBaseID, + tableId: process.env.SubscriberCollectionID, + queries: [query.equal('upcomingRoomId', [roomId])] + }); log("here as well") - subscriberList.documents.forEach(subscriber => { + subscriberList.rows.forEach(subscriber => { for (const token of subscriber["registrationTokens"]) { subscribersTokens.push(token); } }); - let document = await database.getDocument(process.env.UpcomingRoomsDataBaseID, process.env.UpcomingRoomsCollectionID, roomId); + let documentResult = await database.getRows({ + databaseId: process.env.UpcomingRoomsDataBaseID, + tableId: process.env.UpcomingRoomsCollectionID, + queries: [query.equal('$id', [roomId])] + }); + + if (documentResult.rows.length === 0) { + log('Room not found'); + return res.json({ message: 'Room not found' }); + } + + let document = documentResult.rows[0]; for (const creator_token of document["creator_fcm_tokens"]) { subscribersTokens.push(creator_token); } diff --git a/functions/upcomingRoom-isTime-checker/package-lock.json b/functions/upcomingRoom-isTime-checker/package-lock.json index 42659e9..f89c498 100644 --- a/functions/upcomingRoom-isTime-checker/package-lock.json +++ b/functions/upcomingRoom-isTime-checker/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "firebase-admin": "^11.11.0", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" } }, "node_modules/@babel/parser": { @@ -1586,9 +1586,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/node-appwrite": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-17.0.0.tgz", - "integrity": "sha512-5Moi5ENPnoAfU1/6CZP9K2NTuB6Nm3dSyhokno+24RDuP7czjXCdwzfeyjmyHieggbrLkN89AYSOv9W1XkCL9w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", "license": "BSD-3-Clause", "dependencies": { "node-fetch-native-with-agent": "1.7.2" diff --git a/functions/upcomingRoom-isTime-checker/package.json b/functions/upcomingRoom-isTime-checker/package.json index 9452f66..9ad2c4d 100644 --- a/functions/upcomingRoom-isTime-checker/package.json +++ b/functions/upcomingRoom-isTime-checker/package.json @@ -11,6 +11,6 @@ "license": "ISC", "dependencies": { "firebase-admin": "^11.11.0", - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" } } \ No newline at end of file diff --git a/functions/upcomingRoom-isTime-checker/src/main.js b/functions/upcomingRoom-isTime-checker/src/main.js index 42ac55f..b0a156d 100644 --- a/functions/upcomingRoom-isTime-checker/src/main.js +++ b/functions/upcomingRoom-isTime-checker/src/main.js @@ -10,7 +10,7 @@ const admin = require('firebase-admin'); module.exports = async function ({ req, res, log }) { var subscribersTokens = []; const client = new sdk.Client(); - const database = new sdk.Databases(client); + const database = new sdk.TablesDB(client); const query = sdk.Query; log("here"); client.setEndpoint( @@ -20,9 +20,12 @@ module.exports = async function ({ req, res, log }) { .setKey(process.env.APPWRITE_API_KEY); log(process.env.APPWRITE_FUNCTION_PROJECT_ID); log("here also"); - let upcomingRoomsList = await database.listDocuments(process.env.UpcomingRoomsDataBaseID, process.env.UpcomingRoomsCollectionID); + let upcomingRoomsList = await database.listRows({ + databaseId: process.env.UpcomingRoomsDataBaseID, + tableId: process.env.UpcomingRoomsCollectionID + }); log("here as well"); - for (const document of upcomingRoomsList.documents) { + for (const document of upcomingRoomsList.rows) { log("now here"); var scheduledDateTime = document["scheduledDateTime"]; log(scheduledDateTime); @@ -46,8 +49,13 @@ module.exports = async function ({ req, res, log }) { var timeLeftInMinutes = timeLeft / (1000 * 60); log(timeLeftInMinutes); if (timeLeftInMinutes <= 5 && timeLeftInMinutes >= -5 && document["isTime"] == false) { - await database.updateDocument(process.env.UpcomingRoomsDataBaseID, process.env.UpcomingRoomsCollectionID, document.$id, { - "isTime": true + await database.updateRows({ + databaseId: process.env.UpcomingRoomsDataBaseID, + tableId: process.env.UpcomingRoomsCollectionID, + queries: [query.equal('$id', [document.$id])], + data: { + "isTime": true + } }) // log("Send Notification"); // let subscriberList = await database.listDocuments(process.env.UpcomingRoomsDataBaseID, process.env.SubscriberCollectionID, [query.equal('upcomingRoomId', [document.$id])]); diff --git a/functions/verify-email/package-lock.json b/functions/verify-email/package-lock.json index a85c81b..7956a5e 100644 --- a/functions/verify-email/package-lock.json +++ b/functions/verify-email/package-lock.json @@ -8,106 +8,27 @@ "name": "verify-email", "version": "1.0.0", "dependencies": { - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/node-appwrite": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-9.0.0.tgz", - "integrity": "sha512-iTcHbuaJfr6bP/HFkRVV+FcaumKkbINqZyypQdl+tYxv6Dx0bkB/YKUXGYfTkgP18TLPWQQB++OGQhi98dlo2w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", + "license": "BSD-3-Clause", "dependencies": { - "axios": "^1.3.6", - "form-data": "^4.0.0" + "node-fetch-native-with-agent": "1.7.2" } }, + "node_modules/node-fetch-native-with-agent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz", + "integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==", + "license": "MIT" + }, "node_modules/prettier": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", @@ -122,11 +43,6 @@ "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" } } -} \ No newline at end of file +} diff --git a/functions/verify-email/package.json b/functions/verify-email/package.json index 865cb6d..e189ae3 100644 --- a/functions/verify-email/package.json +++ b/functions/verify-email/package.json @@ -9,7 +9,7 @@ "format": "prettier --write ." }, "dependencies": { - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" diff --git a/functions/verify-otp/package-lock.json b/functions/verify-otp/package-lock.json index 33b96e4..6bae292 100644 --- a/functions/verify-otp/package-lock.json +++ b/functions/verify-otp/package-lock.json @@ -8,16 +8,16 @@ "name": "verify-otp", "version": "1.0.0", "dependencies": { - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" } }, "node_modules/node-appwrite": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-17.0.0.tgz", - "integrity": "sha512-5Moi5ENPnoAfU1/6CZP9K2NTuB6Nm3dSyhokno+24RDuP7czjXCdwzfeyjmyHieggbrLkN89AYSOv9W1XkCL9w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-18.0.0.tgz", + "integrity": "sha512-2S0T17H2Gm5ZcdInCmHk8Pc8P6mKW8cDCoSBNF3PYGxbKjT51V/HY/2n6IPRqk2HrHPySmx3JIMN+V6QBprqAw==", "license": "BSD-3-Clause", "dependencies": { "node-fetch-native-with-agent": "1.7.2" diff --git a/functions/verify-otp/package.json b/functions/verify-otp/package.json index a28f592..588037e 100644 --- a/functions/verify-otp/package.json +++ b/functions/verify-otp/package.json @@ -9,7 +9,7 @@ "format": "prettier --write ." }, "dependencies": { - "node-appwrite": "^17.0.0" + "node-appwrite": "^18.0.0" }, "devDependencies": { "prettier": "^3.0.0" diff --git a/functions/verify-otp/src/main.js b/functions/verify-otp/src/main.js index 96375fb..121d8ea 100644 --- a/functions/verify-otp/src/main.js +++ b/functions/verify-otp/src/main.js @@ -1,12 +1,12 @@ -import { Client, Databases } from 'node-appwrite'; +import { Client, TablesDB, Query } from 'node-appwrite'; import { throwIfMissing } from './utils.js'; export default async ({ req, res, log, error }) => { throwIfMissing(process.env, [ 'APPWRITE_API_KEY', 'VERIFICATION_DATABASE_ID', - 'OTP_COLLECTION_ID', - 'VERIFY_COLLECTION_ID', + 'OTP_TABLE_ID', + 'VERIFY_TABLE_ID', ]); const client = new Client() @@ -16,7 +16,7 @@ export default async ({ req, res, log, error }) => { .setProject(process.env.APPWRITE_FUNCTION_PROJECT_ID) .setKey(process.env.APPWRITE_API_KEY); - const db = new Databases(client); + const db = new TablesDB(client); log(req.body); const { otpID, @@ -27,11 +27,18 @@ export default async ({ req, res, log, error }) => { let otpDocument; try { - otpDocument = await db.getDocument( - process.env.VERIFICATION_DATABASE_ID, - process.env.OTP_COLLECTION_ID, - otpID - ); + const otpResult = await db.getRows({ + databaseId: process.env.VERIFICATION_DATABASE_ID, + tableId: process.env.OTP_TABLE_ID, + queries: [Query.equal('$id', [otpID])] + }); + + if (otpResult.rows.length === 0) { + log("OTP document not found"); + return res.json({ message: "OTP not found" }, 404); + } + + otpDocument = otpResult.rows[0]; } catch (e) { log("error in getting the otp doc") error(String(e)); @@ -39,14 +46,14 @@ export default async ({ req, res, log, error }) => { } try { - await db.createDocument( - process.env.VERIFICATION_DATABASE_ID, - process.env.VERIFY_COLLECTION_ID, - verificationId, - { + await db.createRows({ + databaseId: process.env.VERIFICATION_DATABASE_ID, + tableId: process.env.VERIFY_TABLE_ID, + rows: [{ + $id: verificationId, status: String(otpDocument.otp === userOtp), - } - ); + }] + }); } catch (e) { log("error in creating the verification doc") error(String(e)); diff --git a/init.ps1 b/init.ps1 index 4dbac25..61da11f 100644 --- a/init.ps1 +++ b/init.ps1 @@ -44,7 +44,7 @@ docker run -it --add-host host.docker.internal:host-gateway --rm ` --volume /var/run/docker.sock:/var/run/docker.sock ` --volume "$(pwd)/appwrite:/usr/src/code/appwrite:rw" ` --entrypoint="install" ` - appwrite/appwrite:1.7.4 + appwrite/appwrite:1.8.0 $projectId = "resonate" diff --git a/init.sh b/init.sh index 2a3e39c..426de2b 100755 --- a/init.sh +++ b/init.sh @@ -40,7 +40,7 @@ docker run -it --add-host host.docker.internal:host-gateway --rm \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \ --entrypoint="install" \ - appwrite/appwrite:1.7.4 + appwrite/appwrite:1.8.0 projectId="resonate"