m
This commit is contained in:
parent
f1791b8699
commit
e68c675be2
@ -8,7 +8,7 @@ use kinode_process_lib::{
|
||||
},
|
||||
StatusCode,
|
||||
},
|
||||
println, set_state, Address, Message, Request,
|
||||
kiprintln, set_state, Address, Message, Request,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashMap;
|
||||
@ -121,7 +121,6 @@ pub fn load_state() -> State {
|
||||
|
||||
fn handle_message(our: &Address) -> anyhow::Result<()> {
|
||||
let message = await_message()?;
|
||||
|
||||
if !message.is_request() {
|
||||
return Err(anyhow::anyhow!("unexpected Response: {:?}", message));
|
||||
}
|
||||
@ -160,26 +159,27 @@ fn handle_http(our: &Address, request: IncomingHttpRequest) -> Result<()> {
|
||||
"GET" => handle_get(our, request, &mut state),
|
||||
"POST" => handle_post(our, request, &mut state),
|
||||
_ => {
|
||||
println!("cookies - got weird req - {:?}", request);
|
||||
kiprintln!("cookies - got weird req - {:?}", request);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
fn handle_get(our: &Address, req: IncomingHttpRequest, state: &mut State) -> anyhow::Result<()> {
|
||||
// println!("got GET req - {:?}", req);
|
||||
// kiprintln!("got GET req - {:?}", req);
|
||||
let conc = format!("{}:{}{}", our.process(), our.package_id(), "/api");
|
||||
let pat = req.bound_path(Some(conc.as_str()));
|
||||
kiprintln!("got get {} {}", conc, pat);
|
||||
// let pats = req.path()?;
|
||||
// let pat = pats.as_str();
|
||||
let uparams = req.url_params();
|
||||
let qparams = req.query_params();
|
||||
|
||||
// println!("request path {}", pat);
|
||||
// println!("request up {:?}", uparams);
|
||||
// println!("request qp {:?}", qparams);
|
||||
// kiprintln!("request path {}", pat);
|
||||
// kiprintln!("request up {:?}", uparams);
|
||||
// kiprintln!("request qp {:?}", qparams);
|
||||
match pat {
|
||||
"/debug" => {
|
||||
println!("current state {:?}", state);
|
||||
kiprintln!("current state {:?}", state);
|
||||
}
|
||||
"/all" => {
|
||||
let res = UIRes::All(state.to_owned());
|
||||
@ -219,7 +219,9 @@ fn handle_get(our: &Address, req: IncomingHttpRequest, state: &mut State) -> any
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
_ => {
|
||||
kiprintln!("wtf");
|
||||
}
|
||||
}
|
||||
send_response(StatusCode::CREATED, None, vec![]);
|
||||
Ok(())
|
||||
@ -238,7 +240,7 @@ fn parse_test() {
|
||||
{"auth_multi":{"domain":".x.com","expirationDate":1736167622.15024,"hostOnly":false,"httpOnly":true,"name":"auth_multi","path":"/","sameSite":"lax","secure":true,"session":false,"storeId":"0","value":"\"1710606417324015616:604ed700cfb5c8a5d2665086503f1ec8b6032ef4\"","id":1},"auth_token":{"domain":".x.com","expirationDate":1736097942.573061,"hostOnly":false,"httpOnly":true,"name":"auth_token","path":"/","sameSite":"no_restriction","secure":true,"session":false,"storeId":"0","value":"2527de3d3719d900cd5658525e559d0966d86662","id":2},"ct0":{"domain":".x.com","expirationDate":1736097942.861119,"hostOnly":false,"httpOnly":false,"name":"ct0","path":"/","sameSite":"lax","secure":true,"session":false,"storeId":"0","value":"1461eb581cb824ea00b652d27a735f1abebe2b47de834cddd624afdbee20c4f033972cb63fd298d0db8cded9a75429df3907ced5bb375f12cf02100825b16f7c02a00253ca1e8883b60ace17ccea1622","id":3},"dnt":{"domain":".x.com","expirationDate":1736097942.572255,"hostOnly":false,"httpOnly":false,"name":"dnt","path":"/","sameSite":"no_restriction","secure":true,"session":false,"storeId":"0","value":"1","id":4},"external_referer":{"domain":".x.com","expirationDate":1721160063.509523,"hostOnly":false,"httpOnly":false,"name":"external_referer","path":"/","sameSite":"unspecified","secure":true,"session":false,"storeId":"0","value":"padhuUp37zjgzgv1mFWxJ12Ozwit7owX|0|8e8t2xd8A2w%3D","id":5},"guest_id":{"domain":".x.com","expirationDate":1736097942.861021,"hostOnly":false,"httpOnly":false,"name":"guest_id","path":"/","sameSite":"no_restriction","secure":true,"session":false,"storeId":"0","value":"v1%3A172054594269674803","id":6},"guest_id_ads":{"domain":".x.com","expirationDate":1736167616.625858,"hostOnly":false,"httpOnly":false,"name":"guest_id_ads","path":"/","sameSite":"no_restriction","secure":true,"session":false,"storeId":"0","value":"v1%3A172054594269674803","id":7},"guest_id_marketing":{"domain":".x.com","expirationDate":1736167616.625932,"hostOnly":false,"httpOnly":false,"name":"guest_id_marketing","path":"/","sameSite":"no_restriction","secure":true,"session":false,"storeId":"0","value":"v1%3A172054594269674803","id":8},"kdt":{"domain":".x.com","expirationDate":1736097942.572385,"hostOnly":false,"httpOnly":true,"name":"kdt","path":"/","sameSite":"unspecified","secure":true,"session":false,"storeId":"0","value":"iWdBqeAH3UcgpwzPxi6CZ2lRTk4Fqia3OR5VbiSo","id":9},"personalization_id":{"domain":".x.com","expirationDate":1736167616.625994,"hostOnly":false,"httpOnly":false,"name":"personalization_id","path":"/","sameSite":"no_restriction","secure":true,"session":false,"storeId":"0","value":"\"v1_O5kcdlrANZbUakXhbmlSTw==\"","id":10},"twid":{"domain":".x.com","expirationDate":1736167616.773335,"hostOnly":false,"httpOnly":false,"name":"twid","path":"/","sameSite":"no_restriction","secure":true,"session":false,"storeId":"0","value":"u%3D1809740330922831872","id":11},"d_prefs":{"domain":"x.com","hostOnly":true,"httpOnly":false,"name":"d_prefs","path":"/","sameSite":"unspecified","secure":true,"session":true,"storeId":"0","value":"MjoxLGNvbnNlbnRfdmVyc2lvbjoyLHRleHRfdmVyc2lvbjoxMDAw","id":12},"lang":{"domain":"x.com","hostOnly":true,"httpOnly":false,"name":"lang","path":"/","sameSite":"unspecified","secure":false,"session":true,"storeId":"0","value":"en","id":13}}
|
||||
"#;
|
||||
let pj = serde_json::from_str::<CookieMap>(str);
|
||||
println!("json parsing test {:?}", pj);
|
||||
kiprintln!("json parsing test {:?}", pj);
|
||||
// let jason = r#"
|
||||
// {
|
||||
// "domain": ".x.com",
|
||||
@ -256,16 +258,16 @@ fn parse_test() {
|
||||
// }
|
||||
// "#;
|
||||
// let pj = serde_json::from_str::<Cookie>(jason);
|
||||
// println!("json parsing test {:?}", pj);
|
||||
// kiprintln!("json parsing test {:?}", pj);
|
||||
// // let example: UIReq = UIReq::SetAPIKey(APIRes {
|
||||
// // app: "foo".to_string(),
|
||||
// // api_key: "bar".to_string(),
|
||||
// // });
|
||||
// // let value = serde_json::to_string(&example)?;
|
||||
// // println!("expected json {}", value);
|
||||
// // kiprintln!("expected json {}", value);
|
||||
}
|
||||
fn handle_post(our: &Address, req: IncomingHttpRequest, state: &mut State) -> anyhow::Result<()> {
|
||||
println!("cokies post request!");
|
||||
kiprintln!("cokies post request!");
|
||||
// parse_test();
|
||||
|
||||
// let conc = format!("{}:{}{}", our.process(), our.package_id(), "/api");
|
||||
@ -276,7 +278,7 @@ fn handle_post(our: &Address, req: IncomingHttpRequest, state: &mut State) -> an
|
||||
// Fail silently if we can't parse the request
|
||||
return Ok(());
|
||||
};
|
||||
println!("post body {:?}", post_request);
|
||||
kiprintln!("post body {:?}", post_request);
|
||||
|
||||
match post_request {
|
||||
UIReq::SetCookie { app, cookie } => {
|
||||
@ -294,22 +296,26 @@ fn handle_post(our: &Address, req: IncomingHttpRequest, state: &mut State) -> an
|
||||
Ok(())
|
||||
}
|
||||
call_init!(init);
|
||||
fn init(our: Address) {
|
||||
fn init_http() -> anyhow::Result<()> {
|
||||
let mut http_server = HttpServer::new(5);
|
||||
let http_config = HttpBindingConfig::default();
|
||||
|
||||
let ws_config = WsBindingConfig::default();
|
||||
http_server.bind_ws_path("/", ws_config.clone());
|
||||
// REST API
|
||||
http_server.bind_http_path("/", http_config.clone());
|
||||
http_server.bind_http_path("/api", http_config.clone());
|
||||
http_server.bind_http_path("/api/all", http_config.clone());
|
||||
http_server.bind_http_path("/api/app", http_config.clone());
|
||||
http_server.bind_ws_path("/", ws_config.clone())?;
|
||||
http_server.bind_http_path("/", http_config.clone())?;
|
||||
http_server.bind_http_path("/api", http_config.clone())?;
|
||||
http_server.bind_http_path("/api/all", http_config.clone())?;
|
||||
http_server.bind_http_path("/api/app", http_config.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
fn init(our: Address) {
|
||||
kiprintln!("begin cookies");
|
||||
let _ = init_http();
|
||||
loop {
|
||||
match handle_message(&our) {
|
||||
Ok(()) => {}
|
||||
Err(e) => {
|
||||
println!("error: {:?}", e);
|
||||
kiprintln!("error: {:?}", e);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -32,6 +32,7 @@
|
||||
"request_networking": true,
|
||||
"request_capabilities": [
|
||||
"homepage:homepage:sys",
|
||||
"vfs:distro:sys",
|
||||
"http_server:distro:sys",
|
||||
"http_client:distro:sys"
|
||||
],
|
||||
|
@ -119,17 +119,21 @@ fn send_json(res: UIRes) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
call_init!(init);
|
||||
fn init(our: Address) {
|
||||
println!("begin proxy");
|
||||
println!("our {:?}", our);
|
||||
println!("our {:?}", our.process());
|
||||
fn init_http() -> anyhow::Result<()> {
|
||||
let mut http_server = HttpServer::new(5);
|
||||
let http_config = HttpBindingConfig::default();
|
||||
|
||||
let ws_config = WsBindingConfig::default();
|
||||
http_server.bind_ws_path("/", ws_config.clone());
|
||||
// REST API
|
||||
http_server.bind_http_path("/api", http_config.clone());
|
||||
http_server.bind_ws_path("/", ws_config.clone())?;
|
||||
http_server.bind_http_path("/", http_config.clone())?;
|
||||
http_server.bind_http_path("/api", http_config.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
fn init(our: Address) {
|
||||
println!("begin proxy");
|
||||
println!("our {:?}", our);
|
||||
println!("our {:?}", our.process());
|
||||
let _ = init_http();
|
||||
loop {
|
||||
match handle_message(&our) {
|
||||
Ok(()) => {}
|
||||
|
1
twittok/src/ICON
Normal file
1
twittok/src/ICON
Normal file
File diff suppressed because one or more lines are too long
@ -3,6 +3,7 @@ use std::str::FromStr;
|
||||
|
||||
use kinode_process_lib::{
|
||||
await_message, call_init, get_blob,
|
||||
homepage::add_to_homepage,
|
||||
http::{
|
||||
server::{
|
||||
send_response, send_ws_push, HttpBindingConfig, HttpServer, HttpServerRequest,
|
||||
@ -14,6 +15,7 @@ use kinode_process_lib::{
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
const ICON: &str = include_str!("ICON");
|
||||
wit_bindgen::generate!({
|
||||
path: "target/wit",
|
||||
world: "tok-sortugdev-dot-os-v0",
|
||||
@ -261,21 +263,25 @@ fn handle_message(
|
||||
}
|
||||
|
||||
call_init!(init);
|
||||
fn init(our: Address) {
|
||||
println!("begin");
|
||||
|
||||
let mut message_archive: MessageArchive = HashMap::new();
|
||||
let mut channel_id = 0;
|
||||
|
||||
fn init_http(our: &Address) -> anyhow::Result<()> {
|
||||
let mut http_server = HttpServer::new(5);
|
||||
let http_config = HttpBindingConfig::default();
|
||||
|
||||
let ws_config = WsBindingConfig::default();
|
||||
|
||||
http_server.bind_ws_path("/", ws_config.clone());
|
||||
http_server.bind_ws_path("/", ws_config.clone())?;
|
||||
// REST API
|
||||
http_server.bind_http_path("/api", http_config.clone());
|
||||
http_server.serve_ui(&our, "ui", vec!["/"], http_config.clone());
|
||||
http_server.bind_http_path("/api", http_config.clone())?;
|
||||
http_server.serve_ui(our, "ui", vec!["/"], http_config.clone())?;
|
||||
add_to_homepage("抖推", Some(ICON), Some("/"), None);
|
||||
Ok(())
|
||||
}
|
||||
fn init(our: Address) {
|
||||
println!("begin");
|
||||
|
||||
let mut message_archive: MessageArchive = HashMap::new();
|
||||
let mut channel_id = 0;
|
||||
let _ = init_http(&our);
|
||||
|
||||
loop {
|
||||
match handle_message(&our, &mut message_archive, &mut channel_id) {
|
||||
|
@ -10,6 +10,7 @@ import { useEffect, useState } from "react";
|
||||
import { useHistory, Router, Route } from "./logic/router";
|
||||
import { useQueryClient } from "@tanstack/react-query";
|
||||
import { twatterCookieQ } from "./logic/queries";
|
||||
import { PROCESS_ID } from "./logic/constants";
|
||||
|
||||
function App() {
|
||||
const [loading, setLoading] = useState(true);
|
||||
@ -19,16 +20,16 @@ function App() {
|
||||
await qc.prefetchQuery(twatterCookieQ);
|
||||
}
|
||||
useEffect(() => {
|
||||
init().then(_ => {
|
||||
init().then((_) => {
|
||||
setLoading(false);
|
||||
});
|
||||
pref();
|
||||
}, []);
|
||||
// const { init } = useGlobalState();
|
||||
if (loading) return <img className="spinner gc" src={spinner} />
|
||||
if (loading) return <img className="spinner gc" src={spinner} />;
|
||||
return (
|
||||
<>
|
||||
<Router basePath="/">
|
||||
<Router basePath={`/${PROCESS_ID}`}>
|
||||
<Route path="/" component={Nav} />
|
||||
<Route path="/cookies" component={Cookies} />
|
||||
<Route path="/main" component={Loader} />
|
||||
|
@ -1,20 +1,17 @@
|
||||
import {
|
||||
COOKIE_PROCESS_ID,
|
||||
PROXY_PROCESS_ID,
|
||||
} from "./constants";
|
||||
import { COOKIE_PROCESS_ID, NODE_URL, PROXY_PROCESS_ID } from "./constants";
|
||||
import { APIRes, CookieMap, CookieRes, CookiesRes } from "./types";
|
||||
|
||||
export async function fetchAllCookies(): Promise<CookiesRes> {
|
||||
const res = await getCookie(`/all`);
|
||||
return res.All
|
||||
return res.All;
|
||||
}
|
||||
export async function fetchCookie(name: string): Promise<CookieRes> {
|
||||
const res = await getCookie(`/app?name=${name}&api=false`);
|
||||
return res.App
|
||||
return res.App;
|
||||
}
|
||||
export async function fetchAPIKey(name: string): Promise<APIRes> {
|
||||
const res = await getCookie(`/app?name=${name}&api=true`);
|
||||
return res.App
|
||||
return res.App;
|
||||
}
|
||||
export async function saveAPIKey(app: string, value: string) {
|
||||
const payload = { SetAPIKey: { app, api_key: value } };
|
||||
@ -26,7 +23,7 @@ export async function saveCookie(app: string, value: CookieMap) {
|
||||
}
|
||||
|
||||
async function getCookie(path: string) {
|
||||
// const url = `${NODE_URL}/${COOKIE_PROCESS_ID}${path}`
|
||||
// const url = `${NODE_URL}/${COOKIE_PROCESS_ID}/api${path}`;
|
||||
const url = `/${COOKIE_PROCESS_ID}/api${path}`;
|
||||
const res = await fetch(url);
|
||||
const j = await res.json();
|
||||
@ -53,10 +50,10 @@ export async function postProxy(payload: any, naked = false) {
|
||||
// const url = `${NODE_URL}/${PROXY_PROCESS_ID}`
|
||||
const url = `/${PROXY_PROCESS_ID}/api`;
|
||||
const res = await fetch(url, opts);
|
||||
if (naked) return res
|
||||
console.log(res, "post proxy res")
|
||||
if (naked) return res;
|
||||
console.log(res, "post proxy res");
|
||||
const j = await res.json();
|
||||
console.log(j, "post proxy json")
|
||||
console.log(j, "post proxy json");
|
||||
return j;
|
||||
}
|
||||
async function getProxy() {
|
||||
|
@ -1,11 +1,13 @@
|
||||
export const COOKIE_PROCESS_ID = "cookies:tok:sortugdev.os";
|
||||
export const PROXY_PROCESS_ID = "proxy:tok:sortugdev.os";
|
||||
export const NODE_URL = "http://localhost:8095";
|
||||
export const PROCESS_ID = "twittok:tok:sortugdev.os";
|
||||
export const NODE_URL = "http://localhost:8080";
|
||||
|
||||
export const TIMELINE_URL =
|
||||
"https://x.com/i/api/graphql/A_qu1009UoeQToazaP4YCg/HomeTimeline";
|
||||
export const translationPrompt = "You will be provided with a text in Thai, from Twitter, so it's rather casual in that internet slang way. Your task is to translate it into English. Please keep the tone of the original as much as possible.";
|
||||
export const translationPrompt =
|
||||
"You will be provided with a text in Thai, from Twitter, so it's rather casual in that internet slang way. Your task is to translate it into English. Please keep the tone of the original as much as possible.";
|
||||
|
||||
export const DefaultPrompts = {
|
||||
translate: translationPrompt
|
||||
}
|
||||
translate: translationPrompt,
|
||||
};
|
||||
|
@ -1,50 +1,57 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import react from '@vitejs/plugin-react'
|
||||
import { defineConfig } from "vite";
|
||||
import react from "@vitejs/plugin-react";
|
||||
|
||||
/*
|
||||
If you are developing a UI outside of a Kinode project,
|
||||
comment out the following 2 lines:
|
||||
*/
|
||||
import manifest from '../pkg/manifest.json'
|
||||
import metadata from '../metadata.json'
|
||||
|
||||
/*
|
||||
IMPORTANT:
|
||||
This must match the process name from pkg/manifest.json + pkg/metadata.json
|
||||
The format is "/" + "process_name:package_name:publisher_node"
|
||||
*/
|
||||
const BASE_URL = `/${manifest[0].process_name}:${metadata.properties.package_name}:${metadata.properties.publisher}`;
|
||||
const BASE_URL = "/twittok:tok:sortugdev.os";
|
||||
const COOKIE_PROCESS_ID = "cookies:tok:sortugdev.os";
|
||||
const PROXY_PROCESS_ID = "proxy:tok:sortugdev.os";
|
||||
|
||||
// This is the proxy URL, it must match the node you are developing against
|
||||
const PROXY_URL = (process.env.VITE_NODE_URL || 'http://127.0.0.1:8080').replace('localhost', '127.0.0.1');
|
||||
const PROXY_URL = (
|
||||
process.env.VITE_NODE_URL || "http://127.0.0.1:8080"
|
||||
).replace("localhost", "127.0.0.1");
|
||||
|
||||
console.log('process.env.VITE_NODE_URL', process.env.VITE_NODE_URL, PROXY_URL);
|
||||
console.log("process.env.VITE_NODE_URL", process.env.VITE_NODE_URL, PROXY_URL);
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [react()],
|
||||
base: BASE_URL,
|
||||
build: {
|
||||
rollupOptions: {
|
||||
external: ['/our.js']
|
||||
}
|
||||
external: ["/our.js"],
|
||||
},
|
||||
},
|
||||
server: {
|
||||
open: true,
|
||||
proxy: {
|
||||
'/our': {
|
||||
target: PROXY_URL,
|
||||
changeOrigin: true,
|
||||
},
|
||||
[`${BASE_URL}/our.js`]: {
|
||||
target: PROXY_URL,
|
||||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(BASE_URL, ''),
|
||||
},
|
||||
// This route will match all other HTTP requests to the backend
|
||||
[`^${BASE_URL}/(?!(@vite/client|src/.*|node_modules/.*|@react-refresh|$))`]: {
|
||||
"^.*": {
|
||||
target: PROXY_URL,
|
||||
changeOrigin: true,
|
||||
},
|
||||
// "/our": {
|
||||
// target: PROXY_URL,
|
||||
// changeOrigin: true,
|
||||
// },
|
||||
// [`^/${COOKIE_PROCESS_ID}/api.*`]: {
|
||||
// target: PROXY_URL,
|
||||
// changeOrigin: true,
|
||||
// rewrite: (path) => path.replace(COOKIE_PROCESS_ID, ""),
|
||||
// },
|
||||
// [`/${PROXY_PROCESS_ID}`]: {
|
||||
// target: PROXY_URL,
|
||||
// changeOrigin: true,
|
||||
// rewrite: (path) => path.replace(PROXY_PROCESS_ID, ""),
|
||||
// },
|
||||
// [`${BASE_URL}/our.js`]: {
|
||||
// target: PROXY_URL,
|
||||
// changeOrigin: true,
|
||||
// rewrite: (path) => path.replace(BASE_URL, ""),
|
||||
// },
|
||||
// // This route will match all other HTTP requests to the backend
|
||||
// [`^${BASE_URL}/(?!(@vite/client|src/.*|node_modules/.*|@react-refresh|$))`]:
|
||||
// {
|
||||
// target: PROXY_URL,
|
||||
// changeOrigin: true,
|
||||
// },
|
||||
// '/example': {
|
||||
// target: PROXY_URL,
|
||||
// changeOrigin: true,
|
||||
@ -62,6 +69,6 @@ export default defineConfig({
|
||||
// });
|
||||
// },
|
||||
// },
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user