@uniai-fe/util-next 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +27 -0
- package/README.md +22 -0
- package/dist/index.cjs +43 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +36 -0
- package/dist/index.mjs.map +1 -0
- package/dist/infra/index.cjs +39 -0
- package/dist/infra/index.cjs.map +1 -0
- package/dist/infra/index.d.cts +27 -0
- package/dist/infra/index.d.ts +27 -0
- package/dist/infra/index.mjs +35 -0
- package/dist/infra/index.mjs.map +1 -0
- package/dist/server/index.cjs +69 -0
- package/dist/server/index.cjs.map +1 -0
- package/dist/server/index.d.cts +26 -0
- package/dist/server/index.d.ts +26 -0
- package/dist/server/index.mjs +46 -0
- package/dist/server/index.mjs.map +1 -0
- package/package.json +64 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 UNIAI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
This project includes third-party software governed by additional licenses,
|
|
26
|
+
including Apache License 2.0. Refer to `THIRD_PARTY_NOTICES.md` for the full
|
|
27
|
+
text of those notices and any required attributions.
|
package/README.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# util / next
|
|
2
|
+
|
|
3
|
+
Next.js 전용 API 도우미 모음입니다.
|
|
4
|
+
|
|
5
|
+
- `createNextApiClient`로 `@uniai-fe/util-functions`의 공용 API 유틸에 환경 설정을 주입합니다.
|
|
6
|
+
- `setTokenRequestHeaders`, `setDebugResponseHeaders` 등 서버 라우트에서 반복되는 패턴을 제공합니다.
|
|
7
|
+
- `api-infra.config.ts`처럼 프로젝트별 환경 구성을 받아 도메인을 해석하도록 설계되어 있습니다.
|
|
8
|
+
|
|
9
|
+
## 사용 방법
|
|
10
|
+
|
|
11
|
+
1. **환경 해석기 구성**
|
|
12
|
+
- 서비스 루트(예: `apps/factory/src/lib/server/api-infra.ts`)에서 `NextApiConfig`를 선언하고 `process.env`에 있는 API 베이스 URL을 `env` 맵으로 전달합니다.
|
|
13
|
+
- `createNextApiClient(config)`를 호출한 뒤 `generateBackendQueryUrl_GET`, `fetchBackendQuery`, `getQueryString` 등을 구조 분해하여 프로젝트 전역에서 재사용합니다.
|
|
14
|
+
2. **로거 · 도메인 유틸 노출**
|
|
15
|
+
- `apiClient.logger`를 그대로 export하면 `nextAPILog`처럼 어느 라우트에서도 동일한 로깅 포맷을 유지할 수 있습니다.
|
|
16
|
+
- `resolveNextDomainSources(infra, config)`를 감싼 `resolveInfraDomain` 헬퍼를 만들어 두면 env 접근 없이도 도메인 문자열을 얻을 수 있습니다.
|
|
17
|
+
3. **Next API 라우트에서 사용**
|
|
18
|
+
- `/app/api` 경로의 라우트에서 방금 만든 헬퍼를 import 하여 `generateBackendQueryUrl_GET`로 URL을 계산하고, 응답 시 `setDebugResponseHeaders`에 `infra`와 `queryUrl`을 넘겨 디버깅 헤더를 자동으로 채웁니다.
|
|
19
|
+
- POST/DELETE 요청이 필요한 경우에는 헬퍼에 정의한 `fetchWithBody`나 `fetchBackendQuery`를 호출해 동일한 로깅/대체 응답 로직을 공유하세요.
|
|
20
|
+
4. **추가 서버 유틸 통합**
|
|
21
|
+
- `setTokenRequestHeaders`를 사용하면 Server Action·Route Handler에서 Authorization 헤더를 안전하게 추출할 수 있습니다.
|
|
22
|
+
- 필요 시 `resolveNextDomainSources` 반환값의 `hasEnv`, `envKey`를 활용해 런타임 환경 구성 상태를 점검하거나 헤더에 노출할 수 있습니다.
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var api = require('@uniai-fe/util-functions/api');
|
|
4
|
+
|
|
5
|
+
// src/infra/index.ts
|
|
6
|
+
var ENV_KEY_MAP = {
|
|
7
|
+
ai: "AI_API_BASE",
|
|
8
|
+
db: "DB_API_BASE",
|
|
9
|
+
uniai: "UNIAI_API_BASE"
|
|
10
|
+
};
|
|
11
|
+
var resolveNextDomainSources = (infra, config) => {
|
|
12
|
+
const envKey = ENV_KEY_MAP[infra];
|
|
13
|
+
const configValue = config?.env?.[infra];
|
|
14
|
+
const envValue = typeof envKey === "string" && envKey in process.env ? process.env[envKey] : void 0;
|
|
15
|
+
const domain = configValue ?? envValue ?? (typeof infra === "string" && infra.length > 0 ? infra : "");
|
|
16
|
+
return {
|
|
17
|
+
domain,
|
|
18
|
+
envKey,
|
|
19
|
+
envValue: envValue ?? void 0,
|
|
20
|
+
configValue,
|
|
21
|
+
hasEnv: Boolean(configValue ?? envValue)
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
var createNextDomainResolver = (config) => {
|
|
25
|
+
return (infra) => resolveNextDomainSources(infra, config).domain;
|
|
26
|
+
};
|
|
27
|
+
var createNextApiClient = (config, options) => {
|
|
28
|
+
const resolveDomain = createNextDomainResolver(config);
|
|
29
|
+
return api.createBackendApiClient({
|
|
30
|
+
resolveDomain,
|
|
31
|
+
logger: options?.logger ?? api.defaultApiLogger
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
Object.defineProperty(exports, "defaultApiLogger", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function () { return api.defaultApiLogger; }
|
|
38
|
+
});
|
|
39
|
+
exports.createNextApiClient = createNextApiClient;
|
|
40
|
+
exports.createNextDomainResolver = createNextDomainResolver;
|
|
41
|
+
exports.resolveNextDomainSources = resolveNextDomainSources;
|
|
42
|
+
//# sourceMappingURL=index.cjs.map
|
|
43
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/infra/index.ts"],"names":["createBackendApiClient","defaultApiLogger"],"mappings":";;;;;AAaA,IAAM,WAAA,GAAiD;AAAA,EACrD,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,KAAA,EAAO;AACT,CAAA;AAIO,IAAM,wBAAA,GAA2B,CACtC,KAAA,EACA,MAAA,KAC4B;AAC5B,EAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,EAAA,MAAM,WAAA,GAAc,MAAA,EAAQ,GAAA,GAAM,KAAK,CAAA;AACvC,EAAA,MAAM,QAAA,GACJ,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,IAAU,QAAQ,GAAA,GAC5C,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,GAClB,MAAA;AAEN,EAAA,MAAM,MAAA,GACJ,eACA,QAAA,KACC,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,EAAA,CAAA;AAE3D,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAU,QAAA,IAAY,MAAA;AAAA,IACtB,WAAA;AAAA,IACA,MAAA,EAAQ,OAAA,CAAQ,WAAA,IAAe,QAAQ;AAAA,GACzC;AACF;AAEO,IAAM,wBAAA,GAA2B,CACtC,MAAA,KACmB;AACnB,EAAA,OAAO,CAAC,KAAA,KAAoB,wBAAA,CAAyB,KAAA,EAAO,MAAM,CAAA,CAAE,MAAA;AACtE;AAEO,IAAM,mBAAA,GAAsB,CACjC,MAAA,EACA,OAAA,KACG;AACH,EAAA,MAAM,aAAA,GAAgB,yBAAyB,MAAM,CAAA;AACrD,EAAA,OAAOA,0BAAA,CAAuB;AAAA,IAC5B,aAAA;AAAA,IACA,MAAA,EAAQ,SAAS,MAAA,IAAUC;AAAA,GAC5B,CAAA;AACH","file":"index.cjs","sourcesContent":["import {\n createBackendApiClient,\n defaultApiLogger,\n type ApiLogger,\n type DomainResolver,\n type InfraKey,\n} from \"@uniai-fe/util-functions/api\";\nimport type {\n NextApiConfig,\n NextApiDomainMap,\n ResolveNextDomainResult,\n} from \"./types\";\n\nconst ENV_KEY_MAP: Partial<Record<InfraKey, string>> = {\n ai: \"AI_API_BASE\",\n db: \"DB_API_BASE\",\n uniai: \"UNIAI_API_BASE\",\n};\n\nexport type { NextApiConfig, NextApiDomainMap, ResolveNextDomainResult };\n\nexport const resolveNextDomainSources = (\n infra: InfraKey,\n config?: NextApiConfig,\n): ResolveNextDomainResult => {\n const envKey = ENV_KEY_MAP[infra];\n const configValue = config?.env?.[infra];\n const envValue =\n typeof envKey === \"string\" && envKey in process.env\n ? process.env[envKey]\n : undefined;\n\n const domain =\n configValue ??\n envValue ??\n (typeof infra === \"string\" && infra.length > 0 ? infra : \"\");\n\n return {\n domain,\n envKey,\n envValue: envValue ?? undefined,\n configValue,\n hasEnv: Boolean(configValue ?? envValue),\n };\n};\n\nexport const createNextDomainResolver = (\n config?: NextApiConfig,\n): DomainResolver => {\n return (infra: InfraKey) => resolveNextDomainSources(infra, config).domain;\n};\n\nexport const createNextApiClient = (\n config?: NextApiConfig,\n options?: { logger?: ApiLogger },\n) => {\n const resolveDomain = createNextDomainResolver(config);\n return createBackendApiClient({\n resolveDomain,\n logger: options?.logger ?? defaultApiLogger,\n });\n};\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { NextApiConfig, NextApiDomainMap, ResolveNextDomainResult, createNextApiClient, createNextDomainResolver, resolveNextDomainSources } from './infra/index.cjs';
|
|
2
|
+
export { ApiLogger, CommonPostResponseType, InfraKey, defaultApiLogger } from '@uniai-fe/util-functions/api';
|
package/dist/index.d.ts
ADDED
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { createBackendApiClient, defaultApiLogger } from '@uniai-fe/util-functions/api';
|
|
2
|
+
export { defaultApiLogger } from '@uniai-fe/util-functions/api';
|
|
3
|
+
|
|
4
|
+
// src/infra/index.ts
|
|
5
|
+
var ENV_KEY_MAP = {
|
|
6
|
+
ai: "AI_API_BASE",
|
|
7
|
+
db: "DB_API_BASE",
|
|
8
|
+
uniai: "UNIAI_API_BASE"
|
|
9
|
+
};
|
|
10
|
+
var resolveNextDomainSources = (infra, config) => {
|
|
11
|
+
const envKey = ENV_KEY_MAP[infra];
|
|
12
|
+
const configValue = config?.env?.[infra];
|
|
13
|
+
const envValue = typeof envKey === "string" && envKey in process.env ? process.env[envKey] : void 0;
|
|
14
|
+
const domain = configValue ?? envValue ?? (typeof infra === "string" && infra.length > 0 ? infra : "");
|
|
15
|
+
return {
|
|
16
|
+
domain,
|
|
17
|
+
envKey,
|
|
18
|
+
envValue: envValue ?? void 0,
|
|
19
|
+
configValue,
|
|
20
|
+
hasEnv: Boolean(configValue ?? envValue)
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
var createNextDomainResolver = (config) => {
|
|
24
|
+
return (infra) => resolveNextDomainSources(infra, config).domain;
|
|
25
|
+
};
|
|
26
|
+
var createNextApiClient = (config, options) => {
|
|
27
|
+
const resolveDomain = createNextDomainResolver(config);
|
|
28
|
+
return createBackendApiClient({
|
|
29
|
+
resolveDomain,
|
|
30
|
+
logger: options?.logger ?? defaultApiLogger
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export { createNextApiClient, createNextDomainResolver, resolveNextDomainSources };
|
|
35
|
+
//# sourceMappingURL=index.mjs.map
|
|
36
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/infra/index.ts"],"names":[],"mappings":";;;;AAaA,IAAM,WAAA,GAAiD;AAAA,EACrD,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,KAAA,EAAO;AACT,CAAA;AAIO,IAAM,wBAAA,GAA2B,CACtC,KAAA,EACA,MAAA,KAC4B;AAC5B,EAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,EAAA,MAAM,WAAA,GAAc,MAAA,EAAQ,GAAA,GAAM,KAAK,CAAA;AACvC,EAAA,MAAM,QAAA,GACJ,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,IAAU,QAAQ,GAAA,GAC5C,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,GAClB,MAAA;AAEN,EAAA,MAAM,MAAA,GACJ,eACA,QAAA,KACC,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,EAAA,CAAA;AAE3D,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAU,QAAA,IAAY,MAAA;AAAA,IACtB,WAAA;AAAA,IACA,MAAA,EAAQ,OAAA,CAAQ,WAAA,IAAe,QAAQ;AAAA,GACzC;AACF;AAEO,IAAM,wBAAA,GAA2B,CACtC,MAAA,KACmB;AACnB,EAAA,OAAO,CAAC,KAAA,KAAoB,wBAAA,CAAyB,KAAA,EAAO,MAAM,CAAA,CAAE,MAAA;AACtE;AAEO,IAAM,mBAAA,GAAsB,CACjC,MAAA,EACA,OAAA,KACG;AACH,EAAA,MAAM,aAAA,GAAgB,yBAAyB,MAAM,CAAA;AACrD,EAAA,OAAO,sBAAA,CAAuB;AAAA,IAC5B,aAAA;AAAA,IACA,MAAA,EAAQ,SAAS,MAAA,IAAU;AAAA,GAC5B,CAAA;AACH","file":"index.mjs","sourcesContent":["import {\n createBackendApiClient,\n defaultApiLogger,\n type ApiLogger,\n type DomainResolver,\n type InfraKey,\n} from \"@uniai-fe/util-functions/api\";\nimport type {\n NextApiConfig,\n NextApiDomainMap,\n ResolveNextDomainResult,\n} from \"./types\";\n\nconst ENV_KEY_MAP: Partial<Record<InfraKey, string>> = {\n ai: \"AI_API_BASE\",\n db: \"DB_API_BASE\",\n uniai: \"UNIAI_API_BASE\",\n};\n\nexport type { NextApiConfig, NextApiDomainMap, ResolveNextDomainResult };\n\nexport const resolveNextDomainSources = (\n infra: InfraKey,\n config?: NextApiConfig,\n): ResolveNextDomainResult => {\n const envKey = ENV_KEY_MAP[infra];\n const configValue = config?.env?.[infra];\n const envValue =\n typeof envKey === \"string\" && envKey in process.env\n ? process.env[envKey]\n : undefined;\n\n const domain =\n configValue ??\n envValue ??\n (typeof infra === \"string\" && infra.length > 0 ? infra : \"\");\n\n return {\n domain,\n envKey,\n envValue: envValue ?? undefined,\n configValue,\n hasEnv: Boolean(configValue ?? envValue),\n };\n};\n\nexport const createNextDomainResolver = (\n config?: NextApiConfig,\n): DomainResolver => {\n return (infra: InfraKey) => resolveNextDomainSources(infra, config).domain;\n};\n\nexport const createNextApiClient = (\n config?: NextApiConfig,\n options?: { logger?: ApiLogger },\n) => {\n const resolveDomain = createNextDomainResolver(config);\n return createBackendApiClient({\n resolveDomain,\n logger: options?.logger ?? defaultApiLogger,\n });\n};\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var api = require('@uniai-fe/util-functions/api');
|
|
4
|
+
|
|
5
|
+
// src/infra/index.ts
|
|
6
|
+
var ENV_KEY_MAP = {
|
|
7
|
+
ai: "AI_API_BASE",
|
|
8
|
+
db: "DB_API_BASE",
|
|
9
|
+
uniai: "UNIAI_API_BASE"
|
|
10
|
+
};
|
|
11
|
+
var resolveNextDomainSources = (infra, config) => {
|
|
12
|
+
const envKey = ENV_KEY_MAP[infra];
|
|
13
|
+
const configValue = config?.env?.[infra];
|
|
14
|
+
const envValue = typeof envKey === "string" && envKey in process.env ? process.env[envKey] : void 0;
|
|
15
|
+
const domain = configValue ?? envValue ?? (typeof infra === "string" && infra.length > 0 ? infra : "");
|
|
16
|
+
return {
|
|
17
|
+
domain,
|
|
18
|
+
envKey,
|
|
19
|
+
envValue: envValue ?? void 0,
|
|
20
|
+
configValue,
|
|
21
|
+
hasEnv: Boolean(configValue ?? envValue)
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
var createNextDomainResolver = (config) => {
|
|
25
|
+
return (infra) => resolveNextDomainSources(infra, config).domain;
|
|
26
|
+
};
|
|
27
|
+
var createNextApiClient = (config, options) => {
|
|
28
|
+
const resolveDomain = createNextDomainResolver(config);
|
|
29
|
+
return api.createBackendApiClient({
|
|
30
|
+
resolveDomain,
|
|
31
|
+
logger: options?.logger ?? api.defaultApiLogger
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
exports.createNextApiClient = createNextApiClient;
|
|
36
|
+
exports.createNextDomainResolver = createNextDomainResolver;
|
|
37
|
+
exports.resolveNextDomainSources = resolveNextDomainSources;
|
|
38
|
+
//# sourceMappingURL=index.cjs.map
|
|
39
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/infra/index.ts"],"names":["createBackendApiClient","defaultApiLogger"],"mappings":";;;;;AAaA,IAAM,WAAA,GAAiD;AAAA,EACrD,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,KAAA,EAAO;AACT,CAAA;AAIO,IAAM,wBAAA,GAA2B,CACtC,KAAA,EACA,MAAA,KAC4B;AAC5B,EAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,EAAA,MAAM,WAAA,GAAc,MAAA,EAAQ,GAAA,GAAM,KAAK,CAAA;AACvC,EAAA,MAAM,QAAA,GACJ,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,IAAU,QAAQ,GAAA,GAC5C,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,GAClB,MAAA;AAEN,EAAA,MAAM,MAAA,GACJ,eACA,QAAA,KACC,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,EAAA,CAAA;AAE3D,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAU,QAAA,IAAY,MAAA;AAAA,IACtB,WAAA;AAAA,IACA,MAAA,EAAQ,OAAA,CAAQ,WAAA,IAAe,QAAQ;AAAA,GACzC;AACF;AAEO,IAAM,wBAAA,GAA2B,CACtC,MAAA,KACmB;AACnB,EAAA,OAAO,CAAC,KAAA,KAAoB,wBAAA,CAAyB,KAAA,EAAO,MAAM,CAAA,CAAE,MAAA;AACtE;AAEO,IAAM,mBAAA,GAAsB,CACjC,MAAA,EACA,OAAA,KACG;AACH,EAAA,MAAM,aAAA,GAAgB,yBAAyB,MAAM,CAAA;AACrD,EAAA,OAAOA,0BAAA,CAAuB;AAAA,IAC5B,aAAA;AAAA,IACA,MAAA,EAAQ,SAAS,MAAA,IAAUC;AAAA,GAC5B,CAAA;AACH","file":"index.cjs","sourcesContent":["import {\n createBackendApiClient,\n defaultApiLogger,\n type ApiLogger,\n type DomainResolver,\n type InfraKey,\n} from \"@uniai-fe/util-functions/api\";\nimport type {\n NextApiConfig,\n NextApiDomainMap,\n ResolveNextDomainResult,\n} from \"./types\";\n\nconst ENV_KEY_MAP: Partial<Record<InfraKey, string>> = {\n ai: \"AI_API_BASE\",\n db: \"DB_API_BASE\",\n uniai: \"UNIAI_API_BASE\",\n};\n\nexport type { NextApiConfig, NextApiDomainMap, ResolveNextDomainResult };\n\nexport const resolveNextDomainSources = (\n infra: InfraKey,\n config?: NextApiConfig,\n): ResolveNextDomainResult => {\n const envKey = ENV_KEY_MAP[infra];\n const configValue = config?.env?.[infra];\n const envValue =\n typeof envKey === \"string\" && envKey in process.env\n ? process.env[envKey]\n : undefined;\n\n const domain =\n configValue ??\n envValue ??\n (typeof infra === \"string\" && infra.length > 0 ? infra : \"\");\n\n return {\n domain,\n envKey,\n envValue: envValue ?? undefined,\n configValue,\n hasEnv: Boolean(configValue ?? envValue),\n };\n};\n\nexport const createNextDomainResolver = (\n config?: NextApiConfig,\n): DomainResolver => {\n return (infra: InfraKey) => resolveNextDomainSources(infra, config).domain;\n};\n\nexport const createNextApiClient = (\n config?: NextApiConfig,\n options?: { logger?: ApiLogger },\n) => {\n const resolveDomain = createNextDomainResolver(config);\n return createBackendApiClient({\n resolveDomain,\n logger: options?.logger ?? defaultApiLogger,\n });\n};\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as _uniai_fe_util_functions_api from '@uniai-fe/util-functions/api';
|
|
2
|
+
import { InfraKey, DomainResolver, ApiLogger } from '@uniai-fe/util-functions/api';
|
|
3
|
+
|
|
4
|
+
type NextApiDomainMap = Partial<Record<InfraKey, string | undefined>>;
|
|
5
|
+
type NextApiConfig = {
|
|
6
|
+
env?: NextApiDomainMap;
|
|
7
|
+
};
|
|
8
|
+
type ResolveNextDomainResult = {
|
|
9
|
+
domain: string;
|
|
10
|
+
envKey?: string;
|
|
11
|
+
envValue?: string;
|
|
12
|
+
configValue?: string;
|
|
13
|
+
hasEnv: boolean;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
declare const resolveNextDomainSources: (infra: InfraKey, config?: NextApiConfig) => ResolveNextDomainResult;
|
|
17
|
+
declare const createNextDomainResolver: (config?: NextApiConfig) => DomainResolver;
|
|
18
|
+
declare const createNextApiClient: (config?: NextApiConfig, options?: {
|
|
19
|
+
logger?: ApiLogger;
|
|
20
|
+
}) => {
|
|
21
|
+
getQueryString: (searchParams?: unknown) => string;
|
|
22
|
+
generateBackendQueryUrl_GET: ({ infra, domain, routeUrl, queryUrl, searchParams, log, logDisabled, logger, }: _uniai_fe_util_functions_api.GenerateBackendQueryUrlOptions<InfraKey>) => string;
|
|
23
|
+
fetchBackendQuery: <FetchRequestType extends object, FetchResponseType extends _uniai_fe_util_functions_api.CommonPostResponseType>({ infra, domain, routeUrl, queryUrl, method, headers, body, bodyOriginData, queryStringData, log, logDisabled, fetchDisabled, logger, }: _uniai_fe_util_functions_api.FetchBackendQueryOptions<InfraKey, FetchRequestType>) => Promise<FetchResponseType>;
|
|
24
|
+
logger: ApiLogger;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export { type NextApiConfig, type NextApiDomainMap, type ResolveNextDomainResult, createNextApiClient, createNextDomainResolver, resolveNextDomainSources };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as _uniai_fe_util_functions_api from '@uniai-fe/util-functions/api';
|
|
2
|
+
import { InfraKey, DomainResolver, ApiLogger } from '@uniai-fe/util-functions/api';
|
|
3
|
+
|
|
4
|
+
type NextApiDomainMap = Partial<Record<InfraKey, string | undefined>>;
|
|
5
|
+
type NextApiConfig = {
|
|
6
|
+
env?: NextApiDomainMap;
|
|
7
|
+
};
|
|
8
|
+
type ResolveNextDomainResult = {
|
|
9
|
+
domain: string;
|
|
10
|
+
envKey?: string;
|
|
11
|
+
envValue?: string;
|
|
12
|
+
configValue?: string;
|
|
13
|
+
hasEnv: boolean;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
declare const resolveNextDomainSources: (infra: InfraKey, config?: NextApiConfig) => ResolveNextDomainResult;
|
|
17
|
+
declare const createNextDomainResolver: (config?: NextApiConfig) => DomainResolver;
|
|
18
|
+
declare const createNextApiClient: (config?: NextApiConfig, options?: {
|
|
19
|
+
logger?: ApiLogger;
|
|
20
|
+
}) => {
|
|
21
|
+
getQueryString: (searchParams?: unknown) => string;
|
|
22
|
+
generateBackendQueryUrl_GET: ({ infra, domain, routeUrl, queryUrl, searchParams, log, logDisabled, logger, }: _uniai_fe_util_functions_api.GenerateBackendQueryUrlOptions<InfraKey>) => string;
|
|
23
|
+
fetchBackendQuery: <FetchRequestType extends object, FetchResponseType extends _uniai_fe_util_functions_api.CommonPostResponseType>({ infra, domain, routeUrl, queryUrl, method, headers, body, bodyOriginData, queryStringData, log, logDisabled, fetchDisabled, logger, }: _uniai_fe_util_functions_api.FetchBackendQueryOptions<InfraKey, FetchRequestType>) => Promise<FetchResponseType>;
|
|
24
|
+
logger: ApiLogger;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export { type NextApiConfig, type NextApiDomainMap, type ResolveNextDomainResult, createNextApiClient, createNextDomainResolver, resolveNextDomainSources };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createBackendApiClient, defaultApiLogger } from '@uniai-fe/util-functions/api';
|
|
2
|
+
|
|
3
|
+
// src/infra/index.ts
|
|
4
|
+
var ENV_KEY_MAP = {
|
|
5
|
+
ai: "AI_API_BASE",
|
|
6
|
+
db: "DB_API_BASE",
|
|
7
|
+
uniai: "UNIAI_API_BASE"
|
|
8
|
+
};
|
|
9
|
+
var resolveNextDomainSources = (infra, config) => {
|
|
10
|
+
const envKey = ENV_KEY_MAP[infra];
|
|
11
|
+
const configValue = config?.env?.[infra];
|
|
12
|
+
const envValue = typeof envKey === "string" && envKey in process.env ? process.env[envKey] : void 0;
|
|
13
|
+
const domain = configValue ?? envValue ?? (typeof infra === "string" && infra.length > 0 ? infra : "");
|
|
14
|
+
return {
|
|
15
|
+
domain,
|
|
16
|
+
envKey,
|
|
17
|
+
envValue: envValue ?? void 0,
|
|
18
|
+
configValue,
|
|
19
|
+
hasEnv: Boolean(configValue ?? envValue)
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
var createNextDomainResolver = (config) => {
|
|
23
|
+
return (infra) => resolveNextDomainSources(infra, config).domain;
|
|
24
|
+
};
|
|
25
|
+
var createNextApiClient = (config, options) => {
|
|
26
|
+
const resolveDomain = createNextDomainResolver(config);
|
|
27
|
+
return createBackendApiClient({
|
|
28
|
+
resolveDomain,
|
|
29
|
+
logger: options?.logger ?? defaultApiLogger
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export { createNextApiClient, createNextDomainResolver, resolveNextDomainSources };
|
|
34
|
+
//# sourceMappingURL=index.mjs.map
|
|
35
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/infra/index.ts"],"names":[],"mappings":";;;AAaA,IAAM,WAAA,GAAiD;AAAA,EACrD,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,KAAA,EAAO;AACT,CAAA;AAIO,IAAM,wBAAA,GAA2B,CACtC,KAAA,EACA,MAAA,KAC4B;AAC5B,EAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,EAAA,MAAM,WAAA,GAAc,MAAA,EAAQ,GAAA,GAAM,KAAK,CAAA;AACvC,EAAA,MAAM,QAAA,GACJ,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,IAAU,QAAQ,GAAA,GAC5C,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,GAClB,MAAA;AAEN,EAAA,MAAM,MAAA,GACJ,eACA,QAAA,KACC,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,EAAA,CAAA;AAE3D,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAU,QAAA,IAAY,MAAA;AAAA,IACtB,WAAA;AAAA,IACA,MAAA,EAAQ,OAAA,CAAQ,WAAA,IAAe,QAAQ;AAAA,GACzC;AACF;AAEO,IAAM,wBAAA,GAA2B,CACtC,MAAA,KACmB;AACnB,EAAA,OAAO,CAAC,KAAA,KAAoB,wBAAA,CAAyB,KAAA,EAAO,MAAM,CAAA,CAAE,MAAA;AACtE;AAEO,IAAM,mBAAA,GAAsB,CACjC,MAAA,EACA,OAAA,KACG;AACH,EAAA,MAAM,aAAA,GAAgB,yBAAyB,MAAM,CAAA;AACrD,EAAA,OAAO,sBAAA,CAAuB;AAAA,IAC5B,aAAA;AAAA,IACA,MAAA,EAAQ,SAAS,MAAA,IAAU;AAAA,GAC5B,CAAA;AACH","file":"index.mjs","sourcesContent":["import {\n createBackendApiClient,\n defaultApiLogger,\n type ApiLogger,\n type DomainResolver,\n type InfraKey,\n} from \"@uniai-fe/util-functions/api\";\nimport type {\n NextApiConfig,\n NextApiDomainMap,\n ResolveNextDomainResult,\n} from \"./types\";\n\nconst ENV_KEY_MAP: Partial<Record<InfraKey, string>> = {\n ai: \"AI_API_BASE\",\n db: \"DB_API_BASE\",\n uniai: \"UNIAI_API_BASE\",\n};\n\nexport type { NextApiConfig, NextApiDomainMap, ResolveNextDomainResult };\n\nexport const resolveNextDomainSources = (\n infra: InfraKey,\n config?: NextApiConfig,\n): ResolveNextDomainResult => {\n const envKey = ENV_KEY_MAP[infra];\n const configValue = config?.env?.[infra];\n const envValue =\n typeof envKey === \"string\" && envKey in process.env\n ? process.env[envKey]\n : undefined;\n\n const domain =\n configValue ??\n envValue ??\n (typeof infra === \"string\" && infra.length > 0 ? infra : \"\");\n\n return {\n domain,\n envKey,\n envValue: envValue ?? undefined,\n configValue,\n hasEnv: Boolean(configValue ?? envValue),\n };\n};\n\nexport const createNextDomainResolver = (\n config?: NextApiConfig,\n): DomainResolver => {\n return (infra: InfraKey) => resolveNextDomainSources(infra, config).domain;\n};\n\nexport const createNextApiClient = (\n config?: NextApiConfig,\n options?: { logger?: ApiLogger },\n) => {\n const resolveDomain = createNextDomainResolver(config);\n return createBackendApiClient({\n resolveDomain,\n logger: options?.logger ?? defaultApiLogger,\n });\n};\n"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use server";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var server_exports = {};
|
|
21
|
+
__export(server_exports, {
|
|
22
|
+
setDebugResponseHeaders: () => setDebugResponseHeaders,
|
|
23
|
+
setTokenRequestHeaders: () => setTokenRequestHeaders
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(server_exports);
|
|
26
|
+
var import_headers = require("next/headers");
|
|
27
|
+
var import_server = require("next/server");
|
|
28
|
+
var import_api = require("@uniai-fe/util-functions/api");
|
|
29
|
+
var import_infra = require("../infra");
|
|
30
|
+
async function setTokenRequestHeaders() {
|
|
31
|
+
const nextHeaders = await (0, import_headers.headers)();
|
|
32
|
+
const token = nextHeaders.get("Authorization") || "";
|
|
33
|
+
if (!token) return void 0;
|
|
34
|
+
return new Headers({
|
|
35
|
+
Authorization: token
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async function setDebugResponseHeaders(params) {
|
|
39
|
+
const {
|
|
40
|
+
res,
|
|
41
|
+
infra,
|
|
42
|
+
queryUrl,
|
|
43
|
+
config,
|
|
44
|
+
domain,
|
|
45
|
+
queryString,
|
|
46
|
+
searchParams,
|
|
47
|
+
fullUrl,
|
|
48
|
+
options
|
|
49
|
+
} = params;
|
|
50
|
+
const response = import_server.NextResponse.json(res, options);
|
|
51
|
+
const sources = (0, import_infra.resolveNextDomainSources)(infra, config);
|
|
52
|
+
const resolvedDomain = typeof domain === "string" && domain.length > 0 ? domain : sources.domain;
|
|
53
|
+
response.headers.set(
|
|
54
|
+
"Uniai-Native-Domain-Env-Exist",
|
|
55
|
+
String(sources.hasEnv)
|
|
56
|
+
);
|
|
57
|
+
response.headers.set("Uniai-Native-Domain", resolvedDomain || infra);
|
|
58
|
+
response.headers.set("Uniai-Native-Path", queryUrl);
|
|
59
|
+
const computedQuery = typeof queryString === "string" ? queryString : searchParams ? (0, import_api.getQueryString)(searchParams) : "";
|
|
60
|
+
const url = fullUrl || `${resolvedDomain || infra || ""}${queryUrl || ""}${computedQuery || ""}`;
|
|
61
|
+
response.headers.set("Uniai-Native-URL", url);
|
|
62
|
+
return response;
|
|
63
|
+
}
|
|
64
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
65
|
+
0 && (module.exports = {
|
|
66
|
+
setDebugResponseHeaders,
|
|
67
|
+
setTokenRequestHeaders
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/server/index.ts"],"sourcesContent":["\"use server\";\n\nimport { headers } from \"next/headers\";\nimport { NextResponse } from \"next/server\";\nimport { getQueryString, type InfraKey } from \"@uniai-fe/util-functions/api\";\nimport {\n createNextDomainResolver,\n resolveNextDomainSources,\n type NextApiConfig,\n} from \"../infra\";\nimport type { SetDebugResponseHeadersParams } from \"./types\";\n\nexport async function setTokenRequestHeaders(): Promise<\n HeadersInit | undefined\n> {\n const nextHeaders = await headers();\n const token = nextHeaders.get(\"Authorization\") || \"\";\n if (!token) return undefined;\n return new Headers({\n Authorization: token,\n });\n}\n\nexport type { SetDebugResponseHeadersParams };\n\nexport async function setDebugResponseHeaders<ResponseData>(\n params: SetDebugResponseHeadersParams<InfraKey, ResponseData>,\n): Promise<NextResponse<ResponseData>> {\n const {\n res,\n infra,\n queryUrl,\n config,\n domain,\n queryString,\n searchParams,\n fullUrl,\n options,\n } = params;\n\n const response = NextResponse.json(res, options);\n const sources = resolveNextDomainSources(infra, config);\n const resolvedDomain =\n typeof domain === \"string\" && domain.length > 0 ? domain : sources.domain;\n\n response.headers.set(\n \"Uniai-Native-Domain-Env-Exist\",\n String(sources.hasEnv),\n );\n response.headers.set(\"Uniai-Native-Domain\", resolvedDomain || infra);\n response.headers.set(\"Uniai-Native-Path\", queryUrl);\n\n const computedQuery =\n typeof queryString === \"string\"\n ? queryString\n : searchParams\n ? getQueryString(searchParams)\n : \"\";\n const url =\n fullUrl ||\n `${resolvedDomain || infra || \"\"}${queryUrl || \"\"}${computedQuery || \"\"}`;\n response.headers.set(\"Uniai-Native-URL\", url);\n\n return response;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,qBAAwB;AACxB,oBAA6B;AAC7B,iBAA8C;AAC9C,mBAIO;AAGP,eAAsB,yBAEpB;AACA,QAAM,cAAc,UAAM,wBAAQ;AAClC,QAAM,QAAQ,YAAY,IAAI,eAAe,KAAK;AAClD,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,IAAI,QAAQ;AAAA,IACjB,eAAe;AAAA,EACjB,CAAC;AACH;AAIA,eAAsB,wBACpB,QACqC;AACrC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,WAAW,2BAAa,KAAK,KAAK,OAAO;AAC/C,QAAM,cAAU,uCAAyB,OAAO,MAAM;AACtD,QAAM,iBACJ,OAAO,WAAW,YAAY,OAAO,SAAS,IAAI,SAAS,QAAQ;AAErE,WAAS,QAAQ;AAAA,IACf;AAAA,IACA,OAAO,QAAQ,MAAM;AAAA,EACvB;AACA,WAAS,QAAQ,IAAI,uBAAuB,kBAAkB,KAAK;AACnE,WAAS,QAAQ,IAAI,qBAAqB,QAAQ;AAElD,QAAM,gBACJ,OAAO,gBAAgB,WACnB,cACA,mBACE,2BAAe,YAAY,IAC3B;AACR,QAAM,MACJ,WACA,GAAG,kBAAkB,SAAS,EAAE,GAAG,YAAY,EAAE,GAAG,iBAAiB,EAAE;AACzE,WAAS,QAAQ,IAAI,oBAAoB,GAAG;AAE5C,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
import { InfraKey } from '@uniai-fe/util-functions/api';
|
|
3
|
+
|
|
4
|
+
type NextApiDomainMap = Partial<Record<InfraKey, string | undefined>>;
|
|
5
|
+
type NextApiConfig = {
|
|
6
|
+
env?: NextApiDomainMap;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
type SetDebugResponseHeadersParams<Infra extends InfraKey, ResponseData> = {
|
|
10
|
+
res: ResponseData;
|
|
11
|
+
infra: Infra;
|
|
12
|
+
queryUrl: string;
|
|
13
|
+
} & Partial<{
|
|
14
|
+
config: NextApiConfig;
|
|
15
|
+
domain: string;
|
|
16
|
+
queryString: string;
|
|
17
|
+
searchParams: URLSearchParams | object;
|
|
18
|
+
fullUrl: string;
|
|
19
|
+
options: ResponseInit;
|
|
20
|
+
}>;
|
|
21
|
+
|
|
22
|
+
declare function setTokenRequestHeaders(): Promise<HeadersInit | undefined>;
|
|
23
|
+
|
|
24
|
+
declare function setDebugResponseHeaders<ResponseData>(params: SetDebugResponseHeadersParams<InfraKey, ResponseData>): Promise<NextResponse<ResponseData>>;
|
|
25
|
+
|
|
26
|
+
export { type SetDebugResponseHeadersParams, setDebugResponseHeaders, setTokenRequestHeaders };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
import { InfraKey } from '@uniai-fe/util-functions/api';
|
|
3
|
+
|
|
4
|
+
type NextApiDomainMap = Partial<Record<InfraKey, string | undefined>>;
|
|
5
|
+
type NextApiConfig = {
|
|
6
|
+
env?: NextApiDomainMap;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
type SetDebugResponseHeadersParams<Infra extends InfraKey, ResponseData> = {
|
|
10
|
+
res: ResponseData;
|
|
11
|
+
infra: Infra;
|
|
12
|
+
queryUrl: string;
|
|
13
|
+
} & Partial<{
|
|
14
|
+
config: NextApiConfig;
|
|
15
|
+
domain: string;
|
|
16
|
+
queryString: string;
|
|
17
|
+
searchParams: URLSearchParams | object;
|
|
18
|
+
fullUrl: string;
|
|
19
|
+
options: ResponseInit;
|
|
20
|
+
}>;
|
|
21
|
+
|
|
22
|
+
declare function setTokenRequestHeaders(): Promise<HeadersInit | undefined>;
|
|
23
|
+
|
|
24
|
+
declare function setDebugResponseHeaders<ResponseData>(params: SetDebugResponseHeadersParams<InfraKey, ResponseData>): Promise<NextResponse<ResponseData>>;
|
|
25
|
+
|
|
26
|
+
export { type SetDebugResponseHeadersParams, setDebugResponseHeaders, setTokenRequestHeaders };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { headers } from "next/headers";
|
|
3
|
+
import { NextResponse } from "next/server";
|
|
4
|
+
import { getQueryString } from "@uniai-fe/util-functions/api";
|
|
5
|
+
import {
|
|
6
|
+
resolveNextDomainSources
|
|
7
|
+
} from "../infra";
|
|
8
|
+
async function setTokenRequestHeaders() {
|
|
9
|
+
const nextHeaders = await headers();
|
|
10
|
+
const token = nextHeaders.get("Authorization") || "";
|
|
11
|
+
if (!token) return void 0;
|
|
12
|
+
return new Headers({
|
|
13
|
+
Authorization: token
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
async function setDebugResponseHeaders(params) {
|
|
17
|
+
const {
|
|
18
|
+
res,
|
|
19
|
+
infra,
|
|
20
|
+
queryUrl,
|
|
21
|
+
config,
|
|
22
|
+
domain,
|
|
23
|
+
queryString,
|
|
24
|
+
searchParams,
|
|
25
|
+
fullUrl,
|
|
26
|
+
options
|
|
27
|
+
} = params;
|
|
28
|
+
const response = NextResponse.json(res, options);
|
|
29
|
+
const sources = resolveNextDomainSources(infra, config);
|
|
30
|
+
const resolvedDomain = typeof domain === "string" && domain.length > 0 ? domain : sources.domain;
|
|
31
|
+
response.headers.set(
|
|
32
|
+
"Uniai-Native-Domain-Env-Exist",
|
|
33
|
+
String(sources.hasEnv)
|
|
34
|
+
);
|
|
35
|
+
response.headers.set("Uniai-Native-Domain", resolvedDomain || infra);
|
|
36
|
+
response.headers.set("Uniai-Native-Path", queryUrl);
|
|
37
|
+
const computedQuery = typeof queryString === "string" ? queryString : searchParams ? getQueryString(searchParams) : "";
|
|
38
|
+
const url = fullUrl || `${resolvedDomain || infra || ""}${queryUrl || ""}${computedQuery || ""}`;
|
|
39
|
+
response.headers.set("Uniai-Native-URL", url);
|
|
40
|
+
return response;
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
setDebugResponseHeaders,
|
|
44
|
+
setTokenRequestHeaders
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/server/index.ts"],"sourcesContent":["\"use server\";\n\nimport { headers } from \"next/headers\";\nimport { NextResponse } from \"next/server\";\nimport { getQueryString, type InfraKey } from \"@uniai-fe/util-functions/api\";\nimport {\n createNextDomainResolver,\n resolveNextDomainSources,\n type NextApiConfig,\n} from \"../infra\";\nimport type { SetDebugResponseHeadersParams } from \"./types\";\n\nexport async function setTokenRequestHeaders(): Promise<\n HeadersInit | undefined\n> {\n const nextHeaders = await headers();\n const token = nextHeaders.get(\"Authorization\") || \"\";\n if (!token) return undefined;\n return new Headers({\n Authorization: token,\n });\n}\n\nexport type { SetDebugResponseHeadersParams };\n\nexport async function setDebugResponseHeaders<ResponseData>(\n params: SetDebugResponseHeadersParams<InfraKey, ResponseData>,\n): Promise<NextResponse<ResponseData>> {\n const {\n res,\n infra,\n queryUrl,\n config,\n domain,\n queryString,\n searchParams,\n fullUrl,\n options,\n } = params;\n\n const response = NextResponse.json(res, options);\n const sources = resolveNextDomainSources(infra, config);\n const resolvedDomain =\n typeof domain === \"string\" && domain.length > 0 ? domain : sources.domain;\n\n response.headers.set(\n \"Uniai-Native-Domain-Env-Exist\",\n String(sources.hasEnv),\n );\n response.headers.set(\"Uniai-Native-Domain\", resolvedDomain || infra);\n response.headers.set(\"Uniai-Native-Path\", queryUrl);\n\n const computedQuery =\n typeof queryString === \"string\"\n ? queryString\n : searchParams\n ? getQueryString(searchParams)\n : \"\";\n const url =\n fullUrl ||\n `${resolvedDomain || infra || \"\"}${queryUrl || \"\"}${computedQuery || \"\"}`;\n response.headers.set(\"Uniai-Native-URL\", url);\n\n return response;\n}\n"],"mappings":";AAEA,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,SAAS,sBAAqC;AAC9C;AAAA,EAEE;AAAA,OAEK;AAGP,eAAsB,yBAEpB;AACA,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,QAAQ,YAAY,IAAI,eAAe,KAAK;AAClD,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,IAAI,QAAQ;AAAA,IACjB,eAAe;AAAA,EACjB,CAAC;AACH;AAIA,eAAsB,wBACpB,QACqC;AACrC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,WAAW,aAAa,KAAK,KAAK,OAAO;AAC/C,QAAM,UAAU,yBAAyB,OAAO,MAAM;AACtD,QAAM,iBACJ,OAAO,WAAW,YAAY,OAAO,SAAS,IAAI,SAAS,QAAQ;AAErE,WAAS,QAAQ;AAAA,IACf;AAAA,IACA,OAAO,QAAQ,MAAM;AAAA,EACvB;AACA,WAAS,QAAQ,IAAI,uBAAuB,kBAAkB,KAAK;AACnE,WAAS,QAAQ,IAAI,qBAAqB,QAAQ;AAElD,QAAM,gBACJ,OAAO,gBAAgB,WACnB,cACA,eACE,eAAe,YAAY,IAC3B;AACR,QAAM,MACJ,WACA,GAAG,kBAAkB,SAAS,EAAE,GAAG,YAAY,EAAE,GAAG,iBAAiB,EAAE;AACzE,WAAS,QAAQ,IAAI,oBAAoB,GAAG;AAE5C,SAAO;AACT;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@uniai-fe/util-next",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Next.js Utilities for UNIAI FE Projects",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"private": false,
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"homepage": "https://www.uniai.co.kr/",
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"packageManager": "pnpm@10.20.0",
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=22",
|
|
16
|
+
"pnpm": ">=10"
|
|
17
|
+
},
|
|
18
|
+
"author": {
|
|
19
|
+
"name": "GraffitoRyu",
|
|
20
|
+
"email": "yth4135@naver.com",
|
|
21
|
+
"url": "https://github.com/GraffitoRyu"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsup",
|
|
28
|
+
"dev": "tsup --watch",
|
|
29
|
+
"util-next:build": "pnpm run build",
|
|
30
|
+
"util-next:dev": "pnpm run dev"
|
|
31
|
+
},
|
|
32
|
+
"main": "./dist/index.cjs",
|
|
33
|
+
"module": "./dist/index.mjs",
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"exports": {
|
|
36
|
+
".": {
|
|
37
|
+
"types": "./dist/index.d.ts",
|
|
38
|
+
"import": "./dist/index.mjs",
|
|
39
|
+
"require": "./dist/index.cjs",
|
|
40
|
+
"default": "./dist/index.mjs"
|
|
41
|
+
},
|
|
42
|
+
"./server": {
|
|
43
|
+
"types": "./dist/server.d.ts",
|
|
44
|
+
"import": "./dist/server.mjs",
|
|
45
|
+
"require": "./dist/server.cjs",
|
|
46
|
+
"default": "./dist/server.mjs"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@uniai-fe/util-functions": "workspace:*"
|
|
51
|
+
},
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"next": ">= 15"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@types/node": "^22.15.30",
|
|
57
|
+
"@uniai-fe/eslint-config": "workspace:*",
|
|
58
|
+
"@uniai-fe/tsconfig": "workspace:*",
|
|
59
|
+
"eslint": "^9.38.0",
|
|
60
|
+
"prettier": "^3.6.2",
|
|
61
|
+
"tsup": "^8.5.0",
|
|
62
|
+
"typescript": "~5.9.3"
|
|
63
|
+
}
|
|
64
|
+
}
|