@geekmidas/auth 0.0.5 → 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.
Files changed (117) hide show
  1. package/README.md +343 -214
  2. package/dist/{cacheTokenStorage-Ca05vf3T.mjs → cacheTokenStorage-16NE8Cd9.mjs} +3 -3
  3. package/dist/cacheTokenStorage-16NE8Cd9.mjs.map +1 -0
  4. package/dist/{cacheTokenStorage-BzBRJfd-.d.mts → cacheTokenStorage-B7sOoysu.d.cts} +8 -6
  5. package/dist/cacheTokenStorage-B7sOoysu.d.cts.map +1 -0
  6. package/dist/{cacheTokenStorage-CvptztkW.cjs → cacheTokenStorage-CEpMniTi.cjs} +3 -3
  7. package/dist/cacheTokenStorage-CEpMniTi.cjs.map +1 -0
  8. package/dist/{cacheTokenStorage-yNUpDD8W.d.cts → cacheTokenStorage-_tq4Kmhc.d.mts} +8 -6
  9. package/dist/cacheTokenStorage-_tq4Kmhc.d.mts.map +1 -0
  10. package/dist/cacheTokenStorage.cjs +1 -1
  11. package/dist/cacheTokenStorage.d.cts +1 -1
  12. package/dist/cacheTokenStorage.d.mts +1 -1
  13. package/dist/cacheTokenStorage.mjs +1 -1
  14. package/dist/{client-DaiUm0UZ.cjs → client-BPl_mMvb.cjs} +14 -8
  15. package/dist/client-BPl_mMvb.cjs.map +1 -0
  16. package/dist/{client-DjNZS6vZ.mjs → client-eidYNJSH.mjs} +14 -8
  17. package/dist/client-eidYNJSH.mjs.map +1 -0
  18. package/dist/client.cjs +2 -2
  19. package/dist/client.d.cts +1 -1
  20. package/dist/client.d.mts +1 -1
  21. package/dist/client.mjs +2 -2
  22. package/dist/hono/jwt.cjs +1 -1
  23. package/dist/hono/jwt.cjs.map +1 -1
  24. package/dist/hono/jwt.d.cts +2 -1
  25. package/dist/hono/jwt.d.cts.map +1 -0
  26. package/dist/hono/jwt.d.mts +2 -1
  27. package/dist/hono/jwt.d.mts.map +1 -0
  28. package/dist/hono/jwt.mjs +1 -1
  29. package/dist/hono/jwt.mjs.map +1 -1
  30. package/dist/hono/oidc.cjs +1 -1
  31. package/dist/hono/oidc.cjs.map +1 -1
  32. package/dist/hono/oidc.d.cts +3 -2
  33. package/dist/hono/oidc.d.cts.map +1 -0
  34. package/dist/hono/oidc.d.mts +3 -2
  35. package/dist/hono/oidc.d.mts.map +1 -0
  36. package/dist/hono/oidc.mjs +1 -1
  37. package/dist/hono/oidc.mjs.map +1 -1
  38. package/dist/index.cjs +3 -3
  39. package/dist/index.d.cts +2 -2
  40. package/dist/index.d.mts +2 -2
  41. package/dist/index.mjs +3 -3
  42. package/dist/{jwt-DF9kFbmh.d.cts → jwt-3eIuY2dg.d.cts} +2 -1
  43. package/dist/jwt-3eIuY2dg.d.cts.map +1 -0
  44. package/dist/jwt-Bo_eACEi.cjs.map +1 -1
  45. package/dist/{jwt-DH8CJ2xC.d.mts → jwt-BqLlRkw-.d.mts} +2 -1
  46. package/dist/jwt-BqLlRkw-.d.mts.map +1 -0
  47. package/dist/jwt-D88cPJyT.mjs.map +1 -1
  48. package/dist/jwt.d.cts +1 -1
  49. package/dist/jwt.d.mts +1 -1
  50. package/dist/lambda/jwt.cjs +2 -2
  51. package/dist/lambda/jwt.cjs.map +1 -1
  52. package/dist/lambda/jwt.d.cts +2 -1
  53. package/dist/lambda/jwt.d.cts.map +1 -0
  54. package/dist/lambda/jwt.d.mts +2 -1
  55. package/dist/lambda/jwt.d.mts.map +1 -0
  56. package/dist/lambda/jwt.mjs +2 -2
  57. package/dist/lambda/jwt.mjs.map +1 -1
  58. package/dist/lambda/oidc.cjs +2 -2
  59. package/dist/lambda/oidc.cjs.map +1 -1
  60. package/dist/lambda/oidc.d.cts +3 -2
  61. package/dist/lambda/oidc.d.cts.map +1 -0
  62. package/dist/lambda/oidc.d.mts +3 -2
  63. package/dist/lambda/oidc.d.mts.map +1 -0
  64. package/dist/lambda/oidc.mjs +2 -2
  65. package/dist/lambda/oidc.mjs.map +1 -1
  66. package/dist/oidc-C0KyYaAK.cjs.map +1 -1
  67. package/dist/{oidc-CKOGLxjV.d.mts → oidc-ChA17wLB.d.cts} +3 -2
  68. package/dist/oidc-ChA17wLB.d.cts.map +1 -0
  69. package/dist/{oidc-DDLIB5gb.d.cts → oidc-DTRgBBl6.d.mts} +3 -2
  70. package/dist/oidc-DTRgBBl6.d.mts.map +1 -0
  71. package/dist/oidc-KA30gMlx.mjs.map +1 -1
  72. package/dist/oidc.d.cts +2 -2
  73. package/dist/oidc.d.mts +2 -2
  74. package/dist/server.cjs +2 -2
  75. package/dist/server.d.cts +2 -2
  76. package/dist/server.d.mts +2 -2
  77. package/dist/server.mjs +2 -2
  78. package/dist/{tokenManager--Q93eNYr.d.mts → tokenManager-CL3yE06D.d.cts} +2 -1
  79. package/dist/tokenManager-CL3yE06D.d.cts.map +1 -0
  80. package/dist/{tokenManager-BVXxfHRa.mjs → tokenManager-Ci2Tgxp8.mjs} +5 -3
  81. package/dist/tokenManager-Ci2Tgxp8.mjs.map +1 -0
  82. package/dist/{tokenManager-EPmwgai2.cjs → tokenManager-CvEMgxOp.cjs} +5 -3
  83. package/dist/tokenManager-CvEMgxOp.cjs.map +1 -0
  84. package/dist/{tokenManager-H6-lWEah.d.cts → tokenManager-RrwjL0y-.d.mts} +2 -1
  85. package/dist/tokenManager-RrwjL0y-.d.mts.map +1 -0
  86. package/dist/tokenManager.cjs +1 -1
  87. package/dist/tokenManager.d.cts +1 -1
  88. package/dist/tokenManager.d.mts +1 -1
  89. package/dist/tokenManager.mjs +1 -1
  90. package/package.json +10 -5
  91. package/src/__tests__/cacheTokenStorage.spec.ts +148 -148
  92. package/src/__tests__/client.spec.ts +339 -339
  93. package/src/__tests__/hono-jwt.spec.ts +219 -219
  94. package/src/__tests__/hono-oidc.spec.ts +560 -560
  95. package/src/__tests__/jwt.spec.ts +150 -127
  96. package/src/__tests__/lambda-jwt.spec.ts +205 -205
  97. package/src/__tests__/lambda-oidc.spec.ts +580 -579
  98. package/src/__tests__/oidc.spec.ts +365 -365
  99. package/src/__tests__/tokenManager.spec.ts +254 -254
  100. package/src/cacheTokenStorage.ts +32 -32
  101. package/src/client.ts +199 -190
  102. package/src/hono/jwt.ts +111 -111
  103. package/src/hono/oidc.ts +131 -131
  104. package/src/index.ts +2 -2
  105. package/src/jwt.ts +57 -57
  106. package/src/lambda/jwt.ts +170 -170
  107. package/src/lambda/oidc.ts +165 -165
  108. package/src/oidc.ts +121 -121
  109. package/src/server.ts +6 -7
  110. package/src/tokenManager.ts +89 -87
  111. package/tsconfig.json +10 -0
  112. package/dist/cacheTokenStorage-Ca05vf3T.mjs.map +0 -1
  113. package/dist/cacheTokenStorage-CvptztkW.cjs.map +0 -1
  114. package/dist/client-DaiUm0UZ.cjs.map +0 -1
  115. package/dist/client-DjNZS6vZ.mjs.map +0 -1
  116. package/dist/tokenManager-BVXxfHRa.mjs.map +0 -1
  117. package/dist/tokenManager-EPmwgai2.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { JwtClaims } from "./jwt-DF9kFbmh.cjs";
1
+ import { JwtClaims } from "./jwt-BqLlRkw-.mjs";
2
2
 
3
3
  //#region src/oidc.d.ts
4
4
 
@@ -81,6 +81,7 @@ declare class OidcVerifier<TClaims extends OidcClaims = OidcClaims, TUserInfo ex
81
81
  fetchUserInfo(token: string): Promise<TUserInfo | null>;
82
82
  clearCache(): void;
83
83
  }
84
+ //# sourceMappingURL=oidc.d.ts.map
84
85
  //#endregion
85
86
  export { OidcClaims, OidcConfig, OidcDiscovery, OidcUserInfo, OidcVerifier };
86
- //# sourceMappingURL=oidc-DDLIB5gb.d.cts.map
87
+ //# sourceMappingURL=oidc-DTRgBBl6.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc-DTRgBBl6.d.mts","names":[],"sources":["../src/oidc.ts"],"sourcesContent":[],"mappings":";;;;;AAQA;AAWA;AAiCiB,UA5CA,UAAA,SAAmB,SA4CN,CAAA;EAcb,KAAA,CAAA,EAAA,MAAU;EASd,SAAA,CAAA,EAAA,MAAY;EAAA,OAAA,CAAA,EAAA,MAAA;EAAA,MACR,CAAA,EAAA,MAAA;EAAU,GAAG,CAAA,EAAA,MAAA;;;;;AAaP,UAtEN,YAAA,CAsEM;EAAO,GAwBQ,EAAA,MAAA;EAAO,IAAf,CAAA,EAAA,MAAA;EAAO,UASO,CAAA,EAAA,MAAA;EAAO,WAAf,CAAA,EAAA,MAAA;EAAO,WAQE,CAAA,EAAA,MAAA;EAAS,QAAjB,CAAA,EAAA,MAAA;EAAO,kBAAA,CAAA,EAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;UA9E3B,aAAA;;;;;;;;;;;;;UAcA,UAAA;;;;;;;;cASJ,6BACI,aAAa,8BACX,eAAe;;;;;sBAMI;kBAMf,QAAQ;;yBAwBD,QAAQ;+BASF,QAAQ;gCAQP,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"oidc-KA30gMlx.mjs","names":["config: OidcConfig","token: string"],"sources":["../src/oidc.ts"],"sourcesContent":["import * as jose from 'jose';\nimport type { JwtClaims, TokenExtractionOptions } from './jwt';\n\nexport type { TokenExtractionOptions };\n\n/**\n * Standard OIDC claims (extends JWT claims)\n */\nexport interface OidcClaims extends JwtClaims {\n nonce?: string;\n auth_time?: number;\n at_hash?: string;\n c_hash?: string;\n azp?: string;\n}\n\n/**\n * Standard OIDC user info claims\n */\nexport interface OidcUserInfo {\n sub: string;\n name?: string;\n given_name?: string;\n family_name?: string;\n middle_name?: string;\n nickname?: string;\n preferred_username?: string;\n profile?: string;\n picture?: string;\n website?: string;\n email?: string;\n email_verified?: boolean;\n gender?: string;\n birthdate?: string;\n zoneinfo?: string;\n locale?: string;\n phone_number?: string;\n phone_number_verified?: boolean;\n address?: {\n formatted?: string;\n street_address?: string;\n locality?: string;\n region?: string;\n postal_code?: string;\n country?: string;\n };\n updated_at?: number;\n}\n\n/**\n * OIDC Discovery document\n */\nexport interface OidcDiscovery {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n userinfo_endpoint?: string;\n jwks_uri: string;\n scopes_supported?: string[];\n response_types_supported: string[];\n claims_supported?: string[];\n}\n\n/**\n * Configuration for OIDC verification\n */\nexport interface OidcConfig {\n issuer: string;\n audience: string | string[];\n cacheDiscovery?: boolean;\n}\n\n/**\n * OIDC Verifier with auto-discovery and caching\n */\nexport class OidcVerifier<\n TClaims extends OidcClaims = OidcClaims,\n TUserInfo extends OidcUserInfo = OidcUserInfo,\n> {\n private discovery: OidcDiscovery | null = null;\n private jwks: jose.JWTVerifyGetKey | null = null;\n private readonly discoveryUrl: string;\n\n constructor(private readonly config: OidcConfig) {\n this.discoveryUrl = config.issuer.endsWith('/')\n ? `${config.issuer}.well-known/openid-configuration`\n : `${config.issuer}/.well-known/openid-configuration`;\n }\n\n async getDiscovery(): Promise<OidcDiscovery> {\n if (this.discovery && this.config.cacheDiscovery !== false) {\n return this.discovery;\n }\n\n const response = await fetch(this.discoveryUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch OIDC discovery: ${response.statusText}`);\n }\n\n this.discovery = (await response.json()) as OidcDiscovery;\n return this.discovery;\n }\n\n private async getJwks(): Promise<jose.JWTVerifyGetKey> {\n if (this.jwks && this.config.cacheDiscovery !== false) {\n return this.jwks;\n }\n\n const disc = await this.getDiscovery();\n this.jwks = jose.createRemoteJWKSet(new URL(disc.jwks_uri));\n return this.jwks;\n }\n\n async verify(token: string): Promise<TClaims> {\n const key = await this.getJwks();\n const { payload } = await jose.jwtVerify(token, key, {\n issuer: this.config.issuer,\n audience: this.config.audience,\n });\n return payload as unknown as TClaims;\n }\n\n async verifyOrNull(token: string): Promise<TClaims | null> {\n try {\n return await this.verify(token);\n } catch {\n return null;\n }\n }\n\n async fetchUserInfo(token: string): Promise<TUserInfo | null> {\n try {\n const disc = await this.getDiscovery();\n if (!disc.userinfo_endpoint) {\n return null;\n }\n\n const response = await fetch(disc.userinfo_endpoint, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n if (!response.ok) {\n return null;\n }\n\n return (await response.json()) as TUserInfo;\n } catch {\n return null;\n }\n }\n\n clearCache(): void {\n this.discovery = null;\n this.jwks = null;\n }\n}\n"],"mappings":";;;;;;AA2EA,IAAa,eAAb,MAGE;CACA,AAAQ,YAAkC;CAC1C,AAAQ,OAAoC;CAC5C,AAAiB;CAEjB,YAA6BA,QAAoB;EAApB;AAC3B,OAAK,eAAe,OAAO,OAAO,SAAS,IAAI,IAC1C,EAAE,OAAO,OAAO,qCAChB,EAAE,OAAO,OAAO;CACtB;CAED,MAAM,eAAuC;AAC3C,MAAI,KAAK,aAAa,KAAK,OAAO,mBAAmB,MACnD,QAAO,KAAK;EAGd,MAAM,WAAW,MAAM,MAAM,KAAK,aAAa;AAC/C,OAAK,SAAS,GACZ,OAAM,IAAI,OAAO,kCAAkC,SAAS,WAAW;AAGzE,OAAK,YAAa,MAAM,SAAS,MAAM;AACvC,SAAO,KAAK;CACb;CAED,MAAc,UAAyC;AACrD,MAAI,KAAK,QAAQ,KAAK,OAAO,mBAAmB,MAC9C,QAAO,KAAK;EAGd,MAAM,OAAO,MAAM,KAAK,cAAc;AACtC,OAAK,OAAO,KAAK,mBAAmB,IAAI,IAAI,KAAK,UAAU;AAC3D,SAAO,KAAK;CACb;CAED,MAAM,OAAOC,OAAiC;EAC5C,MAAM,MAAM,MAAM,KAAK,SAAS;EAChC,MAAM,EAAE,SAAS,GAAG,MAAM,KAAK,UAAU,OAAO,KAAK;GACnD,QAAQ,KAAK,OAAO;GACpB,UAAU,KAAK,OAAO;EACvB,EAAC;AACF,SAAO;CACR;CAED,MAAM,aAAaA,OAAwC;AACzD,MAAI;AACF,UAAO,MAAM,KAAK,OAAO,MAAM;EAChC,QAAO;AACN,UAAO;EACR;CACF;CAED,MAAM,cAAcA,OAA0C;AAC5D,MAAI;GACF,MAAM,OAAO,MAAM,KAAK,cAAc;AACtC,QAAK,KAAK,kBACR,QAAO;GAGT,MAAM,WAAW,MAAM,MAAM,KAAK,mBAAmB,EACnD,SAAS,EAAE,gBAAgB,SAAS,MAAM,EAAG,EAC9C,EAAC;AAEF,QAAK,SAAS,GACZ,QAAO;AAGT,UAAQ,MAAM,SAAS,MAAM;EAC9B,QAAO;AACN,UAAO;EACR;CACF;CAED,aAAmB;AACjB,OAAK,YAAY;AACjB,OAAK,OAAO;CACb;AACF"}
1
+ {"version":3,"file":"oidc-KA30gMlx.mjs","names":["config: OidcConfig","token: string"],"sources":["../src/oidc.ts"],"sourcesContent":["import * as jose from 'jose';\nimport type { JwtClaims, TokenExtractionOptions } from './jwt';\n\nexport type { TokenExtractionOptions };\n\n/**\n * Standard OIDC claims (extends JWT claims)\n */\nexport interface OidcClaims extends JwtClaims {\n\tnonce?: string;\n\tauth_time?: number;\n\tat_hash?: string;\n\tc_hash?: string;\n\tazp?: string;\n}\n\n/**\n * Standard OIDC user info claims\n */\nexport interface OidcUserInfo {\n\tsub: string;\n\tname?: string;\n\tgiven_name?: string;\n\tfamily_name?: string;\n\tmiddle_name?: string;\n\tnickname?: string;\n\tpreferred_username?: string;\n\tprofile?: string;\n\tpicture?: string;\n\twebsite?: string;\n\temail?: string;\n\temail_verified?: boolean;\n\tgender?: string;\n\tbirthdate?: string;\n\tzoneinfo?: string;\n\tlocale?: string;\n\tphone_number?: string;\n\tphone_number_verified?: boolean;\n\taddress?: {\n\t\tformatted?: string;\n\t\tstreet_address?: string;\n\t\tlocality?: string;\n\t\tregion?: string;\n\t\tpostal_code?: string;\n\t\tcountry?: string;\n\t};\n\tupdated_at?: number;\n}\n\n/**\n * OIDC Discovery document\n */\nexport interface OidcDiscovery {\n\tissuer: string;\n\tauthorization_endpoint: string;\n\ttoken_endpoint: string;\n\tuserinfo_endpoint?: string;\n\tjwks_uri: string;\n\tscopes_supported?: string[];\n\tresponse_types_supported: string[];\n\tclaims_supported?: string[];\n}\n\n/**\n * Configuration for OIDC verification\n */\nexport interface OidcConfig {\n\tissuer: string;\n\taudience: string | string[];\n\tcacheDiscovery?: boolean;\n}\n\n/**\n * OIDC Verifier with auto-discovery and caching\n */\nexport class OidcVerifier<\n\tTClaims extends OidcClaims = OidcClaims,\n\tTUserInfo extends OidcUserInfo = OidcUserInfo,\n> {\n\tprivate discovery: OidcDiscovery | null = null;\n\tprivate jwks: jose.JWTVerifyGetKey | null = null;\n\tprivate readonly discoveryUrl: string;\n\n\tconstructor(private readonly config: OidcConfig) {\n\t\tthis.discoveryUrl = config.issuer.endsWith('/')\n\t\t\t? `${config.issuer}.well-known/openid-configuration`\n\t\t\t: `${config.issuer}/.well-known/openid-configuration`;\n\t}\n\n\tasync getDiscovery(): Promise<OidcDiscovery> {\n\t\tif (this.discovery && this.config.cacheDiscovery !== false) {\n\t\t\treturn this.discovery;\n\t\t}\n\n\t\tconst response = await fetch(this.discoveryUrl);\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to fetch OIDC discovery: ${response.statusText}`);\n\t\t}\n\n\t\tthis.discovery = (await response.json()) as OidcDiscovery;\n\t\treturn this.discovery;\n\t}\n\n\tprivate async getJwks(): Promise<jose.JWTVerifyGetKey> {\n\t\tif (this.jwks && this.config.cacheDiscovery !== false) {\n\t\t\treturn this.jwks;\n\t\t}\n\n\t\tconst disc = await this.getDiscovery();\n\t\tthis.jwks = jose.createRemoteJWKSet(new URL(disc.jwks_uri));\n\t\treturn this.jwks;\n\t}\n\n\tasync verify(token: string): Promise<TClaims> {\n\t\tconst key = await this.getJwks();\n\t\tconst { payload } = await jose.jwtVerify(token, key, {\n\t\t\tissuer: this.config.issuer,\n\t\t\taudience: this.config.audience,\n\t\t});\n\t\treturn payload as unknown as TClaims;\n\t}\n\n\tasync verifyOrNull(token: string): Promise<TClaims | null> {\n\t\ttry {\n\t\t\treturn await this.verify(token);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync fetchUserInfo(token: string): Promise<TUserInfo | null> {\n\t\ttry {\n\t\t\tconst disc = await this.getDiscovery();\n\t\t\tif (!disc.userinfo_endpoint) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst response = await fetch(disc.userinfo_endpoint, {\n\t\t\t\theaders: { Authorization: `Bearer ${token}` },\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn (await response.json()) as TUserInfo;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tclearCache(): void {\n\t\tthis.discovery = null;\n\t\tthis.jwks = null;\n\t}\n}\n"],"mappings":";;;;;;AA2EA,IAAa,eAAb,MAGE;CACD,AAAQ,YAAkC;CAC1C,AAAQ,OAAoC;CAC5C,AAAiB;CAEjB,YAA6BA,QAAoB;EAApB;AAC5B,OAAK,eAAe,OAAO,OAAO,SAAS,IAAI,IAC3C,EAAE,OAAO,OAAO,qCAChB,EAAE,OAAO,OAAO;CACpB;CAED,MAAM,eAAuC;AAC5C,MAAI,KAAK,aAAa,KAAK,OAAO,mBAAmB,MACpD,QAAO,KAAK;EAGb,MAAM,WAAW,MAAM,MAAM,KAAK,aAAa;AAC/C,OAAK,SAAS,GACb,OAAM,IAAI,OAAO,kCAAkC,SAAS,WAAW;AAGxE,OAAK,YAAa,MAAM,SAAS,MAAM;AACvC,SAAO,KAAK;CACZ;CAED,MAAc,UAAyC;AACtD,MAAI,KAAK,QAAQ,KAAK,OAAO,mBAAmB,MAC/C,QAAO,KAAK;EAGb,MAAM,OAAO,MAAM,KAAK,cAAc;AACtC,OAAK,OAAO,KAAK,mBAAmB,IAAI,IAAI,KAAK,UAAU;AAC3D,SAAO,KAAK;CACZ;CAED,MAAM,OAAOC,OAAiC;EAC7C,MAAM,MAAM,MAAM,KAAK,SAAS;EAChC,MAAM,EAAE,SAAS,GAAG,MAAM,KAAK,UAAU,OAAO,KAAK;GACpD,QAAQ,KAAK,OAAO;GACpB,UAAU,KAAK,OAAO;EACtB,EAAC;AACF,SAAO;CACP;CAED,MAAM,aAAaA,OAAwC;AAC1D,MAAI;AACH,UAAO,MAAM,KAAK,OAAO,MAAM;EAC/B,QAAO;AACP,UAAO;EACP;CACD;CAED,MAAM,cAAcA,OAA0C;AAC7D,MAAI;GACH,MAAM,OAAO,MAAM,KAAK,cAAc;AACtC,QAAK,KAAK,kBACT,QAAO;GAGR,MAAM,WAAW,MAAM,MAAM,KAAK,mBAAmB,EACpD,SAAS,EAAE,gBAAgB,SAAS,MAAM,EAAG,EAC7C,EAAC;AAEF,QAAK,SAAS,GACb,QAAO;AAGR,UAAQ,MAAM,SAAS,MAAM;EAC7B,QAAO;AACP,UAAO;EACP;CACD;CAED,aAAmB;AAClB,OAAK,YAAY;AACjB,OAAK,OAAO;CACZ;AACD"}
package/dist/oidc.d.cts CHANGED
@@ -1,3 +1,3 @@
1
- import { TokenExtractionOptions } from "./jwt-DF9kFbmh.cjs";
2
- import { OidcClaims, OidcConfig, OidcDiscovery, OidcUserInfo, OidcVerifier } from "./oidc-DDLIB5gb.cjs";
1
+ import { TokenExtractionOptions } from "./jwt-3eIuY2dg.cjs";
2
+ import { OidcClaims, OidcConfig, OidcDiscovery, OidcUserInfo, OidcVerifier } from "./oidc-ChA17wLB.cjs";
3
3
  export { OidcClaims, OidcConfig, OidcDiscovery, OidcUserInfo, OidcVerifier, TokenExtractionOptions };
package/dist/oidc.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- import { TokenExtractionOptions } from "./jwt-DH8CJ2xC.mjs";
2
- import { OidcClaims, OidcConfig, OidcDiscovery, OidcUserInfo, OidcVerifier } from "./oidc-CKOGLxjV.mjs";
1
+ import { TokenExtractionOptions } from "./jwt-BqLlRkw-.mjs";
2
+ import { OidcClaims, OidcConfig, OidcDiscovery, OidcUserInfo, OidcVerifier } from "./oidc-DTRgBBl6.mjs";
3
3
  export { OidcClaims, OidcConfig, OidcDiscovery, OidcUserInfo, OidcVerifier, TokenExtractionOptions };
package/dist/server.cjs CHANGED
@@ -1,5 +1,5 @@
1
- const require_cacheTokenStorage = require('./cacheTokenStorage-CvptztkW.cjs');
2
- const require_tokenManager = require('./tokenManager-EPmwgai2.cjs');
1
+ const require_cacheTokenStorage = require('./cacheTokenStorage-CEpMniTi.cjs');
2
+ const require_tokenManager = require('./tokenManager-CvEMgxOp.cjs');
3
3
 
4
4
  exports.CacheTokenStorage = require_cacheTokenStorage.CacheTokenStorage;
5
5
  exports.TokenManager = require_tokenManager.TokenManager;
package/dist/server.d.cts CHANGED
@@ -1,3 +1,3 @@
1
- import { CacheTokenStorage } from "./cacheTokenStorage-yNUpDD8W.cjs";
2
- import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager-H6-lWEah.cjs";
1
+ import { CacheTokenStorage } from "./cacheTokenStorage-B7sOoysu.cjs";
2
+ import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager-CL3yE06D.cjs";
3
3
  export { CacheTokenStorage, DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload };
package/dist/server.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- import { CacheTokenStorage } from "./cacheTokenStorage-BzBRJfd-.mjs";
2
- import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager--Q93eNYr.mjs";
1
+ import { CacheTokenStorage } from "./cacheTokenStorage-_tq4Kmhc.mjs";
2
+ import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager-RrwjL0y-.mjs";
3
3
  export { CacheTokenStorage, DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload };
package/dist/server.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { CacheTokenStorage } from "./cacheTokenStorage-Ca05vf3T.mjs";
2
- import { TokenManager } from "./tokenManager-BVXxfHRa.mjs";
1
+ import { CacheTokenStorage } from "./cacheTokenStorage-16NE8Cd9.mjs";
2
+ import { TokenManager } from "./tokenManager-Ci2Tgxp8.mjs";
3
3
 
4
4
  export { CacheTokenStorage, TokenManager };
@@ -34,6 +34,7 @@ declare class TokenManager {
34
34
  isTokenExpired(token: string): boolean;
35
35
  getTokenExpiration(token: string): Date | null;
36
36
  }
37
+ //# sourceMappingURL=tokenManager.d.ts.map
37
38
  //#endregion
38
39
  export { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload };
39
- //# sourceMappingURL=tokenManager--Q93eNYr.d.mts.map
40
+ //# sourceMappingURL=tokenManager-CL3yE06D.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenManager-CL3yE06D.d.cts","names":[],"sources":["../src/tokenManager.ts"],"sourcesContent":[],"mappings":";;;UAGiB,YAAA;;EAAA,KAAA,CAAA,EAAA,MAAA;EAMA,CAAA,GAAA,EAAA,MAAS,CAAA,EAAA,GAAA;AAK1B;AAAoC,UALnB,SAAA,CAKmB;EAAA,WAGT,EAAA,MAAA;EAAW,YACV,EAAA,MAAA;AAAW;AAGtB,UAPA,mBAAA,CAOqB;EAKzB,iBAAY,EAAA,MAAA;EAAA,kBAAA,EAAA,MAAA;EAAA,oBAMH,CAAA,EAfE,EAAA,CAAG,WAeL;EAAmB,qBAOb,CAAA,EArBH,EAAA,CAAG,WAqBA;;AAeO,UAjClB,YAAA,SAAqB,YAiCH,CAAA;EAAY,GASX,EAAA,MAAA;EAAY,GAoBnB,EAAA,MAAA;;AAgBW,cAzE3B,YAAA,CAyE2B;;;;;uBAnElB;6BAOM,eAAe;oCAeR;qCASC;;8BAoBP;;qCAgBO"}
@@ -24,14 +24,16 @@ var TokenManager = class {
24
24
  try {
25
25
  return jwt.verify(token, this.accessTokenSecret);
26
26
  } catch (error) {
27
- throw new Error(`Invalid access token: ${error.message}`);
27
+ const message = error instanceof Error ? error.message : String(error);
28
+ throw new Error(`Invalid access token: ${message}`);
28
29
  }
29
30
  }
30
31
  verifyRefreshToken(token) {
31
32
  try {
32
33
  return jwt.verify(token, this.refreshTokenSecret);
33
34
  } catch (error) {
34
- throw new Error(`Invalid refresh token: ${error.message}`);
35
+ const message = error instanceof Error ? error.message : String(error);
36
+ throw new Error(`Invalid refresh token: ${message}`);
35
37
  }
36
38
  }
37
39
  refreshAccessToken(refreshToken) {
@@ -61,4 +63,4 @@ var TokenManager = class {
61
63
 
62
64
  //#endregion
63
65
  export { TokenManager };
64
- //# sourceMappingURL=tokenManager-BVXxfHRa.mjs.map
66
+ //# sourceMappingURL=tokenManager-Ci2Tgxp8.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenManager-Ci2Tgxp8.mjs","names":["options: TokenManagerOptions","payload: TokenPayload","token: string","refreshToken: string"],"sources":["../src/tokenManager.ts"],"sourcesContent":["import jwt from 'jsonwebtoken';\nimport type ms from 'ms';\n\nexport interface TokenPayload {\n\tuserId: string;\n\temail?: string;\n\t[key: string]: any;\n}\n\nexport interface TokenPair {\n\taccessToken: string;\n\trefreshToken: string;\n}\n\nexport interface TokenManagerOptions {\n\taccessTokenSecret: string;\n\trefreshTokenSecret: string;\n\taccessTokenExpiresIn?: ms.StringValue;\n\trefreshTokenExpiresIn?: ms.StringValue;\n}\n\nexport interface DecodedToken extends TokenPayload {\n\tiat: number;\n\texp: number;\n}\n\nexport class TokenManager {\n\tprivate accessTokenSecret: string;\n\tprivate refreshTokenSecret: string;\n\tprivate accessTokenExpiresIn: ms.StringValue;\n\tprivate refreshTokenExpiresIn: ms.StringValue;\n\n\tconstructor(options: TokenManagerOptions) {\n\t\tthis.accessTokenSecret = options.accessTokenSecret;\n\t\tthis.refreshTokenSecret = options.refreshTokenSecret;\n\t\tthis.accessTokenExpiresIn = options.accessTokenExpiresIn || '15m';\n\t\tthis.refreshTokenExpiresIn = options.refreshTokenExpiresIn || '7d';\n\t}\n\n\tgenerateTokenPair(payload: TokenPayload): TokenPair {\n\t\tconst accessToken = jwt.sign(payload, this.accessTokenSecret, {\n\t\t\texpiresIn: this.accessTokenExpiresIn,\n\t\t});\n\n\t\tconst refreshToken = jwt.sign(payload, this.refreshTokenSecret, {\n\t\t\texpiresIn: this.refreshTokenExpiresIn,\n\t\t});\n\n\t\treturn {\n\t\t\taccessToken,\n\t\t\trefreshToken,\n\t\t};\n\t}\n\n\tverifyAccessToken(token: string): DecodedToken {\n\t\ttry {\n\t\t\treturn jwt.verify(token, this.accessTokenSecret) as DecodedToken;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new Error(`Invalid access token: ${message}`);\n\t\t}\n\t}\n\n\tverifyRefreshToken(token: string): DecodedToken {\n\t\ttry {\n\t\t\treturn jwt.verify(token, this.refreshTokenSecret) as DecodedToken;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new Error(`Invalid refresh token: ${message}`);\n\t\t}\n\t}\n\n\trefreshAccessToken(refreshToken: string): string {\n\t\tconst decoded = this.verifyRefreshToken(refreshToken);\n\n\t\t// Remove JWT specific fields before creating new token\n\t\tconst { iat, exp, ...payload } = decoded;\n\n\t\treturn jwt.sign(payload, this.accessTokenSecret, {\n\t\t\texpiresIn: this.accessTokenExpiresIn,\n\t\t});\n\t}\n\n\tdecodeToken(token: string): DecodedToken | null {\n\t\ttry {\n\t\t\treturn jwt.decode(token) as DecodedToken;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tisTokenExpired(token: string): boolean {\n\t\tconst decoded = this.decodeToken(token);\n\t\tif (!decoded) return true;\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn decoded.exp < now;\n\t}\n\n\tgetTokenExpiration(token: string): Date | null {\n\t\tconst decoded = this.decodeToken(token);\n\t\tif (!decoded) return null;\n\n\t\treturn new Date(decoded.exp * 1000);\n\t}\n}\n"],"mappings":";;;AA0BA,IAAa,eAAb,MAA0B;CACzB,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAYA,SAA8B;AACzC,OAAK,oBAAoB,QAAQ;AACjC,OAAK,qBAAqB,QAAQ;AAClC,OAAK,uBAAuB,QAAQ,wBAAwB;AAC5D,OAAK,wBAAwB,QAAQ,yBAAyB;CAC9D;CAED,kBAAkBC,SAAkC;EACnD,MAAM,cAAc,IAAI,KAAK,SAAS,KAAK,mBAAmB,EAC7D,WAAW,KAAK,qBAChB,EAAC;EAEF,MAAM,eAAe,IAAI,KAAK,SAAS,KAAK,oBAAoB,EAC/D,WAAW,KAAK,sBAChB,EAAC;AAEF,SAAO;GACN;GACA;EACA;CACD;CAED,kBAAkBC,OAA6B;AAC9C,MAAI;AACH,UAAO,IAAI,OAAO,OAAO,KAAK,kBAAkB;EAChD,SAAQ,OAAO;GACf,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,SAAM,IAAI,OAAO,wBAAwB,QAAQ;EACjD;CACD;CAED,mBAAmBA,OAA6B;AAC/C,MAAI;AACH,UAAO,IAAI,OAAO,OAAO,KAAK,mBAAmB;EACjD,SAAQ,OAAO;GACf,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,SAAM,IAAI,OAAO,yBAAyB,QAAQ;EAClD;CACD;CAED,mBAAmBC,cAA8B;EAChD,MAAM,UAAU,KAAK,mBAAmB,aAAa;EAGrD,MAAM,EAAE,KAAK,IAAK,GAAG,SAAS,GAAG;AAEjC,SAAO,IAAI,KAAK,SAAS,KAAK,mBAAmB,EAChD,WAAW,KAAK,qBAChB,EAAC;CACF;CAED,YAAYD,OAAoC;AAC/C,MAAI;AACH,UAAO,IAAI,OAAO,MAAM;EACxB,QAAO;AACP,UAAO;EACP;CACD;CAED,eAAeA,OAAwB;EACtC,MAAM,UAAU,KAAK,YAAY,MAAM;AACvC,OAAK,QAAS,QAAO;EAErB,MAAM,MAAM,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;AACzC,SAAO,QAAQ,MAAM;CACrB;CAED,mBAAmBA,OAA4B;EAC9C,MAAM,UAAU,KAAK,YAAY,MAAM;AACvC,OAAK,QAAS,QAAO;AAErB,SAAO,IAAI,KAAK,QAAQ,MAAM;CAC9B;AACD"}
@@ -25,14 +25,16 @@ var TokenManager = class {
25
25
  try {
26
26
  return jsonwebtoken.default.verify(token, this.accessTokenSecret);
27
27
  } catch (error) {
28
- throw new Error(`Invalid access token: ${error.message}`);
28
+ const message = error instanceof Error ? error.message : String(error);
29
+ throw new Error(`Invalid access token: ${message}`);
29
30
  }
30
31
  }
31
32
  verifyRefreshToken(token) {
32
33
  try {
33
34
  return jsonwebtoken.default.verify(token, this.refreshTokenSecret);
34
35
  } catch (error) {
35
- throw new Error(`Invalid refresh token: ${error.message}`);
36
+ const message = error instanceof Error ? error.message : String(error);
37
+ throw new Error(`Invalid refresh token: ${message}`);
36
38
  }
37
39
  }
38
40
  refreshAccessToken(refreshToken) {
@@ -67,4 +69,4 @@ Object.defineProperty(exports, 'TokenManager', {
67
69
  return TokenManager;
68
70
  }
69
71
  });
70
- //# sourceMappingURL=tokenManager-EPmwgai2.cjs.map
72
+ //# sourceMappingURL=tokenManager-CvEMgxOp.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenManager-CvEMgxOp.cjs","names":["options: TokenManagerOptions","payload: TokenPayload","token: string","refreshToken: string"],"sources":["../src/tokenManager.ts"],"sourcesContent":["import jwt from 'jsonwebtoken';\nimport type ms from 'ms';\n\nexport interface TokenPayload {\n\tuserId: string;\n\temail?: string;\n\t[key: string]: any;\n}\n\nexport interface TokenPair {\n\taccessToken: string;\n\trefreshToken: string;\n}\n\nexport interface TokenManagerOptions {\n\taccessTokenSecret: string;\n\trefreshTokenSecret: string;\n\taccessTokenExpiresIn?: ms.StringValue;\n\trefreshTokenExpiresIn?: ms.StringValue;\n}\n\nexport interface DecodedToken extends TokenPayload {\n\tiat: number;\n\texp: number;\n}\n\nexport class TokenManager {\n\tprivate accessTokenSecret: string;\n\tprivate refreshTokenSecret: string;\n\tprivate accessTokenExpiresIn: ms.StringValue;\n\tprivate refreshTokenExpiresIn: ms.StringValue;\n\n\tconstructor(options: TokenManagerOptions) {\n\t\tthis.accessTokenSecret = options.accessTokenSecret;\n\t\tthis.refreshTokenSecret = options.refreshTokenSecret;\n\t\tthis.accessTokenExpiresIn = options.accessTokenExpiresIn || '15m';\n\t\tthis.refreshTokenExpiresIn = options.refreshTokenExpiresIn || '7d';\n\t}\n\n\tgenerateTokenPair(payload: TokenPayload): TokenPair {\n\t\tconst accessToken = jwt.sign(payload, this.accessTokenSecret, {\n\t\t\texpiresIn: this.accessTokenExpiresIn,\n\t\t});\n\n\t\tconst refreshToken = jwt.sign(payload, this.refreshTokenSecret, {\n\t\t\texpiresIn: this.refreshTokenExpiresIn,\n\t\t});\n\n\t\treturn {\n\t\t\taccessToken,\n\t\t\trefreshToken,\n\t\t};\n\t}\n\n\tverifyAccessToken(token: string): DecodedToken {\n\t\ttry {\n\t\t\treturn jwt.verify(token, this.accessTokenSecret) as DecodedToken;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new Error(`Invalid access token: ${message}`);\n\t\t}\n\t}\n\n\tverifyRefreshToken(token: string): DecodedToken {\n\t\ttry {\n\t\t\treturn jwt.verify(token, this.refreshTokenSecret) as DecodedToken;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthrow new Error(`Invalid refresh token: ${message}`);\n\t\t}\n\t}\n\n\trefreshAccessToken(refreshToken: string): string {\n\t\tconst decoded = this.verifyRefreshToken(refreshToken);\n\n\t\t// Remove JWT specific fields before creating new token\n\t\tconst { iat, exp, ...payload } = decoded;\n\n\t\treturn jwt.sign(payload, this.accessTokenSecret, {\n\t\t\texpiresIn: this.accessTokenExpiresIn,\n\t\t});\n\t}\n\n\tdecodeToken(token: string): DecodedToken | null {\n\t\ttry {\n\t\t\treturn jwt.decode(token) as DecodedToken;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tisTokenExpired(token: string): boolean {\n\t\tconst decoded = this.decodeToken(token);\n\t\tif (!decoded) return true;\n\n\t\tconst now = Math.floor(Date.now() / 1000);\n\t\treturn decoded.exp < now;\n\t}\n\n\tgetTokenExpiration(token: string): Date | null {\n\t\tconst decoded = this.decodeToken(token);\n\t\tif (!decoded) return null;\n\n\t\treturn new Date(decoded.exp * 1000);\n\t}\n}\n"],"mappings":";;;;AA0BA,IAAa,eAAb,MAA0B;CACzB,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAYA,SAA8B;AACzC,OAAK,oBAAoB,QAAQ;AACjC,OAAK,qBAAqB,QAAQ;AAClC,OAAK,uBAAuB,QAAQ,wBAAwB;AAC5D,OAAK,wBAAwB,QAAQ,yBAAyB;CAC9D;CAED,kBAAkBC,SAAkC;EACnD,MAAM,cAAc,qBAAI,KAAK,SAAS,KAAK,mBAAmB,EAC7D,WAAW,KAAK,qBAChB,EAAC;EAEF,MAAM,eAAe,qBAAI,KAAK,SAAS,KAAK,oBAAoB,EAC/D,WAAW,KAAK,sBAChB,EAAC;AAEF,SAAO;GACN;GACA;EACA;CACD;CAED,kBAAkBC,OAA6B;AAC9C,MAAI;AACH,UAAO,qBAAI,OAAO,OAAO,KAAK,kBAAkB;EAChD,SAAQ,OAAO;GACf,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,SAAM,IAAI,OAAO,wBAAwB,QAAQ;EACjD;CACD;CAED,mBAAmBA,OAA6B;AAC/C,MAAI;AACH,UAAO,qBAAI,OAAO,OAAO,KAAK,mBAAmB;EACjD,SAAQ,OAAO;GACf,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,SAAM,IAAI,OAAO,yBAAyB,QAAQ;EAClD;CACD;CAED,mBAAmBC,cAA8B;EAChD,MAAM,UAAU,KAAK,mBAAmB,aAAa;EAGrD,MAAM,EAAE,KAAK,IAAK,GAAG,SAAS,GAAG;AAEjC,SAAO,qBAAI,KAAK,SAAS,KAAK,mBAAmB,EAChD,WAAW,KAAK,qBAChB,EAAC;CACF;CAED,YAAYD,OAAoC;AAC/C,MAAI;AACH,UAAO,qBAAI,OAAO,MAAM;EACxB,QAAO;AACP,UAAO;EACP;CACD;CAED,eAAeA,OAAwB;EACtC,MAAM,UAAU,KAAK,YAAY,MAAM;AACvC,OAAK,QAAS,QAAO;EAErB,MAAM,MAAM,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;AACzC,SAAO,QAAQ,MAAM;CACrB;CAED,mBAAmBA,OAA4B;EAC9C,MAAM,UAAU,KAAK,YAAY,MAAM;AACvC,OAAK,QAAS,QAAO;AAErB,SAAO,IAAI,KAAK,QAAQ,MAAM;CAC9B;AACD"}
@@ -34,6 +34,7 @@ declare class TokenManager {
34
34
  isTokenExpired(token: string): boolean;
35
35
  getTokenExpiration(token: string): Date | null;
36
36
  }
37
+ //# sourceMappingURL=tokenManager.d.ts.map
37
38
  //#endregion
38
39
  export { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload };
39
- //# sourceMappingURL=tokenManager-H6-lWEah.d.cts.map
40
+ //# sourceMappingURL=tokenManager-RrwjL0y-.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenManager-RrwjL0y-.d.mts","names":[],"sources":["../src/tokenManager.ts"],"sourcesContent":[],"mappings":";;;UAGiB,YAAA;;EAAA,KAAA,CAAA,EAAA,MAAA;EAMA,CAAA,GAAA,EAAA,MAAS,CAAA,EAAA,GAAA;AAK1B;AAAoC,UALnB,SAAA,CAKmB;EAAA,WAGT,EAAA,MAAA;EAAW,YACV,EAAA,MAAA;AAAW;AAGtB,UAPA,mBAAA,CAOqB;EAKzB,iBAAY,EAAA,MAAA;EAAA,kBAAA,EAAA,MAAA;EAAA,oBAMH,CAAA,EAfE,EAAA,CAAG,WAeL;EAAmB,qBAOb,CAAA,EArBH,EAAA,CAAG,WAqBA;;AAeO,UAjClB,YAAA,SAAqB,YAiCH,CAAA;EAAY,GASX,EAAA,MAAA;EAAY,GAoBnB,EAAA,MAAA;;AAgBW,cAzE3B,YAAA,CAyE2B;;;;;uBAnElB;6BAOM,eAAe;oCAeR;qCASC;;8BAoBP;;qCAgBO"}
@@ -1,3 +1,3 @@
1
- const require_tokenManager = require('./tokenManager-EPmwgai2.cjs');
1
+ const require_tokenManager = require('./tokenManager-CvEMgxOp.cjs');
2
2
 
3
3
  exports.TokenManager = require_tokenManager.TokenManager;
@@ -1,2 +1,2 @@
1
- import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager-H6-lWEah.cjs";
1
+ import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager-CL3yE06D.cjs";
2
2
  export { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload };
@@ -1,2 +1,2 @@
1
- import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager--Q93eNYr.mjs";
1
+ import { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload } from "./tokenManager-RrwjL0y-.mjs";
2
2
  export { DecodedToken, TokenManager, TokenManagerOptions, TokenPair, TokenPayload };
@@ -1,3 +1,3 @@
1
- import { TokenManager } from "./tokenManager-BVXxfHRa.mjs";
1
+ import { TokenManager } from "./tokenManager-Ci2Tgxp8.mjs";
2
2
 
3
3
  export { TokenManager };
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@geekmidas/auth",
3
- "version": "0.0.5",
3
+ "version": "0.2.0",
4
+ "description": "JWT and OIDC authentication with token verification, Hono middleware, and Lambda authorizers",
4
5
  "type": "module",
5
6
  "exports": {
6
7
  ".": {
@@ -61,17 +62,21 @@
61
62
  "@openauthjs/openauth": "~0.4.3",
62
63
  "jose": "~5.10.0",
63
64
  "jsonwebtoken": "^9.0.2",
64
- "@types/ms": "~2.1.0",
65
- "@geekmidas/cache": "0.0.7"
65
+ "@types/ms": "~2.1.0"
66
66
  },
67
67
  "devDependencies": {
68
- "@types/jsonwebtoken": "^9.0.5"
68
+ "@types/jsonwebtoken": "^9.0.5",
69
+ "@geekmidas/cache": "^0.2.0"
69
70
  },
70
71
  "peerDependencies": {
71
72
  "@types/aws-lambda": ">=8.10.92",
72
- "hono": ">=4.0.0"
73
+ "hono": ">=4.0.0",
74
+ "@geekmidas/cache": "^0.2.0"
73
75
  },
74
76
  "peerDependenciesMeta": {
77
+ "@geekmidas/cache": {
78
+ "optional": true
79
+ },
75
80
  "@types/aws-lambda": {
76
81
  "optional": true
77
82
  },
@@ -4,210 +4,210 @@ import { beforeEach, describe, expect, it } from 'vitest';
4
4
  import { CacheTokenStorage } from '../cacheTokenStorage.ts';
5
5
 
6
6
  describe('CacheTokenStorage', () => {
7
- let storage: CacheTokenStorage;
8
- let cache: Cache<string>;
7
+ let storage: CacheTokenStorage;
8
+ let cache: Cache<string>;
9
9
 
10
- beforeEach(() => {
11
- cache = new InMemoryCache<string>();
12
- storage = new CacheTokenStorage(cache);
13
- });
10
+ beforeEach(() => {
11
+ cache = new InMemoryCache<string>();
12
+ storage = new CacheTokenStorage(cache);
13
+ });
14
14
 
15
- describe('access token operations', () => {
16
- it('should store and retrieve access token', async () => {
17
- await storage.setAccessToken('test-access-token');
15
+ describe('access token operations', () => {
16
+ it('should store and retrieve access token', async () => {
17
+ await storage.setAccessToken('test-access-token');
18
18
 
19
- const token = await storage.getAccessToken();
19
+ const token = await storage.getAccessToken();
20
20
 
21
- expect(token).toBe('test-access-token');
22
- });
21
+ expect(token).toBe('test-access-token');
22
+ });
23
23
 
24
- it('should return null when no access token exists', async () => {
25
- const token = await storage.getAccessToken();
24
+ it('should return null when no access token exists', async () => {
25
+ const token = await storage.getAccessToken();
26
26
 
27
- expect(token).toBeNull();
28
- });
27
+ expect(token).toBeNull();
28
+ });
29
29
 
30
- it('should store access token with TTL', async () => {
31
- await storage.setAccessToken('test-access-token', 3600);
30
+ it('should store access token with TTL', async () => {
31
+ await storage.setAccessToken('test-access-token', 3600);
32
32
 
33
- const token = await storage.getAccessToken();
33
+ const token = await storage.getAccessToken();
34
34
 
35
- expect(token).toBe('test-access-token');
36
- });
35
+ expect(token).toBe('test-access-token');
36
+ });
37
37
 
38
- it('should overwrite existing access token', async () => {
39
- await storage.setAccessToken('first-token');
40
- await storage.setAccessToken('second-token');
38
+ it('should overwrite existing access token', async () => {
39
+ await storage.setAccessToken('first-token');
40
+ await storage.setAccessToken('second-token');
41
41
 
42
- const token = await storage.getAccessToken();
42
+ const token = await storage.getAccessToken();
43
43
 
44
- expect(token).toBe('second-token');
45
- });
46
- });
44
+ expect(token).toBe('second-token');
45
+ });
46
+ });
47
47
 
48
- describe('refresh token operations', () => {
49
- it('should store and retrieve refresh token', async () => {
50
- await storage.setRefreshToken('test-refresh-token');
48
+ describe('refresh token operations', () => {
49
+ it('should store and retrieve refresh token', async () => {
50
+ await storage.setRefreshToken('test-refresh-token');
51
51
 
52
- const token = await storage.getRefreshToken();
52
+ const token = await storage.getRefreshToken();
53
53
 
54
- expect(token).toBe('test-refresh-token');
55
- });
54
+ expect(token).toBe('test-refresh-token');
55
+ });
56
56
 
57
- it('should return null when no refresh token exists', async () => {
58
- const token = await storage.getRefreshToken();
57
+ it('should return null when no refresh token exists', async () => {
58
+ const token = await storage.getRefreshToken();
59
59
 
60
- expect(token).toBeNull();
61
- });
60
+ expect(token).toBeNull();
61
+ });
62
62
 
63
- it('should store refresh token with TTL', async () => {
64
- await storage.setRefreshToken('test-refresh-token', 7200);
63
+ it('should store refresh token with TTL', async () => {
64
+ await storage.setRefreshToken('test-refresh-token', 7200);
65
65
 
66
- const token = await storage.getRefreshToken();
66
+ const token = await storage.getRefreshToken();
67
67
 
68
- expect(token).toBe('test-refresh-token');
69
- });
68
+ expect(token).toBe('test-refresh-token');
69
+ });
70
70
 
71
- it('should overwrite existing refresh token', async () => {
72
- await storage.setRefreshToken('first-refresh-token');
73
- await storage.setRefreshToken('second-refresh-token');
71
+ it('should overwrite existing refresh token', async () => {
72
+ await storage.setRefreshToken('first-refresh-token');
73
+ await storage.setRefreshToken('second-refresh-token');
74
74
 
75
- const token = await storage.getRefreshToken();
75
+ const token = await storage.getRefreshToken();
76
76
 
77
- expect(token).toBe('second-refresh-token');
78
- });
79
- });
77
+ expect(token).toBe('second-refresh-token');
78
+ });
79
+ });
80
80
 
81
- describe('token lifecycle', () => {
82
- it('should store both tokens independently', async () => {
83
- await storage.setAccessToken('access-token');
84
- await storage.setRefreshToken('refresh-token');
81
+ describe('token lifecycle', () => {
82
+ it('should store both tokens independently', async () => {
83
+ await storage.setAccessToken('access-token');
84
+ await storage.setRefreshToken('refresh-token');
85
85
 
86
- const accessToken = await storage.getAccessToken();
87
- const refreshToken = await storage.getRefreshToken();
86
+ const accessToken = await storage.getAccessToken();
87
+ const refreshToken = await storage.getRefreshToken();
88
88
 
89
- expect(accessToken).toBe('access-token');
90
- expect(refreshToken).toBe('refresh-token');
91
- });
89
+ expect(accessToken).toBe('access-token');
90
+ expect(refreshToken).toBe('refresh-token');
91
+ });
92
92
 
93
- it('should clear both tokens', async () => {
94
- await storage.setAccessToken('access-token');
95
- await storage.setRefreshToken('refresh-token');
93
+ it('should clear both tokens', async () => {
94
+ await storage.setAccessToken('access-token');
95
+ await storage.setRefreshToken('refresh-token');
96
96
 
97
- await storage.clearTokens();
97
+ await storage.clearTokens();
98
98
 
99
- const accessToken = await storage.getAccessToken();
100
- const refreshToken = await storage.getRefreshToken();
99
+ const accessToken = await storage.getAccessToken();
100
+ const refreshToken = await storage.getRefreshToken();
101
101
 
102
- expect(accessToken).toBeNull();
103
- expect(refreshToken).toBeNull();
104
- });
102
+ expect(accessToken).toBeNull();
103
+ expect(refreshToken).toBeNull();
104
+ });
105
105
 
106
- it('should clear tokens when some are missing', async () => {
107
- await storage.setAccessToken('access-token');
106
+ it('should clear tokens when some are missing', async () => {
107
+ await storage.setAccessToken('access-token');
108
108
 
109
- await storage.clearTokens();
109
+ await storage.clearTokens();
110
110
 
111
- const accessToken = await storage.getAccessToken();
112
- const refreshToken = await storage.getRefreshToken();
111
+ const accessToken = await storage.getAccessToken();
112
+ const refreshToken = await storage.getRefreshToken();
113
113
 
114
- expect(accessToken).toBeNull();
115
- expect(refreshToken).toBeNull();
116
- });
117
- });
114
+ expect(accessToken).toBeNull();
115
+ expect(refreshToken).toBeNull();
116
+ });
117
+ });
118
118
 
119
- describe('custom storage keys', () => {
120
- it('should use custom keys for token storage', async () => {
121
- const customStorage = new CacheTokenStorage(
122
- cache,
123
- 'custom_access_key',
124
- 'custom_refresh_key',
125
- );
119
+ describe('custom storage keys', () => {
120
+ it('should use custom keys for token storage', async () => {
121
+ const customStorage = new CacheTokenStorage(
122
+ cache,
123
+ 'custom_access_key',
124
+ 'custom_refresh_key',
125
+ );
126
126
 
127
- await customStorage.setAccessToken('access-token');
128
- await customStorage.setRefreshToken('refresh-token');
127
+ await customStorage.setAccessToken('access-token');
128
+ await customStorage.setRefreshToken('refresh-token');
129
129
 
130
- const accessToken = await customStorage.getAccessToken();
131
- const refreshToken = await customStorage.getRefreshToken();
130
+ const accessToken = await customStorage.getAccessToken();
131
+ const refreshToken = await customStorage.getRefreshToken();
132
132
 
133
- expect(accessToken).toBe('access-token');
134
- expect(refreshToken).toBe('refresh-token');
135
- });
133
+ expect(accessToken).toBe('access-token');
134
+ expect(refreshToken).toBe('refresh-token');
135
+ });
136
136
 
137
- it('should isolate tokens between different storage instances', async () => {
138
- const defaultStorage = new CacheTokenStorage(cache);
139
- const customStorage = new CacheTokenStorage(
140
- cache,
141
- 'custom_access',
142
- 'custom_refresh',
143
- );
137
+ it('should isolate tokens between different storage instances', async () => {
138
+ const defaultStorage = new CacheTokenStorage(cache);
139
+ const customStorage = new CacheTokenStorage(
140
+ cache,
141
+ 'custom_access',
142
+ 'custom_refresh',
143
+ );
144
144
 
145
- await defaultStorage.setAccessToken('default-access');
146
- await customStorage.setAccessToken('custom-access');
145
+ await defaultStorage.setAccessToken('default-access');
146
+ await customStorage.setAccessToken('custom-access');
147
147
 
148
- const defaultToken = await defaultStorage.getAccessToken();
149
- const customToken = await customStorage.getAccessToken();
148
+ const defaultToken = await defaultStorage.getAccessToken();
149
+ const customToken = await customStorage.getAccessToken();
150
150
 
151
- expect(defaultToken).toBe('default-access');
152
- expect(customToken).toBe('custom-access');
153
- });
151
+ expect(defaultToken).toBe('default-access');
152
+ expect(customToken).toBe('custom-access');
153
+ });
154
154
 
155
- it('should clear tokens independently with custom keys', async () => {
156
- const defaultStorage = new CacheTokenStorage(cache);
157
- const customStorage = new CacheTokenStorage(
158
- cache,
159
- 'custom_access',
160
- 'custom_refresh',
161
- );
155
+ it('should clear tokens independently with custom keys', async () => {
156
+ const defaultStorage = new CacheTokenStorage(cache);
157
+ const customStorage = new CacheTokenStorage(
158
+ cache,
159
+ 'custom_access',
160
+ 'custom_refresh',
161
+ );
162
162
 
163
- await defaultStorage.setAccessToken('default-access');
164
- await customStorage.setAccessToken('custom-access');
163
+ await defaultStorage.setAccessToken('default-access');
164
+ await customStorage.setAccessToken('custom-access');
165
165
 
166
- await defaultStorage.clearTokens();
166
+ await defaultStorage.clearTokens();
167
167
 
168
- const defaultToken = await defaultStorage.getAccessToken();
169
- const customToken = await customStorage.getAccessToken();
168
+ const defaultToken = await defaultStorage.getAccessToken();
169
+ const customToken = await customStorage.getAccessToken();
170
170
 
171
- expect(defaultToken).toBeNull();
172
- expect(customToken).toBe('custom-access');
173
- });
174
- });
171
+ expect(defaultToken).toBeNull();
172
+ expect(customToken).toBe('custom-access');
173
+ });
174
+ });
175
175
 
176
- describe('integration with real cache', () => {
177
- it('should work with multiple cache instances', async () => {
178
- const cache1 = new InMemoryCache<string>();
179
- const cache2 = new InMemoryCache<string>();
176
+ describe('integration with real cache', () => {
177
+ it('should work with multiple cache instances', async () => {
178
+ const cache1 = new InMemoryCache<string>();
179
+ const cache2 = new InMemoryCache<string>();
180
180
 
181
- const storage1 = new CacheTokenStorage(cache1);
182
- const storage2 = new CacheTokenStorage(cache2);
181
+ const storage1 = new CacheTokenStorage(cache1);
182
+ const storage2 = new CacheTokenStorage(cache2);
183
183
 
184
- await storage1.setAccessToken('token-1');
185
- await storage2.setAccessToken('token-2');
184
+ await storage1.setAccessToken('token-1');
185
+ await storage2.setAccessToken('token-2');
186
186
 
187
- const token1 = await storage1.getAccessToken();
188
- const token2 = await storage2.getAccessToken();
187
+ const token1 = await storage1.getAccessToken();
188
+ const token2 = await storage2.getAccessToken();
189
189
 
190
- expect(token1).toBe('token-1');
191
- expect(token2).toBe('token-2');
192
- });
190
+ expect(token1).toBe('token-1');
191
+ expect(token2).toBe('token-2');
192
+ });
193
193
 
194
- it('should maintain token state across operations', async () => {
195
- await storage.setAccessToken('initial-access');
196
- await storage.setRefreshToken('initial-refresh');
194
+ it('should maintain token state across operations', async () => {
195
+ await storage.setAccessToken('initial-access');
196
+ await storage.setRefreshToken('initial-refresh');
197
197
 
198
- let accessToken = await storage.getAccessToken();
199
- let refreshToken = await storage.getRefreshToken();
198
+ let accessToken = await storage.getAccessToken();
199
+ let refreshToken = await storage.getRefreshToken();
200
200
 
201
- expect(accessToken).toBe('initial-access');
202
- expect(refreshToken).toBe('initial-refresh');
201
+ expect(accessToken).toBe('initial-access');
202
+ expect(refreshToken).toBe('initial-refresh');
203
203
 
204
- await storage.setAccessToken('updated-access');
204
+ await storage.setAccessToken('updated-access');
205
205
 
206
- accessToken = await storage.getAccessToken();
207
- refreshToken = await storage.getRefreshToken();
206
+ accessToken = await storage.getAccessToken();
207
+ refreshToken = await storage.getRefreshToken();
208
208
 
209
- expect(accessToken).toBe('updated-access');
210
- expect(refreshToken).toBe('initial-refresh');
211
- });
212
- });
209
+ expect(accessToken).toBe('updated-access');
210
+ expect(refreshToken).toBe('initial-refresh');
211
+ });
212
+ });
213
213
  });