@c-rex/contexts 0.1.12 → 0.1.14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c-rex/contexts",
3
- "version": "0.1.12",
3
+ "version": "0.1.14",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "src"
@@ -1,9 +1,8 @@
1
1
  "use client"
2
2
 
3
- import { CREX_TOKEN_HEADER_KEY, UI_LANG_OPTIONS } from '@c-rex/constants'
3
+ import { API, CREX_TOKEN_HEADER_KEY, SDK_CONFIG_KEY, UI_LANG_OPTIONS } from '@c-rex/constants'
4
4
  import { CookiesConfigs, LanguageAndCountries, AvailableVersionsInterface } from '@c-rex/interfaces'
5
5
  import { call } from '@c-rex/utils'
6
- import { getClientConfigs } from '@c-rex/utils/next-cookies'
7
6
  import React, { createContext, useContext, useEffect, useState } from 'react'
8
7
  import { useLanguageStore } from '@c-rex/components/language-store'
9
8
 
@@ -29,54 +28,52 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
29
28
  const [articleLang, setArticleLang] = useState<string | null>(null)
30
29
  const [availableVersions, setAvailableVersions] = useState<AvailableVersionsInterface[] | null>(null)
31
30
 
32
-
33
- const manageUILanguage = async (configs: CookiesConfigs): Promise<void> => {
31
+ const manageUILanguage = (configs: CookiesConfigs): void => {
34
32
  const uiLang = useLanguageStore.getState().uiLang;
35
- const setUiLang = useLanguageStore.getState().setUiLang;
36
- let locale = uiLang
37
33
 
38
- if (locale.length === 0) {
34
+ if (uiLang.length === 0) {
35
+ const setUiLang = useLanguageStore.getState().setUiLang;
39
36
  const browserLang = navigator.language;
40
37
 
41
- locale = UI_LANG_OPTIONS.includes(browserLang.toLowerCase())
38
+ const locale = UI_LANG_OPTIONS.includes(browserLang.toLowerCase())
42
39
  ? browserLang
43
40
  : configs.languageSwitcher.default;
41
+
42
+ setUiLang(locale)
44
43
  }
45
- setUiLang(locale)
46
44
  }
47
45
 
48
- const manageContentLanguage = async (configs: CookiesConfigs): Promise<void> => {
46
+ const manageContentLanguage = (configs: CookiesConfigs): void => {
49
47
  const contentLang = useLanguageStore.getState().contentLang;
50
- const setContentLang = useLanguageStore.getState().setContentLang;
51
- const availableLanguages = useLanguageStore.getState().availableLanguages;
52
48
 
53
- let locale = contentLang
54
- if (locale.length === 0) {
49
+ if (contentLang.length === 0) {
50
+ const setContentLang = useLanguageStore.getState().setContentLang;
51
+ const availableLanguages = useLanguageStore.getState().availableLanguages;
52
+
55
53
  const browserLang = navigator.language;
56
54
  const hasLang = availableLanguages.some((item) => item.value === browserLang);
57
55
 
58
- locale = hasLang
56
+ const locale = hasLang
59
57
  ? browserLang
60
58
  : configs.languageSwitcher.default;
61
- }
62
59
 
63
- setContentLang(locale)
60
+ setContentLang(locale)
61
+ }
64
62
  }
65
63
 
66
- const manageToken = async (configs: CookiesConfigs): Promise<void> => {
64
+ const manageToken = async (): Promise<void> => {
67
65
  try {
68
- const url = configs.publicNextApiUrl
69
- const res = await fetch(`${url}/api/cookies?key=${CREX_TOKEN_HEADER_KEY}`);
66
+ const res = await fetch(`/api/cookies?key=${CREX_TOKEN_HEADER_KEY}`);
70
67
 
71
68
  if (!res.ok) {
72
- await requestToken(configs);
69
+ await requestToken();
73
70
  return
74
71
  }
75
72
 
76
73
  const hasToken = await res.json();
77
74
 
78
75
  if (hasToken.value === null) {
79
- await requestToken(configs);
76
+ await requestToken();
80
77
  }
81
78
  } catch (error) {
82
79
  call("CrexLogger.log", {
@@ -86,12 +83,16 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
86
83
  }
87
84
  }
88
85
 
89
- const requestToken = async (configs: CookiesConfigs): Promise<void> => {
86
+ const requestToken = async (): Promise<void> => {
90
87
  try {
91
- await fetch(`${configs.publicNextApiUrl}/api/token`, {
88
+ const response = await fetch('/api/oidc/token', {
92
89
  method: 'POST',
93
90
  credentials: 'include',
94
91
  });
92
+
93
+ const { token } = await response.json();
94
+
95
+ return token;
95
96
  } catch (error) {
96
97
  call("CrexLogger.log", {
97
98
  level: "error",
@@ -100,18 +101,54 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
100
101
  }
101
102
  }
102
103
 
103
- const interval = async (delayMs: number, configs: CookiesConfigs) => {
104
+ const updateIssuerMetadata = async (): Promise<void> => {
105
+ try {
106
+ await fetch('/api/oidc/issuer', {
107
+ method: 'POST',
108
+ credentials: 'include',
109
+ });
110
+ } catch (error) {
111
+ call("CrexLogger.log", {
112
+ level: "error",
113
+ message: `config-provider.updateIssuerMetadata error: ${error}`
114
+ });
115
+ }
116
+ }
117
+
118
+ const interval = async (delayMs: number) => {
104
119
  while (true) {
105
120
  await new Promise(resolve => setTimeout(resolve, delayMs));
106
- await manageToken(configs);
121
+ await manageToken();
107
122
  }
108
123
  }
109
124
 
110
125
  const updateLanguages = async () => {
111
- const setAvailableLanguages = useLanguageStore.getState().setAvailableLanguages;
126
+ const availableLanguages = useLanguageStore.getState().availableLanguages;
127
+
128
+ if (availableLanguages.length === 0) {
129
+ const setAvailableLanguages = useLanguageStore.getState().setAvailableLanguages;
130
+
131
+ const langs = await call<LanguageAndCountries[]>("LanguageService.getLanguagesAndCountries")
132
+ setAvailableLanguages(langs)
133
+ }
134
+ }
112
135
 
113
- const langs = await call<LanguageAndCountries[]>("LanguageService.getLanguagesAndCountries")
114
- setAvailableLanguages(langs)
136
+ const getClientConfig = async (): Promise<CookiesConfigs> => {
137
+ const res = await fetch(`/api/cookies?key=${SDK_CONFIG_KEY}`);
138
+
139
+ if (!res.ok) {
140
+ throw new Error('Failed to fetch token from cookies API');
141
+ }
142
+
143
+ const jsonConfig = await res.json();
144
+
145
+ if (jsonConfig.value === null) {
146
+ throw new Error('Client config not found in cookies');
147
+ }
148
+
149
+ const configs: CookiesConfigs = JSON.parse(jsonConfig.value);
150
+
151
+ return configs;
115
152
  }
116
153
 
117
154
  useEffect(() => {
@@ -121,22 +158,17 @@ export const AppConfigProvider = ({ children }: { children: React.ReactNode }) =
121
158
  try {
122
159
  setLoading(true)
123
160
 
124
- const configsResult = await getClientConfigs()
125
- if (!configsResult) {
126
- throw new Error("Config cookie not available");
127
- }
128
-
129
- await manageToken(configsResult)
161
+ const configsResult = await getClientConfig()
130
162
 
131
- await Promise.all([
132
- manageUILanguage(configsResult),
133
- manageContentLanguage(configsResult),
134
- updateLanguages()
135
- ])
163
+ await manageToken()
136
164
 
165
+ manageUILanguage(configsResult)
166
+ manageContentLanguage(configsResult)
167
+ updateLanguages()
168
+ updateIssuerMetadata()
137
169
  setError(null)
138
170
  setConfigs(configsResult)
139
- interval(1000 * 60 * 9, configsResult);
171
+ interval(1000 * 60 * 9);
140
172
  } catch (err) {
141
173
  call("CrexLogger.log", {
142
174
  level: "error",
package/src/search.tsx CHANGED
@@ -1,6 +1,6 @@
1
1
  "use client"
2
2
 
3
- import { createContext, useContext, ReactNode, useState, useEffect, use } from "react";
3
+ import { createContext, useContext, ReactNode, useState } from "react";
4
4
  import { Loading } from "@c-rex/components/loading";
5
5
 
6
6
  type SearchContextProps = {