@gauts/auth 0.8.2 → 0.10.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/README.md +376 -140
- package/SECURITY.md +8 -4
- package/dist/adapters/drizzle/config.d.ts +11 -0
- package/dist/adapters/drizzle/config.d.ts.map +1 -0
- package/dist/adapters/drizzle/config.js +147 -0
- package/dist/adapters/drizzle/config.js.map +1 -0
- package/dist/adapters/drizzle/index.d.ts +4 -0
- package/dist/adapters/drizzle/index.d.ts.map +1 -0
- package/dist/adapters/drizzle/index.js +156 -0
- package/dist/adapters/drizzle/index.js.map +1 -0
- package/dist/adapters/drizzle/model.d.ts +21 -0
- package/dist/adapters/drizzle/model.d.ts.map +1 -0
- package/dist/adapters/drizzle/model.js +61 -0
- package/dist/adapters/drizzle/model.js.map +1 -0
- package/dist/adapters/drizzle/schema.d.ts +311 -0
- package/dist/adapters/drizzle/schema.d.ts.map +1 -0
- package/dist/adapters/drizzle/schema.js +37 -0
- package/dist/adapters/drizzle/schema.js.map +1 -0
- package/dist/adapters/drizzle/types.d.ts +109 -0
- package/dist/adapters/drizzle/types.d.ts.map +1 -0
- package/dist/adapters/drizzle/types.js +2 -0
- package/dist/adapters/drizzle/types.js.map +1 -0
- package/dist/adapters/express/index.d.ts +77 -0
- package/dist/adapters/express/index.d.ts.map +1 -0
- package/dist/adapters/express/index.js +72 -0
- package/dist/adapters/express/index.js.map +1 -0
- package/dist/adapters/express/social.d.ts +29 -0
- package/dist/adapters/express/social.d.ts.map +1 -0
- package/dist/adapters/express/social.js +44 -0
- package/dist/adapters/express/social.js.map +1 -0
- package/dist/adapters/fastify/index.d.ts +79 -0
- package/dist/adapters/fastify/index.d.ts.map +1 -0
- package/dist/adapters/fastify/index.js +100 -0
- package/dist/adapters/fastify/index.js.map +1 -0
- package/dist/adapters/fastify/social.d.ts +27 -0
- package/dist/adapters/fastify/social.d.ts.map +1 -0
- package/dist/adapters/fastify/social.js +48 -0
- package/dist/adapters/fastify/social.js.map +1 -0
- package/dist/adapters/hono/index.d.ts +10 -23
- package/dist/adapters/hono/index.d.ts.map +1 -1
- package/dist/adapters/hono/index.js +32 -224
- package/dist/adapters/hono/index.js.map +1 -1
- package/dist/adapters/hono/social.d.ts +4 -10
- package/dist/adapters/hono/social.d.ts.map +1 -1
- package/dist/adapters/hono/social.js +25 -221
- package/dist/adapters/hono/social.js.map +1 -1
- package/dist/adapters/model.d.ts +33 -0
- package/dist/adapters/model.d.ts.map +1 -0
- package/dist/adapters/model.js +87 -0
- package/dist/adapters/model.js.map +1 -0
- package/dist/adapters/next/index.d.ts +1 -1
- package/dist/adapters/next/index.d.ts.map +1 -1
- package/dist/adapters/next/index.js +7 -3
- package/dist/adapters/next/index.js.map +1 -1
- package/dist/adapters/prisma/config.d.ts.map +1 -1
- package/dist/adapters/prisma/config.js +1 -4
- package/dist/adapters/prisma/config.js.map +1 -1
- package/dist/adapters/prisma/model.d.ts +7 -8
- package/dist/adapters/prisma/model.d.ts.map +1 -1
- package/dist/adapters/prisma/model.js +11 -79
- package/dist/adapters/prisma/model.js.map +1 -1
- package/dist/adapters/utils/cookie.d.ts +17 -0
- package/dist/adapters/utils/cookie.d.ts.map +1 -0
- package/dist/adapters/utils/cookie.js +59 -0
- package/dist/adapters/utils/cookie.js.map +1 -0
- package/dist/adapters/utils/session.d.ts +4 -0
- package/dist/adapters/utils/session.d.ts.map +1 -0
- package/dist/adapters/utils/session.js +208 -0
- package/dist/adapters/utils/session.js.map +1 -0
- package/dist/adapters/utils/social.d.ts +51 -0
- package/dist/adapters/utils/social.d.ts.map +1 -0
- package/dist/adapters/utils/social.js +278 -0
- package/dist/adapters/utils/social.js.map +1 -0
- package/dist/adapters/utils/types.d.ts +61 -0
- package/dist/adapters/utils/types.d.ts.map +1 -0
- package/dist/adapters/utils/types.js +2 -0
- package/dist/adapters/utils/types.js.map +1 -0
- package/dist/config.d.ts +1 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/session/cookie.d.ts +6 -8
- package/dist/session/cookie.d.ts.map +1 -1
- package/dist/session/cookie.js +7 -24
- package/dist/session/cookie.js.map +1 -1
- package/dist/session/state.d.ts +41 -0
- package/dist/session/state.d.ts.map +1 -0
- package/dist/session/state.js +192 -0
- package/dist/session/state.js.map +1 -0
- package/package.json +40 -3
- package/src/adapters/drizzle/schema.ts +47 -0
- package/src/adapters/prisma/schema.prisma +38 -0
- package/dist/session/cache.d.ts +0 -32
- package/dist/session/cache.d.ts.map +0 -1
- package/dist/session/cache.js +0 -138
- package/dist/session/cache.js.map +0 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Request, RequestHandler, Response } from "express";
|
|
2
|
+
import type { AuthAccount } from "../../session/types.js";
|
|
3
|
+
import type { SocialAuthenticated, SocialConfig, SocialDbAdapter, SocialIdentity } from "../../social/types.js";
|
|
4
|
+
import type { HttpCookieOptions } from "../utils/types.js";
|
|
5
|
+
type ExpressSocialDeps<TAccount extends AuthAccount, TData> = {
|
|
6
|
+
config: SocialConfig<TData>;
|
|
7
|
+
cookie: HttpCookieOptions;
|
|
8
|
+
db: SocialDbAdapter<TAccount>;
|
|
9
|
+
sessionCookieNames: readonly string[];
|
|
10
|
+
secret: string;
|
|
11
|
+
};
|
|
12
|
+
type ExpressSocialInput = {
|
|
13
|
+
request: Request;
|
|
14
|
+
response: Response;
|
|
15
|
+
};
|
|
16
|
+
type CompleteRegistrationInput<TData> = ExpressSocialInput & {
|
|
17
|
+
data: TData;
|
|
18
|
+
};
|
|
19
|
+
export type ExpressSocialLocals<TAccount extends AuthAccount = AuthAccount> = {
|
|
20
|
+
social: SocialAuthenticated<TAccount>;
|
|
21
|
+
};
|
|
22
|
+
export type ExpressSocial<TAccount extends AuthAccount = AuthAccount, TData = undefined> = {
|
|
23
|
+
completeRegistration(input: CompleteRegistrationInput<TData>): Promise<SocialAuthenticated<TAccount>>;
|
|
24
|
+
getRegistration(input: ExpressSocialInput): SocialIdentity;
|
|
25
|
+
handle: RequestHandler;
|
|
26
|
+
};
|
|
27
|
+
export declare const createExpressSocial: <TAccount extends AuthAccount, TData>({ config, cookie, db, sessionCookieNames, secret, }: ExpressSocialDeps<TAccount, TData>) => ExpressSocial<TAccount, TData>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=social.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/social.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EACR,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,cAAc,EACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,KAAK,iBAAiB,CAAC,QAAQ,SAAS,WAAW,EAAE,KAAK,IAAI;IAC1D,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC9B,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;CACtB,CAAC;AAEF,KAAK,yBAAyB,CAAC,KAAK,IAAI,kBAAkB,GAAG;IACzD,IAAI,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,IAAI;IAC1E,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAAE,KAAK,GAAG,SAAS,IAAI;IACvF,oBAAoB,CAChB,KAAK,EAAE,yBAAyB,CAAC,KAAK,CAAC,GACxC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1C,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,cAAc,CAAC;IAC3D,MAAM,EAAE,cAAc,CAAC;CAC1B,CAAC;AAcF,eAAO,MAAM,mBAAmB,GAAI,QAAQ,SAAS,WAAW,EAAE,KAAK,EAAE,qDAMtE,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAsCpE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createHttpSocial } from "../utils/social.js";
|
|
2
|
+
const getParam = ({ name, request }) => {
|
|
3
|
+
const value = request.params[name];
|
|
4
|
+
return typeof value === "string" ? value : value?.[0];
|
|
5
|
+
};
|
|
6
|
+
const getQuery = ({ name, request }) => {
|
|
7
|
+
const value = request.query[name];
|
|
8
|
+
return typeof value === "string" ? value : undefined;
|
|
9
|
+
};
|
|
10
|
+
export const createExpressSocial = ({ config, cookie, db, sessionCookieNames, secret, }) => {
|
|
11
|
+
const social = createHttpSocial({
|
|
12
|
+
appendSetCookie: ({ response, value }) => {
|
|
13
|
+
response.append("Set-Cookie", value);
|
|
14
|
+
},
|
|
15
|
+
config,
|
|
16
|
+
cookie,
|
|
17
|
+
db,
|
|
18
|
+
getHeader: ({ name, request }) => request.get(name),
|
|
19
|
+
getParam,
|
|
20
|
+
getQuery,
|
|
21
|
+
sessionCookieNames,
|
|
22
|
+
secret,
|
|
23
|
+
});
|
|
24
|
+
const handle = async (request, response, next) => {
|
|
25
|
+
const result = await social.handle({ request, response });
|
|
26
|
+
if (result.type === "not_found") {
|
|
27
|
+
response.sendStatus(404);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (result.type === "redirect") {
|
|
31
|
+
response.redirect(result.url);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const locals = response.locals;
|
|
35
|
+
locals.social = result.value;
|
|
36
|
+
next();
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
completeRegistration: (input) => social.completeRegistration(input),
|
|
40
|
+
getRegistration: (input) => social.getRegistration(input),
|
|
41
|
+
handle,
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=social.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.js","sourceRoot":"","sources":["../../../src/adapters/express/social.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAgCtD,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAsC,EAAsB,EAAE;IAC3F,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEnC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAsC,EAAsB,EAAE;IAC3F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAsC,EACrE,MAAM,EACN,MAAM,EACN,EAAE,EACF,kBAAkB,EAClB,MAAM,GAC2B,EAAkC,EAAE;IACrE,MAAM,MAAM,GAAG,gBAAgB,CAAqC;QAChE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;YACrC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,MAAM;QACN,MAAM;QACN,EAAE;QACF,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACnD,QAAQ;QACR,QAAQ;QACR,kBAAkB;QAClB,MAAM;KACT,CAAC,CAAC;IAEH,MAAM,MAAM,GAAmB,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE1D,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO;QACX,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7B,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAuC,CAAC;QAChE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,CAAC;IACX,CAAC,CAAC;IAEF,OAAO;QACH,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC;QACnE,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC;QACzD,MAAM;KACT,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { FastifyInstance, FastifyReply, FastifyRequest } from "fastify";
|
|
2
|
+
import { type Auth, type AuthDeps } from "../../auth.js";
|
|
3
|
+
import type { SessionCookieNames } from "../../session/cookie.js";
|
|
4
|
+
import type { SessionCacheConfig } from "../../session/state.js";
|
|
5
|
+
import type { AuthAccount, DbAdapter, ResolvedSession, Session } from "../../session/types.js";
|
|
6
|
+
import type { SocialConfig, SocialDbAdapter } from "../../social/types.js";
|
|
7
|
+
import type { HttpCookieConfig } from "../utils/types.js";
|
|
8
|
+
import { type FastifySocial } from "./social.js";
|
|
9
|
+
export type { SessionCacheConfig } from "../../session/state.js";
|
|
10
|
+
export type { FastifySocial, FastifySocialHandler } from "./social.js";
|
|
11
|
+
export type FastifyAuthContext<TAccount extends AuthAccount = AuthAccount> = {
|
|
12
|
+
account: TAccount;
|
|
13
|
+
session: Session;
|
|
14
|
+
user: TAccount["user"];
|
|
15
|
+
};
|
|
16
|
+
export type FastifyCookieConfig = HttpCookieConfig;
|
|
17
|
+
export type FastifyGetIp = (request: FastifyRequest) => Promise<string | null | undefined> | string | null | undefined;
|
|
18
|
+
export type FastifyAdapterConfig<TAccount extends AuthAccount = AuthAccount> = {
|
|
19
|
+
auth: Auth<TAccount>;
|
|
20
|
+
cache?: SessionCacheConfig;
|
|
21
|
+
cookie?: FastifyCookieConfig;
|
|
22
|
+
getIp?: FastifyGetIp;
|
|
23
|
+
secret: string;
|
|
24
|
+
};
|
|
25
|
+
type FastifyAuthBase<TAccount extends AuthAccount> = Omit<AuthDeps<TAccount>, "db"> & {
|
|
26
|
+
cache?: SessionCacheConfig;
|
|
27
|
+
cookie?: FastifyCookieConfig;
|
|
28
|
+
db: DbAdapter<TAccount>;
|
|
29
|
+
getIp?: FastifyGetIp;
|
|
30
|
+
secret: string;
|
|
31
|
+
};
|
|
32
|
+
type FastifySocialOptions<TAccount extends AuthAccount, TData> = {
|
|
33
|
+
db: DbAdapter<TAccount> & SocialDbAdapter<TAccount>;
|
|
34
|
+
social: SocialConfig<TData>;
|
|
35
|
+
} | {
|
|
36
|
+
db: DbAdapter<TAccount>;
|
|
37
|
+
social?: undefined;
|
|
38
|
+
};
|
|
39
|
+
export type FastifyAuthConfig<TAccount extends AuthAccount = AuthAccount, TData = undefined> = Omit<FastifyAuthBase<TAccount>, "db"> & FastifySocialOptions<TAccount, TData>;
|
|
40
|
+
type FastifyAuthOptions<TAccount extends AuthAccount> = Omit<FastifyAuthBase<TAccount>, "db">;
|
|
41
|
+
type DbAccount<TDb> = TDb extends DbAdapter<infer TAccount> ? TAccount : never;
|
|
42
|
+
type FastifyRequestInput = {
|
|
43
|
+
reply: FastifyReply;
|
|
44
|
+
request: FastifyRequest;
|
|
45
|
+
};
|
|
46
|
+
type CreateSessionInput = FastifyRequestInput & {
|
|
47
|
+
account_id: string;
|
|
48
|
+
country?: string | null;
|
|
49
|
+
};
|
|
50
|
+
export type FastifySessionHandler = (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
|
|
51
|
+
export type FastifyAdapter<TAccount extends AuthAccount = AuthAccount> = {
|
|
52
|
+
clearSession(reply: FastifyReply): void;
|
|
53
|
+
cookie: Readonly<SessionCookieNames>;
|
|
54
|
+
createSession(input: CreateSessionInput): Promise<Session>;
|
|
55
|
+
decorate(app: FastifyInstance): void;
|
|
56
|
+
getToken(request: FastifyRequest): string | null;
|
|
57
|
+
renewSession(input: FastifyRequestInput): Promise<Session>;
|
|
58
|
+
requireSession: FastifySessionHandler;
|
|
59
|
+
resolveSession(input: FastifyRequestInput): Promise<ResolvedSession<TAccount>>;
|
|
60
|
+
revokeSession(input: FastifyRequestInput): Promise<string[]>;
|
|
61
|
+
};
|
|
62
|
+
export type FastifyAuth<TAccount extends AuthAccount = AuthAccount> = Auth<TAccount> & FastifyAdapter<TAccount>;
|
|
63
|
+
export type FastifySocialAuth<TAccount extends AuthAccount = AuthAccount, TData = undefined> = Auth<TAccount> & FastifyAdapter<TAccount> & {
|
|
64
|
+
social: FastifySocial<TAccount, TData>;
|
|
65
|
+
};
|
|
66
|
+
export declare const createFastifyAdapter: <TAccount extends AuthAccount>({ auth, cache, cookie, getIp, secret, }: FastifyAdapterConfig<TAccount>) => FastifyAdapter<TAccount>;
|
|
67
|
+
type CreateFastifyAuth = {
|
|
68
|
+
<TDb extends DbAdapter, TData>(input: FastifyAuthOptions<DbAccount<TDb>> & {
|
|
69
|
+
db: TDb & SocialDbAdapter<DbAccount<TDb>>;
|
|
70
|
+
secret: string;
|
|
71
|
+
social: SocialConfig<TData>;
|
|
72
|
+
}): FastifySocialAuth<DbAccount<TDb>, TData>;
|
|
73
|
+
<TDb extends DbAdapter>(input: FastifyAuthOptions<DbAccount<TDb>> & {
|
|
74
|
+
db: TDb;
|
|
75
|
+
social?: undefined;
|
|
76
|
+
}): FastifyAuth<DbAccount<TDb>>;
|
|
77
|
+
};
|
|
78
|
+
export declare const createFastifyAuth: CreateFastifyAuth;
|
|
79
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/fastify/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createAuth } from "../../auth.js";
|
|
2
|
+
import { resolveHttpCookie } from "../utils/cookie.js";
|
|
3
|
+
import { requireSocialDb } from "../utils/social.js";
|
|
4
|
+
import { createHttpSession } from "../utils/session.js";
|
|
5
|
+
import { createFastifySocial } from "./social.js";
|
|
6
|
+
const decorateRequest = ({ app, name }) => {
|
|
7
|
+
if (!app.hasRequestDecorator(name)) {
|
|
8
|
+
app.decorateRequest(name);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
export const createFastifyAdapter = ({ auth, cache, cookie, getIp, secret, }) => {
|
|
12
|
+
const session = createHttpSession({
|
|
13
|
+
appendSetCookie: ({ response, value }) => {
|
|
14
|
+
response.header("Set-Cookie", value);
|
|
15
|
+
},
|
|
16
|
+
auth,
|
|
17
|
+
secret,
|
|
18
|
+
framework: "Fastify",
|
|
19
|
+
getMethod: (request) => request.method,
|
|
20
|
+
getHeader: ({ name, request }) => {
|
|
21
|
+
const value = request.headers[name];
|
|
22
|
+
return Array.isArray(value) ? value[0] : value;
|
|
23
|
+
},
|
|
24
|
+
...(getIp === undefined ? {} : { getIp }),
|
|
25
|
+
...(cache === undefined ? {} : { cache }),
|
|
26
|
+
...(cookie === undefined ? {} : { cookie }),
|
|
27
|
+
});
|
|
28
|
+
const resolveSession = ({ reply, request, }) => {
|
|
29
|
+
return session.resolveSession({ request, response: reply });
|
|
30
|
+
};
|
|
31
|
+
const requireSession = async (request, reply) => {
|
|
32
|
+
const value = await resolveSession({ reply, request });
|
|
33
|
+
request.setDecorator("session", value.session);
|
|
34
|
+
request.setDecorator("account", value.account);
|
|
35
|
+
request.setDecorator("user", value.account.user);
|
|
36
|
+
};
|
|
37
|
+
const decorate = (app) => {
|
|
38
|
+
decorateRequest({ app, name: "session" });
|
|
39
|
+
decorateRequest({ app, name: "account" });
|
|
40
|
+
decorateRequest({ app, name: "user" });
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
clearSession: (reply) => session.clearSession(reply),
|
|
44
|
+
cookie: session.cookie,
|
|
45
|
+
createSession: ({ account_id, country, reply, request }) => {
|
|
46
|
+
return session.createSession({
|
|
47
|
+
account_id,
|
|
48
|
+
...(country === undefined ? {} : { country }),
|
|
49
|
+
request,
|
|
50
|
+
response: reply,
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
decorate,
|
|
54
|
+
getToken: (request) => session.getToken(request),
|
|
55
|
+
renewSession: ({ reply, request }) => {
|
|
56
|
+
return session.renewSession({ request, response: reply });
|
|
57
|
+
},
|
|
58
|
+
requireSession,
|
|
59
|
+
resolveSession,
|
|
60
|
+
revokeSession: ({ reply, request }) => {
|
|
61
|
+
return session.revokeSession({ request, response: reply });
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
const createFastifyAuthImpl = ({ cache, cookie, db, getIp, password, secret, session, social, }) => {
|
|
66
|
+
const auth = createAuth({
|
|
67
|
+
db,
|
|
68
|
+
...(password === undefined ? {} : { password }),
|
|
69
|
+
...(session === undefined ? {} : { session }),
|
|
70
|
+
});
|
|
71
|
+
const adapter = createFastifyAdapter({
|
|
72
|
+
auth,
|
|
73
|
+
secret,
|
|
74
|
+
...(cache === undefined ? {} : { cache }),
|
|
75
|
+
...(cookie === undefined ? {} : { cookie }),
|
|
76
|
+
...(getIp === undefined ? {} : { getIp }),
|
|
77
|
+
});
|
|
78
|
+
if (social === undefined) {
|
|
79
|
+
return { ...auth, ...adapter };
|
|
80
|
+
}
|
|
81
|
+
const resolvedCookie = resolveHttpCookie(cookie);
|
|
82
|
+
const socialAdapter = createFastifySocial({
|
|
83
|
+
config: social,
|
|
84
|
+
cookie: resolvedCookie.options,
|
|
85
|
+
db: requireSocialDb(db),
|
|
86
|
+
sessionCookieNames: Object.values(resolvedCookie.names),
|
|
87
|
+
secret,
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
...auth,
|
|
91
|
+
...adapter,
|
|
92
|
+
decorate: (app) => {
|
|
93
|
+
adapter.decorate(app);
|
|
94
|
+
decorateRequest({ app, name: "social" });
|
|
95
|
+
},
|
|
96
|
+
social: socialAdapter,
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
export const createFastifyAuth = createFastifyAuthImpl;
|
|
100
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/fastify/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FastifyReply, FastifyRequest } from "fastify";
|
|
2
|
+
import type { AuthAccount } from "../../session/types.js";
|
|
3
|
+
import type { SocialAuthenticated, SocialConfig, SocialDbAdapter, SocialIdentity } from "../../social/types.js";
|
|
4
|
+
import type { HttpCookieOptions } from "../utils/types.js";
|
|
5
|
+
type FastifySocialDeps<TAccount extends AuthAccount, TData> = {
|
|
6
|
+
config: SocialConfig<TData>;
|
|
7
|
+
cookie: HttpCookieOptions;
|
|
8
|
+
db: SocialDbAdapter<TAccount>;
|
|
9
|
+
sessionCookieNames: readonly string[];
|
|
10
|
+
secret: string;
|
|
11
|
+
};
|
|
12
|
+
type FastifySocialInput = {
|
|
13
|
+
reply: FastifyReply;
|
|
14
|
+
request: FastifyRequest;
|
|
15
|
+
};
|
|
16
|
+
type CompleteRegistrationInput<TData> = FastifySocialInput & {
|
|
17
|
+
data: TData;
|
|
18
|
+
};
|
|
19
|
+
export type FastifySocialHandler = (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
|
|
20
|
+
export type FastifySocial<TAccount extends AuthAccount = AuthAccount, TData = undefined> = {
|
|
21
|
+
completeRegistration(input: CompleteRegistrationInput<TData>): Promise<SocialAuthenticated<TAccount>>;
|
|
22
|
+
getRegistration(input: FastifySocialInput): SocialIdentity;
|
|
23
|
+
handle: FastifySocialHandler;
|
|
24
|
+
};
|
|
25
|
+
export declare const createFastifySocial: <TAccount extends AuthAccount, TData>({ config, cookie, db, sessionCookieNames, secret, }: FastifySocialDeps<TAccount, TData>) => FastifySocial<TAccount, TData>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=social.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.d.ts","sourceRoot":"","sources":["../../../src/adapters/fastify/social.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EACR,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,cAAc,EACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,KAAK,iBAAiB,CAAC,QAAQ,SAAS,WAAW,EAAE,KAAK,IAAI;IAC1D,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC9B,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF,KAAK,yBAAyB,CAAC,KAAK,IAAI,kBAAkB,GAAG;IACzD,IAAI,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnG,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAAE,KAAK,GAAG,SAAS,IAAI;IACvF,oBAAoB,CAChB,KAAK,EAAE,yBAAyB,CAAC,KAAK,CAAC,GACxC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1C,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,cAAc,CAAC;IAC3D,MAAM,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAWF,eAAO,MAAM,mBAAmB,GAAI,QAAQ,SAAS,WAAW,EAAE,KAAK,EAAE,qDAMtE,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CA2CpE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { createHttpSocial } from "../utils/social.js";
|
|
2
|
+
const getValue = ({ name, value }) => {
|
|
3
|
+
if (typeof value !== "object" || value === null) {
|
|
4
|
+
return undefined;
|
|
5
|
+
}
|
|
6
|
+
const field = value[name];
|
|
7
|
+
return typeof field === "string" ? field : undefined;
|
|
8
|
+
};
|
|
9
|
+
export const createFastifySocial = ({ config, cookie, db, sessionCookieNames, secret, }) => {
|
|
10
|
+
const social = createHttpSocial({
|
|
11
|
+
appendSetCookie: ({ response, value }) => {
|
|
12
|
+
response.header("Set-Cookie", value);
|
|
13
|
+
},
|
|
14
|
+
config,
|
|
15
|
+
cookie,
|
|
16
|
+
db,
|
|
17
|
+
getHeader: ({ name, request }) => {
|
|
18
|
+
const value = request.headers[name];
|
|
19
|
+
return Array.isArray(value) ? value[0] : value;
|
|
20
|
+
},
|
|
21
|
+
getParam: ({ name, request }) => getValue({ name, value: request.params }),
|
|
22
|
+
getQuery: ({ name, request }) => getValue({ name, value: request.query }),
|
|
23
|
+
sessionCookieNames,
|
|
24
|
+
secret,
|
|
25
|
+
});
|
|
26
|
+
const handle = async (request, reply) => {
|
|
27
|
+
const result = await social.handle({ request, response: reply });
|
|
28
|
+
if (result.type === "not_found") {
|
|
29
|
+
reply.callNotFound();
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (result.type === "redirect") {
|
|
33
|
+
reply.redirect(result.url);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
request.setDecorator("social", result.value);
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
completeRegistration: ({ data, reply, request }) => {
|
|
40
|
+
return social.completeRegistration({ data, request, response: reply });
|
|
41
|
+
},
|
|
42
|
+
getRegistration: ({ reply, request }) => {
|
|
43
|
+
return social.getRegistration({ request, response: reply });
|
|
44
|
+
},
|
|
45
|
+
handle,
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=social.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.js","sourceRoot":"","sources":["../../../src/adapters/fastify/social.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA8BtD,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAoC,EAAsB,EAAE;IACvF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,KAAK,GAAI,KAAiC,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAsC,EACrE,MAAM,EACN,MAAM,EACN,EAAE,EACF,kBAAkB,EAClB,MAAM,GAC2B,EAAkC,EAAE;IACrE,MAAM,MAAM,GAAG,gBAAgB,CAAgD;QAC3E,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;YACrC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,MAAM;QACN,MAAM;QACN,EAAE;QACF,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACnD,CAAC;QACD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1E,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QACzE,kBAAkB;QAClB,MAAM;KACT,CAAC,CAAC;IAEH,MAAM,MAAM,GAAyB,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjE,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,KAAK,CAAC,YAAY,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7B,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC;IAEF,OAAO;QACH,oBAAoB,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/C,OAAO,MAAM,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;YACpC,OAAO,MAAM,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,MAAM;KACT,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { Context, Env, MiddlewareHandler } from "hono";
|
|
2
2
|
import { type Auth, type AuthDeps } from "../../auth.js";
|
|
3
|
-
import {
|
|
3
|
+
import type { SessionCookieNames } from "../../session/cookie.js";
|
|
4
|
+
import type { SessionCacheConfig } from "../../session/state.js";
|
|
4
5
|
import type { AuthAccount, DbAdapter, ResolvedSession, Session } from "../../session/types.js";
|
|
5
6
|
import type { SocialConfig, SocialDbAdapter } from "../../social/types.js";
|
|
7
|
+
import type { HttpCookieConfig } from "../utils/types.js";
|
|
6
8
|
import { type HonoSocial } from "./social.js";
|
|
7
|
-
|
|
8
|
-
export type { SessionCacheConfig } from "../../session/cache.js";
|
|
9
|
+
export type { SessionCacheConfig } from "../../session/state.js";
|
|
9
10
|
export type { HonoSocial, HonoSocialEnv, HonoSocialVariables } from "./social.js";
|
|
10
11
|
export type HonoAuthVariables<TAccount extends AuthAccount = AuthAccount> = {
|
|
11
12
|
account: TAccount;
|
|
@@ -15,45 +16,31 @@ export type HonoAuthVariables<TAccount extends AuthAccount = AuthAccount> = {
|
|
|
15
16
|
export type HonoAuthEnv<TAccount extends AuthAccount = AuthAccount> = Env & {
|
|
16
17
|
Variables: HonoAuthVariables<TAccount>;
|
|
17
18
|
};
|
|
18
|
-
export type HonoCookieConfig =
|
|
19
|
-
cacheName?: string;
|
|
20
|
-
domain?: string;
|
|
21
|
-
path?: string;
|
|
22
|
-
renewName?: string;
|
|
23
|
-
sameSite?: "Strict" | "Lax" | "None";
|
|
24
|
-
secure?: boolean;
|
|
25
|
-
sessionName?: string;
|
|
26
|
-
};
|
|
19
|
+
export type HonoCookieConfig = HttpCookieConfig;
|
|
27
20
|
export type HonoGetIp = (c: Context) => Promise<string | null | undefined> | string | null | undefined;
|
|
28
|
-
type HonoCacheOptions = {
|
|
29
|
-
cache: SessionCacheConfig;
|
|
30
|
-
secret: string;
|
|
31
|
-
} | {
|
|
32
|
-
cache?: undefined;
|
|
33
|
-
secret?: string;
|
|
34
|
-
};
|
|
35
21
|
export type HonoAdapterConfig<TAccount extends AuthAccount = AuthAccount> = {
|
|
36
22
|
auth: Auth<TAccount>;
|
|
37
23
|
cache?: SessionCacheConfig;
|
|
38
24
|
cookie?: HonoCookieConfig;
|
|
39
25
|
getIp?: HonoGetIp;
|
|
40
|
-
secret
|
|
26
|
+
secret: string;
|
|
41
27
|
};
|
|
42
28
|
type HonoAuthBase<TAccount extends AuthAccount> = Omit<AuthDeps<TAccount>, "db"> & {
|
|
29
|
+
cache?: SessionCacheConfig;
|
|
43
30
|
cookie?: HonoCookieConfig;
|
|
44
31
|
db: DbAdapter<TAccount>;
|
|
45
32
|
getIp?: HonoGetIp;
|
|
33
|
+
secret: string;
|
|
46
34
|
};
|
|
47
35
|
type HonoSocialOptions<TAccount extends AuthAccount, TData> = {
|
|
48
36
|
db: DbAdapter<TAccount> & SocialDbAdapter<TAccount>;
|
|
49
|
-
secret: string;
|
|
50
37
|
social: SocialConfig<TData>;
|
|
51
38
|
} | {
|
|
52
39
|
db: DbAdapter<TAccount>;
|
|
53
40
|
social?: undefined;
|
|
54
41
|
};
|
|
55
|
-
export type HonoAuthConfig<TAccount extends AuthAccount = AuthAccount, TData = undefined> = Omit<HonoAuthBase<TAccount>, "db"> &
|
|
56
|
-
type HonoAuthOptions<TAccount extends AuthAccount> = Omit<HonoAuthBase<TAccount>, "db"
|
|
42
|
+
export type HonoAuthConfig<TAccount extends AuthAccount = AuthAccount, TData = undefined> = Omit<HonoAuthBase<TAccount>, "db"> & HonoSocialOptions<TAccount, TData>;
|
|
43
|
+
type HonoAuthOptions<TAccount extends AuthAccount> = Omit<HonoAuthBase<TAccount>, "db">;
|
|
57
44
|
type DbAccount<TDb> = TDb extends DbAdapter<infer TAccount> ? TAccount : never;
|
|
58
45
|
type CreateSessionInput = {
|
|
59
46
|
account_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/hono/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/hono/index.ts"],"names":[],"mappings":"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"}
|