@greatapps/common 1.1.263 → 1.1.266
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/components/layouts/WhitelabelCodes.mjs +50 -0
- package/dist/components/layouts/WhitelabelCodes.mjs.map +1 -0
- package/dist/index.mjs +28 -26
- package/dist/index.mjs.map +1 -1
- package/dist/infra/api/client.mjs +50 -23
- package/dist/infra/api/client.mjs.map +1 -1
- package/dist/modules/auth/services/auth.service.mjs +0 -1
- package/dist/modules/auth/services/auth.service.mjs.map +1 -1
- package/dist/modules/whitelabel/services/whitelabel.service.mjs +5 -0
- package/dist/modules/whitelabel/services/whitelabel.service.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/layouts/WhitelabelCodes.tsx +59 -0
- package/src/index.ts +1 -0
- package/src/infra/api/client.ts +116 -53
- package/src/modules/auth/services/auth.service.ts +0 -2
- package/src/modules/whitelabel/schema.ts +1 -1
- package/src/modules/whitelabel/services/whitelabel.service.ts +5 -5
- package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs +0 -15
- package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs.map +0 -1
- package/dist/modules/whitelabel/actions/revalidate-whitelabel-styles.action.mjs +0 -12
- package/dist/modules/whitelabel/actions/revalidate-whitelabel-styles.action.mjs.map +0 -1
- package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs +0 -102
- package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs.map +0 -1
- package/src/modules/whitelabel/actions/find-whitelabel-styles.action.ts +0 -14
- package/src/modules/whitelabel/actions/revalidate-whitelabel-styles.action.ts +0 -10
- package/src/modules/whitelabel/services/whitelabel-styles.service.ts +0 -129
|
@@ -55,6 +55,11 @@ class WhitelabelService {
|
|
|
55
55
|
hostname = process.env.WHITELABEL_DOMAIN || hostname;
|
|
56
56
|
const cache = this.createCache();
|
|
57
57
|
const cacheKey = this.getCacheKey(hostname);
|
|
58
|
+
const cachedData = await cache.select(cacheKey);
|
|
59
|
+
if (cachedData.status == 1 && "data" in cachedData && cachedData.data) {
|
|
60
|
+
console.log("[WhitelabelService] Cache hit for domain", { hostname });
|
|
61
|
+
return JSON.parse(cachedData.data);
|
|
62
|
+
}
|
|
58
63
|
const data = await this.fetchFromApi(hostname);
|
|
59
64
|
await cache.insert(cacheKey, JSON.stringify(data), 604800);
|
|
60
65
|
return data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/whitelabel/services/whitelabel.service.ts"],"sourcesContent":["\r\nimport greatCache from '@greatapps/cache';\r\nimport { ApiError } from '../../../infra/api/types';\r\nimport { WhitelabelTokenApiResponse, WhitelabelTokenData } from '../schema';\r\n\r\nclass WhitelabelService {\r\n private getApiUrl(): string {\r\n const apiUrl = process.env.GAPPS_R3_API_URL;\r\n if (!apiUrl) {\r\n throw new ApiError('GAPPS_R3_API_URL not configured', 'CONFIG_ERROR', 500);\r\n }\r\n return apiUrl;\r\n }\r\n\r\n private getToken(): string {\r\n const token = process.env.WHITELABEL_TOKEN_MASTER;\r\n if (!token) {\r\n throw new ApiError('WHITELABEL_TOKEN_MASTER not configured', 'CONFIG_ERROR', 500);\r\n }\r\n return token;\r\n }\r\n\r\n private createCache() {\r\n return new greatCache({\r\n service: 'whitelabel-service',\r\n version: '1.0',\r\n domain: 'whitelabel-cache.greatapps.com.br',\r\n ambient: process.env.NODE_ENV || 'development',\r\n });\r\n }\r\n\r\n private getCacheKey(hostname: string): string {\r\n return `whitelabel-token-${hostname}`;\r\n }\r\n\r\n private async fetchFromApi(hostname: string): Promise<WhitelabelTokenData> {\r\n const apiUrl = this.getApiUrl();\r\n const whitelabelMasterToken = this.getToken();\r\n const url = `${apiUrl}/v1/pt-br/1/whitelabel/${hostname}/token`;\r\n\r\n console.log('[WhitelabelService] Fetching token for domain', { url });\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: {\r\n authorization: whitelabelMasterToken,\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n console.error('[WhitelabelService] Failed to fetch whitelabel token', { response });\r\n throw new ApiError(\r\n `Failed to fetch whitelabel token: ${response.status}`,\r\n 'FETCH_ERROR',\r\n response.status\r\n );\r\n }\r\n\r\n const result: WhitelabelTokenApiResponse = await response.json();\r\n\r\n if (result.status !== 1 || !result.data?.length) {\r\n throw new ApiError('Whitelabel token not found', 'TOKEN_NOT_FOUND', 404);\r\n }\r\n\r\n return result.data[0];\r\n }\r\n\r\n async getTokenByDomain(hostname: string): Promise<WhitelabelTokenData> {\r\n hostname = process.env.WHITELABEL_DOMAIN || hostname;\r\n\r\n const cache = this.createCache();\r\n const cacheKey = this.getCacheKey(hostname);\r\n\r\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/whitelabel/services/whitelabel.service.ts"],"sourcesContent":["\r\nimport greatCache from '@greatapps/cache';\r\nimport { ApiError } from '../../../infra/api/types';\r\nimport { WhitelabelTokenApiResponse, WhitelabelTokenData } from '../schema';\r\n\r\nclass WhitelabelService {\r\n private getApiUrl(): string {\r\n const apiUrl = process.env.GAPPS_R3_API_URL;\r\n if (!apiUrl) {\r\n throw new ApiError('GAPPS_R3_API_URL not configured', 'CONFIG_ERROR', 500);\r\n }\r\n return apiUrl;\r\n }\r\n\r\n private getToken(): string {\r\n const token = process.env.WHITELABEL_TOKEN_MASTER;\r\n if (!token) {\r\n throw new ApiError('WHITELABEL_TOKEN_MASTER not configured', 'CONFIG_ERROR', 500);\r\n }\r\n return token;\r\n }\r\n\r\n private createCache() {\r\n return new greatCache({\r\n service: 'whitelabel-service',\r\n version: '1.0',\r\n domain: 'whitelabel-cache.greatapps.com.br',\r\n ambient: process.env.NODE_ENV || 'development',\r\n });\r\n }\r\n\r\n private getCacheKey(hostname: string): string {\r\n return `whitelabel-token-${hostname}`;\r\n }\r\n\r\n private async fetchFromApi(hostname: string): Promise<WhitelabelTokenData> {\r\n const apiUrl = this.getApiUrl();\r\n const whitelabelMasterToken = this.getToken();\r\n const url = `${apiUrl}/v1/pt-br/1/whitelabel/${hostname}/token`;\r\n\r\n console.log('[WhitelabelService] Fetching token for domain', { url });\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: {\r\n authorization: whitelabelMasterToken,\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n console.error('[WhitelabelService] Failed to fetch whitelabel token', { response });\r\n throw new ApiError(\r\n `Failed to fetch whitelabel token: ${response.status}`,\r\n 'FETCH_ERROR',\r\n response.status\r\n );\r\n }\r\n\r\n const result: WhitelabelTokenApiResponse = await response.json();\r\n\r\n if (result.status !== 1 || !result.data?.length) {\r\n throw new ApiError('Whitelabel token not found', 'TOKEN_NOT_FOUND', 404);\r\n }\r\n\r\n return result.data[0];\r\n }\r\n\r\n async getTokenByDomain(hostname: string): Promise<WhitelabelTokenData> {\r\n hostname = process.env.WHITELABEL_DOMAIN || hostname;\r\n\r\n const cache = this.createCache();\r\n const cacheKey = this.getCacheKey(hostname);\r\n\r\n const cachedData = await cache.select(cacheKey);\r\n\r\n if (cachedData.status == 1 && 'data' in cachedData && cachedData.data) {\r\n console.log('[WhitelabelService] Cache hit for domain', { hostname });\r\n return JSON.parse(cachedData.data) as WhitelabelTokenData;\r\n }\r\n\r\n const data = await this.fetchFromApi(hostname);\r\n\r\n await cache.insert(cacheKey, JSON.stringify(data), 604800);\r\n\r\n return data;\r\n }\r\n\r\n async revalidateByDomain(hostname: string): Promise<WhitelabelTokenData> {\r\n hostname = process.env.WHITELABEL_DOMAIN || hostname;\r\n\r\n const cache = this.createCache();\r\n const cacheKey = this.getCacheKey(hostname);\r\n\r\n console.log('[WhitelabelService] Revalidating cache for domain', { hostname });\r\n\r\n await cache.delete(cacheKey);\r\n\r\n const data = await this.fetchFromApi(hostname);\r\n\r\n await cache.insert(cacheKey, JSON.stringify(data), 604800);\r\n\r\n console.log('[WhitelabelService] Cache revalidated for domain', { hostname });\r\n\r\n return data;\r\n }\r\n}\r\n\r\nexport const whitelabelService = new WhitelabelService();\r\n"],"mappings":"AACA,OAAO,gBAAgB;AACvB,SAAS,gBAAgB;AAGzB,MAAM,kBAAkB;AAAA,EACd,YAAoB;AAC1B,UAAM,SAAS,QAAQ,IAAI;AAC3B,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,SAAS,mCAAmC,gBAAgB,GAAG;AAAA,IAC3E;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,WAAmB;AACzB,UAAM,QAAQ,QAAQ,IAAI;AAC1B,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,SAAS,0CAA0C,gBAAgB,GAAG;AAAA,IAClF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc;AACpB,WAAO,IAAI,WAAW;AAAA,MACpB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS,QAAQ,IAAI,YAAY;AAAA,IACnC,CAAC;AAAA,EACH;AAAA,EAEQ,YAAY,UAA0B;AAC5C,WAAO,oBAAoB,QAAQ;AAAA,EACrC;AAAA,EAEA,MAAc,aAAa,UAAgD;AACzE,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,wBAAwB,KAAK,SAAS;AAC5C,UAAM,MAAM,GAAG,MAAM,0BAA0B,QAAQ;AAEvD,YAAQ,IAAI,iDAAiD,EAAE,IAAI,CAAC;AAEpE,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,eAAe;AAAA,MACjB;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,cAAQ,MAAM,wDAAwD,EAAE,SAAS,CAAC;AAClF,YAAM,IAAI;AAAA,QACR,qCAAqC,SAAS,MAAM;AAAA,QACpD;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF;AAEA,UAAM,SAAqC,MAAM,SAAS,KAAK;AAE/D,QAAI,OAAO,WAAW,KAAK,CAAC,OAAO,MAAM,QAAQ;AAC/C,YAAM,IAAI,SAAS,8BAA8B,mBAAmB,GAAG;AAAA,IACzE;AAEA,WAAO,OAAO,KAAK,CAAC;AAAA,EACtB;AAAA,EAEA,MAAM,iBAAiB,UAAgD;AACrE,eAAW,QAAQ,IAAI,qBAAqB;AAE5C,UAAM,QAAQ,KAAK,YAAY;AAC/B,UAAM,WAAW,KAAK,YAAY,QAAQ;AAE1C,UAAM,aAAa,MAAM,MAAM,OAAO,QAAQ;AAE9C,QAAI,WAAW,UAAU,KAAK,UAAU,cAAc,WAAW,MAAM;AACrE,cAAQ,IAAI,4CAA4C,EAAE,SAAS,CAAC;AACpE,aAAO,KAAK,MAAM,WAAW,IAAI;AAAA,IACnC;AAEA,UAAM,OAAO,MAAM,KAAK,aAAa,QAAQ;AAE7C,UAAM,MAAM,OAAO,UAAU,KAAK,UAAU,IAAI,GAAG,MAAM;AAEzD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,mBAAmB,UAAgD;AACvE,eAAW,QAAQ,IAAI,qBAAqB;AAE5C,UAAM,QAAQ,KAAK,YAAY;AAC/B,UAAM,WAAW,KAAK,YAAY,QAAQ;AAE1C,YAAQ,IAAI,qDAAqD,EAAE,SAAS,CAAC;AAE7E,UAAM,MAAM,OAAO,QAAQ;AAE3B,UAAM,OAAO,MAAM,KAAK,aAAa,QAAQ;AAE7C,UAAM,MAAM,OAAO,UAAU,KAAK,UAAU,IAAI,GAAG,MAAM;AAEzD,YAAQ,IAAI,oDAAoD,EAAE,SAAS,CAAC;AAE5E,WAAO;AAAA,EACT;AACF;AAEO,MAAM,oBAAoB,IAAI,kBAAkB;","names":[]}
|
package/package.json
CHANGED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect } from 'react';
|
|
4
|
+
import { useWhitelabel } from '../../providers/whitelabel.provider';
|
|
5
|
+
|
|
6
|
+
function copyAttributes(source: Element, target: HTMLElement) {
|
|
7
|
+
Array.from(source.attributes).forEach((attribute) => {
|
|
8
|
+
target.setAttribute(attribute.name, attribute.value);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default function WhitelabelCodes() {
|
|
13
|
+
const { whitelabel } = useWhitelabel();
|
|
14
|
+
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const codes = whitelabel?.codes;
|
|
17
|
+
const rawCodes = typeof codes === 'string' ? codes.trim() : '';
|
|
18
|
+
|
|
19
|
+
if (!rawCodes) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const template = document.createElement('template');
|
|
24
|
+
template.innerHTML = rawCodes;
|
|
25
|
+
|
|
26
|
+
const appendedNodes: HTMLElement[] = [];
|
|
27
|
+
|
|
28
|
+
Array.from(template.content.children).forEach((node) => {
|
|
29
|
+
const tagName = node.tagName.toLowerCase();
|
|
30
|
+
|
|
31
|
+
if (tagName !== 'style' && tagName !== 'script') {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (tagName === 'style') {
|
|
36
|
+
const style = document.createElement('style');
|
|
37
|
+
copyAttributes(node, style);
|
|
38
|
+
style.textContent = node.textContent;
|
|
39
|
+
style.dataset.whitelabelCodes = 'true';
|
|
40
|
+
document.head.appendChild(style);
|
|
41
|
+
appendedNodes.push(style);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const script = document.createElement('script');
|
|
46
|
+
copyAttributes(node, script);
|
|
47
|
+
script.textContent = node.textContent;
|
|
48
|
+
script.dataset.whitelabelCodes = 'true';
|
|
49
|
+
document.head.appendChild(script);
|
|
50
|
+
appendedNodes.push(script);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
return () => {
|
|
54
|
+
appendedNodes.forEach((node) => node.remove());
|
|
55
|
+
};
|
|
56
|
+
}, [whitelabel?.codes]);
|
|
57
|
+
|
|
58
|
+
return null;
|
|
59
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -125,6 +125,7 @@ export type {
|
|
|
125
125
|
ProfilePopoverProps,
|
|
126
126
|
ProfileMenuItem,
|
|
127
127
|
} from "./components/layouts/ProfilePopover";
|
|
128
|
+
export { default as WhitelabelCodes } from "./components/layouts/WhitelabelCodes";
|
|
128
129
|
export { NavBarItem } from "./components/layouts/NavBarItem";
|
|
129
130
|
export type { NavBarItemProps } from "./components/layouts/NavBarItem";
|
|
130
131
|
|
package/src/infra/api/client.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ApiError } from
|
|
2
|
-
import { findWhitelabel } from
|
|
1
|
+
import { ApiError } from "./types";
|
|
2
|
+
import { findWhitelabel } from "../../modules/whitelabel/actions/find-whitelabel.action";
|
|
3
3
|
|
|
4
4
|
export interface ApiClientOptions {
|
|
5
5
|
/**
|
|
@@ -7,66 +7,88 @@ export interface ApiClientOptions {
|
|
|
7
7
|
* Padrão false: `{base}/v1/{locale}/{wlId}{endpoint}`.
|
|
8
8
|
*/
|
|
9
9
|
omitApiVersion?: boolean;
|
|
10
|
+
|
|
11
|
+
/** Habilita logs detalhados das requisições (útil para desenvolvimento) */
|
|
12
|
+
emitLogs?: boolean;
|
|
10
13
|
}
|
|
11
14
|
|
|
12
15
|
export interface RequestConfig extends RequestInit {
|
|
13
16
|
timeout?: number;
|
|
14
17
|
/** Padrão `json`. Use `text` quando a API devolve corpo não-JSON. */
|
|
15
|
-
responseType?:
|
|
18
|
+
responseType?: "json" | "text";
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
class ApiClient {
|
|
19
22
|
private readonly baseUrl: string;
|
|
20
|
-
private readonly apiVersion =
|
|
21
|
-
private readonly apiLocale =
|
|
23
|
+
private readonly apiVersion = "v1";
|
|
24
|
+
private readonly apiLocale = "pt-br";
|
|
22
25
|
private readonly omitApiVersion: boolean;
|
|
26
|
+
private readonly emitLogs: boolean = false;
|
|
23
27
|
|
|
24
28
|
constructor(baseUrl: string, options?: ApiClientOptions) {
|
|
25
|
-
this.baseUrl = baseUrl.replace(/\/$/,
|
|
29
|
+
this.baseUrl = baseUrl.replace(/\/$/, "");
|
|
26
30
|
this.omitApiVersion = options?.omitApiVersion ?? false;
|
|
31
|
+
this.emitLogs = options?.emitLogs ?? false;
|
|
27
32
|
}
|
|
28
33
|
|
|
29
|
-
private async buildUrl(
|
|
34
|
+
private async buildUrl(
|
|
35
|
+
endpoint: string,
|
|
36
|
+
whiteLabelId: number,
|
|
37
|
+
): Promise<string> {
|
|
30
38
|
const wlPath = this.omitApiVersion
|
|
31
39
|
? `/${this.apiLocale}/${whiteLabelId}`
|
|
32
40
|
: `/${this.apiVersion}/${this.apiLocale}/${whiteLabelId}`;
|
|
33
|
-
const path = endpoint.startsWith(
|
|
41
|
+
const path = endpoint.startsWith("/") ? endpoint : `/${endpoint}`;
|
|
34
42
|
const url = `${this.baseUrl}${wlPath}${path}`;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
if (this.emitLogs) {
|
|
44
|
+
console.log("[ApiClient] buildUrl", {
|
|
45
|
+
baseURL: this.baseUrl,
|
|
46
|
+
whiteLabelId,
|
|
47
|
+
endpoint,
|
|
48
|
+
fullUrl: url,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
41
51
|
return url;
|
|
42
52
|
}
|
|
43
53
|
|
|
44
|
-
private async getDefaultHeaders(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
private async getDefaultHeaders(
|
|
55
|
+
token: string,
|
|
56
|
+
isFormData = false,
|
|
57
|
+
): Promise<HeadersInit> {
|
|
58
|
+
if (this.emitLogs) {
|
|
59
|
+
console.log("[ApiClient] getDefaultHeaders", {
|
|
60
|
+
token: token.substring(0, 20) + "...",
|
|
61
|
+
});
|
|
62
|
+
}
|
|
48
63
|
|
|
49
64
|
const headers: HeadersInit = {
|
|
50
65
|
authorization: token,
|
|
51
66
|
};
|
|
52
67
|
|
|
53
68
|
if (!isFormData) {
|
|
54
|
-
headers[
|
|
69
|
+
headers["Content-Type"] = "application/json";
|
|
55
70
|
}
|
|
56
71
|
|
|
57
72
|
return headers;
|
|
58
73
|
}
|
|
59
74
|
|
|
60
75
|
async request<T>(endpoint: string, config: RequestConfig = {}): Promise<T> {
|
|
61
|
-
|
|
76
|
+
if (this.emitLogs) {
|
|
77
|
+
console.log("[ApiClient] request called", {
|
|
78
|
+
endpoint,
|
|
79
|
+
method: config.method,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
62
82
|
|
|
63
|
-
const { timeout = 30000, responseType =
|
|
83
|
+
const { timeout = 30000, responseType = "json", ...fetchConfig } = config;
|
|
64
84
|
|
|
65
85
|
const controller = new AbortController();
|
|
66
86
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
67
87
|
|
|
68
88
|
try {
|
|
69
|
-
|
|
89
|
+
if (this.emitLogs) {
|
|
90
|
+
console.log("[ApiClient] Building URL and headers...");
|
|
91
|
+
}
|
|
70
92
|
|
|
71
93
|
const { id, token } = await findWhitelabel();
|
|
72
94
|
|
|
@@ -75,11 +97,12 @@ class ApiClient {
|
|
|
75
97
|
this.getDefaultHeaders(token, fetchConfig.body instanceof FormData),
|
|
76
98
|
]);
|
|
77
99
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
100
|
+
if (this.emitLogs)
|
|
101
|
+
console.log("[ApiClient] Fetching", {
|
|
102
|
+
url,
|
|
103
|
+
method: fetchConfig.method,
|
|
104
|
+
headers: defaultHeaders,
|
|
105
|
+
});
|
|
83
106
|
|
|
84
107
|
const response = await fetch(url, {
|
|
85
108
|
...fetchConfig,
|
|
@@ -90,87 +113,127 @@ class ApiClient {
|
|
|
90
113
|
signal: controller.signal,
|
|
91
114
|
});
|
|
92
115
|
|
|
93
|
-
|
|
116
|
+
if (this.emitLogs)
|
|
117
|
+
console.log("[ApiClient] Response received", {
|
|
118
|
+
status: response.status,
|
|
119
|
+
ok: response.ok,
|
|
120
|
+
});
|
|
94
121
|
|
|
95
122
|
if (!response.ok) {
|
|
96
123
|
const errBody = await response.text();
|
|
97
124
|
let message = `HTTP error ${response.status}`;
|
|
98
|
-
let code =
|
|
125
|
+
let code = "HTTP_ERROR";
|
|
99
126
|
try {
|
|
100
127
|
const errorData = JSON.parse(errBody) as Record<string, unknown>;
|
|
101
|
-
if (typeof errorData.message ===
|
|
102
|
-
|
|
128
|
+
if (typeof errorData.message === "string")
|
|
129
|
+
message = errorData.message;
|
|
130
|
+
if (typeof errorData.code === "string") code = errorData.code;
|
|
103
131
|
} catch {
|
|
104
132
|
if (errBody.trim()) message = errBody.trim();
|
|
105
133
|
}
|
|
106
|
-
console.error(
|
|
134
|
+
console.error("[ApiClient] Request failed", {
|
|
135
|
+
status: response.status,
|
|
136
|
+
message,
|
|
137
|
+
});
|
|
107
138
|
throw new ApiError(message, code, response.status);
|
|
108
139
|
}
|
|
109
140
|
|
|
110
|
-
if (responseType ===
|
|
141
|
+
if (responseType === "text") {
|
|
111
142
|
return (await response.text()) as T;
|
|
112
143
|
}
|
|
113
144
|
|
|
114
145
|
const data = (await response.json()) as T;
|
|
115
|
-
|
|
146
|
+
if (this.emitLogs)
|
|
147
|
+
console.log("[ApiClient] Request successful", { hasData: !!data });
|
|
116
148
|
return data;
|
|
117
149
|
} catch (error) {
|
|
118
|
-
console.error(
|
|
150
|
+
if (this.emitLogs) console.error("[ApiClient] Request error", { error });
|
|
119
151
|
|
|
120
152
|
if (error instanceof ApiError) {
|
|
121
153
|
throw error;
|
|
122
154
|
}
|
|
123
155
|
|
|
124
156
|
if (error instanceof Error) {
|
|
125
|
-
if (error.name ===
|
|
126
|
-
throw new ApiError(
|
|
157
|
+
if (error.name === "AbortError") {
|
|
158
|
+
throw new ApiError("Tempo de requisição excedido", "TIMEOUT", 408);
|
|
127
159
|
}
|
|
128
|
-
throw new ApiError(error.message,
|
|
160
|
+
throw new ApiError(error.message, "NETWORK_ERROR", 0);
|
|
129
161
|
}
|
|
130
162
|
|
|
131
|
-
throw new ApiError(
|
|
163
|
+
throw new ApiError("Erro desconhecido", "UNKNOWN_ERROR", 500);
|
|
132
164
|
} finally {
|
|
133
165
|
clearTimeout(timeoutId);
|
|
134
166
|
}
|
|
135
167
|
}
|
|
136
168
|
|
|
137
169
|
async get<T>(endpoint: string, config?: RequestConfig): Promise<T> {
|
|
138
|
-
return this.request<T>(endpoint, { ...config, method:
|
|
170
|
+
return this.request<T>(endpoint, { ...config, method: "GET" });
|
|
139
171
|
}
|
|
140
172
|
|
|
141
|
-
async post<T>(
|
|
173
|
+
async post<T>(
|
|
174
|
+
endpoint: string,
|
|
175
|
+
data?: unknown,
|
|
176
|
+
config?: RequestConfig,
|
|
177
|
+
): Promise<T> {
|
|
142
178
|
return this.request<T>(endpoint, {
|
|
143
179
|
...config,
|
|
144
|
-
method:
|
|
145
|
-
body:
|
|
180
|
+
method: "POST",
|
|
181
|
+
body:
|
|
182
|
+
data instanceof FormData
|
|
183
|
+
? data
|
|
184
|
+
: data
|
|
185
|
+
? JSON.stringify(data)
|
|
186
|
+
: undefined,
|
|
146
187
|
});
|
|
147
188
|
}
|
|
148
189
|
|
|
149
|
-
async put<T>(
|
|
190
|
+
async put<T>(
|
|
191
|
+
endpoint: string,
|
|
192
|
+
data?: unknown,
|
|
193
|
+
config?: RequestConfig,
|
|
194
|
+
): Promise<T> {
|
|
150
195
|
return this.request<T>(endpoint, {
|
|
151
196
|
...config,
|
|
152
|
-
method:
|
|
153
|
-
body:
|
|
197
|
+
method: "PUT",
|
|
198
|
+
body:
|
|
199
|
+
data instanceof FormData
|
|
200
|
+
? data
|
|
201
|
+
: data
|
|
202
|
+
? JSON.stringify(data)
|
|
203
|
+
: undefined,
|
|
154
204
|
});
|
|
155
205
|
}
|
|
156
206
|
|
|
157
|
-
async patch<T>(
|
|
207
|
+
async patch<T>(
|
|
208
|
+
endpoint: string,
|
|
209
|
+
data?: unknown,
|
|
210
|
+
config?: RequestConfig,
|
|
211
|
+
): Promise<T> {
|
|
158
212
|
return this.request<T>(endpoint, {
|
|
159
213
|
...config,
|
|
160
|
-
method:
|
|
161
|
-
body:
|
|
214
|
+
method: "PATCH",
|
|
215
|
+
body:
|
|
216
|
+
data instanceof FormData
|
|
217
|
+
? data
|
|
218
|
+
: data
|
|
219
|
+
? JSON.stringify(data)
|
|
220
|
+
: undefined,
|
|
162
221
|
});
|
|
163
222
|
}
|
|
164
223
|
|
|
165
224
|
async delete<T>(endpoint: string, config?: RequestConfig): Promise<T> {
|
|
166
|
-
return this.request<T>(endpoint, { ...config, method:
|
|
225
|
+
return this.request<T>(endpoint, { ...config, method: "DELETE" });
|
|
167
226
|
}
|
|
168
227
|
}
|
|
169
228
|
|
|
170
229
|
const api = {
|
|
171
|
-
apps: new ApiClient(
|
|
172
|
-
|
|
173
|
-
|
|
230
|
+
apps: new ApiClient(
|
|
231
|
+
process.env.GAPPS_R3_API_URL || "https://r3-api.greatapps.dev.br",
|
|
232
|
+
),
|
|
233
|
+
pages: new ApiClient(
|
|
234
|
+
process.env.GPAGES_R3_API_URL || "https://r3-api.greatpages.dev.br",
|
|
235
|
+
),
|
|
236
|
+
};
|
|
174
237
|
|
|
175
238
|
/** @deprecated use api.apps */
|
|
176
239
|
export const apiClient = api.apps;
|
|
@@ -71,12 +71,12 @@ class WhitelabelService {
|
|
|
71
71
|
const cache = this.createCache();
|
|
72
72
|
const cacheKey = this.getCacheKey(hostname);
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
const cachedData = await cache.select(cacheKey);
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
if (cachedData.status == 1 && 'data' in cachedData && cachedData.data) {
|
|
77
|
+
console.log('[WhitelabelService] Cache hit for domain', { hostname });
|
|
78
|
+
return JSON.parse(cachedData.data) as WhitelabelTokenData;
|
|
79
|
+
}
|
|
80
80
|
|
|
81
81
|
const data = await this.fetchFromApi(hostname);
|
|
82
82
|
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use server";
|
|
2
|
-
import { cache } from "react";
|
|
3
|
-
import { whitelabelStylesService } from "../services/whitelabel-styles.service";
|
|
4
|
-
const findWhitelabelStyles = cache(async (id_wl) => {
|
|
5
|
-
try {
|
|
6
|
-
return await whitelabelStylesService.getByWlId(id_wl);
|
|
7
|
-
} catch (error) {
|
|
8
|
-
console.error("[findWhitelabelStyles] Error fetching styles:", error);
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
export {
|
|
13
|
-
findWhitelabelStyles
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=find-whitelabel-styles.action.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/whitelabel/actions/find-whitelabel-styles.action.ts"],"sourcesContent":["'use server';\n\nimport { cache } from 'react';\nimport { whitelabelStylesService } from '../services/whitelabel-styles.service';\nimport { WhitelabelStylesData } from '../styles-schema';\n\nexport const findWhitelabelStyles = cache(async (id_wl: number): Promise<WhitelabelStylesData | null> => {\n try {\n return await whitelabelStylesService.getByWlId(id_wl);\n } catch (error) {\n console.error('[findWhitelabelStyles] Error fetching styles:', error);\n return null;\n }\n});\n"],"mappings":";AAEA,SAAS,aAAa;AACtB,SAAS,+BAA+B;AAGjC,MAAM,uBAAuB,MAAM,OAAO,UAAwD;AACvG,MAAI;AACF,WAAO,MAAM,wBAAwB,UAAU,KAAK;AAAA,EACtD,SAAS,OAAO;AACd,YAAQ,MAAM,iDAAiD,KAAK;AACpE,WAAO;AAAA,EACT;AACF,CAAC;","names":[]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use server";
|
|
2
|
-
import { whitelabelStylesService } from "../services/whitelabel-styles.service";
|
|
3
|
-
import { safeServerAction } from "../../../utils/safeServerAction";
|
|
4
|
-
async function revalidateWhitelabelStylesAction(id_wl) {
|
|
5
|
-
return safeServerAction(async () => {
|
|
6
|
-
return whitelabelStylesService.revalidateByWlId(id_wl);
|
|
7
|
-
});
|
|
8
|
-
}
|
|
9
|
-
export {
|
|
10
|
-
revalidateWhitelabelStylesAction
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=revalidate-whitelabel-styles.action.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/whitelabel/actions/revalidate-whitelabel-styles.action.ts"],"sourcesContent":["'use server';\n\nimport { whitelabelStylesService } from '../services/whitelabel-styles.service';\nimport { safeServerAction } from '../../../utils/safeServerAction';\n\nexport async function revalidateWhitelabelStylesAction(id_wl: number) {\n return safeServerAction(async () => {\n return whitelabelStylesService.revalidateByWlId(id_wl);\n });\n}\n"],"mappings":";AAEA,SAAS,+BAA+B;AACxC,SAAS,wBAAwB;AAEjC,eAAsB,iCAAiC,OAAe;AACpE,SAAO,iBAAiB,YAAY;AAClC,WAAO,wBAAwB,iBAAiB,KAAK;AAAA,EACvD,CAAC;AACH;","names":[]}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import greatCache from "@greatapps/cache";
|
|
2
|
-
import { ApiError } from "../../../infra/api/types";
|
|
3
|
-
function parseStyleField(value) {
|
|
4
|
-
if (typeof value === "string") {
|
|
5
|
-
try {
|
|
6
|
-
return JSON.parse(value);
|
|
7
|
-
} catch {
|
|
8
|
-
return null;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
if (value && typeof value === "object") return value;
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
function mapWithStyleResponse(row) {
|
|
15
|
-
const general = parseStyleField(row["style_general"]);
|
|
16
|
-
if (general) {
|
|
17
|
-
if (!general.logo && row["logo"]) general.logo = row["logo"];
|
|
18
|
-
if (!general.favicon && row["favicon"]) general.favicon = row["favicon"];
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
21
|
-
id: row["style_id"],
|
|
22
|
-
id_wl: row["style_id_wl"],
|
|
23
|
-
general,
|
|
24
|
-
signin_page: parseStyleField(row["style_signin_page"]),
|
|
25
|
-
signup_page: parseStyleField(row["style_signup_page"]),
|
|
26
|
-
dashboard: parseStyleField(row["style_dashboard"])
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
class WhitelabelStylesService {
|
|
30
|
-
getApiUrl() {
|
|
31
|
-
const apiUrl = process.env.GAPPS_R3_API_URL;
|
|
32
|
-
if (!apiUrl) throw new ApiError("GAPPS_R3_API_URL not configured", "CONFIG_ERROR", 500);
|
|
33
|
-
return apiUrl;
|
|
34
|
-
}
|
|
35
|
-
getToken() {
|
|
36
|
-
const token = process.env.WHITELABEL_TOKEN_MASTER;
|
|
37
|
-
if (!token) throw new ApiError("WHITELABEL_TOKEN_MASTER not configured", "CONFIG_ERROR", 500);
|
|
38
|
-
return token;
|
|
39
|
-
}
|
|
40
|
-
createCache() {
|
|
41
|
-
return new greatCache({
|
|
42
|
-
service: "whitelabel-styles-service",
|
|
43
|
-
version: "1.0",
|
|
44
|
-
domain: "whitelabel-cache.greatapps.com.br",
|
|
45
|
-
ambient: process.env.NODE_ENV || "development"
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
getCacheKey(id_wl) {
|
|
49
|
-
return `whitelabel-styles-${id_wl}`;
|
|
50
|
-
}
|
|
51
|
-
async fetchFromApi(id_wl) {
|
|
52
|
-
const apiUrl = this.getApiUrl();
|
|
53
|
-
const token = this.getToken();
|
|
54
|
-
const url = `${apiUrl}/v1/pt-br/1/whitelabels/${id_wl}/with-style`;
|
|
55
|
-
console.log("[WhitelabelStylesService] Fetching with-style for id_wl", { id_wl, url });
|
|
56
|
-
const response = await fetch(url, {
|
|
57
|
-
method: "GET",
|
|
58
|
-
headers: { authorization: token }
|
|
59
|
-
});
|
|
60
|
-
if (!response.ok) {
|
|
61
|
-
console.error("[WhitelabelStylesService] Failed to fetch with-style", { status: response.status });
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
const result = await response.json();
|
|
65
|
-
if (result.status !== 1 || !result.data?.length) {
|
|
66
|
-
console.warn("[WhitelabelStylesService] No data in with-style for id_wl", { id_wl });
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
return mapWithStyleResponse(result.data[0]);
|
|
70
|
-
}
|
|
71
|
-
async getByWlId(id_wl) {
|
|
72
|
-
const cache = this.createCache();
|
|
73
|
-
const cacheKey = this.getCacheKey(id_wl);
|
|
74
|
-
const cachedData = await cache.select(cacheKey);
|
|
75
|
-
if (cachedData.status == 1 && "data" in cachedData && cachedData.data) {
|
|
76
|
-
console.log("[WhitelabelStylesService] Cache hit for id_wl", { id_wl });
|
|
77
|
-
return JSON.parse(cachedData.data);
|
|
78
|
-
}
|
|
79
|
-
const parsed = await this.fetchFromApi(id_wl);
|
|
80
|
-
if (parsed?.id) {
|
|
81
|
-
await cache.insert(cacheKey, JSON.stringify(parsed), 300);
|
|
82
|
-
}
|
|
83
|
-
return parsed;
|
|
84
|
-
}
|
|
85
|
-
async revalidateByWlId(id_wl) {
|
|
86
|
-
const cache = this.createCache();
|
|
87
|
-
const cacheKey = this.getCacheKey(id_wl);
|
|
88
|
-
console.log("[WhitelabelStylesService] Revalidating cache for id_wl", { id_wl });
|
|
89
|
-
await cache.delete(cacheKey);
|
|
90
|
-
const parsed = await this.fetchFromApi(id_wl);
|
|
91
|
-
if (parsed?.id) {
|
|
92
|
-
await cache.insert(cacheKey, JSON.stringify(parsed), 300);
|
|
93
|
-
}
|
|
94
|
-
console.log("[WhitelabelStylesService] Cache revalidated for id_wl", { id_wl });
|
|
95
|
-
return parsed;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
const whitelabelStylesService = new WhitelabelStylesService();
|
|
99
|
-
export {
|
|
100
|
-
whitelabelStylesService
|
|
101
|
-
};
|
|
102
|
-
//# sourceMappingURL=whitelabel-styles.service.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/whitelabel/services/whitelabel-styles.service.ts"],"sourcesContent":["import greatCache from '@greatapps/cache';\nimport { ApiError } from '../../../infra/api/types';\nimport { WhitelabelStylesData, GeneralStyleJson } from '../styles-schema';\n\ninterface WithStyleApiResponse {\n status: number;\n data: Record<string, unknown>[];\n}\n\nfunction parseStyleField<T>(value: unknown): T | null {\n if (typeof value === 'string') {\n try { return JSON.parse(value) as T; } catch { return null; }\n }\n if (value && typeof value === 'object') return value as T;\n return null;\n}\n\nfunction mapWithStyleResponse(row: Record<string, unknown>): WhitelabelStylesData {\n const general = parseStyleField<GeneralStyleJson>(row['style_general']);\n\n if (general) {\n if (!general.logo && row['logo']) general.logo = row['logo'] as string;\n if (!general.favicon && row['favicon']) general.favicon = row['favicon'] as string;\n }\n\n return {\n id: row['style_id'] as number,\n id_wl: row['style_id_wl'] as number,\n general,\n signin_page: parseStyleField(row['style_signin_page']),\n signup_page: parseStyleField(row['style_signup_page']),\n dashboard: parseStyleField(row['style_dashboard']),\n };\n}\n\nclass WhitelabelStylesService {\n private getApiUrl(): string {\n const apiUrl = process.env.GAPPS_R3_API_URL;\n if (!apiUrl) throw new ApiError('GAPPS_R3_API_URL not configured', 'CONFIG_ERROR', 500);\n return apiUrl;\n }\n\n private getToken(): string {\n const token = process.env.WHITELABEL_TOKEN_MASTER;\n if (!token) throw new ApiError('WHITELABEL_TOKEN_MASTER not configured', 'CONFIG_ERROR', 500);\n return token;\n }\n\n private createCache() {\n return new greatCache({\n service: 'whitelabel-styles-service',\n version: '1.0',\n domain: 'whitelabel-cache.greatapps.com.br',\n ambient: process.env.NODE_ENV || 'development',\n });\n }\n\n private getCacheKey(id_wl: number): string {\n return `whitelabel-styles-${id_wl}`;\n }\n\n private async fetchFromApi(id_wl: number): Promise<WhitelabelStylesData | null> {\n const apiUrl = this.getApiUrl();\n const token = this.getToken();\n const url = `${apiUrl}/v1/pt-br/1/whitelabels/${id_wl}/with-style`;\n\n console.log('[WhitelabelStylesService] Fetching with-style for id_wl', { id_wl, url });\n\n const response = await fetch(url, {\n method: 'GET',\n headers: { authorization: token },\n });\n\n if (!response.ok) {\n console.error('[WhitelabelStylesService] Failed to fetch with-style', { status: response.status });\n return null;\n }\n\n const result: WithStyleApiResponse = await response.json();\n\n if (result.status !== 1 || !result.data?.length) {\n console.warn('[WhitelabelStylesService] No data in with-style for id_wl', { id_wl });\n return null;\n }\n\n return mapWithStyleResponse(result.data[0]);\n }\n\n async getByWlId(id_wl: number): Promise<WhitelabelStylesData | null> {\n const cache = this.createCache();\n const cacheKey = this.getCacheKey(id_wl);\n\n const cachedData = await cache.select(cacheKey);\n\n if (cachedData.status == 1 && 'data' in cachedData && cachedData.data) {\n console.log('[WhitelabelStylesService] Cache hit for id_wl', { id_wl });\n return JSON.parse(cachedData.data) as WhitelabelStylesData;\n }\n\n const parsed = await this.fetchFromApi(id_wl);\n\n if (parsed?.id) {\n await cache.insert(cacheKey, JSON.stringify(parsed), 300);\n }\n\n return parsed;\n }\n\n async revalidateByWlId(id_wl: number): Promise<WhitelabelStylesData | null> {\n const cache = this.createCache();\n const cacheKey = this.getCacheKey(id_wl);\n\n console.log('[WhitelabelStylesService] Revalidating cache for id_wl', { id_wl });\n\n await cache.delete(cacheKey);\n\n const parsed = await this.fetchFromApi(id_wl);\n\n if (parsed?.id) {\n await cache.insert(cacheKey, JSON.stringify(parsed), 300);\n }\n\n console.log('[WhitelabelStylesService] Cache revalidated for id_wl', { id_wl });\n\n return parsed;\n }\n}\n\nexport const whitelabelStylesService = new WhitelabelStylesService();\n"],"mappings":"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","names":[]}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
|
|
3
|
-
import { cache } from 'react';
|
|
4
|
-
import { whitelabelStylesService } from '../services/whitelabel-styles.service';
|
|
5
|
-
import { WhitelabelStylesData } from '../styles-schema';
|
|
6
|
-
|
|
7
|
-
export const findWhitelabelStyles = cache(async (id_wl: number): Promise<WhitelabelStylesData | null> => {
|
|
8
|
-
try {
|
|
9
|
-
return await whitelabelStylesService.getByWlId(id_wl);
|
|
10
|
-
} catch (error) {
|
|
11
|
-
console.error('[findWhitelabelStyles] Error fetching styles:', error);
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
});
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
|
|
3
|
-
import { whitelabelStylesService } from '../services/whitelabel-styles.service';
|
|
4
|
-
import { safeServerAction } from '../../../utils/safeServerAction';
|
|
5
|
-
|
|
6
|
-
export async function revalidateWhitelabelStylesAction(id_wl: number) {
|
|
7
|
-
return safeServerAction(async () => {
|
|
8
|
-
return whitelabelStylesService.revalidateByWlId(id_wl);
|
|
9
|
-
});
|
|
10
|
-
}
|