Khrisna commited on
Commit
0fc7046
·
1 Parent(s): 39e3efe

Create index.js

Browse files
Files changed (1) hide show
  1. index.js +104 -0
index.js ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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()
19
+ for (let key in used) obj[key] = formatSize(used[key])
20
+
21
+ const totalmem = os.totalmem()
22
+ const freemem = os.freemem()
23
+ obj.memoryUsage = `${formatSize(totalmem - freemem)} / ${formatSize(totalmem)}`
24
+
25
+ res.json({
26
+ success: true,
27
+ message: 'Hello World!',
28
+ uptime: new Date(process.uptime() * 1000).toUTCString().split(' ')[4],
29
+ status: obj
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
+
66
+ app.get('/api/chara/info', async (req, res) => {
67
+ try {
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
+
81
+ app.get('/api/chara/search', async (req, res) => {
82
+ try {
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
+ }