Add ChatGLM API (#567)

* Add ChatGLM API

* add minimal build

* a small patch

---------

Co-authored-by: josc146 <josStorer@outlook.com>
This commit is contained in:
AceLam
2023-12-03 23:31:04 +08:00
committed by GitHub
co-authored by josc146
parent 70d6b794f0
commit d24958f9a0
9 changed files with 4629 additions and 2390 deletions
+8 -1
View File
@@ -9,6 +9,7 @@ function createParser(onParse) {
let eventId
let eventName
let data
let extra
reset()
return {
feed,
@@ -78,17 +79,19 @@ function createParser(onParse) {
function parseEventStreamLine(lineBuffer, index, fieldLength, lineLength) {
if (lineLength === 0) {
if (data.length > 0) {
if (data.length > 0 || extra) {
onParse({
type: 'event',
id: eventId,
event: eventName || void 0,
data: data.slice(0, -1),
extra: extra || void 0,
// remove trailing newline
})
data = ''
eventId = void 0
extra = void 0
}
eventName = void 0
return
@@ -120,6 +123,10 @@ function createParser(onParse) {
value: retry,
})
}
} else {
const str = `{"${field}":${value}}`
extra = extra ?? []
extra.push(JSON.parse(str))
}
}
}
+43
View File
@@ -0,0 +1,43 @@
import jwt from 'jsonwebtoken'
let jwtToken = null
let tokenExpiration = null // Declare tokenExpiration in the module scope
function generateToken(apiKey, timeoutSeconds) {
const parts = apiKey.split('.')
if (parts.length !== 2) {
throw new Error('Invalid API key')
}
const ms = Date.now()
const currentSeconds = Math.floor(ms / 1000)
const [id, secret] = parts
const payload = {
api_key: id,
exp: currentSeconds + timeoutSeconds,
timestamp: currentSeconds,
}
jwtToken = jwt.sign(payload, secret, {
header: {
alg: 'HS256',
typ: 'JWT',
sign_type: 'SIGN',
},
})
tokenExpiration = ms + timeoutSeconds * 1000
}
function shouldRegenerateToken() {
const ms = Date.now()
return !jwtToken || ms >= tokenExpiration
}
function getToken(apiKey) {
if (shouldRegenerateToken()) {
generateToken(apiKey, 86400) // Hard-coded to regenerate the token every 24 hours
}
return jwtToken
}
export { getToken }