diff --git a/.changeset/cyan-swans-serve.md b/.changeset/cyan-swans-serve.md index bd26dee..d8046fb 100644 --- a/.changeset/cyan-swans-serve.md +++ b/.changeset/cyan-swans-serve.md @@ -2,4 +2,4 @@ '@lowdefy/community-plugin-nodemailer': patch --- -Escape host on email template. +Fix default email template to display the app host name. diff --git a/.changeset/poor-ladybugs-drive.md b/.changeset/poor-ladybugs-drive.md new file mode 100644 index 0000000..be8c241 --- /dev/null +++ b/.changeset/poor-ladybugs-drive.md @@ -0,0 +1,5 @@ +--- +'@lowdefy/community-plugin-mongodb': minor +--- + +Add option to configure MultiAppMongoDBAdapter collection names. diff --git a/.changeset/wise-rules-build.md b/.changeset/wise-rules-build.md new file mode 100644 index 0000000..661c24f --- /dev/null +++ b/.changeset/wise-rules-build.md @@ -0,0 +1,5 @@ +--- +'@lowdefy/community-plugin-mongodb': patch +--- + +Fix connection timeouts in MultiAppMongoDBAdapter. diff --git a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/MultiAppMongoDBAdapter.js b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/MultiAppMongoDBAdapter.js index 634b16d..c7d9262 100644 --- a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/MultiAppMongoDBAdapter.js +++ b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/MultiAppMongoDBAdapter.js @@ -13,59 +13,53 @@ function to({ id, ...data }) { return { _id: id, ...data }; } -function MultipleAppMongoDBAdapter({ properties }) { - const { appName, databaseUri, mongoDBClientOptions } = properties; - const dbPromise = (async () => { - const _db = (await new MongoClient(databaseUri, mongoDBClientOptions).connect()).db(); - return { - accounts: _db.collection('user_accounts'), - contacts: _db.collection('user_contacts'), - sessions: _db.collection('user_sessions'), - verificationTokens: _db.collection('user_verification_tokens'), - }; - })(); +function MultiAppMongoDBAdapter({ properties }) { + const { appName, collections, databaseUri, mongoDBClientOptions } = properties; + const mongoClient = new MongoClient(databaseUri, mongoDBClientOptions); + const collectionNames = { + accounts: collections?.accounts ?? 'user_accounts', + contacts: collections?.contacts ?? 'user_contacts', + sessions: collections?.sessions ?? 'user_sessions', + verificationTokens: collections?.verificationTokens ?? 'user_verification_tokens', + }; return { async createUser(adapterUserData) { - const db = await dbPromise; return createDatabaseUser({ adapterUserData, appName, - db, + collectionNames, inviteRequired: properties.invite?.required, + mongoClient, }); }, async getUser(userId) { - const db = await dbPromise; - return getUserFromDbById({ appName, db, userId }); + return getUserFromDbById({ appName, collectionNames, mongoClient, userId }); }, async getUserByEmail(email) { - const db = await dbPromise; - return getUserFromDbByEmail({ appName, db, email }); + return getUserFromDbByEmail({ appName, collectionNames, mongoClient, email }); }, async getUserByAccount(provider_providerAccountId) { - const db = await dbPromise; - const account = await db.accounts.findOne(provider_providerAccountId); + const account = await mongoClient + .db() + .collection(collectionNames.accounts) + .findOne(provider_providerAccountId); if (!account) return null; - return getUserFromDbById({ appName, db, userId: account.userId }); + return getUserFromDbById({ appName, collectionNames, mongoClient, userId: account.userId }); }, async updateUser(adapterUserData) { - const db = await dbPromise; - await updateDatabaseUser({ adapterUserData, db }); + await updateDatabaseUser({ adapterUserData, collectionNames, mongoClient }); return adapterUserData; }, // This is not yet implemented by Auth.js // and we want to set a disabled flag, not delete users // async deleteUser(userId) { - // console.log('deleteUser', userId); - // const db = await dbPromise; - // await Promise.all([ // db.accounts.deleteMany({ userId }), // db.sessions.deleteMany({ userId }), @@ -74,25 +68,32 @@ function MultipleAppMongoDBAdapter({ properties }) { // }, async linkAccount(account) { - await (await dbPromise).accounts.insertOne(to(account)); + await mongoClient.db().collection(collectionNames.accounts).insertOne(to(account)); return from(account); }, async unlinkAccount(provider_providerAccountId) { - const { value: account } = await ( - await dbPromise - ).accounts.findOneAndDelete(provider_providerAccountId); + const { value: account } = await mongoClient + .db() + .collection(collectionNames.accounts) + .findOneAndDelete(provider_providerAccountId); return from(account); }, async getSessionAndUser(sessionToken) { - const db = await dbPromise; - // eslint-disable-next-line no-unused-vars - const session = await db.sessions.findOne({ sessionToken }); + const session = await mongoClient + .db() + .collection(collectionNames.sessions) + .findOne({ sessionToken }); if (!session) return null; - const user = await getUserFromDbById({ appName, db, userId: session.userId }); + const user = await getUserFromDbById({ + appName, + collectionNames, + mongoClient, + userId: session.userId, + }); return { user, @@ -101,7 +102,7 @@ function MultipleAppMongoDBAdapter({ properties }) { }, async createSession(session) { - await (await dbPromise).sessions.insertOne(to(session)); + await mongoClient.db().collection(collectionNames.sessions).insertOne(to(session)); return session; }, @@ -109,34 +110,37 @@ function MultipleAppMongoDBAdapter({ properties }) { // eslint-disable-next-line no-unused-vars const { _id, ...session } = to(data); - const result = await ( - await dbPromise - ).sessions.findOneAndUpdate( - { sessionToken: session.sessionToken }, - { $set: session }, - { returnDocument: 'after' } - ); + const result = await mongoClient + .db() + .collection(collectionNames.sessions) + .findOneAndUpdate( + { sessionToken: session.sessionToken }, + { $set: session }, + { returnDocument: 'after' } + ); return from(result.value); }, async deleteSession(sessionToken) { - const { value: session } = await ( - await dbPromise - ).sessions.findOneAndDelete({ - sessionToken, - }); + const { value: session } = await mongoClient + .db() + .collection(collectionNames.sessions) + .findOneAndDelete({ + sessionToken, + }); return from(session); }, async createVerificationToken(data) { - await (await dbPromise).verificationTokens.insertOne(to(data)); + await mongoClient.db().collection(collectionNames.verificationTokens).insertOne(to(data)); return data; }, async useVerificationToken(identifier_token) { - const { value: verificationToken } = await ( - await dbPromise - ).verificationTokens.findOneAndDelete(identifier_token); + const { value: verificationToken } = await mongoClient + .db() + .collection(collectionNames.verificationTokens) + .findOneAndDelete(identifier_token); if (!verificationToken) return null; return from(verificationToken); @@ -144,4 +148,4 @@ function MultipleAppMongoDBAdapter({ properties }) { }; } -export default MultipleAppMongoDBAdapter; +export default MultiAppMongoDBAdapter; diff --git a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUser.js b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUser.js index 743c9cd..b368e3b 100644 --- a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUser.js +++ b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUser.js @@ -1,20 +1,34 @@ import createDatabaseUserFromContact from './createDatabaseUserFromContact.js'; import createDatabaseUserWithoutContact from './createDatabaseUserWithoutContact.js'; -async function createDatabaseUser({ adapterUserData, appName, db, inviteRequired }) { - const contact = await db.contacts.findOne({ +async function createDatabaseUser({ + adapterUserData, + appName, + collectionNames, + inviteRequired, + mongoClient, +}) { + const contact = await mongoClient.db().collection(collectionNames.contacts).findOne({ lowercase_email: adapterUserData.email.toLowerCase(), }); if (contact) { - return createDatabaseUserFromContact({ adapterUserData, appName, contact, db, inviteRequired }); + return createDatabaseUserFromContact({ + adapterUserData, + appName, + collectionNames, + contact, + inviteRequired, + mongoClient, + }); } return createDatabaseUserWithoutContact({ adapterUserData, appName, - db, + collectionNames, inviteRequired, + mongoClient, }); } diff --git a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUserFromContact.js b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUserFromContact.js index 41bf6cc..f7e602c 100644 --- a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUserFromContact.js +++ b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUserFromContact.js @@ -3,9 +3,10 @@ import transformContactToAdapterUser from './transformContactToAdapterUser.js'; async function createDatabaseUserFromContact({ adapterUserData, appName, + collectionNames, contact, - db, inviteRequired, + mongoClient, }) { const invite = contact.apps?.[appName]?.invite; if (inviteRequired && (!invite || !invite.open)) { @@ -42,11 +43,10 @@ async function createDatabaseUserFromContact({ }; } - const { value: updatedContact } = await db.contacts.findOneAndUpdate( - { _id: contact._id }, - { $set: update }, - { returnDocument: 'after' } - ); + const { value: updatedContact } = await mongoClient + .db() + .collection(collectionNames.contacts) + .findOneAndUpdate({ _id: contact._id }, { $set: update }, { returnDocument: 'after' }); return transformContactToAdapterUser({ appName, contact: updatedContact }); } diff --git a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUserWithoutContact.js b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUserWithoutContact.js index f806d15..d6cf064 100644 --- a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUserWithoutContact.js +++ b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/createDatabaseUserWithoutContact.js @@ -2,7 +2,13 @@ import { v4 as uuid } from 'uuid'; import transformContactToAdapterUser from './transformContactToAdapterUser.js'; -async function createDatabaseUserWithoutContact({ adapterUserData, appName, db, inviteRequired }) { +async function createDatabaseUserWithoutContact({ + adapterUserData, + appName, + collectionNames, + inviteRequired, + mongoClient, +}) { if (inviteRequired) { throw new Error('Access denied.'); } @@ -29,7 +35,7 @@ async function createDatabaseUserWithoutContact({ adapterUserData, appName, db, contact.created = { timestamp: new Date(), user: { id: contact._id } }; contact.updated = { timestamp: new Date(), user: { id: contact._id } }; - await db.contacts.insertOne(contact); + await mongoClient.db().collection(collectionNames.contacts).insertOne(contact); return transformContactToAdapterUser({ appName, contact }); } diff --git a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/getUserFromDbByEmail.js b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/getUserFromDbByEmail.js index d4eaeec..b442c9f 100644 --- a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/getUserFromDbByEmail.js +++ b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/getUserFromDbByEmail.js @@ -1,7 +1,10 @@ import transformContactToAdapterUser from './transformContactToAdapterUser.js'; -async function getUserFromDbByEmail({ appName, db, email }) { - const contact = await db.contacts.findOne({ lowercase_email: email.toLowerCase() }); +async function getUserFromDbByEmail({ appName, collectionNames, email, mongoClient }) { + const contact = await mongoClient + .db() + .collection(collectionNames.contacts) + .findOne({ lowercase_email: email.toLowerCase() }); if ( !contact || contact.disabled || diff --git a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/getUserFromDbById.js b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/getUserFromDbById.js index 1ea1559..5c0599a 100644 --- a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/getUserFromDbById.js +++ b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/getUserFromDbById.js @@ -1,7 +1,10 @@ import transformContactToAdapterUser from './transformContactToAdapterUser.js'; -async function getUserFromDbById({ appName, db, userId }) { - const contact = await db.contacts.findOne({ _id: userId }); +async function getUserFromDbById({ appName, collectionNames, mongoClient, userId }) { + const contact = await mongoClient + .db() + .collection(collectionNames.contacts) + .findOne({ _id: userId }); if ( !contact || contact.disabled || diff --git a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/updateDatabaseUser.js b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/updateDatabaseUser.js index 8e7216d..8da9682 100644 --- a/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/updateDatabaseUser.js +++ b/plugins/community-plugin-mongodb/src/auth/adapters/MultiAppMongoDBAdapter/updateDatabaseUser.js @@ -1,6 +1,9 @@ -async function updateDatabaseUser({ adapterUserData, db }) { +async function updateDatabaseUser({ adapterUserData, collectionNames, mongoClient }) { const { emailVerified: email_verified, id, image } = adapterUserData; - await db.contacts.updateOne({ _id: id }, { $set: { email_verified, image } }); + await mongoClient + .db() + .collection(collectionNames.contacts) + .updateOne({ _id: id }, { $set: { email_verified, image } }); } export default updateDatabaseUser; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2cde649..518a1fc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,8 +144,8 @@ importers: specifier: 13.5.4 version: 13.5.4(@babel/core@7.23.2)(react-dom@18.2.0)(react@18.2.0) next-auth: - specifier: 4.24.4 - version: 4.24.4(next@13.5.4)(nodemailer@6.9.7)(react-dom@18.2.0)(react@18.2.0) + specifier: 4.23.2 + version: 4.23.2(next@13.5.4)(react-dom@18.2.0)(react@18.2.0) opener: specifier: 1.5.2 version: 1.5.2 @@ -241,12 +241,12 @@ importers: version: 5.6.0 next-auth: specifier: '4' - version: 4.24.4(next@14.0.2)(react-dom@18.2.0)(react@18.2.0) + version: 4.24.4(next@13.5.4)(nodemailer@6.9.7)(react-dom@18.2.0)(react@18.2.0) saslprep: specifier: 1.0.3 version: 1.0.3 uuid: - specifier: 9.0.1 + specifier: '9' version: 9.0.1 devDependencies: '@lowdefy/ajv': @@ -2156,16 +2156,12 @@ packages: next-auth: ^4 dependencies: mongodb: 4.17.1 - next-auth: 4.24.4(next@14.0.2)(react-dom@18.2.0)(react@18.2.0) + next-auth: 4.24.4(next@13.5.4)(nodemailer@6.9.7)(react-dom@18.2.0)(react@18.2.0) dev: false /@next/env@13.5.4: resolution: {integrity: sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==} - /@next/env@14.0.2: - resolution: {integrity: sha512-HAW1sljizEaduEOes/m84oUqeIDAUYBR1CDwu2tobNlNDFP3cSm9d6QsOsGeNlIppU1p/p1+bWbYCbvwjFiceA==} - dev: false - /@next/eslint-plugin-next@13.5.4: resolution: {integrity: sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==} dependencies: @@ -2180,15 +2176,6 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-arm64@14.0.2: - resolution: {integrity: sha512-i+jQY0fOb8L5gvGvojWyZMfQoQtDVB2kYe7fufOEiST6sicvzI2W5/EXo4lX5bLUjapHKe+nFxuVv7BA+Pd7LQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-darwin-x64@13.5.4: resolution: {integrity: sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==} engines: {node: '>= 10'} @@ -2197,15 +2184,6 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-x64@14.0.2: - resolution: {integrity: sha512-zRCAO0d2hW6gBEa4wJaLn+gY8qtIqD3gYd9NjruuN98OCI6YyelmhWVVLlREjS7RYrm9OUQIp/iVJFeB6kP1hg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-gnu@13.5.4: resolution: {integrity: sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==} engines: {node: '>= 10'} @@ -2214,15 +2192,6 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm64-gnu@14.0.2: - resolution: {integrity: sha512-tSJmiaon8YaKsVhi7GgRizZoV0N1Sx5+i+hFTrCKKQN7s3tuqW0Rov+RYdPhAv/pJl4qiG+XfSX4eJXqpNg3dA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-musl@13.5.4: resolution: {integrity: sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==} engines: {node: '>= 10'} @@ -2231,15 +2200,6 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm64-musl@14.0.2: - resolution: {integrity: sha512-dXJLMSEOwqJKcag1BeX1C+ekdPPJ9yXbWIt3nAadhbLx5CjACoB2NQj9Xcqu2tmdr5L6m34fR+fjGPs+ZVPLzA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-gnu@13.5.4: resolution: {integrity: sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==} engines: {node: '>= 10'} @@ -2248,15 +2208,6 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-x64-gnu@14.0.2: - resolution: {integrity: sha512-WC9KAPSowj6as76P3vf1J3mf2QTm3Wv3FBzQi7UJ+dxWjK3MhHVWsWUo24AnmHx9qDcEtHM58okgZkXVqeLB+Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-musl@13.5.4: resolution: {integrity: sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==} engines: {node: '>= 10'} @@ -2265,15 +2216,6 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-x64-musl@14.0.2: - resolution: {integrity: sha512-KSSAwvUcjtdZY4zJFa2f5VNJIwuEVnOSlqYqbQIawREJA+gUI6egeiRu290pXioQXnQHYYdXmnVNZ4M+VMB7KQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-arm64-msvc@13.5.4: resolution: {integrity: sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==} engines: {node: '>= 10'} @@ -2282,15 +2224,6 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-arm64-msvc@14.0.2: - resolution: {integrity: sha512-2/O0F1SqJ0bD3zqNuYge0ok7OEWCQwk55RPheDYD0va5ij7kYwrFkq5ycCRN0TLjLfxSF6xI5NM6nC5ux7svEQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-ia32-msvc@13.5.4: resolution: {integrity: sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==} engines: {node: '>= 10'} @@ -2299,15 +2232,6 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-ia32-msvc@14.0.2: - resolution: {integrity: sha512-vJI/x70Id0oN4Bq/R6byBqV1/NS5Dl31zC+lowO8SDu1fHmUxoAdILZR5X/sKbiJpuvKcCrwbYgJU8FF/Gh50Q==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-x64-msvc@13.5.4: resolution: {integrity: sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==} engines: {node: '>= 10'} @@ -2316,15 +2240,6 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-x64-msvc@14.0.2: - resolution: {integrity: sha512-Ut4LXIUvC5m8pHTe2j0vq/YDnTEyq6RSR9vHYPqnELrDapPhLNz9Od/L5Ow3J8RNDWpEnfCiQXuVdfjlNEJ7ug==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -4127,10 +4042,6 @@ packages: /caniuse-lite@1.0.30001549: resolution: {integrity: sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==} - /caniuse-lite@1.0.30001561: - resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==} - dev: false - /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} dependencies: @@ -7888,8 +7799,8 @@ packages: next: 13.5.4(@babel/core@7.23.2)(react-dom@18.2.0)(react@18.2.0) oauth: 0.9.15 openid-client: 5.6.1 - preact: 10.18.1 - preact-render-to-string: 5.2.6(preact@10.18.1) + preact: 10.18.2 + preact-render-to-string: 5.2.6(preact@10.18.2) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) uuid: 8.3.2 @@ -7921,31 +7832,6 @@ packages: uuid: 8.3.2 dev: false - /next-auth@4.24.4(next@14.0.2)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-5DGffi+OpkbU62vPQIJ1z+hFnmow+ec5Qrn9m6eoglIO51m0DlrmLxBduZEwKAYDEg9k2joi1yelgmq1vqK3aQ==} - peerDependencies: - next: ^12.2.5 || ^13 || ^14 - nodemailer: ^6.6.5 - react: ^17.0.2 || ^18 - react-dom: ^17.0.2 || ^18 - peerDependenciesMeta: - nodemailer: - optional: true - dependencies: - '@babel/runtime': 7.23.2 - '@panva/hkdf': 1.1.1 - cookie: 0.5.0 - jose: 4.15.4 - next: 14.0.2(@babel/core@7.23.2)(react-dom@18.2.0)(react@18.2.0) - oauth: 0.9.15 - openid-client: 5.6.1 - preact: 10.18.2 - preact-render-to-string: 5.2.6(preact@10.18.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - uuid: 8.3.2 - dev: false - /next-with-less@3.0.1(less-loader@11.1.3)(less@4.2.0)(next@13.5.4): resolution: {integrity: sha512-lVJQ+dNWGpR1ccWM/LjY+8i28DC2oPa1Ivrc+h4+DFPJJN6O2EGKZIFBGrd9GLbwAEjFzKPs7yUk6bnrbY0qcw==} peerDependencies: @@ -7997,45 +7883,6 @@ packages: - '@babel/core' - babel-plugin-macros - /next@14.0.2(@babel/core@7.23.2)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-jsAU2CkYS40GaQYOiLl9m93RTv2DA/tTJ0NRlmZIBIL87YwQ/xR8k796z7IqgM3jydI8G25dXvyYMC9VDIevIg==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true - dependencies: - '@next/env': 14.0.2 - '@swc/helpers': 0.5.2 - busboy: 1.6.0 - caniuse-lite: 1.0.30001561 - postcss: 8.4.31 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.23.2)(react@18.2.0) - watchpack: 2.4.0 - optionalDependencies: - '@next/swc-darwin-arm64': 14.0.2 - '@next/swc-darwin-x64': 14.0.2 - '@next/swc-linux-arm64-gnu': 14.0.2 - '@next/swc-linux-arm64-musl': 14.0.2 - '@next/swc-linux-x64-gnu': 14.0.2 - '@next/swc-linux-x64-musl': 14.0.2 - '@next/swc-win32-arm64-msvc': 14.0.2 - '@next/swc-win32-ia32-msvc': 14.0.2 - '@next/swc-win32-x64-msvc': 14.0.2 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - /no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: @@ -8500,15 +8347,6 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 - /preact-render-to-string@5.2.6(preact@10.18.1): - resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} - peerDependencies: - preact: '>=10' - dependencies: - preact: 10.18.1 - pretty-format: 3.8.0 - dev: false - /preact-render-to-string@5.2.6(preact@10.18.2): resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: @@ -8518,10 +8356,6 @@ packages: pretty-format: 3.8.0 dev: false - /preact@10.18.1: - resolution: {integrity: sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==} - dev: false - /preact@10.18.2: resolution: {integrity: sha512-X/K43vocUHDg0XhWVmTTMbec4LT/iBMh+csCEqJk+pJqegaXsvjdqN80ZZ3L+93azWCnWCZ+WGwYb8SplxeNjA==} dev: false