subaya 1.0.1 → 1.0.3

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 (98) hide show
  1. package/dist/commands/axios/AxiosGeneratorCommand.d.ts.map +1 -1
  2. package/dist/commands/axios/AxiosGeneratorCommand.js +101 -17
  3. package/dist/commands/axios/AxiosGeneratorCommand.js.map +1 -1
  4. package/dist/commands/git/PushGeneratorCommand.d.ts +5 -0
  5. package/dist/commands/git/PushGeneratorCommand.d.ts.map +1 -0
  6. package/dist/commands/git/PushGeneratorCommand.js +51 -0
  7. package/dist/commands/git/PushGeneratorCommand.js.map +1 -0
  8. package/dist/commands/provider/ProviderGeneratorCommand.d.ts +2 -1
  9. package/dist/commands/provider/ProviderGeneratorCommand.d.ts.map +1 -1
  10. package/dist/commands/provider/ProviderGeneratorCommand.js.map +1 -1
  11. package/dist/commands/route/NextRouteGeneratorCommand.js +1 -1
  12. package/dist/commands/route/NextRouteGeneratorCommand.js.map +1 -1
  13. package/dist/commands/supabase/SupabaseCommand.d.ts +2 -1
  14. package/dist/commands/supabase/SupabaseCommand.d.ts.map +1 -1
  15. package/dist/commands/supabase/SupabaseCommand.js +97 -25
  16. package/dist/commands/supabase/SupabaseCommand.js.map +1 -1
  17. package/dist/core/EnsureSystem.d.ts +3 -0
  18. package/dist/core/EnsureSystem.d.ts.map +1 -1
  19. package/dist/core/EnsureSystem.js +16 -0
  20. package/dist/core/EnsureSystem.js.map +1 -1
  21. package/dist/core/FileSystemService.d.ts +1 -1
  22. package/dist/core/FileSystemService.d.ts.map +1 -1
  23. package/dist/core/FileSystemService.js +8 -0
  24. package/dist/core/FileSystemService.js.map +1 -1
  25. package/dist/template/axios/instance.d.ts +3 -1
  26. package/dist/template/axios/instance.d.ts.map +1 -1
  27. package/dist/template/axios/instance.js +204 -19
  28. package/dist/template/axios/instance.js.map +1 -1
  29. package/dist/template/axios/nextServerJwt.d.ts +4 -0
  30. package/dist/template/axios/nextServerJwt.d.ts.map +1 -0
  31. package/dist/template/axios/nextServerJwt.js +60 -0
  32. package/dist/template/axios/nextServerJwt.js.map +1 -0
  33. package/dist/template/axios/protectedProxy.d.ts +2 -0
  34. package/dist/template/axios/protectedProxy.d.ts.map +1 -0
  35. package/dist/template/axios/protectedProxy.js +40 -0
  36. package/dist/template/axios/protectedProxy.js.map +1 -0
  37. package/dist/template/axios/refresh.d.ts.map +1 -1
  38. package/dist/template/axios/refresh.js +46 -59
  39. package/dist/template/axios/refresh.js.map +1 -1
  40. package/dist/template/axios/useLoginHook.d.ts +2 -0
  41. package/dist/template/axios/useLoginHook.d.ts.map +1 -0
  42. package/dist/template/axios/useLoginHook.js +16 -0
  43. package/dist/template/axios/useLoginHook.js.map +1 -0
  44. package/dist/template/axios/useLogoutHook.d.ts +2 -0
  45. package/dist/template/axios/useLogoutHook.d.ts.map +1 -0
  46. package/dist/template/axios/useLogoutHook.js +15 -0
  47. package/dist/template/axios/useLogoutHook.js.map +1 -0
  48. package/dist/template/axios/utilJwt.d.ts +2 -0
  49. package/dist/template/axios/utilJwt.d.ts.map +1 -0
  50. package/dist/template/axios/utilJwt.js +52 -0
  51. package/dist/template/axios/utilJwt.js.map +1 -0
  52. package/dist/template/supabase/actions/auth.d.ts +2 -0
  53. package/dist/template/supabase/actions/auth.d.ts.map +1 -0
  54. package/dist/template/supabase/actions/auth.js +61 -0
  55. package/dist/template/supabase/actions/auth.js.map +1 -0
  56. package/dist/template/supabase/actions/crud.d.ts +3 -0
  57. package/dist/template/supabase/actions/crud.d.ts.map +1 -0
  58. package/dist/template/supabase/actions/crud.js +72 -0
  59. package/dist/template/supabase/actions/crud.js.map +1 -0
  60. package/dist/template/supabase/actions/user.d.ts +2 -0
  61. package/dist/template/supabase/actions/user.d.ts.map +1 -0
  62. package/dist/template/supabase/actions/user.js +36 -0
  63. package/dist/template/supabase/actions/user.js.map +1 -0
  64. package/dist/template/supabase/admin/supabaseAdminLayout.d.ts +2 -0
  65. package/dist/template/supabase/admin/supabaseAdminLayout.d.ts.map +1 -0
  66. package/dist/template/supabase/admin/supabaseAdminLayout.js +7 -0
  67. package/dist/template/supabase/admin/supabaseAdminLayout.js.map +1 -0
  68. package/dist/template/supabase/admin/supabaseAdminLoginLayout.d.ts +2 -0
  69. package/dist/template/supabase/admin/supabaseAdminLoginLayout.d.ts.map +1 -0
  70. package/dist/template/supabase/admin/supabaseAdminLoginLayout.js +114 -0
  71. package/dist/template/supabase/admin/supabaseAdminLoginLayout.js.map +1 -0
  72. package/dist/template/supabase/proxy/adminProxy.d.ts +2 -0
  73. package/dist/template/supabase/proxy/adminProxy.d.ts.map +1 -0
  74. package/dist/template/supabase/proxy/adminProxy.js +45 -0
  75. package/dist/template/supabase/proxy/adminProxy.js.map +1 -0
  76. package/dist/template/supabase/proxy/authAdminProxy.d.ts +2 -0
  77. package/dist/template/supabase/proxy/authAdminProxy.d.ts.map +1 -0
  78. package/dist/template/supabase/proxy/authAdminProxy.js +61 -0
  79. package/dist/template/supabase/proxy/authAdminProxy.js.map +1 -0
  80. package/dist/template/supabase/proxy/authProxy.d.ts +2 -0
  81. package/dist/template/supabase/proxy/authProxy.d.ts.map +1 -0
  82. package/dist/template/supabase/proxy/authProxy.js +49 -0
  83. package/dist/template/supabase/proxy/authProxy.js.map +1 -0
  84. package/dist/template/supabase/route/googleCallback.d.ts +2 -0
  85. package/dist/template/supabase/route/googleCallback.d.ts.map +1 -0
  86. package/dist/template/supabase/route/googleCallback.js +25 -0
  87. package/dist/template/supabase/route/googleCallback.js.map +1 -0
  88. package/dist/template/supabase/schemas/user.d.ts +2 -0
  89. package/dist/template/supabase/schemas/user.d.ts.map +1 -0
  90. package/dist/template/supabase/schemas/user.js +14 -0
  91. package/dist/template/supabase/schemas/user.js.map +1 -0
  92. package/dist/template/supabase/utilBase.d.ts +1 -1
  93. package/dist/template/supabase/utilBase.d.ts.map +1 -1
  94. package/dist/template/supabase/utilBase.js +2 -2
  95. package/dist/types/BaseExtensionCommands.d.ts +2 -1
  96. package/dist/types/BaseExtensionCommands.d.ts.map +1 -1
  97. package/dist/types/BaseExtensionCommands.js.map +1 -1
  98. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- type OutputPath = "configs" | "store" | "generated" | "hocs" | "utils" | "types" | "components" | "images" | "public" | "lib" | "services" | "actions" | "hooks";
1
+ type OutputPath = "configs" | "store" | "generated" | "hocs" | "utils" | "types" | "components" | "images" | "public" | "lib" | "services" | "actions" | "hooks" | "auth" | "api" | "schemas";
2
2
  export declare class FileSystemService {
3
3
  static pathExistsOrError(dirPath: string, fileName?: string): Promise<void>;
4
4
  static joinWithEnsureDir(...segments: string[]): string;
@@ -1 +1 @@
1
- {"version":3,"file":"FileSystemService.d.ts","sourceRoot":"","sources":["../../src/core/FileSystemService.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GACX,SAAS,GACT,OAAO,GACP,WAAW,GACX,MAAM,GACN,OAAO,GACP,OAAO,GACP,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,KAAK,GACL,UAAU,GACV,SAAS,GACT,OAAO,CAAA;AAEX,qBAAa,iBAAiB;WACf,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjF,MAAM,CAAC,iBAAiB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM;IAMvD,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;WAI9B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAI5D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAShF,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;WAyBnC,eAAe,CAAC,EAC3B,GAAG,EACH,IAAI,EACJ,OAAO,EACP,OAAO,EACP,YAAqB,EACrB,GAAU,EACV,QAAgB,GACjB,EAAE;QACD,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;QACxB,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,CAAA;QACnE,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,CAAA;QAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,GAAG,OAAO,CAAC,OAAO,CAAC;CA6CrB"}
1
+ {"version":3,"file":"FileSystemService.d.ts","sourceRoot":"","sources":["../../src/core/FileSystemService.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GACX,SAAS,GACT,OAAO,GACP,WAAW,GACX,MAAM,GACN,OAAO,GACP,OAAO,GACP,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,KAAK,GACL,UAAU,GACV,SAAS,GACT,OAAO,GACP,MAAM,GACN,KAAK,GACL,SAAS,CAAA;AAEb,qBAAa,iBAAiB;WACf,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjF,MAAM,CAAC,iBAAiB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM;IAMvD,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;WAI9B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAI5D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAShF,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;WAiCnC,eAAe,CAAC,EAC3B,GAAG,EACH,IAAI,EACJ,OAAO,EACP,OAAO,EACP,YAAqB,EACrB,GAAU,EACV,QAAgB,GACjB,EAAE;QACD,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;QACxB,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,CAAA;QACnE,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,CAAA;QAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,GAAG,OAAO,CAAC,OAAO,CAAC;CA6CrB"}
@@ -44,6 +44,14 @@ export class FileSystemService {
44
44
  throw new Error("⚠️ Public directory not found. Please create public directory.");
45
45
  }
46
46
  break;
47
+ case "auth":
48
+ target = path.join(CWD, "src", "app", "api", "auth");
49
+ fs.ensureDir(target);
50
+ break;
51
+ case "api":
52
+ target = path.join(CWD, "src", "app", "api");
53
+ fs.ensureDir(target);
54
+ break;
47
55
  default:
48
56
  target = path.join(CWD, "src", folder);
49
57
  fs.ensureDir(target);
@@ -1 +1 @@
1
- {"version":3,"file":"FileSystemService.js","sourceRoot":"","sources":["../../src/core/FileSystemService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileSystemService.js","sourceRoot":"","sources":["../../src/core/FileSystemService.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
- export declare const axiosInstance: (noRefresh: boolean) => string;
1
+ export declare const axiosInstanceWithLocalStorageRefreshToken = "import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\"\nimport qs from \"qs\"\n\nimport { ENV } from \"@/configs/env\"\nimport { apiLogger } from \"@/utils/logger/api-logger\"\nimport styledConsole from \"@/utils/logger/styled-console\"\nimport { tokenStorage } from \"@/store/local/index\"\nimport { refresh } from \"./refresh\"\n\nconst isDev = ENV.NODE_ENV === \"development\"\n\nexport class HttpClient {\n private instance: AxiosInstance\n\n constructor(config?: AxiosRequestConfig) {\n this.instance = axios.create({\n baseURL: ENV.API_BASE_URL,\n timeout: 5000,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n ...config,\n })\n this.setupInterceptors()\n }\n\n private setupInterceptors() {\n this.instance.interceptors.request.use(\n (config) => {\n const token = tokenStorage?.get()\n const isAccess = !!token && !!token.access\n if (isAccess) {\n config.headers.setAuthorization(`Bearer ${token.access}`);\n }\n return config\n },\n (error) => {\n return Promise.reject(error)\n },\n )\n\n this.instance.interceptors.response.use(\n (res) => {\n const { status, config: reqData, data: resData } = res\n if (isDev) apiLogger({ status, reqData, resData })\n return res\n },\n async (error: AxiosError) => {\n try {\n const { response: res, config: reqData } = error || {}\n const { status } = res || { status: 400 }\n const isUnAuthError = status === 401\n const isExpiredToken = status === 444\n\n if (isDev) apiLogger({ status, reqData, resData: error, method: \"error\" })\n\n if (isExpiredToken && reqData) {\n const refreshedConfig = await refresh(reqData)\n if (refreshedConfig) {\n return this.instance.request(refreshedConfig)\n }\n }\n\n if (isUnAuthError) {\n tokenStorage?.remove()\n }\n\n return Promise.reject(error)\n } catch (e) {\n styledConsole({\n method: \"error\",\n topic: \"UN_HANDLED\",\n title: \"axios-interceptor\",\n data: e,\n })\n return Promise.reject(e)\n }\n },\n )\n\n this.instance.defaults.paramsSerializer = (params) => {\n return qs.stringify(params, { arrayFormat: \"repeat\" })\n }\n }\n\n public getInstance(): AxiosInstance {\n return this.instance\n }\n}\n\nexport const instance = new HttpClient().getInstance()";
2
+ export declare const axiosInstanceWithNextServerJwt = "import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\"\nimport qs from \"qs\"\n\nimport { ENV } from \"@/configs/env\"\nimport { apiLogger } from \"@/utils/logger/api-logger\"\nimport styledConsole from \"@/utils/logger/styled-console\"\nimport { clearTokens } from \"@/utils/jwt\"\n\nconst isDev = ENV.NODE_ENV === \"development\"\n\nlet isRefreshing = false;\nlet refreshSubscribers: ((token: string) => void)[] = [];\n\nconst onRefreshed = (token: string) => {\n refreshSubscribers.forEach((callback) => callback(token));\n refreshSubscribers = [];\n};\n\nconst addRefreshSubscriber = (callback: (token: string) => void) => {\n refreshSubscribers.push(callback);\n};\n\nexport class HttpClient {\n private instance: AxiosInstance\n\n constructor(config?: AxiosRequestConfig) {\n this.instance = axios.create({\n baseURL: ENV.API_BASE_URL,\n timeout: 5000,\n withCredentials: true, \n headers: {\n \"Content-Type\": \"application/json\",\n },\n ...config,\n })\n this.setupInterceptors()\n }\n\n private setupInterceptors() {\n this.instance.interceptors.request.use(\n (config) => config,\n (error) => Promise.reject(error),\n )\n\n this.instance.interceptors.response.use(\n (res) => {\n const { status, config: reqData, data: resData } = res\n if (isDev) apiLogger({ status, reqData, resData })\n return res\n },\n async (error: AxiosError) => {\n const { response: res, config: reqData } = error\n const { status } = res || { status: 400 }\n const originalRequest = reqData as AxiosRequestConfig & { _retry?: boolean }\n const isBrowser = typeof window !== 'undefined'\n const isUnAuthError = status === 401\n const isExpiredToken = status === 444\n\n if (isExpiredToken && originalRequest && !originalRequest._retry && isBrowser) {\n originalRequest._retry = true;\n\n if (isRefreshing) {\n return new Promise((resolve) => {\n addRefreshSubscriber(() => {\n resolve(this.instance(originalRequest));\n });\n });\n }\n\n isRefreshing = true;\n\n try {\n await axios.post('/api/auth/refresh'); \n \n isRefreshing = false;\n onRefreshed('success');\n return this.instance(originalRequest);\n } catch (refreshError) {\n isRefreshing = false;\n refreshSubscribers = [];\n if (typeof window !== 'undefined') {\n window.location.href = '/login'; \n }\n return Promise.reject(refreshError);\n }\n }\n\n if (isUnAuthError) {\n await clearTokens();\n }\n\n styledConsole({\n method: \"error\",\n topic: \"UN_HANDLED\",\n title: \"axios-interceptor\",\n data: error,\n })\n return Promise.reject(error)\n },\n )\n\n this.instance.defaults.paramsSerializer = (params) => {\n return qs.stringify(params, { arrayFormat: \"repeat\" })\n }\n }\n\n public getInstance(): AxiosInstance {\n return this.instance\n }\n}\n\nexport const instance = new HttpClient().getInstance()";
3
+ export declare const axiosInstance = "import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\"\nimport qs from \"qs\"\n\nimport { ENV } from \"@/configs/env\"\nimport { apiLogger } from \"@/utils/logger/api-logger\"\nimport styledConsole from \"@/utils/logger/styled-console\"\n\nconst isDev = ENV.NODE_ENV === \"development\"\n\nexport class HttpClient {\n private instance: AxiosInstance\n\n constructor(config?: AxiosRequestConfig) {\n this.instance = axios.create({\n baseURL: ENV.API_BASE_URL,\n timeout: 5000,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n ...config,\n })\n this.setupInterceptors()\n }\n\n private setupInterceptors() {\n this.instance.interceptors.request.use(\n (config) => {\n return config\n },\n (error) => {\n return Promise.reject(error)\n },\n )\n\n this.instance.interceptors.response.use(\n (res) => {\n const { status, config: reqData, data: resData } = res\n if (isDev) apiLogger({ status, reqData, resData })\n return res\n },\n async (error: AxiosError) => {\n try {\n const { response: res, config: reqData } = error || {}\n const { status } = res || { status: 400 }\n\n if (isDev) apiLogger({ status, reqData, resData: error, method: \"error\" })\n\n return Promise.reject(error)\n } catch (e) {\n styledConsole({\n method: \"error\",\n topic: \"UN_HANDLED\",\n title: \"axios-interceptor\",\n data: e,\n })\n return Promise.reject(e)\n }\n },\n )\n\n this.instance.defaults.paramsSerializer = (params) => {\n return qs.stringify(params, { arrayFormat: \"repeat\" })\n }\n }\n\n public getInstance(): AxiosInstance {\n return this.instance\n }\n}\n\nexport const instance = new HttpClient().getInstance()\n";
2
4
  //# sourceMappingURL=instance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../../src/template/axios/instance.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GACxB,WAAW,OAAO,WA0FmC,CAAA"}
1
+ {"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../../src/template/axios/instance.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yCAAyC,skFA0FC,CAAA;AAEvD,eAAO,MAAM,8BAA8B,8uGA+GY,CAAA;AAEvD,eAAO,MAAM,aAAa,u4DAuEzB,CAAA"}
@@ -1,11 +1,12 @@
1
- export const axiosInstance = (noRefresh) => `import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from "axios"
1
+ export const axiosInstanceWithLocalStorageRefreshToken = `import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from "axios"
2
2
  import qs from "qs"
3
3
 
4
4
  import { ENV } from "@/configs/env"
5
5
  import { apiLogger } from "@/utils/logger/api-logger"
6
6
  import styledConsole from "@/utils/logger/styled-console"
7
- ${!noRefresh ? `import { tokenStorage } from "@/store/local/index"` : ""}
8
- ${!noRefresh ? `import { refresh } from "./refresh"\n` : ""}
7
+ import { tokenStorage } from "@/store/local/index"
8
+ import { refresh } from "./refresh"
9
+
9
10
  const isDev = ENV.NODE_ENV === "development"
10
11
 
11
12
  export class HttpClient {
@@ -26,11 +27,11 @@ export class HttpClient {
26
27
  private setupInterceptors() {
27
28
  this.instance.interceptors.request.use(
28
29
  (config) => {
29
- ${noRefresh ? "// " : ""}const token = tokenStorage?.get()
30
- ${noRefresh ? "// " : ""}const isAccess = !!token && !!token.access
31
- ${noRefresh ? "// " : ""}if (isAccess) {
32
- ${noRefresh ? "// " : ""} config.headers.setAuthorization(\`Bearer \${token.access}\`)
33
- ${noRefresh ? "// " : ""}}
30
+ const token = tokenStorage?.get()
31
+ const isAccess = !!token && !!token.access
32
+ if (isAccess) {
33
+ config.headers.setAuthorization(\`Bearer \${token.access}\`);
34
+ }
34
35
  return config
35
36
  },
36
37
  (error) => {
@@ -48,21 +49,21 @@ export class HttpClient {
48
49
  try {
49
50
  const { response: res, config: reqData } = error || {}
50
51
  const { status } = res || { status: 400 }
51
- ${noRefresh ? "// " : ""}const isUnAuthError = status === 401
52
- ${noRefresh ? "// " : ""}const isExpiredToken = status === 444
52
+ const isUnAuthError = status === 401
53
+ const isExpiredToken = status === 444
53
54
 
54
55
  if (isDev) apiLogger({ status, reqData, resData: error, method: "error" })
55
56
 
56
- ${noRefresh ? "// " : ""}if (isExpiredToken && reqData) {
57
- ${noRefresh ? "// " : ""} const refreshedConfig = await refresh(reqData)
58
- ${noRefresh ? "// " : ""} if (refreshedConfig) {
59
- ${noRefresh ? "// " : ""} return this.instance.request(refreshedConfig)
60
- ${noRefresh ? "// " : ""} }
61
- ${noRefresh ? "// " : ""}}
57
+ if (isExpiredToken && reqData) {
58
+ const refreshedConfig = await refresh(reqData)
59
+ if (refreshedConfig) {
60
+ return this.instance.request(refreshedConfig)
61
+ }
62
+ }
62
63
 
63
- ${noRefresh ? "// " : ""}if (isUnAuthError) {
64
- ${noRefresh ? "// " : ""} tokenStorage?.remove()
65
- ${noRefresh ? "// " : ""}}
64
+ if (isUnAuthError) {
65
+ tokenStorage?.remove()
66
+ }
66
67
 
67
68
  return Promise.reject(error)
68
69
  } catch (e) {
@@ -88,4 +89,188 @@ export class HttpClient {
88
89
  }
89
90
 
90
91
  export const instance = new HttpClient().getInstance()`;
92
+ export const axiosInstanceWithNextServerJwt = `import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from "axios"
93
+ import qs from "qs"
94
+
95
+ import { ENV } from "@/configs/env"
96
+ import { apiLogger } from "@/utils/logger/api-logger"
97
+ import styledConsole from "@/utils/logger/styled-console"
98
+ import { clearTokens } from "@/utils/jwt"
99
+
100
+ const isDev = ENV.NODE_ENV === "development"
101
+
102
+ let isRefreshing = false;
103
+ let refreshSubscribers: ((token: string) => void)[] = [];
104
+
105
+ const onRefreshed = (token: string) => {
106
+ refreshSubscribers.forEach((callback) => callback(token));
107
+ refreshSubscribers = [];
108
+ };
109
+
110
+ const addRefreshSubscriber = (callback: (token: string) => void) => {
111
+ refreshSubscribers.push(callback);
112
+ };
113
+
114
+ export class HttpClient {
115
+ private instance: AxiosInstance
116
+
117
+ constructor(config?: AxiosRequestConfig) {
118
+ this.instance = axios.create({
119
+ baseURL: ENV.API_BASE_URL,
120
+ timeout: 5000,
121
+ withCredentials: true,
122
+ headers: {
123
+ "Content-Type": "application/json",
124
+ },
125
+ ...config,
126
+ })
127
+ this.setupInterceptors()
128
+ }
129
+
130
+ private setupInterceptors() {
131
+ this.instance.interceptors.request.use(
132
+ (config) => config,
133
+ (error) => Promise.reject(error),
134
+ )
135
+
136
+ this.instance.interceptors.response.use(
137
+ (res) => {
138
+ const { status, config: reqData, data: resData } = res
139
+ if (isDev) apiLogger({ status, reqData, resData })
140
+ return res
141
+ },
142
+ async (error: AxiosError) => {
143
+ const { response: res, config: reqData } = error
144
+ const { status } = res || { status: 400 }
145
+ const originalRequest = reqData as AxiosRequestConfig & { _retry?: boolean }
146
+ const isBrowser = typeof window !== 'undefined'
147
+ const isUnAuthError = status === 401
148
+ const isExpiredToken = status === 444
149
+
150
+ if (isExpiredToken && originalRequest && !originalRequest._retry && isBrowser) {
151
+ originalRequest._retry = true;
152
+
153
+ if (isRefreshing) {
154
+ return new Promise((resolve) => {
155
+ addRefreshSubscriber(() => {
156
+ resolve(this.instance(originalRequest));
157
+ });
158
+ });
159
+ }
160
+
161
+ isRefreshing = true;
162
+
163
+ try {
164
+ await axios.post('/api/auth/refresh');
165
+
166
+ isRefreshing = false;
167
+ onRefreshed('success');
168
+ return this.instance(originalRequest);
169
+ } catch (refreshError) {
170
+ isRefreshing = false;
171
+ refreshSubscribers = [];
172
+ if (typeof window !== 'undefined') {
173
+ window.location.href = '/login';
174
+ }
175
+ return Promise.reject(refreshError);
176
+ }
177
+ }
178
+
179
+ if (isUnAuthError) {
180
+ await clearTokens();
181
+ }
182
+
183
+ styledConsole({
184
+ method: "error",
185
+ topic: "UN_HANDLED",
186
+ title: "axios-interceptor",
187
+ data: error,
188
+ })
189
+ return Promise.reject(error)
190
+ },
191
+ )
192
+
193
+ this.instance.defaults.paramsSerializer = (params) => {
194
+ return qs.stringify(params, { arrayFormat: "repeat" })
195
+ }
196
+ }
197
+
198
+ public getInstance(): AxiosInstance {
199
+ return this.instance
200
+ }
201
+ }
202
+
203
+ export const instance = new HttpClient().getInstance()`;
204
+ export const axiosInstance = `import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from "axios"
205
+ import qs from "qs"
206
+
207
+ import { ENV } from "@/configs/env"
208
+ import { apiLogger } from "@/utils/logger/api-logger"
209
+ import styledConsole from "@/utils/logger/styled-console"
210
+
211
+ const isDev = ENV.NODE_ENV === "development"
212
+
213
+ export class HttpClient {
214
+ private instance: AxiosInstance
215
+
216
+ constructor(config?: AxiosRequestConfig) {
217
+ this.instance = axios.create({
218
+ baseURL: ENV.API_BASE_URL,
219
+ timeout: 5000,
220
+ headers: {
221
+ "Content-Type": "application/json",
222
+ },
223
+ ...config,
224
+ })
225
+ this.setupInterceptors()
226
+ }
227
+
228
+ private setupInterceptors() {
229
+ this.instance.interceptors.request.use(
230
+ (config) => {
231
+ return config
232
+ },
233
+ (error) => {
234
+ return Promise.reject(error)
235
+ },
236
+ )
237
+
238
+ this.instance.interceptors.response.use(
239
+ (res) => {
240
+ const { status, config: reqData, data: resData } = res
241
+ if (isDev) apiLogger({ status, reqData, resData })
242
+ return res
243
+ },
244
+ async (error: AxiosError) => {
245
+ try {
246
+ const { response: res, config: reqData } = error || {}
247
+ const { status } = res || { status: 400 }
248
+
249
+ if (isDev) apiLogger({ status, reqData, resData: error, method: "error" })
250
+
251
+ return Promise.reject(error)
252
+ } catch (e) {
253
+ styledConsole({
254
+ method: "error",
255
+ topic: "UN_HANDLED",
256
+ title: "axios-interceptor",
257
+ data: e,
258
+ })
259
+ return Promise.reject(e)
260
+ }
261
+ },
262
+ )
263
+
264
+ this.instance.defaults.paramsSerializer = (params) => {
265
+ return qs.stringify(params, { arrayFormat: "repeat" })
266
+ }
267
+ }
268
+
269
+ public getInstance(): AxiosInstance {
270
+ return this.instance
271
+ }
272
+ }
273
+
274
+ export const instance = new HttpClient().getInstance()
275
+ `;
91
276
  //# sourceMappingURL=instance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"instance.js","sourceRoot":"","sources":["../../../src/template/axios/instance.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,SAAkB,EAClB,EAAE,CAAC;;;;;;EAMH,CAAC,SAAS,CAAC,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAAC,EAAE;EACtE,CAAC,SAAS,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;UAqBjD,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;YAkBpB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;YAItB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;YAEtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;uDAyBqB,CAAA"}
1
+ {"version":3,"file":"instance.js","sourceRoot":"","sources":["../../../src/template/axios/instance.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yCAAyC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDA0FF,CAAA;AAEvD,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDA+GS,CAAA;AAEvD,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuE5B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const nextServerAuthLoginRoute: () => string;
2
+ export declare const nextServerAuthRefreshRoute: () => string;
3
+ export declare const nextServerAuthLogoutRoute: () => string;
4
+ //# sourceMappingURL=nextServerJwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextServerJwt.d.ts","sourceRoot":"","sources":["../../../src/template/axios/nextServerJwt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,cAuBpC,CAAA;AAED,eAAO,MAAM,0BAA0B,cA0BtC,CAAA;AAED,eAAO,MAAM,yBAAyB,cAOrC,CAAA"}
@@ -0,0 +1,60 @@
1
+ export const nextServerAuthLoginRoute = () => `import { instance } from "@/configs/axios/instance"
2
+ import { AUTH_ENDPOINTS, setTokens } from "@/utils/jwt"
3
+ import { NextResponse } from "next/server"
4
+
5
+ export async function POST(request: Request) {
6
+ try {
7
+ const body = await request.json()
8
+
9
+ const response = await instance.post(AUTH_ENDPOINTS.LOGIN, body)
10
+
11
+ const { accessToken, refreshToken, ...userData } = response.data
12
+
13
+ await setTokens(accessToken, refreshToken)
14
+
15
+ return NextResponse.json({ success: true, user: userData })
16
+
17
+ } catch (error: any) {
18
+ const status = error.response?.status || 500
19
+ const errorData = error.response?.data || { message: 'Login failed' }
20
+
21
+ return NextResponse.json(errorData, { status })
22
+ }
23
+ }
24
+ `;
25
+ export const nextServerAuthRefreshRoute = () => `import { instance } from "@/configs/axios/instance"
26
+ import { AUTH_ENDPOINTS, getTokens, setTokens, clearTokens } from "@/utils/jwt"
27
+ import { NextResponse } from "next/server"
28
+
29
+ export async function POST() {
30
+ const { refreshToken } = await getTokens()
31
+
32
+ if (!refreshToken) {
33
+ return NextResponse.json({ message: 'No refresh token' }, { status: 401 })
34
+ }
35
+
36
+ try {
37
+ const response = await instance.post(AUTH_ENDPOINTS.REFRESH, {
38
+ refresh: refreshToken
39
+ })
40
+
41
+ const { accessToken, refreshToken: newRefreshToken } = response.data
42
+
43
+ await setTokens(accessToken, newRefreshToken)
44
+
45
+ return NextResponse.json({ success: true })
46
+ } catch {
47
+ await clearTokens()
48
+ return NextResponse.json({ message: 'Refresh failed' }, { status: 401 })
49
+ }
50
+ }
51
+ `;
52
+ export const nextServerAuthLogoutRoute = () => `import { NextResponse } from 'next/server'
53
+ import { clearTokens } from '@/utils/jwt'
54
+
55
+ export async function POST() {
56
+ await clearTokens()
57
+ return NextResponse.json({ success: true })
58
+ }
59
+ `;
60
+ //# sourceMappingURL=nextServerJwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextServerJwt.js","sourceRoot":"","sources":["../../../src/template/axios/nextServerJwt.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuB7C,CAAA;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B/C,CAAA;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC;;;;;;;CAO9C,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const protectedProxy: () => string;
2
+ //# sourceMappingURL=protectedProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protectedProxy.d.ts","sourceRoot":"","sources":["../../../src/template/axios/protectedProxy.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,cAsC1B,CAAA"}
@@ -0,0 +1,40 @@
1
+ export const protectedProxy = () => `import { NextResponse } from 'next/server';
2
+ import type { NextRequest } from 'next/server';
3
+ import { TOKEN_KEYS } from '@/utils/jwt';
4
+ import { PROTECTED_ROUTES, ROUTES } from '@/generated/path/routes';
5
+
6
+ export function proxy(request: NextRequest) {
7
+ const { pathname } = request.nextUrl;
8
+
9
+ const isProtectedRoute = PROTECTED_ROUTES.some((route) =>
10
+ pathname.startsWith(route)
11
+ );
12
+
13
+ if (isProtectedRoute) {
14
+ const hasAccessToken = request.cookies.has(TOKEN_KEYS.ACCESS);
15
+ const hasRefreshToken = request.cookies.has(TOKEN_KEYS.REFRESH);
16
+
17
+ if (!hasAccessToken && !hasRefreshToken) {
18
+ const loginUrl = new URL(ROUTES.LOGIN, request.url);
19
+ loginUrl.searchParams.set('redirect', pathname);
20
+ return NextResponse.redirect(loginUrl);
21
+ }
22
+ }
23
+
24
+ if (pathname === ROUTES.LOGIN) {
25
+ const hasRefreshToken = request.cookies.has(TOKEN_KEYS.REFRESH);
26
+ if (hasRefreshToken) {
27
+ return NextResponse.redirect(new URL(ROUTES.HOME, request.url));
28
+ }
29
+ }
30
+
31
+ return NextResponse.next();
32
+ }
33
+
34
+ export const config = {
35
+ matcher: [
36
+ '/((?!api|_next/static|_next/image|favicon.ico).*)',
37
+ ],
38
+ };
39
+ `;
40
+ //# sourceMappingURL=protectedProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protectedProxy.js","sourceRoot":"","sources":["../../../src/template/axios/protectedProxy.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCnC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,cA+EvB,CAAA"}
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,cAkExB,CAAA"}
@@ -1,81 +1,68 @@
1
- export const axiosRefresh = () => `import { ENV } from "@/configs/env"
2
- import { tokenStorage } from "@/store/local/index"
3
- import { TokenType } from "@/types/localStorageType"
4
- import axios, { InternalAxiosRequestConfig } from "axios"
1
+ export const axiosRefresh = () => `import type { AxiosRequestConfig } from 'axios'
2
+ import axios from 'axios'
5
3
 
6
- type RefreshSubscriber = (access: string | null) => void
4
+ import { ENV } from '@/configs/env'
5
+ import { tokenStorage } from '@/store/local'
6
+ import type { TokenType } from '@/types/localStorageType'
7
+
8
+ import { instance } from './instance'
9
+
10
+ type Request = (access: string) => void
7
11
 
8
12
  let isTokenRefreshing = false
9
- let refreshSubscribers: RefreshSubscriber[] = []
13
+ let refreshSubscribers: Request[] = []
10
14
 
11
15
  const onTokenRefreshed = (access: string) => {
12
- refreshSubscribers.forEach((callback) => callback(access))
13
- refreshSubscribers = []
16
+ refreshSubscribers.forEach((callback: Request) => callback(access))
14
17
  }
15
18
 
16
- const onTokenRefreshFailed = () => {
17
- refreshSubscribers.forEach((callback) => callback(null))
18
- refreshSubscribers = []
19
+ const addRefreshSubscriber = (callback: Request) => {
20
+ refreshSubscribers.push(callback)
19
21
  }
20
22
 
21
- const refreshToken = async (): Promise<TokenType> => {
23
+ const refreshToken = async () => {
22
24
  try {
23
- const token = tokenStorage?.get()
24
- if (!token?.refresh) {
25
- throw new Error("Refresh token not found")
26
- }
27
-
28
- const { data: newToken } = await axios.post<TokenType>(\`\${ENV.API_BASE_URL}/v1/user/refresh/\`, {
29
- refresh: token.refresh,
30
- })
31
-
32
- const updatedToken = { ...token, ...newToken }
33
- tokenStorage?.set(updatedToken)
34
-
25
+ const token = tokenStorage.get()
26
+ if (!token.refresh) throw new Error('not found refresh-token')
27
+ const { data: newToken }: { data: TokenType } = await axios.post(
28
+ \`\${ENV.API_BASE_URL}/v1/user/refresh/\`,
29
+ { refresh: token.refresh },
30
+ )
31
+ tokenStorage.set({ ...token, ...newToken })
35
32
  return newToken
36
33
  } catch (err) {
37
- tokenStorage?.remove()
38
-
39
- if (typeof window !== "undefined") {
40
- window.location.href = "/login"
41
- }
34
+ tokenStorage.remove()
42
35
  throw err
43
36
  }
44
37
  }
45
38
 
46
- export const refresh = async (
47
- originalRequest?: InternalAxiosRequestConfig,
48
- ): Promise<InternalAxiosRequestConfig | null> => {
49
- if (!originalRequest) {
50
- return null
51
- }
52
-
53
- return new Promise((resolve, reject) => {
54
- refreshSubscribers.push((access: string | null) => {
55
- if (access) {
56
- if (originalRequest.headers) {
57
- originalRequest.headers.set("Authorization", \`Bearer \${access}\`)
58
- }
59
- resolve(originalRequest)
60
- } else {
61
- reject(new Error("Refresh token failed and cleared"))
39
+ export const refresh = async (reqData?: AxiosRequestConfig) => {
40
+ const retriedOriginalRequest = new Promise((resolve) => {
41
+ addRefreshSubscriber((access: string) => {
42
+ if (reqData?.headers) {
43
+ reqData.headers.Authorization = 'Bearer ' + access
44
+ resolve(instance(reqData))
45
+ return
62
46
  }
47
+ resolve(null)
63
48
  })
49
+ })
64
50
 
65
- if (!isTokenRefreshing) {
51
+ if (!isTokenRefreshing) {
52
+ try {
66
53
  isTokenRefreshing = true
67
-
68
- refreshToken()
69
- .then((token) => {
70
- onTokenRefreshed(token.access)
71
- })
72
- .catch(() => {
73
- onTokenRefreshFailed()
74
- })
75
- .finally(() => {
76
- isTokenRefreshing = false
77
- })
54
+ const token = await refreshToken()
55
+ onTokenRefreshed(token.access)
56
+ refreshSubscribers = []
57
+ } catch (error) {
58
+ console.log(error)
59
+ throw error
60
+ } finally {
61
+ isTokenRefreshing = false
78
62
  }
79
- })
80
- }`;
63
+ }
64
+
65
+ return retriedOriginalRequest
66
+ }
67
+ `;
81
68
  //# sourceMappingURL=refresh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+EhC,CAAA"}
1
+ {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEjC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const useLoginHook: () => string;
2
+ //# sourceMappingURL=useLoginHook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoginHook.d.ts","sourceRoot":"","sources":["../../../src/template/axios/useLoginHook.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,cAexB,CAAA"}
@@ -0,0 +1,16 @@
1
+ export const useLoginHook = () => `import { CommonErrorType, UserLoginRequestType, UserLoginType } from "@/generated/api/@types/data-contracts"
2
+ import { useMutation } from "@tanstack/react-query"
3
+ import axios, { AxiosError } from "axios"
4
+
5
+ export const useLoginMutation = () => {
6
+ // TODO: Change to the actual login type from the API
7
+ return useMutation<UserLoginType, AxiosError<CommonErrorType>, UserLoginRequestType>({
8
+ mutationKey: ["AUTH_JWT_LOGIN_CREATE"],
9
+ mutationFn: async (data) => {
10
+ const res = await axios.post("/api/auth/login", data)
11
+ return res.data
12
+ },
13
+ })
14
+ }
15
+ `;
16
+ //# sourceMappingURL=useLoginHook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoginHook.js","sourceRoot":"","sources":["../../../src/template/axios/useLoginHook.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GACvB,GAAG,EAAE,CAAC;;;;;;;;;;;;;;CAcP,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const useLogoutHook: () => string;
2
+ //# sourceMappingURL=useLogoutHook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLogoutHook.d.ts","sourceRoot":"","sources":["../../../src/template/axios/useLogoutHook.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,cAazB,CAAA"}