@shivaedev/identity 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +516 -1
- package/dist/identity.d.ts +36 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +12 -0
- package/dist/identity.js.map +1 -0
- package/dist/middleware.d.ts +21 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +20 -0
- package/dist/middleware.js.map +1 -0
- package/dist/permission.d.ts +11 -0
- package/dist/permission.d.ts.map +1 -0
- package/dist/permission.js +17 -0
- package/dist/permission.js.map +1 -0
- package/dist/server/adapters/betterAuthSessions.d.ts +14 -0
- package/dist/server/adapters/betterAuthSessions.d.ts.map +1 -0
- package/dist/server/adapters/betterAuthSessions.js +24 -0
- package/dist/server/adapters/betterAuthSessions.js.map +1 -0
- package/dist/server/better-auth/allowedAccounts.d.ts +10 -0
- package/dist/server/better-auth/allowedAccounts.d.ts.map +1 -0
- package/dist/server/better-auth/allowedAccounts.js +20 -0
- package/dist/server/better-auth/allowedAccounts.js.map +1 -0
- package/dist/server/better-auth/bearerSessions.d.ts +9 -0
- package/dist/server/better-auth/bearerSessions.d.ts.map +1 -0
- package/dist/server/better-auth/bearerSessions.js +38 -0
- package/dist/server/better-auth/bearerSessions.js.map +1 -0
- package/dist/server/better-auth/memoryRateLimit.d.ts +3 -0
- package/dist/server/better-auth/memoryRateLimit.d.ts.map +1 -0
- package/dist/server/better-auth/memoryRateLimit.js +46 -0
- package/dist/server/better-auth/memoryRateLimit.js.map +1 -0
- package/dist/server/better-auth/mount.d.ts +265 -0
- package/dist/server/better-auth/mount.d.ts.map +1 -0
- package/dist/server/better-auth/mount.js +111 -0
- package/dist/server/better-auth/mount.js.map +1 -0
- package/dist/server/better-auth/mountRoutes.d.ts +22 -0
- package/dist/server/better-auth/mountRoutes.d.ts.map +1 -0
- package/dist/server/better-auth/mountRoutes.js +54 -0
- package/dist/server/better-auth/mountRoutes.js.map +1 -0
- package/dist/server/better-auth/mountedSessions.d.ts +15 -0
- package/dist/server/better-auth/mountedSessions.d.ts.map +1 -0
- package/dist/server/better-auth/mountedSessions.js +12 -0
- package/dist/server/better-auth/mountedSessions.js.map +1 -0
- package/dist/server/better-auth/revokeUnadmitted.d.ts +10 -0
- package/dist/server/better-auth/revokeUnadmitted.d.ts.map +1 -0
- package/dist/server/better-auth/revokeUnadmitted.js +29 -0
- package/dist/server/better-auth/revokeUnadmitted.js.map +1 -0
- package/dist/server/better-auth/sessionPermissions.d.ts +3 -0
- package/dist/server/better-auth/sessionPermissions.d.ts.map +1 -0
- package/dist/server/better-auth/sessionPermissions.js +16 -0
- package/dist/server/better-auth/sessionPermissions.js.map +1 -0
- package/dist/server/better-auth/signInGate.d.ts +37 -0
- package/dist/server/better-auth/signInGate.d.ts.map +1 -0
- package/dist/server/better-auth/signInGate.js +38 -0
- package/dist/server/better-auth/signInGate.js.map +1 -0
- package/dist/server/better-auth/signInPolicy.d.ts +193 -0
- package/dist/server/better-auth/signInPolicy.d.ts.map +1 -0
- package/dist/server/better-auth/signInPolicy.js +61 -0
- package/dist/server/better-auth/signInPolicy.js.map +1 -0
- package/dist/server/better-auth/testDatabase.d.ts +19 -0
- package/dist/server/better-auth/testDatabase.d.ts.map +1 -0
- package/dist/server/better-auth/testDatabase.js +24 -0
- package/dist/server/better-auth/testDatabase.js.map +1 -0
- package/dist/server/better-auth/testing.d.ts +24 -0
- package/dist/server/better-auth/testing.d.ts.map +1 -0
- package/dist/server/better-auth/testing.js +21 -0
- package/dist/server/better-auth/testing.js.map +1 -0
- package/dist/server/better-auth/userProfiles.d.ts +14 -0
- package/dist/server/better-auth/userProfiles.d.ts.map +1 -0
- package/dist/server/better-auth/userProfiles.js +20 -0
- package/dist/server/better-auth/userProfiles.js.map +1 -0
- package/dist/server/commandChanges.d.ts +5 -0
- package/dist/server/commandChanges.d.ts.map +1 -0
- package/dist/server/commandChanges.js +44 -0
- package/dist/server/commandChanges.js.map +1 -0
- package/dist/server/local.d.ts +10 -0
- package/dist/server/local.d.ts.map +1 -0
- package/dist/server/local.js +93 -0
- package/dist/server/local.js.map +1 -0
- package/dist/server/origin.d.ts +15 -0
- package/dist/server/origin.d.ts.map +1 -0
- package/dist/server/origin.js +16 -0
- package/dist/server/origin.js.map +1 -0
- package/dist/server/permissions.d.ts +9 -0
- package/dist/server/permissions.d.ts.map +1 -0
- package/dist/server/permissions.js +31 -0
- package/dist/server/permissions.js.map +1 -0
- package/dist/server/proxyRanges.d.ts +4 -0
- package/dist/server/proxyRanges.d.ts.map +1 -0
- package/dist/server/proxyRanges.js +62 -0
- package/dist/server/proxyRanges.js.map +1 -0
- package/dist/server/resolveRole.d.ts +11 -0
- package/dist/server/resolveRole.d.ts.map +1 -0
- package/dist/server/resolveRole.js +6 -0
- package/dist/server/resolveRole.js.map +1 -0
- package/dist/server/revalidateStream.d.ts +6 -0
- package/dist/server/revalidateStream.d.ts.map +1 -0
- package/dist/server/revalidateStream.js +19 -0
- package/dist/server/revalidateStream.js.map +1 -0
- package/dist/server/session.d.ts +39 -0
- package/dist/server/session.d.ts.map +1 -0
- package/dist/server/session.js +73 -0
- package/dist/server/session.js.map +1 -0
- package/dist/server/sessionKeys.d.ts +10 -0
- package/dist/server/sessionKeys.d.ts.map +1 -0
- package/dist/server/sessionKeys.js +22 -0
- package/dist/server/sessionKeys.js.map +1 -0
- package/dist/server/sessionProfile.d.ts +3 -0
- package/dist/server/sessionProfile.d.ts.map +1 -0
- package/dist/server/sessionProfile.js +4 -0
- package/dist/server/sessionProfile.js.map +1 -0
- package/dist/server/tracing.d.ts +9 -0
- package/dist/server/tracing.d.ts.map +1 -0
- package/dist/server/tracing.js +51 -0
- package/dist/server/tracing.js.map +1 -0
- package/dist/server/transportHeaders.d.ts +4 -0
- package/dist/server/transportHeaders.d.ts.map +1 -0
- package/dist/server/transportHeaders.js +6 -0
- package/dist/server/transportHeaders.js.map +1 -0
- package/dist/server/trustedProxy.d.ts +7 -0
- package/dist/server/trustedProxy.d.ts.map +1 -0
- package/dist/server/trustedProxy.js +19 -0
- package/dist/server/trustedProxy.js.map +1 -0
- package/dist/server/trustedProxyRanges.d.ts +2 -0
- package/dist/server/trustedProxyRanges.d.ts.map +1 -0
- package/dist/server/trustedProxyRanges.js +5 -0
- package/dist/server/trustedProxyRanges.js.map +1 -0
- package/package.json +86 -4
- package/src/identity.ts +26 -0
- package/src/middleware.ts +38 -0
- package/src/permission.ts +24 -0
- package/src/server/adapters/betterAuthSessions.ts +44 -0
- package/src/server/better-auth/allowedAccounts.ts +29 -0
- package/src/server/better-auth/bearerSessions.ts +50 -0
- package/src/server/better-auth/memoryRateLimit.ts +56 -0
- package/src/server/better-auth/mount.ts +145 -0
- package/src/server/better-auth/mountRoutes.ts +75 -0
- package/src/server/better-auth/mountedSessions.ts +21 -0
- package/src/server/better-auth/revokeUnadmitted.ts +41 -0
- package/src/server/better-auth/sessionPermissions.ts +18 -0
- package/src/server/better-auth/signInGate.ts +77 -0
- package/src/server/better-auth/signInPolicy.ts +72 -0
- package/src/server/better-auth/testDatabase.ts +27 -0
- package/src/server/better-auth/testing.ts +35 -0
- package/src/server/better-auth/userProfiles.ts +37 -0
- package/src/server/commandChanges.ts +52 -0
- package/src/server/local.ts +100 -0
- package/src/server/origin.ts +26 -0
- package/src/server/permissions.ts +51 -0
- package/src/server/proxyRanges.ts +61 -0
- package/src/server/resolveRole.ts +7 -0
- package/src/server/revalidateStream.ts +25 -0
- package/src/server/session.ts +148 -0
- package/src/server/sessionKeys.ts +25 -0
- package/src/server/sessionProfile.ts +5 -0
- package/src/server/tracing.ts +68 -0
- package/src/server/transportHeaders.ts +8 -0
- package/src/server/trustedProxy.ts +22 -0
- package/src/server/trustedProxyRanges.ts +5 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { RpcMiddleware } from "effect/rpc";
|
|
3
|
+
import { AuthUnavailable, Forbidden, Unauthorized } from "@shivaedev/errors/taxonomy.ts";
|
|
4
|
+
import type { Identity, OptionalIdentity, RequestId, SessionUser, SessionUserWithProviderAccounts } from "./identity.ts";
|
|
5
|
+
declare const RequestTracing_base: RpcMiddleware.ServiceClass<RequestTracing, "@shivaedev/identity/RequestTracing", RequestId, Schema.Never, never, never, false>;
|
|
6
|
+
export declare class RequestTracing extends RequestTracing_base {
|
|
7
|
+
}
|
|
8
|
+
declare const Authenticated_base: RpcMiddleware.ServiceClass<Authenticated, "@shivaedev/identity/Authenticated", Identity, Schema.Union<readonly [typeof Unauthorized, typeof AuthUnavailable, typeof Forbidden]>, never, never, false>;
|
|
9
|
+
export declare class Authenticated extends Authenticated_base {
|
|
10
|
+
}
|
|
11
|
+
declare const MaybeAuthenticated_base: RpcMiddleware.ServiceClass<MaybeAuthenticated, "@shivaedev/identity/MaybeAuthenticated", OptionalIdentity, Schema.Union<readonly [typeof Unauthorized, typeof AuthUnavailable, typeof Forbidden]>, never, never, false>;
|
|
12
|
+
export declare class MaybeAuthenticated extends MaybeAuthenticated_base {
|
|
13
|
+
}
|
|
14
|
+
declare const AuthenticatedUser_base: RpcMiddleware.ServiceClass<AuthenticatedUser, "@shivaedev/identity/AuthenticatedUser", Identity | SessionUser, Schema.Union<readonly [typeof Unauthorized, typeof AuthUnavailable, typeof Forbidden]>, never, never, false>;
|
|
15
|
+
export declare class AuthenticatedUser extends AuthenticatedUser_base {
|
|
16
|
+
}
|
|
17
|
+
declare const AuthenticatedUserWithProviderAccounts_base: RpcMiddleware.ServiceClass<AuthenticatedUserWithProviderAccounts, "@shivaedev/identity/AuthenticatedUserWithProviderAccounts", Identity | SessionUser | SessionUserWithProviderAccounts, Schema.Union<readonly [typeof Unauthorized, typeof AuthUnavailable, typeof Forbidden]>, never, never, false>;
|
|
18
|
+
export declare class AuthenticatedUserWithProviderAccounts extends AuthenticatedUserWithProviderAccounts_base {
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;;AACzH,qBAAa,cAAe,SAAQ,mBAKK;CAAG;;AAC5C,qBAAa,aAAc,SAAQ,kBAOjC;CAAG;;AACL,qBAAa,kBAAmB,SAAQ,uBAK0E;CAAG;;AACrH,qBAAa,iBAAkB,SAAQ,sBAOrC;CAAG;;AACL,qBAAa,qCAAsC,SAAQ,0CAKzD;CAAG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { RpcMiddleware } from "effect/rpc";
|
|
3
|
+
import { AuthUnavailable, Forbidden, Unauthorized } from "@shivaedev/errors/taxonomy.ts";
|
|
4
|
+
export class RequestTracing extends RpcMiddleware.Service()("@shivaedev/identity/RequestTracing") {
|
|
5
|
+
}
|
|
6
|
+
export class Authenticated extends RpcMiddleware.Service()("@shivaedev/identity/Authenticated", {
|
|
7
|
+
error: Schema.Union([Unauthorized, AuthUnavailable, Forbidden]),
|
|
8
|
+
}) {
|
|
9
|
+
}
|
|
10
|
+
export class MaybeAuthenticated extends RpcMiddleware.Service()("@shivaedev/identity/MaybeAuthenticated", { error: Schema.Union([Unauthorized, AuthUnavailable, Forbidden]) }) {
|
|
11
|
+
}
|
|
12
|
+
export class AuthenticatedUser extends RpcMiddleware.Service()("@shivaedev/identity/AuthenticatedUser", {
|
|
13
|
+
error: Schema.Union([Unauthorized, AuthUnavailable, Forbidden]),
|
|
14
|
+
}) {
|
|
15
|
+
}
|
|
16
|
+
export class AuthenticatedUserWithProviderAccounts extends RpcMiddleware.Service()("@shivaedev/identity/AuthenticatedUserWithProviderAccounts", {
|
|
17
|
+
error: Schema.Union([Unauthorized, AuthUnavailable, Forbidden]),
|
|
18
|
+
}) {
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEzF,MAAM,OAAO,cAAe,SAAQ,aAAa,CAAC,OAAO,EAKtD,CAAC,oCAAoC,CAAC;CAAG;AAC5C,MAAM,OAAO,aAAc,SAAQ,aAAa,CAAC,OAAO,EAKrD,CAAC,mCAAmC,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;CAC/D,CAAC;CAAG;AACL,MAAM,OAAO,kBAAmB,SAAQ,aAAa,CAAC,OAAO,EAK1D,CAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;CAAG;AACrH,MAAM,OAAO,iBAAkB,SAAQ,aAAa,CAAC,OAAO,EAKzD,CAAC,uCAAuC,EAAE;IAC5C,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;CAC/D,CAAC;CAAG;AACL,MAAM,OAAO,qCAAsC,SAAQ,aAAa,CAAC,OAAO,EAG7E,CAAC,2DAA2D,EAAE;IAChE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;CAC/D,CAAC;CAAG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import { RpcMiddleware } from "effect/rpc";
|
|
3
|
+
import type { Permission } from "@shivaedev/access/permission.ts";
|
|
4
|
+
import { AuthUnavailable, Forbidden, Unauthorized } from "@shivaedev/errors/taxonomy.ts";
|
|
5
|
+
import { type Identity, SessionUser, type SessionUserValue } from "./identity.ts";
|
|
6
|
+
export declare function permissionMiddleware<TSelf>(): <const TName extends string>(name: TName, permission: Permission) => RpcMiddleware.ServiceClass<TSelf, TName, Identity | SessionUser, Schema.Union<readonly [typeof Unauthorized, typeof AuthUnavailable, typeof Forbidden]>, never, never, false> & {
|
|
7
|
+
permission: Permission;
|
|
8
|
+
};
|
|
9
|
+
export declare function hasPermission(user: Pick<SessionUserValue, "id" | "permissions">, permission: Permission): boolean;
|
|
10
|
+
export declare function requirePermission(permission: Permission): Effect.Effect<SessionUserValue, Forbidden, SessionUser>;
|
|
11
|
+
//# sourceMappingURL=permission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../src/permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,KAAK,QAAQ,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIlF,wBAAgB,oBAAoB,CAAC,KAAK,MACjC,KAAK,CAAC,KAAK,SAAS,MAAM,QAAQ,KAAK,cAAc,UAAU;;EAEvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,aAAa,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAEjH;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,2DAMvD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import { RpcMiddleware } from "effect/rpc";
|
|
3
|
+
import { AuthUnavailable, Forbidden, Unauthorized } from "@shivaedev/errors/taxonomy.ts";
|
|
4
|
+
import { SessionUser } from "./identity.js";
|
|
5
|
+
const Failures = Schema.Union([Unauthorized, AuthUnavailable, Forbidden]);
|
|
6
|
+
export function permissionMiddleware() {
|
|
7
|
+
return (name, permission) => Object.assign(RpcMiddleware.Service()(name, { error: Failures }), { permission });
|
|
8
|
+
}
|
|
9
|
+
export function hasPermission(user, permission) {
|
|
10
|
+
return user.permissions?.some((grant) => grant.name === permission.name && grant.strength === permission.strength) ?? false;
|
|
11
|
+
}
|
|
12
|
+
export function requirePermission(permission) {
|
|
13
|
+
return Effect.flatMap(SessionUser, (user) => hasPermission(user, permission)
|
|
14
|
+
? Effect.succeed(user)
|
|
15
|
+
: Effect.fail(new Forbidden({ message: `Permission required: ${permission.name} (${permission.strength})` })));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=permission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../src/permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAiB,WAAW,EAAyB,MAAM,eAAe,CAAC;AAElF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;AAE1E,MAAM,UAAU,oBAAoB;IACnC,OAAO,CAA6B,IAAW,EAAE,UAAsB,EAAE,EAAE,CAC1E,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAA+C,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AACjI,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAkD,EAAE,UAAsB;IACvG,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;AAC7H,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAsB;IACvD,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAC3C,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;QAC9B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QACtB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,EAAE,OAAO,EAAE,wBAAwB,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAC9G,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { AuthUnavailable, Unauthorized } from "@shivaedev/errors/taxonomy.ts";
|
|
3
|
+
import type { ProviderAccountValue } from "#identity.ts";
|
|
4
|
+
import type { SessionProvider, SessionShape } from "#server/session.ts";
|
|
5
|
+
export type GetSession<TSession extends SessionShape> = (headers: globalThis.Headers) => Promise<TSession | null>;
|
|
6
|
+
export type GetProviderAccounts = (headers: globalThis.Headers) => Promise<readonly ProviderAccountValue[]>;
|
|
7
|
+
export type SessionWithProviderAccounts<TSession extends SessionShape> = TSession & {
|
|
8
|
+
readonly user: TSession["user"] & {
|
|
9
|
+
readonly providerAccounts: Effect.Effect<readonly ProviderAccountValue[], AuthUnavailable | Unauthorized>;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare function betterAuthSessions<TSession extends SessionShape>(getSession: GetSession<TSession>): SessionProvider<TSession>;
|
|
13
|
+
export declare function betterAuthSessions<TSession extends SessionShape>(getSession: GetSession<TSession>, getProviderAccounts: GetProviderAccounts): SessionProvider<SessionWithProviderAccounts<TSession>>;
|
|
14
|
+
//# sourceMappingURL=betterAuthSessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"betterAuthSessions.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/betterAuthSessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,QAAQ,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACxE,MAAM,MAAM,UAAU,CAAC,QAAQ,SAAS,YAAY,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAClH,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAAC;AAC5G,MAAM,MAAM,2BAA2B,CAAC,QAAQ,SAAS,YAAY,IAAI,QAAQ,GAAG;IACnF,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;QAAE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,oBAAoB,EAAE,EAAE,eAAe,GAAG,YAAY,CAAC,CAAA;KAAE,CAAC;CAChJ,CAAC;AAOF,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC/H,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,YAAY,EAC/D,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,EAChC,mBAAmB,EAAE,mBAAmB,GACtC,eAAe,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Effect, Option, Predicate } from "effect";
|
|
2
|
+
import { redact } from "@shivaedev/errors/redact.ts";
|
|
3
|
+
import { AuthUnavailable, Unauthorized } from "@shivaedev/errors/taxonomy.ts";
|
|
4
|
+
function unavailable(cause) {
|
|
5
|
+
return Effect.andThen(Effect.logError("Authentication provider failed", redact(cause)), Effect.fail(new AuthUnavailable({ message: "Authentication is temporarily unavailable" })));
|
|
6
|
+
}
|
|
7
|
+
export function betterAuthSessions(getSession, getProviderAccounts) {
|
|
8
|
+
const betterAuthSession = Effect.fn("PlatformRpc.betterAuthSession")(function* (headers) {
|
|
9
|
+
const transport = new globalThis.Headers(headers);
|
|
10
|
+
const session = yield* Effect.tryPromise(() => getSession(transport)).pipe(Effect.catch((error) => unavailable(error.cause)));
|
|
11
|
+
if (session === null || getProviderAccounts === undefined) {
|
|
12
|
+
return Option.fromNullishOr(session);
|
|
13
|
+
}
|
|
14
|
+
const providerAccounts = Effect.tryPromise({
|
|
15
|
+
catch: (cause) => cause,
|
|
16
|
+
try: () => getProviderAccounts(transport),
|
|
17
|
+
}).pipe(Effect.catch((cause) => Predicate.hasProperty(cause, "statusCode") && cause.statusCode === 401
|
|
18
|
+
? Effect.fail(new Unauthorized({ message: "Authentication required" }))
|
|
19
|
+
: unavailable(cause)));
|
|
20
|
+
return Option.some({ ...session, user: { ...session.user, providerAccounts } });
|
|
21
|
+
});
|
|
22
|
+
return { get: betterAuthSession };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=betterAuthSessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"betterAuthSessions.js","sourceRoot":"","sources":["../../../src/server/adapters/betterAuthSessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAQ9E,SAAS,WAAW,CAAC,KAAc;IAClC,OAAO,MAAM,CAAC,OAAO,CACpB,MAAM,CAAC,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAChE,MAAM,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC,CAAC,CAC1F,CAAC;AACH,CAAC;AAMD,MAAM,UAAU,kBAAkB,CAAgC,UAAgC,EAAE,mBAAyC;IAC5I,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAwB;QACvG,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9H,IAAI,OAAO,KAAK,IAAI,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC3D,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC;YAC1C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;YACvB,GAAG,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;SACzC,CAAC,CAAC,IAAI,CACN,MAAM,CAAC,KAAK,CACX,CAAC,KAAK,EAAwD,EAAE,CAC/D,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG;YACrE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;YACvE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CACtB,CACD,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Config, Schema } from "effect";
|
|
2
|
+
export declare const AllowedAccounts: Schema.decodeTo<Schema.$Array<Schema.decodeTo<Schema.Struct<{
|
|
3
|
+
readonly accountId: Schema.NonEmptyString;
|
|
4
|
+
readonly providerId: Schema.NonEmptyString;
|
|
5
|
+
}>, Schema.String, never, never>>, Schema.String, never, never>;
|
|
6
|
+
export declare const allowedAccounts: Config.Config<readonly {
|
|
7
|
+
readonly accountId: string;
|
|
8
|
+
readonly providerId: string;
|
|
9
|
+
}[]>;
|
|
10
|
+
//# sourceMappingURL=allowedAccounts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allowedAccounts.d.ts","sourceRoot":"","sources":["../../../src/server/better-auth/allowedAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAgBtD,eAAO,MAAM,eAAe;;;+DAU3B,CAAC;AAEF,eAAO,MAAM,eAAe;;;IAA0D,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Config, Schema, SchemaGetter } from "effect";
|
|
2
|
+
const ProviderAccount = Schema.Struct({ accountId: Schema.NonEmptyString, providerId: Schema.NonEmptyString });
|
|
3
|
+
const AccountEntry = Schema.String.pipe(Schema.decodeTo(ProviderAccount, {
|
|
4
|
+
decode: SchemaGetter.transform((entry) => {
|
|
5
|
+
const separator = entry.indexOf(":");
|
|
6
|
+
return separator < 0
|
|
7
|
+
? { accountId: "", providerId: entry }
|
|
8
|
+
: { accountId: entry.slice(separator + 1).trim(), providerId: entry.slice(0, separator).trim() };
|
|
9
|
+
}),
|
|
10
|
+
encode: SchemaGetter.transform(({ accountId, providerId }) => `${providerId}:${accountId}`),
|
|
11
|
+
}));
|
|
12
|
+
export const AllowedAccounts = Schema.String.pipe(Schema.decodeTo(Schema.Array(AccountEntry).check(Schema.isMinLength(1)), {
|
|
13
|
+
decode: SchemaGetter.transform((value) => value
|
|
14
|
+
.split(",")
|
|
15
|
+
.map((entry) => entry.trim())
|
|
16
|
+
.filter((entry) => entry.length > 0)),
|
|
17
|
+
encode: SchemaGetter.transform((entries) => entries.join(",")),
|
|
18
|
+
}));
|
|
19
|
+
export const allowedAccounts = Config.schema(AllowedAccounts, "AUTH_ALLOWED_ACCOUNTS");
|
|
20
|
+
//# sourceMappingURL=allowedAccounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allowedAccounts.js","sourceRoot":"","sources":["../../../src/server/better-auth/allowedAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtD,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;AAE/G,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CACtC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;IAChC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,SAAS,GAAG,CAAC;YACnB,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;YACtC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IACnG,CAAC,CAAC;IACF,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC;CAC3F,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAChD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;IACxE,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CACxC,KAAK;SACH,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CACrC;IACD,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAC9D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BetterAuthOptions } from "better-auth";
|
|
2
|
+
export interface BearerSessionsOptions {
|
|
3
|
+
readonly origins: readonly string[];
|
|
4
|
+
}
|
|
5
|
+
export declare function withBearerSessions<TOptions extends BetterAuthOptions>(options: TOptions, enabled: boolean): TOptions;
|
|
6
|
+
export declare function hasSessionCookie(headers: Headers, cookieName: string): boolean;
|
|
7
|
+
export declare function sessionHeaders(headers: Headers, cookieName: string): Headers;
|
|
8
|
+
export declare function cookieSessionResponse(response: Response): Promise<Response>;
|
|
9
|
+
//# sourceMappingURL=bearerSessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearerSessions.d.ts","sourceRoot":"","sources":["../../../src/server/better-auth/bearerSessions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,CAEpH;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO9E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAQ5E;AAED,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmBjF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { bearer } from "better-auth/plugins/bearer";
|
|
2
|
+
export function withBearerSessions(options, enabled) {
|
|
3
|
+
return enabled ? { ...options, plugins: [...(options.plugins ?? []), bearer({ requireSignature: true })] } : options;
|
|
4
|
+
}
|
|
5
|
+
export function hasSessionCookie(headers, cookieName) {
|
|
6
|
+
return (headers
|
|
7
|
+
.get("cookie")
|
|
8
|
+
?.split(";")
|
|
9
|
+
.some((cookie) => cookie.trim().startsWith(`${cookieName}=`)) === true);
|
|
10
|
+
}
|
|
11
|
+
export function sessionHeaders(headers, cookieName) {
|
|
12
|
+
const result = new Headers(headers);
|
|
13
|
+
if (hasSessionCookie(headers, cookieName)) {
|
|
14
|
+
result.delete("authorization");
|
|
15
|
+
}
|
|
16
|
+
else if (/^bearer\s/iu.test(headers.get("authorization") ?? "")) {
|
|
17
|
+
result.delete("cookie");
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
export async function cookieSessionResponse(response) {
|
|
22
|
+
const headers = new Headers(response.headers);
|
|
23
|
+
headers.delete("set-auth-token");
|
|
24
|
+
const exposed = headers.get("access-control-expose-headers");
|
|
25
|
+
if (exposed !== null) {
|
|
26
|
+
headers.set("access-control-expose-headers", exposed
|
|
27
|
+
.split(",")
|
|
28
|
+
.filter((header) => header.trim().toLowerCase() !== "set-auth-token")
|
|
29
|
+
.join(","));
|
|
30
|
+
}
|
|
31
|
+
if (!headers.get("content-type")?.includes("application/json")) {
|
|
32
|
+
return new Response(response.body, { headers, status: response.status });
|
|
33
|
+
}
|
|
34
|
+
const body = JSON.parse(await response.text(), (key, value) => (key === "token" ? undefined : value));
|
|
35
|
+
headers.delete("content-length");
|
|
36
|
+
return Response.json(body, { headers, status: response.status });
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=bearerSessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearerSessions.js","sourceRoot":"","sources":["../../../src/server/better-auth/bearerSessions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAMpD,MAAM,UAAU,kBAAkB,CAAqC,OAAiB,EAAE,OAAgB;IACzG,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACtH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,UAAkB;IACpE,OAAO,CACN,OAAO;SACL,GAAG,CAAC,QAAQ,CAAC;QACd,EAAE,KAAK,CAAC,GAAG,CAAC;SACX,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,KAAK,IAAI,CACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,UAAkB;IAClE,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,QAAkB;IAC7D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACV,+BAA+B,EAC/B,OAAO;aACL,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,gBAAgB,CAAC;aACpE,IAAI,CAAC,GAAG,CAAC,CACX,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,KAAc,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACxH,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoryRateLimit.d.ts","sourceRoot":"","sources":["../../../src/server/better-auth/memoryRateLimit.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUvC,eAAO,MAAM,eAAe,sGA4C1B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Clock, Effect } from "effect";
|
|
2
|
+
const MAX_ENTRIES = 100_000;
|
|
3
|
+
export const memoryRateLimit = Effect.gen(function* () {
|
|
4
|
+
const clock = yield* Clock.Clock;
|
|
5
|
+
const buckets = yield* Effect.acquireRelease(Effect.sync(() => new Map()), (entries) => Effect.sync(() => entries.clear()));
|
|
6
|
+
let nextExpiry = Number.POSITIVE_INFINITY;
|
|
7
|
+
function prune(now) {
|
|
8
|
+
if (now >= nextExpiry) {
|
|
9
|
+
nextExpiry = Number.POSITIVE_INFINITY;
|
|
10
|
+
for (const [entryKey, entry] of buckets) {
|
|
11
|
+
if (now >= entry.expiresAt) {
|
|
12
|
+
buckets.delete(entryKey);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
nextExpiry = Math.min(nextExpiry, entry.expiresAt);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const storage = {
|
|
21
|
+
consume(key, rule) {
|
|
22
|
+
const now = clock.currentTimeMillisUnsafe();
|
|
23
|
+
prune(now);
|
|
24
|
+
const bucket = buckets.get(key);
|
|
25
|
+
const window = rule.window * 1000;
|
|
26
|
+
if (bucket !== undefined && now - bucket.lastRequest < window && bucket.count >= rule.max) {
|
|
27
|
+
return Promise.resolve({ allowed: false, retryAfter: Math.ceil((bucket.lastRequest + window - now) / 1000) });
|
|
28
|
+
}
|
|
29
|
+
nextExpiry = Math.min(nextExpiry, now + window);
|
|
30
|
+
buckets.set(key, {
|
|
31
|
+
count: bucket === undefined || now - bucket.lastRequest >= window ? 1 : bucket.count + 1,
|
|
32
|
+
expiresAt: now + window,
|
|
33
|
+
lastRequest: now,
|
|
34
|
+
});
|
|
35
|
+
if (buckets.size > MAX_ENTRIES) {
|
|
36
|
+
for (const oldest of buckets.keys()) {
|
|
37
|
+
buckets.delete(oldest);
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return Promise.resolve({ allowed: true, retryAfter: null });
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
return storage;
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=memoryRateLimit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoryRateLimit.js","sourceRoot":"","sources":["../../../src/server/better-auth/memoryRateLimit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAQvC,MAAM,WAAW,GAAG,OAAO,CAAC;AAE5B,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAkB,CAAC,EAC5C,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAC/C,CAAC;IACF,IAAI,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC1C,SAAS,KAAK,CAAC,GAAW;QACzB,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;YACvB,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;YACtC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;gBACzC,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACP,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBACpD,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IACD,MAAM,OAAO,GAA6D;QACzE,OAAO,CAAC,GAAG,EAAE,IAAI;YAChB,MAAM,GAAG,GAAG,KAAK,CAAC,uBAAuB,EAAE,CAAC;YAC5C,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YAClC,IAAI,MAAM,KAAK,SAAS,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3F,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/G,CAAC;YACD,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBAChB,KAAK,EAAE,MAAM,KAAK,SAAS,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;gBACxF,SAAS,EAAE,GAAG,GAAG,MAAM;gBACvB,WAAW,EAAE,GAAG;aAChB,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;gBAChC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBACrC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACvB,MAAM;gBACP,CAAC;YACF,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;KACD,CAAC;IACF,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { type BetterAuthOptions } from "better-auth";
|
|
2
|
+
import { Config, Effect, Redacted } from "effect";
|
|
3
|
+
import { Pool, type PoolConfig } from "pg";
|
|
4
|
+
import type { RoleSet } from "@shivaedev/access/roleSet.ts";
|
|
5
|
+
import type { GetSession } from "#server/adapters/betterAuthSessions.ts";
|
|
6
|
+
import { type BearerSessionsOptions } from "#server/better-auth/bearerSessions.ts";
|
|
7
|
+
import { type RevokeUnadmitted } from "#server/better-auth/revokeUnadmitted.ts";
|
|
8
|
+
import { type SignInPolicy } from "#server/better-auth/signInGate.ts";
|
|
9
|
+
import type { SessionShape } from "#server/session.ts";
|
|
10
|
+
export interface BetterAuthMountOptions<E = never, R = never> {
|
|
11
|
+
readonly bearerSessions?: BearerSessionsOptions | undefined;
|
|
12
|
+
readonly roles?: RoleSet;
|
|
13
|
+
readonly signIn?: SignInPolicy<E, R> | undefined;
|
|
14
|
+
}
|
|
15
|
+
export declare const betterAuthMount: <const TOptions extends BetterAuthOptions, E = never, R = never>(options: TOptions, mount?: BetterAuthMountOptions<E, R> | undefined) => Effect.Effect<{
|
|
16
|
+
admittedSessions: <TSession extends SessionShape>(getSession: GetSession<TSession>) => GetSession<TSession>;
|
|
17
|
+
auth: import("better-auth").Auth<TOptions & {
|
|
18
|
+
advanced: {
|
|
19
|
+
disableCSRFCheck?: boolean | undefined;
|
|
20
|
+
disableOriginCheck?: boolean | undefined;
|
|
21
|
+
crossSubDomainCookies?: {
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
additionalCookies?: string[];
|
|
24
|
+
domain?: string;
|
|
25
|
+
} | undefined;
|
|
26
|
+
cookies?: {
|
|
27
|
+
[key: string]: {
|
|
28
|
+
name?: string;
|
|
29
|
+
attributes?: import("better-auth").CookieOptions;
|
|
30
|
+
};
|
|
31
|
+
} | undefined;
|
|
32
|
+
defaultCookieAttributes?: import("better-auth").CookieOptions | undefined;
|
|
33
|
+
cookiePrefix?: string | undefined;
|
|
34
|
+
database?: {
|
|
35
|
+
defaultFindManyLimit?: number;
|
|
36
|
+
generateId?: import("better-auth").GenerateIdFn | false | "serial" | "uuid";
|
|
37
|
+
joins?: boolean;
|
|
38
|
+
validateSchema?: boolean;
|
|
39
|
+
} | undefined;
|
|
40
|
+
trustedProxyHeaders?: boolean | undefined;
|
|
41
|
+
backgroundTasks?: {
|
|
42
|
+
handler: (promise: Promise<unknown>) => void;
|
|
43
|
+
};
|
|
44
|
+
skipTrailingSlashes?: boolean;
|
|
45
|
+
useSecureCookies: boolean | undefined;
|
|
46
|
+
ipAddress: {
|
|
47
|
+
disableIpTracking?: boolean;
|
|
48
|
+
ipv6Subnet?: number;
|
|
49
|
+
ipAddressHeaders: string[];
|
|
50
|
+
trustedProxies: string[];
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
baseURL: import("better-auth").BaseURLConfig;
|
|
54
|
+
databaseHooks: {
|
|
55
|
+
user?: {
|
|
56
|
+
create?: {
|
|
57
|
+
before?: (user: import("better-auth").User & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void | {
|
|
58
|
+
data: {
|
|
59
|
+
id?: string | undefined;
|
|
60
|
+
createdAt?: Date | undefined;
|
|
61
|
+
updatedAt?: Date | undefined;
|
|
62
|
+
email?: string | undefined;
|
|
63
|
+
emailVerified?: boolean | undefined;
|
|
64
|
+
name?: string | undefined;
|
|
65
|
+
image?: string | null | undefined;
|
|
66
|
+
} & Record<string, any>;
|
|
67
|
+
}>;
|
|
68
|
+
after?: (user: import("better-auth").User & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
69
|
+
};
|
|
70
|
+
update?: {
|
|
71
|
+
before?: (user: Partial<import("better-auth").User> & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void | {
|
|
72
|
+
data: {
|
|
73
|
+
[x: string]: any;
|
|
74
|
+
id?: string | undefined;
|
|
75
|
+
createdAt?: Date | undefined;
|
|
76
|
+
updatedAt?: Date | undefined;
|
|
77
|
+
email?: string | undefined;
|
|
78
|
+
emailVerified?: boolean | undefined;
|
|
79
|
+
name?: string | undefined;
|
|
80
|
+
image?: string | null | undefined;
|
|
81
|
+
};
|
|
82
|
+
}>;
|
|
83
|
+
after?: (user: import("better-auth").User & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
84
|
+
};
|
|
85
|
+
delete?: {
|
|
86
|
+
before?: (user: import("better-auth").User & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void>;
|
|
87
|
+
after?: (user: import("better-auth").User & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
session?: {
|
|
91
|
+
create?: {
|
|
92
|
+
before?: (session: import("better-auth").Session & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void | {
|
|
93
|
+
data: {
|
|
94
|
+
id?: string | undefined;
|
|
95
|
+
createdAt?: Date | undefined;
|
|
96
|
+
updatedAt?: Date | undefined;
|
|
97
|
+
userId?: string | undefined;
|
|
98
|
+
expiresAt?: Date | undefined;
|
|
99
|
+
token?: string | undefined;
|
|
100
|
+
ipAddress?: string | null | undefined;
|
|
101
|
+
userAgent?: string | null | undefined;
|
|
102
|
+
} & Record<string, any>;
|
|
103
|
+
}>;
|
|
104
|
+
after?: (session: import("better-auth").Session & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
105
|
+
};
|
|
106
|
+
update?: {
|
|
107
|
+
before?: (session: Partial<import("better-auth").Session> & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void | {
|
|
108
|
+
data: {
|
|
109
|
+
[x: string]: any;
|
|
110
|
+
id?: string | undefined;
|
|
111
|
+
createdAt?: Date | undefined;
|
|
112
|
+
updatedAt?: Date | undefined;
|
|
113
|
+
userId?: string | undefined;
|
|
114
|
+
expiresAt?: Date | undefined;
|
|
115
|
+
token?: string | undefined;
|
|
116
|
+
ipAddress?: string | null | undefined;
|
|
117
|
+
userAgent?: string | null | undefined;
|
|
118
|
+
};
|
|
119
|
+
}>;
|
|
120
|
+
after?: (session: import("better-auth").Session & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
121
|
+
};
|
|
122
|
+
delete?: {
|
|
123
|
+
before?: (session: import("better-auth").Session & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void>;
|
|
124
|
+
after?: (session: import("better-auth").Session & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
account?: {
|
|
128
|
+
create?: {
|
|
129
|
+
before?: (account: import("better-auth").Account, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void | {
|
|
130
|
+
data: {
|
|
131
|
+
id?: string | undefined;
|
|
132
|
+
createdAt?: Date | undefined;
|
|
133
|
+
updatedAt?: Date | undefined;
|
|
134
|
+
providerId?: string | undefined;
|
|
135
|
+
accountId?: string | undefined;
|
|
136
|
+
userId?: string | undefined;
|
|
137
|
+
accessToken?: string | null | undefined;
|
|
138
|
+
refreshToken?: string | null | undefined;
|
|
139
|
+
idToken?: string | null | undefined;
|
|
140
|
+
accessTokenExpiresAt?: Date | null | undefined;
|
|
141
|
+
refreshTokenExpiresAt?: Date | null | undefined;
|
|
142
|
+
scope?: string | null | undefined;
|
|
143
|
+
password?: string | null | undefined;
|
|
144
|
+
} & Record<string, any>;
|
|
145
|
+
}>;
|
|
146
|
+
after?: (account: import("better-auth").Account, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
147
|
+
};
|
|
148
|
+
update?: {
|
|
149
|
+
before?: (account: Partial<import("better-auth").Account> & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void | {
|
|
150
|
+
data: {
|
|
151
|
+
[x: string]: any;
|
|
152
|
+
id?: string | undefined;
|
|
153
|
+
createdAt?: Date | undefined;
|
|
154
|
+
updatedAt?: Date | undefined;
|
|
155
|
+
providerId?: string | undefined;
|
|
156
|
+
accountId?: string | undefined;
|
|
157
|
+
userId?: string | undefined;
|
|
158
|
+
accessToken?: string | null | undefined;
|
|
159
|
+
refreshToken?: string | null | undefined;
|
|
160
|
+
idToken?: string | null | undefined;
|
|
161
|
+
accessTokenExpiresAt?: Date | null | undefined;
|
|
162
|
+
refreshTokenExpiresAt?: Date | null | undefined;
|
|
163
|
+
scope?: string | null | undefined;
|
|
164
|
+
password?: string | null | undefined;
|
|
165
|
+
};
|
|
166
|
+
}>;
|
|
167
|
+
after?: (account: import("better-auth").Account & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
168
|
+
};
|
|
169
|
+
delete?: {
|
|
170
|
+
before?: (account: import("better-auth").Account & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void>;
|
|
171
|
+
after?: (account: import("better-auth").Account & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
verification?: {
|
|
175
|
+
create?: {
|
|
176
|
+
before?: (verification: import("better-auth").Verification & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void | {
|
|
177
|
+
data: {
|
|
178
|
+
id?: string | undefined;
|
|
179
|
+
createdAt?: Date | undefined;
|
|
180
|
+
updatedAt?: Date | undefined;
|
|
181
|
+
value?: string | undefined;
|
|
182
|
+
expiresAt?: Date | undefined;
|
|
183
|
+
identifier?: string | undefined;
|
|
184
|
+
} & Record<string, any>;
|
|
185
|
+
}>;
|
|
186
|
+
after?: (verification: import("better-auth").Verification & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
187
|
+
};
|
|
188
|
+
update?: {
|
|
189
|
+
before?: (verification: Partial<import("better-auth").Verification> & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void | {
|
|
190
|
+
data: {
|
|
191
|
+
[x: string]: any;
|
|
192
|
+
id?: string | undefined;
|
|
193
|
+
createdAt?: Date | undefined;
|
|
194
|
+
updatedAt?: Date | undefined;
|
|
195
|
+
value?: string | undefined;
|
|
196
|
+
expiresAt?: Date | undefined;
|
|
197
|
+
identifier?: string | undefined;
|
|
198
|
+
};
|
|
199
|
+
}>;
|
|
200
|
+
after?: (verification: import("better-auth").Verification & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
201
|
+
};
|
|
202
|
+
delete?: {
|
|
203
|
+
before?: (verification: import("better-auth").Verification & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<boolean | void>;
|
|
204
|
+
after?: (verification: import("better-auth").Verification & Record<string, unknown>, context: import("better-auth").GenericEndpointContext | null) => Promise<void>;
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
} | undefined;
|
|
208
|
+
rateLimit: {
|
|
209
|
+
window?: number | undefined;
|
|
210
|
+
max?: number | undefined;
|
|
211
|
+
modelName?: "rateLimit" | import("better-auth").LiteralString;
|
|
212
|
+
fields?: Partial<Record<"count" | "key" | "lastRequest", string>>;
|
|
213
|
+
customRules?: {
|
|
214
|
+
[key: string]: import("better-auth").BetterAuthRateLimitRule | false | ((request: Request, currentRule: import("better-auth").BetterAuthRateLimitRule) => import("better-auth").Awaitable<false | import("better-auth").BetterAuthRateLimitRule>);
|
|
215
|
+
} | undefined;
|
|
216
|
+
storage?: ("memory" | "database" | "secondary-storage") | undefined;
|
|
217
|
+
customStorage?: import("better-auth").BetterAuthRateLimitStorage;
|
|
218
|
+
enabled: boolean;
|
|
219
|
+
};
|
|
220
|
+
secret: string;
|
|
221
|
+
trustedOrigins: string[] | ((request?: Request | undefined) => import("better-auth").Awaitable<(string | undefined | null)[]>);
|
|
222
|
+
user: (import("better-auth").BetterAuthDBOptions<"user", "createdAt" | "email" | "emailVerified" | "id" | "image" | "name" | "updatedAt"> & {
|
|
223
|
+
validateUserInfo?: (data: {
|
|
224
|
+
user: Partial<import("better-auth").User> & Record<string, unknown>;
|
|
225
|
+
source: import("better-auth").ValidateUserInfoSource;
|
|
226
|
+
}, context: import("better-auth").GenericEndpointContext) => import("better-auth").Awaitable<void | import("better-auth").ValidateUserInfoResult>;
|
|
227
|
+
changeEmail?: {
|
|
228
|
+
enabled: boolean;
|
|
229
|
+
sendChangeEmailConfirmation?: (data: {
|
|
230
|
+
user: import("better-auth").User;
|
|
231
|
+
newEmail: string;
|
|
232
|
+
url: string;
|
|
233
|
+
token: string;
|
|
234
|
+
}, request?: Request) => Promise<void>;
|
|
235
|
+
updateEmailWithoutVerification?: boolean;
|
|
236
|
+
};
|
|
237
|
+
deleteUser?: {
|
|
238
|
+
enabled?: boolean;
|
|
239
|
+
sendDeleteAccountVerification?: (data: {
|
|
240
|
+
user: import("better-auth").User;
|
|
241
|
+
url: string;
|
|
242
|
+
token: string;
|
|
243
|
+
}, request?: Request) => Promise<void>;
|
|
244
|
+
beforeDelete?: (user: import("better-auth").User, request?: Request) => Promise<void>;
|
|
245
|
+
afterDelete?: (user: import("better-auth").User, request?: Request) => Promise<void>;
|
|
246
|
+
deleteTokenExpiresIn?: number;
|
|
247
|
+
};
|
|
248
|
+
}) | undefined;
|
|
249
|
+
}>;
|
|
250
|
+
revokeUnadmitted: RevokeUnadmitted<E>;
|
|
251
|
+
routes: import("effect/Layer").Layer<never, never, import("effect/http/HttpRouter").HttpRouter>;
|
|
252
|
+
sessions: {
|
|
253
|
+
roles?: RoleSet;
|
|
254
|
+
provider: import("#server/session.ts").SessionProvider<{
|
|
255
|
+
readonly user: {
|
|
256
|
+
readonly email: string;
|
|
257
|
+
readonly id: string;
|
|
258
|
+
readonly name: string;
|
|
259
|
+
readonly role?: string | null;
|
|
260
|
+
};
|
|
261
|
+
}>;
|
|
262
|
+
};
|
|
263
|
+
}, Config.ConfigError, R | import("effect/Scope").Scope>;
|
|
264
|
+
export declare const authDatabase: (url: Redacted.Redacted<string>, options?: Pick<PoolConfig, "application_name" | "max"> | undefined) => Effect.Effect<Pool, never, import("effect/Scope").Scope>;
|
|
265
|
+
//# sourceMappingURL=mount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../../src/server/better-auth/mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAc,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAU,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAmB,KAAK,UAAU,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,KAAK,qBAAqB,EAAsC,MAAM,uCAAuC,CAAC;AAGvH,OAAO,EAAE,KAAK,gBAAgB,EAAoB,MAAM,yCAAyC,CAAC;AAClG,OAAO,EAAsB,KAAK,YAAY,EAAc,MAAM,mCAAmC,CAAC;AAGtG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,WAAW,sBAAsB,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK;IAC3D,QAAQ,CAAC,cAAc,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;CACjD;AAED,eAAO,MAAM,eAAe,SAA0D,QAAQ,SAAS,iBAAiB,EAAE,CAAC,UAAU,CAAC;uBAuD3G,QAAQ,SAAS,YAAY,cAAc,UAAU,CAAC,QAAQ,CAAC,KAAG,UAAU,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wDAkC/G,CAAC;AAEH,eAAO,MAAM,YAAY,kKAgCvB,CAAC"}
|