@seamless-auth/core 0.7.0 → 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.
Files changed (92) hide show
  1. package/README.md +16 -0
  2. package/dist/authFetch.d.ts.map +1 -1
  3. package/dist/authFetch.js +3 -5
  4. package/dist/authFetch.js.map +1 -1
  5. package/dist/authMessaging.d.ts +0 -13
  6. package/dist/authMessaging.d.ts.map +1 -1
  7. package/dist/createServiceToken.d.ts.map +1 -1
  8. package/dist/createServiceToken.js +2 -0
  9. package/dist/createServiceToken.js.map +1 -1
  10. package/dist/ensureCookies.d.ts.map +1 -1
  11. package/dist/ensureCookies.js +32 -4
  12. package/dist/ensureCookies.js.map +1 -1
  13. package/dist/getSeamlessUser.d.ts +17 -2
  14. package/dist/getSeamlessUser.d.ts.map +1 -1
  15. package/dist/getSeamlessUser.js +4 -1
  16. package/dist/getSeamlessUser.js.map +1 -1
  17. package/dist/handlers/admin.d.ts +1 -0
  18. package/dist/handlers/admin.d.ts.map +1 -1
  19. package/dist/handlers/admin.js +8 -7
  20. package/dist/handlers/admin.js.map +1 -1
  21. package/dist/handlers/finishLogin.d.ts +2 -0
  22. package/dist/handlers/finishLogin.d.ts.map +1 -1
  23. package/dist/handlers/finishLogin.js +2 -1
  24. package/dist/handlers/finishLogin.js.map +1 -1
  25. package/dist/handlers/finishRegister.d.ts +2 -0
  26. package/dist/handlers/finishRegister.d.ts.map +1 -1
  27. package/dist/handlers/finishRegister.js +2 -1
  28. package/dist/handlers/finishRegister.js.map +1 -1
  29. package/dist/handlers/internalMetrics.d.ts +2 -1
  30. package/dist/handlers/internalMetrics.d.ts.map +1 -1
  31. package/dist/handlers/internalMetrics.js +1 -0
  32. package/dist/handlers/internalMetrics.js.map +1 -1
  33. package/dist/handlers/login.d.ts +2 -0
  34. package/dist/handlers/login.d.ts.map +1 -1
  35. package/dist/handlers/login.js +2 -1
  36. package/dist/handlers/login.js.map +1 -1
  37. package/dist/handlers/logout.d.ts +1 -0
  38. package/dist/handlers/logout.d.ts.map +1 -1
  39. package/dist/handlers/logout.js +1 -0
  40. package/dist/handlers/logout.js.map +1 -1
  41. package/dist/handlers/me.d.ts +1 -0
  42. package/dist/handlers/me.d.ts.map +1 -1
  43. package/dist/handlers/me.js +1 -0
  44. package/dist/handlers/me.js.map +1 -1
  45. package/dist/handlers/oauthHandlers.d.ts +2 -0
  46. package/dist/handlers/oauthHandlers.d.ts.map +1 -1
  47. package/dist/handlers/oauthHandlers.js +3 -1
  48. package/dist/handlers/oauthHandlers.js.map +1 -1
  49. package/dist/handlers/pollMagicLinkConfirmationHandler.d.ts +1 -0
  50. package/dist/handlers/pollMagicLinkConfirmationHandler.d.ts.map +1 -1
  51. package/dist/handlers/pollMagicLinkConfirmationHandler.js +1 -2
  52. package/dist/handlers/pollMagicLinkConfirmationHandler.js.map +1 -1
  53. package/dist/handlers/sessions.d.ts +1 -0
  54. package/dist/handlers/sessions.d.ts.map +1 -1
  55. package/dist/handlers/sessions.js +2 -1
  56. package/dist/handlers/sessions.js.map +1 -1
  57. package/dist/handlers/switchOrganizationHandler.d.ts +2 -0
  58. package/dist/handlers/switchOrganizationHandler.d.ts.map +1 -1
  59. package/dist/handlers/switchOrganizationHandler.js +2 -1
  60. package/dist/handlers/switchOrganizationHandler.js.map +1 -1
  61. package/dist/handlers/systemConfig.d.ts +1 -0
  62. package/dist/handlers/systemConfig.d.ts.map +1 -1
  63. package/dist/handlers/systemConfig.js +3 -0
  64. package/dist/handlers/systemConfig.js.map +1 -1
  65. package/dist/handlers/verifyLoginOtpHandler.d.ts +2 -0
  66. package/dist/handlers/verifyLoginOtpHandler.d.ts.map +1 -1
  67. package/dist/handlers/verifyLoginOtpHandler.js +3 -2
  68. package/dist/handlers/verifyLoginOtpHandler.js.map +1 -1
  69. package/dist/handlers/verifyMagicLinkHandler.d.ts +1 -0
  70. package/dist/handlers/verifyMagicLinkHandler.d.ts.map +1 -1
  71. package/dist/handlers/verifyMagicLinkHandler.js +2 -1
  72. package/dist/handlers/verifyMagicLinkHandler.js.map +1 -1
  73. package/dist/index.d.ts +2 -0
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +2 -0
  76. package/dist/index.js.map +1 -1
  77. package/dist/refreshAccessToken.d.ts.map +1 -1
  78. package/dist/refreshAccessToken.js +26 -1
  79. package/dist/refreshAccessToken.js.map +1 -1
  80. package/dist/validateSecrets.d.ts +7 -0
  81. package/dist/validateSecrets.d.ts.map +1 -0
  82. package/dist/validateSecrets.js +14 -0
  83. package/dist/validateSecrets.js.map +1 -0
  84. package/dist/verifySignedAuthResponse.d.ts +1 -1
  85. package/dist/verifySignedAuthResponse.d.ts.map +1 -1
  86. package/dist/verifySignedAuthResponse.js +15 -2
  87. package/dist/verifySignedAuthResponse.js.map +1 -1
  88. package/package.json +15 -3
  89. package/dist/handlers/bootstrapAdminInvite.d.ts +0 -20
  90. package/dist/handlers/bootstrapAdminInvite.d.ts.map +0 -1
  91. package/dist/handlers/bootstrapAdminInvite.js +0 -29
  92. package/dist/handlers/bootstrapAdminInvite.js.map +0 -1
@@ -1,11 +1,24 @@
1
1
  import { createRemoteJWKSet, jwtVerify } from "jose";
2
- export async function verifySignedAuthResponse(token, authServerUrl) {
2
+ // jose caches keys and applies a refetch cooldown per JWKS instance, so the instance
3
+ // must outlive a single call. Memoize per JWKS URL (one per auth server, so the map
4
+ // stays tiny) instead of building a fresh, empty-cache instance on every verification.
5
+ const jwksByUrl = new Map();
6
+ function getJwks(jwksUrl) {
7
+ let jwks = jwksByUrl.get(jwksUrl);
8
+ if (!jwks) {
9
+ jwks = createRemoteJWKSet(new URL(jwksUrl));
10
+ jwksByUrl.set(jwksUrl, jwks);
11
+ }
12
+ return jwks;
13
+ }
14
+ export async function verifySignedAuthResponse(token, authServerUrl, audience) {
3
15
  try {
4
16
  const jwksUrl = new URL("/.well-known/jwks.json", authServerUrl).toString();
5
- const JWKS = createRemoteJWKSet(new URL(jwksUrl));
17
+ const JWKS = getJwks(jwksUrl);
6
18
  const { payload } = await jwtVerify(token, JWKS, {
7
19
  algorithms: ["RS256"],
8
20
  issuer: authServerUrl,
21
+ audience,
9
22
  });
10
23
  return payload;
11
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"verifySignedAuthResponse.js","sourceRoot":"","sources":["../src/verifySignedAuthResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAa,EACb,aAAqB;IAErB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAElD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;YAC/C,UAAU,EAAE,CAAC,OAAO,CAAC;YACrB,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QAEH,OAAO,OAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"verifySignedAuthResponse.js","sourceRoot":"","sources":["../src/verifySignedAuthResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAErD,qFAAqF;AACrF,oFAAoF;AACpF,uFAAuF;AACvF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiD,CAAC;AAE3E,SAAS,OAAO,CAAC,OAAe;IAC9B,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAa,EACb,aAAqB,EACrB,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAE9B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;YAC/C,UAAU,EAAE,CAAC,OAAO,CAAC;YACrB,MAAM,EAAE,aAAa;YACrB,QAAQ;SACT,CAAC,CAAC;QAEH,OAAO,OAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,14 +1,26 @@
1
1
  {
2
2
  "name": "@seamless-auth/core",
3
- "version": "0.7.0",
3
+ "version": "0.10.0",
4
4
  "description": "Framework-agnostic core authentication logic for SeamlessAuth",
5
+ "keywords": [
6
+ "authentication",
7
+ "passwordless",
8
+ "webauthn",
9
+ "passkeys",
10
+ "jwt",
11
+ "seamless-auth"
12
+ ],
5
13
  "license": "AGPL-3.0-only",
6
14
  "author": "Fells Code, LLC",
7
15
  "sideEffects": false,
8
16
  "homepage": "https://seamlessauth.com",
9
17
  "repository": {
10
18
  "type": "git",
11
- "url": "https://github.com/fells-code/seamless-auth-server/tree/main/packages/core"
19
+ "url": "https://github.com/fells-code/seamless-auth-server.git",
20
+ "directory": "packages/core"
21
+ },
22
+ "bugs": {
23
+ "url": "https://github.com/fells-code/seamless-auth-server/issues"
12
24
  },
13
25
  "type": "module",
14
26
  "main": "./dist/index.js",
@@ -30,7 +42,7 @@
30
42
  "README.md"
31
43
  ],
32
44
  "engines": {
33
- "node": ">=18"
45
+ "node": ">=24 <25"
34
46
  },
35
47
  "dependencies": {
36
48
  "jose": "^6.1.3",
@@ -1,20 +0,0 @@
1
- export interface BootstrapAdminInviteOptions {
2
- authServerUrl: string;
3
- email: string;
4
- authorization?: string;
5
- serviceAuthorization?: string;
6
- externalDelivery?: boolean;
7
- forwardedClientIp?: string;
8
- }
9
- export interface BootstrapAdminInviteResult {
10
- status: number;
11
- body?: {
12
- url?: string;
13
- expiresAt: string;
14
- token?: string;
15
- delivery?: unknown;
16
- };
17
- error?: string;
18
- }
19
- export declare function bootstrapAdminInviteHandler(opts: BootstrapAdminInviteOptions): Promise<BootstrapAdminInviteResult>;
20
- //# sourceMappingURL=bootstrapAdminInvite.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrapAdminInvite.d.ts","sourceRoot":"","sources":["../../src/handlers/bootstrapAdminInvite.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,0BAA0B,CAAC,CAgCrC"}
@@ -1,29 +0,0 @@
1
- import { authFetch } from "../authFetch.js";
2
- export async function bootstrapAdminInviteHandler(opts) {
3
- const up = await authFetch(`${opts.authServerUrl}/internal/bootstrap/admin-invite`, {
4
- method: "POST",
5
- authorization: opts.authorization,
6
- serviceAuthorization: opts.serviceAuthorization,
7
- forwardedClientIp: opts.forwardedClientIp,
8
- headers: {
9
- ...(opts.externalDelivery
10
- ? {
11
- "x-seamless-auth-delivery-mode": "external",
12
- }
13
- : {}),
14
- },
15
- body: { email: opts.email },
16
- });
17
- const data = await up.json();
18
- if (!up.ok) {
19
- return {
20
- status: up.status,
21
- error: data?.error?.message || "bootstrap_failed",
22
- };
23
- }
24
- return {
25
- status: up.status,
26
- body: data?.data,
27
- };
28
- }
29
- //# sourceMappingURL=bootstrapAdminInvite.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrapAdminInvite.js","sourceRoot":"","sources":["../../src/handlers/bootstrapAdminInvite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAsB5C,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAiC;IAEjC,MAAM,EAAE,GAAG,MAAM,SAAS,CACxB,GAAG,IAAI,CAAC,aAAa,kCAAkC,EACvD;QACE,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;QAC/C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,OAAO,EAAE;YACP,GAAG,CAAC,IAAI,CAAC,gBAAgB;gBACvB,CAAC,CAAC;oBACE,+BAA+B,EAAE,UAAU;iBAC5C;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QACD,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;KAC5B,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,EAAE,KAAK,EAAE,OAAO,IAAI,kBAAkB;SAClD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,IAAI,EAAE,IAAI,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC"}