@sanoma-ai/connector-better-auth 0.2.0 → 0.2.1

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @sanoma-ai/connector-better-auth
2
2
 
3
- [Better Auth](https://www.better-auth.com) as a visitor login for a [Sanoma](https://github.com/Sanoma-AI/sanoma) public site, and as the app's staff sign-in on a host: visitors sign up and sign in with an email and a password (or an email code), staff by an email code, an invite link or GitHub, and the accounts live on the company's own database. It has no operations and no credential; it attaches a login half (`withSetup({ login })`, see [`@sanoma-ai/workflows`](https://www.npmjs.com/package/@sanoma-ai/workflows#usage)), which the app calls once for each public site that names it.
3
+ [Better Auth](https://www.better-auth.com) as a visitor login for a [Sanoma](https://github.com/Sanoma-AI/sanoma) public site, and as the app's staff sign-in on a host: visitors sign up and sign in with an email and a password (or an email code, or GitHub), staff by an email code, an invite link or GitHub, and the accounts live on the company's own database. It has no operations and no credential; it attaches a login half (`withSetup({ login })`, see [`@sanoma-ai/workflows`](https://www.npmjs.com/package/@sanoma-ai/workflows#usage)), which the app calls once for each public site that names it.
4
4
 
5
5
  ## Usage
6
6
 
@@ -64,6 +64,28 @@ The session is one cookie, `better-auth.session_token` (`__Secure-better-auth.se
64
64
 
65
65
  When the company's config names a sender (`login: { sender: resend.emails.send }`), the login also signs visitors in by a code mailed to them, sent as a run of the runtime's `login-code` workflow (under the policy and in the ledger). A visitor signed in by code has a verified email, which the app gives the principal (`ctx.startedBy.email` in a run they start); one signed up by password has none until they verify it.
66
66
 
67
+ ### GitHub
68
+
69
+ When the app has the company's GitHub App client (`SANOMA_GITHUB_CLIENT_ID` and `SANOMA_GITHUB_CLIENT_SECRET`, which `sanoma` reads on a host, the staff login's too), the login offers GitHub (`methods` lists `"github"`): a visitor signed in links their GitHub account, and is then said to be that GitHub login (`ctx.startedBy.github` in a run they start, `user.github` in the session). Add `https://<site host>/auth/better-auth/callback/github` to the App's callback URLs (its settings, "Callback URL"), one for each site's host.
70
+
71
+ | Route | Body | What it does |
72
+ | --------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
73
+ | `POST /auth/better-auth/link-social` | `{ provider: "github", callbackURL }` | Signed in: answers `{ url, redirect: true }`, GitHub's authorize page to send the browser to; back at `/callback/github`, it links the account, then `callbackURL`. |
74
+ | `POST /auth/better-auth/sign-in/social` | `{ provider: "github", callbackURL }` | The same, signed out: signs in a visitor who linked that GitHub account. GitHub links to an existing account and signs a linked account in; it never makes one (`?error=signup_disabled`). |
75
+ | `GET /auth/better-auth/get-session` | | `{ session, user }`, `user.github` the linked login, or null when signed out. |
76
+
77
+ ```ts
78
+ const response = await fetch("/auth/better-auth/link-social", {
79
+ method: "POST",
80
+ headers: { "content-type": "application/json" },
81
+ body: JSON.stringify({ provider: "github", callbackURL: location.pathname }),
82
+ });
83
+ const { url } = await response.json();
84
+ window.location.assign(url); // GitHub, then back on this page with the account linked
85
+ ```
86
+
87
+ Each `callbackURL` (and `errorCallbackURL`, where an error goes as `?error=<code>`) is a path on the site's host. A GitHub account links to one visitor only (`?error=account_already_linked_to_different_user` for another), its email may differ from the visitor's, and GitHub must have verified it. The login is GitHub's answer for the account's own token when Better Auth links it (Better Auth sets no field a person may not set from a provider's profile), and is cleared when the visitor unlinks it (`POST /unlink-account { accountId }`, the account's id in `GET /list-accounts`). Linked, the account keeps no GitHub token: its login is read once, at each link or sign-in, and its tokens dropped, as a GitHub App's user token reaches what the App and the person both reach. A visitor links one GitHub account at most (another is `?error=unable_to_link_account`).
88
+
67
89
  ## The staff sign-in
68
90
 
69
91
  `betterAuthStaffLogin` is the app's sign-in for the company's own people on a host, which the `sanoma` bin uses off this machine (`staffLogin(betterAuthStaffLogin, { github })` from `@sanoma-ai/app`). Unlike the visitor login, nobody signs up: a code is sent, and an account made, only for an email the people file declares (anyone else gets the same answer, and nothing is stored or sent), or a GitHub login it declares. Its tables are in the schema `better_auth_staff`, migrated under the advisory lock `sanoma.login.better-auth.better_auth_staff`; its cookie is `sanoma.session_token`, for seven days, on whatever host the app answers on. Its ways in, under `/auth/better-auth/`:
@@ -634,3 +634,24 @@ export declare const emailCode: (sendCode?: (email: string, code: string) => Pro
634
634
  TOO_MANY_ATTEMPTS: import("better-auth").RawError<"TOO_MANY_ATTEMPTS">;
635
635
  };
636
636
  };
637
+ /** Whether each redirect a request names is a path on its own host: `/x`, never `//x` or another origin. */
638
+ export declare const localRedirects: (url: URL) => boolean;
639
+ /** The user's `github` column, the GitHub login: never a person's input, so only the login sets it. */
640
+ export declare const GITHUB_FIELD: {
641
+ github: {
642
+ type: "string";
643
+ required: boolean;
644
+ input: boolean;
645
+ };
646
+ };
647
+ /** A user row, as far as who it vouches for reads it. */
648
+ export interface User {
649
+ email: string;
650
+ emailVerified: boolean;
651
+ github?: string | null;
652
+ }
653
+ /** What a user row vouches for: the email when verified, the GitHub login when GitHub said it. */
654
+ export declare const identityOf: (user: User) => {
655
+ email?: string | undefined;
656
+ github?: string | undefined;
657
+ };
package/dist/instance.js CHANGED
@@ -119,4 +119,18 @@ export const emailCode = (sendCode) => emailOTP({
119
119
  await sendCode?.(email, otp);
120
120
  },
121
121
  });
122
+ /** The query parameters Better Auth redirects to. */
123
+ const REDIRECTS = ["callbackURL", "errorCallbackURL", "newUserCallbackURL"];
124
+ /** Whether each redirect a request names is a path on its own host: `/x`, never `//x` or another origin. */
125
+ export const localRedirects = (url) => REDIRECTS.every((name) => {
126
+ const to = url.searchParams.get(name);
127
+ return to === null || (to.startsWith("/") && !to.startsWith("//") && !to.startsWith("/\\"));
128
+ });
129
+ /** The user's `github` column, the GitHub login: never a person's input, so only the login sets it. */
130
+ export const GITHUB_FIELD = { github: { type: "string", required: false, input: false } };
131
+ /** What a user row vouches for: the email when verified, the GitHub login when GitHub said it. */
132
+ export const identityOf = (user) => ({
133
+ ...(user.emailVerified && { email: user.email }),
134
+ ...(user.github && { github: user.github }),
135
+ });
122
136
  //# sourceMappingURL=instance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"instance.js","sourceRoot":"","sources":["../src/instance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instance.js","sourceRoot":"","sources":["../src/instance.ts"],"names":[],"mappings":"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"}
package/dist/login.d.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import type { LoginContext, LoginHalf } from "@sanoma-ai/workflows";
2
2
  /**
3
3
  * Better Auth's login half for one public site: email and password, and an email code when the
4
- * app can send one (`context.sendCode`); every email may sign up. Its tables are in schema
5
- * `better_auth` on the company's database, migrated here before the first site starts, its
6
- * cookies signed with the app's key for it (`context.key`). The site's origins are its allowed
7
- * hosts (a request for another host is refused) and set the cookie's `Secure` flag: an `https`
8
- * origin's is.
4
+ * app can send one (`context.sendCode`); every email may sign up. With the company's GitHub client
5
+ * (`context.social.github`), a visitor signed in links their GitHub account
6
+ * (`/link-social`), then may sign in with it (`/sign-in/social`, which never makes an account), and is then said to be that GitHub
7
+ * login (`verify`'s `github`). Its tables are in schema `better_auth` on the company's database,
8
+ * migrated here before the first site starts, its cookies signed with the app's key for it
9
+ * (`context.key`). The site's origins are its allowed hosts (a request for another host is
10
+ * refused) and set the cookie's `Secure` flag: an `https` origin's is.
9
11
  */
10
- export declare function betterAuthLogin({ databaseUrl, key, origins, sendCode }: LoginContext): Promise<LoginHalf>;
12
+ export declare function betterAuthLogin({ databaseUrl, key, origins, sendCode, social, }: LoginContext): Promise<LoginHalf>;
package/dist/login.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { getHostFromSource, matchesHostPattern } from "better-auth";
2
- import { emailCode, openBetterAuth, withSignOutBody } from "./instance.js";
2
+ import { emailCode, GITHUB_FIELD, identityOf, localRedirects, openBetterAuth, withSignOutBody, } from "./instance.js";
3
3
  /** The schema Better Auth's tables (`user`, `session`, `account`, `verification`) live in, on the company's database. */
4
4
  const SCHEMA = "better_auth";
5
5
  /** Where its routes are: a site's pages POST to `<BASE_PATH>/sign-up/email`, `/sign-in/email`, `/sign-in/email-otp`… */
@@ -7,13 +7,16 @@ const BASE_PATH = "/auth/better-auth";
7
7
  const SIGN_OUT = `${BASE_PATH}/sign-out`;
8
8
  /**
9
9
  * Better Auth's login half for one public site: email and password, and an email code when the
10
- * app can send one (`context.sendCode`); every email may sign up. Its tables are in schema
11
- * `better_auth` on the company's database, migrated here before the first site starts, its
12
- * cookies signed with the app's key for it (`context.key`). The site's origins are its allowed
13
- * hosts (a request for another host is refused) and set the cookie's `Secure` flag: an `https`
14
- * origin's is.
10
+ * app can send one (`context.sendCode`); every email may sign up. With the company's GitHub client
11
+ * (`context.social.github`), a visitor signed in links their GitHub account
12
+ * (`/link-social`), then may sign in with it (`/sign-in/social`, which never makes an account), and is then said to be that GitHub
13
+ * login (`verify`'s `github`). Its tables are in schema `better_auth` on the company's database,
14
+ * migrated here before the first site starts, its cookies signed with the app's key for it
15
+ * (`context.key`). The site's origins are its allowed hosts (a request for another host is
16
+ * refused) and set the cookie's `Secure` flag: an `https` origin's is.
15
17
  */
16
- export async function betterAuthLogin({ databaseUrl, key, origins, sendCode }) {
18
+ export async function betterAuthLogin({ databaseUrl, key, origins, sendCode, social, }) {
19
+ const github = social?.github;
17
20
  const sites = sitesOf(origins);
18
21
  const hosts = new Map();
19
22
  for (const { protocol, host } of sites)
@@ -27,6 +30,24 @@ export async function betterAuthLogin({ databaseUrl, key, origins, sendCode }) {
27
30
  options: {
28
31
  emailAndPassword: { enabled: true },
29
32
  plugins: sendCode ? [emailCode(sendCode)] : [],
33
+ user: { additionalFields: GITHUB_FIELD },
34
+ ...(github && {
35
+ // GitHub never makes an account, nor joins one by its email: a visitor signs up by email,
36
+ // links GitHub (`/link-social`), and may then sign in with it.
37
+ socialProviders: {
38
+ github: { clientId: github.clientId, clientSecret: github.clientSecret, disableSignUp: true },
39
+ },
40
+ // A visitor's GitHub email is seldom the one they signed in with. Linking still needs
41
+ // GitHub to have verified its email (GitHub is no trusted provider).
42
+ account: { accountLinking: { allowDifferentEmails: true, disableImplicitLinking: true } },
43
+ databaseHooks: {
44
+ account: {
45
+ create: { before: oneGitHub, after: noteLogin },
46
+ update: { after: noteLogin },
47
+ delete: { after: forgetLogin },
48
+ },
49
+ },
50
+ }),
30
51
  },
31
52
  });
32
53
  /** The instance for the request's host, or none for a host that is not the site's. */
@@ -35,7 +56,11 @@ export async function betterAuthLogin({ databaseUrl, key, origins, sendCode }) {
35
56
  const site = sites.find((s) => matchesHostPattern(host, s.host));
36
57
  return site && auths.get(site.protocol);
37
58
  };
38
- const methods = ["password", ...(sendCode ? ["code"] : [])];
59
+ const methods = [
60
+ "password",
61
+ ...(sendCode ? ["code"] : []),
62
+ ...(github ? ["github"] : []),
63
+ ];
39
64
  return {
40
65
  async verify(request) {
41
66
  const auth = authFor(request);
@@ -45,8 +70,7 @@ export async function betterAuthLogin({ databaseUrl, key, origins, sendCode }) {
45
70
  const session = await auth.api.getSession({ headers: request.headers });
46
71
  if (!session)
47
72
  return null;
48
- const { id, email, emailVerified } = session.user;
49
- return { subject: id, ...(emailVerified && { email }) };
73
+ return { subject: session.user.id, ...identityOf(session.user) };
50
74
  },
51
75
  async handle(request) {
52
76
  const { pathname } = new URL(request.url);
@@ -56,6 +80,9 @@ export async function betterAuthLogin({ databaseUrl, key, origins, sendCode }) {
56
80
  const auth = authFor(request);
57
81
  if (!auth)
58
82
  return new Response("Misdirected Request", { status: 421 });
83
+ // Better Auth checks a redirect in a body against the site's hosts; one in the query must be a path here.
84
+ if (!localRedirects(new URL(request.url)))
85
+ return new Response("Bad Request", { status: 400 });
59
86
  return auth.handler(withSignOutBody(request, SIGN_OUT));
60
87
  },
61
88
  signOut: SIGN_OUT,
@@ -63,6 +90,38 @@ export async function betterAuthLogin({ databaseUrl, key, origins, sendCode }) {
63
90
  close,
64
91
  };
65
92
  }
93
+ /** A visitor has one GitHub account at most: another is refused (Better Auth's `unable_to_link_account`). */
94
+ async function oneGitHub(account, ctx) {
95
+ if (account.providerId !== "github" || !ctx)
96
+ return;
97
+ const accounts = await ctx.context.internalAdapter.findAccounts(account.userId);
98
+ if (accounts.some((a) => a.providerId === "github"))
99
+ return false;
100
+ }
101
+ /**
102
+ * Keeps a GitHub account's login on its user, once Better Auth has linked it or signed its user
103
+ * in with it (GitHub's redirect back, `/callback/:id`), then drops the account's tokens, which
104
+ * nothing here uses again: a GitHub App's user token reaches what the App and the person both
105
+ * reach. The login is the provider's profile for that token, since Better Auth sets no field from
106
+ * a profile that a person may not set (`input: false`), the GitHub login among them.
107
+ */
108
+ async function noteLogin(account, ctx) {
109
+ if (account?.providerId !== "github" || !account.accessToken || ctx?.path !== "/callback/:id")
110
+ return;
111
+ const { internalAdapter, socialProviders } = ctx.context;
112
+ const provider = socialProviders.find((p) => p.id === "github");
113
+ const info = (await provider.getUserInfo({ accessToken: account.accessToken }));
114
+ const login = info?.data?.login;
115
+ if (typeof login !== "string")
116
+ throw new Error("better-auth: GitHub did not say whose account was linked");
117
+ await internalAdapter.updateUser(account.userId, { github: login });
118
+ await internalAdapter.updateAccount(account.id, { accessToken: null, refreshToken: null, idToken: null });
119
+ }
120
+ /** A GitHub account unlinked: its user is no longer that login. */
121
+ async function forgetLogin(account, ctx) {
122
+ if (account?.providerId === "github" && ctx)
123
+ await ctx.context.internalAdapter.updateUser(account.userId, { github: null });
124
+ }
66
125
  /** Each origin's host, as Better Auth's `allowedHosts` has it (`account.localhost:*`), and its protocol. */
67
126
  function sitesOf(origins) {
68
127
  if (!origins.length)
package/dist/login.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EACL,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,cAAc,EAGd,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,yHAAyH;AACzH,MAAM,MAAM,GAAG,aAAa,CAAC;AAC7B,wHAAwH;AACxH,MAAM,SAAS,GAAG,mBAAmB,CAAC;AACtC,MAAM,QAAQ,GAAG,GAAG,SAAS,WAAW,CAAC;AAqBzC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,WAAW,EACX,GAAG,EACH,OAAO,EACP,QAAQ,EACR,MAAM,GACO;IACb,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,KAAK;QAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACpG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC;QAC5C,WAAW;QACX,GAAG;QACH,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,SAAS;QACnB,KAAK;QACL,OAAO,EAAE;YACP,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACnC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YAC9C,IAAI,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE;YACxC,GAAG,CAAC,MAAM,IAAI;gBACZ,0FAA0F;gBAC1F,+DAA+D;gBAC/D,eAAe,EAAE;oBACf,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE;iBAC9F;gBACD,sFAAsF;gBACtF,qEAAqE;gBACrE,OAAO,EAAE,EAAE,cAAc,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,EAAE;gBACzF,aAAa,EAAE;oBACb,OAAO,EAAE;wBACP,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;wBAC/C,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;wBAC5B,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;qBAC/B;iBACF;aACF,CAAC;SACH;KACF,CAAC,CAAC;IACH,sFAAsF;IACtF,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,OAAO,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,MAAM,OAAO,GAAkB;QAC7B,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;KACzC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAO;YAClB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YACzG,gDAAgD;YAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC1B,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,IAAY,CAAC,EAAE,CAAC;QAC3E,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,OAAO;YAClB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YACtF,yEAAyE;YACzE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,QAAQ,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACvE,0GAA0G;YAC1G,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,IAAI,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/F,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,EAAE,QAAQ;QACjB,OAAO;QACP,KAAK;KACN,CAAC;AACJ,CAAC;AAED,6GAA6G;AAC7G,KAAK,UAAU,SAAS,CAAC,OAAsB,EAAE,GAAuB;IACtE,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,GAAG;QAAE,OAAO;IACpD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,SAAS,CAAC,OAA6B,EAAE,GAAuB;IAC7E,IAAI,OAAO,EAAE,UAAU,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,GAAG,EAAE,IAAI,KAAK,eAAe;QAAE,OAAO;IACtG,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;IACzD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAE,CAAC;IACjE,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAmC,CAAC;IAClH,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC3G,MAAM,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,MAAM,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5G,CAAC;AAED,mEAAmE;AACnE,KAAK,UAAU,WAAW,CAAC,OAA6B,EAAE,GAAuB;IAC/E,IAAI,OAAO,EAAE,UAAU,KAAK,QAAQ,IAAI,GAAG;QACzC,MAAM,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,4GAA4G;AAC5G,SAAS,OAAO,CAAC,OAA0B;IACzC,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5B,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACvE,IAAI,CAAC,IAAI;YACP,MAAM,IAAI,KAAK,CACb,yFAAyF,MAAM,EAAE,CAClG,CAAC;QACJ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAoB,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/staff.js CHANGED
@@ -2,7 +2,7 @@ import { INVITE_SECONDS, sameOrigin, } from "@sanoma-ai/workflows";
2
2
  import { createAuthMiddleware } from "better-auth/api";
3
3
  import { magicLink } from "better-auth/plugins/magic-link";
4
4
  import { createHash } from "node:crypto";
5
- import { emailCode, openBetterAuth, protocolOf, withSignOutBody } from "./instance.js";
5
+ import { emailCode, GITHUB_FIELD, identityOf, localRedirects, openBetterAuth, protocolOf, withSignOutBody, } from "./instance.js";
6
6
  // The staff login: Better Auth again, as a second instance in a schema of its own, signing in only
7
7
  // the people the files declare. An email code to a declared email, GitHub through the company's
8
8
  // own client, and invites (one-use magic links the app mints for a declared email); no password.
@@ -60,7 +60,7 @@ export async function betterAuthStaffLogin({ databaseUrl, key, sendCode, staff }
60
60
  ]),
61
61
  options: {
62
62
  session: { expiresIn: SESSION_SECONDS },
63
- user: { additionalFields: { github: { type: "string", required: false, input: false } } },
63
+ user: { additionalFields: GITHUB_FIELD },
64
64
  advanced: { cookiePrefix: "sanoma" },
65
65
  ...(github && {
66
66
  socialProviders: {
@@ -180,18 +180,6 @@ export async function betterAuthStaffLogin({ databaseUrl, key, sendCode, staff }
180
180
  close,
181
181
  };
182
182
  }
183
- /** What a user row vouches for: the email when verified, the GitHub login when they signed in with GitHub. */
184
- const identityOf = (user) => ({
185
- ...(user.emailVerified && { email: user.email }),
186
- ...(user.github && { github: user.github }),
187
- });
188
- /** The query parameters Better Auth redirects to. */
189
- const REDIRECTS = ["callbackURL", "errorCallbackURL", "newUserCallbackURL"];
190
- /** Whether each redirect a request names is a path on its own host: `/x`, never `//x` or another origin. */
191
- const localRedirects = (url) => REDIRECTS.every((name) => {
192
- const to = url.searchParams.get(name);
193
- return to === null || (to.startsWith("/") && !to.startsWith("//") && !to.startsWith("/\\"));
194
- });
195
183
  /** A token as the magic link plugin stores it (`storeToken: "hashed"`): SHA-256, base64url without padding. */
196
184
  const hashed = (token) => createHash("sha256").update(token).digest("base64url");
197
185
  //# sourceMappingURL=staff.js.map
package/dist/staff.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"staff.js","sourceRoot":"","sources":["../src/staff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"staff.js","sourceRoot":"","sources":["../src/staff.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanoma-ai/connector-better-auth",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Better Auth for Sanoma: the visitor login of public sites (email and password, or an email code) and the staff sign-in on a host (email code, invite links, GitHub), on the company's own database",
5
5
  "keywords": [
6
6
  "auth",
@@ -44,13 +44,13 @@
44
44
  "pg": "^8.23.1"
45
45
  },
46
46
  "devDependencies": {
47
- "@sanoma-ai/app": "0.10.2",
47
+ "@sanoma-ai/app": "0.10.3",
48
48
  "@sanoma-ai/testing": "0.1.0",
49
- "@sanoma-ai/workflows": "0.10.3",
49
+ "@sanoma-ai/workflows": "0.10.7",
50
50
  "@types/pg": "^8.23.1"
51
51
  },
52
52
  "peerDependencies": {
53
- "@sanoma-ai/workflows": "^0.10.3"
53
+ "@sanoma-ai/workflows": "^0.10.7"
54
54
  },
55
55
  "engines": {
56
56
  "node": ">=26"