honertia 0.1.34 → 0.1.36
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/README.md +69 -0
- package/dist/effect/auth.d.ts +61 -3
- package/dist/effect/auth.d.ts.map +1 -1
- package/dist/effect/auth.js +70 -19
- package/dist/effect/index.d.ts +1 -1
- package/dist/effect/index.d.ts.map +1 -1
- package/dist/effect/index.js +1 -1
- package/dist/effect/routing.d.ts +19 -2
- package/dist/effect/routing.d.ts.map +1 -1
- package/dist/effect/routing.js +33 -5
- package/dist/effect/services.d.ts +4 -1
- package/dist/effect/services.d.ts.map +1 -1
- package/dist/effect/services.js +5 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1423,6 +1423,75 @@ effectRoutes(app)
|
|
|
1423
1423
|
})
|
|
1424
1424
|
```
|
|
1425
1425
|
|
|
1426
|
+
### Custom Guest Layers (Anonymous Users)
|
|
1427
|
+
|
|
1428
|
+
When using Better Auth's anonymous plugin, you may want anonymous users to access login/register pages to upgrade their accounts. By default, `RequireGuestLayer` blocks ALL authenticated users, including anonymous ones.
|
|
1429
|
+
|
|
1430
|
+
Use `createGuestLayer` to create a custom guest layer with a predicate:
|
|
1431
|
+
|
|
1432
|
+
```typescript
|
|
1433
|
+
import { createGuestLayer, effectAuthRoutes } from 'honertia/effect'
|
|
1434
|
+
|
|
1435
|
+
// Allow anonymous users to access guest pages
|
|
1436
|
+
const AllowAnonymousGuestLayer = createGuestLayer(
|
|
1437
|
+
(authUser) => authUser.user.isAnonymous === true // Returns true if user should be allowed
|
|
1438
|
+
)
|
|
1439
|
+
|
|
1440
|
+
// Use with effectAuthRoutes
|
|
1441
|
+
effectAuthRoutes(app, {
|
|
1442
|
+
guestLayer: AllowAnonymousGuestLayer,
|
|
1443
|
+
loginComponent: 'Auth/Login',
|
|
1444
|
+
registerComponent: 'Auth/Register',
|
|
1445
|
+
loginAction: loginUser,
|
|
1446
|
+
registerAction: registerUser,
|
|
1447
|
+
})
|
|
1448
|
+
|
|
1449
|
+
// Or use directly with effectRoutes
|
|
1450
|
+
effectRoutes(app)
|
|
1451
|
+
.provide(AllowAnonymousGuestLayer)
|
|
1452
|
+
.group((route) => {
|
|
1453
|
+
route.get('/login', showLogin)
|
|
1454
|
+
route.get('/register', showRegister)
|
|
1455
|
+
})
|
|
1456
|
+
```
|
|
1457
|
+
|
|
1458
|
+
The predicate receives the full `AuthUser` object and returns `true` if the user should be allowed through (treated as a "guest" for this route).
|
|
1459
|
+
|
|
1460
|
+
### Scoped Middleware
|
|
1461
|
+
|
|
1462
|
+
Use `.middleware()` to add Hono middleware to a specific route group. Unlike `app.use()` which applies globally, `.middleware()` scopes middleware to only the routes in that builder chain.
|
|
1463
|
+
|
|
1464
|
+
```typescript
|
|
1465
|
+
import { effectRoutes, RequireAuthLayer } from 'honertia/effect'
|
|
1466
|
+
|
|
1467
|
+
// Middleware that ensures anonymous auth (redirects to create session if none exists)
|
|
1468
|
+
effectRoutes(app)
|
|
1469
|
+
.middleware(ensureAuthMiddleware) // Hono middleware - can redirect
|
|
1470
|
+
.provide(RequireAuthLayer) // Effect layer - provides AuthUserService
|
|
1471
|
+
.prefix('/play')
|
|
1472
|
+
.group((route) => {
|
|
1473
|
+
route.get('/{gamemode:slug}', showGamePage)
|
|
1474
|
+
})
|
|
1475
|
+
|
|
1476
|
+
// Different middleware for different route groups
|
|
1477
|
+
effectRoutes(app)
|
|
1478
|
+
.middleware(rateLimitMiddleware)
|
|
1479
|
+
.prefix('/api')
|
|
1480
|
+
.group((route) => {
|
|
1481
|
+
route.get('/stats', getStats)
|
|
1482
|
+
})
|
|
1483
|
+
```
|
|
1484
|
+
|
|
1485
|
+
**Key differences:**
|
|
1486
|
+
- `.middleware()` adds Hono middleware that runs *before* the Effect handler (can redirect/short-circuit)
|
|
1487
|
+
- `.provide()` adds Effect layers that run *within* the Effect computation (dependency injection)
|
|
1488
|
+
|
|
1489
|
+
| Level | Method | Scope |
|
|
1490
|
+
|-------|--------|-------|
|
|
1491
|
+
| `app.use('*', ...)` | Global | All routes |
|
|
1492
|
+
| `setupHonertia({ middleware: [...] })` | Global | All routes via config |
|
|
1493
|
+
| `effectRoutes(app).middleware(...)` | Builder | Routes in that chain only |
|
|
1494
|
+
|
|
1426
1495
|
### Manual Auth Check in Action
|
|
1427
1496
|
|
|
1428
1497
|
```typescript
|
package/dist/effect/auth.d.ts
CHANGED
|
@@ -22,12 +22,54 @@ export declare const RequireAuthLayer: Layer.Layer<AuthUserService, Unauthorized
|
|
|
22
22
|
* Layer that requires no authenticated user (guest only).
|
|
23
23
|
* Fails if a user is present, succeeds (as a no-op) if no user.
|
|
24
24
|
*
|
|
25
|
+
* For more flexibility (e.g., allowing anonymous users), use `createGuestLayer`.
|
|
26
|
+
*
|
|
25
27
|
* @example
|
|
26
28
|
* effectRoutes(app)
|
|
27
29
|
* .provide(RequireGuestLayer)
|
|
28
30
|
* .get('/login', showLogin)
|
|
29
31
|
*/
|
|
30
32
|
export declare const RequireGuestLayer: Layer.Layer<never, UnauthorizedError, never>;
|
|
33
|
+
/**
|
|
34
|
+
* Create a custom guest layer with a predicate to allow certain authenticated users.
|
|
35
|
+
*
|
|
36
|
+
* This is useful when you have "semi-authenticated" users (like Better Auth's anonymous
|
|
37
|
+
* users) who should still be able to access guest pages like login/register to upgrade
|
|
38
|
+
* their accounts.
|
|
39
|
+
*
|
|
40
|
+
* The predicate receives the authenticated user and returns `true` if they should be
|
|
41
|
+
* allowed through (treated as a "guest" for this route), or `false` to block them.
|
|
42
|
+
*
|
|
43
|
+
* @param allowUser - Predicate that returns true if the user should be allowed access.
|
|
44
|
+
* Receives the full AuthUser object (user + session).
|
|
45
|
+
* @param redirectTo - Where to redirect blocked users (default: '/')
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Allow anonymous users to access login/register pages
|
|
49
|
+
* const AllowAnonymousGuestLayer = createGuestLayer(
|
|
50
|
+
* (authUser) => authUser.user.isAnonymous === true
|
|
51
|
+
* )
|
|
52
|
+
*
|
|
53
|
+
* effectRoutes(app)
|
|
54
|
+
* .provide(AllowAnonymousGuestLayer)
|
|
55
|
+
* .get('/login', showLogin)
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* // Use with effectAuthRoutes for anonymous user upgrade flow
|
|
59
|
+
* effectAuthRoutes(app, {
|
|
60
|
+
* guestLayer: createGuestLayer((authUser) => authUser.user.isAnonymous),
|
|
61
|
+
* loginComponent: 'Auth/Login',
|
|
62
|
+
* registerComponent: 'Auth/Register',
|
|
63
|
+
* })
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* // Custom redirect for blocked users
|
|
67
|
+
* const GuestOrAnonymousLayer = createGuestLayer(
|
|
68
|
+
* (authUser) => authUser.user.isAnonymous,
|
|
69
|
+
* '/dashboard' // Redirect fully authenticated users to dashboard
|
|
70
|
+
* )
|
|
71
|
+
*/
|
|
72
|
+
export declare function createGuestLayer(allowUser: (authUser: AuthUser) => boolean, redirectTo?: string): Layer.Layer<never, UnauthorizedError, never>;
|
|
31
73
|
/**
|
|
32
74
|
* Check if user is authenticated without failing.
|
|
33
75
|
*/
|
|
@@ -85,15 +127,31 @@ export interface AuthRoutesConfig<E extends Env> {
|
|
|
85
127
|
origin: string | string[] | ((origin: string) => string | undefined | null);
|
|
86
128
|
credentials?: boolean;
|
|
87
129
|
};
|
|
130
|
+
/**
|
|
131
|
+
* Custom layer for guest-only routes (login, register, guestActions).
|
|
132
|
+
*
|
|
133
|
+
* By default, uses `RequireGuestLayer` which blocks ALL authenticated users.
|
|
134
|
+
* Use `createGuestLayer` to allow certain users through (e.g., anonymous users
|
|
135
|
+
* who should be able to access login/register to upgrade their accounts).
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* // Allow anonymous users to access login/register pages
|
|
139
|
+
* effectAuthRoutes(app, {
|
|
140
|
+
* guestLayer: createGuestLayer((authUser) => authUser.user.isAnonymous),
|
|
141
|
+
* loginComponent: 'Auth/Login',
|
|
142
|
+
* registerComponent: 'Auth/Register',
|
|
143
|
+
* })
|
|
144
|
+
*/
|
|
145
|
+
guestLayer?: Layer.Layer<never, UnauthorizedError, never>;
|
|
88
146
|
/**
|
|
89
147
|
* POST handler for login form submission.
|
|
90
|
-
* Automatically wrapped with RequireGuestLayer.
|
|
148
|
+
* Automatically wrapped with guestLayer (or RequireGuestLayer if not specified).
|
|
91
149
|
* Use betterAuthFormAction to create this.
|
|
92
150
|
*/
|
|
93
151
|
loginAction?: AuthActionEffect;
|
|
94
152
|
/**
|
|
95
153
|
* POST handler for registration form submission.
|
|
96
|
-
* Automatically wrapped with RequireGuestLayer.
|
|
154
|
+
* Automatically wrapped with guestLayer (or RequireGuestLayer if not specified).
|
|
97
155
|
* Use betterAuthFormAction to create this.
|
|
98
156
|
*/
|
|
99
157
|
registerAction?: AuthActionEffect;
|
|
@@ -106,7 +164,7 @@ export interface AuthRoutesConfig<E extends Env> {
|
|
|
106
164
|
/**
|
|
107
165
|
* Additional guest-only POST routes for extended auth flows.
|
|
108
166
|
* Keys are paths (e.g., '/forgot-password'), values are Effect handlers.
|
|
109
|
-
* All routes are wrapped with RequireGuestLayer.
|
|
167
|
+
* All routes are wrapped with guestLayer (or RequireGuestLayer if not specified).
|
|
110
168
|
*
|
|
111
169
|
* @example
|
|
112
170
|
* guestActions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/effect/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5G,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAI/D;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,wDAiB5B,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/effect/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5G,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAI/D;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,wDAiB5B,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,8CAe7B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,EAC1C,UAAU,SAAM,GACf,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAsB9C;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CACM,CAAA;AAEvE;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAGlE,CAAA;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,mBAAqB,KACpB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,CAQhD,CAAA;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY,GACvB,mBAAgB,KACf,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,CAQ5C,CAAA;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,eAAe,CAK9D,CAAA;AAEJ;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,GAAG,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAYzE;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,CAC1B,CAAC,GAAG,cAAc,GAAG,WAAW,EAChC,CAAC,SAAS,KAAK,GAAG,KAAK,IACrB,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAEvB;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,GAAG;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAAA;QAC3E,WAAW,CAAC,EAAE,OAAO,CAAA;KACtB,CAAA;IACD;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAA;IACzD;;;;OAIG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAA;IACjC;;;;OAIG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CAChD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,GAAG,EAC5C,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EACZ,MAAM,GAAE,gBAAgB,CAAC,CAAC,CAAM,GAC/B,IAAI,CAoHN;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,EACpC,MAAM,GAAE;IACN,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;CAClB,GACL,iBAAiB,CAAC,CAAC,CAAC,CA4BtB;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,GACR,OAAO,GACP;IAAE,OAAO,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;CAAE,CAAA;AAEvC;;GAEG;AACH,MAAM,WAAW,0BAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO;IACpE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACvF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAsB,KAAK,MAAM,CAAC,CAAA;CAC7E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,EAC7D,MAAM,EAAE,0BAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,GACnD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,GAAG,WAAW,CAAC,CAiCxE;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,GAAE,sBAA2B,GAClC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,cAAc,GAAG,WAAW,CAAC,CAiC9D"}
|
package/dist/effect/auth.js
CHANGED
|
@@ -33,6 +33,8 @@ export const RequireAuthLayer = Layer.effect(AuthUserService, Effect.gen(functio
|
|
|
33
33
|
* Layer that requires no authenticated user (guest only).
|
|
34
34
|
* Fails if a user is present, succeeds (as a no-op) if no user.
|
|
35
35
|
*
|
|
36
|
+
* For more flexibility (e.g., allowing anonymous users), use `createGuestLayer`.
|
|
37
|
+
*
|
|
36
38
|
* @example
|
|
37
39
|
* effectRoutes(app)
|
|
38
40
|
* .provide(RequireGuestLayer)
|
|
@@ -48,6 +50,62 @@ export const RequireGuestLayer = Layer.effectDiscard(Effect.gen(function* () {
|
|
|
48
50
|
}
|
|
49
51
|
// Guest confirmed - no user present, succeed silently
|
|
50
52
|
}));
|
|
53
|
+
/**
|
|
54
|
+
* Create a custom guest layer with a predicate to allow certain authenticated users.
|
|
55
|
+
*
|
|
56
|
+
* This is useful when you have "semi-authenticated" users (like Better Auth's anonymous
|
|
57
|
+
* users) who should still be able to access guest pages like login/register to upgrade
|
|
58
|
+
* their accounts.
|
|
59
|
+
*
|
|
60
|
+
* The predicate receives the authenticated user and returns `true` if they should be
|
|
61
|
+
* allowed through (treated as a "guest" for this route), or `false` to block them.
|
|
62
|
+
*
|
|
63
|
+
* @param allowUser - Predicate that returns true if the user should be allowed access.
|
|
64
|
+
* Receives the full AuthUser object (user + session).
|
|
65
|
+
* @param redirectTo - Where to redirect blocked users (default: '/')
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* // Allow anonymous users to access login/register pages
|
|
69
|
+
* const AllowAnonymousGuestLayer = createGuestLayer(
|
|
70
|
+
* (authUser) => authUser.user.isAnonymous === true
|
|
71
|
+
* )
|
|
72
|
+
*
|
|
73
|
+
* effectRoutes(app)
|
|
74
|
+
* .provide(AllowAnonymousGuestLayer)
|
|
75
|
+
* .get('/login', showLogin)
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* // Use with effectAuthRoutes for anonymous user upgrade flow
|
|
79
|
+
* effectAuthRoutes(app, {
|
|
80
|
+
* guestLayer: createGuestLayer((authUser) => authUser.user.isAnonymous),
|
|
81
|
+
* loginComponent: 'Auth/Login',
|
|
82
|
+
* registerComponent: 'Auth/Register',
|
|
83
|
+
* })
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* // Custom redirect for blocked users
|
|
87
|
+
* const GuestOrAnonymousLayer = createGuestLayer(
|
|
88
|
+
* (authUser) => authUser.user.isAnonymous,
|
|
89
|
+
* '/dashboard' // Redirect fully authenticated users to dashboard
|
|
90
|
+
* )
|
|
91
|
+
*/
|
|
92
|
+
export function createGuestLayer(allowUser, redirectTo = '/') {
|
|
93
|
+
return Layer.effectDiscard(Effect.gen(function* () {
|
|
94
|
+
const maybeUser = yield* Effect.serviceOption(AuthUserService);
|
|
95
|
+
if (Option.isSome(maybeUser)) {
|
|
96
|
+
const authUser = maybeUser.value;
|
|
97
|
+
// Check if this user is allowed through
|
|
98
|
+
if (!allowUser(authUser)) {
|
|
99
|
+
return yield* Effect.fail(new UnauthorizedError({
|
|
100
|
+
message: 'Already authenticated',
|
|
101
|
+
redirectTo,
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
// User is allowed (e.g., anonymous user) - continue
|
|
105
|
+
}
|
|
106
|
+
// No user or allowed user - succeed silently
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
51
109
|
/**
|
|
52
110
|
* Check if user is authenticated without failing.
|
|
53
111
|
*/
|
|
@@ -110,28 +168,22 @@ export function shareAuthMiddleware() {
|
|
|
110
168
|
*/
|
|
111
169
|
export function effectAuthRoutes(app, config = {}) {
|
|
112
170
|
const { loginPath = '/login', registerPath = '/register', logoutPath = '/logout', apiPath = '/api/auth', logoutRedirect = '/login', loginRedirect = '/', loginComponent = 'Auth/Login', registerComponent = 'Auth/Register', } = config;
|
|
171
|
+
// Use custom guestLayer or create default that respects loginRedirect
|
|
172
|
+
const guestLayer = config.guestLayer ?? createGuestLayer(() => false, loginRedirect);
|
|
113
173
|
const routes = effectRoutes(app);
|
|
114
|
-
//
|
|
115
|
-
routes.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
yield* requireGuest(loginRedirect);
|
|
122
|
-
return yield* render(registerComponent);
|
|
123
|
-
}));
|
|
124
|
-
// Login action (POST) - guest only
|
|
174
|
+
// Guest-only routes builder (login, register pages and actions)
|
|
175
|
+
const guestRoutes = routes.provide(guestLayer);
|
|
176
|
+
// Login page - uses custom guestLayer or RequireGuestLayer
|
|
177
|
+
guestRoutes.get(loginPath, render(loginComponent));
|
|
178
|
+
// Register page - uses custom guestLayer or RequireGuestLayer
|
|
179
|
+
guestRoutes.get(registerPath, render(registerComponent));
|
|
180
|
+
// Login action (POST) - uses custom guestLayer
|
|
125
181
|
if (config.loginAction) {
|
|
126
|
-
|
|
127
|
-
.provide(RequireGuestLayer)
|
|
128
|
-
.post(loginPath, config.loginAction);
|
|
182
|
+
guestRoutes.post(loginPath, config.loginAction);
|
|
129
183
|
}
|
|
130
|
-
// Register action (POST) -
|
|
184
|
+
// Register action (POST) - uses custom guestLayer
|
|
131
185
|
if (config.registerAction) {
|
|
132
|
-
|
|
133
|
-
.provide(RequireGuestLayer)
|
|
134
|
-
.post(registerPath, config.registerAction);
|
|
186
|
+
guestRoutes.post(registerPath, config.registerAction);
|
|
135
187
|
}
|
|
136
188
|
// Logout (POST) - use provided action or default
|
|
137
189
|
if (config.logoutAction) {
|
|
@@ -158,7 +210,6 @@ export function effectAuthRoutes(app, config = {}) {
|
|
|
158
210
|
}
|
|
159
211
|
// Additional guest-only actions (2FA, forgot password, etc.)
|
|
160
212
|
if (config.guestActions) {
|
|
161
|
-
const guestRoutes = routes.provide(RequireGuestLayer);
|
|
162
213
|
for (const [path, action] of Object.entries(config.guestActions)) {
|
|
163
214
|
guestRoutes.post(path, action);
|
|
164
215
|
}
|
package/dist/effect/index.d.ts
CHANGED
|
@@ -22,5 +22,5 @@ export { describeRoute, createRouteTester, generateTestCases, type TestUserType,
|
|
|
22
22
|
export { TestLayer, TestCaptureService, type TestCaptures, } from './test-layers.js';
|
|
23
23
|
export { BoundModels, BoundModelNotFound, bound, pluralize, parseBindings, toHonoPath, type ParsedBinding, type BoundModel, } from './binding.js';
|
|
24
24
|
export { CacheError, cache, cacheGet, cacheSet, cacheInvalidate, cacheInvalidatePrefix, } from '../cache.js';
|
|
25
|
-
export { RequireAuthLayer, RequireGuestLayer, isAuthenticated, currentUser, requireAuth, requireGuest, shareAuth, shareAuthMiddleware, effectAuthRoutes, betterAuthFormAction, betterAuthLogoutAction, loadUser, type AuthRoutesConfig, type BetterAuthFormActionConfig, type BetterAuthLogoutConfig, type BetterAuthActionResult, } from './auth.js';
|
|
25
|
+
export { RequireAuthLayer, RequireGuestLayer, createGuestLayer, isAuthenticated, currentUser, requireAuth, requireGuest, shareAuth, shareAuthMiddleware, effectAuthRoutes, betterAuthFormAction, betterAuthLogoutAction, loadUser, type AuthRoutesConfig, type BetterAuthFormActionConfig, type BetterAuthLogoutConfig, type BetterAuthActionResult, } from './auth.js';
|
|
26
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"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"}
|
package/dist/effect/index.js
CHANGED
|
@@ -40,4 +40,4 @@ export { BoundModels, BoundModelNotFound, bound, pluralize, parseBindings, toHon
|
|
|
40
40
|
// Cache
|
|
41
41
|
export { CacheError, cache, cacheGet, cacheSet, cacheInvalidate, cacheInvalidatePrefix, } from '../cache.js';
|
|
42
42
|
// Auth
|
|
43
|
-
export { RequireAuthLayer, RequireGuestLayer, isAuthenticated, currentUser, requireAuth, requireGuest, shareAuth, shareAuthMiddleware, effectAuthRoutes, betterAuthFormAction, betterAuthLogoutAction, loadUser, } from './auth.js';
|
|
43
|
+
export { RequireAuthLayer, RequireGuestLayer, createGuestLayer, isAuthenticated, currentUser, requireAuth, requireGuest, shareAuth, shareAuthMiddleware, effectAuthRoutes, betterAuthFormAction, betterAuthLogoutAction, loadUser, } from './auth.js';
|
package/dist/effect/routing.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Laravel-style routing with Effect handlers.
|
|
5
5
|
*/
|
|
6
6
|
import { Effect, Layer, Schema as S } from 'effect';
|
|
7
|
-
import type { Hono, Env } from 'hono';
|
|
7
|
+
import type { Hono, MiddlewareHandler, Env } from 'hono';
|
|
8
8
|
import { type EffectBridgeConfig } from './bridge.js';
|
|
9
9
|
import { type AppError, Redirect } from './errors.js';
|
|
10
10
|
import { DatabaseService, AuthService, HonertiaService, RequestService, ResponseFactoryService, BindingsService } from './services.js';
|
|
@@ -86,12 +86,29 @@ export declare class EffectRouteBuilder<E extends Env, ProvidedServices = never,
|
|
|
86
86
|
private readonly pathPrefix;
|
|
87
87
|
private readonly bridgeConfig?;
|
|
88
88
|
private readonly registry;
|
|
89
|
-
|
|
89
|
+
private readonly middlewares;
|
|
90
|
+
constructor(app: Hono<E>, layers?: Layer.Layer<any, never, never>[], pathPrefix?: string, bridgeConfig?: EffectBridgeConfig<E, CustomServices> | undefined, registry?: RouteRegistry, middlewares?: MiddlewareHandler<E>[]);
|
|
90
91
|
/**
|
|
91
92
|
* Add a layer to provide services to all routes in this builder.
|
|
92
93
|
* The layer's error type must be handled by the effect bridge (AppError or subtype).
|
|
93
94
|
*/
|
|
94
95
|
provide<S, LayerErr extends AppError>(layer: Layer.Layer<S, LayerErr, never>): EffectRouteBuilder<E, ProvidedServices | S, CustomServices>;
|
|
96
|
+
/**
|
|
97
|
+
* Add Hono middleware that runs before the Effect handler.
|
|
98
|
+
* Use this for middleware that needs to redirect or short-circuit requests
|
|
99
|
+
* before the Effect computation runs (e.g., auth redirects, rate limiting).
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* effectRoutes(app)
|
|
104
|
+
* .middleware(ensureAuthMiddleware) // Can redirect before Effect runs
|
|
105
|
+
* .provide(RequireAuthLayer) // Provides services within Effect
|
|
106
|
+
* .group((route) => {
|
|
107
|
+
* route.get('/dashboard', showDashboard)
|
|
108
|
+
* })
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
middleware(...handlers: MiddlewareHandler<E>[]): EffectRouteBuilder<E, ProvidedServices, CustomServices>;
|
|
95
112
|
/**
|
|
96
113
|
* Set path prefix for all routes in this builder.
|
|
97
114
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/effect/routing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAU,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,KAAK,EAA0B,IAAI,
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/effect/routing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAU,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,KAAK,EAA0B,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAEhF,OAAO,EAKL,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,QAAQ,EACb,QAAQ,EAET,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,eAAe,EACf,WAAW,EACX,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,eAAe,EAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAErF,OAAO,EAKL,WAAW,EAGZ,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,aAAa,EAId,MAAM,qBAAqB,CAAA;AAE5B;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,SAAS,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,CACjG,QAAQ,GAAG,QAAQ,EACnB,CAAC,EACD,CAAC,CACF,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,sBAAsB,GACtB,eAAe,GACf,eAAe,GACf,WAAW,GACX,eAAe,GACf,WAAW,GACX,oBAAoB,GACpB,qBAAqB,CAAA;AAEzB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;IACrB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAiCD;;GAEG;AACH,qBAAa,kBAAkB,CAC7B,CAAC,SAAS,GAAG,EACb,gBAAgB,GAAG,KAAK,EACxB,cAAc,GAAG,KAAK;IAGpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBALX,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EACZ,MAAM,GAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,EAAO,EAC7C,UAAU,GAAE,MAAW,EACvB,YAAY,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,cAAc,CAAC,YAAA,EACpD,QAAQ,GAAE,aAAmC,EAC7C,WAAW,GAAE,iBAAiB,CAAC,CAAC,CAAC,EAAO;IAG3D;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,QAAQ,SAAS,QAAQ,EAClC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GACrC,kBAAkB,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,EAAE,cAAc,CAAC;IAW9D;;;;;;;;;;;;;;OAcG;IACH,UAAU,CACR,GAAG,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAClC,kBAAkB,CAAC,CAAC,EAAE,gBAAgB,EAAE,cAAc,CAAC;IAW1D;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,EAAE,gBAAgB,EAAE,cAAc,CAAC;IAY7E;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,EAAE,gBAAgB,EAAE,cAAc,CAAC,KAAK,IAAI,GAAG,IAAI;IAI/F;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;YACW,YAAY;IAoB1B;;;OAGG;YACW,eAAe;IAsE7B,OAAO,CAAC,aAAa;IA8GrB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAwCrB,4FAA4F;IAC5F,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,gBAAgB,GAAG,cAAc,EAC5D,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,EAC1C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI;IAIP,6FAA6F;IAC7F,IAAI,CAAC,CAAC,SAAS,YAAY,GAAG,gBAAgB,GAAG,cAAc,EAC7D,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,EAC1C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI;IAIP,4FAA4F;IAC5F,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,gBAAgB,GAAG,cAAc,EAC5D,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,EAC1C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI;IAIP,8FAA8F;IAC9F,KAAK,CAAC,CAAC,SAAS,YAAY,GAAG,gBAAgB,GAAG,cAAc,EAC9D,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,EAC1C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI;IAIP,+FAA+F;IAC/F,MAAM,CAAC,CAAC,SAAS,YAAY,GAAG,gBAAgB,GAAG,cAAc,EAC/D,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,EAC1C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI;IAIP,6GAA6G;IAC7G,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,gBAAgB,GAAG,cAAc,EAC5D,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,EAC1C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI;IAIP;;;OAGG;IACH,WAAW,IAAI,aAAa;CAG7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,GAAG,EAAE,cAAc,GAAG,KAAK,CACvE,SAAQ,kBAAkB,CAAC,CAAC,EAAE,cAAc,CAAC;IAC7C;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,cAAc,GAAG,KAAK,EAChE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EACZ,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,cAAc,CAAC,GAC7C,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAG9C"}
|
package/dist/effect/routing.js
CHANGED
|
@@ -48,26 +48,46 @@ export class EffectRouteBuilder {
|
|
|
48
48
|
pathPrefix;
|
|
49
49
|
bridgeConfig;
|
|
50
50
|
registry;
|
|
51
|
-
|
|
51
|
+
middlewares;
|
|
52
|
+
constructor(app, layers = [], pathPrefix = '', bridgeConfig, registry = getGlobalRegistry(), middlewares = []) {
|
|
52
53
|
this.app = app;
|
|
53
54
|
this.layers = layers;
|
|
54
55
|
this.pathPrefix = pathPrefix;
|
|
55
56
|
this.bridgeConfig = bridgeConfig;
|
|
56
57
|
this.registry = registry;
|
|
58
|
+
this.middlewares = middlewares;
|
|
57
59
|
}
|
|
58
60
|
/**
|
|
59
61
|
* Add a layer to provide services to all routes in this builder.
|
|
60
62
|
* The layer's error type must be handled by the effect bridge (AppError or subtype).
|
|
61
63
|
*/
|
|
62
64
|
provide(layer) {
|
|
63
|
-
return new EffectRouteBuilder(this.app, [...this.layers, layer], this.pathPrefix, this.bridgeConfig, this.registry);
|
|
65
|
+
return new EffectRouteBuilder(this.app, [...this.layers, layer], this.pathPrefix, this.bridgeConfig, this.registry, this.middlewares);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Add Hono middleware that runs before the Effect handler.
|
|
69
|
+
* Use this for middleware that needs to redirect or short-circuit requests
|
|
70
|
+
* before the Effect computation runs (e.g., auth redirects, rate limiting).
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* effectRoutes(app)
|
|
75
|
+
* .middleware(ensureAuthMiddleware) // Can redirect before Effect runs
|
|
76
|
+
* .provide(RequireAuthLayer) // Provides services within Effect
|
|
77
|
+
* .group((route) => {
|
|
78
|
+
* route.get('/dashboard', showDashboard)
|
|
79
|
+
* })
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
middleware(...handlers) {
|
|
83
|
+
return new EffectRouteBuilder(this.app, this.layers, this.pathPrefix, this.bridgeConfig, this.registry, [...this.middlewares, ...handlers]);
|
|
64
84
|
}
|
|
65
85
|
/**
|
|
66
86
|
* Set path prefix for all routes in this builder.
|
|
67
87
|
*/
|
|
68
88
|
prefix(path) {
|
|
69
89
|
const normalizedPath = path.replace(/\/$/, '');
|
|
70
|
-
return new EffectRouteBuilder(this.app, this.layers, this.pathPrefix + normalizedPath, this.bridgeConfig, this.registry);
|
|
90
|
+
return new EffectRouteBuilder(this.app, this.layers, this.pathPrefix + normalizedPath, this.bridgeConfig, this.registry, this.middlewares);
|
|
71
91
|
}
|
|
72
92
|
/**
|
|
73
93
|
* Create a nested group with the same configuration.
|
|
@@ -254,8 +274,16 @@ export class EffectRouteBuilder {
|
|
|
254
274
|
name: options?.name,
|
|
255
275
|
};
|
|
256
276
|
this.registry.register(metadata);
|
|
257
|
-
// Register with Hono
|
|
258
|
-
|
|
277
|
+
// Register with Hono - apply middlewares before the Effect handler
|
|
278
|
+
const handler = this.createHandler(effect, bindings, options);
|
|
279
|
+
if (this.middlewares.length > 0) {
|
|
280
|
+
// Use type assertion for dynamic method with spread middlewares
|
|
281
|
+
;
|
|
282
|
+
this.app[method](fullPath, ...this.middlewares, handler);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
this.app[method](fullPath, handler);
|
|
286
|
+
}
|
|
259
287
|
}
|
|
260
288
|
/** Register a GET route. Supports Laravel-style route model binding: /projects/{project} */
|
|
261
289
|
get(path, effect, options) {
|
|
@@ -183,7 +183,10 @@ export interface DefaultAuthUser {
|
|
|
183
183
|
export type AuthUser = HonertiaAuthUserType extends {
|
|
184
184
|
type: infer T;
|
|
185
185
|
} ? T : DefaultAuthUser;
|
|
186
|
-
|
|
186
|
+
/**
|
|
187
|
+
* Authenticated User Service - Provides the current user session
|
|
188
|
+
*/
|
|
189
|
+
declare const AuthUserService_base: Context.TagClass<AuthUserService, 'honertia/AuthUser', AuthUser>;
|
|
187
190
|
export declare class AuthUserService extends AuthUserService_base {
|
|
188
191
|
}
|
|
189
192
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/effect/services.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/effect/services.ts"],"names":[],"mappings":"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"}
|
package/dist/effect/services.js
CHANGED
|
@@ -37,7 +37,11 @@ export class AuthService extends AuthService_base {
|
|
|
37
37
|
const BindingsService_base = Context.Tag('honertia/Bindings')();
|
|
38
38
|
export class BindingsService extends BindingsService_base {
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Authenticated User Service - Provides the current user session
|
|
42
|
+
*/
|
|
43
|
+
const AuthUserService_base = Context.Tag('honertia/AuthUser')();
|
|
44
|
+
export class AuthUserService extends AuthUserService_base {
|
|
41
45
|
}
|
|
42
46
|
export class EmailService extends Context.Tag('honertia/Email')() {
|
|
43
47
|
}
|