@okam/directus-next 1.1.0 → 1.2.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.
- package/CHANGELOG.md +25 -0
- package/draft/index.d.ts +1 -1
- package/draft/route.d.ts +1 -1
- package/{directus/directus-next/src/draft → draft}/route.js +3 -3
- package/{directus/directus-next/src/draft → draft}/route.mjs +3 -3
- package/files/index.d.ts +1 -0
- package/index.d.ts +2 -0
- package/{directus/directus-next/src/index.js → index.js} +11 -1
- package/index.mjs +24 -0
- package/lib/directusRouteRouter.d.ts +9 -14
- package/{directus/directus-next/src/lib → lib}/directusRouteRouter.js +10 -4
- package/{directus/directus-next/src/lib → lib}/directusRouteRouter.mjs +14 -8
- package/{directus/directus-next/src/logger.js → logger.js} +2 -3
- package/{directus/directus-next/src/logger.mjs → logger.mjs} +1 -2
- package/package.json +3 -1
- package/{directus/directus-next/src/pageSettings → pageSettings}/usePageSettings.js +2 -7
- package/{directus/directus-next/src/pageSettings → pageSettings}/usePageSettings.mjs +1 -6
- package/redirect/env.d.ts +2 -0
- package/redirect/env.js +20 -0
- package/redirect/env.mjs +20 -0
- package/redirect/index.d.ts +5 -0
- package/redirect/interface.d.ts +25 -0
- package/redirect/route.d.ts +8 -0
- package/redirect/route.js +30 -0
- package/redirect/route.mjs +30 -0
- package/redirect/utils/getRedirectsRoute.d.ts +8 -0
- package/redirect/utils/getRedirectsRoute.js +27 -0
- package/redirect/utils/getRedirectsRoute.mjs +27 -0
- package/redirect/utils/handleRedirect.d.ts +7 -0
- package/redirect/utils/handleRedirect.js +48 -0
- package/redirect/utils/handleRedirect.mjs +48 -0
- package/types/directusRouteConfig.d.ts +17 -0
- package/types/index.d.ts +2 -0
- package/types/next.d.ts +12 -0
- package/types/pageSettings.d.ts +13 -0
- package/directus/directus-next/src/index.mjs +0 -14
- package/directus/directus-query/src/lib/config.js +0 -3
- package/directus/directus-query/src/lib/config.mjs +0 -2
- package/directus/directus-query/src/lib/query.js +0 -10
- package/directus/directus-query/src/lib/query.mjs +0 -10
- package/directus/directus-query/src/lib/request.js +0 -40
- package/directus/directus-query/src/lib/request.mjs +0 -40
- package/directus/directus-query/src/logger.js +0 -6
- package/directus/directus-query/src/logger.mjs +0 -6
- package/stack/logger/src/lib/factoryLogger.js +0 -8
- package/stack/logger/src/lib/factoryLogger.mjs +0 -9
- package/stack/logger/src/lib/logger.js +0 -37
- package/stack/logger/src/lib/logger.mjs +0 -37
- /package/{directus/directus-next/src/draft → draft}/env.js +0 -0
- /package/{directus/directus-next/src/draft → draft}/env.mjs +0 -0
- /package/{directus/directus-next/src/pageSettings → pageSettings}/context.js +0 -0
- /package/{directus/directus-next/src/pageSettings → pageSettings}/context.mjs +0 -0
- /package/{directus/directus-next/src/response.js → response.js} +0 -0
- /package/{directus/directus-next/src/response.mjs → response.mjs} +0 -0
- /package/{directus/directus-next/src/server.js → server.js} +0 -0
- /package/{directus/directus-next/src/server.mjs → server.mjs} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
## 1.2.0 (2025-07-22)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **directus-next:** /api/redirect route handler to fetch + cache directus redirects ([c21b953](https://github.com/OKAMca/stack/commit/c21b953))
|
|
6
|
+
|
|
7
|
+
### ❤️ Thank You
|
|
8
|
+
|
|
9
|
+
- Pierre-Olivier Clerson @poclerson
|
|
10
|
+
|
|
11
|
+
## 1.1.1 (2025-07-09)
|
|
12
|
+
|
|
13
|
+
### 🩹 Fixes
|
|
14
|
+
|
|
15
|
+
- **directus-next:** missing external deps for build ([8146c77](https://github.com/OKAMca/stack/commit/8146c77))
|
|
16
|
+
- update vite-plugin-dts to version 3 ([5d33c77](https://github.com/OKAMca/stack/commit/5d33c77))
|
|
17
|
+
- package deps error ([b665a45](https://github.com/OKAMca/stack/commit/b665a45))
|
|
18
|
+
- search field icon ([0850fde](https://github.com/OKAMca/stack/commit/0850fde))
|
|
19
|
+
|
|
20
|
+
### ❤️ Thank You
|
|
21
|
+
|
|
22
|
+
- Marie-Maxime Tanguay
|
|
23
|
+
- Pierre-Olivier Clerson @poclerson
|
|
24
|
+
- poclerson
|
|
25
|
+
|
|
1
26
|
## 0.3.0 (2024-12-03)
|
|
2
27
|
|
|
3
28
|
|
package/draft/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { default as handleDraftRoute, getPathFromRoute,
|
|
1
|
+
export { default as handleDraftRoute, getPathFromRoute, parseDraftParams } from './route';
|
|
2
2
|
export { getDraftSecretDefault } from './env';
|
|
3
3
|
export type { HandleDraftOptions } from './route';
|
package/draft/route.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ const navigation = require("next/navigation");
|
|
|
5
5
|
const radashi = require("radashi");
|
|
6
6
|
const response = require("../response.js");
|
|
7
7
|
const env = require("./env.js");
|
|
8
|
-
function
|
|
8
|
+
function parseDraftParams(url) {
|
|
9
9
|
const { searchParams } = new URL(url);
|
|
10
10
|
const secret = searchParams.get("secret") || "";
|
|
11
11
|
const languagesParam = searchParams.get("languages");
|
|
@@ -91,7 +91,7 @@ function handleDraftRoute({
|
|
|
91
91
|
}) {
|
|
92
92
|
const getSecretFunction = getDraftSecret || env.getDraftSecretDefault;
|
|
93
93
|
const getJsonErrorResponseFunction = getJsonError || response.getJsonErrorResponse;
|
|
94
|
-
const { secret, languages, paths, routes, type, version } =
|
|
94
|
+
const { secret, languages, paths, routes, type, version } = parseDraftParams(url);
|
|
95
95
|
if (secret !== getSecretFunction()) {
|
|
96
96
|
return getJsonErrorResponseFunction({ error: "Invalid argument" }, 401);
|
|
97
97
|
}
|
|
@@ -138,4 +138,4 @@ function handleDraftRoute({
|
|
|
138
138
|
}
|
|
139
139
|
exports.default = handleDraftRoute;
|
|
140
140
|
exports.getPathFromRoute = getPathFromRoute;
|
|
141
|
-
exports.
|
|
141
|
+
exports.parseDraftParams = parseDraftParams;
|
|
@@ -3,7 +3,7 @@ import { redirect } from "next/navigation";
|
|
|
3
3
|
import { template } from "radashi";
|
|
4
4
|
import { getJsonErrorResponse } from "../response.mjs";
|
|
5
5
|
import { getDraftSecretDefault } from "./env.mjs";
|
|
6
|
-
function
|
|
6
|
+
function parseDraftParams(url) {
|
|
7
7
|
const { searchParams } = new URL(url);
|
|
8
8
|
const secret = searchParams.get("secret") || "";
|
|
9
9
|
const languagesParam = searchParams.get("languages");
|
|
@@ -89,7 +89,7 @@ function handleDraftRoute({
|
|
|
89
89
|
}) {
|
|
90
90
|
const getSecretFunction = getDraftSecret || getDraftSecretDefault;
|
|
91
91
|
const getJsonErrorResponseFunction = getJsonError || getJsonErrorResponse;
|
|
92
|
-
const { secret, languages, paths, routes, type, version } =
|
|
92
|
+
const { secret, languages, paths, routes, type, version } = parseDraftParams(url);
|
|
93
93
|
if (secret !== getSecretFunction()) {
|
|
94
94
|
return getJsonErrorResponseFunction({ error: "Invalid argument" }, 401);
|
|
95
95
|
}
|
|
@@ -137,5 +137,5 @@ function handleDraftRoute({
|
|
|
137
137
|
export {
|
|
138
138
|
handleDraftRoute as default,
|
|
139
139
|
getPathFromRoute,
|
|
140
|
-
|
|
140
|
+
parseDraftParams
|
|
141
141
|
};
|
package/files/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { TFiles } from './interface';
|
package/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export * from './draft';
|
|
2
|
+
export * from './redirect';
|
|
2
3
|
export { logger as DirectusNextLogger } from './logger';
|
|
3
4
|
export { directusRouteRouter } from './lib/directusRouteRouter';
|
|
4
5
|
export { getJsonErrorResponse } from './response';
|
|
6
|
+
export * from './types';
|
|
5
7
|
export type { TPageSettings, TPageSettingsTranslation, TPageSettingsItemQuery, TPageSettingsItemDocument, TUsePageSettingsProps, } from './pageSettings/interface';
|
|
6
8
|
export type { TFiles } from './files/interface';
|
|
@@ -2,13 +2,23 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const route = require("./draft/route.js");
|
|
4
4
|
const env = require("./draft/env.js");
|
|
5
|
+
const env$1 = require("./redirect/env.js");
|
|
6
|
+
const route$1 = require("./redirect/route.js");
|
|
7
|
+
const getRedirectsRoute = require("./redirect/utils/getRedirectsRoute.js");
|
|
8
|
+
const handleRedirect = require("./redirect/utils/handleRedirect.js");
|
|
5
9
|
const logger = require("./logger.js");
|
|
6
10
|
const directusRouteRouter = require("./lib/directusRouteRouter.js");
|
|
7
11
|
const response = require("./response.js");
|
|
8
12
|
exports.getPathFromRoute = route.getPathFromRoute;
|
|
9
13
|
exports.handleDraftRoute = route.default;
|
|
10
|
-
exports.
|
|
14
|
+
exports.parseDraftParams = route.parseDraftParams;
|
|
11
15
|
exports.getDraftSecretDefault = env.getDraftSecretDefault;
|
|
16
|
+
exports.getApiRouteUrlDefault = env$1.getApiRouteUrlDefault;
|
|
17
|
+
exports.getRedirectSecretDefault = env$1.getRedirectSecretDefault;
|
|
18
|
+
exports.handleRedirectsRoute = route$1.default;
|
|
19
|
+
exports.parseRedirectParams = route$1.parseRedirectParams;
|
|
20
|
+
exports.getRedirectsRoute = getRedirectsRoute.getRedirectsRoute;
|
|
21
|
+
exports.handleRedirect = handleRedirect.handleRedirect;
|
|
12
22
|
exports.DirectusNextLogger = logger.logger;
|
|
13
23
|
exports.directusRouteRouter = directusRouteRouter.directusRouteRouter;
|
|
14
24
|
exports.getJsonErrorResponse = response.getJsonErrorResponse;
|
package/index.mjs
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getPathFromRoute, default as default2, parseDraftParams } from "./draft/route.mjs";
|
|
2
|
+
import { getDraftSecretDefault } from "./draft/env.mjs";
|
|
3
|
+
import { getApiRouteUrlDefault, getRedirectSecretDefault } from "./redirect/env.mjs";
|
|
4
|
+
import { default as default3, parseRedirectParams } from "./redirect/route.mjs";
|
|
5
|
+
import { getRedirectsRoute } from "./redirect/utils/getRedirectsRoute.mjs";
|
|
6
|
+
import { handleRedirect } from "./redirect/utils/handleRedirect.mjs";
|
|
7
|
+
import { logger } from "./logger.mjs";
|
|
8
|
+
import { directusRouteRouter } from "./lib/directusRouteRouter.mjs";
|
|
9
|
+
import { getJsonErrorResponse } from "./response.mjs";
|
|
10
|
+
export {
|
|
11
|
+
logger as DirectusNextLogger,
|
|
12
|
+
directusRouteRouter,
|
|
13
|
+
getApiRouteUrlDefault,
|
|
14
|
+
getDraftSecretDefault,
|
|
15
|
+
getJsonErrorResponse,
|
|
16
|
+
getPathFromRoute,
|
|
17
|
+
getRedirectSecretDefault,
|
|
18
|
+
getRedirectsRoute,
|
|
19
|
+
default2 as handleDraftRoute,
|
|
20
|
+
handleRedirect,
|
|
21
|
+
default3 as handleRedirectsRoute,
|
|
22
|
+
parseDraftParams,
|
|
23
|
+
parseRedirectParams
|
|
24
|
+
};
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
+
import type { NextRequest, NextResponse as NextResponseType } from 'next/server';
|
|
1
2
|
import type { DirectusRouteConfig } from '../types/directusRouteConfig';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
next: () => MinimalNextResponse;
|
|
11
|
-
notFound: () => MinimalNextResponse;
|
|
12
|
-
rewrite: (url: MinimalNextUrl | URL) => MinimalNextResponse;
|
|
13
|
-
}
|
|
14
|
-
export declare function directusRouteRouter(request: MinimalNextRequest, config: DirectusRouteConfig, NextResponse: MinimalNextResponse): Promise<MinimalNextResponse>;
|
|
15
|
-
export {};
|
|
3
|
+
/**
|
|
4
|
+
* Handles routing for Directus.
|
|
5
|
+
*
|
|
6
|
+
* @param {NextRequest} request - The incoming request object.
|
|
7
|
+
* @param {DirectusRouteConfig} config - Configuration for routing.
|
|
8
|
+
* @returns {Promise<NextResponse>} The response object.
|
|
9
|
+
*/
|
|
10
|
+
export declare function directusRouteRouter(request: NextRequest, config: DirectusRouteConfig): Promise<NextResponseType>;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const server = require("next/server");
|
|
3
4
|
const logger = require("../logger.js");
|
|
5
|
+
const handleRedirect = require("../redirect/utils/handleRedirect.js");
|
|
4
6
|
async function fetchPageSettingsTranslation(path) {
|
|
5
7
|
const graphqlEndpoint = process.env.NEXT_SERVER_GRAPHQL_URL || process.env.NEXT_PUBLIC_GRAPHQL_URL;
|
|
6
8
|
const graphqlApiKey = process.env.NEXT_PUBLIC_API_TOKEN;
|
|
@@ -56,11 +58,15 @@ function removeLocaleFromPathname(pathname, config) {
|
|
|
56
58
|
const currentLocale = Object.values(config.localeMap ?? {}).find((locale) => pathname.startsWith(`/${locale}/`));
|
|
57
59
|
return { locale: currentLocale, pathname: currentLocale ? pathname.replace(`/${currentLocale}/`, "/") : pathname };
|
|
58
60
|
}
|
|
59
|
-
async function directusRouteRouter(request, config, NextResponse) {
|
|
60
|
-
var _a, _b;
|
|
61
|
+
async function directusRouteRouter(request, config, NextResponse = server.NextResponse) {
|
|
62
|
+
var _a, _b, _c;
|
|
61
63
|
const { pathname: localizedPathname } = request.nextUrl;
|
|
62
64
|
const { locale, pathname } = removeLocaleFromPathname(localizedPathname, config);
|
|
63
65
|
logger.log("Processing request for pathname:", { locale, pathname });
|
|
66
|
+
const redirect = await handleRedirect.handleRedirect(request, (_a = config.modules) == null ? void 0 : _a.redirects);
|
|
67
|
+
if (redirect) {
|
|
68
|
+
return redirect;
|
|
69
|
+
}
|
|
64
70
|
const translations = await fetchPageSettingsTranslation(pathname);
|
|
65
71
|
if (!translations || translations.length === 0) {
|
|
66
72
|
logger.log("No translation found for path:", pathname);
|
|
@@ -79,8 +85,8 @@ async function directusRouteRouter(request, config, NextResponse) {
|
|
|
79
85
|
logger.log(`PageSettings with id ${id} was found but is not associated with any collection.`, { id }, "warn");
|
|
80
86
|
return NextResponse.next();
|
|
81
87
|
}
|
|
82
|
-
const mappedLocale = ((
|
|
83
|
-
const idField = ((
|
|
88
|
+
const mappedLocale = ((_b = config.localeMap) == null ? void 0 : _b[directusLocale]) || directusLocale;
|
|
89
|
+
const idField = ((_c = config.collectionSettings[collection]) == null ? void 0 : _c.idField) || config.collectionSettings.default.idField;
|
|
84
90
|
logger.log("Directus locale:", directusLocale);
|
|
85
91
|
logger.log("Mapped locale:", mappedLocale);
|
|
86
92
|
logger.log("Collection:", collection);
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
1
2
|
import { log } from "../logger.mjs";
|
|
3
|
+
import { handleRedirect } from "../redirect/utils/handleRedirect.mjs";
|
|
2
4
|
async function fetchPageSettingsTranslation(path) {
|
|
3
5
|
const graphqlEndpoint = process.env.NEXT_SERVER_GRAPHQL_URL || process.env.NEXT_PUBLIC_GRAPHQL_URL;
|
|
4
6
|
const graphqlApiKey = process.env.NEXT_PUBLIC_API_TOKEN;
|
|
@@ -54,31 +56,35 @@ function removeLocaleFromPathname(pathname, config) {
|
|
|
54
56
|
const currentLocale = Object.values(config.localeMap ?? {}).find((locale) => pathname.startsWith(`/${locale}/`));
|
|
55
57
|
return { locale: currentLocale, pathname: currentLocale ? pathname.replace(`/${currentLocale}/`, "/") : pathname };
|
|
56
58
|
}
|
|
57
|
-
async function directusRouteRouter(request, config, NextResponse) {
|
|
58
|
-
var _a, _b;
|
|
59
|
+
async function directusRouteRouter(request, config, NextResponse$1 = NextResponse) {
|
|
60
|
+
var _a, _b, _c;
|
|
59
61
|
const { pathname: localizedPathname } = request.nextUrl;
|
|
60
62
|
const { locale, pathname } = removeLocaleFromPathname(localizedPathname, config);
|
|
61
63
|
log("Processing request for pathname:", { locale, pathname });
|
|
64
|
+
const redirect = await handleRedirect(request, (_a = config.modules) == null ? void 0 : _a.redirects);
|
|
65
|
+
if (redirect) {
|
|
66
|
+
return redirect;
|
|
67
|
+
}
|
|
62
68
|
const translations = await fetchPageSettingsTranslation(pathname);
|
|
63
69
|
if (!translations || translations.length === 0) {
|
|
64
70
|
log("No translation found for path:", pathname);
|
|
65
|
-
return NextResponse.next();
|
|
71
|
+
return NextResponse$1.next();
|
|
66
72
|
}
|
|
67
73
|
const translation = translations[0];
|
|
68
74
|
log("Using translation:", translation);
|
|
69
75
|
if (!translation.languages_code || !translation.page_settings_id) {
|
|
70
76
|
log(`Invalid translation data for path: ${pathname}`, { pathname }, "warn");
|
|
71
|
-
return NextResponse.next();
|
|
77
|
+
return NextResponse$1.next();
|
|
72
78
|
}
|
|
73
79
|
const directusLocale = translation.languages_code.code;
|
|
74
80
|
const collection = translation.page_settings_id.belongs_to_collection;
|
|
75
81
|
const id = translation.page_settings_id.belongs_to_key;
|
|
76
82
|
if (!collection) {
|
|
77
83
|
log(`PageSettings with id ${id} was found but is not associated with any collection.`, { id }, "warn");
|
|
78
|
-
return NextResponse.next();
|
|
84
|
+
return NextResponse$1.next();
|
|
79
85
|
}
|
|
80
|
-
const mappedLocale = ((
|
|
81
|
-
const idField = ((
|
|
86
|
+
const mappedLocale = ((_b = config.localeMap) == null ? void 0 : _b[directusLocale]) || directusLocale;
|
|
87
|
+
const idField = ((_c = config.collectionSettings[collection]) == null ? void 0 : _c.idField) || config.collectionSettings.default.idField;
|
|
82
88
|
log("Directus locale:", directusLocale);
|
|
83
89
|
log("Mapped locale:", mappedLocale);
|
|
84
90
|
log("Collection:", collection);
|
|
@@ -89,7 +95,7 @@ async function directusRouteRouter(request, config, NextResponse) {
|
|
|
89
95
|
const url = request.nextUrl.clone();
|
|
90
96
|
url.pathname = newPath;
|
|
91
97
|
log("Rewriting to URL:", url.toString());
|
|
92
|
-
return NextResponse.rewrite(url);
|
|
98
|
+
return NextResponse$1.rewrite(url);
|
|
93
99
|
}
|
|
94
100
|
export {
|
|
95
101
|
directusRouteRouter
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
require("
|
|
4
|
-
const
|
|
5
|
-
const logger = factoryLogger("[DirectusNext]");
|
|
3
|
+
const logger$1 = require("@okam/logger");
|
|
4
|
+
const logger = logger$1.createLogger("[DirectusNext]");
|
|
6
5
|
function log(msg, context, severity = "log") {
|
|
7
6
|
if (process.env.NODE_ENV === "development") {
|
|
8
7
|
logger.log(msg, severity, { context });
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import createLogger from "../../../stack/logger/src/lib/factoryLogger.mjs";
|
|
1
|
+
import { createLogger } from "@okam/logger";
|
|
3
2
|
const logger = createLogger("[DirectusNext]");
|
|
4
3
|
function log(msg, context, severity = "log") {
|
|
5
4
|
if (process.env.NODE_ENV === "development") {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@okam/directus-next",
|
|
3
3
|
"main": "./index.js",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.2.0",
|
|
5
5
|
"types": "./index.d.ts",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
@@ -32,6 +32,8 @@
|
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
+
"@okam/core-lib": "1.16.0",
|
|
36
|
+
"@okam/directus-node": "0.5.0",
|
|
35
37
|
"@okam/logger": "1.1.0",
|
|
36
38
|
"next": "^14.1.1",
|
|
37
39
|
"radashi": "^12.3.0",
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
require("@
|
|
4
|
-
const query = require("../../../directus-query/src/lib/query.js");
|
|
5
|
-
require("../../../directus-query/src/lib/request.js");
|
|
6
|
-
require("../../../directus-query/src/logger.js");
|
|
7
|
-
require("graphql-request");
|
|
8
|
-
require("../../../directus-query/src/lib/config.js");
|
|
3
|
+
const directusQuery = require("@okam/directus-query");
|
|
9
4
|
const radashi = require("radashi");
|
|
10
5
|
const logger = require("../logger.js");
|
|
11
6
|
const context = require("./context.js");
|
|
@@ -35,7 +30,7 @@ async function usePageSettings(props, itemKey) {
|
|
|
35
30
|
const { document } = props;
|
|
36
31
|
const key = itemKey ?? radashi.get(document, "definitions[0].selectionSet.selections[0].name.value");
|
|
37
32
|
logger.log("Querying new page settings", directusVariables);
|
|
38
|
-
const result = await
|
|
33
|
+
const result = await directusQuery.queryGql(document, directusVariables);
|
|
39
34
|
const items = result == null ? void 0 : result[key];
|
|
40
35
|
const currentItem = Array.isArray(items) ? items == null ? void 0 : items[0] : items;
|
|
41
36
|
const currentPageSettings = currentItem == null ? void 0 : currentItem.page_settings;
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import "@
|
|
2
|
-
import { queryGql } from "../../../directus-query/src/lib/query.mjs";
|
|
3
|
-
import "../../../directus-query/src/lib/request.mjs";
|
|
4
|
-
import "../../../directus-query/src/logger.mjs";
|
|
5
|
-
import "graphql-request";
|
|
6
|
-
import "../../../directus-query/src/lib/config.mjs";
|
|
1
|
+
import { queryGql } from "@okam/directus-query";
|
|
7
2
|
import { isEqual, get, invert } from "radashi";
|
|
8
3
|
import { log } from "../logger.mjs";
|
|
9
4
|
import { pageSettingsContext, pageSettingsVariablesContext } from "./context.mjs";
|
package/redirect/env.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const logger = require("../logger.js");
|
|
4
|
+
const defaultInternalUrl = "http://localhost:3000";
|
|
5
|
+
function getRedirectSecretDefault() {
|
|
6
|
+
return process.env.NEXT_API_REDIRECT_SECRET || "";
|
|
7
|
+
}
|
|
8
|
+
function getVercelUrl() {
|
|
9
|
+
const url = process.env.VERCEL_URL;
|
|
10
|
+
if (!url) return null;
|
|
11
|
+
return `https://${url}`;
|
|
12
|
+
}
|
|
13
|
+
function getApiRouteUrlDefault() {
|
|
14
|
+
const url = process.env.NEXT_MIDDLEWARE_REDIRECT_URL ?? getVercelUrl() ?? defaultInternalUrl;
|
|
15
|
+
if (URL.canParse(url)) return url;
|
|
16
|
+
logger.log(`Invalid URL ${url}. Falling back to default`, { url }, "warn");
|
|
17
|
+
return defaultInternalUrl;
|
|
18
|
+
}
|
|
19
|
+
exports.getApiRouteUrlDefault = getApiRouteUrlDefault;
|
|
20
|
+
exports.getRedirectSecretDefault = getRedirectSecretDefault;
|
package/redirect/env.mjs
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { log } from "../logger.mjs";
|
|
2
|
+
const defaultInternalUrl = "http://localhost:3000";
|
|
3
|
+
function getRedirectSecretDefault() {
|
|
4
|
+
return process.env.NEXT_API_REDIRECT_SECRET || "";
|
|
5
|
+
}
|
|
6
|
+
function getVercelUrl() {
|
|
7
|
+
const url = process.env.VERCEL_URL;
|
|
8
|
+
if (!url) return null;
|
|
9
|
+
return `https://${url}`;
|
|
10
|
+
}
|
|
11
|
+
function getApiRouteUrlDefault() {
|
|
12
|
+
const url = process.env.NEXT_MIDDLEWARE_REDIRECT_URL ?? getVercelUrl() ?? defaultInternalUrl;
|
|
13
|
+
if (URL.canParse(url)) return url;
|
|
14
|
+
log(`Invalid URL ${url}. Falling back to default`, { url }, "warn");
|
|
15
|
+
return defaultInternalUrl;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
getApiRouteUrlDefault,
|
|
19
|
+
getRedirectSecretDefault
|
|
20
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './env';
|
|
2
|
+
export { default as handleRedirectsRoute, parseRedirectParams } from './route';
|
|
3
|
+
export type { HandleRedirectOptions } from './interface';
|
|
4
|
+
export { getRedirectsRoute } from './utils/getRedirectsRoute';
|
|
5
|
+
export { handleRedirect } from './utils/handleRedirect';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface HandleRedirectOptions {
|
|
2
|
+
url: string;
|
|
3
|
+
/**
|
|
4
|
+
* @default process.env.NEXT_API_REDIRECT_SECRET
|
|
5
|
+
*/
|
|
6
|
+
getRedirectSecret?: () => string;
|
|
7
|
+
/**
|
|
8
|
+
* @default process.env.NEXT_REDIRECT_GRAPHQL_URL || process.env.NEXT_PUBLIC_GRAPHQL_URL
|
|
9
|
+
*/
|
|
10
|
+
getDirectusGraphqlUrl?: () => string;
|
|
11
|
+
/**
|
|
12
|
+
* @default process.env.NEXT_API_TOKEN_ADMIN
|
|
13
|
+
*/
|
|
14
|
+
getDirectusApiToken?: () => string;
|
|
15
|
+
getJsonError?: (data: any, status: number) => Response;
|
|
16
|
+
/**
|
|
17
|
+
* @default 2000
|
|
18
|
+
*/
|
|
19
|
+
limit?: number;
|
|
20
|
+
/**
|
|
21
|
+
* Gets spread into the second argument of fetch.
|
|
22
|
+
* Allows passing options like `cache` or `next.revalidate`
|
|
23
|
+
*/
|
|
24
|
+
init?: Omit<RequestInit, 'body' | 'method' | 'headers'>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HandleRedirectOptions } from './interface';
|
|
2
|
+
export declare function parseRedirectParams(url: string): {
|
|
3
|
+
secret: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Wrapper for `fetchRedirectsData` with secret validation
|
|
7
|
+
*/
|
|
8
|
+
export default function handleRedirectsRoute({ url, getRedirectSecret, getJsonError, getDirectusApiToken, getDirectusGraphqlUrl, limit, init, }: HandleRedirectOptions): Promise<Response | undefined>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const directusNode = require("@okam/directus-node");
|
|
4
|
+
const response = require("../response.js");
|
|
5
|
+
const env = require("./env.js");
|
|
6
|
+
function parseRedirectParams(url) {
|
|
7
|
+
const { searchParams } = new URL(url);
|
|
8
|
+
const secret = searchParams.get("secret") || "";
|
|
9
|
+
return { secret };
|
|
10
|
+
}
|
|
11
|
+
async function handleRedirectsRoute({
|
|
12
|
+
url,
|
|
13
|
+
getRedirectSecret = env.getRedirectSecretDefault,
|
|
14
|
+
getJsonError = response.getJsonErrorResponse,
|
|
15
|
+
getDirectusApiToken,
|
|
16
|
+
getDirectusGraphqlUrl,
|
|
17
|
+
limit,
|
|
18
|
+
init
|
|
19
|
+
}) {
|
|
20
|
+
const { secret } = parseRedirectParams(url);
|
|
21
|
+
if (secret !== getRedirectSecret()) {
|
|
22
|
+
return getJsonError({ error: "Invalid argument" }, 401);
|
|
23
|
+
}
|
|
24
|
+
const graphqlEndpoint = getDirectusGraphqlUrl == null ? void 0 : getDirectusGraphqlUrl();
|
|
25
|
+
const graphqlApiKey = getDirectusApiToken == null ? void 0 : getDirectusApiToken();
|
|
26
|
+
const { redirects, rewrites } = await directusNode.fetchRedirectsData({ graphqlEndpoint, graphqlApiKey, limit }, init);
|
|
27
|
+
return new Response(JSON.stringify({ redirects, rewrites }), { status: 200 });
|
|
28
|
+
}
|
|
29
|
+
exports.default = handleRedirectsRoute;
|
|
30
|
+
exports.parseRedirectParams = parseRedirectParams;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { fetchRedirectsData } from "@okam/directus-node";
|
|
2
|
+
import { getJsonErrorResponse } from "../response.mjs";
|
|
3
|
+
import { getRedirectSecretDefault } from "./env.mjs";
|
|
4
|
+
function parseRedirectParams(url) {
|
|
5
|
+
const { searchParams } = new URL(url);
|
|
6
|
+
const secret = searchParams.get("secret") || "";
|
|
7
|
+
return { secret };
|
|
8
|
+
}
|
|
9
|
+
async function handleRedirectsRoute({
|
|
10
|
+
url,
|
|
11
|
+
getRedirectSecret = getRedirectSecretDefault,
|
|
12
|
+
getJsonError = getJsonErrorResponse,
|
|
13
|
+
getDirectusApiToken,
|
|
14
|
+
getDirectusGraphqlUrl,
|
|
15
|
+
limit,
|
|
16
|
+
init
|
|
17
|
+
}) {
|
|
18
|
+
const { secret } = parseRedirectParams(url);
|
|
19
|
+
if (secret !== getRedirectSecret()) {
|
|
20
|
+
return getJsonError({ error: "Invalid argument" }, 401);
|
|
21
|
+
}
|
|
22
|
+
const graphqlEndpoint = getDirectusGraphqlUrl == null ? void 0 : getDirectusGraphqlUrl();
|
|
23
|
+
const graphqlApiKey = getDirectusApiToken == null ? void 0 : getDirectusApiToken();
|
|
24
|
+
const { redirects, rewrites } = await fetchRedirectsData({ graphqlEndpoint, graphqlApiKey, limit }, init);
|
|
25
|
+
return new Response(JSON.stringify({ redirects, rewrites }), { status: 200 });
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
handleRedirectsRoute as default,
|
|
29
|
+
parseRedirectParams
|
|
30
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TFetchRedirectsResponse } from '@okam/directus-node';
|
|
2
|
+
import type { DirectusRouteRedirectsModule } from '../../types/directusRouteConfig';
|
|
3
|
+
/**
|
|
4
|
+
* Gets a response from `options.apiRoute`
|
|
5
|
+
* @param {DirectusRouteRedirectsModule} options
|
|
6
|
+
* @returns {Promise<TFetchRedirectsResponse>}
|
|
7
|
+
*/
|
|
8
|
+
export declare function getRedirectsRoute({ apiRoute, getApiRouteUrl, getRedirectSecret, }?: DirectusRouteRedirectsModule): Promise<TFetchRedirectsResponse>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const logger = require("../../logger.js");
|
|
4
|
+
const env = require("../env.js");
|
|
5
|
+
const defaultApiRoute = "/api/redirect";
|
|
6
|
+
async function getRedirectsRoute({
|
|
7
|
+
apiRoute = defaultApiRoute,
|
|
8
|
+
getApiRouteUrl = env.getApiRouteUrlDefault,
|
|
9
|
+
getRedirectSecret = env.getRedirectSecretDefault
|
|
10
|
+
} = {}) {
|
|
11
|
+
const secret = getRedirectSecret();
|
|
12
|
+
try {
|
|
13
|
+
const url = new URL(apiRoute, getApiRouteUrl());
|
|
14
|
+
url.searchParams.set("secret", encodeURIComponent(secret));
|
|
15
|
+
const response = await fetch(url);
|
|
16
|
+
if (!response.ok) {
|
|
17
|
+
logger.log(`${apiRoute} not ok. Returned`, { status: response.status }, "error");
|
|
18
|
+
return { redirects: [], rewrites: [] };
|
|
19
|
+
}
|
|
20
|
+
const data = await response.json();
|
|
21
|
+
return data;
|
|
22
|
+
} catch (error) {
|
|
23
|
+
logger.log(`Error fetching redirects from ${apiRoute}.`, { error }, "error");
|
|
24
|
+
return { redirects: [], rewrites: [] };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.getRedirectsRoute = getRedirectsRoute;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { log } from "../../logger.mjs";
|
|
2
|
+
import { getApiRouteUrlDefault, getRedirectSecretDefault } from "../env.mjs";
|
|
3
|
+
const defaultApiRoute = "/api/redirect";
|
|
4
|
+
async function getRedirectsRoute({
|
|
5
|
+
apiRoute = defaultApiRoute,
|
|
6
|
+
getApiRouteUrl = getApiRouteUrlDefault,
|
|
7
|
+
getRedirectSecret = getRedirectSecretDefault
|
|
8
|
+
} = {}) {
|
|
9
|
+
const secret = getRedirectSecret();
|
|
10
|
+
try {
|
|
11
|
+
const url = new URL(apiRoute, getApiRouteUrl());
|
|
12
|
+
url.searchParams.set("secret", encodeURIComponent(secret));
|
|
13
|
+
const response = await fetch(url);
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
log(`${apiRoute} not ok. Returned`, { status: response.status }, "error");
|
|
16
|
+
return { redirects: [], rewrites: [] };
|
|
17
|
+
}
|
|
18
|
+
const data = await response.json();
|
|
19
|
+
return data;
|
|
20
|
+
} catch (error) {
|
|
21
|
+
log(`Error fetching redirects from ${apiRoute}.`, { error }, "error");
|
|
22
|
+
return { redirects: [], rewrites: [] };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
getRedirectsRoute
|
|
27
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NextRequest } from 'next/server';
|
|
2
|
+
import { NextResponse } from 'next/server';
|
|
3
|
+
import type { DirectusRouteRedirectsModule } from '../../types/directusRouteConfig';
|
|
4
|
+
/**
|
|
5
|
+
* Handles next redirection using directus redirects
|
|
6
|
+
*/
|
|
7
|
+
export declare function handleRedirect(request: NextRequest, options?: DirectusRouteRedirectsModule): Promise<NextResponse<unknown> | null>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const coreLib = require("@okam/core-lib");
|
|
4
|
+
const server = require("next/server");
|
|
5
|
+
const radashi = require("radashi");
|
|
6
|
+
const logger = require("../../logger.js");
|
|
7
|
+
const getRedirectsRoute = require("./getRedirectsRoute.js");
|
|
8
|
+
function splitDestination(destination) {
|
|
9
|
+
const [pathname, search] = destination.split("?");
|
|
10
|
+
if (!search) {
|
|
11
|
+
return [pathname];
|
|
12
|
+
}
|
|
13
|
+
return [pathname, `?${search}`];
|
|
14
|
+
}
|
|
15
|
+
function validateExternalRedirect(redirect) {
|
|
16
|
+
if (!URL.canParse(redirect.destination)) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return redirect.destination;
|
|
20
|
+
}
|
|
21
|
+
async function handleRedirect(request, options = {}) {
|
|
22
|
+
const url = request.nextUrl.clone();
|
|
23
|
+
const { pathname } = request.nextUrl;
|
|
24
|
+
const normalizedPathname = coreLib.normalizePath(pathname);
|
|
25
|
+
const { redirects, rewrites } = await getRedirectsRoute.getRedirectsRoute(options);
|
|
26
|
+
const redirect = redirects.find(({ source }) => source === normalizedPathname);
|
|
27
|
+
const rewrite = rewrites.find(({ source }) => source === normalizedPathname);
|
|
28
|
+
const type = redirect ? "redirect" : "rewrite";
|
|
29
|
+
const reroute = redirect ?? rewrite;
|
|
30
|
+
if (!reroute) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const { permanent } = reroute;
|
|
34
|
+
const status = permanent ? 308 : 307;
|
|
35
|
+
const externalRedirect = validateExternalRedirect(reroute);
|
|
36
|
+
if (externalRedirect) {
|
|
37
|
+
logger.log(`External ${type} found`, { [type]: externalRedirect, permanent });
|
|
38
|
+
return server.NextResponse.redirect(externalRedirect, { status });
|
|
39
|
+
}
|
|
40
|
+
logger.log(`${radashi.capitalize(type)} found`, { [type]: reroute, permanent });
|
|
41
|
+
const { destination } = reroute;
|
|
42
|
+
const [destinationPathname, search] = splitDestination(destination);
|
|
43
|
+
if (search) url.search = search;
|
|
44
|
+
url.pathname = destinationPathname;
|
|
45
|
+
logger.log(`${radashi.capitalize(type)}ing to ${url.toString()} with status ${status}`);
|
|
46
|
+
return server.NextResponse[type](url, { status });
|
|
47
|
+
}
|
|
48
|
+
exports.handleRedirect = handleRedirect;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { normalizePath } from "@okam/core-lib";
|
|
2
|
+
import { NextResponse } from "next/server";
|
|
3
|
+
import { capitalize } from "radashi";
|
|
4
|
+
import { log } from "../../logger.mjs";
|
|
5
|
+
import { getRedirectsRoute } from "./getRedirectsRoute.mjs";
|
|
6
|
+
function splitDestination(destination) {
|
|
7
|
+
const [pathname, search] = destination.split("?");
|
|
8
|
+
if (!search) {
|
|
9
|
+
return [pathname];
|
|
10
|
+
}
|
|
11
|
+
return [pathname, `?${search}`];
|
|
12
|
+
}
|
|
13
|
+
function validateExternalRedirect(redirect) {
|
|
14
|
+
if (!URL.canParse(redirect.destination)) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return redirect.destination;
|
|
18
|
+
}
|
|
19
|
+
async function handleRedirect(request, options = {}) {
|
|
20
|
+
const url = request.nextUrl.clone();
|
|
21
|
+
const { pathname } = request.nextUrl;
|
|
22
|
+
const normalizedPathname = normalizePath(pathname);
|
|
23
|
+
const { redirects, rewrites } = await getRedirectsRoute(options);
|
|
24
|
+
const redirect = redirects.find(({ source }) => source === normalizedPathname);
|
|
25
|
+
const rewrite = rewrites.find(({ source }) => source === normalizedPathname);
|
|
26
|
+
const type = redirect ? "redirect" : "rewrite";
|
|
27
|
+
const reroute = redirect ?? rewrite;
|
|
28
|
+
if (!reroute) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const { permanent } = reroute;
|
|
32
|
+
const status = permanent ? 308 : 307;
|
|
33
|
+
const externalRedirect = validateExternalRedirect(reroute);
|
|
34
|
+
if (externalRedirect) {
|
|
35
|
+
log(`External ${type} found`, { [type]: externalRedirect, permanent });
|
|
36
|
+
return NextResponse.redirect(externalRedirect, { status });
|
|
37
|
+
}
|
|
38
|
+
log(`${capitalize(type)} found`, { [type]: reroute, permanent });
|
|
39
|
+
const { destination } = reroute;
|
|
40
|
+
const [destinationPathname, search] = splitDestination(destination);
|
|
41
|
+
if (search) url.search = search;
|
|
42
|
+
url.pathname = destinationPathname;
|
|
43
|
+
log(`${capitalize(type)}ing to ${url.toString()} with status ${status}`);
|
|
44
|
+
return NextResponse[type](url, { status });
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
handleRedirect
|
|
48
|
+
};
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
export interface DirectusRouteRedirectsModule {
|
|
2
|
+
/**
|
|
3
|
+
* @default process.env.NEXT_API_REDIRECT_SECRET
|
|
4
|
+
*/
|
|
5
|
+
getRedirectSecret?: () => string;
|
|
6
|
+
/**
|
|
7
|
+
* @default process.env.NEXT_MIDDLEWARE_REDIRECT_URL ?? `https://${process.env.VERCEL_URL}` ?? 'http://localhost:3000'
|
|
8
|
+
*/
|
|
9
|
+
getApiRouteUrl?: () => string;
|
|
10
|
+
/**
|
|
11
|
+
* @default /api/redirects
|
|
12
|
+
*/
|
|
13
|
+
apiRoute?: string;
|
|
14
|
+
}
|
|
1
15
|
export interface DirectusRouteConfig {
|
|
2
16
|
localeMap?: Record<string, string>;
|
|
3
17
|
collectionSettings: {
|
|
@@ -9,4 +23,7 @@ export interface DirectusRouteConfig {
|
|
|
9
23
|
idField: string;
|
|
10
24
|
};
|
|
11
25
|
};
|
|
26
|
+
modules?: {
|
|
27
|
+
redirects?: DirectusRouteRedirectsModule;
|
|
28
|
+
};
|
|
12
29
|
}
|
package/types/index.d.ts
ADDED
package/types/next.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface MinimalNextUrl extends URL {
|
|
2
|
+
clone: () => MinimalNextUrl;
|
|
3
|
+
}
|
|
4
|
+
export interface MinimalNextRequest {
|
|
5
|
+
nextUrl: MinimalNextUrl;
|
|
6
|
+
}
|
|
7
|
+
export interface MinimalNextResponse {
|
|
8
|
+
next: () => MinimalNextResponse;
|
|
9
|
+
notFound: () => MinimalNextResponse;
|
|
10
|
+
rewrite: (url: MinimalNextUrl | URL | string, options?: ResponseInit) => MinimalNextResponse;
|
|
11
|
+
redirect: (url: MinimalNextUrl | URL | string, options?: ResponseInit) => MinimalNextResponse;
|
|
12
|
+
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { getPathFromRoute, default as default2, parseParams } from "./draft/route.mjs";
|
|
2
|
-
import { getDraftSecretDefault } from "./draft/env.mjs";
|
|
3
|
-
import { logger } from "./logger.mjs";
|
|
4
|
-
import { directusRouteRouter } from "./lib/directusRouteRouter.mjs";
|
|
5
|
-
import { getJsonErrorResponse } from "./response.mjs";
|
|
6
|
-
export {
|
|
7
|
-
logger as DirectusNextLogger,
|
|
8
|
-
directusRouteRouter,
|
|
9
|
-
getDraftSecretDefault,
|
|
10
|
-
getJsonErrorResponse,
|
|
11
|
-
getPathFromRoute,
|
|
12
|
-
default2 as handleDraftRoute,
|
|
13
|
-
parseParams
|
|
14
|
-
};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
require("radashi");
|
|
4
|
-
const request = require("./request.js");
|
|
5
|
-
function queryGql(document, queryKey, client = request.graphqlRequestClient) {
|
|
6
|
-
return client.request(document, {
|
|
7
|
-
...queryKey
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
exports.queryGql = queryGql;
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const reactQuery = require("@tanstack/react-query");
|
|
4
|
-
const graphqlRequest = require("graphql-request");
|
|
5
|
-
const logger = require("../logger.js");
|
|
6
|
-
const GRAPHQL_ENDPOINT_PUBLIC = process.env.NEXT_PUBLIC_GRAPHQL_URL;
|
|
7
|
-
const GRAPHQL_ENDPOINT_SERVER = process.env.NEXT_SERVER_GRAPHQL_URL;
|
|
8
|
-
const GRAPHQL_ENDPOINT_ADMIN = process.env.NEXT_GRAPHQL_URL_ADMIN;
|
|
9
|
-
const AUTH_TOKEN = process.env.NEXT_PUBLIC_API_TOKEN ?? "";
|
|
10
|
-
const AUTH_TOKEN_ADMIN = process.env.NEXT_PUBLIC_API_TOKEN;
|
|
11
|
-
const graphqlRequestClient = new graphqlRequest.GraphQLClient(GRAPHQL_ENDPOINT_SERVER || GRAPHQL_ENDPOINT_PUBLIC, {
|
|
12
|
-
credentials: "include",
|
|
13
|
-
mode: "cors",
|
|
14
|
-
fetch,
|
|
15
|
-
headers: {
|
|
16
|
-
Authorization: `Bearer ${AUTH_TOKEN}`
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
new graphqlRequest.GraphQLClient(GRAPHQL_ENDPOINT_ADMIN, {
|
|
20
|
-
credentials: "include",
|
|
21
|
-
mode: "cors",
|
|
22
|
-
fetch,
|
|
23
|
-
headers: {
|
|
24
|
-
Authorization: `Bearer ${AUTH_TOKEN_ADMIN}`
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
new reactQuery.QueryClient({
|
|
28
|
-
queryCache: new reactQuery.QueryCache({
|
|
29
|
-
onError: (error) => {
|
|
30
|
-
logger.logger.log("QueryClient Error", "error", { error });
|
|
31
|
-
}
|
|
32
|
-
}),
|
|
33
|
-
defaultOptions: {
|
|
34
|
-
queries: {
|
|
35
|
-
staleTime: 5 * 1e3
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
exports.default = graphqlRequestClient;
|
|
40
|
-
exports.graphqlRequestClient = graphqlRequestClient;
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { QueryClient, QueryCache } from "@tanstack/react-query";
|
|
2
|
-
import { GraphQLClient } from "graphql-request";
|
|
3
|
-
import { logger } from "../logger.mjs";
|
|
4
|
-
const GRAPHQL_ENDPOINT_PUBLIC = process.env.NEXT_PUBLIC_GRAPHQL_URL;
|
|
5
|
-
const GRAPHQL_ENDPOINT_SERVER = process.env.NEXT_SERVER_GRAPHQL_URL;
|
|
6
|
-
const GRAPHQL_ENDPOINT_ADMIN = process.env.NEXT_GRAPHQL_URL_ADMIN;
|
|
7
|
-
const AUTH_TOKEN = process.env.NEXT_PUBLIC_API_TOKEN ?? "";
|
|
8
|
-
const AUTH_TOKEN_ADMIN = process.env.NEXT_PUBLIC_API_TOKEN;
|
|
9
|
-
const graphqlRequestClient = new GraphQLClient(GRAPHQL_ENDPOINT_SERVER || GRAPHQL_ENDPOINT_PUBLIC, {
|
|
10
|
-
credentials: "include",
|
|
11
|
-
mode: "cors",
|
|
12
|
-
fetch,
|
|
13
|
-
headers: {
|
|
14
|
-
Authorization: `Bearer ${AUTH_TOKEN}`
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
new GraphQLClient(GRAPHQL_ENDPOINT_ADMIN, {
|
|
18
|
-
credentials: "include",
|
|
19
|
-
mode: "cors",
|
|
20
|
-
fetch,
|
|
21
|
-
headers: {
|
|
22
|
-
Authorization: `Bearer ${AUTH_TOKEN_ADMIN}`
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
new QueryClient({
|
|
26
|
-
queryCache: new QueryCache({
|
|
27
|
-
onError: (error) => {
|
|
28
|
-
logger.log("QueryClient Error", "error", { error });
|
|
29
|
-
}
|
|
30
|
-
}),
|
|
31
|
-
defaultOptions: {
|
|
32
|
-
queries: {
|
|
33
|
-
staleTime: 5 * 1e3
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
export {
|
|
38
|
-
graphqlRequestClient as default,
|
|
39
|
-
graphqlRequestClient
|
|
40
|
-
};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
require("../../../stack/logger/src/lib/logger.js");
|
|
4
|
-
const factoryLogger = require("../../../stack/logger/src/lib/factoryLogger.js");
|
|
5
|
-
const logger = factoryLogger("[DirectusQuery]");
|
|
6
|
-
exports.logger = logger;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const logger = require("./logger.js");
|
|
3
|
-
const createLogger = (name, logger$1, suppressConsole = false) => {
|
|
4
|
-
const log = new logger.Logger(name, logger$1, suppressConsole);
|
|
5
|
-
log.log(`Logger initialized`, "info");
|
|
6
|
-
return log;
|
|
7
|
-
};
|
|
8
|
-
module.exports = createLogger;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Logger } from "./logger.mjs";
|
|
2
|
-
const createLogger = (name, logger, suppressConsole = false) => {
|
|
3
|
-
const log = new Logger(name, logger, suppressConsole);
|
|
4
|
-
log.log(`Logger initialized`, "info");
|
|
5
|
-
return log;
|
|
6
|
-
};
|
|
7
|
-
export {
|
|
8
|
-
createLogger as default
|
|
9
|
-
};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
class Logger {
|
|
4
|
-
constructor(nameSpace, logger2, suppressConsole) {
|
|
5
|
-
this.nameSpace = "[STACK]";
|
|
6
|
-
this.suppressConsole = false;
|
|
7
|
-
this.env = process.env["NODE_ENV"];
|
|
8
|
-
this.nameSpace = nameSpace ?? this.nameSpace;
|
|
9
|
-
this.suppressConsole = suppressConsole ?? this.suppressConsole;
|
|
10
|
-
this.logger = logger2 ?? this.internalLogger;
|
|
11
|
-
}
|
|
12
|
-
internalLogger(message, severity, context) {
|
|
13
|
-
if (this.env === "production") {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
console[severity || "log"](`${this.nameSpace} ${message}`.trimStart(), context ?? "");
|
|
17
|
-
}
|
|
18
|
-
setLogger(logger2) {
|
|
19
|
-
this.logger = (message, severity, context) => {
|
|
20
|
-
if (this.suppressConsole) {
|
|
21
|
-
this.internalLogger(message, severity, context);
|
|
22
|
-
}
|
|
23
|
-
logger2(message, severity, context);
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
static getInstance() {
|
|
27
|
-
if (!Logger.instance) {
|
|
28
|
-
Logger.instance = new Logger();
|
|
29
|
-
}
|
|
30
|
-
return Logger.instance;
|
|
31
|
-
}
|
|
32
|
-
log(message, severity, context) {
|
|
33
|
-
this.logger(message, severity, context);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
Logger.getInstance();
|
|
37
|
-
exports.Logger = Logger;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
class Logger {
|
|
2
|
-
constructor(nameSpace, logger2, suppressConsole) {
|
|
3
|
-
this.nameSpace = "[STACK]";
|
|
4
|
-
this.suppressConsole = false;
|
|
5
|
-
this.env = process.env["NODE_ENV"];
|
|
6
|
-
this.nameSpace = nameSpace ?? this.nameSpace;
|
|
7
|
-
this.suppressConsole = suppressConsole ?? this.suppressConsole;
|
|
8
|
-
this.logger = logger2 ?? this.internalLogger;
|
|
9
|
-
}
|
|
10
|
-
internalLogger(message, severity, context) {
|
|
11
|
-
if (this.env === "production") {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
console[severity || "log"](`${this.nameSpace} ${message}`.trimStart(), context ?? "");
|
|
15
|
-
}
|
|
16
|
-
setLogger(logger2) {
|
|
17
|
-
this.logger = (message, severity, context) => {
|
|
18
|
-
if (this.suppressConsole) {
|
|
19
|
-
this.internalLogger(message, severity, context);
|
|
20
|
-
}
|
|
21
|
-
logger2(message, severity, context);
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
static getInstance() {
|
|
25
|
-
if (!Logger.instance) {
|
|
26
|
-
Logger.instance = new Logger();
|
|
27
|
-
}
|
|
28
|
-
return Logger.instance;
|
|
29
|
-
}
|
|
30
|
-
log(message, severity, context) {
|
|
31
|
-
this.logger(message, severity, context);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
Logger.getInstance();
|
|
35
|
-
export {
|
|
36
|
-
Logger
|
|
37
|
-
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|