faire-auth 1.0.3 → 1.1.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 (228) hide show
  1. package/dist/{adapter-factory-lKIOf2OR.mjs → adapter-factory-qPVW8x9-.mjs} +34 -36
  2. package/dist/{adapter-factory-D1I7joki.cjs → adapter-factory-u8r3oTez.cjs} +66 -68
  3. package/dist/adapters/drizzle-adapter/index.cjs +34 -40
  4. package/dist/adapters/drizzle-adapter/index.d.cts +4 -9
  5. package/dist/adapters/drizzle-adapter/index.d.mts +4 -9
  6. package/dist/adapters/drizzle-adapter/index.mjs +20 -26
  7. package/dist/adapters/index.cjs +11 -16
  8. package/dist/adapters/index.d.cts +11 -37
  9. package/dist/adapters/index.d.mts +11 -37
  10. package/dist/adapters/index.mjs +4 -13
  11. package/dist/adapters/kysely-adapter/index.cjs +270 -11
  12. package/dist/adapters/kysely-adapter/index.d.cts +9 -19
  13. package/dist/adapters/kysely-adapter/index.d.mts +9 -19
  14. package/dist/adapters/kysely-adapter/index.mjs +267 -9
  15. package/dist/adapters/memory-adapter/index.cjs +146 -9
  16. package/dist/adapters/memory-adapter/index.d.cts +4 -10
  17. package/dist/adapters/memory-adapter/index.d.mts +4 -10
  18. package/dist/adapters/memory-adapter/index.mjs +145 -9
  19. package/dist/adapters/mongodb-adapter/index.cjs +13 -21
  20. package/dist/adapters/mongodb-adapter/index.d.cts +3 -8
  21. package/dist/adapters/mongodb-adapter/index.d.mts +4 -9
  22. package/dist/adapters/mongodb-adapter/index.mjs +12 -20
  23. package/dist/adapters/prisma-adapter/index.cjs +12 -20
  24. package/dist/adapters/prisma-adapter/index.d.cts +4 -8
  25. package/dist/adapters/prisma-adapter/index.d.mts +4 -8
  26. package/dist/adapters/prisma-adapter/index.mjs +5 -13
  27. package/dist/adapters/test.cjs +86 -69
  28. package/dist/adapters/test.d.cts +7 -11
  29. package/dist/adapters/test.d.mts +7 -11
  30. package/dist/adapters/test.mjs +83 -66
  31. package/dist/api/index.cjs +3 -20
  32. package/dist/api/index.d.cts +2 -3
  33. package/dist/api/index.d.mts +2 -3
  34. package/dist/api/index.mjs +1 -20
  35. package/dist/api/middleware/index.cjs +4 -11
  36. package/dist/api/middleware/index.d.cts +3 -9
  37. package/dist/api/middleware/index.d.mts +3 -9
  38. package/dist/api/middleware/index.mjs +3 -11
  39. package/dist/{api-B4RDwBty.mjs → api-0f-F-Fi2.mjs} +292 -189
  40. package/dist/{api-CaRC1Gio.cjs → api-LjfH6hQi.cjs} +557 -452
  41. package/dist/{test-utils/bun-sqlite-dialect-BZBvHchL.cjs → bun-sqlite-dialect-BHkarnxN.cjs} +5 -9
  42. package/dist/{test-utils/bun-sqlite-dialect-BSWhhKNs.mjs → bun-sqlite-dialect-BiZBuEF6.mjs} +6 -9
  43. package/dist/client/index.cjs +8 -15
  44. package/dist/client/index.d.cts +9 -14
  45. package/dist/client/index.d.mts +9 -14
  46. package/dist/client/index.mjs +7 -15
  47. package/dist/client/lynx/index.cjs +10 -18
  48. package/dist/client/lynx/index.d.cts +402 -71
  49. package/dist/client/lynx/index.d.mts +402 -71
  50. package/dist/client/lynx/index.mjs +5 -13
  51. package/dist/client/plugins/index.cjs +3 -5
  52. package/dist/client/plugins/index.d.cts +5 -10
  53. package/dist/client/plugins/index.d.mts +5 -10
  54. package/dist/client/plugins/index.mjs +2 -4
  55. package/dist/client/react/index.cjs +6 -14
  56. package/dist/client/react/index.d.cts +402 -71
  57. package/dist/client/react/index.d.mts +402 -71
  58. package/dist/client/react/index.mjs +5 -13
  59. package/dist/client/solid/index.cjs +6 -14
  60. package/dist/client/solid/index.d.cts +393 -57
  61. package/dist/client/solid/index.d.mts +393 -57
  62. package/dist/client/solid/index.mjs +5 -13
  63. package/dist/client/svelte/index.cjs +5 -10
  64. package/dist/client/svelte/index.d.cts +400 -67
  65. package/dist/client/svelte/index.d.mts +400 -67
  66. package/dist/client/svelte/index.mjs +4 -10
  67. package/dist/client/vue/index.cjs +6 -14
  68. package/dist/client/vue/index.d.cts +401 -68
  69. package/dist/client/vue/index.d.mts +401 -68
  70. package/dist/client/vue/index.mjs +5 -13
  71. package/dist/{cookies-BTs1o992.mjs → cookies-D9aY_gJh.mjs} +25 -21
  72. package/dist/{cookies-BTl72THv.cjs → cookies-DQ52rcOy.cjs} +119 -115
  73. package/dist/crypto/index.cjs +10 -8
  74. package/dist/crypto/index.d.cts +5 -13
  75. package/dist/crypto/index.d.mts +5 -13
  76. package/dist/crypto/index.mjs +2 -5
  77. package/dist/{crypto-DH2Aa7jN.mjs → crypto-BH-hD0lJ.mjs} +7 -10
  78. package/dist/{crypto-DpSCnrTp.cjs → crypto-BITfWVwD.cjs} +24 -27
  79. package/dist/db/index.cjs +1135 -29
  80. package/dist/db/index.d.cts +1 -2
  81. package/dist/db/index.d.mts +1 -2
  82. package/dist/db/index.mjs +1115 -16
  83. package/dist/defu-D2h4S3X-.mjs +87 -0
  84. package/dist/defu-DWS5RPWt.cjs +134 -0
  85. package/dist/{email-verification-DI_0H4JC.cjs → email-verification-DOPnSgbI.cjs} +65 -71
  86. package/dist/{email-verification-C_lBu_JY.mjs → email-verification-YSR5n5lb.mjs} +23 -29
  87. package/dist/{hono-CO-zsqI-.mjs → hono-BAV2wQkK.mjs} +16 -33
  88. package/dist/hono-SVQuc5Ru.mjs +4 -0
  89. package/dist/hono-pgK4H_U1.cjs +9 -0
  90. package/dist/{hono-DnW5crl1.cjs → hono-tyFFJFdS.cjs} +42 -60
  91. package/dist/index-B86Cy0dE.d.cts +2 -0
  92. package/dist/index-B86Cy0dE.d.mts +2 -0
  93. package/dist/index.cjs +115 -150
  94. package/dist/index.d.cts +4 -5
  95. package/dist/index.d.mts +4 -5
  96. package/dist/index.mjs +46 -81
  97. package/dist/integrations/next-js.cjs +5 -9
  98. package/dist/integrations/next-js.d.cts +6 -14
  99. package/dist/integrations/next-js.d.mts +6 -14
  100. package/dist/integrations/next-js.mjs +4 -9
  101. package/dist/integrations/node.cjs +16 -14
  102. package/dist/integrations/node.d.cts +6 -14
  103. package/dist/integrations/node.d.mts +6 -14
  104. package/dist/integrations/node.mjs +15 -13
  105. package/dist/integrations/react-start.cjs +7 -11
  106. package/dist/integrations/react-start.d.cts +5 -13
  107. package/dist/integrations/react-start.d.mts +5 -13
  108. package/dist/integrations/react-start.mjs +6 -11
  109. package/dist/integrations/solid-start.cjs +3 -5
  110. package/dist/integrations/solid-start.d.cts +2 -5
  111. package/dist/integrations/solid-start.d.mts +2 -5
  112. package/dist/integrations/solid-start.mjs +2 -4
  113. package/dist/integrations/svelte-kit.cjs +6 -10
  114. package/dist/integrations/svelte-kit.d.cts +11 -23
  115. package/dist/integrations/svelte-kit.d.mts +11 -23
  116. package/dist/integrations/svelte-kit.mjs +5 -10
  117. package/dist/{ip-BjNYspCH.mjs → ip-6Lv2o42m.mjs} +4 -9
  118. package/dist/{ip-C17Qdq-G.cjs → ip-DPydExzV.cjs} +21 -27
  119. package/dist/{json--tl7Grvs.cjs → json-D3aq-nH2.cjs} +9 -13
  120. package/dist/{json-B1v2qRTQ.mjs → json-DooGMtnJ.mjs} +2 -5
  121. package/dist/{logged-CyGfp8_H.mjs → logged-B83SzMnJ.mjs} +6 -10
  122. package/dist/{logged-Dv3st5qc.cjs → logged-BIpCpnVY.cjs} +13 -18
  123. package/dist/{middleware-CE6OhDkq.mjs → middleware-Cakg4e1D.mjs} +2 -4
  124. package/dist/{middleware-CWvRH4EW.cjs → middleware-Cd-VkNxB.cjs} +17 -20
  125. package/dist/{node-sqlite-dialect-w4DAg0PH.mjs → node-sqlite-dialect-BMVOjEMh.mjs} +6 -9
  126. package/dist/{test-utils/node-sqlite-dialect-BgJqjBOu.cjs → node-sqlite-dialect-D3QPFROH.cjs} +5 -9
  127. package/dist/oauth2/index.cjs +166 -22
  128. package/dist/oauth2/index.d.cts +5 -17
  129. package/dist/oauth2/index.d.mts +5 -17
  130. package/dist/oauth2/index.mjs +156 -16
  131. package/dist/{origin-check-DjLTuZQ8.cjs → origin-check-BflGhEEN.cjs} +34 -38
  132. package/dist/{origin-check-8Gajklvh.mjs → origin-check-CRgs1M7k.mjs} +13 -16
  133. package/dist/{parser-B25ylT5u.mjs → parser-CqwvpF6l.cjs} +12 -10
  134. package/dist/{parser-B_wxvaAr.cjs → parser-DcKDjjHO.mjs} +7 -22
  135. package/dist/plugins/access/index.cjs +38 -4
  136. package/dist/plugins/access/index.d.cts +36 -2
  137. package/dist/plugins/access/index.d.mts +36 -2
  138. package/dist/plugins/access/index.mjs +36 -3
  139. package/dist/plugins/bearer/index.cjs +52 -7
  140. package/dist/plugins/bearer/index.d.cts +27 -4
  141. package/dist/plugins/bearer/index.d.mts +27 -4
  142. package/dist/plugins/bearer/index.mjs +51 -7
  143. package/dist/plugins/index.cjs +1385 -842
  144. package/dist/plugins/index.d.cts +489 -7566
  145. package/dist/plugins/index.d.mts +489 -7566
  146. package/dist/plugins/index.mjs +1118 -576
  147. package/dist/plugins/passkey/index.cjs +551 -15
  148. package/dist/plugins/passkey/index.d.cts +123 -4
  149. package/dist/plugins/passkey/index.d.mts +123 -4
  150. package/dist/plugins/passkey/index.mjs +547 -15
  151. package/dist/{chunk-BFnQceUY.mjs → rolldown-runtime-BKpuH2hG.mjs} +6 -7
  152. package/dist/{chunk-fPmz2rbM.cjs → rolldown-runtime-C_Pgydhf.cjs} +22 -24
  153. package/dist/{schema-DTIwLLmf.mjs → schema-CFCpv0tK.mjs} +3 -6
  154. package/dist/{schema-CirKflVs.cjs → schema-b-lKhMkG.cjs} +51 -55
  155. package/dist/{session-CM3rmOYF.mjs → session-BGjJgihS.mjs} +51 -74
  156. package/dist/{session-Cwrj4GfV.cjs → session-CzZSMmQC.cjs} +197 -219
  157. package/dist/shared.d.cts +1581 -0
  158. package/dist/shared.d.mts +1581 -0
  159. package/dist/social-providers/index.cjs +9 -9
  160. package/dist/social-providers/index.d.cts +1 -1
  161. package/dist/social-providers/index.d.mts +1 -1
  162. package/dist/social-providers/index.mjs +3 -5
  163. package/dist/social-providers-CjPww-qf.mjs +6 -0
  164. package/dist/social-providers-D7w_7Ym8.cjs +10 -0
  165. package/dist/{state-CvSihlVT.cjs → state-2OrNjOO-.cjs} +24 -24
  166. package/dist/{state-CQghgH9I.mjs → state-Dooeisfq.mjs} +17 -17
  167. package/dist/{bun-sqlite-dialect-DPgTzc0w.cjs → test-utils/bun-sqlite-dialect-BHkarnxN.cjs} +5 -9
  168. package/dist/{bun-sqlite-dialect-6NqeV3px.mjs → test-utils/bun-sqlite-dialect-BiZBuEF6.mjs} +6 -9
  169. package/dist/test-utils/index.cjs +8831 -7941
  170. package/dist/test-utils/index.d.cts +310 -12440
  171. package/dist/test-utils/index.d.mts +313 -12440
  172. package/dist/test-utils/index.mjs +8591 -7701
  173. package/dist/test-utils/{node-sqlite-dialect-DAQXiobH.mjs → node-sqlite-dialect-BMVOjEMh.mjs} +6 -9
  174. package/dist/{node-sqlite-dialect-DP11CB0y.cjs → test-utils/node-sqlite-dialect-D3QPFROH.cjs} +5 -9
  175. package/dist/types/index.d.cts +2 -3
  176. package/dist/types/index.d.mts +2 -3
  177. package/dist/types/index.mjs +1 -1
  178. package/dist/{url-BoUuoIwZ.mjs → url-CJtdrrUu.mjs} +12 -13
  179. package/dist/{url-Ce7CVaQD.cjs → url-DjCmCUHS.cjs} +42 -44
  180. package/dist/utils/cookies.cjs +29 -30
  181. package/dist/utils/cookies.d.cts +21 -25
  182. package/dist/utils/cookies.d.mts +20 -24
  183. package/dist/utils/cookies.mjs +2 -7
  184. package/dist/utils-C7OHyfHa.mjs +4 -0
  185. package/dist/utils-iX0Vy_UL.cjs +3 -0
  186. package/package.json +40 -30
  187. package/dist/access-BZ7-AbTM.cjs +0 -51
  188. package/dist/access-D0DRqUKC.mjs +0 -39
  189. package/dist/bearer-DDzrp5M7.cjs +0 -60
  190. package/dist/bearer-WZcs7gxL.mjs +0 -54
  191. package/dist/db-4tUsQJXd.mjs +0 -1119
  192. package/dist/db-ChMbb_U-.cjs +0 -1180
  193. package/dist/defu-BmOYq4PU.cjs +0 -34
  194. package/dist/defu-D9ZTXqlo.mjs +0 -28
  195. package/dist/hono-C14rpOEa.cjs +0 -13
  196. package/dist/hono-CoKYWnXA.mjs +0 -7
  197. package/dist/hono-D0VqxVy1.d.mts +0 -18
  198. package/dist/hono-DOM31WQz.d.cts +0 -18
  199. package/dist/index-BCTFWP_o.d.mts +0 -992
  200. package/dist/index-BDhhaE6Y.d.cts +0 -3
  201. package/dist/index-BVRfQy6L.d.mts +0 -992
  202. package/dist/index-Baarsq5J.d.mts +0 -33
  203. package/dist/index-By364WbF.d.cts +0 -992
  204. package/dist/index-BzWwMgxr.d.cts +0 -992
  205. package/dist/index-CF9iq55a.d.mts +0 -3
  206. package/dist/index-CJD2yB-W.d.cts +0 -33
  207. package/dist/index-CRt_fppq.d.mts +0 -41
  208. package/dist/index-CdLyn7qP.d.cts +0 -41
  209. package/dist/index-CsWF3f7U.d.cts +0 -13350
  210. package/dist/index-CzidsAyA.d.mts +0 -13350
  211. package/dist/index-DvW-GCcI.d.cts +0 -33
  212. package/dist/index-f-5OJ9yV.d.cts +0 -13350
  213. package/dist/index-rFv8Hxld.d.mts +0 -13350
  214. package/dist/index-ztVZPQdV.d.mts +0 -33
  215. package/dist/kysely-adapter-CtIdoHa8.mjs +0 -270
  216. package/dist/kysely-adapter-QZTx077T.cjs +0 -288
  217. package/dist/memory-adapter-17RZd5df.cjs +0 -154
  218. package/dist/memory-adapter-Dp4XdCZK.mjs +0 -148
  219. package/dist/oauth2-5RL4cVNS.cjs +0 -177
  220. package/dist/oauth2-C56wz-n9.mjs +0 -159
  221. package/dist/passkey-BTT-v5c-.cjs +0 -512
  222. package/dist/passkey-CzY_W2us.mjs +0 -505
  223. package/dist/request-1NL_1lyJ.mjs +0 -58
  224. package/dist/request-CPNlp-DK.cjs +0 -100
  225. package/dist/social-providers-B8RK5yqI.mjs +0 -9
  226. package/dist/social-providers-BmFOIIPk.cjs +0 -13
  227. package/dist/utils-44aDDP8f.cjs +0 -2
  228. package/dist/utils-D4vZd1-9.mjs +0 -4
@@ -1,4 +1,4 @@
1
- //#region src/client/parser.ts
1
+ // src/client/parser.ts
2
2
  const PROTO_POLLUTION_PATTERNS = {
3
3
  proto: /"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,
4
4
  constructor: /"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,
@@ -47,16 +47,16 @@ const betterJSONParse = (value, options = {}) => {
47
47
  return matches;
48
48
  }) && strict) throw new Error("[better-json] Potential prototype pollution attempt detected");
49
49
  try {
50
- const secureReviver = (key, value$1) => {
51
- if (key === "__proto__" || key === "constructor" && value$1 != null && typeof value$1 === "object" && "prototype" in value$1) {
50
+ const secureReviver = (key, value) => {
51
+ if (key === "__proto__" || key === "constructor" && value != null && typeof value === "object" && "prototype" in value) {
52
52
  if (warnings) console.warn(`[better-json] Dropping "${key}" key to prevent prototype pollution`);
53
53
  return;
54
54
  }
55
- if (parseDates && typeof value$1 === "string") {
56
- const date = parseISODate(value$1);
55
+ if (parseDates && typeof value === "string") {
56
+ const date = parseISODate(value);
57
57
  if (date) return date;
58
58
  }
59
- return reviver ? reviver(key, value$1) : value$1;
59
+ return reviver ? reviver(key, value) : value;
60
60
  };
61
61
  return JSON.parse(trimmed, secureReviver);
62
62
  } catch (error) {
@@ -65,7 +65,9 @@ const betterJSONParse = (value, options = {}) => {
65
65
  }
66
66
  };
67
67
  const parseJSON = (value, options = { strict: true }) => betterJSONParse(value, options);
68
- var parser_default = parseJSON;
69
-
70
- //#endregion
71
- export { parser_default as n, parseJSON as t };
68
+ Object.defineProperty(exports, "parseJSON", {
69
+ enumerable: true,
70
+ get: function() {
71
+ return parseJSON;
72
+ }
73
+ });
@@ -1,5 +1,4 @@
1
-
2
- //#region src/client/parser.ts
1
+ // src/client/parser.ts
3
2
  const PROTO_POLLUTION_PATTERNS = {
4
3
  proto: /"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,
5
4
  constructor: /"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,
@@ -48,16 +47,16 @@ const betterJSONParse = (value, options = {}) => {
48
47
  return matches;
49
48
  }) && strict) throw new Error("[better-json] Potential prototype pollution attempt detected");
50
49
  try {
51
- const secureReviver = (key, value$1) => {
52
- if (key === "__proto__" || key === "constructor" && value$1 != null && typeof value$1 === "object" && "prototype" in value$1) {
50
+ const secureReviver = (key, value) => {
51
+ if (key === "__proto__" || key === "constructor" && value != null && typeof value === "object" && "prototype" in value) {
53
52
  if (warnings) console.warn(`[better-json] Dropping "${key}" key to prevent prototype pollution`);
54
53
  return;
55
54
  }
56
- if (parseDates && typeof value$1 === "string") {
57
- const date = parseISODate(value$1);
55
+ if (parseDates && typeof value === "string") {
56
+ const date = parseISODate(value);
58
57
  if (date) return date;
59
58
  }
60
- return reviver ? reviver(key, value$1) : value$1;
59
+ return reviver ? reviver(key, value) : value;
61
60
  };
62
61
  return JSON.parse(trimmed, secureReviver);
63
62
  } catch (error) {
@@ -66,18 +65,4 @@ const betterJSONParse = (value, options = {}) => {
66
65
  }
67
66
  };
68
67
  const parseJSON = (value, options = { strict: true }) => betterJSONParse(value, options);
69
- var parser_default = parseJSON;
70
-
71
- //#endregion
72
- Object.defineProperty(exports, 'parseJSON', {
73
- enumerable: true,
74
- get: function () {
75
- return parseJSON;
76
- }
77
- });
78
- Object.defineProperty(exports, 'parser_default', {
79
- enumerable: true,
80
- get: function () {
81
- return parser_default;
82
- }
83
- });
68
+ export { parseJSON as t };
@@ -1,4 +1,38 @@
1
- const require_access = require('../../access-BZ7-AbTM.cjs');
2
-
3
- exports.createAccessControl = require_access.createAccessControl;
4
- exports.role = require_access.role;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let _faire_auth_core_error = require("@faire-auth/core/error");
3
+ // src/plugins/access/access.ts
4
+ const role = (statements) => ({
5
+ authorize: (request, connector = "AND") => {
6
+ let success = false;
7
+ for (const [requestedResource, requestedActions] of Object.entries(request)) {
8
+ const allowedActions = statements[requestedResource];
9
+ if (!allowedActions) return {
10
+ success: false,
11
+ error: `You are not allowed to access resource: ${requestedResource}`
12
+ };
13
+ if (Array.isArray(requestedActions)) success = requestedActions.every((requestedAction) => allowedActions.includes(requestedAction));
14
+ else if (typeof requestedActions === "object") {
15
+ const actions = requestedActions;
16
+ if (actions.connector === "OR") success = actions.actions.some((requestedAction) => allowedActions.includes(requestedAction));
17
+ else success = actions.actions.every((requestedAction) => allowedActions.includes(requestedAction));
18
+ } else throw new _faire_auth_core_error.FaireAuthError("Invalid access control request");
19
+ if (success && connector === "OR") return { success };
20
+ if (!success && connector === "AND") return {
21
+ success: false,
22
+ error: `unauthorized to access resource "${requestedResource}"`
23
+ };
24
+ }
25
+ if (success) return { success };
26
+ return {
27
+ success: false,
28
+ error: "Not authorized"
29
+ };
30
+ },
31
+ statements
32
+ });
33
+ const createAccessControl = (s) => ({
34
+ newRole: (statements) => role(statements),
35
+ statements: s
36
+ });
37
+ exports.createAccessControl = createAccessControl;
38
+ exports.role = role;
@@ -1,2 +1,36 @@
1
- import { a as Role, c as Subset, i as AccessControl, n as createAccessControl, o as Statements, r as role, s as SubArray, t as AuthorizeResponse } from "../../index-CdLyn7qP.cjs";
2
- export { AccessControl, AuthorizeResponse, Role, Statements, SubArray, Subset, createAccessControl, role };
1
+ import { LiteralString } from "@faire-auth/core/types";
2
+ type SubArray<T extends unknown[] | readonly unknown[] | any[]> = T[number][];
3
+ type Subset<K extends keyof R, R extends Record<string | LiteralString, readonly string[] | readonly LiteralString[]>> = { [P in K]: SubArray<R[P]>; };
4
+ type Statements = {
5
+ readonly [resource: string]: readonly LiteralString[];
6
+ };
7
+ type AccessControl<TStatements extends Statements = Statements> = ReturnType<typeof createAccessControl<TStatements>>;
8
+ type Role<TStatements extends Statements = Record<string, any>> = {
9
+ authorize: (request: any, connector?: ("OR" | "AND") | undefined) => AuthorizeResponse;
10
+ statements: TStatements;
11
+ };
12
+ export type AuthorizeResponse = {
13
+ success: false;
14
+ error: string;
15
+ } | {
16
+ success: true;
17
+ error?: never;
18
+ };
19
+ export declare const role: <TStatements extends Statements>(statements: TStatements) => {
20
+ authorize: <K extends keyof TStatements>(request: { [key in K]?: TStatements[key] | {
21
+ actions: TStatements[key];
22
+ connector: "OR" | "AND";
23
+ }; }, connector?: "OR" | "AND") => AuthorizeResponse;
24
+ statements: TStatements;
25
+ };
26
+ export declare const createAccessControl: <const TStatements extends Statements>(s: TStatements) => {
27
+ newRole: <K extends keyof TStatements>(statements: Subset<K, TStatements>) => {
28
+ authorize: <K_1 extends K>(request: K_1 extends (infer T extends keyof Subset<K, TStatements>) ? { [key in T]?: {
29
+ actions: Subset<K, TStatements>[key];
30
+ connector: "OR" | "AND";
31
+ } | Subset<K, TStatements>[key]; } : never, connector?: "OR" | "AND") => AuthorizeResponse;
32
+ statements: Subset<K, TStatements>;
33
+ };
34
+ statements: TStatements;
35
+ };
36
+ export type { AccessControl, Role, Statements, SubArray, Subset };
@@ -1,2 +1,36 @@
1
- import { a as Role, c as Subset, i as AccessControl, n as createAccessControl, o as Statements, r as role, s as SubArray, t as AuthorizeResponse } from "../../index-CRt_fppq.mjs";
2
- export { AccessControl, AuthorizeResponse, Role, Statements, SubArray, Subset, createAccessControl, role };
1
+ import { LiteralString } from "@faire-auth/core/types";
2
+ type SubArray<T extends unknown[] | readonly unknown[] | any[]> = T[number][];
3
+ type Subset<K extends keyof R, R extends Record<string | LiteralString, readonly string[] | readonly LiteralString[]>> = { [P in K]: SubArray<R[P]>; };
4
+ type Statements = {
5
+ readonly [resource: string]: readonly LiteralString[];
6
+ };
7
+ type AccessControl<TStatements extends Statements = Statements> = ReturnType<typeof createAccessControl<TStatements>>;
8
+ type Role<TStatements extends Statements = Record<string, any>> = {
9
+ authorize: (request: any, connector?: ("OR" | "AND") | undefined) => AuthorizeResponse;
10
+ statements: TStatements;
11
+ };
12
+ export type AuthorizeResponse = {
13
+ success: false;
14
+ error: string;
15
+ } | {
16
+ success: true;
17
+ error?: never;
18
+ };
19
+ export declare const role: <TStatements extends Statements>(statements: TStatements) => {
20
+ authorize: <K extends keyof TStatements>(request: { [key in K]?: TStatements[key] | {
21
+ actions: TStatements[key];
22
+ connector: "OR" | "AND";
23
+ }; }, connector?: "OR" | "AND") => AuthorizeResponse;
24
+ statements: TStatements;
25
+ };
26
+ export declare const createAccessControl: <const TStatements extends Statements>(s: TStatements) => {
27
+ newRole: <K extends keyof TStatements>(statements: Subset<K, TStatements>) => {
28
+ authorize: <K_1 extends K>(request: K_1 extends (infer T extends keyof Subset<K, TStatements>) ? { [key in T]?: {
29
+ actions: Subset<K, TStatements>[key];
30
+ connector: "OR" | "AND";
31
+ } | Subset<K, TStatements>[key]; } : never, connector?: "OR" | "AND") => AuthorizeResponse;
32
+ statements: Subset<K, TStatements>;
33
+ };
34
+ statements: TStatements;
35
+ };
36
+ export type { AccessControl, Role, Statements, SubArray, Subset };
@@ -1,3 +1,36 @@
1
- import { n as role, t as createAccessControl } from "../../access-D0DRqUKC.mjs";
2
-
3
- export { createAccessControl, role };
1
+ import { FaireAuthError } from "@faire-auth/core/error";
2
+ // src/plugins/access/access.ts
3
+ const role = (statements) => ({
4
+ authorize: (request, connector = "AND") => {
5
+ let success = false;
6
+ for (const [requestedResource, requestedActions] of Object.entries(request)) {
7
+ const allowedActions = statements[requestedResource];
8
+ if (!allowedActions) return {
9
+ success: false,
10
+ error: `You are not allowed to access resource: ${requestedResource}`
11
+ };
12
+ if (Array.isArray(requestedActions)) success = requestedActions.every((requestedAction) => allowedActions.includes(requestedAction));
13
+ else if (typeof requestedActions === "object") {
14
+ const actions = requestedActions;
15
+ if (actions.connector === "OR") success = actions.actions.some((requestedAction) => allowedActions.includes(requestedAction));
16
+ else success = actions.actions.every((requestedAction) => allowedActions.includes(requestedAction));
17
+ } else throw new FaireAuthError("Invalid access control request");
18
+ if (success && connector === "OR") return { success };
19
+ if (!success && connector === "AND") return {
20
+ success: false,
21
+ error: `unauthorized to access resource "${requestedResource}"`
22
+ };
23
+ }
24
+ if (success) return { success };
25
+ return {
26
+ success: false,
27
+ error: "Not authorized"
28
+ };
29
+ },
30
+ statements
31
+ });
32
+ const createAccessControl = (s) => ({
33
+ newRole: (statements) => role(statements),
34
+ statements: s
35
+ });
36
+ export { createAccessControl, role };
@@ -1,7 +1,52 @@
1
- require('../../crypto-DpSCnrTp.cjs');
2
- require('../../json--tl7Grvs.cjs');
3
- require('../../cookies-BTl72THv.cjs');
4
- require('../../middleware-CWvRH4EW.cjs');
5
- const require_bearer = require('../../bearer-DDzrp5M7.cjs');
6
-
7
- exports.bearer = require_bearer.bearer;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_middleware = require("../../middleware-Cd-VkNxB.cjs");
3
+ const require_cookies = require("../../cookies-DQ52rcOy.cjs");
4
+ let _faire_auth_core_datatypes = require("@faire-auth/core/datatypes");
5
+ // src/plugins/bearer/index.ts
6
+ /**
7
+ * Converts bearer token to session cookie
8
+ */
9
+ const bearer = (options) => ({
10
+ id: "bearer",
11
+ hooks: {
12
+ before: [{
13
+ matcher: (ctx) => Boolean(ctx.req.header("Authorization")),
14
+ handler: (_opts) => require_middleware.createHook()(async (ctx) => {
15
+ const token = ctx.req.header("Authorization")?.replace("Bearer ", "");
16
+ if (token == null) return;
17
+ let signedToken = "";
18
+ if (token.includes(".")) signedToken = token.replace("=", "");
19
+ else {
20
+ if (options?.requireSignature === true) return;
21
+ signedToken = (await require_cookies.serializeSignedCookie("", token, ctx.get("context").secret)).replace("=", "");
22
+ }
23
+ try {
24
+ const [first, second] = decodeURIComponent(signedToken).split(".");
25
+ if (first == null || second == null) return;
26
+ if (!await (0, _faire_auth_core_datatypes.createHMAC)("SHA-256", "base64urlnopad").verify(ctx.get("context").secret, first, second)) return;
27
+ } catch {
28
+ return;
29
+ }
30
+ ctx.req.raw.headers.append("cookie", `${ctx.get("context").authCookies.sessionToken.name}=${signedToken}`);
31
+ })
32
+ }],
33
+ after: [{
34
+ matcher: (_ctx) => true,
35
+ handler: (_opts) => require_middleware.createHook()(async (ctx) => {
36
+ const setCookie = ctx.res.headers.getSetCookie();
37
+ if (!setCookie.length) return;
38
+ const parsedCookies = require_cookies.parseSetCookieHeader(setCookie);
39
+ const cookieName = ctx.get("context").authCookies.sessionToken.name;
40
+ const sessionCookie = parsedCookies.get(cookieName);
41
+ if (sessionCookie?.value == null || sessionCookie["max-age"] === 0) return;
42
+ const token = sessionCookie.value;
43
+ const exposedHeaders = ctx.res.headers.get("access-control-expose-headers") ?? "";
44
+ const headersSet = new Set(exposedHeaders.split(",").map((header) => header.trim()).filter(Boolean));
45
+ headersSet.add("set-auth-token");
46
+ ctx.res.headers.set("set-auth-token", token);
47
+ ctx.res.headers.set("Access-Control-Expose-Headers", Array.from(headersSet).join(", "));
48
+ })
49
+ }]
50
+ }
51
+ });
52
+ exports.bearer = bearer;
@@ -1,4 +1,27 @@
1
- import "../../index-CsWF3f7U.cjs";
2
- import "../../hono-DOM31WQz.cjs";
3
- import { t as bearer } from "../../index-DvW-GCcI.cjs";
4
- export { bearer };
1
+ interface BearerOptions {
2
+ /**
3
+ * If true, only signed tokens
4
+ * will be converted to session
5
+ * cookies
6
+ *
7
+ * @default false
8
+ */
9
+ requireSignature?: boolean;
10
+ }
11
+ /**
12
+ * Converts bearer token to session cookie
13
+ */
14
+ export declare const bearer: (options?: BearerOptions) => {
15
+ id: string;
16
+ hooks: {
17
+ before: {
18
+ matcher: (ctx: any) => boolean;
19
+ handler: (_opts: any) => (ctx: any) => Promise<void>;
20
+ }[];
21
+ after: {
22
+ matcher: (_ctx: any) => boolean;
23
+ handler: (_opts: any) => (ctx: any) => Promise<void>;
24
+ }[];
25
+ };
26
+ };
27
+ export {};
@@ -1,4 +1,27 @@
1
- import "../../index-rFv8Hxld.mjs";
2
- import "../../hono-D0VqxVy1.mjs";
3
- import { t as bearer } from "../../index-Baarsq5J.mjs";
4
- export { bearer };
1
+ interface BearerOptions {
2
+ /**
3
+ * If true, only signed tokens
4
+ * will be converted to session
5
+ * cookies
6
+ *
7
+ * @default false
8
+ */
9
+ requireSignature?: boolean;
10
+ }
11
+ /**
12
+ * Converts bearer token to session cookie
13
+ */
14
+ export declare const bearer: (options?: BearerOptions) => {
15
+ id: string;
16
+ hooks: {
17
+ before: {
18
+ matcher: (ctx: any) => boolean;
19
+ handler: (_opts: any) => (ctx: any) => Promise<void>;
20
+ }[];
21
+ after: {
22
+ matcher: (_ctx: any) => boolean;
23
+ handler: (_opts: any) => (ctx: any) => Promise<void>;
24
+ }[];
25
+ };
26
+ };
27
+ export {};
@@ -1,7 +1,51 @@
1
- import "../../crypto-DH2Aa7jN.mjs";
2
- import "../../json-B1v2qRTQ.mjs";
3
- import "../../cookies-BTs1o992.mjs";
4
- import "../../middleware-CE6OhDkq.mjs";
5
- import { t as bearer } from "../../bearer-WZcs7gxL.mjs";
6
-
7
- export { bearer };
1
+ import { n as createHook } from "../../middleware-Cakg4e1D.mjs";
2
+ import { _ as serializeSignedCookie, p as parseSetCookieHeader } from "../../cookies-D9aY_gJh.mjs";
3
+ import { createHMAC } from "@faire-auth/core/datatypes";
4
+ // src/plugins/bearer/index.ts
5
+ /**
6
+ * Converts bearer token to session cookie
7
+ */
8
+ const bearer = (options) => ({
9
+ id: "bearer",
10
+ hooks: {
11
+ before: [{
12
+ matcher: (ctx) => Boolean(ctx.req.header("Authorization")),
13
+ handler: (_opts) => createHook()(async (ctx) => {
14
+ const token = ctx.req.header("Authorization")?.replace("Bearer ", "");
15
+ if (token == null) return;
16
+ let signedToken = "";
17
+ if (token.includes(".")) signedToken = token.replace("=", "");
18
+ else {
19
+ if (options?.requireSignature === true) return;
20
+ signedToken = (await serializeSignedCookie("", token, ctx.get("context").secret)).replace("=", "");
21
+ }
22
+ try {
23
+ const [first, second] = decodeURIComponent(signedToken).split(".");
24
+ if (first == null || second == null) return;
25
+ if (!await createHMAC("SHA-256", "base64urlnopad").verify(ctx.get("context").secret, first, second)) return;
26
+ } catch {
27
+ return;
28
+ }
29
+ ctx.req.raw.headers.append("cookie", `${ctx.get("context").authCookies.sessionToken.name}=${signedToken}`);
30
+ })
31
+ }],
32
+ after: [{
33
+ matcher: (_ctx) => true,
34
+ handler: (_opts) => createHook()(async (ctx) => {
35
+ const setCookie = ctx.res.headers.getSetCookie();
36
+ if (!setCookie.length) return;
37
+ const parsedCookies = parseSetCookieHeader(setCookie);
38
+ const cookieName = ctx.get("context").authCookies.sessionToken.name;
39
+ const sessionCookie = parsedCookies.get(cookieName);
40
+ if (sessionCookie?.value == null || sessionCookie["max-age"] === 0) return;
41
+ const token = sessionCookie.value;
42
+ const exposedHeaders = ctx.res.headers.get("access-control-expose-headers") ?? "";
43
+ const headersSet = new Set(exposedHeaders.split(",").map((header) => header.trim()).filter(Boolean));
44
+ headersSet.add("set-auth-token");
45
+ ctx.res.headers.set("set-auth-token", token);
46
+ ctx.res.headers.set("Access-Control-Expose-Headers", Array.from(headersSet).join(", "));
47
+ })
48
+ }]
49
+ }
50
+ });
51
+ export { bearer };