akkun3704 commited on
Commit
e453f41
·
1 Parent(s): cb0e513

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +28 -68
index.js CHANGED
@@ -1,29 +1,18 @@
1
  const os = require('os')
2
- const uuid = require('uuid')
3
  const bytes = require('bytes')
4
  const logger = require('morgan')
5
  const express = require('express')
 
6
  const CharacterAI = require('node_characterai')
7
- const { executablePath } = require('puppeteer')
8
 
9
- const sessions = new Map()
 
10
 
11
  const app = express()
12
- app.set('trust proxy', 1)
13
  app.set('json spaces', 4)
14
  app.use(logger('dev'))
15
 
16
- app.use(async (req, res, next) => {
17
- for (let [sessionId, characterAI] of sessions) {
18
- const timeReset = 10 * 60 * 1000 // 10 min
19
- if (Date.now() - characterAI.lastFetch > timeReset) {
20
- await characterAI.unauthenticate()
21
- sessions.delete(sessionId)
22
- }
23
- }
24
- next()
25
- })
26
-
27
  app.all('/', (req, res) => {
28
  const obj = {}
29
  const used = process.memoryUsage()
@@ -41,56 +30,36 @@ app.all('/', (req, res) => {
41
  })
42
  })
43
 
44
- app.get('/ip', (req, res) => res.send(req.ip))
45
-
46
- app.get('/sessions', (_, res) => res.send(eval(Array.from(sessions))))
47
-
48
  app.get('/api', async (req, res) => {
49
  try {
50
- const { characterId, text, sessionId } = req.query
51
  if (!characterId) return res.json({ success: false, message: 'Input parameter characterId' })
52
  if (!text) return res.json({ success: false, message: 'Input parameter text' })
53
 
54
- if (sessionId) {
55
- if (!sessions.has(sessionId)) return res.json({ success: false, message: 'sessionId not found' })
56
- const characterAI = sessions.get(sessionId)
57
- sessions.set(sessionId, Object.assign(characterAI, { lastFetch: Date.now() }))
58
-
59
- const chat = await characterAI.createOrContinueChat(characterId)
60
- const response = await chat.sendAndAwaitResponse(text, true)
61
- const urlAvatar = `https://characterai.io/i/80/static/avatars/${response.srcAvatarFileName}`
62
-
63
- delete response.chat
64
- res.json({
65
- success: true,
66
- message: 'sessionId will be deleted in 10 minutes if not used',
67
- result: { ...response, urlAvatar, sessionId }
68
  })
69
- return
 
 
 
70
  }
71
 
72
- const id = uuid.v4()
73
- const characterAI = new CharacterAI()
74
- characterAI.requester.puppeteerPath = executablePath()
75
- await characterAI.authenticateWithToken(process.env.cToken)
76
- sessions.set(id, Object.assign(characterAI, { lastFetch: Date.now() }))
77
-
78
- const chat = await characterAI.createOrContinueChat(characterId)
79
  const response = await chat.sendAndAwaitResponse(text, true)
80
  const urlAvatar = `https://characterai.io/i/80/static/avatars/${response.srcAvatarFileName}`
81
-
82
  delete response.chat
83
  res.json({
84
  success: true,
85
- message: 'sessionId will be deleted in 10 minutes if not used',
86
- result: { ...response, urlAvatar, sessionId: id }
87
  })
88
  } catch (e) {
89
  console.log(e)
90
- res.json({
91
- error: true,
92
- message: String(e) === '[object Object]' ? 'Internal Server Error' : String(e)
93
- })
94
  }
95
  })
96
 
@@ -99,19 +68,13 @@ app.get('/api/chara/info', async (req, res) => {
99
  const { characterId } = req.query
100
  if (!characterId) return res.json({ success: false, message: 'Input parameter characterId' })
101
 
102
- const characterAI = new CharacterAI()
103
- characterAI.requester.puppeteerPath = executablePath()
104
- await characterAI.authenticateWithToken(process.env.cToken)
105
  const result = await characterAI.fetchCharacterInfo(characterId)
106
  if (!result) return res.json({ success: false, message: 'Invalid characterId' })
107
 
108
  res.json({ success: true, message: '', result })
109
  } catch (e) {
110
  console.log(e)
111
- res.json({
112
- error: true,
113
- message: String(e) === '[object Object]' ? 'Internal Server Error' : String(e)
114
- })
115
  }
116
  })
117
 
@@ -120,25 +83,22 @@ app.get('/api/chara/search', async (req, res) => {
120
  const { name } = req.query
121
  if (!name) return res.json({ success: false, message: 'Input parameter name' })
122
 
123
- const characterAI = new CharacterAI()
124
- characterAI.requester.puppeteerPath = executablePath()
125
- await characterAI.authenticateWithToken(process.env.cToken)
126
- const result = await characterAI.searchCharacters(name)
127
- if (!result.characters.length) return res.json({ success: false, message: 'Character not found' })
128
 
129
- res.json({ success: true, message: '', result: result.characters })
130
  } catch (e) {
131
  console.log(e)
132
- res.json({
133
- error: true,
134
- message: String(e) === '[object Object]' ? 'Internal Server Error' : String(e)
135
- })
136
  }
137
  })
138
 
139
  const PORT = process.env.PORT || 7860
140
- app.listen(PORT, () => console.log('App running on port', PORT))
 
 
 
141
 
142
  function formatSize(num) {
143
  return bytes(+num, { unitSeparator: ' ' })
144
- }
 
1
  const os = require('os')
 
2
  const bytes = require('bytes')
3
  const logger = require('morgan')
4
  const express = require('express')
5
+ const puppeteer = require('puppeteer')
6
  const CharacterAI = require('node_characterai')
7
+ const Parser = require('node_characterai/parser')
8
 
9
+ const characterAI = new CharacterAI()
10
+ characterAI.puppeteerPath = puppeteer.executablePath()
11
 
12
  const app = express()
 
13
  app.set('json spaces', 4)
14
  app.use(logger('dev'))
15
 
 
 
 
 
 
 
 
 
 
 
 
16
  app.all('/', (req, res) => {
17
  const obj = {}
18
  const used = process.memoryUsage()
 
30
  })
31
  })
32
 
 
 
 
 
33
  app.get('/api', async (req, res) => {
34
  try {
35
+ let { characterId, text, sessionId } = req.query
36
  if (!characterId) return res.json({ success: false, message: 'Input parameter characterId' })
37
  if (!text) return res.json({ success: false, message: 'Input parameter text' })
38
 
39
+ if (!sessionId) {
40
+ const request = await characterAI.requester.request('https://beta.character.ai/chat/history/create/', {
41
+ headers: characterAI.getHeaders(), method: 'POST',
42
+ body: Parser.stringify({ character_external_id: characterId })
 
 
 
 
 
 
 
 
 
 
43
  })
44
+ if (!request.ok()) return res.json({ success: false, message: 'Couldn\'t create a new chat' })
45
+
46
+ const json = await Parser.parseJSON(request)
47
+ sessionId = json.external_id
48
  }
49
 
50
+ const chat = await characterAI.createOrContinueChat(characterId, sessionId)
 
 
 
 
 
 
51
  const response = await chat.sendAndAwaitResponse(text, true)
52
  const urlAvatar = `https://characterai.io/i/80/static/avatars/${response.srcAvatarFileName}`
53
+
54
  delete response.chat
55
  res.json({
56
  success: true,
57
+ message: '',
58
+ result: { ...response, urlAvatar, sessionId }
59
  })
60
  } catch (e) {
61
  console.log(e)
62
+ res.json({ error: true, message: String(e) === '[object Object]' ? 'Internal Server Error' : String(e) })
 
 
 
63
  }
64
  })
65
 
 
68
  const { characterId } = req.query
69
  if (!characterId) return res.json({ success: false, message: 'Input parameter characterId' })
70
 
 
 
 
71
  const result = await characterAI.fetchCharacterInfo(characterId)
72
  if (!result) return res.json({ success: false, message: 'Invalid characterId' })
73
 
74
  res.json({ success: true, message: '', result })
75
  } catch (e) {
76
  console.log(e)
77
+ res.json({ error: true, message: String(e) === '[object Object]' ? 'Internal Server Error' : String(e) })
 
 
 
78
  }
79
  })
80
 
 
83
  const { name } = req.query
84
  if (!name) return res.json({ success: false, message: 'Input parameter name' })
85
 
86
+ const { characters } = await characterAI.searchCharacters(name)
87
+ if (!characters.length) return res.json({ success: false, message: 'Character not found' })
 
 
 
88
 
89
+ res.json({ success: true, message: '', result: characters })
90
  } catch (e) {
91
  console.log(e)
92
+ res.json({ error: true, message: String(e) === '[object Object]' ? 'Internal Server Error' : String(e) })
 
 
 
93
  }
94
  })
95
 
96
  const PORT = process.env.PORT || 7860
97
+ app.listen(PORT, async () => {
98
+ console.log('App running on port', PORT)
99
+ await characterAI.authenticateWithToken(process.env.cToken)
100
+ })
101
 
102
  function formatSize(num) {
103
  return bytes(+num, { unitSeparator: ' ' })
104
+ }