@relkit/better-auth 0.7.9 → 0.8.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/dist/activation.d.ts +4 -28
- package/dist/activation.d.ts.map +1 -1
- package/dist/activation.js +18 -70
- package/dist/activation.js.map +1 -1
- package/dist/auth-database.d.ts +9 -0
- package/dist/auth-database.d.ts.map +1 -0
- package/dist/auth-database.js +14 -0
- package/dist/auth-database.js.map +1 -0
- package/dist/auth-native-adapter.d.ts +15 -0
- package/dist/auth-native-adapter.d.ts.map +1 -0
- package/dist/auth-native-adapter.js +46 -0
- package/dist/auth-native-adapter.js.map +1 -0
- package/dist/auth-run.d.ts +16 -0
- package/dist/auth-run.d.ts.map +1 -0
- package/dist/auth-run.js +28 -0
- package/dist/auth-run.js.map +1 -0
- package/dist/auth.factory.d.ts +1 -1
- package/dist/auth.factory.d.ts.map +1 -1
- package/dist/auth.factory.js +11 -3
- package/dist/auth.factory.js.map +1 -1
- package/dist/auth.service.d.ts +1 -1
- package/dist/auth.service.d.ts.map +1 -1
- package/dist/auth.service.js +33 -44
- package/dist/auth.service.js.map +1 -1
- package/dist/auth.types.d.ts +7 -34
- package/dist/auth.types.d.ts.map +1 -1
- package/dist/auth.types.js +1 -1
- package/dist/auth.types.js.map +1 -1
- package/dist/declaration.types.d.ts +36 -0
- package/dist/declaration.types.d.ts.map +1 -0
- package/dist/declaration.types.js +2 -0
- package/dist/declaration.types.js.map +1 -0
- package/dist/dependencies.d.ts +5 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +16 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/drizzle.d.ts +10 -0
- package/dist/drizzle.d.ts.map +1 -0
- package/dist/drizzle.js +8 -0
- package/dist/drizzle.js.map +1 -0
- package/dist/index.d.ts +2 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -14
- package/dist/index.js.map +1 -1
- package/package.json +68 -7
package/dist/activation.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Auth } from "better-auth";
|
|
2
|
-
import { Effect, ManagedRuntime } from "effect";
|
|
3
2
|
import type { BetterAuthActivationOptions } from "./activation.types.js";
|
|
4
|
-
import type { AuthDatabase,
|
|
3
|
+
import type { AuthDatabase, BetterAuthServiceDescriptor, BetterAuthServiceOptions } from "./auth.types.js";
|
|
4
|
+
export { runAuthPromise } from "./auth-run.js";
|
|
5
|
+
export { authNativeAdapter } from "./auth-native-adapter.js";
|
|
5
6
|
/**
|
|
6
7
|
* Binds native auth to an acquired database and its declared ALL route.
|
|
7
8
|
* @typeParam Options - Native configuration retained by the lazy declaration.
|
|
@@ -14,7 +15,7 @@ import type { AuthDatabase, BetterAuthRuntime, BetterAuthServiceDescriptor, Bett
|
|
|
14
15
|
* shared attempt; successful auth remains retained after database close.
|
|
15
16
|
* @example
|
|
16
17
|
* ```ts
|
|
17
|
-
* import { activateBetterAuthService, defineBetterAuthService, type AuthConfiguration } from "@relkit/better-auth";
|
|
18
|
+
* import { activateBetterAuthService, defineBetterAuthService, type AuthConfiguration } from "@relkit/better-auth/drizzle";
|
|
18
19
|
* async function handleNativeAuth(database: AuthConfiguration["database"]): Promise<Response> {
|
|
19
20
|
* const service = defineBetterAuthService({ baseURL: "http://localhost" });
|
|
20
21
|
* const auth = await activateBetterAuthService(service, database, "/api/auth", { isolated: true });
|
|
@@ -24,29 +25,4 @@ import type { AuthDatabase, BetterAuthRuntime, BetterAuthServiceDescriptor, Bett
|
|
|
24
25
|
* ```
|
|
25
26
|
*/
|
|
26
27
|
export declare function activateBetterAuthService<Options extends BetterAuthServiceOptions>(service: BetterAuthServiceDescriptor<Options>, database: AuthDatabase, basePath: string, options?: BetterAuthActivationOptions): Promise<Auth<any>>;
|
|
27
|
-
/**
|
|
28
|
-
* Runs the Promise boundary, unwrapping expected auth failures.
|
|
29
|
-
* @typeParam A - Successful operation result.
|
|
30
|
-
* @typeParam E - Effect failure channel.
|
|
31
|
-
* @typeParam R - Runtime's provided services.
|
|
32
|
-
* @typeParam ER - Runtime acquisition failures.
|
|
33
|
-
* @param runtime - Managed auth owner.
|
|
34
|
-
* @param effect - Lazy operation preserving defects and interruption.
|
|
35
|
-
* @param options - Request cancellation forwarded to the runner.
|
|
36
|
-
* @param operation - Bounded invocation label; the trace captures no SDK result.
|
|
37
|
-
* @returns Promise preserving native exception identity and mixed causes.
|
|
38
|
-
* @internal
|
|
39
|
-
*/
|
|
40
|
-
export declare function runAuthPromise<A, E, R, ER>(runtime: ManagedRuntime.ManagedRuntime<R, ER>, effect: Effect.Effect<A, E, R>, options?: Effect.RunOptions, operation?: string): Promise<A>;
|
|
41
|
-
/**
|
|
42
|
-
* Routes native callables through admission while preserving native properties.
|
|
43
|
-
* @param owner - Managed owner reused by each Promise boundary.
|
|
44
|
-
* @param native - SDK instance with initialization complete.
|
|
45
|
-
* @returns Stable proxy retaining native object and function metadata.
|
|
46
|
-
* @remarks Handler, fetch and API calls are admitted. The native $context is
|
|
47
|
-
* retained as an advanced SDK view; direct adapter access requires its DB owner's
|
|
48
|
-
* lifetime rather than establishing a new admission lease.
|
|
49
|
-
* @internal
|
|
50
|
-
*/
|
|
51
|
-
export declare function authNativeAdapter(owner: BetterAuthRuntime<BetterAuthServiceOptions>["activation"] & {}, native: Auth<any>): Auth<any>;
|
|
52
28
|
//# sourceMappingURL=activation.d.ts.map
|
package/dist/activation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../src/activation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../src/activation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,KAAK,EACV,YAAY,EAEZ,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,SAAS,wBAAwB,EACtF,OAAO,EAAE,2BAA2B,CAAC,OAAO,CAAC,EAC7C,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAqCpB"}
|
package/dist/activation.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/** Binds lazy auth declarations to shared or isolated managed native owners.
|
|
2
|
+
* Failed shared acquisition is evicted; successful owners borrow the database lifecycle and preserve native settlement.
|
|
3
|
+
*/
|
|
4
|
+
import { drizzleInstrumentationOf, inheritNativeLeases } from "@relkit/drizzle/internal";
|
|
5
|
+
import { Effect, Layer, ManagedRuntime } from "effect";
|
|
4
6
|
import { AuthService, authLiveLayer, authNativeOf } from "./auth.service.js";
|
|
5
7
|
import { BETTER_AUTH_RUNTIME } from "./symbols.js";
|
|
8
|
+
import { runAuthPromise } from "./auth-run.js";
|
|
9
|
+
import { authNativeAdapter } from "./auth-native-adapter.js";
|
|
10
|
+
export { runAuthPromise } from "./auth-run.js";
|
|
11
|
+
export { authNativeAdapter } from "./auth-native-adapter.js";
|
|
6
12
|
/**
|
|
7
13
|
* Binds native auth to an acquired database and its declared ALL route.
|
|
8
14
|
* @typeParam Options - Native configuration retained by the lazy declaration.
|
|
@@ -15,7 +21,7 @@ import { BETTER_AUTH_RUNTIME } from "./symbols.js";
|
|
|
15
21
|
* shared attempt; successful auth remains retained after database close.
|
|
16
22
|
* @example
|
|
17
23
|
* ```ts
|
|
18
|
-
* import { activateBetterAuthService, defineBetterAuthService, type AuthConfiguration } from "@relkit/better-auth";
|
|
24
|
+
* import { activateBetterAuthService, defineBetterAuthService, type AuthConfiguration } from "@relkit/better-auth/drizzle";
|
|
19
25
|
* async function handleNativeAuth(database: AuthConfiguration["database"]): Promise<Response> {
|
|
20
26
|
* const service = defineBetterAuthService({ baseURL: "http://localhost" });
|
|
21
27
|
* const auth = await activateBetterAuthService(service, database, "/api/auth", { isolated: true });
|
|
@@ -37,84 +43,26 @@ export async function activateBetterAuthService(service, database, basePath, opt
|
|
|
37
43
|
// leases for acquisition only; the returned context must not retain them.
|
|
38
44
|
Layer.effectContext(inheritNativeLeases(Layer.build(authLiveLayer({ options: state.options, database, basePath })))).pipe(Layer.provideMerge(Layer.succeedContext(instrumentation))));
|
|
39
45
|
if (options.isolated !== true)
|
|
40
|
-
state
|
|
46
|
+
bindSharedHandler(state, owner);
|
|
41
47
|
}
|
|
42
48
|
const currentOwner = owner;
|
|
43
49
|
try {
|
|
44
50
|
return await runAuthPromise(currentOwner, Effect.flatMap(AuthService, (auth) => Effect.sync(() => authNativeAdapter(currentOwner, authNativeOf(auth)))), undefined, "auth.acquire");
|
|
45
51
|
}
|
|
46
52
|
catch (error) {
|
|
47
|
-
if (state.activation === currentOwner)
|
|
53
|
+
if (state.activation === currentOwner) {
|
|
48
54
|
state.activation = undefined;
|
|
55
|
+
state.handle = undefined;
|
|
56
|
+
}
|
|
49
57
|
await currentOwner.dispose();
|
|
50
58
|
throw error;
|
|
51
59
|
}
|
|
52
60
|
}
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
* @typeParam R - Runtime's provided services.
|
|
58
|
-
* @typeParam ER - Runtime acquisition failures.
|
|
59
|
-
* @param runtime - Managed auth owner.
|
|
60
|
-
* @param effect - Lazy operation preserving defects and interruption.
|
|
61
|
-
* @param options - Request cancellation forwarded to the runner.
|
|
62
|
-
* @param operation - Bounded invocation label; the trace captures no SDK result.
|
|
63
|
-
* @returns Promise preserving native exception identity and mixed causes.
|
|
64
|
-
* @internal
|
|
65
|
-
*/
|
|
66
|
-
export function runAuthPromise(runtime, effect, options, operation = "auth.api") {
|
|
67
|
-
const admittedEffect = inheritNativeLeases(effect);
|
|
68
|
-
return runSpecializedTrace(operation, async () => {
|
|
69
|
-
const exit = await runtime.runPromiseExit(admittedEffect, options);
|
|
70
|
-
if (Exit.isSuccess(exit))
|
|
71
|
-
return exit.value;
|
|
72
|
-
// Unwrap auth causes before the shared renderer retains every cleanup/interrupt reason.
|
|
73
|
-
throw squashDrizzleCause(Cause.map(exit.cause, (failure) => failure instanceof AuthFailure ? failure.cause : failure));
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Routes native callables through admission while preserving native properties.
|
|
78
|
-
* @param owner - Managed owner reused by each Promise boundary.
|
|
79
|
-
* @param native - SDK instance with initialization complete.
|
|
80
|
-
* @returns Stable proxy retaining native object and function metadata.
|
|
81
|
-
* @remarks Handler, fetch and API calls are admitted. The native $context is
|
|
82
|
-
* retained as an advanced SDK view; direct adapter access requires its DB owner's
|
|
83
|
-
* lifetime rather than establishing a new admission lease.
|
|
84
|
-
* @internal
|
|
85
|
-
*/
|
|
86
|
-
export function authNativeAdapter(owner, native) {
|
|
87
|
-
const cached = nativeAdapters.get(owner);
|
|
88
|
-
if (cached !== undefined)
|
|
89
|
-
return cached;
|
|
90
|
-
const methods = new Map();
|
|
91
|
-
const handler = (request) => runAuthPromise(owner, Effect.flatMap(AuthService, (auth) => auth.handler(request)), { signal: request.signal }, "auth.handler");
|
|
92
|
-
const api = new Proxy(native.api, {
|
|
93
|
-
get(target, key, receiver) {
|
|
94
|
-
const value = Reflect.get(target, key, receiver);
|
|
95
|
-
if (typeof value !== "function" || typeof key !== "string")
|
|
96
|
-
return value;
|
|
97
|
-
if (!methods.has(key))
|
|
98
|
-
methods.set(key, new Proxy(value, {
|
|
99
|
-
apply(_method, _receiver, args) {
|
|
100
|
-
return runAuthPromise(owner, Effect.flatMap(AuthService, (auth) => auth.api(key, args)), undefined, key === "getSession" ? "auth.session" : "auth.api");
|
|
101
|
-
},
|
|
102
|
-
}));
|
|
103
|
-
return methods.get(key);
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
const adapter = new Proxy(native, {
|
|
107
|
-
get(target, key, receiver) {
|
|
108
|
-
if (key === "handler" || key === "fetch")
|
|
109
|
-
return handler;
|
|
110
|
-
return key === "api" ? api : Reflect.get(target, key, receiver);
|
|
111
|
-
},
|
|
112
|
-
});
|
|
113
|
-
nativeAdapters.set(owner, adapter);
|
|
114
|
-
return adapter;
|
|
61
|
+
/** Binds the root's database-independent handler to this shared owner. */
|
|
62
|
+
function bindSharedHandler(state, owner) {
|
|
63
|
+
state.activation = owner;
|
|
64
|
+
state.handle = (request) => runAuthPromise(owner, Effect.flatMap(AuthService, (auth) => auth.handler(request)), { signal: request.signal }, "auth.handler");
|
|
115
65
|
}
|
|
116
|
-
// Owners retain native auth already; this weak projection cache adds no lifetime.
|
|
117
|
-
const nativeAdapters = new WeakMap();
|
|
118
66
|
/**
|
|
119
67
|
* Reads the server-only state brand established by defineBetterAuthService.
|
|
120
68
|
* @typeParam Options - Native options held by the declaration.
|
package/dist/activation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.js","sourceRoot":"","sources":["../src/activation.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"activation.js","sourceRoot":"","sources":["../src/activation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Borrows database admission and resolves its existing native declaration brand. */
|
|
2
|
+
import { drizzleRuntimeOf } from "@relkit/drizzle/internal";
|
|
3
|
+
import type { Effect } from "effect";
|
|
4
|
+
import type { AuthDatabase } from "./auth.types.js";
|
|
5
|
+
/** Keeps SQLite serialization and owner drain admission around the complete SDK call. */
|
|
6
|
+
export declare function withAuthWork<A, E, R>(database: AuthDatabase, effect: Effect.Effect<A, E, R>): Effect.Effect<A, import("@relkit/drizzle/internal").DrizzleFailure | E, R>;
|
|
7
|
+
/** Reads the established native brand; auth never acquires another database owner. */
|
|
8
|
+
export declare function databaseServiceOf(activation: AuthDatabase): Parameters<typeof drizzleRuntimeOf>[0];
|
|
9
|
+
//# sourceMappingURL=auth-database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-database.d.ts","sourceRoot":"","sources":["../src/auth-database.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,EAAE,gBAAgB,EAA0C,MAAM,0BAA0B,CAAC;AACpG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,8EAE3F;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,YAAY,GAItC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CACzD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Borrows database admission and resolves its existing native declaration brand. */
|
|
2
|
+
import { drizzleRuntimeOf, withDrizzleSqliteWork, withDrizzleWork } from "@relkit/drizzle/internal";
|
|
3
|
+
/** Keeps SQLite serialization and owner drain admission around the complete SDK call. */
|
|
4
|
+
export function withAuthWork(database, effect) {
|
|
5
|
+
return withDrizzleWork(database, withDrizzleSqliteWork(database, effect));
|
|
6
|
+
}
|
|
7
|
+
/** Reads the established native brand; auth never acquires another database owner. */
|
|
8
|
+
export function databaseServiceOf(activation) {
|
|
9
|
+
const service = Reflect.get(activation, Symbol.for("relkit.drizzle.service"));
|
|
10
|
+
if (service === null || typeof service !== "object")
|
|
11
|
+
throw new TypeError("Drizzle activation is missing its service");
|
|
12
|
+
return service;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=auth-database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-database.js","sourceRoot":"","sources":["../src/auth-database.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIpG,yFAAyF;AACzF,MAAM,UAAU,YAAY,CAAU,QAAsB,EAAE,MAA8B;IAC1F,OAAO,eAAe,CAAC,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,iBAAiB,CAAC,UAAwB;IACxD,MAAM,OAAO,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACvF,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QACjD,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACnE,OAAO,OAAiD,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Projects native SDK callables through the existing admitted auth service. */
|
|
2
|
+
import type { Auth } from "better-auth";
|
|
3
|
+
import type { BetterAuthRuntime, BetterAuthServiceOptions } from "./auth.types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Routes native callables through admission while preserving native properties.
|
|
6
|
+
* @param owner - Managed owner reused by each Promise boundary.
|
|
7
|
+
* @param native - SDK instance with initialization complete.
|
|
8
|
+
* @returns Stable proxy retaining native object and function metadata.
|
|
9
|
+
* @remarks Handler, fetch and API calls are admitted. The native $context is
|
|
10
|
+
* retained as an advanced SDK view; direct adapter access requires its DB owner's
|
|
11
|
+
* lifetime rather than establishing a new admission lease.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare function authNativeAdapter(owner: BetterAuthRuntime<BetterAuthServiceOptions>["activation"] & {}, native: Auth<any>): Auth<any>;
|
|
15
|
+
//# sourceMappingURL=auth-native-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-native-adapter.d.ts","sourceRoot":"","sources":["../src/auth-native-adapter.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAIxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEnF;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,CAAC,wBAAwB,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,EACrE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAChB,IAAI,CAAC,GAAG,CAAC,CAwCX"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { AuthService } from "./auth.service.js";
|
|
3
|
+
import { runAuthPromise } from "./auth-run.js";
|
|
4
|
+
/**
|
|
5
|
+
* Routes native callables through admission while preserving native properties.
|
|
6
|
+
* @param owner - Managed owner reused by each Promise boundary.
|
|
7
|
+
* @param native - SDK instance with initialization complete.
|
|
8
|
+
* @returns Stable proxy retaining native object and function metadata.
|
|
9
|
+
* @remarks Handler, fetch and API calls are admitted. The native $context is
|
|
10
|
+
* retained as an advanced SDK view; direct adapter access requires its DB owner's
|
|
11
|
+
* lifetime rather than establishing a new admission lease.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export function authNativeAdapter(owner, native) {
|
|
15
|
+
const cached = nativeAdapters.get(owner);
|
|
16
|
+
if (cached !== undefined)
|
|
17
|
+
return cached;
|
|
18
|
+
const methods = new Map();
|
|
19
|
+
const handler = (request) => runAuthPromise(owner, Effect.flatMap(AuthService, (auth) => auth.handler(request)), { signal: request.signal }, "auth.handler");
|
|
20
|
+
const api = new Proxy(native.api, {
|
|
21
|
+
get(target, key, receiver) {
|
|
22
|
+
const value = Reflect.get(target, key, receiver);
|
|
23
|
+
if (typeof value !== "function" || typeof key !== "string")
|
|
24
|
+
return value;
|
|
25
|
+
if (!methods.has(key))
|
|
26
|
+
methods.set(key, new Proxy(value, {
|
|
27
|
+
apply(_method, _receiver, args) {
|
|
28
|
+
return runAuthPromise(owner, Effect.flatMap(AuthService, (auth) => auth.api(key, args)), undefined, key === "getSession" ? "auth.session" : "auth.api");
|
|
29
|
+
},
|
|
30
|
+
}));
|
|
31
|
+
return methods.get(key);
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
const adapter = new Proxy(native, {
|
|
35
|
+
get(target, key, receiver) {
|
|
36
|
+
if (key === "handler" || key === "fetch")
|
|
37
|
+
return handler;
|
|
38
|
+
return key === "api" ? api : Reflect.get(target, key, receiver);
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
nativeAdapters.set(owner, adapter);
|
|
42
|
+
return adapter;
|
|
43
|
+
}
|
|
44
|
+
// Owners retain native auth already; this weak projection cache adds no lifetime.
|
|
45
|
+
const nativeAdapters = new WeakMap();
|
|
46
|
+
//# sourceMappingURL=auth-native-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-native-adapter.js","sourceRoot":"","sources":["../src/auth-native-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAqE,EACrE,MAAiB;IAEjB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAChD,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,EAAE,CACnC,cAAc,CACZ,KAAK,EACL,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAC5D,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAC1B,cAAc,CACf,CAAC;IACJ,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;QAChC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ;YACvB,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC1D,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACzE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBACnB,OAAO,CAAC,GAAG,CACT,GAAG,EACH,IAAI,KAAK,CAAC,KAAK,EAAE;oBACf,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI;wBAC5B,OAAO,cAAc,CACnB,KAAK,EACL,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAC1D,SAAS,EACT,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CACnD,CAAC;oBACJ,CAAC;iBACF,CAAC,CACH,CAAC;YACJ,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;QAChC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ;YACvB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO;gBAAE,OAAO,OAAO,CAAC;YACzD,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC;KACF,CAAC,CAAC;IACH,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kFAAkF;AAClF,MAAM,cAAc,GAAG,IAAI,OAAO,EAAqB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Effect, type ManagedRuntime } from "effect";
|
|
2
|
+
/**
|
|
3
|
+
* Runs the Promise boundary, unwrapping expected auth failures.
|
|
4
|
+
* @typeParam A - Successful operation result.
|
|
5
|
+
* @typeParam E - Effect failure channel.
|
|
6
|
+
* @typeParam R - Runtime's provided services.
|
|
7
|
+
* @typeParam ER - Runtime acquisition failures.
|
|
8
|
+
* @param runtime - Managed auth owner.
|
|
9
|
+
* @param effect - Lazy operation preserving defects and interruption.
|
|
10
|
+
* @param options - Request cancellation forwarded to the runner.
|
|
11
|
+
* @param operation - Bounded invocation label; the trace captures no SDK result.
|
|
12
|
+
* @returns Promise preserving native exception identity and mixed causes.
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export declare function runAuthPromise<A, E, R, ER>(runtime: ManagedRuntime.ManagedRuntime<R, ER>, effect: Effect.Effect<A, E, R>, options?: Effect.RunOptions, operation?: string): Promise<A>;
|
|
16
|
+
//# sourceMappingURL=auth-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-run.d.ts","sourceRoot":"","sources":["../src/auth-run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAS,MAAM,EAAQ,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGlE;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACxC,OAAO,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,EAC3B,SAAS,SAAa,GACrB,OAAO,CAAC,CAAC,CAAC,CAYZ"}
|
package/dist/auth-run.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Preserves auth failures, mixed causes and native leases at the Promise boundary. */
|
|
2
|
+
import { inheritNativeLeases, runSpecializedTrace, squashDrizzleCause, } from "@relkit/drizzle/internal";
|
|
3
|
+
import { Cause, Effect, Exit } from "effect";
|
|
4
|
+
import { AuthFailure } from "./auth.errors.js";
|
|
5
|
+
/**
|
|
6
|
+
* Runs the Promise boundary, unwrapping expected auth failures.
|
|
7
|
+
* @typeParam A - Successful operation result.
|
|
8
|
+
* @typeParam E - Effect failure channel.
|
|
9
|
+
* @typeParam R - Runtime's provided services.
|
|
10
|
+
* @typeParam ER - Runtime acquisition failures.
|
|
11
|
+
* @param runtime - Managed auth owner.
|
|
12
|
+
* @param effect - Lazy operation preserving defects and interruption.
|
|
13
|
+
* @param options - Request cancellation forwarded to the runner.
|
|
14
|
+
* @param operation - Bounded invocation label; the trace captures no SDK result.
|
|
15
|
+
* @returns Promise preserving native exception identity and mixed causes.
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export function runAuthPromise(runtime, effect, options, operation = "auth.api") {
|
|
19
|
+
const admittedEffect = inheritNativeLeases(effect);
|
|
20
|
+
return runSpecializedTrace(operation, async () => {
|
|
21
|
+
const exit = await runtime.runPromiseExit(admittedEffect, options);
|
|
22
|
+
if (Exit.isSuccess(exit))
|
|
23
|
+
return exit.value;
|
|
24
|
+
// Unwrap auth causes before the shared renderer retains every cleanup/interrupt reason.
|
|
25
|
+
throw squashDrizzleCause(Cause.map(exit.cause, (failure) => failure instanceof AuthFailure ? failure.cause : failure));
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=auth-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-run.js","sourceRoot":"","sources":["../src/auth-run.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAuB,MAAM,QAAQ,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA6C,EAC7C,MAA8B,EAC9B,OAA2B,EAC3B,SAAS,GAAG,UAAU;IAEtB,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,mBAAmB,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAC5C,wFAAwF;QACxF,MAAM,kBAAkB,CACtB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAChC,OAAO,YAAY,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CACzD,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/auth.factory.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare class AuthFactory extends AuthFactory_base {
|
|
|
14
14
|
* @example
|
|
15
15
|
* ```ts
|
|
16
16
|
* import { Layer } from "effect";
|
|
17
|
-
* import { authFactoryLiveLayer, authServiceLayer, type AuthConfiguration } from "@relkit/better-auth";
|
|
17
|
+
* import { authFactoryLiveLayer, authServiceLayer, type AuthConfiguration } from "@relkit/better-auth/drizzle";
|
|
18
18
|
* function createAuthLayer(configuration: AuthConfiguration) {
|
|
19
19
|
* return authServiceLayer(configuration).pipe(Layer.provide(authFactoryLiveLayer));
|
|
20
20
|
* }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.factory.d.ts","sourceRoot":"","sources":["../src/auth.factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.factory.d.ts","sourceRoot":"","sources":["../src/auth.factory.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;;AAG5D;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,gBAEhC;CAAG;AAEJ;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,wCAmBhC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,oBAAoB,CAO5F"}
|
package/dist/auth.factory.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
/** Constructs selected native Better Auth after metadata preflight at the SDK boundary.
|
|
2
|
+
* Factory failures retain their native cause and redact secret-bearing arguments from operation telemetry.
|
|
3
|
+
*/
|
|
2
4
|
import { nativeCall, observeSpecializedOperation, redactSpecializedTrace, } from "@relkit/drizzle/internal";
|
|
3
5
|
import { Context, Effect, Layer } from "effect";
|
|
4
6
|
import { AuthFailure } from "./auth.errors.js";
|
|
7
|
+
import { checkNativeAuthDependencies } from "./dependencies.js";
|
|
5
8
|
/**
|
|
6
9
|
* Replaceable native SDK factory; auth service acquisition owns async initialization.
|
|
7
10
|
* @remarks This low-level construction dependency returns native callables. Use
|
|
@@ -15,14 +18,19 @@ export class AuthFactory extends Context.Service()("relkit/AuthFactory") {
|
|
|
15
18
|
* @example
|
|
16
19
|
* ```ts
|
|
17
20
|
* import { Layer } from "effect";
|
|
18
|
-
* import { authFactoryLiveLayer, authServiceLayer, type AuthConfiguration } from "@relkit/better-auth";
|
|
21
|
+
* import { authFactoryLiveLayer, authServiceLayer, type AuthConfiguration } from "@relkit/better-auth/drizzle";
|
|
19
22
|
* function createAuthLayer(configuration: AuthConfiguration) {
|
|
20
23
|
* return authServiceLayer(configuration).pipe(Layer.provide(authFactoryLiveLayer));
|
|
21
24
|
* }
|
|
22
25
|
* ```
|
|
23
26
|
*/
|
|
24
27
|
export const authFactoryLiveLayer = Layer.effect(AuthFactory, Effect.gen(function* () {
|
|
25
|
-
return makeAuthFactory((options) =>
|
|
28
|
+
return makeAuthFactory((options) => checkNativeAuthDependencies().pipe(Effect.flatMap(() => nativeCall("auth.factory", async () => {
|
|
29
|
+
const { betterAuth } = await import("better-auth");
|
|
30
|
+
return betterAuth(options);
|
|
31
|
+
})), Effect.mapError((failure) => failure instanceof AuthFailure
|
|
32
|
+
? failure
|
|
33
|
+
: new AuthFailure({ operation: "auth.factory", cause: failure.cause }))));
|
|
26
34
|
}));
|
|
27
35
|
/**
|
|
28
36
|
* Gives substituted factory implementations the same observable operation contract.
|
package/dist/auth.factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.factory.js","sourceRoot":"","sources":["../src/auth.factory.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auth.factory.js","sourceRoot":"","sources":["../src/auth.factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,UAAU,EACV,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAAqC,CACnF,oBAAoB,CACrB;CAAG;AAEJ;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAC9C,WAAW,EACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,OAAO,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE,CACjC,2BAA2B,EAAE,CAAC,IAAI,CAChC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAClB,UAAU,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACnD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CACH,EACD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAC1B,OAAO,YAAY,WAAW;QAC5B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,IAAI,WAAW,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CACzE,CACF,CACF,CAAC;AACJ,CAAC,CAAC,CACH,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsC;IACpE,MAAM,WAAW,GAAmC,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAC9F,2BAA2B,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAC7D,CAAC;IACF,OAAO,WAAW,CAAC,EAAE,CAAC;QACpB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,sBAAsB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;KAClE,CAAC,CAAC;AACL,CAAC"}
|
package/dist/auth.service.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare class AuthService extends AuthService_base {
|
|
|
19
19
|
* @example
|
|
20
20
|
* ```ts
|
|
21
21
|
* import { Effect } from "effect";
|
|
22
|
-
* import { AuthService, authLiveLayer, type AuthConfiguration } from "@relkit/better-auth";
|
|
22
|
+
* import { AuthService, authLiveLayer, type AuthConfiguration } from "@relkit/better-auth/drizzle";
|
|
23
23
|
* async function handleAuth(configuration: AuthConfiguration): Promise<Response> {
|
|
24
24
|
* const program = Effect.flatMap(AuthService, (auth) => auth.handler(new Request("http://localhost/api/auth/session")));
|
|
25
25
|
* return Effect.runPromise(program.pipe(Effect.provide(authLiveLayer(configuration))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../src/auth.service.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAwB,MAAM,mBAAmB,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAgB,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;;
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../src/auth.service.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAwB,MAAM,mBAAmB,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAgB,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;;AAI7F;;;GAGG;AACH,qBAAa,WAAY,SAAQ,gBAEhC;CAAG;AAEJ;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,iBAAiB,0GAQhE;AA2ED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAKrE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,iBAAiB,oGAE7D"}
|
package/dist/auth.service.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/** Owns admitted native authentication acquisition, handler calls and API dispatch.
|
|
2
|
+
* Database leases cover uncancellable SDK settlement; the database owner retains release authority.
|
|
3
|
+
*/
|
|
4
|
+
import { drizzleRuntimeOf, nativeCall, observeSpecializedOperation, redactSpecializedTrace, } from "@relkit/drizzle/internal";
|
|
3
5
|
import { Context, Effect, Layer, Schema } from "effect";
|
|
4
6
|
import { AuthFailure } from "./auth.errors.js";
|
|
5
7
|
import { AuthFactory, authFactoryLiveLayer } from "./auth.factory.js";
|
|
6
8
|
import { AuthBasePath } from "./auth.schemas.js";
|
|
9
|
+
import { checkNativeAuthDependencies } from "./dependencies.js";
|
|
10
|
+
import { databaseServiceOf, withAuthWork } from "./auth-database.js";
|
|
7
11
|
/**
|
|
8
12
|
* Native auth service; each method admits DB work and retains SDK completion.
|
|
9
13
|
* @see {@link authServiceLayer} for ownership and a checked composition example.
|
|
@@ -19,7 +23,7 @@ export class AuthService extends Context.Service()("relkit/AuthService") {
|
|
|
19
23
|
* @example
|
|
20
24
|
* ```ts
|
|
21
25
|
* import { Effect } from "effect";
|
|
22
|
-
* import { AuthService, authLiveLayer, type AuthConfiguration } from "@relkit/better-auth";
|
|
26
|
+
* import { AuthService, authLiveLayer, type AuthConfiguration } from "@relkit/better-auth/drizzle";
|
|
23
27
|
* async function handleAuth(configuration: AuthConfiguration): Promise<Response> {
|
|
24
28
|
* const program = Effect.flatMap(AuthService, (auth) => auth.handler(new Request("http://localhost/api/auth/session")));
|
|
25
29
|
* return Effect.runPromise(program.pipe(Effect.provide(authLiveLayer(configuration))));
|
|
@@ -27,7 +31,11 @@ export class AuthService extends Context.Service()("relkit/AuthService") {
|
|
|
27
31
|
* ```
|
|
28
32
|
*/
|
|
29
33
|
export function authServiceLayer(configuration) {
|
|
30
|
-
return Layer.effect(AuthService, observeSpecializedOperation("auth.acquire", withAuthWork(configuration.database, Effect.
|
|
34
|
+
return Layer.effect(AuthService, observeSpecializedOperation("auth.acquire", withAuthWork(configuration.database, acquireAuth(configuration).pipe(Effect.uninterruptible))));
|
|
35
|
+
}
|
|
36
|
+
/** Awaits native plugin initialization before releasing the borrowed database admission. */
|
|
37
|
+
function acquireAuth(configuration) {
|
|
38
|
+
return Effect.gen(function* () {
|
|
31
39
|
yield* Schema.decodeUnknownEffect(AuthBasePath)(configuration.basePath).pipe(Effect.mapError(() => new AuthFailure({
|
|
32
40
|
operation: "auth.acquire",
|
|
33
41
|
cause: new TypeError(`Invalid Better Auth base path "${configuration.basePath}"`),
|
|
@@ -35,6 +43,8 @@ export function authServiceLayer(configuration) {
|
|
|
35
43
|
const declaration = databaseServiceOf(configuration.database);
|
|
36
44
|
const database = drizzleRuntimeOf(declaration);
|
|
37
45
|
const factory = yield* AuthFactory;
|
|
46
|
+
yield* checkNativeAuthDependencies();
|
|
47
|
+
const { drizzleAdapter } = yield* nativePromise("auth.acquire", () => import("better-auth/adapters/drizzle"));
|
|
38
48
|
const { drizzle: adapterOptions, ...options } = configuration.options;
|
|
39
49
|
const native = yield* factory.create({
|
|
40
50
|
...options,
|
|
@@ -47,21 +57,25 @@ export function authServiceLayer(configuration) {
|
|
|
47
57
|
});
|
|
48
58
|
// Better Auth starts async plugin initialization eagerly; retain the borrow until it settles.
|
|
49
59
|
yield* nativePromise("auth.acquire", () => native.$context);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
return createService(native, configuration.database);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/** Applies the same admission and redaction boundary to both native call surfaces. */
|
|
64
|
+
function createService(native, database) {
|
|
65
|
+
const service = AuthService.of({
|
|
66
|
+
handler: Effect.fn("AuthService.handler")((request) => observeSpecializedOperation("auth.handler", withAuthWork(database, nativePromise("auth.handler", () => native.handler(request))))),
|
|
67
|
+
api: Effect.fn("AuthService.api")((method, args) => {
|
|
68
|
+
const operation = method === "getSession" ? "auth.session" : "auth.api";
|
|
69
|
+
return observeSpecializedOperation(operation, withAuthWork(database, nativePromise(operation, () => Reflect.apply(Reflect.get(native.api, method), native.api, args))));
|
|
70
|
+
}),
|
|
71
|
+
});
|
|
72
|
+
// The adapter must enclose Effect.fn's outer named span as well as its body.
|
|
73
|
+
const protectedService = AuthService.of({
|
|
74
|
+
handler: (request) => redactSpecializedTrace(service.handler(request)),
|
|
75
|
+
api: (method, args) => redactSpecializedTrace(service.api(method, args)),
|
|
76
|
+
});
|
|
77
|
+
nativeInstances.set(protectedService, native);
|
|
78
|
+
return protectedService;
|
|
65
79
|
}
|
|
66
80
|
// Raw SDK callables remain private; the public service only exposes admitted effects.
|
|
67
81
|
const nativeInstances = new WeakMap();
|
|
@@ -97,29 +111,4 @@ export function authLiveLayer(configuration) {
|
|
|
97
111
|
function nativePromise(operation, execute) {
|
|
98
112
|
return nativeCall(operation, execute).pipe(Effect.mapError((failure) => new AuthFailure({ operation, cause: failure.cause })));
|
|
99
113
|
}
|
|
100
|
-
/**
|
|
101
|
-
* Borrows the database owner and its physical SQLite execution permit together.
|
|
102
|
-
* @typeParam A - SDK success value.
|
|
103
|
-
* @typeParam E - SDK failure channel.
|
|
104
|
-
* @typeParam R - Caller requirements retained by the borrowed work.
|
|
105
|
-
* @param database - Active owner supplying physical client identity and lifetime.
|
|
106
|
-
* @param effect - SDK work that waits for actual native completion.
|
|
107
|
-
* @returns Lazy admitted work; permit waiting stays interruptible and hooks can reenter.
|
|
108
|
-
*/
|
|
109
|
-
function withAuthWork(database, effect) {
|
|
110
|
-
return withDrizzleWork(database, withDrizzleSqliteWork(database, effect));
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Reads the native database declaration from the activation's established brand.
|
|
114
|
-
* @param activation - Borrowed active database.
|
|
115
|
-
* @returns Its declaration; invalid runtime values fail with the original TypeError.
|
|
116
|
-
* @throws TypeError When an activation lacks its declaration brand.
|
|
117
|
-
*/
|
|
118
|
-
function databaseServiceOf(activation) {
|
|
119
|
-
const service = Reflect.get(activation, Symbol.for("relkit.drizzle.service"));
|
|
120
|
-
if (service === null || typeof service !== "object")
|
|
121
|
-
throw new TypeError("Drizzle activation is missing its service");
|
|
122
|
-
// The activation brand is the existing native contract, not a serialized SDK schema.
|
|
123
|
-
return service;
|
|
124
|
-
}
|
|
125
114
|
//# sourceMappingURL=auth.service.js.map
|
package/dist/auth.service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../src/auth.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,2BAA2B,EAC3B,sBAAsB,
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../src/auth.service.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.types.d.ts
CHANGED
|
@@ -1,46 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
/** Describes the selected Drizzle authentication bridge using actual native SDK contracts.
|
|
2
|
+
* Portable lazy declarations remain in declaration.types so backend root consumers avoid this adapter closure.
|
|
3
|
+
*/
|
|
2
4
|
import type { DrizzleActivation, DrizzleServiceDescriptor, DrizzleFailure } from "@relkit/drizzle/internal";
|
|
3
|
-
import type { RawHttpHandler } from "@relkit/routes";
|
|
4
5
|
import type { Auth, BetterAuthOptions } from "better-auth";
|
|
5
6
|
import type { DrizzleAdapterConfig } from "better-auth/adapters/drizzle";
|
|
6
7
|
import type { Effect, ManagedRuntime } from "effect";
|
|
7
8
|
import type { AuthFailure } from "./auth.errors.js";
|
|
8
9
|
import type { AuthService } from "./auth.service.js";
|
|
9
|
-
import {
|
|
10
|
+
import type { BetterAuthServiceOptions as DeclarationOptions } from "./declaration.types.js";
|
|
11
|
+
export type { BetterAuthHandler, BetterAuthRegistration, BetterAuthServiceDescriptor, InferBetterAuthSession, } from "./declaration.types.js";
|
|
10
12
|
/** Native options; RELKIT supplies database and the route-derived base path. */
|
|
11
|
-
export type BetterAuthServiceOptions =
|
|
12
|
-
readonly database?: never;
|
|
13
|
-
readonly basePath?: never;
|
|
13
|
+
export type BetterAuthServiceOptions = DeclarationOptions & {
|
|
14
14
|
readonly drizzle?: Omit<DrizzleAdapterConfig, "provider">;
|
|
15
15
|
};
|
|
16
|
-
/** Frozen handler registration used by route discovery without acquisition. */
|
|
17
|
-
export interface BetterAuthRegistration {
|
|
18
|
-
readonly kind: "better-auth";
|
|
19
|
-
readonly service: BetterAuthServiceDescriptor<any>;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Route handler carrying native session inference without a live SDK object.
|
|
23
|
-
* @typeParam Session - Native session and user result inferred from auth options.
|
|
24
|
-
*/
|
|
25
|
-
export type BetterAuthHandler<Session = unknown> = RawHttpHandler & {
|
|
26
|
-
readonly [BETTER_AUTH_HANDLER]: BetterAuthRegistration;
|
|
27
|
-
readonly __session?: Session;
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* Extracts native session and user types from an authored auth handler.
|
|
31
|
-
* @typeParam Handler - Branded handler whose phantom session inference is read.
|
|
32
|
-
*/
|
|
33
|
-
export type InferBetterAuthSession<Handler> = Handler extends BetterAuthHandler<infer Session> ? Session : never;
|
|
34
|
-
/**
|
|
35
|
-
* Lazy declaration whose handler identity survives activation and isolation.
|
|
36
|
-
* @typeParam Options - Native auth configuration retaining plugin/session inference.
|
|
37
|
-
*/
|
|
38
|
-
export interface BetterAuthServiceDescriptor<Options extends BetterAuthServiceOptions> extends ReturnType<typeof createDescriptorBase<"service", string>> {
|
|
39
|
-
readonly capability: {
|
|
40
|
-
readonly kind: "better-auth";
|
|
41
|
-
};
|
|
42
|
-
readonly handler: BetterAuthHandler<Auth<Options>["$Infer"]["Session"]>;
|
|
43
|
-
}
|
|
44
16
|
/** Borrowed database; its Drizzle owner remains solely responsible for disposal. */
|
|
45
17
|
export type AuthDatabase = DrizzleActivation<DrizzleServiceDescriptor<any, any, any, any>>;
|
|
46
18
|
/** Runtime dependencies captured once when constructing a native auth service. */
|
|
@@ -81,5 +53,6 @@ export interface AuthServiceInterface {
|
|
|
81
53
|
export interface BetterAuthRuntime<Options extends BetterAuthServiceOptions> {
|
|
82
54
|
readonly options: Options;
|
|
83
55
|
activation: ManagedRuntime.ManagedRuntime<AuthService, AuthFailure | DrizzleFailure> | undefined;
|
|
56
|
+
handle: ((request: Request) => Promise<Response>) | undefined;
|
|
84
57
|
}
|
|
85
58
|
//# sourceMappingURL=auth.types.d.ts.map
|
package/dist/auth.types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.types.d.ts","sourceRoot":"","sources":["../src/auth.types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auth.types.d.ts","sourceRoot":"","sources":["../src/auth.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,iBAAiB,EACjB,wBAAwB,EACxB,cAAc,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAEhC,gFAAgF;AAChF,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,GAAG;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;CAC3D,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE3F,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,uFAAuF;AACvF,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;CACxF;AAED,uFAAuF;AACvF,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,GAAG,cAAc,CAAC,CAAC;IAE9F;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,CACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,OAAO,EAAE,KACrB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,CAAC;CAC3D;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,wBAAwB;IACzE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,cAAc,CAAC,GAAG,SAAS,CAAC;IACjG,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC;CAC/D"}
|
package/dist/auth.types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=auth.types.js.map
|
package/dist/auth.types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.types.js","sourceRoot":"","sources":["../src/auth.types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.types.js","sourceRoot":"","sources":["../src/auth.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Lazy authentication declarations independent of a database adapter or browser. */
|
|
2
|
+
import type { createDescriptorBase } from "@relkit/contracts";
|
|
3
|
+
import type { RawHttpHandler } from "@relkit/routes";
|
|
4
|
+
import type { Auth, BetterAuthOptions } from "better-auth";
|
|
5
|
+
import { BETTER_AUTH_HANDLER } from "./symbols.js";
|
|
6
|
+
/** Native options; activation supplies the database and route-derived base path. */
|
|
7
|
+
export type BetterAuthServiceOptions = Omit<BetterAuthOptions, "database" | "basePath"> & {
|
|
8
|
+
readonly database?: never;
|
|
9
|
+
readonly basePath?: never;
|
|
10
|
+
};
|
|
11
|
+
/** Frozen registration used by route discovery without acquiring native auth. */
|
|
12
|
+
export interface BetterAuthRegistration {
|
|
13
|
+
readonly kind: "better-auth";
|
|
14
|
+
readonly service: BetterAuthServiceDescriptor<any>;
|
|
15
|
+
}
|
|
16
|
+
/** Native route handler retaining inferred session and user types. */
|
|
17
|
+
export type BetterAuthHandler<Session = unknown> = RawHttpHandler & {
|
|
18
|
+
readonly [BETTER_AUTH_HANDLER]: BetterAuthRegistration;
|
|
19
|
+
readonly __session?: Session;
|
|
20
|
+
};
|
|
21
|
+
/** Projects the session inferred by a lazy authentication handler. */
|
|
22
|
+
export type InferBetterAuthSession<Handler> = Handler extends BetterAuthHandler<infer Session> ? Session : never;
|
|
23
|
+
/** Lazy authoring declaration whose identity survives isolated activation. */
|
|
24
|
+
export interface BetterAuthServiceDescriptor<Options extends BetterAuthServiceOptions> extends ReturnType<typeof createDescriptorBase<"service", string>> {
|
|
25
|
+
readonly capability: {
|
|
26
|
+
readonly kind: "better-auth";
|
|
27
|
+
};
|
|
28
|
+
readonly handler: BetterAuthHandler<Auth<Options>["$Infer"]["Session"]>;
|
|
29
|
+
}
|
|
30
|
+
/** Database-independent state populated by the explicitly selected server bridge. */
|
|
31
|
+
export interface BetterAuthDeclarationRuntime<Options extends BetterAuthServiceOptions> {
|
|
32
|
+
readonly options: Options;
|
|
33
|
+
activation: object | undefined;
|
|
34
|
+
handle: ((request: Request) => Promise<Response>) | undefined;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=declaration.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declaration.types.d.ts","sourceRoot":"","sources":["../src/declaration.types.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,oFAAoF;AACpF,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;IACxF,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;CAC3B,CAAC;AAEF,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC,GAAG,CAAC,CAAC;CACpD;AAED,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,CAAC,OAAO,GAAG,OAAO,IAAI,cAAc,GAAG;IAClE,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,sBAAsB,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,CAAC,OAAO,IACxC,OAAO,SAAS,iBAAiB,CAAC,MAAM,OAAO,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;AAErE,8EAA8E;AAC9E,MAAM,WAAW,2BAA2B,CAC1C,OAAO,SAAS,wBAAwB,CACxC,SAAQ,UAAU,CAAC,OAAO,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClE,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;KAAE,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;CACzE;AAED,qFAAqF;AACrF,MAAM,WAAW,4BAA4B,CAAC,OAAO,SAAS,wBAAwB;IACpF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC;CAC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declaration.types.js","sourceRoot":"","sources":["../src/declaration.types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { AuthFailure } from "./auth.errors.js";
|
|
3
|
+
/** Resolves peers from this installed adapter, independently of the invoking CLI cache. */
|
|
4
|
+
export declare function checkNativeAuthDependencies(): Effect.Effect<void, AuthFailure, never>;
|
|
5
|
+
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,2FAA2F;AAC3F,wBAAgB,2BAA2B,4CAc1C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Checks selected native authentication requirements without evaluating the SDK. */
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { SelectedDependencies, SelectedDependenciesLive, } from "@relkit/provider/internal/dependencies";
|
|
4
|
+
import { Effect } from "effect";
|
|
5
|
+
import { AuthFailure } from "./auth.errors.js";
|
|
6
|
+
/** Resolves peers from this installed adapter, independently of the invoking CLI cache. */
|
|
7
|
+
export function checkNativeAuthDependencies() {
|
|
8
|
+
return Effect.flatMap(SelectedDependencies, (checker) => checker.check({
|
|
9
|
+
adapter: "@relkit/better-auth",
|
|
10
|
+
adapterRoot: fileURLToPath(new URL("../", import.meta.url)),
|
|
11
|
+
projectRoot: process.cwd(),
|
|
12
|
+
capabilities: ["better-auth"],
|
|
13
|
+
phase: "runtime",
|
|
14
|
+
})).pipe(Effect.provide(SelectedDependenciesLive), Effect.mapError((cause) => new AuthFailure({ operation: "auth.acquire", cause })), Effect.asVoid);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,2FAA2F;AAC3F,MAAM,UAAU,2BAA2B;IACzC,OAAO,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE,CACtD,OAAO,CAAC,KAAK,CAAC;QACZ,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3D,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE;QAC1B,YAAY,EAAE,CAAC,aAAa,CAAC;QAC7B,KAAK,EAAE,SAAS;KACjB,CAAC,CACH,CAAC,IAAI,CACJ,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,EACxC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,EACjF,MAAM,CAAC,MAAM,CACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Native Better Auth borrowing the selected Drizzle owner's lifetime and admission. */
|
|
2
|
+
export { defineBetterAuthService, BETTER_AUTH_HANDLER } from "./index.js";
|
|
3
|
+
export { activateBetterAuthService } from "./activation.js";
|
|
4
|
+
export { generateBetterAuthOpenApi } from "./openapi.js";
|
|
5
|
+
export { AuthFailure } from "./auth.errors.js";
|
|
6
|
+
export { AuthFactory, authFactoryLiveLayer } from "./auth.factory.js";
|
|
7
|
+
export { AuthService, authServiceLayer, authLiveLayer } from "./auth.service.js";
|
|
8
|
+
export type { BetterAuthActivationOptions } from "./activation.types.js";
|
|
9
|
+
export type { BetterAuthServiceOptions, BetterAuthRegistration, BetterAuthHandler, InferBetterAuthSession, BetterAuthServiceDescriptor, AuthConfiguration, AuthServiceInterface, AuthFactoryInterface, } from "./auth.types.js";
|
|
10
|
+
//# sourceMappingURL=drizzle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../src/drizzle.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjF,YAAY,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACzE,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
|
package/dist/drizzle.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Native Better Auth borrowing the selected Drizzle owner's lifetime and admission. */
|
|
2
|
+
export { defineBetterAuthService, BETTER_AUTH_HANDLER } from "./index.js";
|
|
3
|
+
export { activateBetterAuthService } from "./activation.js";
|
|
4
|
+
export { generateBetterAuthOpenApi } from "./openapi.js";
|
|
5
|
+
export { AuthFailure } from "./auth.errors.js";
|
|
6
|
+
export { AuthFactory, authFactoryLiveLayer } from "./auth.factory.js";
|
|
7
|
+
export { AuthService, authServiceLayer, authLiveLayer } from "./auth.service.js";
|
|
8
|
+
//# sourceMappingURL=drizzle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle.js","sourceRoot":"","sources":["../src/drizzle.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { BetterAuthServiceDescriptor, BetterAuthServiceOptions } from "./auth.types.js";
|
|
1
|
+
import type { BetterAuthServiceDescriptor, BetterAuthServiceOptions } from "./declaration.types.js";
|
|
3
2
|
import { BETTER_AUTH_HANDLER } from "./symbols.js";
|
|
4
|
-
export { activateBetterAuthService };
|
|
5
3
|
export { BETTER_AUTH_HANDLER };
|
|
6
|
-
export {
|
|
7
|
-
export { AuthFailure } from "./auth.errors.js";
|
|
8
|
-
export { AuthFactory, authFactoryLiveLayer } from "./auth.factory.js";
|
|
9
|
-
export { AuthService, authServiceLayer, authLiveLayer } from "./auth.service.js";
|
|
10
|
-
export type { BetterAuthActivationOptions } from "./activation.types.js";
|
|
11
|
-
export type { BetterAuthServiceOptions, BetterAuthRegistration, BetterAuthHandler, InferBetterAuthSession, BetterAuthServiceDescriptor, AuthConfiguration, AuthServiceInterface, AuthFactoryInterface, } from "./auth.types.js";
|
|
4
|
+
export type { BetterAuthServiceOptions, BetterAuthRegistration, BetterAuthHandler, InferBetterAuthSession, BetterAuthServiceDescriptor, } from "./declaration.types.js";
|
|
12
5
|
/**
|
|
13
6
|
* Defines lazy authentication using the application's Drizzle database.
|
|
14
7
|
* @typeParam Options - Native options retaining session and plugin inference.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAuB,MAAM,cAAc,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAC/B,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,CAAC,OAAO,SAAS,wBAAwB,EACpF,OAAO,EAAE,OAAO,GACf,2BAA2B,CAAC,OAAO,CAAC,CA4BtC"}
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
/** Lazy authoring
|
|
1
|
+
/** Lazy authentication authoring; select /drizzle for native database activation. @packageDocumentation */
|
|
2
2
|
import { createDescriptorBase } from "@relkit/contracts";
|
|
3
3
|
import { createUnboundIdentity } from "@relkit/invocation";
|
|
4
|
-
import { Effect } from "effect";
|
|
5
|
-
import { activateBetterAuthService, runAuthPromise } from "./activation.js";
|
|
6
|
-
import { AuthService } from "./auth.service.js";
|
|
7
4
|
import { BETTER_AUTH_HANDLER, BETTER_AUTH_RUNTIME } from "./symbols.js";
|
|
8
|
-
export { activateBetterAuthService };
|
|
9
5
|
export { BETTER_AUTH_HANDLER };
|
|
10
|
-
export { generateBetterAuthOpenApi } from "./openapi.js";
|
|
11
|
-
export { AuthFailure } from "./auth.errors.js";
|
|
12
|
-
export { AuthFactory, authFactoryLiveLayer } from "./auth.factory.js";
|
|
13
|
-
export { AuthService, authServiceLayer, authLiveLayer } from "./auth.service.js";
|
|
14
6
|
/**
|
|
15
7
|
* Defines lazy authentication using the application's Drizzle database.
|
|
16
8
|
* @typeParam Options - Native options retaining session and plugin inference.
|
|
@@ -39,12 +31,15 @@ export function defineBetterAuthService(options) {
|
|
|
39
31
|
throw new TypeError("Better Auth service database is provided by the Drizzle service");
|
|
40
32
|
if (Object.hasOwn(options, "basePath"))
|
|
41
33
|
throw new TypeError("Better Auth basePath is derived from its ALL route");
|
|
42
|
-
const runtime = {
|
|
34
|
+
const runtime = {
|
|
35
|
+
options,
|
|
36
|
+
activation: undefined,
|
|
37
|
+
handle: undefined,
|
|
38
|
+
};
|
|
43
39
|
const handler = (async (request) => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return runAuthPromise(owner, Effect.flatMap(AuthService, (auth) => auth.handler(request)), { signal: request.signal }, "auth.handler");
|
|
40
|
+
return runtime.handle === undefined
|
|
41
|
+
? new Response("Service Unavailable", { status: 503 })
|
|
42
|
+
: runtime.handle(request);
|
|
48
43
|
});
|
|
49
44
|
const descriptor = {
|
|
50
45
|
...createDescriptorBase("service", createUnboundIdentity()),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAQ3D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAS/B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAgB;IAEhB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3E,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,iEAAiE,CAAC,CAAC;IACzF,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;IAC5E,MAAM,OAAO,GAA0C;QACrD,OAAO;QACP,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,SAAS;KAClB,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,OAAgB,EAAE,EAAE;QAC1C,OAAO,OAAO,CAAC,MAAM,KAAK,SAAS;YACjC,CAAC,CAAC,IAAI,QAAQ,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAA0D,CAAC;IAC5D,MAAM,UAAU,GAAG;QACjB,GAAG,oBAAoB,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAC;QAC3D,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAsB,EAAE,CAAC;QAC3D,OAAO;KACR,CAAC;IACF,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB,EAAE;QAClD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;KACnE,CAAC,CAAC;IACH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAyC,CAAC;AAC3E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@relkit/better-auth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Better Auth integration for RELKIT routes.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -30,27 +30,88 @@
|
|
|
30
30
|
"./react": {
|
|
31
31
|
"types": "./dist/react.d.ts",
|
|
32
32
|
"import": "./dist/react.js"
|
|
33
|
+
},
|
|
34
|
+
"./drizzle": {
|
|
35
|
+
"types": "./dist/drizzle.d.ts",
|
|
36
|
+
"import": "./dist/drizzle.js"
|
|
33
37
|
}
|
|
34
38
|
},
|
|
35
39
|
"dependencies": {
|
|
36
|
-
"@relkit/client": "0.
|
|
37
|
-
"@relkit/contracts": "0.
|
|
38
|
-
"@relkit/
|
|
39
|
-
"@relkit/
|
|
40
|
-
"@relkit/routes": "0.7.
|
|
41
|
-
"better-auth": "1.7.1",
|
|
40
|
+
"@relkit/client": "0.8.0",
|
|
41
|
+
"@relkit/contracts": "0.8.0",
|
|
42
|
+
"@relkit/invocation": "0.7.11",
|
|
43
|
+
"@relkit/provider": "0.8.0",
|
|
44
|
+
"@relkit/routes": "0.7.11",
|
|
42
45
|
"effect": "4.0.1"
|
|
43
46
|
},
|
|
44
47
|
"peerDependencies": {
|
|
48
|
+
"@cloudflare/workers-types": "4.20250121.0",
|
|
49
|
+
"@relkit/drizzle": "0.8.0",
|
|
50
|
+
"better-auth": "1.7.1",
|
|
45
51
|
"react": ">=18.0.0"
|
|
46
52
|
},
|
|
53
|
+
"peerDependenciesMeta": {
|
|
54
|
+
"@cloudflare/workers-types": {
|
|
55
|
+
"optional": true
|
|
56
|
+
},
|
|
57
|
+
"@relkit/drizzle": {
|
|
58
|
+
"optional": true
|
|
59
|
+
},
|
|
60
|
+
"better-auth": {
|
|
61
|
+
"optional": true
|
|
62
|
+
},
|
|
63
|
+
"react": {
|
|
64
|
+
"optional": true
|
|
65
|
+
}
|
|
66
|
+
},
|
|
47
67
|
"devDependencies": {
|
|
68
|
+
"@cloudflare/workers-types": "4.20250121.0",
|
|
69
|
+
"@relkit/drizzle": "0.8.0",
|
|
70
|
+
"better-auth": "1.7.1",
|
|
48
71
|
"@effect/vitest": "4.0.1",
|
|
49
72
|
"@types/react": "19.2.18",
|
|
50
73
|
"drizzle-orm": "1.0.0-rc.5-169397b",
|
|
51
74
|
"react": "19.2.8",
|
|
52
75
|
"vitest": "5.0.1"
|
|
53
76
|
},
|
|
77
|
+
"relkit": {
|
|
78
|
+
"integration": {
|
|
79
|
+
"id": "better-auth",
|
|
80
|
+
"exports": {
|
|
81
|
+
"authoring": [
|
|
82
|
+
".",
|
|
83
|
+
"./drizzle"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"dependencies": [
|
|
87
|
+
{
|
|
88
|
+
"package": "better-auth",
|
|
89
|
+
"supportedRange": "1.7.1",
|
|
90
|
+
"installSection": "dependencies",
|
|
91
|
+
"capabilities": [
|
|
92
|
+
"better-auth"
|
|
93
|
+
],
|
|
94
|
+
"phases": [
|
|
95
|
+
"check",
|
|
96
|
+
"build",
|
|
97
|
+
"runtime"
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"package": "@cloudflare/workers-types",
|
|
102
|
+
"supportedRange": "4.20250121.0",
|
|
103
|
+
"installSection": "devDependencies",
|
|
104
|
+
"capabilities": [
|
|
105
|
+
"better-auth"
|
|
106
|
+
],
|
|
107
|
+
"phases": [
|
|
108
|
+
"check",
|
|
109
|
+
"build"
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
},
|
|
54
115
|
"scripts": {
|
|
55
116
|
"build": "tsc -b",
|
|
56
117
|
"check": "tsc -b --pretty false",
|