From 883003825971a60512fe098f4465e7cf5dcdefa1 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 16:19:46 -0500 Subject: [PATCH 01/25] chore: move some auth providers out --- packages/auth-providers-api/package.json | 38 +- packages/auth-providers-api/src/index.ts | 6 - packages/auth-providers-setup/jest.config.js | 1 - packages/auth-providers-setup/package.json | 7 +- .../auth-providers-setup/src/clerk/setup.ts | 35 -- .../auth-providers-setup/src/dbAuth/setup.ts | 93 ----- .../src/dbAuth/templates/web/auth.ts.template | 3 - packages/auth-providers-setup/src/index.ts | 4 - .../src/supabase/setup.ts | 38 -- .../src/supertokens/setup.ts | 35 -- packages/auth-providers-web/jest.config.js | 3 - packages/auth-providers-web/package.json | 32 +- packages/auth-providers-web/resolver.js | 26 -- packages/auth-providers-web/src/index.ts | 4 - packages/auth-providers-web/webAuthn/index.js | 2 - .../auth-providers-web/webAuthn/package.json | 4 - .../auth-providers/auth0/api/package.json | 6 +- .../auth-providers/auth0/api/tsconfig.json | 2 +- .../auth-providers/auth0/setup/src/setup.ts | 44 +-- .../auth0/setup/src/setupHandler.ts | 40 ++ .../setup/src/templates/web/auth.ts.template | 2 +- .../auth-providers/auth0/web/package.json | 7 +- .../azureActiveDirectory/api/package.json | 10 +- .../azureActiveDirectory/api/tsconfig.json | 2 +- .../azureActiveDirectory/setup/package.json | 2 +- .../azureActiveDirectory/setup/src/setup.ts | 38 +- .../setup/src/setupHandler.ts | 33 ++ .../setup/src/templates/web/auth.ts.template | 2 +- .../azureActiveDirectory/web/package.json | 6 +- packages/auth-providers/clerk/api/.babelrc.js | 1 + packages/auth-providers/clerk/api/README.md | 141 +++++++ .../auth-providers/clerk/api/jest.config.js | 4 + .../auth-providers/clerk/api/package.json | 38 ++ .../clerk/api/src}/__tests__/clerk.test.ts | 0 .../clerk/api/src}/decoder.ts | 5 +- .../auth-providers/clerk/api/src/index.ts | 1 + .../auth-providers/clerk/api/tsconfig.json | 12 + .../auth-providers/clerk/setup/.babelrc.js | 1 + packages/auth-providers/clerk/setup/README.md | 141 +++++++ .../auth-providers/clerk/setup/jest.config.js | 4 + .../auth-providers/clerk/setup/package.json | 37 ++ .../auth-providers/clerk/setup/src/index.ts | 1 + .../auth-providers/clerk/setup/src/setup.ts | 19 + .../clerk/setup/src/setupHandler.ts | 23 ++ .../src}/templates/api/lib/auth.ts.template | 0 .../src}/templates/web/auth.tsx.template | 2 +- .../auth-providers/clerk/setup/tsconfig.json | 12 + packages/auth-providers/clerk/web/.babelrc.js | 1 + packages/auth-providers/clerk/web/README.md | 141 +++++++ .../auth-providers/clerk/web/jest.config.js | 5 + .../auth-providers/clerk/web/package.json | 44 +++ .../clerk/web/src}/__tests__/clerk.test.tsx | 0 .../clerk/web/src}/clerk.tsx | 0 .../auth-providers/clerk/web/src/index.ts | 1 + .../auth-providers/clerk/web/tsconfig.json | 12 + .../auth-providers/custom/setup/src/setup.ts | 29 +- .../custom/setup/src/setupHandler.ts | 26 ++ .../auth-providers/dbAuth/api/.babelrc.js | 1 + packages/auth-providers/dbAuth/api/README.md | 141 +++++++ .../auth-providers/dbAuth/api/jest.config.js | 4 + .../auth-providers/dbAuth/api/package.json | 43 +++ .../dbAuth/api/src}/DbAuthHandler.ts | 0 .../api/src}/__tests__/DbAuthHandler.test.js | 5 - .../dbAuth/api/src}/__tests__/shared.test.js | 0 .../dbAuth/api/src}/decoder.ts | 0 .../dbAuth/api/src}/errors.ts | 0 .../dbAuth/api/src}/index.ts | 0 .../dbAuth/api/src}/shared.ts | 0 .../auth-providers/dbAuth/api/tsconfig.json | 12 + .../auth-providers/dbAuth/setup/.babelrc.js | 1 + .../auth-providers/dbAuth/setup/README.md | 141 +++++++ .../dbAuth/setup/jest.config.js | 4 + .../auth-providers/dbAuth/setup/package.json | 46 +++ .../auth-providers/dbAuth/setup/src/index.ts | 1 + .../auth-providers/dbAuth/setup/src/setup.ts | 42 ++ .../dbAuth/setup/src}/setupData.ts | 0 .../dbAuth/setup/src/setupHandler.ts | 55 +++ .../templates/api/functions/auth.ts.template | 2 +- .../api/functions/auth.webAuthn.ts.template | 2 +- .../src}/templates/api/lib/auth.ts.template | 0 .../setup/src/templates/web/auth.ts.template | 3 + .../templates/web/auth.webAuthn.ts.template | 2 +- .../dbAuth/setup/src}/webAuthn.setupData.ts | 0 .../auth-providers/dbAuth/setup/tsconfig.json | 12 + .../auth-providers/dbAuth/web/.babelrc.js | 1 + packages/auth-providers/dbAuth/web/README.md | 141 +++++++ .../auth-providers/dbAuth/web/jest.config.js | 5 + .../auth-providers/dbAuth/web/package.json | 42 ++ .../dbAuth/web/src}/__tests__/dbAuth.test.tsx | 0 .../dbAuth/web/src}/dbAuth.ts | 0 .../dbAuth/web/src}/webAuthn.ts | 0 .../auth-providers/dbAuth/web/tsconfig.json | 12 + .../dbAuth/web/webAuthn/index.js | 2 + .../dbAuth/web/webAuthn/package.json | 4 + .../auth-providers/firebase/api/package.json | 4 +- .../api/src/__tests__/firebase.test.ts | 4 +- .../firebase/api/src/decoder.ts | 5 +- .../auth-providers/firebase/api/tsconfig.json | 2 +- .../firebase/setup/src/setup.ts | 30 +- .../firebase/setup/src/setupHandler.ts | 24 ++ .../setup/src/templates/web/auth.ts.template | 4 +- .../auth-providers/firebase/web/package.json | 2 +- .../auth-providers/netlify/api/package.json | 4 +- .../auth-providers/netlify/api/tsconfig.json | 2 +- .../auth-providers/netlify/setup/src/setup.ts | 33 +- .../netlify/setup/src/setupHandler.ts | 26 ++ .../setup/src/templates/web/auth.ts.template | 2 +- .../auth-providers/netlify/web/package.json | 2 +- .../auth-providers/supabase/api/.babelrc.js | 1 + .../auth-providers/supabase/api/README.md | 141 +++++++ .../supabase/api/jest.config.js | 4 + .../auth-providers/supabase/api/package.json | 41 ++ .../api/src}/__tests__/supabase.test.ts | 0 .../supabase/api/src}/decoder.ts | 0 .../auth-providers/supabase/api/src/index.ts | 1 + .../auth-providers/supabase/api/tsconfig.json | 12 + .../auth-providers/supabase/setup/.babelrc.js | 1 + .../auth-providers/supabase/setup/README.md | 141 +++++++ .../supabase/setup/jest.config.js | 4 + .../supabase/setup/package.json | 37 ++ .../supabase/setup/src/index.ts | 1 + .../supabase/setup/src/setup.ts | 19 + .../supabase/setup/src/setupHandler.ts | 26 ++ .../src}/templates/api/lib/auth.ts.template | 0 .../setup/src}/templates/web/auth.ts.template | 2 +- .../supabase/setup/tsconfig.json | 12 + .../auth-providers/supabase/web/.babelrc.js | 1 + .../auth-providers/supabase/web/README.md | 141 +++++++ .../supabase/web/jest.config.js | 5 + .../auth-providers/supabase/web/package.json | 41 ++ .../web/src}/__tests__/supabase.test.tsx | 0 .../auth-providers/supabase/web/src/index.ts | 1 + .../supabase/web/src}/supabase.ts | 0 .../auth-providers/supabase/web/tsconfig.json | 12 + .../supertokens/api/.babelrc.js | 1 + .../auth-providers/supertokens/api/README.md | 141 +++++++ .../supertokens/api/jest.config.js | 4 + .../supertokens/api/package.json | 42 ++ .../api/src}/__tests__/supertokens.test.ts | 0 .../supertokens/api/src}/decoder.ts | 0 .../supertokens/api/src/index.ts | 1 + .../supertokens/api/tsconfig.json | 12 + .../supertokens/setup/.babelrc.js | 1 + .../supertokens/setup/README.md | 141 +++++++ .../supertokens/setup/jest.config.js | 4 + .../supertokens/setup/package.json | 37 ++ .../supertokens/setup/src/index.ts | 1 + .../supertokens/setup/src/setup.ts | 19 + .../supertokens/setup/src/setupHandler.ts | 27 ++ .../templates/api/functions/auth.ts.template | 0 .../src}/templates/api/lib/auth.ts.template | 0 .../templates/api/lib/supertokens.ts.template | 0 .../setup/src}/templates/web/auth.ts.template | 2 +- .../supertokens/setup/tsconfig.json | 12 + .../supertokens/web/.babelrc.js | 1 + .../auth-providers/supertokens/web/README.md | 141 +++++++ .../supertokens/web/jest.config.js | 5 + .../supertokens/web/package.json | 42 ++ .../web/src}/__tests__/supertokens.test.tsx | 0 .../supertokens/web/src/index.ts | 1 + .../supertokens/web/src}/supertokens.ts | 0 .../supertokens/web/tsconfig.json | 12 + packages/auth/package.json | 28 +- packages/cli-helpers/src/auth/authTasks.ts | 24 +- packages/cli-helpers/src/auth/setupHelpers.ts | 8 +- yarn.lock | 363 +++++++++++++----- 166 files changed, 3154 insertions(+), 654 deletions(-) delete mode 100644 packages/auth-providers-setup/src/clerk/setup.ts delete mode 100644 packages/auth-providers-setup/src/dbAuth/setup.ts delete mode 100644 packages/auth-providers-setup/src/dbAuth/templates/web/auth.ts.template delete mode 100644 packages/auth-providers-setup/src/supabase/setup.ts delete mode 100644 packages/auth-providers-setup/src/supertokens/setup.ts delete mode 100644 packages/auth-providers-web/resolver.js delete mode 100644 packages/auth-providers-web/webAuthn/index.js delete mode 100644 packages/auth-providers-web/webAuthn/package.json create mode 100644 packages/auth-providers/auth0/setup/src/setupHandler.ts create mode 100644 packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts create mode 100644 packages/auth-providers/clerk/api/.babelrc.js create mode 100644 packages/auth-providers/clerk/api/README.md create mode 100644 packages/auth-providers/clerk/api/jest.config.js create mode 100644 packages/auth-providers/clerk/api/package.json rename packages/{auth-providers-api/src/clerk => auth-providers/clerk/api/src}/__tests__/clerk.test.ts (100%) rename packages/{auth-providers-api/src/clerk => auth-providers/clerk/api/src}/decoder.ts (84%) create mode 100644 packages/auth-providers/clerk/api/src/index.ts create mode 100644 packages/auth-providers/clerk/api/tsconfig.json create mode 100644 packages/auth-providers/clerk/setup/.babelrc.js create mode 100644 packages/auth-providers/clerk/setup/README.md create mode 100644 packages/auth-providers/clerk/setup/jest.config.js create mode 100644 packages/auth-providers/clerk/setup/package.json create mode 100644 packages/auth-providers/clerk/setup/src/index.ts create mode 100644 packages/auth-providers/clerk/setup/src/setup.ts create mode 100644 packages/auth-providers/clerk/setup/src/setupHandler.ts rename packages/{auth-providers-setup/src/clerk => auth-providers/clerk/setup/src}/templates/api/lib/auth.ts.template (100%) rename packages/{auth-providers-setup/src/clerk => auth-providers/clerk/setup/src}/templates/web/auth.tsx.template (95%) create mode 100644 packages/auth-providers/clerk/setup/tsconfig.json create mode 100644 packages/auth-providers/clerk/web/.babelrc.js create mode 100644 packages/auth-providers/clerk/web/README.md create mode 100644 packages/auth-providers/clerk/web/jest.config.js create mode 100644 packages/auth-providers/clerk/web/package.json rename packages/{auth-providers-web/src/clerk => auth-providers/clerk/web/src}/__tests__/clerk.test.tsx (100%) rename packages/{auth-providers-web/src/clerk => auth-providers/clerk/web/src}/clerk.tsx (100%) create mode 100644 packages/auth-providers/clerk/web/src/index.ts create mode 100644 packages/auth-providers/clerk/web/tsconfig.json create mode 100644 packages/auth-providers/custom/setup/src/setupHandler.ts create mode 100644 packages/auth-providers/dbAuth/api/.babelrc.js create mode 100644 packages/auth-providers/dbAuth/api/README.md create mode 100644 packages/auth-providers/dbAuth/api/jest.config.js create mode 100644 packages/auth-providers/dbAuth/api/package.json rename packages/{auth-providers-api/src/dbAuth => auth-providers/dbAuth/api/src}/DbAuthHandler.ts (100%) rename packages/{auth-providers-api/src/dbAuth => auth-providers/dbAuth/api/src}/__tests__/DbAuthHandler.test.js (99%) rename packages/{auth-providers-api/src/dbAuth => auth-providers/dbAuth/api/src}/__tests__/shared.test.js (100%) rename packages/{auth-providers-api/src/dbAuth => auth-providers/dbAuth/api/src}/decoder.ts (100%) rename packages/{auth-providers-api/src/dbAuth => auth-providers/dbAuth/api/src}/errors.ts (100%) rename packages/{auth-providers-api/src/dbAuth => auth-providers/dbAuth/api/src}/index.ts (100%) rename packages/{auth-providers-api/src/dbAuth => auth-providers/dbAuth/api/src}/shared.ts (100%) create mode 100644 packages/auth-providers/dbAuth/api/tsconfig.json create mode 100644 packages/auth-providers/dbAuth/setup/.babelrc.js create mode 100644 packages/auth-providers/dbAuth/setup/README.md create mode 100644 packages/auth-providers/dbAuth/setup/jest.config.js create mode 100644 packages/auth-providers/dbAuth/setup/package.json create mode 100644 packages/auth-providers/dbAuth/setup/src/index.ts create mode 100644 packages/auth-providers/dbAuth/setup/src/setup.ts rename packages/{auth-providers-setup/src/dbAuth => auth-providers/dbAuth/setup/src}/setupData.ts (100%) create mode 100644 packages/auth-providers/dbAuth/setup/src/setupHandler.ts rename packages/{auth-providers-setup/src/dbAuth => auth-providers/dbAuth/setup/src}/templates/api/functions/auth.ts.template (99%) rename packages/{auth-providers-setup/src/dbAuth => auth-providers/dbAuth/setup/src}/templates/api/functions/auth.webAuthn.ts.template (99%) rename packages/{auth-providers-setup/src/dbAuth => auth-providers/dbAuth/setup/src}/templates/api/lib/auth.ts.template (100%) create mode 100644 packages/auth-providers/dbAuth/setup/src/templates/web/auth.ts.template rename packages/{auth-providers-setup/src/dbAuth => auth-providers/dbAuth/setup/src}/templates/web/auth.webAuthn.ts.template (65%) rename packages/{auth-providers-setup/src/dbAuth => auth-providers/dbAuth/setup/src}/webAuthn.setupData.ts (100%) create mode 100644 packages/auth-providers/dbAuth/setup/tsconfig.json create mode 100644 packages/auth-providers/dbAuth/web/.babelrc.js create mode 100644 packages/auth-providers/dbAuth/web/README.md create mode 100644 packages/auth-providers/dbAuth/web/jest.config.js create mode 100644 packages/auth-providers/dbAuth/web/package.json rename packages/{auth-providers-web/src/dbAuth => auth-providers/dbAuth/web/src}/__tests__/dbAuth.test.tsx (100%) rename packages/{auth-providers-web/src/dbAuth => auth-providers/dbAuth/web/src}/dbAuth.ts (100%) rename packages/{auth-providers-web/src/dbAuth => auth-providers/dbAuth/web/src}/webAuthn.ts (100%) create mode 100644 packages/auth-providers/dbAuth/web/tsconfig.json create mode 100644 packages/auth-providers/dbAuth/web/webAuthn/index.js create mode 100644 packages/auth-providers/dbAuth/web/webAuthn/package.json create mode 100644 packages/auth-providers/firebase/setup/src/setupHandler.ts create mode 100644 packages/auth-providers/netlify/setup/src/setupHandler.ts create mode 100644 packages/auth-providers/supabase/api/.babelrc.js create mode 100644 packages/auth-providers/supabase/api/README.md create mode 100644 packages/auth-providers/supabase/api/jest.config.js create mode 100644 packages/auth-providers/supabase/api/package.json rename packages/{auth-providers-api/src/supabase => auth-providers/supabase/api/src}/__tests__/supabase.test.ts (100%) rename packages/{auth-providers-api/src/supabase => auth-providers/supabase/api/src}/decoder.ts (100%) create mode 100644 packages/auth-providers/supabase/api/src/index.ts create mode 100644 packages/auth-providers/supabase/api/tsconfig.json create mode 100644 packages/auth-providers/supabase/setup/.babelrc.js create mode 100644 packages/auth-providers/supabase/setup/README.md create mode 100644 packages/auth-providers/supabase/setup/jest.config.js create mode 100644 packages/auth-providers/supabase/setup/package.json create mode 100644 packages/auth-providers/supabase/setup/src/index.ts create mode 100644 packages/auth-providers/supabase/setup/src/setup.ts create mode 100644 packages/auth-providers/supabase/setup/src/setupHandler.ts rename packages/{auth-providers-setup/src/supabase => auth-providers/supabase/setup/src}/templates/api/lib/auth.ts.template (100%) rename packages/{auth-providers-setup/src/supabase => auth-providers/supabase/setup/src}/templates/web/auth.ts.template (78%) create mode 100644 packages/auth-providers/supabase/setup/tsconfig.json create mode 100644 packages/auth-providers/supabase/web/.babelrc.js create mode 100644 packages/auth-providers/supabase/web/README.md create mode 100644 packages/auth-providers/supabase/web/jest.config.js create mode 100644 packages/auth-providers/supabase/web/package.json rename packages/{auth-providers-web/src/supabase => auth-providers/supabase/web/src}/__tests__/supabase.test.tsx (100%) create mode 100644 packages/auth-providers/supabase/web/src/index.ts rename packages/{auth-providers-web/src/supabase => auth-providers/supabase/web/src}/supabase.ts (100%) create mode 100644 packages/auth-providers/supabase/web/tsconfig.json create mode 100644 packages/auth-providers/supertokens/api/.babelrc.js create mode 100644 packages/auth-providers/supertokens/api/README.md create mode 100644 packages/auth-providers/supertokens/api/jest.config.js create mode 100644 packages/auth-providers/supertokens/api/package.json rename packages/{auth-providers-api/src/supertokens => auth-providers/supertokens/api/src}/__tests__/supertokens.test.ts (100%) rename packages/{auth-providers-api/src/supertokens => auth-providers/supertokens/api/src}/decoder.ts (100%) create mode 100644 packages/auth-providers/supertokens/api/src/index.ts create mode 100644 packages/auth-providers/supertokens/api/tsconfig.json create mode 100644 packages/auth-providers/supertokens/setup/.babelrc.js create mode 100644 packages/auth-providers/supertokens/setup/README.md create mode 100644 packages/auth-providers/supertokens/setup/jest.config.js create mode 100644 packages/auth-providers/supertokens/setup/package.json create mode 100644 packages/auth-providers/supertokens/setup/src/index.ts create mode 100644 packages/auth-providers/supertokens/setup/src/setup.ts create mode 100644 packages/auth-providers/supertokens/setup/src/setupHandler.ts rename packages/{auth-providers-setup/src/supertokens => auth-providers/supertokens/setup/src}/templates/api/functions/auth.ts.template (100%) rename packages/{auth-providers-setup/src/supertokens => auth-providers/supertokens/setup/src}/templates/api/lib/auth.ts.template (100%) rename packages/{auth-providers-setup/src/supertokens => auth-providers/supertokens/setup/src}/templates/api/lib/supertokens.ts.template (100%) rename packages/{auth-providers-setup/src/supertokens => auth-providers/supertokens/setup/src}/templates/web/auth.ts.template (93%) create mode 100644 packages/auth-providers/supertokens/setup/tsconfig.json create mode 100644 packages/auth-providers/supertokens/web/.babelrc.js create mode 100644 packages/auth-providers/supertokens/web/README.md create mode 100644 packages/auth-providers/supertokens/web/jest.config.js create mode 100644 packages/auth-providers/supertokens/web/package.json rename packages/{auth-providers-web/src/supertokens => auth-providers/supertokens/web/src}/__tests__/supertokens.test.tsx (100%) create mode 100644 packages/auth-providers/supertokens/web/src/index.ts rename packages/{auth-providers-web/src/supertokens => auth-providers/supertokens/web/src}/supertokens.ts (100%) create mode 100644 packages/auth-providers/supertokens/web/tsconfig.json diff --git a/packages/auth-providers-api/package.json b/packages/auth-providers-api/package.json index 1f0feda067b0..181d7a8da39e 100644 --- a/packages/auth-providers-api/package.json +++ b/packages/auth-providers-api/package.json @@ -25,64 +25,34 @@ "dependencies": { "@babel/runtime-corejs3": "7.20.6", "core-js": "3.26.1", - "jsonwebtoken": "8.5.1", - "uuid": "9.0.0" + "jsonwebtoken": "8.5.1" }, "devDependencies": { - "@auth0/auth0-spa-js": "1.22.5", - "@azure/msal-browser": "2.30.0", "@babel/cli": "7.19.3", "@babel/core": "7.20.5", - "@clerk/clerk-js": "3.17.0", - "@clerk/clerk-react": "3.5.1", - "@clerk/clerk-sdk-node": "3.9.2", - "@clerk/types": "2.21.0", "@magic-sdk/admin": "1.4.1", "@nhost/hasura-auth-js": "1.4.1", "@nhost/nhost-js": "1.4.10", "@okta/jwt-verifier": "2.6.0", "@okta/okta-auth-js": "6.9.0", - "@redwoodjs/auth": "3.2.0", - "@redwoodjs/cli-helpers": "3.2.0", - "@simplewebauthn/browser": "6.2.1", - "@simplewebauthn/typescript-types": "6.2.1", - "@supabase/supabase-js": "1.35.7", + "@redwoodjs/api": "3.2.0", + "@types/aws-lambda": "8.10.107", "@types/jsonwebtoken": "8.5.9", - "@types/netlify-identity-widget": "1.9.3", - "@types/react": "17.0.50", - "@types/uuid": "8.3.4", - "firebase": "9.10.0", - "firebase-admin": "10.3.0", "gotrue-js": "0.9.29", "jest": "29.3.1", "magic-sdk": "9.1.1", - "netlify-identity-widget": "1.9.2", - "react": "17.0.2", - "supertokens-auth-react": "0.26.5", "typescript": "4.7.4" }, "peerDependencies": { - "@clerk/clerk-react": "3.5.1", - "@clerk/clerk-sdk-node": "3.9.2", "@magic-sdk/admin": "1.4.1", - "@okta/jwt-verifier": "2.6.0", - "firebase-admin": "10.3.0" + "@okta/jwt-verifier": "2.6.0" }, "peerDependenciesMeta": { - "@clerk/clerk-react": { - "optional": true - }, - "@clerk/clerk-sdk-node": { - "optional": true - }, "@magic-sdk/admin": { "optional": true }, "@okta/jwt-verifier": { "optional": true - }, - "firebase-admin": { - "optional": true } }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/packages/auth-providers-api/src/index.ts b/packages/auth-providers-api/src/index.ts index 2e493a44abab..1dccb2acf21e 100644 --- a/packages/auth-providers-api/src/index.ts +++ b/packages/auth-providers-api/src/index.ts @@ -1,11 +1,5 @@ -export { authDecoder as clerkAuthDecoder } from './clerk/decoder' -export { authDecoder as dbAuthAuthDecoder } from './dbAuth/decoder' export { authDecoder as ethereumAuthDecoder } from './ethereum/decoder' export { authDecoder as goTrueAuthDecoder } from './goTrue/decoder' export { authDecoder as magicLinkAuthDecoder } from './magicLink/decoder' export { authDecoder as nhostAuthDecoder } from './nhost/decoder' export { authDecoder as oktaAuthDecoder } from './okta/decoder' -export { authDecoder as supabaseAuthDecoder } from './supabase/decoder' -export { authDecoder as supertokensAuthDecoder } from './supertokens/decoder' - -export { hashPassword, DbAuthHandler, DbAuthHandlerOptions } from './dbAuth' diff --git a/packages/auth-providers-setup/jest.config.js b/packages/auth-providers-setup/jest.config.js index e691bb8f6dbd..dee127c25474 100644 --- a/packages/auth-providers-setup/jest.config.js +++ b/packages/auth-providers-setup/jest.config.js @@ -1,5 +1,4 @@ /** @type {import('@jest/types').Config.InitialOptions} */ module.exports = { - testEnvironment: 'jest-environment-jsdom', testPathIgnorePatterns: ['fixtures', 'dist'], } diff --git a/packages/auth-providers-setup/package.json b/packages/auth-providers-setup/package.json index 877dd703c33c..7e3c7efbd572 100644 --- a/packages/auth-providers-setup/package.json +++ b/packages/auth-providers-setup/package.json @@ -24,16 +24,13 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.20.6", - "@redwoodjs/auth": "3.2.0", "@redwoodjs/cli-helpers": "3.2.0", - "core-js": "3.26.1", - "secure-random-password": "0.2.3" + "core-js": "3.26.1" }, "devDependencies": { "@babel/cli": "7.19.3", "@babel/core": "7.20.5", - "@types/react": "17.0.50", - "@types/secure-random-password": "0.2.1", + "@types/yargs": "17.0.13", "jest": "29.3.1", "typescript": "4.7.4" }, diff --git a/packages/auth-providers-setup/src/clerk/setup.ts b/packages/auth-providers-setup/src/clerk/setup.ts deleted file mode 100644 index bf1c3f374f69..000000000000 --- a/packages/auth-providers-setup/src/clerk/setup.ts +++ /dev/null @@ -1,35 +0,0 @@ -import yargs from 'yargs' - -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' - -export const command = 'clerk' -export const description = 'Generate an auth configuration for Clerk' -export const builder = (yargs: yargs.Argv) => { - return standardAuthBuilder(yargs) -} - -interface Args { - rwVersion: string - force: boolean -} - -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - authDecoderImport: - "import { clerkAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", - provider: 'clerk', - webPackages: ['@clerk/clerk-react', '@redwoodjs/auth-providers-web'], - apiPackages: ['@clerk/clerk-sdk-node', '@redwoodjs/auth-providers-api'], - notes: [ - 'You will need to add three environment variables with your Clerk URL, API key and JWT key.', - 'Check out web/src/auth.{js,tsx} for the variables you need to add.', - 'See also: https://redwoodjs.com/docs/authentication#clerk', - ], - }) -} diff --git a/packages/auth-providers-setup/src/dbAuth/setup.ts b/packages/auth-providers-setup/src/dbAuth/setup.ts deleted file mode 100644 index a08243ded810..000000000000 --- a/packages/auth-providers-setup/src/dbAuth/setup.ts +++ /dev/null @@ -1,93 +0,0 @@ -import prompts from 'prompts' -import terminalLink from 'terminal-link' -import yargs from 'yargs' - -import { standardAuthHandler } from '@redwoodjs/cli-helpers' - -import { notes, extraTask } from './setupData' -import { - notes as webAuthnNotes, - extraTask as webAuthnExtraTask, - webPackages as webAuthnWebPackages, - apiPackages as webAuthnApiPackages, -} from './webAuthn.setupData' - -/** - * Prompt the user (unless already specified on the command line) if they want - * to enable WebAuthn support - */ -async function shouldIncludeWebAuthn(webauthn: boolean) { - if (webauthn === null) { - const webAuthnResponse = await prompts({ - type: 'confirm', - name: 'answer', - message: `Enable WebAuthn support (TouchID/FaceID)? See https://redwoodjs.com/docs/auth/dbAuth#webAuthn`, - initial: false, - }) - - return webAuthnResponse.answer - } - - return webauthn -} - -export const command = 'dbAuth' -export const description = 'Generate an auth configuration for dbAuth' -export const builder = (yargs: yargs.Argv) => { - yargs - .option('warn', { - default: true, - description: 'Experimental auth warning', - type: 'boolean', - }) - .option('force', { - alias: 'f', - default: false, - description: 'Overwrite existing configuration', - type: 'boolean', - }) - .option('webauthn', { - alias: 'w', - default: null, - description: 'Include WebAuthn support (TouchID/FaceID)', - type: 'boolean', - }) - .epilogue( - `Also see the ${terminalLink( - 'Redwood CLI Reference', - 'https://redwoodjs.com/docs/cli-commands#setup-auth' - )}` - ) -} - -interface Args { - rwVersion: string - webauthn: boolean - force: boolean -} - -export const handler = async ({ - rwVersion, - webauthn, - force: forceArg, -}: Args) => { - const webAuthn = await shouldIncludeWebAuthn(webauthn) - - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'dbAuth', - authDecoderImport: - "import { dbAuthAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", - webAuthn, - webPackages: webAuthn - ? webAuthnWebPackages - : ['@redwoodjs/auth-providers-web'], - apiPackages: webAuthn - ? webAuthnApiPackages - : ['@redwoodjs/auth-providers-api'], - extraTask: webAuthn ? webAuthnExtraTask : extraTask, - notes: webAuthn ? webAuthnNotes : notes, - }) -} diff --git a/packages/auth-providers-setup/src/dbAuth/templates/web/auth.ts.template b/packages/auth-providers-setup/src/dbAuth/templates/web/auth.ts.template deleted file mode 100644 index 6b66206d5583..000000000000 --- a/packages/auth-providers-setup/src/dbAuth/templates/web/auth.ts.template +++ /dev/null @@ -1,3 +0,0 @@ -import { createDbAuth } from '@redwoodjs/auth-providers-web' - -export const { AuthProvider, useAuth } = createDbAuth() diff --git a/packages/auth-providers-setup/src/index.ts b/packages/auth-providers-setup/src/index.ts index 439c24455654..885ab3268413 100644 --- a/packages/auth-providers-setup/src/index.ts +++ b/packages/auth-providers-setup/src/index.ts @@ -1,9 +1,5 @@ -export * as setupAuthClerkCommand from './clerk/setup' -export * as setupAuthDbAuthCommand from './dbAuth/setup' export * as setupAuthEthereumCommand from './ethereum/setup' export * as setupAuthGoTrueCommand from './goTrue/setup' export * as setupAuthMagicLinkCommand from './magicLink/setup' export * as setupAuthNhostCommand from './nhost/setup' export * as setupAuthOktaCommand from './okta/setup' -export * as setupAuthSupabaseCommand from './supabase/setup' -export * as setupAuthSupertokensCommand from './supertokens/setup' diff --git a/packages/auth-providers-setup/src/supabase/setup.ts b/packages/auth-providers-setup/src/supabase/setup.ts deleted file mode 100644 index 2497900762f4..000000000000 --- a/packages/auth-providers-setup/src/supabase/setup.ts +++ /dev/null @@ -1,38 +0,0 @@ -import yargs from 'yargs' - -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' - -export const command = 'supabase' -export const description = 'Generate an auth configuration for Supabase' -export const builder = (yargs: yargs.Argv) => { - return standardAuthBuilder(yargs) -} - -interface Args { - rwVersion: string - force: boolean -} - -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'supabase', - authDecoderImport: - "import { supabaseAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", - apiPackages: ['@redwoodjs/auth-providers-api'], - webPackages: [ - '@redwoodjs/auth-providers-web', - '@supabase/supabase-js@1.35.7', - ], - notes: [ - 'You will need to add your Supabase URL (SUPABASE_URL), public API KEY,', - 'and JWT SECRET (SUPABASE_KEY, and SUPABASE_JWT_SECRET) to your .env file.', - 'See: https://supabase.io/docs/library/getting-started#reference', - ], - }) -} diff --git a/packages/auth-providers-setup/src/supertokens/setup.ts b/packages/auth-providers-setup/src/supertokens/setup.ts deleted file mode 100644 index d575555ec53f..000000000000 --- a/packages/auth-providers-setup/src/supertokens/setup.ts +++ /dev/null @@ -1,35 +0,0 @@ -import yargs from 'yargs' - -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' - -export const command = 'supertokens' -export const description = 'Generate an auth configuration for SuperTokens' -export const builder = (yargs: yargs.Argv) => { - return standardAuthBuilder(yargs) -} - -interface Args { - rwVersion: string - force: boolean -} - -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'supertokens', - authDecoderImport: - "import { supertokensAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", - apiPackages: ['@redwoodjs/auth-providers-api', 'supertokens-node'], - webPackages: ['@redwoodjs/auth-providers-web', 'supertokens-auth-react'], - notes: [ - "We've generated some example recipe implementations, but do feel free", - 'to switch to something else that better fit your needs.', - 'See: https://supertokens.com/docs/guides', - ], - }) -} diff --git a/packages/auth-providers-web/jest.config.js b/packages/auth-providers-web/jest.config.js index 4c937d832dc1..e691bb8f6dbd 100644 --- a/packages/auth-providers-web/jest.config.js +++ b/packages/auth-providers-web/jest.config.js @@ -1,8 +1,5 @@ -const path = require('path') - /** @type {import('@jest/types').Config.InitialOptions} */ module.exports = { testEnvironment: 'jest-environment-jsdom', testPathIgnorePatterns: ['fixtures', 'dist'], - resolver: path.resolve(__dirname, './resolver.js'), } diff --git a/packages/auth-providers-web/package.json b/packages/auth-providers-web/package.json index 528c9c016311..f53124a6d3b0 100644 --- a/packages/auth-providers-web/package.json +++ b/packages/auth-providers-web/package.json @@ -25,60 +25,32 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.20.6", - "core-js": "3.26.1", - "uuid": "9.0.0" + "core-js": "3.26.1" }, "devDependencies": { - "@auth0/auth0-spa-js": "1.22.5", - "@azure/msal-browser": "2.30.0", "@babel/cli": "7.19.3", "@babel/core": "7.20.5", - "@clerk/clerk-js": "3.17.0", - "@clerk/clerk-react": "3.5.1", - "@clerk/clerk-sdk-node": "3.9.2", - "@clerk/types": "2.21.0", "@nhost/hasura-auth-js": "1.4.1", "@nhost/nhost-js": "1.4.10", "@okta/okta-auth-js": "6.9.0", "@redwoodjs/auth": "3.2.0", - "@simplewebauthn/browser": "6.2.1", - "@simplewebauthn/typescript-types": "6.2.1", - "@supabase/supabase-js": "1.35.7", - "@types/netlify-identity-widget": "1.9.3", "@types/react": "17.0.50", - "@types/uuid": "8.3.4", - "firebase": "9.10.0", - "firebase-admin": "10.3.0", "gotrue-js": "0.9.29", "jest": "29.3.1", "magic-sdk": "9.1.1", - "netlify-identity-widget": "1.9.2", "react": "17.0.2", - "supertokens-auth-react": "0.26.5", "typescript": "4.7.4" }, "peerDependencies": { - "@clerk/clerk-react": "3.5.1", - "@clerk/clerk-sdk-node": "3.9.2", "@magic-sdk/admin": "1.4.1", - "@okta/jwt-verifier": "2.6.0", - "firebase-admin": "10.3.0" + "@okta/jwt-verifier": "2.6.0" }, "peerDependenciesMeta": { - "@clerk/clerk-react": { - "optional": true - }, - "@clerk/clerk-sdk-node": { - "optional": true - }, "@magic-sdk/admin": { "optional": true }, "@okta/jwt-verifier": { "optional": true - }, - "firebase-admin": { - "optional": true } }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/packages/auth-providers-web/resolver.js b/packages/auth-providers-web/resolver.js deleted file mode 100644 index 4fb0bab11bef..000000000000 --- a/packages/auth-providers-web/resolver.js +++ /dev/null @@ -1,26 +0,0 @@ -/* eslint-env node */ - -// See these threads: -// - https://github.com/facebook/jest/issues/12770 -// - https://github.com/microsoft/accessibility-insights-web/pull/5421#issuecomment-1109168149. -// -// TL;DR, we need to resolve the firebase packages to a CommonJS version. So we -// leverage jest's default resolver, but use `packageFilter` to process parsed -// `package.json` before resolution. In doing so, we only override how jest -// resolves the firebase packages. -module.exports = (path, options) => { - return options.defaultResolver(path, { - ...options, - packageFilter: (pkg) => { - if (pkg.name === 'firebase') { - pkg.exports['./auth'].default = pkg.exports['./auth'].node.require - } - - if (['@firebase/auth', '@firebase/util'].includes(pkg.name)) { - pkg.exports['.'].default = pkg.exports['.'].node.require - } - - return pkg - }, - }) -} diff --git a/packages/auth-providers-web/src/index.ts b/packages/auth-providers-web/src/index.ts index 8543effd188a..444e8b956b8e 100644 --- a/packages/auth-providers-web/src/index.ts +++ b/packages/auth-providers-web/src/index.ts @@ -1,9 +1,5 @@ -export { createClerkAuth } from './clerk/clerk' -export { createDbAuth } from './dbAuth/dbAuth' export { createEthereumAuth } from './ethereum/ethereum' export { createGoTrueAuth } from './goTrue/goTrue' export { createMagicLinkAuth } from './magicLink/magicLink' export { createNhostAuth } from './nhost/nhost' export { createOktaAuth } from './okta/okta' -export { createSupabaseAuth } from './supabase/supabase' -export { createSuperTokensAuth } from './supertokens/supertokens' diff --git a/packages/auth-providers-web/webAuthn/index.js b/packages/auth-providers-web/webAuthn/index.js deleted file mode 100644 index e6891677d0b2..000000000000 --- a/packages/auth-providers-web/webAuthn/index.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-env es6, commonjs */ -module.exports = require('../dist/dbAuth/webAuthn') diff --git a/packages/auth-providers-web/webAuthn/package.json b/packages/auth-providers-web/webAuthn/package.json deleted file mode 100644 index 232d720dd897..000000000000 --- a/packages/auth-providers-web/webAuthn/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "./index.js", - "types": "../dist/dbAuth/webAuthn.d.ts" -} diff --git a/packages/auth-providers/auth0/api/package.json b/packages/auth-providers/auth0/api/package.json index e7b38da4e2d7..cf0bfcfa0651 100644 --- a/packages/auth-providers/auth0/api/package.json +++ b/packages/auth-providers/auth0/api/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/auth-auth0-api", + "name": "@redwoodjs/auth0-api", "version": "3.2.0", "repository": { "type": "git", @@ -30,12 +30,10 @@ "devDependencies": { "@babel/cli": "7.19.3", "@babel/core": "7.20.5", + "@redwoodjs/api": "3.2.0", "@types/jsonwebtoken": "8.5.9", "jest": "29.3.1", "typescript": "4.7.4" }, - "peerDependencies": { - "@redwoodjs/api": "3.2.0" - }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/auth0/api/tsconfig.json b/packages/auth-providers/auth0/api/tsconfig.json index a925964c5e44..bb9ec4a21fd1 100644 --- a/packages/auth-providers/auth0/api/tsconfig.json +++ b/packages/auth-providers/auth0/api/tsconfig.json @@ -8,5 +8,5 @@ "outDir": "dist" }, "include": ["src"], - "references": [{ "path": "../../../auth" }] + "references": [{ "path": "../../../api" }] } diff --git a/packages/auth-providers/auth0/setup/src/setup.ts b/packages/auth-providers/auth0/setup/src/setup.ts index da394e2bd48b..fd72e3b46418 100644 --- a/packages/auth-providers/auth0/setup/src/setup.ts +++ b/packages/auth-providers/auth0/setup/src/setup.ts @@ -1,49 +1,19 @@ import yargs from 'yargs' -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' export const command = 'auth0' export const description = 'Generate an auth configuration for Auth0' -export const builder = (yargs: yargs.Argv) => { + +export function builder(yargs: yargs.Argv) { return standardAuthBuilder(yargs) } -interface Args { - rwVersion: string +export interface Args { force: boolean } -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'auth0', - authDecoderImport: - "import { authDecoder } from '@redwoodjs/auth-auth0-api'", - apiPackages: ['@redwoodjs/auth-auth0-api'], - webPackages: ['@auth0/auth0-spa-js@1.22.5', '@redwoodjs/auth-auth0-web'], - notes: [ - 'You will need to create several environment variables with your Auth0 config options.', - 'Check out web/src/App.{js,tsx} for the variables you need to add.', - 'See: https://auth0.com/docs/quickstart/spa/react#get-your-application-keys', - '\n', - "You must also create an API and set the audience parameter, or you'll", - 'receive an opaque token instead of the required JWT token.', - 'See: https://auth0.com/docs/quickstart/spa/react/02-calling-an-api#create-an-api', - '\n', - 'If you want to allow users to get refresh tokens while offline,', - 'you must also enable the Allow Offline Access switch in your', - 'Auth0 API Settings as part of setup configuration.', - 'See: https://auth0.com/docs/tokens/refresh-tokens', - '\n', - 'You can increase security by using refresh token rotation which issues a new refresh token', - 'and invalidates the predecessor token with each request made to Auth0 for a new access token.', - 'Rotating the refresh token reduces the risk of a compromised refresh token.', - 'See: https://auth0.com/docs/tokens/refresh-tokens/refresh-token-rotation', - ], - }) +export async function handler(options: Args) { + const { handler } = await import('./setupHandler.js') + return handler(options) } diff --git a/packages/auth-providers/auth0/setup/src/setupHandler.ts b/packages/auth-providers/auth0/setup/src/setupHandler.ts new file mode 100644 index 000000000000..30da553a9ace --- /dev/null +++ b/packages/auth-providers/auth0/setup/src/setupHandler.ts @@ -0,0 +1,40 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export async function handler({ force: forceArg }: Args) { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'auth0', + authDecoderImport: "import { authDecoder } from '@redwoodjs/auth0-api'", + apiPackages: [`@redwoodjs/auth0-api@${version}`], + webPackages: [ + '@auth0/auth0-spa-js@1.22.5', + `@redwoodjs/auth0-web@${version}`, + ], + notes: [ + 'You will need to create several environment variables with your Auth0 config options.', + 'Check out web/src/App.{js,tsx} for the variables you need to add.', + 'See: https://auth0.com/docs/quickstart/spa/react#get-your-application-keys', + '', + "You must also create an API and set the audience parameter, or you'll", + 'receive an opaque token instead of the required JWT token.', + 'See: https://auth0.com/docs/quickstart/spa/react/02-calling-an-api#create-an-api', + '', + 'If you want to allow users to get refresh tokens while offline,', + 'you must also enable the Allow Offline Access switch in your', + 'Auth0 API Settings as part of setup configuration.', + 'See: https://auth0.com/docs/tokens/refresh-tokens', + '', + 'You can increase security by using refresh token rotation which issues a new refresh token', + 'and invalidates the predecessor token with each request made to Auth0 for a new access token.', + 'Rotating the refresh token reduces the risk of a compromised refresh token.', + 'See: https://auth0.com/docs/tokens/refresh-tokens/refresh-token-rotation', + ], + }) +} diff --git a/packages/auth-providers/auth0/setup/src/templates/web/auth.ts.template b/packages/auth-providers/auth0/setup/src/templates/web/auth.ts.template index aad0d9a5d22f..e34084c85cde 100644 --- a/packages/auth-providers/auth0/setup/src/templates/web/auth.ts.template +++ b/packages/auth-providers/auth0/setup/src/templates/web/auth.ts.template @@ -1,6 +1,6 @@ import { Auth0Client } from '@auth0/auth0-spa-js' -import { createAuth0Auth } from '@redwoodjs/auth-providers-web' +import { createAuth0Auth } from '@redwoodjs/auth0-web' const auth0 = new Auth0Client({ domain: process.env.AUTH0_DOMAIN || '', diff --git a/packages/auth-providers/auth0/web/package.json b/packages/auth-providers/auth0/web/package.json index b6c2439d3543..e522af313f7d 100644 --- a/packages/auth-providers/auth0/web/package.json +++ b/packages/auth-providers/auth0/web/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/auth-auth0-web", + "name": "@redwoodjs/auth0-web", "version": "3.2.0", "repository": { "type": "git", @@ -23,9 +23,11 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.20.6", + "@redwoodjs/auth": "3.2.0", "core-js": "3.26.1" }, "devDependencies": { + "@auth0/auth0-spa-js": "1.22.5", "@babel/cli": "7.19.3", "@babel/core": "7.20.5", "@testing-library/react-hooks": "8.0.1", @@ -35,8 +37,7 @@ "typescript": "4.7.4" }, "peerDependencies": { - "@auth0/auth0-spa-js": "1.22.5", - "@redwoodjs/auth": "3.2.0" + "@auth0/auth0-spa-js": "1.22.5" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/azureActiveDirectory/api/package.json b/packages/auth-providers/azureActiveDirectory/api/package.json index 9df765f91b7b..bc91be10ac96 100644 --- a/packages/auth-providers/azureActiveDirectory/api/package.json +++ b/packages/auth-providers/azureActiveDirectory/api/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/auth-azure-active-directory-api", + "name": "@redwoodjs/azure-active-directory-api", "version": "3.2.0", "repository": { "type": "git", @@ -24,17 +24,17 @@ "dependencies": { "@babel/runtime-corejs3": "7.20.6", "core-js": "3.26.1", - "jsonwebtoken": "8.5.1" + "jsonwebtoken": "8.5.1", + "jwks-rsa": "2.0.5" }, "devDependencies": { "@babel/cli": "7.19.3", "@babel/core": "7.20.5", + "@redwoodjs/api": "3.2.0", + "@types/aws-lambda": "8.10.107", "@types/jsonwebtoken": "8.5.9", "jest": "29.3.1", "typescript": "4.7.4" }, - "peerDependencies": { - "@redwoodjs/api": "3.2.0" - }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/azureActiveDirectory/api/tsconfig.json b/packages/auth-providers/azureActiveDirectory/api/tsconfig.json index a925964c5e44..bb9ec4a21fd1 100644 --- a/packages/auth-providers/azureActiveDirectory/api/tsconfig.json +++ b/packages/auth-providers/azureActiveDirectory/api/tsconfig.json @@ -8,5 +8,5 @@ "outDir": "dist" }, "include": ["src"], - "references": [{ "path": "../../../auth" }] + "references": [{ "path": "../../../api" }] } diff --git a/packages/auth-providers/azureActiveDirectory/setup/package.json b/packages/auth-providers/azureActiveDirectory/setup/package.json index 5864ecf0fecb..768e6dc24f63 100644 --- a/packages/auth-providers/azureActiveDirectory/setup/package.json +++ b/packages/auth-providers/azureActiveDirectory/setup/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/auth-azure-active-directory-setup", + "name": "@redwoodjs/azure-active-directory-setup", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/azureActiveDirectory/setup/src/setup.ts b/packages/auth-providers/azureActiveDirectory/setup/src/setup.ts index d548162f8f9d..9ea8411cd7e5 100644 --- a/packages/auth-providers/azureActiveDirectory/setup/src/setup.ts +++ b/packages/auth-providers/azureActiveDirectory/setup/src/setup.ts @@ -1,46 +1,20 @@ import yargs from 'yargs' -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' export const command = 'azure-active-directory' export const description = 'Generate an auth configuration for Azure Active Directory' -export const builder = (yargs: yargs.Argv) => { +export function builder(yargs: yargs.Argv) { return standardAuthBuilder(yargs) } -interface Args { - rwVersion: string +export interface Args { force: boolean } -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'azureActiveDirectory', - authDecoderImport: - "import { authDecoder } from '@redwoodjs/auth-azure-active-directory-api'", - apiPackages: ['@redwoodjs/auth-azure-active-directory-api'], - webPackages: [ - '@redwoodjs/auth-azure-active-directory-web', - '@azure/msal-browser', - ], - notes: [ - 'You will need to create several environment variables with your Azure', - 'AD config options. Check out web/src/App.{js,tsx} for the variables', - 'you need to add.', - '\n', - 'RedwoodJS specific Documentation:', - 'https://redwoodjs.com/docs/authentication#azure-ad', - '\n', - 'MSAL.js Documentation:', - 'https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications', - ], - }) +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) } diff --git a/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts b/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts new file mode 100644 index 000000000000..217c90417b0d --- /dev/null +++ b/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts @@ -0,0 +1,33 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +import { Args } from './setup' + +export async function handler({ force: forceArg }: Args) { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'azureActiveDirectory', + authDecoderImport: + "import { authDecoder } from '@redwoodjs/azure-active-directory-api'", + apiPackages: [`@redwoodjs/azure-active-directory-api@${version}`], + webPackages: [ + `@redwoodjs/azure-active-directory-web@${version}`, + '@azure/msal-browser', + ], + notes: [ + 'You will need to create several environment variables with your Azure', + 'AD config options. Check out web/src/App.{js,tsx} for the variables', + 'you need to add.', + '\n', + 'RedwoodJS specific Documentation:', + 'https://redwoodjs.com/docs/authentication#azure-ad', + '\n', + 'MSAL.js Documentation:', + 'https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications', + ], + }) +} diff --git a/packages/auth-providers/azureActiveDirectory/setup/src/templates/web/auth.ts.template b/packages/auth-providers/azureActiveDirectory/setup/src/templates/web/auth.ts.template index 7a82261b2450..49128f89c65b 100644 --- a/packages/auth-providers/azureActiveDirectory/setup/src/templates/web/auth.ts.template +++ b/packages/auth-providers/azureActiveDirectory/setup/src/templates/web/auth.ts.template @@ -1,6 +1,6 @@ import { PublicClientApplication } from '@azure/msal-browser' -import { createAzureActiveDirectoryAuth } from '@redwoodjs/auth-providers-web' +import { createAzureActiveDirectoryAuth } from '@redwoodjs/azure-active-directory-web' const azureActiveDirectoryClient = new PublicClientApplication({ auth: { diff --git a/packages/auth-providers/azureActiveDirectory/web/package.json b/packages/auth-providers/azureActiveDirectory/web/package.json index db78ae662084..18c1b5689e0e 100644 --- a/packages/auth-providers/azureActiveDirectory/web/package.json +++ b/packages/auth-providers/azureActiveDirectory/web/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/auth-azure-active-directory-web", + "name": "@redwoodjs/azure-active-directory-web", "version": "3.2.0", "repository": { "type": "git", @@ -23,6 +23,7 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.20.6", + "@redwoodjs/auth": "3.2.0", "core-js": "3.26.1" }, "devDependencies": { @@ -37,8 +38,7 @@ "typescript": "4.7.4" }, "peerDependencies": { - "@azure/msal-browser": "2.30.0", - "@redwoodjs/auth": "3.2.0" + "@azure/msal-browser": "2.30.0" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/clerk/api/.babelrc.js b/packages/auth-providers/clerk/api/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/clerk/api/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/clerk/api/README.md b/packages/auth-providers/clerk/api/README.md new file mode 100644 index 000000000000..d27ea3626dac --- /dev/null +++ b/packages/auth-providers/clerk/api/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider there's more info in the +[auth docs](https://redwoodjs.com/docs/authentication). + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/clerk/api/jest.config.js b/packages/auth-providers/clerk/api/jest.config.js new file mode 100644 index 000000000000..dee127c25474 --- /dev/null +++ b/packages/auth-providers/clerk/api/jest.config.js @@ -0,0 +1,4 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/clerk/api/package.json b/packages/auth-providers/clerk/api/package.json new file mode 100644 index 000000000000..7bd028571eba --- /dev/null +++ b/packages/auth-providers/clerk/api/package.json @@ -0,0 +1,38 @@ +{ + "name": "@redwoodjs/clerk-api", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/clerk/api" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "@clerk/clerk-sdk-node": "3.9.2", + "core-js": "3.26.1" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@redwoodjs/api": "3.2.0", + "@types/aws-lambda": "8.10.107", + "jest": "29.3.1", + "typescript": "4.7.4" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers-api/src/clerk/__tests__/clerk.test.ts b/packages/auth-providers/clerk/api/src/__tests__/clerk.test.ts similarity index 100% rename from packages/auth-providers-api/src/clerk/__tests__/clerk.test.ts rename to packages/auth-providers/clerk/api/src/__tests__/clerk.test.ts diff --git a/packages/auth-providers-api/src/clerk/decoder.ts b/packages/auth-providers/clerk/api/src/decoder.ts similarity index 84% rename from packages/auth-providers-api/src/clerk/decoder.ts rename to packages/auth-providers/clerk/api/src/decoder.ts index 0976b19d715c..7860954570ea 100644 --- a/packages/auth-providers-api/src/clerk/decoder.ts +++ b/packages/auth-providers/clerk/api/src/decoder.ts @@ -1,3 +1,5 @@ +import base, { users } from '@clerk/clerk-sdk-node' + import { Decoder } from '@redwoodjs/api' export const authDecoder: Decoder = async (token: string, type: string) => { @@ -5,9 +7,6 @@ export const authDecoder: Decoder = async (token: string, type: string) => { return null } - // Use require here, to prevent needing clerk sdk in api deps - const { users, base } = require('@clerk/clerk-sdk-node').default - if (!process.env.CLERK_JWT_KEY) { console.error('CLERK_JWT_KEY env var is not set.') throw new Error('CLERK_JWT_KEY env var is not set.') diff --git a/packages/auth-providers/clerk/api/src/index.ts b/packages/auth-providers/clerk/api/src/index.ts new file mode 100644 index 000000000000..ead5bdde8676 --- /dev/null +++ b/packages/auth-providers/clerk/api/src/index.ts @@ -0,0 +1 @@ +export { authDecoder } from './decoder' diff --git a/packages/auth-providers/clerk/api/tsconfig.json b/packages/auth-providers/clerk/api/tsconfig.json new file mode 100644 index 000000000000..bb9ec4a21fd1 --- /dev/null +++ b/packages/auth-providers/clerk/api/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../api" }] +} diff --git a/packages/auth-providers/clerk/setup/.babelrc.js b/packages/auth-providers/clerk/setup/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/clerk/setup/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/clerk/setup/README.md b/packages/auth-providers/clerk/setup/README.md new file mode 100644 index 000000000000..661208df586e --- /dev/null +++ b/packages/auth-providers/clerk/setup/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider you can read the auth docs +on the web. + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/clerk/setup/jest.config.js b/packages/auth-providers/clerk/setup/jest.config.js new file mode 100644 index 000000000000..dee127c25474 --- /dev/null +++ b/packages/auth-providers/clerk/setup/jest.config.js @@ -0,0 +1,4 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/clerk/setup/package.json b/packages/auth-providers/clerk/setup/package.json new file mode 100644 index 000000000000..d4d60644fa37 --- /dev/null +++ b/packages/auth-providers/clerk/setup/package.json @@ -0,0 +1,37 @@ +{ + "name": "@redwoodjs/clerk-setup", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/clerk/setup" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src --passWithNoTests", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "@redwoodjs/cli-helpers": "3.2.0", + "core-js": "3.26.1" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@types/yargs": "17.0.13", + "jest": "29.3.1", + "typescript": "4.7.4" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers/clerk/setup/src/index.ts b/packages/auth-providers/clerk/setup/src/index.ts new file mode 100644 index 000000000000..ae4f3bc966d7 --- /dev/null +++ b/packages/auth-providers/clerk/setup/src/index.ts @@ -0,0 +1 @@ +export * as setupAuthClerkCommand from './setup' diff --git a/packages/auth-providers/clerk/setup/src/setup.ts b/packages/auth-providers/clerk/setup/src/setup.ts new file mode 100644 index 000000000000..f058a4722e2c --- /dev/null +++ b/packages/auth-providers/clerk/setup/src/setup.ts @@ -0,0 +1,19 @@ +import yargs from 'yargs' + +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' + +export const command = 'clerk' +export const description = 'Generate an auth configuration for Clerk' + +export function builder(yargs: yargs.Argv) { + return standardAuthBuilder(yargs) +} + +export interface Args { + force: boolean +} + +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) +} diff --git a/packages/auth-providers/clerk/setup/src/setupHandler.ts b/packages/auth-providers/clerk/setup/src/setupHandler.ts new file mode 100644 index 000000000000..c372908be342 --- /dev/null +++ b/packages/auth-providers/clerk/setup/src/setupHandler.ts @@ -0,0 +1,23 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export const handler = async ({ force: forceArg }: Args) => { + standardAuthHandler({ + basedir: __dirname, + forceArg, + authDecoderImport: `import { authDecoder } from '@redwoodjs/clerk-api`, + provider: 'clerk', + webPackages: ['@clerk/clerk-react', `@redwoodjs/clerk-web@${version}`], + apiPackages: [`@redwoodjs/clerk-api@${version}`], + notes: [ + 'You will need to add three environment variables with your Clerk URL, API key and JWT key.', + 'Check out web/src/auth.{js,tsx} for the variables you need to add.', + 'See also: https://redwoodjs.com/docs/authentication#clerk', + ], + }) +} diff --git a/packages/auth-providers-setup/src/clerk/templates/api/lib/auth.ts.template b/packages/auth-providers/clerk/setup/src/templates/api/lib/auth.ts.template similarity index 100% rename from packages/auth-providers-setup/src/clerk/templates/api/lib/auth.ts.template rename to packages/auth-providers/clerk/setup/src/templates/api/lib/auth.ts.template diff --git a/packages/auth-providers-setup/src/clerk/templates/web/auth.tsx.template b/packages/auth-providers/clerk/setup/src/templates/web/auth.tsx.template similarity index 95% rename from packages/auth-providers-setup/src/clerk/templates/web/auth.tsx.template rename to packages/auth-providers/clerk/setup/src/templates/web/auth.tsx.template index 6ee37378c849..3879366cde7c 100644 --- a/packages/auth-providers-setup/src/clerk/templates/web/auth.tsx.template +++ b/packages/auth-providers/clerk/setup/src/templates/web/auth.tsx.template @@ -2,7 +2,7 @@ import React, { useEffect } from 'react' import { ClerkLoaded, ClerkProvider, useUser } from '@clerk/clerk-react' -import { createClerkAuth } from '@redwoodjs/auth-providers-web' +import { createClerkAuth } from '@redwoodjs/clerk-web' import { navigate } from '@redwoodjs/router' // You can set user roles in a "roles" array on the public metadata in Clerk. diff --git a/packages/auth-providers/clerk/setup/tsconfig.json b/packages/auth-providers/clerk/setup/tsconfig.json new file mode 100644 index 000000000000..abb54b70112a --- /dev/null +++ b/packages/auth-providers/clerk/setup/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../cli-helpers" }] +} diff --git a/packages/auth-providers/clerk/web/.babelrc.js b/packages/auth-providers/clerk/web/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/clerk/web/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/clerk/web/README.md b/packages/auth-providers/clerk/web/README.md new file mode 100644 index 000000000000..661208df586e --- /dev/null +++ b/packages/auth-providers/clerk/web/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider you can read the auth docs +on the web. + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/clerk/web/jest.config.js b/packages/auth-providers/clerk/web/jest.config.js new file mode 100644 index 000000000000..e691bb8f6dbd --- /dev/null +++ b/packages/auth-providers/clerk/web/jest.config.js @@ -0,0 +1,5 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testEnvironment: 'jest-environment-jsdom', + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/clerk/web/package.json b/packages/auth-providers/clerk/web/package.json new file mode 100644 index 000000000000..49aced7e2c69 --- /dev/null +++ b/packages/auth-providers/clerk/web/package.json @@ -0,0 +1,44 @@ +{ + "name": "@redwoodjs/auth-clerk-web", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/clerk/web" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "@redwoodjs/auth": "3.2.0", + "core-js": "3.26.1" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@clerk/clerk-react": "3.5.1", + "@clerk/types": "2.21.0", + "@testing-library/react-hooks": "8.0.1", + "@types/react": "17.0.50", + "jest": "29.3.1", + "react": "17.0.2", + "typescript": "4.7.4" + }, + "peerDependencies": { + "@clerk/clerk-react": "3.5.1" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers-web/src/clerk/__tests__/clerk.test.tsx b/packages/auth-providers/clerk/web/src/__tests__/clerk.test.tsx similarity index 100% rename from packages/auth-providers-web/src/clerk/__tests__/clerk.test.tsx rename to packages/auth-providers/clerk/web/src/__tests__/clerk.test.tsx diff --git a/packages/auth-providers-web/src/clerk/clerk.tsx b/packages/auth-providers/clerk/web/src/clerk.tsx similarity index 100% rename from packages/auth-providers-web/src/clerk/clerk.tsx rename to packages/auth-providers/clerk/web/src/clerk.tsx diff --git a/packages/auth-providers/clerk/web/src/index.ts b/packages/auth-providers/clerk/web/src/index.ts new file mode 100644 index 000000000000..f99029608cc2 --- /dev/null +++ b/packages/auth-providers/clerk/web/src/index.ts @@ -0,0 +1 @@ +export { createClerkAuth } from './clerk' diff --git a/packages/auth-providers/clerk/web/tsconfig.json b/packages/auth-providers/clerk/web/tsconfig.json new file mode 100644 index 000000000000..a925964c5e44 --- /dev/null +++ b/packages/auth-providers/clerk/web/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../auth" }] +} diff --git a/packages/auth-providers/custom/setup/src/setup.ts b/packages/auth-providers/custom/setup/src/setup.ts index 24786e26a9bc..ae8a986db91b 100644 --- a/packages/auth-providers/custom/setup/src/setup.ts +++ b/packages/auth-providers/custom/setup/src/setup.ts @@ -1,34 +1,19 @@ import yargs from 'yargs' -import { - isTypeScriptProject, - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' export const command = 'custom' export const description = 'Generate a custom auth configuration' -export const builder = (yargs: yargs.Argv) => { + +export function builder(yargs: yargs.Argv) { return standardAuthBuilder(yargs) } -interface Args { - rwVersion: string +export interface Args { force: boolean } -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - const authFilename = isTypeScriptProject() ? 'auth.ts' : 'auth.js' - - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'custom', - notes: [ - 'Done! But you have a little more work to do:\n', - 'You will have to write the actual auth implementation/integration', - `yourself. Take a look in ${authFilename} and do the necessary changes.`, - ], - }) +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) } diff --git a/packages/auth-providers/custom/setup/src/setupHandler.ts b/packages/auth-providers/custom/setup/src/setupHandler.ts new file mode 100644 index 000000000000..1757bbfc8d4a --- /dev/null +++ b/packages/auth-providers/custom/setup/src/setupHandler.ts @@ -0,0 +1,26 @@ +import fs from 'fs' + +import { + isTypeScriptProject, + standardAuthHandler, +} from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export async function handler({ force: forceArg }: Args) { + const authFilename = isTypeScriptProject() ? 'auth.ts' : 'auth.js' + + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'custom', + webPackages: [`@redwoodjs/auth@${version}`], + notes: [ + 'Done! But you have a little more work to do:\n', + 'You will have to write the actual auth implementation/integration', + `yourself. Take a look in ${authFilename} and do the necessary changes.`, + ], + }) +} diff --git a/packages/auth-providers/dbAuth/api/.babelrc.js b/packages/auth-providers/dbAuth/api/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/dbAuth/api/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/dbAuth/api/README.md b/packages/auth-providers/dbAuth/api/README.md new file mode 100644 index 000000000000..d27ea3626dac --- /dev/null +++ b/packages/auth-providers/dbAuth/api/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider there's more info in the +[auth docs](https://redwoodjs.com/docs/authentication). + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/dbAuth/api/jest.config.js b/packages/auth-providers/dbAuth/api/jest.config.js new file mode 100644 index 000000000000..dee127c25474 --- /dev/null +++ b/packages/auth-providers/dbAuth/api/jest.config.js @@ -0,0 +1,4 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/dbAuth/api/package.json b/packages/auth-providers/dbAuth/api/package.json new file mode 100644 index 000000000000..464daeccf6ec --- /dev/null +++ b/packages/auth-providers/dbAuth/api/package.json @@ -0,0 +1,43 @@ +{ + "name": "@redwoodjs/dbauth-api", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/dbAuth/api" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "base64url": "3.0.1", + "core-js": "3.26.1", + "crypto-js": "4.1.1", + "md5": "2.3.0", + "uuid": "9.0.0" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@redwoodjs/api": "3.2.0", + "@types/crypto-js": "4.1.1", + "@types/md5": "2.3.2", + "@types/uuid": "8.3.4", + "jest": "29.3.1", + "typescript": "4.7.4" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers-api/src/dbAuth/DbAuthHandler.ts b/packages/auth-providers/dbAuth/api/src/DbAuthHandler.ts similarity index 100% rename from packages/auth-providers-api/src/dbAuth/DbAuthHandler.ts rename to packages/auth-providers/dbAuth/api/src/DbAuthHandler.ts diff --git a/packages/auth-providers-api/src/dbAuth/__tests__/DbAuthHandler.test.js b/packages/auth-providers/dbAuth/api/src/__tests__/DbAuthHandler.test.js similarity index 99% rename from packages/auth-providers-api/src/dbAuth/__tests__/DbAuthHandler.test.js rename to packages/auth-providers/dbAuth/api/src/__tests__/DbAuthHandler.test.js index b173d0bae686..56623467d51f 100644 --- a/packages/auth-providers-api/src/dbAuth/__tests__/DbAuthHandler.test.js +++ b/packages/auth-providers/dbAuth/api/src/__tests__/DbAuthHandler.test.js @@ -1,8 +1,3 @@ -/** - * TODO: Get rid of this when dbAuth/api is its own package - * @jest-environment node - */ - import CryptoJS from 'crypto-js' import { DbAuthHandler } from '../DbAuthHandler' diff --git a/packages/auth-providers-api/src/dbAuth/__tests__/shared.test.js b/packages/auth-providers/dbAuth/api/src/__tests__/shared.test.js similarity index 100% rename from packages/auth-providers-api/src/dbAuth/__tests__/shared.test.js rename to packages/auth-providers/dbAuth/api/src/__tests__/shared.test.js diff --git a/packages/auth-providers-api/src/dbAuth/decoder.ts b/packages/auth-providers/dbAuth/api/src/decoder.ts similarity index 100% rename from packages/auth-providers-api/src/dbAuth/decoder.ts rename to packages/auth-providers/dbAuth/api/src/decoder.ts diff --git a/packages/auth-providers-api/src/dbAuth/errors.ts b/packages/auth-providers/dbAuth/api/src/errors.ts similarity index 100% rename from packages/auth-providers-api/src/dbAuth/errors.ts rename to packages/auth-providers/dbAuth/api/src/errors.ts diff --git a/packages/auth-providers-api/src/dbAuth/index.ts b/packages/auth-providers/dbAuth/api/src/index.ts similarity index 100% rename from packages/auth-providers-api/src/dbAuth/index.ts rename to packages/auth-providers/dbAuth/api/src/index.ts diff --git a/packages/auth-providers-api/src/dbAuth/shared.ts b/packages/auth-providers/dbAuth/api/src/shared.ts similarity index 100% rename from packages/auth-providers-api/src/dbAuth/shared.ts rename to packages/auth-providers/dbAuth/api/src/shared.ts diff --git a/packages/auth-providers/dbAuth/api/tsconfig.json b/packages/auth-providers/dbAuth/api/tsconfig.json new file mode 100644 index 000000000000..a925964c5e44 --- /dev/null +++ b/packages/auth-providers/dbAuth/api/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../auth" }] +} diff --git a/packages/auth-providers/dbAuth/setup/.babelrc.js b/packages/auth-providers/dbAuth/setup/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/dbAuth/setup/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/dbAuth/setup/README.md b/packages/auth-providers/dbAuth/setup/README.md new file mode 100644 index 000000000000..661208df586e --- /dev/null +++ b/packages/auth-providers/dbAuth/setup/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider you can read the auth docs +on the web. + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/dbAuth/setup/jest.config.js b/packages/auth-providers/dbAuth/setup/jest.config.js new file mode 100644 index 000000000000..dee127c25474 --- /dev/null +++ b/packages/auth-providers/dbAuth/setup/jest.config.js @@ -0,0 +1,4 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/dbAuth/setup/package.json b/packages/auth-providers/dbAuth/setup/package.json new file mode 100644 index 000000000000..a4ca04bf33f2 --- /dev/null +++ b/packages/auth-providers/dbAuth/setup/package.json @@ -0,0 +1,46 @@ +{ + "name": "@redwoodjs/dbauth-setup", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/dbAuth/setup" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src --passWithNoTests", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "@redwoodjs/cli-helpers": "3.2.0", + "@simplewebauthn/browser": "6.2.1", + "core-js": "3.26.1", + "prompts": "2.4.2", + "secure-random-password": "0.2.3", + "terminal-link": "2.1.1" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@simplewebauthn/typescript-types": "6.2.1", + "@types/secure-random-password": "0.2.1", + "@types/yargs": "17.0.13", + "jest": "29.3.1", + "typescript": "4.7.4" + }, + "peerDependencies": { + "@redwoodjs/auth": "3.2.0" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers/dbAuth/setup/src/index.ts b/packages/auth-providers/dbAuth/setup/src/index.ts new file mode 100644 index 000000000000..733712750eb8 --- /dev/null +++ b/packages/auth-providers/dbAuth/setup/src/index.ts @@ -0,0 +1 @@ +export * as setupAuthDbAuthCommand from './setup' diff --git a/packages/auth-providers/dbAuth/setup/src/setup.ts b/packages/auth-providers/dbAuth/setup/src/setup.ts new file mode 100644 index 000000000000..02451e82bbc9 --- /dev/null +++ b/packages/auth-providers/dbAuth/setup/src/setup.ts @@ -0,0 +1,42 @@ +import terminalLink from 'terminal-link' +import yargs from 'yargs' + +export const command = 'dbAuth' +export const description = 'Generate an auth configuration for dbAuth' + +export function builder(yargs: yargs.Argv) { + yargs + .option('warn', { + default: true, + description: 'Experimental auth warning', + type: 'boolean', + }) + .option('force', { + alias: 'f', + default: false, + description: 'Overwrite existing configuration', + type: 'boolean', + }) + .option('webauthn', { + alias: 'w', + default: null, + description: 'Include WebAuthn support (TouchID/FaceID)', + type: 'boolean', + }) + .epilogue( + `Also see the ${terminalLink( + 'Redwood CLI Reference', + 'https://redwoodjs.com/docs/cli-commands#setup-auth' + )}` + ) +} + +export interface Args { + webauthn: boolean + force: boolean +} + +export const handler = async (options: Args) => { + const { handler } = await import('./setupHandler') + return handler(options) +} diff --git a/packages/auth-providers-setup/src/dbAuth/setupData.ts b/packages/auth-providers/dbAuth/setup/src/setupData.ts similarity index 100% rename from packages/auth-providers-setup/src/dbAuth/setupData.ts rename to packages/auth-providers/dbAuth/setup/src/setupData.ts diff --git a/packages/auth-providers/dbAuth/setup/src/setupHandler.ts b/packages/auth-providers/dbAuth/setup/src/setupHandler.ts new file mode 100644 index 000000000000..03a36def30ed --- /dev/null +++ b/packages/auth-providers/dbAuth/setup/src/setupHandler.ts @@ -0,0 +1,55 @@ +import fs from 'fs' + +import prompts from 'prompts' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' +import { notes, extraTask } from './setupData' +import { + notes as webAuthnNotes, + extraTask as webAuthnExtraTask, + webPackages as webAuthnWebPackages, + apiPackages as webAuthnApiPackages, +} from './webAuthn.setupData' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export async function handler({ webauthn, force: forceArg }: Args) { + const webAuthn = await shouldIncludeWebAuthn(webauthn) + + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'dbAuth', + authDecoderImport: "import { authDecoder } from '@redwoodjs/dbauth-api'", + webAuthn, + webPackages: webAuthn + ? webAuthnWebPackages + : [`@redwoodjs/dbauth-web@${version}`], + apiPackages: webAuthn + ? webAuthnApiPackages + : [`@redwoodjs/dbauth-api@${version}`], + extraTask: webAuthn ? webAuthnExtraTask : extraTask, + notes: webAuthn ? webAuthnNotes : notes, + }) +} + +/** + * Prompt the user (unless already specified on the command line) if they want + * to enable WebAuthn support + */ +async function shouldIncludeWebAuthn(webauthn: boolean) { + if (webauthn === null) { + const webAuthnResponse = await prompts({ + type: 'confirm', + name: 'answer', + message: `Enable WebAuthn support (TouchID/FaceID)? See https://redwoodjs.com/docs/auth/dbAuth#webAuthn`, + initial: false, + }) + + return webAuthnResponse.answer + } + + return webauthn +} diff --git a/packages/auth-providers-setup/src/dbAuth/templates/api/functions/auth.ts.template b/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.ts.template similarity index 99% rename from packages/auth-providers-setup/src/dbAuth/templates/api/functions/auth.ts.template rename to packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.ts.template index 45d79d800341..4902974856d6 100644 --- a/packages/auth-providers-setup/src/dbAuth/templates/api/functions/auth.ts.template +++ b/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.ts.template @@ -1,6 +1,6 @@ import type { APIGatewayProxyEvent, Context } from 'aws-lambda' -import { DbAuthHandler, DbAuthHandlerOptions } from '@redwoodjs/auth-providers-api' +import { DbAuthHandler, DbAuthHandlerOptions } from '@redwoodjs/dbauth-api' import { db } from 'src/lib/db' diff --git a/packages/auth-providers-setup/src/dbAuth/templates/api/functions/auth.webAuthn.ts.template b/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.webAuthn.ts.template similarity index 99% rename from packages/auth-providers-setup/src/dbAuth/templates/api/functions/auth.webAuthn.ts.template rename to packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.webAuthn.ts.template index d2836bcc5361..9737c9496453 100644 --- a/packages/auth-providers-setup/src/dbAuth/templates/api/functions/auth.webAuthn.ts.template +++ b/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.webAuthn.ts.template @@ -1,6 +1,6 @@ import type { APIGatewayProxyEvent, Context } from 'aws-lambda' -import { DbAuthHandler, DbAuthHandlerOptions } from '@redwoodjs/auth-providers-api' +import { DbAuthHandler, DbAuthHandlerOptions } from '@redwoodjs/dbauth-api' import { db } from 'src/lib/db' diff --git a/packages/auth-providers-setup/src/dbAuth/templates/api/lib/auth.ts.template b/packages/auth-providers/dbAuth/setup/src/templates/api/lib/auth.ts.template similarity index 100% rename from packages/auth-providers-setup/src/dbAuth/templates/api/lib/auth.ts.template rename to packages/auth-providers/dbAuth/setup/src/templates/api/lib/auth.ts.template diff --git a/packages/auth-providers/dbAuth/setup/src/templates/web/auth.ts.template b/packages/auth-providers/dbAuth/setup/src/templates/web/auth.ts.template new file mode 100644 index 000000000000..0ba27ddb2e58 --- /dev/null +++ b/packages/auth-providers/dbAuth/setup/src/templates/web/auth.ts.template @@ -0,0 +1,3 @@ +import { createDbAuth } from '@redwoodjs/dbauth-web' + +export const { AuthProvider, useAuth } = createDbAuth() diff --git a/packages/auth-providers-setup/src/dbAuth/templates/web/auth.webAuthn.ts.template b/packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template similarity index 65% rename from packages/auth-providers-setup/src/dbAuth/templates/web/auth.webAuthn.ts.template rename to packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template index d9ad74f6e947..e0c215ee067b 100644 --- a/packages/auth-providers-setup/src/dbAuth/templates/web/auth.webAuthn.ts.template +++ b/packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template @@ -1,4 +1,4 @@ import { createDbAuth } from '@redwoodjs/auth-providers-web' -import WebAuthnClient from '@redwoodjs/auth-providers-web/webAuthn' +import WebAuthnClient from '@redwoodjs/@redwoodjs/dbauth-web/webAuthn' export const { AuthProvider, useAuth } = createDbAuth(WebAuthnClient) diff --git a/packages/auth-providers-setup/src/dbAuth/webAuthn.setupData.ts b/packages/auth-providers/dbAuth/setup/src/webAuthn.setupData.ts similarity index 100% rename from packages/auth-providers-setup/src/dbAuth/webAuthn.setupData.ts rename to packages/auth-providers/dbAuth/setup/src/webAuthn.setupData.ts diff --git a/packages/auth-providers/dbAuth/setup/tsconfig.json b/packages/auth-providers/dbAuth/setup/tsconfig.json new file mode 100644 index 000000000000..abb54b70112a --- /dev/null +++ b/packages/auth-providers/dbAuth/setup/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../cli-helpers" }] +} diff --git a/packages/auth-providers/dbAuth/web/.babelrc.js b/packages/auth-providers/dbAuth/web/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/dbAuth/web/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/dbAuth/web/README.md b/packages/auth-providers/dbAuth/web/README.md new file mode 100644 index 000000000000..661208df586e --- /dev/null +++ b/packages/auth-providers/dbAuth/web/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider you can read the auth docs +on the web. + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/dbAuth/web/jest.config.js b/packages/auth-providers/dbAuth/web/jest.config.js new file mode 100644 index 000000000000..e691bb8f6dbd --- /dev/null +++ b/packages/auth-providers/dbAuth/web/jest.config.js @@ -0,0 +1,5 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testEnvironment: 'jest-environment-jsdom', + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/dbAuth/web/package.json b/packages/auth-providers/dbAuth/web/package.json new file mode 100644 index 000000000000..0d2320979396 --- /dev/null +++ b/packages/auth-providers/dbAuth/web/package.json @@ -0,0 +1,42 @@ +{ + "name": "@redwoodjs/dbauth-web", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/dbAuth/web" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist", + "webAuthn" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "@redwoodjs/auth": "3.2.0", + "@simplewebauthn/browser": "6.2.1", + "core-js": "3.26.1" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@simplewebauthn/typescript-types": "6.2.1", + "@testing-library/react-hooks": "8.0.1", + "@types/react": "17.0.50", + "jest": "29.3.1", + "react": "17.0.2", + "typescript": "4.7.4" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers-web/src/dbAuth/__tests__/dbAuth.test.tsx b/packages/auth-providers/dbAuth/web/src/__tests__/dbAuth.test.tsx similarity index 100% rename from packages/auth-providers-web/src/dbAuth/__tests__/dbAuth.test.tsx rename to packages/auth-providers/dbAuth/web/src/__tests__/dbAuth.test.tsx diff --git a/packages/auth-providers-web/src/dbAuth/dbAuth.ts b/packages/auth-providers/dbAuth/web/src/dbAuth.ts similarity index 100% rename from packages/auth-providers-web/src/dbAuth/dbAuth.ts rename to packages/auth-providers/dbAuth/web/src/dbAuth.ts diff --git a/packages/auth-providers-web/src/dbAuth/webAuthn.ts b/packages/auth-providers/dbAuth/web/src/webAuthn.ts similarity index 100% rename from packages/auth-providers-web/src/dbAuth/webAuthn.ts rename to packages/auth-providers/dbAuth/web/src/webAuthn.ts diff --git a/packages/auth-providers/dbAuth/web/tsconfig.json b/packages/auth-providers/dbAuth/web/tsconfig.json new file mode 100644 index 000000000000..a925964c5e44 --- /dev/null +++ b/packages/auth-providers/dbAuth/web/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../auth" }] +} diff --git a/packages/auth-providers/dbAuth/web/webAuthn/index.js b/packages/auth-providers/dbAuth/web/webAuthn/index.js new file mode 100644 index 000000000000..3fb1caeaf8a5 --- /dev/null +++ b/packages/auth-providers/dbAuth/web/webAuthn/index.js @@ -0,0 +1,2 @@ +/* eslint-env es6, commonjs */ +module.exports = require('../dist/webAuthn') diff --git a/packages/auth-providers/dbAuth/web/webAuthn/package.json b/packages/auth-providers/dbAuth/web/webAuthn/package.json new file mode 100644 index 000000000000..e209f8931939 --- /dev/null +++ b/packages/auth-providers/dbAuth/web/webAuthn/package.json @@ -0,0 +1,4 @@ +{ + "main": "./index.js", + "types": "../dist/webAuthn.d.ts" +} diff --git a/packages/auth-providers/firebase/api/package.json b/packages/auth-providers/firebase/api/package.json index 0d92fd68f41c..c76166c47b1b 100644 --- a/packages/auth-providers/firebase/api/package.json +++ b/packages/auth-providers/firebase/api/package.json @@ -29,12 +29,10 @@ "devDependencies": { "@babel/cli": "7.19.3", "@babel/core": "7.20.5", + "@redwoodjs/api": "3.2.0", "@types/aws-lambda": "8.10.107", "jest": "29.3.1", "typescript": "4.7.4" }, - "peerDependencies": { - "@redwoodjs/api": "3.2.0" - }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/firebase/api/src/__tests__/firebase.test.ts b/packages/auth-providers/firebase/api/src/__tests__/firebase.test.ts index 0a4242e4c8aa..f65556edf46e 100644 --- a/packages/auth-providers/firebase/api/src/__tests__/firebase.test.ts +++ b/packages/auth-providers/firebase/api/src/__tests__/firebase.test.ts @@ -1,11 +1,11 @@ import type { APIGatewayProxyEvent, Context as LambdaContext } from 'aws-lambda' -import * as firebaseAdmin from 'firebase-admin' +import admin from 'firebase-admin' import { authDecoder } from '../decoder' const verifyIdToken = jest.fn() -jest.spyOn(firebaseAdmin, 'auth').mockImplementation((() => { +jest.spyOn(admin, 'auth').mockImplementation((() => { return { verifyIdToken, } diff --git a/packages/auth-providers/firebase/api/src/decoder.ts b/packages/auth-providers/firebase/api/src/decoder.ts index cf00d26c9b80..83ed62b6fbed 100644 --- a/packages/auth-providers/firebase/api/src/decoder.ts +++ b/packages/auth-providers/firebase/api/src/decoder.ts @@ -1,3 +1,5 @@ +import admin from 'firebase-admin' + import { Decoder } from '@redwoodjs/api' export const authDecoder: Decoder = async (token: string, type: string) => { @@ -5,9 +7,6 @@ export const authDecoder: Decoder = async (token: string, type: string) => { return null } - // Use require here to prevent dependency for non-firebase projects - const admin = require('firebase-admin') - return admin.auth().verifyIdToken(token) // Alternative third-party JWT verification process described here: // https://firebase.google.com/docs/auth/admin/verify-id-tokens#verify_id_tokens_using_a_third-party_jwt_library diff --git a/packages/auth-providers/firebase/api/tsconfig.json b/packages/auth-providers/firebase/api/tsconfig.json index a925964c5e44..bb9ec4a21fd1 100644 --- a/packages/auth-providers/firebase/api/tsconfig.json +++ b/packages/auth-providers/firebase/api/tsconfig.json @@ -8,5 +8,5 @@ "outDir": "dist" }, "include": ["src"], - "references": [{ "path": "../../../auth" }] + "references": [{ "path": "../../../api" }] } diff --git a/packages/auth-providers/firebase/setup/src/setup.ts b/packages/auth-providers/firebase/setup/src/setup.ts index b4230b56e4f5..3aa466f94c48 100644 --- a/packages/auth-providers/firebase/setup/src/setup.ts +++ b/packages/auth-providers/firebase/setup/src/setup.ts @@ -1,35 +1,19 @@ import yargs from 'yargs' -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' export const command = 'firebase' export const description = 'Generate an auth configuration for Firebase' -export const builder = (yargs: yargs.Argv) => { + +export function builder(yargs: yargs.Argv) { return standardAuthBuilder(yargs) } -interface Args { - rwVersion: string +export interface Args { force: boolean } -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'firebase', - authDecoderImport: - "import { authDecoder } from '@redwoodjs/auth-firebase-api'", - webPackages: ['firebase', '@redwoodjs/auth-firebase-web'], - apiPackages: ['firebase-admin', '@redwoodjs/auth-firebase-api'], - notes: [ - 'You will need to create several environment variables with your Firebase config options.', - 'Check out web/src/auth.{js,ts} for the variables you need to add.', - 'See: https://firebase.google.com/docs/web/setup#config-object', - ], - }) +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) } diff --git a/packages/auth-providers/firebase/setup/src/setupHandler.ts b/packages/auth-providers/firebase/setup/src/setupHandler.ts new file mode 100644 index 000000000000..391bfaa47905 --- /dev/null +++ b/packages/auth-providers/firebase/setup/src/setupHandler.ts @@ -0,0 +1,24 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export async function handler({ force: forceArg }: Args) { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'firebase', + authDecoderImport: + "import { authDecoder } from '@redwoodjs/auth-firebase-api'", + webPackages: ['firebase', `@redwoodjs/auth-firebase-web@${version}`], + apiPackages: ['firebase-admin', `@redwoodjs/auth-firebase-api@${version}`], + notes: [ + 'You will need to create several environment variables with your Firebase config options.', + 'Check out web/src/auth.{js,ts} for the variables you need to add.', + 'See: https://firebase.google.com/docs/web/setup#config-object', + ], + }) +} diff --git a/packages/auth-providers/firebase/setup/src/templates/web/auth.ts.template b/packages/auth-providers/firebase/setup/src/templates/web/auth.ts.template index 7f929c9df01d..1701b5ab0fb9 100644 --- a/packages/auth-providers/firebase/setup/src/templates/web/auth.ts.template +++ b/packages/auth-providers/firebase/setup/src/templates/web/auth.ts.template @@ -1,7 +1,7 @@ -import * as firebaseAuth from '@firebase/auth' +import * as firebaseAuth from 'firebase/auth' import { initializeApp, getApp, getApps } from 'firebase/app' -import { createFirebaseAuth } from '@redwoodjs/auth-providers-web' +import { createFirebaseAuth } from '@redwoodjs/auth-firebase-web' const firebaseConfig = { apiKey: process.env.FIREBASE_API_KEY, diff --git a/packages/auth-providers/firebase/web/package.json b/packages/auth-providers/firebase/web/package.json index 9999fa884822..b85f564068bd 100644 --- a/packages/auth-providers/firebase/web/package.json +++ b/packages/auth-providers/firebase/web/package.json @@ -23,6 +23,7 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.20.6", + "@redwoodjs/auth": "3.2.0", "core-js": "3.26.1" }, "devDependencies": { @@ -36,7 +37,6 @@ "typescript": "4.7.4" }, "peerDependencies": { - "@redwoodjs/auth": "3.2.0", "firebase": "9.10.0" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/packages/auth-providers/netlify/api/package.json b/packages/auth-providers/netlify/api/package.json index d4b5c495cc9f..63b80df58817 100644 --- a/packages/auth-providers/netlify/api/package.json +++ b/packages/auth-providers/netlify/api/package.json @@ -29,13 +29,11 @@ "devDependencies": { "@babel/cli": "7.19.3", "@babel/core": "7.20.5", + "@redwoodjs/api": "3.2.0", "@types/aws-lambda": "8.10.107", "@types/jsonwebtoken": "8.5.9", "jest": "29.3.1", "typescript": "4.7.4" }, - "peerDependencies": { - "@redwoodjs/api": "3.2.0" - }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/netlify/api/tsconfig.json b/packages/auth-providers/netlify/api/tsconfig.json index a925964c5e44..bb9ec4a21fd1 100644 --- a/packages/auth-providers/netlify/api/tsconfig.json +++ b/packages/auth-providers/netlify/api/tsconfig.json @@ -8,5 +8,5 @@ "outDir": "dist" }, "include": ["src"], - "references": [{ "path": "../../../auth" }] + "references": [{ "path": "../../../api" }] } diff --git a/packages/auth-providers/netlify/setup/src/setup.ts b/packages/auth-providers/netlify/setup/src/setup.ts index 98b9f8ea1775..8dd0feb256d3 100644 --- a/packages/auth-providers/netlify/setup/src/setup.ts +++ b/packages/auth-providers/netlify/setup/src/setup.ts @@ -1,38 +1,19 @@ import yargs from 'yargs' -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' export const command = 'netlify' export const description = 'Generate an auth configuration for Netlify' -export const builder = (yargs: yargs.Argv) => { + +export function builder(yargs: yargs.Argv) { return standardAuthBuilder(yargs) } -interface Args { - rwVersion: string +export interface Args { force: boolean } -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'netlify', - authDecoderImport: - "import { authDecoder } from '@redwoodjs/auth-netlify-api'", - apiPackages: ['@redwoodjs/auth-netlify-api'], - webPackages: [ - '@redwoodjs/auth-netlify-web', - 'netlify-identity-widget@1.9.2', - '@types/netlify-identity-widget', - ], - notes: [ - 'You will need to enable Identity on your Netlify site and configure the API endpoint.', - 'See: https://github.com/netlify/netlify-identity-widget#localhost', - ], - }) +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) } diff --git a/packages/auth-providers/netlify/setup/src/setupHandler.ts b/packages/auth-providers/netlify/setup/src/setupHandler.ts new file mode 100644 index 000000000000..ee65ebb4ab68 --- /dev/null +++ b/packages/auth-providers/netlify/setup/src/setupHandler.ts @@ -0,0 +1,26 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export async function handler({ force: forceArg }: Args) { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'netlify', + authDecoderImport: `import { authDecoder } from '@redwoodjs/auth-netlify-api@${version}'`, + apiPackages: [`@redwoodjs/auth-netlify-api@${version}`], + webPackages: [ + `@redwoodjs/auth-netlify-web@${version}`, + 'netlify-identity-widget@1.9.2', + '@types/netlify-identity-widget', + ], + notes: [ + 'You will need to enable Identity on your Netlify site and configure the API endpoint.', + 'See: https://github.com/netlify/netlify-identity-widget#localhost', + ], + }) +} diff --git a/packages/auth-providers/netlify/setup/src/templates/web/auth.ts.template b/packages/auth-providers/netlify/setup/src/templates/web/auth.ts.template index d220dbc09ae2..619f1aafd92b 100644 --- a/packages/auth-providers/netlify/setup/src/templates/web/auth.ts.template +++ b/packages/auth-providers/netlify/setup/src/templates/web/auth.ts.template @@ -1,6 +1,6 @@ import netlifyIdentity from 'netlify-identity-widget' -import { createNetlifyAuth } from '@redwoodjs/auth-providers-web' +import { createNetlifyAuth } from '@redwoodjs/auth-netlify-web' import { isBrowser } from '@redwoodjs/prerender/browserUtils' isBrowser && netlifyIdentity.init() diff --git a/packages/auth-providers/netlify/web/package.json b/packages/auth-providers/netlify/web/package.json index 2b55a9c55930..582386aec9fa 100644 --- a/packages/auth-providers/netlify/web/package.json +++ b/packages/auth-providers/netlify/web/package.json @@ -23,6 +23,7 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.20.6", + "@redwoods/auth": "3.2.0", "core-js": "3.26.1" }, "devDependencies": { @@ -36,7 +37,6 @@ "typescript": "4.7.4" }, "peerDependencies": { - "@redwoodjs/auth": "3.2.0", "netlify-identity-widget": "1.9.2" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/packages/auth-providers/supabase/api/.babelrc.js b/packages/auth-providers/supabase/api/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/supabase/api/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/supabase/api/README.md b/packages/auth-providers/supabase/api/README.md new file mode 100644 index 000000000000..d27ea3626dac --- /dev/null +++ b/packages/auth-providers/supabase/api/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider there's more info in the +[auth docs](https://redwoodjs.com/docs/authentication). + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/supabase/api/jest.config.js b/packages/auth-providers/supabase/api/jest.config.js new file mode 100644 index 000000000000..dee127c25474 --- /dev/null +++ b/packages/auth-providers/supabase/api/jest.config.js @@ -0,0 +1,4 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/supabase/api/package.json b/packages/auth-providers/supabase/api/package.json new file mode 100644 index 000000000000..643468544303 --- /dev/null +++ b/packages/auth-providers/supabase/api/package.json @@ -0,0 +1,41 @@ +{ + "name": "@redwoodjs/auth-supabase-api", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/supabase/api" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "core-js": "3.26.1", + "jsonwebtoken": "8.5.1" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@types/aws-lambda": "8.10.107", + "@types/jsonwebtoken": "8.5.9", + "jest": "29.3.1", + "typescript": "4.7.4" + }, + "peerDependencies": { + "@redwoodjs/api": "3.2.0" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers-api/src/supabase/__tests__/supabase.test.ts b/packages/auth-providers/supabase/api/src/__tests__/supabase.test.ts similarity index 100% rename from packages/auth-providers-api/src/supabase/__tests__/supabase.test.ts rename to packages/auth-providers/supabase/api/src/__tests__/supabase.test.ts diff --git a/packages/auth-providers-api/src/supabase/decoder.ts b/packages/auth-providers/supabase/api/src/decoder.ts similarity index 100% rename from packages/auth-providers-api/src/supabase/decoder.ts rename to packages/auth-providers/supabase/api/src/decoder.ts diff --git a/packages/auth-providers/supabase/api/src/index.ts b/packages/auth-providers/supabase/api/src/index.ts new file mode 100644 index 000000000000..ead5bdde8676 --- /dev/null +++ b/packages/auth-providers/supabase/api/src/index.ts @@ -0,0 +1 @@ +export { authDecoder } from './decoder' diff --git a/packages/auth-providers/supabase/api/tsconfig.json b/packages/auth-providers/supabase/api/tsconfig.json new file mode 100644 index 000000000000..a925964c5e44 --- /dev/null +++ b/packages/auth-providers/supabase/api/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../auth" }] +} diff --git a/packages/auth-providers/supabase/setup/.babelrc.js b/packages/auth-providers/supabase/setup/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/supabase/setup/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/supabase/setup/README.md b/packages/auth-providers/supabase/setup/README.md new file mode 100644 index 000000000000..661208df586e --- /dev/null +++ b/packages/auth-providers/supabase/setup/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider you can read the auth docs +on the web. + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/supabase/setup/jest.config.js b/packages/auth-providers/supabase/setup/jest.config.js new file mode 100644 index 000000000000..dee127c25474 --- /dev/null +++ b/packages/auth-providers/supabase/setup/jest.config.js @@ -0,0 +1,4 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/supabase/setup/package.json b/packages/auth-providers/supabase/setup/package.json new file mode 100644 index 000000000000..9590e0d45d13 --- /dev/null +++ b/packages/auth-providers/supabase/setup/package.json @@ -0,0 +1,37 @@ +{ + "name": "@redwoodjs/auth-supabase-setup", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/supabase/setup" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src --passWithNoTests", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "@redwoodjs/cli-helpers": "3.2.0", + "core-js": "3.26.1" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@types/yargs": "17.0.13", + "jest": "29.3.1", + "typescript": "4.7.4" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers/supabase/setup/src/index.ts b/packages/auth-providers/supabase/setup/src/index.ts new file mode 100644 index 000000000000..2769cf70833d --- /dev/null +++ b/packages/auth-providers/supabase/setup/src/index.ts @@ -0,0 +1 @@ +export * as setupAuthSupabaseCommand from './setup' diff --git a/packages/auth-providers/supabase/setup/src/setup.ts b/packages/auth-providers/supabase/setup/src/setup.ts new file mode 100644 index 000000000000..84f580ff84a4 --- /dev/null +++ b/packages/auth-providers/supabase/setup/src/setup.ts @@ -0,0 +1,19 @@ +import yargs from 'yargs' + +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' + +export const command = 'supabase' +export const description = 'Generate an auth configuration for Supabase' + +export function builder(yargs: yargs.Argv) { + return standardAuthBuilder(yargs) +} + +export interface Args { + force: boolean +} + +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) +} diff --git a/packages/auth-providers/supabase/setup/src/setupHandler.ts b/packages/auth-providers/supabase/setup/src/setupHandler.ts new file mode 100644 index 000000000000..c1d4795de530 --- /dev/null +++ b/packages/auth-providers/supabase/setup/src/setupHandler.ts @@ -0,0 +1,26 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export const handler = async ({ force: forceArg }: Args) => { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'supabase', + authDecoderImport: `import { authDecoder } from '@redwoodjs/auth-supabase-api@${version}'`, + apiPackages: [`@redwoodjs/auth-providers-api@${version}`], + webPackages: [ + `@redwoodjs/auth-providers-web@${version}`, + '@supabase/supabase-js@1.35.7', + ], + notes: [ + 'You will need to add your Supabase URL (SUPABASE_URL), public API KEY,', + 'and JWT SECRET (SUPABASE_KEY, and SUPABASE_JWT_SECRET) to your .env file.', + 'See: https://supabase.io/docs/library/getting-started#reference', + ], + }) +} diff --git a/packages/auth-providers-setup/src/supabase/templates/api/lib/auth.ts.template b/packages/auth-providers/supabase/setup/src/templates/api/lib/auth.ts.template similarity index 100% rename from packages/auth-providers-setup/src/supabase/templates/api/lib/auth.ts.template rename to packages/auth-providers/supabase/setup/src/templates/api/lib/auth.ts.template diff --git a/packages/auth-providers-setup/src/supabase/templates/web/auth.ts.template b/packages/auth-providers/supabase/setup/src/templates/web/auth.ts.template similarity index 78% rename from packages/auth-providers-setup/src/supabase/templates/web/auth.ts.template rename to packages/auth-providers/supabase/setup/src/templates/web/auth.ts.template index 67eaf850faa4..96afb8bd454f 100644 --- a/packages/auth-providers-setup/src/supabase/templates/web/auth.ts.template +++ b/packages/auth-providers/supabase/setup/src/templates/web/auth.ts.template @@ -1,6 +1,6 @@ import { createClient } from '@supabase/supabase-js' -import { createSupabaseAuth } from '@redwoodjs/auth-providers-web' +import { createSupabaseAuth } from '@redwoodjs/auth-supabase-web' const supabaseClient = createClient( process.env.SUPABASE_URL || '', diff --git a/packages/auth-providers/supabase/setup/tsconfig.json b/packages/auth-providers/supabase/setup/tsconfig.json new file mode 100644 index 000000000000..abb54b70112a --- /dev/null +++ b/packages/auth-providers/supabase/setup/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../cli-helpers" }] +} diff --git a/packages/auth-providers/supabase/web/.babelrc.js b/packages/auth-providers/supabase/web/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/supabase/web/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/supabase/web/README.md b/packages/auth-providers/supabase/web/README.md new file mode 100644 index 000000000000..661208df586e --- /dev/null +++ b/packages/auth-providers/supabase/web/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider you can read the auth docs +on the web. + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/supabase/web/jest.config.js b/packages/auth-providers/supabase/web/jest.config.js new file mode 100644 index 000000000000..e691bb8f6dbd --- /dev/null +++ b/packages/auth-providers/supabase/web/jest.config.js @@ -0,0 +1,5 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testEnvironment: 'jest-environment-jsdom', + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/supabase/web/package.json b/packages/auth-providers/supabase/web/package.json new file mode 100644 index 000000000000..7af3d82d08ef --- /dev/null +++ b/packages/auth-providers/supabase/web/package.json @@ -0,0 +1,41 @@ +{ + "name": "@redwoodjs/auth-supabase-web", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/supabase/web" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "core-js": "3.26.1" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@testing-library/react-hooks": "8.0.1", + "@types/react": "17.0.50", + "jest": "29.3.1", + "react": "17.0.2", + "typescript": "4.7.4" + }, + "peerDependencies": { + "@supabase/supabase-js": "1.35.7" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers-web/src/supabase/__tests__/supabase.test.tsx b/packages/auth-providers/supabase/web/src/__tests__/supabase.test.tsx similarity index 100% rename from packages/auth-providers-web/src/supabase/__tests__/supabase.test.tsx rename to packages/auth-providers/supabase/web/src/__tests__/supabase.test.tsx diff --git a/packages/auth-providers/supabase/web/src/index.ts b/packages/auth-providers/supabase/web/src/index.ts new file mode 100644 index 000000000000..0288173445c0 --- /dev/null +++ b/packages/auth-providers/supabase/web/src/index.ts @@ -0,0 +1 @@ +export { createSupabaseAuth } from './supabase' diff --git a/packages/auth-providers-web/src/supabase/supabase.ts b/packages/auth-providers/supabase/web/src/supabase.ts similarity index 100% rename from packages/auth-providers-web/src/supabase/supabase.ts rename to packages/auth-providers/supabase/web/src/supabase.ts diff --git a/packages/auth-providers/supabase/web/tsconfig.json b/packages/auth-providers/supabase/web/tsconfig.json new file mode 100644 index 000000000000..a925964c5e44 --- /dev/null +++ b/packages/auth-providers/supabase/web/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../auth" }] +} diff --git a/packages/auth-providers/supertokens/api/.babelrc.js b/packages/auth-providers/supertokens/api/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/supertokens/api/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/supertokens/api/README.md b/packages/auth-providers/supertokens/api/README.md new file mode 100644 index 000000000000..d27ea3626dac --- /dev/null +++ b/packages/auth-providers/supertokens/api/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider there's more info in the +[auth docs](https://redwoodjs.com/docs/authentication). + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/supertokens/api/jest.config.js b/packages/auth-providers/supertokens/api/jest.config.js new file mode 100644 index 000000000000..dee127c25474 --- /dev/null +++ b/packages/auth-providers/supertokens/api/jest.config.js @@ -0,0 +1,4 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/supertokens/api/package.json b/packages/auth-providers/supertokens/api/package.json new file mode 100644 index 000000000000..795a4f3b4e14 --- /dev/null +++ b/packages/auth-providers/supertokens/api/package.json @@ -0,0 +1,42 @@ +{ + "name": "@redwoodjs/supertokens-api", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/supertokens/api" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "core-js": "3.26.1", + "jsonwebtoken": "8.5.1", + "jwks-rsa": "2.0.5" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@redwoodjs/api": "3.2.0", + "@types/jsonwebtoken": "8.5.9", + "jest": "29.3.1", + "typescript": "4.7.4" + }, + "peerDependencies": { + "supertokens-node": "12.1.1" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers-api/src/supertokens/__tests__/supertokens.test.ts b/packages/auth-providers/supertokens/api/src/__tests__/supertokens.test.ts similarity index 100% rename from packages/auth-providers-api/src/supertokens/__tests__/supertokens.test.ts rename to packages/auth-providers/supertokens/api/src/__tests__/supertokens.test.ts diff --git a/packages/auth-providers-api/src/supertokens/decoder.ts b/packages/auth-providers/supertokens/api/src/decoder.ts similarity index 100% rename from packages/auth-providers-api/src/supertokens/decoder.ts rename to packages/auth-providers/supertokens/api/src/decoder.ts diff --git a/packages/auth-providers/supertokens/api/src/index.ts b/packages/auth-providers/supertokens/api/src/index.ts new file mode 100644 index 000000000000..ead5bdde8676 --- /dev/null +++ b/packages/auth-providers/supertokens/api/src/index.ts @@ -0,0 +1 @@ +export { authDecoder } from './decoder' diff --git a/packages/auth-providers/supertokens/api/tsconfig.json b/packages/auth-providers/supertokens/api/tsconfig.json new file mode 100644 index 000000000000..bb9ec4a21fd1 --- /dev/null +++ b/packages/auth-providers/supertokens/api/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../api" }] +} diff --git a/packages/auth-providers/supertokens/setup/.babelrc.js b/packages/auth-providers/supertokens/setup/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/supertokens/setup/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/supertokens/setup/README.md b/packages/auth-providers/supertokens/setup/README.md new file mode 100644 index 000000000000..661208df586e --- /dev/null +++ b/packages/auth-providers/supertokens/setup/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider you can read the auth docs +on the web. + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/supertokens/setup/jest.config.js b/packages/auth-providers/supertokens/setup/jest.config.js new file mode 100644 index 000000000000..dee127c25474 --- /dev/null +++ b/packages/auth-providers/supertokens/setup/jest.config.js @@ -0,0 +1,4 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/supertokens/setup/package.json b/packages/auth-providers/supertokens/setup/package.json new file mode 100644 index 000000000000..0aa760f07d05 --- /dev/null +++ b/packages/auth-providers/supertokens/setup/package.json @@ -0,0 +1,37 @@ +{ + "name": "@redwoodjs/supertokens-setup", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/supertokens/setup" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src --passWithNoTests", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "@redwoodjs/cli-helpers": "3.2.0", + "core-js": "3.26.1" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@types/yargs": "17.0.13", + "jest": "29.3.1", + "typescript": "4.7.4" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers/supertokens/setup/src/index.ts b/packages/auth-providers/supertokens/setup/src/index.ts new file mode 100644 index 000000000000..216bc26c9a65 --- /dev/null +++ b/packages/auth-providers/supertokens/setup/src/index.ts @@ -0,0 +1 @@ +export * as setupAuthSupertokensCommand from './setup' diff --git a/packages/auth-providers/supertokens/setup/src/setup.ts b/packages/auth-providers/supertokens/setup/src/setup.ts new file mode 100644 index 000000000000..22a52bc18eef --- /dev/null +++ b/packages/auth-providers/supertokens/setup/src/setup.ts @@ -0,0 +1,19 @@ +import yargs from 'yargs' + +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' + +export const command = 'supertokens' +export const description = 'Generate an auth configuration for SuperTokens' + +export async function builder(yargs: yargs.Argv) { + return standardAuthBuilder(yargs) +} + +export interface Args { + force: boolean +} + +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) +} diff --git a/packages/auth-providers/supertokens/setup/src/setupHandler.ts b/packages/auth-providers/supertokens/setup/src/setupHandler.ts new file mode 100644 index 000000000000..2e941bd9c053 --- /dev/null +++ b/packages/auth-providers/supertokens/setup/src/setupHandler.ts @@ -0,0 +1,27 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('package.json', 'utf-8')) + +export async function handler({ force: forceArg }: Args) { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'supertokens', + authDecoderImport: + "import { authDecoder } from '@redwoodjs/supertokens-api'", + apiPackages: [`@redwoodjs/supertokens-api@${version}`, 'supertokens-node'], + webPackages: [ + `@redwoodjs/supertokens-web@${version}`, + 'supertokens-auth-react', + ], + notes: [ + "We've generated some example recipe implementations, but do feel free", + 'to switch to something else that better fit your needs.', + 'See: https://supertokens.com/docs/guides', + ], + }) +} diff --git a/packages/auth-providers-setup/src/supertokens/templates/api/functions/auth.ts.template b/packages/auth-providers/supertokens/setup/src/templates/api/functions/auth.ts.template similarity index 100% rename from packages/auth-providers-setup/src/supertokens/templates/api/functions/auth.ts.template rename to packages/auth-providers/supertokens/setup/src/templates/api/functions/auth.ts.template diff --git a/packages/auth-providers-setup/src/supertokens/templates/api/lib/auth.ts.template b/packages/auth-providers/supertokens/setup/src/templates/api/lib/auth.ts.template similarity index 100% rename from packages/auth-providers-setup/src/supertokens/templates/api/lib/auth.ts.template rename to packages/auth-providers/supertokens/setup/src/templates/api/lib/auth.ts.template diff --git a/packages/auth-providers-setup/src/supertokens/templates/api/lib/supertokens.ts.template b/packages/auth-providers/supertokens/setup/src/templates/api/lib/supertokens.ts.template similarity index 100% rename from packages/auth-providers-setup/src/supertokens/templates/api/lib/supertokens.ts.template rename to packages/auth-providers/supertokens/setup/src/templates/api/lib/supertokens.ts.template diff --git a/packages/auth-providers-setup/src/supertokens/templates/web/auth.ts.template b/packages/auth-providers/supertokens/setup/src/templates/web/auth.ts.template similarity index 93% rename from packages/auth-providers-setup/src/supertokens/templates/web/auth.ts.template rename to packages/auth-providers/supertokens/setup/src/templates/web/auth.ts.template index ea3cd1c03635..8f6cd4a39bbf 100644 --- a/packages/auth-providers-setup/src/supertokens/templates/web/auth.ts.template +++ b/packages/auth-providers/supertokens/setup/src/templates/web/auth.ts.template @@ -1,4 +1,4 @@ -import { createSuperTokensAuth } from '@redwoodjs/auth-providers-web' +import { createSuperTokensAuth } from '@redwoodjs/supertokens-web' import { isBrowser } from '@redwoodjs/prerender/browserUtils' import SuperTokens from 'supertokens-auth-react' diff --git a/packages/auth-providers/supertokens/setup/tsconfig.json b/packages/auth-providers/supertokens/setup/tsconfig.json new file mode 100644 index 000000000000..abb54b70112a --- /dev/null +++ b/packages/auth-providers/supertokens/setup/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../cli-helpers" }] +} diff --git a/packages/auth-providers/supertokens/web/.babelrc.js b/packages/auth-providers/supertokens/web/.babelrc.js new file mode 100644 index 000000000000..4312886a07e5 --- /dev/null +++ b/packages/auth-providers/supertokens/web/.babelrc.js @@ -0,0 +1 @@ +module.exports = { extends: '../../../../babel.config.js' } diff --git a/packages/auth-providers/supertokens/web/README.md b/packages/auth-providers/supertokens/web/README.md new file mode 100644 index 000000000000..661208df586e --- /dev/null +++ b/packages/auth-providers/supertokens/web/README.md @@ -0,0 +1,141 @@ +# Authentication + +## Contributing + +If you want to contribute a new auth provider integration we recommend you +start by implementing it as a custom auth provider in a Redwood App first. When +that works you can package it up as an npm package and publish it on your own. +You can then create a PR on this repo with support for your new auth provider +in our `yarn rw setup auth` cli command. The easiest option is probably to just +look at one of the existing auth providers in +`packages/cli/src/commands/setup/auth/providers` and the corresponding +templates in `../templates`. + +If you need help setting up a custom auth provider you can read the auth docs +on the web. + +### Contributing to the base auth implementation + +If you want to contribute to our auth implementation, the interface towards +both auth service providers and RW apps we recommend you start looking in +`authFactory.ts` and then continue to `AuthProvider.tsx`. `AuthProvider.tsx` +has most of our implementation together with all the custom hooks it uses. +Another file to be accustomed with is `AuthContext.ts`. The interface in there +has pretty god code comments, and is what will be exposed to RW apps. + +## getCurrentUser + +`getCurrentUser` returns the user information together with +an optional collection of roles used by requireAuth() to check if the user is authenticated or has role-based access. + +Use in conjunction with `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param decoded - The decoded access token containing user info and JWT claims like `sub` +@param { token, SupportedAuthTypes type } - The access token itself as well as the auth provider type +@param { APIGatewayEvent event, Context context } - An object which contains information from the invoker +such as headers and cookies, and the context information about the invocation such as IP Address +``` + +### Examples + +#### Checks if currentUser is authenticated + +This example is the standard use of `getCurrentUser`. + +```js +export const getCurrentUser = async (decoded, { _token, _type }, { _event, _context }) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User details fetched via database query + +```js +export const getCurrentUser = async (decoded) => { + return await db.user.findUnique({ where: { decoded.email } }) +} +``` + +#### User info is decoded from the access token + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded } +} +``` + +#### User info is contained in the decoded token and roles extracted + +```js +export const getCurrentUser = async (decoded) => { + return { ...decoded, roles: parseJWT({ decoded }).roles } +} +``` + +#### User record query by email with namespaced app_metadata roles as Auth0 requires custom JWT claims to be namespaced + +```js +export const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { email: decoded.email } }) + + return { + ...currentUser, + roles: parseJWT({ decoded: decoded, namespace: NAMESPACE }).roles, + } +} +``` + +#### User record query by an identity with app_metadata roles + +```js +const getCurrentUser = async (decoded) => { + const currentUser = await db.user.findUnique({ where: { userIdentity: decoded.sub } }) + return { + ...currentUser, + roles: parseJWT({ decoded: decoded }).roles, + } +} +``` + +#### Cookies and other request information are available in the req parameter, just in case + +```js +const getCurrentUser = async (_decoded, _raw, { event, _context }) => { + const cookies = cookie(event.headers.cookies) + const session = cookies['my.cookie.name'] + const currentUser = await db.sessions.findUnique({ where: { id: session } }) + return currentUser +} +``` + + +## requireAuth + + Use `requireAuth` in your services to check that a user is logged in, whether or not they are assigned a role, and optionally raise an error if they're not. + +```js +@param {string=} roles - An optional role or list of roles +@param {string[]=} roles - An optional list of roles + +@returns {boolean} - If the currentUser is authenticated (and assigned one of the given roles) + +@throws {AuthenticationError} - If the currentUser is not authenticated +@throws {ForbiddenError} If the currentUser is not allowed due to role permissions +``` + +### Examples + +#### Checks if currentUser is authenticated + +```js +requireAuth() +``` + +#### Checks if currentUser is authenticated and assigned one of the given roles + +```js + requireAuth({ role: 'admin' }) + requireAuth({ role: ['editor', 'author'] }) + requireAuth({ role: ['publisher'] }) +``` diff --git a/packages/auth-providers/supertokens/web/jest.config.js b/packages/auth-providers/supertokens/web/jest.config.js new file mode 100644 index 000000000000..e691bb8f6dbd --- /dev/null +++ b/packages/auth-providers/supertokens/web/jest.config.js @@ -0,0 +1,5 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + testEnvironment: 'jest-environment-jsdom', + testPathIgnorePatterns: ['fixtures', 'dist'], +} diff --git a/packages/auth-providers/supertokens/web/package.json b/packages/auth-providers/supertokens/web/package.json new file mode 100644 index 000000000000..8608f561a5ee --- /dev/null +++ b/packages/auth-providers/supertokens/web/package.json @@ -0,0 +1,42 @@ +{ + "name": "@redwoodjs/supertokens-web", + "version": "3.2.0", + "repository": { + "type": "git", + "url": "https://github.com/redwoodjs/redwood.git", + "directory": "packages/auth-providers/supertokens/web" + }, + "license": "MIT", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "yarn build:js && yarn build:types", + "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\" --copy-files --no-copy-ignored", + "build:types": "tsc --build --verbose", + "build:watch": "nodemon --watch src --ext \"js,ts,tsx,template\" --ignore dist --exec \"yarn build\"", + "prepublishOnly": "NODE_ENV=production yarn build", + "test": "jest src", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@babel/runtime-corejs3": "7.20.6", + "@redwoodjs/auth": "3.2.0", + "core-js": "3.26.1" + }, + "devDependencies": { + "@babel/cli": "7.19.3", + "@babel/core": "7.20.5", + "@testing-library/react-hooks": "8.0.1", + "@types/react": "17.0.50", + "jest": "29.3.1", + "react": "17.0.2", + "typescript": "4.7.4" + }, + "peerDependencies": { + "supertokens-auth-react": "0.26.5" + }, + "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" +} diff --git a/packages/auth-providers-web/src/supertokens/__tests__/supertokens.test.tsx b/packages/auth-providers/supertokens/web/src/__tests__/supertokens.test.tsx similarity index 100% rename from packages/auth-providers-web/src/supertokens/__tests__/supertokens.test.tsx rename to packages/auth-providers/supertokens/web/src/__tests__/supertokens.test.tsx diff --git a/packages/auth-providers/supertokens/web/src/index.ts b/packages/auth-providers/supertokens/web/src/index.ts new file mode 100644 index 000000000000..93e2d5d5ef69 --- /dev/null +++ b/packages/auth-providers/supertokens/web/src/index.ts @@ -0,0 +1 @@ +export { createSuperTokensAuth } from './supertokens' diff --git a/packages/auth-providers-web/src/supertokens/supertokens.ts b/packages/auth-providers/supertokens/web/src/supertokens.ts similarity index 100% rename from packages/auth-providers-web/src/supertokens/supertokens.ts rename to packages/auth-providers/supertokens/web/src/supertokens.ts diff --git a/packages/auth-providers/supertokens/web/tsconfig.json b/packages/auth-providers/supertokens/web/tsconfig.json new file mode 100644 index 000000000000..a925964c5e44 --- /dev/null +++ b/packages/auth-providers/supertokens/web/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../../tsconfig.compilerOption.json", + "compilerOptions": { + "strict": true, + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist" + }, + "include": ["src"], + "references": [{ "path": "../../../auth" }] +} diff --git a/packages/auth/package.json b/packages/auth/package.json index d0489ec0dfb1..a4d483dd025a 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -23,33 +23,17 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.20.6", - "core-js": "3.26.1" + "core-js": "3.26.1", + "react": "17.0.2" }, "devDependencies": { - "@auth0/auth0-spa-js": "1.22.5", - "@azure/msal-browser": "2.30.0", "@babel/cli": "7.19.3", "@babel/core": "7.20.5", - "@clerk/clerk-js": "3.17.0", - "@clerk/clerk-react": "3.5.1", - "@clerk/clerk-sdk-node": "3.9.2", - "@clerk/types": "2.21.0", - "@nhost/hasura-auth-js": "1.4.1", - "@nhost/nhost-js": "1.4.10", - "@okta/okta-auth-js": "6.9.0", - "@simplewebauthn/browser": "6.2.1", - "@simplewebauthn/typescript-types": "6.2.1", - "@supabase/supabase-js": "1.35.7", - "@types/netlify-identity-widget": "1.9.3", - "@types/react": "17.0.50", - "firebase": "9.10.0", - "firebase-admin": "10.3.0", - "gotrue-js": "0.9.29", + "@testing-library/react": "12.1.5", + "@testing-library/react-hooks": "8.0.1", + "@testing-library/jest-dom": "5.16.5", + "msw": "0.49.1", "jest": "29.3.1", - "magic-sdk": "9.1.1", - "netlify-identity-widget": "1.9.2", - "react": "17.0.2", - "supertokens-auth-react": "0.26.5", "typescript": "4.7.4" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/packages/cli-helpers/src/auth/authTasks.ts b/packages/cli-helpers/src/auth/authTasks.ts index 5df7ba5e06aa..4c3835538c24 100644 --- a/packages/cli-helpers/src/auth/authTasks.ts +++ b/packages/cli-helpers/src/auth/authTasks.ts @@ -353,27 +353,19 @@ export const addAuthConfigToGqlApi = ( }, }) -export const addWebPackages = (webPackages: string[], rwVersion: string) => ({ +export const addWebPackages = (webPackages: string[]) => ({ title: 'Adding required web packages...', task: async () => { - const args = [ - 'workspace', - 'web', - 'add', - ...webPackages, - `@redwoodjs/auth@${rwVersion}`, - ] - await execa('yarn', args) + await execa('yarn', ['workspace', 'web', 'add', ...webPackages]) }, }) -export const addApiPackages = (apiPackages: string[]) => - apiPackages.length > 0 && { - title: 'Adding required api packages...', - task: async () => { - await execa('yarn', ['workspace', 'api', 'add', ...apiPackages]) - }, - } +export const addApiPackages = (apiPackages: string[]) => ({ + title: 'Adding required api packages...', + task: async () => { + await execa('yarn', ['workspace', 'api', 'add', ...apiPackages]) + }, +}) export const installPackages = { title: 'Installing packages...', diff --git a/packages/cli-helpers/src/auth/setupHelpers.ts b/packages/cli-helpers/src/auth/setupHelpers.ts index 2b2ac0b7d04e..9b6d9bcfe161 100644 --- a/packages/cli-helpers/src/auth/setupHelpers.ts +++ b/packages/cli-helpers/src/auth/setupHelpers.ts @@ -68,7 +68,6 @@ export const standardAuthBuilder = (yargs: yargs.Argv) => { interface Args { basedir: string - rwVersion: string forceArg: boolean provider: string authDecoderImport?: string @@ -88,7 +87,6 @@ function truthy(value: T): value is Truthy { export const standardAuthHandler = async ({ basedir, - rwVersion, forceArg, provider, authDecoderImport, @@ -105,7 +103,7 @@ export const standardAuthHandler = async ({ generateAuthApiFiles(basedir, provider, force, webAuthn), addAuthConfigToWeb(basedir, provider, webAuthn), addAuthConfigToGqlApi(authDecoderImport), - addWebPackages(webPackages, rwVersion), + addWebPackages(webPackages), addApiPackages(apiPackages), installPackages, extraTask, @@ -113,8 +111,8 @@ export const standardAuthHandler = async ({ title: 'One more thing...', task: () => { // Can't console.log the notes here because of - // https://github.com/cenk1cenk2/listr2/issues/296 - // So we do it after the tasks have all finished instead + // https://github.com/cenk1cenk2/listr2/issues/296. + // So we do it after the tasks have all finished instead. }, }, ].filter(truthy), diff --git a/yarn.lock b/yarn.lock index 73a7306c0f73..7a6cd28c2343 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6472,24 +6472,6 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth-auth0-api@workspace:packages/auth-providers/auth0/api": - version: 0.0.0-use.local - resolution: "@redwoodjs/auth-auth0-api@workspace:packages/auth-providers/auth0/api" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@types/jsonwebtoken": 8.5.9 - core-js: 3.26.1 - jest: 29.3.1 - jsonwebtoken: 8.5.1 - jwks-rsa: 2.0.5 - typescript: 4.7.4 - peerDependencies: - "@redwoodjs/api": 3.2.0 - languageName: unknown - linkType: soft - "@redwoodjs/auth-auth0-setup@workspace:packages/auth-providers/auth0/setup": version: 0.0.0-use.local resolution: "@redwoodjs/auth-auth0-setup@workspace:packages/auth-providers/auth0/setup" @@ -6505,25 +6487,6 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth-auth0-web@workspace:packages/auth-providers/auth0/web": - version: 0.0.0-use.local - resolution: "@redwoodjs/auth-auth0-web@workspace:packages/auth-providers/auth0/web" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@testing-library/react-hooks": 8.0.1 - "@types/react": 17.0.50 - core-js: 3.26.1 - jest: 29.3.1 - react: 17.0.2 - typescript: 4.7.4 - peerDependencies: - "@auth0/auth0-spa-js": 1.22.5 - "@redwoodjs/auth": 3.2.0 - languageName: unknown - linkType: soft - "@redwoodjs/auth-azure-active-directory-api@workspace:packages/auth-providers/azureActiveDirectory/api": version: 0.0.0-use.local resolution: "@redwoodjs/auth-azure-active-directory-api@workspace:packages/auth-providers/azureActiveDirectory/api" @@ -6577,6 +6540,28 @@ __metadata: languageName: unknown linkType: soft +"@redwoodjs/auth-clerk-web@workspace:packages/auth-providers/clerk/web": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-clerk-web@workspace:packages/auth-providers/clerk/web" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@clerk/types": 2.21.0 + "@redwoodjs/auth": 3.2.0 + "@testing-library/react-hooks": 8.0.1 + "@types/react": 17.0.50 + core-js: 3.26.1 + jest: 29.3.1 + react: 17.0.2 + typescript: 4.7.4 + peerDependencies: + "@clerk/clerk-react": 3.5.1 + "@redwoodjs/router": 3.2.0 + "@redwoodjs/web": 3.2.0 + languageName: unknown + linkType: soft + "@redwoodjs/auth-custom-setup@workspace:packages/auth-providers/custom/setup": version: 0.0.0-use.local resolution: "@redwoodjs/auth-custom-setup@workspace:packages/auth-providers/custom/setup" @@ -6692,7 +6677,7 @@ __metadata: react: 17.0.2 typescript: 4.7.4 peerDependencies: - "@redwoodjs/auth": 3.2.0 + "@redwoods/auth": 3.2.0 netlify-identity-widget: 1.9.2 languageName: unknown linkType: soft @@ -6701,58 +6686,31 @@ __metadata: version: 0.0.0-use.local resolution: "@redwoodjs/auth-providers-api@workspace:packages/auth-providers-api" dependencies: - "@auth0/auth0-spa-js": 1.22.5 - "@azure/msal-browser": 2.30.0 "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@clerk/clerk-js": 3.17.0 - "@clerk/clerk-react": 3.5.1 - "@clerk/clerk-sdk-node": 3.9.2 - "@clerk/types": 2.21.0 "@magic-sdk/admin": 1.4.1 "@nhost/hasura-auth-js": 1.4.1 "@nhost/nhost-js": 1.4.10 "@okta/jwt-verifier": 2.6.0 "@okta/okta-auth-js": 6.9.0 - "@redwoodjs/auth": 3.2.0 - "@redwoodjs/cli-helpers": 3.2.0 - "@simplewebauthn/browser": 6.2.1 - "@simplewebauthn/typescript-types": 6.2.1 - "@supabase/supabase-js": 1.35.7 + "@redwoodjs/api": 3.2.0 + "@types/aws-lambda": 8.10.107 "@types/jsonwebtoken": 8.5.9 - "@types/netlify-identity-widget": 1.9.3 - "@types/react": 17.0.50 - "@types/uuid": 8.3.4 core-js: 3.26.1 - firebase: 9.10.0 - firebase-admin: 10.3.0 gotrue-js: 0.9.29 jest: 29.3.1 jsonwebtoken: 8.5.1 magic-sdk: 9.1.1 - netlify-identity-widget: 1.9.2 - react: 17.0.2 - supertokens-auth-react: 0.26.5 typescript: 4.7.4 - uuid: 9.0.0 peerDependencies: - "@clerk/clerk-react": 3.5.1 - "@clerk/clerk-sdk-node": 3.9.2 "@magic-sdk/admin": 1.4.1 "@okta/jwt-verifier": 2.6.0 - firebase-admin: 10.3.0 peerDependenciesMeta: - "@clerk/clerk-react": - optional: true - "@clerk/clerk-sdk-node": - optional: true "@magic-sdk/admin": optional: true "@okta/jwt-verifier": optional: true - firebase-admin: - optional: true languageName: unknown linkType: soft @@ -6763,13 +6721,10 @@ __metadata: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/auth": 3.2.0 "@redwoodjs/cli-helpers": 3.2.0 - "@types/react": 17.0.50 - "@types/secure-random-password": 0.2.1 + "@types/yargs": 17.0.13 core-js: 3.26.1 jest: 29.3.1 - secure-random-password: 0.2.3 typescript: 4.7.4 languageName: unknown linkType: soft @@ -6778,53 +6733,169 @@ __metadata: version: 0.0.0-use.local resolution: "@redwoodjs/auth-providers-web@workspace:packages/auth-providers-web" dependencies: - "@auth0/auth0-spa-js": 1.22.5 - "@azure/msal-browser": 2.30.0 "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@clerk/clerk-js": 3.17.0 - "@clerk/clerk-react": 3.5.1 - "@clerk/clerk-sdk-node": 3.9.2 - "@clerk/types": 2.21.0 "@nhost/hasura-auth-js": 1.4.1 "@nhost/nhost-js": 1.4.10 "@okta/okta-auth-js": 6.9.0 "@redwoodjs/auth": 3.2.0 - "@simplewebauthn/browser": 6.2.1 - "@simplewebauthn/typescript-types": 6.2.1 - "@supabase/supabase-js": 1.35.7 - "@types/netlify-identity-widget": 1.9.3 "@types/react": 17.0.50 - "@types/uuid": 8.3.4 core-js: 3.26.1 - firebase: 9.10.0 - firebase-admin: 10.3.0 gotrue-js: 0.9.29 jest: 29.3.1 magic-sdk: 9.1.1 - netlify-identity-widget: 1.9.2 react: 17.0.2 - supertokens-auth-react: 0.26.5 typescript: 4.7.4 - uuid: 9.0.0 peerDependencies: - "@clerk/clerk-react": 3.5.1 - "@clerk/clerk-sdk-node": 3.9.2 "@magic-sdk/admin": 1.4.1 "@okta/jwt-verifier": 2.6.0 - firebase-admin: 10.3.0 peerDependenciesMeta: - "@clerk/clerk-react": - optional: true - "@clerk/clerk-sdk-node": - optional: true "@magic-sdk/admin": optional: true "@okta/jwt-verifier": optional: true - firebase-admin: - optional: true + languageName: unknown + linkType: soft + +"@redwoodjs/auth-supabase-api@workspace:packages/auth-providers/supabase/api": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-supabase-api@workspace:packages/auth-providers/supabase/api" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@types/aws-lambda": 8.10.107 + "@types/jsonwebtoken": 8.5.9 + core-js: 3.26.1 + jest: 29.3.1 + jsonwebtoken: 8.5.1 + typescript: 4.7.4 + peerDependencies: + "@redwoodjs/api": 3.2.0 + languageName: unknown + linkType: soft + +"@redwoodjs/auth-supabase-setup@workspace:packages/auth-providers/supabase/setup": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-supabase-setup@workspace:packages/auth-providers/supabase/setup" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/cli-helpers": 3.2.0 + "@types/yargs": 17.0.13 + core-js: 3.26.1 + jest: 29.3.1 + typescript: 4.7.4 + languageName: unknown + linkType: soft + +"@redwoodjs/auth-supabase-web@workspace:packages/auth-providers/supabase/web": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-supabase-web@workspace:packages/auth-providers/supabase/web" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@testing-library/react-hooks": 8.0.1 + "@types/react": 17.0.50 + core-js: 3.26.1 + jest: 29.3.1 + react: 17.0.2 + typescript: 4.7.4 + peerDependencies: + "@supabase/supabase-js": 1.35.7 + languageName: unknown + linkType: soft + +"@redwoodjs/auth-supertokens-api@workspace:packages/auth-providers/supertokens/api": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-supertokens-api@workspace:packages/auth-providers/supertokens/api" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@types/jsonwebtoken": 8.5.9 + core-js: 3.26.1 + jest: 29.3.1 + jsonwebtoken: 8.5.1 + jwks-rsa: 2.0.5 + typescript: 4.7.4 + peerDependencies: + "@redwoodjs/api": 3.2.0 + supertokens-node: 12.1.1 + languageName: unknown + linkType: soft + +"@redwoodjs/auth-supertokens-setup@workspace:packages/auth-providers/supertokens/setup": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-supertokens-setup@workspace:packages/auth-providers/supertokens/setup" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/cli-helpers": 3.2.0 + "@types/yargs": 17.0.13 + core-js: 3.26.1 + jest: 29.3.1 + typescript: 4.7.4 + languageName: unknown + linkType: soft + +"@redwoodjs/auth-supertokens-web@workspace:packages/auth-providers/supertokens/web": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-supertokens-web@workspace:packages/auth-providers/supertokens/web" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/auth": 3.2.0 + "@testing-library/react-hooks": 8.0.1 + "@types/react": 17.0.50 + core-js: 3.26.1 + jest: 29.3.1 + react: 17.0.2 + typescript: 4.7.4 + peerDependencies: + supertokens-auth-react: 0.26.5 + languageName: unknown + linkType: soft + +"@redwoodjs/auth0-api@workspace:packages/auth-providers/auth0/api": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth0-api@workspace:packages/auth-providers/auth0/api" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/api": 3.2.0 + "@types/jsonwebtoken": 8.5.9 + core-js: 3.26.1 + jest: 29.3.1 + jsonwebtoken: 8.5.1 + jwks-rsa: 2.0.5 + typescript: 4.7.4 + languageName: unknown + linkType: soft + +"@redwoodjs/auth0-web@workspace:packages/auth-providers/auth0/web": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth0-web@workspace:packages/auth-providers/auth0/web" + dependencies: + "@auth0/auth0-spa-js": 1.22.5 + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/auth": 3.2.0 + "@testing-library/react-hooks": 8.0.1 + "@types/react": 17.0.50 + core-js: 3.26.1 + jest: 29.3.1 + react: 17.0.2 + typescript: 4.7.4 + peerDependencies: + "@auth0/auth0-spa-js": 1.22.5 languageName: unknown linkType: soft @@ -6862,6 +6933,36 @@ __metadata: languageName: unknown linkType: soft +"@redwoodjs/clerk-api@workspace:packages/auth-providers/clerk/api": + version: 0.0.0-use.local + resolution: "@redwoodjs/clerk-api@workspace:packages/auth-providers/clerk/api" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@clerk/clerk-sdk-node": 3.9.2 + "@types/aws-lambda": 8.10.107 + core-js: 3.26.1 + jest: 29.3.1 + typescript: 4.7.4 + languageName: unknown + linkType: soft + +"@redwoodjs/clerk-setup@workspace:packages/auth-providers/clerk/setup": + version: 0.0.0-use.local + resolution: "@redwoodjs/clerk-setup@workspace:packages/auth-providers/clerk/setup" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/cli-helpers": 3.2.0 + "@types/yargs": 17.0.13 + core-js: 3.26.1 + jest: 29.3.1 + typescript: 4.7.4 + languageName: unknown + linkType: soft + "@redwoodjs/cli-helpers@3.2.0, @redwoodjs/cli-helpers@workspace:packages/cli-helpers": version: 0.0.0-use.local resolution: "@redwoodjs/cli-helpers@workspace:packages/cli-helpers" @@ -7042,6 +7143,70 @@ __metadata: languageName: unknown linkType: soft +"@redwoodjs/dbauth-api@workspace:packages/auth-providers/dbAuth/api": + version: 0.0.0-use.local + resolution: "@redwoodjs/dbauth-api@workspace:packages/auth-providers/dbAuth/api" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/api": 3.2.0 + "@types/crypto-js": 4.1.1 + "@types/md5": 2.3.2 + "@types/uuid": 8.3.4 + base64url: 3.0.1 + core-js: 3.26.1 + crypto-js: 4.1.1 + jest: 29.3.1 + md5: 2.3.0 + typescript: 4.7.4 + uuid: 9.0.0 + peerDependencies: + "@redwoodjs/api": 3.2.0 + languageName: unknown + linkType: soft + +"@redwoodjs/dbauth-setup@workspace:packages/auth-providers/dbAuth/setup": + version: 0.0.0-use.local + resolution: "@redwoodjs/dbauth-setup@workspace:packages/auth-providers/dbAuth/setup" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/cli-helpers": 3.2.0 + "@simplewebauthn/browser": 6.2.1 + "@simplewebauthn/typescript-types": 6.2.1 + "@types/secure-random-password": 0.2.1 + "@types/yargs": 17.0.13 + core-js: 3.26.1 + jest: 29.3.1 + prompts: 2.4.2 + secure-random-password: 0.2.3 + terminal-link: 2.1.1 + typescript: 4.7.4 + peerDependencies: + "@redwoodjs/auth": 3.2.0 + languageName: unknown + linkType: soft + +"@redwoodjs/dbauth-web@workspace:packages/auth-providers/dbAuth/web": + version: 0.0.0-use.local + resolution: "@redwoodjs/dbauth-web@workspace:packages/auth-providers/dbAuth/web" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@testing-library/react-hooks": 8.0.1 + "@types/react": 17.0.50 + core-js: 3.26.1 + jest: 29.3.1 + react: 17.0.2 + typescript: 4.7.4 + peerDependencies: + "@redwoodjs/auth": 3.2.0 + languageName: unknown + linkType: soft + "@redwoodjs/eslint-config@3.2.0, @redwoodjs/eslint-config@workspace:packages/eslint-config": version: 0.0.0-use.local resolution: "@redwoodjs/eslint-config@workspace:packages/eslint-config" @@ -31835,6 +32000,12 @@ __metadata: languageName: node linkType: hard +"webAuthn-0dbb62@workspace:packages/auth-providers/dbAuth/web/webAuthn": + version: 0.0.0-use.local + resolution: "webAuthn-0dbb62@workspace:packages/auth-providers/dbAuth/web/webAuthn" + languageName: unknown + linkType: soft + "webcrypto-core@npm:^1.7.4": version: 1.7.5 resolution: "webcrypto-core@npm:1.7.5" From 542a7d2968217edbe44cbc90f0ac0821e7a3ad32 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 17:27:17 -0500 Subject: [PATCH 02/25] fix typo in deps --- .../auth-providers/netlify/web/package.json | 2 +- packages/auth/package.json | 4 +- yarn.lock | 911 ++---------------- 3 files changed, 109 insertions(+), 808 deletions(-) diff --git a/packages/auth-providers/netlify/web/package.json b/packages/auth-providers/netlify/web/package.json index 582386aec9fa..ef1a1966166c 100644 --- a/packages/auth-providers/netlify/web/package.json +++ b/packages/auth-providers/netlify/web/package.json @@ -23,7 +23,7 @@ }, "dependencies": { "@babel/runtime-corejs3": "7.20.6", - "@redwoods/auth": "3.2.0", + "@redwoodjs/auth": "3.2.0", "core-js": "3.26.1" }, "devDependencies": { diff --git a/packages/auth/package.json b/packages/auth/package.json index a4d483dd025a..10df38f72c48 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -29,11 +29,11 @@ "devDependencies": { "@babel/cli": "7.19.3", "@babel/core": "7.20.5", + "@testing-library/jest-dom": "5.16.5", "@testing-library/react": "12.1.5", "@testing-library/react-hooks": "8.0.1", - "@testing-library/jest-dom": "5.16.5", - "msw": "0.49.1", "jest": "29.3.1", + "msw": "0.49.1", "typescript": "4.7.4" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/yarn.lock b/yarn.lock index 7a6cd28c2343..0ad7a5c0dd2e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1008,7 +1008,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.12.13, @babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" dependencies: @@ -1753,7 +1753,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.0, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.0, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": version: 7.18.9 resolution: "@babel/runtime@npm:7.18.9" dependencies: @@ -1828,28 +1828,6 @@ __metadata: languageName: node linkType: hard -"@clerk/clerk-js@npm:3.17.0": - version: 3.17.0 - resolution: "@clerk/clerk-js@npm:3.17.0" - dependencies: - "@clerk/types": ^2.21.0 - "@emotion/cache": ^11.7.1 - "@emotion/react": ^11.9.0 - "@popperjs/core": ^2.4.4 - browser-tabs-lock: ^1.2.15 - classnames: ^2.3.1 - core-js: ^3.18.3 - deepmerge: ^4.2.2 - js-cookie: ^2.2.1 - qs: ^6.9.4 - react: 17.0.2 - react-dom: 17.0.2 - react-popper: ^2.2.3 - regenerator-runtime: ^0.13.7 - checksum: 0dc49d863d31154cde1818a992aaff72437081a442b911c0b116fdb147eee23cdb802a7808447afe7c4efb5aa1ebf2254a3df83bbe44977c05711eb8f8eeba97 - languageName: node - linkType: hard - "@clerk/clerk-react@npm:3.5.1": version: 3.5.1 resolution: "@clerk/clerk-react@npm:3.5.1" @@ -1953,119 +1931,6 @@ __metadata: languageName: node linkType: hard -"@emotion/babel-plugin@npm:^11.7.1": - version: 11.9.2 - resolution: "@emotion/babel-plugin@npm:11.9.2" - dependencies: - "@babel/helper-module-imports": ^7.12.13 - "@babel/plugin-syntax-jsx": ^7.12.13 - "@babel/runtime": ^7.13.10 - "@emotion/hash": ^0.8.0 - "@emotion/memoize": ^0.7.5 - "@emotion/serialize": ^1.0.2 - babel-plugin-macros: ^2.6.1 - convert-source-map: ^1.5.0 - escape-string-regexp: ^4.0.0 - find-root: ^1.1.0 - source-map: ^0.5.7 - stylis: 4.0.13 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 337d683a657f14fd9f30a50561794e9b7b986c4dfa3de4747defb38f7f352eedae56bf73b1ff6e315f05e938b7e6c11e100c3a1485722d9bcdc4018f32b9b9a1 - languageName: node - linkType: hard - -"@emotion/cache@npm:^11.4.0, @emotion/cache@npm:^11.7.1, @emotion/cache@npm:^11.9.3": - version: 11.9.3 - resolution: "@emotion/cache@npm:11.9.3" - dependencies: - "@emotion/memoize": ^0.7.4 - "@emotion/sheet": ^1.1.1 - "@emotion/utils": ^1.0.0 - "@emotion/weak-memoize": ^0.2.5 - stylis: 4.0.13 - checksum: 8592bc55bfe331ce8bd1bc4900a0fec801dc916d191400b8a4b10551ca37b05d3a21aa53cddd23929469f9e5361ef0591b03b6963da66cfe5d282df82e26e0a6 - languageName: node - linkType: hard - -"@emotion/hash@npm:^0.8.0": - version: 0.8.0 - resolution: "@emotion/hash@npm:0.8.0" - checksum: 706303d35d416217cd7eb0d36dbda4627bb8bdf4a32ea387e8dd99be11b8e0a998e10af21216e8a5fade518ad955ff06aa8890f20e694ce3a038ae7fc1000556 - languageName: node - linkType: hard - -"@emotion/memoize@npm:^0.7.4, @emotion/memoize@npm:^0.7.5": - version: 0.7.5 - resolution: "@emotion/memoize@npm:0.7.5" - checksum: 28d061ec9fb9b8c495d58b4e2dcc62207d75d4e8d8f4e6a0b42342d6e7c649d41461e807363d1a0a2c33d2235f6ee59dd6394fbec88b7da65e3d5852fc34387e - languageName: node - linkType: hard - -"@emotion/react@npm:^11.1.1, @emotion/react@npm:^11.4.1, @emotion/react@npm:^11.9.0": - version: 11.9.3 - resolution: "@emotion/react@npm:11.9.3" - dependencies: - "@babel/runtime": ^7.13.10 - "@emotion/babel-plugin": ^11.7.1 - "@emotion/cache": ^11.9.3 - "@emotion/serialize": ^1.0.4 - "@emotion/utils": ^1.1.0 - "@emotion/weak-memoize": ^0.2.5 - hoist-non-react-statics: ^3.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - react: ">=16.8.0" - peerDependenciesMeta: - "@babel/core": - optional: true - "@types/react": - optional: true - checksum: f32dbae3110d4c391d6ec51d8c3d86235303d858c8ebf1e90b3d35bcadeb73c0f4557e73ba824e9dbf7f269d0413bc2877e3f4bc2e2b1157b08fbb10b51e18eb - languageName: node - linkType: hard - -"@emotion/serialize@npm:^1.0.2, @emotion/serialize@npm:^1.0.4": - version: 1.0.4 - resolution: "@emotion/serialize@npm:1.0.4" - dependencies: - "@emotion/hash": ^0.8.0 - "@emotion/memoize": ^0.7.4 - "@emotion/unitless": ^0.7.5 - "@emotion/utils": ^1.0.0 - csstype: ^3.0.2 - checksum: ad2d5aba32177ae305918ccebd1e7a8d1d2886dc2083d9a031853169f9713012aee998ddd8a3d62d63eade1cfa4c077de5b260ed664a77583428d3df65dd193a - languageName: node - linkType: hard - -"@emotion/sheet@npm:^1.1.1": - version: 1.1.1 - resolution: "@emotion/sheet@npm:1.1.1" - checksum: be65c618965123b9012eb9535e256a6ba172bd67389f91de8a38dd4db00bed2534e8f5a2b22e2ab2fabb41946259bedc1c18c09acd24021490484aeed9bb1f90 - languageName: node - linkType: hard - -"@emotion/unitless@npm:^0.7.5": - version: 0.7.5 - resolution: "@emotion/unitless@npm:0.7.5" - checksum: 4d0d94f53cb97b4481bbfa394953e1899a0b877644642ba9dd7247c27eb8c48e14e22aeb11411d7d9874685ad85dd5fb5b50eb78c6d8840eb56a84b92dcef2f4 - languageName: node - linkType: hard - -"@emotion/utils@npm:^1.0.0, @emotion/utils@npm:^1.1.0": - version: 1.1.0 - resolution: "@emotion/utils@npm:1.1.0" - checksum: 4659bb4c447fa8c5303fae5cae829c22ce29ba0d9e0a8fb1f3f33b8bfd9304a435af327abccbf133040eeb1771a572fad3e68decd267e26459b8ea6ea1f2ba68 - languageName: node - linkType: hard - -"@emotion/weak-memoize@npm:^0.2.5": - version: 0.2.5 - resolution: "@emotion/weak-memoize@npm:0.2.5" - checksum: cabfaaecabbb407d323098afc0bb2dd2ec9aaea0672f8f2c54b84b99d5f8cc680356cf166583fd5593330ceef29f2c26554c2c65dff06c0a8f5f8c7da69d89f1 - languageName: node - linkType: hard - "@envelop/core@npm:^2.5.0": version: 2.5.0 resolution: "@envelop/core@npm:2.5.0" @@ -6046,13 +5911,6 @@ __metadata: languageName: node linkType: hard -"@popperjs/core@npm:^2.4.4": - version: 2.11.2 - resolution: "@popperjs/core@npm:2.11.2" - checksum: b06f65fcef9dbfe7487fd53e38f12684267e91c8bc667a6c9621c207f42ee97d48059039ee8dae0327df509234b6f09bf5b940b34b71ee453d307f53d84e99b2 - languageName: node - linkType: hard - "@prisma/client@npm:4.7.0": version: 4.7.0 resolution: "@prisma/client@npm:4.7.0" @@ -6487,59 +6345,6 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth-azure-active-directory-api@workspace:packages/auth-providers/azureActiveDirectory/api": - version: 0.0.0-use.local - resolution: "@redwoodjs/auth-azure-active-directory-api@workspace:packages/auth-providers/azureActiveDirectory/api" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@types/jsonwebtoken": 8.5.9 - core-js: 3.26.1 - jest: 29.3.1 - jsonwebtoken: 8.5.1 - typescript: 4.7.4 - peerDependencies: - "@redwoodjs/api": 3.2.0 - languageName: unknown - linkType: soft - -"@redwoodjs/auth-azure-active-directory-setup@workspace:packages/auth-providers/azureActiveDirectory/setup": - version: 0.0.0-use.local - resolution: "@redwoodjs/auth-azure-active-directory-setup@workspace:packages/auth-providers/azureActiveDirectory/setup" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/cli-helpers": 3.2.0 - "@types/yargs": 17.0.13 - core-js: 3.26.1 - jest: 29.3.1 - typescript: 4.7.4 - languageName: unknown - linkType: soft - -"@redwoodjs/auth-azure-active-directory-web@workspace:packages/auth-providers/azureActiveDirectory/web": - version: 0.0.0-use.local - resolution: "@redwoodjs/auth-azure-active-directory-web@workspace:packages/auth-providers/azureActiveDirectory/web" - dependencies: - "@azure/msal-browser": 2.30.0 - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@testing-library/react-hooks": 8.0.1 - "@types/netlify-identity-widget": 1.9.3 - "@types/react": 17.0.50 - core-js: 3.26.1 - jest: 29.3.1 - react: 17.0.2 - typescript: 4.7.4 - peerDependencies: - "@azure/msal-browser": 2.30.0 - "@redwoodjs/auth": 3.2.0 - languageName: unknown - linkType: soft - "@redwoodjs/auth-clerk-web@workspace:packages/auth-providers/clerk/web": version: 0.0.0-use.local resolution: "@redwoodjs/auth-clerk-web@workspace:packages/auth-providers/clerk/web" @@ -6547,6 +6352,7 @@ __metadata: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@clerk/clerk-react": 3.5.1 "@clerk/types": 2.21.0 "@redwoodjs/auth": 3.2.0 "@testing-library/react-hooks": 8.0.1 @@ -6557,8 +6363,6 @@ __metadata: typescript: 4.7.4 peerDependencies: "@clerk/clerk-react": 3.5.1 - "@redwoodjs/router": 3.2.0 - "@redwoodjs/web": 3.2.0 languageName: unknown linkType: soft @@ -6584,13 +6388,12 @@ __metadata: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/api": 3.2.0 "@types/aws-lambda": 8.10.107 core-js: 3.26.1 firebase-admin: 10.3.0 jest: 29.3.1 typescript: 4.7.4 - peerDependencies: - "@redwoodjs/api": 3.2.0 languageName: unknown linkType: soft @@ -6616,6 +6419,7 @@ __metadata: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/auth": 3.2.0 "@testing-library/react-hooks": 8.0.1 "@types/react": 17.0.50 core-js: 3.26.1 @@ -6624,7 +6428,6 @@ __metadata: react: 17.0.2 typescript: 4.7.4 peerDependencies: - "@redwoodjs/auth": 3.2.0 firebase: 9.10.0 languageName: unknown linkType: soft @@ -6636,14 +6439,13 @@ __metadata: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/api": 3.2.0 "@types/aws-lambda": 8.10.107 "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 jest: 29.3.1 jsonwebtoken: 8.5.1 typescript: 4.7.4 - peerDependencies: - "@redwoodjs/api": 3.2.0 languageName: unknown linkType: soft @@ -6669,6 +6471,7 @@ __metadata: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/auth": 3.2.0 "@testing-library/react-hooks": 8.0.1 "@types/netlify-identity-widget": 1.9.3 "@types/react": 17.0.50 @@ -6677,7 +6480,6 @@ __metadata: react: 17.0.2 typescript: 4.7.4 peerDependencies: - "@redwoods/auth": 3.2.0 netlify-identity-widget: 1.9.2 languageName: unknown linkType: soft @@ -6809,67 +6611,70 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth-supertokens-api@workspace:packages/auth-providers/supertokens/api": +"@redwoodjs/auth0-api@workspace:packages/auth-providers/auth0/api": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-supertokens-api@workspace:packages/auth-providers/supertokens/api" + resolution: "@redwoodjs/auth0-api@workspace:packages/auth-providers/auth0/api" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/api": 3.2.0 "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 jest: 29.3.1 jsonwebtoken: 8.5.1 jwks-rsa: 2.0.5 typescript: 4.7.4 - peerDependencies: - "@redwoodjs/api": 3.2.0 - supertokens-node: 12.1.1 languageName: unknown linkType: soft -"@redwoodjs/auth-supertokens-setup@workspace:packages/auth-providers/supertokens/setup": +"@redwoodjs/auth0-web@workspace:packages/auth-providers/auth0/web": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-supertokens-setup@workspace:packages/auth-providers/supertokens/setup" + resolution: "@redwoodjs/auth0-web@workspace:packages/auth-providers/auth0/web" dependencies: + "@auth0/auth0-spa-js": 1.22.5 "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/cli-helpers": 3.2.0 - "@types/yargs": 17.0.13 + "@redwoodjs/auth": 3.2.0 + "@testing-library/react-hooks": 8.0.1 + "@types/react": 17.0.50 core-js: 3.26.1 jest: 29.3.1 + react: 17.0.2 typescript: 4.7.4 + peerDependencies: + "@auth0/auth0-spa-js": 1.22.5 languageName: unknown linkType: soft -"@redwoodjs/auth-supertokens-web@workspace:packages/auth-providers/supertokens/web": +"@redwoodjs/auth@3.2.0, @redwoodjs/auth@workspace:packages/auth": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-supertokens-web@workspace:packages/auth-providers/supertokens/web" + resolution: "@redwoodjs/auth@workspace:packages/auth" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/auth": 3.2.0 + "@testing-library/jest-dom": 5.16.5 + "@testing-library/react": 12.1.5 "@testing-library/react-hooks": 8.0.1 - "@types/react": 17.0.50 core-js: 3.26.1 jest: 29.3.1 + msw: 0.49.1 react: 17.0.2 typescript: 4.7.4 - peerDependencies: - supertokens-auth-react: 0.26.5 languageName: unknown linkType: soft -"@redwoodjs/auth0-api@workspace:packages/auth-providers/auth0/api": +"@redwoodjs/azure-active-directory-api@workspace:packages/auth-providers/azureActiveDirectory/api": version: 0.0.0-use.local - resolution: "@redwoodjs/auth0-api@workspace:packages/auth-providers/auth0/api" + resolution: "@redwoodjs/azure-active-directory-api@workspace:packages/auth-providers/azureActiveDirectory/api" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 "@redwoodjs/api": 3.2.0 + "@types/aws-lambda": 8.10.107 "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 jest: 29.3.1 @@ -6879,57 +6684,39 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth0-web@workspace:packages/auth-providers/auth0/web": +"@redwoodjs/azure-active-directory-setup@workspace:packages/auth-providers/azureActiveDirectory/setup": version: 0.0.0-use.local - resolution: "@redwoodjs/auth0-web@workspace:packages/auth-providers/auth0/web" + resolution: "@redwoodjs/azure-active-directory-setup@workspace:packages/auth-providers/azureActiveDirectory/setup" dependencies: - "@auth0/auth0-spa-js": 1.22.5 "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/auth": 3.2.0 - "@testing-library/react-hooks": 8.0.1 - "@types/react": 17.0.50 + "@redwoodjs/cli-helpers": 3.2.0 + "@types/yargs": 17.0.13 core-js: 3.26.1 jest: 29.3.1 - react: 17.0.2 typescript: 4.7.4 - peerDependencies: - "@auth0/auth0-spa-js": 1.22.5 languageName: unknown linkType: soft -"@redwoodjs/auth@3.2.0, @redwoodjs/auth@workspace:packages/auth": +"@redwoodjs/azure-active-directory-web@workspace:packages/auth-providers/azureActiveDirectory/web": version: 0.0.0-use.local - resolution: "@redwoodjs/auth@workspace:packages/auth" + resolution: "@redwoodjs/azure-active-directory-web@workspace:packages/auth-providers/azureActiveDirectory/web" dependencies: - "@auth0/auth0-spa-js": 1.22.5 "@azure/msal-browser": 2.30.0 "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@clerk/clerk-js": 3.17.0 - "@clerk/clerk-react": 3.5.1 - "@clerk/clerk-sdk-node": 3.9.2 - "@clerk/types": 2.21.0 - "@nhost/hasura-auth-js": 1.4.1 - "@nhost/nhost-js": 1.4.10 - "@okta/okta-auth-js": 6.9.0 - "@simplewebauthn/browser": 6.2.1 - "@simplewebauthn/typescript-types": 6.2.1 - "@supabase/supabase-js": 1.35.7 + "@redwoodjs/auth": 3.2.0 + "@testing-library/react-hooks": 8.0.1 "@types/netlify-identity-widget": 1.9.3 "@types/react": 17.0.50 core-js: 3.26.1 - firebase: 9.10.0 - firebase-admin: 10.3.0 - gotrue-js: 0.9.29 jest: 29.3.1 - magic-sdk: 9.1.1 - netlify-identity-widget: 1.9.2 react: 17.0.2 - supertokens-auth-react: 0.26.5 typescript: 4.7.4 + peerDependencies: + "@azure/msal-browser": 2.30.0 languageName: unknown linkType: soft @@ -6941,6 +6728,7 @@ __metadata: "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 "@clerk/clerk-sdk-node": 3.9.2 + "@redwoodjs/api": 3.2.0 "@types/aws-lambda": 8.10.107 core-js: 3.26.1 jest: 29.3.1 @@ -7161,8 +6949,6 @@ __metadata: md5: 2.3.0 typescript: 4.7.4 uuid: 9.0.0 - peerDependencies: - "@redwoodjs/api": 3.2.0 languageName: unknown linkType: soft @@ -7196,14 +6982,15 @@ __metadata: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/auth": 3.2.0 + "@simplewebauthn/browser": 6.2.1 + "@simplewebauthn/typescript-types": 6.2.1 "@testing-library/react-hooks": 8.0.1 "@types/react": 17.0.50 core-js: 3.26.1 jest: 29.3.1 react: 17.0.2 typescript: 4.7.4 - peerDependencies: - "@redwoodjs/auth": 3.2.0 languageName: unknown linkType: soft @@ -7460,6 +7247,59 @@ __metadata: languageName: unknown linkType: soft +"@redwoodjs/supertokens-api@workspace:packages/auth-providers/supertokens/api": + version: 0.0.0-use.local + resolution: "@redwoodjs/supertokens-api@workspace:packages/auth-providers/supertokens/api" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/api": 3.2.0 + "@types/jsonwebtoken": 8.5.9 + core-js: 3.26.1 + jest: 29.3.1 + jsonwebtoken: 8.5.1 + jwks-rsa: 2.0.5 + typescript: 4.7.4 + peerDependencies: + supertokens-node: 12.1.1 + languageName: unknown + linkType: soft + +"@redwoodjs/supertokens-setup@workspace:packages/auth-providers/supertokens/setup": + version: 0.0.0-use.local + resolution: "@redwoodjs/supertokens-setup@workspace:packages/auth-providers/supertokens/setup" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/cli-helpers": 3.2.0 + "@types/yargs": 17.0.13 + core-js: 3.26.1 + jest: 29.3.1 + typescript: 4.7.4 + languageName: unknown + linkType: soft + +"@redwoodjs/supertokens-web@workspace:packages/auth-providers/supertokens/web": + version: 0.0.0-use.local + resolution: "@redwoodjs/supertokens-web@workspace:packages/auth-providers/supertokens/web" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/auth": 3.2.0 + "@testing-library/react-hooks": 8.0.1 + "@types/react": 17.0.50 + core-js: 3.26.1 + jest: 29.3.1 + react: 17.0.2 + typescript: 4.7.4 + peerDependencies: + supertokens-auth-react: 0.26.5 + languageName: unknown + linkType: soft + "@redwoodjs/telemetry@3.2.0, @redwoodjs/telemetry@workspace:packages/telemetry": version: 0.0.0-use.local resolution: "@redwoodjs/telemetry@workspace:packages/telemetry" @@ -8946,65 +8786,6 @@ __metadata: languageName: node linkType: hard -"@supabase/functions-js@npm:^1.3.4": - version: 1.3.4 - resolution: "@supabase/functions-js@npm:1.3.4" - dependencies: - cross-fetch: ^3.1.5 - checksum: a20660ec406ab8e684edd0be1944585071f489da9e946ee7d9477d0259a95ef4cee1c3291f9aa0d61c00517b527ce0351001d05acd12e89c7d72a9b78aabef3c - languageName: node - linkType: hard - -"@supabase/gotrue-js@npm:^1.22.21": - version: 1.22.21 - resolution: "@supabase/gotrue-js@npm:1.22.21" - dependencies: - cross-fetch: ^3.0.6 - checksum: b25ca1bbac177fbc3ba921686b741d86362a8745787e6d79124e00c4ddfe7dee915c6bca9d767e40173a23f4cfac892c7ab6efced22ce47d9ef5f777ec4ff361 - languageName: node - linkType: hard - -"@supabase/postgrest-js@npm:^0.37.4": - version: 0.37.4 - resolution: "@supabase/postgrest-js@npm:0.37.4" - dependencies: - cross-fetch: ^3.1.5 - checksum: 75fb3d94b0fb4360d7915a5cc211d5547834a344cc0d07633f61b6ffab099ec864b47a0a7d1551e5c2200af1eb50f7cf44fead8b1cc0b35f805d43b8eddeff3c - languageName: node - linkType: hard - -"@supabase/realtime-js@npm:^1.7.5": - version: 1.7.5 - resolution: "@supabase/realtime-js@npm:1.7.5" - dependencies: - "@types/phoenix": ^1.5.4 - websocket: ^1.0.34 - checksum: a9be4e73df7eff9e5928cba2b8bac4849a2f61d9f82cbbdefc6e767cbf6ed4326a3e0f477b21bb7716c3707cae3acf3182912e4c3a2a00790fb78b78d1c20b49 - languageName: node - linkType: hard - -"@supabase/storage-js@npm:^1.7.2": - version: 1.7.2 - resolution: "@supabase/storage-js@npm:1.7.2" - dependencies: - cross-fetch: ^3.1.0 - checksum: e473e572349c495e0fd57eb5257618c95d8b5fc4fc3cf226bf5cee99a288bf753bc760f66ff8aedd2b033d18a1fae64037f63b4b8d5dafb3098a99dadbb5b00f - languageName: node - linkType: hard - -"@supabase/supabase-js@npm:1.35.7": - version: 1.35.7 - resolution: "@supabase/supabase-js@npm:1.35.7" - dependencies: - "@supabase/functions-js": ^1.3.4 - "@supabase/gotrue-js": ^1.22.21 - "@supabase/postgrest-js": ^0.37.4 - "@supabase/realtime-js": ^1.7.5 - "@supabase/storage-js": ^1.7.2 - checksum: a0574c6c4795adb8bc0908dc6a00e127c118b7eb5d916516863de0d2c3cd8eb5a4d5401791d968e61c131217674f8063436508e1de44fbfaad08180010491ce5 - languageName: node - linkType: hard - "@szmarczak/http-timer@npm:^1.1.2": version: 1.1.2 resolution: "@szmarczak/http-timer@npm:1.1.2" @@ -9578,13 +9359,6 @@ __metadata: languageName: node linkType: hard -"@types/js-cookie@npm:2.2.6": - version: 2.2.6 - resolution: "@types/js-cookie@npm:2.2.6" - checksum: 41dba47b7470d3dbf57025f53fd77bf70e35a0a7ce414b8ac77ed088c1273e2a549a63d59bc879735a5796cc6dc8f32c04a7ad9fe137f868747a35f843c3f9d1 - languageName: node - linkType: hard - "@types/js-levenshtein@npm:^1.1.1": version: 1.1.1 resolution: "@types/js-levenshtein@npm:1.1.1" @@ -9906,13 +9680,6 @@ __metadata: languageName: node linkType: hard -"@types/phoenix@npm:^1.5.4": - version: 1.5.4 - resolution: "@types/phoenix@npm:1.5.4" - checksum: ea146325918847b94c545d99c62d233dca9cf71111bed674eeee3c75e5a8e967fe785c9cf70e4b869c12337200955346bce63fa42de2eb3969f7db621c2da48b - languageName: node - linkType: hard - "@types/prettier@npm:*, @types/prettier@npm:2.7.1, @types/prettier@npm:^2.1.5": version: 2.7.1 resolution: "@types/prettier@npm:2.7.1" @@ -9973,15 +9740,6 @@ __metadata: languageName: node linkType: hard -"@types/react-transition-group@npm:^4.4.0": - version: 4.4.4 - resolution: "@types/react-transition-group@npm:4.4.4" - dependencies: - "@types/react": "*" - checksum: 0e593863c60550002bb7a5bf60dad719de78580017f87eadf32661d1870345a4ef22e2e37902e05d05955494f2c0cae5ef46510032005e8e969273eee0ae8519 - languageName: node - linkType: hard - "@types/react@npm:17.0.50": version: 17.0.50 resolution: "@types/react@npm:17.0.50" @@ -10864,13 +10622,6 @@ __metadata: languageName: node linkType: hard -"@xobotyi/scrollbar-width@npm:1.9.5": - version: 1.9.5 - resolution: "@xobotyi/scrollbar-width@npm:1.9.5" - checksum: 4ebc79e4f798e2a5e89a5122f8fc4a086f08a92a44ac020599c4fe20d105b7d76ba06c094260b5f386a75e7ce6f6c518d9fc295228b651296b99c4477f986ac4 - languageName: node - linkType: hard - "@xtuc/ieee754@npm:^1.2.0": version: 1.2.0 resolution: "@xtuc/ieee754@npm:1.2.0" @@ -12112,17 +11863,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-macros@npm:^2.6.1": - version: 2.8.0 - resolution: "babel-plugin-macros@npm:2.8.0" - dependencies: - "@babel/runtime": ^7.7.2 - cosmiconfig: ^6.0.0 - resolve: ^1.12.0 - checksum: 9a101e2844a800e65662b2a8d0758bdbbe500ae02d68ef6f3466ead7eaa1350e3872b97014b20bf6f3a1a46b3c9613dfac7578af6f6ae6d4eccbd68ad7b6f228 - languageName: node - linkType: hard - "babel-plugin-macros@npm:^3.0.1": version: 3.1.0 resolution: "babel-plugin-macros@npm:3.1.0" @@ -12696,7 +12436,7 @@ __metadata: languageName: node linkType: hard -"browser-tabs-lock@npm:^1.2.14, browser-tabs-lock@npm:^1.2.15": +"browser-tabs-lock@npm:^1.2.15": version: 1.2.15 resolution: "browser-tabs-lock@npm:1.2.15" dependencies: @@ -13525,15 +13265,6 @@ __metadata: languageName: node linkType: hard -"chroma-js@npm:2.1.2": - version: 2.1.2 - resolution: "chroma-js@npm:2.1.2" - dependencies: - cross-env: ^6.0.3 - checksum: f3760059b76240bab7387f335c798bbf55a4edf937534be7bc5c16ecad9b358dcfd891ca4fffa2c34742f45d5c3e96c8927c6a9906a13905da2bfa4c9ad30418 - languageName: node - linkType: hard - "chrome-trace-event@npm:^1.0.2": version: 1.0.3 resolution: "chrome-trace-event@npm:1.0.3" @@ -13591,13 +13322,6 @@ __metadata: languageName: node linkType: hard -"classnames@npm:^2.2.5, classnames@npm:^2.3.1": - version: 2.3.1 - resolution: "classnames@npm:2.3.1" - checksum: e3b832219042802464e648c41c2e8be96c2c64d2522cfa22fbb5ec088418406c61ab351a682c077c07f691c8b00c9f0ee7939b20fabc6c23da69063252a4ab89 - languageName: node - linkType: hard - "clean-css@npm:^4.2.3": version: 4.2.4 resolution: "clean-css@npm:4.2.4" @@ -14270,7 +13994,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.1.0, convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.1.0, convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.8.0 resolution: "convert-source-map@npm:1.8.0" dependencies: @@ -14345,15 +14069,6 @@ __metadata: languageName: node linkType: hard -"copy-to-clipboard@npm:^3.2.0": - version: 3.3.1 - resolution: "copy-to-clipboard@npm:3.3.1" - dependencies: - toggle-selection: ^1.0.6 - checksum: cc38a2a07ec22b1b60c6bd1648a21178fade4d972b43e4c2570f36f8df59ca2b7e9f8a6125d271cf2927367d3ec4012c92deaf244c12cd79509244d5c7f0f4dd - languageName: node - linkType: hard - "copy-webpack-plugin@npm:11.0.0": version: 11.0.0 resolution: "copy-webpack-plugin@npm:11.0.0" @@ -14386,7 +14101,7 @@ __metadata: languageName: node linkType: hard -"core-js@npm:3.26.1, core-js@npm:^3.0.4, core-js@npm:^3.18.3, core-js@npm:^3.25.1, core-js@npm:^3.26.0, core-js@npm:^3.6.5, core-js@npm:^3.8.2": +"core-js@npm:3.26.1, core-js@npm:^3.0.4, core-js@npm:^3.25.1, core-js@npm:^3.26.0, core-js@npm:^3.6.5, core-js@npm:^3.8.2": version: 3.26.1 resolution: "core-js@npm:3.26.1" checksum: 82d36c6f54fc0349998fa7fc67d200ba272f1cd1674c6786dc17f9d259d6555fc05662044528eae73ad6e90f71d503ab5c060ad4745492ef804308209f9aec13 @@ -14454,13 +14169,6 @@ __metadata: languageName: node linkType: hard -"country-flag-icons@npm:^1.0.2": - version: 1.4.21 - resolution: "country-flag-icons@npm:1.4.21" - checksum: 7cf8e9da73b4f0fde31fefacedcb5007cbd8c5318150ed35d3ef4ee8d69099be9017e4fb153d7493f4f2abd3cdf1c40cf1a073bfda516323608ca662faf17a68 - languageName: node - linkType: hard - "cp-file@npm:^7.0.0": version: 7.0.0 resolution: "cp-file@npm:7.0.0" @@ -14616,19 +14324,7 @@ __metadata: languageName: node linkType: hard -"cross-env@npm:^6.0.3": - version: 6.0.3 - resolution: "cross-env@npm:6.0.3" - dependencies: - cross-spawn: ^7.0.0 - bin: - cross-env: src/bin/cross-env.js - cross-env-shell: src/bin/cross-env-shell.js - checksum: 0d176b91c730abb08589431970a59771148f8fbf338959f5e3aa71b866d38ba390fc67f5330306d0a37d7cb74675224d0f23086f291661b944abbf5a00bd7080 - languageName: node - linkType: hard - -"cross-fetch@npm:^3.0.6, cross-fetch@npm:^3.1.0, cross-fetch@npm:^3.1.5": +"cross-fetch@npm:^3.1.5": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" dependencies: @@ -14732,16 +14428,6 @@ __metadata: languageName: node linkType: hard -"css-in-js-utils@npm:^2.0.0": - version: 2.0.1 - resolution: "css-in-js-utils@npm:2.0.1" - dependencies: - hyphenate-style-name: ^1.0.2 - isobject: ^3.0.1 - checksum: 6696cda3ebd596fc42ff40059546786936a8cf709e00bc8dedce6cd42c2b3edb19333a5d5bba6ac35b75b58cf55c021cee7ab3ec0f13fb2cf59fbb024ba0894f - languageName: node - linkType: hard - "css-loader@npm:6.7.2": version: 6.7.2 resolution: "css-loader@npm:6.7.2" @@ -15003,7 +14689,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.0.6": +"csstype@npm:^3.0.2": version: 3.0.10 resolution: "csstype@npm:3.0.10" checksum: f0fff671ab368a863946859ad96be0be66afeb83566215d6494be840ffedfaef4945b48d1b0ce1a19f9983af772e0ce38c7be91a1ad46fe7ecd641937c5a99f7 @@ -15654,16 +15340,6 @@ __metadata: languageName: node linkType: hard -"dom-helpers@npm:^5.0.1": - version: 5.2.1 - resolution: "dom-helpers@npm:5.2.1" - dependencies: - "@babel/runtime": ^7.8.7 - csstype: ^3.0.2 - checksum: f735074d66dd759b36b158fa26e9d00c9388ee0e8c9b16af941c38f014a37fc80782de83afefd621681b19ac0501034b4f1c4a3bff5caa1b8667f0212b5e124c - languageName: node - linkType: hard - "dom-serializer@npm:^1.0.1": version: 1.3.2 resolution: "dom-serializer@npm:1.3.2" @@ -17427,13 +17103,6 @@ __metadata: languageName: node linkType: hard -"fast-shallow-equal@npm:^1.0.0": - version: 1.0.0 - resolution: "fast-shallow-equal@npm:1.0.0" - checksum: 526c393c011ab5a0ca5a36c5ea25c9730acd027503ccbec6c7825397ab9375f51f67f14c8829b4c4b1ccccede695391dd14863a15e40a37fc4af08c1440a1b66 - languageName: node - linkType: hard - "fast-text-encoding@npm:^1.0.0, fast-text-encoding@npm:^1.0.3, fast-text-encoding@npm:^1.0.6": version: 1.0.6 resolution: "fast-text-encoding@npm:1.0.6" @@ -17462,13 +17131,6 @@ __metadata: languageName: node linkType: hard -"fastest-stable-stringify@npm:^2.0.2": - version: 2.0.2 - resolution: "fastest-stable-stringify@npm:2.0.2" - checksum: abbe5ff48f13f5819e7312dbb38bae5d9960694cffd315b464df9adcd02a8fa7e9eec32c314655674c7134905c544b7a0c14b05bfbe30b3f678609bebc9fecb9 - languageName: node - linkType: hard - "fastify-plugin@npm:^3.0.1": version: 3.0.1 resolution: "fastify-plugin@npm:3.0.1" @@ -17752,13 +17414,6 @@ __metadata: languageName: node linkType: hard -"find-root@npm:^1.1.0": - version: 1.1.0 - resolution: "find-root@npm:1.1.0" - checksum: 1abc7f3bf2f8d78ff26d9e00ce9d0f7b32e5ff6d1da2857bcdf4746134c422282b091c672cde0572cac3840713487e0a7a636af9aa1b74cb11894b447a521efa - languageName: node - linkType: hard - "find-up@npm:5.0.0, find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -19282,7 +18937,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -19652,20 +19307,6 @@ __metadata: languageName: node linkType: hard -"humps@npm:^2.0.1": - version: 2.0.1 - resolution: "humps@npm:2.0.1" - checksum: 554f3bb9de780ce833f0058f30536f87615bd75ead2008b98d900598379fe5dcd3300bdd9092d3e078d47b66fade82276974dda7151318b5de7a1d837c3abe6e - languageName: node - linkType: hard - -"hyphenate-style-name@npm:^1.0.2": - version: 1.0.4 - resolution: "hyphenate-style-name@npm:1.0.4" - checksum: b19c3e2cd1dc426f6f893752fec08140abf79058a1b6238422e45373ed81389f02e1a2ba2ef4e9b2430d4e900a0f5ba12307de82320604e81ac1b722abd2ee62 - languageName: node - linkType: hard - "iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -19907,24 +19548,6 @@ __metadata: languageName: node linkType: hard -"inline-style-prefixer@npm:^6.0.0": - version: 6.0.1 - resolution: "inline-style-prefixer@npm:6.0.1" - dependencies: - css-in-js-utils: ^2.0.0 - checksum: 02d2e0d9971a20c35ee1deba1b6a8677e1a105cdf6a17b36356c438bf1a064c99cba1e7cc97d0999c388a93b36ec08977cd0258d4e4b7be9d42cf096bba75831 - languageName: node - linkType: hard - -"input-format@npm:^0.3.6": - version: 0.3.7 - resolution: "input-format@npm:0.3.7" - dependencies: - prop-types: ^15.7.2 - checksum: b1d753f910d66047208c5520b6f6892992045d7da8a06db1ecf76ffbe5da2c47752c0c35e267c2e2d751354b191d070da7e2fef9795b69480224bba4fe1c7515 - languageName: node - linkType: hard - "inquirer@npm:^7.3.3": version: 7.3.3 resolution: "inquirer@npm:7.3.3" @@ -21469,13 +21092,6 @@ __metadata: languageName: node linkType: hard -"js-cookie@npm:^2.2.1": - version: 2.2.1 - resolution: "js-cookie@npm:2.2.1" - checksum: ee67fc0f8495d0800b851910b5eb5bf49d3033adff6493d55b5c097ca6da46f7fe666b10e2ecb13cfcaf5b88d71c205ce00a7e646de791689bfd053bbb36a376 - languageName: node - linkType: hard - "js-cookie@npm:^3.0.1": version: 3.0.1 resolution: "js-cookie@npm:3.0.1" @@ -22245,20 +21861,6 @@ __metadata: languageName: node linkType: hard -"libphonenumber-js@npm:1.9.43": - version: 1.9.43 - resolution: "libphonenumber-js@npm:1.9.43" - checksum: 99834b96a6caf8625dbc0caaf5526ed881ee1c4dc0e627c79bd6fb168014255a747911810b47657758bc24ff8c40264ed7ac78689a18c22cdf2c33f8c96fb23e - languageName: node - linkType: hard - -"libphonenumber-js@npm:^1.9.43": - version: 1.9.49 - resolution: "libphonenumber-js@npm:1.9.49" - checksum: 74af8f8bf1517fe0636c02aacd0336d3b221d3afbc5847d93686818e00c5751327468921bc7a98e10e7e17fbca23cff87a64ca1f30cc66eb126bf68395891e80 - languageName: node - linkType: hard - "lie@npm:3.1.1": version: 3.1.1 resolution: "lie@npm:3.1.1" @@ -23161,13 +22763,6 @@ __metadata: languageName: node linkType: hard -"memoize-one@npm:^5.0.0": - version: 5.2.1 - resolution: "memoize-one@npm:5.2.1" - checksum: fd22dbe9a978a2b4f30d6a491fc02fb90792432ad0dab840dc96c1734d2bd7c9cdeb6a26130ec60507eb43230559523615873168bcbe8fafab221c30b11d54c1 - languageName: node - linkType: hard - "memoizerific@npm:^1.11.3": version: 1.11.3 resolution: "memoizerific@npm:1.11.3" @@ -23815,25 +23410,6 @@ __metadata: languageName: node linkType: hard -"nano-css@npm:^5.2.1": - version: 5.3.4 - resolution: "nano-css@npm:5.3.4" - dependencies: - css-tree: ^1.1.2 - csstype: ^3.0.6 - fastest-stable-stringify: ^2.0.2 - inline-style-prefixer: ^6.0.0 - rtl-css-js: ^1.14.0 - sourcemap-codec: ^1.4.8 - stacktrace-js: ^2.0.2 - stylis: ^4.0.6 - peerDependencies: - react: "*" - react-dom: "*" - checksum: 1d3175d0a0df8b960646979f85a1f4b81ca62a6e9a91cd0a4b6c416a04feea0e49494b635eeaa4cc794ca34be1a2700919121699d909540e856709122dcf518f - languageName: node - linkType: hard - "nanoid@npm:^3.3.1, nanoid@npm:^3.3.4": version: 3.3.4 resolution: "nanoid@npm:3.3.4" @@ -23906,13 +23482,6 @@ __metadata: languageName: node linkType: hard -"netlify-identity-widget@npm:1.9.2": - version: 1.9.2 - resolution: "netlify-identity-widget@npm:1.9.2" - checksum: fcdc960f3228cdb4c1e6a1c98ca92f570d00d7914d9579712a16ef7ec72fe6d4396fbe07b24e9f9ca2fc12fd724d3193a40d97ed99c7690f209f329ae591af24 - languageName: node - linkType: hard - "new-github-issue-url@npm:0.2.1": version: 0.2.1 resolution: "new-github-issue-url@npm:0.2.1" @@ -26716,7 +26285,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0, qs@npm:^6.10.0, qs@npm:^6.9.4": +"qs@npm:6.11.0, qs@npm:^6.10.0": version: 6.11.0 resolution: "qs@npm:6.11.0" dependencies: @@ -26961,7 +26530,7 @@ __metadata: languageName: node linkType: hard -"react-fast-compare@npm:^3.0.1, react-fast-compare@npm:^3.2.0": +"react-fast-compare@npm:^3.2.0": version: 3.2.0 resolution: "react-fast-compare@npm:3.2.0" checksum: 2a7d75ce9fb5da1e3c01f74a5cd592f3369a8cc8d44e93654bf147ab221f430238e8be70677e896f2bfcb96a1cb7a47a8d05d84633de764a9d57d27005a4bb9e @@ -27039,35 +26608,6 @@ __metadata: languageName: node linkType: hard -"react-phone-number-input@npm:3.1.41": - version: 3.1.41 - resolution: "react-phone-number-input@npm:3.1.41" - dependencies: - classnames: ^2.2.5 - country-flag-icons: ^1.0.2 - input-format: ^0.3.6 - libphonenumber-js: ^1.9.43 - prop-types: ^15.7.2 - peerDependencies: - react: ">=0.16.8" - react-dom: ">=0.16.8" - checksum: 1fb5750a283b21771710b9adb4859abd6f98fdd85bbf84d73a1b17340220058895857c327a4afb78058abff46e3bc726a3a17abd1438c5d9f74f6c1dafe92290 - languageName: node - linkType: hard - -"react-popper@npm:^2.2.3": - version: 2.2.5 - resolution: "react-popper@npm:2.2.5" - dependencies: - react-fast-compare: ^3.0.1 - warning: ^4.0.2 - peerDependencies: - "@popperjs/core": ^2.0.0 - react: ^16.8.0 || ^17 - checksum: 199ff9ec23670eece1c5972d48d2c5e9c28938dd610c432979fdab631a38371f8a3a5fbb9dcaeec0cff9ce9fb58b3bc1965c525de14fdb78f5e9b35f0d90f335 - languageName: node - linkType: hard - "react-refresh@npm:0.14.0": version: 0.14.0 resolution: "react-refresh@npm:0.14.0" @@ -27082,38 +26622,6 @@ __metadata: languageName: node linkType: hard -"react-select@npm:5.2.1": - version: 5.2.1 - resolution: "react-select@npm:5.2.1" - dependencies: - "@babel/runtime": ^7.12.0 - "@emotion/cache": ^11.4.0 - "@emotion/react": ^11.1.1 - "@types/react-transition-group": ^4.4.0 - memoize-one: ^5.0.0 - prop-types: ^15.6.0 - react-transition-group: ^4.3.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: a6efe7b65c9ebe77bfc9856ba763f9efa20b773f9d370ec0d9565c05b2f3aa88111d4ea282be9cb6eddaff9bd9916c53585e234b52f6e7d007a8c384997b6912 - languageName: node - linkType: hard - -"react-shadow@npm:19.0.3": - version: 19.0.3 - resolution: "react-shadow@npm:19.0.3" - dependencies: - humps: ^2.0.1 - react-use: ^15.3.3 - peerDependencies: - prop-types: ^15.0.0 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.0.0 || ^17.0.0 - checksum: 96579ca61ddcd7d005be86f09d93236fdbd33a53b5980909cfb706ee8cad3c5af3ef681385d1b4e45d27c768b1406e275e6a722573e6c93191abe5a05e37ec70 - languageName: node - linkType: hard - "react-sizeme@npm:^3.0.1": version: 3.0.2 resolution: "react-sizeme@npm:3.0.2" @@ -27126,56 +26634,6 @@ __metadata: languageName: node linkType: hard -"react-transition-group@npm:^4.3.0": - version: 4.4.2 - resolution: "react-transition-group@npm:4.4.2" - dependencies: - "@babel/runtime": ^7.5.5 - dom-helpers: ^5.0.1 - loose-envify: ^1.4.0 - prop-types: ^15.6.2 - peerDependencies: - react: ">=16.6.0" - react-dom: ">=16.6.0" - checksum: afaf835854526065d246532714a3833a7c5fbcf21303e1479008ff6f1ec1ae44ecd151f74f357c60511a1e49de65cb9b81bf4d7858b9ee19e636b9a62a6daaa4 - languageName: node - linkType: hard - -"react-universal-interface@npm:^0.6.2": - version: 0.6.2 - resolution: "react-universal-interface@npm:0.6.2" - peerDependencies: - react: "*" - tslib: "*" - checksum: 97c32ecb7a425c3bcaa92dcf84c46146b49610d928efde9e9ee5518c475a0db942f01634dd490e4f42fcd95cc2f49657c1b96dcef96423c06f077147fe1968ab - languageName: node - linkType: hard - -"react-use@npm:^15.3.3": - version: 15.3.8 - resolution: "react-use@npm:15.3.8" - dependencies: - "@types/js-cookie": 2.2.6 - "@xobotyi/scrollbar-width": 1.9.5 - copy-to-clipboard: ^3.2.0 - fast-deep-equal: ^3.1.3 - fast-shallow-equal: ^1.0.0 - js-cookie: ^2.2.1 - nano-css: ^5.2.1 - react-universal-interface: ^0.6.2 - resize-observer-polyfill: ^1.5.1 - screenfull: ^5.0.0 - set-harmonic-interval: ^1.0.1 - throttle-debounce: ^2.1.0 - ts-easing: ^0.2.0 - tslib: ^2.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: 9679090467f65d079c684121e246e08e273c3898659755e0bf13a32f58d242d4c6531299fff310a92980041f8439d48519de6feec0c9f5b0a63d99f30876a279 - languageName: node - linkType: hard - "react@npm:17.0.2": version: 17.0.2 resolution: "react@npm:17.0.2" @@ -27815,13 +27273,6 @@ __metadata: languageName: node linkType: hard -"resize-observer-polyfill@npm:^1.5.1": - version: 1.5.1 - resolution: "resize-observer-polyfill@npm:1.5.1" - checksum: 5e882475067f0b97dc07e0f37c3e335ac5bc3520d463f777cec7e894bb273eddbfecb857ae668e6fb6881fd6f6bb7148246967172139302da50fa12ea3a15d95 - languageName: node - linkType: hard - "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -27869,7 +27320,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.22.1, resolve@npm:^1.10.0, resolve@npm:^1.11.1, resolve@npm:^1.12.0, resolve@npm:^1.13.1, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.3.2, resolve@npm:^1.9.0": +"resolve@npm:1.22.1, resolve@npm:^1.10.0, resolve@npm:^1.11.1, resolve@npm:^1.13.1, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.3.2, resolve@npm:^1.9.0": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -27892,7 +27343,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@1.22.1#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.11.1#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.13.1#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.3.2#~builtin, resolve@patch:resolve@^1.9.0#~builtin": +"resolve@patch:resolve@1.22.1#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.11.1#~builtin, resolve@patch:resolve@^1.13.1#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.3.2#~builtin, resolve@patch:resolve@^1.9.0#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=c3c19d" dependencies: @@ -28126,15 +27577,6 @@ __metadata: languageName: node linkType: hard -"rtl-css-js@npm:^1.14.0": - version: 1.15.0 - resolution: "rtl-css-js@npm:1.15.0" - dependencies: - "@babel/runtime": ^7.1.2 - checksum: ead5c5f89436af61b39c7639d39141ad291039232285176969199beb96f3267a55c5a74b5b63a05f3cbac92ff09a73bde60d33f84603ea6aaabe7934a21b4f9a - languageName: node - linkType: hard - "run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -28357,13 +27799,6 @@ __metadata: languageName: node linkType: hard -"screenfull@npm:^5.0.0": - version: 5.2.0 - resolution: "screenfull@npm:5.2.0" - checksum: 86fd49983e2edc153ee2e674a570c711cb0961a9cacca659309f79636ccc8ca8a0b830ea4dacdae7403a8bb7ba6affd5bcdce053aa97782961247a49bfd2ba68 - languageName: node - linkType: hard - "scrypt-js@npm:^3.0.0": version: 3.0.1 resolution: "scrypt-js@npm:3.0.1" @@ -28623,13 +28058,6 @@ __metadata: languageName: node linkType: hard -"set-harmonic-interval@npm:^1.0.1": - version: 1.0.1 - resolution: "set-harmonic-interval@npm:1.0.1" - checksum: 49014d928a62c8418507bf66ffef7066783e8fb19f76e955318bbae5a8c4b56e1a7176b370f9040ef9de51531aa522a3f96fa5c47b1534635aa577ff7c12f9c6 - languageName: node - linkType: hard - "set-immediate-shim@npm:~1.0.1": version: 1.0.1 resolution: "set-immediate-shim@npm:1.0.1" @@ -29076,14 +28504,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:0.5.6": - version: 0.5.6 - resolution: "source-map@npm:0.5.6" - checksum: beb2c5974bb58954d75e86249953d47ae16f7df1a8531abb9fcae0cd262d9fa09c2db3a134e20e99358b1adba42b6b054a32c8e16b571b3efcf6af644c329f0d - languageName: node - linkType: hard - -"source-map@npm:^0.5.0, source-map@npm:^0.5.6, source-map@npm:^0.5.7": +"source-map@npm:^0.5.0, source-map@npm:^0.5.6": version: 0.5.7 resolution: "source-map@npm:0.5.7" checksum: 904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 @@ -29104,13 +28525,6 @@ __metadata: languageName: node linkType: hard -"sourcemap-codec@npm:^1.4.8": - version: 1.4.8 - resolution: "sourcemap-codec@npm:1.4.8" - checksum: f099279fdaae070ff156df7414bbe39aad69cdd615454947ed3e19136bfdfcb4544952685ee73f56e17038f4578091e12b17b283ed8ac013882916594d95b9e6 - languageName: node - linkType: hard - "space-separated-tokens@npm:^1.0.0": version: 1.1.5 resolution: "space-separated-tokens@npm:1.1.5" @@ -29307,15 +28721,6 @@ __metadata: languageName: node linkType: hard -"stack-generator@npm:^2.0.5": - version: 2.0.5 - resolution: "stack-generator@npm:2.0.5" - dependencies: - stackframe: ^1.1.1 - checksum: 94de1664b54cd0834738bec0e0f92b76ac72fdb4f1fe63c8eee9d6a17d84b6f87be39ca40ef3abd14dffa86b4e7ae1dae9b07bda319a441c4788e4d37fc9ef75 - languageName: node - linkType: hard - "stack-utils@npm:^2.0.3": version: 2.0.5 resolution: "stack-utils@npm:2.0.5" @@ -29332,27 +28737,6 @@ __metadata: languageName: node linkType: hard -"stacktrace-gps@npm:^3.0.4": - version: 3.0.4 - resolution: "stacktrace-gps@npm:3.0.4" - dependencies: - source-map: 0.5.6 - stackframe: ^1.1.1 - checksum: eb3acc1e75593c9cc0abe081d0edc67ff0c14d860c008ca1efba17c2ab360dbf1e51ef2ca4d978907c87cfa9ac6a86efc24bd2756a3a6e4026c85811e1f4819b - languageName: node - linkType: hard - -"stacktrace-js@npm:^2.0.2": - version: 2.0.2 - resolution: "stacktrace-js@npm:2.0.2" - dependencies: - error-stack-parser: ^2.0.6 - stack-generator: ^2.0.5 - stacktrace-gps: ^3.0.4 - checksum: 9a10c222524ca03690bcb27437b39039885223e39320367f2be36e6f750c2d198ae99189869a22c255bf60072631eb609d47e8e33661e95133686904e01121ec - languageName: node - linkType: hard - "stacktracey@npm:2.1.8": version: 2.1.8 resolution: "stacktracey@npm:2.1.8" @@ -29795,13 +29179,6 @@ __metadata: languageName: node linkType: hard -"stylis@npm:4.0.13, stylis@npm:^4.0.6": - version: 4.0.13 - resolution: "stylis@npm:4.0.13" - checksum: bd567c440b4f1acf8962b1b3aa7985c4e04d7badfe1e0f1c7ee2a60912de2718973850c524001a3d52f5fc9a0e3dcd204b8bd7e2d47d4934462e9f749fd9c7bc - languageName: node - linkType: hard - "superstruct@npm:^0.15.4": version: 0.15.5 resolution: "superstruct@npm:0.15.5" @@ -29809,52 +29186,6 @@ __metadata: languageName: node linkType: hard -"supertokens-auth-react@npm:0.26.5": - version: 0.26.5 - resolution: "supertokens-auth-react@npm:0.26.5" - dependencies: - "@emotion/react": ^11.4.1 - chroma-js: 2.1.2 - libphonenumber-js: 1.9.43 - prop-types: "*" - react-phone-number-input: 3.1.41 - react-select: 5.2.1 - react-shadow: 19.0.3 - supertokens-js-override: ^0.0.4 - supertokens-web-js: ^0.2.0 - peerDependencies: - react: ">=16.8.0" - checksum: 54ba49866c6fbee8edc31d7f58be7c57b4a23e79d83293fbe3b4f692e0e41405a2a563c91cba6dc6e32addfc6afb31ba92e21c0a48a5600e30d4b17b287641e8 - languageName: node - linkType: hard - -"supertokens-js-override@npm:0.0.4, supertokens-js-override@npm:^0.0.4": - version: 0.0.4 - resolution: "supertokens-js-override@npm:0.0.4" - checksum: 75468560e2f9fa0386e38d22f80aea705342f728db877b069623d3cfe070d85977b257508a2c8d3c6439280bfd6f1c7448ba8ac312b9abba6c8927428330028e - languageName: node - linkType: hard - -"supertokens-web-js@npm:^0.2.0": - version: 0.2.1 - resolution: "supertokens-web-js@npm:0.2.1" - dependencies: - supertokens-js-override: 0.0.4 - supertokens-website: ^13.1.0 - checksum: 3722e01b38862bf358cf0ab6b7bb6cc01e667e212fdcc95502a4d0c9588f61f9ee986bc95468430dbbfd218354efc9184cd56e9d860952d4774cd1d1ec541456 - languageName: node - linkType: hard - -"supertokens-website@npm:^13.1.0": - version: 13.1.0 - resolution: "supertokens-website@npm:13.1.0" - dependencies: - browser-tabs-lock: ^1.2.14 - supertokens-js-override: ^0.0.4 - checksum: bab04ea2c5536edd4cb61e711b0d2c030ec3a8c88c983c6f1e2c58b320103512f4f4a8df282ce0f36706efa1b5dda7951e2512cc67776c3e65d602c2896e0e87 - languageName: node - linkType: hard - "supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -30275,13 +29606,6 @@ __metadata: languageName: node linkType: hard -"throttle-debounce@npm:^2.1.0": - version: 2.3.0 - resolution: "throttle-debounce@npm:2.3.0" - checksum: 41648e4cf46f935818af32ecac34f9876c618f24e300551cbe3a0ca2c5828cb8d2f9b73e6e1e2f8c64237f70fbc8c541f9b5c9114da70b33b1ed10ba4cc6b15f - languageName: node - linkType: hard - "throttle-debounce@npm:^3.0.1": version: 3.0.1 resolution: "throttle-debounce@npm:3.0.1" @@ -30493,13 +29817,6 @@ __metadata: languageName: node linkType: hard -"toggle-selection@npm:^1.0.6": - version: 1.0.6 - resolution: "toggle-selection@npm:1.0.6" - checksum: f2cf1f2c70f374fd87b0cdc8007453ba9e981c4305a8bf4eac10a30e62ecdfd28bca7d18f8f15b15a506bf8a7bfb20dbe3539f0fcf2a2c8396c1a78d53e1f179 - languageName: node - linkType: hard - "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -30634,13 +29951,6 @@ __metadata: languageName: node linkType: hard -"ts-easing@npm:^0.2.0": - version: 0.2.0 - resolution: "ts-easing@npm:0.2.0" - checksum: 84ec20192310c697ff890ca2e0625e131a32596a7c5956326c9632faca9037abf2dd3de4d81ac358ae9f26a6a2cfe2300f13756b26995f753d882e3d0463e327 - languageName: node - linkType: hard - "ts-invariant@npm:^0.10.3": version: 0.10.3 resolution: "ts-invariant@npm:0.10.3" @@ -31776,15 +31086,6 @@ __metadata: languageName: node linkType: hard -"warning@npm:^4.0.2": - version: 4.0.3 - resolution: "warning@npm:4.0.3" - dependencies: - loose-envify: ^1.0.0 - checksum: aebab445129f3e104c271f1637fa38e55eb25f968593e3825bd2f7a12bd58dc3738bb70dc8ec85826621d80b4acfed5a29ebc9da17397c6125864d72301b937e - languageName: node - linkType: hard - "watchpack-chokidar2@npm:^2.0.1": version: 2.0.1 resolution: "watchpack-chokidar2@npm:2.0.1" @@ -32382,7 +31683,7 @@ __metadata: languageName: node linkType: hard -"websocket@npm:^1.0.32, websocket@npm:^1.0.34": +"websocket@npm:^1.0.32": version: 1.0.34 resolution: "websocket@npm:1.0.34" dependencies: From b6f364c99e59b478efd0f70e22c457f8d49f3d88 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 17:28:54 -0500 Subject: [PATCH 03/25] add missing deps --- .../auth-providers/supabase/web/package.json | 1 + yarn.lock | 71 ++++++++++++++++++- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/packages/auth-providers/supabase/web/package.json b/packages/auth-providers/supabase/web/package.json index 7af3d82d08ef..377a558f7e5e 100644 --- a/packages/auth-providers/supabase/web/package.json +++ b/packages/auth-providers/supabase/web/package.json @@ -28,6 +28,7 @@ "devDependencies": { "@babel/cli": "7.19.3", "@babel/core": "7.20.5", + "@supabase/supabase-js": "1.35.7", "@testing-library/react-hooks": "8.0.1", "@types/react": "17.0.50", "jest": "29.3.1", diff --git a/yarn.lock b/yarn.lock index 0ad7a5c0dd2e..e83dbe389760 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6600,6 +6600,7 @@ __metadata: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@supabase/supabase-js": 1.35.7 "@testing-library/react-hooks": 8.0.1 "@types/react": 17.0.50 core-js: 3.26.1 @@ -8786,6 +8787,65 @@ __metadata: languageName: node linkType: hard +"@supabase/functions-js@npm:^1.3.4": + version: 1.3.4 + resolution: "@supabase/functions-js@npm:1.3.4" + dependencies: + cross-fetch: ^3.1.5 + checksum: a20660ec406ab8e684edd0be1944585071f489da9e946ee7d9477d0259a95ef4cee1c3291f9aa0d61c00517b527ce0351001d05acd12e89c7d72a9b78aabef3c + languageName: node + linkType: hard + +"@supabase/gotrue-js@npm:^1.22.21": + version: 1.24.0 + resolution: "@supabase/gotrue-js@npm:1.24.0" + dependencies: + cross-fetch: ^3.0.6 + checksum: 83280170a36c93391290ebd94faa0c5b1eef269f5648450980f6a7ddb42f70efd54ee0e692bda57fd8ec60eb408b2e67cecbef7ce2423c1732c923d753b35429 + languageName: node + linkType: hard + +"@supabase/postgrest-js@npm:^0.37.4": + version: 0.37.4 + resolution: "@supabase/postgrest-js@npm:0.37.4" + dependencies: + cross-fetch: ^3.1.5 + checksum: 75fb3d94b0fb4360d7915a5cc211d5547834a344cc0d07633f61b6ffab099ec864b47a0a7d1551e5c2200af1eb50f7cf44fead8b1cc0b35f805d43b8eddeff3c + languageName: node + linkType: hard + +"@supabase/realtime-js@npm:^1.7.5": + version: 1.7.5 + resolution: "@supabase/realtime-js@npm:1.7.5" + dependencies: + "@types/phoenix": ^1.5.4 + websocket: ^1.0.34 + checksum: a9be4e73df7eff9e5928cba2b8bac4849a2f61d9f82cbbdefc6e767cbf6ed4326a3e0f477b21bb7716c3707cae3acf3182912e4c3a2a00790fb78b78d1c20b49 + languageName: node + linkType: hard + +"@supabase/storage-js@npm:^1.7.2": + version: 1.7.3 + resolution: "@supabase/storage-js@npm:1.7.3" + dependencies: + cross-fetch: ^3.1.0 + checksum: eda7a3b6ad1be90e7a76dd024f31e089a96d9138acbbd047948d191dc67acdd125520b69206e44cae69db405d624cc649c86a61814b25a4b6db4b04817512423 + languageName: node + linkType: hard + +"@supabase/supabase-js@npm:1.35.7": + version: 1.35.7 + resolution: "@supabase/supabase-js@npm:1.35.7" + dependencies: + "@supabase/functions-js": ^1.3.4 + "@supabase/gotrue-js": ^1.22.21 + "@supabase/postgrest-js": ^0.37.4 + "@supabase/realtime-js": ^1.7.5 + "@supabase/storage-js": ^1.7.2 + checksum: a0574c6c4795adb8bc0908dc6a00e127c118b7eb5d916516863de0d2c3cd8eb5a4d5401791d968e61c131217674f8063436508e1de44fbfaad08180010491ce5 + languageName: node + linkType: hard + "@szmarczak/http-timer@npm:^1.1.2": version: 1.1.2 resolution: "@szmarczak/http-timer@npm:1.1.2" @@ -9680,6 +9740,13 @@ __metadata: languageName: node linkType: hard +"@types/phoenix@npm:^1.5.4": + version: 1.5.4 + resolution: "@types/phoenix@npm:1.5.4" + checksum: ea146325918847b94c545d99c62d233dca9cf71111bed674eeee3c75e5a8e967fe785c9cf70e4b869c12337200955346bce63fa42de2eb3969f7db621c2da48b + languageName: node + linkType: hard + "@types/prettier@npm:*, @types/prettier@npm:2.7.1, @types/prettier@npm:^2.1.5": version: 2.7.1 resolution: "@types/prettier@npm:2.7.1" @@ -14324,7 +14391,7 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:^3.1.5": +"cross-fetch@npm:^3.0.6, cross-fetch@npm:^3.1.0, cross-fetch@npm:^3.1.5": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" dependencies: @@ -31683,7 +31750,7 @@ __metadata: languageName: node linkType: hard -"websocket@npm:^1.0.32": +"websocket@npm:^1.0.32, websocket@npm:^1.0.34": version: 1.0.34 resolution: "websocket@npm:1.0.34" dependencies: From c9dcbb4c106a53ad8a29c3d4696b40242a42f60a Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 17:39:52 -0500 Subject: [PATCH 04/25] fix clerk type error --- packages/auth-providers/clerk/api/src/decoder.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/auth-providers/clerk/api/src/decoder.ts b/packages/auth-providers/clerk/api/src/decoder.ts index 7860954570ea..2f60ec21f71b 100644 --- a/packages/auth-providers/clerk/api/src/decoder.ts +++ b/packages/auth-providers/clerk/api/src/decoder.ts @@ -1,4 +1,4 @@ -import base, { users } from '@clerk/clerk-sdk-node' +import clerk, { users } from '@clerk/clerk-sdk-node' import { Decoder } from '@redwoodjs/api' @@ -13,7 +13,7 @@ export const authDecoder: Decoder = async (token: string, type: string) => { } try { - const jwtPayload = await base.verifySessionToken(token) + const jwtPayload = await clerk.base.verifySessionToken(token) if (!jwtPayload.sub) { return Promise.reject(new Error('Session invalid')) From cc5af3c2925b6b8af01e514376f426f476d68f6a Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 17:57:43 -0500 Subject: [PATCH 05/25] convert other setup handlers --- .../src/ethereum/setup.ts | 41 ++++--------------- .../src/ethereum/setupHandler.ts | 35 ++++++++++++++++ .../auth-providers-setup/src/goTrue/setup.ts | 30 ++++---------- .../src/goTrue/setupHandler.ts | 24 +++++++++++ .../src/magicLink/setup.ts | 30 ++++---------- .../src/magicLink/setupHandler.ts | 27 ++++++++++++ .../auth-providers-setup/src/nhost/setup.ts | 29 ++++--------- .../src/nhost/setupHandler.ts | 26 ++++++++++++ .../auth-providers-setup/src/okta/setup.ts | 25 ++++------- .../src/okta/setupHandler.ts | 25 +++++++++++ 10 files changed, 172 insertions(+), 120 deletions(-) create mode 100644 packages/auth-providers-setup/src/ethereum/setupHandler.ts create mode 100644 packages/auth-providers-setup/src/goTrue/setupHandler.ts create mode 100644 packages/auth-providers-setup/src/magicLink/setupHandler.ts create mode 100644 packages/auth-providers-setup/src/nhost/setupHandler.ts create mode 100644 packages/auth-providers-setup/src/okta/setupHandler.ts diff --git a/packages/auth-providers-setup/src/ethereum/setup.ts b/packages/auth-providers-setup/src/ethereum/setup.ts index c2fa5c43ad8a..9dc4bf4ebf39 100644 --- a/packages/auth-providers-setup/src/ethereum/setup.ts +++ b/packages/auth-providers-setup/src/ethereum/setup.ts @@ -1,46 +1,19 @@ import yargs from 'yargs' -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' export const command = 'ethereum' export const description = 'Generate an auth configuration for Ethereum' -export const builder = (yargs: yargs.Argv) => { + +export function builder(yargs: yargs.Argv) { return standardAuthBuilder(yargs) } -interface Args { - rwVersion: string +export interface Args { force: boolean } -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'ethereum', - authDecoderImport: - "import { ethereumAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", - apiPackages: [ - '@redwoodjs/auth-providers-api', - 'ethereumjs-util', - 'eth-sig-util', - 'jsonwebtoken', - ], - webPackages: [ - '@redwoodjs/auth-providers-web', - '@oneclickdapp/ethereum-auth', - '@apollo/client', - ], - notes: [ - 'There are a couple more things you need to do!', - 'Please see the readme for instructions:', - 'https://github.com/oneclickdapp/ethereum-auth', - 'This is a FOSS community-maintained package.', - 'Help us make it better!', - ], - }) +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) } diff --git a/packages/auth-providers-setup/src/ethereum/setupHandler.ts b/packages/auth-providers-setup/src/ethereum/setupHandler.ts new file mode 100644 index 000000000000..c45e1acd4338 --- /dev/null +++ b/packages/auth-providers-setup/src/ethereum/setupHandler.ts @@ -0,0 +1,35 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export async function handler({ force: forceArg }: Args) { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'ethereum', + authDecoderImport: + "import { ethereumAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", + apiPackages: [ + `@redwoodjs/auth-providers-api@${version}`, + 'ethereumjs-util', + 'eth-sig-util', + 'jsonwebtoken', + ], + webPackages: [ + `@redwoodjs/auth-providers-web@${version}`, + '@oneclickdapp/ethereum-auth', + '@apollo/client', + ], + notes: [ + 'There are a couple more things you need to do!', + 'Please see the readme for instructions:', + 'https://github.com/oneclickdapp/ethereum-auth', + 'This is a FOSS community-maintained package.', + 'Help us make it better!', + ], + }) +} diff --git a/packages/auth-providers-setup/src/goTrue/setup.ts b/packages/auth-providers-setup/src/goTrue/setup.ts index 1491a9cd910d..ca9e039936d0 100644 --- a/packages/auth-providers-setup/src/goTrue/setup.ts +++ b/packages/auth-providers-setup/src/goTrue/setup.ts @@ -1,35 +1,19 @@ import yargs from 'yargs' -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' export const command = 'goTrue' export const description = 'Generate an auth configuration for goTrue' -export const builder = (yargs: yargs.Argv) => { + +export function builder(yargs: yargs.Argv) { return standardAuthBuilder(yargs) } -interface Args { - rwVersion: string +export interface Args { force: boolean } -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'goTrue', - authDecoderImport: - "import { goTrueAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", - apiPackages: ['@redwoodjs/auth-providers-api'], - webPackages: ['gotrue-js', '@redwoodjs/auth-providers-web'], - notes: [ - 'You will need to enable Identity on your Netlify site and set APIUrl', - 'to your API endpoint in your GoTrue client config.', - 'See: https://redwoodjs.com/docs/auth/gotrue', - ], - }) +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) } diff --git a/packages/auth-providers-setup/src/goTrue/setupHandler.ts b/packages/auth-providers-setup/src/goTrue/setupHandler.ts new file mode 100644 index 000000000000..e393dfbf626e --- /dev/null +++ b/packages/auth-providers-setup/src/goTrue/setupHandler.ts @@ -0,0 +1,24 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export async function handler({ force: forceArg }: Args) { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'goTrue', + authDecoderImport: + "import { goTrueAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", + apiPackages: [`@redwoodjs/auth-providers-api@${version}`], + webPackages: ['gotrue-js', `@redwoodjs/auth-providers-web@${version}`], + notes: [ + 'You will need to enable Identity on your Netlify site and set APIUrl', + 'to your API endpoint in your GoTrue client config.', + 'See: https://redwoodjs.com/docs/auth/gotrue', + ], + }) +} diff --git a/packages/auth-providers-setup/src/magicLink/setup.ts b/packages/auth-providers-setup/src/magicLink/setup.ts index aff7330c51b0..1affed35c848 100644 --- a/packages/auth-providers-setup/src/magicLink/setup.ts +++ b/packages/auth-providers-setup/src/magicLink/setup.ts @@ -1,35 +1,19 @@ import yargs from 'yargs' -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' export const command = 'magicLink' export const description = 'Generate an auth configuration for MagicLink' -export const builder = (yargs: yargs.Argv) => { + +export function builder(yargs: yargs.Argv) { return standardAuthBuilder(yargs) } -interface Args { - rwVersion: string +export interface Args { force: boolean } -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'magicLink', - authDecoderImport: - "import { magicLinkAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", - apiPackages: ['@redwoodjs/auth-providers-api', '@magic-sdk/admin'], - webPackages: ['@redwoodjs/auth-providers-web', 'magic-sdk'], - notes: [ - 'To get your application keys, go to https://dashboard.magic.link/login ', - 'Then navigate to the API keys add them to your .env config options.', - 'See: https://redwoodjs.com/docs/authentication#for-magiclink', - ], - }) +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) } diff --git a/packages/auth-providers-setup/src/magicLink/setupHandler.ts b/packages/auth-providers-setup/src/magicLink/setupHandler.ts new file mode 100644 index 000000000000..2e3ba6a0802e --- /dev/null +++ b/packages/auth-providers-setup/src/magicLink/setupHandler.ts @@ -0,0 +1,27 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export async function handler({ force: forceArg }: Args) { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'magicLink', + authDecoderImport: + "import { magicLinkAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", + apiPackages: [ + `@redwoodjs/auth-providers-api@${version}`, + '@magic-sdk/admin', + ], + webPackages: [`@redwoodjs/auth-providers-web@${version}`, 'magic-sdk'], + notes: [ + 'To get your application keys, go to https://dashboard.magic.link/login ', + 'Then navigate to the API keys add them to your .env config options.', + 'See: https://redwoodjs.com/docs/authentication#for-magiclink', + ], + }) +} diff --git a/packages/auth-providers-setup/src/nhost/setup.ts b/packages/auth-providers-setup/src/nhost/setup.ts index 6fb52a44db01..b3237f3fab09 100644 --- a/packages/auth-providers-setup/src/nhost/setup.ts +++ b/packages/auth-providers-setup/src/nhost/setup.ts @@ -1,34 +1,19 @@ import yargs from 'yargs' -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' export const command = 'nhost' export const description = 'Generate an auth configuration for nhost' -export const builder = (yargs: yargs.Argv) => { + +export function builder(yargs: yargs.Argv) { return standardAuthBuilder(yargs) } -interface Args { - rwVersion: string +export interface Args { force: boolean } -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'nhost', - authDecoderImport: - "import { nhostAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", - apiPackages: ['@redwoodjs/auth-providers-api'], - webPackages: ['@redwoodjs/auth-providers-web', '@nhost/nhost-js'], - notes: [ - "You will need to add your project's backend URL (NHOST_BACKEND_URL) and", - 'JWT Key Secret (NHOST_JWT_SECRET) to your .env file.', - ], - }) +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) } diff --git a/packages/auth-providers-setup/src/nhost/setupHandler.ts b/packages/auth-providers-setup/src/nhost/setupHandler.ts new file mode 100644 index 000000000000..9a3ca356f37f --- /dev/null +++ b/packages/auth-providers-setup/src/nhost/setupHandler.ts @@ -0,0 +1,26 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export async function handler({ force: forceArg }: Args) { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'nhost', + authDecoderImport: + "import { nhostAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", + apiPackages: [`@redwoodjs/auth-providers-api@${version}`], + webPackages: [ + `@redwoodjs/auth-providers-web@${version}`, + '@nhost/nhost-js', + ], + notes: [ + "You will need to add your project's backend URL (NHOST_BACKEND_URL) and", + 'JWT Key Secret (NHOST_JWT_SECRET) to your .env file.', + ], + }) +} diff --git a/packages/auth-providers-setup/src/okta/setup.ts b/packages/auth-providers-setup/src/okta/setup.ts index 18117f5812a5..bdb02d2e5949 100644 --- a/packages/auth-providers-setup/src/okta/setup.ts +++ b/packages/auth-providers-setup/src/okta/setup.ts @@ -1,30 +1,19 @@ import yargs from 'yargs' -import { - standardAuthBuilder, - standardAuthHandler, -} from '@redwoodjs/cli-helpers' +import { standardAuthBuilder } from '@redwoodjs/cli-helpers' export const command = 'okta' export const description = 'Generate an auth configuration for Okta' -export const builder = (yargs: yargs.Argv) => { + +export function builder(yargs: yargs.Argv) { return standardAuthBuilder(yargs) } -interface Args { - rwVersion: string +export interface Args { force: boolean } -export const handler = async ({ rwVersion, force: forceArg }: Args) => { - standardAuthHandler({ - basedir: __dirname, - rwVersion, - forceArg, - provider: 'okta', - authDecoderImport: - "import { oktaAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", - webPackages: ['@okta/okta-auth-js', '@redwoodjs/auth-providers-web'], - apiPackages: ['@okta/jwt-verifier', '@redwoodjs/auth-providers-api'], - }) +export async function handler(options: Args) { + const { handler } = await import('./setupHandler') + return handler(options) } diff --git a/packages/auth-providers-setup/src/okta/setupHandler.ts b/packages/auth-providers-setup/src/okta/setupHandler.ts new file mode 100644 index 000000000000..0e1107b3df96 --- /dev/null +++ b/packages/auth-providers-setup/src/okta/setupHandler.ts @@ -0,0 +1,25 @@ +import fs from 'fs' + +import { standardAuthHandler } from '@redwoodjs/cli-helpers' + +import { Args } from './setup' + +const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) + +export const handler = async ({ force: forceArg }: Args) => { + standardAuthHandler({ + basedir: __dirname, + forceArg, + provider: 'okta', + authDecoderImport: + "import { oktaAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api'", + webPackages: [ + '@okta/okta-auth-js', + `@redwoodjs/auth-providers-web@${version}`, + ], + apiPackages: [ + '@okta/jwt-verifier', + `@redwoodjs/auth-providers-api@${version}`, + ], + }) +} From 6f18841fc87476315c91ef177a3cfd582a9a34b1 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 18:05:12 -0500 Subject: [PATCH 06/25] fix clerk test --- packages/auth-providers/clerk/api/src/decoder.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/auth-providers/clerk/api/src/decoder.ts b/packages/auth-providers/clerk/api/src/decoder.ts index 2f60ec21f71b..82933a6470fe 100644 --- a/packages/auth-providers/clerk/api/src/decoder.ts +++ b/packages/auth-providers/clerk/api/src/decoder.ts @@ -1,5 +1,3 @@ -import clerk, { users } from '@clerk/clerk-sdk-node' - import { Decoder } from '@redwoodjs/api' export const authDecoder: Decoder = async (token: string, type: string) => { @@ -12,6 +10,8 @@ export const authDecoder: Decoder = async (token: string, type: string) => { throw new Error('CLERK_JWT_KEY env var is not set.') } + const { users, default: clerk } = await import('@clerk/clerk-sdk-node') + try { const jwtPayload = await clerk.base.verifySessionToken(token) From 4fcd9f737dfd680656de20af35a4797910b707a9 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 18:26:10 -0500 Subject: [PATCH 07/25] Update packages/auth-providers/clerk/web/package.json Co-authored-by: Tobbe Lundberg --- packages/auth-providers/clerk/web/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/auth-providers/clerk/web/package.json b/packages/auth-providers/clerk/web/package.json index 49aced7e2c69..dd9dbbf7338c 100644 --- a/packages/auth-providers/clerk/web/package.json +++ b/packages/auth-providers/clerk/web/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/auth-clerk-web", + "name": "@redwoodjs/clerk-web", "version": "3.2.0", "repository": { "type": "git", From 440db8db76f4772a4a1b6727bfd72a7bd468af9a Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 18:18:55 -0500 Subject: [PATCH 08/25] fix cli auth setup command --- packages/cli/package.json | 1 + packages/cli/src/commands/setup/auth/auth.js | 35 ++++++++------------ yarn.lock | 3 +- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index ef090067f7bf..adf6ecadaaa0 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -32,6 +32,7 @@ "@prisma/internals": "4.7.0", "@redwoodjs/api-server": "3.2.0", "@redwoodjs/auth-providers-setup": "3.2.0", + "@redwoodjs/dbauth-setup": "3.2.0", "@redwoodjs/internal": "3.2.0", "@redwoodjs/prerender": "3.2.0", "@redwoodjs/structure": "3.2.0", diff --git a/packages/cli/src/commands/setup/auth/auth.js b/packages/cli/src/commands/setup/auth/auth.js index a27521e73d83..ca1f2d8fcb16 100644 --- a/packages/cli/src/commands/setup/auth/auth.js +++ b/packages/cli/src/commands/setup/auth/auth.js @@ -9,16 +9,13 @@ export const description = 'Generate an auth configuration' export async function builder(yargs) { const { - setupAuthClerkCommand, - setupAuthDbAuthCommand, setupAuthEthereumCommand, setupAuthGoTrueCommand, setupAuthMagicLinkCommand, setupAuthNhostCommand, setupAuthOktaCommand, - setupAuthSupabaseCommand, - setupAuthSupertokensCommand, } = await import('@redwoodjs/auth-providers-setup') + // Don't forget to update test-project setup if you change something here const printExperimentalWarning = async (argv, yargs) => { if (!argv.warn) { @@ -61,18 +58,13 @@ export async function builder(yargs) { 'https://redwoodjs.com/docs/cli-commands#setup-auth' )}` ) - - .command(setupAuthClerkCommand) - .command(setupAuthDbAuthCommand) .command(setupAuthEthereumCommand) .command(setupAuthGoTrueCommand) .command(setupAuthMagicLinkCommand) .command(setupAuthNhostCommand) .command(setupAuthOktaCommand) - .command(setupAuthSupabaseCommand) - .command(setupAuthSupertokensCommand) - async function addSetupCommand(module, namedExport) { + async function addSetupCommand(module) { let commandModule try { @@ -86,20 +78,21 @@ export async function builder(yargs) { } if (commandModule) { - setupAuthCommand.command(commandModule[namedExport]) + setupAuthCommand.command(commandModule) } } - for (const [module, namedExport] of [ - ['@redwoodjs/auth-auth0-setup', 'setupAuthAuth0Command'], - [ - '@redwoodjs/auth-azure-active-directory-setup', - 'setupAuthAzureActiveDirectoryCommand ', - ], - ['@redwoodjs/auth-custom-setup', 'setupAuthCustomCommand'], - ['@redwoodjs/auth-netlify-setup', 'setupAuthNetlifyCommand'], - ['@redwoodjs/auth-firebase-setup', 'setupAuthFirebaseCommand'], + for (const module of [ + '@redwoodjs/auth0-setup', + '@redwoodjs/auth-custom-setup', + '@redwoodjs/auth-netlify-setup', + '@redwoodjs/auth-firebase-setup', + '@redwoodjs/azure-active-directory-setup', + '@redwoodjs/clerk-setup', + '@redwoodjs/dbauth-setup', + '@redwoodjs/auth-supabase-setup', + '@redwoodjs/supertokens-setup', ]) { - await addSetupCommand(module, namedExport) + await addSetupCommand(module) } } diff --git a/yarn.lock b/yarn.lock index e83dbe389760..4a9610cf7d56 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6779,6 +6779,7 @@ __metadata: "@prisma/internals": 4.7.0 "@redwoodjs/api-server": 3.2.0 "@redwoodjs/auth-providers-setup": 3.2.0 + "@redwoodjs/dbauth-setup": 3.2.0 "@redwoodjs/internal": 3.2.0 "@redwoodjs/prerender": 3.2.0 "@redwoodjs/structure": 3.2.0 @@ -6953,7 +6954,7 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/dbauth-setup@workspace:packages/auth-providers/dbAuth/setup": +"@redwoodjs/dbauth-setup@3.2.0, @redwoodjs/dbauth-setup@workspace:packages/auth-providers/dbAuth/setup": version: 0.0.0-use.local resolution: "@redwoodjs/dbauth-setup@workspace:packages/auth-providers/dbAuth/setup" dependencies: From cb047e51140cddf10b189ec0b6384634bab88b03 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 18:27:10 -0500 Subject: [PATCH 09/25] fix auth0 setup name, yarn install --- .../auth-providers/auth0/setup/package.json | 2 +- yarn.lock | 72 +++++++++---------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/packages/auth-providers/auth0/setup/package.json b/packages/auth-providers/auth0/setup/package.json index 19c649c3c687..9d210cccef2e 100644 --- a/packages/auth-providers/auth0/setup/package.json +++ b/packages/auth-providers/auth0/setup/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/auth-auth0-setup", + "name": "@redwoodjs/auth0-setup", "version": "3.2.0", "repository": { "type": "git", diff --git a/yarn.lock b/yarn.lock index 4a9610cf7d56..82e0c0d778e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6330,42 +6330,6 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth-auth0-setup@workspace:packages/auth-providers/auth0/setup": - version: 0.0.0-use.local - resolution: "@redwoodjs/auth-auth0-setup@workspace:packages/auth-providers/auth0/setup" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/cli-helpers": 3.2.0 - "@types/yargs": 17.0.13 - core-js: 3.26.1 - jest: 29.3.1 - typescript: 4.7.4 - languageName: unknown - linkType: soft - -"@redwoodjs/auth-clerk-web@workspace:packages/auth-providers/clerk/web": - version: 0.0.0-use.local - resolution: "@redwoodjs/auth-clerk-web@workspace:packages/auth-providers/clerk/web" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@clerk/clerk-react": 3.5.1 - "@clerk/types": 2.21.0 - "@redwoodjs/auth": 3.2.0 - "@testing-library/react-hooks": 8.0.1 - "@types/react": 17.0.50 - core-js: 3.26.1 - jest: 29.3.1 - react: 17.0.2 - typescript: 4.7.4 - peerDependencies: - "@clerk/clerk-react": 3.5.1 - languageName: unknown - linkType: soft - "@redwoodjs/auth-custom-setup@workspace:packages/auth-providers/custom/setup": version: 0.0.0-use.local resolution: "@redwoodjs/auth-custom-setup@workspace:packages/auth-providers/custom/setup" @@ -6629,6 +6593,21 @@ __metadata: languageName: unknown linkType: soft +"@redwoodjs/auth0-setup@workspace:packages/auth-providers/auth0/setup": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth0-setup@workspace:packages/auth-providers/auth0/setup" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/cli-helpers": 3.2.0 + "@types/yargs": 17.0.13 + core-js: 3.26.1 + jest: 29.3.1 + typescript: 4.7.4 + languageName: unknown + linkType: soft + "@redwoodjs/auth0-web@workspace:packages/auth-providers/auth0/web": version: 0.0.0-use.local resolution: "@redwoodjs/auth0-web@workspace:packages/auth-providers/auth0/web" @@ -6752,6 +6731,27 @@ __metadata: languageName: unknown linkType: soft +"@redwoodjs/clerk-web@workspace:packages/auth-providers/clerk/web": + version: 0.0.0-use.local + resolution: "@redwoodjs/clerk-web@workspace:packages/auth-providers/clerk/web" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@clerk/clerk-react": 3.5.1 + "@clerk/types": 2.21.0 + "@redwoodjs/auth": 3.2.0 + "@testing-library/react-hooks": 8.0.1 + "@types/react": 17.0.50 + core-js: 3.26.1 + jest: 29.3.1 + react: 17.0.2 + typescript: 4.7.4 + peerDependencies: + "@clerk/clerk-react": 3.5.1 + languageName: unknown + linkType: soft + "@redwoodjs/cli-helpers@3.2.0, @redwoodjs/cli-helpers@workspace:packages/cli-helpers": version: 0.0.0-use.local resolution: "@redwoodjs/cli-helpers@workspace:packages/cli-helpers" From 78d9dcb23560c5b3c5e6341bb54512cf5920ac5d Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 19:14:28 -0500 Subject: [PATCH 10/25] maybe the fix --- package.json | 2 +- yarn.lock | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/package.json b/package.json index 681e0c0c4f39..cc2aec095fac 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "license": "MIT", "workspaces": [ "packages/*", - "packages/auth-providers/**/*" + "packages/auth-providers/*/*" ], "scripts": { "build": "lerna run build", diff --git a/yarn.lock b/yarn.lock index 82e0c0d778e1..4d9816b90c4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31369,12 +31369,6 @@ __metadata: languageName: node linkType: hard -"webAuthn-0dbb62@workspace:packages/auth-providers/dbAuth/web/webAuthn": - version: 0.0.0-use.local - resolution: "webAuthn-0dbb62@workspace:packages/auth-providers/dbAuth/web/webAuthn" - languageName: unknown - linkType: soft - "webcrypto-core@npm:^1.7.4": version: 1.7.5 resolution: "webcrypto-core@npm:1.7.5" From 8469527552552e1a96afe11a89e13281114303b5 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 19:56:49 -0500 Subject: [PATCH 11/25] fix setup handlers exports --- packages/auth-providers/auth0/setup/src/index.ts | 2 +- packages/auth-providers/auth0/setup/src/setupHandler.ts | 5 ++++- .../auth-providers/azureActiveDirectory/setup/src/index.ts | 2 +- .../azureActiveDirectory/setup/src/setupHandler.ts | 7 +++++-- packages/auth-providers/clerk/setup/src/index.ts | 2 +- packages/auth-providers/clerk/setup/src/setupHandler.ts | 5 ++++- packages/auth-providers/custom/setup/src/index.ts | 2 +- packages/auth-providers/custom/setup/src/setupHandler.ts | 5 ++++- packages/auth-providers/dbAuth/setup/src/index.ts | 2 +- packages/auth-providers/dbAuth/setup/src/setupHandler.ts | 5 ++++- packages/auth-providers/firebase/setup/src/index.ts | 2 +- packages/auth-providers/firebase/setup/src/setupHandler.ts | 5 ++++- packages/auth-providers/netlify/setup/src/index.ts | 2 +- packages/auth-providers/netlify/setup/src/setupHandler.ts | 5 ++++- packages/auth-providers/supabase/setup/src/index.ts | 2 +- packages/auth-providers/supabase/setup/src/setupHandler.ts | 5 ++++- packages/auth-providers/supertokens/setup/src/index.ts | 2 +- .../auth-providers/supertokens/setup/src/setupHandler.ts | 5 ++++- 18 files changed, 46 insertions(+), 19 deletions(-) diff --git a/packages/auth-providers/auth0/setup/src/index.ts b/packages/auth-providers/auth0/setup/src/index.ts index c8688a8da674..5a774a6b36e2 100644 --- a/packages/auth-providers/auth0/setup/src/index.ts +++ b/packages/auth-providers/auth0/setup/src/index.ts @@ -1 +1 @@ -export * as setupAuthAuth0Command from './setup' +export * from './setup' diff --git a/packages/auth-providers/auth0/setup/src/setupHandler.ts b/packages/auth-providers/auth0/setup/src/setupHandler.ts index 30da553a9ace..d65ac901e610 100644 --- a/packages/auth-providers/auth0/setup/src/setupHandler.ts +++ b/packages/auth-providers/auth0/setup/src/setupHandler.ts @@ -1,10 +1,13 @@ import fs from 'fs' +import path from 'path' import { standardAuthHandler } from '@redwoodjs/cli-helpers' import { Args } from './setup' -const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) +const { version } = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8') +) export async function handler({ force: forceArg }: Args) { standardAuthHandler({ diff --git a/packages/auth-providers/azureActiveDirectory/setup/src/index.ts b/packages/auth-providers/azureActiveDirectory/setup/src/index.ts index f2cc0ebb8b77..5a774a6b36e2 100644 --- a/packages/auth-providers/azureActiveDirectory/setup/src/index.ts +++ b/packages/auth-providers/azureActiveDirectory/setup/src/index.ts @@ -1 +1 @@ -export * as setupAuthAzureActiveDirectoryCommand from './setup' +export * from './setup' diff --git a/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts b/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts index 217c90417b0d..e808a37621f9 100644 --- a/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts +++ b/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts @@ -1,11 +1,14 @@ import fs from 'fs' +import path from 'path' import { standardAuthHandler } from '@redwoodjs/cli-helpers' -const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) - import { Args } from './setup' +const { version } = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8') +) + export async function handler({ force: forceArg }: Args) { standardAuthHandler({ basedir: __dirname, diff --git a/packages/auth-providers/clerk/setup/src/index.ts b/packages/auth-providers/clerk/setup/src/index.ts index ae4f3bc966d7..5a774a6b36e2 100644 --- a/packages/auth-providers/clerk/setup/src/index.ts +++ b/packages/auth-providers/clerk/setup/src/index.ts @@ -1 +1 @@ -export * as setupAuthClerkCommand from './setup' +export * from './setup' diff --git a/packages/auth-providers/clerk/setup/src/setupHandler.ts b/packages/auth-providers/clerk/setup/src/setupHandler.ts index c372908be342..d1fbab052bce 100644 --- a/packages/auth-providers/clerk/setup/src/setupHandler.ts +++ b/packages/auth-providers/clerk/setup/src/setupHandler.ts @@ -1,10 +1,13 @@ import fs from 'fs' +import path from 'path' import { standardAuthHandler } from '@redwoodjs/cli-helpers' import { Args } from './setup' -const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) +const { version } = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8') +) export const handler = async ({ force: forceArg }: Args) => { standardAuthHandler({ diff --git a/packages/auth-providers/custom/setup/src/index.ts b/packages/auth-providers/custom/setup/src/index.ts index e6ab4ba035b2..5a774a6b36e2 100644 --- a/packages/auth-providers/custom/setup/src/index.ts +++ b/packages/auth-providers/custom/setup/src/index.ts @@ -1 +1 @@ -export * as setupAuthCustomCommand from './setup' +export * from './setup' diff --git a/packages/auth-providers/custom/setup/src/setupHandler.ts b/packages/auth-providers/custom/setup/src/setupHandler.ts index 1757bbfc8d4a..50460c80f00d 100644 --- a/packages/auth-providers/custom/setup/src/setupHandler.ts +++ b/packages/auth-providers/custom/setup/src/setupHandler.ts @@ -1,4 +1,5 @@ import fs from 'fs' +import path from 'path' import { isTypeScriptProject, @@ -7,7 +8,9 @@ import { import { Args } from './setup' -const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) +const { version } = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8') +) export async function handler({ force: forceArg }: Args) { const authFilename = isTypeScriptProject() ? 'auth.ts' : 'auth.js' diff --git a/packages/auth-providers/dbAuth/setup/src/index.ts b/packages/auth-providers/dbAuth/setup/src/index.ts index 733712750eb8..5a774a6b36e2 100644 --- a/packages/auth-providers/dbAuth/setup/src/index.ts +++ b/packages/auth-providers/dbAuth/setup/src/index.ts @@ -1 +1 @@ -export * as setupAuthDbAuthCommand from './setup' +export * from './setup' diff --git a/packages/auth-providers/dbAuth/setup/src/setupHandler.ts b/packages/auth-providers/dbAuth/setup/src/setupHandler.ts index 03a36def30ed..e2b6e1171871 100644 --- a/packages/auth-providers/dbAuth/setup/src/setupHandler.ts +++ b/packages/auth-providers/dbAuth/setup/src/setupHandler.ts @@ -1,4 +1,5 @@ import fs from 'fs' +import path from 'path' import prompts from 'prompts' @@ -13,7 +14,9 @@ import { apiPackages as webAuthnApiPackages, } from './webAuthn.setupData' -const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) +const { version } = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8') +) export async function handler({ webauthn, force: forceArg }: Args) { const webAuthn = await shouldIncludeWebAuthn(webauthn) diff --git a/packages/auth-providers/firebase/setup/src/index.ts b/packages/auth-providers/firebase/setup/src/index.ts index e924f0f290ea..5a774a6b36e2 100644 --- a/packages/auth-providers/firebase/setup/src/index.ts +++ b/packages/auth-providers/firebase/setup/src/index.ts @@ -1 +1 @@ -export * as setupAuthFirebaseCommand from './setup' +export * from './setup' diff --git a/packages/auth-providers/firebase/setup/src/setupHandler.ts b/packages/auth-providers/firebase/setup/src/setupHandler.ts index 391bfaa47905..e1efd3d2859f 100644 --- a/packages/auth-providers/firebase/setup/src/setupHandler.ts +++ b/packages/auth-providers/firebase/setup/src/setupHandler.ts @@ -1,10 +1,13 @@ import fs from 'fs' +import path from 'path' import { standardAuthHandler } from '@redwoodjs/cli-helpers' import { Args } from './setup' -const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) +const { version } = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8') +) export async function handler({ force: forceArg }: Args) { standardAuthHandler({ diff --git a/packages/auth-providers/netlify/setup/src/index.ts b/packages/auth-providers/netlify/setup/src/index.ts index 32c58bfa27c9..5a774a6b36e2 100644 --- a/packages/auth-providers/netlify/setup/src/index.ts +++ b/packages/auth-providers/netlify/setup/src/index.ts @@ -1 +1 @@ -export * as setupAuthNetlifyCommand from './setup' +export * from './setup' diff --git a/packages/auth-providers/netlify/setup/src/setupHandler.ts b/packages/auth-providers/netlify/setup/src/setupHandler.ts index ee65ebb4ab68..08ff127d751d 100644 --- a/packages/auth-providers/netlify/setup/src/setupHandler.ts +++ b/packages/auth-providers/netlify/setup/src/setupHandler.ts @@ -1,10 +1,13 @@ import fs from 'fs' +import path from 'path' import { standardAuthHandler } from '@redwoodjs/cli-helpers' import { Args } from './setup' -const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) +const { version } = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8') +) export async function handler({ force: forceArg }: Args) { standardAuthHandler({ diff --git a/packages/auth-providers/supabase/setup/src/index.ts b/packages/auth-providers/supabase/setup/src/index.ts index 2769cf70833d..5a774a6b36e2 100644 --- a/packages/auth-providers/supabase/setup/src/index.ts +++ b/packages/auth-providers/supabase/setup/src/index.ts @@ -1 +1 @@ -export * as setupAuthSupabaseCommand from './setup' +export * from './setup' diff --git a/packages/auth-providers/supabase/setup/src/setupHandler.ts b/packages/auth-providers/supabase/setup/src/setupHandler.ts index c1d4795de530..82fec351a928 100644 --- a/packages/auth-providers/supabase/setup/src/setupHandler.ts +++ b/packages/auth-providers/supabase/setup/src/setupHandler.ts @@ -1,10 +1,13 @@ import fs from 'fs' +import path from 'path' import { standardAuthHandler } from '@redwoodjs/cli-helpers' import { Args } from './setup' -const { version } = JSON.parse(fs.readFileSync('../package.json', 'utf-8')) +const { version } = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8') +) export const handler = async ({ force: forceArg }: Args) => { standardAuthHandler({ diff --git a/packages/auth-providers/supertokens/setup/src/index.ts b/packages/auth-providers/supertokens/setup/src/index.ts index 216bc26c9a65..5a774a6b36e2 100644 --- a/packages/auth-providers/supertokens/setup/src/index.ts +++ b/packages/auth-providers/supertokens/setup/src/index.ts @@ -1 +1 @@ -export * as setupAuthSupertokensCommand from './setup' +export * from './setup' diff --git a/packages/auth-providers/supertokens/setup/src/setupHandler.ts b/packages/auth-providers/supertokens/setup/src/setupHandler.ts index 2e941bd9c053..58ac9b602441 100644 --- a/packages/auth-providers/supertokens/setup/src/setupHandler.ts +++ b/packages/auth-providers/supertokens/setup/src/setupHandler.ts @@ -1,10 +1,13 @@ import fs from 'fs' +import path from 'path' import { standardAuthHandler } from '@redwoodjs/cli-helpers' import { Args } from './setup' -const { version } = JSON.parse(fs.readFileSync('package.json', 'utf-8')) +const { version } = JSON.parse( + fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf-8') +) export async function handler({ force: forceArg }: Args) { standardAuthHandler({ From 2b54971053b200a4ff63a3ef16a5af018a79ea7d Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 20:59:19 -0500 Subject: [PATCH 12/25] dbauth fixes --- .../setup/src/templates/web/auth.webAuthn.ts.template | 2 +- .../dbAuth/setup/src/webAuthn.setupData.ts | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template b/packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template index e0c215ee067b..77d1892449d9 100644 --- a/packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template +++ b/packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template @@ -1,4 +1,4 @@ -import { createDbAuth } from '@redwoodjs/auth-providers-web' +import { createDbAuth } from '@redwoodjs/dbauth-web' import WebAuthnClient from '@redwoodjs/@redwoodjs/dbauth-web/webAuthn' export const { AuthProvider, useAuth } = createDbAuth(WebAuthnClient) diff --git a/packages/auth-providers/dbAuth/setup/src/webAuthn.setupData.ts b/packages/auth-providers/dbAuth/setup/src/webAuthn.setupData.ts index 0aceb9e06803..a490554d35db 100644 --- a/packages/auth-providers/dbAuth/setup/src/webAuthn.setupData.ts +++ b/packages/auth-providers/dbAuth/setup/src/webAuthn.setupData.ts @@ -8,16 +8,10 @@ import { functionsPath, libPath } from './setupData' export { extraTask } from './setupData' // required packages to install on the web side -export const webPackages = [ - '@redwoodjs/auth-providers-web', - '@simplewebauthn/browser', -] +export const webPackages = ['@redwoodjs/dbauth-web', '@simplewebauthn/browser'] // required packages to install on the api side -export const apiPackages = [ - '@redwoodjs/auth-providers-api', - '@simplewebauthn/server', -] +export const apiPackages = ['@redwoodjs/dbauth-api', '@simplewebauthn/server'] // any notes to print out when the job is done export const notes = [ From fbf60553ce88cadea90314857b0ac683986b08e8 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 21:01:56 -0500 Subject: [PATCH 13/25] test project fixture changes --- __fixtures__/test-project/api/package.json | 2 +- __fixtures__/test-project/api/src/functions/auth.ts | 2 +- __fixtures__/test-project/api/src/functions/graphql.ts | 2 +- __fixtures__/test-project/package.json | 3 ++- __fixtures__/test-project/web/package.json | 2 +- __fixtures__/test-project/web/src/auth.ts | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/__fixtures__/test-project/api/package.json b/__fixtures__/test-project/api/package.json index 4c1dca6f062b..58867c9787f5 100644 --- a/__fixtures__/test-project/api/package.json +++ b/__fixtures__/test-project/api/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@redwoodjs/api": "3.2.0", - "@redwoodjs/auth-providers-api": "^0.0.1", + "@redwoodjs/dbauth-api": "^0.0.1", "@redwoodjs/graphql-server": "3.2.0" } } diff --git a/__fixtures__/test-project/api/src/functions/auth.ts b/__fixtures__/test-project/api/src/functions/auth.ts index 28b7084fa1eb..5315eee0eb26 100644 --- a/__fixtures__/test-project/api/src/functions/auth.ts +++ b/__fixtures__/test-project/api/src/functions/auth.ts @@ -3,7 +3,7 @@ import type { APIGatewayProxyEvent, Context } from 'aws-lambda' import { DbAuthHandler, DbAuthHandlerOptions, -} from '@redwoodjs/auth-providers-api' +} from '@redwoodjs/dbauth-api' import { db } from 'src/lib/db' diff --git a/__fixtures__/test-project/api/src/functions/graphql.ts b/__fixtures__/test-project/api/src/functions/graphql.ts index 2aca7a75898a..6b5344806b63 100644 --- a/__fixtures__/test-project/api/src/functions/graphql.ts +++ b/__fixtures__/test-project/api/src/functions/graphql.ts @@ -1,4 +1,4 @@ -import { dbAuthAuthDecoder as authDecoder } from '@redwoodjs/auth-providers-api' +import { authDecoder } from '@redwoodjs/dbauth-api' import { createGraphQLHandler } from '@redwoodjs/graphql-server' import directives from 'src/directives/**/*.{js,ts}' diff --git a/__fixtures__/test-project/package.json b/__fixtures__/test-project/package.json index e3e54b9f9abc..afc946cc2fab 100644 --- a/__fixtures__/test-project/package.json +++ b/__fixtures__/test-project/package.json @@ -8,7 +8,8 @@ ] }, "devDependencies": { - "@redwoodjs/core": "3.2.0" + "@redwoodjs/core": "3.2.0", + "@redwoodjs/dbauth-setup": "^0.0.1" }, "eslintConfig": { "extends": "@redwoodjs/eslint-config", diff --git a/__fixtures__/test-project/web/package.json b/__fixtures__/test-project/web/package.json index 403558fb813d..b4744eefcfa0 100644 --- a/__fixtures__/test-project/web/package.json +++ b/__fixtures__/test-project/web/package.json @@ -14,7 +14,7 @@ }, "dependencies": { "@redwoodjs/auth": "3.2.0", - "@redwoodjs/auth-providers-web": "^0.0.1", + "@redwoodjs/dbauth-web": "^0.0.1", "@redwoodjs/forms": "3.2.0", "@redwoodjs/router": "3.2.0", "@redwoodjs/web": "3.2.0", diff --git a/__fixtures__/test-project/web/src/auth.ts b/__fixtures__/test-project/web/src/auth.ts index 6b66206d5583..0ba27ddb2e58 100644 --- a/__fixtures__/test-project/web/src/auth.ts +++ b/__fixtures__/test-project/web/src/auth.ts @@ -1,3 +1,3 @@ -import { createDbAuth } from '@redwoodjs/auth-providers-web' +import { createDbAuth } from '@redwoodjs/dbauth-web' export const { AuthProvider, useAuth } = createDbAuth() From 84fece77e33664982c3b0487b9d710b7a35d410f Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 21:11:20 -0500 Subject: [PATCH 14/25] remove cli dep --- packages/cli/package.json | 1 - yarn.lock | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index adf6ecadaaa0..ef090067f7bf 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -32,7 +32,6 @@ "@prisma/internals": "4.7.0", "@redwoodjs/api-server": "3.2.0", "@redwoodjs/auth-providers-setup": "3.2.0", - "@redwoodjs/dbauth-setup": "3.2.0", "@redwoodjs/internal": "3.2.0", "@redwoodjs/prerender": "3.2.0", "@redwoodjs/structure": "3.2.0", diff --git a/yarn.lock b/yarn.lock index 4d9816b90c4d..9cd1a6cdee8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6779,7 +6779,6 @@ __metadata: "@prisma/internals": 4.7.0 "@redwoodjs/api-server": 3.2.0 "@redwoodjs/auth-providers-setup": 3.2.0 - "@redwoodjs/dbauth-setup": 3.2.0 "@redwoodjs/internal": 3.2.0 "@redwoodjs/prerender": 3.2.0 "@redwoodjs/structure": 3.2.0 @@ -6954,7 +6953,7 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/dbauth-setup@3.2.0, @redwoodjs/dbauth-setup@workspace:packages/auth-providers/dbAuth/setup": +"@redwoodjs/dbauth-setup@workspace:packages/auth-providers/dbAuth/setup": version: 0.0.0-use.local resolution: "@redwoodjs/dbauth-setup@workspace:packages/auth-providers/dbAuth/setup" dependencies: From 1af91b311a561cacfa5586dc97a67cdd06288fcc Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 21:13:06 -0500 Subject: [PATCH 15/25] rm function --- packages/cli/src/commands/setup/auth/auth.js | 27 +++++++++----------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/packages/cli/src/commands/setup/auth/auth.js b/packages/cli/src/commands/setup/auth/auth.js index ca1f2d8fcb16..df3b42c64122 100644 --- a/packages/cli/src/commands/setup/auth/auth.js +++ b/packages/cli/src/commands/setup/auth/auth.js @@ -64,7 +64,17 @@ export async function builder(yargs) { .command(setupAuthNhostCommand) .command(setupAuthOktaCommand) - async function addSetupCommand(module) { + for (const module of [ + '@redwoodjs/auth0-setup', + '@redwoodjs/auth-custom-setup', + '@redwoodjs/auth-netlify-setup', + '@redwoodjs/auth-firebase-setup', + '@redwoodjs/azure-active-directory-setup', + '@redwoodjs/clerk-setup', + '@redwoodjs/dbauth-setup', + '@redwoodjs/auth-supabase-setup', + '@redwoodjs/supertokens-setup', + ]) { let commandModule try { @@ -74,6 +84,7 @@ export async function builder(yargs) { if (e.code === 'MODULE_NOT_FOUND') { return } + throw e } @@ -81,18 +92,4 @@ export async function builder(yargs) { setupAuthCommand.command(commandModule) } } - - for (const module of [ - '@redwoodjs/auth0-setup', - '@redwoodjs/auth-custom-setup', - '@redwoodjs/auth-netlify-setup', - '@redwoodjs/auth-firebase-setup', - '@redwoodjs/azure-active-directory-setup', - '@redwoodjs/clerk-setup', - '@redwoodjs/dbauth-setup', - '@redwoodjs/auth-supabase-setup', - '@redwoodjs/supertokens-setup', - ]) { - await addSetupCommand(module) - } } From 45fb46a8a4781b2882d519a6e59ff1d1441f6d0d Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 21:52:58 -0500 Subject: [PATCH 16/25] make names consistent for now --- .../auth-providers/auth0/api/package.json | 2 +- .../auth-providers/auth0/setup/package.json | 2 +- .../auth0/setup/src/setupHandler.ts | 7 +- .../setup/src/templates/web/auth.ts.template | 2 +- .../auth-providers/auth0/web/package.json | 2 +- .../azureActiveDirectory/api/package.json | 2 +- .../azureActiveDirectory/setup/package.json | 2 +- .../setup/src/setupHandler.ts | 6 +- .../azureActiveDirectory/web/package.json | 2 +- .../auth-providers/clerk/api/package.json | 2 +- .../auth-providers/clerk/setup/package.json | 2 +- .../clerk/setup/src/setupHandler.ts | 6 +- .../setup/src/templates/web/auth.tsx.template | 2 +- .../auth-providers/clerk/web/package.json | 2 +- .../auth-providers/dbAuth/api/package.json | 2 +- .../auth-providers/dbAuth/setup/package.json | 2 +- .../dbAuth/setup/src/setupHandler.ts | 7 +- .../templates/api/functions/auth.ts.template | 2 +- .../api/functions/auth.webAuthn.ts.template | 2 +- .../setup/src/templates/web/auth.ts.template | 2 +- .../templates/web/auth.webAuthn.ts.template | 4 +- .../dbAuth/setup/src/webAuthn.setupData.ts | 10 +- .../auth-providers/dbAuth/web/package.json | 2 +- .../netlify/setup/src/setupHandler.ts | 1 - .../supertokens/api/package.json | 2 +- .../supertokens/setup/package.json | 2 +- .../supertokens/setup/src/setupHandler.ts | 9 +- .../setup/src/templates/web/auth.ts.template | 2 +- .../supertokens/web/package.json | 2 +- packages/cli-helpers/src/auth/setupHelpers.ts | 6 +- yarn.lock | 448 +++++++++--------- 31 files changed, 278 insertions(+), 268 deletions(-) diff --git a/packages/auth-providers/auth0/api/package.json b/packages/auth-providers/auth0/api/package.json index cf0bfcfa0651..a829445c8b8b 100644 --- a/packages/auth-providers/auth0/api/package.json +++ b/packages/auth-providers/auth0/api/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/auth0-api", + "name": "@redwoodjs/auth-auth0-api", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/auth0/setup/package.json b/packages/auth-providers/auth0/setup/package.json index 9d210cccef2e..19c649c3c687 100644 --- a/packages/auth-providers/auth0/setup/package.json +++ b/packages/auth-providers/auth0/setup/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/auth0-setup", + "name": "@redwoodjs/auth-auth0-setup", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/auth0/setup/src/setupHandler.ts b/packages/auth-providers/auth0/setup/src/setupHandler.ts index d65ac901e610..b9974979f518 100644 --- a/packages/auth-providers/auth0/setup/src/setupHandler.ts +++ b/packages/auth-providers/auth0/setup/src/setupHandler.ts @@ -14,11 +14,12 @@ export async function handler({ force: forceArg }: Args) { basedir: __dirname, forceArg, provider: 'auth0', - authDecoderImport: "import { authDecoder } from '@redwoodjs/auth0-api'", - apiPackages: [`@redwoodjs/auth0-api@${version}`], + authDecoderImport: + "import { authDecoder } from '@redwoodjs/auth-auth0-api'", + apiPackages: [`@redwoodjs/auth-auth0-api@${version}`], webPackages: [ '@auth0/auth0-spa-js@1.22.5', - `@redwoodjs/auth0-web@${version}`, + `@redwoodjs/auth-auth0-web@${version}`, ], notes: [ 'You will need to create several environment variables with your Auth0 config options.', diff --git a/packages/auth-providers/auth0/setup/src/templates/web/auth.ts.template b/packages/auth-providers/auth0/setup/src/templates/web/auth.ts.template index e34084c85cde..9fb634ca6aa5 100644 --- a/packages/auth-providers/auth0/setup/src/templates/web/auth.ts.template +++ b/packages/auth-providers/auth0/setup/src/templates/web/auth.ts.template @@ -1,6 +1,6 @@ import { Auth0Client } from '@auth0/auth0-spa-js' -import { createAuth0Auth } from '@redwoodjs/auth0-web' +import { createAuth0Auth } from '@redwoodjs/auth-auth0-web' const auth0 = new Auth0Client({ domain: process.env.AUTH0_DOMAIN || '', diff --git a/packages/auth-providers/auth0/web/package.json b/packages/auth-providers/auth0/web/package.json index e522af313f7d..516aef5d62de 100644 --- a/packages/auth-providers/auth0/web/package.json +++ b/packages/auth-providers/auth0/web/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/auth0-web", + "name": "@redwoodjs/auth-auth0-web", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/azureActiveDirectory/api/package.json b/packages/auth-providers/azureActiveDirectory/api/package.json index bc91be10ac96..358e3e9ae601 100644 --- a/packages/auth-providers/azureActiveDirectory/api/package.json +++ b/packages/auth-providers/azureActiveDirectory/api/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/azure-active-directory-api", + "name": "@redwoodjs/auth-azure-active-directory-api", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/azureActiveDirectory/setup/package.json b/packages/auth-providers/azureActiveDirectory/setup/package.json index 768e6dc24f63..5864ecf0fecb 100644 --- a/packages/auth-providers/azureActiveDirectory/setup/package.json +++ b/packages/auth-providers/azureActiveDirectory/setup/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/azure-active-directory-setup", + "name": "@redwoodjs/auth-azure-active-directory-setup", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts b/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts index e808a37621f9..752dfd22eabe 100644 --- a/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts +++ b/packages/auth-providers/azureActiveDirectory/setup/src/setupHandler.ts @@ -15,10 +15,10 @@ export async function handler({ force: forceArg }: Args) { forceArg, provider: 'azureActiveDirectory', authDecoderImport: - "import { authDecoder } from '@redwoodjs/azure-active-directory-api'", - apiPackages: [`@redwoodjs/azure-active-directory-api@${version}`], + "import { authDecoder } from '@redwoodjs/auth-azure-active-directory-api'", + apiPackages: [`@redwoodjs/auth-azure-active-directory-api@${version}`], webPackages: [ - `@redwoodjs/azure-active-directory-web@${version}`, + `@redwoodjs/auth-azure-active-directory-web@${version}`, '@azure/msal-browser', ], notes: [ diff --git a/packages/auth-providers/azureActiveDirectory/web/package.json b/packages/auth-providers/azureActiveDirectory/web/package.json index 18c1b5689e0e..66d7728eaf50 100644 --- a/packages/auth-providers/azureActiveDirectory/web/package.json +++ b/packages/auth-providers/azureActiveDirectory/web/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/azure-active-directory-web", + "name": "@redwoodjs/auth-azure-active-directory-web", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/clerk/api/package.json b/packages/auth-providers/clerk/api/package.json index 7bd028571eba..7f4ff85e6b76 100644 --- a/packages/auth-providers/clerk/api/package.json +++ b/packages/auth-providers/clerk/api/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/clerk-api", + "name": "@redwoodjs/auth-clerk-api", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/clerk/setup/package.json b/packages/auth-providers/clerk/setup/package.json index d4d60644fa37..58df6e83bad4 100644 --- a/packages/auth-providers/clerk/setup/package.json +++ b/packages/auth-providers/clerk/setup/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/clerk-setup", + "name": "@redwoodjs/auth-clerk-setup", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/clerk/setup/src/setupHandler.ts b/packages/auth-providers/clerk/setup/src/setupHandler.ts index d1fbab052bce..a192f3b1fee5 100644 --- a/packages/auth-providers/clerk/setup/src/setupHandler.ts +++ b/packages/auth-providers/clerk/setup/src/setupHandler.ts @@ -13,10 +13,10 @@ export const handler = async ({ force: forceArg }: Args) => { standardAuthHandler({ basedir: __dirname, forceArg, - authDecoderImport: `import { authDecoder } from '@redwoodjs/clerk-api`, + authDecoderImport: `import { authDecoder } from '@redwoodjs/auth-clerk-api`, provider: 'clerk', - webPackages: ['@clerk/clerk-react', `@redwoodjs/clerk-web@${version}`], - apiPackages: [`@redwoodjs/clerk-api@${version}`], + webPackages: ['@clerk/clerk-react', `@redwoodjs/auth-clerk-web@${version}`], + apiPackages: [`@redwoodjs/auth-clerk-api@${version}`], notes: [ 'You will need to add three environment variables with your Clerk URL, API key and JWT key.', 'Check out web/src/auth.{js,tsx} for the variables you need to add.', diff --git a/packages/auth-providers/clerk/setup/src/templates/web/auth.tsx.template b/packages/auth-providers/clerk/setup/src/templates/web/auth.tsx.template index 3879366cde7c..1eb72ea5641f 100644 --- a/packages/auth-providers/clerk/setup/src/templates/web/auth.tsx.template +++ b/packages/auth-providers/clerk/setup/src/templates/web/auth.tsx.template @@ -2,7 +2,7 @@ import React, { useEffect } from 'react' import { ClerkLoaded, ClerkProvider, useUser } from '@clerk/clerk-react' -import { createClerkAuth } from '@redwoodjs/clerk-web' +import { createClerkAuth } from '@redwoodjs/auth-clerk-web' import { navigate } from '@redwoodjs/router' // You can set user roles in a "roles" array on the public metadata in Clerk. diff --git a/packages/auth-providers/clerk/web/package.json b/packages/auth-providers/clerk/web/package.json index dd9dbbf7338c..49aced7e2c69 100644 --- a/packages/auth-providers/clerk/web/package.json +++ b/packages/auth-providers/clerk/web/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/clerk-web", + "name": "@redwoodjs/auth-clerk-web", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/dbAuth/api/package.json b/packages/auth-providers/dbAuth/api/package.json index 464daeccf6ec..c05cb310e482 100644 --- a/packages/auth-providers/dbAuth/api/package.json +++ b/packages/auth-providers/dbAuth/api/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/dbauth-api", + "name": "@redwoodjs/auth-dbauth-api", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/dbAuth/setup/package.json b/packages/auth-providers/dbAuth/setup/package.json index a4ca04bf33f2..d35361742ccc 100644 --- a/packages/auth-providers/dbAuth/setup/package.json +++ b/packages/auth-providers/dbAuth/setup/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/dbauth-setup", + "name": "@redwoodjs/auth-dbauth-setup", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/dbAuth/setup/src/setupHandler.ts b/packages/auth-providers/dbAuth/setup/src/setupHandler.ts index e2b6e1171871..bc0fd317877c 100644 --- a/packages/auth-providers/dbAuth/setup/src/setupHandler.ts +++ b/packages/auth-providers/dbAuth/setup/src/setupHandler.ts @@ -25,14 +25,15 @@ export async function handler({ webauthn, force: forceArg }: Args) { basedir: __dirname, forceArg, provider: 'dbAuth', - authDecoderImport: "import { authDecoder } from '@redwoodjs/dbauth-api'", + authDecoderImport: + "import { authDecoder } from '@redwoodjs/auth-dbauth-api'", webAuthn, webPackages: webAuthn ? webAuthnWebPackages - : [`@redwoodjs/dbauth-web@${version}`], + : [`@redwoodjs/auth-dbauth-web@${version}`], apiPackages: webAuthn ? webAuthnApiPackages - : [`@redwoodjs/dbauth-api@${version}`], + : [`@redwoodjs/auth-dbauth-api@${version}`], extraTask: webAuthn ? webAuthnExtraTask : extraTask, notes: webAuthn ? webAuthnNotes : notes, }) diff --git a/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.ts.template b/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.ts.template index 4902974856d6..f8d8e2cd4e70 100644 --- a/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.ts.template +++ b/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.ts.template @@ -1,6 +1,6 @@ import type { APIGatewayProxyEvent, Context } from 'aws-lambda' -import { DbAuthHandler, DbAuthHandlerOptions } from '@redwoodjs/dbauth-api' +import { DbAuthHandler, DbAuthHandlerOptions } from '@redwoodjs/auth-dbauth-api' import { db } from 'src/lib/db' diff --git a/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.webAuthn.ts.template b/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.webAuthn.ts.template index 9737c9496453..117a85726ec9 100644 --- a/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.webAuthn.ts.template +++ b/packages/auth-providers/dbAuth/setup/src/templates/api/functions/auth.webAuthn.ts.template @@ -1,6 +1,6 @@ import type { APIGatewayProxyEvent, Context } from 'aws-lambda' -import { DbAuthHandler, DbAuthHandlerOptions } from '@redwoodjs/dbauth-api' +import { DbAuthHandler, DbAuthHandlerOptions } from '@redwoodjs/auth-dbauth-api' import { db } from 'src/lib/db' diff --git a/packages/auth-providers/dbAuth/setup/src/templates/web/auth.ts.template b/packages/auth-providers/dbAuth/setup/src/templates/web/auth.ts.template index 0ba27ddb2e58..4a620e5ecf37 100644 --- a/packages/auth-providers/dbAuth/setup/src/templates/web/auth.ts.template +++ b/packages/auth-providers/dbAuth/setup/src/templates/web/auth.ts.template @@ -1,3 +1,3 @@ -import { createDbAuth } from '@redwoodjs/dbauth-web' +import { createDbAuth } from '@redwoodjs/auth-dbauth-web' export const { AuthProvider, useAuth } = createDbAuth() diff --git a/packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template b/packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template index 77d1892449d9..2195ffbe4dac 100644 --- a/packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template +++ b/packages/auth-providers/dbAuth/setup/src/templates/web/auth.webAuthn.ts.template @@ -1,4 +1,4 @@ -import { createDbAuth } from '@redwoodjs/dbauth-web' -import WebAuthnClient from '@redwoodjs/@redwoodjs/dbauth-web/webAuthn' +import { createDbAuth } from '@redwoodjs/auth-dbauth-web' +import WebAuthnClient from '@redwoodjs/@redwoodjs/auth-dbauth-web/webAuthn' export const { AuthProvider, useAuth } = createDbAuth(WebAuthnClient) diff --git a/packages/auth-providers/dbAuth/setup/src/webAuthn.setupData.ts b/packages/auth-providers/dbAuth/setup/src/webAuthn.setupData.ts index a490554d35db..12718a06cb4a 100644 --- a/packages/auth-providers/dbAuth/setup/src/webAuthn.setupData.ts +++ b/packages/auth-providers/dbAuth/setup/src/webAuthn.setupData.ts @@ -8,10 +8,16 @@ import { functionsPath, libPath } from './setupData' export { extraTask } from './setupData' // required packages to install on the web side -export const webPackages = ['@redwoodjs/dbauth-web', '@simplewebauthn/browser'] +export const webPackages = [ + '@redwoodjs/auth-dbauth-web', + '@simplewebauthn/browser', +] // required packages to install on the api side -export const apiPackages = ['@redwoodjs/dbauth-api', '@simplewebauthn/server'] +export const apiPackages = [ + '@redwoodjs/auth-dbauth-api', + '@simplewebauthn/server', +] // any notes to print out when the job is done export const notes = [ diff --git a/packages/auth-providers/dbAuth/web/package.json b/packages/auth-providers/dbAuth/web/package.json index 0d2320979396..406a60eb52da 100644 --- a/packages/auth-providers/dbAuth/web/package.json +++ b/packages/auth-providers/dbAuth/web/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/dbauth-web", + "name": "@redwoodjs/auth-dbauth-web", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/netlify/setup/src/setupHandler.ts b/packages/auth-providers/netlify/setup/src/setupHandler.ts index 08ff127d751d..bfe4aa0c2dcb 100644 --- a/packages/auth-providers/netlify/setup/src/setupHandler.ts +++ b/packages/auth-providers/netlify/setup/src/setupHandler.ts @@ -19,7 +19,6 @@ export async function handler({ force: forceArg }: Args) { webPackages: [ `@redwoodjs/auth-netlify-web@${version}`, 'netlify-identity-widget@1.9.2', - '@types/netlify-identity-widget', ], notes: [ 'You will need to enable Identity on your Netlify site and configure the API endpoint.', diff --git a/packages/auth-providers/supertokens/api/package.json b/packages/auth-providers/supertokens/api/package.json index 795a4f3b4e14..0cffb644cf00 100644 --- a/packages/auth-providers/supertokens/api/package.json +++ b/packages/auth-providers/supertokens/api/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/supertokens-api", + "name": "@redwoodjs/auth-supertokens-api", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/supertokens/setup/package.json b/packages/auth-providers/supertokens/setup/package.json index 0aa760f07d05..f3995ee77c35 100644 --- a/packages/auth-providers/supertokens/setup/package.json +++ b/packages/auth-providers/supertokens/setup/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/supertokens-setup", + "name": "@redwoodjs/auth-supertokens-setup", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/auth-providers/supertokens/setup/src/setupHandler.ts b/packages/auth-providers/supertokens/setup/src/setupHandler.ts index 58ac9b602441..29b27a147dc8 100644 --- a/packages/auth-providers/supertokens/setup/src/setupHandler.ts +++ b/packages/auth-providers/supertokens/setup/src/setupHandler.ts @@ -15,10 +15,13 @@ export async function handler({ force: forceArg }: Args) { forceArg, provider: 'supertokens', authDecoderImport: - "import { authDecoder } from '@redwoodjs/supertokens-api'", - apiPackages: [`@redwoodjs/supertokens-api@${version}`, 'supertokens-node'], + "import { authDecoder } from '@redwoodjs/auth-supertokens-api'", + apiPackages: [ + `@redwoodjs/auth-supertokens-api@${version}`, + 'supertokens-node', + ], webPackages: [ - `@redwoodjs/supertokens-web@${version}`, + `@redwoodjs/auth-supertokens-web@${version}`, 'supertokens-auth-react', ], notes: [ diff --git a/packages/auth-providers/supertokens/setup/src/templates/web/auth.ts.template b/packages/auth-providers/supertokens/setup/src/templates/web/auth.ts.template index 8f6cd4a39bbf..c14a47b01665 100644 --- a/packages/auth-providers/supertokens/setup/src/templates/web/auth.ts.template +++ b/packages/auth-providers/supertokens/setup/src/templates/web/auth.ts.template @@ -1,4 +1,4 @@ -import { createSuperTokensAuth } from '@redwoodjs/supertokens-web' +import { createSuperTokensAuth } from '@redwoodjs/auth-supertokens-web' import { isBrowser } from '@redwoodjs/prerender/browserUtils' import SuperTokens from 'supertokens-auth-react' diff --git a/packages/auth-providers/supertokens/web/package.json b/packages/auth-providers/supertokens/web/package.json index 8608f561a5ee..640aef82e9de 100644 --- a/packages/auth-providers/supertokens/web/package.json +++ b/packages/auth-providers/supertokens/web/package.json @@ -1,5 +1,5 @@ { - "name": "@redwoodjs/supertokens-web", + "name": "@redwoodjs/auth-supertokens-web", "version": "3.2.0", "repository": { "type": "git", diff --git a/packages/cli-helpers/src/auth/setupHelpers.ts b/packages/cli-helpers/src/auth/setupHelpers.ts index 9b6d9bcfe161..ccfa477995e8 100644 --- a/packages/cli-helpers/src/auth/setupHelpers.ts +++ b/packages/cli-helpers/src/auth/setupHelpers.ts @@ -103,9 +103,9 @@ export const standardAuthHandler = async ({ generateAuthApiFiles(basedir, provider, force, webAuthn), addAuthConfigToWeb(basedir, provider, webAuthn), addAuthConfigToGqlApi(authDecoderImport), - addWebPackages(webPackages), - addApiPackages(apiPackages), - installPackages, + webPackages.length && addWebPackages(webPackages), + apiPackages.length && addApiPackages(apiPackages), + (webPackages.length || apiPackages.length) && installPackages, extraTask, notes && { title: 'One more thing...', diff --git a/yarn.lock b/yarn.lock index 9cd1a6cdee8a..da309ebc3902 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6330,9 +6330,26 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth-custom-setup@workspace:packages/auth-providers/custom/setup": +"@redwoodjs/auth-auth0-api@workspace:packages/auth-providers/auth0/api": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-custom-setup@workspace:packages/auth-providers/custom/setup" + resolution: "@redwoodjs/auth-auth0-api@workspace:packages/auth-providers/auth0/api" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/api": 3.2.0 + "@types/jsonwebtoken": 8.5.9 + core-js: 3.26.1 + jest: 29.3.1 + jsonwebtoken: 8.5.1 + jwks-rsa: 2.0.5 + typescript: 4.7.4 + languageName: unknown + linkType: soft + +"@redwoodjs/auth-auth0-setup@workspace:packages/auth-providers/auth0/setup": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-auth0-setup@workspace:packages/auth-providers/auth0/setup" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 @@ -6345,25 +6362,47 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth-firebase-api@workspace:packages/auth-providers/firebase/api": +"@redwoodjs/auth-auth0-web@workspace:packages/auth-providers/auth0/web": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-firebase-api@workspace:packages/auth-providers/firebase/api" + resolution: "@redwoodjs/auth-auth0-web@workspace:packages/auth-providers/auth0/web" + dependencies: + "@auth0/auth0-spa-js": 1.22.5 + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/auth": 3.2.0 + "@testing-library/react-hooks": 8.0.1 + "@types/react": 17.0.50 + core-js: 3.26.1 + jest: 29.3.1 + react: 17.0.2 + typescript: 4.7.4 + peerDependencies: + "@auth0/auth0-spa-js": 1.22.5 + languageName: unknown + linkType: soft + +"@redwoodjs/auth-azure-active-directory-api@workspace:packages/auth-providers/azureActiveDirectory/api": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-azure-active-directory-api@workspace:packages/auth-providers/azureActiveDirectory/api" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 "@redwoodjs/api": 3.2.0 "@types/aws-lambda": 8.10.107 + "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 - firebase-admin: 10.3.0 jest: 29.3.1 + jsonwebtoken: 8.5.1 + jwks-rsa: 2.0.5 typescript: 4.7.4 languageName: unknown linkType: soft -"@redwoodjs/auth-firebase-setup@workspace:packages/auth-providers/firebase/setup": +"@redwoodjs/auth-azure-active-directory-setup@workspace:packages/auth-providers/azureActiveDirectory/setup": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-firebase-setup@workspace:packages/auth-providers/firebase/setup" + resolution: "@redwoodjs/auth-azure-active-directory-setup@workspace:packages/auth-providers/azureActiveDirectory/setup" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 @@ -6376,46 +6415,46 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth-firebase-web@workspace:packages/auth-providers/firebase/web": +"@redwoodjs/auth-azure-active-directory-web@workspace:packages/auth-providers/azureActiveDirectory/web": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-firebase-web@workspace:packages/auth-providers/firebase/web" + resolution: "@redwoodjs/auth-azure-active-directory-web@workspace:packages/auth-providers/azureActiveDirectory/web" dependencies: + "@azure/msal-browser": 2.30.0 "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 "@redwoodjs/auth": 3.2.0 "@testing-library/react-hooks": 8.0.1 + "@types/netlify-identity-widget": 1.9.3 "@types/react": 17.0.50 core-js: 3.26.1 - firebase: 9.10.0 jest: 29.3.1 react: 17.0.2 typescript: 4.7.4 peerDependencies: - firebase: 9.10.0 + "@azure/msal-browser": 2.30.0 languageName: unknown linkType: soft -"@redwoodjs/auth-netlify-api@workspace:packages/auth-providers/netlify/api": +"@redwoodjs/auth-clerk-api@workspace:packages/auth-providers/clerk/api": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-netlify-api@workspace:packages/auth-providers/netlify/api" + resolution: "@redwoodjs/auth-clerk-api@workspace:packages/auth-providers/clerk/api" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@clerk/clerk-sdk-node": 3.9.2 "@redwoodjs/api": 3.2.0 "@types/aws-lambda": 8.10.107 - "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 jest: 29.3.1 - jsonwebtoken: 8.5.1 typescript: 4.7.4 languageName: unknown linkType: soft -"@redwoodjs/auth-netlify-setup@workspace:packages/auth-providers/netlify/setup": +"@redwoodjs/auth-clerk-setup@workspace:packages/auth-providers/clerk/setup": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-netlify-setup@workspace:packages/auth-providers/netlify/setup" + resolution: "@redwoodjs/auth-clerk-setup@workspace:packages/auth-providers/clerk/setup" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 @@ -6428,123 +6467,124 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth-netlify-web@workspace:packages/auth-providers/netlify/web": +"@redwoodjs/auth-clerk-web@workspace:packages/auth-providers/clerk/web": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-netlify-web@workspace:packages/auth-providers/netlify/web" + resolution: "@redwoodjs/auth-clerk-web@workspace:packages/auth-providers/clerk/web" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@clerk/clerk-react": 3.5.1 + "@clerk/types": 2.21.0 "@redwoodjs/auth": 3.2.0 "@testing-library/react-hooks": 8.0.1 - "@types/netlify-identity-widget": 1.9.3 "@types/react": 17.0.50 core-js: 3.26.1 jest: 29.3.1 react: 17.0.2 typescript: 4.7.4 peerDependencies: - netlify-identity-widget: 1.9.2 + "@clerk/clerk-react": 3.5.1 languageName: unknown linkType: soft -"@redwoodjs/auth-providers-api@workspace:packages/auth-providers-api": +"@redwoodjs/auth-custom-setup@workspace:packages/auth-providers/custom/setup": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-providers-api@workspace:packages/auth-providers-api" + resolution: "@redwoodjs/auth-custom-setup@workspace:packages/auth-providers/custom/setup" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/cli-helpers": 3.2.0 + "@types/yargs": 17.0.13 + core-js: 3.26.1 + jest: 29.3.1 + typescript: 4.7.4 + languageName: unknown + linkType: soft + +"@redwoodjs/auth-dbauth-api@workspace:packages/auth-providers/dbAuth/api": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-dbauth-api@workspace:packages/auth-providers/dbAuth/api" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@magic-sdk/admin": 1.4.1 - "@nhost/hasura-auth-js": 1.4.1 - "@nhost/nhost-js": 1.4.10 - "@okta/jwt-verifier": 2.6.0 - "@okta/okta-auth-js": 6.9.0 "@redwoodjs/api": 3.2.0 - "@types/aws-lambda": 8.10.107 - "@types/jsonwebtoken": 8.5.9 + "@types/crypto-js": 4.1.1 + "@types/md5": 2.3.2 + "@types/uuid": 8.3.4 + base64url: 3.0.1 core-js: 3.26.1 - gotrue-js: 0.9.29 + crypto-js: 4.1.1 jest: 29.3.1 - jsonwebtoken: 8.5.1 - magic-sdk: 9.1.1 + md5: 2.3.0 typescript: 4.7.4 - peerDependencies: - "@magic-sdk/admin": 1.4.1 - "@okta/jwt-verifier": 2.6.0 - peerDependenciesMeta: - "@magic-sdk/admin": - optional: true - "@okta/jwt-verifier": - optional: true + uuid: 9.0.0 languageName: unknown linkType: soft -"@redwoodjs/auth-providers-setup@3.2.0, @redwoodjs/auth-providers-setup@workspace:packages/auth-providers-setup": +"@redwoodjs/auth-dbauth-setup@workspace:packages/auth-providers/dbAuth/setup": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-providers-setup@workspace:packages/auth-providers-setup" + resolution: "@redwoodjs/auth-dbauth-setup@workspace:packages/auth-providers/dbAuth/setup" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 "@redwoodjs/cli-helpers": 3.2.0 + "@simplewebauthn/browser": 6.2.1 + "@simplewebauthn/typescript-types": 6.2.1 + "@types/secure-random-password": 0.2.1 "@types/yargs": 17.0.13 core-js: 3.26.1 jest: 29.3.1 + prompts: 2.4.2 + secure-random-password: 0.2.3 + terminal-link: 2.1.1 typescript: 4.7.4 + peerDependencies: + "@redwoodjs/auth": 3.2.0 languageName: unknown linkType: soft -"@redwoodjs/auth-providers-web@workspace:packages/auth-providers-web": +"@redwoodjs/auth-dbauth-web@workspace:packages/auth-providers/dbAuth/web": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-providers-web@workspace:packages/auth-providers-web" + resolution: "@redwoodjs/auth-dbauth-web@workspace:packages/auth-providers/dbAuth/web" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@nhost/hasura-auth-js": 1.4.1 - "@nhost/nhost-js": 1.4.10 - "@okta/okta-auth-js": 6.9.0 "@redwoodjs/auth": 3.2.0 + "@simplewebauthn/browser": 6.2.1 + "@simplewebauthn/typescript-types": 6.2.1 + "@testing-library/react-hooks": 8.0.1 "@types/react": 17.0.50 core-js: 3.26.1 - gotrue-js: 0.9.29 jest: 29.3.1 - magic-sdk: 9.1.1 react: 17.0.2 typescript: 4.7.4 - peerDependencies: - "@magic-sdk/admin": 1.4.1 - "@okta/jwt-verifier": 2.6.0 - peerDependenciesMeta: - "@magic-sdk/admin": - optional: true - "@okta/jwt-verifier": - optional: true languageName: unknown linkType: soft -"@redwoodjs/auth-supabase-api@workspace:packages/auth-providers/supabase/api": +"@redwoodjs/auth-firebase-api@workspace:packages/auth-providers/firebase/api": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-supabase-api@workspace:packages/auth-providers/supabase/api" + resolution: "@redwoodjs/auth-firebase-api@workspace:packages/auth-providers/firebase/api" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/api": 3.2.0 "@types/aws-lambda": 8.10.107 - "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 + firebase-admin: 10.3.0 jest: 29.3.1 - jsonwebtoken: 8.5.1 typescript: 4.7.4 - peerDependencies: - "@redwoodjs/api": 3.2.0 languageName: unknown linkType: soft -"@redwoodjs/auth-supabase-setup@workspace:packages/auth-providers/supabase/setup": +"@redwoodjs/auth-firebase-setup@workspace:packages/auth-providers/firebase/setup": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-supabase-setup@workspace:packages/auth-providers/supabase/setup" + resolution: "@redwoodjs/auth-firebase-setup@workspace:packages/auth-providers/firebase/setup" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 @@ -6557,45 +6597,46 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth-supabase-web@workspace:packages/auth-providers/supabase/web": +"@redwoodjs/auth-firebase-web@workspace:packages/auth-providers/firebase/web": version: 0.0.0-use.local - resolution: "@redwoodjs/auth-supabase-web@workspace:packages/auth-providers/supabase/web" + resolution: "@redwoodjs/auth-firebase-web@workspace:packages/auth-providers/firebase/web" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@supabase/supabase-js": 1.35.7 + "@redwoodjs/auth": 3.2.0 "@testing-library/react-hooks": 8.0.1 "@types/react": 17.0.50 core-js: 3.26.1 + firebase: 9.10.0 jest: 29.3.1 react: 17.0.2 typescript: 4.7.4 peerDependencies: - "@supabase/supabase-js": 1.35.7 + firebase: 9.10.0 languageName: unknown linkType: soft -"@redwoodjs/auth0-api@workspace:packages/auth-providers/auth0/api": +"@redwoodjs/auth-netlify-api@workspace:packages/auth-providers/netlify/api": version: 0.0.0-use.local - resolution: "@redwoodjs/auth0-api@workspace:packages/auth-providers/auth0/api" + resolution: "@redwoodjs/auth-netlify-api@workspace:packages/auth-providers/netlify/api" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 "@redwoodjs/api": 3.2.0 + "@types/aws-lambda": 8.10.107 "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 jest: 29.3.1 jsonwebtoken: 8.5.1 - jwks-rsa: 2.0.5 typescript: 4.7.4 languageName: unknown linkType: soft -"@redwoodjs/auth0-setup@workspace:packages/auth-providers/auth0/setup": +"@redwoodjs/auth-netlify-setup@workspace:packages/auth-providers/netlify/setup": version: 0.0.0-use.local - resolution: "@redwoodjs/auth0-setup@workspace:packages/auth-providers/auth0/setup" + resolution: "@redwoodjs/auth-netlify-setup@workspace:packages/auth-providers/netlify/setup" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 @@ -6608,65 +6649,123 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/auth0-web@workspace:packages/auth-providers/auth0/web": +"@redwoodjs/auth-netlify-web@workspace:packages/auth-providers/netlify/web": version: 0.0.0-use.local - resolution: "@redwoodjs/auth0-web@workspace:packages/auth-providers/auth0/web" + resolution: "@redwoodjs/auth-netlify-web@workspace:packages/auth-providers/netlify/web" dependencies: - "@auth0/auth0-spa-js": 1.22.5 "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 "@redwoodjs/auth": 3.2.0 "@testing-library/react-hooks": 8.0.1 + "@types/netlify-identity-widget": 1.9.3 "@types/react": 17.0.50 core-js: 3.26.1 jest: 29.3.1 react: 17.0.2 typescript: 4.7.4 peerDependencies: - "@auth0/auth0-spa-js": 1.22.5 + netlify-identity-widget: 1.9.2 languageName: unknown linkType: soft -"@redwoodjs/auth@3.2.0, @redwoodjs/auth@workspace:packages/auth": +"@redwoodjs/auth-providers-api@workspace:packages/auth-providers-api": version: 0.0.0-use.local - resolution: "@redwoodjs/auth@workspace:packages/auth" + resolution: "@redwoodjs/auth-providers-api@workspace:packages/auth-providers-api" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@testing-library/jest-dom": 5.16.5 - "@testing-library/react": 12.1.5 - "@testing-library/react-hooks": 8.0.1 + "@magic-sdk/admin": 1.4.1 + "@nhost/hasura-auth-js": 1.4.1 + "@nhost/nhost-js": 1.4.10 + "@okta/jwt-verifier": 2.6.0 + "@okta/okta-auth-js": 6.9.0 + "@redwoodjs/api": 3.2.0 + "@types/aws-lambda": 8.10.107 + "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 + gotrue-js: 0.9.29 jest: 29.3.1 - msw: 0.49.1 + jsonwebtoken: 8.5.1 + magic-sdk: 9.1.1 + typescript: 4.7.4 + peerDependencies: + "@magic-sdk/admin": 1.4.1 + "@okta/jwt-verifier": 2.6.0 + peerDependenciesMeta: + "@magic-sdk/admin": + optional: true + "@okta/jwt-verifier": + optional: true + languageName: unknown + linkType: soft + +"@redwoodjs/auth-providers-setup@3.2.0, @redwoodjs/auth-providers-setup@workspace:packages/auth-providers-setup": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-providers-setup@workspace:packages/auth-providers-setup" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/cli-helpers": 3.2.0 + "@types/yargs": 17.0.13 + core-js: 3.26.1 + jest: 29.3.1 + typescript: 4.7.4 + languageName: unknown + linkType: soft + +"@redwoodjs/auth-providers-web@workspace:packages/auth-providers-web": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth-providers-web@workspace:packages/auth-providers-web" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@nhost/hasura-auth-js": 1.4.1 + "@nhost/nhost-js": 1.4.10 + "@okta/okta-auth-js": 6.9.0 + "@redwoodjs/auth": 3.2.0 + "@types/react": 17.0.50 + core-js: 3.26.1 + gotrue-js: 0.9.29 + jest: 29.3.1 + magic-sdk: 9.1.1 react: 17.0.2 typescript: 4.7.4 + peerDependencies: + "@magic-sdk/admin": 1.4.1 + "@okta/jwt-verifier": 2.6.0 + peerDependenciesMeta: + "@magic-sdk/admin": + optional: true + "@okta/jwt-verifier": + optional: true languageName: unknown linkType: soft -"@redwoodjs/azure-active-directory-api@workspace:packages/auth-providers/azureActiveDirectory/api": +"@redwoodjs/auth-supabase-api@workspace:packages/auth-providers/supabase/api": version: 0.0.0-use.local - resolution: "@redwoodjs/azure-active-directory-api@workspace:packages/auth-providers/azureActiveDirectory/api" + resolution: "@redwoodjs/auth-supabase-api@workspace:packages/auth-providers/supabase/api" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/api": 3.2.0 "@types/aws-lambda": 8.10.107 "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 jest: 29.3.1 jsonwebtoken: 8.5.1 - jwks-rsa: 2.0.5 typescript: 4.7.4 + peerDependencies: + "@redwoodjs/api": 3.2.0 languageName: unknown linkType: soft -"@redwoodjs/azure-active-directory-setup@workspace:packages/auth-providers/azureActiveDirectory/setup": +"@redwoodjs/auth-supabase-setup@workspace:packages/auth-providers/supabase/setup": version: 0.0.0-use.local - resolution: "@redwoodjs/azure-active-directory-setup@workspace:packages/auth-providers/azureActiveDirectory/setup" + resolution: "@redwoodjs/auth-supabase-setup@workspace:packages/auth-providers/supabase/setup" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 @@ -6679,46 +6778,47 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/azure-active-directory-web@workspace:packages/auth-providers/azureActiveDirectory/web": +"@redwoodjs/auth-supabase-web@workspace:packages/auth-providers/supabase/web": version: 0.0.0-use.local - resolution: "@redwoodjs/azure-active-directory-web@workspace:packages/auth-providers/azureActiveDirectory/web" + resolution: "@redwoodjs/auth-supabase-web@workspace:packages/auth-providers/supabase/web" dependencies: - "@azure/msal-browser": 2.30.0 "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/auth": 3.2.0 + "@supabase/supabase-js": 1.35.7 "@testing-library/react-hooks": 8.0.1 - "@types/netlify-identity-widget": 1.9.3 "@types/react": 17.0.50 core-js: 3.26.1 jest: 29.3.1 react: 17.0.2 typescript: 4.7.4 peerDependencies: - "@azure/msal-browser": 2.30.0 + "@supabase/supabase-js": 1.35.7 languageName: unknown linkType: soft -"@redwoodjs/clerk-api@workspace:packages/auth-providers/clerk/api": +"@redwoodjs/auth-supertokens-api@workspace:packages/auth-providers/supertokens/api": version: 0.0.0-use.local - resolution: "@redwoodjs/clerk-api@workspace:packages/auth-providers/clerk/api" + resolution: "@redwoodjs/auth-supertokens-api@workspace:packages/auth-providers/supertokens/api" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@clerk/clerk-sdk-node": 3.9.2 "@redwoodjs/api": 3.2.0 - "@types/aws-lambda": 8.10.107 + "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 jest: 29.3.1 + jsonwebtoken: 8.5.1 + jwks-rsa: 2.0.5 typescript: 4.7.4 + peerDependencies: + supertokens-node: 12.1.1 languageName: unknown linkType: soft -"@redwoodjs/clerk-setup@workspace:packages/auth-providers/clerk/setup": +"@redwoodjs/auth-supertokens-setup@workspace:packages/auth-providers/supertokens/setup": version: 0.0.0-use.local - resolution: "@redwoodjs/clerk-setup@workspace:packages/auth-providers/clerk/setup" + resolution: "@redwoodjs/auth-supertokens-setup@workspace:packages/auth-providers/supertokens/setup" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 @@ -6731,15 +6831,13 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/clerk-web@workspace:packages/auth-providers/clerk/web": +"@redwoodjs/auth-supertokens-web@workspace:packages/auth-providers/supertokens/web": version: 0.0.0-use.local - resolution: "@redwoodjs/clerk-web@workspace:packages/auth-providers/clerk/web" + resolution: "@redwoodjs/auth-supertokens-web@workspace:packages/auth-providers/supertokens/web" dependencies: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 - "@clerk/clerk-react": 3.5.1 - "@clerk/types": 2.21.0 "@redwoodjs/auth": 3.2.0 "@testing-library/react-hooks": 8.0.1 "@types/react": 17.0.50 @@ -6748,7 +6846,25 @@ __metadata: react: 17.0.2 typescript: 4.7.4 peerDependencies: - "@clerk/clerk-react": 3.5.1 + supertokens-auth-react: 0.26.5 + languageName: unknown + linkType: soft + +"@redwoodjs/auth@3.2.0, @redwoodjs/auth@workspace:packages/auth": + version: 0.0.0-use.local + resolution: "@redwoodjs/auth@workspace:packages/auth" + dependencies: + "@babel/cli": 7.19.3 + "@babel/core": 7.20.5 + "@babel/runtime-corejs3": 7.20.6 + "@testing-library/jest-dom": 5.16.5 + "@testing-library/react": 12.1.5 + "@testing-library/react-hooks": 8.0.1 + core-js: 3.26.1 + jest: 29.3.1 + msw: 0.49.1 + react: 17.0.2 + typescript: 4.7.4 languageName: unknown linkType: soft @@ -6932,69 +7048,6 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/dbauth-api@workspace:packages/auth-providers/dbAuth/api": - version: 0.0.0-use.local - resolution: "@redwoodjs/dbauth-api@workspace:packages/auth-providers/dbAuth/api" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/api": 3.2.0 - "@types/crypto-js": 4.1.1 - "@types/md5": 2.3.2 - "@types/uuid": 8.3.4 - base64url: 3.0.1 - core-js: 3.26.1 - crypto-js: 4.1.1 - jest: 29.3.1 - md5: 2.3.0 - typescript: 4.7.4 - uuid: 9.0.0 - languageName: unknown - linkType: soft - -"@redwoodjs/dbauth-setup@workspace:packages/auth-providers/dbAuth/setup": - version: 0.0.0-use.local - resolution: "@redwoodjs/dbauth-setup@workspace:packages/auth-providers/dbAuth/setup" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/cli-helpers": 3.2.0 - "@simplewebauthn/browser": 6.2.1 - "@simplewebauthn/typescript-types": 6.2.1 - "@types/secure-random-password": 0.2.1 - "@types/yargs": 17.0.13 - core-js: 3.26.1 - jest: 29.3.1 - prompts: 2.4.2 - secure-random-password: 0.2.3 - terminal-link: 2.1.1 - typescript: 4.7.4 - peerDependencies: - "@redwoodjs/auth": 3.2.0 - languageName: unknown - linkType: soft - -"@redwoodjs/dbauth-web@workspace:packages/auth-providers/dbAuth/web": - version: 0.0.0-use.local - resolution: "@redwoodjs/dbauth-web@workspace:packages/auth-providers/dbAuth/web" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/auth": 3.2.0 - "@simplewebauthn/browser": 6.2.1 - "@simplewebauthn/typescript-types": 6.2.1 - "@testing-library/react-hooks": 8.0.1 - "@types/react": 17.0.50 - core-js: 3.26.1 - jest: 29.3.1 - react: 17.0.2 - typescript: 4.7.4 - languageName: unknown - linkType: soft - "@redwoodjs/eslint-config@3.2.0, @redwoodjs/eslint-config@workspace:packages/eslint-config": version: 0.0.0-use.local resolution: "@redwoodjs/eslint-config@workspace:packages/eslint-config" @@ -7248,59 +7301,6 @@ __metadata: languageName: unknown linkType: soft -"@redwoodjs/supertokens-api@workspace:packages/auth-providers/supertokens/api": - version: 0.0.0-use.local - resolution: "@redwoodjs/supertokens-api@workspace:packages/auth-providers/supertokens/api" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/api": 3.2.0 - "@types/jsonwebtoken": 8.5.9 - core-js: 3.26.1 - jest: 29.3.1 - jsonwebtoken: 8.5.1 - jwks-rsa: 2.0.5 - typescript: 4.7.4 - peerDependencies: - supertokens-node: 12.1.1 - languageName: unknown - linkType: soft - -"@redwoodjs/supertokens-setup@workspace:packages/auth-providers/supertokens/setup": - version: 0.0.0-use.local - resolution: "@redwoodjs/supertokens-setup@workspace:packages/auth-providers/supertokens/setup" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/cli-helpers": 3.2.0 - "@types/yargs": 17.0.13 - core-js: 3.26.1 - jest: 29.3.1 - typescript: 4.7.4 - languageName: unknown - linkType: soft - -"@redwoodjs/supertokens-web@workspace:packages/auth-providers/supertokens/web": - version: 0.0.0-use.local - resolution: "@redwoodjs/supertokens-web@workspace:packages/auth-providers/supertokens/web" - dependencies: - "@babel/cli": 7.19.3 - "@babel/core": 7.20.5 - "@babel/runtime-corejs3": 7.20.6 - "@redwoodjs/auth": 3.2.0 - "@testing-library/react-hooks": 8.0.1 - "@types/react": 17.0.50 - core-js: 3.26.1 - jest: 29.3.1 - react: 17.0.2 - typescript: 4.7.4 - peerDependencies: - supertokens-auth-react: 0.26.5 - languageName: unknown - linkType: soft - "@redwoodjs/telemetry@3.2.0, @redwoodjs/telemetry@workspace:packages/telemetry": version: 0.0.0-use.local resolution: "@redwoodjs/telemetry@workspace:packages/telemetry" From 32cca8031b4897d3938fbd305d4d8d61c35ef1b9 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 21:58:51 -0500 Subject: [PATCH 17/25] update test project fixture --- __fixtures__/test-project/api/package.json | 2 +- __fixtures__/test-project/api/src/functions/auth.ts | 2 +- __fixtures__/test-project/api/src/functions/graphql.ts | 2 +- __fixtures__/test-project/web/package.json | 2 +- __fixtures__/test-project/web/src/auth.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/__fixtures__/test-project/api/package.json b/__fixtures__/test-project/api/package.json index 58867c9787f5..47810f99e8e3 100644 --- a/__fixtures__/test-project/api/package.json +++ b/__fixtures__/test-project/api/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@redwoodjs/api": "3.2.0", - "@redwoodjs/dbauth-api": "^0.0.1", + "@redwoodjs/auth-dbauth-api": "^0.0.1", "@redwoodjs/graphql-server": "3.2.0" } } diff --git a/__fixtures__/test-project/api/src/functions/auth.ts b/__fixtures__/test-project/api/src/functions/auth.ts index 5315eee0eb26..2d7a5031e0da 100644 --- a/__fixtures__/test-project/api/src/functions/auth.ts +++ b/__fixtures__/test-project/api/src/functions/auth.ts @@ -3,7 +3,7 @@ import type { APIGatewayProxyEvent, Context } from 'aws-lambda' import { DbAuthHandler, DbAuthHandlerOptions, -} from '@redwoodjs/dbauth-api' +} from '@redwoodjs/auth-dbauth-api' import { db } from 'src/lib/db' diff --git a/__fixtures__/test-project/api/src/functions/graphql.ts b/__fixtures__/test-project/api/src/functions/graphql.ts index 6b5344806b63..5d8db6ab8f2a 100644 --- a/__fixtures__/test-project/api/src/functions/graphql.ts +++ b/__fixtures__/test-project/api/src/functions/graphql.ts @@ -1,4 +1,4 @@ -import { authDecoder } from '@redwoodjs/dbauth-api' +import { authDecoder } from '@redwoodjs/auth-dbauth-api' import { createGraphQLHandler } from '@redwoodjs/graphql-server' import directives from 'src/directives/**/*.{js,ts}' diff --git a/__fixtures__/test-project/web/package.json b/__fixtures__/test-project/web/package.json index b4744eefcfa0..aa9bbb0a7b01 100644 --- a/__fixtures__/test-project/web/package.json +++ b/__fixtures__/test-project/web/package.json @@ -14,7 +14,7 @@ }, "dependencies": { "@redwoodjs/auth": "3.2.0", - "@redwoodjs/dbauth-web": "^0.0.1", + "@redwoodjs/auth-dbauth-web": "^0.0.1", "@redwoodjs/forms": "3.2.0", "@redwoodjs/router": "3.2.0", "@redwoodjs/web": "3.2.0", diff --git a/__fixtures__/test-project/web/src/auth.ts b/__fixtures__/test-project/web/src/auth.ts index 0ba27ddb2e58..4a620e5ecf37 100644 --- a/__fixtures__/test-project/web/src/auth.ts +++ b/__fixtures__/test-project/web/src/auth.ts @@ -1,3 +1,3 @@ -import { createDbAuth } from '@redwoodjs/dbauth-web' +import { createDbAuth } from '@redwoodjs/auth-dbauth-web' export const { AuthProvider, useAuth } = createDbAuth() From 45cf51c80877b985e3a580b47ddb87796efca484 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 22:00:00 -0500 Subject: [PATCH 18/25] update test project fixture (continued) --- __fixtures__/test-project/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__fixtures__/test-project/package.json b/__fixtures__/test-project/package.json index afc946cc2fab..94ffc30f9ffc 100644 --- a/__fixtures__/test-project/package.json +++ b/__fixtures__/test-project/package.json @@ -9,7 +9,7 @@ }, "devDependencies": { "@redwoodjs/core": "3.2.0", - "@redwoodjs/dbauth-setup": "^0.0.1" + "@redwoodjs/auth-dbauth-setup": "^0.0.1" }, "eslintConfig": { "extends": "@redwoodjs/eslint-config", From ac6b73e55f9caf85e62126c787fa4c8959d974a2 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 22:21:20 -0500 Subject: [PATCH 19/25] try rming deps from fixture --- __fixtures__/test-project/api/package.json | 1 - __fixtures__/test-project/package.json | 1 - __fixtures__/test-project/web/package.json | 1 - 3 files changed, 3 deletions(-) diff --git a/__fixtures__/test-project/api/package.json b/__fixtures__/test-project/api/package.json index 47810f99e8e3..2edfead030f3 100644 --- a/__fixtures__/test-project/api/package.json +++ b/__fixtures__/test-project/api/package.json @@ -4,7 +4,6 @@ "private": true, "dependencies": { "@redwoodjs/api": "3.2.0", - "@redwoodjs/auth-dbauth-api": "^0.0.1", "@redwoodjs/graphql-server": "3.2.0" } } diff --git a/__fixtures__/test-project/package.json b/__fixtures__/test-project/package.json index 94ffc30f9ffc..2957b355b2e3 100644 --- a/__fixtures__/test-project/package.json +++ b/__fixtures__/test-project/package.json @@ -9,7 +9,6 @@ }, "devDependencies": { "@redwoodjs/core": "3.2.0", - "@redwoodjs/auth-dbauth-setup": "^0.0.1" }, "eslintConfig": { "extends": "@redwoodjs/eslint-config", diff --git a/__fixtures__/test-project/web/package.json b/__fixtures__/test-project/web/package.json index aa9bbb0a7b01..2e918cff4074 100644 --- a/__fixtures__/test-project/web/package.json +++ b/__fixtures__/test-project/web/package.json @@ -14,7 +14,6 @@ }, "dependencies": { "@redwoodjs/auth": "3.2.0", - "@redwoodjs/auth-dbauth-web": "^0.0.1", "@redwoodjs/forms": "3.2.0", "@redwoodjs/router": "3.2.0", "@redwoodjs/web": "3.2.0", From 53414863489fb41ebd9bc6e156f9d88c17769365 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 22:29:19 -0500 Subject: [PATCH 20/25] fix typo in pkg json --- __fixtures__/test-project/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__fixtures__/test-project/package.json b/__fixtures__/test-project/package.json index 2957b355b2e3..e3e54b9f9abc 100644 --- a/__fixtures__/test-project/package.json +++ b/__fixtures__/test-project/package.json @@ -8,7 +8,7 @@ ] }, "devDependencies": { - "@redwoodjs/core": "3.2.0", + "@redwoodjs/core": "3.2.0" }, "eslintConfig": { "extends": "@redwoodjs/eslint-config", From aae62ef620f5bbae09c6cf8415dd5cf9c0d99fd6 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 22:50:19 -0500 Subject: [PATCH 21/25] fix deps --- packages/auth-providers/dbAuth/setup/package.json | 3 --- packages/auth-providers/supabase/api/package.json | 4 +--- yarn.lock | 5 +---- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/auth-providers/dbAuth/setup/package.json b/packages/auth-providers/dbAuth/setup/package.json index d35361742ccc..8ed673095f7a 100644 --- a/packages/auth-providers/dbAuth/setup/package.json +++ b/packages/auth-providers/dbAuth/setup/package.json @@ -39,8 +39,5 @@ "jest": "29.3.1", "typescript": "4.7.4" }, - "peerDependencies": { - "@redwoodjs/auth": "3.2.0" - }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/supabase/api/package.json b/packages/auth-providers/supabase/api/package.json index 643468544303..06dc2c0c828a 100644 --- a/packages/auth-providers/supabase/api/package.json +++ b/packages/auth-providers/supabase/api/package.json @@ -29,13 +29,11 @@ "devDependencies": { "@babel/cli": "7.19.3", "@babel/core": "7.20.5", + "@redwoodjs/api": "3.2.0", "@types/aws-lambda": "8.10.107", "@types/jsonwebtoken": "8.5.9", "jest": "29.3.1", "typescript": "4.7.4" }, - "peerDependencies": { - "@redwoodjs/api": "3.2.0" - }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/yarn.lock b/yarn.lock index da309ebc3902..09bd2ccdc4bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6542,8 +6542,6 @@ __metadata: secure-random-password: 0.2.3 terminal-link: 2.1.1 typescript: 4.7.4 - peerDependencies: - "@redwoodjs/auth": 3.2.0 languageName: unknown linkType: soft @@ -6752,14 +6750,13 @@ __metadata: "@babel/cli": 7.19.3 "@babel/core": 7.20.5 "@babel/runtime-corejs3": 7.20.6 + "@redwoodjs/api": 3.2.0 "@types/aws-lambda": 8.10.107 "@types/jsonwebtoken": 8.5.9 core-js: 3.26.1 jest: 29.3.1 jsonwebtoken: 8.5.1 typescript: 4.7.4 - peerDependencies: - "@redwoodjs/api": 3.2.0 languageName: unknown linkType: soft From 150076957d65c8f7cb9f0b2b9a132472bfdf43a1 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Mon, 5 Dec 2022 22:55:47 -0500 Subject: [PATCH 22/25] add back test project deps --- __fixtures__/test-project/api/package.json | 1 + __fixtures__/test-project/package.json | 1 + __fixtures__/test-project/web/package.json | 1 + 3 files changed, 3 insertions(+) diff --git a/__fixtures__/test-project/api/package.json b/__fixtures__/test-project/api/package.json index 2edfead030f3..d0ead7dcc0a4 100644 --- a/__fixtures__/test-project/api/package.json +++ b/__fixtures__/test-project/api/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "@redwoodjs/api": "3.2.0", + "@redwoodjs/auth-dbauth-api": "0.0.2", "@redwoodjs/graphql-server": "3.2.0" } } diff --git a/__fixtures__/test-project/package.json b/__fixtures__/test-project/package.json index e3e54b9f9abc..be6d6bf1bd0b 100644 --- a/__fixtures__/test-project/package.json +++ b/__fixtures__/test-project/package.json @@ -8,6 +8,7 @@ ] }, "devDependencies": { + "@redwoodjs/auth-dbauth-setup": "0.0.2", "@redwoodjs/core": "3.2.0" }, "eslintConfig": { diff --git a/__fixtures__/test-project/web/package.json b/__fixtures__/test-project/web/package.json index 2e918cff4074..d0ac0975de0a 100644 --- a/__fixtures__/test-project/web/package.json +++ b/__fixtures__/test-project/web/package.json @@ -14,6 +14,7 @@ }, "dependencies": { "@redwoodjs/auth": "3.2.0", + "@redwoodjs/auth-dbauth-web": "0.0.2", "@redwoodjs/forms": "3.2.0", "@redwoodjs/router": "3.2.0", "@redwoodjs/web": "3.2.0", From 6e3be551a71e08f1eb2283d1331d961f1d4119fd Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Tue, 6 Dec 2022 00:27:16 -0500 Subject: [PATCH 23/25] export decoder from dbauth --- packages/auth-providers/dbAuth/api/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/auth-providers/dbAuth/api/src/index.ts b/packages/auth-providers/dbAuth/api/src/index.ts index 04c5a2661947..129130bbef63 100644 --- a/packages/auth-providers/dbAuth/api/src/index.ts +++ b/packages/auth-providers/dbAuth/api/src/index.ts @@ -1,3 +1,4 @@ export * from './DbAuthHandler' export { PasswordValidationError } from './errors' export * from './shared' +export { authDecoder } from './decoder' From c9eae806702ea55711d99a4091418bbafcbc0759 Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Tue, 6 Dec 2022 00:43:01 -0500 Subject: [PATCH 24/25] add index file to dbauth --- packages/auth-providers/dbAuth/web/src/index.ts | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/auth-providers/dbAuth/web/src/index.ts diff --git a/packages/auth-providers/dbAuth/web/src/index.ts b/packages/auth-providers/dbAuth/web/src/index.ts new file mode 100644 index 000000000000..9c2e587274d6 --- /dev/null +++ b/packages/auth-providers/dbAuth/web/src/index.ts @@ -0,0 +1 @@ +export * from './dbAuth' From 1f6b718a9117740443766721829484b1997e180f Mon Sep 17 00:00:00 2001 From: Dominic Saadi Date: Tue, 6 Dec 2022 00:44:07 -0500 Subject: [PATCH 25/25] just export the creat auth fn --- packages/auth-providers/dbAuth/web/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/auth-providers/dbAuth/web/src/index.ts b/packages/auth-providers/dbAuth/web/src/index.ts index 9c2e587274d6..1cd8657f64b4 100644 --- a/packages/auth-providers/dbAuth/web/src/index.ts +++ b/packages/auth-providers/dbAuth/web/src/index.ts @@ -1 +1 @@ -export * from './dbAuth' +export { createDbAuth } from './dbAuth'