@opensaas/keystone-nextjs-auth 21.1.0 → 21.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @opensaas-keystone/nextjs-auth
2
2
 
3
+ ## 21.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - e48cb6c: Fix signin redirect error
8
+
3
9
  ## 21.1.0
4
10
 
5
11
  ### Minor Changes
@@ -1,11 +1,11 @@
1
- import { BaseListTypeInfo, KeystoneConfig } from '@keystone-6/core/types';
2
- import { AuthConfig, KeystoneOAuthConfig } from './types';
1
+ import { BaseListTypeInfo, KeystoneConfig } from "@keystone-6/core/types";
2
+ import { AuthConfig, KeystoneOAuthConfig } from "./types";
3
3
  /**
4
4
  * createAuth function
5
5
  *
6
6
  * Generates config for Keystone to implement standard auth features.
7
7
  */
8
- export type { NextAuthProviders, KeystoneOAuthConfig } from './types';
8
+ export type { NextAuthProviders, KeystoneOAuthConfig } from "./types";
9
9
  export declare function createAuth<GeneratedListTypes extends BaseListTypeInfo>({ autoCreate, cookies, identityField, listKey, keystonePath, pages, resolver, providers, sessionData, sessionSecret, }: AuthConfig<GeneratedListTypes>): {
10
10
  withAuth: (keystoneConfig: KeystoneConfig) => KeystoneOAuthConfig;
11
11
  };
@@ -5,8 +5,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
6
6
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
7
7
  var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes');
8
- var _indexOfInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/index-of');
9
- var _Object$values = require('@babel/runtime-corejs3/core-js-stable/object/values');
10
8
  var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
11
9
  var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
12
10
  var _URL = require('@babel/runtime-corejs3/core-js-stable/url');
@@ -39,8 +37,6 @@ function _interopNamespace(e) {
39
37
  }
40
38
 
41
39
  var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesInstanceProperty);
42
- var _indexOfInstanceProperty__default = /*#__PURE__*/_interopDefault(_indexOfInstanceProperty);
43
- var _Object$values__default = /*#__PURE__*/_interopDefault(_Object$values);
44
40
  var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
45
41
  var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
46
42
  var _URL__default = /*#__PURE__*/_interopDefault(_URL);
@@ -223,7 +219,7 @@ function createAuth({
223
219
  // part of the createAuth API (in which case its use cases need to be documented and tested)
224
220
  // or whether always being true is what we want, in which case we can refactor our code
225
221
  // to match this. -TL
226
- const customPath = !keystonePath || keystonePath === '/' ? '' : keystonePath;
222
+ const customPath = !keystonePath || keystonePath === "/" ? "" : keystonePath;
227
223
  /**
228
224
  * pageMiddleware
229
225
  *
@@ -239,8 +235,6 @@ function createAuth({
239
235
  context,
240
236
  isValidSession
241
237
  }) => {
242
- var _context;
243
-
244
238
  const {
245
239
  req,
246
240
  session
@@ -250,14 +244,14 @@ function createAuth({
250
244
  if (isValidSession) {
251
245
  if (pathname === `${customPath}/api/auth/signin`) {
252
246
  return {
253
- kind: 'redirect',
247
+ kind: "redirect",
254
248
  to: `${customPath}`
255
249
  };
256
250
  }
257
251
 
258
- if (customPath !== '' && pathname === '/') {
252
+ if (customPath !== "" && pathname === "/") {
259
253
  return {
260
- kind: 'redirect',
254
+ kind: "redirect",
261
255
  to: `${customPath}`
262
256
  };
263
257
  }
@@ -265,14 +259,14 @@ function createAuth({
265
259
  return;
266
260
  }
267
261
 
268
- if (_includesInstanceProperty__default["default"](pathname).call(pathname, '/_next/') || _includesInstanceProperty__default["default"](pathname).call(pathname, '/api/auth/')) {
262
+ if (_includesInstanceProperty__default["default"](pathname).call(pathname, "/_next/") || _includesInstanceProperty__default["default"](pathname).call(pathname, "/api/auth/") || _includesInstanceProperty__default["default"](pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.signIn) || _includesInstanceProperty__default["default"](pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.error) || _includesInstanceProperty__default["default"](pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.signOut)) {
269
263
  return;
270
264
  }
271
265
 
272
- if (!session && !_includesInstanceProperty__default["default"](pathname).call(pathname, `${customPath}/api/auth/`) && !(_indexOfInstanceProperty__default["default"](_context = _Object$values__default["default"](pages)).call(_context, pathname) > -1)) {
266
+ if (!session && !_includesInstanceProperty__default["default"](pathname).call(pathname, `${customPath}/api/auth/`)) {
273
267
  return {
274
- kind: 'redirect',
275
- to: `${customPath}/api/auth/signin`
268
+ kind: "redirect",
269
+ to: (pages === null || pages === void 0 ? void 0 : pages.signIn) || `${customPath}/api/auth/signin`
276
270
  };
277
271
  }
278
272
  };
@@ -288,8 +282,8 @@ function createAuth({
288
282
 
289
283
  const getAdditionalFiles = () => {
290
284
  const filesToWrite = [{
291
- mode: 'write',
292
- outputPath: 'pages/api/auth/[...nextauth].js',
285
+ mode: "write",
286
+ outputPath: "pages/api/auth/[...nextauth].js",
293
287
  src: authTemplate({
294
288
  autoCreate,
295
289
  identityField,
@@ -298,8 +292,8 @@ function createAuth({
298
292
  sessionSecret
299
293
  })
300
294
  }, {
301
- mode: 'write',
302
- outputPath: 'next.config.js',
295
+ mode: "write",
296
+ outputPath: "next.config.js",
303
297
  src: nextConfigTemplate({
304
298
  keystonePath: customPath
305
299
  })
@@ -384,7 +378,7 @@ function createAuth({
384
378
  start: async ({
385
379
  res
386
380
  }) => {
387
- console.log('start');
381
+ console.log("start");
388
382
  const session = await start({
389
383
  res
390
384
  });
@@ -397,11 +391,11 @@ function createAuth({
397
391
 
398
392
  const pathname = url__default["default"].parse(req === null || req === void 0 ? void 0 : req.url).pathname;
399
393
 
400
- if (_includesInstanceProperty__default["default"](pathname).call(pathname, '/api/auth')) {
394
+ if (_includesInstanceProperty__default["default"](pathname).call(pathname, "/api/auth")) {
401
395
  return;
402
396
  }
403
397
 
404
- if (((_req$headers$authoriz = req.headers.authorization) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.split(' ')[0]) === 'Bearer') {
398
+ if (((_req$headers$authoriz = req.headers.authorization) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.split(" ")[0]) === "Bearer") {
405
399
  var _token$data;
406
400
 
407
401
  const token = await jwt.getToken({
@@ -426,14 +420,14 @@ function createAuth({
426
420
  res,
427
421
  req
428
422
  }) => {
429
- const TOKEN_NAME = process.env.NODE_ENV === 'production' ? '__Secure-next-auth.session-token' : 'next-auth.session-token';
430
- res.setHeader('Set-Cookie', cookie__namespace.serialize(TOKEN_NAME, '', {
423
+ const TOKEN_NAME = process.env.NODE_ENV === "production" ? "__Secure-next-auth.session-token" : "next-auth.session-token";
424
+ res.setHeader("Set-Cookie", cookie__namespace.serialize(TOKEN_NAME, "", {
431
425
  maxAge: 0,
432
426
  expires: new Date(),
433
427
  httpOnly: true,
434
- secure: process.env.NODE_ENV === 'production',
435
- path: '/',
436
- sameSite: 'lax',
428
+ secure: process.env.NODE_ENV === "production",
429
+ path: "/",
430
+ sameSite: "lax",
437
431
  // TODO: Update parse to URL
438
432
  domain: url__default["default"].parse(req.url).hostname
439
433
  }));
@@ -478,12 +472,12 @@ function createAuth({
478
472
  } = context;
479
473
  const pathname = url__default["default"].parse(req === null || req === void 0 ? void 0 : req.url).pathname; // Allow nextjs scripts and static files to be accessed without auth
480
474
 
481
- if (_includesInstanceProperty__default["default"](pathname).call(pathname, '/_next/')) {
475
+ if (_includesInstanceProperty__default["default"](pathname).call(pathname, "/_next/")) {
482
476
  return true;
483
477
  } // Allow keystone to access /api/__keystone_api_build for hot reloading
484
478
 
485
479
 
486
- if (process.env.NODE_ENV !== 'production' && ((_context$req = context.req) === null || _context$req === void 0 ? void 0 : _context$req.url) !== undefined && new _URL__default["default"](context.req.url, 'http://example.com').pathname === `${customPath}/api/__keystone_api_build`) {
480
+ if (process.env.NODE_ENV !== "production" && ((_context$req = context.req) === null || _context$req === void 0 ? void 0 : _context$req.url) !== undefined && new _URL__default["default"](context.req.url, "http://example.com").pathname === `${customPath}/api/__keystone_api_build`) {
487
481
  return true;
488
482
  }
489
483
 
@@ -492,7 +486,7 @@ function createAuth({
492
486
  });
493
487
  }
494
488
 
495
- if (!keystoneConfig.session) throw new TypeError('Missing .session configuration');
489
+ if (!keystoneConfig.session) throw new TypeError("Missing .session configuration");
496
490
  const session = withItemData(keystoneConfig.session);
497
491
  const existingExtendGraphQLSchema = keystoneConfig.extendGraphqlSchema;
498
492
  return _objectSpread(_objectSpread({}, keystoneConfig), {}, {
@@ -5,8 +5,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
6
6
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
7
7
  var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes');
8
- var _indexOfInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/index-of');
9
- var _Object$values = require('@babel/runtime-corejs3/core-js-stable/object/values');
10
8
  var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
11
9
  var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
12
10
  require('@babel/runtime-corejs3/core-js-stable/url');
@@ -39,8 +37,6 @@ function _interopNamespace(e) {
39
37
  }
40
38
 
41
39
  var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesInstanceProperty);
42
- var _indexOfInstanceProperty__default = /*#__PURE__*/_interopDefault(_indexOfInstanceProperty);
43
- var _Object$values__default = /*#__PURE__*/_interopDefault(_Object$values);
44
40
  var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
45
41
  var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
46
42
  var url__default = /*#__PURE__*/_interopDefault(url);
@@ -222,7 +218,7 @@ function createAuth({
222
218
  // part of the createAuth API (in which case its use cases need to be documented and tested)
223
219
  // or whether always being true is what we want, in which case we can refactor our code
224
220
  // to match this. -TL
225
- const customPath = !keystonePath || keystonePath === '/' ? '' : keystonePath;
221
+ const customPath = !keystonePath || keystonePath === "/" ? "" : keystonePath;
226
222
  /**
227
223
  * pageMiddleware
228
224
  *
@@ -238,8 +234,6 @@ function createAuth({
238
234
  context,
239
235
  isValidSession
240
236
  }) => {
241
- var _context;
242
-
243
237
  const {
244
238
  req,
245
239
  session
@@ -249,14 +243,14 @@ function createAuth({
249
243
  if (isValidSession) {
250
244
  if (pathname === `${customPath}/api/auth/signin`) {
251
245
  return {
252
- kind: 'redirect',
246
+ kind: "redirect",
253
247
  to: `${customPath}`
254
248
  };
255
249
  }
256
250
 
257
- if (customPath !== '' && pathname === '/') {
251
+ if (customPath !== "" && pathname === "/") {
258
252
  return {
259
- kind: 'redirect',
253
+ kind: "redirect",
260
254
  to: `${customPath}`
261
255
  };
262
256
  }
@@ -264,14 +258,14 @@ function createAuth({
264
258
  return;
265
259
  }
266
260
 
267
- if (_includesInstanceProperty__default["default"](pathname).call(pathname, '/_next/') || _includesInstanceProperty__default["default"](pathname).call(pathname, '/api/auth/')) {
261
+ if (_includesInstanceProperty__default["default"](pathname).call(pathname, "/_next/") || _includesInstanceProperty__default["default"](pathname).call(pathname, "/api/auth/") || _includesInstanceProperty__default["default"](pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.signIn) || _includesInstanceProperty__default["default"](pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.error) || _includesInstanceProperty__default["default"](pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.signOut)) {
268
262
  return;
269
263
  }
270
264
 
271
- if (!session && !_includesInstanceProperty__default["default"](pathname).call(pathname, `${customPath}/api/auth/`) && !(_indexOfInstanceProperty__default["default"](_context = _Object$values__default["default"](pages)).call(_context, pathname) > -1)) {
265
+ if (!session && !_includesInstanceProperty__default["default"](pathname).call(pathname, `${customPath}/api/auth/`)) {
272
266
  return {
273
- kind: 'redirect',
274
- to: `${customPath}/api/auth/signin`
267
+ kind: "redirect",
268
+ to: (pages === null || pages === void 0 ? void 0 : pages.signIn) || `${customPath}/api/auth/signin`
275
269
  };
276
270
  }
277
271
  };
@@ -287,8 +281,8 @@ function createAuth({
287
281
 
288
282
  const getAdditionalFiles = () => {
289
283
  const filesToWrite = [{
290
- mode: 'write',
291
- outputPath: 'pages/api/auth/[...nextauth].js',
284
+ mode: "write",
285
+ outputPath: "pages/api/auth/[...nextauth].js",
292
286
  src: authTemplate({
293
287
  autoCreate,
294
288
  identityField,
@@ -297,8 +291,8 @@ function createAuth({
297
291
  sessionSecret
298
292
  })
299
293
  }, {
300
- mode: 'write',
301
- outputPath: 'next.config.js',
294
+ mode: "write",
295
+ outputPath: "next.config.js",
302
296
  src: nextConfigTemplate({
303
297
  keystonePath: customPath
304
298
  })
@@ -383,7 +377,7 @@ function createAuth({
383
377
  start: async ({
384
378
  res
385
379
  }) => {
386
- console.log('start');
380
+ console.log("start");
387
381
  const session = await start({
388
382
  res
389
383
  });
@@ -396,11 +390,11 @@ function createAuth({
396
390
 
397
391
  const pathname = url__default["default"].parse(req === null || req === void 0 ? void 0 : req.url).pathname;
398
392
 
399
- if (_includesInstanceProperty__default["default"](pathname).call(pathname, '/api/auth')) {
393
+ if (_includesInstanceProperty__default["default"](pathname).call(pathname, "/api/auth")) {
400
394
  return;
401
395
  }
402
396
 
403
- if (((_req$headers$authoriz = req.headers.authorization) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.split(' ')[0]) === 'Bearer') {
397
+ if (((_req$headers$authoriz = req.headers.authorization) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.split(" ")[0]) === "Bearer") {
404
398
  var _token$data;
405
399
 
406
400
  const token = await jwt.getToken({
@@ -425,14 +419,14 @@ function createAuth({
425
419
  res,
426
420
  req
427
421
  }) => {
428
- const TOKEN_NAME = '__Secure-next-auth.session-token' ;
429
- res.setHeader('Set-Cookie', cookie__namespace.serialize(TOKEN_NAME, '', {
422
+ const TOKEN_NAME = "__Secure-next-auth.session-token" ;
423
+ res.setHeader("Set-Cookie", cookie__namespace.serialize(TOKEN_NAME, "", {
430
424
  maxAge: 0,
431
425
  expires: new Date(),
432
426
  httpOnly: true,
433
- secure: "production" === 'production',
434
- path: '/',
435
- sameSite: 'lax',
427
+ secure: "production" === "production",
428
+ path: "/",
429
+ sameSite: "lax",
436
430
  // TODO: Update parse to URL
437
431
  domain: url__default["default"].parse(req.url).hostname
438
432
  }));
@@ -477,7 +471,7 @@ function createAuth({
477
471
  } = context;
478
472
  const pathname = url__default["default"].parse(req === null || req === void 0 ? void 0 : req.url).pathname; // Allow nextjs scripts and static files to be accessed without auth
479
473
 
480
- if (_includesInstanceProperty__default["default"](pathname).call(pathname, '/_next/')) {
474
+ if (_includesInstanceProperty__default["default"](pathname).call(pathname, "/_next/")) {
481
475
  return true;
482
476
  } // Allow keystone to access /api/__keystone_api_build for hot reloading
483
477
 
@@ -486,7 +480,7 @@ function createAuth({
486
480
  });
487
481
  }
488
482
 
489
- if (!keystoneConfig.session) throw new TypeError('Missing .session configuration');
483
+ if (!keystoneConfig.session) throw new TypeError("Missing .session configuration");
490
484
  const session = withItemData(keystoneConfig.session);
491
485
  const existingExtendGraphQLSchema = keystoneConfig.extendGraphqlSchema;
492
486
  return _objectSpread(_objectSpread({}, keystoneConfig), {}, {
@@ -1,8 +1,6 @@
1
1
  import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';
2
2
  import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
3
3
  import _includesInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/includes';
4
- import _indexOfInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/index-of';
5
- import _Object$values from '@babel/runtime-corejs3/core-js-stable/object/values';
6
4
  import _mapInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/map';
7
5
  import _JSON$stringify from '@babel/runtime-corejs3/core-js-stable/json/stringify';
8
6
  import _URL from '@babel/runtime-corejs3/core-js-stable/url';
@@ -188,7 +186,7 @@ function createAuth({
188
186
  // part of the createAuth API (in which case its use cases need to be documented and tested)
189
187
  // or whether always being true is what we want, in which case we can refactor our code
190
188
  // to match this. -TL
191
- const customPath = !keystonePath || keystonePath === '/' ? '' : keystonePath;
189
+ const customPath = !keystonePath || keystonePath === "/" ? "" : keystonePath;
192
190
  /**
193
191
  * pageMiddleware
194
192
  *
@@ -204,8 +202,6 @@ function createAuth({
204
202
  context,
205
203
  isValidSession
206
204
  }) => {
207
- var _context;
208
-
209
205
  const {
210
206
  req,
211
207
  session
@@ -215,14 +211,14 @@ function createAuth({
215
211
  if (isValidSession) {
216
212
  if (pathname === `${customPath}/api/auth/signin`) {
217
213
  return {
218
- kind: 'redirect',
214
+ kind: "redirect",
219
215
  to: `${customPath}`
220
216
  };
221
217
  }
222
218
 
223
- if (customPath !== '' && pathname === '/') {
219
+ if (customPath !== "" && pathname === "/") {
224
220
  return {
225
- kind: 'redirect',
221
+ kind: "redirect",
226
222
  to: `${customPath}`
227
223
  };
228
224
  }
@@ -230,14 +226,14 @@ function createAuth({
230
226
  return;
231
227
  }
232
228
 
233
- if (_includesInstanceProperty(pathname).call(pathname, '/_next/') || _includesInstanceProperty(pathname).call(pathname, '/api/auth/')) {
229
+ if (_includesInstanceProperty(pathname).call(pathname, "/_next/") || _includesInstanceProperty(pathname).call(pathname, "/api/auth/") || _includesInstanceProperty(pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.signIn) || _includesInstanceProperty(pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.error) || _includesInstanceProperty(pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.signOut)) {
234
230
  return;
235
231
  }
236
232
 
237
- if (!session && !_includesInstanceProperty(pathname).call(pathname, `${customPath}/api/auth/`) && !(_indexOfInstanceProperty(_context = _Object$values(pages)).call(_context, pathname) > -1)) {
233
+ if (!session && !_includesInstanceProperty(pathname).call(pathname, `${customPath}/api/auth/`)) {
238
234
  return {
239
- kind: 'redirect',
240
- to: `${customPath}/api/auth/signin`
235
+ kind: "redirect",
236
+ to: (pages === null || pages === void 0 ? void 0 : pages.signIn) || `${customPath}/api/auth/signin`
241
237
  };
242
238
  }
243
239
  };
@@ -253,8 +249,8 @@ function createAuth({
253
249
 
254
250
  const getAdditionalFiles = () => {
255
251
  const filesToWrite = [{
256
- mode: 'write',
257
- outputPath: 'pages/api/auth/[...nextauth].js',
252
+ mode: "write",
253
+ outputPath: "pages/api/auth/[...nextauth].js",
258
254
  src: authTemplate({
259
255
  autoCreate,
260
256
  identityField,
@@ -263,8 +259,8 @@ function createAuth({
263
259
  sessionSecret
264
260
  })
265
261
  }, {
266
- mode: 'write',
267
- outputPath: 'next.config.js',
262
+ mode: "write",
263
+ outputPath: "next.config.js",
268
264
  src: nextConfigTemplate({
269
265
  keystonePath: customPath
270
266
  })
@@ -349,7 +345,7 @@ function createAuth({
349
345
  start: async ({
350
346
  res
351
347
  }) => {
352
- console.log('start');
348
+ console.log("start");
353
349
  const session = await start({
354
350
  res
355
351
  });
@@ -362,11 +358,11 @@ function createAuth({
362
358
 
363
359
  const pathname = url.parse(req === null || req === void 0 ? void 0 : req.url).pathname;
364
360
 
365
- if (_includesInstanceProperty(pathname).call(pathname, '/api/auth')) {
361
+ if (_includesInstanceProperty(pathname).call(pathname, "/api/auth")) {
366
362
  return;
367
363
  }
368
364
 
369
- if (((_req$headers$authoriz = req.headers.authorization) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.split(' ')[0]) === 'Bearer') {
365
+ if (((_req$headers$authoriz = req.headers.authorization) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.split(" ")[0]) === "Bearer") {
370
366
  var _token$data;
371
367
 
372
368
  const token = await getToken({
@@ -391,14 +387,14 @@ function createAuth({
391
387
  res,
392
388
  req
393
389
  }) => {
394
- const TOKEN_NAME = process.env.NODE_ENV === 'production' ? '__Secure-next-auth.session-token' : 'next-auth.session-token';
395
- res.setHeader('Set-Cookie', cookie.serialize(TOKEN_NAME, '', {
390
+ const TOKEN_NAME = process.env.NODE_ENV === "production" ? "__Secure-next-auth.session-token" : "next-auth.session-token";
391
+ res.setHeader("Set-Cookie", cookie.serialize(TOKEN_NAME, "", {
396
392
  maxAge: 0,
397
393
  expires: new Date(),
398
394
  httpOnly: true,
399
- secure: process.env.NODE_ENV === 'production',
400
- path: '/',
401
- sameSite: 'lax',
395
+ secure: process.env.NODE_ENV === "production",
396
+ path: "/",
397
+ sameSite: "lax",
402
398
  // TODO: Update parse to URL
403
399
  domain: url.parse(req.url).hostname
404
400
  }));
@@ -443,12 +439,12 @@ function createAuth({
443
439
  } = context;
444
440
  const pathname = url.parse(req === null || req === void 0 ? void 0 : req.url).pathname; // Allow nextjs scripts and static files to be accessed without auth
445
441
 
446
- if (_includesInstanceProperty(pathname).call(pathname, '/_next/')) {
442
+ if (_includesInstanceProperty(pathname).call(pathname, "/_next/")) {
447
443
  return true;
448
444
  } // Allow keystone to access /api/__keystone_api_build for hot reloading
449
445
 
450
446
 
451
- if (process.env.NODE_ENV !== 'production' && ((_context$req = context.req) === null || _context$req === void 0 ? void 0 : _context$req.url) !== undefined && new _URL(context.req.url, 'http://example.com').pathname === `${customPath}/api/__keystone_api_build`) {
447
+ if (process.env.NODE_ENV !== "production" && ((_context$req = context.req) === null || _context$req === void 0 ? void 0 : _context$req.url) !== undefined && new _URL(context.req.url, "http://example.com").pathname === `${customPath}/api/__keystone_api_build`) {
452
448
  return true;
453
449
  }
454
450
 
@@ -457,7 +453,7 @@ function createAuth({
457
453
  });
458
454
  }
459
455
 
460
- if (!keystoneConfig.session) throw new TypeError('Missing .session configuration');
456
+ if (!keystoneConfig.session) throw new TypeError("Missing .session configuration");
461
457
  const session = withItemData(keystoneConfig.session);
462
458
  const existingExtendGraphQLSchema = keystoneConfig.extendGraphqlSchema;
463
459
  return _objectSpread(_objectSpread({}, keystoneConfig), {}, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensaas/keystone-nextjs-auth",
3
- "version": "21.1.0",
3
+ "version": "21.1.1",
4
4
  "repository": "https://github.com/opensaasau/keystone-nextjs-auth",
5
5
  "license": "MIT",
6
6
  "main": "dist/opensaas-keystone-nextjs-auth.cjs.js",
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import url from 'url';
1
+ import url from "url";
2
2
  import {
3
3
  AdminFileToWrite,
4
4
  BaseListTypeInfo,
@@ -7,19 +7,19 @@ import {
7
7
  AdminUIConfig,
8
8
  SessionStrategy,
9
9
  BaseKeystoneTypeInfo,
10
- } from '@keystone-6/core/types';
11
- import { getSession } from 'next-auth/react';
12
- import { getToken } from 'next-auth/jwt';
13
- import { Provider } from 'next-auth/providers';
10
+ } from "@keystone-6/core/types";
11
+ import { getSession } from "next-auth/react";
12
+ import { getToken } from "next-auth/jwt";
13
+ import { Provider } from "next-auth/providers";
14
14
 
15
- import * as cookie from 'cookie';
15
+ import * as cookie from "cookie";
16
16
 
17
- import { nextConfigTemplate } from './templates/next-config';
17
+ import { nextConfigTemplate } from "./templates/next-config";
18
18
  // import * as Path from 'path';
19
19
 
20
- import { AuthConfig, KeystoneOAuthConfig, NextAuthSession } from './types';
21
- import { getSchemaExtension } from './schema';
22
- import { authTemplate } from './templates/auth';
20
+ import { AuthConfig, KeystoneOAuthConfig, NextAuthSession } from "./types";
21
+ import { getSchemaExtension } from "./schema";
22
+ import { authTemplate } from "./templates/auth";
23
23
 
24
24
  /**
25
25
  * createAuth function
@@ -27,7 +27,7 @@ import { authTemplate } from './templates/auth';
27
27
  * Generates config for Keystone to implement standard auth features.
28
28
  */
29
29
 
30
- export type { NextAuthProviders, KeystoneOAuthConfig } from './types';
30
+ export type { NextAuthProviders, KeystoneOAuthConfig } from "./types";
31
31
  export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
32
32
  autoCreate,
33
33
  cookies,
@@ -45,7 +45,7 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
45
45
  // or whether always being true is what we want, in which case we can refactor our code
46
46
  // to match this. -TL
47
47
 
48
- const customPath = !keystonePath || keystonePath === '/' ? '' : keystonePath;
48
+ const customPath = !keystonePath || keystonePath === "/" ? "" : keystonePath;
49
49
  /**
50
50
  * pageMiddleware
51
51
  *
@@ -56,29 +56,34 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
56
56
  * - to the init page when initFirstItem is configured, and there are no user in the database
57
57
  * - to the signin page when no valid session is present
58
58
  */
59
- const pageMiddleware: AdminUIConfig<BaseKeystoneTypeInfo>['pageMiddleware'] =
59
+ const pageMiddleware: AdminUIConfig<BaseKeystoneTypeInfo>["pageMiddleware"] =
60
60
  async ({ context, isValidSession }) => {
61
61
  const { req, session } = context;
62
62
  const pathname = url.parse(req?.url!).pathname!;
63
63
 
64
64
  if (isValidSession) {
65
65
  if (pathname === `${customPath}/api/auth/signin`) {
66
- return { kind: 'redirect', to: `${customPath}` };
66
+ return { kind: "redirect", to: `${customPath}` };
67
67
  }
68
- if (customPath !== '' && pathname === '/') {
69
- return { kind: 'redirect', to: `${customPath}` };
68
+ if (customPath !== "" && pathname === "/") {
69
+ return { kind: "redirect", to: `${customPath}` };
70
70
  }
71
71
  return;
72
72
  }
73
- if (pathname.includes('/_next/') || pathname.includes('/api/auth/')) {
74
- return;
75
- }
76
73
  if (
77
- !session &&
78
- !pathname.includes(`${customPath}/api/auth/`) &&
79
- !(Object.values(pages).indexOf(pathname) > -1)
74
+ pathname.includes("/_next/") ||
75
+ pathname.includes("/api/auth/") ||
76
+ pathname.includes(pages?.signIn) ||
77
+ pathname.includes(pages?.error) ||
78
+ pathname.includes(pages?.signOut)
80
79
  ) {
81
- return { kind: 'redirect', to: `${customPath}/api/auth/signin` };
80
+ return;
81
+ }
82
+ if (!session && !pathname.includes(`${customPath}/api/auth/`)) {
83
+ return {
84
+ kind: "redirect",
85
+ to: pages?.signIn || `${customPath}/api/auth/signin`,
86
+ };
82
87
  }
83
88
  };
84
89
 
@@ -93,8 +98,8 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
93
98
  const getAdditionalFiles = () => {
94
99
  const filesToWrite: AdminFileToWrite[] = [
95
100
  {
96
- mode: 'write',
97
- outputPath: 'pages/api/auth/[...nextauth].js',
101
+ mode: "write",
102
+ outputPath: "pages/api/auth/[...nextauth].js",
98
103
  src: authTemplate({
99
104
  autoCreate,
100
105
  identityField,
@@ -104,8 +109,8 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
104
109
  }),
105
110
  },
106
111
  {
107
- mode: 'write',
108
- outputPath: 'next.config.js',
112
+ mode: "write",
113
+ outputPath: "next.config.js",
109
114
  src: nextConfigTemplate({ keystonePath: customPath }),
110
115
  },
111
116
  ];
@@ -187,17 +192,17 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
187
192
  return {
188
193
  ...sessionStrategy,
189
194
  start: async ({ res }) => {
190
- console.log('start');
195
+ console.log("start");
191
196
 
192
197
  const session = await start({ res });
193
198
  return session;
194
199
  },
195
200
  get: async ({ req }) => {
196
201
  const pathname = url.parse(req?.url!).pathname!;
197
- if (pathname.includes('/api/auth')) {
202
+ if (pathname.includes("/api/auth")) {
198
203
  return;
199
204
  }
200
- if (req.headers.authorization?.split(' ')[0] === 'Bearer') {
205
+ if (req.headers.authorization?.split(" ")[0] === "Bearer") {
201
206
  const token = (await getToken({
202
207
  req,
203
208
  secret: sessionSecret,
@@ -215,18 +220,18 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
215
220
  },
216
221
  end: async ({ res, req }) => {
217
222
  const TOKEN_NAME =
218
- process.env.NODE_ENV === 'production'
219
- ? '__Secure-next-auth.session-token'
220
- : 'next-auth.session-token';
223
+ process.env.NODE_ENV === "production"
224
+ ? "__Secure-next-auth.session-token"
225
+ : "next-auth.session-token";
221
226
  res.setHeader(
222
- 'Set-Cookie',
223
- cookie.serialize(TOKEN_NAME, '', {
227
+ "Set-Cookie",
228
+ cookie.serialize(TOKEN_NAME, "", {
224
229
  maxAge: 0,
225
230
  expires: new Date(),
226
231
  httpOnly: true,
227
- secure: process.env.NODE_ENV === 'production',
228
- path: '/',
229
- sameSite: 'lax',
232
+ secure: process.env.NODE_ENV === "production",
233
+ path: "/",
234
+ sameSite: "lax",
230
235
  // TODO: Update parse to URL
231
236
  domain: url.parse(req.url as string).hostname as string,
232
237
  })
@@ -265,15 +270,15 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
265
270
  const pathname = url.parse(req?.url!).pathname!;
266
271
 
267
272
  // Allow nextjs scripts and static files to be accessed without auth
268
- if (pathname.includes('/_next/')) {
273
+ if (pathname.includes("/_next/")) {
269
274
  return true;
270
275
  }
271
276
 
272
277
  // Allow keystone to access /api/__keystone_api_build for hot reloading
273
278
  if (
274
- process.env.NODE_ENV !== 'production' &&
279
+ process.env.NODE_ENV !== "production" &&
275
280
  context.req?.url !== undefined &&
276
- new URL(context.req.url, 'http://example.com').pathname ===
281
+ new URL(context.req.url, "http://example.com").pathname ===
277
282
  `${customPath}/api/__keystone_api_build`
278
283
  ) {
279
284
  return true;
@@ -287,7 +292,7 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
287
292
  }
288
293
 
289
294
  if (!keystoneConfig.session)
290
- throw new TypeError('Missing .session configuration');
295
+ throw new TypeError("Missing .session configuration");
291
296
  const session = withItemData(keystoneConfig.session);
292
297
 
293
298
  const existingExtendGraphQLSchema = keystoneConfig.extendGraphqlSchema;