@geekmidas/auth 10.0.0-alpha.99 → 10.0.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 (147) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/dist/cacheTokenStorage-16NE8Cd9.mjs +32 -0
  3. package/dist/cacheTokenStorage-16NE8Cd9.mjs.map +1 -0
  4. package/dist/{cacheTokenStorage-B3u8Sf-6.d.cts → cacheTokenStorage-B7sOoysu.d.cts} +5 -2
  5. package/dist/cacheTokenStorage-B7sOoysu.d.cts.map +1 -0
  6. package/dist/cacheTokenStorage-CEpMniTi.cjs +38 -0
  7. package/dist/cacheTokenStorage-CEpMniTi.cjs.map +1 -0
  8. package/dist/{cacheTokenStorage-B3u8Sf-6.d.mts → cacheTokenStorage-_tq4Kmhc.d.mts} +5 -2
  9. package/dist/cacheTokenStorage-_tq4Kmhc.d.mts.map +1 -0
  10. package/dist/cacheTokenStorage.cjs +2 -30
  11. package/dist/cacheTokenStorage.d.cts +1 -1
  12. package/dist/cacheTokenStorage.d.mts +1 -1
  13. package/dist/cacheTokenStorage.mjs +2 -29
  14. package/dist/{rolldown-runtime-VH7oDXx4.cjs → chunk-CUT6urMc.cjs} +10 -8
  15. package/dist/client-BPl_mMvb.cjs +162 -0
  16. package/dist/client-BPl_mMvb.cjs.map +1 -0
  17. package/dist/client-eidYNJSH.mjs +144 -0
  18. package/dist/client-eidYNJSH.mjs.map +1 -0
  19. package/dist/client.cjs +6 -144
  20. package/dist/client.d.cts +1 -1
  21. package/dist/client.d.mts +1 -1
  22. package/dist/client.mjs +3 -140
  23. package/dist/hono/jwt.cjs +10 -7
  24. package/dist/hono/jwt.cjs.map +1 -1
  25. package/dist/hono/jwt.d.cts +6 -4
  26. package/dist/hono/jwt.d.cts.map +1 -1
  27. package/dist/hono/jwt.d.mts +6 -4
  28. package/dist/hono/jwt.d.mts.map +1 -1
  29. package/dist/hono/jwt.mjs +10 -7
  30. package/dist/hono/jwt.mjs.map +1 -1
  31. package/dist/hono/oidc.cjs +10 -7
  32. package/dist/hono/oidc.cjs.map +1 -1
  33. package/dist/hono/oidc.d.cts +7 -5
  34. package/dist/hono/oidc.d.cts.map +1 -1
  35. package/dist/hono/oidc.d.mts +7 -5
  36. package/dist/hono/oidc.d.mts.map +1 -1
  37. package/dist/hono/oidc.mjs +10 -7
  38. package/dist/hono/oidc.mjs.map +1 -1
  39. package/dist/index.cjs +5 -5
  40. package/dist/index.d.cts +2 -2
  41. package/dist/index.d.mts +2 -2
  42. package/dist/index.mjs +5 -4
  43. package/dist/{jwt-CoKrpeMB.d.mts → jwt-3eIuY2dg.d.cts} +3 -2
  44. package/dist/jwt-3eIuY2dg.d.cts.map +1 -0
  45. package/dist/jwt-Bo_eACEi.cjs +70 -0
  46. package/dist/jwt-Bo_eACEi.cjs.map +1 -0
  47. package/dist/{jwt-CoKrpeMB.d.cts → jwt-BqLlRkw-.d.mts} +3 -2
  48. package/dist/jwt-BqLlRkw-.d.mts.map +1 -0
  49. package/dist/jwt-D88cPJyT.mjs +52 -0
  50. package/dist/jwt-D88cPJyT.mjs.map +1 -0
  51. package/dist/jwt.cjs +4 -56
  52. package/dist/jwt.d.cts +1 -1
  53. package/dist/jwt.d.mts +1 -1
  54. package/dist/jwt.mjs +2 -51
  55. package/dist/lambda/jwt.cjs +20 -16
  56. package/dist/lambda/jwt.cjs.map +1 -1
  57. package/dist/lambda/jwt.d.cts +6 -4
  58. package/dist/lambda/jwt.d.cts.map +1 -1
  59. package/dist/lambda/jwt.d.mts +6 -4
  60. package/dist/lambda/jwt.d.mts.map +1 -1
  61. package/dist/lambda/jwt.mjs +20 -16
  62. package/dist/lambda/jwt.mjs.map +1 -1
  63. package/dist/lambda/oidc.cjs +20 -16
  64. package/dist/lambda/oidc.cjs.map +1 -1
  65. package/dist/lambda/oidc.d.cts +7 -5
  66. package/dist/lambda/oidc.d.cts.map +1 -1
  67. package/dist/lambda/oidc.d.mts +7 -5
  68. package/dist/lambda/oidc.d.mts.map +1 -1
  69. package/dist/lambda/oidc.mjs +20 -16
  70. package/dist/lambda/oidc.mjs.map +1 -1
  71. package/dist/oidc-C0KyYaAK.cjs +68 -0
  72. package/dist/oidc-C0KyYaAK.cjs.map +1 -0
  73. package/dist/oidc-ChA17wLB.d.cts +87 -0
  74. package/dist/oidc-ChA17wLB.d.cts.map +1 -0
  75. package/dist/oidc-DTRgBBl6.d.mts +87 -0
  76. package/dist/oidc-DTRgBBl6.d.mts.map +1 -0
  77. package/dist/oidc-KA30gMlx.mjs +62 -0
  78. package/dist/oidc-KA30gMlx.mjs.map +1 -0
  79. package/dist/oidc.cjs +2 -64
  80. package/dist/oidc.d.cts +3 -84
  81. package/dist/oidc.d.mts +3 -84
  82. package/dist/oidc.mjs +2 -61
  83. package/dist/server.cjs +4 -4
  84. package/dist/server.d.cts +3 -3
  85. package/dist/server.d.mts +3 -3
  86. package/dist/server.mjs +4 -3
  87. package/dist/tokenManager-CL3yE06D.d.cts +40 -0
  88. package/dist/tokenManager-CL3yE06D.d.cts.map +1 -0
  89. package/dist/tokenManager-Ci2Tgxp8.mjs +66 -0
  90. package/dist/tokenManager-Ci2Tgxp8.mjs.map +1 -0
  91. package/dist/tokenManager-CvEMgxOp.cjs +72 -0
  92. package/dist/tokenManager-CvEMgxOp.cjs.map +1 -0
  93. package/dist/tokenManager-RrwjL0y-.d.mts +40 -0
  94. package/dist/tokenManager-RrwjL0y-.d.mts.map +1 -0
  95. package/dist/tokenManager.cjs +2 -64
  96. package/dist/tokenManager.d.cts +2 -37
  97. package/dist/tokenManager.d.mts +2 -37
  98. package/dist/tokenManager.mjs +2 -61
  99. package/package.json +9 -13
  100. package/src/__tests__/cacheTokenStorage.spec.ts +213 -0
  101. package/src/__tests__/client.spec.ts +465 -0
  102. package/src/__tests__/hono-jwt.spec.ts +232 -0
  103. package/src/__tests__/hono-oidc.spec.ts +605 -0
  104. package/src/__tests__/jwt.spec.ts +197 -0
  105. package/src/__tests__/lambda-jwt.spec.ts +278 -0
  106. package/src/__tests__/lambda-oidc.spec.ts +624 -0
  107. package/src/__tests__/oidc.spec.ts +405 -0
  108. package/src/__tests__/tokenManager.spec.ts +259 -0
  109. package/src/cacheTokenStorage.ts +43 -0
  110. package/src/client.ts +220 -0
  111. package/src/hono/jwt.ts +142 -0
  112. package/src/hono/oidc.ts +170 -0
  113. package/src/index.ts +3 -0
  114. package/src/jwt.ts +106 -0
  115. package/src/lambda/jwt.ts +210 -0
  116. package/src/lambda/oidc.ts +203 -0
  117. package/src/oidc.ts +156 -0
  118. package/src/server.ts +8 -0
  119. package/src/tokenManager.ts +106 -0
  120. package/tsconfig.json +10 -0
  121. package/tsdown.config.ts +3 -0
  122. package/dist/cacheTokenStorage-B3u8Sf-6.d.cts.map +0 -1
  123. package/dist/cacheTokenStorage-B3u8Sf-6.d.mts.map +0 -1
  124. package/dist/cacheTokenStorage.cjs.map +0 -1
  125. package/dist/cacheTokenStorage.mjs.map +0 -1
  126. package/dist/client.cjs.map +0 -1
  127. package/dist/client.mjs.map +0 -1
  128. package/dist/cookies.cjs +0 -25
  129. package/dist/cookies.cjs.map +0 -1
  130. package/dist/cookies.d.cts +0 -12
  131. package/dist/cookies.d.cts.map +0 -1
  132. package/dist/cookies.d.mts +0 -12
  133. package/dist/cookies.d.mts.map +0 -1
  134. package/dist/cookies.mjs +0 -24
  135. package/dist/cookies.mjs.map +0 -1
  136. package/dist/jwt-CoKrpeMB.d.cts.map +0 -1
  137. package/dist/jwt-CoKrpeMB.d.mts.map +0 -1
  138. package/dist/jwt.cjs.map +0 -1
  139. package/dist/jwt.mjs.map +0 -1
  140. package/dist/oidc.cjs.map +0 -1
  141. package/dist/oidc.d.cts.map +0 -1
  142. package/dist/oidc.d.mts.map +0 -1
  143. package/dist/oidc.mjs.map +0 -1
  144. package/dist/tokenManager.cjs.map +0 -1
  145. package/dist/tokenManager.d.cts.map +0 -1
  146. package/dist/tokenManager.d.mts.map +0 -1
  147. package/dist/tokenManager.mjs.map +0 -1
package/dist/client.cjs CHANGED
@@ -1,145 +1,7 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_cacheTokenStorage = require("./cacheTokenStorage.cjs");
3
- //#region src/client.ts
4
- var LocalStorageTokenStorage = class {
5
- accessTokenKey;
6
- refreshTokenKey;
7
- constructor(accessTokenKey = "access_token", refreshTokenKey = "refresh_token") {
8
- this.accessTokenKey = accessTokenKey;
9
- this.refreshTokenKey = refreshTokenKey;
10
- }
11
- getAccessToken() {
12
- if (typeof window === "undefined") return null;
13
- return localStorage.getItem(this.accessTokenKey);
14
- }
15
- setAccessToken(token, _ttl) {
16
- if (typeof window === "undefined") return;
17
- localStorage.setItem(this.accessTokenKey, token);
18
- }
19
- getRefreshToken() {
20
- if (typeof window === "undefined") return null;
21
- return localStorage.getItem(this.refreshTokenKey);
22
- }
23
- setRefreshToken(token, _ttl) {
24
- if (typeof window === "undefined") return;
25
- localStorage.setItem(this.refreshTokenKey, token);
26
- }
27
- clearTokens() {
28
- if (typeof window === "undefined") return;
29
- localStorage.removeItem(this.accessTokenKey);
30
- localStorage.removeItem(this.refreshTokenKey);
31
- }
32
- };
33
- var MemoryTokenStorage = class {
34
- accessToken = null;
35
- refreshToken = null;
36
- getAccessToken() {
37
- return this.accessToken;
38
- }
39
- setAccessToken(token, _ttl) {
40
- this.accessToken = token;
41
- }
42
- getRefreshToken() {
43
- return this.refreshToken;
44
- }
45
- setRefreshToken(token, _ttl) {
46
- this.refreshToken = token;
47
- }
48
- clearTokens() {
49
- this.accessToken = null;
50
- this.refreshToken = null;
51
- }
52
- };
53
- var TokenClient = class {
54
- storage;
55
- refreshEndpoint;
56
- onTokenRefresh;
57
- onTokenExpired;
58
- constructor(options = {}) {
59
- this.storage = options.storage || new LocalStorageTokenStorage();
60
- this.refreshEndpoint = options.refreshEndpoint;
61
- this.onTokenRefresh = options.onTokenRefresh;
62
- this.onTokenExpired = options.onTokenExpired;
63
- }
64
- async getAccessToken() {
65
- return await this.storage.getAccessToken();
66
- }
67
- async getRefreshToken() {
68
- return await this.storage.getRefreshToken();
69
- }
70
- async setTokens(accessToken, refreshToken, accessTtl, refreshTtl) {
71
- await this.storage.setAccessToken(accessToken, accessTtl);
72
- if (refreshToken) await this.storage.setRefreshToken(refreshToken, refreshTtl);
73
- }
74
- async clearTokens() {
75
- await this.storage.clearTokens();
76
- }
77
- isTokenExpired(token) {
78
- try {
79
- const payloadPart = token.split(".")[1];
80
- if (!payloadPart) return true;
81
- const payload = JSON.parse(atob(payloadPart));
82
- const now = Math.floor(Date.now() / 1e3);
83
- return payload.exp < now;
84
- } catch {
85
- return true;
86
- }
87
- }
88
- getTokenExpiration(token) {
89
- try {
90
- const payloadPart = token.split(".")[1];
91
- if (!payloadPart) return null;
92
- const payload = JSON.parse(atob(payloadPart));
93
- return /* @__PURE__ */ new Date(payload.exp * 1e3);
94
- } catch {
95
- return null;
96
- }
97
- }
98
- async refreshTokens() {
99
- const refreshToken = await this.getRefreshToken();
100
- if (!refreshToken || !this.refreshEndpoint) return false;
101
- try {
102
- const response = await fetch(this.refreshEndpoint, {
103
- method: "POST",
104
- headers: { "Content-Type": "application/json" },
105
- body: JSON.stringify({ refreshToken })
106
- });
107
- if (!response.ok) throw new Error("Failed to refresh token");
108
- const { accessToken, refreshToken: newRefreshToken } = await response.json();
109
- await this.setTokens(accessToken, newRefreshToken);
110
- if (this.onTokenRefresh) this.onTokenRefresh({
111
- accessToken,
112
- refreshToken: newRefreshToken
113
- });
114
- return true;
115
- } catch (_error) {
116
- await this.clearTokens();
117
- if (this.onTokenExpired) this.onTokenExpired();
118
- return false;
119
- }
120
- }
121
- async getValidAccessToken() {
122
- const accessToken = await this.getAccessToken();
123
- if (!accessToken) return null;
124
- if (this.isTokenExpired(accessToken)) {
125
- if (!await this.refreshTokens()) return null;
126
- return await this.getAccessToken();
127
- }
128
- return accessToken;
129
- }
130
- async createAuthHeaders() {
131
- const token = await this.getAccessToken();
132
- return token ? { Authorization: `Bearer ${token}` } : {};
133
- }
134
- async createValidAuthHeaders() {
135
- const token = await this.getValidAccessToken();
136
- return token ? { Authorization: `Bearer ${token}` } : {};
137
- }
138
- };
139
- //#endregion
140
- exports.CacheTokenStorage = require_cacheTokenStorage.CacheTokenStorage;
141
- exports.LocalStorageTokenStorage = LocalStorageTokenStorage;
142
- exports.MemoryTokenStorage = MemoryTokenStorage;
143
- exports.TokenClient = TokenClient;
1
+ const require_cacheTokenStorage = require('./cacheTokenStorage-CEpMniTi.cjs');
2
+ const require_client = require('./client-BPl_mMvb.cjs');
144
3
 
145
- //# sourceMappingURL=client.cjs.map
4
+ exports.CacheTokenStorage = require_cacheTokenStorage.CacheTokenStorage;
5
+ exports.LocalStorageTokenStorage = require_client.LocalStorageTokenStorage;
6
+ exports.MemoryTokenStorage = require_client.MemoryTokenStorage;
7
+ exports.TokenClient = require_client.TokenClient;
package/dist/client.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as TokenClientOptions, i as TokenClient, n as LocalStorageTokenStorage, o as TokenStorage, r as MemoryTokenStorage, t as CacheTokenStorage } from "./cacheTokenStorage-B3u8Sf-6.cjs";
1
+ import { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage } from "./cacheTokenStorage-B7sOoysu.cjs";
2
2
  export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage };
package/dist/client.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as TokenClientOptions, i as TokenClient, n as LocalStorageTokenStorage, o as TokenStorage, r as MemoryTokenStorage, t as CacheTokenStorage } from "./cacheTokenStorage-B3u8Sf-6.mjs";
1
+ import { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage } from "./cacheTokenStorage-_tq4Kmhc.mjs";
2
2
  export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient, TokenClientOptions, TokenStorage };
package/dist/client.mjs CHANGED
@@ -1,141 +1,4 @@
1
- import { CacheTokenStorage } from "./cacheTokenStorage.mjs";
2
- //#region src/client.ts
3
- var LocalStorageTokenStorage = class {
4
- accessTokenKey;
5
- refreshTokenKey;
6
- constructor(accessTokenKey = "access_token", refreshTokenKey = "refresh_token") {
7
- this.accessTokenKey = accessTokenKey;
8
- this.refreshTokenKey = refreshTokenKey;
9
- }
10
- getAccessToken() {
11
- if (typeof window === "undefined") return null;
12
- return localStorage.getItem(this.accessTokenKey);
13
- }
14
- setAccessToken(token, _ttl) {
15
- if (typeof window === "undefined") return;
16
- localStorage.setItem(this.accessTokenKey, token);
17
- }
18
- getRefreshToken() {
19
- if (typeof window === "undefined") return null;
20
- return localStorage.getItem(this.refreshTokenKey);
21
- }
22
- setRefreshToken(token, _ttl) {
23
- if (typeof window === "undefined") return;
24
- localStorage.setItem(this.refreshTokenKey, token);
25
- }
26
- clearTokens() {
27
- if (typeof window === "undefined") return;
28
- localStorage.removeItem(this.accessTokenKey);
29
- localStorage.removeItem(this.refreshTokenKey);
30
- }
31
- };
32
- var MemoryTokenStorage = class {
33
- accessToken = null;
34
- refreshToken = null;
35
- getAccessToken() {
36
- return this.accessToken;
37
- }
38
- setAccessToken(token, _ttl) {
39
- this.accessToken = token;
40
- }
41
- getRefreshToken() {
42
- return this.refreshToken;
43
- }
44
- setRefreshToken(token, _ttl) {
45
- this.refreshToken = token;
46
- }
47
- clearTokens() {
48
- this.accessToken = null;
49
- this.refreshToken = null;
50
- }
51
- };
52
- var TokenClient = class {
53
- storage;
54
- refreshEndpoint;
55
- onTokenRefresh;
56
- onTokenExpired;
57
- constructor(options = {}) {
58
- this.storage = options.storage || new LocalStorageTokenStorage();
59
- this.refreshEndpoint = options.refreshEndpoint;
60
- this.onTokenRefresh = options.onTokenRefresh;
61
- this.onTokenExpired = options.onTokenExpired;
62
- }
63
- async getAccessToken() {
64
- return await this.storage.getAccessToken();
65
- }
66
- async getRefreshToken() {
67
- return await this.storage.getRefreshToken();
68
- }
69
- async setTokens(accessToken, refreshToken, accessTtl, refreshTtl) {
70
- await this.storage.setAccessToken(accessToken, accessTtl);
71
- if (refreshToken) await this.storage.setRefreshToken(refreshToken, refreshTtl);
72
- }
73
- async clearTokens() {
74
- await this.storage.clearTokens();
75
- }
76
- isTokenExpired(token) {
77
- try {
78
- const payloadPart = token.split(".")[1];
79
- if (!payloadPart) return true;
80
- const payload = JSON.parse(atob(payloadPart));
81
- const now = Math.floor(Date.now() / 1e3);
82
- return payload.exp < now;
83
- } catch {
84
- return true;
85
- }
86
- }
87
- getTokenExpiration(token) {
88
- try {
89
- const payloadPart = token.split(".")[1];
90
- if (!payloadPart) return null;
91
- const payload = JSON.parse(atob(payloadPart));
92
- return /* @__PURE__ */ new Date(payload.exp * 1e3);
93
- } catch {
94
- return null;
95
- }
96
- }
97
- async refreshTokens() {
98
- const refreshToken = await this.getRefreshToken();
99
- if (!refreshToken || !this.refreshEndpoint) return false;
100
- try {
101
- const response = await fetch(this.refreshEndpoint, {
102
- method: "POST",
103
- headers: { "Content-Type": "application/json" },
104
- body: JSON.stringify({ refreshToken })
105
- });
106
- if (!response.ok) throw new Error("Failed to refresh token");
107
- const { accessToken, refreshToken: newRefreshToken } = await response.json();
108
- await this.setTokens(accessToken, newRefreshToken);
109
- if (this.onTokenRefresh) this.onTokenRefresh({
110
- accessToken,
111
- refreshToken: newRefreshToken
112
- });
113
- return true;
114
- } catch (_error) {
115
- await this.clearTokens();
116
- if (this.onTokenExpired) this.onTokenExpired();
117
- return false;
118
- }
119
- }
120
- async getValidAccessToken() {
121
- const accessToken = await this.getAccessToken();
122
- if (!accessToken) return null;
123
- if (this.isTokenExpired(accessToken)) {
124
- if (!await this.refreshTokens()) return null;
125
- return await this.getAccessToken();
126
- }
127
- return accessToken;
128
- }
129
- async createAuthHeaders() {
130
- const token = await this.getAccessToken();
131
- return token ? { Authorization: `Bearer ${token}` } : {};
132
- }
133
- async createValidAuthHeaders() {
134
- const token = await this.getValidAccessToken();
135
- return token ? { Authorization: `Bearer ${token}` } : {};
136
- }
137
- };
138
- //#endregion
139
- export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient };
1
+ import { CacheTokenStorage } from "./cacheTokenStorage-16NE8Cd9.mjs";
2
+ import { LocalStorageTokenStorage, MemoryTokenStorage, TokenClient } from "./client-eidYNJSH.mjs";
140
3
 
141
- //# sourceMappingURL=client.mjs.map
4
+ export { CacheTokenStorage, LocalStorageTokenStorage, MemoryTokenStorage, TokenClient };
package/dist/hono/jwt.cjs CHANGED
@@ -1,6 +1,5 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_cookies = require("../cookies.cjs");
3
- const require_jwt = require("../jwt.cjs");
1
+ const require_jwt = require('../jwt-Bo_eACEi.cjs');
2
+
4
3
  //#region src/hono/jwt.ts
5
4
  function extractToken(c, options = {}) {
6
5
  const { headerName = "authorization", cookieName, tokenPrefix = "Bearer " } = options;
@@ -10,8 +9,11 @@ function extractToken(c, options = {}) {
10
9
  return headerValue;
11
10
  }
12
11
  if (cookieName) {
13
- const cookie = require_cookies.readCookie(c.req.header("cookie"), cookieName);
14
- if (cookie) return cookie;
12
+ const cookieHeader = c.req.header("cookie");
13
+ if (cookieHeader) {
14
+ const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));
15
+ if (match?.[1]) return match[1];
16
+ }
15
17
  }
16
18
  return null;
17
19
  }
@@ -50,7 +52,7 @@ var JwtMiddleware = class {
50
52
  return async (c, next) => {
51
53
  const token = extractToken(c, this.extraction);
52
54
  if (!token) {
53
- if (this.onError) return this.onError(c, /* @__PURE__ */ new Error("No token provided"));
55
+ if (this.onError) return this.onError(c, new Error("No token provided"));
54
56
  return c.json({ error: "Unauthorized" }, 401);
55
57
  }
56
58
  try {
@@ -83,7 +85,8 @@ var JwtMiddleware = class {
83
85
  };
84
86
  }
85
87
  };
88
+
86
89
  //#endregion
87
90
  exports.JwtMiddleware = JwtMiddleware;
88
-
91
+ exports.JwtVerifier = require_jwt.JwtVerifier;
89
92
  //# sourceMappingURL=jwt.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.cjs","names":["readCookie","JwtVerifier"],"sources":["../../src/hono/jwt.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport { readCookie } from '../cookies';\nimport {\n\ttype JwtClaims,\n\ttype JwtConfig,\n\tJwtVerifier,\n\ttype TokenExtractionOptions,\n} from '../jwt';\n\nexport type { JwtVerifier, JwtClaims, JwtConfig, TokenExtractionOptions };\n\nfunction extractToken(\n\tc: Context,\n\toptions: TokenExtractionOptions = {},\n): string | null {\n\tconst {\n\t\theaderName = 'authorization',\n\t\tcookieName,\n\t\ttokenPrefix = 'Bearer ',\n\t} = options;\n\n\tconst headerValue = c.req.header(headerName);\n\tif (headerValue) {\n\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t}\n\t\treturn headerValue;\n\t}\n\n\tif (cookieName) {\n\t\tconst cookie = readCookie(c.req.header('cookie'), cookieName);\n\t\tif (cookie) {\n\t\t\treturn cookie;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {\n\tconfig: JwtConfig;\n\textraction?: TokenExtractionOptions;\n\tcontextKey?: string;\n\tonError?: (c: Context, error: Error) => Response | Promise<Response>;\n\ttransformClaims?: (claims: JwtClaims) => TClaims;\n}\n\n/**\n * JWT Middleware for Hono\n *\n * @example\n * ```typescript\n * const jwt = new JwtMiddleware({\n * config: { secret: process.env.JWT_SECRET! },\n * });\n *\n * app.use('/api/*', jwt.handler());\n *\n * // Or for optional auth\n * app.use('/public/*', jwt.optional());\n * ```\n */\nexport class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {\n\tprivate readonly verifier: JwtVerifier<TClaims>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly contextKey: string;\n\tprivate readonly onError?: (\n\t\tc: Context,\n\t\terror: Error,\n\t) => Response | Promise<Response>;\n\tprivate readonly transformClaims?: (claims: JwtClaims) => TClaims;\n\n\tconstructor(options: JwtMiddlewareOptions<TClaims>) {\n\t\tthis.verifier = new JwtVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.contextKey = options.contextKey ?? 'jwtClaims';\n\t\tthis.onError = options.onError;\n\t\tthis.transformClaims = options.transformClaims;\n\t}\n\n\t/**\n\t * Returns middleware that requires valid JWT\n\t */\n\thandler(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (!token) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, new Error('No token provided'));\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst payload = await this.verifier.verify(token);\n\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t? this.transformClaims(payload)\n\t\t\t\t\t: payload;\n\n\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\tc.set('jwtToken', token);\n\n\t\t\t\tawait next();\n\t\t\t} catch (error) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, error as Error);\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Invalid token' }, 401);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Returns middleware that allows unauthenticated requests\n\t */\n\toptional(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (token) {\n\t\t\t\tconst claims = await this.verifier.verifyOrNull(token);\n\t\t\t\tif (claims) {\n\t\t\t\t\tconst transformed = this.transformClaims\n\t\t\t\t\t\t? this.transformClaims(claims)\n\t\t\t\t\t\t: claims;\n\t\t\t\t\tc.set(this.contextKey, transformed);\n\t\t\t\t\tc.set('jwtToken', token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait next();\n\t\t};\n\t}\n}\n"],"mappings":";;;;AAWA,SAAS,aACR,GACA,UAAkC,CAAC,GACnB;CAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,cACX;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,UAAU;CAC3C,IAAI,aAAa;EAChB,IAAI,eAAe,YAAY,WAAW,WAAW,GACpD,OAAO,YAAY,MAAM,YAAY,MAAM;EAE5C,OAAO;CACR;CAEA,IAAI,YAAY;EACf,MAAM,SAASA,gBAAAA,WAAW,EAAE,IAAI,OAAO,QAAQ,GAAG,UAAU;EAC5D,IAAI,QACH,OAAO;CAET;CAEA,OAAO;AACR;;;;;;;;;;;;;;;;AAyBA,IAAa,gBAAb,MAAkE;CACjE;CACA;CACA;CACA;CAIA;CAEA,YAAY,SAAwC;EACnD,KAAK,WAAW,IAAIC,YAAAA,YAAY,QAAQ,MAAM;EAC9C,KAAK,aAAa,QAAQ,cAAc,CAAC;EACzC,KAAK,aAAa,QAAQ,cAAc;EACxC,KAAK,UAAU,QAAQ;EACvB,KAAK,kBAAkB,QAAQ;CAChC;;;;CAKA,UAA6B;EAC5B,OAAO,OAAO,GAAY,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,UAAU;GAE7C,IAAI,CAAC,OAAO;IACX,IAAI,KAAK,SACR,OAAO,KAAK,QAAQ,mBAAG,IAAI,MAAM,mBAAmB,CAAC;IAEtD,OAAO,EAAE,KAAK,EAAE,OAAO,eAAe,GAAG,GAAG;GAC7C;GAEA,IAAI;IACH,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,KAAK;IAChD,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,OAAO,IAC5B;IAEH,EAAE,IAAI,KAAK,YAAY,MAAM;IAC7B,EAAE,IAAI,YAAY,KAAK;IAEvB,MAAM,KAAK;GACZ,SAAS,OAAO;IACf,IAAI,KAAK,SACR,OAAO,KAAK,QAAQ,GAAG,KAAc;IAEtC,OAAO,EAAE,KAAK,EAAE,OAAO,gBAAgB,GAAG,GAAG;GAC9C;EACD;CACD;;;;CAKA,WAA8B;EAC7B,OAAO,OAAO,GAAY,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,UAAU;GAE7C,IAAI,OAAO;IACV,MAAM,SAAS,MAAM,KAAK,SAAS,aAAa,KAAK;IACrD,IAAI,QAAQ;KACX,MAAM,cAAc,KAAK,kBACtB,KAAK,gBAAgB,MAAM,IAC3B;KACH,EAAE,IAAI,KAAK,YAAY,WAAW;KAClC,EAAE,IAAI,YAAY,KAAK;IACxB;GACD;GAEA,MAAM,KAAK;EACZ;CACD;AACD"}
1
+ {"version":3,"file":"jwt.cjs","names":["c: Context","options: TokenExtractionOptions","options: JwtMiddlewareOptions<TClaims>","JwtVerifier","next: Next"],"sources":["../../src/hono/jwt.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport {\n\ttype JwtClaims,\n\ttype JwtConfig,\n\tJwtVerifier,\n\ttype TokenExtractionOptions,\n} from '../jwt';\n\nexport {\n\tJwtVerifier,\n\ttype JwtClaims,\n\ttype JwtConfig,\n\ttype TokenExtractionOptions,\n};\n\nfunction extractToken(\n\tc: Context,\n\toptions: TokenExtractionOptions = {},\n): string | null {\n\tconst {\n\t\theaderName = 'authorization',\n\t\tcookieName,\n\t\ttokenPrefix = 'Bearer ',\n\t} = options;\n\n\tconst headerValue = c.req.header(headerName);\n\tif (headerValue) {\n\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t}\n\t\treturn headerValue;\n\t}\n\n\tif (cookieName) {\n\t\tconst cookieHeader = c.req.header('cookie');\n\t\tif (cookieHeader) {\n\t\t\tconst match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));\n\t\t\tif (match?.[1]) {\n\t\t\t\treturn match[1];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {\n\tconfig: JwtConfig;\n\textraction?: TokenExtractionOptions;\n\tcontextKey?: string;\n\tonError?: (c: Context, error: Error) => Response | Promise<Response>;\n\ttransformClaims?: (claims: JwtClaims) => TClaims;\n}\n\n/**\n * JWT Middleware for Hono\n *\n * @example\n * ```typescript\n * const jwt = new JwtMiddleware({\n * config: { secret: process.env.JWT_SECRET! },\n * });\n *\n * app.use('/api/*', jwt.handler());\n *\n * // Or for optional auth\n * app.use('/public/*', jwt.optional());\n * ```\n */\nexport class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {\n\tprivate readonly verifier: JwtVerifier<TClaims>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly contextKey: string;\n\tprivate readonly onError?: (\n\t\tc: Context,\n\t\terror: Error,\n\t) => Response | Promise<Response>;\n\tprivate readonly transformClaims?: (claims: JwtClaims) => TClaims;\n\n\tconstructor(options: JwtMiddlewareOptions<TClaims>) {\n\t\tthis.verifier = new JwtVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.contextKey = options.contextKey ?? 'jwtClaims';\n\t\tthis.onError = options.onError;\n\t\tthis.transformClaims = options.transformClaims;\n\t}\n\n\t/**\n\t * Returns middleware that requires valid JWT\n\t */\n\thandler(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (!token) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, new Error('No token provided'));\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst payload = await this.verifier.verify(token);\n\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t? this.transformClaims(payload)\n\t\t\t\t\t: payload;\n\n\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\tc.set('jwtToken', token);\n\n\t\t\t\tawait next();\n\t\t\t} catch (error) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, error as Error);\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Invalid token' }, 401);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Returns middleware that allows unauthenticated requests\n\t */\n\toptional(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (token) {\n\t\t\t\tconst claims = await this.verifier.verifyOrNull(token);\n\t\t\t\tif (claims) {\n\t\t\t\t\tconst transformed = this.transformClaims\n\t\t\t\t\t\t? this.transformClaims(claims)\n\t\t\t\t\t\t: claims;\n\t\t\t\t\tc.set(this.contextKey, transformed);\n\t\t\t\t\tc.set('jwtToken', token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait next();\n\t\t};\n\t}\n}\n"],"mappings":";;;AAeA,SAAS,aACRA,GACAC,UAAkC,CAAE,GACpB;CAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,WACd,GAAG;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,WAAW;AAC5C,KAAI,aAAa;AAChB,MAAI,eAAe,YAAY,WAAW,YAAY,CACrD,QAAO,YAAY,MAAM,YAAY,OAAO;AAE7C,SAAO;CACP;AAED,KAAI,YAAY;EACf,MAAM,eAAe,EAAE,IAAI,OAAO,SAAS;AAC3C,MAAI,cAAc;GACjB,MAAM,QAAQ,aAAa,MAAM,IAAI,QAAQ,EAAE,WAAW,WAAW;AACrE,OAAI,QAAQ,GACX,QAAO,MAAM;EAEd;CACD;AAED,QAAO;AACP;;;;;;;;;;;;;;;;AAyBD,IAAa,gBAAb,MAAkE;CACjE,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAIjB,AAAiB;CAEjB,YAAYC,SAAwC;AACnD,OAAK,WAAW,IAAIC,wBAAY,QAAQ;AACxC,OAAK,aAAa,QAAQ,cAAc,CAAE;AAC1C,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,UAAU,QAAQ;AACvB,OAAK,kBAAkB,QAAQ;CAC/B;;;;CAKD,UAA6B;AAC5B,SAAO,OAAOH,GAAYI,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,QAAK,OAAO;AACX,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,qBAAqB;AAEvD,WAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;GAC7C;AAED,OAAI;IACH,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,MAAM;IACjD,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,QAAQ,GAC7B;AAEH,MAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,MAAE,IAAI,YAAY,MAAM;AAExB,UAAM,MAAM;GACZ,SAAQ,OAAO;AACf,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,MAAe;AAEvC,WAAO,EAAE,KAAK,EAAE,OAAO,gBAAiB,GAAE,IAAI;GAC9C;EACD;CACD;;;;CAKD,WAA8B;AAC7B,SAAO,OAAOJ,GAAYI,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,OAAI,OAAO;IACV,MAAM,SAAS,MAAM,KAAK,SAAS,aAAa,MAAM;AACtD,QAAI,QAAQ;KACX,MAAM,cAAc,KAAK,kBACtB,KAAK,gBAAgB,OAAO,GAC5B;AACH,OAAE,IAAI,KAAK,YAAY,YAAY;AACnC,OAAE,IAAI,YAAY,MAAM;IACxB;GACD;AAED,SAAM,MAAM;EACZ;CACD;AACD"}
@@ -1,7 +1,8 @@
1
- import { a as JwtVerifier, n as JwtConfig, o as TokenExtractionOptions, t as JwtClaims } from "../jwt-CoKrpeMB.cjs";
1
+ import { JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions } from "../jwt-3eIuY2dg.cjs";
2
2
  import { Context, MiddlewareHandler } from "hono";
3
+
3
4
  //#region src/hono/jwt.d.ts
4
- export interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {
5
+ interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {
5
6
  config: JwtConfig;
6
7
  extraction?: TokenExtractionOptions;
7
8
  contextKey?: string;
@@ -23,7 +24,7 @@ export interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {
23
24
  * app.use('/public/*', jwt.optional());
24
25
  * ```
25
26
  */
26
- export declare class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {
27
+ declare class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {
27
28
  private readonly verifier;
28
29
  private readonly extraction;
29
30
  private readonly contextKey;
@@ -39,6 +40,7 @@ export declare class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {
39
40
  */
40
41
  optional(): MiddlewareHandler;
41
42
  }
43
+ //# sourceMappingURL=jwt.d.ts.map
42
44
  //#endregion
43
- export type { JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions };
45
+ export { JwtClaims, JwtConfig, JwtMiddleware, JwtMiddlewareOptions, JwtVerifier, TokenExtractionOptions };
44
46
  //# sourceMappingURL=jwt.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.d.cts","names":[],"sources":["../../src/hono/jwt.ts"],"mappings":";;;iBAuCiB,qBAAqB,gBAAgB,YAAY;EACjE,QAAQ;EACR,aAAa;EACb;EACA,WAAW,GAAG,SAAS,OAAO,UAAU,WAAW,QAAQ;EAC3D,mBAAmB,QAAQ,cAAc;;;;;;;;;;;;;;;;;qBAkB7B,cAAc,gBAAgB,YAAY;mBACrC;mBACA;mBACA;mBACA;mBAIA;EAEjB,YAAY,SAAS,qBAAqB;;;;EAW1C,WAAW;;;;EAiCX,YAAY"}
1
+ {"version":3,"file":"jwt.d.cts","names":[],"sources":["../../src/hono/jwt.ts"],"sourcesContent":[],"mappings":";;;;UA8CiB,qCAAqC,YAAY;EAAjD,MAAA,EACR,SADQ;EAAoB,UAAA,CAAA,EAEvB,sBAFuB;EAAA,UAAiB,CAAA,EAAA,MAAA;EAAS,OAAG,CAAA,EAAA,CAAA,CAAA,EAInD,OAJmD,EAAA,KAAA,EAInC,KAJmC,EAAA,GAIzB,QAJyB,GAId,OAJc,CAIN,QAJM,CAAA;EAAS,eAClE,CAAA,EAAA,CAAA,MAAA,EAImB,SAJnB,EAAA,GAIiC,OAJjC;;;;;;;;;AAIwC;AAkBjD;;;;;;;AAsDa,cAtDA,aAsDA,CAAA,gBAtD8B,SAsD9B,GAtD0C,SAsD1C,CAAA,CAAA;EAAiB,iBAAA,QAAA;;;;;uBA5CR,qBAAqB;;;;aAW/B;;;;cAiCC"}
@@ -1,7 +1,8 @@
1
- import { a as JwtVerifier, n as JwtConfig, o as TokenExtractionOptions, t as JwtClaims } from "../jwt-CoKrpeMB.mjs";
1
+ import { JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions } from "../jwt-BqLlRkw-.mjs";
2
2
  import { Context, MiddlewareHandler } from "hono";
3
+
3
4
  //#region src/hono/jwt.d.ts
4
- export interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {
5
+ interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {
5
6
  config: JwtConfig;
6
7
  extraction?: TokenExtractionOptions;
7
8
  contextKey?: string;
@@ -23,7 +24,7 @@ export interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {
23
24
  * app.use('/public/*', jwt.optional());
24
25
  * ```
25
26
  */
26
- export declare class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {
27
+ declare class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {
27
28
  private readonly verifier;
28
29
  private readonly extraction;
29
30
  private readonly contextKey;
@@ -39,6 +40,7 @@ export declare class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {
39
40
  */
40
41
  optional(): MiddlewareHandler;
41
42
  }
43
+ //# sourceMappingURL=jwt.d.ts.map
42
44
  //#endregion
43
- export type { JwtClaims, JwtConfig, JwtVerifier, TokenExtractionOptions };
45
+ export { JwtClaims, JwtConfig, JwtMiddleware, JwtMiddlewareOptions, JwtVerifier, TokenExtractionOptions };
44
46
  //# sourceMappingURL=jwt.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.d.mts","names":[],"sources":["../../src/hono/jwt.ts"],"mappings":";;;iBAuCiB,qBAAqB,gBAAgB,YAAY;EACjE,QAAQ;EACR,aAAa;EACb;EACA,WAAW,GAAG,SAAS,OAAO,UAAU,WAAW,QAAQ;EAC3D,mBAAmB,QAAQ,cAAc;;;;;;;;;;;;;;;;;qBAkB7B,cAAc,gBAAgB,YAAY;mBACrC;mBACA;mBACA;mBACA;mBAIA;EAEjB,YAAY,SAAS,qBAAqB;;;;EAW1C,WAAW;;;;EAiCX,YAAY"}
1
+ {"version":3,"file":"jwt.d.mts","names":[],"sources":["../../src/hono/jwt.ts"],"sourcesContent":[],"mappings":";;;;UA8CiB,qCAAqC,YAAY;EAAjD,MAAA,EACR,SADQ;EAAoB,UAAA,CAAA,EAEvB,sBAFuB;EAAA,UAAiB,CAAA,EAAA,MAAA;EAAS,OAAG,CAAA,EAAA,CAAA,CAAA,EAInD,OAJmD,EAAA,KAAA,EAInC,KAJmC,EAAA,GAIzB,QAJyB,GAId,OAJc,CAIN,QAJM,CAAA;EAAS,eAClE,CAAA,EAAA,CAAA,MAAA,EAImB,SAJnB,EAAA,GAIiC,OAJjC;;;;;;;;;AAIwC;AAkBjD;;;;;;;AAsDa,cAtDA,aAsDA,CAAA,gBAtD8B,SAsD9B,GAtD0C,SAsD1C,CAAA,CAAA;EAAiB,iBAAA,QAAA;;;;;uBA5CR,qBAAqB;;;;aAW/B;;;;cAiCC"}
package/dist/hono/jwt.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { readCookie } from "../cookies.mjs";
2
- import { JwtVerifier } from "../jwt.mjs";
1
+ import { JwtVerifier } from "../jwt-D88cPJyT.mjs";
2
+
3
3
  //#region src/hono/jwt.ts
4
4
  function extractToken(c, options = {}) {
5
5
  const { headerName = "authorization", cookieName, tokenPrefix = "Bearer " } = options;
@@ -9,8 +9,11 @@ function extractToken(c, options = {}) {
9
9
  return headerValue;
10
10
  }
11
11
  if (cookieName) {
12
- const cookie = readCookie(c.req.header("cookie"), cookieName);
13
- if (cookie) return cookie;
12
+ const cookieHeader = c.req.header("cookie");
13
+ if (cookieHeader) {
14
+ const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));
15
+ if (match?.[1]) return match[1];
16
+ }
14
17
  }
15
18
  return null;
16
19
  }
@@ -49,7 +52,7 @@ var JwtMiddleware = class {
49
52
  return async (c, next) => {
50
53
  const token = extractToken(c, this.extraction);
51
54
  if (!token) {
52
- if (this.onError) return this.onError(c, /* @__PURE__ */ new Error("No token provided"));
55
+ if (this.onError) return this.onError(c, new Error("No token provided"));
53
56
  return c.json({ error: "Unauthorized" }, 401);
54
57
  }
55
58
  try {
@@ -82,7 +85,7 @@ var JwtMiddleware = class {
82
85
  };
83
86
  }
84
87
  };
85
- //#endregion
86
- export { JwtMiddleware };
87
88
 
89
+ //#endregion
90
+ export { JwtMiddleware, JwtVerifier };
88
91
  //# sourceMappingURL=jwt.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.mjs","names":[],"sources":["../../src/hono/jwt.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport { readCookie } from '../cookies';\nimport {\n\ttype JwtClaims,\n\ttype JwtConfig,\n\tJwtVerifier,\n\ttype TokenExtractionOptions,\n} from '../jwt';\n\nexport type { JwtVerifier, JwtClaims, JwtConfig, TokenExtractionOptions };\n\nfunction extractToken(\n\tc: Context,\n\toptions: TokenExtractionOptions = {},\n): string | null {\n\tconst {\n\t\theaderName = 'authorization',\n\t\tcookieName,\n\t\ttokenPrefix = 'Bearer ',\n\t} = options;\n\n\tconst headerValue = c.req.header(headerName);\n\tif (headerValue) {\n\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t}\n\t\treturn headerValue;\n\t}\n\n\tif (cookieName) {\n\t\tconst cookie = readCookie(c.req.header('cookie'), cookieName);\n\t\tif (cookie) {\n\t\t\treturn cookie;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {\n\tconfig: JwtConfig;\n\textraction?: TokenExtractionOptions;\n\tcontextKey?: string;\n\tonError?: (c: Context, error: Error) => Response | Promise<Response>;\n\ttransformClaims?: (claims: JwtClaims) => TClaims;\n}\n\n/**\n * JWT Middleware for Hono\n *\n * @example\n * ```typescript\n * const jwt = new JwtMiddleware({\n * config: { secret: process.env.JWT_SECRET! },\n * });\n *\n * app.use('/api/*', jwt.handler());\n *\n * // Or for optional auth\n * app.use('/public/*', jwt.optional());\n * ```\n */\nexport class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {\n\tprivate readonly verifier: JwtVerifier<TClaims>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly contextKey: string;\n\tprivate readonly onError?: (\n\t\tc: Context,\n\t\terror: Error,\n\t) => Response | Promise<Response>;\n\tprivate readonly transformClaims?: (claims: JwtClaims) => TClaims;\n\n\tconstructor(options: JwtMiddlewareOptions<TClaims>) {\n\t\tthis.verifier = new JwtVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.contextKey = options.contextKey ?? 'jwtClaims';\n\t\tthis.onError = options.onError;\n\t\tthis.transformClaims = options.transformClaims;\n\t}\n\n\t/**\n\t * Returns middleware that requires valid JWT\n\t */\n\thandler(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (!token) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, new Error('No token provided'));\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst payload = await this.verifier.verify(token);\n\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t? this.transformClaims(payload)\n\t\t\t\t\t: payload;\n\n\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\tc.set('jwtToken', token);\n\n\t\t\t\tawait next();\n\t\t\t} catch (error) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, error as Error);\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Invalid token' }, 401);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Returns middleware that allows unauthenticated requests\n\t */\n\toptional(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (token) {\n\t\t\t\tconst claims = await this.verifier.verifyOrNull(token);\n\t\t\t\tif (claims) {\n\t\t\t\t\tconst transformed = this.transformClaims\n\t\t\t\t\t\t? this.transformClaims(claims)\n\t\t\t\t\t\t: claims;\n\t\t\t\t\tc.set(this.contextKey, transformed);\n\t\t\t\t\tc.set('jwtToken', token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait next();\n\t\t};\n\t}\n}\n"],"mappings":";;;AAWA,SAAS,aACR,GACA,UAAkC,CAAC,GACnB;CAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,cACX;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,UAAU;CAC3C,IAAI,aAAa;EAChB,IAAI,eAAe,YAAY,WAAW,WAAW,GACpD,OAAO,YAAY,MAAM,YAAY,MAAM;EAE5C,OAAO;CACR;CAEA,IAAI,YAAY;EACf,MAAM,SAAS,WAAW,EAAE,IAAI,OAAO,QAAQ,GAAG,UAAU;EAC5D,IAAI,QACH,OAAO;CAET;CAEA,OAAO;AACR;;;;;;;;;;;;;;;;AAyBA,IAAa,gBAAb,MAAkE;CACjE;CACA;CACA;CACA;CAIA;CAEA,YAAY,SAAwC;EACnD,KAAK,WAAW,IAAI,YAAY,QAAQ,MAAM;EAC9C,KAAK,aAAa,QAAQ,cAAc,CAAC;EACzC,KAAK,aAAa,QAAQ,cAAc;EACxC,KAAK,UAAU,QAAQ;EACvB,KAAK,kBAAkB,QAAQ;CAChC;;;;CAKA,UAA6B;EAC5B,OAAO,OAAO,GAAY,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,UAAU;GAE7C,IAAI,CAAC,OAAO;IACX,IAAI,KAAK,SACR,OAAO,KAAK,QAAQ,mBAAG,IAAI,MAAM,mBAAmB,CAAC;IAEtD,OAAO,EAAE,KAAK,EAAE,OAAO,eAAe,GAAG,GAAG;GAC7C;GAEA,IAAI;IACH,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,KAAK;IAChD,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,OAAO,IAC5B;IAEH,EAAE,IAAI,KAAK,YAAY,MAAM;IAC7B,EAAE,IAAI,YAAY,KAAK;IAEvB,MAAM,KAAK;GACZ,SAAS,OAAO;IACf,IAAI,KAAK,SACR,OAAO,KAAK,QAAQ,GAAG,KAAc;IAEtC,OAAO,EAAE,KAAK,EAAE,OAAO,gBAAgB,GAAG,GAAG;GAC9C;EACD;CACD;;;;CAKA,WAA8B;EAC7B,OAAO,OAAO,GAAY,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,UAAU;GAE7C,IAAI,OAAO;IACV,MAAM,SAAS,MAAM,KAAK,SAAS,aAAa,KAAK;IACrD,IAAI,QAAQ;KACX,MAAM,cAAc,KAAK,kBACtB,KAAK,gBAAgB,MAAM,IAC3B;KACH,EAAE,IAAI,KAAK,YAAY,WAAW;KAClC,EAAE,IAAI,YAAY,KAAK;IACxB;GACD;GAEA,MAAM,KAAK;EACZ;CACD;AACD"}
1
+ {"version":3,"file":"jwt.mjs","names":["c: Context","options: TokenExtractionOptions","options: JwtMiddlewareOptions<TClaims>","next: Next"],"sources":["../../src/hono/jwt.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport {\n\ttype JwtClaims,\n\ttype JwtConfig,\n\tJwtVerifier,\n\ttype TokenExtractionOptions,\n} from '../jwt';\n\nexport {\n\tJwtVerifier,\n\ttype JwtClaims,\n\ttype JwtConfig,\n\ttype TokenExtractionOptions,\n};\n\nfunction extractToken(\n\tc: Context,\n\toptions: TokenExtractionOptions = {},\n): string | null {\n\tconst {\n\t\theaderName = 'authorization',\n\t\tcookieName,\n\t\ttokenPrefix = 'Bearer ',\n\t} = options;\n\n\tconst headerValue = c.req.header(headerName);\n\tif (headerValue) {\n\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t}\n\t\treturn headerValue;\n\t}\n\n\tif (cookieName) {\n\t\tconst cookieHeader = c.req.header('cookie');\n\t\tif (cookieHeader) {\n\t\t\tconst match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));\n\t\t\tif (match?.[1]) {\n\t\t\t\treturn match[1];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport interface JwtMiddlewareOptions<TClaims extends JwtClaims = JwtClaims> {\n\tconfig: JwtConfig;\n\textraction?: TokenExtractionOptions;\n\tcontextKey?: string;\n\tonError?: (c: Context, error: Error) => Response | Promise<Response>;\n\ttransformClaims?: (claims: JwtClaims) => TClaims;\n}\n\n/**\n * JWT Middleware for Hono\n *\n * @example\n * ```typescript\n * const jwt = new JwtMiddleware({\n * config: { secret: process.env.JWT_SECRET! },\n * });\n *\n * app.use('/api/*', jwt.handler());\n *\n * // Or for optional auth\n * app.use('/public/*', jwt.optional());\n * ```\n */\nexport class JwtMiddleware<TClaims extends JwtClaims = JwtClaims> {\n\tprivate readonly verifier: JwtVerifier<TClaims>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly contextKey: string;\n\tprivate readonly onError?: (\n\t\tc: Context,\n\t\terror: Error,\n\t) => Response | Promise<Response>;\n\tprivate readonly transformClaims?: (claims: JwtClaims) => TClaims;\n\n\tconstructor(options: JwtMiddlewareOptions<TClaims>) {\n\t\tthis.verifier = new JwtVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.contextKey = options.contextKey ?? 'jwtClaims';\n\t\tthis.onError = options.onError;\n\t\tthis.transformClaims = options.transformClaims;\n\t}\n\n\t/**\n\t * Returns middleware that requires valid JWT\n\t */\n\thandler(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (!token) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, new Error('No token provided'));\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst payload = await this.verifier.verify(token);\n\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t? this.transformClaims(payload)\n\t\t\t\t\t: payload;\n\n\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\tc.set('jwtToken', token);\n\n\t\t\t\tawait next();\n\t\t\t} catch (error) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, error as Error);\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Invalid token' }, 401);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Returns middleware that allows unauthenticated requests\n\t */\n\toptional(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (token) {\n\t\t\t\tconst claims = await this.verifier.verifyOrNull(token);\n\t\t\t\tif (claims) {\n\t\t\t\t\tconst transformed = this.transformClaims\n\t\t\t\t\t\t? this.transformClaims(claims)\n\t\t\t\t\t\t: claims;\n\t\t\t\t\tc.set(this.contextKey, transformed);\n\t\t\t\t\tc.set('jwtToken', token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait next();\n\t\t};\n\t}\n}\n"],"mappings":";;;AAeA,SAAS,aACRA,GACAC,UAAkC,CAAE,GACpB;CAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,WACd,GAAG;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,WAAW;AAC5C,KAAI,aAAa;AAChB,MAAI,eAAe,YAAY,WAAW,YAAY,CACrD,QAAO,YAAY,MAAM,YAAY,OAAO;AAE7C,SAAO;CACP;AAED,KAAI,YAAY;EACf,MAAM,eAAe,EAAE,IAAI,OAAO,SAAS;AAC3C,MAAI,cAAc;GACjB,MAAM,QAAQ,aAAa,MAAM,IAAI,QAAQ,EAAE,WAAW,WAAW;AACrE,OAAI,QAAQ,GACX,QAAO,MAAM;EAEd;CACD;AAED,QAAO;AACP;;;;;;;;;;;;;;;;AAyBD,IAAa,gBAAb,MAAkE;CACjE,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAIjB,AAAiB;CAEjB,YAAYC,SAAwC;AACnD,OAAK,WAAW,IAAI,YAAY,QAAQ;AACxC,OAAK,aAAa,QAAQ,cAAc,CAAE;AAC1C,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,UAAU,QAAQ;AACvB,OAAK,kBAAkB,QAAQ;CAC/B;;;;CAKD,UAA6B;AAC5B,SAAO,OAAOF,GAAYG,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,QAAK,OAAO;AACX,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,qBAAqB;AAEvD,WAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;GAC7C;AAED,OAAI;IACH,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,MAAM;IACjD,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,QAAQ,GAC7B;AAEH,MAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,MAAE,IAAI,YAAY,MAAM;AAExB,UAAM,MAAM;GACZ,SAAQ,OAAO;AACf,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,MAAe;AAEvC,WAAO,EAAE,KAAK,EAAE,OAAO,gBAAiB,GAAE,IAAI;GAC9C;EACD;CACD;;;;CAKD,WAA8B;AAC7B,SAAO,OAAOH,GAAYG,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,OAAI,OAAO;IACV,MAAM,SAAS,MAAM,KAAK,SAAS,aAAa,MAAM;AACtD,QAAI,QAAQ;KACX,MAAM,cAAc,KAAK,kBACtB,KAAK,gBAAgB,OAAO,GAC5B;AACH,OAAE,IAAI,KAAK,YAAY,YAAY;AACnC,OAAE,IAAI,YAAY,MAAM;IACxB;GACD;AAED,SAAM,MAAM;EACZ;CACD;AACD"}
@@ -1,6 +1,5 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_cookies = require("../cookies.cjs");
3
- const require_oidc = require("../oidc.cjs");
1
+ const require_oidc = require('../oidc-C0KyYaAK.cjs');
2
+
4
3
  //#region src/hono/oidc.ts
5
4
  function extractToken(c, options = {}) {
6
5
  const { headerName = "authorization", cookieName, tokenPrefix = "Bearer " } = options;
@@ -10,8 +9,11 @@ function extractToken(c, options = {}) {
10
9
  return headerValue;
11
10
  }
12
11
  if (cookieName) {
13
- const cookie = require_cookies.readCookie(c.req.header("cookie"), cookieName);
14
- if (cookie) return cookie;
12
+ const cookieHeader = c.req.header("cookie");
13
+ if (cookieHeader) {
14
+ const match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));
15
+ if (match?.[1]) return match[1];
16
+ }
15
17
  }
16
18
  return null;
17
19
  }
@@ -55,7 +57,7 @@ var OidcMiddleware = class {
55
57
  return async (c, next) => {
56
58
  const token = extractToken(c, this.extraction);
57
59
  if (!token) {
58
- if (this.onError) return this.onError(c, /* @__PURE__ */ new Error("No token provided"));
60
+ if (this.onError) return this.onError(c, new Error("No token provided"));
59
61
  return c.json({ error: "Unauthorized" }, 401);
60
62
  }
61
63
  try {
@@ -95,7 +97,8 @@ var OidcMiddleware = class {
95
97
  };
96
98
  }
97
99
  };
100
+
98
101
  //#endregion
99
102
  exports.OidcMiddleware = OidcMiddleware;
100
-
103
+ exports.OidcVerifier = require_oidc.OidcVerifier;
101
104
  //# sourceMappingURL=oidc.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"oidc.cjs","names":["readCookie","OidcVerifier"],"sources":["../../src/hono/oidc.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport { readCookie } from '../cookies';\nimport {\n\ttype OidcClaims,\n\ttype OidcConfig,\n\ttype OidcUserInfo,\n\tOidcVerifier,\n\ttype TokenExtractionOptions,\n} from '../oidc';\n\nexport type {\n\tOidcVerifier,\n\tOidcClaims,\n\tOidcConfig,\n\tOidcUserInfo,\n\tTokenExtractionOptions,\n};\n\nfunction extractToken(\n\tc: Context,\n\toptions: TokenExtractionOptions = {},\n): string | null {\n\tconst {\n\t\theaderName = 'authorization',\n\t\tcookieName,\n\t\ttokenPrefix = 'Bearer ',\n\t} = options;\n\n\tconst headerValue = c.req.header(headerName);\n\tif (headerValue) {\n\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t}\n\t\treturn headerValue;\n\t}\n\n\tif (cookieName) {\n\t\tconst cookie = readCookie(c.req.header('cookie'), cookieName);\n\t\tif (cookie) {\n\t\t\treturn cookie;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport interface OidcMiddlewareOptions<\n\tTClaims extends OidcClaims = OidcClaims,\n\tTUserInfo extends OidcUserInfo = OidcUserInfo,\n> {\n\tconfig: OidcConfig;\n\textraction?: TokenExtractionOptions;\n\tcontextKey?: string;\n\tfetchUserInfo?: boolean;\n\tonError?: (c: Context, error: Error) => Response | Promise<Response>;\n\ttransformClaims?: (claims: OidcClaims, userInfo?: TUserInfo) => TClaims;\n}\n\n/**\n * OIDC Middleware for Hono\n *\n * @example\n * ```typescript\n * const oidc = new OidcMiddleware({\n * config: {\n * issuer: 'https://auth.example.com',\n * audience: 'my-client-id',\n * },\n * });\n *\n * app.use('/api/*', oidc.handler());\n *\n * // With user info\n * const oidcWithUserInfo = new OidcMiddleware({\n * config: { issuer: '...', audience: '...' },\n * fetchUserInfo: true,\n * });\n * ```\n */\nexport class OidcMiddleware<\n\tTClaims extends OidcClaims = OidcClaims,\n\tTUserInfo extends OidcUserInfo = OidcUserInfo,\n> {\n\tprivate readonly verifier: OidcVerifier<TClaims, TUserInfo>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly contextKey: string;\n\tprivate readonly fetchUserInfo: boolean;\n\tprivate readonly onError?: (\n\t\tc: Context,\n\t\terror: Error,\n\t) => Response | Promise<Response>;\n\tprivate readonly transformClaims?: (\n\t\tclaims: OidcClaims,\n\t\tuserInfo?: TUserInfo,\n\t) => TClaims;\n\n\tconstructor(options: OidcMiddlewareOptions<TClaims, TUserInfo>) {\n\t\tthis.verifier = new OidcVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.contextKey = options.contextKey ?? 'oidcClaims';\n\t\tthis.fetchUserInfo = options.fetchUserInfo ?? false;\n\t\tthis.onError = options.onError;\n\t\tthis.transformClaims = options.transformClaims;\n\t}\n\n\thandler(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (!token) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, new Error('No token provided'));\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst payload = await this.verifier.verify(token);\n\n\t\t\t\tlet userInfo: TUserInfo | undefined;\n\t\t\t\tif (this.fetchUserInfo) {\n\t\t\t\t\tuserInfo = (await this.verifier.fetchUserInfo(token)) ?? undefined;\n\t\t\t\t\tc.set('oidcUserInfo', userInfo);\n\t\t\t\t}\n\n\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t? this.transformClaims(payload, userInfo)\n\t\t\t\t\t: payload;\n\n\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\tc.set('oidcToken', token);\n\n\t\t\t\tawait next();\n\t\t\t} catch (error) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, error as Error);\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Invalid token' }, 401);\n\t\t\t}\n\t\t};\n\t}\n\n\toptional(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (token) {\n\t\t\t\tconst payload = await this.verifier.verifyOrNull(token);\n\t\t\t\tif (payload) {\n\t\t\t\t\tlet userInfo: TUserInfo | undefined;\n\t\t\t\t\tif (this.fetchUserInfo) {\n\t\t\t\t\t\tuserInfo = (await this.verifier.fetchUserInfo(token)) ?? undefined;\n\t\t\t\t\t\tc.set('oidcUserInfo', userInfo);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t\t? this.transformClaims(payload, userInfo)\n\t\t\t\t\t\t: payload;\n\n\t\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\t\tc.set('oidcToken', token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait next();\n\t\t};\n\t}\n}\n"],"mappings":";;;;AAkBA,SAAS,aACR,GACA,UAAkC,CAAC,GACnB;CAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,cACX;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,UAAU;CAC3C,IAAI,aAAa;EAChB,IAAI,eAAe,YAAY,WAAW,WAAW,GACpD,OAAO,YAAY,MAAM,YAAY,MAAM;EAE5C,OAAO;CACR;CAEA,IAAI,YAAY;EACf,MAAM,SAASA,gBAAAA,WAAW,EAAE,IAAI,OAAO,QAAQ,GAAG,UAAU;EAC5D,IAAI,QACH,OAAO;CAET;CAEA,OAAO;AACR;;;;;;;;;;;;;;;;;;;;;;AAmCA,IAAa,iBAAb,MAGE;CACD;CACA;CACA;CACA;CACA;CAIA;CAKA,YAAY,SAAoD;EAC/D,KAAK,WAAW,IAAIC,aAAAA,aAAa,QAAQ,MAAM;EAC/C,KAAK,aAAa,QAAQ,cAAc,CAAC;EACzC,KAAK,aAAa,QAAQ,cAAc;EACxC,KAAK,gBAAgB,QAAQ,iBAAiB;EAC9C,KAAK,UAAU,QAAQ;EACvB,KAAK,kBAAkB,QAAQ;CAChC;CAEA,UAA6B;EAC5B,OAAO,OAAO,GAAY,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,UAAU;GAE7C,IAAI,CAAC,OAAO;IACX,IAAI,KAAK,SACR,OAAO,KAAK,QAAQ,mBAAG,IAAI,MAAM,mBAAmB,CAAC;IAEtD,OAAO,EAAE,KAAK,EAAE,OAAO,eAAe,GAAG,GAAG;GAC7C;GAEA,IAAI;IACH,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,KAAK;IAEhD,IAAI;IACJ,IAAI,KAAK,eAAe;KACvB,WAAY,MAAM,KAAK,SAAS,cAAc,KAAK,KAAM,KAAA;KACzD,EAAE,IAAI,gBAAgB,QAAQ;IAC/B;IAEA,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,SAAS,QAAQ,IACtC;IAEH,EAAE,IAAI,KAAK,YAAY,MAAM;IAC7B,EAAE,IAAI,aAAa,KAAK;IAExB,MAAM,KAAK;GACZ,SAAS,OAAO;IACf,IAAI,KAAK,SACR,OAAO,KAAK,QAAQ,GAAG,KAAc;IAEtC,OAAO,EAAE,KAAK,EAAE,OAAO,gBAAgB,GAAG,GAAG;GAC9C;EACD;CACD;CAEA,WAA8B;EAC7B,OAAO,OAAO,GAAY,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,UAAU;GAE7C,IAAI,OAAO;IACV,MAAM,UAAU,MAAM,KAAK,SAAS,aAAa,KAAK;IACtD,IAAI,SAAS;KACZ,IAAI;KACJ,IAAI,KAAK,eAAe;MACvB,WAAY,MAAM,KAAK,SAAS,cAAc,KAAK,KAAM,KAAA;MACzD,EAAE,IAAI,gBAAgB,QAAQ;KAC/B;KAEA,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,SAAS,QAAQ,IACtC;KAEH,EAAE,IAAI,KAAK,YAAY,MAAM;KAC7B,EAAE,IAAI,aAAa,KAAK;IACzB;GACD;GAEA,MAAM,KAAK;EACZ;CACD;AACD"}
1
+ {"version":3,"file":"oidc.cjs","names":["c: Context","options: TokenExtractionOptions","options: OidcMiddlewareOptions<TClaims, TUserInfo>","OidcVerifier","next: Next","userInfo: TUserInfo | undefined"],"sources":["../../src/hono/oidc.ts"],"sourcesContent":["import type { Context, MiddlewareHandler, Next } from 'hono';\nimport {\n\ttype OidcClaims,\n\ttype OidcConfig,\n\ttype OidcUserInfo,\n\tOidcVerifier,\n\ttype TokenExtractionOptions,\n} from '../oidc';\n\nexport {\n\tOidcVerifier,\n\ttype OidcClaims,\n\ttype OidcConfig,\n\ttype OidcUserInfo,\n\ttype TokenExtractionOptions,\n};\n\nfunction extractToken(\n\tc: Context,\n\toptions: TokenExtractionOptions = {},\n): string | null {\n\tconst {\n\t\theaderName = 'authorization',\n\t\tcookieName,\n\t\ttokenPrefix = 'Bearer ',\n\t} = options;\n\n\tconst headerValue = c.req.header(headerName);\n\tif (headerValue) {\n\t\tif (tokenPrefix && headerValue.startsWith(tokenPrefix)) {\n\t\t\treturn headerValue.slice(tokenPrefix.length);\n\t\t}\n\t\treturn headerValue;\n\t}\n\n\tif (cookieName) {\n\t\tconst cookieHeader = c.req.header('cookie');\n\t\tif (cookieHeader) {\n\t\t\tconst match = cookieHeader.match(new RegExp(`${cookieName}=([^;]+)`));\n\t\t\tif (match?.[1]) {\n\t\t\t\treturn match[1];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport interface OidcMiddlewareOptions<\n\tTClaims extends OidcClaims = OidcClaims,\n\tTUserInfo extends OidcUserInfo = OidcUserInfo,\n> {\n\tconfig: OidcConfig;\n\textraction?: TokenExtractionOptions;\n\tcontextKey?: string;\n\tfetchUserInfo?: boolean;\n\tonError?: (c: Context, error: Error) => Response | Promise<Response>;\n\ttransformClaims?: (claims: OidcClaims, userInfo?: TUserInfo) => TClaims;\n}\n\n/**\n * OIDC Middleware for Hono\n *\n * @example\n * ```typescript\n * const oidc = new OidcMiddleware({\n * config: {\n * issuer: 'https://auth.example.com',\n * audience: 'my-client-id',\n * },\n * });\n *\n * app.use('/api/*', oidc.handler());\n *\n * // With user info\n * const oidcWithUserInfo = new OidcMiddleware({\n * config: { issuer: '...', audience: '...' },\n * fetchUserInfo: true,\n * });\n * ```\n */\nexport class OidcMiddleware<\n\tTClaims extends OidcClaims = OidcClaims,\n\tTUserInfo extends OidcUserInfo = OidcUserInfo,\n> {\n\tprivate readonly verifier: OidcVerifier<TClaims, TUserInfo>;\n\tprivate readonly extraction: TokenExtractionOptions;\n\tprivate readonly contextKey: string;\n\tprivate readonly fetchUserInfo: boolean;\n\tprivate readonly onError?: (\n\t\tc: Context,\n\t\terror: Error,\n\t) => Response | Promise<Response>;\n\tprivate readonly transformClaims?: (\n\t\tclaims: OidcClaims,\n\t\tuserInfo?: TUserInfo,\n\t) => TClaims;\n\n\tconstructor(options: OidcMiddlewareOptions<TClaims, TUserInfo>) {\n\t\tthis.verifier = new OidcVerifier(options.config);\n\t\tthis.extraction = options.extraction ?? {};\n\t\tthis.contextKey = options.contextKey ?? 'oidcClaims';\n\t\tthis.fetchUserInfo = options.fetchUserInfo ?? false;\n\t\tthis.onError = options.onError;\n\t\tthis.transformClaims = options.transformClaims;\n\t}\n\n\thandler(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (!token) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, new Error('No token provided'));\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst payload = await this.verifier.verify(token);\n\n\t\t\t\tlet userInfo: TUserInfo | undefined;\n\t\t\t\tif (this.fetchUserInfo) {\n\t\t\t\t\tuserInfo = (await this.verifier.fetchUserInfo(token)) ?? undefined;\n\t\t\t\t\tc.set('oidcUserInfo', userInfo);\n\t\t\t\t}\n\n\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t? this.transformClaims(payload, userInfo)\n\t\t\t\t\t: payload;\n\n\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\tc.set('oidcToken', token);\n\n\t\t\t\tawait next();\n\t\t\t} catch (error) {\n\t\t\t\tif (this.onError) {\n\t\t\t\t\treturn this.onError(c, error as Error);\n\t\t\t\t}\n\t\t\t\treturn c.json({ error: 'Invalid token' }, 401);\n\t\t\t}\n\t\t};\n\t}\n\n\toptional(): MiddlewareHandler {\n\t\treturn async (c: Context, next: Next) => {\n\t\t\tconst token = extractToken(c, this.extraction);\n\n\t\t\tif (token) {\n\t\t\t\tconst payload = await this.verifier.verifyOrNull(token);\n\t\t\t\tif (payload) {\n\t\t\t\t\tlet userInfo: TUserInfo | undefined;\n\t\t\t\t\tif (this.fetchUserInfo) {\n\t\t\t\t\t\tuserInfo = (await this.verifier.fetchUserInfo(token)) ?? undefined;\n\t\t\t\t\t\tc.set('oidcUserInfo', userInfo);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst claims = this.transformClaims\n\t\t\t\t\t\t? this.transformClaims(payload, userInfo)\n\t\t\t\t\t\t: payload;\n\n\t\t\t\t\tc.set(this.contextKey, claims);\n\t\t\t\t\tc.set('oidcToken', token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait next();\n\t\t};\n\t}\n}\n"],"mappings":";;;AAiBA,SAAS,aACRA,GACAC,UAAkC,CAAE,GACpB;CAChB,MAAM,EACL,aAAa,iBACb,YACA,cAAc,WACd,GAAG;CAEJ,MAAM,cAAc,EAAE,IAAI,OAAO,WAAW;AAC5C,KAAI,aAAa;AAChB,MAAI,eAAe,YAAY,WAAW,YAAY,CACrD,QAAO,YAAY,MAAM,YAAY,OAAO;AAE7C,SAAO;CACP;AAED,KAAI,YAAY;EACf,MAAM,eAAe,EAAE,IAAI,OAAO,SAAS;AAC3C,MAAI,cAAc;GACjB,MAAM,QAAQ,aAAa,MAAM,IAAI,QAAQ,EAAE,WAAW,WAAW;AACrE,OAAI,QAAQ,GACX,QAAO,MAAM;EAEd;CACD;AAED,QAAO;AACP;;;;;;;;;;;;;;;;;;;;;;AAmCD,IAAa,iBAAb,MAGE;CACD,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CAIjB,AAAiB;CAKjB,YAAYC,SAAoD;AAC/D,OAAK,WAAW,IAAIC,0BAAa,QAAQ;AACzC,OAAK,aAAa,QAAQ,cAAc,CAAE;AAC1C,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,OAAK,UAAU,QAAQ;AACvB,OAAK,kBAAkB,QAAQ;CAC/B;CAED,UAA6B;AAC5B,SAAO,OAAOH,GAAYI,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,QAAK,OAAO;AACX,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,qBAAqB;AAEvD,WAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;GAC7C;AAED,OAAI;IACH,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,MAAM;IAEjD,IAAIC;AACJ,QAAI,KAAK,eAAe;AACvB,gBAAY,MAAM,KAAK,SAAS,cAAc,MAAM;AACpD,OAAE,IAAI,gBAAgB,SAAS;IAC/B;IAED,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,SAAS,SAAS,GACvC;AAEH,MAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,MAAE,IAAI,aAAa,MAAM;AAEzB,UAAM,MAAM;GACZ,SAAQ,OAAO;AACf,QAAI,KAAK,QACR,QAAO,KAAK,QAAQ,GAAG,MAAe;AAEvC,WAAO,EAAE,KAAK,EAAE,OAAO,gBAAiB,GAAE,IAAI;GAC9C;EACD;CACD;CAED,WAA8B;AAC7B,SAAO,OAAOL,GAAYI,SAAe;GACxC,MAAM,QAAQ,aAAa,GAAG,KAAK,WAAW;AAE9C,OAAI,OAAO;IACV,MAAM,UAAU,MAAM,KAAK,SAAS,aAAa,MAAM;AACvD,QAAI,SAAS;KACZ,IAAIC;AACJ,SAAI,KAAK,eAAe;AACvB,iBAAY,MAAM,KAAK,SAAS,cAAc,MAAM;AACpD,QAAE,IAAI,gBAAgB,SAAS;KAC/B;KAED,MAAM,SAAS,KAAK,kBACjB,KAAK,gBAAgB,SAAS,SAAS,GACvC;AAEH,OAAE,IAAI,KAAK,YAAY,OAAO;AAC9B,OAAE,IAAI,aAAa,MAAM;IACzB;GACD;AAED,SAAM,MAAM;EACZ;CACD;AACD"}
@@ -1,8 +1,9 @@
1
- import { o as TokenExtractionOptions } from "../jwt-CoKrpeMB.cjs";
2
- import { OidcClaims, OidcConfig, OidcUserInfo, OidcVerifier } from "../oidc.cjs";
1
+ import { TokenExtractionOptions } from "../jwt-3eIuY2dg.cjs";
2
+ import { OidcClaims, OidcConfig, OidcUserInfo, OidcVerifier } from "../oidc-ChA17wLB.cjs";
3
3
  import { Context, MiddlewareHandler } from "hono";
4
+
4
5
  //#region src/hono/oidc.d.ts
5
- export interface OidcMiddlewareOptions<TClaims extends OidcClaims = OidcClaims, TUserInfo extends OidcUserInfo = OidcUserInfo> {
6
+ interface OidcMiddlewareOptions<TClaims extends OidcClaims = OidcClaims, TUserInfo extends OidcUserInfo = OidcUserInfo> {
6
7
  config: OidcConfig;
7
8
  extraction?: TokenExtractionOptions;
8
9
  contextKey?: string;
@@ -31,7 +32,7 @@ export interface OidcMiddlewareOptions<TClaims extends OidcClaims = OidcClaims,
31
32
  * });
32
33
  * ```
33
34
  */
34
- export declare class OidcMiddleware<TClaims extends OidcClaims = OidcClaims, TUserInfo extends OidcUserInfo = OidcUserInfo> {
35
+ declare class OidcMiddleware<TClaims extends OidcClaims = OidcClaims, TUserInfo extends OidcUserInfo = OidcUserInfo> {
35
36
  private readonly verifier;
36
37
  private readonly extraction;
37
38
  private readonly contextKey;
@@ -42,6 +43,7 @@ export declare class OidcMiddleware<TClaims extends OidcClaims = OidcClaims, TUs
42
43
  handler(): MiddlewareHandler;
43
44
  optional(): MiddlewareHandler;
44
45
  }
46
+ //# sourceMappingURL=oidc.d.ts.map
45
47
  //#endregion
46
- export type { OidcClaims, OidcConfig, OidcUserInfo, OidcVerifier, TokenExtractionOptions };
48
+ export { OidcClaims, OidcConfig, OidcMiddleware, OidcMiddlewareOptions, OidcUserInfo, OidcVerifier, TokenExtractionOptions };
47
49
  //# sourceMappingURL=oidc.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oidc.d.cts","names":[],"sources":["../../src/hono/oidc.ts"],"mappings":";;;;iBA8CiB,sBAChB,gBAAgB,aAAa,YAC7B,kBAAkB,eAAe;EAEjC,QAAQ;EACR,aAAa;EACb;EACA;EACA,WAAW,GAAG,SAAS,OAAO,UAAU,WAAW,QAAQ;EAC3D,mBAAmB,QAAQ,YAAY,WAAW,cAAc;;;;;;;;;;;;;;;;;;;;;;;qBAwBpD,eACZ,gBAAgB,aAAa,YAC7B,kBAAkB,eAAe;mBAEhB;mBACA;mBACA;mBACA;mBACA;mBAIA;EAKjB,YAAY,SAAS,sBAAsB,SAAS;EASpD,WAAW;EAqCX,YAAY"}
1
+ {"version":3,"file":"oidc.d.cts","names":[],"sources":["../../src/hono/oidc.ts"],"sourcesContent":[],"mappings":";;;;;UAgDiB,sCACA,aAAa,8BACX,eAAe;UAEzB;EAJQ,UAAA,CAAA,EAKH,sBALwB;EAAA,UAAA,CAAA,EAAA,MAAA;EAAA,aACrB,CAAA,EAAA,OAAA;EAAU,OAAG,CAAA,EAAA,CAAA,CAAA,EAOf,OAPe,EAAA,KAAA,EAOC,KAPD,EAAA,GAOW,QAPX,GAOsB,OAPtB,CAO8B,QAP9B,CAAA;EAAU,eACrB,CAAA,EAAA,CAAA,MAAA,EAOS,UAPT,EAAA,QAAA,CAAA,EAOgC,SAPhC,EAAA,GAO8C,OAP9C;;;;;;;;;;;;AAOqD;AAwBxE;;;;;;;;;;AA+Da,cA/DA,cA+DA,CAAA,gBA9DI,UA8DJ,GA9DiB,UA8DjB,EAAA,kBA7DM,YA6DN,GA7DqB,YA6DrB,CAAA,CAAA;EAAiB,iBAAA,QAAA;;;;;;uBA9CR,sBAAsB,SAAS;aASzC;cAqCC"}