11import ms from "ms" ;
22import supabase from "./supabase.js" ;
3+ import Client from "justbrowse.io" ;
4+ var clients = [ ] ;
35
46async function getTokens ( ) {
57 let { data : sessiontokens , error } = await supabase
@@ -9,7 +11,104 @@ async function getTokens() {
911
1012 return sessiontokens ;
1113}
14+ async function initChat ( token ) {
15+ try {
16+ var client = new Client ( token , process . env . API_TOKEN ) ;
17+ await client . init ( ) ;
18+ clients . push ( { client, token } ) ;
19+ } catch ( err ) {
20+ console . error ( err ) ;
21+ }
22+ console . log ( "loaded" ) ;
23+ }
24+
25+ async function useToken ( ) {
26+ var tokens = await getTokens ( ) ;
27+ var t = tokens
28+ . filter ( ( x ) => x . lastUse == null && x . messages <= 2 )
29+ . sort ( ( a , b ) => {
30+ if ( a . messages > b . messages ) {
31+ return 1 ;
32+ }
33+ if ( a . messages < b . messages ) {
34+ return - 1 ;
35+ }
36+ if ( a . messages == b . messages ) {
37+ return 0 ;
38+ }
39+ } ) ;
40+ var token = t [ getRndInteger ( 0 , t . length ) ] ;
41+ var client = clients . find ( ( x ) => x . token == token . sessionToken ) ;
1242
43+ return client ;
44+ }
45+ function getRndInteger ( min , max ) {
46+ return Math . floor ( Math . random ( ) * ( max - min + 1 ) ) + min ;
47+ }
48+ async function addMessage ( token ) {
49+ let { data : sessiontokens , error } = await supabase
50+ . from ( "sessiontokens" )
51+ . select ( "*" )
52+ . eq ( "sessionToken" , token ) ;
53+ var tokenObj = sessiontokens [ 0 ] ;
54+ if ( tokenObj ) {
55+ if ( tokenObj . totalMessages >= 30 ) {
56+ const { data, error } = await supabase
57+ . from ( "sessiontokens" )
58+ . update ( {
59+ messages : tokenObj . messages + 1 ,
60+ totalMessages : tokenObj . totalMessages + 1 ,
61+ lastUse : Date . now ( ) ,
62+ } )
63+ . eq ( "sessionToken" , token ) ;
64+ var index = clients . findIndex ( ( x ) => x . token == tokenObj . sessionToken ) ;
65+ clients . splice ( index , 1 ) ; // 2nd parameter means remove one item only
66+ } else {
67+ const { data, error } = await supabase
68+ . from ( "sessiontokens" )
69+ . update ( {
70+ messages : tokenObj . messages + 1 ,
71+ totalMessages : tokenObj . totalMessages + 1 ,
72+ } )
73+ . eq ( "sessionToken" , token ) ;
74+ }
75+ }
76+ }
77+ async function removeMessage ( token ) {
78+ let { data : sessiontokens , error } = await supabase
79+ . from ( "sessiontokens" )
80+ . select ( "*" )
81+ . eq ( "sessionToken" , token ) ;
82+ var tokenObj = sessiontokens [ 0 ] ;
83+ if ( tokenObj ) {
84+ const { data, error } = await supabase
85+ . from ( "sessiontokens" )
86+ . update ( { messages : tokenObj . messages - 1 } )
87+ . eq ( "sessionToken" , token ) ;
88+ }
89+ }
90+
91+ async function initTokens ( ) {
92+ var tokens = await getTokens ( ) ;
93+ for ( var i = 0 ; i < tokens . length ; i ++ ) {
94+ var token = tokens [ i ] ;
95+ await initChat ( token . sessionToken ) ;
96+ }
97+ }
98+ async function addToken ( sessionToken ) {
99+ const { data, error } = await supabase . from ( "sessiontokens" ) . insert ( [
100+ {
101+ sessionToken : sessionToken ,
102+ messages : 0 ,
103+ totalMessages : 0 ,
104+ lastUse : null ,
105+ } ,
106+ ] ) ;
107+ if ( error ) {
108+ return error . message ;
109+ }
110+ await initChat ( sessionToken ) ;
111+ }
13112async function reloadTokens ( ) {
14113 var tokens = await getTokens ( ) ;
15114 var t = tokens . filter ( ( x ) => x . lastUse != null ) ;
@@ -22,6 +121,15 @@ async function reloadTokens() {
22121 . from ( "sessiontokens" )
23122 . update ( { lastUse : null , messages : 0 , totalMessages : 0 } )
24123 . eq ( "id" , t . id ) ;
124+ await initChat ( sessionToken ) ;
25125 }
26126 }
27127}
128+ export {
129+ addToken ,
130+ initTokens ,
131+ addMessage ,
132+ removeMessage ,
133+ useToken ,
134+ reloadTokens ,
135+ } ;
0 commit comments