Skip to content

Commit aba6473

Browse files
committed
update external api setting page
create dataHandler and mediaHandler route
1 parent bebd5e1 commit aba6473

File tree

12 files changed

+171
-17
lines changed

12 files changed

+171
-17
lines changed

src/components/settings.tsx

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,13 @@ export const Settings = ({
158158
const [timeToSleep, setTimeToSleep] = useState<number>(parseInt(config("time_to_sleep_sec")));
159159
const [idleTextPrompt, setIdleTextPrompt] = useState(config("idle_text_prompt"));
160160

161-
const [externalAPIEnabled,setExternalAPIEnabled] = useState<boolean>(config("external_api_enabled") === 'true' ? true : false);
161+
const [externalApiEnabled,setExternalApiEnabled] = useState<boolean>(config("external_api_enabled") === 'true' ? true : false);
162+
const [xApiKey, setXApiKey] = useState(config("x_api_key"));
163+
const [xApiSecret, setXApiSecret] = useState(config("x_api_secret"));
164+
const [xAccessSecret, setXAccessSecret] = useState(config("x_access_secret"));
165+
const [xAccessToken, setXAccessToken] = useState(config("x_access_token"));
166+
const [xBearerToken, setXBearerToken] = useState(config("x_bearer_token"));
167+
const [tgBotToken, setTgBotToken] = useState(config("telegram_bot_token"));
162168

163169
const [name, setName] = useState(config("name"));
164170
const [systemPrompt, setSystemPrompt] = useState(config("system_prompt"));
@@ -268,7 +274,7 @@ export const Settings = ({
268274
whisperOpenAIApiKey, whisperOpenAIModel, whisperOpenAIUrl,
269275
whisperCppUrl,
270276
amicaLifeEnabled, timeBeforeIdle, minTimeInterval, maxTimeInterval, timeToSleep, idleTextPrompt,
271-
externalAPIEnabled,
277+
externalApiEnabled, xApiKey, xApiSecret, xAccessSecret, xAccessToken, xBearerToken, tgBotToken,
272278
name,
273279
systemPrompt,
274280
sttWakeWordEnabled, sttWakeWord,
@@ -617,8 +623,20 @@ export const Settings = ({
617623

618624
case 'external_api':
619625
return <ExternalAPIPage
620-
externalAPIEnabled={externalAPIEnabled}
621-
setExternalAPIEnabled={setExternalAPIEnabled}
626+
externalApiEnabled={externalApiEnabled}
627+
xApiKey={xApiKey}
628+
xApiSecret={xApiSecret}
629+
xAccessSecret={xAccessSecret}
630+
xAccessToken={xAccessToken}
631+
xBearerToken={xBearerToken}
632+
tgBotToken={tgBotToken}
633+
setExternalApiEnabled={setExternalApiEnabled}
634+
setXApiKey={setXApiKey}
635+
setXApiSecret={setXApiSecret}
636+
setXAccessSecret={setXAccessSecret}
637+
setXAccessToken={setXAccessToken}
638+
setXBearerToken={setXBearerToken}
639+
setTgBotToken={setTgBotToken}
622640
setSettingsUpdated={setSettingsUpdated}
623641
/>
624642

src/components/settings/ExternalAPIPage.tsx

Lines changed: 114 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,41 @@ import { BasicPage, FormRow } from './common';
44
import { config, updateConfig } from "@/utils/config";
55
import { SwitchBox } from "@/components/switchBox"
66
import isDev from '@/utils/isDev';
7+
import { IconButton } from '../iconButton';
8+
import { SecretTextInput } from '../secretTextInput';
79

810

911
export function ExternalAPIPage({
10-
externalAPIEnabled,
11-
setExternalAPIEnabled,
12+
externalApiEnabled,
13+
xApiKey,
14+
xApiSecret,
15+
xAccessToken,
16+
xAccessSecret,
17+
xBearerToken,
18+
tgBotToken,
19+
setExternalApiEnabled,
20+
setXApiKey,
21+
setXApiSecret,
22+
setXAccessToken,
23+
setXAccessSecret,
24+
setXBearerToken,
25+
setTgBotToken,
1226
setSettingsUpdated,
1327
}: {
14-
externalAPIEnabled: boolean;
15-
setExternalAPIEnabled: (amicaLifeEnabled: boolean) => void;
28+
externalApiEnabled: boolean;
29+
xApiKey: string;
30+
xApiSecret: string;
31+
xAccessToken: string;
32+
xAccessSecret: string;
33+
xBearerToken: string;
34+
tgBotToken: string;
35+
setExternalApiEnabled: (amicaLifeEnabled: boolean) => void;
36+
setXApiKey: (key: string) => void;
37+
setXApiSecret: (key: string) => void;
38+
setXAccessToken: (key: string) => void;
39+
setXAccessSecret: (key: string) => void;
40+
setXBearerToken: (key: string) => void;
41+
setTgBotToken: (key: string) => void;
1642
setSettingsUpdated: (updated: boolean) => void;
1743
}) {
1844

@@ -27,18 +53,100 @@ export function ExternalAPIPage({
2753
<li className="py-4">
2854
<FormRow label={`${t("Use")} ${t("External API")}`}>
2955
<SwitchBox
30-
value={externalAPIEnabled}
56+
value={externalApiEnabled}
3157
label={`${t("External API")} ${t("Enabled")} ${t("(Disable to improve performance)")}`}
3258
disabled={!isDev}
3359
onChange={(value: boolean) => {
34-
setExternalAPIEnabled(value);
60+
setExternalApiEnabled(value);
3561
updateConfig("external_api_enabled", value.toString());
3662
setSettingsUpdated(true);
3763
}}
3864
/>
3965
</FormRow>
4066
</li>
67+
{externalApiEnabled && (
68+
<>
4169

70+
<li className="py-4">
71+
<FormRow label="X API Key">
72+
<SecretTextInput
73+
value={xApiKey}
74+
onChange={(event: React.ChangeEvent<any>) => {
75+
setXApiKey(event.target.value);
76+
updateConfig("x_api_key", event.target.value);
77+
setSettingsUpdated(true);
78+
}}
79+
/>
80+
</FormRow>
81+
</li>
82+
83+
<li className="py-4">
84+
<FormRow label="X API Secret">
85+
<SecretTextInput
86+
value={xApiSecret}
87+
onChange={(event: React.ChangeEvent<any>) => {
88+
setXApiSecret(event.target.value);
89+
updateConfig("x_api_secret", event.target.value);
90+
setSettingsUpdated(true);
91+
}}
92+
/>
93+
</FormRow>
94+
</li>
95+
96+
<li className="py-4">
97+
<FormRow label="X Access Token">
98+
<SecretTextInput
99+
value={xAccessToken}
100+
onChange={(event: React.ChangeEvent<any>) => {
101+
setXAccessToken(event.target.value);
102+
updateConfig("x_access_token", event.target.value);
103+
setSettingsUpdated(true);
104+
}}
105+
/>
106+
</FormRow>
107+
</li>
108+
109+
<li className="py-4">
110+
<FormRow label="X Access Secret">
111+
<SecretTextInput
112+
value={xAccessSecret}
113+
onChange={(event: React.ChangeEvent<any>) => {
114+
setXAccessSecret(event.target.value);
115+
updateConfig("x_access_secret", event.target.value);
116+
setSettingsUpdated(true);
117+
}}
118+
/>
119+
</FormRow>
120+
</li>
121+
122+
<li className="py-4">
123+
<FormRow label="X Bearer Token">
124+
<SecretTextInput
125+
value={xBearerToken}
126+
onChange={(event: React.ChangeEvent<any>) => {
127+
setXBearerToken(event.target.value);
128+
updateConfig("x_bearer_token", event.target.value);
129+
setSettingsUpdated(true);
130+
}}
131+
/>
132+
</FormRow>
133+
</li>
134+
135+
<li className="py-4">
136+
<FormRow label="Telegram Bot Token">
137+
<SecretTextInput
138+
value={tgBotToken}
139+
onChange={(event: React.ChangeEvent<any>) => {
140+
setTgBotToken(event.target.value);
141+
updateConfig("telegram_bot_token", event.target.value);
142+
setSettingsUpdated(true);
143+
}}
144+
/>
145+
</FormRow>
146+
</li>
147+
148+
</>
149+
)}
42150

43151
</ul>
44152
</BasicPage>

src/features/externalAPI/dataHandlerStorage/config.json

Whitespace-only changes.

src/features/externalAPI/dataHandlerStorage/logs.json

Whitespace-only changes.

src/features/externalAPI/dataHandlerStorage/subconscious.json

Whitespace-only changes.

src/features/externalAPI/dataHandlerStorage/userInputMessages.json

Whitespace-only changes.

src/features/externalAPI/socialMedia/telegramClient.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
import { config } from '@/utils/config';
12
import { Telegraf } from 'telegraf';
23

34
class TelegramClient {
45
private bot: Telegraf;
56

67
constructor() {
7-
const botToken = process.env.TELEGRAM_BOT_TOKEN as string;
8+
const botToken = config("telegram_bot_token");
89

910
if (!botToken) {
1011
throw new Error('TELEGRAM_BOT_TOKEN is not defined in the environment variables');

src/features/externalAPI/socialMedia/twitterClient.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1+
import { config } from '@/utils/config';
12
import { TwitterApi, TwitterApiReadWrite, TwitterApiReadOnly, TweetV2PostTweetResult } from 'twitter-api-v2';
23

34
class TwitterClient {
45
private twitterClient: TwitterApiReadWrite;
56
private twitterBearer: TwitterApiReadOnly;
67

78
constructor() {
8-
const appKey = process.env.X_API_KEY as string;
9-
const appSecret = process.env.X_API_SECRET as string;
10-
const accessToken = process.env.X_ACCESS_TOKEN as string;
11-
const accessSecret = process.env.X_ACCESS_SECRET as string;
12-
const bearerToken = process.env.X_BEARER_TOKEN as string;
9+
const appKey = config("x_api_key");
10+
const appSecret = config("x_access_secret");
11+
const accessToken = config("x_access_token");
12+
const accessSecret = config("x_access_secret");
13+
const bearerToken = config("x_bearer_token");
1314

1415
// Initialize the Twitter API client with access tokens
1516
const client = new TwitterApi({

src/pages/api/amicaHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { NextApiRequest, NextApiResponse } from 'next';
22

33
export default function handler(req: NextApiRequest, res: NextApiResponse) {
44
if (req.method === 'GET') {
5-
res.status(200).json({ message: 'Hello, Amica API!' });
5+
res.status(200).json({ message: 'Amica Handler' });
66
} else {
77
res.setHeader('Allow', ['GET']);
88
res.status(405).end(`Method ${req.method} Not Allowed`);

src/pages/api/dataHandler.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { NextApiRequest, NextApiResponse } from 'next';
2+
3+
export default function handler(req: NextApiRequest, res: NextApiResponse) {
4+
if (req.method === 'GET') {
5+
res.status(200).json({ message: 'Data Handler' });
6+
} else {
7+
res.setHeader('Allow', ['GET']);
8+
res.status(405).end(`Method ${req.method} Not Allowed`);
9+
}
10+
}

src/pages/api/mediaHandler.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { NextApiRequest, NextApiResponse } from 'next';
2+
3+
export default function handler(req: NextApiRequest, res: NextApiResponse) {
4+
if (req.method === 'GET') {
5+
res.status(200).json({ message: 'Media Handler' });
6+
} else {
7+
res.setHeader('Allow', ['GET']);
8+
res.status(405).end(`Method ${req.method} Not Allowed`);
9+
}
10+
}

src/utils/config.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,12 @@ const defaults = {
7474
coqui_voice_id: process.env.NEXT_PUBLIC_COQUI_VOICEID ?? "71c6c3eb-98ca-4a05-8d6b-f8c2b5f9f3a3",
7575
amica_life_enabled: process.env.NEXT_PUBLIC_AMICA_LIFE_ENABLED ?? 'true',
7676
external_api_enabled: process.env.NEXT_PUBLIC_EXTERNAL_API_ENABLED ?? 'false',
77+
x_api_key: process.env.NEXT_PUBLIC_X_API_KEY ?? '',
78+
x_api_secret: process.env.NEXT_PUBLIC_X_API_SECRET ?? '',
79+
x_access_token: process.env.NEXT_PUBLIC_X_ACCESS_TOKEN ?? '',
80+
x_access_secret: process.env.NEXT_PUBLIC_X_ACCESS_SECRET ?? '',
81+
x_bearer_token: process.env.NEXT_PUBLIC_X_BEARER_TOKEN ?? '',
82+
telegram_bot_token: process.env.NEXT_PUBLIC_TELEGRAM_BOT_TOKEN ?? '',
7783
min_time_interval_sec: '10',
7884
max_time_interval_sec: '20',
7985
time_to_sleep_sec: '90',

0 commit comments

Comments
 (0)