naystack 1.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 (105) hide show
  1. package/dist/auth/email/index.cjs.js +14 -0
  2. package/dist/auth/email/index.cjs.js.map +1 -0
  3. package/dist/auth/email/index.d.mts +18 -0
  4. package/dist/auth/email/index.d.ts +18 -0
  5. package/dist/auth/email/index.esm.js +14 -0
  6. package/dist/auth/email/index.esm.js.map +1 -0
  7. package/dist/auth/email/routes/delete.cjs.js +8 -0
  8. package/dist/auth/email/routes/delete.cjs.js.map +1 -0
  9. package/dist/auth/email/routes/delete.d.mts +8 -0
  10. package/dist/auth/email/routes/delete.d.ts +8 -0
  11. package/dist/auth/email/routes/delete.esm.js +8 -0
  12. package/dist/auth/email/routes/delete.esm.js.map +1 -0
  13. package/dist/auth/email/routes/get.cjs.js +8 -0
  14. package/dist/auth/email/routes/get.cjs.js.map +1 -0
  15. package/dist/auth/email/routes/get.d.mts +11 -0
  16. package/dist/auth/email/routes/get.d.ts +11 -0
  17. package/dist/auth/email/routes/get.esm.js +8 -0
  18. package/dist/auth/email/routes/get.esm.js.map +1 -0
  19. package/dist/auth/email/routes/post.cjs.js +10 -0
  20. package/dist/auth/email/routes/post.cjs.js.map +1 -0
  21. package/dist/auth/email/routes/post.d.mts +8 -0
  22. package/dist/auth/email/routes/post.d.ts +8 -0
  23. package/dist/auth/email/routes/post.esm.js +10 -0
  24. package/dist/auth/email/routes/post.esm.js.map +1 -0
  25. package/dist/auth/email/routes/put.cjs.js +10 -0
  26. package/dist/auth/email/routes/put.cjs.js.map +1 -0
  27. package/dist/auth/email/routes/put.d.mts +8 -0
  28. package/dist/auth/email/routes/put.d.ts +8 -0
  29. package/dist/auth/email/routes/put.esm.js +10 -0
  30. package/dist/auth/email/routes/put.esm.js.map +1 -0
  31. package/dist/auth/email/token.cjs.js +15 -0
  32. package/dist/auth/email/token.cjs.js.map +1 -0
  33. package/dist/auth/email/token.d.mts +13 -0
  34. package/dist/auth/email/token.d.ts +13 -0
  35. package/dist/auth/email/token.esm.js +15 -0
  36. package/dist/auth/email/token.esm.js.map +1 -0
  37. package/dist/auth/email/types.cjs.js +1 -0
  38. package/dist/auth/email/types.cjs.js.map +1 -0
  39. package/dist/auth/email/types.d.mts +14 -0
  40. package/dist/auth/email/types.d.ts +14 -0
  41. package/dist/auth/email/types.esm.js +1 -0
  42. package/dist/auth/email/types.esm.js.map +1 -0
  43. package/dist/auth/email/utils.cjs.js +10 -0
  44. package/dist/auth/email/utils.cjs.js.map +1 -0
  45. package/dist/auth/email/utils.d.mts +16 -0
  46. package/dist/auth/email/utils.d.ts +16 -0
  47. package/dist/auth/email/utils.esm.js +10 -0
  48. package/dist/auth/email/utils.esm.js.map +1 -0
  49. package/dist/auth/index.cjs.js +14 -0
  50. package/dist/auth/index.cjs.js.map +1 -0
  51. package/dist/auth/index.d.mts +4 -0
  52. package/dist/auth/index.d.ts +4 -0
  53. package/dist/auth/index.esm.js +14 -0
  54. package/dist/auth/index.esm.js.map +1 -0
  55. package/dist/auth/types.cjs.js +1 -0
  56. package/dist/auth/types.cjs.js.map +1 -0
  57. package/dist/auth/types.d.mts +21 -0
  58. package/dist/auth/types.d.ts +21 -0
  59. package/dist/auth/types.esm.js +1 -0
  60. package/dist/auth/types.esm.js.map +1 -0
  61. package/dist/auth/utils/errors.cjs.js +7 -0
  62. package/dist/auth/utils/errors.cjs.js.map +1 -0
  63. package/dist/auth/utils/errors.d.mts +6 -0
  64. package/dist/auth/utils/errors.d.ts +6 -0
  65. package/dist/auth/utils/errors.esm.js +7 -0
  66. package/dist/auth/utils/errors.esm.js.map +1 -0
  67. package/dist/chunk-37UVEZCA.esm.js +11 -0
  68. package/dist/chunk-37UVEZCA.esm.js.map +1 -0
  69. package/dist/chunk-4DNFTIXS.esm.js +27 -0
  70. package/dist/chunk-4DNFTIXS.esm.js.map +1 -0
  71. package/dist/chunk-AMP7DBFP.cjs.js +12 -0
  72. package/dist/chunk-AMP7DBFP.cjs.js.map +1 -0
  73. package/dist/chunk-CGRSCX3T.cjs.js +53 -0
  74. package/dist/chunk-CGRSCX3T.cjs.js.map +1 -0
  75. package/dist/chunk-EXIG77VA.cjs.js +33 -0
  76. package/dist/chunk-EXIG77VA.cjs.js.map +1 -0
  77. package/dist/chunk-FUZFHRDV.cjs.js +21 -0
  78. package/dist/chunk-FUZFHRDV.cjs.js.map +1 -0
  79. package/dist/chunk-ITVLAHX7.esm.js +47 -0
  80. package/dist/chunk-ITVLAHX7.esm.js.map +1 -0
  81. package/dist/chunk-J3TSW2Y3.esm.js +58 -0
  82. package/dist/chunk-J3TSW2Y3.esm.js.map +1 -0
  83. package/dist/chunk-JJXQ5JOS.esm.js +12 -0
  84. package/dist/chunk-JJXQ5JOS.esm.js.map +1 -0
  85. package/dist/chunk-LK3HK7R4.cjs.js +11 -0
  86. package/dist/chunk-LK3HK7R4.cjs.js.map +1 -0
  87. package/dist/chunk-SNLUT6ZC.cjs.js +27 -0
  88. package/dist/chunk-SNLUT6ZC.cjs.js.map +1 -0
  89. package/dist/chunk-TBMSHEBW.cjs.js +58 -0
  90. package/dist/chunk-TBMSHEBW.cjs.js.map +1 -0
  91. package/dist/chunk-TXT4HNJJ.esm.js +33 -0
  92. package/dist/chunk-TXT4HNJJ.esm.js.map +1 -0
  93. package/dist/chunk-Y7CO6FEH.esm.js +21 -0
  94. package/dist/chunk-Y7CO6FEH.esm.js.map +1 -0
  95. package/dist/chunk-ZHWOKRQC.cjs.js +47 -0
  96. package/dist/chunk-ZHWOKRQC.cjs.js.map +1 -0
  97. package/dist/chunk-ZRKBAPNJ.esm.js +53 -0
  98. package/dist/chunk-ZRKBAPNJ.esm.js.map +1 -0
  99. package/dist/index.cjs.js +6 -0
  100. package/dist/index.cjs.js.map +1 -0
  101. package/dist/index.d.mts +3 -0
  102. package/dist/index.d.ts +3 -0
  103. package/dist/index.esm.js +6 -0
  104. package/dist/index.esm.js.map +1 -0
  105. package/package.json +64 -0
@@ -0,0 +1,27 @@
1
+ import {
2
+ getDeleteRoute
3
+ } from "./chunk-37UVEZCA.esm.js";
4
+ import {
5
+ getGetRoute
6
+ } from "./chunk-Y7CO6FEH.esm.js";
7
+ import {
8
+ getPostRoute
9
+ } from "./chunk-ITVLAHX7.esm.js";
10
+ import {
11
+ getPutRoute
12
+ } from "./chunk-TXT4HNJJ.esm.js";
13
+
14
+ // src/auth/email/index.ts
15
+ function getEmailAuthRoutes(options) {
16
+ return {
17
+ GET: getGetRoute(options),
18
+ POST: getPostRoute(options),
19
+ PUT: getPutRoute(options),
20
+ DELETE: getDeleteRoute()
21
+ };
22
+ }
23
+
24
+ export {
25
+ getEmailAuthRoutes
26
+ };
27
+ //# sourceMappingURL=chunk-4DNFTIXS.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/email/index.ts"],"sourcesContent":["import { getDeleteRoute } from \"./routes/delete\";\nimport { getGetRoute } from \"./routes/get\";\nimport { getPostRoute } from \"./routes/post\";\nimport { getPutRoute } from \"./routes/put\";\nimport { InitRoutesOptions } from \"./types\";\n\nexport function getEmailAuthRoutes(options: InitRoutesOptions) {\n return {\n GET: getGetRoute(options),\n POST: getPostRoute(options),\n PUT: getPutRoute(options),\n DELETE: getDeleteRoute(),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAMO,SAAS,mBAAmB,SAA4B;AAC7D,SAAO;AAAA,IACL,KAAK,YAAY,OAAO;AAAA,IACxB,MAAM,aAAa,OAAO;AAAA,IAC1B,KAAK,YAAY,OAAO;AAAA,IACxB,QAAQ,eAAe;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,12 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/auth/utils/errors.ts
2
+ var _server = require('next/server');
3
+ function handleError(status, message, onError) {
4
+ const res = _optionalChain([onError, 'optionalCall', _ => _({ status, message })]);
5
+ if (res) return res;
6
+ return new (0, _server.NextResponse)(message, { status });
7
+ }
8
+
9
+
10
+
11
+ exports.handleError = handleError;
12
+ //# sourceMappingURL=chunk-AMP7DBFP.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/abhinay/WebstormProjects/naystack/dist/chunk-AMP7DBFP.cjs.js","../src/auth/utils/errors.ts"],"names":[],"mappings":"AAAA;ACAA,qCAA6B;AAItB,SAAS,WAAA,CACd,MAAA,EACA,OAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,IAAA,kBAAM,OAAA,wBAAA,CAAU,EAAE,MAAA,EAAQ,QAAQ,CAAC,GAAA;AACzC,EAAA,GAAA,CAAI,GAAA,EAAK,OAAO,GAAA;AAChB,EAAA,OAAO,IAAI,yBAAA,CAAa,OAAA,EAAS,EAAE,OAAO,CAAC,CAAA;AAC7C;ADLA;AACA;AACE;AACF,kCAAC","file":"/Users/abhinay/WebstormProjects/naystack/dist/chunk-AMP7DBFP.cjs.js","sourcesContent":[null,"import { NextResponse } from \"next/server\";\n\nimport { ErrorHandler } from \"../types\";\n\nexport function handleError(\n status: number,\n message: string,\n onError?: ErrorHandler,\n) {\n const res = onError?.({ status, message });\n if (res) return res;\n return new NextResponse(message, { status });\n}\n"]}
@@ -0,0 +1,53 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkAMP7DBFPcjsjs = require('./chunk-AMP7DBFP.cjs.js');
4
+
5
+ // src/auth/email/utils.ts
6
+ async function massageRequest(req, options) {
7
+ const data = await req.json();
8
+ if (!data.email || !data.password)
9
+ return {
10
+ error: _chunkAMP7DBFPcjsjs.handleError.call(void 0, 400, "Missing email or password", options.onError)
11
+ };
12
+ if (options.turnstileKey) {
13
+ if (!data.captchaToken)
14
+ return { error: _chunkAMP7DBFPcjsjs.handleError.call(void 0, 400, "Missing captcha", options.onError) };
15
+ if (!await verifyCaptcha(data.captchaToken, options.turnstileKey))
16
+ return {
17
+ error: _chunkAMP7DBFPcjsjs.handleError.call(void 0, 400, "Invalid captcha", options.onError)
18
+ };
19
+ }
20
+ return {
21
+ data: {
22
+ email: data.email,
23
+ password: data.password,
24
+ ...data
25
+ }
26
+ };
27
+ }
28
+ async function verifyCaptcha(token, secret) {
29
+ const res = await fetch(
30
+ "https://challenges.cloudflare.com/turnstile/v0/siteverify",
31
+ {
32
+ method: "POST",
33
+ headers: {
34
+ "Content-Type": "application/json"
35
+ },
36
+ body: JSON.stringify({
37
+ secret,
38
+ response: token
39
+ })
40
+ }
41
+ );
42
+ if (res.ok) {
43
+ const data = await res.json();
44
+ return data.success;
45
+ }
46
+ return false;
47
+ }
48
+
49
+
50
+
51
+
52
+ exports.massageRequest = massageRequest; exports.verifyCaptcha = verifyCaptcha;
53
+ //# sourceMappingURL=chunk-CGRSCX3T.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/abhinay/WebstormProjects/naystack/dist/chunk-CGRSCX3T.cjs.js","../src/auth/email/utils.ts"],"names":[],"mappings":"AAAA;AACE;AACF,6DAAgC;AAChC;AACA;ACCA,MAAA,SAAsB,cAAA,CACpB,GAAA,EACA,OAAA,EAMC;AACD,EAAA,MAAM,KAAA,EAAQ,MAAM,GAAA,CAAI,IAAA,CAAK,CAAA;AAQ7B,EAAA,GAAA,CAAI,CAAC,IAAA,CAAK,MAAA,GAAS,CAAC,IAAA,CAAK,QAAA;AACvB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,6CAAA,GAAY,EAAK,2BAAA,EAA6B,OAAA,CAAQ,OAAO;AAAA,IACtE,CAAA;AACF,EAAA,GAAA,CAAI,OAAA,CAAQ,YAAA,EAAc;AACxB,IAAA,GAAA,CAAI,CAAC,IAAA,CAAK,YAAA;AACR,MAAA,OAAO,EAAE,KAAA,EAAO,6CAAA,GAAY,EAAK,iBAAA,EAAmB,OAAA,CAAQ,OAAO,EAAE,CAAA;AACvE,IAAA,GAAA,CAAI,CAAE,MAAM,aAAA,CAAc,IAAA,CAAK,YAAA,EAAc,OAAA,CAAQ,YAAY,CAAA;AAC/D,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,6CAAA,GAAY,EAAK,iBAAA,EAAmB,OAAA,CAAQ,OAAO;AAAA,MAC5D,CAAA;AAAA,EACJ;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,IAAA,CAAK,QAAA;AAAA,MACf,GAAG;AAAA,IACL;AAAA,EACF,CAAA;AACF;AAEA,MAAA,SAAsB,aAAA,CAAc,KAAA,EAAe,MAAA,EAAiB;AAClE,EAAA,MAAM,IAAA,EAAM,MAAM,KAAA;AAAA,IAChB,2DAAA;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB;AAAA,MAClB,CAAA;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU;AAAA,QACnB,MAAA;AAAA,QACA,QAAA,EAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF,CAAA;AACA,EAAA,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI;AACV,IAAA,MAAM,KAAA,EAAQ,MAAM,GAAA,CAAI,IAAA,CAAK,CAAA;AAC7B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AACA,EAAA,OAAO,KAAA;AACT;ADfA;AACA;AACE;AACA;AACF,+EAAC","file":"/Users/abhinay/WebstormProjects/naystack/dist/chunk-CGRSCX3T.cjs.js","sourcesContent":[null,"import { NextRequest, NextResponse } from \"next/server\";\n\nimport { handleError } from \"../utils/errors\";\nimport { InitRoutesOptions } from \"./types\";\n\nexport async function massageRequest(\n req: NextRequest,\n options: InitRoutesOptions,\n): Promise<{\n error?: NextResponse;\n data?: { email: string; password: string } & {\n [key: string]: unknown; // extra fields must be type-checked\n };\n}> {\n const data = (await req.json()) as {\n email?: string;\n password?: string;\n captchaToken?: string;\n } & {\n [key: string]: unknown; // extra fields must be type-checked\n };\n\n if (!data.email || !data.password)\n return {\n error: handleError(400, \"Missing email or password\", options.onError),\n };\n if (options.turnstileKey) {\n if (!data.captchaToken)\n return { error: handleError(400, \"Missing captcha\", options.onError) };\n if (!(await verifyCaptcha(data.captchaToken, options.turnstileKey)))\n return {\n error: handleError(400, \"Invalid captcha\", options.onError),\n };\n }\n return {\n data: {\n email: data.email!,\n password: data.password!,\n ...data,\n },\n };\n}\n\nexport async function verifyCaptcha(token: string, secret?: string) {\n const res = await fetch(\n \"https://challenges.cloudflare.com/turnstile/v0/siteverify\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n secret,\n response: token,\n }),\n },\n );\n if (res.ok) {\n const data = (await res.json()) as { success: boolean };\n return data.success;\n }\n return false;\n}\n"]}
@@ -0,0 +1,33 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+ var _chunkTBMSHEBWcjsjs = require('./chunk-TBMSHEBW.cjs.js');
7
+
8
+
9
+ var _chunkCGRSCX3Tcjsjs = require('./chunk-CGRSCX3T.cjs.js');
10
+
11
+
12
+ var _chunkAMP7DBFPcjsjs = require('./chunk-AMP7DBFP.cjs.js');
13
+
14
+ // src/auth/email/routes/put.ts
15
+ var getPutRoute = (options) => async (req) => {
16
+ const { data, error } = await _chunkCGRSCX3Tcjsjs.massageRequest.call(void 0, req, options);
17
+ if (error || !data) return error;
18
+ const user = await options.getUser(data.email);
19
+ if (!user)
20
+ return _chunkAMP7DBFPcjsjs.handleError.call(void 0, 400, "A user does not exist", options.onError);
21
+ if (await _chunkTBMSHEBWcjsjs.verifyUser.call(void 0, user, data.password)) {
22
+ return _chunkTBMSHEBWcjsjs.getTokenizedResponse.call(void 0,
23
+ _chunkTBMSHEBWcjsjs.generateAccessToken.call(void 0, user.id, options.signingKey),
24
+ _chunkTBMSHEBWcjsjs.generateRefreshToken.call(void 0, user.id, options.refreshKey)
25
+ );
26
+ }
27
+ return _chunkAMP7DBFPcjsjs.handleError.call(void 0, 403, "Invalid password", options.onError);
28
+ };
29
+
30
+
31
+
32
+ exports.getPutRoute = getPutRoute;
33
+ //# sourceMappingURL=chunk-EXIG77VA.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/abhinay/WebstormProjects/naystack/dist/chunk-EXIG77VA.cjs.js","../src/auth/email/routes/put.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,6DAAgC;AAChC;AACE;AACF,6DAAgC;AAChC;AACE;AACF,6DAAgC;AAChC;AACA;ACDO,IAAM,YAAA,EACX,CAAC,OAAA,EAAA,GAA+B,MAAA,CAAO,GAAA,EAAA,GAAqB;AAC1D,EAAA,MAAM,EAAE,IAAA,EAAM,MAAM,EAAA,EAAI,MAAM,gDAAA,GAAe,EAAK,OAAO,CAAA;AACzD,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,IAAA,EAAM,OAAO,KAAA;AAE3B,EAAA,MAAM,KAAA,EAAO,MAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AAC7C,EAAA,GAAA,CAAI,CAAC,IAAA;AACH,IAAA,OAAO,6CAAA,GAAY,EAAK,uBAAA,EAAyB,OAAA,CAAQ,OAAO,CAAA;AAElE,EAAA,GAAA,CAAI,MAAM,4CAAA,IAAW,EAAM,IAAA,CAAK,QAAQ,CAAA,EAAG;AACzC,IAAA,OAAO,sDAAA;AAAA,MACL,qDAAA,IAAoB,CAAK,EAAA,EAAI,OAAA,CAAQ,UAAU,CAAA;AAAA,MAC/C,sDAAA,IAAqB,CAAK,EAAA,EAAI,OAAA,CAAQ,UAAU;AAAA,IAClD,CAAA;AAAA,EACF;AACA,EAAA,OAAO,6CAAA,GAAY,EAAK,kBAAA,EAAoB,OAAA,CAAQ,OAAO,CAAA;AAC7D,CAAA;ADAF;AACA;AACE;AACF,kCAAC","file":"/Users/abhinay/WebstormProjects/naystack/dist/chunk-EXIG77VA.cjs.js","sourcesContent":[null,"import { NextRequest } from \"next/server\";\n\nimport { handleError } from \"../../utils/errors\";\nimport {\n generateAccessToken,\n generateRefreshToken,\n getTokenizedResponse,\n verifyUser,\n} from \"../token\";\nimport { InitRoutesOptions } from \"../types\";\nimport { massageRequest } from \"../utils\";\n\nexport const getPutRoute =\n (options: InitRoutesOptions) => async (req: NextRequest) => {\n const { data, error } = await massageRequest(req, options);\n if (error || !data) return error;\n\n const user = await options.getUser(data.email);\n if (!user)\n return handleError(400, \"A user does not exist\", options.onError);\n\n if (await verifyUser(user, data.password)) {\n return getTokenizedResponse(\n generateAccessToken(user.id, options.signingKey),\n generateRefreshToken(user.id, options.refreshKey),\n );\n }\n return handleError(403, \"Invalid password\", options.onError);\n };\n"]}
@@ -0,0 +1,21 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+
5
+ var _chunkTBMSHEBWcjsjs = require('./chunk-TBMSHEBW.cjs.js');
6
+
7
+ // src/auth/email/routes/get.ts
8
+ var getGetRoute = (options) => (req) => {
9
+ const refresh = _optionalChain([req, 'access', _ => _.cookies, 'access', _2 => _2.get, 'call', _3 => _3("refresh"), 'optionalAccess', _4 => _4.value]);
10
+ const userID = _chunkTBMSHEBWcjsjs.getUserIdFromRefreshToken.call(void 0, options.refreshKey, refresh);
11
+ if (userID)
12
+ return _chunkTBMSHEBWcjsjs.getTokenizedResponse.call(void 0,
13
+ _chunkTBMSHEBWcjsjs.generateAccessToken.call(void 0, userID, options.signingKey)
14
+ );
15
+ return _chunkTBMSHEBWcjsjs.getTokenizedResponse.call(void 0, );
16
+ };
17
+
18
+
19
+
20
+ exports.getGetRoute = getGetRoute;
21
+ //# sourceMappingURL=chunk-FUZFHRDV.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/abhinay/WebstormProjects/naystack/dist/chunk-FUZFHRDV.cjs.js","../src/auth/email/routes/get.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,6DAAgC;AAChC;AACA;ACIO,IAAM,YAAA,EACX,CAAC,OAAA,EAAA,GAA+B,CAAC,GAAA,EAAA,GAAqB;AACpD,EAAA,MAAM,QAAA,kBAAU,GAAA,mBAAI,OAAA,qBAAQ,GAAA,mBAAI,SAAS,CAAA,6BAAG,OAAA;AAE5C,EAAA,MAAM,OAAA,EAAS,2DAAA,OAA0B,CAAQ,UAAA,EAAY,OAAO,CAAA;AACpE,EAAA,GAAA,CAAI,MAAA;AACF,IAAA,OAAO,sDAAA;AAAA,MACL,qDAAA,MAAoB,EAAQ,OAAA,CAAQ,UAAU;AAAA,IAChD,CAAA;AAEF,EAAA,OAAO,sDAAA,CAAqB;AAC9B,CAAA;ADLF;AACA;AACE;AACF,kCAAC","file":"/Users/abhinay/WebstormProjects/naystack/dist/chunk-FUZFHRDV.cjs.js","sourcesContent":[null,"import type { NextRequest } from \"next/server\";\n\nimport { InitRoutesOptions } from \"@/src/auth/email/types\";\n\nimport {\n generateAccessToken,\n getTokenizedResponse,\n getUserIdFromRefreshToken,\n} from \"../token\";\n\nexport const getGetRoute =\n (options: InitRoutesOptions) => (req: NextRequest) => {\n const refresh = req.cookies.get(\"refresh\")?.value;\n\n const userID = getUserIdFromRefreshToken(options.refreshKey, refresh);\n if (userID)\n return getTokenizedResponse(\n generateAccessToken(userID, options.signingKey),\n );\n\n return getTokenizedResponse();\n };\n"]}
@@ -0,0 +1,47 @@
1
+ import {
2
+ generateAccessToken,
3
+ generateRefreshToken,
4
+ getTokenizedResponse,
5
+ verifyUser
6
+ } from "./chunk-J3TSW2Y3.esm.js";
7
+ import {
8
+ massageRequest
9
+ } from "./chunk-ZRKBAPNJ.esm.js";
10
+ import {
11
+ handleError
12
+ } from "./chunk-JJXQ5JOS.esm.js";
13
+
14
+ // src/auth/email/routes/post.ts
15
+ import { hash } from "bcryptjs";
16
+ var getPostRoute = (options) => async (req) => {
17
+ const { data, error } = await massageRequest(req, options);
18
+ if (error || !data) return error;
19
+ const existingUser = await options.getUser(data.email);
20
+ if (existingUser) {
21
+ if (await verifyUser(existingUser, data.password)) {
22
+ return getTokenizedResponse(
23
+ generateAccessToken(existingUser.id, options.signingKey),
24
+ generateRefreshToken(existingUser.id, options.refreshKey)
25
+ );
26
+ }
27
+ return handleError(400, "A user already exists", options.onError);
28
+ }
29
+ const encryptedPassword = await hash(data.password, 10);
30
+ const newUser = await options.createUser({
31
+ ...data,
32
+ password: encryptedPassword
33
+ });
34
+ if (newUser) {
35
+ options.onSignUp?.(newUser);
36
+ return getTokenizedResponse(
37
+ generateAccessToken(newUser.id, options.signingKey),
38
+ generateRefreshToken(newUser.id, options.refreshKey)
39
+ );
40
+ }
41
+ return getTokenizedResponse();
42
+ };
43
+
44
+ export {
45
+ getPostRoute
46
+ };
47
+ //# sourceMappingURL=chunk-ITVLAHX7.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/email/routes/post.ts"],"sourcesContent":["import { hash } from \"bcryptjs\";\nimport { NextRequest } from \"next/server\";\n\nimport { handleError } from \"../../utils/errors\";\nimport {\n generateAccessToken,\n generateRefreshToken,\n getTokenizedResponse,\n verifyUser,\n} from \"../token\";\nimport { InitRoutesOptions } from \"../types\";\nimport { massageRequest } from \"../utils\";\n\nexport const getPostRoute =\n (options: InitRoutesOptions) => async (req: NextRequest) => {\n const { data, error } = await massageRequest(req, options);\n if (error || !data) return error;\n\n const existingUser = await options.getUser(data.email);\n if (existingUser) {\n if (await verifyUser(existingUser, data.password)) {\n return getTokenizedResponse(\n generateAccessToken(existingUser.id, options.signingKey),\n generateRefreshToken(existingUser.id, options.refreshKey),\n );\n }\n return handleError(400, \"A user already exists\", options.onError);\n }\n\n const encryptedPassword = await hash(data.password, 10);\n const newUser = await options.createUser({\n ...data,\n password: encryptedPassword,\n });\n\n if (newUser) {\n options.onSignUp?.(newUser);\n\n return getTokenizedResponse(\n generateAccessToken(newUser.id, options.signingKey),\n generateRefreshToken(newUser.id, options.refreshKey),\n );\n }\n return getTokenizedResponse();\n };\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,YAAY;AAad,IAAM,eACX,CAAC,YAA+B,OAAO,QAAqB;AAC1D,QAAM,EAAE,MAAM,MAAM,IAAI,MAAM,eAAe,KAAK,OAAO;AACzD,MAAI,SAAS,CAAC,KAAM,QAAO;AAE3B,QAAM,eAAe,MAAM,QAAQ,QAAQ,KAAK,KAAK;AACrD,MAAI,cAAc;AAChB,QAAI,MAAM,WAAW,cAAc,KAAK,QAAQ,GAAG;AACjD,aAAO;AAAA,QACL,oBAAoB,aAAa,IAAI,QAAQ,UAAU;AAAA,QACvD,qBAAqB,aAAa,IAAI,QAAQ,UAAU;AAAA,MAC1D;AAAA,IACF;AACA,WAAO,YAAY,KAAK,yBAAyB,QAAQ,OAAO;AAAA,EAClE;AAEA,QAAM,oBAAoB,MAAM,KAAK,KAAK,UAAU,EAAE;AACtD,QAAM,UAAU,MAAM,QAAQ,WAAW;AAAA,IACvC,GAAG;AAAA,IACH,UAAU;AAAA,EACZ,CAAC;AAED,MAAI,SAAS;AACX,YAAQ,WAAW,OAAO;AAE1B,WAAO;AAAA,MACL,oBAAoB,QAAQ,IAAI,QAAQ,UAAU;AAAA,MAClD,qBAAqB,QAAQ,IAAI,QAAQ,UAAU;AAAA,IACrD;AAAA,EACF;AACA,SAAO,qBAAqB;AAC9B;","names":[]}
@@ -0,0 +1,58 @@
1
+ // src/auth/email/token.ts
2
+ import { compare } from "bcryptjs";
3
+ import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
4
+ import { NextResponse } from "next/server";
5
+ function generateAccessToken(id, signingKey) {
6
+ return sign({ id }, signingKey, {
7
+ expiresIn: "2h"
8
+ });
9
+ }
10
+ function generateRefreshToken(id, refreshKey) {
11
+ return sign({ id }, refreshKey);
12
+ }
13
+ function getTokenizedResponse(accessToken, refreshToken) {
14
+ const body = { accessToken, refreshToken };
15
+ const response = NextResponse.json(body, {
16
+ status: 200
17
+ });
18
+ if (!accessToken) {
19
+ response.cookies.set("refresh", "", {
20
+ secure: false,
21
+ httpOnly: true,
22
+ expires: 0
23
+ });
24
+ }
25
+ if (refreshToken !== void 0) {
26
+ response.cookies.set("refresh", refreshToken, {
27
+ secure: false,
28
+ httpOnly: true,
29
+ expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
30
+ });
31
+ }
32
+ return response;
33
+ }
34
+ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
35
+ if (refreshToken)
36
+ try {
37
+ const decoded = verify(refreshToken, refreshKey);
38
+ if (typeof decoded !== "string" && typeof decoded.id === "number")
39
+ return decoded.id;
40
+ } catch (e) {
41
+ if (!(e instanceof JsonWebTokenError)) console.error(e, "errors");
42
+ return null;
43
+ }
44
+ return null;
45
+ }
46
+ function verifyUser(user, password) {
47
+ if (!user.password) return false;
48
+ return compare(password, user.password);
49
+ }
50
+
51
+ export {
52
+ generateAccessToken,
53
+ generateRefreshToken,
54
+ getTokenizedResponse,
55
+ getUserIdFromRefreshToken,
56
+ verifyUser
57
+ };
58
+ //# sourceMappingURL=chunk-J3TSW2Y3.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/email/token.ts"],"sourcesContent":["import { compare } from \"bcryptjs\";\nimport { JsonWebTokenError, sign, verify } from \"jsonwebtoken\";\nimport { NextResponse } from \"next/server\";\n\nimport { UserOutput } from \"@/src/auth/types\";\n\nexport function generateAccessToken(id: number, signingKey: string) {\n return sign({ id }, signingKey, {\n expiresIn: \"2h\",\n });\n}\n\nexport function generateRefreshToken(id: number, refreshKey: string) {\n return sign({ id }, refreshKey);\n}\n\nexport function getTokenizedResponse(\n accessToken?: string,\n refreshToken?: string,\n) {\n const body = { accessToken, refreshToken };\n const response = NextResponse.json(body, {\n status: 200,\n });\n if (!accessToken) {\n response.cookies.set(\"refresh\", \"\", {\n secure: false,\n httpOnly: true,\n expires: 0,\n });\n }\n if (refreshToken !== undefined) {\n response.cookies.set(\"refresh\", refreshToken, {\n secure: false,\n httpOnly: true,\n expires:\n refreshToken === \"\"\n ? 0\n : new Date(Date.now() + 60 * 60 * 24 * 365 * 1000),\n });\n }\n return response;\n}\n\nexport function getUserIdFromRefreshToken(\n refreshKey: string,\n refreshToken?: string,\n): number | null {\n if (refreshToken)\n try {\n const decoded = verify(refreshToken, refreshKey);\n if (typeof decoded !== \"string\" && typeof decoded.id === \"number\")\n return decoded.id;\n } catch (e) {\n if (!(e instanceof JsonWebTokenError)) console.error(e, \"errors\");\n return null;\n }\n return null;\n}\n\nexport function verifyUser(user: UserOutput, password: string) {\n if (!user.password) return false;\n return compare(password, user.password);\n}\n"],"mappings":";AAAA,SAAS,eAAe;AACxB,SAAS,mBAAmB,MAAM,cAAc;AAChD,SAAS,oBAAoB;AAItB,SAAS,oBAAoB,IAAY,YAAoB;AAClE,SAAO,KAAK,EAAE,GAAG,GAAG,YAAY;AAAA,IAC9B,WAAW;AAAA,EACb,CAAC;AACH;AAEO,SAAS,qBAAqB,IAAY,YAAoB;AACnE,SAAO,KAAK,EAAE,GAAG,GAAG,UAAU;AAChC;AAEO,SAAS,qBACd,aACA,cACA;AACA,QAAM,OAAO,EAAE,aAAa,aAAa;AACzC,QAAM,WAAW,aAAa,KAAK,MAAM;AAAA,IACvC,QAAQ;AAAA,EACV,CAAC;AACD,MAAI,CAAC,aAAa;AAChB,aAAS,QAAQ,IAAI,WAAW,IAAI;AAAA,MAClC,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,iBAAiB,QAAW;AAC9B,aAAS,QAAQ,IAAI,WAAW,cAAc;AAAA,MAC5C,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SACE,iBAAiB,KACb,IACA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,MAAM,GAAI;AAAA,IACvD,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,SAAS,0BACd,YACA,cACe;AACf,MAAI;AACF,QAAI;AACF,YAAM,UAAU,OAAO,cAAc,UAAU;AAC/C,UAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,OAAO;AACvD,eAAO,QAAQ;AAAA,IACnB,SAAS,GAAG;AACV,UAAI,EAAE,aAAa,mBAAoB,SAAQ,MAAM,GAAG,QAAQ;AAChE,aAAO;AAAA,IACT;AACF,SAAO;AACT;AAEO,SAAS,WAAW,MAAkB,UAAkB;AAC7D,MAAI,CAAC,KAAK,SAAU,QAAO;AAC3B,SAAO,QAAQ,UAAU,KAAK,QAAQ;AACxC;","names":[]}
@@ -0,0 +1,12 @@
1
+ // src/auth/utils/errors.ts
2
+ import { NextResponse } from "next/server";
3
+ function handleError(status, message, onError) {
4
+ const res = onError?.({ status, message });
5
+ if (res) return res;
6
+ return new NextResponse(message, { status });
7
+ }
8
+
9
+ export {
10
+ handleError
11
+ };
12
+ //# sourceMappingURL=chunk-JJXQ5JOS.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/utils/errors.ts"],"sourcesContent":["import { NextResponse } from \"next/server\";\n\nimport { ErrorHandler } from \"../types\";\n\nexport function handleError(\n status: number,\n message: string,\n onError?: ErrorHandler,\n) {\n const res = onError?.({ status, message });\n if (res) return res;\n return new NextResponse(message, { status });\n}\n"],"mappings":";AAAA,SAAS,oBAAoB;AAItB,SAAS,YACd,QACA,SACA,SACA;AACA,QAAM,MAAM,UAAU,EAAE,QAAQ,QAAQ,CAAC;AACzC,MAAI,IAAK,QAAO;AAChB,SAAO,IAAI,aAAa,SAAS,EAAE,OAAO,CAAC;AAC7C;","names":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkTBMSHEBWcjsjs = require('./chunk-TBMSHEBW.cjs.js');
4
+
5
+ // src/auth/email/routes/delete.ts
6
+ var getDeleteRoute = () => () => _chunkTBMSHEBWcjsjs.getTokenizedResponse.call(void 0, void 0, "");
7
+
8
+
9
+
10
+ exports.getDeleteRoute = getDeleteRoute;
11
+ //# sourceMappingURL=chunk-LK3HK7R4.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/abhinay/WebstormProjects/naystack/dist/chunk-LK3HK7R4.cjs.js","../src/auth/email/routes/delete.ts"],"names":[],"mappings":"AAAA;AACE;AACF,6DAAgC;AAChC;AACA;ACFO,IAAM,eAAA,EAAiB,CAAA,EAAA,GAAM,CAAA,EAAA,GAAM,sDAAA,KAAqB,CAAA,EAAW,EAAE,CAAA;ADI5E;AACA;AACE;AACF,wCAAC","file":"/Users/abhinay/WebstormProjects/naystack/dist/chunk-LK3HK7R4.cjs.js","sourcesContent":[null,"import { getTokenizedResponse } from \"../token\";\n\nexport const getDeleteRoute = () => () => getTokenizedResponse(undefined, \"\");\n"]}
@@ -0,0 +1,27 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkLK3HK7R4cjsjs = require('./chunk-LK3HK7R4.cjs.js');
4
+
5
+
6
+ var _chunkFUZFHRDVcjsjs = require('./chunk-FUZFHRDV.cjs.js');
7
+
8
+
9
+ var _chunkZHWOKRQCcjsjs = require('./chunk-ZHWOKRQC.cjs.js');
10
+
11
+
12
+ var _chunkEXIG77VAcjsjs = require('./chunk-EXIG77VA.cjs.js');
13
+
14
+ // src/auth/email/index.ts
15
+ function getEmailAuthRoutes(options) {
16
+ return {
17
+ GET: _chunkFUZFHRDVcjsjs.getGetRoute.call(void 0, options),
18
+ POST: _chunkZHWOKRQCcjsjs.getPostRoute.call(void 0, options),
19
+ PUT: _chunkEXIG77VAcjsjs.getPutRoute.call(void 0, options),
20
+ DELETE: _chunkLK3HK7R4cjsjs.getDeleteRoute.call(void 0, )
21
+ };
22
+ }
23
+
24
+
25
+
26
+ exports.getEmailAuthRoutes = getEmailAuthRoutes;
27
+ //# sourceMappingURL=chunk-SNLUT6ZC.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/abhinay/WebstormProjects/naystack/dist/chunk-SNLUT6ZC.cjs.js","../src/auth/email/index.ts"],"names":[],"mappings":"AAAA;AACE;AACF,6DAAgC;AAChC;AACE;AACF,6DAAgC;AAChC;AACE;AACF,6DAAgC;AAChC;AACE;AACF,6DAAgC;AAChC;AACA;ACPO,SAAS,kBAAA,CAAmB,OAAA,EAA4B;AAC7D,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,6CAAA,OAAmB,CAAA;AAAA,IACxB,IAAA,EAAM,8CAAA,OAAoB,CAAA;AAAA,IAC1B,GAAA,EAAK,6CAAA,OAAmB,CAAA;AAAA,IACxB,MAAA,EAAQ,gDAAA;AAAe,EACzB,CAAA;AACF;ADSA;AACA;AACE;AACF,gDAAC","file":"/Users/abhinay/WebstormProjects/naystack/dist/chunk-SNLUT6ZC.cjs.js","sourcesContent":[null,"import { getDeleteRoute } from \"./routes/delete\";\nimport { getGetRoute } from \"./routes/get\";\nimport { getPostRoute } from \"./routes/post\";\nimport { getPutRoute } from \"./routes/put\";\nimport { InitRoutesOptions } from \"./types\";\n\nexport function getEmailAuthRoutes(options: InitRoutesOptions) {\n return {\n GET: getGetRoute(options),\n POST: getPostRoute(options),\n PUT: getPutRoute(options),\n DELETE: getDeleteRoute(),\n };\n}\n"]}
@@ -0,0 +1,58 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/auth/email/token.ts
2
+ var _bcryptjs = require('bcryptjs');
3
+ var _jsonwebtoken = require('jsonwebtoken');
4
+ var _server = require('next/server');
5
+ function generateAccessToken(id, signingKey) {
6
+ return _jsonwebtoken.sign.call(void 0, { id }, signingKey, {
7
+ expiresIn: "2h"
8
+ });
9
+ }
10
+ function generateRefreshToken(id, refreshKey) {
11
+ return _jsonwebtoken.sign.call(void 0, { id }, refreshKey);
12
+ }
13
+ function getTokenizedResponse(accessToken, refreshToken) {
14
+ const body = { accessToken, refreshToken };
15
+ const response = _server.NextResponse.json(body, {
16
+ status: 200
17
+ });
18
+ if (!accessToken) {
19
+ response.cookies.set("refresh", "", {
20
+ secure: false,
21
+ httpOnly: true,
22
+ expires: 0
23
+ });
24
+ }
25
+ if (refreshToken !== void 0) {
26
+ response.cookies.set("refresh", refreshToken, {
27
+ secure: false,
28
+ httpOnly: true,
29
+ expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
30
+ });
31
+ }
32
+ return response;
33
+ }
34
+ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
35
+ if (refreshToken)
36
+ try {
37
+ const decoded = _jsonwebtoken.verify.call(void 0, refreshToken, refreshKey);
38
+ if (typeof decoded !== "string" && typeof decoded.id === "number")
39
+ return decoded.id;
40
+ } catch (e) {
41
+ if (!(e instanceof _jsonwebtoken.JsonWebTokenError)) console.error(e, "errors");
42
+ return null;
43
+ }
44
+ return null;
45
+ }
46
+ function verifyUser(user, password) {
47
+ if (!user.password) return false;
48
+ return _bcryptjs.compare.call(void 0, password, user.password);
49
+ }
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+ exports.generateAccessToken = generateAccessToken; exports.generateRefreshToken = generateRefreshToken; exports.getTokenizedResponse = getTokenizedResponse; exports.getUserIdFromRefreshToken = getUserIdFromRefreshToken; exports.verifyUser = verifyUser;
58
+ //# sourceMappingURL=chunk-TBMSHEBW.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/abhinay/WebstormProjects/naystack/dist/chunk-TBMSHEBW.cjs.js","../src/auth/email/token.ts"],"names":[],"mappings":"AAAA;ACAA,oCAAwB;AACxB,4CAAgD;AAChD,qCAA6B;AAItB,SAAS,mBAAA,CAAoB,EAAA,EAAY,UAAA,EAAoB;AAClE,EAAA,OAAO,gCAAA,EAAO,GAAG,CAAA,EAAG,UAAA,EAAY;AAAA,IAC9B,SAAA,EAAW;AAAA,EACb,CAAC,CAAA;AACH;AAEO,SAAS,oBAAA,CAAqB,EAAA,EAAY,UAAA,EAAoB;AACnE,EAAA,OAAO,gCAAA,EAAO,GAAG,CAAA,EAAG,UAAU,CAAA;AAChC;AAEO,SAAS,oBAAA,CACd,WAAA,EACA,YAAA,EACA;AACA,EAAA,MAAM,KAAA,EAAO,EAAE,WAAA,EAAa,aAAa,CAAA;AACzC,EAAA,MAAM,SAAA,EAAW,oBAAA,CAAa,IAAA,CAAK,IAAA,EAAM;AAAA,IACvC,MAAA,EAAQ;AAAA,EACV,CAAC,CAAA;AACD,EAAA,GAAA,CAAI,CAAC,WAAA,EAAa;AAChB,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAW,EAAA,EAAI;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,QAAA,EAAU,IAAA;AAAA,MACV,OAAA,EAAS;AAAA,IACX,CAAC,CAAA;AAAA,EACH;AACA,EAAA,GAAA,CAAI,aAAA,IAAiB,KAAA,CAAA,EAAW;AAC9B,IAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAW,YAAA,EAAc;AAAA,MAC5C,MAAA,EAAQ,KAAA;AAAA,MACR,QAAA,EAAU,IAAA;AAAA,MACV,OAAA,EACE,aAAA,IAAiB,GAAA,EACb,EAAA,EACA,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,GAAI;AAAA,IACvD,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,yBAAA,CACd,UAAA,EACA,YAAA,EACe;AACf,EAAA,GAAA,CAAI,YAAA;AACF,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,EAAU,kCAAA,YAAO,EAAc,UAAU,CAAA;AAC/C,MAAA,GAAA,CAAI,OAAO,QAAA,IAAY,SAAA,GAAY,OAAO,OAAA,CAAQ,GAAA,IAAO,QAAA;AACvD,QAAA,OAAO,OAAA,CAAQ,EAAA;AAAA,IACnB,EAAA,MAAA,CAAS,CAAA,EAAG;AACV,MAAA,GAAA,CAAI,CAAA,CAAE,EAAA,WAAa,+BAAA,CAAA,EAAoB,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AAChE,MAAA,OAAO,IAAA;AAAA,IACT;AACF,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,UAAA,CAAW,IAAA,EAAkB,QAAA,EAAkB;AAC7D,EAAA,GAAA,CAAI,CAAC,IAAA,CAAK,QAAA,EAAU,OAAO,KAAA;AAC3B,EAAA,OAAO,+BAAA,QAAQ,EAAU,IAAA,CAAK,QAAQ,CAAA;AACxC;ADdA;AACA;AACE;AACA;AACA;AACA;AACA;AACF,4PAAC","file":"/Users/abhinay/WebstormProjects/naystack/dist/chunk-TBMSHEBW.cjs.js","sourcesContent":[null,"import { compare } from \"bcryptjs\";\nimport { JsonWebTokenError, sign, verify } from \"jsonwebtoken\";\nimport { NextResponse } from \"next/server\";\n\nimport { UserOutput } from \"@/src/auth/types\";\n\nexport function generateAccessToken(id: number, signingKey: string) {\n return sign({ id }, signingKey, {\n expiresIn: \"2h\",\n });\n}\n\nexport function generateRefreshToken(id: number, refreshKey: string) {\n return sign({ id }, refreshKey);\n}\n\nexport function getTokenizedResponse(\n accessToken?: string,\n refreshToken?: string,\n) {\n const body = { accessToken, refreshToken };\n const response = NextResponse.json(body, {\n status: 200,\n });\n if (!accessToken) {\n response.cookies.set(\"refresh\", \"\", {\n secure: false,\n httpOnly: true,\n expires: 0,\n });\n }\n if (refreshToken !== undefined) {\n response.cookies.set(\"refresh\", refreshToken, {\n secure: false,\n httpOnly: true,\n expires:\n refreshToken === \"\"\n ? 0\n : new Date(Date.now() + 60 * 60 * 24 * 365 * 1000),\n });\n }\n return response;\n}\n\nexport function getUserIdFromRefreshToken(\n refreshKey: string,\n refreshToken?: string,\n): number | null {\n if (refreshToken)\n try {\n const decoded = verify(refreshToken, refreshKey);\n if (typeof decoded !== \"string\" && typeof decoded.id === \"number\")\n return decoded.id;\n } catch (e) {\n if (!(e instanceof JsonWebTokenError)) console.error(e, \"errors\");\n return null;\n }\n return null;\n}\n\nexport function verifyUser(user: UserOutput, password: string) {\n if (!user.password) return false;\n return compare(password, user.password);\n}\n"]}
@@ -0,0 +1,33 @@
1
+ import {
2
+ generateAccessToken,
3
+ generateRefreshToken,
4
+ getTokenizedResponse,
5
+ verifyUser
6
+ } from "./chunk-J3TSW2Y3.esm.js";
7
+ import {
8
+ massageRequest
9
+ } from "./chunk-ZRKBAPNJ.esm.js";
10
+ import {
11
+ handleError
12
+ } from "./chunk-JJXQ5JOS.esm.js";
13
+
14
+ // src/auth/email/routes/put.ts
15
+ var getPutRoute = (options) => async (req) => {
16
+ const { data, error } = await massageRequest(req, options);
17
+ if (error || !data) return error;
18
+ const user = await options.getUser(data.email);
19
+ if (!user)
20
+ return handleError(400, "A user does not exist", options.onError);
21
+ if (await verifyUser(user, data.password)) {
22
+ return getTokenizedResponse(
23
+ generateAccessToken(user.id, options.signingKey),
24
+ generateRefreshToken(user.id, options.refreshKey)
25
+ );
26
+ }
27
+ return handleError(403, "Invalid password", options.onError);
28
+ };
29
+
30
+ export {
31
+ getPutRoute
32
+ };
33
+ //# sourceMappingURL=chunk-TXT4HNJJ.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/email/routes/put.ts"],"sourcesContent":["import { NextRequest } from \"next/server\";\n\nimport { handleError } from \"../../utils/errors\";\nimport {\n generateAccessToken,\n generateRefreshToken,\n getTokenizedResponse,\n verifyUser,\n} from \"../token\";\nimport { InitRoutesOptions } from \"../types\";\nimport { massageRequest } from \"../utils\";\n\nexport const getPutRoute =\n (options: InitRoutesOptions) => async (req: NextRequest) => {\n const { data, error } = await massageRequest(req, options);\n if (error || !data) return error;\n\n const user = await options.getUser(data.email);\n if (!user)\n return handleError(400, \"A user does not exist\", options.onError);\n\n if (await verifyUser(user, data.password)) {\n return getTokenizedResponse(\n generateAccessToken(user.id, options.signingKey),\n generateRefreshToken(user.id, options.refreshKey),\n );\n }\n return handleError(403, \"Invalid password\", options.onError);\n };\n"],"mappings":";;;;;;;;;;;;;;AAYO,IAAM,cACX,CAAC,YAA+B,OAAO,QAAqB;AAC1D,QAAM,EAAE,MAAM,MAAM,IAAI,MAAM,eAAe,KAAK,OAAO;AACzD,MAAI,SAAS,CAAC,KAAM,QAAO;AAE3B,QAAM,OAAO,MAAM,QAAQ,QAAQ,KAAK,KAAK;AAC7C,MAAI,CAAC;AACH,WAAO,YAAY,KAAK,yBAAyB,QAAQ,OAAO;AAElE,MAAI,MAAM,WAAW,MAAM,KAAK,QAAQ,GAAG;AACzC,WAAO;AAAA,MACL,oBAAoB,KAAK,IAAI,QAAQ,UAAU;AAAA,MAC/C,qBAAqB,KAAK,IAAI,QAAQ,UAAU;AAAA,IAClD;AAAA,EACF;AACA,SAAO,YAAY,KAAK,oBAAoB,QAAQ,OAAO;AAC7D;","names":[]}
@@ -0,0 +1,21 @@
1
+ import {
2
+ generateAccessToken,
3
+ getTokenizedResponse,
4
+ getUserIdFromRefreshToken
5
+ } from "./chunk-J3TSW2Y3.esm.js";
6
+
7
+ // src/auth/email/routes/get.ts
8
+ var getGetRoute = (options) => (req) => {
9
+ const refresh = req.cookies.get("refresh")?.value;
10
+ const userID = getUserIdFromRefreshToken(options.refreshKey, refresh);
11
+ if (userID)
12
+ return getTokenizedResponse(
13
+ generateAccessToken(userID, options.signingKey)
14
+ );
15
+ return getTokenizedResponse();
16
+ };
17
+
18
+ export {
19
+ getGetRoute
20
+ };
21
+ //# sourceMappingURL=chunk-Y7CO6FEH.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/email/routes/get.ts"],"sourcesContent":["import type { NextRequest } from \"next/server\";\n\nimport { InitRoutesOptions } from \"@/src/auth/email/types\";\n\nimport {\n generateAccessToken,\n getTokenizedResponse,\n getUserIdFromRefreshToken,\n} from \"../token\";\n\nexport const getGetRoute =\n (options: InitRoutesOptions) => (req: NextRequest) => {\n const refresh = req.cookies.get(\"refresh\")?.value;\n\n const userID = getUserIdFromRefreshToken(options.refreshKey, refresh);\n if (userID)\n return getTokenizedResponse(\n generateAccessToken(userID, options.signingKey),\n );\n\n return getTokenizedResponse();\n };\n"],"mappings":";;;;;;;AAUO,IAAM,cACX,CAAC,YAA+B,CAAC,QAAqB;AACpD,QAAM,UAAU,IAAI,QAAQ,IAAI,SAAS,GAAG;AAE5C,QAAM,SAAS,0BAA0B,QAAQ,YAAY,OAAO;AACpE,MAAI;AACF,WAAO;AAAA,MACL,oBAAoB,QAAQ,QAAQ,UAAU;AAAA,IAChD;AAEF,SAAO,qBAAqB;AAC9B;","names":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+
5
+
6
+ var _chunkTBMSHEBWcjsjs = require('./chunk-TBMSHEBW.cjs.js');
7
+
8
+
9
+ var _chunkCGRSCX3Tcjsjs = require('./chunk-CGRSCX3T.cjs.js');
10
+
11
+
12
+ var _chunkAMP7DBFPcjsjs = require('./chunk-AMP7DBFP.cjs.js');
13
+
14
+ // src/auth/email/routes/post.ts
15
+ var _bcryptjs = require('bcryptjs');
16
+ var getPostRoute = (options) => async (req) => {
17
+ const { data, error } = await _chunkCGRSCX3Tcjsjs.massageRequest.call(void 0, req, options);
18
+ if (error || !data) return error;
19
+ const existingUser = await options.getUser(data.email);
20
+ if (existingUser) {
21
+ if (await _chunkTBMSHEBWcjsjs.verifyUser.call(void 0, existingUser, data.password)) {
22
+ return _chunkTBMSHEBWcjsjs.getTokenizedResponse.call(void 0,
23
+ _chunkTBMSHEBWcjsjs.generateAccessToken.call(void 0, existingUser.id, options.signingKey),
24
+ _chunkTBMSHEBWcjsjs.generateRefreshToken.call(void 0, existingUser.id, options.refreshKey)
25
+ );
26
+ }
27
+ return _chunkAMP7DBFPcjsjs.handleError.call(void 0, 400, "A user already exists", options.onError);
28
+ }
29
+ const encryptedPassword = await _bcryptjs.hash.call(void 0, data.password, 10);
30
+ const newUser = await options.createUser({
31
+ ...data,
32
+ password: encryptedPassword
33
+ });
34
+ if (newUser) {
35
+ _optionalChain([options, 'access', _ => _.onSignUp, 'optionalCall', _2 => _2(newUser)]);
36
+ return _chunkTBMSHEBWcjsjs.getTokenizedResponse.call(void 0,
37
+ _chunkTBMSHEBWcjsjs.generateAccessToken.call(void 0, newUser.id, options.signingKey),
38
+ _chunkTBMSHEBWcjsjs.generateRefreshToken.call(void 0, newUser.id, options.refreshKey)
39
+ );
40
+ }
41
+ return _chunkTBMSHEBWcjsjs.getTokenizedResponse.call(void 0, );
42
+ };
43
+
44
+
45
+
46
+ exports.getPostRoute = getPostRoute;
47
+ //# sourceMappingURL=chunk-ZHWOKRQC.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/abhinay/WebstormProjects/naystack/dist/chunk-ZHWOKRQC.cjs.js","../src/auth/email/routes/post.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,6DAAgC;AAChC;AACE;AACF,6DAAgC;AAChC;AACE;AACF,6DAAgC;AAChC;AACA;ACbA,oCAAqB;AAad,IAAM,aAAA,EACX,CAAC,OAAA,EAAA,GAA+B,MAAA,CAAO,GAAA,EAAA,GAAqB;AAC1D,EAAA,MAAM,EAAE,IAAA,EAAM,MAAM,EAAA,EAAI,MAAM,gDAAA,GAAe,EAAK,OAAO,CAAA;AACzD,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,IAAA,EAAM,OAAO,KAAA;AAE3B,EAAA,MAAM,aAAA,EAAe,MAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AACrD,EAAA,GAAA,CAAI,YAAA,EAAc;AAChB,IAAA,GAAA,CAAI,MAAM,4CAAA,YAAW,EAAc,IAAA,CAAK,QAAQ,CAAA,EAAG;AACjD,MAAA,OAAO,sDAAA;AAAA,QACL,qDAAA,YAAoB,CAAa,EAAA,EAAI,OAAA,CAAQ,UAAU,CAAA;AAAA,QACvD,sDAAA,YAAqB,CAAa,EAAA,EAAI,OAAA,CAAQ,UAAU;AAAA,MAC1D,CAAA;AAAA,IACF;AACA,IAAA,OAAO,6CAAA,GAAY,EAAK,uBAAA,EAAyB,OAAA,CAAQ,OAAO,CAAA;AAAA,EAClE;AAEA,EAAA,MAAM,kBAAA,EAAoB,MAAM,4BAAA,IAAK,CAAK,QAAA,EAAU,EAAE,CAAA;AACtD,EAAA,MAAM,QAAA,EAAU,MAAM,OAAA,CAAQ,UAAA,CAAW;AAAA,IACvC,GAAG,IAAA;AAAA,IACH,QAAA,EAAU;AAAA,EACZ,CAAC,CAAA;AAED,EAAA,GAAA,CAAI,OAAA,EAAS;AACX,oBAAA,OAAA,mBAAQ,QAAA,0BAAA,CAAW,OAAO,GAAA;AAE1B,IAAA,OAAO,sDAAA;AAAA,MACL,qDAAA,OAAoB,CAAQ,EAAA,EAAI,OAAA,CAAQ,UAAU,CAAA;AAAA,MAClD,sDAAA,OAAqB,CAAQ,EAAA,EAAI,OAAA,CAAQ,UAAU;AAAA,IACrD,CAAA;AAAA,EACF;AACA,EAAA,OAAO,sDAAA,CAAqB;AAC9B,CAAA;ADFF;AACA;AACE;AACF,oCAAC","file":"/Users/abhinay/WebstormProjects/naystack/dist/chunk-ZHWOKRQC.cjs.js","sourcesContent":[null,"import { hash } from \"bcryptjs\";\nimport { NextRequest } from \"next/server\";\n\nimport { handleError } from \"../../utils/errors\";\nimport {\n generateAccessToken,\n generateRefreshToken,\n getTokenizedResponse,\n verifyUser,\n} from \"../token\";\nimport { InitRoutesOptions } from \"../types\";\nimport { massageRequest } from \"../utils\";\n\nexport const getPostRoute =\n (options: InitRoutesOptions) => async (req: NextRequest) => {\n const { data, error } = await massageRequest(req, options);\n if (error || !data) return error;\n\n const existingUser = await options.getUser(data.email);\n if (existingUser) {\n if (await verifyUser(existingUser, data.password)) {\n return getTokenizedResponse(\n generateAccessToken(existingUser.id, options.signingKey),\n generateRefreshToken(existingUser.id, options.refreshKey),\n );\n }\n return handleError(400, \"A user already exists\", options.onError);\n }\n\n const encryptedPassword = await hash(data.password, 10);\n const newUser = await options.createUser({\n ...data,\n password: encryptedPassword,\n });\n\n if (newUser) {\n options.onSignUp?.(newUser);\n\n return getTokenizedResponse(\n generateAccessToken(newUser.id, options.signingKey),\n generateRefreshToken(newUser.id, options.refreshKey),\n );\n }\n return getTokenizedResponse();\n };\n"]}
@@ -0,0 +1,53 @@
1
+ import {
2
+ handleError
3
+ } from "./chunk-JJXQ5JOS.esm.js";
4
+
5
+ // src/auth/email/utils.ts
6
+ async function massageRequest(req, options) {
7
+ const data = await req.json();
8
+ if (!data.email || !data.password)
9
+ return {
10
+ error: handleError(400, "Missing email or password", options.onError)
11
+ };
12
+ if (options.turnstileKey) {
13
+ if (!data.captchaToken)
14
+ return { error: handleError(400, "Missing captcha", options.onError) };
15
+ if (!await verifyCaptcha(data.captchaToken, options.turnstileKey))
16
+ return {
17
+ error: handleError(400, "Invalid captcha", options.onError)
18
+ };
19
+ }
20
+ return {
21
+ data: {
22
+ email: data.email,
23
+ password: data.password,
24
+ ...data
25
+ }
26
+ };
27
+ }
28
+ async function verifyCaptcha(token, secret) {
29
+ const res = await fetch(
30
+ "https://challenges.cloudflare.com/turnstile/v0/siteverify",
31
+ {
32
+ method: "POST",
33
+ headers: {
34
+ "Content-Type": "application/json"
35
+ },
36
+ body: JSON.stringify({
37
+ secret,
38
+ response: token
39
+ })
40
+ }
41
+ );
42
+ if (res.ok) {
43
+ const data = await res.json();
44
+ return data.success;
45
+ }
46
+ return false;
47
+ }
48
+
49
+ export {
50
+ massageRequest,
51
+ verifyCaptcha
52
+ };
53
+ //# sourceMappingURL=chunk-ZRKBAPNJ.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/email/utils.ts"],"sourcesContent":["import { NextRequest, NextResponse } from \"next/server\";\n\nimport { handleError } from \"../utils/errors\";\nimport { InitRoutesOptions } from \"./types\";\n\nexport async function massageRequest(\n req: NextRequest,\n options: InitRoutesOptions,\n): Promise<{\n error?: NextResponse;\n data?: { email: string; password: string } & {\n [key: string]: unknown; // extra fields must be type-checked\n };\n}> {\n const data = (await req.json()) as {\n email?: string;\n password?: string;\n captchaToken?: string;\n } & {\n [key: string]: unknown; // extra fields must be type-checked\n };\n\n if (!data.email || !data.password)\n return {\n error: handleError(400, \"Missing email or password\", options.onError),\n };\n if (options.turnstileKey) {\n if (!data.captchaToken)\n return { error: handleError(400, \"Missing captcha\", options.onError) };\n if (!(await verifyCaptcha(data.captchaToken, options.turnstileKey)))\n return {\n error: handleError(400, \"Invalid captcha\", options.onError),\n };\n }\n return {\n data: {\n email: data.email!,\n password: data.password!,\n ...data,\n },\n };\n}\n\nexport async function verifyCaptcha(token: string, secret?: string) {\n const res = await fetch(\n \"https://challenges.cloudflare.com/turnstile/v0/siteverify\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n secret,\n response: token,\n }),\n },\n );\n if (res.ok) {\n const data = (await res.json()) as { success: boolean };\n return data.success;\n }\n return false;\n}\n"],"mappings":";;;;;AAKA,eAAsB,eACpB,KACA,SAMC;AACD,QAAM,OAAQ,MAAM,IAAI,KAAK;AAQ7B,MAAI,CAAC,KAAK,SAAS,CAAC,KAAK;AACvB,WAAO;AAAA,MACL,OAAO,YAAY,KAAK,6BAA6B,QAAQ,OAAO;AAAA,IACtE;AACF,MAAI,QAAQ,cAAc;AACxB,QAAI,CAAC,KAAK;AACR,aAAO,EAAE,OAAO,YAAY,KAAK,mBAAmB,QAAQ,OAAO,EAAE;AACvE,QAAI,CAAE,MAAM,cAAc,KAAK,cAAc,QAAQ,YAAY;AAC/D,aAAO;AAAA,QACL,OAAO,YAAY,KAAK,mBAAmB,QAAQ,OAAO;AAAA,MAC5D;AAAA,EACJ;AACA,SAAO;AAAA,IACL,MAAM;AAAA,MACJ,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,GAAG;AAAA,IACL;AAAA,EACF;AACF;AAEA,eAAsB,cAAc,OAAe,QAAiB;AAClE,QAAM,MAAM,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AACA,MAAI,IAAI,IAAI;AACV,UAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/index.ts
2
+ var hello = "world";
3
+
4
+
5
+ exports.hello = hello;
6
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/abhinay/WebstormProjects/naystack/dist/index.cjs.js","../src/index.ts"],"names":[],"mappings":"AAAA;ACAO,IAAM,MAAA,EAAQ,OAAA;ADErB;AACE;AACF,sBAAC","file":"/Users/abhinay/WebstormProjects/naystack/dist/index.cjs.js","sourcesContent":[null,"export const hello = \"world\";\n"]}