@seamless-auth/core 0.1.1 → 0.2.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.
@@ -0,0 +1,23 @@
1
+ import type { CookiePayload } from "../ensureCookies.js";
2
+ export interface PollMagicLinkConfirmationInput {
3
+ authorization?: string;
4
+ }
5
+ export interface PollMagicLinkConfirmationOptions {
6
+ authServerUrl: string;
7
+ cookieDomain?: string;
8
+ accessCookieName: string;
9
+ refreshCookieName: string;
10
+ }
11
+ export interface PollMagicLinkConfirmationResult {
12
+ status: number;
13
+ body?: unknown;
14
+ error?: unknown;
15
+ setCookies?: {
16
+ name: string;
17
+ value: CookiePayload;
18
+ ttl: number;
19
+ domain?: string;
20
+ }[];
21
+ }
22
+ export declare function pollMagicLinkConfirmationHandler(input: PollMagicLinkConfirmationInput, opts: PollMagicLinkConfirmationOptions): Promise<PollMagicLinkConfirmationResult>;
23
+ //# sourceMappingURL=pollMagicLinkConfirmationHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pollMagicLinkConfirmationHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/pollMagicLinkConfirmationHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,MAAM,WAAW,8BAA8B;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gCAAgC;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;CACL;AAED,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,8BAA8B,EACrC,IAAI,EAAE,gCAAgC,GACrC,OAAO,CAAC,+BAA+B,CAAC,CAuE1C"}
@@ -0,0 +1,64 @@
1
+ import { authFetch } from "../authFetch.js";
2
+ import { verifySignedAuthResponse } from "../verifySignedAuthResponse.js";
3
+ export async function pollMagicLinkConfirmationHandler(input, opts) {
4
+ const up = await authFetch(`${opts.authServerUrl}/magic-link/check`, {
5
+ method: "GET",
6
+ authorization: input.authorization,
7
+ });
8
+ // 👇 Pending state (important for polling UX)
9
+ if (up.status === 204) {
10
+ return {
11
+ status: 204,
12
+ body: { message: "Not verified." },
13
+ };
14
+ }
15
+ const data = await up.json();
16
+ if (!up.ok) {
17
+ return {
18
+ status: up.status,
19
+ error: data,
20
+ };
21
+ }
22
+ // 👇 Web mode: auth server already handled cookies
23
+ if (!data?.token || !data?.refreshToken || !data?.sub) {
24
+ return {
25
+ status: up.status,
26
+ body: data,
27
+ };
28
+ }
29
+ // 🔐 Verify signed response (same as WebAuthn flow)
30
+ const verifiedAccessToken = await verifySignedAuthResponse(data.token, opts.authServerUrl);
31
+ if (!verifiedAccessToken) {
32
+ throw new Error("Invalid signed response from Auth Server");
33
+ }
34
+ if (verifiedAccessToken.sub !== data.sub) {
35
+ throw new Error("Signature mismatch with data payload");
36
+ }
37
+ return {
38
+ status: 200,
39
+ body: data,
40
+ setCookies: [
41
+ {
42
+ name: opts.accessCookieName,
43
+ value: {
44
+ sub: data.sub,
45
+ roles: data.roles,
46
+ email: data.email,
47
+ phone: data.phone,
48
+ },
49
+ ttl: data.ttl,
50
+ domain: opts.cookieDomain,
51
+ },
52
+ {
53
+ name: opts.refreshCookieName,
54
+ value: {
55
+ sub: data.sub,
56
+ refreshToken: data.refreshToken,
57
+ },
58
+ ttl: data.refreshTtl,
59
+ domain: opts.cookieDomain,
60
+ },
61
+ ],
62
+ };
63
+ }
64
+ //# sourceMappingURL=pollMagicLinkConfirmationHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pollMagicLinkConfirmationHandler.js","sourceRoot":"","sources":["../../src/handlers/pollMagicLinkConfirmationHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAyB1E,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,KAAqC,EACrC,IAAsC;IAEtC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,mBAAmB,EAAE;QACnE,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,KAAK,CAAC,aAAa;KACnC,CAAC,CAAC;IAEH,8CAA8C;IAC9C,IAAI,EAAE,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;SACnC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACX,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;QACtD,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,IAAI,EAAE,IAAI;SACX,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,MAAM,mBAAmB,GAAG,MAAM,wBAAwB,CACxD,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,aAAa,CACnB,CAAC;IAEF,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,mBAAmB,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,IAAI;QACV,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,IAAI,CAAC,gBAAgB;gBAC3B,KAAK,EAAE;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB;gBACD,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,YAAY;aAC1B;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,iBAAiB;gBAC5B,KAAK,EAAE;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,YAAY,EAAE,IAAI,CAAC,YAAY;iBAChC;gBACD,GAAG,EAAE,IAAI,CAAC,UAAU;gBACpB,MAAM,EAAE,IAAI,CAAC,YAAY;aAC1B;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface RequestMagicLinkInput {
2
+ authorization?: string;
3
+ }
4
+ export interface RequestMagicLinkOptions {
5
+ authServerUrl: string;
6
+ }
7
+ export interface RequestMagicLinkResult {
8
+ status: number;
9
+ body?: unknown;
10
+ error?: unknown;
11
+ }
12
+ export declare function requestMagicLinkHandler(input: RequestMagicLinkInput, opts: RequestMagicLinkOptions): Promise<RequestMagicLinkResult>;
13
+ //# sourceMappingURL=requestMagicLinkHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestMagicLinkHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/requestMagicLinkHandler.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,qBAAqB,EAC5B,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CAmBjC"}
@@ -0,0 +1,19 @@
1
+ import { authFetch } from "../authFetch.js";
2
+ export async function requestMagicLinkHandler(input, opts) {
3
+ const up = await authFetch(`${opts.authServerUrl}/magic-link`, {
4
+ method: "GET",
5
+ authorization: input.authorization,
6
+ });
7
+ const data = await up.json();
8
+ if (!up.ok) {
9
+ return {
10
+ status: up.status,
11
+ error: data,
12
+ };
13
+ }
14
+ return {
15
+ status: up.status,
16
+ body: data,
17
+ };
18
+ }
19
+ //# sourceMappingURL=requestMagicLinkHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestMagicLinkHandler.js","sourceRoot":"","sources":["../../src/handlers/requestMagicLinkHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgB5C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAA4B,EAC5B,IAA6B;IAE7B,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,aAAa,EAAE;QAC7D,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,KAAK,CAAC,aAAa;KACnC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACX,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface VerifyMagicLinkInput {
2
+ token: string;
3
+ }
4
+ export interface VerifyMagicLinkOptions {
5
+ authServerUrl: string;
6
+ }
7
+ export interface VerifyMagicLinkResult {
8
+ status: number;
9
+ body?: unknown;
10
+ error?: unknown;
11
+ }
12
+ export declare function verifyMagicLinkHandler(input: VerifyMagicLinkInput, opts: VerifyMagicLinkOptions): Promise<VerifyMagicLinkResult>;
13
+ //# sourceMappingURL=verifyMagicLinkHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyMagicLinkHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/verifyMagicLinkHandler.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CAqBhC"}
@@ -0,0 +1,18 @@
1
+ import { authFetch } from "../authFetch.js";
2
+ export async function verifyMagicLinkHandler(input, opts) {
3
+ const up = await authFetch(`${opts.authServerUrl}/magic-link/verify/${input.token}`, {
4
+ method: "GET",
5
+ });
6
+ const data = await up.json();
7
+ if (!up.ok) {
8
+ return {
9
+ status: up.status,
10
+ error: data,
11
+ };
12
+ }
13
+ return {
14
+ status: up.status,
15
+ body: data,
16
+ };
17
+ }
18
+ //# sourceMappingURL=verifyMagicLinkHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyMagicLinkHandler.js","sourceRoot":"","sources":["../../src/handlers/verifyMagicLinkHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgB5C,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAA2B,EAC3B,IAA4B;IAE5B,MAAM,EAAE,GAAG,MAAM,SAAS,CACxB,GAAG,IAAI,CAAC,aAAa,sBAAsB,KAAK,CAAC,KAAK,EAAE,EACxD;QACE,MAAM,EAAE,KAAK;KACd,CACF,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACX,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -10,4 +10,7 @@ export * from "./handlers/register.js";
10
10
  export * from "./handlers/finishRegister.js";
11
11
  export * from "./handlers/logout.js";
12
12
  export * from "./handlers/me.js";
13
+ export * from "./handlers/verifyMagicLinkHandler.js";
14
+ export * from "./handlers/requestMagicLinkHandler.js";
15
+ export * from "./handlers/pollMagicLinkConfirmationHandler.js";
13
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AAExC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AAExC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gDAAgD,CAAC"}
package/dist/index.js CHANGED
@@ -10,4 +10,7 @@ export * from "./handlers/register.js";
10
10
  export * from "./handlers/finishRegister.js";
11
11
  export * from "./handlers/logout.js";
12
12
  export * from "./handlers/me.js";
13
+ export * from "./handlers/verifyMagicLinkHandler.js";
14
+ export * from "./handlers/requestMagicLinkHandler.js";
15
+ export * from "./handlers/pollMagicLinkConfirmationHandler.js";
13
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AAExC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AAExC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gDAAgD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamless-auth/core",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Framework-agnostic core authentication logic for SeamlessAuth",
5
5
  "license": "AGPL-3.0-only",
6
6
  "author": "Fells Code, LLC",