Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(#797, #878): set baseURL via environment variables and improve internal url detection #913

Merged
merged 25 commits into from
Dec 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
6d5c976
feat: setting baseurl via environment variable and improving detectio…
zoey-kaiser Sep 18, 2024
cf88c9e
fix: access runtime via nuxt object in module setup
zoey-kaiser Sep 18, 2024
ebbb4af
move import to old location
zoey-kaiser Sep 18, 2024
4592a6d
fix: docs url
zoey-kaiser Sep 18, 2024
42708f3
fix: do not add path if origin was provided
zoey-kaiser Sep 18, 2024
2bbd24d
fix: last incorrect usage of path and origin
zoey-kaiser Sep 18, 2024
063159c
fix: authjs tests
zoey-kaiser Sep 18, 2024
7043515
Merge branch 'main' into 797/878/improve-local-baseurl
zoey-kaiser Sep 19, 2024
119ef8e
Merge branch 'main' into 797/878/improve-local-baseurl
zoey-kaiser Sep 26, 2024
dd5d20b
Merge branch 'main' into 797/878/improve-local-baseurl
zoey-kaiser Oct 10, 2024
d3e8050
Merge branch 'main' into 797/878/improve-local-baseurl
phoenix-ru Oct 24, 2024
013fcc2
enh: get rid of computed property and introduce a new `resolveApiUrlP…
phoenix-ru Oct 24, 2024
1cd7381
chore: major refactoring
phoenix-ru Nov 7, 2024
f80f464
chore: fix pathname-only url resolution
phoenix-ru Nov 21, 2024
d23e961
chore: fix linter
phoenix-ru Nov 21, 2024
a260988
chore: update node version to 22.11 in CI runners
phoenix-ru Nov 21, 2024
ed9a4ed
Merge branch 'main' into 797/878/improve-local-baseurl
phoenix-ru Nov 21, 2024
ca48a11
chore: add unit tests to CI
phoenix-ru Nov 21, 2024
de5ca1f
fix: fix auth origin variable in CI authjs test
phoenix-ru Nov 21, 2024
f3762b7
fix: fix infinite recursion when trying to do auth on error pages
phoenix-ru Nov 21, 2024
ea32f8d
chore: fix linting
phoenix-ru Nov 21, 2024
2ece891
chore: remove commented out line
phoenix-ru Nov 22, 2024
5d8bd04
enh: propagate the `baseURL` from server to client via plugin
phoenix-ru Nov 28, 2024
65ae232
update startup message
zoey-kaiser Dec 12, 2024
8690b74
docs: get rid of todo
phoenix-ru Dec 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
branches: [main]

env:
NODE_VER: 22.5
NODE_VER: 22.11
CI: true

jobs:
Expand Down Expand Up @@ -37,6 +37,9 @@ jobs:
# Check linting and typing
- run: pnpm lint
- run: pnpm typecheck

# Run unit tests
- run: pnpm test:unit

# Check building
- run: pnpm build
Expand Down Expand Up @@ -131,5 +134,5 @@ jobs:
# start prod-app and curl from it
- run: "timeout 60 pnpm start & (sleep 45 && curl --fail localhost:$PORT)"
env:
AUTH_ORIGIN: "http://localhost:3001"
AUTH_ORIGIN: "http://localhost:3001/api/auth"
PORT: 3001
2 changes: 1 addition & 1 deletion .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
workflow_dispatch:

env:
NODE_VER: 22.5
NODE_VER: 22.11
CI: true

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pkg.pr.new.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
pull_request:

env:
NODE_VER: 22.5
NODE_VER: 22.11

jobs:
build:
Expand Down
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
"dev:prepare": "nuxt-module-build build --stub",
"docs:dev": "vitepress dev docs",
"docs:build": "vitepress build docs",
"docs:preview": "vitepress preview docs"
"docs:preview": "vitepress preview docs",
"test:unit": "vitest"
},
"dependencies": {
"@nuxt/kit": "^3.12.4",
Expand Down Expand Up @@ -61,6 +62,7 @@
"ts-essentials": "^9.4.2",
"typescript": "^5.5.4",
"vitepress": "^1.3.1",
"vitest": "^1.6.0",
"vue-tsc": "^2.0.29"
},
"packageManager": "[email protected]+sha512.38dc6fba8dba35b39340b9700112c2fe1e12f10b17134715a4aa98ccf7bb035e76fd981cf0bb384dfa98f8d6af5481c2bef2f4266a24bfa20c34eb7147ce0b5e"
Expand Down
2 changes: 1 addition & 1 deletion playground-authjs/nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export default defineNuxtConfig({
globalAppMiddleware: {
isEnabled: true
},
baseURL: `http://localhost:${process.env.PORT || 3000}`
baseURL: `http://localhost:${process.env.PORT || 3000}/api/auth`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like a breaking change

},
routeRules: {
'/with-caching': {
Expand Down
117 changes: 111 additions & 6 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 21 additions & 22 deletions src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ import {
useLogger
} from '@nuxt/kit'
import { defu } from 'defu'
import { joinURL } from 'ufo'
import { genInterface } from 'knitwork'
import type { DeepRequired } from 'ts-essentials'
import type { NuxtModule } from 'nuxt/schema'
import { getOriginAndPathnameFromURL, isProduction } from './runtime/helpers'
import { isProduction } from './runtime/helpers'
import type {
AuthProviders,
ModuleOptions,
Expand All @@ -26,6 +25,8 @@ import type {

const topLevelDefaults = {
isEnabled: true,
baseURL: '/api/auth',
disableInternalRouting: false as boolean,
disableServerSideAuth: false,
originEnvKey: 'AUTH_ORIGIN',
sessionRefresh: {
Expand Down Expand Up @@ -108,26 +109,16 @@ export default defineNuxtModule<ModuleOptions>({
const logger = useLogger(PACKAGE_NAME)

// 0. Assemble all options
const { origin, pathname = '/api/auth' } = getOriginAndPathnameFromURL(
userOptions.baseURL ?? ''
)

const selectedProvider = userOptions.provider?.type ?? 'authjs'

const options = {
...defu(userOptions, topLevelDefaults, {
computed: {
origin,
pathname,
fullBaseUrl: joinURL(origin ?? '', pathname)
}
}),
const options = defu({
// We use `as` to infer backend types correctly for runtime-usage (everything is set, although for user everything was optional)
provider: defu(
userOptions.provider,
defaultsByBackend[selectedProvider]
) as DeepRequired<AuthProviders>
}
}, userOptions, topLevelDefaults)

// 1. Check if module should be enabled at all
if (!options.isEnabled) {
Expand All @@ -137,15 +128,23 @@ export default defineNuxtModule<ModuleOptions>({

logger.info('`nuxt-auth` setup starting')

// 2. Set up runtime configuration
// 2.1. Disable internal routing for `local` provider when not specified otherwise
// https://github.com/sidebase/nuxt-auth/issues/797
if (userOptions.disableInternalRouting === undefined && selectedProvider === 'local') {
options.disableInternalRouting = true
}

// 2.2. Set up runtime configuration
if (!isProduction) {
const authjsAddition
= selectedProvider === 'authjs'
? ', ensure that `NuxtAuthHandler({ ... })` is there, see https://sidebase.io/nuxt-auth/configuration/nuxt-auth-handler'
: ''
logger.info(
`Selected provider: ${selectedProvider}. Auth API location is \`${options.computed.fullBaseUrl}\`${authjsAddition}`
)
const loggerMessages = [
`Selected provider: ${selectedProvider}.`,
`Auth API location is \`${options.baseURL}\`, if you would like to change this, see https://auth.sidebase.io/guide/application-side/configuration#baseurl.`
]
if (selectedProvider === 'authjs') {
loggerMessages.push('Ensure that the `NuxtAuthHandler({ ... })` is there, see https://auth.sidebase.io/guide/authjs/nuxt-auth-handler')
}

logger.info(loggerMessages.join(' '))
}

nuxt.options.runtimeConfig = nuxt.options.runtimeConfig || { public: {} }
Expand Down
Loading
Loading