@opensaas/keystone-nextjs-auth 21.1.1 → 22.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,10 +1,19 @@
1
1
  import ejs from 'ejs';
2
- import { NextAuthPageProps } from '../pages/NextAuthPage';
2
+ import { NextAuthTemplateProps } from '../pages/NextAuthPage';
3
3
 
4
4
  const template = `
5
5
  import getNextAuthPage from '@opensaas/keystone-nextjs-auth/pages/NextAuthPage';
6
- import { query } from '.keystone/api';
7
6
  import keystoneConfig from '../../../../../keystone';
7
+ import { PrismaClient } from '.prisma/client';
8
+ import { createQueryAPI } from '@keystone-6/core/___internal-do-not-use-will-break-in-patch/node-api';
9
+
10
+ const prisma = global.prisma || PrismaClient
11
+
12
+ if (process.env.NODE_ENV !== 'production') global.prisma = prisma
13
+
14
+ const query = global.query || createQueryAPI(keystoneConfig, prisma);
15
+
16
+ if (process.env.NODE_ENV !== 'production') global.query = query
8
17
 
9
18
  export default getNextAuthPage({
10
19
  autoCreate: <%= autoCreate %>,
@@ -19,15 +28,13 @@ export default getNextAuthPage({
19
28
  });
20
29
  `;
21
30
 
22
- type AuthTemplateOptions = NextAuthPageProps;
23
-
24
31
  export const authTemplate = ({
25
32
  autoCreate,
26
33
  identityField,
27
34
  listKey,
28
35
  sessionData,
29
36
  sessionSecret,
30
- }: AuthTemplateOptions) => {
37
+ }: NextAuthTemplateProps) => {
31
38
  const authOut = ejs.render(template, {
32
39
  identityField,
33
40
  sessionData,
@@ -56,11 +56,7 @@ module.exports = withPreconstruct({
56
56
  <% } %>
57
57
  });
58
58
  `;
59
- export const nextConfigTemplate = ({
60
- keystonePath,
61
- }: {
62
- keystonePath: string;
63
- }) => {
59
+ export const nextConfigTemplate = ({ keystonePath }: { keystonePath: string }) => {
64
60
  const nextConfigOut = ejs.render(template, { keystonePath });
65
61
 
66
62
  return nextConfigOut;
@@ -1,8 +1,27 @@
1
- import { BaseListTypeInfo, KeystoneConfig } from '@keystone-6/core/types';
2
- import { CookiesOptions, PagesOptions } from 'next-auth';
1
+ import type { ServerResponse, IncomingMessage } from 'http';
2
+ import type { NextRequest } from 'next/server';
3
3
  import { Provider } from 'next-auth/providers';
4
+ import { CookiesOptions, PagesOptions } from 'next-auth';
5
+ import { BaseListTypeInfo, KeystoneConfig, CreateContext } from '@keystone-6/core/types';
4
6
 
5
- export type NextAuthSession = { listKey: string; itemId: string; data: any };
7
+ type NextAuthResponse = IncomingMessage & NextRequest;
8
+
9
+ export declare type AuthSessionStrategy<StoredSessionData> = {
10
+ start: (args: {
11
+ res: ServerResponse;
12
+ data: any;
13
+ createContext: CreateContext;
14
+ }) => Promise<string>;
15
+ end: (args: {
16
+ req: IncomingMessage;
17
+ res: ServerResponse;
18
+ createContext: CreateContext;
19
+ }) => Promise<void>;
20
+ get: (args: {
21
+ req: NextAuthResponse;
22
+ createContext: CreateContext;
23
+ }) => Promise<StoredSessionData | undefined>;
24
+ };
6
25
 
7
26
  export type NextAuthProviders = Provider[];
8
27
 
@@ -15,9 +34,7 @@ type NextAuthOptions = {
15
34
  resolver: any;
16
35
  };
17
36
 
18
- export type KeystoneOAuthConfig = KeystoneConfig &
19
- KeytoneOAuthOptions &
20
- NextAuthOptions;
37
+ export type KeystoneOAuthConfig = KeystoneConfig & KeytoneOAuthOptions & NextAuthOptions;
21
38
 
22
39
  export type AuthConfig<GeneratedListTypes extends BaseListTypeInfo> = {
23
40
  /** Auth Create users in Keystone DB from Auth Provider */
@@ -31,20 +48,20 @@ export type AuthConfig<GeneratedListTypes extends BaseListTypeInfo> = {
31
48
  /** Path for Keystone interface */
32
49
  keystonePath?: string;
33
50
  // Custom pages for different NextAuth events
34
- pages?: any; // TODO: Fix types
51
+ pages?: Partial<PagesOptions>;
35
52
  /** Providers for Next Auth */
36
53
  providers: NextAuthProviders;
37
54
  /** Resolver for user to define their profile */
38
- resolver?: Function | undefined;
55
+ resolver?: (args: { user: any; profile: any; account: any }) => Promise<{
56
+ [key: string]: boolean | string | number;
57
+ }>;
39
58
  /** Session data population */
40
59
  sessionData?: string | undefined;
41
60
  /** Next-Auth Session Secret */
42
61
  sessionSecret: string;
43
62
  };
44
63
 
45
- export type AuthTokenRequestErrorCode =
46
- | 'IDENTITY_NOT_FOUND'
47
- | 'MULTIPLE_IDENTITY_MATCHES';
64
+ export type AuthTokenRequestErrorCode = 'IDENTITY_NOT_FOUND' | 'MULTIPLE_IDENTITY_MATCHES';
48
65
 
49
66
  export type PasswordAuthErrorCode =
50
67
  | AuthTokenRequestErrorCode
@@ -0,0 +1,19 @@
1
+ import NextAuth from 'next-auth';
2
+ import { JWT } from 'next-auth/jwt';
3
+
4
+ declare module 'next-auth' {
5
+ interface JWT {
6
+ data?: any | undefined;
7
+ subject?: string | undefined;
8
+ listKey?: string;
9
+ itemId?: string | undefined;
10
+ name?: string | null | undefined;
11
+ email?: string | null | undefined;
12
+ picture?: string | null | undefined;
13
+ sub?: string | null | undefined;
14
+ expires?: string | null | undefined;
15
+ }
16
+ interface Session extends JWT {
17
+ user?: any;
18
+ }
19
+ }