Compare commits
55 Commits
@blitzjs/c
...
@blitzjs/c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
718a194891 | ||
|
|
0f18c68d63 | ||
|
|
3511d5b69b | ||
|
|
716e188d13 | ||
|
|
57a53fa3c2 | ||
|
|
abb1ad5d1c | ||
|
|
7096083038 | ||
|
|
0ac6e17122 | ||
|
|
8bcb471a53 | ||
|
|
abe2afccdf | ||
|
|
d9fc5d8e26 | ||
|
|
3f20a47405 | ||
|
|
72addbbeed | ||
|
|
1c809094fd | ||
|
|
54a66a95dc | ||
|
|
8d9ea00e1d | ||
|
|
ab4d9de70f | ||
|
|
8f166a5db0 | ||
|
|
df7cee84ad | ||
|
|
b364af7f57 | ||
|
|
20fc9f80f4 | ||
|
|
80e1ead7cb | ||
|
|
a3bbe6ce3f | ||
|
|
348fd6f5e4 | ||
|
|
cacb65d633 | ||
|
|
f397cc2036 | ||
|
|
ffa7b5ccc2 | ||
|
|
a961aff881 | ||
|
|
ac9c4cebc8 | ||
|
|
a7e37c58db | ||
|
|
b0d2505a85 | ||
|
|
024cd819e3 | ||
|
|
12cb7a727d | ||
|
|
923703b661 | ||
|
|
70f9ae4921 | ||
|
|
c738ecacbc | ||
|
|
ad0b087d9f | ||
|
|
dc694cf1cf | ||
|
|
4c221b655e | ||
|
|
c11f0401cf | ||
|
|
830b51d0dc | ||
|
|
bec9512e30 | ||
|
|
1493729d6b | ||
|
|
6bb5980da9 | ||
|
|
7310f7171d | ||
|
|
d855ee3e1d | ||
|
|
93851d90ca | ||
|
|
3ab05b3cda | ||
|
|
bb3dd56f7a | ||
|
|
1d9804a610 | ||
|
|
0fd1f9c9b1 | ||
|
|
b86b569d56 | ||
|
|
b405c1e876 | ||
|
|
c957828ea6 | ||
|
|
c78e5c4704 |
5
.changeset/cool-horses-check.md
Normal file
5
.changeset/cool-horses-check.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Fixes issue when generating a new blitz app with the form flag that ends up installing the wrong form library
|
||||
5
.changeset/curly-seas-serve.md
Normal file
5
.changeset/curly-seas-serve.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Check for new versions when running CLI
|
||||
5
.changeset/dirty-planets-chew.md
Normal file
5
.changeset/dirty-planets-chew.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/auth": patch
|
||||
---
|
||||
|
||||
Update `deleteSession` return type — allow undefined values
|
||||
5
.changeset/good-apes-drum.md
Normal file
5
.changeset/good-apes-drum.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Fixes wrong import of the db module in `blitz db seed` command function
|
||||
5
.changeset/gorgeous-buses-scream.md
Normal file
5
.changeset/gorgeous-buses-scream.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/next": patch
|
||||
---
|
||||
|
||||
Allow prefetching multiple queries in gSSP and gSP
|
||||
5
.changeset/heavy-apes-judge.md
Normal file
5
.changeset/heavy-apes-judge.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Show all blitz packages when running `blitz version` command
|
||||
5
.changeset/hungry-baboons-swim.md
Normal file
5
.changeset/hungry-baboons-swim.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Improve codemod utilities
|
||||
6
.changeset/lemon-games-press.md
Normal file
6
.changeset/lemon-games-press.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@blitzjs/rpc": patch
|
||||
"@blitzjs/generator": patch
|
||||
---
|
||||
|
||||
Update Next.js version and addBasePath location
|
||||
5
.changeset/lemon-seas-push.md
Normal file
5
.changeset/lemon-seas-push.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/generator": patch
|
||||
---
|
||||
|
||||
Don't try to copy RPC API endpoint in templates that don't have it
|
||||
10
.changeset/mean-gorillas-reply.md
Normal file
10
.changeset/mean-gorillas-reply.md
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
"@blitzjs/auth": patch
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Fix a long-standing issue with occasional blitz auth flakiness
|
||||
|
||||
This bug would sometimes cause users to be logged out or to experience an CSRFTokenMismatchError. This bug, when encountered, usually by lots of setPublicData or session.create calls, would not set the cookie headers correctly resulting in cookies being set to a previous state or in a possibly undefined state.
|
||||
|
||||
There are no security concerns as far as I can tell.
|
||||
6
.changeset/moody-bags-walk.md
Normal file
6
.changeset/moody-bags-walk.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@blitzjs/next": patch
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Fix redirectAuthenticatedTo errors
|
||||
6
.changeset/new-coats-turn.md
Normal file
6
.changeset/new-coats-turn.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"blitz": patch
|
||||
"@blitzjs/codemod": patch
|
||||
---
|
||||
|
||||
Handle duplicate imports with Blitz upgrade-legacy codemod
|
||||
5
.changeset/nice-deers-dream.md
Normal file
5
.changeset/nice-deers-dream.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/next": patch
|
||||
---
|
||||
|
||||
Export BlitzProvider from @blitzjs/next
|
||||
7
.changeset/nine-birds-confess.md
Normal file
7
.changeset/nine-birds-confess.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
"@blitzjs/next": patch
|
||||
"@blitzjs/rpc": patch
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Fix SSP / SP not prefetching queries correctly
|
||||
5
.changeset/ninety-lies-press.md
Normal file
5
.changeset/ninety-lies-press.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Temporarily skip version check
|
||||
5
.changeset/olive-sheep-rhyme.md
Normal file
5
.changeset/olive-sheep-rhyme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/generator": patch
|
||||
---
|
||||
|
||||
Add missing lint deps to the new app templates
|
||||
5
.changeset/perfect-eyes-repeat.md
Normal file
5
.changeset/perfect-eyes-repeat.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/rpc": patch
|
||||
---
|
||||
|
||||
Fix pipe resolver return type
|
||||
5
.changeset/popular-teachers-pay.md
Normal file
5
.changeset/popular-teachers-pay.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/codemod": patch
|
||||
---
|
||||
|
||||
Handle next/dynamic default import in codemod
|
||||
@@ -25,7 +25,10 @@
|
||||
"breezy-cameras-double",
|
||||
"bright-mangos-run",
|
||||
"cool-doors-invent",
|
||||
"cool-horses-check",
|
||||
"curly-seas-serve",
|
||||
"dirty-monkeys-greet",
|
||||
"dirty-planets-chew",
|
||||
"eleven-humans-sort",
|
||||
"empty-berries-rule",
|
||||
"empty-turkeys-wave",
|
||||
@@ -37,37 +40,64 @@
|
||||
"four-meals-fry",
|
||||
"fuzzy-jars-admire",
|
||||
"gentle-dogs-reply",
|
||||
"good-apes-drum",
|
||||
"good-insects-wink",
|
||||
"gorgeous-buses-scream",
|
||||
"great-months-train",
|
||||
"green-papayas-do",
|
||||
"healthy-rice-shout",
|
||||
"heavy-apes-judge",
|
||||
"hot-drinks-approve",
|
||||
"hungry-baboons-swim",
|
||||
"late-steaks-give",
|
||||
"lemon-games-press",
|
||||
"lemon-seas-push",
|
||||
"lovely-colts-share",
|
||||
"lucky-cows-try",
|
||||
"mean-gorillas-reply",
|
||||
"modern-cameras-pull",
|
||||
"moody-bags-walk",
|
||||
"moody-squids-cheer",
|
||||
"nervous-beds-travel",
|
||||
"nervous-dolls-rule",
|
||||
"new-coats-turn",
|
||||
"nice-deers-dream",
|
||||
"nice-starfishes-live",
|
||||
"nine-birds-confess",
|
||||
"nine-onions-admire",
|
||||
"ninety-lies-press",
|
||||
"ninety-pets-heal",
|
||||
"olive-bees-buy",
|
||||
"olive-feet-rhyme",
|
||||
"olive-sheep-rhyme",
|
||||
"perfect-eyes-repeat",
|
||||
"plenty-bottles-swim",
|
||||
"poor-peas-lick",
|
||||
"poor-penguins-look",
|
||||
"poor-shrimps-think",
|
||||
"popular-teachers-pay",
|
||||
"purple-singers-greet",
|
||||
"quick-cycles-confess",
|
||||
"quiet-feet-travel",
|
||||
"quiet-pans-hunt",
|
||||
"quiet-sloths-rule",
|
||||
"rich-chairs-invent",
|
||||
"rich-queens-travel",
|
||||
"sharp-falcons-begin",
|
||||
"shy-olives-hang",
|
||||
"silent-colts-reply",
|
||||
"silly-apricots-share",
|
||||
"slimy-needles-taste",
|
||||
"slow-walls-poke",
|
||||
"small-socks-confess",
|
||||
"smooth-planets-admire",
|
||||
"soft-adults-smell",
|
||||
"sour-lemons-hunt",
|
||||
"strong-apes-reply",
|
||||
"stupid-walls-sell",
|
||||
"sweet-kiwis-cross",
|
||||
"swift-drinks-dress",
|
||||
"tall-meals-learn",
|
||||
"tame-keys-reply",
|
||||
"tasty-news-collect",
|
||||
"ten-hairs-listen",
|
||||
@@ -75,7 +105,10 @@
|
||||
"tender-pianos-check",
|
||||
"thick-parrots-float",
|
||||
"thirty-countries-build",
|
||||
"tidy-clouds-smoke",
|
||||
"twelve-lemons-smile",
|
||||
"twenty-beans-pump",
|
||||
"two-carpets-rhyme",
|
||||
"two-kiwis-help",
|
||||
"two-tigers-type",
|
||||
"unlucky-papayas-sleep",
|
||||
|
||||
5
.changeset/quick-cycles-confess.md
Normal file
5
.changeset/quick-cycles-confess.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
fixes blitz not loading custom server
|
||||
5
.changeset/quiet-sloths-rule.md
Normal file
5
.changeset/quiet-sloths-rule.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/next": patch
|
||||
---
|
||||
|
||||
Removes the check for when withBlitz is mounted before rendering the users app. We had this previously to avoid the react 18 suspense error being showin in development with nextjs.
|
||||
8
.changeset/rich-queens-travel.md
Normal file
8
.changeset/rich-queens-travel.md
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
"blitz": patch
|
||||
"@blitzjs/auth": patch
|
||||
"@blitzjs/next": patch
|
||||
"@blitzjs/rpc": patch
|
||||
---
|
||||
|
||||
Remove references to the logging package
|
||||
5
.changeset/silly-apricots-share.md
Normal file
5
.changeset/silly-apricots-share.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/next": patch
|
||||
---
|
||||
|
||||
Avoid reassigning queryClient in prefetch methods
|
||||
6
.changeset/slimy-needles-taste.md
Normal file
6
.changeset/slimy-needles-taste.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@blitzjs/next": patch
|
||||
"@blitzjs/generator": patch
|
||||
---
|
||||
|
||||
Add jest.config.js to newly generated typescript apps
|
||||
6
.changeset/slow-walls-poke.md
Normal file
6
.changeset/slow-walls-poke.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@blitzjs/next": patch
|
||||
"@blitzjs/rpc": patch
|
||||
---
|
||||
|
||||
Allow resolverPath to be a function which is ran for every file path that is converted to RPC Route
|
||||
5
.changeset/smooth-planets-admire.md
Normal file
5
.changeset/smooth-planets-admire.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/generator": patch
|
||||
---
|
||||
|
||||
Add missing \_document.tsx and 404.tsx pages to the new app templates
|
||||
5
.changeset/soft-adults-smell.md
Normal file
5
.changeset/soft-adults-smell.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/auth": patch
|
||||
---
|
||||
|
||||
Fix `Page.authenticate` not working for layout components
|
||||
9
.changeset/sour-lemons-hunt.md
Normal file
9
.changeset/sour-lemons-hunt.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
"@blitzjs/auth": patch
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Fix auth issue where session token and publicData cookie were updated unnecessarily, leading to potential user logout
|
||||
|
||||
- Previously, we were updating the session token each time public data changed. This is not needed, and it would cause race condition bugs where a user could be unexpectedly logged out because a request already in flight would not match the new session token.
|
||||
- Previously, we were updating the publicData cookie even when it hadn't changed. This may reduce unnecessary re-renders on the client.
|
||||
5
.changeset/strong-apes-reply.md
Normal file
5
.changeset/strong-apes-reply.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/generator": patch
|
||||
---
|
||||
|
||||
Remove as any assertion for the PrismaStorage argument
|
||||
5
.changeset/sweet-kiwis-cross.md
Normal file
5
.changeset/sweet-kiwis-cross.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/rpc": patch
|
||||
---
|
||||
|
||||
Fix queries/mutations lookup on Windows
|
||||
5
.changeset/tall-meals-learn.md
Normal file
5
.changeset/tall-meals-learn.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/generator": patch
|
||||
---
|
||||
|
||||
Upgrade Prisma to v4.0.0
|
||||
5
.changeset/tidy-clouds-smoke.md
Normal file
5
.changeset/tidy-clouds-smoke.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
Fix routes manifest showing duplicates for non queries|resolvers reso…
|
||||
5
.changeset/twelve-lemons-smile.md
Normal file
5
.changeset/twelve-lemons-smile.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@blitzjs/next": patch
|
||||
---
|
||||
|
||||
Fix prefetching multiple queries causes only the last one to be passed to page
|
||||
5
.changeset/two-carpets-rhyme.md
Normal file
5
.changeset/two-carpets-rhyme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"blitz": patch
|
||||
---
|
||||
|
||||
During `blitz new` if project name argument is set to "." change it to current folder name
|
||||
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
@@ -1,5 +1,5 @@
|
||||
# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners
|
||||
|
||||
* @flybayer @beerose @dillonraphael
|
||||
* @beerose @dillonraphael
|
||||
|
||||
packages/generator/templates**/* @flybayer
|
||||
|
||||
43
.github/release-drafter.yml
vendored
43
.github/release-drafter.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: "v$RESOLVED_VERSION"
|
||||
tag-template: "v$RESOLVED_VERSION"
|
||||
# categories:
|
||||
# - title: 'Blitz'
|
||||
# label: 'blitz'
|
||||
# - title: '@blitzjs/next'
|
||||
# label: 'blitz-next'
|
||||
# - title: '@blitzjs/rpc'
|
||||
# label: 'blitz-rpc'
|
||||
# - title: '@blitzjs/auth'
|
||||
# label: 'blitz-auth'
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- "major"
|
||||
minor:
|
||||
labels:
|
||||
- "minor"
|
||||
patch:
|
||||
labels:
|
||||
- "patch"
|
||||
default: patch
|
||||
# autolabeler:
|
||||
# - label: 'blitz'
|
||||
# title:
|
||||
# - '/blitz/i'
|
||||
# - label: 'blitz-next'
|
||||
# title:
|
||||
# - '/@blitzjs\/next/i'
|
||||
# - label: 'blitz-rpc'
|
||||
# title:
|
||||
# - '/@blitzjs\/rpc/i'
|
||||
# - label: 'blitz-auth'
|
||||
# title:
|
||||
# - '/@blitzjs\/auth/i'
|
||||
template: |
|
||||
## What’s Changed
|
||||
|
||||
$CHANGES
|
||||
|
||||
## Contributors
|
||||
|
||||
$CONTRIBUTORS
|
||||
14
.github/workflows/release.yml
vendored
14
.github/workflows/release.yml
vendored
@@ -42,15 +42,17 @@ jobs:
|
||||
- run: pnpm build
|
||||
|
||||
- name: Create Release Pull Request
|
||||
uses: changesets/action@v1
|
||||
uses: blitz-js/changesets-action@main
|
||||
with:
|
||||
publish: pnpm release
|
||||
createGithubReleases: false
|
||||
createGithubReleases: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
||||
- name: Github Release
|
||||
uses: release-drafter/release-drafter@v5.19.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# - name: Github Release
|
||||
# uses: release-drafter/release-drafter@v5.19.0
|
||||
# with:
|
||||
# config-name: release-drafter.yml
|
||||
# env:
|
||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
2
.npmrc
2
.npmrc
@@ -6,4 +6,4 @@ public-hoist-pattern[]=*types*
|
||||
public-hoist-pattern[]=*eslint*
|
||||
public-hoist-pattern[]=@prettier/plugin-*
|
||||
public-hoist-pattern[]=*prettier-plugin-*
|
||||
strict-peer-dependencies=false
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Contributing
|
||||
|
||||
[Read the Contributing Guide at Blitzjs.com](https://blitzjs.com/docs/contributing)
|
||||
[Read the Contributing Guide at Blitzjs.com](https://alpha.blitzjs.com/docs/contributing)
|
||||
|
||||
## To run tests
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NotFoundError } from "blitz"
|
||||
import { db } from "db"
|
||||
import db from "db"
|
||||
import { authenticateUser } from "./login"
|
||||
import { ChangePassword } from "../validations"
|
||||
import { resolver } from "@blitzjs/rpc"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { generateToken, hash256 } from "@blitzjs/auth"
|
||||
import { resolver } from "@blitzjs/rpc"
|
||||
import { db } from "db"
|
||||
import db from "db"
|
||||
import { forgotPasswordMailer } from "mailers/forgotPasswordMailer"
|
||||
import { ForgotPassword } from "../validations"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SecurePassword } from "@blitzjs/auth"
|
||||
import { resolver } from "@blitzjs/rpc"
|
||||
import { AuthenticationError } from "blitz"
|
||||
import { db } from "db"
|
||||
import db from "db"
|
||||
import { Role } from "types"
|
||||
import { Login } from "../validations"
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { SecurePassword, hash256 } from "@blitzjs/auth"
|
||||
import { db } from "db"
|
||||
import db from "db"
|
||||
import { ResetPassword } from "../validations"
|
||||
import login from "./login"
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { db } from "db"
|
||||
import db from "db"
|
||||
import { SecurePassword } from "@blitzjs/auth"
|
||||
import { Role } from "types"
|
||||
|
||||
export default async function signup(input, ctx) {
|
||||
const blitzContext = ctx
|
||||
@@ -13,6 +14,7 @@ export default async function signup(input, ctx) {
|
||||
|
||||
await blitzContext.session.$create({
|
||||
userId: user.id,
|
||||
role: user.role as Role,
|
||||
})
|
||||
|
||||
return { userId: blitzContext.session.userId, ...user, email: input.email }
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
import { setupBlitzServer } from "@blitzjs/next"
|
||||
import { AuthServerPlugin, PrismaStorage } from "@blitzjs/auth"
|
||||
import { db } from "db"
|
||||
import db from "db"
|
||||
import { simpleRolesIsAuthorized } from "@blitzjs/auth"
|
||||
|
||||
const { gSSP, gSP, api } = setupBlitzServer({
|
||||
plugins: [
|
||||
AuthServerPlugin({
|
||||
cookiePrefix: "web-cookie-prefix",
|
||||
// TODO fix type
|
||||
storage: PrismaStorage(db as any),
|
||||
storage: PrismaStorage(db),
|
||||
isAuthorized: simpleRolesIsAuthorized,
|
||||
}),
|
||||
],
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import React from "react"
|
||||
import Head from "next/head"
|
||||
import React, { FC } from "react"
|
||||
import { BlitzLayout } from "@blitzjs/next"
|
||||
|
||||
const Layout: FC<{ title?: string; children?: React.ReactNode }> = ({ title, children }) => {
|
||||
const Layout: BlitzLayout<{ title?: string; children?: React.ReactNode }> = ({
|
||||
title,
|
||||
children,
|
||||
}) => {
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Ctx } from "blitz"
|
||||
import { db } from "db"
|
||||
import db from "db"
|
||||
|
||||
export default async function getCurrentUser(_ = null, { session }: Ctx) {
|
||||
if (!session.userId) return null
|
||||
|
||||
@@ -5,4 +5,4 @@ const EnhancedPrisma = enhancePrisma(PrismaClient)
|
||||
|
||||
export * from "@prisma/client"
|
||||
const db = new EnhancedPrisma()
|
||||
export { db }
|
||||
export default db
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { db } from "./index"
|
||||
import db from "./index"
|
||||
|
||||
/*
|
||||
* This seed function is executed when you run `blitz db seed`.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "toolkit-app",
|
||||
"version": "1.0.1-alpha.16",
|
||||
"scripts": {
|
||||
"start:dev": "pnpm run prisma:start && next dev",
|
||||
"start:dev": "pnpm run prisma:start && blitz dev",
|
||||
"buildapp": "NODE_ENV=production pnpm blitz codegen && pnpm prisma generate && next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
@@ -29,14 +29,14 @@
|
||||
"@blitzjs/rpc": "workspace:*",
|
||||
"@hookform/resolvers": "2.8.8",
|
||||
"@prisma/client": "3.9.0",
|
||||
"blitz": "workspace:2.0.0-alpha.46",
|
||||
"next": "12.1.6-canary.17",
|
||||
"prisma": "3.9.0",
|
||||
"blitz": "workspace:2.0.0-alpha.57",
|
||||
"next": "12.2.0",
|
||||
"prisma": "4.0.0",
|
||||
"react": "18.0.0",
|
||||
"react-dom": "18.0.0",
|
||||
"react-hook-form": "7.29.0",
|
||||
"ts-node": "10.7.0",
|
||||
"zod": "3.10.1"
|
||||
"zod": "3.17.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@next/bundle-analyzer": "12.0.8",
|
||||
@@ -46,7 +46,10 @@
|
||||
"@types/node": "17.0.16",
|
||||
"@types/preview-email": "2.0.1",
|
||||
"@types/react": "18.0.1",
|
||||
"@typescript-eslint/eslint-plugin": "5.9.1",
|
||||
"eslint": "7.32.0",
|
||||
"eslint-config-next": "12.2.0",
|
||||
"eslint-config-prettier": "8.5.0",
|
||||
"husky": "7.0.4",
|
||||
"jest": "27.5.1",
|
||||
"lint-staged": "12.1.7",
|
||||
|
||||
20
apps/toolkit-app/pages/404.tsx
Normal file
20
apps/toolkit-app/pages/404.tsx
Normal file
@@ -0,0 +1,20 @@
|
||||
import Head from "next/head"
|
||||
import { ErrorComponent } from "@blitzjs/next"
|
||||
|
||||
// ------------------------------------------------------
|
||||
// This page is rendered if a route match is not found
|
||||
// ------------------------------------------------------
|
||||
export default function Page404() {
|
||||
const statusCode = 404
|
||||
const title = "This page could not be found"
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<title>
|
||||
{statusCode}: {title}
|
||||
</title>
|
||||
</Head>
|
||||
<ErrorComponent statusCode={statusCode} title={title} />
|
||||
</>
|
||||
)
|
||||
}
|
||||
22
apps/toolkit-app/pages/_document.tsx
Normal file
22
apps/toolkit-app/pages/_document.tsx
Normal file
@@ -0,0 +1,22 @@
|
||||
import Document, { Html, Main, NextScript, Head } from "next/document"
|
||||
|
||||
class MyDocument extends Document {
|
||||
// Only uncomment if you need to customize this behaviour
|
||||
// static async getInitialProps(ctx: DocumentContext) {
|
||||
// const initialProps = await Document.getInitialProps(ctx)
|
||||
// return {...initialProps}
|
||||
// }
|
||||
render() {
|
||||
return (
|
||||
<Html lang="en">
|
||||
<Head />
|
||||
<body>
|
||||
<Main />
|
||||
<NextScript />
|
||||
</body>
|
||||
</Html>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default MyDocument
|
||||
@@ -7,8 +7,7 @@ const {gSSP, gSP, api} = setupBlitzServer({
|
||||
plugins: [
|
||||
AuthServerPlugin({
|
||||
cookiePrefix: "webapp-cookie-prefix",
|
||||
// TODO fix type
|
||||
storage: PrismaStorage(db as any),
|
||||
storage: PrismaStorage(db),
|
||||
isAuthorized: simpleRolesIsAuthorized,
|
||||
}),
|
||||
],
|
||||
|
||||
@@ -10,7 +10,6 @@ module.exports = withBlitz(
|
||||
customServer: {
|
||||
hotReload: false,
|
||||
},
|
||||
resolverBasePath: "root",
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
@@ -25,10 +25,10 @@
|
||||
"@types/passport-twitter": "1.0.37",
|
||||
"blitz": "workspace:*",
|
||||
"jest": "27.5.1",
|
||||
"next": "12.1.6-canary.17",
|
||||
"next": "12.2.0",
|
||||
"passport-mock-strategy": "2.0.0",
|
||||
"passport-twitter": "1.0.4",
|
||||
"prisma": "3.9.0",
|
||||
"prisma": "4.0.0",
|
||||
"react": "18.0.0",
|
||||
"react-dom": "18.0.0",
|
||||
"ts-node": "10.7.0"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {ErrorFallbackProps, ErrorComponent, ErrorBoundary, AppProps} from "@blitzjs/next"
|
||||
import {AuthenticationError, AuthorizationError} from "blitz"
|
||||
import React from "react"
|
||||
import React, {Suspense} from "react"
|
||||
import {withBlitz} from "app/blitz-client"
|
||||
|
||||
function RootErrorFallback({error}: ErrorFallbackProps) {
|
||||
@@ -26,7 +26,9 @@ function RootErrorFallback({error}: ErrorFallbackProps) {
|
||||
function MyApp({Component, pageProps}: AppProps) {
|
||||
return (
|
||||
<ErrorBoundary FallbackComponent={RootErrorFallback}>
|
||||
<Component {...pageProps} />
|
||||
<Suspense fallback="Loading...">
|
||||
<Component {...pageProps} />
|
||||
</Suspense>
|
||||
</ErrorBoundary>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import {setupBlitzServer} from "@blitzjs/next"
|
||||
import {AuthServerPlugin, PrismaStorage} from "@blitzjs/auth"
|
||||
import {simpleRolesIsAuthorized} from "@blitzjs/auth"
|
||||
import {prisma as db} from "../prisma/index"
|
||||
import db from "../prisma/index"
|
||||
|
||||
const {gSSP, gSP, api} = setupBlitzServer({
|
||||
plugins: [
|
||||
AuthServerPlugin({
|
||||
cookiePrefix: "auth-tests-cookie-prefix",
|
||||
storage: PrismaStorage(db as any),
|
||||
storage: PrismaStorage(db),
|
||||
isAuthorized: simpleRolesIsAuthorized,
|
||||
}),
|
||||
],
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
"@prisma/client": "3.9.0",
|
||||
"blitz": "workspace:*",
|
||||
"lowdb": "3.0.0",
|
||||
"next": "12.1.6-canary.17",
|
||||
"prisma": "3.9.0",
|
||||
"next": "12.2.0",
|
||||
"prisma": "4.0.0",
|
||||
"react": "18.0.0",
|
||||
"react-dom": "18.0.0"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {ErrorFallbackProps, ErrorComponent, ErrorBoundary, AppProps} from "@blitzjs/next"
|
||||
import {AuthenticationError, AuthorizationError} from "blitz"
|
||||
import React from "react"
|
||||
import React, {Suspense} from "react"
|
||||
import {withBlitz} from "../app/blitz-client"
|
||||
|
||||
function RootErrorFallback({error}: ErrorFallbackProps) {
|
||||
@@ -25,9 +25,11 @@ function RootErrorFallback({error}: ErrorFallbackProps) {
|
||||
|
||||
function MyApp({Component, pageProps}: AppProps) {
|
||||
return (
|
||||
<ErrorBoundary FallbackComponent={RootErrorFallback}>
|
||||
<Component {...pageProps} />
|
||||
</ErrorBoundary>
|
||||
<Suspense fallback="Loading...">
|
||||
<ErrorBoundary FallbackComponent={RootErrorFallback}>
|
||||
<Component {...pageProps} />
|
||||
</ErrorBoundary>
|
||||
</Suspense>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import {api} from "../../app/blitz-server"
|
||||
import {prisma} from "../../prisma/index"
|
||||
import prisma from "../../prisma/index"
|
||||
import {SecurePassword} from "@blitzjs/auth"
|
||||
import {Role} from "../../types"
|
||||
|
||||
export const authenticateUser = async (email: string, password: string) => {
|
||||
const user = await prisma.user.findFirst({where: {email}})
|
||||
@@ -26,6 +27,7 @@ export default api(async (req, res, ctx) => {
|
||||
|
||||
await blitzContext.session.$create({
|
||||
userId: user.id,
|
||||
role: user.role as Role,
|
||||
})
|
||||
|
||||
res.status(200).json({email: req.query.email, userId: blitzContext.session.userId})
|
||||
|
||||
@@ -5,4 +5,4 @@ const EnhancedPrisma = enhancePrisma(PrismaClient)
|
||||
|
||||
export * from "@prisma/client"
|
||||
const prisma = new EnhancedPrisma()
|
||||
export {prisma}
|
||||
export default prisma
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {prisma} from "./index"
|
||||
import prisma from "./index"
|
||||
import {SecurePassword} from "@blitzjs/auth"
|
||||
|
||||
const seed = async () => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"extends": "@blitzjs/config/tsconfig.nextjs.json",
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "types"],
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"react": ["./node_modules/@types/react"]
|
||||
|
||||
15
integration-tests/auth/types.ts
Normal file
15
integration-tests/auth/types.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import {SimpleRolesIsAuthorized} from "@blitzjs/auth"
|
||||
import {User} from "./prisma"
|
||||
|
||||
export type Role = "ADMIN" | "USER"
|
||||
|
||||
declare module "@blitzjs/auth" {
|
||||
export interface Session {
|
||||
isAuthorized: SimpleRolesIsAuthorized<Role>
|
||||
PublicData: {
|
||||
userId: User["id"]
|
||||
role: Role
|
||||
views?: number
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,2 @@
|
||||
const {withBlitz} = require("@blitzjs/next")
|
||||
module.exports = withBlitz({
|
||||
// update me
|
||||
})
|
||||
module.exports = withBlitz({})
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"@blitzjs/next": "workspace:*",
|
||||
"@blitzjs/rpc": "workspace:*",
|
||||
"blitz": "workspace:*",
|
||||
"next": "12.1.6-canary.17",
|
||||
"next": "12.2.0",
|
||||
"react": "18.0.0",
|
||||
"react-dom": "18.0.0"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {ErrorFallbackProps, ErrorComponent, ErrorBoundary, AppProps} from "@blitzjs/next"
|
||||
import {AuthenticationError, AuthorizationError} from "blitz"
|
||||
import React from "react"
|
||||
import React, {Suspense} from "react"
|
||||
import {withBlitz} from "../app/blitz-client"
|
||||
|
||||
function RootErrorFallback({error}: ErrorFallbackProps) {
|
||||
@@ -25,9 +25,11 @@ function RootErrorFallback({error}: ErrorFallbackProps) {
|
||||
|
||||
function MyApp({Component, pageProps}: AppProps) {
|
||||
return (
|
||||
<ErrorBoundary FallbackComponent={RootErrorFallback}>
|
||||
<Component {...pageProps} />
|
||||
</ErrorBoundary>
|
||||
<Suspense fallback="Loading...">
|
||||
<ErrorBoundary FallbackComponent={RootErrorFallback}>
|
||||
<Component {...pageProps} />
|
||||
</ErrorBoundary>
|
||||
</Suspense>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"extends": "@blitzjs/config/tsconfig.nextjs.json",
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "types"],
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"react": ["./node_modules/@types/react"]
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import {setupBlitzServer} from "@blitzjs/next"
|
||||
import {AuthServerPlugin, PrismaStorage} from "@blitzjs/auth"
|
||||
import {simpleRolesIsAuthorized} from "@blitzjs/auth"
|
||||
import {prisma as db} from "../prisma/index"
|
||||
import db from "../prisma/index"
|
||||
|
||||
const {gSSP, gSP, api} = setupBlitzServer({
|
||||
plugins: [
|
||||
AuthServerPlugin({
|
||||
cookiePrefix: "no-suspense-tests-cookie-prefix",
|
||||
storage: PrismaStorage(db as any),
|
||||
storage: PrismaStorage(db),
|
||||
isAuthorized: simpleRolesIsAuthorized,
|
||||
}),
|
||||
],
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
"@prisma/client": "3.9.0",
|
||||
"blitz": "workspace:*",
|
||||
"lowdb": "3.0.0",
|
||||
"next": "12.1.6-canary.17",
|
||||
"prisma": "3.9.0",
|
||||
"next": "12.2.0",
|
||||
"prisma": "4.0.0",
|
||||
"react": "18.0.0",
|
||||
"react-dom": "18.0.0"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {ErrorFallbackProps, ErrorComponent, ErrorBoundary, AppProps} from "@blitzjs/next"
|
||||
import {AuthenticationError, AuthorizationError} from "blitz"
|
||||
import React from "react"
|
||||
import React, {Suspense} from "react"
|
||||
import {withBlitz} from "../app/blitz-client"
|
||||
|
||||
function RootErrorFallback({error}: ErrorFallbackProps) {
|
||||
@@ -25,9 +25,11 @@ function RootErrorFallback({error}: ErrorFallbackProps) {
|
||||
|
||||
function MyApp({Component, pageProps}: AppProps) {
|
||||
return (
|
||||
<ErrorBoundary FallbackComponent={RootErrorFallback}>
|
||||
<Component {...pageProps} />
|
||||
</ErrorBoundary>
|
||||
<Suspense fallback="Loading...">
|
||||
<ErrorBoundary FallbackComponent={RootErrorFallback}>
|
||||
<Component {...pageProps} />
|
||||
</ErrorBoundary>
|
||||
</Suspense>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -5,4 +5,4 @@ const EnhancedPrisma = enhancePrisma(PrismaClient)
|
||||
|
||||
export * from "@prisma/client"
|
||||
const prisma = new EnhancedPrisma()
|
||||
export {prisma}
|
||||
export default prisma
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {prisma} from "./index"
|
||||
import prisma from "./index"
|
||||
|
||||
const seed = async () => {
|
||||
await prisma.$reset()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"extends": "@blitzjs/config/tsconfig.nextjs.json",
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "types"],
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"react": ["./node_modules/@types/react"]
|
||||
|
||||
15
integration-tests/no-suspense/types.ts
Normal file
15
integration-tests/no-suspense/types.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import {SimpleRolesIsAuthorized} from "@blitzjs/auth"
|
||||
import {User} from "./prisma"
|
||||
|
||||
export type Role = "ADMIN" | "USER"
|
||||
|
||||
declare module "@blitzjs/auth" {
|
||||
export interface Session {
|
||||
isAuthorized: SimpleRolesIsAuthorized<Role>
|
||||
PublicData: {
|
||||
userId: User["id"]
|
||||
role: Role
|
||||
views?: number
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,8 +14,8 @@
|
||||
"@blitzjs/rpc": "workspace:*",
|
||||
"@prisma/client": "3.9.0",
|
||||
"blitz": "workspace:*",
|
||||
"next": "12.1.6-canary.17",
|
||||
"prisma": "3.9.0",
|
||||
"next": "12.2.0",
|
||||
"prisma": "4.0.0",
|
||||
"react": "18.0.0",
|
||||
"react-dom": "18.0.0",
|
||||
"react-query": "3.39.0"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const {withBlitz} = require("@blitzjs/next")
|
||||
module.exports = withBlitz({
|
||||
target: 'experimental-serverless-trace',
|
||||
target: "experimental-serverless-trace",
|
||||
})
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"@blitzjs/next": "workspace:*",
|
||||
"@blitzjs/rpc": "workspace:*",
|
||||
"blitz": "workspace:*",
|
||||
"next": "12.1.6-canary.17",
|
||||
"next": "12.2.0",
|
||||
"react": "18.0.0",
|
||||
"react-dom": "18.0.0"
|
||||
},
|
||||
|
||||
@@ -15,6 +15,6 @@
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve"
|
||||
},
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "types"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import {setupBlitzServer} from "@blitzjs/next"
|
||||
import {AuthServerPlugin, PrismaStorage} from "@blitzjs/auth"
|
||||
import {simpleRolesIsAuthorized} from "@blitzjs/auth"
|
||||
import {prisma as db} from "../prisma/index"
|
||||
import db from "../db"
|
||||
|
||||
const {gSSP, gSP, api} = setupBlitzServer({
|
||||
plugins: [
|
||||
AuthServerPlugin({
|
||||
cookiePrefix: "trailing-slash-tests-cookie-prefix",
|
||||
storage: PrismaStorage(db as any),
|
||||
storage: PrismaStorage(db),
|
||||
isAuthorized: simpleRolesIsAuthorized,
|
||||
}),
|
||||
],
|
||||
|
||||
@@ -5,4 +5,4 @@ const EnhancedPrisma = enhancePrisma(PrismaClient)
|
||||
|
||||
export * from "@prisma/client"
|
||||
const prisma = new EnhancedPrisma()
|
||||
export {prisma}
|
||||
export default prisma
|
||||
@@ -1,4 +1,4 @@
|
||||
import {prisma} from "./index"
|
||||
import prisma from "./index"
|
||||
|
||||
const seed = async () => {
|
||||
await prisma.$reset()
|
||||
@@ -12,6 +12,9 @@
|
||||
"prisma:start": "prisma generate && prisma migrate deploy",
|
||||
"prisma:studio": "prisma studio"
|
||||
},
|
||||
"prisma": {
|
||||
"schema": "db/schema.prisma"
|
||||
},
|
||||
"dependencies": {
|
||||
"@blitzjs/auth": "workspace:*",
|
||||
"@blitzjs/next": "workspace:*",
|
||||
@@ -19,8 +22,8 @@
|
||||
"@prisma/client": "3.9.0",
|
||||
"blitz": "workspace:*",
|
||||
"lowdb": "3.0.0",
|
||||
"next": "12.1.6-canary.17",
|
||||
"prisma": "3.9.0",
|
||||
"next": "12.2.0",
|
||||
"prisma": "4.0.0",
|
||||
"react": "18.0.0",
|
||||
"react-dom": "18.0.0"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {ErrorFallbackProps, ErrorComponent, ErrorBoundary, AppProps} from "@blitzjs/next"
|
||||
import {AuthenticationError, AuthorizationError} from "blitz"
|
||||
import React from "react"
|
||||
import React, {Suspense} from "react"
|
||||
import {withBlitz} from "../app/blitz-client"
|
||||
|
||||
function RootErrorFallback({error}: ErrorFallbackProps) {
|
||||
@@ -25,9 +25,11 @@ function RootErrorFallback({error}: ErrorFallbackProps) {
|
||||
|
||||
function MyApp({Component, pageProps}: AppProps) {
|
||||
return (
|
||||
<ErrorBoundary FallbackComponent={RootErrorFallback}>
|
||||
<Component {...pageProps} />
|
||||
</ErrorBoundary>
|
||||
<Suspense fallback="Loading...">
|
||||
<ErrorBoundary FallbackComponent={RootErrorFallback}>
|
||||
<Component {...pageProps} />
|
||||
</ErrorBoundary>
|
||||
</Suspense>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"extends": "@blitzjs/config/tsconfig.nextjs.json",
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "types"],
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"react": ["./node_modules/@types/react"]
|
||||
|
||||
15
integration-tests/trailing-slash/types.ts
Normal file
15
integration-tests/trailing-slash/types.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import {SimpleRolesIsAuthorized} from "@blitzjs/auth"
|
||||
import {User} from "./db"
|
||||
|
||||
export type Role = "ADMIN" | "USER"
|
||||
|
||||
declare module "@blitzjs/auth" {
|
||||
export interface Session {
|
||||
isAuthorized: SimpleRolesIsAuthorized<Role>
|
||||
PublicData: {
|
||||
userId: User["id"]
|
||||
role: Role
|
||||
views?: number
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -28,9 +28,8 @@
|
||||
"husky": "7.0.4",
|
||||
"jsdom": "^19.0.0",
|
||||
"lint-staged": "12.1.7",
|
||||
"next": "12.1.6-canary.17",
|
||||
"next": "12.2.0",
|
||||
"only-allow": "1.1.0",
|
||||
"patch-package": "6.4.7",
|
||||
"prettier": "^2.5.1",
|
||||
"prettier-plugin-prisma": "3.8.0",
|
||||
"pretty-quick": "3.1.3",
|
||||
@@ -39,5 +38,5 @@
|
||||
"wait-on": "6.0.1"
|
||||
},
|
||||
"npmClient": "pnpm",
|
||||
"packageManager": "pnpm@6.21.0"
|
||||
"packageManager": "pnpm@7.4.0-1"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,100 @@
|
||||
# @blitzjs/auth
|
||||
|
||||
## 2.0.0-alpha.57
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3511d5b6]
|
||||
- blitz@2.0.0-alpha.57
|
||||
|
||||
## 2.0.0-alpha.56
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3f20a474: Update `deleteSession` return type — allow undefined values
|
||||
- abe2afcc: Fix a long-standing issue with occasional blitz auth flakiness
|
||||
|
||||
This bug would sometimes cause users to be logged out or to experience an CSRFTokenMismatchError. This bug, when encountered, usually by lots of setPublicData or session.create calls, would not set the cookie headers correctly resulting in cookies being set to a previous state or in a possibly undefined state.
|
||||
|
||||
There are no security concerns as far as I can tell.
|
||||
|
||||
- 8bcb471a: Fix auth issue where session token and publicData cookie were updated unnecessarily, leading to potential user logout
|
||||
|
||||
- Previously, we were updating the session token each time public data changed. This is not needed, and it would cause race condition bugs where a user could be unexpectedly logged out because a request already in flight would not match the new session token.
|
||||
- Previously, we were updating the publicData cookie even when it hadn't changed. This may reduce unnecessary re-renders on the client.
|
||||
|
||||
- Updated dependencies [abb1ad5d]
|
||||
- Updated dependencies [abe2afcc]
|
||||
- Updated dependencies [0ac6e171]
|
||||
- Updated dependencies [8bcb471a]
|
||||
- blitz@2.0.0-alpha.56
|
||||
|
||||
## 2.0.0-alpha.55
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1c809094: Fix `Page.authenticate` not working for layout components
|
||||
- Updated dependencies [8f166a5d]
|
||||
- Updated dependencies [54a66a95]
|
||||
- blitz@2.0.0-alpha.55
|
||||
|
||||
## 2.0.0-alpha.54
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f397cc20]
|
||||
- Updated dependencies [cacb65d6]
|
||||
- Updated dependencies [348fd6f5]
|
||||
- Updated dependencies [20fc9f80]
|
||||
- Updated dependencies [a3bbe6ce]
|
||||
- Updated dependencies [ffa7b5cc]
|
||||
- blitz@2.0.0-alpha.54
|
||||
|
||||
## 2.0.0-alpha.53
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- blitz@2.0.0-alpha.53
|
||||
|
||||
## 2.0.0-alpha.52
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- blitz@2.0.0-alpha.52
|
||||
|
||||
## 2.0.0-alpha.51
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- blitz@2.0.0-alpha.51
|
||||
|
||||
## 2.0.0-alpha.50
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- blitz@2.0.0-alpha.50
|
||||
|
||||
## 2.0.0-alpha.49
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- blitz@2.0.0-alpha.49
|
||||
|
||||
## 2.0.0-alpha.48
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [93851d90]
|
||||
- blitz@2.0.0-alpha.48
|
||||
|
||||
## 2.0.0-alpha.47
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1d9804a6: Remove references to the logging package
|
||||
- Updated dependencies [1d9804a6]
|
||||
- blitz@2.0.0-alpha.47
|
||||
|
||||
## 2.0.0-alpha.46
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@blitzjs/auth",
|
||||
"version": "2.0.0-alpha.46",
|
||||
"version": "2.0.0-alpha.57",
|
||||
"scripts": {
|
||||
"build": "unbuild",
|
||||
"predev": "wait-on -d 250 ../blitz/dist/index-server.d.ts",
|
||||
@@ -26,7 +26,7 @@
|
||||
"@types/secure-password": "3.1.1",
|
||||
"b64-lite": "1.4.0",
|
||||
"bad-behavior": "1.0.1",
|
||||
"blitz": "2.0.0-alpha.46",
|
||||
"blitz": "2.0.0-alpha.57",
|
||||
"cookie": "0.4.1",
|
||||
"cookie-session": "2.0.0",
|
||||
"debug": "4.3.3",
|
||||
@@ -39,7 +39,7 @@
|
||||
"url": "0.11.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@blitzjs/config": "workspace:2.0.0-alpha.46",
|
||||
"@blitzjs/config": "workspace:2.0.0-alpha.57",
|
||||
"@testing-library/react": "13.0.0",
|
||||
"@testing-library/react-hooks": "7.0.2",
|
||||
"@types/cookie": "0.4.1",
|
||||
|
||||
@@ -216,8 +216,8 @@ export function getAuthValues<TProps = any>(
|
||||
) {
|
||||
if (!Page) return {}
|
||||
|
||||
let authenticate = "authenticate" in Page && Page.authenticate
|
||||
let redirectAuthenticatedTo = "redirectAuthenticatedTo" in Page && Page.redirectAuthenticatedTo
|
||||
let authenticate = (Page as BlitzPage)?.authenticate
|
||||
let redirectAuthenticatedTo = (Page as BlitzPage)?.redirectAuthenticatedTo
|
||||
|
||||
if (authenticate === undefined && redirectAuthenticatedTo === undefined) {
|
||||
const layout = "getLayout" in Page && Page.getLayout?.(<Page {...props} />)
|
||||
|
||||
41
packages/blitz-auth/src/server/auth-sessions.test.ts
Normal file
41
packages/blitz-auth/src/server/auth-sessions.test.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import {expect, describe, it} from "vitest"
|
||||
import {setCookie} from "./auth-sessions"
|
||||
import cookie from "cookie"
|
||||
import {ServerResponse} from "http"
|
||||
|
||||
describe("blitz-auth", () => {
|
||||
describe("setCookie", () => {
|
||||
it("works with empty start", async () => {
|
||||
const res = new ServerResponse({} as any)
|
||||
setCookie(res, cookie.serialize("A", "a-value", {}))
|
||||
expect(res.getHeader("Set-Cookie")).toBe("A=a-value")
|
||||
})
|
||||
|
||||
it("works with string start", async () => {
|
||||
const res = new ServerResponse({} as any)
|
||||
res.setHeader("Set-Cookie", cookie.serialize("A", "a-value", {}))
|
||||
setCookie(res, cookie.serialize("B", "b-value", {}))
|
||||
expect(res.getHeader("Set-Cookie")).toEqual(["A=a-value", "B=b-value"])
|
||||
})
|
||||
|
||||
it("works with array start for new name", async () => {
|
||||
const res = new ServerResponse({} as any)
|
||||
res.setHeader("Set-Cookie", [
|
||||
cookie.serialize("A", "a-value", {}),
|
||||
cookie.serialize("B", "b-value", {}),
|
||||
])
|
||||
setCookie(res, cookie.serialize("C", "c-value", {}))
|
||||
expect(res.getHeader("Set-Cookie")).toEqual(["A=a-value", "B=b-value", "C=c-value"])
|
||||
})
|
||||
|
||||
it("works with array start for existing name", async () => {
|
||||
const res = new ServerResponse({} as any)
|
||||
res.setHeader("Set-Cookie", [
|
||||
cookie.serialize("A", "a-value", {}),
|
||||
cookie.serialize("B", "b-value", {}),
|
||||
])
|
||||
setCookie(res, cookie.serialize("A", "new-a-value", {}))
|
||||
expect(res.getHeader("Set-Cookie")).toEqual(["A=new-a-value", "B=b-value"])
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -62,9 +62,6 @@ export function getCookieParser(headers: {[key: string]: undefined | string | st
|
||||
}
|
||||
}
|
||||
|
||||
// todo
|
||||
declare const baseLogger: any
|
||||
|
||||
const debug = require("debug")("blitz:session")
|
||||
|
||||
export interface SimpleRolesIsAuthorized<RoleType = string> {
|
||||
@@ -388,7 +385,7 @@ const parseAnonymousSessionToken = (token: string) => {
|
||||
}
|
||||
}
|
||||
|
||||
const setCookie = (res: ServerResponse, cookieStr: string) => {
|
||||
export const setCookie = (res: ServerResponse, cookieStr: string) => {
|
||||
const getCookieName = (c: string) => c.split("=", 2)[0]
|
||||
const appendCookie = () => append(res, "Set-Cookie", cookieStr)
|
||||
|
||||
@@ -410,7 +407,7 @@ const setCookie = (res: ServerResponse, cookieStr: string) => {
|
||||
for (let i = 0; i < cookiesHeader.length; i++) {
|
||||
if (cookieName === getCookieName(cookiesHeader[i] || "")) {
|
||||
cookiesHeader[i] = cookieStr
|
||||
res.setHeader("Set-Cookie", cookieStr)
|
||||
res.setHeader("Set-Cookie", cookiesHeader)
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -555,7 +552,7 @@ async function getSessionKernel(
|
||||
}
|
||||
if (enableCsrfProtection && persistedSession.antiCSRFToken !== antiCSRFToken) {
|
||||
if (!antiCSRFToken) {
|
||||
baseLogger({displayDateTime: false}).warn(
|
||||
console.warn(
|
||||
`This request is missing the ${HEADER_CSRF} header. You can learn about adding this here: https://blitzjs.com/docs/session-management#manual-api-requests`,
|
||||
)
|
||||
}
|
||||
@@ -631,7 +628,7 @@ async function getSessionKernel(
|
||||
|
||||
if (enableCsrfProtection && payload.antiCSRFToken !== antiCSRFToken) {
|
||||
if (!antiCSRFToken) {
|
||||
baseLogger({displayDateTime: false}).warn(
|
||||
console.warn(
|
||||
`This request is missing the ${HEADER_CSRF} header. You can learn about adding this here: https://blitzjs.com/docs/session-management#manual-api-requests`,
|
||||
)
|
||||
}
|
||||
@@ -804,30 +801,16 @@ async function refreshSession(
|
||||
const expiresAt = addYears(new Date(), 30)
|
||||
setAnonymousSessionCookie(req, res, anonymousSessionToken, expiresAt)
|
||||
setPublicDataCookie(req, res, publicDataToken, expiresAt)
|
||||
setCSRFCookie(req, res, sessionKernel.antiCSRFToken, expiresAt)
|
||||
} else if (global.sessionConfig.method === "essential" && "sessionToken" in sessionKernel) {
|
||||
const expiresAt = addMinutes(new Date(), global.sessionConfig.sessionExpiryMinutes as number)
|
||||
const publicDataToken = createPublicDataToken(sessionKernel.publicData)
|
||||
|
||||
let sessionToken: string
|
||||
// Only generate new session token if public data actually changed
|
||||
// Otherwise if new session token is generated just for refresh, then
|
||||
// we have race condition bugs
|
||||
if (publicDataChanged) {
|
||||
sessionToken = createSessionToken(sessionKernel.handle, sessionKernel.publicData)
|
||||
} else {
|
||||
sessionToken = sessionKernel.sessionToken
|
||||
}
|
||||
|
||||
setSessionCookie(req, res, sessionToken, expiresAt)
|
||||
setPublicDataCookie(req, res, publicDataToken, expiresAt)
|
||||
setCSRFCookie(req, res, sessionKernel.antiCSRFToken, expiresAt)
|
||||
|
||||
debug("Updating session in db with", {expiresAt})
|
||||
if (publicDataChanged) {
|
||||
debug("Public data has changed")
|
||||
const publicDataToken = createPublicDataToken(sessionKernel.publicData)
|
||||
setPublicDataCookie(req, res, publicDataToken, expiresAt)
|
||||
await global.sessionConfig.updateSession(sessionKernel.handle, {
|
||||
expiresAt,
|
||||
hashedSessionToken: hash256(sessionToken),
|
||||
publicData: JSON.stringify(sessionKernel.publicData),
|
||||
})
|
||||
} else {
|
||||
|
||||
@@ -57,7 +57,7 @@ export type VerifyCallbackResult = {
|
||||
|
||||
export type ApiHandlerIncomingMessage = IncomingMessage & {
|
||||
query: {
|
||||
[key: string]: string | string[]
|
||||
[key: string]: string | string[] | undefined
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ export interface SessionConfigMethods {
|
||||
handle: string,
|
||||
session: Partial<SessionModel>,
|
||||
) => Promise<SessionModel | undefined>
|
||||
deleteSession: (handle: string) => Promise<SessionModel>
|
||||
deleteSession: (handle: string) => Promise<SessionModel | undefined>
|
||||
}
|
||||
|
||||
export interface SessionConfig extends SessionConfigMethods {
|
||||
|
||||
@@ -1,5 +1,87 @@
|
||||
# @blitzjs/next
|
||||
|
||||
## 2.0.0-alpha.57
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 0f18c68d: Avoid reassigning queryClient in prefetch methods
|
||||
- Updated dependencies [716e188d]
|
||||
- @blitzjs/rpc@2.0.0-alpha.57
|
||||
|
||||
## 2.0.0-alpha.56
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d9fc5d8e: Allow prefetching multiple queries in gSSP and gSP
|
||||
- @blitzjs/rpc@2.0.0-alpha.56
|
||||
|
||||
## 2.0.0-alpha.55
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8d9ea00e: Fix prefetching multiple queries causes only the last one to be passed to page
|
||||
- Updated dependencies [df7cee84]
|
||||
- @blitzjs/rpc@2.0.0-alpha.55
|
||||
|
||||
## 2.0.0-alpha.54
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 348fd6f5: Fix redirectAuthenticatedTo errors
|
||||
- 20fc9f80: Fix SSP / SP not prefetching queries correctly
|
||||
- 80e1ead7: Add jest.config.js to newly generated typescript apps
|
||||
- Updated dependencies [20fc9f80]
|
||||
- @blitzjs/rpc@2.0.0-alpha.54
|
||||
|
||||
## 2.0.0-alpha.53
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- a7e37c58: Export BlitzProvider from @blitzjs/next
|
||||
- @blitzjs/rpc@2.0.0-alpha.53
|
||||
|
||||
## 2.0.0-alpha.52
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @blitzjs/rpc@2.0.0-alpha.52
|
||||
|
||||
## 2.0.0-alpha.51
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @blitzjs/rpc@2.0.0-alpha.51
|
||||
|
||||
## 2.0.0-alpha.50
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- dc694cf1: Removes the check for when withBlitz is mounted before rendering the users app. We had this previously to avoid the react 18 suspense error being showin in development with nextjs.
|
||||
- Updated dependencies [c11f0401]
|
||||
- @blitzjs/rpc@2.0.0-alpha.50
|
||||
|
||||
## 2.0.0-alpha.49
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- bec9512e: Allow resolverPath to be a function which is ran for every file path that is converted to RPC Route
|
||||
- Updated dependencies [bec9512e]
|
||||
- @blitzjs/rpc@2.0.0-alpha.49
|
||||
|
||||
## 2.0.0-alpha.48
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @blitzjs/rpc@2.0.0-alpha.48
|
||||
|
||||
## 2.0.0-alpha.47
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1d9804a6: Remove references to the logging package
|
||||
- Updated dependencies [1d9804a6]
|
||||
- @blitzjs/rpc@2.0.0-alpha.47
|
||||
|
||||
## 2.0.0-alpha.46
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@blitzjs/next",
|
||||
"version": "2.0.0-alpha.46",
|
||||
"version": "2.0.0-alpha.57",
|
||||
"scripts": {
|
||||
"build": "unbuild",
|
||||
"dev": "pnpm predev && pnpm watch unbuild src --wait=0.2",
|
||||
@@ -18,12 +18,13 @@
|
||||
"sideEffects": false,
|
||||
"license": "MIT",
|
||||
"files": [
|
||||
"jest/**",
|
||||
"dist/**",
|
||||
"scripts/**",
|
||||
"eslint.js"
|
||||
],
|
||||
"dependencies": {
|
||||
"@blitzjs/rpc": "2.0.0-alpha.46",
|
||||
"@blitzjs/rpc": "2.0.0-alpha.57",
|
||||
"@types/hoist-non-react-statics": "3.3.1",
|
||||
"debug": "4.3.3",
|
||||
"fs-extra": "10.0.1",
|
||||
@@ -32,7 +33,7 @@
|
||||
"superjson": "1.8.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@blitzjs/config": "workspace:2.0.0-alpha.46",
|
||||
"@blitzjs/config": "workspace:2.0.0-alpha.57",
|
||||
"@testing-library/dom": "8.13.0",
|
||||
"@testing-library/jest-dom": "5.16.3",
|
||||
"@testing-library/react": "13.0.0",
|
||||
@@ -42,10 +43,10 @@
|
||||
"@types/react": "18.0.1",
|
||||
"@types/react-dom": "17.0.14",
|
||||
"@types/testing-library__react-hooks": "4.0.0",
|
||||
"blitz": "2.0.0-alpha.46",
|
||||
"blitz": "2.0.0-alpha.57",
|
||||
"cross-spawn": "7.0.3",
|
||||
"find-up": "4.1.0",
|
||||
"next": "12.1.6-canary.17",
|
||||
"next": "12.2.0",
|
||||
"react": "18.0.0",
|
||||
"react-dom": "18.0.0",
|
||||
"resolve-from": "5.0.0",
|
||||
@@ -58,7 +59,7 @@
|
||||
"access": "public"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"next": "*",
|
||||
"next": ">=12.2.0",
|
||||
"react": "*"
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user