From 4f98169846ba04a31532c9b7a7bde3b12003dd82 Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Sun, 28 Jan 2024 18:28:10 +0400 Subject: [PATCH 01/16] feat(adapters): update adapter-fauna to work with fql v10 --- packages/adapter-fauna/.fauna-migrate.cjs | 10 - packages/adapter-fauna/.fauna-project | 1 + packages/adapter-fauna/fauna/account.fsl | 8 + .../create-collection-accounts.fql | 3 - .../create-collection-sessions.fql | 3 - .../create-collection-users.fql | 3 - .../create-collection-verification_tokens.fql | 3 - ...nt_by_provider_and_provider_account_id.fql | 10 - .../create-index-accounts_by_user_id.fql | 7 - .../create-index-session_by_session_token.fql | 8 - .../create-index-sessions_by_user_id.fql | 7 - .../create-index-user_by_email.fql | 8 - ...fication_token_by_identifier_and_token.fql | 10 - .../fauna/resources/collections/accounts.fql | 1 - .../fauna/resources/collections/sessions.fql | 1 - .../fauna/resources/collections/users.fql | 1 - .../collections/verification_tokens.fql | 1 - ...nt_by_provider_and_provider_account_id.fql | 9 - .../resources/indexes/accounts_by_user_id.fql | 5 - .../indexes/session_by_session_token.fql | 6 - .../resources/indexes/sessions_by_user_id.fql | 5 - .../fauna/resources/indexes/user_by_email.fql | 6 - ...fication_token_by_identifier_and_token.fql | 9 - packages/adapter-fauna/fauna/schema.fql | 51 -- packages/adapter-fauna/fauna/session.fsl | 9 + packages/adapter-fauna/fauna/user.fsl | 9 + .../adapter-fauna/fauna/verificationToken.fsl | 5 + packages/adapter-fauna/package.json | 11 +- packages/adapter-fauna/src/index.ts | 443 +++++++++--------- .../adapter-fauna/src/objectToQueryValue.ts | 37 ++ packages/adapter-fauna/src/types.ts | 18 + packages/adapter-fauna/tests/index.test.ts | 60 ++- packages/adapter-fauna/tests/test.sh | 14 +- pnpm-lock.yaml | 269 +---------- 34 files changed, 364 insertions(+), 687 deletions(-) delete mode 100644 packages/adapter-fauna/.fauna-migrate.cjs create mode 100644 packages/adapter-fauna/.fauna-project create mode 100644 packages/adapter-fauna/fauna/account.fsl delete mode 100644 packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-accounts.fql delete mode 100644 packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-sessions.fql delete mode 100644 packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-users.fql delete mode 100644 packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-verification_tokens.fql delete mode 100644 packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-account_by_provider_and_provider_account_id.fql delete mode 100644 packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-accounts_by_user_id.fql delete mode 100644 packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-session_by_session_token.fql delete mode 100644 packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-sessions_by_user_id.fql delete mode 100644 packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-user_by_email.fql delete mode 100644 packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-verification_token_by_identifier_and_token.fql delete mode 100644 packages/adapter-fauna/fauna/resources/collections/accounts.fql delete mode 100644 packages/adapter-fauna/fauna/resources/collections/sessions.fql delete mode 100644 packages/adapter-fauna/fauna/resources/collections/users.fql delete mode 100644 packages/adapter-fauna/fauna/resources/collections/verification_tokens.fql delete mode 100644 packages/adapter-fauna/fauna/resources/indexes/account_by_provider_and_provider_account_id.fql delete mode 100644 packages/adapter-fauna/fauna/resources/indexes/accounts_by_user_id.fql delete mode 100644 packages/adapter-fauna/fauna/resources/indexes/session_by_session_token.fql delete mode 100644 packages/adapter-fauna/fauna/resources/indexes/sessions_by_user_id.fql delete mode 100644 packages/adapter-fauna/fauna/resources/indexes/user_by_email.fql delete mode 100644 packages/adapter-fauna/fauna/resources/indexes/verification_token_by_identifier_and_token.fql delete mode 100644 packages/adapter-fauna/fauna/schema.fql create mode 100644 packages/adapter-fauna/fauna/session.fsl create mode 100644 packages/adapter-fauna/fauna/user.fsl create mode 100644 packages/adapter-fauna/fauna/verificationToken.fsl create mode 100644 packages/adapter-fauna/src/objectToQueryValue.ts create mode 100644 packages/adapter-fauna/src/types.ts diff --git a/packages/adapter-fauna/.fauna-migrate.cjs b/packages/adapter-fauna/.fauna-migrate.cjs deleted file mode 100644 index ab7c677834..0000000000 --- a/packages/adapter-fauna/.fauna-migrate.cjs +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - directories: { - root: "fauna", - resources: "resources", - migrations: "migrations", - children: "dbs", - temp: "temp", - }, - collection: "migrations", -} diff --git a/packages/adapter-fauna/.fauna-project b/packages/adapter-fauna/.fauna-project new file mode 100644 index 0000000000..8d8b5b5917 --- /dev/null +++ b/packages/adapter-fauna/.fauna-project @@ -0,0 +1 @@ +schema_directory=fauna diff --git a/packages/adapter-fauna/fauna/account.fsl b/packages/adapter-fauna/fauna/account.fsl new file mode 100644 index 0000000000..4c41e2ce1c --- /dev/null +++ b/packages/adapter-fauna/fauna/account.fsl @@ -0,0 +1,8 @@ +collection Account { + index byUserId { + terms [.userId] + } + index byProviderAndProviderAccountId { + terms [.provider, .providerAccountId] + } +} diff --git a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-accounts.fql b/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-accounts.fql deleted file mode 100644 index 47d077e48b..0000000000 --- a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-accounts.fql +++ /dev/null @@ -1,3 +0,0 @@ -CreateCollection({ - "name": "accounts" -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-sessions.fql b/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-sessions.fql deleted file mode 100644 index d72955fbec..0000000000 --- a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-sessions.fql +++ /dev/null @@ -1,3 +0,0 @@ -CreateCollection({ - "name": "sessions" -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-users.fql b/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-users.fql deleted file mode 100644 index 92cd521bab..0000000000 --- a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-users.fql +++ /dev/null @@ -1,3 +0,0 @@ -CreateCollection({ - "name": "users" -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-verification_tokens.fql b/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-verification_tokens.fql deleted file mode 100644 index 5398a9a5cd..0000000000 --- a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-collection-verification_tokens.fql +++ /dev/null @@ -1,3 +0,0 @@ -CreateCollection({ - "name": "verification_tokens" -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-account_by_provider_and_provider_account_id.fql b/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-account_by_provider_and_provider_account_id.fql deleted file mode 100644 index 0d07b946f6..0000000000 --- a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-account_by_provider_and_provider_account_id.fql +++ /dev/null @@ -1,10 +0,0 @@ -CreateIndex({ - "name": "account_by_provider_and_provider_account_id", - "source": Collection("accounts"), - "unique": true, - "terms": [{ - "field": ["data", "provider"] - }, { - "field": ["data", "providerAccountId"] - }] -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-accounts_by_user_id.fql b/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-accounts_by_user_id.fql deleted file mode 100644 index f6e8256075..0000000000 --- a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-accounts_by_user_id.fql +++ /dev/null @@ -1,7 +0,0 @@ -CreateIndex({ - "name": "accounts_by_user_id", - "source": Collection("accounts"), - "terms": [{ - "field": ["data", "userId"] - }] -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-session_by_session_token.fql b/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-session_by_session_token.fql deleted file mode 100644 index 11ac5a12ab..0000000000 --- a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-session_by_session_token.fql +++ /dev/null @@ -1,8 +0,0 @@ -CreateIndex({ - "name": "session_by_session_token", - "source": Collection("sessions"), - "unique": true, - "terms": [{ - "field": ["data", "sessionToken"] - }] -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-sessions_by_user_id.fql b/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-sessions_by_user_id.fql deleted file mode 100644 index 73c0824d9b..0000000000 --- a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-sessions_by_user_id.fql +++ /dev/null @@ -1,7 +0,0 @@ -CreateIndex({ - "name": "sessions_by_user_id", - "source": Collection("sessions"), - "terms": [{ - "field": ["data", "userId"] - }] -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-user_by_email.fql b/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-user_by_email.fql deleted file mode 100644 index d13320be40..0000000000 --- a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-user_by_email.fql +++ /dev/null @@ -1,8 +0,0 @@ -CreateIndex({ - "name": "user_by_email", - "source": Collection("users"), - "unique": true, - "terms": [{ - "field": ["data", "email"] - }] -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-verification_token_by_identifier_and_token.fql b/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-verification_token_by_identifier_and_token.fql deleted file mode 100644 index 11d8951902..0000000000 --- a/packages/adapter-fauna/fauna/migrations/2021-08-16T18_37_57.207Z/create-index-verification_token_by_identifier_and_token.fql +++ /dev/null @@ -1,10 +0,0 @@ -CreateIndex({ - "name": "verification_token_by_identifier_and_token", - "source": Collection("verification_tokens"), - "unique": true, - "terms": [{ - "field": ["data", "identifier"] - }, { - "field": ["data", "token"] - }] -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/resources/collections/accounts.fql b/packages/adapter-fauna/fauna/resources/collections/accounts.fql deleted file mode 100644 index 664d556ef8..0000000000 --- a/packages/adapter-fauna/fauna/resources/collections/accounts.fql +++ /dev/null @@ -1 +0,0 @@ -CreateCollection({ name: "accounts" }) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/resources/collections/sessions.fql b/packages/adapter-fauna/fauna/resources/collections/sessions.fql deleted file mode 100644 index 5660e5419e..0000000000 --- a/packages/adapter-fauna/fauna/resources/collections/sessions.fql +++ /dev/null @@ -1 +0,0 @@ -CreateCollection({ name: "sessions" }) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/resources/collections/users.fql b/packages/adapter-fauna/fauna/resources/collections/users.fql deleted file mode 100644 index 020d2a93a3..0000000000 --- a/packages/adapter-fauna/fauna/resources/collections/users.fql +++ /dev/null @@ -1 +0,0 @@ -CreateCollection({ name: "users" }) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/resources/collections/verification_tokens.fql b/packages/adapter-fauna/fauna/resources/collections/verification_tokens.fql deleted file mode 100644 index 016070a8da..0000000000 --- a/packages/adapter-fauna/fauna/resources/collections/verification_tokens.fql +++ /dev/null @@ -1 +0,0 @@ -CreateCollection({ name: "verification_tokens" }) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/resources/indexes/account_by_provider_and_provider_account_id.fql b/packages/adapter-fauna/fauna/resources/indexes/account_by_provider_and_provider_account_id.fql deleted file mode 100644 index ef823c23e4..0000000000 --- a/packages/adapter-fauna/fauna/resources/indexes/account_by_provider_and_provider_account_id.fql +++ /dev/null @@ -1,9 +0,0 @@ -CreateIndex({ - name: "account_by_provider_and_provider_account_id", - source: Collection("accounts"), - unique: true, - terms: [ - { field: ["data", "provider"] }, - { field: ["data", "providerAccountId"] }, - ], -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/resources/indexes/accounts_by_user_id.fql b/packages/adapter-fauna/fauna/resources/indexes/accounts_by_user_id.fql deleted file mode 100644 index 9eb9e8e56c..0000000000 --- a/packages/adapter-fauna/fauna/resources/indexes/accounts_by_user_id.fql +++ /dev/null @@ -1,5 +0,0 @@ -CreateIndex({ - name: "accounts_by_user_id", - source: Collection("accounts"), - terms: [{ field: ["data", "userId"] }] -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/resources/indexes/session_by_session_token.fql b/packages/adapter-fauna/fauna/resources/indexes/session_by_session_token.fql deleted file mode 100644 index 9160b68ee2..0000000000 --- a/packages/adapter-fauna/fauna/resources/indexes/session_by_session_token.fql +++ /dev/null @@ -1,6 +0,0 @@ -CreateIndex({ - name: "session_by_session_token", - source: Collection("sessions"), - unique: true, - terms: [{ field: ["data", "sessionToken"] }], -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/resources/indexes/sessions_by_user_id.fql b/packages/adapter-fauna/fauna/resources/indexes/sessions_by_user_id.fql deleted file mode 100644 index 84c8ff8682..0000000000 --- a/packages/adapter-fauna/fauna/resources/indexes/sessions_by_user_id.fql +++ /dev/null @@ -1,5 +0,0 @@ -CreateIndex({ - name: "sessions_by_user_id", - source: Collection("sessions"), - terms: [{ field: ["data", "userId"] }] -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/resources/indexes/user_by_email.fql b/packages/adapter-fauna/fauna/resources/indexes/user_by_email.fql deleted file mode 100644 index 1b132a2fda..0000000000 --- a/packages/adapter-fauna/fauna/resources/indexes/user_by_email.fql +++ /dev/null @@ -1,6 +0,0 @@ -CreateIndex({ - name: "user_by_email", - source: Collection("users"), - unique: true, - terms: [{ field: ["data", "email"] }], -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/resources/indexes/verification_token_by_identifier_and_token.fql b/packages/adapter-fauna/fauna/resources/indexes/verification_token_by_identifier_and_token.fql deleted file mode 100644 index 4a6bea339e..0000000000 --- a/packages/adapter-fauna/fauna/resources/indexes/verification_token_by_identifier_and_token.fql +++ /dev/null @@ -1,9 +0,0 @@ -CreateIndex({ - name: "verification_token_by_identifier_and_token", - source: Collection("verification_tokens"), - unique: true, - terms: [ - { field: ["data", "identifier"] }, - { field: ["data", "token"] }, - ], -}) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/schema.fql b/packages/adapter-fauna/fauna/schema.fql deleted file mode 100644 index 451cda1126..0000000000 --- a/packages/adapter-fauna/fauna/schema.fql +++ /dev/null @@ -1,51 +0,0 @@ -// First run this in the Fauna shell to create the collections -Do( - CreateCollection({ name: "users" }), - CreateCollection({ name: "accounts" }), - CreateCollection({ name: "sessions" }), - CreateCollection({ name: "verification_tokens" }) -) - -// Then run this in the Fauna shell to create indexes -Do( - CreateIndex({ - name: "accounts_by_user_id", - source: Collection("accounts"), - terms: [{ field: ["data", "userId"] }] - }), - CreateIndex({ - name: "session_by_session_token", - source: Collection("sessions"), - unique: true, - terms: [{ field: ["data", "sessionToken"] }], - }), - CreateIndex({ - name: "sessions_by_user_id", - source: Collection("sessions"), - terms: [{ field: ["data", "userId"] }] - }), - CreateIndex({ - name: "user_by_email", - source: Collection("users"), - unique: true, - terms: [{ field: ["data", "email"] }], - }), - CreateIndex({ - name: "account_by_provider_and_provider_account_id", - source: Collection("accounts"), - unique: true, - terms: [ - { field: ["data", "provider"] }, - { field: ["data", "providerAccountId"] }, - ], - }), - CreateIndex({ - name: "verification_token_by_identifier_and_token", - source: Collection("verification_tokens"), - unique: true, - terms: [ - { field: ["data", "identifier"] }, - { field: ["data", "token"] }, - ], - }) -) \ No newline at end of file diff --git a/packages/adapter-fauna/fauna/session.fsl b/packages/adapter-fauna/fauna/session.fsl new file mode 100644 index 0000000000..2f52a31efd --- /dev/null +++ b/packages/adapter-fauna/fauna/session.fsl @@ -0,0 +1,9 @@ +collection Session { + unique [.sessionToken] + index bySessionToken { + terms [.sessionToken] + } + index byUserId { + terms [.userId] + } +} diff --git a/packages/adapter-fauna/fauna/user.fsl b/packages/adapter-fauna/fauna/user.fsl new file mode 100644 index 0000000000..f633d01e48 --- /dev/null +++ b/packages/adapter-fauna/fauna/user.fsl @@ -0,0 +1,9 @@ +collection User { + unique [.email, .data.id] + index byEmail { + terms [.email] + } + index byUserId { + terms [.data.id] + } +} diff --git a/packages/adapter-fauna/fauna/verificationToken.fsl b/packages/adapter-fauna/fauna/verificationToken.fsl new file mode 100644 index 0000000000..44c2169941 --- /dev/null +++ b/packages/adapter-fauna/fauna/verificationToken.fsl @@ -0,0 +1,5 @@ +collection VerificationToken { + index byIdentifierAndToken { + terms [.identifier, .token] + } +} diff --git a/packages/adapter-fauna/package.json b/packages/adapter-fauna/package.json index 7c0fe05ad5..e33dc5c38a 100644 --- a/packages/adapter-fauna/package.json +++ b/packages/adapter-fauna/package.json @@ -1,6 +1,6 @@ { "name": "@auth/fauna-adapter", - "version": "1.0.12", + "version": "2.0.0", "description": "Fauna Adapter for Auth.js", "homepage": "https://authjs.dev", "repository": "https://github.com/nextauthjs/next-auth", @@ -10,7 +10,8 @@ "author": "Bhanu Teja P", "contributors": [ "Nico Domino ", - "Balázs Orbán " + "Balázs Orbán ", + "Aske Hippe Brun " ], "type": "module", "types": "./index.d.ts", @@ -46,12 +47,8 @@ "dependencies": { "@auth/core": "workspace:*" }, - "peerDependencies": { - "faunadb": "^4.3.0" - }, "devDependencies": { - "@fauna-labs/fauna-schema-migrate": "^2.1.3", - "faunadb": "^4.3.0" + "fauna": "^1.3.1" }, "jest": { "preset": "utils/adapter" diff --git a/packages/adapter-fauna/src/index.ts b/packages/adapter-fauna/src/index.ts index 402cbb0c76..ef93cdd56d 100644 --- a/packages/adapter-fauna/src/index.ts +++ b/packages/adapter-fauna/src/index.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ /** *
*

Official Fauna adapter for Auth.js / NextAuth.js.

@@ -10,119 +9,36 @@ * ## Installation * * ```bash npm2yarn - * npm install @auth/fauna-adapter faunadb + * npm install @auth/fauna-adapter fauna * ``` * * @module @auth/fauna-adapter */ -import { - Client as FaunaClient, - ExprArg, - Collection, - Create, - Delete, - Exists, - Get, - If, - Index, - Let, - Match, - Ref, - Select, - Time, - Update, - Var, - Paginate, - Lambda, - Do, - Foreach, - errors, -} from "faunadb" +import { Adapter, AdapterAccount, AdapterUser } from "@auth/core/adapters" +import { Client, fql } from "fauna" +import { FaunaAccount, FaunaUser, FaunaVerificationToken } from "./types" +import { FaunaSession } from "./types" +import { objectToQueryValue } from "./objectToQueryValue" -import { - Adapter, - AdapterSession, - AdapterUser, - VerificationToken, -} from "@auth/core/adapters" +const userFields = fql` +email, +name, +image, +id: .data.id, +emailVerified +` -export const collections = { - Users: Collection("users"), - Accounts: Collection("accounts"), - Sessions: Collection("sessions"), - VerificationTokens: Collection("verification_tokens"), -} as const +export const sessionFields = fql` +sessionToken, +userId, +expires +` -export const indexes = { - AccountByProviderAndProviderAccountId: Index( - "account_by_provider_and_provider_account_id" - ), - UserByEmail: Index("user_by_email"), - SessionByToken: Index("session_by_session_token"), - VerificationTokenByIdentifierAndToken: Index( - "verification_token_by_identifier_and_token" - ), - SessionsByUser: Index("sessions_by_user_id"), - AccountsByUser: Index("accounts_by_user_id"), -} as const - -export const format = { - /** Takes a plain old JavaScript object and turns it into a Fauna object */ - to(object: Record) { - const newObject: Record = {} - for (const key in object) { - const value = object[key] - if (value instanceof Date) { - newObject[key] = Time(value.toISOString()) - } else { - newObject[key] = value - } - } - return newObject - }, - /** Takes a Fauna object and returns a plain old JavaScript object */ - from>(object: Record): T { - const newObject: Record = {} - for (const key in object) { - const value = object[key] - if (value?.value && typeof value.value === "string") { - newObject[key] = new Date(value.value) - } else { - newObject[key] = value - } - } - return newObject as T - }, -} - -/** - * Fauna throws an error when something is not found in the db, - * `next-auth` expects `null` to be returned - */ -export function query(f: FaunaClient, format: (...args: any) => any) { - return async function (expr: ExprArg): Promise { - try { - const result = await f.query<{ - data: T - ref: { id: string } - } | null>(expr) - if (!result) return null - return format({ ...result.data, id: result.ref.id }) - } catch (error) { - if ((error as errors.FaunaError).name === "NotFound") return null - if ( - (error as errors.FaunaError).description?.includes( - "Number or numeric String expected" - ) - ) - return null - - if (process.env.NODE_ENV === "test") console.error(error) - - throw error - } - } -} +export const verificationTokenFields = fql` +identifier, +expires, +token +` /** * @@ -130,20 +46,18 @@ export function query(f: FaunaClient, format: (...args: any) => any) { * * This is the Fauna Adapter for [`next-auth`](https://authjs.dev). This package can only be used in conjunction with the primary `next-auth` package. It is not a standalone package. * - * You can find the Fauna schema and seed information in the docs at [authjs.dev/reference/core/adapters/fauna](https://authjs.dev/reference/core/adapters/fauna). + * You can find the Fauna schema and seed information in the docs at [authjs.dev/reference/adapter/fauna](https://authjs.dev/reference/adapter/fauna). * * ### Configure Auth.js * * ```javascript title="pages/api/auth/[...nextauth].js" * import NextAuth from "next-auth" - * import { Client as FaunaClient } from "faunadb" + * import { Client } from "fauna" * import { FaunaAdapter } from "@auth/fauna-adapter" * - * const client = new FaunaClient({ + * const client = new Client({ * secret: "secret", - * scheme: "http", - * domain: "localhost", - * port: 8443, + * endpoint: new URL('http://localhost:8443') * }) * * // For more information on each option (and a full list of options) go to @@ -161,141 +75,218 @@ export function query(f: FaunaClient, format: (...args: any) => any) { * Run the following commands inside of the `Shell` tab in the Fauna dashboard to setup the appropriate collections and indexes. * * ```javascript - * CreateCollection({ name: "accounts" }) - * CreateCollection({ name: "sessions" }) - * CreateCollection({ name: "users" }) - * CreateCollection({ name: "verification_tokens" }) - * ``` - * - * ```javascript - * CreateIndex({ - * name: "account_by_provider_and_provider_account_id", - * source: Collection("accounts"), - * unique: true, - * terms: [ - * { field: ["data", "provider"] }, - * { field: ["data", "providerAccountId"] }, - * ], + * Collection.create({ + * name: "Account", + * indexes: { + * byUserId: { + * terms: [ + * { field: "userId" } + * ] + * }, + * byProviderAndProviderAccountId: { + * terms [ + * { field: "provider" }, + * { field: "providerAccountId" } + * ] + * }, + * } * }) - * CreateIndex({ - * name: "session_by_session_token", - * source: Collection("sessions"), - * unique: true, - * terms: [{ field: ["data", "sessionToken"] }], + * Collection.create({ + * name: "Session", + * constraints: [ + * { + * unique: ["sessionToken"], + * status: "active", + * } + * ], + * indexes: { + * bySessionToken: { + * terms: [ + * { field: "sessionToken" } + * ] + * }, + * byUserId: { + * terms [ + * { field: "userId" } + * ] + * }, + * } * }) - * CreateIndex({ - * name: "user_by_email", - * source: Collection("users"), - * unique: true, - * terms: [{ field: ["data", "email"] }], + * Collection.create({ + * name: "User", + * constraints: [ + * { + * unique: ["email"], + * status: "active", + * }, + * { + * unique: ["data.id"], + * status: "active", + * } + * ], + * indexes: { + * byEmail: { + * terms [ + * { field: "email" } + * ] + * }, + * } * }) - * CreateIndex({ - * name: "verification_token_by_identifier_and_token", - * source: Collection("verification_tokens"), - * unique: true, - * terms: [{ field: ["data", "identifier"] }, { field: ["data", "token"] }], + * Collection.create({ + * name: "VerificationToken", + * indexes: { + * byIdentifierAndToken: { + * terms [ + * { field: "identifier" }, + * { field: "token" } + * ] + * }, + * } * }) * ``` * * > This schema is adapted for use in Fauna and based upon our main [schema](https://authjs.dev/reference/core/adapters#models) + * + * ### Migrating from v1 + * In v2, we've renamed the collections to use uppercase naming, in accordance with Fauna best practices. If you're migrating from v1, you'll need to rename your collections to match the new naming scheme. + * Additionally, we've renamed the indexes to match the new method-like index names. Please see above for the new index definitions. + * **/ -export function FaunaAdapter(f: FaunaClient): Adapter { - const { Users, Accounts, Sessions, VerificationTokens } = collections - const { - AccountByProviderAndProviderAccountId, - AccountsByUser, - SessionByToken, - SessionsByUser, - UserByEmail, - VerificationTokenByIdentifierAndToken, - } = indexes - const { to, from } = format - const q = query(f, from) +export function FaunaAdapter(client: Client): Adapter { return { - createUser: async (data) => (await q(Create(Users, { data: to(data) })))!, - getUser: async (id) => await q(Get(Ref(Users, id))), - getUserByEmail: async (email) => await q(Get(Match(UserByEmail, email))), + async createUser(user) { + const response = await client.query(fql`User.createData(${objectToQueryValue(user)}) { ${userFields} }`) + return { + ...response.data, + emailVerified: response.data.emailVerified.toDate(), + } + }, + async getUser(id) { + const response = await client.query(fql`User.byUserId(${id}).first() { ${userFields} }`) + if (response.data === null) return null + return { + ...response.data, + emailVerified: response.data.emailVerified.toDate(), + } + }, + async getUserByEmail(email) { + const response = await client.query(fql`User.byEmail(${email}).first() { ${userFields} }`) + if (response.data === null) return null + return { + ...response.data, + emailVerified: response.data.emailVerified.toDate(), + } + }, async getUserByAccount({ provider, providerAccountId }) { - const key = [provider, providerAccountId] - const ref = Match(AccountByProviderAndProviderAccountId, key) - const user = await q( - Let( - { ref }, - If( - Exists(Var("ref")), - Get(Ref(Users, Select(["data", "userId"], Get(Var("ref"))))), - null - ) - ) - ) - return user + const response = await client.query(fql` + let account = Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first() + if (account != null) { + User.byUserId(account.userId).first() { ${userFields} } + } else { + null + } + `) + if (response.data === null) return null + return { + ...response.data, + emailVerified: response.data.emailVerified.toDate(), + } + }, + async updateUser(user) { + const response = await client.query(fql`User.byUserId(${user.id}).first().updateData(${objectToQueryValue(user)}) { ${userFields} }`) + return { + ...response.data, + emailVerified: response.data.emailVerified.toDate(), + } }, - updateUser: async (data) => - (await q(Update(Ref(Users, data.id), { data: to(data) })))!, async deleteUser(userId) { - await f.query( - Do( - Foreach( - Paginate(Match(SessionsByUser, userId)), - Lambda("ref", Delete(Var("ref"))) - ), - Foreach( - Paginate(Match(AccountsByUser, userId)), - Lambda("ref", Delete(Var("ref"))) - ), - Delete(Ref(Users, userId)) - ) - ) + await client.query(fql` + // Delete the user's sessions + Session.byUserId(${userId}).forEach(session => session.delete()) + + // Delete the user's accounts + Account.byUserId(${userId}).forEach(account => account.delete()) + + // Delete the user + User.byUserId(${userId}).first().delete() + `) + }, + async linkAccount(account) { + await client.query(fql`Account.create(${objectToQueryValue(account)})`) }, - linkAccount: async (data) => - (await q(Create(Accounts, { data: to(data) })))!, async unlinkAccount({ provider, providerAccountId }) { - const id = [provider, providerAccountId] - await q( - Delete( - Select("ref", Get(Match(AccountByProviderAndProviderAccountId, id))) - ) - ) + await client.query(fql`Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first().delete()`) }, - createSession: async (data) => - (await q(Create(Sessions, { data: to(data) })))!, async getSessionAndUser(sessionToken) { - const session = await q( - Get(Match(SessionByToken, sessionToken)) - ) - if (!session) return null - - const user = await q(Get(Ref(Users, session.userId))) - - return { session, user: user! } + const response = await client.query<[FaunaUser, FaunaSession]>(fql` + let session = Session.bySessionToken(${sessionToken}).first() { ${sessionFields} } + if (session != null) { + let user = User.byUserId(session.userId).first() { ${userFields} } + if (user != null) { + [user, session] + } else { + null + } + } else { + null + } + `) + if (response.data === null) return null + const [user, session] = response.data + return { + session: { + ...session, + expires: session.expires.toDate(), + }, + user: { + ...user, + emailVerified: user.emailVerified.toDate(), + }, + } }, - async updateSession(data) { - const ref = Select("ref", Get(Match(SessionByToken, data.sessionToken))) - return await q(Update(ref, { data: to(data) })) + async createSession(session) { + const response = await client.query(fql`Session.create(${objectToQueryValue(session)}) { ${sessionFields} }`) + return { + ...response.data, + expires: response.data.expires.toDate(), + } + }, + async updateSession(session) { + const response = await client.query(fql`Session.bySessionToken(${session.sessionToken}).first().update(${objectToQueryValue(session)}) { ${sessionFields} }`) + return { + ...response.data, + expires: response.data.expires.toDate(), + } }, async deleteSession(sessionToken) { - await q(Delete(Select("ref", Get(Match(SessionByToken, sessionToken))))) + await client.query(fql`Session.bySessionToken(${sessionToken}).first().delete()`) }, - async createVerificationToken(data) { - // @ts-expect-error - const { id: _id, ...verificationToken } = await q( - Create(VerificationTokens, { data: to(data) }) - ) - return verificationToken + async createVerificationToken(verificationToken) { + const response = await client.query(fql`VerificationToken.create(${objectToQueryValue(verificationToken)}) { ${verificationTokenFields} }`) + return { + ...response.data, + expires: response.data.expires.toDate(), + } }, async useVerificationToken({ identifier, token }) { - const key = [identifier, token] - const object = Get(Match(VerificationTokenByIdentifierAndToken, key)) - - const verificationToken = await q(object) - if (!verificationToken) return null - - // Verification tokens can be used only once - await q(Delete(Select("ref", object))) - - // @ts-expect-error - delete verificationToken.id - return verificationToken + const response = await client.query(fql` + let verificationToken = VerificationToken.byIdentifierAndToken(${identifier}, ${token}).first() + if (verificationToken != null) { + let selection = verificationToken { ${verificationTokenFields} } + + // Verification tokens can be used only once + verificationToken.delete() + + selection + } else { + null + } + `) + if (response.data === null) return null + return { + ...response.data, + expires: response.data.expires.toDate(), + } }, } } diff --git a/packages/adapter-fauna/src/objectToQueryValue.ts b/packages/adapter-fauna/src/objectToQueryValue.ts new file mode 100644 index 0000000000..dcb64592ea --- /dev/null +++ b/packages/adapter-fauna/src/objectToQueryValue.ts @@ -0,0 +1,37 @@ +import { QueryValue, TimeStub } from "fauna" + +export const objectToQueryValue = (object: { + [key: string]: any +}): QueryValue => { + return Object.entries(object).reduce<{ + [key: string]: QueryValue + }>((acc, [key, value]) => { + if (value instanceof Date) { + return { + ...acc, + [key]: TimeStub.fromDate(value), + } + } + + if (typeof value === "string" && !isNaN(Date.parse(value))) { + return { + ...acc, + [key]: TimeStub.from(value), + } + } + + if (typeof value === "object" && + value !== null && + !Array.isArray(value)) { + return { + ...acc, + [key]: objectToQueryValue(value), + } + } + + return { + ...acc, + [key]: value ?? null, + } + }, {}) +} diff --git a/packages/adapter-fauna/src/types.ts b/packages/adapter-fauna/src/types.ts new file mode 100644 index 0000000000..7209670c12 --- /dev/null +++ b/packages/adapter-fauna/src/types.ts @@ -0,0 +1,18 @@ +import { AdapterUser, AdapterSession, VerificationToken, AdapterAccount } from "@auth/core/adapters" +import { TimeStub } from "fauna" + +export type FaunaUser = Omit & { + emailVerified: TimeStub +} + +export type FaunaSession = Omit & { + expires: TimeStub +} + +export type FaunaVerificationToken = Omit & { + expires: TimeStub +} + +export type FaunaAccount = Pick & { + session_state?: string +} diff --git a/packages/adapter-fauna/tests/index.test.ts b/packages/adapter-fauna/tests/index.test.ts index 88a3064125..34e009d86b 100644 --- a/packages/adapter-fauna/tests/index.test.ts +++ b/packages/adapter-fauna/tests/index.test.ts @@ -1,35 +1,53 @@ -import { collections, FaunaAdapter, format, indexes, query } from "../src" +import { FaunaAdapter, sessionFields, verificationTokenFields } from "../src" import { runBasicTests } from "utils/adapter" -import { Client as FaunaClient, Get, Match, Ref } from "faunadb" +import { Client, fql } from "fauna" +import { FaunaAccount, FaunaSession, FaunaVerificationToken } from "../src/types" -const client = new FaunaClient({ +const client = new Client({ secret: "secret", - scheme: "http", - domain: "localhost", - port: 8443, + endpoint: new URL("http://localhost:8443"), }) -const q = query(client, format.from) +const adapter = FaunaAdapter(client) runBasicTests({ - adapter: FaunaAdapter(client), + adapter, db: { - disconnect: async () => await client.close({ force: true }), - user: async (id) => await q(Get(Ref(collections.Users, id))), - session: async (sessionToken) => - await q(Get(Match(indexes.SessionByToken, sessionToken))), + disconnect: async () => client.close(), + user: adapter.getUser, + async session(sessionToken) { + const response = await client.query(fql`Session.bySessionToken(${sessionToken}).first() { ${sessionFields} }`) + if (response.data === null) return null + return { + ...response.data, + expires: response.data.expires.toDate() + } + }, async account({ provider, providerAccountId }) { - const key = [provider, providerAccountId] - const ref = Match(indexes.AccountByProviderAndProviderAccountId, key) - return await q(Get(ref)) + const response = await client.query(fql` + Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first() { + access_token, + expires_at, + id_token, + provider, + providerAccountId, + refresh_token, + scope, + session_state, + token_type, + type, + userId + } + `) + return response.data }, async verificationToken({ identifier, token }) { - const key = [identifier, token] - const ref = Match(indexes.VerificationTokenByIdentifierAndToken, key) - const verificationToken = await q(Get(ref)) - // @ts-expect-error - if (verificationToken) delete verificationToken.id - return verificationToken + const response = await client.query(fql`VerificationToken.byIdentifierAndToken(${identifier}, ${token}).first() { ${verificationTokenFields} }`) + if (response.data === null) return null + return { + ...response.data, + expires: response.data.expires.toDate() + } }, }, }) diff --git a/packages/adapter-fauna/tests/test.sh b/packages/adapter-fauna/tests/test.sh index 470fbd33a6..24778d665a 100755 --- a/packages/adapter-fauna/tests/test.sh +++ b/packages/adapter-fauna/tests/test.sh @@ -1,13 +1,10 @@ #!/usr/bin/env bash CONTAINER_NAME=next-auth-fauna-test -export FAUNADB_PORT=8443 -export FAUNA_ADMIN_KEY=secret -export FAUNADB_DOMAIN=localhost -export FAUNADB_SCHEME=http +FAUNADB_PORT=8443 +FAUNA_ADMIN_KEY=secret - -# Start db +# Start Docker docker run -d --rm \ --name ${CONTAINER_NAME} \ -p ${FAUNADB_PORT}:${FAUNADB_PORT} \ @@ -16,9 +13,8 @@ fauna/faunadb echo "Waiting 20 sec for db to start..." sleep 20 -# Create tables and indeces -npx fauna-schema-migrate generate -npx fauna-schema-migrate apply all +# Create collections and indexes +npx fauna schema push --url=http://localhost:8443 --force --secret=${FAUNA_ADMIN_KEY} # Always stop container, but exit with 1 when tests are failing if npx jest;then diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c190edf68..6c4cc535d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -359,12 +359,9 @@ importers: specifier: workspace:* version: link:../core devDependencies: - '@fauna-labs/fauna-schema-migrate': - specifier: ^2.1.3 - version: 2.2.1(faunadb@4.6.0) - faunadb: - specifier: ^4.3.0 - version: 4.6.0 + fauna: + specifier: ^1.3.1 + version: 1.3.1 packages/adapter-firebase: dependencies: @@ -3519,14 +3516,6 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.18.5: - resolution: {integrity: sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.22.4 - dev: true - /@babel/parser@7.22.4: resolution: {integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==} engines: {node: '>=6.0.0'} @@ -7485,40 +7474,6 @@ packages: text-decoding: 1.0.0 dev: true - /@fauna-labs/fauna-schema-migrate@2.2.1(faunadb@4.6.0): - resolution: {integrity: sha512-UYefaEMYwAg810vYvbvgQ2TbYGvnA2ZITZiX/yLG6BBSQEfTfA47AfzYeF9+1SQ0NM1fpUdse6d5z2NDmeDiTw==} - hasBin: true - peerDependencies: - faunadb: ^4.4.1 - dependencies: - '@babel/parser': 7.18.5 - '@types/deep-equal': 1.0.1 - '@types/fs-extra': 8.1.2 - '@types/js-beautify': 1.13.3 - '@types/lodash.clonedeep': 4.5.7 - '@types/node': 12.20.55 - '@types/prettier': 2.6.3 - '@types/shelljs': 0.8.11 - arr-rotate: 1.0.0 - boxen: 5.1.2 - chalk: 2.4.2 - cli-highlight: 2.1.11 - cli-spinners: 2.6.1 - commander: 2.20.3 - deep-equal: 2.0.5 - esbuild: 0.8.57 - faunadb: 4.6.0 - figures: 3.2.0 - fs-extra: 8.1.0 - glob: 7.2.3 - js-beautify: 1.14.4 - kleur: 4.1.4 - lodash.clonedeep: 4.5.0 - prompts: 2.4.2 - shelljs: 0.8.5 - uuid: 8.3.2 - dev: true - /@firebase/app-types@0.8.1: resolution: {integrity: sha512-p75Ow3QhB82kpMzmOntv866wH9eZ3b4+QbUY+8/DA5Zzdf1c8Nsk8B7kbFpzJt4wwHMdy5LTF5YUnoTc1JiWkw==} dev: true @@ -11228,10 +11183,6 @@ packages: dependencies: '@types/ms': 0.7.31 - /@types/deep-equal@1.0.1: - resolution: {integrity: sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==} - dev: true - /@types/duplexify@3.6.1: resolution: {integrity: sha512-n0zoEj/fMdMOvqbHxmqnza/kXyoGgJmEpsXjpP+gEqE1Ye4yNqc7xWipKnUoMpWhMuzJQSfK2gMrwlElly7OGQ==} dependencies: @@ -11282,19 +11233,6 @@ packages: '@types/serve-static': 1.13.10 dev: true - /@types/fs-extra@8.1.2: - resolution: {integrity: sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==} - dependencies: - '@types/node': 18.11.10 - dev: true - - /@types/glob@7.2.0: - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - dependencies: - '@types/minimatch': 3.0.5 - '@types/node': 18.11.10 - dev: true - /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} requiresBuild: true @@ -11369,10 +11307,6 @@ packages: pretty-format: 29.6.3 dev: true - /@types/js-beautify@1.13.3: - resolution: {integrity: sha512-ucIPw5gmNyvRKi6mpeojlqp+T+6ZBJeU+kqMDnIEDlijEU4QhLTon90sZ3cz9HZr+QTwXILjNsMZImzA7+zuJA==} - dev: true - /@types/js-yaml@4.0.9: resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} dev: true @@ -11412,16 +11346,6 @@ packages: requiresBuild: true dev: true - /@types/lodash.clonedeep@4.5.7: - resolution: {integrity: sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw==} - dependencies: - '@types/lodash': 4.14.182 - dev: true - - /@types/lodash@4.14.182: - resolution: {integrity: sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==} - dev: true - /@types/long@4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} dev: true @@ -11462,10 +11386,6 @@ packages: resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} dev: true - /@types/minimatch@3.0.5: - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - dev: true - /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} requiresBuild: true @@ -11657,10 +11577,6 @@ packages: '@types/pouchdb-replication': 6.4.4 dev: true - /@types/prettier@2.6.3: - resolution: {integrity: sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==} - dev: true - /@types/prismjs@1.26.3: resolution: {integrity: sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw==} @@ -11789,13 +11705,6 @@ packages: '@types/node': 18.11.10 dev: true - /@types/shelljs@0.8.11: - resolution: {integrity: sha512-x9yaMvEh5BEaZKeVQC4vp3l+QoFj3BXcd4aYfuKSzIIyihjdVARAadYy3SMNIz0WCCdS2vB9JL/U6GQk5PaxQw==} - dependencies: - '@types/glob': 7.2.0 - '@types/node': 18.11.10 - dev: true - /@types/sockjs@0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: @@ -12831,11 +12740,6 @@ packages: dequal: 2.0.3 dev: true - /arr-rotate@1.0.0: - resolution: {integrity: sha512-yOzOZcR9Tn7enTF66bqKorGGH0F36vcPaSWg8fO0c0UYb3LX3VMXj5ZxEqQLNOecAhlRJ7wYZja5i4jTlnbIfQ==} - engines: {node: '>=4'} - dev: true - /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -13023,11 +12927,6 @@ packages: postcss-value-parser: 4.2.0 dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - /aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} dev: true @@ -13595,6 +13494,7 @@ packages: /btoa-lite@1.0.0: resolution: {integrity: sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==} + dev: false /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -15417,26 +15317,6 @@ packages: type-detect: 4.0.8 dev: true - /deep-equal@2.0.5: - resolution: {integrity: sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==} - dependencies: - call-bind: 1.0.2 - es-get-iterator: 1.1.2 - get-intrinsic: 1.1.3 - is-arguments: 1.1.1 - is-date-object: 1.0.5 - is-regex: 1.1.4 - isarray: 2.0.5 - object-is: 1.1.5 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.8 - dev: true - /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -15834,6 +15714,7 @@ packages: /dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} + dev: false /dottie@2.0.2: resolution: {integrity: sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==} @@ -16012,16 +15893,6 @@ packages: engines: {node: '>= 12.0.0'} hasBin: true - /editorconfig@0.15.3: - resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==} - hasBin: true - dependencies: - commander: 2.20.3 - lru-cache: 4.1.5 - semver: 5.7.2 - sigmund: 1.0.1 - dev: true - /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -16199,19 +16070,6 @@ packages: unbox-primitive: 1.0.2 dev: true - /es-get-iterator@1.1.2: - resolution: {integrity: sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 - is-string: 1.0.7 - isarray: 2.0.5 - dev: true - /es-module-lexer@1.1.0: resolution: {integrity: sha512-fJg+1tiyEeS8figV+fPcPpm8WqJEflG3yPU0NOm5xMvrNkuiy7HzX/Ljng4Y0hAoiw4/3hQTCFYw+ub8+a2pRA==} dev: true @@ -16806,12 +16664,6 @@ packages: '@esbuild/win32-x64': 0.19.11 dev: true - /esbuild@0.8.57: - resolution: {integrity: sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA==} - hasBin: true - requiresBuild: true - dev: true - /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -17720,6 +17572,10 @@ packages: format: 0.2.2 dev: true + /fauna@1.3.1: + resolution: {integrity: sha512-A4JEj5v2KyOfjlze1Wb/fAWRxDfoGr61PhMvjV5jcfkLJ2ouzchsCXbzqzANetj8g/O/jth3wO2s02d6+ePuyQ==} + dev: true + /faunadb@4.6.0: resolution: {integrity: sha512-lBCS9wOLIdoeQmhzFvNAXM9B4T3Ptv2HUf0RrPsC2LA1zPtTQFBtdhH7fvTlwRyUawIKDjs1wn5pk2o8g0Cylg==} requiresBuild: true @@ -17736,6 +17592,7 @@ packages: util-deprecate: 1.0.2 transitivePeerDependencies: - encoding + dev: false /faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} @@ -18071,6 +17928,7 @@ packages: /fn-annotate@1.2.0: resolution: {integrity: sha512-j2gv2wkRhQgkJNf1ygdca8ynP3tK+a87bowc+RG81iWTye3yKIOeAkrKYv0Kqyh8yCeSyljOk3ZFelfXUFpirA==} engines: {node: '>=0.10.0'} + dev: false /fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -18088,12 +17946,6 @@ packages: debug: 4.3.4(supports-color@5.5.0) dev: true - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} @@ -19971,14 +19823,6 @@ packages: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true @@ -20127,10 +19971,6 @@ packages: tslib: 2.6.2 dev: true - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true - /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -20249,10 +20089,6 @@ packages: engines: {node: '>=6'} dev: true - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true - /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: @@ -20294,17 +20130,6 @@ packages: text-extensions: 1.9.0 dev: true - /is-typed-array@1.1.9: - resolution: {integrity: sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-abstract: 1.20.5 - for-each: 0.3.3 - has-tostringtag: 1.0.0 - dev: true - /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -20330,23 +20155,12 @@ packages: resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} dev: true - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true - /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 - dev: true - /is-what@4.1.8: resolution: {integrity: sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==} engines: {node: '>=12.13'} @@ -20400,10 +20214,6 @@ packages: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true - /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -21061,17 +20871,6 @@ packages: resolution: {integrity: sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==} dev: true - /js-beautify@1.14.4: - resolution: {integrity: sha512-+b4A9c3glceZEmxyIbxDOYB0ZJdReLvyU1077RqKsO4dZx9FUHjTOJn8VHwpg33QoucIykOiYbh7MfqBOghnrA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - config-chain: 1.1.13 - editorconfig: 0.15.3 - glob: 7.2.3 - nopt: 5.0.0 - dev: true - /js-sdsl@4.2.0: resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} dev: true @@ -21408,11 +21207,6 @@ packages: engines: {node: '>=6'} dev: true - /kleur@4.1.4: - resolution: {integrity: sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==} - engines: {node: '>=6'} - dev: true - /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -22039,13 +21833,6 @@ packages: yallist: 2.1.2 dev: true - /lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - dev: true - /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -24067,6 +23854,7 @@ packages: /node-abort-controller@3.0.1: resolution: {integrity: sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==} + dev: false /node-addon-api@4.3.0: resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} @@ -24376,14 +24164,6 @@ packages: /object-inspect@1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - dev: true - /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -27637,10 +27417,6 @@ packages: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} dev: true - /sigmund@1.0.1: - resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==} - dev: true - /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true @@ -31118,31 +30894,10 @@ packages: is-symbol: 1.0.4 dev: true - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - dev: true - /which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-typed-array@1.1.8: - resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-abstract: 1.20.5 - for-each: 0.3.3 - has-tostringtag: 1.0.0 - is-typed-array: 1.1.9 - dev: true - /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true From 5a5775a809d615763e5239e02929d2c77270d661 Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Sun, 28 Jan 2024 20:32:56 +0400 Subject: [PATCH 02/16] refactor: remove unused imports --- packages/adapter-fauna/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-fauna/src/index.ts b/packages/adapter-fauna/src/index.ts index ef93cdd56d..de767e5591 100644 --- a/packages/adapter-fauna/src/index.ts +++ b/packages/adapter-fauna/src/index.ts @@ -14,7 +14,7 @@ * * @module @auth/fauna-adapter */ -import { Adapter, AdapterAccount, AdapterUser } from "@auth/core/adapters" +import { Adapter } from "@auth/core/adapters" import { Client, fql } from "fauna" import { FaunaAccount, FaunaUser, FaunaVerificationToken } from "./types" import { FaunaSession } from "./types" From 4eeb73d0571a015a22f4b30686604d61a4eb585a Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Mon, 29 Jan 2024 12:47:43 +0400 Subject: [PATCH 03/16] fix(adapters): fix vitest command call in test.sh script --- packages/adapter-fauna/test/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-fauna/test/test.sh b/packages/adapter-fauna/test/test.sh index 15c16d66fe..f568237b38 100755 --- a/packages/adapter-fauna/test/test.sh +++ b/packages/adapter-fauna/test/test.sh @@ -17,7 +17,7 @@ sleep 20 npx fauna schema push --url=http://localhost:8443 --force --secret=${FAUNA_ADMIN_KEY} # Always stop container, but exit with 1 when tests are failing -if vitest -c ../utils/vitest.config.ts;then +if npx vitest -c ../../utils/vitest.config.ts;then docker stop ${CONTAINER_NAME} else docker stop ${CONTAINER_NAME} && exit 1 From 2112a9af81f1e0400c196fdc59422b6ccdbf0923 Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Mon, 29 Jan 2024 12:48:02 +0400 Subject: [PATCH 04/16] feat(adapters): only wait 3 seconds for db to start in test.sh file --- packages/adapter-fauna/test/test.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/adapter-fauna/test/test.sh b/packages/adapter-fauna/test/test.sh index f568237b38..53d12907a4 100755 --- a/packages/adapter-fauna/test/test.sh +++ b/packages/adapter-fauna/test/test.sh @@ -10,8 +10,8 @@ docker run -d --rm \ -p ${FAUNADB_PORT}:${FAUNADB_PORT} \ fauna/faunadb -echo "Waiting 20 sec for db to start..." -sleep 20 +echo "Waiting 3 sec for db to start..." +sleep 3 # Create collections and indexes npx fauna schema push --url=http://localhost:8443 --force --secret=${FAUNA_ADMIN_KEY} From 88d3e3116b2437a3f7e34105e001cb7b144279b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Orb=C3=A1n?= Date: Sun, 4 Feb 2024 01:39:59 +0000 Subject: [PATCH 05/16] Update package.json --- packages/adapter-fauna/package.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/adapter-fauna/package.json b/packages/adapter-fauna/package.json index 5bd7c3f558..1466e5e8a1 100644 --- a/packages/adapter-fauna/package.json +++ b/packages/adapter-fauna/package.json @@ -1,6 +1,6 @@ { "name": "@auth/fauna-adapter", - "version": "2.0.0", + "version": "1.2.0", "description": "Fauna Adapter for Auth.js", "homepage": "https://authjs.dev", "repository": "https://github.com/nextauthjs/next-auth", @@ -47,7 +47,10 @@ "dependencies": { "@auth/core": "workspace:*" }, + "peerDependencies": { + "fauna": "^1.3.1" + }, "devDependencies": { "fauna": "^1.3.1" } -} \ No newline at end of file +} From 72b99fa7fc3ba37612e5e0d395fbbc883c5ae943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Orb=C3=A1n?= Date: Sun, 4 Feb 2024 03:36:25 +0100 Subject: [PATCH 06/16] cleanup --- packages/adapter-fauna/src/index.ts | 161 ++++++++++-------- .../adapter-fauna/src/objectToQueryValue.ts | 37 ---- packages/adapter-fauna/src/types.ts | 18 -- 3 files changed, 92 insertions(+), 124 deletions(-) delete mode 100644 packages/adapter-fauna/src/objectToQueryValue.ts delete mode 100644 packages/adapter-fauna/src/types.ts diff --git a/packages/adapter-fauna/src/index.ts b/packages/adapter-fauna/src/index.ts index de767e5591..6571dddb60 100644 --- a/packages/adapter-fauna/src/index.ts +++ b/packages/adapter-fauna/src/index.ts @@ -14,17 +14,30 @@ * * @module @auth/fauna-adapter */ -import { Adapter } from "@auth/core/adapters" -import { Client, fql } from "fauna" -import { FaunaAccount, FaunaUser, FaunaVerificationToken } from "./types" -import { FaunaSession } from "./types" -import { objectToQueryValue } from "./objectToQueryValue" +import { Client, TimeStub, fql } from "fauna" -const userFields = fql` +import type { + Adapter, + AdapterUser, + AdapterSession, + VerificationToken, + AdapterAccount, +} from "@auth/core/adapters" + +type ToFauna = { + [P in keyof T]: T[P] extends Date | null ? TimeStub | null : T[P] +} + +export type FaunaUser = ToFauna +export type FaunaSession = ToFauna +export type FaunaVerificationToken = ToFauna +export type FaunaAccount = ToFauna & any // TODO: Remove `& any` + +export const userFields = fql` email, name, image, -id: .data.id, +id, emailVerified ` @@ -155,27 +168,22 @@ token export function FaunaAdapter(client: Client): Adapter { return { async createUser(user) { - const response = await client.query(fql`User.createData(${objectToQueryValue(user)}) { ${userFields} }`) - return { - ...response.data, - emailVerified: response.data.emailVerified.toDate(), - } + await client.query( + fql`User.createData(${format.to(user)}) { ${userFields} }` + ) + return user }, async getUser(id) { - const response = await client.query(fql`User.byUserId(${id}).first() { ${userFields} }`) - if (response.data === null) return null - return { - ...response.data, - emailVerified: response.data.emailVerified.toDate(), - } + const response = await client.query( + fql`User.byUserId(${id}).first() { ${userFields} }` + ) + return format.from(response.data) }, async getUserByEmail(email) { - const response = await client.query(fql`User.byEmail(${email}).first() { ${userFields} }`) - if (response.data === null) return null - return { - ...response.data, - emailVerified: response.data.emailVerified.toDate(), - } + const response = await client.query( + fql`User.byEmail(${email}).first() { ${userFields} }` + ) + return format.from(response.data) }, async getUserByAccount({ provider, providerAccountId }) { const response = await client.query(fql` @@ -186,18 +194,15 @@ export function FaunaAdapter(client: Client): Adapter { null } `) - if (response.data === null) return null - return { - ...response.data, - emailVerified: response.data.emailVerified.toDate(), - } + return format.from(response.data) }, async updateUser(user) { - const response = await client.query(fql`User.byUserId(${user.id}).first().updateData(${objectToQueryValue(user)}) { ${userFields} }`) - return { - ...response.data, - emailVerified: response.data.emailVerified.toDate(), - } + const response = await client.query( + fql`User.byUserId(${user.id}).first().updateData(${format.to( + user + )}) { ${userFields} }` + ) + return format.from(response.data) }, async deleteUser(userId) { await client.query(fql` @@ -212,10 +217,16 @@ export function FaunaAdapter(client: Client): Adapter { `) }, async linkAccount(account) { - await client.query(fql`Account.create(${objectToQueryValue(account)})`) + await client.query( + fql`Account.create(${format.to(account)})` + ) + return account }, async unlinkAccount({ provider, providerAccountId }) { - await client.query(fql`Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first().delete()`) + const response = await client.query( + fql`Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first().delete()` + ) + return format.from(response.data) }, async getSessionAndUser(sessionToken) { const response = await client.query<[FaunaUser, FaunaSession]>(fql` @@ -231,42 +242,35 @@ export function FaunaAdapter(client: Client): Adapter { null } `) - if (response.data === null) return null - const [user, session] = response.data - return { - session: { - ...session, - expires: session.expires.toDate(), - }, - user: { - ...user, - emailVerified: user.emailVerified.toDate(), - }, - } + const [user, session] = response.data ?? [] + return { session: format.from(session), user: format.from(user) } }, async createSession(session) { - const response = await client.query(fql`Session.create(${objectToQueryValue(session)}) { ${sessionFields} }`) - return { - ...response.data, - expires: response.data.expires.toDate(), - } + await client.query( + fql`Session.create(${format.to(session)}) { ${sessionFields} }` + ) + return session }, async updateSession(session) { - const response = await client.query(fql`Session.bySessionToken(${session.sessionToken}).first().update(${objectToQueryValue(session)}) { ${sessionFields} }`) - return { - ...response.data, - expires: response.data.expires.toDate(), - } + const response = await client.query( + fql`Session.bySessionToken(${ + session.sessionToken + }).first().update(${format.to(session)}) { ${sessionFields} }` + ) + return format.from(response.data) }, async deleteSession(sessionToken) { - await client.query(fql`Session.bySessionToken(${sessionToken}).first().delete()`) + await client.query( + fql`Session.bySessionToken(${sessionToken}).first().delete()` + ) }, async createVerificationToken(verificationToken) { - const response = await client.query(fql`VerificationToken.create(${objectToQueryValue(verificationToken)}) { ${verificationTokenFields} }`) - return { - ...response.data, - expires: response.data.expires.toDate(), - } + await client.query( + fql`VerificationToken.create(${format.to( + verificationToken + )}) { ${verificationTokenFields} }` + ) + return verificationToken }, async useVerificationToken({ identifier, token }) { const response = await client.query(fql` @@ -282,11 +286,30 @@ export function FaunaAdapter(client: Client): Adapter { null } `) - if (response.data === null) return null - return { - ...response.data, - expires: response.data.expires.toDate(), - } + return format.from(response.data) }, } } + +export const format = { + /** Takes an object that's coming from a database and converts it to plain JavaScript. */ + from(object: Record = {}): T { + if (!object) return null as unknown as T + const newObject: Record = {} + for (const [key, value] of Object.entries(object)) + if (value instanceof TimeStub) newObject[key] = value.toDate() + else newObject[key] = value + return newObject as T + }, + /** Takes an object that's coming from Auth.js and prepares it to be written to the database. */ + to(object: Record): T { + const newObject: Record = {} + for (const [key, value] of Object.entries(object)) + if (value instanceof Date) newObject[key] = TimeStub.fromDate(value) + else if (typeof value === "string" && !isNaN(Date.parse(value))) + newObject[key] = TimeStub.from(value) + else newObject[key] = value ?? null + + return newObject as T + }, +} diff --git a/packages/adapter-fauna/src/objectToQueryValue.ts b/packages/adapter-fauna/src/objectToQueryValue.ts deleted file mode 100644 index dcb64592ea..0000000000 --- a/packages/adapter-fauna/src/objectToQueryValue.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { QueryValue, TimeStub } from "fauna" - -export const objectToQueryValue = (object: { - [key: string]: any -}): QueryValue => { - return Object.entries(object).reduce<{ - [key: string]: QueryValue - }>((acc, [key, value]) => { - if (value instanceof Date) { - return { - ...acc, - [key]: TimeStub.fromDate(value), - } - } - - if (typeof value === "string" && !isNaN(Date.parse(value))) { - return { - ...acc, - [key]: TimeStub.from(value), - } - } - - if (typeof value === "object" && - value !== null && - !Array.isArray(value)) { - return { - ...acc, - [key]: objectToQueryValue(value), - } - } - - return { - ...acc, - [key]: value ?? null, - } - }, {}) -} diff --git a/packages/adapter-fauna/src/types.ts b/packages/adapter-fauna/src/types.ts deleted file mode 100644 index 7209670c12..0000000000 --- a/packages/adapter-fauna/src/types.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { AdapterUser, AdapterSession, VerificationToken, AdapterAccount } from "@auth/core/adapters" -import { TimeStub } from "fauna" - -export type FaunaUser = Omit & { - emailVerified: TimeStub -} - -export type FaunaSession = Omit & { - expires: TimeStub -} - -export type FaunaVerificationToken = Omit & { - expires: TimeStub -} - -export type FaunaAccount = Pick & { - session_state?: string -} From 0a1d1851228b43cf1fa611ef5c8ac3b2c4400fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Orb=C3=A1n?= Date: Sun, 4 Feb 2024 03:36:51 +0100 Subject: [PATCH 07/16] fix test runs --- packages/adapter-fauna/package.json | 6 +- packages/adapter-fauna/test/index.test.ts | 45 +- packages/adapter-fauna/test/test.sh | 8 +- pnpm-lock.yaml | 783 ++++++++++++++++++++-- 4 files changed, 756 insertions(+), 86 deletions(-) diff --git a/packages/adapter-fauna/package.json b/packages/adapter-fauna/package.json index 1466e5e8a1..89468dc747 100644 --- a/packages/adapter-fauna/package.json +++ b/packages/adapter-fauna/package.json @@ -38,10 +38,9 @@ "access": "public" }, "scripts": { + "fauna": "fauna", "build": "tsc", "dev": "tsc -w", - "clean": "rm -rf dist", - "migrate": "fauna-schema-migrate generate", "test": "./test/test.sh" }, "dependencies": { @@ -51,6 +50,7 @@ "fauna": "^1.3.1" }, "devDependencies": { - "fauna": "^1.3.1" + "fauna": "^1.3.1", + "fauna-shell": "1.2.1" } } diff --git a/packages/adapter-fauna/test/index.test.ts b/packages/adapter-fauna/test/index.test.ts index 34e009d86b..73bde7ce5b 100644 --- a/packages/adapter-fauna/test/index.test.ts +++ b/packages/adapter-fauna/test/index.test.ts @@ -1,7 +1,19 @@ -import { FaunaAdapter, sessionFields, verificationTokenFields } from "../src" +import { + FaunaAdapter, + format, + userFields, + sessionFields, + verificationTokenFields, +} from "../src" import { runBasicTests } from "utils/adapter" import { Client, fql } from "fauna" -import { FaunaAccount, FaunaSession, FaunaVerificationToken } from "../src/types" + +import type { + FaunaUser, + FaunaAccount, + FaunaSession, + FaunaVerificationToken, +} from "../src" const client = new Client({ secret: "secret", @@ -14,14 +26,17 @@ runBasicTests({ adapter, db: { disconnect: async () => client.close(), - user: adapter.getUser, + user: async (id) => { + const response = await client.query( + fql`User.byId(${id}) { ${userFields} }` + ) + return format.from(response.data) + }, async session(sessionToken) { - const response = await client.query(fql`Session.bySessionToken(${sessionToken}).first() { ${sessionFields} }`) - if (response.data === null) return null - return { - ...response.data, - expires: response.data.expires.toDate() - } + const response = await client.query( + fql`Session.bySessionToken(${sessionToken}).first() { ${sessionFields} }` + ) + return format.from(response.data) }, async account({ provider, providerAccountId }) { const response = await client.query(fql` @@ -39,15 +54,13 @@ runBasicTests({ userId } `) - return response.data + return format.from(response.data) }, async verificationToken({ identifier, token }) { - const response = await client.query(fql`VerificationToken.byIdentifierAndToken(${identifier}, ${token}).first() { ${verificationTokenFields} }`) - if (response.data === null) return null - return { - ...response.data, - expires: response.data.expires.toDate() - } + const response = await client.query( + fql`VerificationToken.byIdentifierAndToken(${identifier}, ${token}).first() { ${verificationTokenFields} }` + ) + return format.from(response.data) }, }, }) diff --git a/packages/adapter-fauna/test/test.sh b/packages/adapter-fauna/test/test.sh index 53d12907a4..6227da1403 100755 --- a/packages/adapter-fauna/test/test.sh +++ b/packages/adapter-fauna/test/test.sh @@ -10,14 +10,14 @@ docker run -d --rm \ -p ${FAUNADB_PORT}:${FAUNADB_PORT} \ fauna/faunadb -echo "Waiting 3 sec for db to start..." -sleep 3 +echo "Waiting 10 sec for db to start..." +sleep 10 # Create collections and indexes -npx fauna schema push --url=http://localhost:8443 --force --secret=${FAUNA_ADMIN_KEY} +fauna schema push --url=http://localhost:8443 --force --secret=${FAUNA_ADMIN_KEY} # Always stop container, but exit with 1 when tests are failing -if npx vitest -c ../../utils/vitest.config.ts;then +if vitest -c ../utils/vitest.config.ts;then docker stop ${CONTAINER_NAME} else docker stop ${CONTAINER_NAME} && exit 1 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 72638f7b02..cf86bdd315 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -335,6 +335,9 @@ importers: fauna: specifier: ^1.3.1 version: 1.3.1 + fauna-shell: + specifier: 1.2.1 + version: 1.2.1(@types/node@18.11.10)(typescript@5.3.3) packages/adapter-firebase: dependencies: @@ -909,7 +912,7 @@ packages: '@babel/generator': 7.23.6 '@babel/parser': 7.23.9 '@babel/runtime': 7.23.9 - '@babel/traverse': 7.23.9(supports-color@5.5.0) + '@babel/traverse': 7.23.9 '@babel/types': 7.23.9 babel-preset-fbjs: 3.4.0(@babel/core@7.23.9) chalk: 4.1.2 @@ -1753,7 +1756,7 @@ packages: resolution: {integrity: sha512-/i5dXM+QAtO+6atYd5oHGBAx48EGSISkXNXViheliOQe+SIFMDo3gSq3lL54W0suOSAsVPws3XnTaIHlla0PIQ==} engines: {node: '>=0.8.0'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -1793,10 +1796,10 @@ packages: '@babel/helpers': 7.23.9 '@babel/parser': 7.23.9 '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9(supports-color@5.5.0) + '@babel/traverse': 7.23.9 '@babel/types': 7.23.9 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -1873,7 +1876,7 @@ packages: '@babel/core': 7.23.9 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -2010,7 +2013,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9(supports-color@5.5.0) + '@babel/traverse': 7.23.9 '@babel/types': 7.23.9 transitivePeerDependencies: - supports-color @@ -3083,6 +3086,23 @@ packages: '@babel/parser': 7.23.9 '@babel/types': 7.23.9 + /@babel/traverse@7.23.9: + resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + /@babel/traverse@7.23.9(supports-color@5.5.0): resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} engines: {node: '>=6.9.0'} @@ -3099,6 +3119,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: false /@babel/types@7.23.9: resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} @@ -3179,6 +3200,13 @@ packages: chalk: 4.1.2 dev: true + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + /@dabh/diagnostics@2.0.3: resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} dependencies: @@ -3242,7 +3270,7 @@ packages: '@babel/preset-typescript': 7.23.3(@babel/core@7.23.9) '@babel/runtime': 7.23.9 '@babel/runtime-corejs3': 7.23.9 - '@babel/traverse': 7.23.9(supports-color@5.5.0) + '@babel/traverse': 7.23.9 '@docusaurus/cssnano-preset': 3.0.0 '@docusaurus/logger': 3.0.0 '@docusaurus/mdx-loader': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0) @@ -3365,7 +3393,7 @@ packages: react-dom: ^18.0.0 dependencies: '@babel/parser': 7.23.9 - '@babel/traverse': 7.23.9(supports-color@5.5.0) + '@babel/traverse': 7.23.9 '@docusaurus/logger': 3.0.0 '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) @@ -4733,7 +4761,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.0 @@ -5337,7 +5365,7 @@ packages: '@babel/core': 7.23.9 '@babel/parser': 7.23.9 '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.9) - '@babel/traverse': 7.23.9(supports-color@5.5.0) + '@babel/traverse': 7.23.9 '@babel/types': 7.23.9 '@graphql-tools/utils': 10.0.13(graphql@16.8.1) graphql: 16.8.1 @@ -5417,7 +5445,7 @@ packages: '@types/json-stable-stringify': 1.0.36 '@whatwg-node/fetch': 0.9.16 chalk: 4.1.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) dotenv: 16.4.1 graphql: 16.8.1 graphql-request: 6.1.0(graphql@16.8.1) @@ -5564,7 +5592,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -5583,6 +5611,125 @@ packages: resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} dev: true + /@inquirer/checkbox@1.5.2: + resolution: {integrity: sha512-CifrkgQjDkUkWexmgYYNyB5603HhTHI91vLFeQXh6qrTKiCMVASol01Rs1cv6LP/A2WccZSRlJKZhbaBIs/9ZA==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.1.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + figures: 3.2.0 + dev: true + + /@inquirer/confirm@2.0.17: + resolution: {integrity: sha512-EqzhGryzmGpy2aJf6LxJVhndxYmFs+m8cxXzf8nejb1DE3sabf6mUgBcp4J0jAUEiAcYzqmkqRr7LPFh/WdnXA==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.1.6 + chalk: 4.1.2 + dev: true + + /@inquirer/core@6.0.0: + resolution: {integrity: sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/type': 1.1.6 + '@types/mute-stream': 0.0.4 + '@types/node': 20.11.7 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-spinners: 2.9.2 + cli-width: 4.1.0 + figures: 3.2.0 + mute-stream: 1.0.0 + run-async: 3.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + + /@inquirer/editor@1.2.15: + resolution: {integrity: sha512-gQ77Ls09x5vKLVNMH9q/7xvYPT6sIs5f7URksw+a2iJZ0j48tVS6crLqm2ugG33tgXHIwiEqkytY60Zyh5GkJQ==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.1.6 + chalk: 4.1.2 + external-editor: 3.1.0 + dev: true + + /@inquirer/expand@1.1.16: + resolution: {integrity: sha512-TGLU9egcuo+s7PxphKUCnJnpCIVY32/EwPCLLuu+gTvYiD8hZgx8Z2niNQD36sa6xcfpdLY6xXDBiL/+g1r2XQ==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.1.6 + chalk: 4.1.2 + figures: 3.2.0 + dev: true + + /@inquirer/input@1.2.16: + resolution: {integrity: sha512-Ou0LaSWvj1ni+egnyQ+NBtfM1885UwhRCMtsRt2bBO47DoC1dwtCa+ZUNgrxlnCHHF0IXsbQHYtIIjFGAavI4g==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.1.6 + chalk: 4.1.2 + dev: true + + /@inquirer/password@1.1.16: + resolution: {integrity: sha512-aZYZVHLUXZ2gbBot+i+zOJrks1WaiI95lvZCn1sKfcw6MtSSlYC8uDX8sTzQvAsQ8epHoP84UNvAIT0KVGOGqw==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.1.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + dev: true + + /@inquirer/prompts@3.3.2: + resolution: {integrity: sha512-k52mOMRvTUejrqyF1h8Z07chC+sbaoaUYzzr1KrJXyj7yaX7Nrh0a9vktv8TuocRwIJOQMaj5oZEmkspEcJFYQ==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/checkbox': 1.5.2 + '@inquirer/confirm': 2.0.17 + '@inquirer/core': 6.0.0 + '@inquirer/editor': 1.2.15 + '@inquirer/expand': 1.1.16 + '@inquirer/input': 1.2.16 + '@inquirer/password': 1.1.16 + '@inquirer/rawlist': 1.2.16 + '@inquirer/select': 1.3.3 + dev: true + + /@inquirer/rawlist@1.2.16: + resolution: {integrity: sha512-pZ6TRg2qMwZAOZAV6TvghCtkr53dGnK29GMNQ3vMZXSNguvGqtOVc4j/h1T8kqGJFagjyfBZhUPGwNS55O5qPQ==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.1.6 + chalk: 4.1.2 + dev: true + + /@inquirer/select@1.3.3: + resolution: {integrity: sha512-RzlRISXWqIKEf83FDC9ZtJ3JvuK1l7aGpretf41BCWYrvla2wU8W8MTRNMiPrPJ+1SIqrRC1nZdZ60hD9hRXLg==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.1.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + figures: 3.2.0 + dev: true + + /@inquirer/type@1.1.6: + resolution: {integrity: sha512-OCKOpn0CrFDslR8s3who7hlr823zXTb1iShGCaaWgEJFfkIV0T9aLZV2QGnOuU78IrsPYLkr3oKx9dZwwCH3Rw==} + engines: {node: '>=14.18.0'} + dev: true + /@ioredis/commands@1.2.0: resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} dev: true @@ -5655,6 +5802,13 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@js-joda/core@3.2.0: resolution: {integrity: sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==} dev: true @@ -6316,6 +6470,113 @@ packages: dev: true optional: true + /@oclif/color@1.0.13: + resolution: {integrity: sha512-/2WZxKCNjeHlQogCs1VBtJWlPXjwWke/9gMrwsVsrUt00g2V6LUBvwgwrxhrXepjOmq4IZ5QeNbpDMEOUlx/JA==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-styles: 4.3.0 + chalk: 4.1.2 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + tslib: 2.6.2 + dev: true + + /@oclif/core@2.15.0(@types/node@18.11.10)(typescript@5.3.3): + resolution: {integrity: sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==} + engines: {node: '>=14.0.0'} + dependencies: + '@types/cli-progress': 3.11.5 + ansi-escapes: 4.3.2 + ansi-styles: 4.3.0 + cardinal: 2.1.1 + chalk: 4.1.2 + clean-stack: 3.0.1 + cli-progress: 3.12.0 + debug: 4.3.4(supports-color@8.1.1) + ejs: 3.1.9 + get-package-type: 0.1.0 + globby: 11.1.0 + hyperlinker: 1.0.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + js-yaml: 3.14.1 + natural-orderby: 2.0.3 + object-treeify: 1.1.33 + password-prompt: 1.1.3 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + supports-hyperlinks: 2.3.0 + ts-node: 10.9.2(@types/node@18.11.10)(typescript@5.3.3) + tslib: 2.6.2 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - typescript + dev: true + + /@oclif/errors@1.3.6: + resolution: {integrity: sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ==} + engines: {node: '>=8.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + clean-stack: 3.0.1 + fs-extra: 8.1.0 + indent-string: 4.0.0 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /@oclif/linewrap@1.0.0: + resolution: {integrity: sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==} + dev: true + + /@oclif/plugin-help@5.2.20(@types/node@18.11.10)(typescript@5.3.3): + resolution: {integrity: sha512-u+GXX/KAGL9S10LxAwNUaWdzbEBARJ92ogmM7g3gDVud2HioCmvWQCDohNRVZ9GYV9oKwZ/M8xwd6a1d95rEKQ==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/core': 2.15.0(@types/node@18.11.10)(typescript@5.3.3) + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - typescript + dev: true + + /@oclif/plugin-plugins@2.4.7(@types/node@18.11.10)(typescript@5.3.3): + resolution: {integrity: sha512-6fzUDLWrSK7n6+EBrEekEEYrYTCneRoOF9TzojkjuFn1+ailvUlr98G90bblxKOyy8fqMe7QjvqwTgIDQ9ZIzg==} + engines: {node: '>=12.0.0'} + dependencies: + '@oclif/color': 1.0.13 + '@oclif/core': 2.15.0(@types/node@18.11.10)(typescript@5.3.3) + chalk: 4.1.2 + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 9.1.0 + http-call: 5.3.0 + load-json-file: 5.3.0 + npm-run-path: 4.0.1 + semver: 7.5.4 + tslib: 2.6.2 + yarn: 1.22.21 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - supports-color + - typescript + dev: true + + /@oclif/screen@1.0.4: + resolution: {integrity: sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==} + engines: {node: '>=8.0.0'} + deprecated: Deprecated in favor of @oclif/core + dev: true + /@opentelemetry/api@1.7.0: resolution: {integrity: sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==} engines: {node: '>=8.0.0'} @@ -7390,7 +7651,7 @@ packages: vite: ^5.0.0 dependencies: '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.9)(vite@5.0.12) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) svelte: 4.2.9 vite: 5.0.12(@types/node@20.11.7) transitivePeerDependencies: @@ -7405,7 +7666,7 @@ packages: vite: ^5.0.0 dependencies: '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.5 @@ -7725,6 +7986,22 @@ packages: engines: {node: '>=10.13.0'} dev: true + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + /@types/acorn@4.0.6: resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} dependencies: @@ -7778,6 +8055,12 @@ packages: '@types/node': 18.11.10 dev: true + /@types/cli-progress@3.11.5: + resolution: {integrity: sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==} + dependencies: + '@types/node': 18.11.10 + dev: true + /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: @@ -8017,6 +8300,12 @@ packages: /@types/ms@0.7.34: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + /@types/mute-stream@0.0.4: + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + dependencies: + '@types/node': 18.11.10 + dev: true + /@types/node-fetch@2.6.11: resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} dependencies: @@ -8385,6 +8674,10 @@ packages: '@types/webidl-conversions': 7.0.3 dev: true + /@types/wrap-ansi@3.0.0: + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + dev: true + /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: @@ -8424,7 +8717,7 @@ packages: '@typescript-eslint/scope-manager': 5.47.0 '@typescript-eslint/type-utils': 5.47.0(eslint@8.30.0)(typescript@5.3.3) '@typescript-eslint/utils': 5.47.0(eslint@8.30.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.30.0 ignore: 5.3.0 natural-compare-lite: 1.4.0 @@ -8449,7 +8742,7 @@ packages: '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.3.3) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.30.0 typescript: 5.3.3 transitivePeerDependencies: @@ -8469,7 +8762,7 @@ packages: '@typescript-eslint/scope-manager': 5.47.0 '@typescript-eslint/types': 5.47.0 '@typescript-eslint/typescript-estree': 5.47.0(typescript@5.3.3) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.30.0 typescript: 5.3.3 transitivePeerDependencies: @@ -8512,7 +8805,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 5.47.0(typescript@5.3.3) '@typescript-eslint/utils': 5.47.0(eslint@8.30.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.30.0 tsutils: 3.21.0(typescript@5.3.3) typescript: 5.3.3 @@ -8546,7 +8839,7 @@ packages: dependencies: '@typescript-eslint/types': 4.33.0 '@typescript-eslint/visitor-keys': 4.33.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -8567,7 +8860,7 @@ packages: dependencies: '@typescript-eslint/types': 5.47.0 '@typescript-eslint/visitor-keys': 5.47.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -8588,7 +8881,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -8679,7 +8972,7 @@ packages: dependencies: '@ampproject/remapping': 2.2.1 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 @@ -9049,7 +9342,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9057,7 +9350,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -9159,6 +9452,11 @@ packages: string-width: 4.2.3 dev: true + /ansi-escapes@3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + dev: true + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -9179,6 +9477,11 @@ packages: hasBin: true dev: true + /ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + dev: true + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -9303,6 +9606,10 @@ packages: dev: true optional: true + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true @@ -9984,6 +10291,10 @@ packages: engines: {node: '>=16.20.1'} dev: true + /btoa-lite@1.0.0: + resolution: {integrity: sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==} + dev: true + /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -10397,6 +10708,13 @@ packages: engines: {node: '>=6'} dev: true + /clean-stack@3.0.1: + resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 4.0.0 + dev: true + /cli-boxes@2.2.1: resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} engines: {node: '>=6'} @@ -10438,6 +10756,13 @@ packages: yargs: 16.2.0 dev: true + /cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + dependencies: + string-width: 4.2.3 + dev: true + /cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} @@ -10467,11 +10792,44 @@ packages: string-width: 4.2.3 dev: true + /cli-ux@4.9.3: + resolution: {integrity: sha512-/1owvF0SZ5Gn54cgrikJ0QskgTzeg30HGjkmjFoaHDJzAqFpuX1DBpFR8aLvsE1J5s9MgeYRENQK4BFwOag5VA==} + engines: {node: '>=8.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dependencies: + '@oclif/errors': 1.3.6 + '@oclif/linewrap': 1.0.0 + '@oclif/screen': 1.0.4 + ansi-escapes: 3.2.0 + ansi-styles: 3.2.1 + cardinal: 2.1.1 + chalk: 2.4.2 + clean-stack: 2.2.0 + extract-stack: 1.0.0 + fs-extra: 7.0.1 + hyperlinker: 1.0.0 + indent-string: 3.2.0 + is-wsl: 1.1.0 + lodash: 4.17.21 + password-prompt: 1.1.3 + semver: 5.7.2 + strip-ansi: 5.2.0 + supports-color: 5.5.0 + supports-hyperlinks: 1.0.1 + treeify: 1.1.0 + tslib: 1.14.1 + dev: true + /cli-width@3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} dev: true + /cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + dev: true + /cli@1.0.1: resolution: {integrity: sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==} engines: {node: '>=0.2.5'} @@ -10989,6 +11347,10 @@ packages: readable-stream: 3.6.2 dev: true + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + /cross-env@5.2.1: resolution: {integrity: sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==} engines: {node: '>=4.0'} @@ -11335,6 +11697,10 @@ packages: resolution: {integrity: sha512-v0KW6C0qlZzoGjk6u5tLmVfyZxNgPGXZsWTXshpAgKVGmGXzaVWGdlCFxNx5iuzcXT/oJN1HHM9DZKwtAtYa+A==} dev: true + /csv-stream@0.2.0: + resolution: {integrity: sha512-K9kh9wWGsJrvdaDSb3TdSgwVHCky8fRW7/USBq906xsk2+IGA3X+j/BbN9c5xcedhIIlWKQtk1xtVdhNyfIDrA==} + dev: true + /cytoscape-cose-bilkent@4.1.0(cytoscape@3.28.1): resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: @@ -11691,6 +12057,19 @@ packages: dependencies: ms: 2.1.2 supports-color: 5.5.0 + dev: false + + /debug@4.3.4(supports-color@8.1.1): + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -11926,7 +12305,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -11959,6 +12338,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + /diff@5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} @@ -12101,6 +12485,11 @@ packages: engines: {node: '>=12'} dev: true + /dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + dev: true + /dottie@2.0.6: resolution: {integrity: sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==} dev: true @@ -12266,6 +12655,14 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: true + /electron-to-chromium@1.4.647: resolution: {integrity: sha512-Z/fTNGwc45WrYQhPaEcz5tAJuZZ8G7S/DBnhS6Kgp4BxnS40Z/HqlJ0hHg3Z79IGVzuVartIlTcjw/cQbPLgOw==} @@ -12547,7 +12944,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) esbuild: 0.19.12 transitivePeerDependencies: - supports-color @@ -12832,7 +13229,7 @@ packages: dependencies: '@es-joy/jsdoccomment': 0.36.1 comment-parser: 1.3.1 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint: 8.30.0 esquery: 1.5.0 @@ -12961,7 +13358,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -13284,7 +13681,6 @@ packages: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} requiresBuild: true dev: true - optional: true /express-basic-auth@1.2.1: resolution: {integrity: sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==} @@ -13361,13 +13757,18 @@ packages: engines: {node: ^12.20 || >= 14.13} dev: true + /extract-stack@1.0.0: + resolution: {integrity: sha512-M5Ge0JIrn12EtIVpje2G+hI5X78hmX4UDzynZ7Vnp1MiPSqleEonmgr2Rh59eygEEgq3YJ1GDP96rnM8tnVg/Q==} + engines: {node: '>=4'} + dev: true + /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} hasBin: true requiresBuild: true dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -13471,10 +13872,67 @@ packages: format: 0.2.2 dev: true + /fauna-shell@1.2.1(@types/node@18.11.10)(typescript@5.3.3): + resolution: {integrity: sha512-JY48qkliJbbrkdeUlKT8Z/NDyZCAsgsiGI+bXIy7tDwTURsNpQ4biNK2X5nqKgdNfULrRn6NkSessdcI+RnoHA==} + engines: {node: '>=10.0.0'} + hasBin: true + dependencies: + '@inquirer/prompts': 3.3.2 + '@oclif/core': 2.15.0(@types/node@18.11.10)(typescript@5.3.3) + '@oclif/plugin-help': 5.2.20(@types/node@18.11.10)(typescript@5.3.3) + '@oclif/plugin-plugins': 2.4.7(@types/node@18.11.10)(typescript@5.3.3) + chalk: 4.1.2 + cli-table: 0.3.11 + cli-ux: 4.9.3 + cross-fetch: 3.1.8 + csv-parse: 5.5.3 + csv-stream: 0.2.0 + dotenv: 8.6.0 + escodegen: 1.14.3 + esprima: 4.0.1 + exponential-backoff: 3.1.1 + faunadb: 4.8.0 + form-data: 4.0.0 + globby: 11.1.0 + ini: 1.3.8 + inquirer: 8.2.6 + moment: 2.30.1 + node-fetch: 2.7.0 + object-sizeof: 1.6.3 + prettier: 2.8.8 + rate-limiter-flexible: 2.4.2 + stream-json: 1.8.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - encoding + - supports-color + - typescript + dev: true + /fauna@1.3.1: resolution: {integrity: sha512-A4JEj5v2KyOfjlze1Wb/fAWRxDfoGr61PhMvjV5jcfkLJ2ouzchsCXbzqzANetj8g/O/jth3wO2s02d6+ePuyQ==} dev: true + /faunadb@4.8.0: + resolution: {integrity: sha512-pjl5WUYQ8GqM4ESk3mv0RXfxtQMHWb92XWkxjf3nWiAkf2HVtsENfTbyGPunzw4zDbdhn9aQSSxbwahaLLDR7Q==} + requiresBuild: true + dependencies: + base64-js: 1.5.1 + boxen: 5.1.2 + btoa-lite: 1.0.0 + chalk: 4.1.2 + cross-fetch: 3.1.8 + dotenv: 8.6.0 + fn-annotate: 1.2.0 + node-abort-controller: 3.1.1 + object-assign: 4.1.1 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - encoding + dev: true + /faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} @@ -13586,6 +14044,12 @@ packages: engines: {node: '>= 6'} dev: true + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + /filesize@6.4.0: resolution: {integrity: sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==} engines: {node: '>= 0.4.0'} @@ -13792,6 +14256,11 @@ packages: - encoding dev: true + /fn-annotate@1.2.0: + resolution: {integrity: sha512-j2gv2wkRhQgkJNf1ygdca8ynP3tK+a87bowc+RG81iWTye3yKIOeAkrKYv0Kqyh8yCeSyljOk3ZFelfXUFpirA==} + engines: {node: '>=0.10.0'} + dev: true + /fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} dev: true @@ -13805,7 +14274,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) dev: true /for-each@0.3.3: @@ -14219,7 +14688,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 data-uri-to-buffer: 3.0.1 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) file-uri-to-path: 2.0.0 fs-extra: 8.1.0 ftp: 0.3.10 @@ -14656,6 +15125,11 @@ packages: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true + /has-flag@2.0.0: + resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} + engines: {node: '>=0.10.0'} + dev: true + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -14663,7 +15137,6 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} @@ -15058,6 +15531,20 @@ packages: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true + /http-call@5.3.0: + resolution: {integrity: sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==} + engines: {node: '>=8.0.0'} + dependencies: + content-type: 1.0.5 + debug: 4.3.4(supports-color@8.1.1) + is-retry-allowed: 1.2.0 + is-stream: 2.0.1 + parse-json: 4.0.0 + tunnel-agent: 0.6.0 + transitivePeerDependencies: + - supports-color + dev: true + /http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} dev: true @@ -15092,7 +15579,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -15103,7 +15590,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -15113,7 +15600,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -15175,7 +15662,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -15184,7 +15671,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -15217,6 +15704,11 @@ packages: dev: true optional: true + /hyperlinker@1.0.0: + resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} + engines: {node: '>=4'} + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -15307,6 +15799,11 @@ packages: engines: {node: '>=0.8.19'} dev: true + /indent-string@3.2.0: + resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} + engines: {node: '>=4'} + dev: true + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -15424,7 +15921,7 @@ packages: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -15759,6 +16256,11 @@ packages: is-unc-path: 1.0.0 dev: true + /is-retry-allowed@1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} + engines: {node: '>=0.10.0'} + dev: true + /is-root@2.1.0: resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} engines: {node: '>=6'} @@ -15980,7 +16482,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -16014,6 +16516,17 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + /jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -16182,6 +16695,10 @@ packages: dreamopt: 0.8.0 dev: true + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true @@ -16346,7 +16863,7 @@ packages: dependencies: '@types/express': 4.17.21 '@types/jsonwebtoken': 9.0.5 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) jose: 4.15.4 limiter: 1.1.5 lru-memoizer: 2.2.0 @@ -16436,7 +16953,7 @@ packages: dependencies: colorette: 2.0.19 commander: 10.0.1 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) escalade: 3.1.1 esm: 3.2.25 get-package-type: 0.1.0 @@ -16724,6 +17241,17 @@ packages: wrap-ansi: 7.0.0 dev: true + /load-json-file@5.3.0: + resolution: {integrity: sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 4.0.1 + strip-bom: 3.0.0 + type-fest: 0.3.1 + dev: true + /load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -17067,6 +17595,10 @@ packages: semver: 7.5.4 dev: true + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + /make-fetch-happen@13.0.0: resolution: {integrity: sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==} engines: {node: ^16.14.0 || >=18.0.0} @@ -18258,7 +18790,7 @@ packages: requiresBuild: true dependencies: '@types/debug': 4.1.12 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -18281,7 +18813,7 @@ packages: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} dependencies: '@types/debug': 4.1.12 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 @@ -18693,7 +19225,7 @@ packages: hasBin: true dependencies: '@tediousjs/connection-string': 0.3.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) rfdc: 1.3.1 tarn: 3.0.2 tedious: 11.8.0(debug@4.3.4) @@ -18714,6 +19246,11 @@ packages: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: true + /mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + /mysql2@3.9.0: resolution: {integrity: sha512-yS7FtbnO9sYqUZbjaiUwflh1bJAENJ3DQ9aHEYj9G+Hi15+FP7UKaTDNe6SeXx/LpkU6coAQ6vIYQaAmsFA+qQ==} engines: {node: '>= 8.0'} @@ -18788,6 +19325,10 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /natural-orderby@2.0.3: + resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} + dev: true + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -18926,6 +19467,10 @@ packages: resolution: {integrity: sha512-L8RfEgjBTHAISTuagw51PprVAqNZoG6KSB6LQ6H1bskMVkFs5E71IyjauLBv3XbuomJlguWF/VnRHdJ1gqiAqA==} dev: true + /node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: true + /node-addon-api@4.3.0: resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} dev: true @@ -19217,6 +19762,17 @@ packages: engines: {node: '>= 0.4'} dev: true + /object-sizeof@1.6.3: + resolution: {integrity: sha512-LGtilAKuDGKCcvu1Xg3UvAhAeJJlFmblo3faltmOQ80xrGwAHxnauIXucalKdTEksHp/Pq9tZGz1hfyEmjFJPQ==} + dependencies: + buffer: 5.7.1 + dev: true + + /object-treeify@1.1.33: + resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} + engines: {node: '>= 10'} + dev: true + /object.assign@4.1.5: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} @@ -19515,7 +20071,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) get-uri: 3.0.2 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 @@ -19584,6 +20140,14 @@ packages: path-root: 0.1.1 dev: true + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -19650,6 +20214,13 @@ packages: tslib: 2.6.2 dev: true + /password-prompt@1.1.3: + resolution: {integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==} + dependencies: + ansi-escapes: 4.3.2 + cross-spawn: 7.0.3 + dev: true + /path-case@3.0.4: resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} dependencies: @@ -20949,6 +21520,12 @@ packages: svelte: 3.59.2 dev: true + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + /prettier@3.1.1: resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} engines: {node: '>=14'} @@ -21151,7 +21728,7 @@ packages: engines: {node: '>= 8'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 lru-cache: 5.1.1 @@ -21212,7 +21789,7 @@ packages: requiresBuild: true dependencies: cross-fetch: 3.1.5 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) devtools-protocol: 0.0.1045489 extract-zip: 2.0.1 https-proxy-agent: 5.0.1 @@ -21323,6 +21900,10 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + /rate-limiter-flexible@2.4.2: + resolution: {integrity: sha512-rMATGGOdO1suFyf/mI5LYhts71g1sbdhmd6YvdiXO2gJnd42Tt6QS4JUKJKSWVVkMtBacm6l40FR7Trjo6Iruw==} + dev: true + /raw-body@2.5.1: resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} engines: {node: '>= 0.8'} @@ -22045,7 +22626,7 @@ packages: engines: {node: '>=12'} requiresBuild: true dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) extend: 3.0.2 transitivePeerDependencies: - supports-color @@ -22192,6 +22773,11 @@ packages: engines: {node: '>=0.12.0'} dev: true + /run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -22439,7 +23025,7 @@ packages: dependencies: '@types/debug': 4.1.12 '@types/validator': 13.11.8 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) dottie: 2.0.6 inflection: 1.13.4 lodash: 4.17.21 @@ -22753,7 +23339,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -22765,7 +23351,7 @@ packages: requiresBuild: true dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -22778,7 +23364,7 @@ packages: requiresBuild: true dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -22859,7 +23445,7 @@ packages: chokidar: 3.5.3 compression: 1.7.4 connect: 3.7.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) dequal: 2.0.3 dotenv: 16.4.1 es-module-lexer: 1.4.1 @@ -22988,7 +23574,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -23002,7 +23588,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -23292,6 +23878,13 @@ packages: is-regexp: 1.0.0 dev: true + /strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + dependencies: + ansi-regex: 4.1.1 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -23465,7 +24058,7 @@ packages: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.2 @@ -23542,6 +24135,13 @@ packages: engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + + /supports-hyperlinks@1.0.1: + resolution: {integrity: sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==} + engines: {node: '>=4'} + dependencies: + has-flag: 2.0.0 + supports-color: 5.5.0 dev: true /supports-hyperlinks@2.3.0: @@ -24134,6 +24734,11 @@ packages: hasBin: true dev: true + /treeify@1.1.0: + resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} + engines: {node: '>=0.6'} + dev: true + /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} dev: true @@ -24164,6 +24769,37 @@ packages: resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} dev: true + /ts-node@10.9.2(@types/node@18.11.10)(typescript@5.3.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.11.10 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.3.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: @@ -24203,7 +24839,7 @@ packages: bundle-require: 4.0.2(esbuild@0.17.19) cac: 6.7.14 chokidar: 3.5.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) esbuild: 0.17.19 execa: 5.1.1 globby: 11.1.0 @@ -24361,6 +24997,11 @@ packages: engines: {node: '>=10'} dev: true + /type-fest@0.3.1: + resolution: {integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==} + engines: {node: '>=6'} + dev: true + /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -24539,7 +25180,7 @@ packages: chalk: 4.1.2 cli-highlight: 2.1.11 date-fns: 2.30.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) dotenv: 16.4.1 glob: 8.1.0 mkdirp: 2.1.6 @@ -24835,7 +25476,7 @@ packages: resolution: {integrity: sha512-HXSMyIcf2XTvwZ6ZZQLfxfViRm/yTGoRgDeTbojtq6rezeyKB0sTBcKH2fhddnteAHRcHiKgr/ACpbgjGOC6RQ==} engines: {node: '>=12.18.2'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) uuid: 8.3.2 transitivePeerDependencies: - supports-color @@ -25161,6 +25802,10 @@ packages: kleur: 4.1.5 sade: 1.8.1 + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + /v8-to-istanbul@9.2.0: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} @@ -25276,7 +25921,7 @@ packages: hasBin: true dependencies: cac: 6.7.14 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.0.0 vite: 5.0.12(@types/node@20.11.7) @@ -25303,7 +25948,7 @@ packages: dependencies: '@antfu/utils': 0.7.7 '@rollup/pluginutils': 5.1.0(rollup@3.29.4) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) error-stack-parser-es: 0.1.1 fs-extra: 11.2.0 open: 9.1.0 @@ -25466,7 +26111,7 @@ packages: acorn-walk: 8.3.2 cac: 6.7.14 chai: 4.4.1 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) execa: 8.0.1 local-pkg: 0.5.0 magic-string: 0.30.5 @@ -26177,6 +26822,13 @@ packages: yargs-parser: 21.1.1 dev: true + /yarn@1.22.21: + resolution: {integrity: sha512-ynXaJsADJ9JiZ84zU25XkPGOvVMmZ5b7tmTSpKURYwgELdjucAOydqIOrOfTxVYcNXe91xvLZwcRh68SR3liCg==} + engines: {node: '>=4.0.0'} + hasBin: true + requiresBuild: true + dev: true + /yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} requiresBuild: true @@ -26186,6 +26838,11 @@ packages: dev: false optional: true + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} From ac11d55c6d74b4161e9a9d0c2dd91815dee8cb86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Orb=C3=A1n?= Date: Sun, 4 Feb 2024 03:45:42 +0100 Subject: [PATCH 08/16] update lockfile --- pnpm-lock.yaml | 54 -------------------------------------------------- 1 file changed, 54 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf86bdd315..0135008300 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5559,7 +5559,6 @@ packages: /@grpc/grpc-js@1.8.21: resolution: {integrity: sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==} engines: {node: ^8.13.0 || >=10.10.0} - requiresBuild: true dependencies: '@grpc/proto-loader': 0.7.10 '@types/node': 18.11.10 @@ -5569,7 +5568,6 @@ packages: resolution: {integrity: sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==} engines: {node: '>=6'} hasBin: true - requiresBuild: true dependencies: lodash.camelcase: 4.3.0 long: 5.2.3 @@ -5820,7 +5818,6 @@ packages: /@jsdoc/salty@0.2.7: resolution: {integrity: sha512-mh8LbS9d4Jq84KLw8pzho7XC2q2/IJGiJss3xwRoLD1A+EE16SjN4PfaG4jRCzKegTFLlN0Zd8SdUPE6XdoPFg==} engines: {node: '>=v12.0.0'} - requiresBuild: true dependencies: lodash: 4.17.21 dev: true @@ -6849,27 +6846,22 @@ packages: /@protobufjs/aspromise@1.1.2: resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - requiresBuild: true dev: true /@protobufjs/base64@1.1.2: resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - requiresBuild: true dev: true /@protobufjs/codegen@2.0.4: resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - requiresBuild: true dev: true /@protobufjs/eventemitter@1.1.0: resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - requiresBuild: true dev: true /@protobufjs/fetch@1.1.0: resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - requiresBuild: true dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 @@ -6877,27 +6869,22 @@ packages: /@protobufjs/float@1.0.2: resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - requiresBuild: true dev: true /@protobufjs/inquire@1.1.0: resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - requiresBuild: true dev: true /@protobufjs/path@1.1.2: resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - requiresBuild: true dev: true /@protobufjs/pool@1.1.0: resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - requiresBuild: true dev: true /@protobufjs/utf8@1.1.0: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - requiresBuild: true dev: true /@redis/bloom@1.2.0(@redis/client@1.5.13): @@ -7978,7 +7965,6 @@ packages: /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - requiresBuild: true dev: true /@trysound/sax@0.2.0: @@ -8149,7 +8135,6 @@ packages: /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} - requiresBuild: true dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.11.10 @@ -8241,7 +8226,6 @@ packages: /@types/linkify-it@3.0.5: resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} - requiresBuild: true dev: true /@types/long@4.0.2: @@ -8250,7 +8234,6 @@ packages: /@types/markdown-it@12.2.3: resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} - requiresBuild: true dependencies: '@types/linkify-it': 3.0.5 '@types/mdurl': 1.0.5 @@ -8270,7 +8253,6 @@ packages: /@types/mdurl@1.0.5: resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} - requiresBuild: true dev: true /@types/mdx@2.0.10: @@ -8290,7 +8272,6 @@ packages: /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - requiresBuild: true dev: true /@types/minimist@1.2.5: @@ -8559,7 +8540,6 @@ packages: /@types/rimraf@3.0.2: resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} - requiresBuild: true dependencies: '@types/glob': 8.1.0 '@types/node': 18.11.10 @@ -10109,7 +10089,6 @@ packages: /bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - requiresBuild: true dev: true /binary-extensions@2.2.0: @@ -10139,7 +10118,6 @@ packages: /bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - requiresBuild: true dev: true /body-parser@1.20.1: @@ -10518,7 +10496,6 @@ packages: /catharsis@0.9.0: resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==} engines: {node: '>= 10'} - requiresBuild: true dependencies: lodash: 4.17.21 dev: true @@ -12622,7 +12599,6 @@ packages: /duplexify@4.1.2: resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} - requiresBuild: true dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 @@ -12748,7 +12724,6 @@ packages: /entities@2.1.0: resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} - requiresBuild: true dev: true /entities@2.2.0: @@ -13065,7 +13040,6 @@ packages: /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - requiresBuild: true dev: true /escape-string-regexp@4.0.0: @@ -14565,7 +14539,6 @@ packages: /gaxios@5.1.3: resolution: {integrity: sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==} engines: {node: '>=12'} - requiresBuild: true dependencies: extend: 3.0.2 https-proxy-agent: 5.0.1 @@ -14590,7 +14563,6 @@ packages: /gcp-metadata@5.3.0: resolution: {integrity: sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==} engines: {node: '>=12'} - requiresBuild: true dependencies: gaxios: 5.1.3 json-bigint: 1.0.0 @@ -14931,7 +14903,6 @@ packages: resolution: {integrity: sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==} engines: {node: '>=12.0.0'} hasBin: true - requiresBuild: true dependencies: node-forge: 1.3.1 dev: true @@ -15060,7 +15031,6 @@ packages: /gtoken@6.1.2: resolution: {integrity: sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==} engines: {node: '>=12.0.0'} - requiresBuild: true dependencies: gaxios: 5.1.3 google-p12-pem: 4.0.1 @@ -16625,7 +16595,6 @@ packages: /js2xmlparser@4.0.2: resolution: {integrity: sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==} - requiresBuild: true dependencies: xmlcreate: 2.0.4 dev: true @@ -16647,7 +16616,6 @@ packages: resolution: {integrity: sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==} engines: {node: '>=12.0.0'} hasBin: true - requiresBuild: true dependencies: '@babel/parser': 7.23.9 '@jsdoc/salty': 0.2.7 @@ -16850,7 +16818,6 @@ packages: /jwa@2.0.0: resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} - requiresBuild: true dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 @@ -16909,7 +16876,6 @@ packages: /klaw@3.0.0: resolution: {integrity: sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==} - requiresBuild: true dependencies: graceful-fs: 4.2.11 dev: true @@ -17106,7 +17072,6 @@ packages: /levn@0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} engines: {node: '>= 0.8.0'} - requiresBuild: true dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 @@ -17188,7 +17153,6 @@ packages: /linkify-it@3.0.3: resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} - requiresBuild: true dependencies: uc.micro: 1.0.6 dev: true @@ -17325,7 +17289,6 @@ packages: /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - requiresBuild: true dev: true /lodash.clonedeep@4.5.0: @@ -17669,7 +17632,6 @@ packages: /markdown-it-anchor@8.6.7(@types/markdown-it@12.2.3)(markdown-it@12.3.2): resolution: {integrity: sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==} - requiresBuild: true peerDependencies: '@types/markdown-it': '*' markdown-it: '*' @@ -17681,7 +17643,6 @@ packages: /markdown-it@12.3.2: resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} hasBin: true - requiresBuild: true dependencies: argparse: 2.0.1 entities: 2.1.0 @@ -18059,7 +18020,6 @@ packages: /mdurl@1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} - requiresBuild: true dev: true /mdx-mermaid@2.0.0(mermaid@10.6.0)(react@18.2.0)(unist-util-visit@4.1.2): @@ -18125,7 +18085,6 @@ packages: /memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} - requiresBuild: true dev: true /meow@8.1.2: @@ -19751,7 +19710,6 @@ packages: /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - requiresBuild: true dev: true /object-inspect@1.13.1: @@ -19937,7 +19895,6 @@ packages: /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} - requiresBuild: true dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -21502,7 +21459,6 @@ packages: /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} - requiresBuild: true dev: true /prelude-ls@1.2.1: @@ -21651,7 +21607,6 @@ packages: /proto3-json-serializer@1.1.1: resolution: {integrity: sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==} engines: {node: '>=12.0.0'} - requiresBuild: true dependencies: protobufjs: 7.2.4 dev: true @@ -21660,7 +21615,6 @@ packages: resolution: {integrity: sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==} engines: {node: '>=12.0.0'} hasBin: true - requiresBuild: true peerDependencies: protobufjs: ^7.0.0 dependencies: @@ -22557,7 +22511,6 @@ packages: /requizzle@0.2.4: resolution: {integrity: sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==} - requiresBuild: true dependencies: lodash: 4.17.21 dev: true @@ -22624,7 +22577,6 @@ packages: /retry-request@5.0.2: resolution: {integrity: sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==} engines: {node: '>=12'} - requiresBuild: true dependencies: debug: 4.3.4(supports-color@8.1.1) extend: 3.0.2 @@ -23540,7 +23492,6 @@ packages: /sparse-bitfield@3.0.3: resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} - requiresBuild: true dependencies: memory-pager: 1.5.0 dev: true @@ -24965,7 +24916,6 @@ packages: /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} - requiresBuild: true dependencies: prelude-ls: 1.1.2 dev: true @@ -25214,7 +25164,6 @@ packages: /uc.micro@1.0.6: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} - requiresBuild: true dev: true /uc.micro@2.0.0: @@ -25229,7 +25178,6 @@ packages: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} hasBin: true - requiresBuild: true dev: true /unbox-primitive@1.0.2: @@ -26587,7 +26535,6 @@ packages: /word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - requiresBuild: true dev: true /wordwrap@1.0.0: @@ -26711,7 +26658,6 @@ packages: /xmlcreate@2.0.4: resolution: {integrity: sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==} - requiresBuild: true dev: true /xpath.js@1.1.0: From 2ab6599b63bd8aef0a22d839429abcf077c8ec17 Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Mon, 5 Feb 2024 09:48:22 +0100 Subject: [PATCH 09/16] fix: make tests pass --- packages/adapter-fauna/fauna/user.fsl | 5 +-- packages/adapter-fauna/src/index.ts | 42 +++++++++++++---------- packages/adapter-fauna/test/index.test.ts | 2 ++ 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/packages/adapter-fauna/fauna/user.fsl b/packages/adapter-fauna/fauna/user.fsl index f633d01e48..136a959b10 100644 --- a/packages/adapter-fauna/fauna/user.fsl +++ b/packages/adapter-fauna/fauna/user.fsl @@ -1,9 +1,6 @@ collection User { - unique [.email, .data.id] + unique [.email] index byEmail { terms [.email] } - index byUserId { - terms [.data.id] - } } diff --git a/packages/adapter-fauna/src/index.ts b/packages/adapter-fauna/src/index.ts index 6571dddb60..bea9b383eb 100644 --- a/packages/adapter-fauna/src/index.ts +++ b/packages/adapter-fauna/src/index.ts @@ -168,28 +168,29 @@ token export function FaunaAdapter(client: Client): Adapter { return { async createUser(user) { - await client.query( - fql`User.createData(${format.to(user)}) { ${userFields} }` + const response = await client.query( + fql`User.create(${format.to(user)}) { ${userFields} }`, ) - return user + return format.from(response.data) }, async getUser(id) { const response = await client.query( - fql`User.byUserId(${id}).first() { ${userFields} }` + fql`User.byId(${id}) { ${userFields} }`, ) return format.from(response.data) }, async getUserByEmail(email) { const response = await client.query( - fql`User.byEmail(${email}).first() { ${userFields} }` + fql`User.byEmail(${email}).first() { ${userFields} }`, ) + if (response.data === null) return null return format.from(response.data) }, async getUserByAccount({ provider, providerAccountId }) { const response = await client.query(fql` let account = Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first() if (account != null) { - User.byUserId(account.userId).first() { ${userFields} } + User.byId(account.userId) { ${userFields} } } else { null } @@ -197,10 +198,12 @@ export function FaunaAdapter(client: Client): Adapter { return format.from(response.data) }, async updateUser(user) { + const newUser: Partial = { ...user } + delete newUser.id const response = await client.query( - fql`User.byUserId(${user.id}).first().updateData(${format.to( - user - )}) { ${userFields} }` + fql`User.byId(${user.id}).update(${format.to( + newUser, + )}) { ${userFields} }`, ) return format.from(response.data) }, @@ -213,18 +216,18 @@ export function FaunaAdapter(client: Client): Adapter { Account.byUserId(${userId}).forEach(account => account.delete()) // Delete the user - User.byUserId(${userId}).first().delete() + User.byId(${userId}).delete() `) }, async linkAccount(account) { await client.query( - fql`Account.create(${format.to(account)})` + fql`Account.create(${format.to(account)})`, ) return account }, async unlinkAccount({ provider, providerAccountId }) { const response = await client.query( - fql`Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first().delete()` + fql`Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first().delete()`, ) return format.from(response.data) }, @@ -232,7 +235,7 @@ export function FaunaAdapter(client: Client): Adapter { const response = await client.query<[FaunaUser, FaunaSession]>(fql` let session = Session.bySessionToken(${sessionToken}).first() { ${sessionFields} } if (session != null) { - let user = User.byUserId(session.userId).first() { ${userFields} } + let user = User.byId(session.userId) { ${userFields} } if (user != null) { [user, session] } else { @@ -242,12 +245,13 @@ export function FaunaAdapter(client: Client): Adapter { null } `) + if (response.data === null) return null const [user, session] = response.data ?? [] return { session: format.from(session), user: format.from(user) } }, async createSession(session) { await client.query( - fql`Session.create(${format.to(session)}) { ${sessionFields} }` + fql`Session.create(${format.to(session)}) { ${sessionFields} }`, ) return session }, @@ -255,20 +259,20 @@ export function FaunaAdapter(client: Client): Adapter { const response = await client.query( fql`Session.bySessionToken(${ session.sessionToken - }).first().update(${format.to(session)}) { ${sessionFields} }` + }).first().update(${format.to(session)}) { ${sessionFields} }`, ) return format.from(response.data) }, async deleteSession(sessionToken) { await client.query( - fql`Session.bySessionToken(${sessionToken}).first().delete()` + fql`Session.bySessionToken(${sessionToken}).first().delete()`, ) }, async createVerificationToken(verificationToken) { await client.query( fql`VerificationToken.create(${format.to( - verificationToken - )}) { ${verificationTokenFields} }` + verificationToken, + )}) { ${verificationTokenFields} }`, ) return verificationToken }, @@ -292,7 +296,7 @@ export function FaunaAdapter(client: Client): Adapter { } export const format = { - /** Takes an object that's coming from a database and converts it to plain JavaScript. */ + /** Takes an object that's coming from the database and converts it to plain JavaScript. */ from(object: Record = {}): T { if (!object) return null as unknown as T const newObject: Record = {} diff --git a/packages/adapter-fauna/test/index.test.ts b/packages/adapter-fauna/test/index.test.ts index 73bde7ce5b..88b6c5ba81 100644 --- a/packages/adapter-fauna/test/index.test.ts +++ b/packages/adapter-fauna/test/index.test.ts @@ -25,6 +25,8 @@ const adapter = FaunaAdapter(client) runBasicTests({ adapter, db: { + // UUID is not a valid ID in Fauna (see https://docs.fauna.com/fauna/current/reference/fql_reference/types#id) + id: () => String(Math.floor(Math.random() * 10 ** 18)), disconnect: async () => client.close(), user: async (id) => { const response = await client.query( From 88e510ab0d6187659923b459c84846bcb0c54669 Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Mon, 5 Feb 2024 09:48:55 +0100 Subject: [PATCH 10/16] fix(adapters): use id function in adapter tests --- packages/utils/adapter.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/utils/adapter.ts b/packages/utils/adapter.ts index 91fead6529..35e184f96d 100644 --- a/packages/utils/adapter.ts +++ b/packages/utils/adapter.ts @@ -65,7 +65,7 @@ export async function runBasicTests(options: TestOptions) { }) let user = options.fixtures?.user ?? { - id: randomUUID(), + id: id(), email: "fill@murray.com", image: "https://www.fillmurray.com/460/300", name: "Fill Murray", @@ -78,21 +78,21 @@ export async function runBasicTests(options: TestOptions) { } const session: any = options.fixtures?.session ?? { - sessionToken: randomUUID(), + sessionToken: id(), expires: ONE_WEEK_FROM_NOW, } const account: any = options.fixtures?.account ?? { provider: "github", - providerAccountId: randomUUID(), + providerAccountId: id(), type: "oauth", - access_token: randomUUID(), + access_token: id(), expires_at: ONE_MONTH / 1000, - id_token: randomUUID(), - refresh_token: randomUUID(), + id_token: id(), + refresh_token: id(), token_type: "bearer", scope: "user", - session_state: randomUUID(), + session_state: id(), } // All adapters must define these methods @@ -226,7 +226,7 @@ export async function runBasicTests(options: TestOptions) { test("createVerificationToken", async () => { const identifier = "info@example.com" - const token = randomUUID() + const token = id() const hashedToken = hashToken(token) const verificationToken = { @@ -247,7 +247,7 @@ export async function runBasicTests(options: TestOptions) { test("useVerificationToken", async () => { const identifier = "info@example.com" - const token = randomUUID() + const token = id() const hashedToken = hashToken(token) const verificationToken = { token: hashedToken, From 93fb4531ffe021215b4f4236ad03c70647d9e6ef Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Mon, 5 Feb 2024 10:07:45 +0100 Subject: [PATCH 11/16] refactor: stop specifying field names --- packages/adapter-fauna/src/index.ts | 79 ++++++++--------------- packages/adapter-fauna/test/index.test.ts | 34 ++++------ 2 files changed, 39 insertions(+), 74 deletions(-) diff --git a/packages/adapter-fauna/src/index.ts b/packages/adapter-fauna/src/index.ts index bea9b383eb..cffacf94d0 100644 --- a/packages/adapter-fauna/src/index.ts +++ b/packages/adapter-fauna/src/index.ts @@ -14,7 +14,7 @@ * * @module @auth/fauna-adapter */ -import { Client, TimeStub, fql } from "fauna" +import { Client, TimeStub, fql, NullDocument } from "fauna" import type { Adapter, @@ -30,29 +30,9 @@ type ToFauna = { export type FaunaUser = ToFauna export type FaunaSession = ToFauna -export type FaunaVerificationToken = ToFauna +export type FaunaVerificationToken = ToFauna & { id: string } export type FaunaAccount = ToFauna & any // TODO: Remove `& any` -export const userFields = fql` -email, -name, -image, -id, -emailVerified -` - -export const sessionFields = fql` -sessionToken, -userId, -expires -` - -export const verificationTokenFields = fql` -identifier, -expires, -token -` - /** * * ## Setup @@ -169,19 +149,20 @@ export function FaunaAdapter(client: Client): Adapter { return { async createUser(user) { const response = await client.query( - fql`User.create(${format.to(user)}) { ${userFields} }`, + fql`User.create(${format.to(user)})`, ) return format.from(response.data) }, async getUser(id) { const response = await client.query( - fql`User.byId(${id}) { ${userFields} }`, + fql`User.byId(${id})`, ) + if (response.data instanceof NullDocument) return null return format.from(response.data) }, async getUserByEmail(email) { const response = await client.query( - fql`User.byEmail(${email}).first() { ${userFields} }`, + fql`User.byEmail(${email}).first()`, ) if (response.data === null) return null return format.from(response.data) @@ -190,7 +171,7 @@ export function FaunaAdapter(client: Client): Adapter { const response = await client.query(fql` let account = Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first() if (account != null) { - User.byId(account.userId) { ${userFields} } + User.byId(account.userId) } else { null } @@ -198,12 +179,10 @@ export function FaunaAdapter(client: Client): Adapter { return format.from(response.data) }, async updateUser(user) { - const newUser: Partial = { ...user } - delete newUser.id + const _user: Partial = { ...user } + delete _user.id const response = await client.query( - fql`User.byId(${user.id}).update(${format.to( - newUser, - )}) { ${userFields} }`, + fql`User.byId(${user.id}).update(${format.to(_user)})`, ) return format.from(response.data) }, @@ -233,9 +212,9 @@ export function FaunaAdapter(client: Client): Adapter { }, async getSessionAndUser(sessionToken) { const response = await client.query<[FaunaUser, FaunaSession]>(fql` - let session = Session.bySessionToken(${sessionToken}).first() { ${sessionFields} } + let session = Session.bySessionToken(${sessionToken}).first() if (session != null) { - let user = User.byId(session.userId) { ${userFields} } + let user = User.byId(session.userId) if (user != null) { [user, session] } else { @@ -251,7 +230,7 @@ export function FaunaAdapter(client: Client): Adapter { }, async createSession(session) { await client.query( - fql`Session.create(${format.to(session)}) { ${sessionFields} }`, + fql`Session.create(${format.to(session)})`, ) return session }, @@ -259,7 +238,7 @@ export function FaunaAdapter(client: Client): Adapter { const response = await client.query( fql`Session.bySessionToken(${ session.sessionToken - }).first().update(${format.to(session)}) { ${sessionFields} }`, + }).first().update(${format.to(session)})`, ) return format.from(response.data) }, @@ -272,25 +251,22 @@ export function FaunaAdapter(client: Client): Adapter { await client.query( fql`VerificationToken.create(${format.to( verificationToken, - )}) { ${verificationTokenFields} }`, + )})`, ) return verificationToken }, async useVerificationToken({ identifier, token }) { - const response = await client.query(fql` - let verificationToken = VerificationToken.byIdentifierAndToken(${identifier}, ${token}).first() - if (verificationToken != null) { - let selection = verificationToken { ${verificationTokenFields} } - - // Verification tokens can be used only once - verificationToken.delete() - - selection - } else { - null - } - `) - return format.from(response.data) + const response = await client.query( + fql`VerificationToken.byIdentifierAndToken(${identifier}, ${token}).first()`, + ) + if (response.data === null) return null + // Delete the verification token so it can only be used once + await client.query( + fql`VerificationToken.byId(${response.data.id}).delete()`, + ) + const _verificationToken: Partial = { ...response.data } + delete _verificationToken.id + return format.from(_verificationToken) }, } } @@ -301,7 +277,8 @@ export const format = { if (!object) return null as unknown as T const newObject: Record = {} for (const [key, value] of Object.entries(object)) - if (value instanceof TimeStub) newObject[key] = value.toDate() + if (key === "coll" || key === "ts") continue + else if (value instanceof TimeStub) newObject[key] = value.toDate() else newObject[key] = value return newObject as T }, diff --git a/packages/adapter-fauna/test/index.test.ts b/packages/adapter-fauna/test/index.test.ts index 88b6c5ba81..7fa4cd6501 100644 --- a/packages/adapter-fauna/test/index.test.ts +++ b/packages/adapter-fauna/test/index.test.ts @@ -1,12 +1,9 @@ import { FaunaAdapter, format, - userFields, - sessionFields, - verificationTokenFields, } from "../src" import { runBasicTests } from "utils/adapter" -import { Client, fql } from "fauna" +import { Client, fql, NullDocument } from "fauna" import type { FaunaUser, @@ -30,39 +27,30 @@ runBasicTests({ disconnect: async () => client.close(), user: async (id) => { const response = await client.query( - fql`User.byId(${id}) { ${userFields} }` + fql`User.byId(${id})`, ) + if (response.data instanceof NullDocument) return null return format.from(response.data) }, async session(sessionToken) { const response = await client.query( - fql`Session.bySessionToken(${sessionToken}).first() { ${sessionFields} }` + fql`Session.bySessionToken(${sessionToken}).first()`, ) return format.from(response.data) }, async account({ provider, providerAccountId }) { - const response = await client.query(fql` - Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first() { - access_token, - expires_at, - id_token, - provider, - providerAccountId, - refresh_token, - scope, - session_state, - token_type, - type, - userId - } - `) + const response = await client.query( + fql`Account.byProviderAndProviderAccountId(${provider}, ${providerAccountId}).first()`, + ) return format.from(response.data) }, async verificationToken({ identifier, token }) { const response = await client.query( - fql`VerificationToken.byIdentifierAndToken(${identifier}, ${token}).first() { ${verificationTokenFields} }` + fql`VerificationToken.byIdentifierAndToken(${identifier}, ${token}).first()`, ) - return format.from(response.data) + const _verificationToken: Partial = { ...response.data } + delete _verificationToken.id + return format.from(_verificationToken) }, }, }) From bd3b251264df61226e0f7157d2970ccb576062e9 Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Mon, 5 Feb 2024 10:17:32 +0100 Subject: [PATCH 12/16] docs: remove data.id unique constraint on user collection in docs --- packages/adapter-fauna/src/index.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/adapter-fauna/src/index.ts b/packages/adapter-fauna/src/index.ts index cffacf94d0..a1f278a63f 100644 --- a/packages/adapter-fauna/src/index.ts +++ b/packages/adapter-fauna/src/index.ts @@ -111,10 +111,6 @@ export type FaunaAccount = ToFauna & any // TODO: Remove `& any` * { * unique: ["email"], * status: "active", - * }, - * { - * unique: ["data.id"], - * status: "active", * } * ], * indexes: { From 2b77f6790569cfbb418b5bdfc96d7cfbaf63ca35 Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Tue, 6 Feb 2024 08:36:02 +0100 Subject: [PATCH 13/16] chore: make major version bump --- packages/adapter-fauna/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-fauna/package.json b/packages/adapter-fauna/package.json index 83df0e2dd4..b56cf32387 100644 --- a/packages/adapter-fauna/package.json +++ b/packages/adapter-fauna/package.json @@ -1,6 +1,6 @@ { "name": "@auth/fauna-adapter", - "version": "1.3.2", + "version": "2.0.0", "description": "Fauna Adapter for Auth.js", "homepage": "https://authjs.dev", "repository": "https://github.com/nextauthjs/next-auth", From c8f8a86d7bb79e022d0243bdadc01e54cb35d8f6 Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Fri, 1 Mar 2024 16:14:51 +0100 Subject: [PATCH 14/16] fix: remove use of "& any" --- packages/adapter-fauna/src/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/adapter-fauna/src/index.ts b/packages/adapter-fauna/src/index.ts index a1f278a63f..faa5cb1d8c 100644 --- a/packages/adapter-fauna/src/index.ts +++ b/packages/adapter-fauna/src/index.ts @@ -14,7 +14,7 @@ * * @module @auth/fauna-adapter */ -import { Client, TimeStub, fql, NullDocument } from "fauna" +import { Client, TimeStub, fql, NullDocument, QueryValue, QueryValueObject } from "fauna" import type { Adapter, @@ -25,13 +25,13 @@ import type { } from "@auth/core/adapters" type ToFauna = { - [P in keyof T]: T[P] extends Date | null ? TimeStub | null : T[P] + [P in keyof T]: T[P] extends Date | null ? TimeStub | null : T[P] extends undefined ? null : T[P] extends QueryValue ? T[P] : QueryValueObject } export type FaunaUser = ToFauna export type FaunaSession = ToFauna export type FaunaVerificationToken = ToFauna & { id: string } -export type FaunaAccount = ToFauna & any // TODO: Remove `& any` +export type FaunaAccount = ToFauna /** * @@ -150,7 +150,7 @@ export function FaunaAdapter(client: Client): Adapter { return format.from(response.data) }, async getUser(id) { - const response = await client.query( + const response = await client.query( fql`User.byId(${id})`, ) if (response.data instanceof NullDocument) return null From 5c77048098fd6a584d349cbe1178192fb4fb8a24 Mon Sep 17 00:00:00 2001 From: Nico Domino Date: Fri, 1 Mar 2024 16:56:01 +0100 Subject: [PATCH 15/16] Update packages/adapter-fauna/src/index.ts --- packages/adapter-fauna/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-fauna/src/index.ts b/packages/adapter-fauna/src/index.ts index faa5cb1d8c..c6bacc9b68 100644 --- a/packages/adapter-fauna/src/index.ts +++ b/packages/adapter-fauna/src/index.ts @@ -37,7 +37,7 @@ export type FaunaAccount = ToFauna * * ## Setup * - * This is the Fauna Adapter for [`next-auth`](https://authjs.dev). This package can only be used in conjunction with the primary `next-auth` package. It is not a standalone package. + * This is the Fauna Adapter for [Auth.js](https://authjs.dev). This package can only be used in conjunction with the primary `next-auth` and other framework packages. It is not a standalone package. * * You can find the Fauna schema and seed information in the docs at [authjs.dev/reference/adapter/fauna](https://authjs.dev/reference/adapter/fauna). * From bcfc69287584a85be24475a991710ba4f824f542 Mon Sep 17 00:00:00 2001 From: Aske Hippe Brun Date: Fri, 1 Mar 2024 17:39:48 +0100 Subject: [PATCH 16/16] feat: add migration script to docs --- packages/adapter-fauna/src/index.ts | 54 +++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/packages/adapter-fauna/src/index.ts b/packages/adapter-fauna/src/index.ts index c6bacc9b68..2529923212 100644 --- a/packages/adapter-fauna/src/index.ts +++ b/packages/adapter-fauna/src/index.ts @@ -65,7 +65,7 @@ export type FaunaAccount = ToFauna * * ### Schema * - * Run the following commands inside of the `Shell` tab in the Fauna dashboard to setup the appropriate collections and indexes. + * Run the following FQL code inside the `Shell` tab in the Fauna dashboard to set up the appropriate collections and indexes. * * ```javascript * Collection.create({ @@ -138,7 +138,57 @@ export type FaunaAccount = ToFauna * * ### Migrating from v1 * In v2, we've renamed the collections to use uppercase naming, in accordance with Fauna best practices. If you're migrating from v1, you'll need to rename your collections to match the new naming scheme. - * Additionally, we've renamed the indexes to match the new method-like index names. Please see above for the new index definitions. + * Additionally, we've renamed the indexes to match the new method-like index names. + * + * #### Migration script + * Run this FQL script inside a Fauna shell for the database you're migrating from v1 to v2 (it will rename your collections and indexes to match): + * + * ```javascript + * Collection.byName("accounts")!.update({ + * name: "Account" + * indexes: { + * byUserId: { + * terms: [{ field: "userId" }] + * }, + * byProviderAndProviderAccountId: { + * terms: [{ field: "provider" }, { field: "providerAccountId" }] + * }, + * account_by_provider_and_provider_account_id: null, + * accounts_by_user_id: null + * } + * }) + * Collection.byName("sessions")!.update({ + * name: "Session", + * indexes: { + * bySessionToken: { + * terms: [{ field: "sessionToken" }] + * }, + * byUserId: { + * terms: [{ field: "userId" }] + * }, + * session_by_session_token: null, + * sessions_by_user_id: null + * } + * }) + * Collection.byName("users")!.update({ + * name: "User", + * indexes: { + * byEmail: { + * terms: [{ field: "email" }] + * }, + * user_by_email: null + * } + * }) + * Collection.byName("verification_tokens")!.update({ + * name: "VerificationToken", + * indexes: { + * byIdentifierAndToken: { + * terms: [{ field: "identifier" }, { field: "token" }] + * }, + * verification_token_by_identifier_and_token: null + * } + * }) + * ``` * **/ export function FaunaAdapter(client: Client): Adapter {