@greatapps/common 1.1.659 → 1.1.660
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.
- package/dist/handlers.mjs +33 -0
- package/dist/handlers.mjs.map +1 -0
- package/dist/http.mjs +5 -0
- package/dist/http.mjs.map +1 -0
- package/dist/infra/http/api-fetch.mjs +30 -0
- package/dist/infra/http/api-fetch.mjs.map +1 -0
- package/dist/infra/route/parse-id.mjs +12 -0
- package/dist/infra/route/parse-id.mjs.map +1 -0
- package/dist/infra/route/safe-route-handler.mjs +18 -0
- package/dist/infra/route/safe-route-handler.mjs.map +1 -0
- package/dist/infra/route/search-params.mjs +11 -0
- package/dist/infra/route/search-params.mjs.map +1 -0
- package/dist/modules/cards/handlers/find-card-by-id.handler.mjs +16 -0
- package/dist/modules/cards/handlers/find-card-by-id.handler.mjs.map +1 -0
- package/dist/modules/cards/handlers/list-cards.handler.mjs +12 -0
- package/dist/modules/cards/handlers/list-cards.handler.mjs.map +1 -0
- package/dist/modules/cards/hooks/card-by-id.hook.mjs +2 -5
- package/dist/modules/cards/hooks/card-by-id.hook.mjs.map +1 -1
- package/dist/modules/cards/hooks/cards.hook.mjs +2 -5
- package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
- package/dist/modules/charges/handlers/find-charge-by-id.handler.mjs +15 -0
- package/dist/modules/charges/handlers/find-charge-by-id.handler.mjs.map +1 -0
- package/dist/modules/charges/handlers/list-charges.handler.mjs +15 -0
- package/dist/modules/charges/handlers/list-charges.handler.mjs.map +1 -0
- package/dist/modules/charges/hooks/charge-by-id.hook.mjs +2 -3
- package/dist/modules/charges/hooks/charge-by-id.hook.mjs.map +1 -1
- package/dist/modules/charges/hooks/charges.hook.mjs +2 -3
- package/dist/modules/charges/hooks/charges.hook.mjs.map +1 -1
- package/dist/modules/ia-credits/handlers/list-ia-credits.handler.mjs +15 -0
- package/dist/modules/ia-credits/handlers/list-ia-credits.handler.mjs.map +1 -0
- package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs +5 -3
- package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -1
- package/dist/modules/pages/handlers/count-pages.handler.mjs +14 -0
- package/dist/modules/pages/handlers/count-pages.handler.mjs.map +1 -0
- package/dist/modules/pages/hooks/count-pages.hook.mjs +3 -4
- package/dist/modules/pages/hooks/count-pages.hook.mjs.map +1 -1
- package/dist/modules/plans/handlers/find-plan-by-id.handler.mjs +15 -0
- package/dist/modules/plans/handlers/find-plan-by-id.handler.mjs.map +1 -0
- package/dist/modules/plans/handlers/list-plans.handler.mjs +20 -0
- package/dist/modules/plans/handlers/list-plans.handler.mjs.map +1 -0
- package/dist/modules/plans/hooks/list-plans.hook.mjs +2 -3
- package/dist/modules/plans/hooks/list-plans.hook.mjs.map +1 -1
- package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs +2 -3
- package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
- package/dist/modules/projects/handlers/find-project.handler.mjs +16 -0
- package/dist/modules/projects/handlers/find-project.handler.mjs.map +1 -0
- package/dist/modules/projects/handlers/list-all-account-users.handler.mjs +17 -0
- package/dist/modules/projects/handlers/list-all-account-users.handler.mjs.map +1 -0
- package/dist/modules/projects/handlers/list-available-users.handler.mjs +20 -0
- package/dist/modules/projects/handlers/list-available-users.handler.mjs.map +1 -0
- package/dist/modules/projects/handlers/list-project-users.handler.mjs +20 -0
- package/dist/modules/projects/handlers/list-project-users.handler.mjs.map +1 -0
- package/dist/modules/projects/handlers/list-projects.handler.mjs +17 -0
- package/dist/modules/projects/handlers/list-projects.handler.mjs.map +1 -0
- package/dist/modules/projects/hooks/find-project.hook.mjs +2 -3
- package/dist/modules/projects/hooks/find-project.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-all-account-users.hook.mjs +6 -6
- package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-available-users.hook.mjs +6 -6
- package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs +6 -6
- package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-project-users.hook.mjs +6 -6
- package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-projects.hook.mjs +2 -3
- package/dist/modules/projects/hooks/list-projects.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/handlers/list-subscriptions.handler.mjs +17 -0
- package/dist/modules/subscriptions/handlers/list-subscriptions.handler.mjs.map +1 -0
- package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs +5 -5
- package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs +5 -3
- package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
- package/dist/modules/users/handlers/list-messages.handler.mjs +36 -0
- package/dist/modules/users/handlers/list-messages.handler.mjs.map +1 -0
- package/dist/modules/users/hooks/messages.hook.mjs +7 -6
- package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
- package/dist/route.mjs +9 -0
- package/dist/route.mjs.map +1 -0
- package/package.json +14 -1
- package/src/handlers.ts +22 -0
- package/src/http.ts +1 -0
- package/src/infra/http/api-fetch.ts +39 -0
- package/src/infra/route/parse-id.ts +9 -0
- package/src/infra/route/safe-route-handler.ts +16 -0
- package/src/infra/route/search-params.ts +9 -0
- package/src/modules/cards/handlers/find-card-by-id.handler.ts +15 -0
- package/src/modules/cards/handlers/list-cards.handler.ts +10 -0
- package/src/modules/cards/hooks/card-by-id.hook.ts +4 -5
- package/src/modules/cards/hooks/cards.hook.ts +4 -5
- package/src/modules/charges/handlers/find-charge-by-id.handler.ts +14 -0
- package/src/modules/charges/handlers/list-charges.handler.ts +15 -0
- package/src/modules/charges/hooks/charge-by-id.hook.ts +5 -3
- package/src/modules/charges/hooks/charges.hook.ts +5 -4
- package/src/modules/ia-credits/handlers/list-ia-credits.handler.ts +14 -0
- package/src/modules/ia-credits/hooks/ia-credits.hook.ts +7 -3
- package/src/modules/pages/handlers/count-pages.handler.ts +12 -0
- package/src/modules/pages/hooks/count-pages.hook.ts +3 -4
- package/src/modules/plans/handlers/find-plan-by-id.handler.ts +14 -0
- package/src/modules/plans/handlers/list-plans.handler.ts +20 -0
- package/src/modules/plans/hooks/list-plans.hook.ts +2 -3
- package/src/modules/plans/hooks/use-plan-by-id.hook.ts +4 -3
- package/src/modules/projects/handlers/find-project.handler.ts +15 -0
- package/src/modules/projects/handlers/list-all-account-users.handler.ts +17 -0
- package/src/modules/projects/handlers/list-available-users.handler.ts +20 -0
- package/src/modules/projects/handlers/list-project-users.handler.ts +20 -0
- package/src/modules/projects/handlers/list-projects.handler.ts +17 -0
- package/src/modules/projects/hooks/find-project.hook.ts +3 -3
- package/src/modules/projects/hooks/list-all-account-users.hook.ts +8 -7
- package/src/modules/projects/hooks/list-available-users.hook.ts +8 -7
- package/src/modules/projects/hooks/list-infinite-projects.hook.ts +8 -7
- package/src/modules/projects/hooks/list-project-users.hook.ts +8 -7
- package/src/modules/projects/hooks/list-projects.hook.ts +3 -3
- package/src/modules/subscriptions/handlers/list-subscriptions.handler.ts +17 -0
- package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +8 -5
- package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +8 -5
- package/src/modules/users/handlers/list-messages.handler.ts +39 -0
- package/src/modules/users/hooks/messages.hook.ts +10 -8
- package/src/route.ts +3 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/handlers/find-project.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { parseId } from '../../../infra/route/parse-id';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { projectsService } from '../services/projects.service';\n\nexport function createFindProjectHandler() {\n return async function GET(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {\n return safeRouteHandler(async () => {\n const { id } = await params;\n return projectsService.findById(parseId(id));\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,eAAe;AACxB,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAEzB,SAAS,2BAA2B;AACzC,SAAO,eAAe,IAAI,MAAmB,EAAE,OAAO,GAAwC;AAC5F,WAAO,iBAAiB,YAAY;AAClC,YAAM,EAAE,GAAG,IAAI,MAAM;AACrB,aAAO,gBAAgB,SAAS,QAAQ,EAAE,CAAC;AAAA,IAC7C,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { searchParamsToParams } from "../../../infra/route/search-params";
|
|
4
|
+
import { projectUsersService } from "../services/project-users.service";
|
|
5
|
+
function createListAllAccountUsersHandler() {
|
|
6
|
+
return async function GET(req) {
|
|
7
|
+
return safeRouteHandler(
|
|
8
|
+
() => projectUsersService.listAllAccountUsers(
|
|
9
|
+
searchParamsToParams(req.nextUrl.searchParams)
|
|
10
|
+
)
|
|
11
|
+
);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
createListAllAccountUsersHandler
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=list-all-account-users.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/handlers/list-all-account-users.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { searchParamsToParams } from '../../../infra/route/search-params';\nimport { projectUsersService } from '../services/project-users.service';\nimport type { ListUsersParams } from '../types';\n\nexport function createListAllAccountUsersHandler() {\n return async function GET(req: NextRequest) {\n return safeRouteHandler(() =>\n projectUsersService.listAllAccountUsers(\n searchParamsToParams<ListUsersParams>(req.nextUrl.searchParams)\n )\n );\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AAG7B,SAAS,mCAAmC;AACjD,SAAO,eAAe,IAAI,KAAkB;AAC1C,WAAO;AAAA,MAAiB,MACtB,oBAAoB;AAAA,QAClB,qBAAsC,IAAI,QAAQ,YAAY;AAAA,MAChE;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { parseId } from "../../../infra/route/parse-id";
|
|
3
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
4
|
+
import { searchParamsToParams } from "../../../infra/route/search-params";
|
|
5
|
+
import { projectUsersService } from "../services/project-users.service";
|
|
6
|
+
function createListAvailableUsersHandler() {
|
|
7
|
+
return async function GET(req, { params }) {
|
|
8
|
+
return safeRouteHandler(async () => {
|
|
9
|
+
const { id } = await params;
|
|
10
|
+
return projectUsersService.listNotInProject(
|
|
11
|
+
parseId(id),
|
|
12
|
+
searchParamsToParams(req.nextUrl.searchParams)
|
|
13
|
+
);
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
createListAvailableUsersHandler
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=list-available-users.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/handlers/list-available-users.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { parseId } from '../../../infra/route/parse-id';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { searchParamsToParams } from '../../../infra/route/search-params';\nimport { projectUsersService } from '../services/project-users.service';\nimport type { ListUsersParams } from '../types';\n\nexport function createListAvailableUsersHandler() {\n return async function GET(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {\n return safeRouteHandler(async () => {\n const { id } = await params;\n return projectUsersService.listNotInProject(\n parseId(id),\n searchParamsToParams<ListUsersParams>(req.nextUrl.searchParams)\n );\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,eAAe;AACxB,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AAG7B,SAAS,kCAAkC;AAChD,SAAO,eAAe,IAAI,KAAkB,EAAE,OAAO,GAAwC;AAC3F,WAAO,iBAAiB,YAAY;AAClC,YAAM,EAAE,GAAG,IAAI,MAAM;AACrB,aAAO,oBAAoB;AAAA,QACzB,QAAQ,EAAE;AAAA,QACV,qBAAsC,IAAI,QAAQ,YAAY;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { parseId } from "../../../infra/route/parse-id";
|
|
3
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
4
|
+
import { searchParamsToParams } from "../../../infra/route/search-params";
|
|
5
|
+
import { projectUsersService } from "../services/project-users.service";
|
|
6
|
+
function createListProjectUsersHandler() {
|
|
7
|
+
return async function GET(req, { params }) {
|
|
8
|
+
return safeRouteHandler(async () => {
|
|
9
|
+
const { id } = await params;
|
|
10
|
+
return projectUsersService.listInProject(
|
|
11
|
+
parseId(id),
|
|
12
|
+
searchParamsToParams(req.nextUrl.searchParams)
|
|
13
|
+
);
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
createListProjectUsersHandler
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=list-project-users.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/handlers/list-project-users.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { parseId } from '../../../infra/route/parse-id';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { searchParamsToParams } from '../../../infra/route/search-params';\nimport { projectUsersService } from '../services/project-users.service';\nimport type { ListUsersParams } from '../types';\n\nexport function createListProjectUsersHandler() {\n return async function GET(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {\n return safeRouteHandler(async () => {\n const { id } = await params;\n return projectUsersService.listInProject(\n parseId(id),\n searchParamsToParams<ListUsersParams>(req.nextUrl.searchParams)\n );\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,eAAe;AACxB,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AAG7B,SAAS,gCAAgC;AAC9C,SAAO,eAAe,IAAI,KAAkB,EAAE,OAAO,GAAwC;AAC3F,WAAO,iBAAiB,YAAY;AAClC,YAAM,EAAE,GAAG,IAAI,MAAM;AACrB,aAAO,oBAAoB;AAAA,QACzB,QAAQ,EAAE;AAAA,QACV,qBAAsC,IAAI,QAAQ,YAAY;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { searchParamsToParams } from "../../../infra/route/search-params";
|
|
4
|
+
import { projectsService } from "../services/projects.service";
|
|
5
|
+
function createListProjectsHandler() {
|
|
6
|
+
return async function GET(req) {
|
|
7
|
+
return safeRouteHandler(
|
|
8
|
+
() => projectsService.list(
|
|
9
|
+
searchParamsToParams(req.nextUrl.searchParams)
|
|
10
|
+
)
|
|
11
|
+
);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
createListProjectsHandler
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=list-projects.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/handlers/list-projects.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { searchParamsToParams } from '../../../infra/route/search-params';\nimport { projectsService } from '../services/projects.service';\nimport type { ListProjectsActionParams } from '../actions/list-projects.action';\n\nexport function createListProjectsHandler() {\n return async function GET(req: NextRequest) {\n return safeRouteHandler(() =>\n projectsService.list(\n searchParamsToParams<ListProjectsActionParams>(req.nextUrl.searchParams)\n )\n );\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAGzB,SAAS,4BAA4B;AAC1C,SAAO,eAAe,IAAI,KAAkB;AAC1C,WAAO;AAAA,MAAiB,MACtB,gBAAgB;AAAA,QACd,qBAA+C,IAAI,QAAQ,YAAY;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
4
|
-
import { withAction } from "../../../utils/withAction";
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
5
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
6
5
|
import { PROJECTS_BASE_KEY } from "./list-projects.hook";
|
|
7
6
|
function useProject(projectId) {
|
|
8
7
|
const queryKey = useAuthQueryKey([...PROJECTS_BASE_KEY, projectId]);
|
|
9
8
|
return useQuery({
|
|
10
9
|
queryKey,
|
|
11
|
-
queryFn: (
|
|
10
|
+
queryFn: ({ signal }) => apiFetch(`/api/projects/${projectId}`, { signal }),
|
|
12
11
|
enabled: projectId != null && projectId > 0,
|
|
13
12
|
staleTime: 1e4
|
|
14
13
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/projects/hooks/find-project.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/hooks/find-project.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { Project } from '../types';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\nimport { PROJECTS_BASE_KEY } from './list-projects.hook';\n\nexport function useProject(projectId: number | null) {\n const queryKey = useAuthQueryKey([...PROJECTS_BASE_KEY, projectId]);\n\n return useQuery({\n queryKey,\n queryFn: ({ signal }) => apiFetch<Project>(`/api/projects/${projectId}`, { signal }),\n enabled: projectId != null && projectId > 0,\n staleTime: 10_000,\n });\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAEzB,SAAS,uBAAuB;AAChC,SAAS,yBAAyB;AAE3B,SAAS,WAAW,WAA0B;AACnD,QAAM,WAAW,gBAAgB,CAAC,GAAG,mBAAmB,SAAS,CAAC;AAElE,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MAAM,SAAkB,iBAAiB,SAAS,IAAI,EAAE,OAAO,CAAC;AAAA,IACnF,SAAS,aAAa,QAAQ,YAAY;AAAA,IAC1C,WAAW;AAAA,EACb,CAAC;AACH;","names":[]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useInfiniteQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
4
|
-
import { withAction } from "../../../utils/withAction";
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
5
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
6
5
|
const PAGE_SIZE = 20;
|
|
7
6
|
const LIST_ALL_ACCOUNT_USERS_BASE_KEY = () => ["account-users", "all"];
|
|
@@ -14,14 +13,15 @@ function useListAllAccountUsers(search = "", projectId) {
|
|
|
14
13
|
const queryKey = useAuthQueryKey([...LIST_ALL_ACCOUNT_USERS_QUERY_KEY(search, projectId)]);
|
|
15
14
|
return useInfiniteQuery({
|
|
16
15
|
queryKey,
|
|
17
|
-
queryFn: ({ pageParam }) =>
|
|
18
|
-
|
|
16
|
+
queryFn: ({ pageParam, signal }) => apiFetch("/api/account/users", {
|
|
17
|
+
params: {
|
|
19
18
|
search: search || void 0,
|
|
20
19
|
page: pageParam,
|
|
21
20
|
limit: PAGE_SIZE,
|
|
22
21
|
inProject: projectId
|
|
23
|
-
}
|
|
24
|
-
|
|
22
|
+
},
|
|
23
|
+
signal
|
|
24
|
+
}),
|
|
25
25
|
getNextPageParam: (lastPage, allPages) => {
|
|
26
26
|
const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
|
|
27
27
|
return loaded < lastPage.total ? allPages.length + 1 : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/projects/hooks/list-all-account-users.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/hooks/list-all-account-users.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { AccountUser, UsersPage } from '../types';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nconst PAGE_SIZE = 20;\n\nexport const LIST_ALL_ACCOUNT_USERS_BASE_KEY = () =>\n ['account-users', 'all'] as const;\n\nexport const LIST_ALL_ACCOUNT_USERS_QUERY_KEY = (search: string = '', projectId?: number) => [\n ...LIST_ALL_ACCOUNT_USERS_BASE_KEY(),\n search,\n projectId,\n] as const;\n\nexport function useListAllAccountUsers(search: string = '', projectId?: number) {\n const queryKey = useAuthQueryKey([...LIST_ALL_ACCOUNT_USERS_QUERY_KEY(search, projectId)]);\n\n return useInfiniteQuery({\n queryKey,\n queryFn: ({ pageParam, signal }) =>\n apiFetch<UsersPage<AccountUser>>('/api/account/users', {\n params: {\n search: search || undefined,\n page: pageParam as number,\n limit: PAGE_SIZE,\n inProject: projectId,\n },\n signal,\n }),\n getNextPageParam: (lastPage, allPages) => {\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\n },\n initialPageParam: 1,\n });\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,gBAAgB;AAEzB,SAAS,uBAAuB;AAEhC,MAAM,YAAY;AAEX,MAAM,kCAAkC,MAC7C,CAAC,iBAAiB,KAAK;AAElB,MAAM,mCAAmC,CAAC,SAAiB,IAAI,cAAuB;AAAA,EAC3F,GAAG,gCAAgC;AAAA,EACnC;AAAA,EACA;AACF;AAEO,SAAS,uBAAuB,SAAiB,IAAI,WAAoB;AAC9E,QAAM,WAAW,gBAAgB,CAAC,GAAG,iCAAiC,QAAQ,SAAS,CAAC,CAAC;AAEzF,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,SAAS,CAAC,EAAE,WAAW,OAAO,MAC5B,SAAiC,sBAAsB;AAAA,MACrD,QAAQ;AAAA,QACN,QAAQ,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,MACb;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AACH;","names":[]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useInfiniteQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
4
|
-
import { withAction } from "../../../utils/withAction";
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
5
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
6
5
|
const PAGE_SIZE = 20;
|
|
7
6
|
const LIST_AVAILABLE_USERS_BASE_KEY = (projectId) => ["project-users", projectId, "out"];
|
|
@@ -13,13 +12,14 @@ function useListAvailableUsers(projectId, search = "") {
|
|
|
13
12
|
const queryKey = useAuthQueryKey([...LIST_AVAILABLE_USERS_QUERY_KEY(projectId, search)]);
|
|
14
13
|
return useInfiniteQuery({
|
|
15
14
|
queryKey,
|
|
16
|
-
queryFn: ({ pageParam }) =>
|
|
17
|
-
|
|
15
|
+
queryFn: ({ pageParam, signal }) => apiFetch(`/api/projects/${projectId}/available-users`, {
|
|
16
|
+
params: {
|
|
18
17
|
search: search || void 0,
|
|
19
18
|
page: pageParam,
|
|
20
19
|
limit: PAGE_SIZE
|
|
21
|
-
}
|
|
22
|
-
|
|
20
|
+
},
|
|
21
|
+
signal
|
|
22
|
+
}),
|
|
23
23
|
getNextPageParam: (lastPage, allPages) => {
|
|
24
24
|
const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
|
|
25
25
|
return loaded < lastPage.total ? allPages.length + 1 : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/projects/hooks/list-available-users.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/hooks/list-available-users.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { AccountUser, UsersPage } from '../types';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nconst PAGE_SIZE = 20;\n\nexport const LIST_AVAILABLE_USERS_BASE_KEY = (projectId: number) =>\n ['project-users', projectId, 'out'] as const;\n\nexport const LIST_AVAILABLE_USERS_QUERY_KEY = (projectId: number, search: string = '') => [\n ...LIST_AVAILABLE_USERS_BASE_KEY(projectId),\n search,\n] as const;\n\nexport function useListAvailableUsers(projectId: number, search: string = '') {\n const queryKey = useAuthQueryKey([...LIST_AVAILABLE_USERS_QUERY_KEY(projectId, search)]);\n\n return useInfiniteQuery({\n queryKey,\n queryFn: ({ pageParam, signal }) =>\n apiFetch<UsersPage<AccountUser>>(`/api/projects/${projectId}/available-users`, {\n params: {\n search: search || undefined,\n page: pageParam as number,\n limit: PAGE_SIZE,\n },\n signal,\n }),\n getNextPageParam: (lastPage, allPages) => {\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\n },\n initialPageParam: 1,\n enabled: !!projectId,\n });\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,gBAAgB;AAEzB,SAAS,uBAAuB;AAEhC,MAAM,YAAY;AAEX,MAAM,gCAAgC,CAAC,cAC5C,CAAC,iBAAiB,WAAW,KAAK;AAE7B,MAAM,iCAAiC,CAAC,WAAmB,SAAiB,OAAO;AAAA,EACxF,GAAG,8BAA8B,SAAS;AAAA,EAC1C;AACF;AAEO,SAAS,sBAAsB,WAAmB,SAAiB,IAAI;AAC5E,QAAM,WAAW,gBAAgB,CAAC,GAAG,+BAA+B,WAAW,MAAM,CAAC,CAAC;AAEvF,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,SAAS,CAAC,EAAE,WAAW,OAAO,MAC5B,SAAiC,iBAAiB,SAAS,oBAAoB;AAAA,MAC7E,QAAQ;AAAA,QACN,QAAQ,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,kBAAkB;AAAA,IAClB,SAAS,CAAC,CAAC;AAAA,EACb,CAAC;AACH;","names":[]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useInfiniteQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
4
|
-
import { withAction } from "../../../utils/withAction";
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
5
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
6
5
|
import { PROJECTS_BASE_KEY } from "./list-projects.hook";
|
|
7
6
|
const PAGE_SIZE = 20;
|
|
@@ -13,13 +12,14 @@ function useInfiniteProjects({
|
|
|
13
12
|
const queryKey = useAuthQueryKey([...INFINITE_PROJECTS_QUERY_KEY(params)]);
|
|
14
13
|
return useInfiniteQuery({
|
|
15
14
|
queryKey,
|
|
16
|
-
queryFn: ({ pageParam }) =>
|
|
17
|
-
|
|
15
|
+
queryFn: ({ pageParam, signal }) => apiFetch("/api/projects", {
|
|
16
|
+
params: {
|
|
18
17
|
...params,
|
|
19
18
|
page: pageParam,
|
|
20
19
|
limit
|
|
21
|
-
}
|
|
22
|
-
|
|
20
|
+
},
|
|
21
|
+
signal
|
|
22
|
+
}),
|
|
23
23
|
initialPageParam: 1,
|
|
24
24
|
getNextPageParam: (lastPage, allPages) => {
|
|
25
25
|
const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/projects/hooks/list-infinite-projects.hook.ts"],"sourcesContent":["\"use client\";\n\nimport { useInfiniteQuery } from \"@tanstack/react-query\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/hooks/list-infinite-projects.hook.ts"],"sourcesContent":["\"use client\";\n\nimport { useInfiniteQuery } from \"@tanstack/react-query\";\nimport { apiFetch } from \"../../../infra/http/api-fetch\";\nimport type { ListProjectsActionParams } from \"../actions/list-projects.action\";\nimport type { ProjectsPage } from \"../types\";\nimport { useAuthQueryKey } from \"../../../hooks/useAuthQueryKey\";\nimport { PROJECTS_BASE_KEY } from \"./list-projects.hook\";\n\nconst PAGE_SIZE = 20;\n\nexport const INFINITE_PROJECTS_QUERY_KEY = (\n params?: Omit<ListProjectsActionParams, \"page\">,\n) => [...PROJECTS_BASE_KEY, \"infinite\", params] as const;\n\nexport function useInfiniteProjects({\n limit = PAGE_SIZE,\n ...params\n}: Omit<ListProjectsActionParams, \"page\">) {\n const queryKey = useAuthQueryKey([...INFINITE_PROJECTS_QUERY_KEY(params)]);\n\n return useInfiniteQuery({\n queryKey,\n queryFn: ({ pageParam, signal }) =>\n apiFetch<ProjectsPage>('/api/projects', {\n params: {\n ...params,\n page: pageParam as number,\n limit,\n },\n signal,\n }),\n initialPageParam: 1,\n getNextPageParam: (lastPage, allPages) => {\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\n },\n placeholderData: (prev) => prev,\n staleTime: 10_000,\n refetchOnMount: true,\n refetchOnWindowFocus: true,\n refetchOnReconnect: true,\n });\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,gBAAgB;AAGzB,SAAS,uBAAuB;AAChC,SAAS,yBAAyB;AAElC,MAAM,YAAY;AAEX,MAAM,8BAA8B,CACzC,WACG,CAAC,GAAG,mBAAmB,YAAY,MAAM;AAEvC,SAAS,oBAAoB;AAAA,EAClC,QAAQ;AAAA,EACR,GAAG;AACL,GAA2C;AACzC,QAAM,WAAW,gBAAgB,CAAC,GAAG,4BAA4B,MAAM,CAAC,CAAC;AAEzE,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,SAAS,CAAC,EAAE,WAAW,OAAO,MAC5B,SAAuB,iBAAiB;AAAA,MACtC,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,MAAM;AAAA,QACN;AAAA,MACF;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,kBAAkB;AAAA,IAClB,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,iBAAiB,CAAC,SAAS;AAAA,IAC3B,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AACH;","names":[]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useInfiniteQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
4
|
-
import { withAction } from "../../../utils/withAction";
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
5
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
6
5
|
const PAGE_SIZE = 20;
|
|
7
6
|
const LIST_PROJECT_USERS_BASE_KEY = (projectId) => ["project-users", projectId, "in"];
|
|
@@ -13,13 +12,14 @@ function useListProjectUsers(projectId, search = "") {
|
|
|
13
12
|
const queryKey = useAuthQueryKey([...LIST_PROJECT_USERS_QUERY_KEY(projectId, search)]);
|
|
14
13
|
return useInfiniteQuery({
|
|
15
14
|
queryKey,
|
|
16
|
-
queryFn: ({ pageParam }) =>
|
|
17
|
-
|
|
15
|
+
queryFn: ({ pageParam, signal }) => apiFetch(`/api/projects/${projectId}/users`, {
|
|
16
|
+
params: {
|
|
18
17
|
search: search || void 0,
|
|
19
18
|
page: pageParam,
|
|
20
19
|
limit: PAGE_SIZE
|
|
21
|
-
}
|
|
22
|
-
|
|
20
|
+
},
|
|
21
|
+
signal
|
|
22
|
+
}),
|
|
23
23
|
getNextPageParam: (lastPage, allPages) => {
|
|
24
24
|
const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
|
|
25
25
|
return loaded < lastPage.total ? allPages.length + 1 : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/projects/hooks/list-project-users.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/hooks/list-project-users.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { ProjectUser, UsersPage } from '../types';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nconst PAGE_SIZE = 20;\n\nexport const LIST_PROJECT_USERS_BASE_KEY = (projectId: number) =>\n ['project-users', projectId, 'in'] as const;\n\nexport const LIST_PROJECT_USERS_QUERY_KEY = (projectId: number, search: string = '') => [\n ...LIST_PROJECT_USERS_BASE_KEY(projectId),\n search,\n] as const;\n\nexport function useListProjectUsers(projectId: number, search: string = '') {\n const queryKey = useAuthQueryKey([...LIST_PROJECT_USERS_QUERY_KEY(projectId, search)]);\n\n return useInfiniteQuery({\n queryKey,\n queryFn: ({ pageParam, signal }) =>\n apiFetch<UsersPage<ProjectUser>>(`/api/projects/${projectId}/users`, {\n params: {\n search: search || undefined,\n page: pageParam as number,\n limit: PAGE_SIZE,\n },\n signal,\n }),\n getNextPageParam: (lastPage, allPages) => {\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\n },\n initialPageParam: 1,\n enabled: !!projectId,\n });\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,gBAAgB;AAEzB,SAAS,uBAAuB;AAEhC,MAAM,YAAY;AAEX,MAAM,8BAA8B,CAAC,cAC1C,CAAC,iBAAiB,WAAW,IAAI;AAE5B,MAAM,+BAA+B,CAAC,WAAmB,SAAiB,OAAO;AAAA,EACtF,GAAG,4BAA4B,SAAS;AAAA,EACxC;AACF;AAEO,SAAS,oBAAoB,WAAmB,SAAiB,IAAI;AAC1E,QAAM,WAAW,gBAAgB,CAAC,GAAG,6BAA6B,WAAW,MAAM,CAAC,CAAC;AAErF,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,SAAS,CAAC,EAAE,WAAW,OAAO,MAC5B,SAAiC,iBAAiB,SAAS,UAAU;AAAA,MACnE,QAAQ;AAAA,QACN,QAAQ,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,kBAAkB;AAAA,IAClB,SAAS,CAAC,CAAC;AAAA,EACb,CAAC;AACH;","names":[]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery, keepPreviousData } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
4
|
-
import { withAction } from "../../../utils/withAction";
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
5
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
6
5
|
const PROJECTS_BASE_KEY = ["projects"];
|
|
7
6
|
const PROJECTS_QUERY_KEY = (params) => [...PROJECTS_BASE_KEY, params];
|
|
@@ -9,7 +8,7 @@ function useProjects(params) {
|
|
|
9
8
|
const queryKey = useAuthQueryKey([...PROJECTS_QUERY_KEY(params)]);
|
|
10
9
|
return useQuery({
|
|
11
10
|
queryKey,
|
|
12
|
-
queryFn:
|
|
11
|
+
queryFn: ({ signal }) => apiFetch("/api/projects", { params, signal }),
|
|
13
12
|
staleTime: 1e4,
|
|
14
13
|
placeholderData: keepPreviousData
|
|
15
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/projects/hooks/list-projects.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery, keepPreviousData } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/projects/hooks/list-projects.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery, keepPreviousData } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { ListProjectsActionParams } from '../actions/list-projects.action';\nimport type { ProjectsPage } from '../types';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport const PROJECTS_BASE_KEY = ['projects'] as const;\n\nexport const PROJECTS_QUERY_KEY = (params?: ListProjectsActionParams) =>\n [...PROJECTS_BASE_KEY, params] as const;\n\nexport function useProjects(params?: ListProjectsActionParams) {\n const queryKey = useAuthQueryKey([...PROJECTS_QUERY_KEY(params)]);\n\n return useQuery({\n queryKey,\n queryFn: ({ signal }) => apiFetch<ProjectsPage>('/api/projects', { params, signal }),\n staleTime: 10_000,\n placeholderData: keepPreviousData,\n });\n}\n"],"mappings":";AAEA,SAAS,UAAU,wBAAwB;AAC3C,SAAS,gBAAgB;AAGzB,SAAS,uBAAuB;AAEzB,MAAM,oBAAoB,CAAC,UAAU;AAErC,MAAM,qBAAqB,CAAC,WACjC,CAAC,GAAG,mBAAmB,MAAM;AAExB,SAAS,YAAY,QAAmC;AAC7D,QAAM,WAAW,gBAAgB,CAAC,GAAG,mBAAmB,MAAM,CAAC,CAAC;AAEhE,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MAAM,SAAuB,iBAAiB,EAAE,QAAQ,OAAO,CAAC;AAAA,IACnF,WAAW;AAAA,IACX,iBAAiB;AAAA,EACnB,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { searchParamsToParams } from "../../../infra/route/search-params";
|
|
4
|
+
import { subscriptionsService } from "../services/subscriptions.service";
|
|
5
|
+
function createListSubscriptionsHandler() {
|
|
6
|
+
return async function GET(req) {
|
|
7
|
+
return safeRouteHandler(
|
|
8
|
+
() => subscriptionsService.listSubscriptions(
|
|
9
|
+
searchParamsToParams(req.nextUrl.searchParams)
|
|
10
|
+
)
|
|
11
|
+
);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
createListSubscriptionsHandler
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=list-subscriptions.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/subscriptions/handlers/list-subscriptions.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { searchParamsToParams } from '../../../infra/route/search-params';\nimport { subscriptionsService } from '../services/subscriptions.service';\nimport type { FindSubscriptionsParams } from '../types/subscription.type';\n\nexport function createListSubscriptionsHandler() {\n return async function GET(req: NextRequest) {\n return safeRouteHandler(() =>\n subscriptionsService.listSubscriptions(\n searchParamsToParams<FindSubscriptionsParams>(req.nextUrl.searchParams)\n )\n );\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,4BAA4B;AAG9B,SAAS,iCAAiC;AAC/C,SAAO,eAAe,IAAI,KAAkB;AAC1C,WAAO;AAAA,MAAiB,MACtB,qBAAqB;AAAA,QACnB,qBAA8C,IAAI,QAAQ,YAAY;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
4
4
|
import { SUBSCRIPTIONS_QUERY_KEY } from "../constants/query-keys.constants";
|
|
5
|
-
import { withAction } from "../../../utils/withAction";
|
|
6
5
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
7
6
|
function useActiveSubscription() {
|
|
8
7
|
const queryKey = useAuthQueryKey([...SUBSCRIPTIONS_QUERY_KEY, "active"]);
|
|
9
8
|
return useQuery({
|
|
10
9
|
queryKey,
|
|
11
|
-
queryFn:
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
queryFn: ({ signal }) => apiFetch("/api/subscriptions", {
|
|
11
|
+
params: { limit: 1 },
|
|
12
|
+
signal
|
|
13
|
+
}),
|
|
14
14
|
staleTime: 1e4
|
|
15
15
|
});
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/subscriptions/hooks/find-active-subscription.hook.ts"],"sourcesContent":["\"use client\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/subscriptions/hooks/find-active-subscription.hook.ts"],"sourcesContent":["\"use client\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport { apiFetch } from \"../../../infra/http/api-fetch\";\nimport type { PaginatedSuccessResult } from \"../../../infra/api/types\";\nimport type { Subscription } from \"../types/subscription.type\";\nimport { SUBSCRIPTIONS_QUERY_KEY } from \"../constants/query-keys.constants\";\nimport { useAuthQueryKey } from \"../../../hooks/useAuthQueryKey\";\n\nexport function useActiveSubscription() {\n const queryKey = useAuthQueryKey([...SUBSCRIPTIONS_QUERY_KEY, \"active\"]);\n\n return useQuery({\n queryKey,\n queryFn: ({ signal }) =>\n apiFetch<PaginatedSuccessResult<Subscription>>('/api/subscriptions', {\n params: { limit: 1 },\n signal,\n }),\n staleTime: 10_000,\n });\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAGzB,SAAS,+BAA+B;AACxC,SAAS,uBAAuB;AAEzB,SAAS,wBAAwB;AACtC,QAAM,WAAW,gBAAgB,CAAC,GAAG,yBAAyB,QAAQ,CAAC;AAEvE,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MACjB,SAA+C,sBAAsB;AAAA,MACnE,QAAQ,EAAE,OAAO,EAAE;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,IACH,WAAW;AAAA,EACb,CAAC;AACH;","names":[]}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
4
4
|
import { parseResult } from "../../../infra/utils/parser";
|
|
5
5
|
import { SubscriptionSchema } from "../types/subscription.type";
|
|
6
|
-
import { withAction } from "../../../utils/withAction";
|
|
7
6
|
import { SUBSCRIPTIONS_QUERY_KEY } from "../constants/query-keys.constants";
|
|
8
7
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
9
8
|
function useSubscriptions(params) {
|
|
10
9
|
const queryKey = useAuthQueryKey([...SUBSCRIPTIONS_QUERY_KEY, params]);
|
|
11
10
|
return useQuery({
|
|
12
11
|
queryKey,
|
|
13
|
-
queryFn: async (
|
|
12
|
+
queryFn: async ({ signal }) => parseResult(
|
|
13
|
+
SubscriptionSchema,
|
|
14
|
+
await apiFetch("/api/subscriptions", { params, signal })
|
|
15
|
+
)
|
|
14
16
|
});
|
|
15
17
|
}
|
|
16
18
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/subscriptions/hooks/list-subscriptions.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/subscriptions/hooks/list-subscriptions.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { PaginatedSuccessResult } from '../../../infra/api/types';\nimport { parseResult } from '../../../infra/utils/parser';\nimport { SubscriptionSchema, type Subscription, type FindSubscriptionsParams } from '../types/subscription.type';\nimport { SUBSCRIPTIONS_QUERY_KEY } from '../constants/query-keys.constants';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport function useSubscriptions(params?: Partial<FindSubscriptionsParams>) {\n const queryKey = useAuthQueryKey([...SUBSCRIPTIONS_QUERY_KEY, params]);\n\n return useQuery({\n queryKey,\n queryFn: async ({ signal }) =>\n parseResult(\n SubscriptionSchema,\n await apiFetch<PaginatedSuccessResult<Subscription>>('/api/subscriptions', { params, signal })\n ),\n });\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAEzB,SAAS,mBAAmB;AAC5B,SAAS,0BAA2E;AACpF,SAAS,+BAA+B;AACxC,SAAS,uBAAuB;AAEzB,SAAS,iBAAiB,QAA2C;AAC1E,QAAM,WAAW,gBAAgB,CAAC,GAAG,yBAAyB,MAAM,CAAC;AAErE,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,OAAO,EAAE,OAAO,MACvB;AAAA,MACE;AAAA,MACA,MAAM,SAA+C,sBAAsB,EAAE,QAAQ,OAAO,CAAC;AAAA,IAC/F;AAAA,EACJ,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { searchParamsToParams } from "../../../infra/route/search-params";
|
|
4
|
+
import { messagesService } from "../services/messages.service";
|
|
5
|
+
import { findWhitelabel } from "../../whitelabel/actions/find-whitelabel.action";
|
|
6
|
+
function createListMessagesHandler() {
|
|
7
|
+
return async function GET(req) {
|
|
8
|
+
return safeRouteHandler(async () => {
|
|
9
|
+
const params = searchParamsToParams(req.nextUrl.searchParams);
|
|
10
|
+
const [result, whitelabel] = await Promise.all([
|
|
11
|
+
messagesService.listMessages(params),
|
|
12
|
+
findWhitelabel()
|
|
13
|
+
]);
|
|
14
|
+
const urlMap = {
|
|
15
|
+
pages_url: whitelabel?.pages_url ?? "",
|
|
16
|
+
accounts_url: whitelabel?.accounts_url ?? "",
|
|
17
|
+
editor_url: whitelabel?.editor_url ?? ""
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
data: result.data.map((message) => ({
|
|
21
|
+
...message,
|
|
22
|
+
url: message.url.replace(
|
|
23
|
+
/\{(pages_url|accounts_url|editor_url)\}/g,
|
|
24
|
+
(_, key) => urlMap[key] ?? ""
|
|
25
|
+
)
|
|
26
|
+
})),
|
|
27
|
+
total: result.total,
|
|
28
|
+
totalUnread: result.totalUnread
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
createListMessagesHandler
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=list-messages.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/users/handlers/list-messages.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { searchParamsToParams } from '../../../infra/route/search-params';\nimport { messagesService } from '../services/messages.service';\nimport type { FindMessagesParams } from '../schema/messages.schema';\nimport { findWhitelabel } from '../../whitelabel/actions/find-whitelabel.action';\n\nexport function createListMessagesHandler() {\n return async function GET(req: NextRequest) {\n return safeRouteHandler(async () => {\n const params = searchParamsToParams<FindMessagesParams>(req.nextUrl.searchParams);\n\n const [result, whitelabel] = await Promise.all([\n messagesService.listMessages(params),\n findWhitelabel(),\n ]);\n\n const urlMap: Record<string, string> = {\n pages_url: whitelabel?.pages_url ?? '',\n accounts_url: whitelabel?.accounts_url ?? '',\n editor_url: whitelabel?.editor_url ?? '',\n };\n\n return {\n data: result.data.map((message) => ({\n ...message,\n url: message.url.replace(\n /\\{(pages_url|accounts_url|editor_url)\\}/g,\n (_, key) => urlMap[key] ?? ''\n ),\n })),\n total: result.total,\n totalUnread: result.totalUnread,\n };\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAEhC,SAAS,sBAAsB;AAExB,SAAS,4BAA4B;AAC1C,SAAO,eAAe,IAAI,KAAkB;AAC1C,WAAO,iBAAiB,YAAY;AAClC,YAAM,SAAS,qBAAyC,IAAI,QAAQ,YAAY;AAEhF,YAAM,CAAC,QAAQ,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC7C,gBAAgB,aAAa,MAAM;AAAA,QACnC,eAAe;AAAA,MACjB,CAAC;AAED,YAAM,SAAiC;AAAA,QACrC,WAAW,YAAY,aAAa;AAAA,QACpC,cAAc,YAAY,gBAAgB;AAAA,QAC1C,YAAY,YAAY,cAAc;AAAA,MACxC;AAEA,aAAO;AAAA,QACL,MAAM,OAAO,KAAK,IAAI,CAAC,aAAa;AAAA,UAClC,GAAG;AAAA,UACH,KAAK,QAAQ,IAAI;AAAA,YACf;AAAA,YACA,CAAC,GAAG,QAAQ,OAAO,GAAG,KAAK;AAAA,UAC7B;AAAA,QACF,EAAE;AAAA,QACF,OAAO,OAAO;AAAA,QACd,aAAa,OAAO;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
4
4
|
import { markMessageAsReadAction } from "../action/mark-message-as-read.action";
|
|
5
5
|
import { markAllMessagesAsReadAction } from "../action/mark-all-messages-as-read.action";
|
|
6
6
|
import { withAction } from "../../../utils/withAction";
|
|
@@ -11,20 +11,21 @@ function useMessages(params) {
|
|
|
11
11
|
const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, params]);
|
|
12
12
|
return useQuery({
|
|
13
13
|
queryKey,
|
|
14
|
-
queryFn:
|
|
14
|
+
queryFn: ({ signal }) => apiFetch("/api/messages", { params, signal })
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
17
|
function useInfiniteMessages(params) {
|
|
18
18
|
const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, "infinite", params]);
|
|
19
19
|
return useInfiniteQuery({
|
|
20
20
|
queryKey,
|
|
21
|
-
queryFn: ({ pageParam }) =>
|
|
22
|
-
|
|
21
|
+
queryFn: ({ pageParam, signal }) => apiFetch("/api/messages", {
|
|
22
|
+
params: {
|
|
23
23
|
...params,
|
|
24
24
|
page: pageParam,
|
|
25
25
|
limit: INFINITE_MESSAGES_PAGE_SIZE
|
|
26
|
-
}
|
|
27
|
-
|
|
26
|
+
},
|
|
27
|
+
signal
|
|
28
|
+
}),
|
|
28
29
|
getNextPageParam: (lastPage, allPages) => {
|
|
29
30
|
const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
|
|
30
31
|
return loaded < lastPage.total ? allPages.length + 1 : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/users/hooks/messages.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/users/hooks/messages.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport { markMessageAsReadAction } from '../action/mark-message-as-read.action';\nimport { markAllMessagesAsReadAction } from '../action/mark-all-messages-as-read.action';\nimport { withAction } from '../../../utils/withAction';\nimport type { FindMessagesParams, ListMessagesApiResponse } from '../schema/messages.schema';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport const MESSAGES_QUERY_KEY = ['messages'] as const;\n\nconst INFINITE_MESSAGES_PAGE_SIZE = 10;\n\nexport function useMessages(params?: Partial<FindMessagesParams>) {\n const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, params]);\n\n return useQuery({\n queryKey,\n queryFn: ({ signal }) =>\n apiFetch<ListMessagesApiResponse>('/api/messages', { params, signal }),\n });\n}\n\nexport function useInfiniteMessages(params?: Partial<Omit<FindMessagesParams, 'page' | 'limit'>>) {\n const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, 'infinite', params]);\n\n return useInfiniteQuery({\n queryKey,\n queryFn: ({ pageParam, signal }) =>\n apiFetch<ListMessagesApiResponse>('/api/messages', {\n params: {\n ...params,\n page: pageParam as number,\n limit: INFINITE_MESSAGES_PAGE_SIZE,\n },\n signal,\n }),\n getNextPageParam: (lastPage, allPages) => {\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\n },\n initialPageParam: 1,\n });\n}\n\nexport function useMarkMessageAsRead() {\n const queryClient = useQueryClient();\n const messagesKey = useAuthQueryKey([...MESSAGES_QUERY_KEY]);\n\n return useMutation({\n mutationFn: withAction(markMessageAsReadAction),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: messagesKey });\n },\n });\n}\n\nexport function useMarkAllMessagesAsRead() {\n const queryClient = useQueryClient();\n const messagesKey = useAuthQueryKey([...MESSAGES_QUERY_KEY]);\n\n return useMutation({\n mutationFn: withAction(markAllMessagesAsReadAction),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: messagesKey });\n },\n });\n}\n"],"mappings":";AAEA,SAAS,kBAAkB,aAAa,UAAU,sBAAsB;AACxE,SAAS,gBAAgB;AACzB,SAAS,+BAA+B;AACxC,SAAS,mCAAmC;AAC5C,SAAS,kBAAkB;AAE3B,SAAS,uBAAuB;AAEzB,MAAM,qBAAqB,CAAC,UAAU;AAE7C,MAAM,8BAA8B;AAE7B,SAAS,YAAY,QAAsC;AAChE,QAAM,WAAW,gBAAgB,CAAC,GAAG,oBAAoB,MAAM,CAAC;AAEhE,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MACjB,SAAkC,iBAAiB,EAAE,QAAQ,OAAO,CAAC;AAAA,EACzE,CAAC;AACH;AAEO,SAAS,oBAAoB,QAA8D;AAChG,QAAM,WAAW,gBAAgB,CAAC,GAAG,oBAAoB,YAAY,MAAM,CAAC;AAE5E,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,SAAS,CAAC,EAAE,WAAW,OAAO,MAC5B,SAAkC,iBAAiB;AAAA,MACjD,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AACH;AAEO,SAAS,uBAAuB;AACrC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,gBAAgB,CAAC,GAAG,kBAAkB,CAAC;AAE3D,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,uBAAuB;AAAA,IAC9C,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAEO,SAAS,2BAA2B;AACzC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,gBAAgB,CAAC,GAAG,kBAAkB,CAAC;AAE3D,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,2BAA2B;AAAA,IAClD,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;","names":[]}
|
package/dist/route.mjs
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { safeRouteHandler } from "./infra/route/safe-route-handler";
|
|
2
|
+
import { searchParamsToParams } from "./infra/route/search-params";
|
|
3
|
+
import { parseId } from "./infra/route/parse-id";
|
|
4
|
+
export {
|
|
5
|
+
parseId,
|
|
6
|
+
safeRouteHandler,
|
|
7
|
+
searchParamsToParams
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=route.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/route.ts"],"sourcesContent":["export { safeRouteHandler } from './infra/route/safe-route-handler';\nexport { searchParamsToParams } from './infra/route/search-params';\nexport { parseId } from './infra/route/parse-id';\n"],"mappings":"AAAA,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,eAAe;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@greatapps/common",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.660",
|
|
4
4
|
"description": "Shared library for GreatApps frontend applications",
|
|
5
5
|
"main": "./dist/index.mjs",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -16,6 +16,18 @@
|
|
|
16
16
|
"./middleware": {
|
|
17
17
|
"import": "./dist/middleware.mjs",
|
|
18
18
|
"types": "./src/middleware.ts"
|
|
19
|
+
},
|
|
20
|
+
"./route": {
|
|
21
|
+
"import": "./dist/route.mjs",
|
|
22
|
+
"types": "./src/route.ts"
|
|
23
|
+
},
|
|
24
|
+
"./http": {
|
|
25
|
+
"import": "./dist/http.mjs",
|
|
26
|
+
"types": "./src/http.ts"
|
|
27
|
+
},
|
|
28
|
+
"./handlers": {
|
|
29
|
+
"import": "./dist/handlers.mjs",
|
|
30
|
+
"types": "./src/handlers.ts"
|
|
19
31
|
}
|
|
20
32
|
},
|
|
21
33
|
"files": [
|
|
@@ -65,6 +77,7 @@
|
|
|
65
77
|
},
|
|
66
78
|
"devDependencies": {
|
|
67
79
|
"@hookform/resolvers": "^5.2.2",
|
|
80
|
+
"zod": "^4.4.3",
|
|
68
81
|
"@tanstack/react-query": "^5.95.2",
|
|
69
82
|
"@tanstack/react-query-devtools": "^5.95.2",
|
|
70
83
|
"@types/node": "^25.5.0",
|