@authcore/fastify 0.7.0 → 0.12.0

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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 David Ouatedem
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 David Ouatedem
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,90 +1,110 @@
1
- # @authcore/fastify
2
-
3
- > Fastify adapter for AuthCore. Plugin with auth routes and request hooks.
4
-
5
- ## Install
6
-
7
- ```bash
8
- npm install @authcore/fastify @authcore/prisma-adapter
9
- ```
10
-
11
- ## Usage
12
-
13
- ```ts
14
- import Fastify from 'fastify'
15
- import cookie from '@fastify/cookie'
16
- import { createAuth } from '@authcore/fastify'
17
- import { prismaAdapter } from '@authcore/prisma-adapter'
18
- import { PrismaClient } from '@prisma/client'
19
-
20
- const prisma = new PrismaClient()
21
- const app = Fastify()
22
- await app.register(cookie)
23
-
24
- const auth = createAuth({
25
- db: prismaAdapter(prisma),
26
- session: { strategy: 'jwt', secret: process.env.AUTH_SECRET! },
27
- })
28
-
29
- // Register auth plugin, adds all auth routes under /auth
30
- await app.register(auth.plugin(), { prefix: '/auth' })
31
-
32
- // Protect routes
33
- app.get('/dashboard', { preHandler: auth.authRequired() }, async (request) => {
34
- return { user: request.user }
35
- })
36
-
37
- // Optional auth
38
- app.get('/public', { preHandler: auth.authOptional() }, async (request) => {
39
- return { user: request.user ?? null }
40
- })
41
-
42
- await app.listen({ port: 3000 })
43
- ```
44
-
45
- ## API
46
-
47
- ### `createAuth(config)`
48
-
49
- Creates a Fastify auth instance. See [`@authcore/core`](https://www.npmjs.com/package/@authcore/core) for the full config reference.
50
-
51
- Returns:
52
-
53
- - **`auth.plugin(options?)`** Fastify plugin that registers all auth routes
54
- - **`auth.authRequired()`** `preHandler` hook that requires authentication, attaches `request.user`
55
- - **`auth.authOptional()`** `preHandler` hook that optionally attaches `request.user`
56
- - **`auth.requireRole(...roles)`** `preHandler` hook that checks `request.user.role`, returns 403 if not allowed. Must be used after `authRequired()`
57
-
58
- ### Routes
59
-
60
- Same endpoints as the Express adapter:
61
-
62
- | Method | Route | Body | Response |
63
- |--------|-------|------|----------|
64
- | POST | `/auth/register` | `{ email, password }` | `{ user, token }` |
65
- | POST | `/auth/login` | `{ email, password }` | `{ user, token }` |
66
- | POST | `/auth/logout` | - | `{ message }` |
67
- | GET | `/auth/me` | - | `{ user }` |
68
- | POST | `/auth/verify-email` | `{ token }` | `{ message }` |
69
- | POST | `/auth/forgot-password` | `{ email }` | `{ message }` |
70
- | POST | `/auth/reset-password` | `{ token, password }` | `{ message }` |
71
- | POST | `/auth/invite` | `{ email, role? }` | `{ message }` |
72
- | POST | `/auth/accept-invitation` | `{ token, password }` | `{ user, token }` |
73
-
74
- ### Role-Based Access Control
75
-
76
- ```ts
77
- app.get('/admin', {
78
- preHandler: [auth.authRequired(), auth.requireRole('admin')]
79
- }, async (request) => {
80
- return { message: 'Admin area' }
81
- })
82
- ```
83
-
84
- ### Invitation
85
-
86
- When the `'invitation'` feature is enabled, `POST /invite` (protected) and `POST /accept-invitation` (public) routes are automatically registered by the plugin.
87
-
88
- ## License
89
-
90
- [MIT](https://github.com/david-ouatedem/auth-core/blob/main/LICENSE)
1
+ # @authcore/fastify
2
+
3
+ > Fastify adapter for AuthCore. Plugin with auth routes and request hooks.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @authcore/fastify @authcore/prisma-adapter
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import Fastify from 'fastify'
15
+ import cookie from '@fastify/cookie'
16
+ import { createAuth } from '@authcore/fastify'
17
+ import { prismaAdapter } from '@authcore/prisma-adapter'
18
+ import { PrismaClient } from '@prisma/client'
19
+
20
+ const prisma = new PrismaClient()
21
+ const app = Fastify()
22
+ await app.register(cookie)
23
+
24
+ const auth = createAuth({
25
+ db: prismaAdapter(prisma),
26
+ session: { strategy: 'jwt', secret: process.env.AUTH_SECRET! },
27
+ })
28
+
29
+ // Register auth plugin, adds all auth routes under /auth
30
+ await app.register(auth.plugin(), { prefix: '/auth' })
31
+
32
+ // Protect routes
33
+ app.get('/dashboard', { preHandler: auth.authRequired() }, async (request) => {
34
+ return { user: request.user }
35
+ })
36
+
37
+ // Optional auth
38
+ app.get('/public', { preHandler: auth.authOptional() }, async (request) => {
39
+ return { user: request.user ?? null }
40
+ })
41
+
42
+ await app.listen({ port: 3000 })
43
+ ```
44
+
45
+ ## API
46
+
47
+ ### `createAuth(config)`
48
+
49
+ Creates a Fastify auth instance. See [`@authcore/core`](https://www.npmjs.com/package/@authcore/core) for the full config reference.
50
+
51
+ Returns:
52
+
53
+ - **`auth.plugin(options?)`** Fastify plugin that registers all auth routes
54
+ - **`auth.authRequired()`** `preHandler` hook that requires authentication, attaches `request.user`
55
+ - **`auth.authOptional()`** `preHandler` hook that optionally attaches `request.user`
56
+ - **`auth.requireRole(...roles)`** `preHandler` hook that checks `request.user.role`, returns 403 if not allowed. Must be used after `authRequired()`
57
+
58
+ ### Cookie name: configure once
59
+
60
+ The cookie name is read from `session.cookieName` (default `'authcore_token'`) by both the plugin (when `useCookies: true`) and the `authRequired()` / `authOptional()` hooks. Put it on `session` so both paths agree:
61
+
62
+ ```ts
63
+ const auth = createAuth({
64
+ db: prismaAdapter(prisma),
65
+ session: {
66
+ strategy: 'jwt',
67
+ secret: process.env.AUTH_SECRET!,
68
+ cookieName: 'my_token',
69
+ },
70
+ })
71
+ await app.register(cookie)
72
+ await app.register(auth.plugin({ useCookies: true }), { prefix: '/auth' })
73
+ app.get('/dashboard', { preHandler: [auth.authRequired()] }, async (req) => ({ user: req.user }))
74
+ ```
75
+
76
+ > **Fixed in 0.9:** before 0.9, `cookieName` on `plugin()` only affected the plugin's own routes; `auth.authRequired()` exposed to consumers always defaulted to `'authcore_token'`. Custom cookie names now work end-to-end.
77
+
78
+ ### Routes
79
+
80
+ Same endpoints as the Express adapter:
81
+
82
+ | Method | Route | Body | Response |
83
+ |--------|-------|------|----------|
84
+ | POST | `/auth/register` | `{ email, password }` | `{ user, token }` |
85
+ | POST | `/auth/login` | `{ email, password }` | `{ user, token }` |
86
+ | POST | `/auth/logout` | - | `{ message }` |
87
+ | GET | `/auth/me` | - | `{ user }` |
88
+ | POST | `/auth/verify-email` | `{ token }` | `{ message }` |
89
+ | POST | `/auth/forgot-password` | `{ email }` | `{ message }` |
90
+ | POST | `/auth/reset-password` | `{ token, password }` | `{ message }` |
91
+ | POST | `/auth/invite` | `{ email, role? }` | `{ message }` |
92
+ | POST | `/auth/accept-invitation` | `{ token, password }` | `{ user, token }` |
93
+
94
+ ### Role-Based Access Control
95
+
96
+ ```ts
97
+ app.get('/admin', {
98
+ preHandler: [auth.authRequired(), auth.requireRole('admin')]
99
+ }, async (request) => {
100
+ return { message: 'Admin area' }
101
+ })
102
+ ```
103
+
104
+ ### Invitation
105
+
106
+ When the `'invitation'` feature is enabled, `POST /invite` (protected) and `POST /accept-invitation` (public) routes are automatically registered by the plugin.
107
+
108
+ ## License
109
+
110
+ [MIT](https://github.com/david-ouatedem/auth-core/blob/main/LICENSE)
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/C,YAAY,EAAE,YAAY,EAAE,CAAA;AAE5B;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,kBAAkB,CAAA;IAEjD;;;;;;OAMG;IACH,YAAY,IAAI,qBAAqB,CAAA;IAErC;;;OAGG;IACH,YAAY,IAAI,qBAAqB,CAAA;IAErC;;;;;;;OAOG;IACH,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,qBAAqB,CAAA;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CA+B9D;AAGD,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/C,YAAY,EAAE,YAAY,EAAE,CAAA;AAE5B;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,kBAAkB,CAAA;IAEjD;;;;;;OAMG;IACH,YAAY,IAAI,qBAAqB,CAAA;IAErC;;;OAGG;IACH,YAAY,IAAI,qBAAqB,CAAA;IAErC;;;;;;;OAOG;IACH,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,qBAAqB,CAAA;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CAgC9D;AAGD,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -30,15 +30,16 @@ import { createAuthRequired, createAuthOptional } from './hooks.js';
30
30
  */
31
31
  export function createAuth(config) {
32
32
  const core = createCoreAuth(config);
33
+ const cookieName = core.config.session.cookieName ?? 'authcore_token';
33
34
  return {
34
35
  plugin(pluginConfig) {
35
36
  return createAuthPlugin(core, pluginConfig);
36
37
  },
37
38
  authRequired() {
38
- return createAuthRequired(core);
39
+ return createAuthRequired(core, cookieName);
39
40
  },
40
41
  authOptional() {
41
- return createAuthOptional(core);
42
+ return createAuthOptional(core, cookieName);
42
43
  },
43
44
  requireRole(...roles) {
44
45
  return ((request, reply, done) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAyCnE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,UAAU,CAAC,MAAsB;IAC/C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IAEnC,OAAO;QACL,MAAM,CAAC,YAA2B;YAChC,OAAO,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QAC7C,CAAC;QAED,YAAY;YACV,OAAO,kBAAkB,CAAC,IAAI,CAA0B,CAAA;QAC1D,CAAC;QAED,YAAY;YACV,OAAO,kBAAkB,CAAC,IAAI,CAA0B,CAAA;QAC1D,CAAC;QAED,WAAW,CAAC,GAAG,KAAe;YAC5B,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;gBACzB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAA;oBAC/D,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/B,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAA;oBAChE,OAAM;gBACR,CAAC;gBACD,IAAI,EAAE,CAAA;YACR,CAAC,CAA0B,CAAA;QAC7B,CAAC;KACF,CAAA;AACH,CAAC;AAID,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAyCnE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,UAAU,CAAC,MAAsB;IAC/C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,gBAAgB,CAAA;IAErE,OAAO;QACL,MAAM,CAAC,YAA2B;YAChC,OAAO,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QAC7C,CAAC;QAED,YAAY;YACV,OAAO,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAA0B,CAAA;QACtE,CAAC;QAED,YAAY;YACV,OAAO,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAA0B,CAAA;QACtE,CAAC;QAED,WAAW,CAAC,GAAG,KAAe;YAC5B,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;gBACzB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAA;oBAC/D,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/B,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAA;oBAChE,OAAM;gBACR,CAAC;gBACD,IAAI,EAAE,CAAA;YACR,CAAC,CAA0B,CAAA;QAC7B,CAAC;KACF,CAAA;AACH,CAAC;AAID,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/plugin.d.ts CHANGED
@@ -14,11 +14,42 @@ export interface PluginConfig {
14
14
  resetPassword?: string;
15
15
  invite?: string;
16
16
  acceptInvitation?: string;
17
+ refresh?: string;
18
+ revoke?: string;
19
+ /** OAuth start route. Default: '/oauth/:provider'. Must include ':provider' placeholder. */
20
+ oauth?: string;
21
+ /** OAuth callback route. Default: '/oauth/:provider/callback'. Must include ':provider' placeholder. */
22
+ oauthCallback?: string;
23
+ /** Magic-link send route (POST). Default: '/magic-link'. */
24
+ sendMagicLink?: string;
25
+ /** Magic-link consume route (GET). Default: '/magic-link/consume'. */
26
+ consumeMagicLink?: string;
27
+ /** 2FA setup (authed POST). Default: '/2fa/setup'. */
28
+ setupTwoFactor?: string;
29
+ /** 2FA enable confirmation (authed POST). Default: '/2fa/enable'. */
30
+ enableTwoFactor?: string;
31
+ /** 2FA disable (authed POST, requires password). Default: '/2fa/disable'. */
32
+ disableTwoFactor?: string;
33
+ /** 2FA verify TOTP code (public POST). Default: '/2fa/verify'. */
34
+ verifyTwoFactor?: string;
35
+ /** 2FA recovery-code use (public POST). Default: '/2fa/recovery'. */
36
+ useRecoveryCode?: string;
17
37
  };
18
- /** Cookie name for monorepo/cookie mode (default: 'authcore_token') */
38
+ /** Cookie name for monorepo/cookie mode (default: 'authcore_token'). Refresh cookie uses `${cookieName}_refresh`, CSRF cookie uses `${cookieName}_csrf`. */
19
39
  cookieName?: string;
20
- /** If true, set an httpOnly cookie on login/register instead of returning token in body */
40
+ /** If true, set httpOnly cookies on login/register/refresh/accept-invitation instead of returning token in body */
21
41
  useCookies?: boolean;
42
+ /**
43
+ * Where to redirect the user after a successful OAuth callback in cookie mode.
44
+ * Default: '/'. Ignored when `useCookies` is false (the response is JSON).
45
+ */
46
+ oauthSuccessRedirect?: string;
47
+ /**
48
+ * Where to redirect the user after a successful magic-link consume in
49
+ * cookie mode. Default: '/'. In api mode + this set, the server redirects
50
+ * to that URL with `#token=…&refreshToken=…`.
51
+ */
52
+ magicLinkSuccessRedirect?: string;
22
53
  }
23
54
  /**
24
55
  * Create a Fastify plugin that registers all auth routes.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,OAAO,iBAAiB,CAAA;AAGxB,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;IACD,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2FAA2F;IAC3F,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAUD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAE,YAAiB,IAuBvC,SAAS,eAAe,mBAiG1D"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAA;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,OAAO,iBAAiB,CAAA;AAGxB,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,4FAA4F;QAC5F,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,wGAAwG;QACxG,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,4DAA4D;QAC5D,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,sEAAsE;QACtE,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,sDAAsD;QACtD,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,qEAAqE;QACrE,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,6EAA6E;QAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,kEAAkE;QAClE,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,qEAAqE;QACrE,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,CAAA;IACD,4JAA4J;IAC5J,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mHAAmH;IACnH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC;AAYD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAE,YAAiB,IAgEvC,SAAS,eAAe,mBAoS1D"}
package/dist/plugin.js CHANGED
@@ -1,4 +1,4 @@
1
- import { AuthError } from '@authcore/core';
1
+ import { AuthError, generateCsrfToken, safeCompareTokens } from '@authcore/core';
2
2
  import '@fastify/cookie';
3
3
  import { createAuthRequired } from './hooks.js';
4
4
  function handleError(reply, err) {
@@ -8,11 +8,16 @@ function handleError(reply, err) {
8
8
  console.error('[AuthCore]', err);
9
9
  return reply.code(500).send({ error: 'Internal server error' });
10
10
  }
11
+ const STATE_CHANGING_METHODS = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
11
12
  /**
12
13
  * Create a Fastify plugin that registers all auth routes.
13
14
  */
14
15
  export function createAuthPlugin(auth, config = {}) {
15
- const { baseUrl = '', cookieName = 'authcore_token', useCookies = false, routes: routePaths = {}, } = config;
16
+ const { baseUrl = '', useCookies = false, routes: routePaths = {}, } = config;
17
+ const cookieName = config.cookieName ?? auth.config.session.cookieName ?? 'authcore_token';
18
+ const refreshCookieName = `${cookieName}_refresh`;
19
+ const csrfCookieName = `${cookieName}_csrf`;
20
+ const csrfEnabled = auth.config.session.csrf === true;
16
21
  const paths = {
17
22
  register: routePaths.register ?? '/register',
18
23
  login: routePaths.login ?? '/login',
@@ -23,19 +28,70 @@ export function createAuthPlugin(auth, config = {}) {
23
28
  resetPassword: routePaths.resetPassword ?? '/reset-password',
24
29
  invite: routePaths.invite ?? '/invite',
25
30
  acceptInvitation: routePaths.acceptInvitation ?? '/accept-invitation',
31
+ refresh: routePaths.refresh ?? '/refresh',
32
+ revoke: routePaths.revoke ?? '/revoke',
33
+ oauth: routePaths.oauth ?? '/oauth/:provider',
34
+ oauthCallback: routePaths.oauthCallback ?? '/oauth/:provider/callback',
35
+ sendMagicLink: routePaths.sendMagicLink ?? '/magic-link',
36
+ consumeMagicLink: routePaths.consumeMagicLink ?? '/magic-link/consume',
37
+ setupTwoFactor: routePaths.setupTwoFactor ?? '/2fa/setup',
38
+ enableTwoFactor: routePaths.enableTwoFactor ?? '/2fa/enable',
39
+ disableTwoFactor: routePaths.disableTwoFactor ?? '/2fa/disable',
40
+ verifyTwoFactor: routePaths.verifyTwoFactor ?? '/2fa/verify',
41
+ useRecoveryCode: routePaths.useRecoveryCode ?? '/2fa/recovery',
26
42
  };
43
+ const oauthSuccessRedirect = config.oauthSuccessRedirect ?? '/';
44
+ const magicLinkSuccessRedirect = config.magicLinkSuccessRedirect ?? '/';
27
45
  const isProduction = process.env['NODE_ENV'] === 'production';
28
46
  const authRequired = createAuthRequired(auth, cookieName);
47
+ function setAuthCookies(reply, token, refreshToken) {
48
+ void reply.setCookie(cookieName, token, { httpOnly: true, sameSite: 'lax', secure: isProduction, path: '/' });
49
+ void reply.setCookie(refreshCookieName, refreshToken, { httpOnly: true, sameSite: 'lax', secure: isProduction, path: '/' });
50
+ if (csrfEnabled) {
51
+ void reply.setCookie(csrfCookieName, generateCsrfToken(), {
52
+ httpOnly: false,
53
+ sameSite: 'lax',
54
+ secure: isProduction,
55
+ path: '/',
56
+ });
57
+ }
58
+ }
59
+ function clearAuthCookies(reply) {
60
+ void reply.clearCookie(cookieName, { path: '/' });
61
+ void reply.clearCookie(refreshCookieName, { path: '/' });
62
+ if (csrfEnabled)
63
+ void reply.clearCookie(csrfCookieName, { path: '/' });
64
+ }
65
+ function readRefreshToken(request) {
66
+ const body = request.body;
67
+ if (body?.refreshToken)
68
+ return body.refreshToken;
69
+ return request.cookies[refreshCookieName] ?? null;
70
+ }
29
71
  return async function authPlugin(fastify) {
72
+ if (csrfEnabled) {
73
+ fastify.addHook('preHandler', async (request, reply) => {
74
+ if (!STATE_CHANGING_METHODS.has(request.method.toUpperCase()))
75
+ return;
76
+ const cookieToken = request.cookies[csrfCookieName];
77
+ if (!cookieToken)
78
+ return; // first request — no CSRF cookie yet
79
+ const headerToken = request.headers['x-csrf-token'];
80
+ const headerValue = Array.isArray(headerToken) ? headerToken[0] : headerToken;
81
+ if (!headerValue || !safeCompareTokens(cookieToken, headerValue)) {
82
+ return reply.code(403).send({ error: 'CSRF token missing or invalid', code: 'CSRF_INVALID' });
83
+ }
84
+ });
85
+ }
30
86
  // POST /register
31
87
  fastify.post(paths.register, async (request, reply) => {
32
88
  try {
33
- const { user, token } = await auth.register(request.body);
89
+ const { user, token, refreshToken } = await auth.register(request.body);
34
90
  if (useCookies) {
35
- void reply.setCookie(cookieName, token, { httpOnly: true, sameSite: 'lax', secure: isProduction, path: '/' });
91
+ setAuthCookies(reply, token, refreshToken);
36
92
  return reply.code(201).send({ user });
37
93
  }
38
- return reply.code(201).send({ user, token });
94
+ return reply.code(201).send({ user, token, refreshToken });
39
95
  }
40
96
  catch (err) {
41
97
  return handleError(reply, err);
@@ -44,22 +100,65 @@ export function createAuthPlugin(auth, config = {}) {
44
100
  // POST /login
45
101
  fastify.post(paths.login, async (request, reply) => {
46
102
  try {
47
- const { user, token } = await auth.login(request.body);
103
+ const result = await auth.login(request.body);
104
+ if ('requires2FA' in result) {
105
+ return reply.send({ requires2FA: true, challengeToken: result.challengeToken });
106
+ }
107
+ const { user, token, refreshToken } = result;
108
+ if (useCookies) {
109
+ setAuthCookies(reply, token, refreshToken);
110
+ return reply.send({ user });
111
+ }
112
+ return reply.send({ user, token, refreshToken });
113
+ }
114
+ catch (err) {
115
+ return handleError(reply, err);
116
+ }
117
+ });
118
+ // POST /refresh
119
+ fastify.post(paths.refresh, async (request, reply) => {
120
+ try {
121
+ const rawRefresh = readRefreshToken(request);
122
+ if (!rawRefresh) {
123
+ return reply.code(401).send({ error: 'Refresh token is required', code: 'INVALID_TOKEN' });
124
+ }
125
+ const { user, token, refreshToken } = await auth.refresh(rawRefresh);
48
126
  if (useCookies) {
49
- void reply.setCookie(cookieName, token, { httpOnly: true, sameSite: 'lax', secure: isProduction, path: '/' });
127
+ setAuthCookies(reply, token, refreshToken);
50
128
  return reply.send({ user });
51
129
  }
52
- return reply.send({ user, token });
130
+ return reply.send({ user, token, refreshToken });
131
+ }
132
+ catch (err) {
133
+ return handleError(reply, err);
134
+ }
135
+ });
136
+ // POST /revoke
137
+ fastify.post(paths.revoke, async (request, reply) => {
138
+ try {
139
+ const rawRefresh = readRefreshToken(request);
140
+ if (rawRefresh)
141
+ await auth.revoke(rawRefresh);
142
+ if (useCookies)
143
+ clearAuthCookies(reply);
144
+ return reply.send({ message: 'Revoked' });
53
145
  }
54
146
  catch (err) {
55
147
  return handleError(reply, err);
56
148
  }
57
149
  });
58
- // POST /logout
59
- fastify.post(paths.logout, async (_request, reply) => {
60
- if (useCookies) {
61
- void reply.clearCookie(cookieName, { path: '/' });
150
+ // POST /logout — revoke refresh + clear cookies
151
+ fastify.post(paths.logout, async (request, reply) => {
152
+ try {
153
+ const rawRefresh = readRefreshToken(request);
154
+ if (rawRefresh)
155
+ await auth.revoke(rawRefresh);
156
+ }
157
+ catch {
158
+ // Swallow — logout best-effort
62
159
  }
160
+ if (useCookies)
161
+ clearAuthCookies(reply);
63
162
  return reply.send({ message: 'Logged out successfully' });
64
163
  });
65
164
  // GET /me — protected
@@ -79,7 +178,8 @@ export function createAuthPlugin(auth, config = {}) {
79
178
  // POST /forgot-password — always 200
80
179
  fastify.post(paths.forgotPassword, async (request, reply) => {
81
180
  try {
82
- await auth.forgotPassword(request.body);
181
+ const resetUrl = `${baseUrl}${paths.resetPassword}`;
182
+ await auth.forgotPassword(request.body, { resetUrl });
83
183
  }
84
184
  catch {
85
185
  // Intentionally swallow — no email enumeration
@@ -110,12 +210,155 @@ export function createAuthPlugin(auth, config = {}) {
110
210
  // POST /accept-invitation (public)
111
211
  fastify.post(paths.acceptInvitation, async (request, reply) => {
112
212
  try {
113
- const { user, token } = await auth.acceptInvitation(request.body);
213
+ const { user, token, refreshToken } = await auth.acceptInvitation(request.body);
214
+ if (useCookies) {
215
+ setAuthCookies(reply, token, refreshToken);
216
+ return reply.send({ user });
217
+ }
218
+ return reply.send({ user, token, refreshToken });
219
+ }
220
+ catch (err) {
221
+ return handleError(reply, err);
222
+ }
223
+ });
224
+ // POST /2fa/setup — authed
225
+ fastify.post(paths.setupTwoFactor, { preHandler: [authRequired] }, async (request, reply) => {
226
+ try {
227
+ const result = await auth.setupTwoFactor(request.user.id);
228
+ return reply.send(result);
229
+ }
230
+ catch (err) {
231
+ return handleError(reply, err);
232
+ }
233
+ });
234
+ // POST /2fa/enable — authed; body { code }
235
+ fastify.post(paths.enableTwoFactor, { preHandler: [authRequired] }, async (request, reply) => {
236
+ try {
237
+ const body = request.body;
238
+ if (!body?.code) {
239
+ return reply.code(400).send({ error: 'code is required', code: 'VALIDATION_ERROR' });
240
+ }
241
+ await auth.enableTwoFactor(request.user.id, body.code);
242
+ return reply.send({ message: 'Two-factor authentication enabled' });
243
+ }
244
+ catch (err) {
245
+ return handleError(reply, err);
246
+ }
247
+ });
248
+ // POST /2fa/disable — authed; body { password }
249
+ fastify.post(paths.disableTwoFactor, { preHandler: [authRequired] }, async (request, reply) => {
250
+ try {
251
+ const body = request.body;
252
+ if (!body?.password) {
253
+ return reply.code(400).send({ error: 'password is required', code: 'VALIDATION_ERROR' });
254
+ }
255
+ await auth.disableTwoFactor(request.user.id, body.password);
256
+ return reply.send({ message: 'Two-factor authentication disabled' });
257
+ }
258
+ catch (err) {
259
+ return handleError(reply, err);
260
+ }
261
+ });
262
+ // POST /2fa/verify — public; body { challengeToken, code }
263
+ fastify.post(paths.verifyTwoFactor, async (request, reply) => {
264
+ try {
265
+ const body = request.body;
266
+ if (!body?.challengeToken || !body?.code) {
267
+ return reply.code(400).send({ error: 'challengeToken and code are required', code: 'VALIDATION_ERROR' });
268
+ }
269
+ const { user, token, refreshToken } = await auth.verifyTwoFactor(body.challengeToken, body.code);
270
+ if (useCookies) {
271
+ setAuthCookies(reply, token, refreshToken);
272
+ return reply.send({ user });
273
+ }
274
+ return reply.send({ user, token, refreshToken });
275
+ }
276
+ catch (err) {
277
+ return handleError(reply, err);
278
+ }
279
+ });
280
+ // POST /2fa/recovery — public; body { challengeToken, code }
281
+ fastify.post(paths.useRecoveryCode, async (request, reply) => {
282
+ try {
283
+ const body = request.body;
284
+ if (!body?.challengeToken || !body?.code) {
285
+ return reply.code(400).send({ error: 'challengeToken and code are required', code: 'VALIDATION_ERROR' });
286
+ }
287
+ const { user, token, refreshToken } = await auth.useRecoveryCode(body.challengeToken, body.code);
114
288
  if (useCookies) {
115
- void reply.setCookie(cookieName, token, { httpOnly: true, sameSite: 'lax', secure: isProduction, path: '/' });
289
+ setAuthCookies(reply, token, refreshToken);
116
290
  return reply.send({ user });
117
291
  }
118
- return reply.send({ user, token });
292
+ return reply.send({ user, token, refreshToken });
293
+ }
294
+ catch (err) {
295
+ return handleError(reply, err);
296
+ }
297
+ });
298
+ // POST /magic-link — always 200 (enumeration-safe)
299
+ fastify.post(paths.sendMagicLink, async (request, reply) => {
300
+ try {
301
+ const magicLinkUrl = `${baseUrl}${paths.consumeMagicLink}`;
302
+ await auth.sendMagicLink(request.body, { magicLinkUrl });
303
+ }
304
+ catch (err) {
305
+ if (err instanceof AuthError && err.code !== 'INVALID_TOKEN') {
306
+ return handleError(reply, err);
307
+ }
308
+ }
309
+ return reply.send({ message: 'If that email exists, a sign-in link has been sent.' });
310
+ });
311
+ // GET /magic-link/consume?token=…
312
+ fastify.get(paths.consumeMagicLink, async (request, reply) => {
313
+ try {
314
+ const q = request.query;
315
+ const { user, token: jwt, refreshToken } = await auth.consumeMagicLink({ token: q.token ?? '' });
316
+ if (useCookies) {
317
+ setAuthCookies(reply, jwt, refreshToken);
318
+ return reply.redirect(magicLinkSuccessRedirect);
319
+ }
320
+ if (config.magicLinkSuccessRedirect) {
321
+ const params = new URLSearchParams({ token: jwt, refreshToken });
322
+ return reply.redirect(`${magicLinkSuccessRedirect}#${params.toString()}`);
323
+ }
324
+ return reply.send({ user, token: jwt, refreshToken });
325
+ }
326
+ catch (err) {
327
+ return handleError(reply, err);
328
+ }
329
+ });
330
+ // GET /oauth/:provider — kick off OAuth flow
331
+ fastify.get(paths.oauth, async (request, reply) => {
332
+ try {
333
+ const provider = String(request.params.provider ?? '');
334
+ const redirectUri = `${baseUrl}${paths.oauthCallback.replace(':provider', provider)}`;
335
+ const { authorizationUrl } = await auth.oauthStart(provider, redirectUri);
336
+ return reply.redirect(authorizationUrl);
337
+ }
338
+ catch (err) {
339
+ return handleError(reply, err);
340
+ }
341
+ });
342
+ // GET /oauth/:provider/callback — provider redirects here with ?code&state
343
+ fastify.get(paths.oauthCallback, async (request, reply) => {
344
+ try {
345
+ const provider = String(request.params.provider ?? '');
346
+ const q = request.query;
347
+ const redirectUri = `${baseUrl}${paths.oauthCallback.replace(':provider', provider)}`;
348
+ const { user, token, refreshToken } = await auth.oauthCallback(provider, {
349
+ code: q.code ?? '',
350
+ state: q.state ?? '',
351
+ redirectUri,
352
+ });
353
+ if (useCookies) {
354
+ setAuthCookies(reply, token, refreshToken);
355
+ return reply.redirect(oauthSuccessRedirect);
356
+ }
357
+ if (config.oauthSuccessRedirect) {
358
+ const params = new URLSearchParams({ token, refreshToken });
359
+ return reply.redirect(`${oauthSuccessRedirect}#${params.toString()}`);
360
+ }
361
+ return reply.send({ user, token, refreshToken });
119
362
  }
120
363
  catch (err) {
121
364
  return handleError(reply, err);
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,iBAAiB,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAsB/C,SAAS,WAAW,CAAC,KAAmB,EAAE,GAAY;IACpD,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAA;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,SAAuB,EAAE;IACxE,MAAM,EACJ,OAAO,GAAG,EAAE,EACZ,UAAU,GAAG,gBAAgB,EAC7B,UAAU,GAAG,KAAK,EAClB,MAAM,EAAE,UAAU,GAAG,EAAE,GACxB,GAAG,MAAM,CAAA;IAEV,MAAM,KAAK,GAAG;QACZ,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,WAAW;QAC5C,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,QAAQ;QACnC,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,SAAS;QACtC,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,KAAK;QAC1B,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,eAAe;QACtD,cAAc,EAAE,UAAU,CAAC,cAAc,IAAI,kBAAkB;QAC/D,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,iBAAiB;QAC5D,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,SAAS;QACtC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,IAAI,oBAAoB;KACtE,CAAA;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,CAAA;IAC7D,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAEzD,OAAO,KAAK,UAAU,UAAU,CAAC,OAAwB;QACvD,iBAAiB;QACjB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACpD,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACzD,IAAI,UAAU,EAAE,CAAC;oBACf,KAAK,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;oBAC7G,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;gBACvC,CAAC;gBACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YAC9C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAChC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,cAAc;QACd,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACjD,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACtD,IAAI,UAAU,EAAE,CAAC;oBACf,KAAK,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;oBAC7G,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC7B,CAAC;gBACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YACpC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAChC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,eAAe;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;YACnD,IAAI,UAAU,EAAE,CAAC;gBACf,KAAK,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YACnD,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;QAEF,sBAAsB;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC7E,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,qBAAqB;QACrB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACvD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACpC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAA;YAC/D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAChC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,qCAAqC;QACrC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC1D,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC,CAAA;QACrF,CAAC,CAAC,CAAA;QAEF,uBAAuB;QACvB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACzD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACtC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAA;YACjE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAChC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,0CAA0C;QAC1C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAClF,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,GAAG,OAAO,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAA;gBACvD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;gBAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAA;YACnD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAChC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,mCAAmC;QACnC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC5D,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACjE,IAAI,UAAU,EAAE,CAAC;oBACf,KAAK,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;oBAC7G,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC7B,CAAC;gBACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YACpC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAChC,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@authcore/fastify",
3
- "version": "0.7.0",
3
+ "version": "0.12.0",
4
4
  "description": "Fastify adapter for AuthCore",
5
5
  "author": "David Ouatedem",
6
6
  "repository": {
@@ -27,8 +27,8 @@
27
27
  }
28
28
  },
29
29
  "dependencies": {
30
- "@authcore/core": "^0.7.0",
31
- "@authcore/types": "^0.7.0"
30
+ "@authcore/core": "^0.12.0",
31
+ "@authcore/types": "^0.12.0"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "@fastify/cookie": "^11.0.0",
@@ -43,7 +43,7 @@
43
43
  "prisma": "^5.22.0",
44
44
  "typescript": "^5.4.0",
45
45
  "vitest": "^1.6.0",
46
- "@authcore/prisma-adapter": "^0.7.0"
46
+ "@authcore/prisma-adapter": "^0.12.0"
47
47
  },
48
48
  "files": [
49
49
  "dist",